From d41252133fa2f45c512c2c723414496b0aa5945d Mon Sep 17 00:00:00 2001 From: pluslive Date: Tue, 28 Aug 2012 18:44:46 +0900 Subject: [PATCH 001/339] =?UTF-8?q?+live=20111106.1230=20=E3=82=92Merge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 1 + conf/conf_user_def.inc.php | 5 + conf/conf_user_def_live.inc.php | 71 + conf/conf_user_style.inc.php | 13 + lib/NgAbornCtl.php | 10 + lib/ShowThread.php | 43 +- lib/ShowThreadPc.php | 128 +- lib/live/default_view.inc.php | 81 ++ lib/live/live_ShowThread.php | 2050 +++++++++++++++++++++++++++ lib/live/live_ShowThreadPc.php | 1999 ++++++++++++++++++++++++++ lib/live/live_header.inc.php | 84 ++ lib/live/live_highlight_check.php | 48 + lib/live/live_highlight_convert.php | 45 + lib/live/live_post_form.inc.php | 173 +++ lib/live/live_view.inc.php | 106 ++ lib/live/live_view_ctl.inc.php | 112 ++ lib/read_footer.inc.php | 24 + lib/read_header.inc.php | 45 +- lib/sb_print.inc.php | 17 +- rep2/edit_aborn_word.php | 6 +- rep2/edit_conf_user.php | 82 +- rep2/editpref.php | 26 +- rep2/img/live.png | Bin 0 -> 364 bytes rep2/img/re.png | Bin 0 -> 369 bytes rep2/info_sp.php | 47 +- rep2/js/live_htmlpopup.js | 169 +++ rep2/js/live_htmlpopup_resizable.js | 356 +++++ rep2/js/preview_video_half.js | 98 ++ rep2/js/smartpopup.js | 11 +- rep2/live_control.php | 52 + rep2/live_frame.php | 74 + rep2/live_post.php | 1000 +++++++++++++ rep2/live_post_form.php | 212 +++ rep2/live_read.php | 532 +++++++ rep2/read.php | 24 + rep2/read_new.php | 14 +- rep2/skin/blackboard.php | 13 + rep2/skin/classicWP.php | 13 + rep2/skin/flat.php | 13 + rep2/skin/flat2.php | 13 + rep2/skin/live.php | 257 ++++ rep2/skin/live/bg.gif | Bin 0 -> 43 bytes rep2/skin/live2.php | 257 ++++ rep2/skin/live_box.php | 413 ++++++ rep2/skin/live_box2.php | 413 ++++++ rep2/skin/metal.php | 13 + rep2/skin/tangerine.php | 13 + rep2/title.php | 7 +- style/read_css.inc | 12 +- 49 files changed, 9100 insertions(+), 95 deletions(-) create mode 100755 conf/conf_user_def_live.inc.php create mode 100755 lib/live/default_view.inc.php create mode 100755 lib/live/live_ShowThread.php create mode 100755 lib/live/live_ShowThreadPc.php create mode 100755 lib/live/live_header.inc.php create mode 100755 lib/live/live_highlight_check.php create mode 100755 lib/live/live_highlight_convert.php create mode 100755 lib/live/live_post_form.inc.php create mode 100755 lib/live/live_view.inc.php create mode 100755 lib/live/live_view_ctl.inc.php mode change 100644 => 100755 lib/read_header.inc.php create mode 100755 rep2/img/live.png create mode 100755 rep2/img/re.png create mode 100755 rep2/js/live_htmlpopup.js create mode 100755 rep2/js/live_htmlpopup_resizable.js create mode 100755 rep2/js/preview_video_half.js create mode 100755 rep2/live_control.php create mode 100755 rep2/live_frame.php create mode 100755 rep2/live_post.php create mode 100755 rep2/live_post_form.php create mode 100755 rep2/live_read.php mode change 100644 => 100755 rep2/read_new.php create mode 100755 rep2/skin/live.php create mode 100755 rep2/skin/live/bg.gif create mode 100755 rep2/skin/live2.php create mode 100755 rep2/skin/live_box.php create mode 100755 rep2/skin/live_box2.php diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 937a711de..aaf4e8852 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -10,6 +10,7 @@ 'p2expack' => '120300.9999', // �g���p�b�N�̃o�[�W���� 'p2name' => 'expack', // rep2�̖��O 'p2custom' => '0', // �J�X�^���o�[�W���� + 'p2live' => '120824.0000', // +live�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}+{$_conf['p2expack']}"; diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index 1afa95b2c..644e4fe4f 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -501,6 +501,11 @@ include P2_CONFIG_DIR . '/conf_user_def_wiki.inc.php'; +// }}} +// {{{ +live + +include P2_CONFIG_DIR . '/conf_user_def_live.inc.php'; + // }}} /* diff --git a/conf/conf_user_def_live.inc.php b/conf/conf_user_def_live.inc.php new file mode 100755 index 000000000..b42464f73 --- /dev/null +++ b/conf/conf_user_def_live.inc.php @@ -0,0 +1,71 @@ + '��Ƀf�t�H���g�\��', '1' => '�������̂ݎ����p�\��', '2' => '��Ɏ����p�\��'); + +// ID������ O (�g��) P (����p2) Q (�t���u���E�U) I (iPhone) �𑾎��� +$conf_user_def['live.id_b'] = 0; // (0) +$conf_user_rad['live.id_b'] = array('1' => '����', '0' => '���Ȃ�'); + +// �A���n�C���C�g (�\���͈͂̃��X�݂̂ɘA��) +$conf_user_def['live.highlight_chain'] = 0; // (0) +$conf_user_rad['live.highlight_chain'] = array('1' => '����', '0' => '���Ȃ�'); + +// YouTube�v���r���[�\���̃T�C�Y +$conf_user_def['live.youtube_winsize'] = 0; // (0) +$conf_user_sel['live.youtube_winsize'] = array('0' => '�m�[�}���T�C�Y', '1' => '�n�[�t�T�C�Y'); + +// }}} +// {{{ ���������ݒ� + +// �\�����郌�X�� (100�ȉ�����) +$conf_user_def['live.before_respointer'] = "50"; // ("50") + +// ���������t���[���̍��� (px) +$conf_user_def['live.post_width'] = "85"; // ("85") + +// �f�t�H���g�̖������̕\�� +$conf_user_def['live.bbs_noname'] = 0; // (0) +$conf_user_rad['live.bbs_noname'] = array('1' => '����', '0' => '���Ȃ�'); + +// sage �� �� �� +$conf_user_def['live.mail_sage'] = 1; // (1) +$conf_user_rad['live.mail_sage'] = array('1' => '����', '0' => '���Ȃ�'); + +// �S�Ẳ��s�ƃX�y�[�X�̍폜 +$conf_user_def['live.msg'] = 1; // (1) +$conf_user_rad['live.msg'] = array('1' => '����', '0' => '���Ȃ�'); + +// [����Ƀ��X] �̕��@ +$conf_user_def['live.res_button'] = 0; // (0) +$conf_user_sel['live.res_button'] = array('0' => '[ re: ] �{�^��', '1' => '����', '2' => '���e���_�u���N���b�N'); + +// �����K���p�^�C�}�[ +$conf_user_def['live.write_regulation'] = 0; // (0) +$conf_user_sel['live.write_regulation'] = array('0' => '�^�C�}�[����', '1' => '15�b', '2' => '20�b', '3' => '30�b', '4' => '40�b', '5' => '50�b', '6' => '1��'); + +// ImageCache2�̃T���l�C���쐬 +$conf_user_def['live.ic2_onoff'] = "1"; // ("1") +$conf_user_rad['live.ic2_onoff'] = array('1' => 'on', '0' => 'off'); + +// }}} +// {{{ �������[�h/�X�N���[�� + +// �I�[�g�����[�h�̊Ԋu +$conf_user_def['live.reload_time'] = 2; // (2) +$conf_user_sel['live.reload_time'] = array('0' => '�����[�h����', '1' => '5�b', '2' => '10�b', '3' => '15�b', '4' => '20�b'); + +// �I�[�g�X�N���[���̊��炩�� (�ł����炩 1 �A�X�N���[������ 0) +$conf_user_def['live.scroll_move'] = 3; // (3) + +// �I�[�g�X�N���[���̑��x (�ő� 1 �A�X�N���[�������̏ꍇ�͏�̊��炩���̒l�� 0 ��) +$conf_user_def['live.scroll_speed'] = 10; // (10) + +// }}} +?> diff --git a/conf/conf_user_style.inc.php b/conf/conf_user_style.inc.php index 13848b2cd..53634e6c7 100644 --- a/conf/conf_user_style.inc.php +++ b/conf/conf_user_style.inc.php @@ -151,6 +151,19 @@ $STYLE['mobile_read_ngword_color'] = "#bbbbbb"; // ("#bbbbbb") $STYLE['mobile_read_onthefly_color'] = "#00aa00"; // ("#00aa00") +// }}} +// {{{ +live �������[�h + +$STYLE['live_b_l'] = "1px #999 dotted"; // ("1px #999 dotted") +live ���X�Ԃ̎d�ؐ� +$STYLE['live_b_s'] = "1px #999 dotted"; // ("1px #999 dotted") +live �ԍ� �ڗ� ���O ���t ID �\�����ƃ��X�\�����̎d�ؐ� +$STYLE['live_b_n'] = "2px #f30 dotted"; // ("2px #f30 dotted") +live �����\��&�I�[�g�����[�h���̊��ǁ`�V���̎d�ؐ� +$STYLE['live_highlight'] = "#cff"; // ("#cff") +live �n�C���C�g���[�h�\�����̔w�i�F +$STYLE['live_highlight_chain'] = "#ffc"; // ("#ffc") +live �A���n�C���C�g�\�����̔w�i�F +$STYLE['live_highlight_word_weight'] = "bold"; // ("bold") +live �A���n�C���C�g�\�����̃t�H���g�̑��� +$STYLE['live_highlight_word_border'] = "3px #f30 double"; // ("3px #f30 double") +live �A���n�C���C�g�\�����̃A���_�[���C�� +$STYLE['live_font-size'] = "10px"; // ("10px") +live �ԍ� �ڗ� ���O ���t ID ���̃t�H���g�T�C�Y +$STYLE['live2_color'] = "#ddd"; // ("#ddd") +live Type-B�� �ԍ� �ڗ� ���O ���t ID �\�����̔w�i�F + // }}} /* diff --git a/lib/NgAbornCtl.php b/lib/NgAbornCtl.php index 6c49767e1..c16402b8f 100644 --- a/lib/NgAbornCtl.php +++ b/lib/NgAbornCtl.php @@ -20,6 +20,11 @@ 'ng_mail' => 0, 'ng_msg' => 0, 'ng_name' => 0, + 'highlight_chain' => 0, + 'highlight_id' => 0, + 'highlight_mail' => 0, + 'highlight_msg' => 0, + 'highlight_name' => 0, ); // }}} @@ -172,6 +177,11 @@ static public function loadNgAborns() // +Wiki $ngaborns['aborn_be'] = self::_readNgAbornFromFile('p2_aborn_be.txt'); $ngaborns['ng_be'] = self::_readNgAbornFromFile('p2_ng_be.txt'); + // +live + $ngaborns['highlight_name'] = self::_readNgAbornFromFile('p2_highlight_name.txt'); + $ngaborns['highlight_mail'] = self::_readNgAbornFromFile('p2_highlight_mail.txt'); + $ngaborns['highlight_msg'] = self::_readNgAbornFromFile('p2_highlight_msg.txt'); + $ngaborns['highlight_id'] = self::_readNgAbornFromFile('p2_highlight_id.txt'); return $ngaborns; } diff --git a/lib/ShowThread.php b/lib/ShowThread.php index cb60b032d..f367843cc 100644 --- a/lib/ShowThread.php +++ b/lib/ShowThread.php @@ -65,6 +65,14 @@ abstract class ShowThread const NG_CHAIN = 32; const NG_AA = 64; + // +live �n�C���C�g���[�h�p + const HIGHLIGHT_NONE = 128; + const HIGHLIGHT_NAME = 256; + const HIGHLIGHT_MAIL = 512; + const HIGHLIGHT_ID = 1024; + const HIGHLIGHT_MSG = 2048; + const HIGHLIGHT_CHAIN = 4096; + // }}} // {{{ static properties @@ -89,6 +97,9 @@ abstract class ShowThread */ static protected $_ngaborns_body_hits = 0; + static protected $_highlight_head_hits = 0; // �{���ȊO���n�C���C�g�Ƀq�b�g�������� + static protected $_highlight_body_hits = 0; // �{�����n�C���C�g�Ƀq�b�g�������� + /** * getAnchorRegex() �̃L���b�V�� * @@ -152,6 +163,9 @@ abstract class ShowThread protected $_aborn_nums; protected $_ng_nums; + protected $_highlight_nums; // �n�C���C�g���X�ԍ����i�[����z�� + protected $_highlight_msgs; // �n�C���C�g���b�Z�[�W���i�[����z�� + /** * ���_�C���N�^�̎�� * @@ -323,6 +337,9 @@ protected function __construct(ThreadRead $aThread, $matome = false) $this->_aborn_nums = array(); $this->_ng_nums = array(); + $this->_highlight_nums = array(); + $this->_highlight_msgs = array(); + if (P2Util::isHostBbsPink($this->thread->host)) { $this->_redirector = self::REDIRECTOR_PINKTOWER; } elseif (P2Util::isHost2chs($this->thread->host)) { @@ -695,7 +712,7 @@ public function replaceBeId($date_id, $i) */ protected function _ngAbornCheck($i, $name, $mail, $date_id, $id, $msg, $nong = false, &$info = null) { - global $_conf, $ngaborns_hits; + global $_conf, $ngaborns_hits, $highlight_msgs, $highlight_chain_nums; $info = array(); $type = self::NG_NONE; @@ -818,6 +835,9 @@ protected function _ngAbornCheck($i, $name, $mail, $date_id, $id, $msg, $nong = p2h($a_ng_msg)); } + // +live �n�C���C�g�`�F�b�N + include P2_LIB_DIR . '/live/live_highlight_check.php'; + // }}} return $type; @@ -858,6 +878,26 @@ protected function _markNgAborn($num, $type, $isBody) } // }}} + // {{{ _markHighlight() + + // +live �n�C���C�g�Ƀq�b�g�������X�ԍ����L�^���� + protected function _markHighlight($num, $type, $isBody) + { + if ($type) { + if ($isBody) { + self::$_highlight_body_hits++; + } else { + self::$_highlight_head_hits++; + } + + $str = (string)$num; + $this->_highlight_nums[$num] = $str; + } + + return $type; + } + + // }}} // {{{ ngAbornCheck() /** @@ -1026,6 +1066,7 @@ public function stripLineBreaks($msg, $replacement = '

') { if (P2_MBREGEX_AVAILABLE) { $msg = mb_ereg_replace('(?:[\\s�@]*
)+[\\s�@]*$', '', $msg); + $msg = mb_ereg_replace('(?:^[\\s�@]*
)+[\\s�@]*', '', $msg); $msg = mb_ereg_replace('(?:[\\s�@]*
){3,}', $replacement, $msg); } else { mb_convert_variables('UTF-8', 'CP932', $msg, $replacement); diff --git a/lib/ShowThreadPc.php b/lib/ShowThreadPc.php index 33187a336..45a7e60cb 100644 --- a/lib/ShowThreadPc.php +++ b/lib/ShowThreadPc.php @@ -13,6 +13,8 @@ class ShowThreadPc extends ShowThread { + var $BBS_NONAME_NAME = ''; // +live (live.bbs_noname) �p + // {{{ properties static private $_spm_objects = array(); @@ -44,6 +46,20 @@ public function __construct($aThread, $matome = false) 'plugin_linkThread', 'plugin_link2chSubject', ); + + // +live (live.bbs_noname) �p + if ($_GET['live']) { + if (empty($_conf['live.bbs_noname'])) { + require_once P2_LIB_DIR . '/SettingTxt.php'; + $st = new SettingTxt($this->thread->host, $this->thread->bbs); + $st->setSettingArray(); + if (!empty($st->setting_array['BBS_NONAME_NAME'])) { + $this->BBS_NONAME_NAME = $st->setting_array['BBS_NONAME_NAME']; + } + } + + } + // +Wiki if (isset($GLOBALS['linkPluginCtl'])) { $this->_url_handlers[] = 'plugin_linkPlugin'; @@ -118,7 +134,7 @@ public function __construct($aThread, $matome = false) */ public function transRes($ares, $i, $pattern = null) { - global $_conf, $STYLE, $mae_msg; + global $_conf, $STYLE, $mae_msg, $highlight_msgs, $highlight_chain_nums; list($name, $mail, $date_id, $msg) = $this->thread->explodeDatLine($ares); if (($id = $this->thread->ids[$i]) !== null) { @@ -137,6 +153,11 @@ public function transRes($ares, $i, $pattern = null) $msg = $replaceWordCtl->replace('msg', $this->thread, $ares, $i); } + // +live (live.bbs_noname) �p + if (!empty($this->BBS_NONAME_NAME) and $this->BBS_NONAME_NAME == $name) { + $name = ''; + } + $tores = ''; $rpop = ''; if ($this->_matome) { @@ -158,6 +179,12 @@ public function transRes($ares, $i, $pattern = null) $ngaborns_body_hits = self::$_ngaborns_body_hits; } + // +live �n�C���C�g�`�F�b�N + if ($ng_type != self::HIGHLIGHT_NONE) { + $highlight_head_hits = self::$_highlight_head_hits; + $highlight_body_hits = self::$_highlight_body_hits; + } + // AA���� if ($this->am_autodetect && $this->activeMona->detectAA($msg)) { $msg_class .= ' ActiveMona'; @@ -240,6 +267,9 @@ public function transRes($ares, $i, $pattern = null) } + // +live �n�C���C�g���[�h�ϊ� + include P2_LIB_DIR . '/live/live_highlight_convert.php'; + /* //�u��������V���v�摜��}�� if ($i == $this->thread->readnum +1) { @@ -257,75 +287,9 @@ public function transRes($ares, $i, $pattern = null) $spmeh = ''; } - if ($_conf['backlink_block'] > 0) { - // ��Q�ƃu���b�N�\���p��onclick��ݒ� - $tores .= "
\n"; - } else { - $tores .= "
\n"; - } - $tores .= "
"; - - if ($this->thread->onthefly) { - $GLOBALS['newres_to_show_flag'] = true; - //�ԍ��i�I���U�t���C���j - $tores .= "{$i} : "; - } elseif ($i > $this->thread->readnum) { - $GLOBALS['newres_to_show_flag'] = true; - // �ԍ��i�V�����X���j - $tores .= "{$i} : "; - } elseif ($_conf['expack.spm.enabled']) { - // �ԍ��iSPM�j - $tores .= "{$i} : "; - } else { - // �ԍ� - $tores .= "{$i} : "; - } - // ���O - $tores .= preg_replace('{[ ]*}i', '', "{$name} : "); - - // ���[�� - if ($mail) { - if (strpos($mail, 'sage') !== false && $STYLE['read_mail_sage_color']) { - $tores .= "{$mail} : "; - } elseif ($STYLE['read_mail_color']) { - $tores .= "{$mail} : "; - } else { - $tores .= $mail . ' : '; - } - } - - // ID�t�B���^ - if ($_conf['flex_idpopup'] == 1 && $id && $this->thread->idcount[$id] > 1) { - $date_id = str_replace($idstr, $this->idFilter($idstr, $id), $date_id); - } - - $tores .= $date_id; // ���t��ID - if ($this->am_side_of_id) { - $tores .= ' ' . $this->activeMona->getMona($msg_id); - } - $tores .= "
\n"; // res-header��‚��� - - // �탌�X���X�g(�c�`��) - if ($_conf['backlink_list'] == 1 || $_conf['backlink_list'] > 2) { - $tores .= $this->_quotebackListHtml($i, 1); - } - - $tores .= "
{$msg}
\n"; // ���e - // �탌�X�W�J�p�u���b�N - if ($_conf['backlink_block'] > 0) { - $backlinks = $this->_getBacklinkComment($i); - if (strlen($backlinks)) { - $tores .= '
'; - $tores .= $backlinks; - } - } - // �탌�X���X�g(���`��) - if ($_conf['backlink_list'] == 2 || $_conf['backlink_list'] > 2) { - $tores .= $this->_quotebackListHtml($i, 2, false); - } - $tores .= "
\n"; + // +live �X���b�h���e�\���ؑ� + include P2_LIB_DIR . '/live/live_view_ctl.inc.php'; -// $tores .= $rpop; // ���X�|�b�v�A�b�v�p���p /*if ($_conf['expack.am.enabled'] == 2) { $tores .= << @@ -453,9 +417,14 @@ public function qRes($ares, $i) // $tores�ɂ܂Ƃ߂ďo�� $tores .= '
'; $tores .= "{$i} : "; // �ԍ� - $tores .= preg_replace('{[ ]*}i', '', "{$name} : "); + $tores .= preg_replace('{[ ]*}i', '', "{$name} : "); if ($mail) { - $tores .= $mail . ' : '; // ���[�� + // ���[�� + if (preg_match ("(^[\\s�@]*sage[\\s�@]*$)", $mail)) { + $tores .= "$mail"." �F"; + } else { + $tores .= "$mail"." �F"; + } } $tores .= $date_id; // ���t��ID if ($this->am_side_of_id) { @@ -1345,6 +1314,13 @@ public function plugin_linkYouTube($url, $purl, $str) { global $_conf; + // +live YouTube�v���r���[�\���̃T�C�Y�w�� + if ($_conf['live.youtube_winsize'] == 1) { + $youtube_winsize = "width=\"212\" height=\"175\""; // �n�[�t + } else { + $youtube_winsize = "width=\"425\" height=\"350\""; // �m�[�}�� + } + // http://www.youtube.com/watch?v=Mn8tiFnAUAI // http://m.youtube.com/watch?v=OhcX0xJsDK8&client=mv-google&gl=JP&hl=ja&guid=ON&warned=True if (preg_match('{^http://(www|jp|m)\\.youtube\\.com/watch\\?(?:.+&)?v=([0-9a-zA-Z_\\-]+)}', $url, $m)) { @@ -1355,6 +1331,8 @@ public function plugin_linkYouTube($url, $purl, $str) $link_url = $url; } + $link_url = $link_url . "&fmt=18"; // ���掿�p + // HTML�|�b�v�A�b�v if ($_conf['iframe_popup']) { $link = $this->iframePopup($link_url, $str, $_conf['ext_win_target_at']); @@ -1371,7 +1349,13 @@ public function plugin_linkYouTube($url, $purl, $str) EOP; } else { return <<
+{$link}
+ + + + + +
EOP; } } diff --git a/lib/live/default_view.inc.php b/lib/live/default_view.inc.php new file mode 100755 index 000000000..1e416996f --- /dev/null +++ b/lib/live/default_view.inc.php @@ -0,0 +1,81 @@ + 0) { + // ��Q�ƃu���b�N�\���p��onclick��ݒ� + $tores .= "
\n"; + } else { + $tores .= "
\n"; + } + $tores .= "
"; + + if ($this->thread->onthefly) { + $GLOBALS['newres_to_show_flag'] = true; + //�ԍ��i�I���U�t���C���j + $tores .= "{$i} : "; + } elseif ($i > $this->thread->readnum) { + $GLOBALS['newres_to_show_flag'] = true; + // �ԍ��i�V�����X���j + $tores .= "{$i} : "; + } elseif ($_conf['expack.spm.enabled']) { + // �ԍ��iSPM�j + $tores .= "{$i} : "; + } else { + // �ԍ� + $tores .= "{$i} : "; + } + +// ���X�{�^�� +if ($_GET['live']) { + $tores .= "$res_button"; +} + + // ���O + $tores .= preg_replace('{[ ]*}i', '', "{$name} : "); + + // ���[�� + if ($mail) { + if (strpos($mail, 'sage') !== false && $STYLE['read_mail_sage_color']) { + $tores .= "{$mail} : "; + } elseif ($STYLE['read_mail_color']) { + $tores .= "{$mail} : "; + } else { + $tores .= $mail . ' : '; + } + } + + // ID�t�B���^ + if ($_conf['flex_idpopup'] == 1 && $id && $this->thread->idcount[$id] > 1) { + $date_id = str_replace($idstr, $this->idFilter($idstr, $id), $date_id); + } + + $tores .= $date_id; // ���t��ID + if ($this->am_side_of_id) { + $tores .= ' ' . $this->activeMona->getMona($msg_id); + } + $tores .= "
\n"; // res-header��‚��� + + // �탌�X���X�g(�c�`��) + if ($_conf['backlink_list'] == 1 || $_conf['backlink_list'] > 2) { + $tores .= $this->_quotebackListHtml($i, 1); + } + + $tores .= "
{$msg}
\n"; // ���e + // �탌�X�W�J�p�u���b�N + if ($_conf['backlink_block'] > 0) { + $backlinks = $this->_getBacklinkComment($i); + if (strlen($backlinks)) { + $tores .= '
'; + $tores .= $backlinks; + } + } + // �탌�X���X�g(���`��) + if ($_conf['backlink_list'] == 2 || $_conf['backlink_list'] > 2) { + $tores .= $this->_quotebackListHtml($i, 2, false); + } + $tores .= "
\n"; + +// $tores .= $rpop; // ���X�|�b�v�A�b�v�p���p + +?> \ No newline at end of file diff --git a/lib/live/live_ShowThread.php b/lib/live/live_ShowThread.php new file mode 100755 index 000000000..9d205aedb --- /dev/null +++ b/lib/live/live_ShowThread.php @@ -0,0 +1,2050 @@ +(<[Aa][ ].+?>)(.*?)()) # �����N�iPCRE�̓�����A�K�����̃p�^�[�����ŏ��Ɏ��s����j +| +(?: + (?P # ���p + ((?:>|��){1,2}[ ]?) # ���p�� + ( + (?:[1-9]\\d{0,3}) # 1�–ڂ̔ԍ� + (?: + (?:[ ]?(?:[,=]|�A)[ ]?[1-9]\\d{0,3})+ # �A�� + | + -(?:[1-9]\\d{0,3})? # �͈� + )? + ) + (?=\\D|$) + ) # ���p�����܂� +| # PHP 5.3����ɂ���Ȃ�A����\'�̃G�X�P�[�v���O���ANOWDOC�ɂ��� + (?P(ftp|h?t?tps?)://([0-9A-Za-z][\\w;/?:@=&$\\-_.+!*\'(),#%\\[\\]^~]+)) # URL + ([^\\s<>]*) # URL�̒���A�^�Oor�z���C�g�X�y�[�X�������܂ł̕����� +| + (?PID:[ ]?([0-9A-Za-z/.+]{8,11})(?=[^0-9A-Za-z/.+]|$)) # ID�i8,10�� +PC/�g�ю��ʃt���O�j +) +}x'; + + /** + * ���_�C���N�^�̎�� + * + * @var int + */ + const REDIRECTOR_NONE = 0; + const REDIRECTOR_IMENU = 1; + const REDIRECTOR_PINKTOWER = 2; + const REDIRECTOR_MACHIBBS = 3; + + /** + * NG���ځ[��̎�� + * + * @var int + */ + const ABORN = -1; + const NG_NONE = 0; + const NG_NAME = 1; + const NG_MAIL = 2; + const NG_ID = 4; + const NG_MSG = 8; + const NG_FREQ = 16; + const NG_CHAIN = 32; + const NG_AA = 64; + + // }}} + // {{{ static properties + + /** + * �܂Ƃߓǂ݃��[�h���̃X���b�h�� + * + * @var int + */ + static private $_matome_count = 0; + + /** + * �{���ȊO��NG���ځ[��Ƀq�b�g�������� + * + * @var int + */ + static protected $_ngaborns_head_hits = 0; + + /** + * �{����NG���ځ[��Ƀq�b�g�������� + * + * @var int + */ + static protected $_ngaborns_body_hits = 0; + + /** + * getAnchorRegex() �̃L���b�V�� + * + * @var array + */ + static private $_anchorRegexes = array(); + + /** + * _getAnchorRegexParts() �̃L���b�V�� + * + * @var array + */ + static private $_anchorRegexParts = null; + + // }}} + // {{{ properties + + /** + * �܂Ƃߓǂ݃��[�h���̃X���b�h�ԍ� + * + * @var int + */ + protected $_matome; + + /** + * URL����������֐��E���\�b�h���Ȃǂ��i�[����z�� + * (�g�ݍ���) + * + * @var array + */ + protected $_url_handlers; + + /** + * URL����������֐��E���\�b�h���Ȃǂ��i�[����z�� + * (���[�U��`�A�g�ݍ��݂̂��̂��D��) + * + * @var array + */ + protected $_user_url_handlers; + + /** + * �p�oID�����ځ[�񂷂� + * + * @var bool + */ + protected $_ngaborn_frequent; + + /** + * NG or ���ځ[�񃌃X�����邩�ǂ��� + * + * @var bool + */ + protected $_has_ngaborns; + + /** + * ���ځ[�񃌃X�ԍ������NG���X�ԍ����i�[����z�� + * array_intersect()�������悭�s�����߁A�Y�����郌�X�ԍ��͕�����ɃL���X�g���Ċi�[���� + * + * @var array + */ + protected $_aborn_nums; + protected $_ng_nums; + + /** + * ���_�C���N�^�̎�� + * + * @var int + */ + protected $_redirector; + + /** + * �X���b�h�I�u�W�F�N�g + * + * @var ThreadRead + */ + public $thread; + + /** + * �A�N�e�B�u���i�[�E�I�u�W�F�N�g + * + * @var ActiveMona + */ + public $activeMona; + + /** + * �A�N�e�B�u���i�[���L�����ۂ� + * + * @var bool + */ + public $am_enabled = false; + + /** + * ���p���Ă��郌�X�ԍ���o�^�����z�� + * + * @var array + */ + protected $_quote_res_nums; + + + /** + * ���p�`�F�b�N�ς݃��X�ԍ��̔z�� + * + * @var array + */ + protected $_quote_res_nums_checked; + + /** + * ���p�ϊ��ς݃��X�ԍ��̔z�� + * + * @var array + */ + protected $_quote_res_nums_done; + + /** + * ���X�ԍ��`�F�b�N�̍ċA�̐[�� + * + * @var int + */ + private $_quote_check_depth; + + /** + * �f�t�H���g�̖��O + * + * @var string + */ + protected $_nanashiName = null; + + /** + * ��A���J�[���W�v�����z��(�͈̓A���J�[�܂�) // [��Q�ƃ��X�� : [�Q�ƃ��X��, ...], ...) + * + * @var array + */ + protected $_quote_from = null; + + /** + * �A���J�[���W�v�����z��(�͈̓A���J�[����) // [���X�� : [�Q�Ɛ惌�X��, ...], ...) + * + * @var array + */ + protected $_quote_to = null; + + /** + * ���C�Ɏ��������N + * + * @var bool + */ + private $_auto_fav_rank = false; + + /** + * �����N����T���l�C���𐶐�����N���X�̃C���X�^���X + * + * @var ImageCache2_Thumbnailer + */ + public $thumbnailer; + + /** + * �C�����C���\������T���l�C���𐶐�����N���X�̃C���X�^���X + * + * @var ImageCache2_Thumbnailer + */ + public $inline_prvw; + + /** + * �C�����C���T���l�C����ID�����ڔ��� + * + * @var string + */ + public $thumb_id_suffix; + + /** + * �摜�ɕt�����郁�� + * + * @var string + */ + public $img_memo; + + /** + * �摜�Ƀ�����t���邽�߂̃N�G�������� + * + * @var string + */ + public $img_memo_query; + + /** + * �摜�𑜓x + * + * @var float + */ + public $img_dpr = 1.0; + + /** + * �摜�𑜓x���w�肷��N�G�������� + * + * @var string + */ + public $img_dpr_query; + + // }}} + // {{{ constructor + + /** + * �R���X�g���N�^ + */ + protected function __construct(ThreadRead $aThread, $matome = false) + { + global $_conf; + + // �X���b�h�I�u�W�F�N�g��o�^ + $this->thread = $aThread; + $this->str_to_link_regex = $this->_buildStrToLinkRegex(); + + // �܂Ƃߓǂ݃��[�h���ۂ� + if ($matome) { + $this->_matome = ++self::$_matome_count; + } else { + $this->_matome = false; + } + + $this->_url_handlers = array(); + $this->_user_url_handlers = array(); + + $this->_ngaborn_frequent = 0; + if ($_conf['ngaborn_frequent']) { + if ($_conf['ngaborn_frequent_dayres'] == 0) { + $this->_ngaborn_frequent = $_conf['ngaborn_frequent']; + } elseif ($this->thread->setDayRes() && $this->thread->dayres < $_conf['ngaborn_frequent_dayres']) { + $this->_ngaborn_frequent = $_conf['ngaborn_frequent']; + } + } + + $this->_has_ngaborns = false; + $this->_aborn_nums = array(); + $this->_ng_nums = array(); + + if (P2Util::isHostBbsPink($this->thread->host)) { + $this->_redirector = self::REDIRECTOR_PINKTOWER; + } elseif (P2Util::isHost2chs($this->thread->host)) { + $this->_redirector = self::REDIRECTOR_IMENU; + } elseif (P2Util::isHostMachiBbs($this->thread->host)) { + $this->_redirector = self::REDIRECTOR_MACHIBBS; + } else { + $this->_redirector = self::REDIRECTOR_NONE; + } + + $this->_quote_res_nums = array(); + $this->_quote_res_nums_checked = array(); + $this->_quote_res_nums_done = array(); + } + + // }}} + + /** + * @param void + * @return void + */ + protected function setBbsNonameName() + { + $st = new SettingTxt($this->thread->host, $this->thread->bbs); + $st->setSettingArray(); + if (array_key_exists('BBS_NONAME_NAME', $st->setting_array)) { + $BBS_NONAME_NAME = $st->setting_array['BBS_NONAME_NAME']; + if (strlen($BBS_NONAME_NAME)) { + $this->_nanashiName = $BBS_NONAME_NAME; + } + } + } + + // {{{ getDatToHtml() + + /** + * Dat��HTML�ϊ��������̂��擾���� + * + * @param bool $is_fragment + * @return bool|string + */ + public function getDatToHtml($is_fragment = false) + { + return $this->datToHtml(true, $is_fragment); + } + public function getDatToHtml_resFrom($is_fragment = false) + { + return $this->datToHtml_resFrom(true, $is_fragment); + } + + // }}} + // {{{ datToHtml() + + /** + * Dat��HTML�ɕϊ����ĕ\������ + * + * @param bool $capture true�Ȃ�ϊ����ʂ��o�͂����ɕԂ� + * @param bool $is_fragment true�Ȃ�
�ň͂܂Ȃ� + * @return bool|string + */ + public function datToHtml($capture = false, $is_fragment = false) + { + global $_conf, $filter_hits, $last_hit_resnum; + + $aThread = $this->thread; + + // �\�����X�͈͂��w�肳��Ă��Ȃ���� + if (!$aThread->resrange) { + $error = '

p2 error: {$this->resrange} is false at datToHtml()

'; + if ($capture) { + return $error; + } else { + echo $error; + return false; + } + } + + $start = $aThread->resrange['start']; + $to = $aThread->resrange['to']; + $nofirst = $aThread->resrange['nofirst']; + + $is_ktai = $_conf['ktai']; + $resFilter = ResFilter::getFilter(); + if ($resFilter && $resFilter->hasWord()) { + $do_filtering = true; + $nofirst = true; + } else { + $do_filtering = false; + } + + $datlines = $aThread->datlines; + $count = count($datlines); + + $buf['body'] = $is_fragment ? '' : "
\n"; + $buf['q'] = ''; + + // �܂� 1 ��\�� + if (!$nofirst) { + $res = $this->transRes($datlines[0], 1); + if (is_array($res)) { + $buf['body'] .= $res['body']; + $buf['q'] .= $res['q'] ? $res['q'] : ''; + } else { + $buf['body'] .= $res; + } + } + + // �A���̂��߁A�͈͊O��NG���ځ[��`�F�b�N + if ($_conf['ngaborn_chain_all'] && empty($_GET['nong'])) { + $pre = min($count, $start); + for ($i = ($nofirst) ? 0 : 1; $i < $pre; $i++) { + $n = $i + 1; + list($name, $mail, $date_id, $msg) = $aThread->explodeDatLine($datlines[$i]); + if (($id = $aThread->ids[$n]) !== null) { + $date_id = str_replace($aThread->idp[$n] . $id, "ID:$id", $date_id); + } + $this->_ngAbornCheck($n, strip_tags($name), $mail, $date_id, $id, $msg); + } + } + + // �t�B���^�����O + if ($do_filtering) { + $datlines = $resFilter->apply($this); + $filter_hits = $resFilter->hits; + $last_hit_resnum = $resFilter->last_hit_resnum; + } + + // �w��͈͂�\�� + $i = 0; + $n = 0; + $rn = 0; + + if ($do_filtering) { + if (!empty($resFilter->range)) { + $start = $resFilter->range['start']; + $to = $resFilter->range['to']; + } + $pattern = $resFilter->getPattern(); + } else { + $pattern = null; + } + + foreach ($datlines as $i => $ares) { + if ($ares === null) { + continue; + } + $n++; + if ($i === 0 && !$nofirst) { + continue; + } + if ($n < $start) { + continue; + } + if ($n > $to) { + break; + } + $rn = $i + 1; + $res = $this->transRes($ares, $rn, $pattern); + if (is_array($res)) { + $buf['body'] .= $res['body']; + $buf['q'] .= $res['q'] ? $res['q'] : ''; + } else { + $buf['body'] .= $res; + } + if (!$capture && $n % 10 == 0) { + echo $buf['body']; + if ($do_filtering && !$is_ktai) { + echo "\n"; + } + flush(); + $buf['body'] = ''; + } + } + + if ($this->thread->readnum < $rn) { + $this->thread->readnum = $rn; + } + + if ($do_filtering && !$is_ktai) { + $buf['body'] .= "\n"; + } + +// +live �I�[�g�����[�h�����X�����e�̕\���� +echo <<
\n +LIVE; + + if (!$is_fragment) { + $buf['body'] .= "
\n"; + } + + if ($capture) { + return $buf['body'] . $buf['q']; + } else { + echo $buf['body']; + echo $buf['q']; + flush(); + return true; + } + } + + /** + * �w��̏����݂ւ̃��X��HTML�ɕϊ����ĕ\������ + * + * @param bool $capture true�Ȃ�ϊ����ʂ��o�͂����ɕԂ� + * @param bool $is_fragment true�Ȃ�
�ň͂܂Ȃ� + * @param bool $show_rootres true�Ȃ�w��̏����݂����ʂɊ܂߂� + * @return bool|string + */ + public function datToHtml_resFrom($capture = false, $is_fragment = false, $show_rootres = false) + { + global $_conf; + + $aThread = $this->thread; + + // �\�����X���w�肳��Ă��Ȃ���� + $target = $aThread->resrange['start']; + if (!$aThread->resrange || $target != $aThread->resrange['to']) { + $error = '

p2 error: {$this->resrange} is false at datToHtml()

'; + if ($capture) { + return $error; + } else { + echo $error; + return false; + } + } + + $datlines = $aThread->datlines; + $count = count($datlines); + + $buf['body'] = $is_fragment ? '' : "
\n"; + $buf['q'] = ''; + + // �A���̂��߁A�͈͊O��NG���ځ[��`�F�b�N + if ($_conf['ngaborn_chain_all'] && empty($_GET['nong'])) { + $pre = min($count, $start); + for ($i = ($nofirst) ? 0 : 1; $i < $pre; $i++) { + $n = $i + 1; + list($name, $mail, $date_id, $msg) = $aThread->explodeDatLine($datlines[$i]); + if (($id = $aThread->ids[$n]) !== null) { + $date_id = str_replace($aThread->idp[$n] . $id, "ID:$id", $date_id); + } + $this->_ngAbornCheck($n, strip_tags($name), $mail, $date_id, $id, $msg); + } + } + + // ���X�W�J + $datlines = array_fill(0, count($aThread->datlines), null); + if ($show_rootres) { + $datlines[$target - 1] = $aThread->datlines[$target - 1]; + } + list($name, $mail, $date_id, $msg) = + $aThread->explodeDatLine($aThread->datlines[$target - 1]); + foreach ($this->checkQuoteResNums($target, $name, $msg, false, true, false) as $rn) { + $ri = $rn - 1; + if ($datlines[$ri] === null) { + $datlines[$ri] = $aThread->datlines[$ri]; + } + } + + // �\�� + $i = 0; + $n = 0; + $rn = 0; + foreach ($datlines as $i => $ares) { + if ($ares === null) { + continue; + } + $n++; + $rn = $i + 1; + $res = $this->transRes($ares, $rn); + if (is_array($res)) { + $buf['body'] .= $res['body']; + $buf['q'] .= $res['q'] ? $res['q'] : ''; + } else { + $buf['body'] .= $res; + } + if (!$capture && $n % 10 == 0) { + echo $buf['body']; + flush(); + $buf['body'] = ''; + } + } + + if (!$is_fragment) { + $buf['body'] .= "
\n"; + } + + if ($capture) { + return $buf['body'] . $buf['q']; + } else { + echo $buf['body']; + echo $buf['q']; + flush(); + return true; + } + } + + // }}} + // {{{ transRes() + + /** + * Dat���X��HTML���X�ɕϊ����� + * + * @param string $ares dat��1���C�� + * @param int $i ���X�ԍ� + * @return string + */ + abstract public function transRes($ares, $i); + + // }}} + // {{{ transName() + + /** + * ���O��HTML�p�ɕϊ����� + * + * @param string $name ���O + * @return string + */ + abstract public function transName($name); + + // }}} + // {{{ transMsg() + + /** + * dat�̃��X���b�Z�[�W��HTML�\���p���b�Z�[�W�ɕϊ����� + * + * @param string $msg ���b�Z�[�W + * @param int $mynum ���X�ԍ� + * @return string + */ + abstract public function transMsg($msg, $mynum); + + // }}} + // {{{ replaceBeId() + + /** + * BE�v���t�@�C�������N�ϊ� + */ + public function replaceBeId($date_id, $i) + { + global $_conf; + + $beid_replace = "thread->host}/test/read.cgi/{$this->thread->bbs}/{$this->thread->key}/{$i}\"{$_conf['ext_win_target_at']}>Lv.\$2"; + + // + $be_match = '||i'; + if (preg_match($be_match, $date_id)) { + $date_id = preg_replace($be_match, $beid_replace, $date_id); + + } else { + + $beid_replace = "thread->host}/test/read.cgi/{$this->thread->bbs}/{$this->thread->key}/{$i}\"{$_conf['ext_win_target_at']}>?\$2"; + $date_id = preg_replace('|BE: ?(\d+)-(#*)|i', $beid_replace, $date_id); + } + + return $date_id; + } + + // }}} + // {{{ _ngAbornCheck() + + /** + * NG���ځ[��`�F�b�N + * + * @param int $i ���X�ԍ� + * @param string $name ���O�� + * @param string $mail ���[���� + * @param string $date_id ���t�EID�� + * @param string $id ID + * @param string $msg ���X�{�� + * @param bool $nong NG�`�F�b�N�����邩�ǂ��� + * @param array &$info NG�̗��R���i�[�����ϐ��̎Q�� + * @return int NG�^�C�v�BShowThread::NG_XXX �̃r�b�g�a�� ShowThread::ABORN + */ + protected function _ngAbornCheck($i, $name, $mail, $date_id, $id, $msg, $nong = false, &$info = null) + { + global $_conf, $ngaborns_hits; + + $info = array(); + $type = self::NG_NONE; + + // {{{ �p�oID�`�F�b�N + + if ($this->_ngaborn_frequent && $id && $this->thread->idcount[$id] >= $_conf['ngaborn_frequent_num']) { + if (!$_conf['ngaborn_frequent_one'] && $id == $this->thread->ids[1]) { + // >>1 �͂��̂܂ܕ\�� + } elseif ($this->_ngaborn_frequent == 1) { + $ngaborns_hits['aborn_freq']++; + return $this->_markNgAborn($i, self::ABORN, false); + } elseif (!$nong) { + $ngaborns_hits['ng_freq']++; + $type |= $this->_markNgAborn($i, self::NG_FREQ, false); + $info[] = sprintf('�p�oID:%s(%d)', $id, $this->thread->idcount[$id]); + } + } + + // }}} + // {{{ �A���`�F�b�N + + if ($_conf['ngaborn_chain'] && $this->_has_ngaborns && + preg_match_all('/(?:>|��)([1-9][0-9\\-,]*)/', $msg, $matches) + ) { + $references = array_unique(preg_split('/[-,]+/', + trim(implode(',', $matches[1]), '-,'), + -1, + PREG_SPLIT_NO_EMPTY)); + $intersections = array_intersect($references, $this->_aborn_nums); + $info_suffix = ''; + + if ($intersections) { + if ($_conf['ngaborn_chain'] == 1) { + $ngaborns_hits['aborn_chain']++; + return $this->_markNgAborn($i, self::ABORN, true); + } + if ($nong) { + $intersections = null; + } else { + $info_suffix = '(' . (($_conf['ktai']) ? '����' : '���ځ[��') . ')'; + } + } elseif (!$nong) { + $intersections = array_intersect($references, $this->_ng_nums); + } + + if ($intersections) { + $ngaborns_hits['ng_chain']++; + $type |= $this->_markNgAborn($i, self::NG_CHAIN, true); + $info[] = sprintf('�A��NG:>>%d%s', current($intersections), $info_suffix); + } + } + + // }}} + // {{{ ���ځ[��`�F�b�N + + // ���ځ[�񃌃X + if ($this->abornResCheck($i) !== false) { + $ngaborns_hits['aborn_res']++; + return $this->_markNgAborn($i, self::ABORN, false); + } + + // ���ځ[��l�[�� + if ($this->ngAbornCheck('aborn_name', $name) !== false) { + $ngaborns_hits['aborn_name']++; + return $this->_markNgAborn($i, self::ABORN, false); + } + + // ���ځ[�񃁁[�� + if ($this->ngAbornCheck('aborn_mail', $mail) !== false) { + $ngaborns_hits['aborn_mail']++; + return $this->_markNgAborn($i, self::ABORN, false); + } + + // ���ځ[��ID + if ($this->ngAbornCheck('aborn_id', $date_id) !== false) { + $ngaborns_hits['aborn_id']++; + return $this->_markNgAborn($i, self::ABORN, false); + } + + // ���ځ[�񃁃b�Z�[�W + if ($this->ngAbornCheck('aborn_msg', $msg) !== false) { + $ngaborns_hits['aborn_msg']++; + return $this->_markNgAborn($i, self::ABORN, true); + } + + // }}} + + if ($nong) { + return $type; + } + + // {{{ NG�`�F�b�N + + // NG�l�[���`�F�b�N + if ($this->ngAbornCheck('ng_name', $name) !== false) { + $ngaborns_hits['ng_name']++; + $type |= $this->_markNgAborn($i, self::NG_NAME, false); + } + + // NG���[���`�F�b�N + if ($this->ngAbornCheck('ng_mail', $mail) !== false) { + $ngaborns_hits['ng_mail']++; + $type |= $this->_markNgAborn($i, self::NG_MAIL, false); + } + + // NGID�`�F�b�N + if ($this->ngAbornCheck('ng_id', $date_id) !== false) { + $ngaborns_hits['ng_id']++; + $type |= $this->_markNgAborn($i, self::NG_ID, false); + } + + // NG���b�Z�[�W�`�F�b�N + $a_ng_msg = $this->ngAbornCheck('ng_msg', $msg); + if ($a_ng_msg !== false) { + $ngaborns_hits['ng_msg']++; + $type |= $this->_markNgAborn($i, self::NG_MSG, true); + $info[] = sprintf('NG%s:%s', + ($_conf['ktai']) ? 'ܰ��' : '���[�h', + p2h($a_ng_msg)); + } + + // }}} + + return $type; + } + + // }}} + // {{{ _markNgAborn() + + /** + * NG���ځ[��Ƀq�b�g�������X�ԍ����L�^���� + * + * @param int $num ���X�ԍ� + * @param int $type NG���ځ[��̎�� + * @param bool $isBody �{���Ƀq�b�g�������ǂ��� + * @return int $type�Ɠ����l + */ + protected function _markNgAborn($num, $type, $isBody) + { + if ($type) { + if ($isBody) { + self::$_ngaborns_body_hits++; + } else { + self::$_ngaborns_head_hits++; + } + + // array_intersect()�������悭�s�����߁A���X�ԍ��𕶎���^�ɃL���X�g���� + $str = (string)$num; + if ($type == self::ABORN) { + $this->_aborn_nums[$num] = $str; + } else { + $this->_ng_nums[$num] = $str; + } + + $this->_has_ngaborns = true; + } + + return $type; + } + + // }}} + // {{{ ngAbornCheck() + + /** + * NG���ځ[��`�F�b�N + */ + public function ngAbornCheck($code, $resfield, $ic = false) + { + global $ngaborns; + + //$GLOBALS['debug'] && $GLOBALS['profiler']->enterSection('ngAbornCheck()'); + + if (isset($ngaborns[$code]['data']) && is_array($ngaborns[$code]['data'])) { + // +Wiki:BE���ځ[�� + if ($code == 'aborn_be' || $code == 'ng_be') { + // �v���t�B�[��ID�𔲂��o�� + if (preg_match('/BE:(\\d+)/', $resfield, $matches)) { + $beId = P2UtilWiki::calcBeId((int)$matches[1]); + if ($beId === 0) { + return false; + } + $resfield = (string)$beId; + } else { + return false; + } + } + + $bbs = $this->thread->bbs; + $title = $this->thread->ttitle_hc; + + foreach ($ngaborns[$code]['data'] as $k => $v) { + // �ƒ`�F�b�N + if (isset($v['bbs']) && in_array($bbs, $v['bbs']) == false) { + continue; + } + + // �^�C�g���`�F�b�N + if (isset($v['title']) && stripos($title, $v['title']) === false) { + continue; + } + + // ���[�h�`�F�b�N + // ���K�\�� + if ($v['regex']) { + $re_method = $v['regex']; + /*if ($re_method($v['word'], $resfield, $matches)) { + $this->ngAbornUpdate($code, $k); + //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('ngAbornCheck()'); + return p2h($matches[0]); + }*/ + if ($re_method($v['word'], $resfield)) { + $this->ngAbornUpdate($code, $k); + //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('ngAbornCheck()'); + return $v['cond']; + } + // +Wiki:BE���ځ[��(���S��v) + } elseif ($code == 'aborn_be' || $code == 'ng_be') { + if ($resfield == $v['word']) { + $this->ngAbornUpdate($code, $k); + //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('ngAbornCheck()'); + return $v['cond']; + } + // �啶���������𖳎� + } elseif ($ic || $v['ignorecase']) { + if (stripos($resfield, $v['word']) !== false) { + $this->ngAbornUpdate($code, $k); + //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('ngAbornCheck()'); + return $v['cond']; + } + // �P���ɕ����񂪊܂܂�邩�ǂ������`�F�b�N + } else { + if (strpos($resfield, $v['word']) !== false) { + $this->ngAbornUpdate($code, $k); + //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('ngAbornCheck()'); + return $v['cond']; + } + } + } + } + + //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('ngAbornCheck()'); + return false; + } + + // }}} + // {{{ abornResCheck() + + /** + * ���背�X�̓������ځ[��`�F�b�N + */ + public function abornResCheck($resnum) + { + global $ngaborns; + + $target = $this->thread->host . '/' . $this->thread->bbs . '/' . $this->thread->key . '/' . $resnum; + + if (isset($ngaborns['aborn_res']['data']) && is_array($ngaborns['aborn_res']['data'])) { + foreach ($ngaborns['aborn_res']['data'] as $k => $v) { + if ($ngaborns['aborn_res']['data'][$k]['word'] == $target) { + $this->ngAbornUpdate('aborn_res', $k); + return true; + } + } + } + return false; + } + + // }}} + // {{{ ngAbornUpdate() + + /** + * NG/���ځ`������Ɖ񐔂��X�V + */ + public function ngAbornUpdate($code, $k) + { + global $ngaborns; + + if (isset($ngaborns[$code]['data'][$k])) { + $ngaborns[$code]['data'][$k]['lasttime'] = date('Y/m/d G:i'); // HIT���Ԃ��X�V + if (empty($ngaborns[$code]['data'][$k]['hits'])) { + $ngaborns[$code]['data'][$k]['hits'] = 1; // ��HIT + } else { + $ngaborns[$code]['data'][$k]['hits']++; // HIT�񐔂��X�V + } + } + } + + // }}} + // {{{ addURLHandler() + + /** + * ���[�U��`URL�n���h���i���b�Z�[�W����URL������������֐��j��lj����� + * + * �n���h���͍ŏ��ɒlj����ꂽ���̂��珇�ԂɎ��s����� + * URL�̓n���h���̕Ԃ�l�i������j�Œu������� + * false���A�����ꍇ�͎��̃n���h���ɏ������ς˂��� + * + * ���[�U��`URL�n���h���̈����� + * 1. string $url URL + * 2. array $purl URL��parse_url()�������� + * 3. string $str �p�^�[���Ƀ}�b�`����������AURL�Ɠ������Ƃ����� + * 4. object $aShowThread �Ăяo�����̃I�u�W�F�N�g + * �ł��� + * ���false��Ԃ��A�����ŏ������邾���̊֐���o�^���Ă��悢 + * + * @param callback $function �R�[���o�b�N���\�b�h + * @return void + * @access public + * @todo ���[�U��`URL�n���h���̃I�[�g���[�h�@�\������ + */ + public function addURLHandler($function) + { + $this->_user_url_handlers[] = $function; + } + + // }}} + // {{{ stripLineBreaks() + + /** + * �����̉��s�ƘA��������s����菜�� + * + * @param string $msg + * @param string $replacement + * @return string + */ + public function stripLineBreaks($msg, $replacement = '

') + { + if (P2_MBREGEX_AVAILABLE) { + $msg = mb_ereg_replace('(?:[\\s�@]*
)+[\\s�@]*$', '', $msg); + $msg = mb_ereg_replace('(?:[\\s�@]*
){3,}', $replacement, $msg); + } else { + mb_convert_variables('UTF-8', 'CP932', $msg, $replacement); + $msg = preg_replace('/(?:[\\s\\x{3000}]*
)+[\\s\\x{3000}]*$/u', '', $msg); + $msg = preg_replace('/(?:[\\s\\x{3000}]*
){3,}/u', $replacement, $msg); + $msg = mb_convert_encoding($msg, 'CP932', 'UTF-8'); + } + + return $msg; + } + + // }}} + // {{{ transLink() + + /** + * �����N�Ώە������ϊ����� + * + * @param string $str + * @return string + */ + public function transLink($str) + { + return preg_replace_callback($this->str_to_link_regex, array($this, 'transLinkDo'), $str); + } + + // }}} + // {{{ transLinkDo() + + /** + * �����N�Ώە�����̎�ނ𔻒肵�đΉ������֐�/���\�b�h�ɓn�� + * + * @param array $s + * @return string + */ + public function transLinkDo(array $s) + { + global $_conf; + + $orig = $s[0]; + $following = ''; + + // PHP 5.2.7 ������ preg_replace_callback() �ł͖��O�t���ߊl���W�����g���Ȃ��̂� + /* + if (!array_key_exists('link', $s)) { + $s['link'] = $s[1]; + $s['quote'] = $s[5]; + $s['url'] = $s[8]; + $s['id'] = $s[11]; + } + */ + + // �}�b�`�����T�u�p�^�[���ɉ����ĕ��� + // �����N + if ($s['link']) { + if (preg_match('{ href=(["\'])?(.+?)(?(1)\\1)(?=[ >])}i', $s[2], $m)) { + $url = $m[2]; + $str = $s[3]; + } else { + return $s[3]; + } + + // ���p + } elseif ($s['quote']) { + return preg_replace_callback( + self::getAnchorRegex('/(%prefix%)?(%a_range%)/'), + array($this, '_quoteResCallback'), $s['quote']); + + // http or ftp ��URL + } elseif ($s['url']) { + if ($_conf['ktai'] && $s[9] == 'ftp') { + return $orig; + } + $url = preg_replace('/^t?(tps?)$/', 'ht$1', $s[9]) . '://' . $s[10]; + $str = $s['url']; + $following = $s[11]; + if (strlen($following) > 0) { + // �E�B�L�y�f�B�A���{��ł�URL�ŁASJIS��2�o�C�g�����̏�ʃo�C�g + // (0x81-0x9F,0xE0-0xEF)�������Ƃ� + if (P2Util::isUrlWikipediaJa($url)) { + $leading = ord($following); + if ((($leading ^ 0x90) < 32 && $leading != 0x80) || ($leading ^ 0xE0) < 16) { + $url .= rawurlencode(mb_convert_encoding($following, 'UTF-8', 'CP932')); + $str .= $following; + $following = ''; + } + } elseif (strpos($following, 'tp://') !== false) { + // �S�p�X�y�[�X+URL���̏ꍇ������̂ōă`�F�b�N + $following = $this->transLink($following); + } + } + + // ID + } elseif ($s['id'] && $_conf['flex_idpopup']) { // && $_conf['flex_idlink_k'] + return $this->idFilter($s['id'], $s[12]); + + // ���̑��i�\���j + } else { + return strip_tags($orig); + } + + // ���_�C���N�^���O�� + switch ($this->_redirector) { + case self::REDIRECTOR_IMENU: + $url = preg_replace('{^([a-z]+://)ime\\.nu/}', '$1', $url); + break; + case self::REDIRECTOR_PINKTOWER: + $url = preg_replace('{^([a-z]+://)pinktower\\.com/}', '$1', $url); + break; + case self::REDIRECTOR_MACHIBBS: + $url = preg_replace('{^[a-z]+://machi(?:bbs\\.com|\\.to)/bbs/link\\.cgi\\?URL=}', '', $url); + break; + } + + // �G�X�P�[�v����Ă��Ȃ����ꕶ�����G�X�P�[�v + $url = p2h($url, false); + $str = p2h($str, false); + // ���ԎQ�ƁE���l�Q�Ƃ����S�Ƀf�R�[�h���悤�Ƃ���ƕ��ׂ��傫�����A + // "&"�ȊO�̓��ꕶ���͂قƂ�ǂ̏ꍇURL�G���R�[�h����Ă���͂��Ȃ̂� + // ���r���[�ɋÂ��������͂����A"&"��"&"�̂ݍĕϊ�����B + $raw_url = str_replace('&', '&', $url); + + // URL���p�[�X�E�z�X�g������ + $purl = @parse_url($raw_url); + if (!$purl || !array_key_exists('host', $purl) || + strpos($purl['host'], '.') === false || + $purl['host'] == '127.0.0.1' || + //HostCheck::isAddressLocal($purl['host']) || + //HostCheck::isAddressPrivate($purl['host']) || + P2Util::isHostExample($purl['host'])) + { + return $orig; + } + // URL�̃}�b�`���O��"&"���l�����Ȃ��čςނ悤�ɁA����URL��o�^���Ă��� + $purl[0] = $raw_url; + + // URL������ + foreach ($this->_user_url_handlers as $handler) { + if (false !== ($link = call_user_func($handler, $url, $purl, $str, $this))) { + return $link . $following; + } + } + foreach ($this->_url_handlers as $handler) { + if (false !== ($link = $this->$handler($url, $purl, $str))) { + return $link . $following; + } + } + + return $orig; + } + + // }}} + // {{{ idFilter() + + /** + * ID�t�B���^�����O�ϊ� + * + * @param string $idstr ID:xxxxxxxxxx + * @param string $id xxxxxxxxxx + * @return string + */ + abstract public function idFilter($idstr, $id); + + // }}} + // {{{ _idFilterCallback() + + /** + * ID�t�B���^�����O�ϊ� + * + * @param array $s ���K�\���Ƀ}�b�`�����v�f�̔z�� + * @return string + */ + protected function _idFilterCallback(array $s) + { + return $this->idFilter($s[0], $s[1]); + } + + // }}} + // {{{ _quoteNameCallback() + + /** + * @param array $s + * @return string HTML + */ + protected function _quoteNameCallback($s) + { + return preg_replace_callback( + self::getAnchorRegex('/(%prefix%)?(%a_num%)/'), + array($this, '_quoteResCallback'), $s[0] + ); + } + + // }}} + // {{{ quoteRes() + + /** + * ���p�ϊ��i�P�Ɓj + * + * @param string $full >>1 + * @param string $qsign >> + * @param string $appointed_num 1 + * @return string + */ + abstract public function quoteRes($full, $qsign, $appointed_num); + + // }}} + // {{{ _quoteResCallback() + + /** + * ���p�ϊ��i�P�Ɓj + * + * @param array $s ���K�\���Ƀ}�b�`�����v�f�̔z�� + * @return string + */ + protected function _quoteResCallback(array $s) + { + return $this->quoteRes($s[0], $s[1], $s[2]); + } + + // }}} + // {{{ quoteResRange() + + /** + * ���p�ϊ��i�͈́j + * + * @param string $full >>1-100 + * @param string $qsign >> + * @param string $appointed_num 1-100 + * @return string + */ + abstract public function quoteResRange($full, $qsign, $appointed_num); + + // }}} + // {{{ _quoteResRangeCallback() + + /** + * ���p�ϊ��i�͈́j + * + * @param array $s ���K�\���Ƀ}�b�`�����v�f�̔z�� + * @return string + */ + protected function _quoteResRangeCallback(array $s) + { + return $this->quoteResRange($s[0], $s[1], $s[2]); + } + + // }}} + // {{{ checkQuoteResNums() + + /** + * HTML���b�Z�[�W���̈��p���X�̔ԍ����ċA�`�F�b�N���� + */ + public function checkQuoteResNums($res_num, $name, $msg, + $with_quotes = true, + $with_backlinks = null, + $cascade = true) + { + global $_conf; + + $this->_quote_check_depth = 0; + + if ($with_backlinks === null) { + $with_backlinks = ($_conf['backlink_list'] > 0 || $_conf['backlink_block'] > 0) ? true : false; + } + + if ($with_backlinks) { + return $this->checkQuoteResNumsFromSummary( + $res_num == 0 ? 1 : $res_num, $with_quotes, $with_backlinks); + } + + return $this->_checkQuoteResNums($res_num, $name, $msg); + } + + // }}} + // {{{ _checkQuoteResNums() + + /** + * HTML���b�Z�[�W���̈��p���X�̔ԍ����ċA�`�F�b�N���� + */ + protected function _checkQuoteResNums($res_num, $name, $msg) + { + // �ċA���~�b�^ + if ($this->_quote_check_depth > 30) { + return array(); + } else { + $this->_quote_check_depth++; + } + + if (array_key_exists($res_num, $this->_quote_res_nums)) { + return $this->_quote_res_nums[$res_num]; + } + + $aThread = $this->thread; + + $quote_res_nums = array(); + + $name = preg_replace('/(��.*)/', '', $name, 1); + + // ���O + if ($matches = $this->getQuoteResNumsName($name)) { + foreach ($matches as $a_quote_res_num) { + if ($a_quote_res_num) { + $quote_res_nums[] = $a_quote_res_num; + $a_quote_res_idx = $a_quote_res_num - 1; + + // �������g�̔ԍ��Ɠ���łȂ���΁A + if ($a_quote_res_num != $res_num) { + // �`�F�b�N���Ă��Ȃ��ԍ����ċA�`�F�b�N + if (!isset($this->_quote_res_nums_checked[$a_quote_res_num])) { + $this->_quote_res_nums_checked[$a_quote_res_num] = true; + if (isset($aThread->datlines[$a_quote_res_idx])) { + $datalinear = $aThread->explodeDatLine($aThread->datlines[$a_quote_res_idx]); + $quote_name = $datalinear[0]; + $quote_msg = $aThread->datlines[$a_quote_res_idx]; + $quote_res_nums = array_merge($quote_res_nums, + $this->_checkQuoteResNums($a_quote_res_num, + $quote_name, + $quote_msg)); + } + } + } + } + // $name=preg_replace("/([0-9]+)/", "", $name, 1); + } + } + + // >>1�̃����N����������O�� + // >>1 + $msg = preg_replace('{<[Aa] .+?>(>>[1-9][\\d\\-]*)}', '$1', $msg); + + //echo $msg; + if (preg_match_all(self::getAnchorRegex('/%full%/'), $msg, $out, PREG_PATTERN_ORDER)) { + foreach ($out[2] as $numberq) { + if ($matches=preg_split(self::getAnchorRegex('/%delimiter%/'), $numberq)) { + foreach ($matches as $a_quote_res_num) { + if (preg_match(self::getAnchorRegex('/%range_delimiter%/'),$a_quote_res_num)) { continue;} + $a_quote_res_num = (int) (mb_convert_kana($a_quote_res_num, 'n')); + $a_quote_res_idx = $a_quote_res_num - 1; + + //echo $a_quote_res_num; + + if (!$a_quote_res_num) {break;} + $quote_res_nums[] = $a_quote_res_num; + + // �������g�̔ԍ��Ɠ���łȂ���΁A + if ($a_quote_res_num != $res_num) { + // �`�F�b�N���Ă��Ȃ��ԍ����ċA�`�F�b�N + if (!isset($this->_quote_res_nums_checked[$a_quote_res_num])) { + $this->_quote_res_nums_checked[$a_quote_res_num] = true; + if (isset($aThread->datlines[$a_quote_res_idx])) { + $datalinear = $aThread->explodeDatLine($aThread->datlines[$a_quote_res_idx]); + $quote_name = $datalinear[0]; + $quote_msg = $aThread->datlines[$a_quote_res_idx]; + $quote_res_nums = array_merge($quote_res_nums, + $this->_checkQuoteResNums($a_quote_res_num, + $quote_name, + $quote_msg)); + } + } + } + + } + + } + + } + + } + + if (count($quote_res_nums)) { + sort($quote_res_nums, SORT_NUMERIC); + $this->_quote_res_nums[$res_num] = array_unique($quote_res_nums); + $quote_res_nums = $this->_quote_res_nums[$res_num]; + } + + return $quote_res_nums; + } + + // }}} + // {{{ checkQuoteResNumsFromSummary() + + /** + * ���p���X�W�v���ʂ���|�b�v�A�b�v�p�ɗp�ӂ��ׂ��ԍ����ċA�`�F�b�N���� + */ + public function checkQuoteResNumsFromSummary($res_num, $with_quotes, $with_backlinks) + { + // �ċA���~�b�^ + if ($this->_quote_check_depth > 3000) { + return array(); + } else { + $this->_quote_check_depth++; + } + + $ret = array(); + + // �Q�ƃ��X + if ($with_quotes) { + $ret = array_merge($ret, + $this->_checkQuoteResNumsFromSummary( + $res_num, $this->getQuoteTo(), $with_quotes, $with_backlinks)); + } + // ��Q�ƃ��X + if ($with_backlinks) { + $ret = array_merge($ret, + $this->_checkQuoteResNumsFromSummary( + $res_num, $this->getQuoteFrom(), $with_quotes, $with_backlinks)); + } + return $ret; + } + + // }}} + // {{{ _checkQuoteResNumsFromSummary() + + protected function _checkQuoteResNumsFromSummary($res_num, $quotes, $with_quotes, $with_backlinks) + { + $ret = array(); + if (array_key_exists($res_num, $quotes)) { + foreach ($quotes[$res_num] as $quote_num) { + $ret[] = $quote_num; + if ($quote_num != $res_num) { + if (!isset($this->_quote_res_nums_checked[$quote_num])) { + $this->_quote_res_nums_checked[$quote_num] = true; + $ret = array_merge($ret, + $this->checkQuoteResNumsFromSummary($quote_num, $with_quotes, $with_backlinks)); + } + } + } + } + return $ret; + } + + // }}} + // {{{ getQuoteResNumsName() + + public function getQuoteResNumsName($name) + { + if (strlen(trim($name)) == 0 || $name == $this->_nanashiName) { + return false; + } + + // �g���b�v������ + $name = preg_replace('/��.*/', '', $name, 1); + $name = strip_tags($name); + + /* + //if (preg_match('/[0-9]+/', $name, $m)) { + return (int)$m[0]; + } + */ + + if (preg_match_all(self::getAnchorRegex('/(?:^|%prefix%)(%nums%)/'), $name, $matches)) { + foreach ($matches[1] as $a_quote_res_num) { + $quote_res_nums[] = (int)mb_convert_kana($a_quote_res_num, 'n'); + } + return array_unique($quote_res_nums); + } + + return false; + } + + // }}} + // {{{ _wikipediaFilter() + + /** + * [[���]]������������Wikipedia�֎��������N + * + * @param string $msg ���b�Z�[�W + * @return string + * + * original code: + * http://akid.s17.xrea.com/p2puki/index.phtml?%A5%E6%A1%BC%A5%B6%A1%BC%A5%AB%A5%B9%A5%BF%A5%DE%A5%A4%A5%BA%28rep2%20Ver%201.7.0%A1%C1%29#led2c85d + */ + protected function _wikipediaFilter($msg) + { + if (strpos($msg, '[[') === false) { + return $msg; + } + + $msg = preg_replace_callback('/\\[\\[([^\\[\\]\\n<>]+)\\]\\]+/u', + array($this, '_linkToWikipeidaCallback'), + mb_convert_encoding($msg, 'UTF-8', 'CP932')); + + return mb_convert_encoding($msg, 'CP932', 'UTF-8'); + } + + // }}} + // {{{ _linkToWikipeidaCallback() + + /** + * Wikipedia�̌��������N�ɕϊ����ĕԂ�. + * + * @param array $matches + * @return string + */ + protected function _linkToWikipeidaCallback($matches) + { + return '[[' . $this->_linkToWikipeida($matches[1]) . ']]'; + } + + // }}} + // {{{ _linkToWikipeida() + + /** + * Wikipedia�̌��������N�ɕϊ����ĕԂ�. + * + * @param string $word ��� + * @return string + */ + abstract protected function _linkToWikipeida($word); + + // }}} + // {{{ _makeQuotes() + + /** + * ���X�f�[�^���W�v����$this->_quote_to��$this->_quote_from�ɕۑ�. + */ + protected function _makeQuotes() + { + global $_conf; + + $this->_quote_to = array(); + $this->_quote_from = array(); + + if (!$this->thread->datlines) { + return; + } + + foreach ($this->thread->datlines as $num => $line) { + list($name, $mail, $date_id, $msg) = $this->thread->explodeDatLine($line); + + // NG���ځ[��`�F�b�N + if (($id = $this->thread->ids[$num + 1]) !== null) { + $date_id = str_replace($this->thread->idp[$i] . $id, 'ID:' . $id, $date_id); + } + $ng_type = $this->_ngAbornCheck($num + 1, strip_tags($name), $mail, $date_id, $id, $msg); + if ($ng_type == self::ABORN) { + continue; + } + + // ���O + if ($nmatches = $this->getQuoteResNumsName($name)) { + foreach ($nmatches as $a_quote_res_num) { + if ($a_quote_res_num) { + if (!array_key_exists($a_quote_res_num, $this->_quote_from) || $this->_quote_from[$a_quote_res_num] === null) { + $this->_quote_from[$a_quote_res_num] = array(); + } + if (!in_array($num + 1, $this->_quote_from[$a_quote_res_num])) { + $this->_quote_from[$a_quote_res_num][] = $num + 1; + } + + if (!array_key_exists($num + 1, $this->_quote_to) || $this->_quote_to[$num + 1] === null) { + $this->_quote_to[$num + 1] = array(); + } + if (!in_array($a_quote_res_num, $this->_quote_to[$num + 1])) { + $this->_quote_to[$num + 1][] = $a_quote_res_num; + } + } + } + } + + + // >>1�̃����N����������O�� + // >>1 + $msg = preg_replace('{<[Aa] .+?>(>>[1-9][\\d\\-]*)}', '$1', $msg); + if (!preg_match_all(self::getAnchorRegex('/%full%/'), $msg, $out, PREG_PATTERN_ORDER)) { + continue; + } + foreach ($out[2] as $numberq) { + if (!preg_match_all(self::getAnchorRegex('/(?:%prefix%)?(%a_range%)/'), $numberq, $anchors, PREG_PATTERN_ORDER)) continue; + foreach ($anchors[1] as $anchor) { + if (preg_match(self::getAnchorRegex('/(%a_num%)%range_delimiter%(?:%prefix%)?(%a_num%)/'), $anchor, $matches)) { + $from = intval(mb_convert_kana($matches[1], 'n')); + $to = intval(mb_convert_kana($matches[2], 'n')); + if ($from < 1 || $to < 1 || $from > $to + || ($to - $from + 1) > sizeof($this->thread->datlines)) { + continue; + } + if ($_conf['backlink_list_range_anchor_limit'] != 0) { + if ($to - $from >= $_conf['backlink_list_range_anchor_limit']) { + continue; + } + } + for ($i = $from; $i <= $to; $i++) { + if ($i > sizeof($this->thread->datlines)) { + break; + } + if ($_conf['backlink_list_future_anchor'] == 0) { + // ���X�ԍ��ȍ~�̃A���J�[�͖������� + if ($i >= $num + 1) { + continue; + } + } + if (!array_key_exists($i, $this->_quote_from) || $this->_quote_from[$i] === null) { + $this->_quote_from[$i] = array(); + } + if (!in_array($num + 1, $this->_quote_from[$i])) { + $this->_quote_from[$i][] = $num + 1; + } + } + } elseif (preg_match(self::getAnchorRegex('/(%a_num%)/'), $anchor, $matches)) { + $quote_num = intval(mb_convert_kana($matches[1], 'n')); + if (!array_key_exists($num + 1, $this->_quote_to) || $this->_quote_to[$num + 1] === null) { + $this->_quote_to[$num + 1] = array(); + } + if (!in_array($quote_num, $this->_quote_to[$num + 1])) { + $this->_quote_to[$num + 1][] = $quote_num; + } + + if ($_conf['backlink_list_future_anchor'] == 0) { + // ���X�ԍ��ȍ~�̃A���J�[�͖������� + if ($quote_num >= $num + 1) { + continue; + } + } + if (!array_key_exists($quote_num, $this->_quote_from) || $this->_quote_from[$quote_num] === null) { + $this->_quote_from[$quote_num] = array(); + } + if (!in_array($num + 1, $this->_quote_from[$quote_num])) { + $this->_quote_from[$quote_num][] = $num + 1; + } + } + } + } + } + } + + // }}} + // {{{ getQuoteFrom() + + /** + * �탌�X���X�g��Ԃ�. + * + * @return array + */ + public function getQuoteFrom() + { + if ($this->_quote_from === null) { + $this->_makeQuotes(); // �탌�X�f�[�^�W�v + } + return $this->_quote_from; + } + + // }}} + // {{{ getQuoteTo() + + /** + * ���X���X�g��Ԃ�. + * + * @return array + */ + public function getQuoteTo() + { + if ($this->_quote_to === null) { + $this->_makeQuotes(); // ���X�f�[�^�W�v + } + return $this->_quote_to; + } + + // }}} + // {{{ _quotebackListHtml() + + /** + * �탌�X���X�g��HTML�Ő��`���ĕԂ�. + * + * @param int $resnum ���X�ԍ� + * @param int $type 1:�c�`�� 2:���`�� 3:�W�J�p�u���b�N�p������ + * @param bool $popup ���`���ł̃|�b�v�A�b�v����(true:�|�b�v�A�b�v����Afalse:�}������) + * @return string + */ + protected function _quotebackListHtml($resnum, $type, $popup=true) + { + $quote_from = $this->getQuoteFrom(); + if (!array_key_exists($resnum, $quote_from)) return $ret; + + $anchors = $quote_from[$resnum]; + sort($anchors); + + if ($type == 1) { + return $this->_quotebackVerticalListHtml($anchors, $resnum); + } elseif ($type == 2) { + return $this->_quotebackHorizontalListHtml($anchors, $resnum); + } elseif ($type == 3) { + return $this->_quotebackResData($anchors, $resnum); + } + } + + // }}} + // {{{ _quotebackVerticalListHtml() + + protected function _quotebackVerticalListHtml($anchors, $resnum) + { + $ret = '
    '; + $anchor_cnt = 1; + foreach ($anchors as $anchor) { + if ($anchor_cnt > 1) { + $ret .= '
  • ��
  • '; + } + if ($anchor_cnt < count($anchors)) { + $ret .= '
  • ��'; + } else { + $ret .= '
  • ��'; + } + $ret .= ($anchor == $resnum) + ? $anchor + : $this->quoteRes($anchor, '', $anchor, true); + $anchor_cnt++; + } + $ret .= '
'; + return $ret; + } + + // }}} + // {{{ _quotebackHorizontalListHtml() + + protected function _quotebackHorizontalListHtml($anchors, $resnum) + { + $ret = '
'; + $count = 0; + + foreach ($anchors as $idx => $anchor) { + if ($anchor == $resnum) { + continue; + } + $anchor_link= $this->quoteRes('>>' . $anchor, '>>', $anchor); + $qres_id = ($this->_matome ? "t{$this->_matome}" : '') ."qr{$anchor}"; + $ret .= '
'; + $ret .= sprintf('
�y�Q�ƃ��X�F%s�z
',$anchor_link); + $ret .= '
'; + $count++; + } + $ret .= '
'; + + return $ret; + } + + // }}} + // {{{ _quotebackResData() + + protected function _quotebackResData($anchors, $resnum) + { + $ret = array(); + foreach ($anchors as $idx => $anchor) { + if ($anchor == $resnum) { + continue; + } + $ret[] = ($this->_matome ? "t{$this->_matome}" : '') ."qr{$anchor}"; + } + + return join('/', $ret); + } + + // }}} + // {{{ getDatochiResiduums() + + /** + * DAT�����̍ۂɎ擾�ł���>>1�ƍŌ�̃��X��HTML�ŕԂ�. + * + * @return string|false + */ + public function getDatochiResiduums() + { + $ret = ''; + $elines = $this->thread->datochi_residuums; + if (!count($elines)) { + return $ret; + } + + $this->thread->onthefly = true; + $ret = "
on the fly
\n"; + $ret .= "
\n"; + + foreach($elines as $num => $line) { + $res = $this->transRes($line, $num); + if (is_array($res)) { + $ret .= $res['body'] . $res['q']; + } else { + $ret .= $res; + } + } + + $ret .= "
\n"; + + return $ret; + } + + // }}} + // {{{ getAutoFavRanks() + + /** + * ���������N�ݒ��Ԃ�. + * + * @return array + */ + public function getAutoFavRank() + { + global $_conf; + + if ($this->_auto_fav_rank !== false) { + return $this->_auto_fav_rank; + } + + $ranks = explode(',', strtr($_conf['expack.ic2.fav_auto_rank_setting'], ' ', '')); + $ret = null; + if ($_conf['expack.misc.multi_favs']) { + $idx = 0; + if (!is_array($this->thread->favs)) { + return null; + } + foreach ($this->thread->favs as $fav) { + if ($fav) { + $rank = $ranks[$idx]; + if (is_numeric($rank)) { + $rank = intval($rank); + if ($ret === null) { + $ret = $rank; + } else { + $ret = max($ret, $rank); + } + } + } + $idx++; + } + } else { + if ($this->thread->fav && is_numeric($ranks[0])) { + $ret = intval($ranks[0]); + } + } + $this->_auto_fav_rank = $ret; + + return $ret; + } + + // }}} + // {{{ isAutoFavRankOverride() + + /** + * ���������N�ݒ�Ń����N���㏑�����ׂ����Ԃ�. + * + * @param int $now ���݂̃����N + * @param int $new ���������N + * @return bool + */ + static public function isAutoFavRankOverride($now, $new) + { + global $_conf; + + switch ($_conf['expack.ic2.fav_auto_rank_override']) { + case 0: + return false; + break; + case 1: + return $now != $new; + break; + case 2: + return $now == 0 && $now != $new; + break; + case 3: + return $now < $new; + break; + default: + return false; + } + return false; + } + + // }}} + // {{{ getAnchorRegex() + + /** + * �A���J�[�̐��K�\����Ԃ� + * + * @param string $pattern ex)'/%full%/' + * @param boolean $unicode + * @return string + */ + static public function getAnchorRegex($pattern, $unicode = false) + { + if (!array_key_exists($pattern, self::$_anchorRegexes)) { + self::$_anchorRegexes[$pattern] = strtr($pattern, self::_getAnchorRegexParts()); + // �卷�͂Ȃ��� compileMobile2chUriCallBack() �̂悤�� preg_relplace_callback()���Ă����������B + } + if ($unicode) { + return StrSjis::toUnicodePattern($_anchorRegexes[$pattern]); + } + return self::$_anchorRegexes[$pattern]; + } + + // }}} + // {{{ _getAnchorRegexParts() + + /** + * �A���J�[�̍\���v�f�i���K�\���p�[�c�̔z��j��Ԃ� + * + * @param void + * @return string + */ + static private function _getAnchorRegexParts() + { + if (!is_null(self::$_anchorRegexParts)) { + return self::$_anchorRegexParts; + } + + $anchor = array(); + + // �A���J�[�̍\���v�f�i���K�\���p�[�c�̔z��j + + // �󔒕��� + $anchor_space = '(?:[ ]|�@)'; + //$anchor[' '] = ''; + + // �A���J�[���p�q >> + $anchor['prefix'] = "(?:(?:>|��|<|��|�r){1,2}|(?:\)){2}|�t|��){$anchor_space}*\.?"; + + // ���� + $anchor['a_digit'] = '(?:\\d|�O|�P|�Q|�R|�S|�T|�U|�V|�W|�X)'; + /* + $anchor[0] = '(?:0|�O)'; + $anchor[1] = '(?:1|�P)'; + $anchor[2] = '(?:2|�Q)'; + $anchor[3] = '(?:3|�R)'; + $anchor[4] = '(?:4|�S)'; + $anchor[5] = '(?:5|�T)'; + $anchor[6] = '(?:6|�U)'; + $anchor[7] = '(?:7|�V)'; + $anchor[8] = '(?:8|�W)'; + $anchor[9] = '(?:9|�X)'; + */ + + // �͈͎w��q + // -|�]|�[ = HYPHEN-MINUS | HYPHEN | KATAKANA-HIRAGANA PROLONGED SOUND MARK + $anchor['range_delimiter'] = '(?:-|\\x81\\x5d|\\x81\\x5b)'; // [\\-\\x{2010}\\x{30fc}] + + // �񋓎w��q + $anchor['delimiter'] = "{$anchor_space}?(?:[\.,=+]|�A|�E|��|�C){$anchor_space}?"; + + // ���ځ[��p�A���J�[���p�q + //$anchor['prefix_abon'] = ">{1,2}{$anchor_space}?"; + + // ���X�ԍ� + $anchor['a_num'] = sprintf('%s{1,4}', $anchor['a_digit']); + + // ���X�͈� + /* + $anchor['a_range'] = sprintf('%s(?:%s%s)?', + $anchor['a_num'], $anchor['range_delimiter'], $anchor['a_num'] + ); + */ + $anchor['a_range'] = sprintf('%s(?:%s(?:%s)?%s)?', + $anchor['a_num'], $anchor['range_delimiter'], $anchor['prefix'], $anchor['a_num'] + ); + + // ���X�͈̗͂� + $anchor['ranges'] = sprintf('%s(?:%s%s)*(?!%s)', + $anchor['a_range'], $anchor['delimiter'], $anchor['a_range'], $anchor['a_digit'] + ); + + // ���X�ԍ��̗� + $anchor['nums'] = sprintf('%s(?:%s%s)*(?!%s)', + $anchor['a_num'], $anchor['delimiter'], $anchor['a_num'], $anchor['a_digit'] + ); + + // �A���J�[�S�� + $anchor['full'] = sprintf('(%s)(%s)', $anchor['prefix'], $anchor['ranges']); + + // getAnchorRegex() �� strtr() �u���p��key�� '%key%' �ɕϊ����� + foreach ($anchor as $k => $v) { + $anchor['%' . $k . '%'] = $v; + unset($anchor[$k]); + } + + self::$_anchorRegexParts = $anchor; + + return self::$_anchorRegexParts; + } + + // }}} + // {{{_buildStrToLinkRegex() + + /** + * �����N�Ƃ��Ĉ����p�^�[����Ԃ� + * + * @param void + * @return string + */ + static protected function _buildStrToLinkRegex() + { + return '{' + . '(?P(<[Aa] .+?>)(.*?)())' // �����N�iPCRE�̓�����A�K�����̃p�^�[�����ŏ��Ɏ��s����j + . '|' + . '(?:' + . '(?P' // ���p + . self::getAnchorRegex('%full%') + . ')' + . '|' + . '(?P' + . '(ftp|h?ttps?|tps?)://([0-9A-Za-z][\\w!#%&+*,\\-./:;=?@\\[\\]^~]+)' // URL + . ')' + . '|' + . '(?PID: ?([0-9A-Za-z/.+]{8,11})(?=[^0-9A-Za-z/.+]|$))' // ID�i8,10�� +PC/�g�ю��ʃt���O�j + . ')' + . '}'; + } + + // }}} +} + +// }}} + +/* + * Local Variables: + * mode: php + * coding: cp932 + * tab-width: 4 + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ +// vim: set syn=php fenc=cp932 ai et ts=4 sw=4 sts=4 fdm=marker: diff --git a/lib/live/live_ShowThreadPc.php b/lib/live/live_ShowThreadPc.php new file mode 100755 index 000000000..7c2f12102 --- /dev/null +++ b/lib/live/live_ShowThreadPc.php @@ -0,0 +1,1999 @@ +_url_handlers = array( + 'plugin_linkThread', + 'plugin_link2chSubject', + ); + // +Wiki + if (isset($GLOBALS['linkPluginCtl'])) { + $this->_url_handlers[] = 'plugin_linkPlugin'; + } + if (isset($GLOBALS['replaceImageUrlCtl'])) { + $this->_url_handlers[] = 'plugin_replaceImageUrl'; + } + if (P2_IMAGECACHE_AVAILABLE == 2) { + $this->_url_handlers[] = 'plugin_imageCache2'; + } elseif ($_conf['preview_thumbnail']) { + $this->_url_handlers[] = 'plugin_viewImage'; + } + if ($_conf['link_youtube']) { + $this->_url_handlers[] = 'plugin_linkYouTube'; + } + if ($_conf['link_niconico']) { + $this->_url_handlers[] = 'plugin_linkNicoNico'; + } + $this->_url_handlers[] = 'plugin_linkURL'; + + // imepita��URL�����H����ImageCache2������v���O�C����o�^ + if (P2_IMAGECACHE_AVAILABLE == 2) { + $this->addURLHandler(array($this, 'plugin_imepitaToImageCache2')); + } + + // �T���l�C���\����������ݒ� + if (!isset($GLOBALS['pre_thumb_unlimited']) || !isset($GLOBALS['pre_thumb_limit'])) { + if (isset($_conf['pre_thumb_limit']) && $_conf['pre_thumb_limit'] > 0) { + $GLOBALS['pre_thumb_limit'] = $_conf['pre_thumb_limit']; + $GLOBALS['pre_thumb_unlimited'] = false; + } else { + $GLOBALS['pre_thumb_limit'] = null; // �k���l����isset()��false��Ԃ� + $GLOBALS['pre_thumb_unlimited'] = true; + } + } + $GLOBALS['pre_thumb_ignore_limit'] = false; + + // �A�N�e�B�u���i�[������ + if (P2_ACTIVEMONA_AVAILABLE) { + ExpackLoader::initActiveMona($this); + } + + // ImageCache2������ + if (P2_IMAGECACHE_AVAILABLE == 2) { + ExpackLoader::initImageCache($this); + } + + // �񓯊����X�|�b�v�A�b�v�ESPM������ + $js_id = sprintf('%u', crc32($this->thread->keydat)); + if ($this->_matome) { + $this->asyncObjName = "t{$this->_matome}asp{$js_id}"; + $this->spmObjName = "t{$this->_matome}spm{$js_id}"; + } else { + $this->asyncObjName = "asp{$js_id}"; + $this->spmObjName = "spm{$js_id}"; + } + + // ������������ + $this->setBbsNonameName(); + } + + // }}} + // {{{ transRes() + + /** + * Dat���X��HTML���X�ɕϊ����� + * + * @param string $ares dat��1���C�� + * @param int $i ���X�ԍ� + * @param string $pattern �n�C���C�g�p���K�\�� + * @return string + */ + public function transRes($ares, $i, $pattern = null) + { + global $_conf, $STYLE, $mae_msg; + + list($name, $mail, $date_id, $msg) = $this->thread->explodeDatLine($ares); + if (($id = $this->thread->ids[$i]) !== null) { + $idstr = 'ID:' . $id; + $date_id = str_replace($this->thread->idp[$i] . $id, $idstr, $date_id); + } else { + $idstr = null; + } + + // +Wiki:�u�����[�h + if (isset($GLOBALS['replaceWordCtl'])) { + $replaceWordCtl = $GLOBALS['replaceWordCtl']; + $name = $replaceWordCtl->replace('name', $this->thread, $ares, $i); + $mail = $replaceWordCtl->replace('mail', $this->thread, $ares, $i); + $date_id = $replaceWordCtl->replace('date', $this->thread, $ares, $i); + $msg = $replaceWordCtl->replace('msg', $this->thread, $ares, $i); + } + + $tores = ''; + $rpop = ''; + if ($this->_matome) { + $res_id = "t{$this->_matome}r{$i}"; + $msg_id = "t{$this->_matome}m{$i}"; + } else { + $res_id = "r{$i}"; + $msg_id = "m{$i}"; + } + $msg_class = 'message'; + + // NG���ځ[��`�F�b�N + $ng_type = $this->_ngAbornCheck($i, strip_tags($name), $mail, $date_id, $id, $msg, false, $ng_info); + if ($ng_type == self::ABORN) { + return $this->_abornedRes($res_id); + } + if ($ng_type != self::NG_NONE) { + $ngaborns_head_hits = self::$_ngaborns_head_hits; + $ngaborns_body_hits = self::$_ngaborns_body_hits; + } + + // AA���� + if ($this->am_autodetect && $this->activeMona->detectAA($msg)) { + $msg_class .= ' ActiveMona'; + } + + //============================================================= + // ���X���|�b�v�A�b�v�\�� + //============================================================= + if ($_conf['quote_res_view']) { + $quote_res_nums = $this->checkQuoteResNums($i, $name, $msg); + + foreach ($quote_res_nums as $rnv) { + if (!isset($this->_quote_res_nums_done[$rnv])) { + $this->_quote_res_nums_done[$rnv] = true; + if (isset($this->thread->datlines[$rnv-1])) { + if ($this->_matome) { + $qres_id = "t{$this->_matome}qr{$rnv}"; + } else { + $qres_id = "qr{$rnv}"; + } + $ds = $this->qRes($this->thread->datlines[$rnv-1], $rnv); + $onPopUp_at = " onmouseover=\"showResPopUp('{$qres_id}',event)\" onmouseout=\"hideResPopUp('{$qres_id}')\""; + $rpop .= "
\n{$ds}
\n"; + } + } + } + } + + //============================================================= + // �܂Ƃ߂ďo�� + //============================================================= + + $name = $this->transName($name); // ���OHTML�ϊ� + $msg = $this->transMsg($msg, $i); // ���b�Z�[�WHTML�ϊ� + + + // BE�v���t�@�C�������N�ϊ� + $date_id = $this->replaceBeId($date_id, $i); + + // HTML�|�b�v�A�b�v + if ($_conf['iframe_popup']) { + $date_id = preg_replace_callback("{((\?#*)|(Lv\.\d+))}", array($this, 'iframePopupCallback'), $date_id); + } + + // NG���b�Z�[�W�ϊ� + if ($ng_type != self::NG_NONE && count($ng_info)) { + $ng_info = implode(', ', $ng_info); + $msg = <<{$ng_info} +
{$msg}
+EOMSG; + } + + // NG�l�[���ϊ� + if ($ng_type & self::NG_NAME) { + $name = <<{$name} +EONAME; + $msg = <<{$msg}
+EOMSG; + + // NG���[���ϊ� + } elseif ($ng_type & self::NG_MAIL) { + $mail = <<{$mail} +EOMAIL; + $msg = <<{$msg} +EOMSG; + + // NGID�ϊ� + } elseif ($ng_type & self::NG_ID) { + $date_id = <<{$date_id} +EOID; + $msg = <<{$msg} +EOMSG; + + } + + /* + //�u��������V���v�摜��}�� + if ($i == $this->thread->readnum +1) { + $tores .= <<�V�����X +EOP; + } + */ + + // SPM + if ($_conf['expack.spm.enabled']) { + $spmeh = " onmouseover=\"{$this->spmObjName}.show({$i},'{$msg_id}',event)\""; + $spmeh .= " onmouseout=\"{$this->spmObjName}.hide(event)\""; + } else { + $spmeh = ''; + } + + // +live �X�����e�\�����폜 + + /*if ($_conf['expack.am.enabled'] == 2) { + $tores .= << +// +\n +EOJS; + }*/ + + // �܂Ƃ߂ăt�B���^�F���� + if ($pattern) { + $tores = StrCtl::filterMarking($pattern, $tores); + } + + return array('body' => $tores, 'q' => $rpop); + } + + // }}} + // {{{ quoteOne() + + /** + * >>1 ��\������ (���p�|�b�v�A�b�v�p) + */ + public function quoteOne() + { + global $_conf; + + if (!$_conf['quote_res_view']) { + return false; + } + + $rpop = ''; + $quote_res_nums = $this->checkQuoteResNums(0, '1', ''); + if (array_search(1, $quote_res_nums) === false) { + $quote_res_nums[] = 1; + } + + foreach ($quote_res_nums as $rnv) { + if (!isset($this->_quote_res_nums_done[$rnv])) { + $this->_quote_res_nums_done[$rnv] = true; + if (isset($this->thread->datlines[$rnv-1])) { + if ($this->_matome) { + $qres_id = "t{$this->_matome}qr{$rnv}"; + } else { + $qres_id = "qr{$rnv}"; + } + $ds = $this->qRes($this->thread->datlines[$rnv-1], $rnv); + $onPopUp_at = " onmouseover=\"showResPopUp('{$qres_id}',event)\" onmouseout=\"hideResPopUp('{$qres_id}')\""; + $rpop .= "
\n{$ds}
\n"; + } + } + } + + $res1['q'] = $rpop; + $res1['body'] = $this->transMsg('>>1', 1); + + return $res1; + } + + // }}} + // {{{ qRes() + + /** + * ���X���pHTML + */ + public function qRes($ares, $i) + { + global $_conf; + + $resar = $this->thread->explodeDatLine($ares); + $name = $this->transName($resar[0]); + $mail = $resar[1]; + if (($id = $this->thread->ids[$i]) !== null) { + $idstr = 'ID:' . $id; + $date_id = str_replace($this->thread->idp[$i] . $id, $idstr, $resar[2]); + } else { + $idstr = null; + $date_id = $resar[2]; + } + $msg = $this->transMsg($resar[3], $i); + + $tores = ''; + + if ($this->_matome) { + $qmsg_id = "t{$this->_matome}qm{$i}"; + } else { + $qmsg_id = "qm{$i}"; + } + + // >>1 + if ($i == 1) { + $tores = "

{$this->thread->ttitle_hd}

"; + } + + // BE�v���t�@�C�������N�ϊ� + $date_id = $this->replaceBeId($date_id, $i); + + // HTML�|�b�v�A�b�v + if ($_conf['iframe_popup']) { + $date_id = preg_replace_callback("{((\?#*)|(Lv\.\d+))}", array($this, 'iframePopupCallback'), $date_id); + } + // + + // ID�t�B���^ + if ($_conf['flex_idpopup'] == 1 && $id && $this->thread->idcount[$id] > 1) { + $date_id = str_replace($idstr, $this->idFilter($idstr, $id), $date_id); + } + + $msg_class = 'message'; + + // AA ���� + if ($this->am_autodetect && $this->activeMona->detectAA($msg)) { + $msg_class .= ' ActiveMona'; + } + + // SPM + if ($_conf['expack.spm.enabled']) { + $spmeh = " onmouseover=\"{$this->spmObjName}.show({$i},'{$qmsg_id}',event)\""; + $spmeh .= " onmouseout=\"{$this->spmObjName}.hide(event)\""; + } else { + $spmeh = ''; + } + + // $tores�ɂ܂Ƃ߂ďo�� + $tores .= '
'; + $tores .= "{$i} : "; // �ԍ� + $tores .= preg_replace('{[ ]*}i', '', "{$name} : "); + if ($mail) { + $tores .= $mail . ' : '; // ���[�� + } + $tores .= $date_id; // ���t��ID + if ($this->am_side_of_id) { + $tores .= ' ' . $this->activeMona->getMona($qmsg_id); + } + $tores .= "
\n"; + + // �탌�X���X�g(�c�`��) + if ($_conf['backlink_list'] == 1 || $_conf['backlink_list'] > 2) { + $tores .= $this->_quotebackListHtml($i, 1); + } + + $tores .= "
{$msg}
\n"; // ���e + // �탌�X���X�g(���`��) + if ($_conf['backlink_list'] == 2 || $_conf['backlink_list'] > 2) { + $tores .= $this->_quotebackListHtml($i, 2); + } + + // ��Q�ƃu���b�N�p�f�[�^ + if ($_conf['backlink_block'] > 0) { + $tores .= $this->_getBacklinkComment($i); + } + + return $tores; + } + + // }}} + // {{{ _getBacklinkComment() + + protected function _getBacklinkComment($i) + { + $backlinks = $this->_quotebackListHtml($i, 3); + if (strlen($backlinks)) { + return ''; + } + return ''; + } + + // }}} + // {{{ transName() + + /** + * ���O��HTML�p�ɕϊ����� + * + * @param string $name ���O + * @return string + */ + public function transName($name) + { + global $_conf; + + // �g���b�v��z�X�g�t���Ȃ番������ + if (($pos = strpos($name, '��')) !== false) { + $trip = substr($name, $pos); + $name = substr($name, 0, $pos); + } else { + $trip = null; + } + + // ���������p���X�|�b�v�A�b�v�����N�� + if ($_conf['quote_res_view']) { + if (strlen($name) && $name != $this->_nanashiName) { + $name = preg_replace_callback( + self::getAnchorRegex('/(?:^|%prefix%)(%nums%)/'), + array($this, '_quoteNameCallback'), $name + ); + } + } + + if ($trip) { + $name .= $trip; + } elseif ($name) { + // ����������� + $name = $name . ' '; + //if (in_array(0xF0 & ord(substr($name, -1)), array(0x80, 0x90, 0xE0))) { + // $name .= ' '; + //} + } + + return $name; + } + + // }}} + // {{{ transMsg() + + /** + * dat�̃��X���b�Z�[�W��HTML�\���p���b�Z�[�W�ɕϊ����� + * + * @param string $msg ���b�Z�[�W + * @param int $mynum ���X�ԍ� + * @return string + */ + public function transMsg($msg, $mynum) + { + global $_conf; + global $pre_thumb_ignore_limit; + + // 2ch���`����dat + if ($this->thread->dat_type == '2ch_old') { + $msg = str_replace('���M', ',', $msg); + $msg = preg_replace('/&(?=[^;])/', '&', $msg); + } + + // &�␳ + $msg = preg_replace('/&(?!#?\\w+;)/', '&', $msg); + + // Safari���瓊�e���ꂽ�����N���`���_�̕��������␳ + //$msg = preg_replace('{(h?t?tp://[\w\.\-]+/)�`([\w\.\-%]+/?)}', '$1~$2', $msg); + + // >>1�̃����N����������O�� + // >>1 + $msg = preg_replace('{<[Aa] .+?>(>>\\d[\\d\\-]*)}', '$1', $msg); + + // �{����2ch��DAT���_�łȂ���Ă��Ȃ��ƃG�X�P�[�v�̐����������Ȃ��C������B�iURL�����N�̃}�b�`�ŕ���p���o�Ă��܂��j + //$msg = str_replace(array('"', "'"), array('"', '''), $msg); + + // 2006/05/06 �m�[�g���̌딽���΍� body onload=window() + $msg = str_replace('onload=window()', 'onload=window()', $msg); + + // �V�����X�̉摜�͕\�������𖳎�����ݒ�Ȃ� + if ($mynum > $this->thread->readnum && $_conf['expack.ic2.newres_ignore_limit']) { + $pre_thumb_ignore_limit = true; + } + + // �����̉��s�ƘA��������s������ + if ($_conf['strip_linebreaks']) { + $msg = $this->stripLineBreaks($msg /*, '
***
'*/); + } + + // ���p��URL�Ȃǂ������N + $msg = $this->transLink($msg); + + // Wikipedia�L�@�ւ̎��������N + if ($_conf['_linkToWikipeida']) { + $msg = $this->_wikipediaFilter($msg); + } + + return $msg; + } + + // }}} + // {{{ _abornedRes() + + /** + * ���ځ[�񃌃X��HTML���擾���� + * + * @param string $res_id + * @return string + */ + protected function _abornedRes($res_id) + { + global $_conf; + + if ($_conf['ngaborn_purge_aborn']) { + return ''; + } + + return << +
 
+
 
+\n +EOP; + } + + // }}} + // {{{ idFilter() + + /** + * ID�t�B���^�����O�|�b�v�A�b�v�ϊ� + * + * @param string $idstr ID:xxxxxxxxxx + * @param string $id xxxxxxxxxx + * @return string + */ + public function idFilter($idstr, $id) + { + global $_conf; + + // ID��8���܂���10��(+�g��/PC���ʎq)�Ɖ��肵�� + /* + if (strlen($id) % 2 == 1) { + $id = substr($id, 0, -1); + } + */ + $num_ht = ''; + if (isset($this->thread->idcount[$id]) && $this->thread->idcount[$id] > 0) { + $num = (string) $this->thread->idcount[$id]; + if ($_conf['iframe_popup'] == 3) { + $num_ht = ' '; + $num_ht .= preg_replace('/\\d/', '', $num); + $num_ht .= ' '; + } else { + $num_ht = '('.$num.')'; + } + } else { + return $idstr; + } + + if ($_conf['coloredid.enable'] > 0 && preg_match("|^ID:[ ]?[0-9A-Za-z/.+]{8,11}|",$idstr)) { + if ($this->_ids_for_render === null) { + $this->_ids_for_render = array(); + } + $this->_ids_for_render[substr($id, 0, 8)] = $this->thread->idcount[$id]; + if ($_conf['coloredid.click'] > 0) { + $num_ht = '' . $num_ht . ''; + } + $idstr = $this->_coloredIdStr( + $idstr, $id, $_conf['coloredid.click'] > 0 ? true : false); + } + + $filter_url = $_conf['read_php'] . '?' . http_build_query(array( + 'host' => $this->thread->host, + 'bbs' => $this->thread->bbs, + 'key' => $this->thread->key, + 'ls' => 'all', + 'offline' => '1', + 'idpopup' => '1', + 'rf' => array( + 'field' => ResFilter::FIELD_ID, + 'method' => ResFilter::METHOD_JUST, + 'match' => ResFilter::MATCH_ON, + 'include' => ResFilter::INCLUDE_NONE, + 'word' => $id, + ), + ), '', '&') . $_conf['k_at_a']; + + if ($_conf['iframe_popup']) { + return $this->iframePopup($filter_url, $idstr, $_conf['bbs_win_target_at']) . $num_ht; + } + return "{$idstr}{$num_ht}"; + } + + // }}} + // {{{ _linkToWikipeida() + + /** + * @see ShowThread + */ + protected function _linkToWikipeida($word) + { + global $_conf; + + $link = 'http://ja.wikipedia.org/wiki/' . rawurlencode($word); + if ($_conf['through_ime']) { + $link = P2Util::throughIme($link); + } + + return "{$word}"; + } + + // }}} + // {{{ quoteRes() + + /** + * ���p�ϊ��i�P�Ɓj + * + * @param string $full >>1-100 + * @param string $qsign >> + * @param string $appointed_num 1-100 + * @param bool $anchor_jump + * @return string + */ + public function quoteRes($full, $qsign, $appointed_num, $anchor_jump = false) + { + global $_conf; + + $appointed_num = mb_convert_kana($appointed_num, 'n'); // �S�p�����𔼊p�����ɕϊ� + if (preg_match('/\\D/', $appointed_num)) { + $appointed_num = preg_replace('/\\D+/', '-', $appointed_num); + return $this->quoteResRange($full, $qsign, $appointed_num); + } + if (preg_match('/^0/', $appointed_num)) { + return $full; + } + + $qnum = intval($appointed_num); + if ($qnum < 1 || $qnum > sizeof($this->thread->datlines)) { + return $full; + } + + // ���ځ[�񃌃X�ւ̃A���J�[ + if ($_conf['quote_res_view_aborn'] == 0 && + in_array($qnum, $this->_aborn_nums)) { + return '' . "{$full}"; + } + + if ($anchor_jump && $qnum >= $this->thread->resrange['start'] && $qnum <= $this->thread->resrange['to']) { + $read_url = '#' . ($this->_matome ? "t{$this->_matome}" : '') . "r{$qnum}"; + } else { + $read_url = "{$_conf['read_php']}?host={$this->thread->host}&bbs={$this->thread->bbs}&key={$this->thread->key}&offline=1&ls={$appointed_num}"; + } + $attributes = $_conf['bbs_win_target_at']; + if ($_conf['quote_res_view'] && ($_conf['quote_res_view_ng'] != 0 || + !in_array($qnum, $this->_ng_nums))) { + if ($this->_matome) { + $qres_id = "t{$this->_matome}qr{$qnum}"; + } else { + $qres_id = "qr{$qnum}"; + } + $attributes .= " onmouseover=\"showResPopUp('{$qres_id}',event)\""; + $attributes .= " onmouseout=\"hideResPopUp('{$qres_id}')\""; + } + return "_aborn_nums) ? ' class="abornanchor"' : + (in_array($qnum, $this->_ng_nums) ? ' class="nganchor"' : '')) + . ">{$full}"; + } + + // }}} + // {{{ quoteResRange() + + /** + * ���p�ϊ��i�͈́j + * + * @param string $full >>1-100 + * @param string $qsign >> + * @param string $appointed_num 1-100 + * @return string + */ + public function quoteResRange($full, $qsign, $appointed_num) + { + global $_conf; + + if ($appointed_num == '-') { + return $full; + } + + $read_url = "{$_conf['read_php']}?host={$this->thread->host}&bbs={$this->thread->bbs}&key={$this->thread->key}&offline=1&ls={$appointed_num}n"; + + if ($_conf['iframe_popup']) { + $pop_url = $read_url . "&renzokupop=true"; + return $this->iframePopup(array($read_url, $pop_url), $full, $_conf['bbs_win_target_at'], 1); + } + + // ���ʂɃ����N + return "{$full}"; + + // 1�–ڂ����p���X�|�b�v�A�b�v + /* + $qnums = explode('-', $appointed_num); + $qlink = $this->quoteRes($qsign . $qnum[0], $qsign, $qnum[0]) . '-'; + if (isset($qnums[1])) { + $qlink .= $qnums[1]; + } + return $qlink; + */ + } + + // }}} + // {{{ iframePopup() + + /** + * HTML�|�b�v�A�b�v�ϊ� + * + * @param string|array $url + * @param string|array $str + * @param string $attr + * @param int|null $mode + * @param bool $marker + * @return string + */ + public function iframePopup($url, $str, $attr = '', $mode = null, $marker = false) + { + global $_conf; + + // �����N�pURL�ƃ|�b�v�A�b�v�pURL + if (is_array($url)) { + $link_url = $url[0]; + $pop_url = $url[1]; + } else { + $link_url = $url; + $pop_url = $url; + } + + // �����N������ƃ|�b�v�A�b�v�̈� + if (is_array($str)) { + $link_str = $str[0]; + $pop_str = $str[1]; + } else { + $link_str = $str; + $pop_str = null; + } + + // �����N�̑��� + if (is_array($attr)) { + $_attr = $attr; + $attr = ''; + foreach ($_attr as $key => $value) { + $attr .= ' ' . $key . '="' . p2h($value) . '"'; + } + } elseif ($attr !== '' && substr($attr, 0, 1) != ' ') { + $attr = ' ' . $attr; + } + + // �����N�̑�����HTML�|�b�v�A�b�v�p�̃C�x���g�n���h���������� + $pop_attr = $attr; + if ($_conf['iframe_popup_event'] == 1) { + $pop_attr .= " onclick=\"stophide=true; showHtmlPopUp('{$pop_url}',event,0" . ($marker ? ' ,this' : '') . "); return false;\""; + } else { + $pop_attr .= " onmouseover=\"showHtmlPopUp('{$pop_url}',event,{$_conf['iframe_popup_delay']}" . ($marker ? ' ,this' : '') . ")\""; + } + $pop_attr .= " onmouseout=\"offHtmlPopUp()\""; + + // �ŏI���� + if (is_null($mode)) { + $mode = $_conf['iframe_popup']; + } + if ($mode == 2 && !is_null($pop_str)) { + $mode = 3; + } elseif ($mode == 3 && is_null($pop_str)) { + global $skin, $STYLE; + + $custom_pop_img = "skin/{$skin}/pop.png"; + if (file_exists($custom_pop_img)) { + $pop_img = p2h($custom_pop_img); + $x = $STYLE['iframe_popup_mark_width']; + $y = $STYLE['iframe_popup_mark_height']; + } else { + $pop_img = 'img/pop.png'; + $y = $x = 12; + } + $pop_str = "\"\""; + } + + // �����N�쐬 + switch ($mode) { + // �}�[�N���� + case 1: + return "{$link_str}"; + // (p)�}�[�N + case 2: + return "(p){$link_str}"; + // [p]�摜�A�T���l�C���Ȃ� + case 3: + return "{$pop_str}{$link_str}"; + // �|�b�v�A�b�v���Ȃ� + default: + return "{$link_str}"; + } + } + + // }}} + // {{{ iframePopupCallback() + + /** + * HTML�|�b�v�A�b�v�ϊ��i�R�[���o�b�N�p�C���^�[�t�F�[�X�j + * + * @param array $s ���K�\���Ƀ}�b�`�����v�f�̔z�� + * @return string + */ + public function iframePopupCallback($s) + { + return $this->iframePopup(p2h($s[1], false), p2h($s[3], false), $s[2]); + } + + // }}} + // {{{ _coloredIdStr() + + /** + * Merged from http://jiyuwiki.com/index.php?cmd=read&page=rep2%A4%C7%A3%C9%A3%C4%A4%CE%C7%D8%B7%CA%BF%A7%CA%D1%B9%B9&alias%5B%5D=pukiwiki%B4%D8%CF%A2 + * + * @return string + */ + protected function _coloredIdStr($idstr, $id, $classed = false) + { + global $_conf; + + if (!(isset($this->thread->idcount[$id]) + && $this->thread->idcount[$id] > 1)) { + return $idstr; + } + if ($classed) { + return $this->_coloredIdStrClassed($idstr, $id); + } + + switch ($_conf['coloredid.rate.type']) { + case 1: + $rate = $_conf['coloredid.rate.times']; + break; + case 2: + $rate = $this->getIdCountRank(10); + break; + case 3: + $rate = $this->getIdCountAverage(); + break; + default: + return $idstr; + } + + if ($rate > 1 && $this->thread->idcount[$id] >= $rate) { + switch ($_conf['coloredid.coloring.type']) { + case 0: + return $this->_coloredIdStr0($idstr, $id); + break; + case 1: + return $this->_coloredIdStr1($idstr, $id); + break; + default: + return $idstr; + } + } + + return $idstr; + } + + // }}} + // {{{ _coloredIdStrClassed() + + private function _coloredIdStrClassed($idstr, $id) + { + $ret = array(); + $arr = explode(':', $idstr); + foreach ($arr as $i => $str) { + if ($i == 0 || $i == 1) { + $ret[] = '' . $str . ''; + } else { + $ret[] = $str; + } + } + return implode(':', $ret); + } + + // }}} + // {{{ _coloredIdStr0() + + /** + * ID�J���[ �I���W�i�����F�p + */ + private function _coloredIdStr0($idstr, $id) + { + if (!function_exists('coloredIdStyle0')) { + require P2_LIB_DIR . '/color/coloredIdStyle0.inc.php'; + } + + if (isset($this->idstyles[$id])) { + $colored = $this->idstyles[$id]; + } else { + $colored = coloredIdStyle0($id, $this->thread->idcount[$id]); + $this->idstyles[$id] = $colored; + } + $ret = array(); + foreach ($arr = explode(':', $idstr) as $i => $str) { + if ($colored[$i]) { + $ret[] = "{$str}"; + } else { + $ret[] = $str; + } + } + return implode(':', $ret); + } + + // }}} + // {{{ _coloredIdStr1() + + /** + * ID�J���[ thermon�ŗp + */ + private function _coloredIdStr1($idstr, $id) + { + if (!function_exists('coloredIdStyle')) { + require P2_LIB_DIR . '/color/coloredIdStyle.inc.php'; + } + + $colored = coloredIdStyle($idstr, $id, $this->thread->idcount[$id]); + $idstr2 = preg_split('/:/',$idstr,2); // �R������ID������𕪊� + $ret = array_shift($idstr2).':'; + if ($colored[1]) { + $idstr2[1] = substr($idstr2[0], 4); + $idstr2[0] = substr($idstr2[0], 0, 4); + } + foreach ($idstr2 as $i => $str) { + if ($colored[$i]) { + $ret .= "{$str}"; + } else { + $ret .= $str; + } + } + return $ret; + } + + // }}} + // {{{ cssClassedId() + + /** + * ID�J���[�Ɏg�p����CSS�N���X����ID�����񂩂�Z�o���ĕԂ�. + */ + static public function cssClassedId($id) + { + return 'idcss-' . bin2hex( + base64_decode(str_replace('.', '+', substr($id, 0, 8)))); + } + + // }}} + // {{{ ���[�e�B���e�B���\�b�h + // {{{ imageHtmlPopup() + + /** + * �摜��HTML�|�b�v�A�b�v&�|�b�v�A�b�v�E�C���h�E�T�C�Y�ɍ��킹�� + */ + public function imageHtmlPopup($img_url, $img_tag, $link_str) + { + global $_conf; + + if ($_conf['expack.ic2.enabled'] && $_conf['expack.ic2.fitimage']) { + $popup_url = 'ic2_fitimage.php?url=' . rawurlencode(str_replace('&', '&', $img_url)); + } else { + $popup_url = $img_url; + } + + $pops = ($_conf['iframe_popup'] == 1) ? $img_tag . $link_str : array($link_str, $img_tag); + return $this->iframePopup(array($img_url, $popup_url), $pops, $_conf['ext_win_target_at'], null, true); + } + + // }}} + // {{{ respopToAsync() + + /** + * ���X�|�b�v�A�b�v��񓯊����[�h�ɉ��H���� + */ + public function respopToAsync($str) + { + $respop_regex = '/(onmouseover)=\"(showResPopUp\(\'(q(\d+)of\d+)\',event\).*?)\"/'; + $respop_replace = '$1="loadResPopUp(' . $this->asyncObjName . ', $4);$2"'; + return preg_replace($respop_regex, $respop_replace, $str); + } + + // }}} + // {{{ getASyncObjJs() + + /** + * �񓯊��ǂݍ��݂ŗ��p����JavaScript�I�u�W�F�N�g�𐶐����� + */ + public function getASyncObjJs() + { + global $_conf; + static $done = array(); + + if (isset($done[$this->asyncObjName])) { + return; + } + $done[$this->asyncObjName] = true; + + $code = << +//asyncObjName} = { + host:"{$this->thread->host}", bbs:"{$this->thread->bbs}", key:"{$this->thread->key}", + readPhp:"{$_conf['read_php']}", readTarget:"{$_conf['bbs_win_target']}" +}; +//]]> +\n +EOJS; + return $code; + } + + // }}} + // {{{ getSpmObjJs() + + /** + * �X�}�[�g�|�b�v�A�b�v���j���[�𐶐�����JavaScript�R�[�h�𐶐����� + */ + public function getSpmObjJs($retry = false) + { + global $_conf, $STYLE; + + if (isset(self::$_spm_objects[$this->spmObjName])) { + return $retry ? self::$_spm_objects[$this->spmObjName] : ''; + } + + $ttitle_en = UrlSafeBase64::encode($this->thread->ttitle); + + if ($_conf['expack.spm.filter_target'] == '' || $_conf['expack.spm.filter_target'] == 'read') { + $_conf['expack.spm.filter_target'] = '_self'; + } + + $motothre_url = $this->thread->getMotoThread(); + $motothre_url = substr($motothre_url, 0, strlen($this->thread->ls) * -1); + + $_spmOptions = array( + 'null', + ((!$_conf['disable_res'] && $_conf['expack.spm.kokores']) ? (($_conf['expack.spm.kokores_orig']) ? '2' : '1') : '0'), + (($_conf['expack.spm.ngaborn']) ? (($_conf['expack.spm.ngaborn_confirm']) ? '2' : '1') : '0'), + (($_conf['expack.spm.filter']) ? '1' : '0'), + (($this->am_on_spm) ? '1' : '0'), + (($_conf['expack.aas.enabled']) ? '1' : '0'), + ); + $spmOptions = implode(',', $_spmOptions); + + // �G�X�P�[�v + $_spm_title = StrCtl::toJavaScript($this->thread->ttitle_hc); + $_spm_url = addslashes($motothre_url); + $_spm_host = addslashes($this->thread->host); + $_spm_bbs = addslashes($this->thread->bbs); + $_spm_key = addslashes($this->thread->key); + $_spm_ls = addslashes($this->thread->ls); + + $code = << +//spmObjName} = { + 'objName':'{$this->spmObjName}', + 'rc':'{$this->thread->rescount}', + 'title':'{$_spm_title}', + 'ttitle_en':'{$ttitle_en}', + 'url':'{$_spm_url}', + 'host':'{$_spm_host}', + 'bbs':'{$_spm_bbs}', + 'key':'{$_spm_key}', + 'ls':'{$_spm_ls}', + 'spmOption':[{$spmOptions}] +}; +SPM.init({$this->spmObjName}); +//]]> +\n +EOJS; + + self::$_spm_objects[$this->spmObjName] = $code; + + return $code; + } + + // }}} + // }}} + // {{{ transLinkDo()����Ăяo�����URL�����������\�b�h + /** + * �����̃��\�b�h�͈����������Ώۃp�^�[���ɍ��v���Ȃ���false��Ԃ��A + * transLinkDo()��false���Ԃ��Ă����$_url_handlers�ɓo�^����Ă��鎟�̊֐�/���\�b�h�ɏ��������悤�Ƃ���B + */ + // {{{ plugin_linkURL() + + /** + * URL�����N + * + * @param string $url + * @param array $purl + * @param string $str + * @return string|false + */ + public function plugin_linkURL($url, $purl, $str) + { + global $_conf; + + if (isset($purl['scheme'])) { + // ime + if ($_conf['through_ime']) { + $link_url = P2Util::throughIme($purl[0]); + } else { + $link_url = $url; + } + + $is_http = ($purl['scheme'] == 'http' || $purl['scheme'] == 'https'); + + // HTML�|�b�v�A�b�v + if ($_conf['iframe_popup'] && $is_http) { + // *pm �w��̏ꍇ�̂݁A���ʂɎ蓮�]���w���lj����� + if (substr($_conf['through_ime'], -2) == 'pm') { + $pop_url = P2Util::throughIme($purl[0], -1); + } else { + $pop_url = $link_url; + } + $link = $this->iframePopup(array($link_url, $pop_url), $str, $_conf['ext_win_target_at']); + } else { + $link = "{$str}"; + } + + // �u���N���`�F�b�J + if ($_conf['brocra_checker_use'] && $_conf['brocra_checker_url'] && $is_http) { + if (strlen($_conf['brocra_checker_query'])) { + $brocra_checker_url = $_conf['brocra_checker_url'] . '?' . $_conf['brocra_checker_query'] . '=' . rawurlencode($purl[0]); + } else { + $brocra_checker_url = rtrim($_conf['brocra_checker_url'], '/') . '/' . $url; + } + $brocra_checker_url_orig = $brocra_checker_url; + // �u���N���`�F�b�J�Eime + if ($_conf['through_ime']) { + $brocra_checker_url = P2Util::throughIme($brocra_checker_url); + } + $check_mark = '�`�F�b�N'; + $check_mark_prefix = '['; + $check_mark_suffix = ']'; + // �u���N���`�F�b�J�EHTML�|�b�v�A�b�v + if ($_conf['iframe_popup']) { + // *pm �w��̏ꍇ�̂݁A���ʂɎ蓮�]���w���lj����� + if (substr($_conf['through_ime'], -2) == 'pm') { + $brocra_checker_url = P2Util::throughIme($brocra_checker_url_orig, -1); + } else { + $brocra_pop_url = $brocra_checker_url; + } + if ($_conf['iframe_popup'] == 3) { + $check_mark = ''; + $check_mark_prefix = ''; + $check_mark_suffix = ''; + } + $brocra_checker_link = $this->iframePopup(array($brocra_checker_url, $brocra_pop_url), $check_mark, $_conf['ext_win_target_at']); + } else { + $brocra_checker_link = "{$check_mark}"; + } + $link .= $check_mark_prefix . $brocra_checker_link . $check_mark_suffix; + } + + return $link; + } + return false; + } + + // }}} + // {{{ plugin_link2chSubject() + + /** + * 2ch bbspink �ƒ����N + * + * @param string $url + * @param array $purl + * @param string $str + * @return string|false + */ + public function plugin_link2chSubject($url, $purl, $str) + { + global $_conf; + + if (preg_match('{^http://(\\w+\\.(?:2ch\\.net|bbspink\\.com))/(\\w+)/$}', $purl[0], $m)) { + $subject_url = "{$_conf['subject_php']}?host={$m[1]}&bbs={$m[2]}"; + return "{$str} [�‚�p2�ŊJ��]"; + } + return false; + } + + // }}} + // {{{ plugin_linkThread() + + /** + * �X���b�h�����N + * + * @param string $url + * @param array $purl + * @param string $str + * @return string|false + */ + public function plugin_linkThread($url, $purl, $str) + { + global $_conf; + + list($nama_url, $host, $bbs, $key, $ls) = P2Util::detectThread($purl[0]); + if ($host && $bbs && $key) { + $read_url = "{$_conf['read_php']}?host={$host}&bbs={$bbs}&key={$key}&ls={$ls}"; + if ($_conf['iframe_popup']) { + if ($ls && preg_match('/^[0-9\\-n]+$/', $ls)) { + $pop_url = $read_url; + } else { + $pop_url = $read_url . '&one=true'; + } + return $this->iframePopup(array($read_url, $pop_url), $str, $_conf['bbs_win_target_at']); + } + return "{$str}"; + } + + return false; + } + + // }}} + // {{{ plugin_linkYouTube() + + /** + * YouTube�����N�ϊ��v���O�C�� + * + * Zend_Gdata_Youtube���g���΃T���l�C�����̑��̏����ȒP�Ɏ擾�ł��邪... + * + * @param string $url + * @param array $purl + * @param string $str + * @return string|false + */ + public function plugin_linkYouTube($url, $purl, $str) + { + global $_conf; + + // http://www.youtube.com/watch?v=Mn8tiFnAUAI + // http://m.youtube.com/watch?v=OhcX0xJsDK8&client=mv-google&gl=JP&hl=ja&guid=ON&warned=True + if (preg_match('{^http://(www|jp|m)\\.youtube\\.com/watch\\?(?:.+&)?v=([0-9a-zA-Z_\\-]+)}', $url, $m)) { + // ime + if ($_conf['through_ime']) { + $link_url = P2Util::throughIme($url); + } else { + $link_url = $url; + } + + // HTML�|�b�v�A�b�v + if ($_conf['iframe_popup']) { + $link = $this->iframePopup($link_url, $str, $_conf['ext_win_target_at']); + } else { + $link = "{$str}"; + } + + $subd = $m[1]; + $id = $m[2]; + + if ($_conf['link_youtube'] == 2) { + return << +EOP; + } else { + return << +EOP; + } + } + return false; + } + + // }}} + // {{{ plugin_linkNicoNico() + + /** + * �j�R�j�R����ϊ��v���O�C�� + * + * @param string $url + * @param array $purl + * @param string $str + * @return string|false + */ + public function plugin_linkNicoNico($url, $purl, $str) + { + global $_conf; + + // http://www.nicovideo.jp/watch?v=utbrYUJt9CSl0 + // http://www.nicovideo.jp/watch/utvWwAM30N0No + // http://m.nicovideo.jp/watch/sm7044684 + if (preg_match('{^http://(?:www|m)\\.nicovideo\\.jp/watch(?:/|(?:\\?v=))([0-9a-zA-Z_-]+)}', $url, $m)) { + // ime + if ($_conf['through_ime']) { + $link_url = P2Util::throughIme($purl[0]); + } else { + $link_url = $url; + } + + // HTML�|�b�v�A�b�v + if ($_conf['iframe_popup']) { + $link = $this->iframePopup($link_url, $str, $_conf['ext_win_target_at']); + } else { + $link = "{$str}"; + } + + $id = $m[1]; + + if ($_conf['link_niconico'] == 2) { + return << +EOP; + } else { + return << +EOP; + } + } + return false; + } + + // }}} + // {{{ plugin_viewImage() + + /** + * �摜�|�b�v�A�b�v�ϊ� + * + * @param string $url + * @param array $purl + * @param string $str + * @return string|false + */ + public function plugin_viewImage($url, $purl, $str) + { + global $_conf; + global $pre_thumb_unlimited, $pre_thumb_limit; + + if (P2Util::isUrlWikipediaJa($url)) { + return false; + } + + // �\������ + if (!$pre_thumb_unlimited && empty($pre_thumb_limit)) { + return false; + } + + if (preg_match('{^https?://.+?\\.(jpe?g|gif|png)$}i', $purl[0]) && empty($purl['query'])) { + $pre_thumb_limit--; // �\�������J�E���^�������� + $img_tag = ""; + + if ($_conf['iframe_popup']) { + $view_img = $this->imageHtmlPopup($url, $img_tag, $str); + } else { + $view_img = "{$img_tag}{$str}"; + } + + // �u���N���`�F�b�J �i�v���r���[�Ƃ͑��e��Ȃ��̂ŃR�����g�A�E�g�j + /*if ($_conf['brocra_checker_use']) { + $link_url_en = rawurlencode($url); + if ($_conf['iframe_popup'] == 3) { + $check_mark = ''; + $check_mark_prefix = ''; + $check_mark_suffix = ''; + } else { + $check_mark = '�`�F�b�N'; + $check_mark_prefix = '['; + $check_mark_suffix = ']'; + } + $view_img .= $check_mark_prefix . "{$check_mark}" . $check_mark_suffix; + }*/ + + return $view_img; + } + + return false; + } + + // }}} + // {{{ plugin_imageCache2() + + /** + * ImageCache2�T���l�C���ϊ� + * + * @param string $url + * @param array $purl + * @param string $str + * @return string|false + */ + public function plugin_imageCache2($url, $purl, $str, + $force = false, + $referer = null) + { + static $serial = 0; + + global $_conf; + global $pre_thumb_unlimited, $pre_thumb_ignore_limit, $pre_thumb_limit; + + if (P2Util::isUrlWikipediaJa($url)) { + return false; + } + + if ((preg_match('{^https?://.+?\\.(jpe?g|gif|png)$}i', $purl[0]) && empty($purl['query'])) || $force) { + // ���� + $serial++; + $thumb_id = 'thumbs' . $serial . $this->thumb_id_suffix; + $tmp_thumb = './img/ic_load.png'; + $url_ht = $url; + $url = $purl[0]; + $url_en = rawurlencode($url) . + ($referer ? '&ref=' . rawurlencode($referer) : ''); + $img_id = null; + + $icdb = new ImageCache2_DataObject_Images(); + + // r=0:�����N;r=1:���_�C���N�g;r=2:PHP�ŕ\�� + // t=0:�I���W�i��;t=1:PC�p�T���l�C��;t=2:�g�їp�T���l�C��;t=3:���ԃC���[�W + $img_url = 'ic2.php?r=1&uri=' . $url_en; + $thumb_url = 'ic2.php?r=1&t=1&uri=' . $url_en; + // ���C�ɃX�������摜�����N + $rank = null; + if ($_conf['expack.ic2.fav_auto_rank']) { + $rank = $this->getAutoFavRank(); + if ($rank !== null) { + $thumb_url .= '&rank=' . $rank; + } + } + + // DB�ɉ摜��񂪓o�^����Ă����Ƃ� + if ($icdb->get($url)) { + $img_id = $icdb->id; + + // �E�B���X�Ɋ������Ă����t�@�C���̂Ƃ� + if ($icdb->mime == 'clamscan/infected') { + return " {$str}"; + } + // ���ځ[��摜�̂Ƃ� + if ($icdb->rank < 0) { + return " {$str}"; + } + + // �I���W�i�����L���b�V������Ă���Ƃ��͉摜�𒼐ړǂݍ��� + $_img_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime); + if (file_exists($_img_url)) { + $img_url = $_img_url; + $cached = true; + } else { + $cached = false; + } + + // �T���l�C�����쐬����Ă��Ă���Ƃ��͉摜�𒼐ړǂݍ��� + $_thumb_url = $this->thumbnailer->thumbUrl($icdb->size, $icdb->md5, $icdb->mime); + if (file_exists($_thumb_url)) { + $thumb_url = $_thumb_url; + // �����X���^�C�����@�\��ON�ŃX���^�C���L�^����Ă��Ȃ��Ƃ���DB���X�V + if (!is_null($this->img_memo) && strpos($icdb->memo, $this->img_memo) === false){ + $update = new ImageCache2_DataObject_Images(); + if (!is_null($icdb->memo) && strlen($icdb->memo) > 0) { + $update->memo = $this->img_memo . ' ' . $icdb->memo; + } else { + $update->memo = $this->img_memo; + } + $update->whereAddQuoted('uri', '=', $url); + } + + // expack.ic2.fav_auto_rank_override �̐ݒ�ƃ����N������OK�Ȃ� + // ���C�ɃX�������摜�����N���㏑���X�V + if ($rank !== null && + self::isAutoFavRankOverride($icdb->rank, $rank)) { + if ($update === null) { + $update = new ImageCache2_DataObject_Images(); + $update->whereAddQuoted('uri', '=', $url); + } + $update->rank = $rank; + } + + if ($update !== null) { + $update->update(); + } + } + + // �T���l�C���̉摜�T�C�Y + $thumb_size = $this->thumbnailer->calc($icdb->width, $icdb->height); + $thumb_size = preg_replace('/(\d+)x(\d+)/', 'width="$1" height="$2"', $thumb_size); + $tmp_thumb = './img/ic_load1.png'; + + $orig_img_url = $img_url; + $orig_thumb_url = $thumb_url; + + // �摜���L���b�V������Ă��Ȃ��Ƃ� + // �����X���^�C�����@�\��ON�Ȃ�N�G����UTF-8�G���R�[�h�����X���^�C���܂߂� + } else { + // �摜���u���b�N���X�gor�G���[���O�ɂ��邩�m�F + if (false !== ($errcode = $icdb->ic2_isError($url))) { + return " {$str}"; + } + + $cached = false; + + $orig_img_url = $img_url; + $orig_thumb_url = $thumb_url; + $img_url .= $this->img_memo_query; + $thumb_url .= $this->img_memo_query; + $thumb_size = ''; + $tmp_thumb = './img/ic_load2.png'; + } + + // �L���b�V������Ă��炸�A�\�����������L���̂Ƃ� + if (!$cached && !$pre_thumb_unlimited && !$pre_thumb_ignore_limit) { + // �\�������𒴂��Ă�����A�\�����Ȃ� + // �\�������𒴂��Ă��Ȃ���΁A�\�������J�E���^�������� + if ($pre_thumb_limit <= 0) { + $show_thumb = false; + } else { + $show_thumb = true; + $pre_thumb_limit--; + } + } else { + $show_thumb = true; + } + + // �\�����[�h + if ($show_thumb) { + $img_tag = ""; + if ($_conf['iframe_popup']) { + $view_img = $this->imageHtmlPopup($img_url, $img_tag, $str); + } else { + $view_img = "{$img_tag}{$str}"; + } + } else { + $img_tag = ""; + $view_img = "{$img_tag}{$str}"; + } + + // �\�[�X�ւ̃����N��ime�t���ŕ\�� + if ($_conf['expack.ic2.enabled'] && $_conf['expack.ic2.through_ime']) { + $ime_url = P2Util::throughIme($url); + if ($_conf['iframe_popup'] == 3) { + $ime_mark = ''; + } else { + $ime_mark = '[ime]'; + } + $view_img .= " {$ime_mark}"; + } + + $view_img .= ''; + + return $view_img; + } + + return false; + } + + // }}} + // {{{ plugin_replaceImageUrl() + + /** + * �u���摜URL+ImageCache2 + */ + public function plugin_replaceImageUrl($url, $purl, $str) + { + static $serial = 0; + + global $_conf; + global $pre_thumb_unlimited, $pre_thumb_ignore_limit, $pre_thumb_limit; + + // +Wiki + global $replaceImageUrlCtl; + + $url = $purl[0]; + $replaced = $replaceImageUrlCtl->replaceImageUrl($url); + if (!$replaced[0]) { + return false; + } + + foreach ($replaced as $v) { + $url_en = rawurlencode($v['url']); + $url_ht = p2h($v['url']); + $ref_en = $v['referer'] ? '&ref=' . rawurlencode($v['referer']) : ''; + + // ���� + $serial++; + $thumb_id = 'thumbs' . $serial . $this->thumb_id_suffix; + $tmp_thumb = './img/ic_load.png'; + + $icdb = new ImageCache2_DataObject_Images(); + + // r=0:�����N;r=1:���_�C���N�g;r=2:PHP�ŕ\�� + // t=0:�I���W�i��;t=1:PC�p�T���l�C��;t=2:�g�їp�T���l�C��;t=3:���ԃC���[�W + // +Wiki + $img_url = 'ic2.php?r=1&uri=' . $url_en . $ref_en; + $thumb_url = 'ic2.php?r=1&t=1&uri=' . $url_en . $ref_en; + // ���C�ɃX�������摜�����N + $rank = null; + if ($_conf['expack.ic2.fav_auto_rank']) { + $rank = $this->getAutoFavRank(); + if ($rank !== null) $thumb_url .= '&rank=' . $rank; + } + + // DB�ɉ摜��񂪓o�^����Ă����Ƃ� + if ($icdb->get($v['url'])) { + + // �E�B���X�Ɋ������Ă����t�@�C���̂Ƃ� + if ($icdb->mime == 'clamscan/infected') { + $result .= ""; + continue; + } + // ���ځ[��摜�̂Ƃ� + if ($icdb->rank < 0) { + $result .= ""; + continue; + } + + // �I���W�i�����L���b�V������Ă���Ƃ��͉摜�𒼐ړǂݍ��� + $_img_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime); + if (file_exists($_img_url)) { + $img_url = $_img_url; + $cached = true; + } else { + $cached = false; + } + + // �T���l�C�����쐬����Ă��Ă���Ƃ��͉摜�𒼐ړǂݍ��� + $_thumb_url = $this->thumbnailer->thumbUrl($icdb->size, $icdb->md5, $icdb->mime); + if (file_exists($_thumb_url)) { + $thumb_url = $_thumb_url; + // �����X���^�C�����@�\��ON�ŃX���^�C���L�^����Ă��Ȃ��Ƃ���DB���X�V + if (!is_null($this->img_memo) && strpos($icdb->memo, $this->img_memo) === false){ + $update = new ImageCache2_DataObject_Images(); + if (!is_null($icdb->memo) && strlen($icdb->memo) > 0) { + $update->memo = $this->img_memo . ' ' . $icdb->memo; + } else { + $update->memo = $this->img_memo; + } + $update->whereAddQuoted('uri', '=', $v['url']); + } + + // expack.ic2.fav_auto_rank_override �̐ݒ�ƃ����N������OK�Ȃ� + // ���C�ɃX�������摜�����N���㏑���X�V + if ($rank !== null && + self::isAutoFavRankOverride($icdb->rank, $rank)) { + if ($update === null) { + $update = new ImageCache2_DataObject_Images(); + $update->whereAddQuoted('uri', '=', $v['url']); + } + $update->rank = $rank; + } + + if ($update !== null) { + $update->update(); + } + } + + // �T���l�C���̉摜�T�C�Y + $thumb_size = $this->thumbnailer->calc($icdb->width, $icdb->height); + $thumb_size = preg_replace('/(\d+)x(\d+)/', 'width="$1" height="$2"', $thumb_size); + $tmp_thumb = './img/ic_load1.png'; + + $orig_img_url = $img_url; + $orig_thumb_url = $thumb_url; + + // �摜���L���b�V������Ă��Ȃ��Ƃ� + // �����X���^�C�����@�\��ON�Ȃ�N�G����UTF-8�G���R�[�h�����X���^�C���܂߂� + } else { + // �摜���u���b�N���X�gor�G���[���O�ɂ��邩�m�F + if (false !== ($errcode = $icdb->ic2_isError($v['url']))) { + $result .= ""; + continue; + } + + $cached = false; + + $orig_img_url = $img_url; + $orig_thumb_url = $thumb_url; + $img_url .= $this->img_memo_query; + $thumb_url .= $this->img_memo_query; + $thumb_size = ''; + $tmp_thumb = './img/ic_load2.png'; + } + + // �L���b�V������Ă��炸�A�\�����������L���̂Ƃ� + if (!$cached && !$pre_thumb_unlimited && !$pre_thumb_ignore_limit) { + // �\�������𒴂��Ă�����A�\�����Ȃ� + // �\�������𒴂��Ă��Ȃ���΁A�\�������J�E���^�������� + if ($pre_thumb_limit <= 0) { + $show_thumb = false; + } else { + $show_thumb = true; + $pre_thumb_limit--; + } + } else { + $show_thumb = true; + } + + // �\�����[�h + if ($show_thumb) { + $img_tag = ""; + if ($_conf['iframe_popup']) { + $view_img = $this->imageHtmlPopup($img_url, $img_tag, ''); + } else { + $view_img = "{$img_tag}"; + } + } else { + $img_tag = ""; + $view_img = "{$img_tag}"; + } + + $view_img .= '"; + . "'{$url_ht}', event)\">"; + + $result .= $view_img; + } + // �\�[�X�ւ̃����N��ime�t���ŕ\�� + $ime_url = P2Util::throughIme($url); + $result .= "{$str}"; + return $result; + } + + /** + * +Wiki:�����N�v���O�C�� + */ + public function plugin_linkPlugin($url, $purl, $str) + { + return $GLOBALS['linkPluginCtl']->replaceLinkToHTML($url, $str); + } + + // }}} + // {{{ plugin_imepitaToImageCache2() + + /** + * imepita��URL�����H����ImageCache2������v���O�C�� + * + * @param string $url + * @param array $purl + * @param string $str + * @return string|false + */ + public function plugin_imepitaToImageCache2($url, $purl, $str) + { + if (preg_match('{^https?://imepita\.jp/(?:image/)?(\d{8}/\d{6})}i', + $purl[0], $m) && empty($purl['query'])) { + $_url = 'http://imepita.jp/image/' . $m[1]; + $_purl = @parse_url($_url); + $_purl[0] = $_url; + return $this->plugin_imageCache2($_url, $_purl, $str, true, $url); + } + return false; + } + + // }}} + // }}} + // {{{ getQuotebacksJson() + + public function getQuotebacksJson() + { + $ret = array(); + foreach ($this->getQuoteFrom() as $resnum => $quote_from) { + if (!$quote_from) { + continue; + } + if ($resnum != 1 && ($resnum < $this->thread->resrange['start'] || $resnum > $this->thread->resrange['to'])) { + continue; + } + $tmp = array(); + foreach ($quote_from as $quote) { + if ($quote != 1 && ($quote < $this->thread->resrange['start'] || $quote > $this->thread->resrange['to'])) { + continue; + } + $tmp[] = $quote; + } + if ($tmp) $ret[] = "{$resnum}:[" . join(',', $tmp) . "]"; + } + return '{' . join(',', $ret) . '}'; + } + + // }}} + // {{{ getResColorJs() + + public function getResColorJs() + { + global $_conf, $STYLE; + + $fontstyle_bold = empty($STYLE['fontstyle_bold']) ? 'normal' : $STYLE['fontstyle_bold']; + $fontweight_bold = empty($STYLE['fontweight_bold']) ? 'normal' : $STYLE['fontweight_bold']; + $fontfamily_bold = $STYLE['fontfamily_bold']; + $backlinks = $this->getQuotebacksJson(); + $colors = array(); + $backlink_colors = join(',', + array_map(create_function('$x', 'return "\'{$x}\'";'), + explode(',', $_conf['backlink_coloring_track_colors'])) + ); + $prefix = $this->_matome ? "t{$this->_matome}" : ''; + return << +if (typeof rescolObjs == 'undefined') rescolObjs = []; +rescolObjs.push((function() { + var obj = new BacklinkColor('{$prefix}'); + obj.colors = [{$backlink_colors}]; + obj.highlightStyle = {fontStyle :'{$fontstyle_bold}', fontWeight : '{$fontweight_bold}', fontFamily : '{$fontfamily_bold}'}; + obj.backlinks = {$backlinks}; + return obj; +})()); + +EOJS; + } + + // }}} + // {{{ getIdsForRenderJson() + + public function getIdsForRenderJson() + { + $ret = array(); + if ($this->_ids_for_render) { + foreach ($this->_ids_for_render as $id => $count) { + $ret[] = "'{$id}':{$count}"; + } + } + return '{' . join(',', $ret) . '}'; + } + + // }}} + // {{{ getIdColorJs() + + public function getIdColorJs() + { + global $_conf, $STYLE; + + if ($_conf['coloredid.enable'] < 1 || $_conf['coloredid.click'] < 1) { + return ''; + } + if (count($this->thread->idcount) < 1) { + return ''; + } + + $idslist = $this->getIdsForRenderJson(); + + $rate = $_conf['coloredid.rate.times']; + $tops = $this->getIdCountRank(10); + $average = $this->getIdCountAverage(); + $color_init = ''; + if ($_conf['coloredid.rate.type'] > 0) { + switch($_conf['coloredid.rate.type']) { + case 2: + $init_rate = $tops; + break; + case 3: + $init_rate = $average; + break; + case 1: + $init_rate = $rate; + default: + } + if ($init_rate > 1) + $color_init .= 'idCol.initColor(' . $init_rate . ', idslist);'; + } + $color_init .= "idCol.rate = {$rate};"; + if (!$this->_matome) { + $color_init .= "idCol.tops = {$tops};"; + $color_init .= "idCol.average = {$average};"; + } + $hissiCount = $_conf['coloredid.rate.hissi.times']; + $mark_colors = join(',', + array_map(create_function('$x', 'return "\'{$x}\'";'), + explode(',', $_conf['coloredid.marking.colors'])) + ); + $fontstyle_bold = empty($STYLE['fontstyle_bold']) ? 'normal' : $STYLE['fontstyle_bold']; + $fontweight_bold = empty($STYLE['fontweight_bold']) ? 'normal' : $STYLE['fontweight_bold']; + $fontfamily_bold = $STYLE['fontfamily_bold']; + $uline = $STYLE['a_underline_none'] != 1 + ? 'idCol.colorStyle["textDecoration"] = "underline"' : ''; + return << +(function() { +var idslist = {$idslist}; +if (typeof idCol == 'undefined') { + idCol = new IDColorChanger(idslist, {$hissiCount}); + idCol.colors = [{$mark_colors}]; +{$uline}; + idCol.highlightStyle = {fontStyle :'{$fontstyle_bold}', fontWeight : '{$fontweight_bold}', fontFamily : '{$fontfamily_bold}', fontSize : '104%'}; +} else idCol.addIdlist(idslist); +{$color_init} +idCol.setupSPM('{$this->spmObjName}'); +})(); + +EOJS; + } + + // }}} + // {{{ getIdCountAverage() + + public function getIdCountAverage() + { + if ($this->_idcount_average !== null) { + return $this->_idcount_average; + } + + $sum = 0; + $param = 0; + + foreach ($this->thread->idcount as $count) { + if ($count > 1) { + $sum += $count; + $param++; + } + } + + $result = ($param < 1) ? 0 : intval(ceil($sum / $param)); + $this->_idcount_average = $result; + + return $result; + } + + // }}} + // {{{ getIdCountRank() + + public function getIdCountRank($rank) + { + if ($this->_idcount_tops !== null) { + return $this->_idcount_tops; + } + + $ranking = array(); + + foreach ($this->thread->idcount as $count) { + if ($count > 1) { + $ranking[] = $count; + } + } + + if (count($ranking) == 0) { + return 0; + } + + rsort($ranking); + $rcount = count($ranking); + + $result = ($rcount >= $rank) ? $ranking[$rank - 1] : $ranking[$rcount - 1]; + $this->_idcount_tops = $result; + + return $result; + } + + // }}} +} + +// }}} + +/* + * Local Variables: + * mode: php + * coding: cp932 + * tab-width: 4 + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ +// vim: set syn=php fenc=cp932 ai et ts=4 sw=4 sts=4 fdm=marker: diff --git a/lib/live/live_header.inc.php b/lib/live/live_header.inc.php new file mode 100755 index 000000000..7da5bcf21 --- /dev/null +++ b/lib/live/live_header.inc.php @@ -0,0 +1,84 @@ +rescount) { +// $reload_time = $_GET['reltime'] + 5000; +//} else { + if ($_conf['live.reload_time'] == 4 ) { + $reload_time = 20 * 1000; + } else if ($_conf['live.reload_time'] == 3 ) { + $reload_time = 15 * 1000; + } else if ($_conf['live.reload_time'] == 2 ) { + $reload_time = 10 * 1000; + } else if ($_conf['live.reload_time'] == 1 ) { + $reload_time = 5 * 1000; + } else { + $reload_time = 0 * 1000; + } +//} + +if ($_GET['live']) { + echo << + + \n +xmht; +} else { + echo ""; +} + +?> \ No newline at end of file diff --git a/lib/live/live_highlight_check.php b/lib/live/live_highlight_check.php new file mode 100755 index 000000000..ddc64c840 --- /dev/null +++ b/lib/live/live_highlight_check.php @@ -0,0 +1,48 @@ +_has_ngaborns && + preg_match_all('/(?:>|��)([1-9][0-9\\-,]*)/', $msg, $highlight_matches) +) { + $highlight_chain_nums = array_unique(preg_split('/[-,]+/', + trim(implode(',', $highlight_matches[1]), '-,'), + -1, + PREG_SPLIT_NO_EMPTY)); + + if (array_intersect($highlight_chain_nums, $this->_highlight_nums)) { + $ngaborns_hits['highlight_chain']++; + $type |= $this->_markHighlight($i, self::HIGHLIGHT_CHAIN, true); + } +} + +// �n�C���C�g�l�[���`�F�b�N +if ($this->ngAbornCheck('highlight_name', $name) !== false) { + $ngaborns_hits['highlight_name']++; + $type |= $this->_markHighlight($i, self::HIGHLIGHT_NAME, false); +} + +// �n�C���C�g���[���`�F�b�N +if ($this->ngAbornCheck('highlight_mail', $mail) !== false) { + $ngaborns_hits['highlight_mail']++; + $type |= $this->_markHighlight($i, self::HIGHLIGHT_MAIL, false); +} + +// �n�C���C�gID�`�F�b�N +if ($this->ngAbornCheck('highlight_id', $date_id) !== false) { + $ngaborns_hits['highlight_id']++; + $type |= $this->_markHighlight($i, self::HIGHLIGHT_ID, false); +} + +// �n�C���C�g���b�Z�[�W�`�F�b�N +$a_highlight_msg = $this->ngAbornCheck('highlight_msg', $msg); +if ($a_highlight_msg !== false) { + $ngaborns_hits['highlight_msg']++; + $type |= $this->_markHighlight($i, self::HIGHLIGHT_MSG, true); + $this->_highlight_msgs[] = $a_highlight_msg; + $highlight_msgs = array_unique($this->_highlight_msgs); +} + +?> \ No newline at end of file diff --git a/lib/live/live_highlight_convert.php b/lib/live/live_highlight_convert.php new file mode 100755 index 000000000..ac8f96e2c --- /dev/null +++ b/lib/live/live_highlight_convert.php @@ -0,0 +1,45 @@ +_highlight_nums)); + $highlight_chain_nums = "(" . $highlight_chain_nums . ")(?!\d)(?![^<]*>)"; // �������ꕔ����Ă��܂��A���J�[��HTML�^�O���Ƀ}�b�`�����Ȃ� + $msg = preg_replace("(((?:>|��|-)+)($highlight_chain_nums))", "$1$2", $msg); +} + +// �n�C���C�g���b�Z�[�W�ϊ� +if ($ng_type & self::HIGHLIGHT_MSG) { + $highlight_msgs = quotemeta(implode('|', $highlight_msgs)); + $highlight_msgs = "(" . $highlight_msgs . ")(?![^<]*>)"; // HTML�^�O���Ƀ}�b�`�����Ȃ� + if (preg_match("(<(regex:i|i)>)", $highlight_msgs)) { + $highlight_msgs = preg_replace("(<(regex|regex:i|i)>)", "", $highlight_msgs); + $msg = mb_eregi_replace("($highlight_msgs)", "\\1", $msg); + } else { + $highlight_msgs = preg_replace("(<(regex|regex:i|i)>)", "", $highlight_msgs); + $msg = mb_ereg_replace("($highlight_msgs)", "\\1", $msg); + } +} + +// �n�C���C�g�l�[���ϊ� +if ($ng_type & self::HIGHLIGHT_NAME) { + $name = preg_replace("(|)", "", $name); + $name = "$name"; +} + +// �n�C���C�g���[���ϊ� +if ($ng_type & self::HIGHLIGHT_MAIL) { + $mail = "$mail"; +} + +// �n�C���C�gID�ϊ� +if ($ng_type & self::HIGHLIGHT_ID) { + $date_id = preg_replace("((ID:))", "$1", $date_id .""); +} + +?> \ No newline at end of file diff --git a/lib/live/live_post_form.inc.php b/lib/live/live_post_form.inc.php new file mode 100755 index 000000000..eaed7f059 --- /dev/null +++ b/lib/live/live_post_form.inc.php @@ -0,0 +1,173 @@ +'; + $htm['kaiko_on_js'] = ''; + $htm['kaiko_set_hidden_js'] = ''; + $htm['table_begin'] = ''; + $htm['table_break1'] = ''; + $htm['table_break2'] = ''; + $htm['table_end'] = '
'; + if ($_conf['iphone']) { + $htm['options'] .= << + + + + +EOP; + $htm['name_label'] = '���O�F'; + $htm['mail_label'] = 'E-mail�F'; + $htm['name_extra_at'] = ' autocorrect="off" autocapitalize="off"'; + $htm['mail_extra_at'] = ' autocorrect="off" autocapitalize="off"'; + $htm['msg_extra_at'] = ' autocorrect="off" autocapitalize="off"'; + $htm['submit_extra_at'] = ''; + if ($_conf['expack.editor.mobile.savedraft'] != '0' && $_conf['expack.editor.mobile.savedraft.interval'] > 0) { + $htm['kaiko_on_js'] = ' onfocus="DraftKakiko.startAutoSave(this.form, ' . ($_conf['expack.editor.mobile.savedraft.interval'] * 1000) . ')"'; + } + } else { + $htm['name_label'] = '���O�F'; + $htm['mail_label'] = 'E-mail�F'; + $htm['name_extra_at'] = ''; + $htm['mail_extra_at'] = ''; + $htm['msg_extra_at'] = ''; + $htm['submit_extra_at'] = ''; + } +} else {*/ +// ���X�A���J�[ +if ($q_resnum) { + $hd['MESSAGE'] = ">>" . $q_resnum . "\r\n"; +} else { + $htm['k_br'] = ''; + if ($_conf['expack.editor.dpreview']) { + $htm['kaiko_on_js_fmt'] = ' onfocus="%1$s" onkeyup="if(%2$s){%1$s}DPSetMsg()"'; + } else { + $htm['kaiko_on_js_fmt'] = ' onfocus="%1$s" onkeyup="if(%2$s){%1$s}"'; + } +/* $htm['kaiko_on_js_func'] = sprintf("adjustTextareaRows(this,%d,2)", $STYLE['post_msg_rows']); + if ($_conf['expack.editor.savedraft'] != '0' && $_conf['expack.editor.savedraft.interval'] > 0) { + $htm['kaiko_on_js_func'] = 'DraftKakiko.startAutoSave(this.form, ' . ($_conf['expack.editor.savedraft.interval'] * 1000) . '); ' . $htm['kaiko_on_js_func']; + } + $htm['kaiko_on_js_cond'] = '!event||((event.keyCode&&(event.keyCode==8||event.keyCode==13))||event.ctrlKey||event.metaKey||event.altKey)'; + $htm['kaiko_on_js'] = sprintf($htm['kaiko_on_js_fmt'], $htm['kaiko_on_js_func'], p2h($htm['kaiko_on_js_cond'])); + //$htm['kaiko_on_js'] .= ' ondblclick="this.rows=this.value.split(/\r\n|\r|\n/).length+1"'; + $htm['kaiko_set_hidden_js'] = ' onclick="setHiddenValue(this);"'; + $htm['table_begin'] = '
'; + $htm['table_break1'] = '
'; + $htm['table_break2'] = ''; + $htm['table_end'] = '
';*/ + $htm['name_label'] = '�F'; + $htm['mail_label'] = '�F'; + $htm['name_extra_at'] = ' tabindex="1"'; + $htm['mail_extra_at'] = ' tabindex="2"'; + $htm['msg_extra_at'] = ' tabindex="3"'; + $htm['submit_extra_at'] = ' tabindex="4"'; + $hd['MESSAGE'] = ""; +} + +$ttitle_len = mb_strlen("$ttitle"); +$ttitle = htmlspecialchars_decode($ttitle, ENT_QUOTES); +$ttitle = mb_convert_kana($ttitle, 'rnas'); + +if ($ttitle_len > 15) { // �X���^�C��15�����ȏ�̏ꍇ�͒Z�k + $ttitle_pfi = mb_substr($ttitle, 0, 14) ."�c"; +} else { + $ttitle_pfi = "$ttitle"; +} + +// +Wiki:samba�^�C�}�[ +if ($_conf['wiki.samba_timer']) { + require_once P2_LIB_DIR . '/wiki/Samba.php'; + $samba = new Samba(); + $htm['samba'] .= $samba->createTimer($samba->getSamba($host, $bbs)); +} + +// �������ۑ� +$savedraft = ''; +if ((!$_conf['ktai'] && $_conf['expack.editor.savedraft'] != 0) || + ($_conf['iphone'] && $_conf['expack.editor.mobile.savedraft'] != 0)) { + $savedraft = << + +EOP; +} elseif ($_conf['ktai'] && $_conf['expack.editor.mobile.savedraft']) { + $savedraft = << +EOP; +} + +// �����R�[�h����p�������擪�Ɏd���ނ��Ƃ�mb_convert_variables()�̎�������������� +$htm['post_form'] = << + +
+ + {$ttitle_pfi}  +{$htm['maru_post']} +{$htm['name_label']} +{$htm['mail_label']} +{$htm['sage_cb']} +{$htm['options']} + + + + + +{$htm['src_fix']} +{$htm['block_submit']} + + + + + +{$htm['beres']} +{$htm['p2res']} + +{$htm['samba']} +{$htm['k_br']}{$savedraft} +
+ + + + + + + + + + + +{$newthread_hidden_ht}{$readnew_hidden_ht} +{$_conf['detect_hint_input_ht']} +
+ +EOP; + +/* + * Local Variables: + * mode: php + * coding: cp932 + * tab-width: 4 + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ +// vim: set syn=php fenc=cp932 ai et ts=4 sw=4 sts=4 fdm=marker: diff --git a/lib/live/live_view.inc.php b/lib/live/live_view.inc.php new file mode 100755 index 000000000..d2c69dc9b --- /dev/null +++ b/lib/live/live_view.inc.php @@ -0,0 +1,106 @@ +"; +$live_oldline = ""; +// +$live_td = ""; + +// �d�� & ���X�{�^�� +$stall_05 = ""; +$stall_30 = ""; +if ($_GET['live']) { + $tores .= "$stall_30"; +} else { + $tores .= "$stall_05"; +} + +// ���e +$tores .= ""; + +// �e�[�u���I�� +$tores .= "
"; +// �V�����X�̔ԍ��F +$live_newnum = "{$i}"; +$live_oldnum = "{$i}"; + +if ($this->thread->onthefly) { + $GLOBALS['newres_to_show_flag'] = true; + // �ԍ� (�I���U�t���C) + $tores .= "{$live_oldline}{$live_td}{$i}"; +} elseif ($i == 1) { + // �ԍ� (1) + if ($this->thread->readnum > 1) { + $tores .= "{$live_oldline}{$live_td}{$live_oldnum}"; + } else { + $tores .= "{$live_oldline}{$live_td}{$live_newnum}"; + } +} elseif ($i == $this->thread->readnum +1) { + $GLOBALS['newres_to_show_flag'] = true; + // �ԍ� (�V�����X�� �擪) + if ($_GET['live']) { + $tores .= "{$live_newline}{$live_td}{$live_newnum}"; + } else { + $tores .= "{$live_oldline}{$live_td}{$live_newnum}"; + } +} elseif ($i > $this->thread->readnum) { + // �ԍ� (�V�����X�� �㑱) + $tores .= "{$live_oldline}{$live_td}{$live_newnum}"; +} elseif ($_conf['expack.spm.enabled']) { + // �ԍ� (SPM) + $tores .= "{$live_oldline}{$live_td}{$live_oldnum}"; +} else { + // �ԍ� + $tores .= "{$live_oldline}{$live_td}{$i}"; +} + +// ���O +$tores .= preg_replace('{[ ]*}i', '', " {$name} : "); + +// ID +$tores .= "{$date_id}"; + +if ($this->am_side_of_id) { + $tores .= ' ' . $this->activeMona->getMona($res_id); +} + +// ���[�� +$tores .= " {$mail}"; + +// �탌�X���X�g(�c�`��) +if ($_conf['backlink_list'] == 1 || $_conf['backlink_list'] > 2) { + $tores .= $this->_quotebackListHtml($i, 1); +} + +$tores .= "  {$res_button}{$msg}�@"; + +if ($_conf['backlink_block'] > 0) { + // ��Q�ƃu���b�N�\���p��onclick��ݒ� + $tores .= "
\n"; +} else { + $tores .= "
\n"; +} + +// �탌�X�W�J�p�u���b�N +if ($_conf['backlink_block'] > 0) { + $backlinks = $this->_getBacklinkComment($i); + if (strlen($backlinks)) { + $tores .= '
'; + $tores .= $backlinks; + } +} +// �탌�X���X�g(���`��) +if ($_conf['backlink_list'] == 2 || $_conf['backlink_list'] > 2) { + $tores .= $this->_quotebackListHtml($i, 2, false); +} + +$tores .= "
"; +$tores .= "
\n"; + +// ���X�|�b�v�A�b�v�p���p +//$tores .= $rpop; + +?> \ No newline at end of file diff --git a/lib/live/live_view_ctl.inc.php b/lib/live/live_view_ctl.inc.php new file mode 100755 index 000000000..560bbe98f --- /dev/null +++ b/lib/live/live_view_ctl.inc.php @@ -0,0 +1,112 @@ +thread->idcount[$id] > 1) { + $date_id = str_replace($idstr, $this->idFilter($idstr, $id), $date_id); +} +// ID���� (O,P,Q,I ��) �̋��� +if ($_conf['live.id_b']) { + if (!preg_match("(ID:)", $date_id)) { // ID�����Ŗ����\���̂ݗL��̔� (�T��) + $date_id = preg_replace('((\s([a-zA-Z])$)(?![^<]*>))', '$1', $date_id); + } else { + $date_id = preg_replace('((ID: ?)([0-9A-Za-z/.+]{10}|[0-9A-Za-z/.+]{8}|\\?\\?\\?)?([a-zA-Z])(?=[^0-9A-Za-z/.+]|$)(?![^<]*>))', '$1$2 $3', $date_id); + } +} +// ���t�̒Z�k +if (preg_match("([0-2][0-9]{3}/[0-1][0-9]/[0-3][0-9])", $date_id)) { + if ($_GET['live']) { // �������͓��t��S�폜 + $date_id = preg_replace("([0-2][0-9]{3}/[0-1][0-9]/[0-3][0-9]\(..\))", "", $date_id); + } else { // ��L�ȊO�͔N����2���� + if (preg_match("(class=\"ngword)", $date_id)) { // NGID�̎� + $date_id = preg_replace("(([0-2][0-9])([0-9]{2}/[0-1][0-9]/[0-3][0-9]\(..\)))", "$2", $date_id); + } else { + $date_id = preg_replace("(([0-2][0-9])([0-9]{2}/[0-1][0-9]/[0-3][0-9]\(..\)))", "$2", $date_id); + } + } +} + +// ���[�� +if ($mail) { + // �������̏ꍇ + if ($_conf['live.mail_sage'] + && ($_GET['live'])) { + // sage �� �� �� + if (preg_match("(^[\\s�@]*sage[\\s�@]*$)", $mail)) { + if ($STYLE['read_mail_sage_color']) { + $mail = "��"; + } elseif ($STYLE['read_mail_color']) { + $mail = "��"; + } else { + $mail = "��"; + } + // sage �ȊO�� �� �� + } else { + $mail = "��"; + } + // �m�[�}������ + } elseif (preg_match("(^[\\s�@]*sage[\\s�@]*$)", $mail) + && $STYLE['read_mail_sage_color']) { + $mail = "{$mail}"; + } elseif ($STYLE['read_mail_color']) { + $mail = "{$mail}"; + } else { + $mail = "{$mail}"; + } +} + +// [����Ƀ��X] �̕��@ +if ($_GET['live']) { + $ttitle_en_q ="&ttitle_en=".UrlSafeBase64::encode($this->thread->ttitle); + // ���e���_�u���N���b�N + if ($_conf['live.res_button'] >= 1) { + $res_dblclc = "ondblclick=\"window.parent.livepost.location.href='live_post_form.php?host={$this->thread->host}&bbs={$this->thread->bbs}&key={$this->thread->key}&resnum={$i}{$ttitle_en_q}&inyou=1'\" title=\"{$i} �Ƀ��X (double click)\""; + } + // ���X�{�^�� + if ($_conf['live.res_button'] <= 1) { + if ($_conf['iframe_popup'] == 3) { + $res_button = "thread->host}&bbs={$this->thread->bbs}&key={$this->thread->key}&resnum={$i}{$ttitle_en_q}&inyou=1\" target=\"livepost\" title=\"{$i} �Ƀ��X\">\"Re:\""; + } else { + $res_button = "(thread->host}&bbs={$this->thread->bbs}&key={$this->thread->key}&resnum={$i}{$ttitle_en_q}&inyou=1\" target=\"livepost\" title=\"{$i} �Ƀ��X\">re:)"; + } + } +} + +// ���e +// �\���؋l�ߏ��� +if (mb_ereg("(([\\s�@]*[^\x01-\x7E][\\s�@]*
){2,})", $msg)) { + $msg = mb_ereg_replace("([\\s�@]*
[\\s�@]*)", "", $msg); // 3�s�ȏ��1�����u���̉��s��������s���폜 +} +// �������̕\���؋l�ߏ��� +if ($_conf['live.msg'] +&& ($_GET['live'])) { + $msg = mb_convert_kana($msg, 'rnas'); // �S�p�̉p���A�L���A�X�y�[�X�𔼊p�� + if (!preg_match ("(tp:/|ps:/|res/)", $msg)) { + $msg = mb_ereg_replace("([\\s�@]*
[\\s�@]*)", " ", $msg); // �S���s�����������p�X�y�[�X�ɁB���e�ɊO�������N��•ʐ����ꗗ���܂ޏꍇ�͑ΏۊO + } + $msg = mb_ereg_replace("(\s{2,})", " ", $msg); // �A���X�y�[�X��1�‚� +} + +// +live �X���b�h���e�\���ؑ� +if ($_GET['live']) { + if ($_conf['live.view_type'] == 0 ) { + include P2_LIB_DIR . '/live/default_view.inc.php'; + } else { + include P2_LIB_DIR . '/live/live_view.inc.php'; + } +} else { + if ($_conf['live.view_type'] > 1 ) { + include P2_LIB_DIR . '/live/live_view.inc.php'; + } else { + include P2_LIB_DIR . '/live/default_view.inc.php'; + } +} + +?> \ No newline at end of file diff --git a/lib/read_footer.inc.php b/lib/read_footer.inc.php index d70a054a3..d96fec174 100644 --- a/lib/read_footer.inc.php +++ b/lib/read_footer.inc.php @@ -59,9 +59,16 @@ {$dores_st} EOP; } else { + // +live �����N�ؑ� + if ($_GET['live']) { + $htm['dores'] = <<{$dores_st} +LIVE; + } else { $htm['dores'] = <<{$dores_st} EOP; + } } $res_form_ht_pb = $res_form_ht; @@ -169,6 +176,23 @@ if ($_conf['expack.ic2.enabled']) { include P2EX_LIB_DIR . '/ImageCache2/templates/info.tpl.html'; } + +// +live �\���ؑփX�N���v�g +if ($_GET['live']) { + echo ""; +} else { + echo << + + \n +LIVE; +} // ==== echo ''; diff --git a/lib/read_header.inc.php b/lib/read_header.inc.php old mode 100644 new mode 100755 index f6feec418..a73ac4bc4 --- a/lib/read_header.inc.php +++ b/lib/read_header.inc.php @@ -104,7 +104,12 @@ // $read_footer_navi_new ������ǂ� �V�����X�̕\�� if ($aThread->resrange['to'] == $aThread->rescount) { + // +live �����N�ؑ� + if ($_GET['live']) { + $read_footer_navi_new = "{$shinchaku_st}"; + } else { $read_footer_navi_new = "rescount}-&nt={$newtime}#r{$aThread->rescount}\" accesskey=\"r\">{$shinchaku_st}"; + } } else { $read_footer_navi_new = "resrange['to']}-{$offline_q}\" accesskey=\"r\">{$tuduki_st}"; } @@ -197,23 +202,33 @@ \n EOP; +// +live �����\�� html popup �؊� +if ($_conf['live.view_type'] > 1 ) { + $live_view_popup = live_; +} + if ($_conf['iframe_popup_type'] == 1) { echo << - + EOP; } else { echo << + EOP; } if ($_conf['link_youtube'] == 2 || $_conf['link_niconico'] == 2) { + // +live YouTube�v���r���[�\���̃T�C�Y�w�� + if ($_conf['live.youtube_winsize'] == 1) { + echo "\t\n"; + } else { echo <<\n EOP; + } } if ($_conf['expack.am.enabled']) { echo << -
\n +
\n EOP; P2Util::printInfoHtml(); @@ -425,6 +451,18 @@ function filterCount(n) EOP; } +// +live �����t���[�� 2�y�C���ŊJ�� +if ($_GET['live']) { +$htm['p2frame'] = << +//�����t���[�� 2�y�C���ŊJ�� | +} +//]]> +\n +live; +} else { // {{{ p2�t���[�� 3�y�C���ŊJ�� $htm['p2frame'] = << \n EOP; +} // }}} diff --git a/lib/sb_print.inc.php b/lib/sb_print.inc.php index 2d57967c8..318491026 100644 --- a/lib/sb_print.inc.php +++ b/lib/sb_print.inc.php @@ -361,6 +361,13 @@ function sb_print($aThreadList) } $thre_url = "{$_conf['read_php']}?{$host_bbs_key_q}{$rescount_q}{$offline_q}{$word_q}{$anum_ht}"; + // +live �����N�\���ؑ� + $ttitle_en = UrlSafeBase64::encode($aThread->ttitle); + $ttitle_urlen = rawurlencode($ttitle_en); + $ttitle_en_q ="&ttitle_en=".$ttitle_urlen; + + $live_url = "live_frame.php?{$host_bbs_key_q}&live=1{$ttitle_en_q}{$rescount_q}{$anum_ht}"; + // �I�����[>>1 if ($only_one_bool) { $td['one'] = << //==================================================================================== + // +live ������ic2�̃T���l�C���쐬��onoff + if ($_conf['expack.ic2.enabled'] + && (!$_conf['live.ic2_onoff'])) { + $live_ic2_off = "onclick=\"javascript:parent.menu.ic2_menu_switch(0);\""; + } + // �{�f�B echo << {$td['edit']}{$td['offrec']}{$td['unum']}{$td['rescount']}{$td['one']}{$td['checkbox']}{$torder_ht} -
{$moto_thre_ht}{$ttitle_ht}
+
{$moto_thre_ht} ++live  +{$ttitle_ht}
{$td['ita']}{$td['spd']}{$td['ikioi']}{$td['birth']}{$td['fav']}\n EOR; diff --git a/rep2/edit_aborn_word.php b/rep2/edit_aborn_word.php index 287b30a0f..17f04dc35 100644 --- a/rep2/edit_aborn_word.php +++ b/rep2/edit_aborn_word.php @@ -28,6 +28,10 @@ 'p2_ng_id.txt' => 'NGID', 'p2_aborn_be.txt' => '���ځ[��BE', 'p2_ng_be.txt' => 'NGBE', + 'p2_highlight_name.txt' => '�n�C���C�g�l�[��', + 'p2_highlight_mail.txt' => '�n�C���C�g���[��', + 'p2_highlight_msg.txt' => '�n�C���C�g���b�Z�[�W', + 'p2_highlight_id.txt' => '�n�C���C�gID', ); if (!array_key_exists($filename, $writable_files)) { @@ -221,7 +225,7 @@ $usage = <<
  • �~: �폜
  • -
  • ���[�h: NG/���ځ[�񃏁[�h (��ɂ���Ɠo�^����)
  • +
  • ���[�h: NG/���ځ[��/�n�C���C�g���[�h (��ɂ���Ɠo�^����)
  • i: �啶���������𖳎�
  • re: ���K�\��
  • ��: newsplus,software �� (���S��v, �J���}��؂�)
  • diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index b71fa1777..002947a9f 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -353,8 +353,8 @@ array('ngaborn_frequent_num', '�p�oID���ځ[��̂������l (�o���񐔂�����ȏ��ID�����ځ[��)'), array('ngaborn_frequent_dayres', '�����̑����X���ł͕p�oID���ځ[�񂵂Ȃ�
    (�����X��/�X�����Ă���̓����A0�Ȃ疳��)'), array('ngaborn_chain', '�A��NG���ځ[��
    �u����v�Ȃ炠�ځ[�񃌃X�ւ̃��X�͂��ځ[��ANG���X�ւ̃��X��NG�B
    �u���ׂ�NG�ɂ���v�̏ꍇ�A���ځ[�񃌃X�ւ̃��X��NG�ɂ���B'), - array('ngaborn_chain_all', '�\���͈͊O�̃��X���A��NG���ځ[��̑Ώۂɂ���
    (�������y�����邽�߁A�f�t�H���g�ł͂��Ȃ�)'), - array('ngaborn_daylimit', '���̊��ԁANG���ځ[���HIT���Ȃ���΁A�o�^���[�h�������I�ɊO�� (����)'), + array('ngaborn_chain_all', '�\���͈͊O�̃��X���A��NG/���ځ[��/�n�C���C�g�̑Ώۂɂ���
    (�������y�����邽�߁A�f�t�H���g�ł͂��Ȃ�)'), + array('ngaborn_daylimit', '���̊��ԁANG/���ځ[��/�n�C���C�g��HIT���Ȃ���΁A�o�^���[�h�������I�ɊO�� (����)'), array('ngaborn_purge_aborn', '���ځ[�񃌃X�͕s�Ž�div�u���b�N���`�悵�Ȃ�'), ); printEditConfGroupHtml($groupname, $conflist, $flags); @@ -571,8 +571,8 @@ $conflist = array( array('expack.spm.kokores', '�����Ƀ��X'), array('expack.spm.kokores_orig', '�����Ƀ��X�ŊJ���t�H�[���Ɍ����X�̓��e��\������'), - array('expack.spm.ngaborn', '���ځ[�񃏁[�h�ENG���[�h�o�^'), - array('expack.spm.ngaborn_confirm', '���ځ[�񃏁[�h�ENG���[�h�o�^���Ɋm�F����'), + array('expack.spm.ngaborn', '���ځ[��/NG/�n�C���C�g���[�h�o�^'), + array('expack.spm.ngaborn_confirm', '���ځ[��/NG/�n�C���C�g���[�h�o�^���Ɋm�F����'), array('expack.spm.filter', '�t�B���^�����O'), array('expack.spm.filter_target', '�t�B���^�����O���ʂ��J���t���[���܂��̓E�C���h�E'), ); @@ -817,6 +817,78 @@ echo << + +
    +

    +live�ݒ�

    +
    \n +EOP; +} + +// {{{ +live�ݒ� +// {{{ +live - �\���ݒ� + +$groupname = '�\���ݒ�'; +$groups[] = $groupname; +$flags = getGroupShowFlags($groupname); +if ($flags & P2_EDIT_CONF_USER_SKIPPED) { + $keep_old = true; +} else { + $conflist = array( + array('live.view_type', '���X�\���̎��'), + array('live.id_b', 'ID������ O (�g��) P (����p2) Q (�t���u���E�U) i (iPhone)�𑾎���'), + array('live.highlight_chain', '�A���n�C���C�g (�A���͈͂� ngaborn_chain_all �ɂĐݒ�)'), + array('live.youtube_winsize', 'YouTube�v���r���[�\���̃T�C�Y'), + ); + printEditConfGroupHtml($groupname, $conflist, $flags); +} + +// }}} +// {{{ +live - �������ݒ� + +$groupname = '�������ݒ�'; +$groups[] = $groupname; +$flags = getGroupShowFlags($groupname); +if ($flags & P2_EDIT_CONF_USER_SKIPPED) { + $keep_old = true; +} else { + $conflist = array( + array('live.before_respointer', '�\�����郌�X�� (100�ȉ�����)'), + array('live.post_width', '���������t���[���̍��� (px)'), + array('live.bbs_noname', '�f�t�H���g�̖������̕\��'), + array('live.mail_sage', 'sage �� �� ��'), + array('live.msg', '�S�Ẳ��s�ƃX�y�[�X�̍폜'), + array('live.res_button', '[����Ƀ��X] �̕��@'), + array('live.write_regulation', '�����K���p�^�C�}�['), + array('live.ic2_onoff', 'ImageCache2�̃T���l�C���쐬'), + ); + printEditConfGroupHtml($groupname, $conflist, $flags); +} + +// }}} +// {{{ +live - �����[�h/�X�N���[�� + +$groupname = '�����[�h/�X�N���[��'; +$groups[] = $groupname; +$flags = getGroupShowFlags($groupname); +if ($flags & P2_EDIT_CONF_USER_SKIPPED) { + $keep_old = true; +} else { + $conflist = array( + array('live.reload_time', '�I�[�g�����[�h�̊Ԋu'), + array('live.scroll_move', '�I�[�g�X�N���[���̊��炩�� (�ł����炩 1 �A�X�N���[������ 0)'), + array('live.scroll_speed', '�I�[�g�X�N���[���̑��x
    (�ő� 1 �A�X�N���[�������̏ꍇ�͏�̊��炩���̒l�� 0 ��)'), + ); + printEditConfGroupHtml($groupname, $conflist, $flags); +} + +// }}} +// }}} + +// PC�p�\�� +if (empty($_conf['ktai'])) { + echo << +
    \n EOP; // �g�їp�\�� @@ -848,6 +920,8 @@ if ($_conf['iphone']) { if ($groupname == 'tGrep') { echo ''; + } elseif ($groupname == '�\���ݒ�') { + echo ''; } elseif ($groupname == 'subject-i') { echo ''; } diff --git a/rep2/editpref.php b/rep2/editpref.php index a346d1adf..778ce4c33 100644 --- a/rep2/editpref.php +++ b/rep2/editpref.php @@ -174,6 +174,11 @@ // +Wiki $aborn_be_txt = 'p2_aborn_be.txt'; $ng_be_txt = 'p2_ng_be.txt'; +// +live �n�C���C�g���[�h�p +$highlight_name_txt = 'p2_highlight_name.txt'; +$highlight_mail_txt = 'p2_highlight_mail.txt'; +$highlight_msg_txt = 'p2_highlight_msg.txt'; +$highlight_id_txt = 'p2_highlight_id.txt'; echo '
    '; echo <<"; // }}} + // {{{ PC - +live �n�C���C�g���[�h�ҏW + + echo "\n\n"; + + echo << +�n�C���C�g���[�h�ҏW\n +EOP; + printEditFileForm($highlight_name_txt, '���O'); + printEditFileForm($highlight_mail_txt, '���[��'); + printEditFileForm($highlight_msg_txt, '�{��'); + printEditFileForm($highlight_id_txt, 'ID'); + echo <<\n +EOP; + + echo ""; + + // }}} // {{{ PC - �z�X�g�̓��� HTML�̃Z�b�g echo <<7j znJ{nOxrR{TGbJ%e1-?g`zI-VG`V1`nGB}3e=;9kTJ>kq}qGJ9X%wje>uXH(LZp&G> zo(L5&h$Nswn5Meo~wrNiHhtA~5>Y6(WSQYiy59m7TC1xpM`MERtLqVo^y85}Sb4q9e0Hu(E&;S4c literal 0 HcmV?d00001 diff --git a/rep2/img/re.png b/rep2/img/re.png new file mode 100755 index 0000000000000000000000000000000000000000..59397ebe9158655b0c3a1cf33b979733514273f3 GIT binary patch literal 369 zcmeAS@N?(olHy`uVBq!ia0vp^VnEEp!N$PADEO~70LbAi@Q5sCVBi)4Va7{$>;3=* zS<)SS9T^xl&P()h{0`(RBzpw;GB8xBGB7kWGcf%852Rl(Fa&WhFp5SnFj!4zU=Yv0 z9wk2ksP?(1i(^Q|EtZ3fj0_AMhc-lu8BP3_xBOCAgSXNFGdTu^|Nonc9~c>@pG!#q z0-z3{h||PI&2%{L&;*c7!k_>D?PCmVZDm7&#N5PZXJ+!eeEE_GqN6FADVWt*T>8K& ziJK-VXEn~Lvp^&cz2eSE0IKcj`40sA#Y}eQ%a<=VJ|Mbyx9IHO8)x;LZLaWj3u{R- zGL-Z2_fLoDQqp|U!79PF__&3kW ��o�^���܂����B'; + } elseif ($resar[0] != "") { + $msg = '�n�C���C�g���[�h�i���O�j�� ' . $resar[0] . ' ��o�^���Ă�낵���ł����H'; + $aborn_str_en = UrlSafeBase64::encode($resar[0]); + } + $edit_value = '�n�C���C�g���[�h�ҏW�F���O'; + break; + case 'highlight_mail': + $title_st = 'p2 - �n�C���C�g���[�h�o�^�F���[��'; + if ($popup == 2) { + $msg = '�n�C���C�g���[�h�i���[���j�� ' . $aborn_str . ' ��o�^���܂����B'; + } elseif ($resar[1] != "") { + $msg = '�n�C���C�g���[�h�i���[���j�� ' . $resar[1] . ' ��o�^���Ă�낵���ł����H'; + $aborn_str_en = UrlSafeBase64::encode($resar[1]); + } + $edit_value = '�n�C���C�g���[�h�ҏW�F���[��'; + break; + case 'highlight_msg': + $title_st = 'p2 - �n�C���C�g���[�h�o�^�F���b�Z�[�W'; + if ($popup == 2) { + $msg = '�n�C���C�g���[�h�i���b�Z�[�W�j�� ' . $aborn_str . ' ��o�^���܂����B'; + } else { + $msg = '�n�C���C�g���[�h�i���b�Z�[�W�j
    '; + } + $edit_value = '�n�C���C�g���[�h�ҏW�F���b�Z�[�W'; + break; + case 'highlight_id': + $title_st = 'p2 - �n�C���C�g���[�h�o�^�FID'; + if ($popup == 2) { + $msg = '�n�C���C�g���[�h�iID�j�� ' . $aborn_str . ' ��o�^���܂����B'; + } elseif ($aborn_id != "") { + $msg = '�n�C���C�g���[�h�iID�j�� ' . $aborn_id . ' ��o�^���Ă�낵���ł����H'; + $aborn_str_en = UrlSafeBase64::encode($aborn_id); + } + $edit_value = '�n�C���C�g���[�h�ҏW�FID'; + break; default: /*���u*/ } @@ -293,7 +332,7 @@ function infoSpLiveAborn() var tgt = "{$aborn_target}"; var once = {$aborn_once}; /*try {*/ - var heads = opener.document.getElementsByTagName('div'); + var heads = opener.document.getElementsByTagName('*'); for (var i = heads.length - 1; i >= 0 ; i--) { if (heads[i].className.indexOf('res-header') != -1 && heads[i].innerHTML.indexOf(tgt) != -1) diff --git a/rep2/js/live_htmlpopup.js b/rep2/js/live_htmlpopup.js new file mode 100755 index 000000000..93df16767 --- /dev/null +++ b/rep2/js/live_htmlpopup.js @@ -0,0 +1,169 @@ +/* + p2 - HTML���|�b�v�A�b�v���邽�߂�JavaScript +*/ + +//showHtmlDelaySec = 0.2 * 1000; // HTML�\���f�B���C�^�C���B�}�C�N���b�B + +showHtmlTimerID = 0; +node_div = false; +node_close = false; +tUrl = ""; // URL�e���|�����ϐ� +gUrl = ""; // URL�O���[�o���ϐ� +gX = 0; +gY = 0; + +/** + * �N���[�Y�{�^���������̓|�b�v�A�b�v�O�����N���b�N���ĕ‚��邽�߂̊֐� + */ +function hideHtmlPopUpCallback(evt) +{ + evt = evt || window.event; + + hideHtmlPopUp(); + + // �C�x���g���X�i���폜 + if (window.removeEventListener) { + // W3C DOM + document.body.removeEventListener('click', hideHtmlPopUpCallback, false); + evt.preventDefault(); + evt.stopPropagation(); + } else if (window.detachEvent) { + // IE + document.body.detachEvent('onclick', hideHtmlPopUpCallback); + evt.returnValue = false; + evt.cancelBubble = true; + } +} + +/** + * HTML�|�b�v�A�b�v��\������ + * + * �����̈��p���X�Ԃ�(p)�� onMouseover �ŌĂяo����� + */ +function showHtmlPopUp(url,ev,showHtmlDelaySec, marker) +{ + if (!document.createElement) { return; } // DOM��Ή� + + // �܂� onLoad ����Ă��Ȃ��A�R���e�i���Ȃ���΁A������ + if (!gIsPageLoaded && !document.getElementById('popUpContainer')) { + return; + } + + showHtmlDelaySec = showHtmlDelaySec * 1000; + + if (!node_div || url != gUrl) { + tUrl = url; + gX = getPageX(ev); + gY = getPageY(ev); + showHtmlTimerID = setTimeout(function() {showHtmlPopUpDo(marker);}, showHtmlDelaySec); // HTML�\���f�B���C�^�C�}�[ + } +} + +/** + * HTML�|�b�v�A�b�v�̎��s + */ +function showHtmlPopUpDo(marker) +{ + if (marker && marker.firstChild) marker = marker.firstChild; + var gX = marker && marker.offsetLeft && marker.width ? + (marker.offsetLeft + marker.width) : window.gX; + // ���炩���ߊ�����HTML�|�b�v�A�b�v��‚��Ă��� + hideHtmlPopUp(); + + gUrl = tUrl; + var x_adjust = 300; // x���ʒu���� + var y_adjust = -46; // y���ʒu���� + var closebox_width = 18; + + if (!node_div) { + node_div = document.createElement('div'); + node_div.setAttribute('id', "iframespace"); + + if (!window.addEventListener && !window.attachEvent) { + node_close = document.createElement('div'); + node_close.setAttribute('id', "closebox"); + } + + node_div.style.left = gX + x_adjust + "px"; //�|�b�v�A�b�v�ʒu + node_div.style.top = getScrollY() + "px"; //gY + y_adjust + "px"; + if (node_close) { + node_close.style.left = (gX + x_adjust - closebox_width) + "px"; // �|�b�v�A�b�v�ʒu + node_close.style.top = node_div.style.top; + } + var b_adjust = 4; // iframe��(frameborder+border)*2 + var yokohaba = getWindowWidth() - b_adjust - gX - x_adjust; + var tatehaba = getWindowHeight() - b_adjust; + + pageMargin = ""; + // �摜�̏ꍇ�̓}�[�W�����[���� + if (gUrl.search(/\.(jpe?g|gif|png)$/) !== -1) { + pageMargin = ' marginheight="0" marginwidth="0" hspace="0" vspace="0"'; + } + node_div.innerHTML = ''; + + if (node_close) { + node_close.innerHTML = '�~'; + } + + var popUpContainer = document.getElementById("popUpContainer"); + if (!popUpContainer) { + popUpContainer = document.body; + } + popUpContainer.appendChild(node_div); + if (node_close) { + popUpContainer.appendChild(node_close); + } + } + + // HTML�|�b�v�A�b�v�O�����N���b�N���Ă��‚�����悤�ɂ��� + if (window.addEventListener) { + // W3C DOM + document.body.addEventListener('click', hideHtmlPopUpCallback, false); + } else if (window.attachEvent) { + // IE + document.body.attachEvent('onclick', hideHtmlPopUpCallback); + } +} + +/** + * HTML�|�b�v�A�b�v���\���ɂ��� + */ +function hideHtmlPopUp() +{ + if (!document.createElement) { return; } // DOM��Ή� + if (showHtmlTimerID) { clearTimeout(showHtmlTimerID); } // HTML�\���f�B���C�^�C�}�[������ + if (node_div) { + node_div.style.visibility = "hidden"; + node_div.parentNode.removeChild(node_div); + node_div = false; + } + if (node_close) { + node_close.style.visibility = "hidden"; + node_close.parentNode.removeChild(node_close); + node_close = false; + } +} + +/** + * HTML�\���^�C�}�[���������� + * + * (p)�� onMouseout �ŌĂяo����� + */ +function offHtmlPopUp() +{ + // HTML�\���f�B���C�^�C�}�[������Ή������Ă��� + if (showHtmlTimerID) { + clearTimeout(showHtmlTimerID); + } +} + +/* + * Local Variables: + * mode: javascript + * coding: cp932 + * tab-width: 4 + * c-basic-offset: 4 + * indent-tabs-mode: t + * End: + */ +/* vim: set syn=javascript fenc=cp932 ai noet ts=4 sw=4 sts=4 fdm=marker: */ diff --git a/rep2/js/live_htmlpopup_resizable.js b/rep2/js/live_htmlpopup_resizable.js new file mode 100755 index 000000000..5e8f1042e --- /dev/null +++ b/rep2/js/live_htmlpopup_resizable.js @@ -0,0 +1,356 @@ +/* + p2 - HTML���|�b�v�A�b�v���邽�߂�JavaScript + + @thanks http://www.yui-ext.com/deploy/yui-ext/docs/ +*/ + +//showHtmlDelaySec = 0.2 * 1000; // HTML�\���f�B���C�^�C���B�}�C�N���b�B + +gShowHtmlTimerID = null; +gNodePopup = null; // iframe���i�[����div�v�f +//gNodeClose = null; // �~���i�[����div�v�f +tUrl = ""; // URL�e���|�����ϐ� +gUrl = ""; // URL�O���[�o���ϐ� + +// �u���E�U��ʁi�X�N���[����j�̃}�E�X�� X, Y���W +gMouseX = 0; +gMouseY = 0; + +iResizable = null; +stophide = false; + +/** + * HTML�v�A�b�v��\������ + * �����̈��p���X�Ԃ�(p)�� onMouseover �ŌĂяo����� + * [memo] ��������event�I�u�W�F�N�g�ɂ��������悢���낤���B + * + * @access public + */ +function showHtmlPopUp(url, ev, showHtmlDelaySec, marker) +{ + if (!document.createElement) { return; } // DOM��Ή��Ȃ甲���� + + // �܂� onLoad ����Ă��Ȃ��A�R���e�i���Ȃ���΁A������ + if (!gIsPageLoaded && !document.getElementById('popUpContainer')) { + return; + } + + showHtmlDelaySec = showHtmlDelaySec * 1000; + + if (!gNodePopup || url != gUrl) { + tUrl = url; + + var pointer = getPageXY(ev); + gMouseX = pointer[0]; + gMouseY = pointer[1]; + + // HTML�\���f�B���C�^�C�}�[ + gShowHtmlTimerID = setTimeout(function() {showHtmlPopUpDo(marker);}, showHtmlDelaySec); + } +} + +/** + * showHtmlPopUpDo() ���痘�p����� + * + * @return integer + */ +function getCloseTop(win_bottom) +{ + var close_top_adjust = 16; + + close_top = Math.min(win_bottom - close_top_adjust, gMouseY + close_top_adjust); + if (close_top >= win_bottom - close_top_adjust) { + close_top = gMouseY - close_top_adjust - 12; + } + return close_top; +} + +/** + * HTML�|�b�v�A�b�v�̎��s + */ +function showHtmlPopUpDo(marker) +{ + if (marker && marker.firstChild) marker = marker.firstChild; + var gMouseX = marker && marker.offsetLeft && marker.width ? + (marker.offsetLeft + marker.width) : window.gMouseX; + + // ���炩���ߊ�����HTML�|�b�v�A�b�v��‚��Ă��� + hideHtmlPopUp(null, true); + + gUrl = tUrl; + var popup_x_adjust = 300; // popup(iframe)��x���ʒu���� + var closebox_width = 18; // �~�̉��� + var adjust_for_scrollbar = 22; // 22 �X�N���[���o�[���l�����ď��������ڂɔ����� + + if (gUrl.indexOf("kanban.php?") != -1) { popup_x_adjust += 23; } + + if (!gNodePopup) { + gNodePopup = document.createElement('iframe'); + gNodePopup.setAttribute('id', 'iframespace'); + gNodePopup.style.backgroundColor = "#ffffff"; + + /* + gNodeClose = document.createElement('div'); + gNodeClose.setAttribute('id', "closebox"); + gNodeClose.setAttribute('onMouseover', "hideHtmlPopUp(ev)"); + */ + + var closeX = gMouseX + popup_x_adjust - closebox_width; + + // IE�p + if (document.all) { + var body = getDocumentBodyIE(); + + var iframeX = gMouseX + popup_x_adjust; + gNodePopup.style.pixelLeft = iframeX; // �|�b�v�A�b�v�ʒu iframe��X���W + gNodePopup.style.pixelTop = body.scrollTop; // �|�b�v�A�b�v�ʒu iframe��Y���W + // document.body.scrollTop �� DOCTIYE�� document.documentElement.scrollTop �ɂȂ�炵�� + + /* + gNodeClose.style.pixelLeft = closeX; // �|�b�v�A�b�v�ʒu �~��X���W + // �|�b�v�A�b�v�ʒu �~��Y���W + var close_top = getCloseTop(body.scrollTop + body.clientHeight); + gNodeClose.style.pixelTop = close_top; + */ + + var iframe_width = body.clientWidth - gNodePopup.style.pixelLeft - adjust_for_scrollbar; + var iframe_height = body.clientHeight - adjust_for_scrollbar; + + widthRatio = 0.6; + if (iframe_width < body.clientWidth * widthRatio) { + addIframeWidth = (body.clientWidth * widthRatio) - iframe_width; + iframe_width += addIframeWidth; + gNodePopup.style.pixelLeft = iframeX - addIframeWidth; + } + + // DOM�Ή��p�iMozilla�j + } else if (document.getElementById) { + + var iframeX = gMouseX + popup_x_adjust; + gNodePopup.style.left = iframeX + "px"; // �|�b�v�A�b�v�ʒu iframe��X���W + gNodePopup.style.top = window.pageYOffset + "px"; // �|�b�v�A�b�v�ʒu iframe��Y���W + + /* + gNodeClose.style.left = closeX + "px"; // �|�b�v�A�b�v�ʒu �~��X���W + // �|�b�v�A�b�v�ʒu �~��Y���W + var close_top = getCloseTop(window.pageYOffset + window.innerHeight); + gNodeClose.style.top = close_top + "px"; + */ + + var iframe_width = window.innerWidth - iframeX - adjust_for_scrollbar; + var iframe_height = window.innerHeight - adjust_for_scrollbar; + + widthRatio = 0.6; + if (iframe_width < window.innerWidth * widthRatio) { + addIframeWidth = (window.innerWidth * widthRatio) - iframe_width; + iframe_width += addIframeWidth; + var iframe_left = iframeX - addIframeWidth; + gNodePopup.style.left = iframe_left + 'px'; + } + } + +// gNodePopup.src = gUrl; + gNodePopup.frameborder = 0; + gNodePopup.width = iframe_width; + gNodePopup.height = iframe_height; + + pageMargin_at = ""; + // �摜�̏ꍇ�̓}�[�W�����[���ɂ��� + if (gUrl.match(/(jpg|jpeg|gif|png)$/)) { + //pageMargin_at = ' marginheight="0" marginwidth="0" hspace="0" vspace="0"'; + + // ���̐ݒ�͌����Ă��Ȃ��HinnerHTML�ł͌����Ă����C������ + gNodePopup.marginheight = 0; + gNodePopup.marginwidth = 0; + gNodePopup.hspace = 0; + gNodePopup.vspace = 0; + } + + // 2006/11/30 ����܂�div����innerHTML�ɂ��Ă����̂́A�������R���������C�����邪�Y�ꂽ�B + // IE�ł̃|�b�v�A�b�v���|�b�v�A�b�v�͂ǂ���ɂ���ł��Ă��Ȃ��悤���B + //gNodePopup.innerHTML = ""; + + //gNodeClose.innerHTML = "�~"; + + var popUpContainer = document.getElementById("popUpContainer"); + + var headerEI = document.getElementById("header"); //read�p + if (headerEI) { + popUpContainer = headerEI; + } else { + var Ntd1EI = document.getElementById("ntd1"); // read_new�p + if (Ntd1EI) { + popUpContainer = Ntd1EI; + } + } + // popUpContainer ��body�ǂݍ��݂���������O���痘�p�ł���悤�ɗp�ӂ��Ă���B + // popUpContainer �ł́AYAHOO.ext.Resizable �̕\����‚������ɁAIE�ŋ󔒃X�y�[�X�������Ă��܂��i�H�j�̂ŁA + // header �����鎞�́Aheader�𗘗p���Ă��� + if (popUpContainer) { + popUpContainer.appendChild(gNodePopup); + //popUpContainer.appendChild(gNodeClose); + } else { + document.body.appendChild(gNodePopup); + //document.body.appendChild(gNodeClose); + } + + if (gIsPageLoaded) { + setIframeResizable(); + } else { + var setIframeResizableOnLoad = function(){ setIframeResizable(); } + YAHOO.util.Event.addListener(window, 'load', setIframeResizableOnLoad); + } + gNodePopup.src = gUrl; + } +} + +function setIframeResizable() +{ + if (!gNodePopup) { + return; + } + + iResizable = new YAHOO.ext.Resizable('iframespace', { + pinned:true, + //width: 200, + //height: 100, + minWidth:100, + minHeight:50, + handles: 'all', + wrap:true, + draggable:true, + dynamic: true + }); + + var iframespaceEl = iResizable.getEl(); + + iframespaceEl.dom.style.backgroundColor = "#ffffff"; + iframespaceEl.dom.ondblclick = hideHtmlPopUp; + + var msgClose = '�‚���ɂ́A�|�b�v�A�b�v�O���N���b�N'; + window.status = msgClose; + + iframespaceEl.on('resize', function(){ + stophide = true; + this.dom.title = msgClose; + }); +} + +// �y�[�W�g�b�v����̃}�E�X�ʒu��X, Y���W +// @return array +function getPageXY(ev) +{ + /* + // Yahoo UI �͎g�������Ŏg���Ȃ��H�������肻���ȋC������񂾂��c + alert(YAHOO.util.Dom.getClientHeight()); // ��ʂ̍��� // Deprecated Now using getViewportHeight. + alert(YAHOO.util.Dom.getViewportHeight()); // ��� (excludes scrollbars) + alert(YAHOO.util.Dom.getDocumentHeight()); // �h�L�������g�S�� + // YAHOO.util.Event.getPageX(ev) + var cursor1 = YAHOO.util.Event.getXY(ev); // �y�[�W�� + alert(cursor1); + */ + + // IE�p + if (document.all) { + // ���݂̃}�E�X�ʒu��X, Y���W + var body = getDocumentBodyIE(); + // IE�Ȃ�window.event�ŃO���[�o���ɎQ�Ƃł��邪�A�����ł�IE�ȊO�ɂ����킹�Ďg��Ȃ��ł��� + var pageX = body.scrollLeft + ev.clientX; + var pageY = body.scrollTop + ev.clientY; + + } else { + // pageX, pageY �́AIE�͔�T�|�[�g + var pageX = ev.pageX; + var pageY = ev.pageY; + } + return [pageX, pageY]; +} + +/** + * HTML�|�b�v�A�b�v���\���ɂ��� + * + * @access public + */ +function hideHtmlPopUp(ev, fast) +{ + if (!gIsPageLoaded) { + return false; + } + + if (!document.createElement) { return; } // DOM��Ή��Ȃ甲���� + + if (stophide) { + stophide = false; + return; + } + + if (!gFade) { + fast = true; + } + + if (iResizable) { + var iframespaceEl = iResizable.getEl(); + + var iRegion = YAHOO.util.Region.getRegion(iframespaceEl.dom); + + if (ev) { + var pageXY = getPageXY(ev); + //alert(pageXY); + var pagePoint = new YAHOO.util.Point(pageXY); + + if (iRegion.intersect(pagePoint)) { + return; + } + //alert(iRegion); + } + + if (fast) { + iframespaceEl.remove(); + iResizable = null; + hideHtmlPopUpDo(); + } else { + iframespaceEl.setOpacity(0, true, 0.15, function(){ + this.remove(); + iResizable = null; + hideHtmlPopUpDo(); + }); + } + + } else { + hideHtmlPopUpDo(); + } + +} + +function hideHtmlPopUpDo() +{ + if (gShowHtmlTimerID) { clearTimeout(gShowHtmlTimerID); } // HTML�\���f�B���C�^�C�}�[���������� + + + if (gNodePopup) { + gNodePopup.style.visibility = "hidden"; + gNodePopup.parentNode.removeChild(gNodePopup); + gNodePopup = null; + } + + /* + if (gNodeClose) { + gNodeClose.style.visibility = "hidden"; + gNodeClose.parentNode.removeChild(gNodeClose); + gNodeClose = null; + } + */ +} + +/** + * HTML�\���^�C�}�[���������� + * + * (p)�� onMouseout �ŌĂяo����� + */ +function offHtmlPopUp() +{ + // HTML�\���f�B���C�^�C�}�[������Ή������Ă��� + if (gShowHtmlTimerID) { + clearTimeout(gShowHtmlTimerID); + } +} diff --git a/rep2/js/preview_video_half.js b/rep2/js/preview_video_half.js new file mode 100755 index 000000000..40e89a9be --- /dev/null +++ b/rep2/js/preview_video_half.js @@ -0,0 +1,98 @@ +/* + * rep2expack - �l�b�g����̃v���r���[ + */ + +// {{{ preview_video_youtube() + +/* + * YouTube�̃v���r���[��\������ + * + * @param String id + * @param Element placeholder + * @return void + */ +function preview_video_youtube(id, placeholder) +{ + var container = document.createElement('div'); + container.className = 'preview-video preview-video-youtube'; + + var embed = document.createElement('embed'); + embed.setAttribute('src', 'http://www.youtube.com/v/' + id); + embed.setAttribute('type', 'application/x-shockwave-flash'); + embed.setAttribute('wmode', 'transparent'); + embed.setAttribute('width', '212'); + embed.setAttribute('height', '175'); + + if (document.all) { + container.appendChild(embed); + } else { + var preview = document.createElement('object'); + preview.setAttribute('width', '212'); + preview.setAttribute('height', '175'); + + var param1 = document.createElement('param'); + param1.setAttribute('name', 'movie'); + param1.setAttribute('value', 'http://www.youtube.com/v/' + id); + param1.setAttribute('valuetype', 'ref'); + param1.setAttribute('type', 'application/x-shockwave-flash'); + + var param2 = document.createElement('param'); + param2.setAttribute('name', 'wmode'); + param2.setAttribute('value', 'transparent'); + + preview.appendChild(param1); + preview.appendChild(param2); + preview.appendChild(embed); + container.appendChild(preview); + } + + if (placeholder && placeholder.parentNode) { + placeholder.parentNode.replaceChild(container, placeholder); + } else { + document.body.appendChild(container); + } +} + +// }}} +// {{{ preview_video_niconico() + +/* + * �j�R�j�R����̃v���r���[��\������ + * + * @param String id + * @param Element placeholder + * @return void + */ +function preview_video_niconico(id, placeholder) +{ + var container = document.createElement('div'); + container.className = 'preview-video preview-video-niconico'; + + var preview = document.createElement('iframe'); + preview.setAttribute('src', 'http://ext.nicovideo.jp/thumb/' + id); + preview.setAttribute('width', '425'); + preview.setAttribute('height', '175'); + preview.setAttribute('frameborder', '0'); + preview.setAttribute('scrolling', 'auto'); + + container.appendChild(preview); + + if (placeholder && placeholder.parentNode) { + placeholder.parentNode.replaceChild(container, placeholder); + } else { + document.body.appendChild(container); + } +} + +// }}} + +/* + * Local Variables: + * mode: javascript + * coding: cp932 + * tab-width: 4 + * c-basic-offset: 4 + * indent-tabs-mode: t + * End: + */ +/* vim: set syn=javascript fenc=cp932 ai noet ts=4 sw=4 sts=4 fdm=marker: */ diff --git a/rep2/js/smartpopup.js b/rep2/js/smartpopup.js index 39c8ee328..b8df91465 100644 --- a/rep2/js/smartpopup.js +++ b/rep2/js/smartpopup.js @@ -55,18 +55,21 @@ SPM.init = function (aThread) { // �u�b�N�}�[�N (������) - // ���ځ[�񃏁[�h�ENG���[�h + // ���ځ[�񃏁[�h�ENG���[�h�E�n�C���C�g���[�h if (opt[2] == 1 || opt[2] == 2) { var abnId = threadId + '_ab'; var ngId = threadId + '_ng'; + var highlightId = threadId + '_highlight'; spm.appendItem('���ځ[�񂷂�', [aThread, 'info_sp.php', 'mode=aborn_res']); spm.appendItem('���ځ[�񃏁[�h', null, abnId); spm.appendItem('NG���[�h', null, ngId); + spm.appendItem('�n�C���C�g���[�h', null, highlightId); // �T�u���j���[���� var spmAborn = SPM.createNgAbornSubMenu(abnId, aThread, 'aborn'); var spmNg = SPM.createNgAbornSubMenu(ngId, aThread, 'ng'); + var spmHighlight = SPM.createNgAbornSubMenu(highlightId, aThread, 'highlight'); } else { - var spmAborn = false, spmNg = false; + var spmAborn = false, spmNg = false, spmHighlight = false; } // �t�B���^�����O @@ -121,6 +124,10 @@ SPM.init = function (aThread) { if (spmNg) { container.appendChild(spmNg); } + // �n�C���C�g���[�h�E�T�u���j���[���R���e�i�ɒlj� + if (spmHighlight) { + container.appendChild(spmHighlight); + } // �t�B���^�����O�E�T�u���j���[���R���e�i�ɒlj� if (spmFilter) { container.appendChild(spmFilter); diff --git a/rep2/live_control.php b/rep2/live_control.php new file mode 100755 index 000000000..9dc50465f --- /dev/null +++ b/rep2/live_control.php @@ -0,0 +1,52 @@ + + + + + + + + + + +
    +
    +

     

    +

     

    +
    +
    + + +LIVE; + +?> \ No newline at end of file diff --git a/rep2/live_frame.php b/rep2/live_frame.php new file mode 100755 index 000000000..1c5f9a8a7 --- /dev/null +++ b/rep2/live_frame.php @@ -0,0 +1,74 @@ +authorize(); // ���[�U�F�� + +// �ϐ� +if (empty($_GET['host'])) { + // �����G���[ + die('p2 error: host ���w�肳��Ă��܂���'); +} else { + $host = $_GET['host']; +} +$bbs = isset($_GET['bbs']) ? $_GET['bbs'] : ''; +$key = isset($_GET['key']) ? $_GET['key'] : ''; +$rescount = isset($_GET['rescount']) ? intval($_GET['rescount']) : 1; + +$itaj = P2Util::getItaName($host, $bbs); +if (!$itaj) { $itaj = $bbs; } + +$ttitle_en = isset($_GET['ttitle_en']) ? $_GET['ttitle_en'] : ''; +$ttitle = (strlen($ttitle_en) > 0) ? UrlSafeBase64::decode($ttitle_en) : ''; +$ttitle_hd = htmlspecialchars($ttitle, ENT_QUOTES); +$ttitle_urlen = rawurlencode($ttitle_en); +$ttitle_en_q = "&ttitle_en=" . $ttitle_urlen; + +$live_read = "live_read.php"; +$live_q = "&live=1"; + +if ($_GET['offline']) { + $offline_l = isset($_GET['offline']) ? $_GET['offline'] : ''; + $offline_q = "&offline=" . $offline_l; + $live_read = "read.php"; + $live_q = "&live=0"; +} + +if ($_GET['word']) { + $word_l = isset($_GET['word']) ? $_GET['word'] : ''; + $method_l = isset($_GET['method']) ? $_GET['method'] : ''; + $word_q = "&word=" . $word_l . "&method=" . $method_l; + $live_read = "read.php"; + $live_q = "&live=0"; +} + +// HTML�v�����g +P2Util::header_nocache(); +P2Util::header_content_type(); + +if ($_conf['doctype']) { echo $_conf['doctype']; } + +echo << + + + + + {$itaj} / {$ttitle_hd} + + + + + + + + + + + +LIVE; + +?> \ No newline at end of file diff --git a/rep2/live_post.php b/rep2/live_post.php new file mode 100755 index 000000000..2387c29f4 --- /dev/null +++ b/rep2/live_post.php @@ -0,0 +1,1000 @@ +authorize(); // ���[�U�F�� + +if (!empty($_conf['disable_res'])) { + p2die('�������݋@�\�͖����ł��B'); +} + +// �����G���[ +if (empty($_POST['host'])) { + p2die('�����̎w�肪�ςł�'); +} + +$el = error_reporting(E_ALL & ~E_NOTICE); +$salt = 'post' . $_POST['host'] . $_POST['bbs'] . $_POST['key']; +error_reporting($el); + +if (!isset($_POST['csrfid']) or $_POST['csrfid'] != P2Util::getCsrfId($salt)) { + p2die('�s���ȃ|�X�g�ł�'); +} + +if ($_conf['expack.aas.enabled'] && !empty($_POST['PREVIEW_AAS'])) { + include P2_BASE_DIR . '/aas.php'; + exit; +} + +//================================================================ +// �ϐ� +//================================================================ +$newtime = date('gis'); + +$post_param_keys = array('bbs', 'key', 'time', 'FROM', 'mail', 'MESSAGE', 'subject', 'submit'); +$post_internal_keys = array('host', 'sub', 'popup', 'rescount', 'ttitle_en'); +$post_optional_keys = array('newthread', 'beres', 'p2res', 'from_read_new', 'maru', 'csrfid'); +$post_p2_flag_keys = array('b', 'p2_post_confirm_cookie'); + +foreach ($post_param_keys as $pk) { + ${$pk} = (isset($_POST[$pk])) ? $_POST[$pk] : ''; +} +foreach ($post_internal_keys as $pk) { + ${$pk} = (isset($_POST[$pk])) ? $_POST[$pk] : ''; +} + +if (!isset($ttitle)) { + if ($ttitle_en) { + $ttitle = UrlSafeBase64::decode($ttitle_en); + } elseif ($subject) { + $ttitle = $subject; + } else { + $ttitle = ''; + } +} + +//$MESSAGE = rtrim($MESSAGE); + +// {{{ �\�[�X�R�[�h�����ꂢ�ɍČ������悤�ɕϊ� + +if (!empty($_POST['fix_source'])) { + // �^�u���X�y�[�X�� + $MESSAGE = tab2space($MESSAGE); + // ���ꕶ�������̎Q�Ƃ� + $MESSAGE = p2h($MESSAGE); + // ����URL�����N��� + $MESSAGE = str_replace('tp://', 'tp://', $MESSAGE); + // �s���̃X�y�[�X�����̎Q�Ƃ� + $MESSAGE = preg_replace('/^ /m', ' ', $MESSAGE); + // ��‘����X�y�[�X�̈�–ڂ����̎Q�Ƃ� + $MESSAGE = preg_replace('/(? $v) { + if (!array_key_exists($k, $post) && !in_array($k, $post_ignore_keys)) { + $post[$k] = $v; + } + } +} + +if (!empty($_POST['newthread'])) { + $ptitle = 'rep2 - �V�K�X���b�h�쐬'; +} else { + $ptitle = 'rep2 - ���X��������'; +} + +$post_backup_key = PostDataStore::getKeyForBackup($host, $bbs, $key, !empty($_REQUEST['newthread'])); +$post_config_key = PostDataStore::getKeyForConfig($host, $bbs); + +// �ݒ��ۑ� +PostDataStore::set($post_config_key, array( + 'beres' => !empty($_REQUEST['beres']), + 'p2res' => !empty($_REQUEST['p2res']), +)); + +//================================================================ +// �������ݏ��� +//================================================================ + +// �������݂��ꎞ�I�ɕۑ� +PostDataStore::set($post_backup_key, $post_cache); + +// �|�X�g���s +if (!empty($_POST['p2res']) && empty($_POST['newthread'])) { + // ����p2�ŏ������� + $posted = postIt2($host, $bbs, $key, $FROM, $mail, $MESSAGE); +} else { + // cookie �ǂݍ��� + $cookie_key = $_login->user_u . '/' . P2Util::normalizeHostName(P2Util::isHostBbsPink($host) ? 'www.bbspink.com' : P2Util::isHost2chs($host) ? 'www.2ch.net' : $host); // �E�@���Ή� + if ($p2cookies = CookieDataStore::get($cookie_key)) { + if (is_array($p2cookies)) { + if (array_key_exists('expires', $p2cookies)) { + // �����؂�Ȃ�j�� + if (time() > strtotime($p2cookies['expires'])) { + CookieDataStore::delete($cookie_key); + $p2cookies = null; + } + } + } else { + CookieDataStore::delete($cookie_key); + $p2cookies = null; + } + } else { + $p2cookies = null; + } + + // ���ڏ������� + $posted = postIt($host, $bbs, $key, $post); + + // cookie �ۑ� + if ($p2cookies) { + CookieDataStore::set($cookie_key, $p2cookies); + } +} + +// ���e���s�L�^���폜 +if ($posted) { + PostDataStore::delete($post_backup_key); +} + +//============================================= +// �X�����Đ����Ȃ�Asubject����key���擾 +//============================================= +if (!empty($_POST['newthread']) && $posted) { + sleep(1); + $key = getKeyInSubject(); +} + +//============================================= +// key.idx �ۑ� +//============================================= +// <> ���O���B�B +$tag_rec['FROM'] = str_replace('<>', '', $FROM); +$tag_rec['mail'] = str_replace('<>', '', $mail); + +// ���O�ƃ��[���A�󔒎��� P2NULL ���L�^ +$tag_rec_n['FROM'] = ($tag_rec['FROM'] == '') ? 'P2NULL' : $tag_rec['FROM']; +$tag_rec_n['mail'] = ($tag_rec['mail'] == '') ? 'P2NULL' : $tag_rec['mail']; + +if ($host && $bbs && $key) { + $keyidx = P2Util::idxDirOfHostBbs($host, $bbs) . $key . '.idx'; + + // �ǂݍ��� + if ($keylines = FileCtl::file_read_lines($keyidx, FILE_IGNORE_NEW_LINES)) { + $akeyline = explode('<>', $keylines[0]); + } + $sar = array($akeyline[0], $akeyline[1], $akeyline[2], $akeyline[3], $akeyline[4], + $akeyline[5], $akeyline[6], $tag_rec_n['FROM'], $tag_rec_n['mail'], $akeyline[9], + $akeyline[10], $akeyline[11], $akeyline[12]); + P2Util::recKeyIdx($keyidx, $sar); // key.idx�ɋL�^ +} + +//============================================= +// �������ݗ��� +//============================================= +if (empty($posted)) { + exit; +} + +if ($host && $bbs && $key) { + + $lock = new P2Lock($_conf['res_hist_idx'], false); + + FileCtl::make_datafile($_conf['res_hist_idx']); // �Ȃ���ΐ��� + + $lines = FileCtl::file_read_lines($_conf['res_hist_idx'], FILE_IGNORE_NEW_LINES); + + $neolines = array(); + + // {{{ �ŏ��ɏd���v�f���폜���Ă��� + + if (is_array($lines)) { + foreach ($lines as $line) { + $lar = explode('<>', $line); + // �d�����, key�̂Ȃ����͕̂s���f�[�^ + if (!$lar[1] || $lar[1] == $key) { + continue; + } + $neolines[] = $line; + } + } + + // }}} + + // �V�K�f�[�^�lj� + $newdata = "{$ttitle}<>{$key}<><><><><><>{$tag_rec['FROM']}<>{$tag_rec['mail']}<><>{$host}<>{$bbs}"; + array_unshift($neolines, $newdata); + while (sizeof($neolines) > $_conf['res_hist_rec_num']) { + array_pop($neolines); + } + + // {{{ �������� + + if ($neolines) { + $cont = ''; + foreach ($neolines as $l) { + $cont .= $l . "\n"; + } + + if (FileCtl::file_write_contents($_conf['res_hist_idx'], $cont) === false) { + p2die('cannot write file.'); + } + } + + // }}} + + $lock->free(); +} + +//============================================= +// �������݃��O�L�^ +//============================================= +if ($_conf['res_write_rec']) { + + // �f�[�^PHP�`���ip2_res_hist.dat.php, �^�u��؂�j�̏������ݗ������Adat�`���ip2_res_hist.dat, <>��؂�j�ɕϊ����� + P2Util::transResHistLogPhpToDat(); + + $date_and_id = date('y/m/d H:i'); + $message = htmlspecialchars($MESSAGE, ENT_NOQUOTES, 'Shift_JIS'); + $message = preg_replace('/\\r\\n|\\r|\\n/', '
    ', $message); + + FileCtl::make_datafile($_conf['res_hist_dat']); // �Ȃ���ΐ��� + + $resnum = ''; + if (!empty($_POST['newthread'])) { + $resnum = 1; + } else { + if ($rescount) { + $resnum = $rescount + 1; + } + } + + // �V�K�f�[�^ + $newdata = "{$tag_rec['FROM']}<>{$tag_rec['mail']}<>{$date_and_id}<>{$message}<>{$ttitle}<>{$host}<>{$bbs}<>{$key}<>{$resnum}"; + + // �܂��^�u��S�ĊO���āi2ch�̏������݂ł̓^�u�͍폜����� 2004/12/13�j + $newdata = str_replace("\t", '', $newdata); + // <>���^�u�ɕϊ����� + //$newdata = str_replace('<>', "\t", $newdata); + + $cont = $newdata."\n"; + + // �������ݏ��� + if (FileCtl::file_write_contents($_conf['res_hist_dat'], $cont, FILE_APPEND) === false) { + trigger_error('rep2 error: �������݃��O�̕ۑ��Ɏ��s���܂���', E_USER_WARNING); + // ����͎��ۂ͕\������Ȃ�����ǂ� + //P2Util::pushInfoHtml('

    rep2 error: �������݃��O�̕ۑ��Ɏ��s���܂���

    '); + } +} + +//=========================================================== +// �֐� +//=========================================================== +// {{{ postIt() + +/** + * ���X���������� + * + * @return boolean �������ݐ����Ȃ� true�A���s�Ȃ� false + */ +function postIt($host, $bbs, $key, $post) +{ + global $_conf, $post_result, $post_error2ch, $p2cookies, $host, $bbs, $key, $popup, $rescount, $ttitle_en; + global $bbs_cgi; + + $method = 'POST'; + $bbs_cgi_url = 'http://' . $host . $bbs_cgi; + + $URL = parse_url($bbs_cgi_url); // URL���� + if (isset($URL['query'])) { // �N�G���[ + $URL['query'] = '?' . $URL['query']; + } else { + $URL['query'] = ''; + } + + // �v���L�V + if ($_conf['proxy_use']) { + $send_host = $_conf['proxy_host']; + $send_port = $_conf['proxy_port']; + $send_path = $bbs_cgi_url; + } else { + $send_host = $URL['host']; + $send_port = isset($URL['port']) ? $URL['port'] : 80; + $send_path = $URL['path'] . $URL['query']; + } + + if (!$send_port) { $send_port = 80; } // �f�t�H���g��80 + + $request = "{$method} {$send_path} HTTP/1.0\r\n"; + $request .= "Host: {$URL['host']}\r\n"; + $request .= "User-Agent: Monazilla/1.00 ({$_conf['p2ua']})\r\n"; + $request .= "Referer: http://{$URL['host']}/\r\n"; + + // �N�b�L�[ + $cookies_to_send = ''; + if ($p2cookies) { + foreach ($p2cookies as $cname => $cvalue) { + if ($cname != 'expires') { + $cookies_to_send .= " {$cname}={$cvalue};"; + } + } + } + + // be.2ch.net �F�؃N�b�L�[ + if (P2Util::isHostBe2chNet($host) || !empty($_REQUEST['beres'])) { + $cookies_to_send .= ' MDMD='.$_conf['be_2ch_code'].';'; // be.2ch.net�̔F�؃R�[�h(�p�X���[�h�ł͂Ȃ�) + $cookies_to_send .= ' DMDM='.$_conf['be_2ch_mail'].';'; // be.2ch.net�̓o�^���[���A�h���X + } + + if (!$cookies_to_send) { $cookies_to_send = ' ;'; } + $request .= 'Cookie:'.$cookies_to_send."\r\n"; + //$request .= 'Cookie: PON='.$SPID.'; NAME='.$FROM.'; MAIL='.$mail."\r\n"; + + $request .= "Connection: Close\r\n"; + + // {{{ POST�̎��̓w�b�_��lj����Ė�����URL�G���R�[�h�����f�[�^��Y�t + + if (strcasecmp($method, 'POST') == 0) { + $post_enc = array(); + while (list($name, $value) = each($post)) { + + // ������� or be.2ch.net�Ȃ�AEUC�ɕϊ� + if (P2Util::isHostJbbsShitaraba($host) || P2Util::isHostBe2chNet($host)) { + $value = mb_convert_encoding($value, 'CP51932', 'CP932'); + } + + $post_enc[] = $name . '=' . rawurlencode($value); + } + $postdata = implode("&", $post_enc); + $request .= "Content-Type: application/x-www-form-urlencoded\r\n"; + $request .= "Content-Length: ".strlen($postdata)."\r\n"; + $request .= "\r\n"; + $request .= $postdata; + + } else { + $request .= "\r\n"; + } + // }}} + + // WEB�T�[�o�֐ڑ� + $fp = fsockopen($send_host, $send_port, $errno, $errstr, $_conf['http_conn_timeout']); + if (!$fp) { + $errstr = p2h($errstr); + showPostMsg(false, "�T�[�o�ڑ��G���[: $errstr ($errno)
    p2 Error: �ƒT�[�o�ւ̐ڑ��Ɏ��s���܂���", false); + return false; + } + stream_set_timeout($fp, $_conf['http_read_timeout'], 0); + + //echo '

    $request

    ' . $request . "

    "; //for debug + fputs($fp, $request); + + $start_here = false; + $post_seikou = false; + + while (!p2_stream_eof($fp, $timed_out)) { + + if ($start_here) { + $wr = ''; + while (!p2_stream_eof($fp, $timed_out)) { + $wr .= fread($fp, 164000); + } + $response = $wr; + break; + + } else { + $l = fgets($fp, 164000); + //echo $l .'
    '; // for debug + // �N�b�L�[�L�^ + if (preg_match('/Set-Cookie: (.+?)\\r\\n/', $l, $matches)) { + //echo '

    ' . $matches[0] . '

    '; // + $cgroups = explode(';', $matches[1]); + if ($cgroups) { + foreach ($cgroups as $v) { + if (preg_match('/(.+)=(.*)/', $v, $m)) { + $k = ltrim($m[1]); + if ($k != 'path') { + if (!$p2cookies) { + $p2cookies = array(); + } + $p2cookies[$k] = $m[2]; + } + } + } + } + if ($p2cookies) { + $cookies_to_send = ''; + foreach ($p2cookies as $cname => $cvalue) { + if ($cname != 'expires') { + $cookies_to_send .= " {$cname}={$cvalue};"; + } + } + $newcookies = "Cookie:{$cookies_to_send}\r\n"; + + $request = preg_replace('/Cookie: .*?\\r\\n/', $newcookies, $request); + } + + // �]���͏������ݐ����Ɣ��f + } elseif (preg_match('/^Location: /', $l, $matches)) { + $post_seikou = true; + } + if ($l == "\r\n") { + $start_here = true; + } + } + + } + fclose($fp); + + // be.2ch.net or JBBS������� �����R�[�h�ϊ� EUC��SJIS + if (P2Util::isHostBe2chNet($host) || P2Util::isHostJbbsShitaraba($host)) { + $response = mb_convert_encoding($response, 'CP932', 'CP51932'); + + // + $response = preg_replace( + '{(.*?)(.*)}is', + '$1$2', + $response); + } + + $kakikonda_match = '{.*(?:�������݂܂���|�� �������݂܂��� ��|�������ݏI�� - SubAll BBS).*}is'; + $cookie_kakunin_match = '{|�� �������݊m�F ��|>�������݊m�F�B<}'; + + if (preg_match('/<.+>/s', $response, $matches)) { + $response = $matches[0]; + } + + // �J�L�R�~���� + if ($post_seikou || preg_match($kakikonda_match, $response)) { + $reload = empty($_POST['from_read_new']); + showPostMsg(true, '�������݂��I���܂����B', $reload); + + // +Wiki samba�^�C�}�[ + if ($_conf['wiki.samba_timer']) { + require_once P2_LIB_DIR . '/wiki/Samba.php'; + $samba = new Samba(); + $samba->setWriteTime($host, $bbs); + $samba->save(); + } + + return true; + //$response_ht = p2h($response); + //echo "
    {$response_ht}
    "; + + // cookie�m�F�ipost�ă`�������W�j + } elseif (preg_match($cookie_kakunin_match, $response)) { + showCookieConfirmation($host, $response); + return false; + + // ���̑��̓��X�|���X�����̂܂ܕ\�� + } else { + echo preg_replace('@������Ń����[�h���Ă��������B GO!
    @', '', $response); + return false; + } +} + +// }}} +// {{{ postIt2() + +/** + * ����p2�Ń��X���������� + * + * @return boolean �������ݐ����Ȃ� true�A���s�Ȃ� false + */ +function postIt2($host, $bbs, $key, $FROM, $mail, $MESSAGE) +{ + if (P2Util::isHostBe2chNet($host) || !empty($_REQUEST['beres'])) { + $beRes = true; + } else { + $beRes = false; + } + + try { + $posted = P2Util::getP2Client()->post($host, $bbs, $key, + $FROM, $mail, $MESSAGE, + $beRes, $response); + } catch (P2Exception $e) { + p2die('����p2�|�X�g���s', $e->getMessage()); + } + + if ($posted) { + $reload = empty($_POST['from_read_new']); + showPostMsg(true, '�������݂��I���܂����B', $reload); + } else { + $result_msg = '����p2�|�X�g���s

    ' + . '
    ' . p2h($response['body']) . '
    ' + . '

    -'; + showPostMsg(false, $result_msg, false); + } + + return $posted; +} + +// }}} +// {{{ showPostMsg() + +/** + * �������ݏ������ʕ\������ + * + * @return void + */ +function showPostMsg($isDone, $result_msg, $reload) +{ + global $_conf, $location_ht, $popup, $ttitle, $ptitle; + global $STYLE, $skin_en; + + // �v�����g�p�ϐ� =============== + if (!$_conf['ktai']) { + $class_ttitle = ' class="thre_title"'; + } else { + $class_ttitle = ''; + } + $ttitle_ht = "{$ttitle}"; + + $popup_ht = ''; + if ($isDone) { + // 2005/03/01 aki: jig�u���E�U�ɑΉ����邽�߁A& �ł͂Ȃ� & �� + // 2005/04/25 rsk: +EOJS; + } else { + $_conf['extra_headers_ht'] .= << +EOP; + } + } + + // �v�����g ============== + echo $_conf['doctype']; + echo << + + + + + + {$_conf['extra_headers_ht']} +EOHEADER; + + if ($isDone) { + echo " rep2 - �������݂܂����B"; + } else { + echo " {$ptitle}"; + } + + if (!$_conf['ktai']) { + echo << + + \n +EOP; + if ($popup) { + echo << + // + +EOSCRIPT; + } + if ($reload) { + echo $popup_ht; + } + $kakunin_ht = ''; + } else { + $kakunin_ht = <<�m�F

    +EOP; + } + + echo "\n"; + echo "\n"; + + P2Util::printInfoHtml(); + + echo <<{$ttitle_ht}

    +

    {$result_msg}

    +{$kakunin_ht} + + +EOP; +} + +// }}} +// {{{ showCookieConfirmation() + +/** + * Cookie�m�FHTML��\������ + * + * @param string $host �z�X�g�� + * @param string $response ���X�|���X�{�f�B + * @return void + */ +function showCookieConfirmation($host, $response) +{ + global $_conf, $post_param_keys, $post_send_keys, $post_optional_keys; + global $popup, $rescount, $ttitle_en; + global $STYLE, $skin_en; + + // HTML��DOM�ʼn�� + $doc = P2Util::getHtmlDom($response, 'Shift_JIS', false); + if (!$doc) { + showUnexpectedResponse($response, __LINE__); + return; + } + + $xpath = new DOMXPath($doc); + $heads = $doc->getElementsByTagName('head'); + $bodies = $doc->getElementsByTagName('body'); + if ($heads->length != 1 || $bodies->length != 1) { + showUnexpectedResponse($response, __LINE__); + return; + } + + $head = $heads->item(0); + $body = $bodies->item(0); + $xpath = new DOMXPath($doc); + + // �t�H�[����T�� + $forms = $xpath->query(".//form[(@method = 'POST' or @method = 'post') + and (starts-with(@action, '../test/bbs.cgi') or starts-with(@action, '../test/subbbs.cgi'))]", $body); + if ($forms->length != 1) { + showUnexpectedResponse($response, __LINE__); + return; + } + $form = $forms->item(0); + + if (!preg_match('{^\\.\\./test/(sub)?bbs\\.cgi(?:\\?guid=ON)?$}', $form->getAttribute('action'), $matches)) { + showUnexpectedResponse($response, __LINE__); + return; + } + + if (array_key_exists(1, $matches) && strlen($matches[1])) { + $subbbs = $matches[1]; + } else { + $subbbs = false; + } + + // form�v�f�̑����l������������ + // method������action�����ȊO�̑����͍폜���Aaccept-charset������lj����� + // DOMNamedNodeMap�̃C�e���[�V�����ƁA����Ɋ܂܂��m�[�h�̍폜�͕ʂɍs�� + $rmattrs = array(); + foreach ($form->attributes as $name => $node) { + switch ($name) { + case 'method': + //$node->value = 'POST'; + break; + case 'action': + $node->value = './live_post.php'; + break; + default: + $rmattrs[] = $name; + } + } + foreach ($rmattrs as $name) { + $form->removeAttribute($name); + } + $form->setAttribute('accept-charset', $_conf['accept_charset']); + + // POST����l���Đݒ� + foreach (array_combine($post_send_keys, $post_param_keys) as $key => $name) { + if (array_key_exists($name, $_POST)) { + $nodes = $xpath->query("./input[@type = 'hidden' and @name = '{$key}']"); + if ($nodes->length) { + $elem = $nodes->item(0); + if ($key != $name) { + $elem->setAttribute('name', $name); + } + $elem->setAttribute('value', mb_convert_encoding($_POST[$name], 'UTF-8', 'CP932')); + } + } + } + + // �e��B���p�����[�^��lj� + $hidden = $doc->createElement('input'); + $hidden->setAttribute('type', 'hidden'); + + // rep2���g�p����ϐ�����1 + foreach (array('host', 'popup', 'rescount', 'ttitle_en') as $name) { + $elem = $hidden->cloneNode(); + $elem->setAttribute('name', $name); + $elem->setAttribute('value', $$name); + $form->appendChild($elem); + } + + // rep2���g�p����ϐ�����2 + foreach ($post_optional_keys as $name) { + if (array_key_exists($name, $_POST)) { + $elem = $hidden->cloneNode(); + $elem->setAttribute('name', $name); + $elem->setAttribute('value', mb_convert_encoding($_POST[$name], 'UTF-8', 'CP932')); + $form->appendChild($elem); + } + } + + // POST�悪subbbs.cgi + if ($subbbs !== false) { + $elem = $hidden->cloneNode(); + $elem->setAttribute('name', 'sub'); + $elem->setAttribute('value', $subbbs); + $form->appendChild($elem); + } + + // �\�[�X�R�[�h�␳ + if (!empty($_POST['fix_source'])) { + $elem = $hidden->cloneNode(); + $elem->setAttribute('name', 'fix_source'); + $elem->setAttribute('value', '1'); + $form->appendChild($elem); + } + + // �����r���[�w�� + if ($_conf['b'] != $_conf['client_type']) { + $elem = $hidden->cloneNode(); + $elem->setAttribute('name', 'b'); + $elem->setAttribute('value', $_conf['b']); + $form->appendChild($elem); + } + + // Cookie�m�F�t���O + $elem = $hidden->cloneNode(); + $elem->setAttribute('name', 'p2_post_confirm_cookie'); + $elem->setAttribute('value', '1'); + $form->appendChild($elem); + + // �G���R�[�f�B���O����̃q���g + $hidden->setAttribute('name', '_hint'); + $hidden->setAttribute('value', mb_convert_encoding($_conf['detect_hint'], 'UTF-8', 'CP932')); + $form->insertBefore($hidden, $form->firstChild); + + // �w�b�_�ɗv�f��lj� + if (!$_conf['ktai']) { + $skin_q = str_replace('&', '&', $skin_en); + $link = $doc->createElement('link'); + $link->setAttribute('rel', 'stylesheet'); + $link->setAttribute('type', 'text/css'); + $link->setAttribute('href', "css.php?css=style&skin={$skin_q}"); + $link = $head->appendChild($link)->cloneNode(); + $link->setAttribute('href', "css.php?css=post&skin={$skin_q}"); + $head->appendChild($link); + + if ($popup) { + $mado_okisa = explode(',', $STYLE['post_pop_size']); + $script = $doc->createElement('script'); + $script->setAttribute('type', 'text/javascript'); + $head->appendChild($script)->appendChild($doc->createCDATASection( + sprintf('resizeTo(%d,%d);', $mado_okisa[0], $mado_okisa[1] + 200) + )); + } + } + + // �\���C�� + // li�v�f�𒼐ڂ̎q�v�f�Ƃ��Ċ܂܂Ȃ�ul�v�f��blockquote�v�f�Œu�� + // DOMNodeList�̃C�e���[�V�����ƁA����Ɋ܂܂��m�[�h�̍폜�͕ʂɍs�� + $nodes = array(); + foreach ($xpath->query('.//ul[count(./li)=0]', $body) as $node) { + $nodes[] = $node; + } + foreach ($nodes as $node) { + $children = array(); + foreach ($node->childNodes as $child) { + $children[] = $child; + } + $elem = $doc->createElement('blockquote'); + foreach ($children as $child) { + $elem->appendChild($node->removeChild($child)); + } + $node->parentNode->replaceChild($elem, $node); + } + + // libxml2�����̕�����G���R�[�f�B���O��UTF-8�ł��邪�AsaveHTML()���� + // ���\�b�h�ł͓ǂݍ��񂾕����̃G���R�[�f�B���O�ɍĕϊ����ďo�͂���� + // (DOMDocument��encoding�v���p�e�B��ύX���邱�Ƃŕς���) + echo $doc->saveHTML(); +} + +// }}} +// {{{ showUnexpectedResponse() + +/** + * �T�[�o����\�����Ȃ����X�|���X���Ԃ��Ă����|��\������ + * + * @param string $response ���X�|���X�{�f�B + * @param int $line �s�ԍ� + * @return void + */ +function showUnexpectedResponse($response, $line = null) +{ + echo 'p2 ERROR'; + echo '

    p2 ERROR

    �T�[�o����̃��X�|���X���ςł��B'; + if (is_numeric($line)) { + echo "({$line})"; + } + echo '

    ';
    +    echo p2h($response);
    +    echo '
    '; +} + +// }}} +// {{{ getKeyInSubject() + +/** + * subject����key���擾���� + * + * @return string|false + */ +function getKeyInSubject() +{ + global $host, $bbs, $ttitle; + + $aSubjectTxt = new SubjectTxt($host, $bbs); + + foreach ($aSubjectTxt->subject_lines as $l) { + if (strpos($l, $ttitle) !== false) { + if (preg_match("/^([0-9]+)\.(dat|cgi)(,|<>)(.+) ?(\(|�i)([0-9]+)(\)|�j)/", $l, $matches)) { + return $key = $matches[1]; + } + } + } + + return false; +} + +// }}} +// {{{ tab2space() + +/** + * ���`���ێ����Ȃ���A�^�u���X�y�[�X�ɒu�������� + * + * @param string $in_str �Ώە����� + * @param int $tabwidth �^�u�� + * @param string $linebreak ���s����(��) + * @return string + */ +function tab2space($in_str, $tabwidth = 4, $linebreak = "\n") +{ + $out_str = ''; + $lines = preg_split('/\\r\\n|\\r|\\n/', $in_str); + $ln = count($lines); + $i = 0; + + while ($i < $ln) { + $parts = explode("\t", rtrim($lines[$i])); + $pn = count($parts); + + for ($j = 0; $j < $pn; $j++) { + if ($j == 0) { + $l = $parts[$j]; + } else { + //$t = $tabwidth - (strlen($l) % $tabwidth); + $sn = $tabwidth - (mb_strwidth($l) % $tabwidth); // UTF-8�ł��S�p��������2�ƃJ�E���g���� + for ($k = 0; $k < $sn; $k++) { + $l .= ' '; + } + $l .= $parts[$j]; + } + } + + $out_str .= $l; + if (++$i < $ln) { + $out_str .= $linebreak; + } + } + + return $out_str; +} + +// }}} + +/* + * Local Variables: + * mode: php + * coding: cp932 + * tab-width: 4 + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ +// vim: set syn=php fenc=cp932 ai et ts=4 sw=4 sts=4 fdm=marker: diff --git a/rep2/live_post_form.php b/rep2/live_post_form.php new file mode 100755 index 000000000..d72292b01 --- /dev/null +++ b/rep2/live_post_form.php @@ -0,0 +1,212 @@ +authorize(); // ���[�U�F�� + +//================================================== +// �ϐ� +//================================================== +if (empty($_GET['host'])) { + // �����G���[ + p2die('host ���w�肳��Ă��܂���'); +} else { + $host = $_GET['host']; +} + +$bbs = isset($_GET['bbs']) ? $_GET['bbs'] : ''; +$key = isset($_GET['key']) ? $_GET['key'] : ''; + +$rescount = isset($_GET['rescount']) ? intval($_GET['rescount']) : 1; +$popup = isset($_GET['popup']) ? intval($_GET['popup']) : 0; + +$itaj = P2Util::getItaName($host, $bbs); +if (!$itaj) { + $itaj = $bbs; +} +$itaj_hd = p2h($itaj, false); + +$ttitle_en = isset($_GET['ttitle_en']) ? $_GET['ttitle_en'] : ''; +$ttitle = (strlen($ttitle_en) > 0) ? UrlSafeBase64::decode($ttitle_en) : ''; +$ttitle_hd = p2h($ttitle); +$ttitle_urlen = rawurlencode($ttitle_en); +$ttitle_en_q = "&ttitle_en=" . $ttitle_urlen; + +$key_idx = P2Util::idxDirOfHostBbs($host, $bbs) . $key . '.idx'; + +// �t�H�[���̃I�v�V�����ǂݍ��� +include P2_LIB_DIR . '/post_form_options.inc.php'; + +// �\���w�� +if (!$_conf['ktai']) { + $class_ttitle = ' class="thre_title"'; + $target_read = ' target="read"'; + $sub_size_at = ' size="40"'; +} else { + $class_ttitle = ''; + $target_read = ''; + $sub_size_at = ''; +} + +// {{{ �X�����ĂȂ� +if (!empty($_GET['newthread'])) { + $ptitle = "{$itaj_hd} - �V�K�X���b�h�쐬"; + + // machibbs�AJBBS@������� �Ȃ� + if (P2Util::isHostMachiBbs($host) or P2Util::isHostJbbsShitaraba($host)) { + $submit_value = '�V�K��������'; + // 2ch�Ȃ� + } else { + $submit_value = '�V�K�X���b�h�쐬'; + } + + $htm['subject'] = <<�^�C�g���F
    +EOP; + if ($_conf['ktai']) { + $htm['subject'] = "{$itaj_hd}
    ".$htm['subject']; + } + $newthread_hidden_ht = ''; +// }}} + +// {{{ �������݂Ȃ� +} else { + $ptitle = "{$itaj_hd} - ���X��������"; + + $submit_value = "��������"; + + $htm['resform_ttitle'] = <<{$ttitle_hd}

    +EOP; + $newthread_hidden_ht = ''; +} +// }}} + +$readnew_hidden_ht = !empty($_GET['from_read_new']) ? '' : ''; + + +//========================================================== +// HTML�v�����g +//========================================================== +echo $_conf['doctype']; +echo << + + + + + + {$_conf['extra_headers_ht']} + {$ptitle}\n +EOHEADER; + +if (!$_conf['ktai']) { + echo << + \n +EOP; + if ($_conf['expack.editor.dpreview']) { + echo "\n"; + } + echo << + + \n +EOP; +} +// �������ۑ�JS +if ((!$_conf['ktai'] && $_conf['expack.editor.savedraft']) || + ($_conf['iphone'] && $_conf['expack.editor.mobile.savedraft'])) { + echo << +EOP; + + // +live �����K���p�^�C�}�[ + if ($_GET['w_reg'] && $_conf['live.write_regulation']) { + $load_control = "cd_on()"; + if ($_conf['live.write_regulation'] == 3) { + $count_down_second = "31"; + } else if ($_conf['live.write_regulation'] == 2) { + $count_down_second = "21"; + } else if ($_conf['live.write_regulation'] == 1) { + $count_down_second = "11"; + } + } else { + $load_control = "cd_off()"; + $count_down_second = "0"; + } + + echo << + + +LIVE; +} + +$body_on_load = << +\n +EOP; + +P2Util::printInfoHtml(); + +// $htm['post_form'] ���擾 +require_once P2_LIB_DIR . '/live/live_post_form.inc.php'; + +echo $htm['orig_msg']; +echo $htm['dpreview']; +echo $htm['post_form']; +echo $htm['dpreview2']; + +echo ''; + +/* + * Local Variables: + * mode: php + * coding: cp932 + * tab-width: 4 + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ +// vim: set syn=php fenc=cp932 ai et ts=4 sw=4 sts=4 fdm=marker: diff --git a/rep2/live_read.php b/rep2/live_read.php new file mode 100755 index 000000000..ab27c4fd6 --- /dev/null +++ b/rep2/live_read.php @@ -0,0 +1,532 @@ +authorize(); // ���[�U�F�� + +// +Wiki +require_once P2_LIB_DIR . '/wiki/read.inc.php'; + +// iPhone +if ($_conf['iphone']) { + include P2_LIB_DIR . '/toolbar_i.inc.php'; + define('READ_HEADER_INC_PHP', P2_LIB_DIR . '/read_header_i.inc.php'); + define('READ_FOOTER_INC_PHP', P2_LIB_DIR . '/read_footer_i.inc.php'); +// �g�� +} elseif ($_conf['ktai']) { + define('READ_HEADER_INC_PHP', P2_LIB_DIR . '/read_header_k.inc.php'); + define('READ_FOOTER_INC_PHP', P2_LIB_DIR . '/read_footer_k.inc.php'); +// PC +} else { + define('READ_HEADER_INC_PHP', P2_LIB_DIR . '/read_header.inc.php'); + define('READ_FOOTER_INC_PHP', P2_LIB_DIR . '/read_footer.inc.php'); +} + +//================================================================ +// �ϐ� +//================================================================ +$newtime = date('gis'); // ���������N���N���b�N���Ă��ēǍ����Ȃ��d�l�ɑ΍R����_�~�[�N�G���[ +// $_today = date('y/m/d'); +$is_ajax = !empty($_GET['ajax']); + +//================================================= +// �X���̎w�� +//================================================= +detectThread(); // global $host, $bbs, $key, $ls + +//================================================= +// ���X�t�B���^ +//================================================= +$do_filtering = false; +if (array_key_exists('rf', $_REQUEST) && is_array($_REQUEST['rf'])) { + $resFilter = ResFilter::configure($_REQUEST['rf']); + if ($resFilter->hasWord()) { + $do_filtering = true; + if ($_conf['ktai']) { + $page = isset($_REQUEST['page']) ? $_REQUEST['page'] : 1; + $resFilter->setRange($_conf['mobile.rnum_range'], $page); + } + if (empty($popup_filter) && isset($_REQUEST['submit_filter'])) { + $resFilter->save(); + } + } +} else { + $resFilter = ResFilter::restore(); +} + +//================================================= +// ���ځ[��&NG���[�h�ݒ�ǂݍ��� +//================================================= +$GLOBALS['ngaborns'] = NgAbornCtl::loadNgAborns(); + +//================================================================== +// ���C�� +//================================================================== + +if (!isset($aThread)) { + $aThread = new ThreadRead(); +} + +// ls�̃Z�b�g +if (!empty($ls)) { + $aThread->ls = mb_convert_kana($ls, 'a'); +} + +//========================================================== +// idx�̓ǂݍ��� +//========================================================== + +// host�𕪉�����idx�t�@�C���̃p�X�����߂� +if (!isset($aThread->keyidx)) { + $aThread->setThreadPathInfo($host, $bbs, $key); +} + +// �ƒf�B���N�g����������΍�� +FileCtl::mkdirFor($aThread->keyidx); +FileCtl::mkdirFor($aThread->keydat); + +$aThread->itaj = P2Util::getItaName($host, $bbs); +if (!$aThread->itaj) { $aThread->itaj = $aThread->bbs; } + +// idx�t�@�C��������Γǂݍ��� +if ($lines = FileCtl::file_read_lines($aThread->keyidx, FILE_IGNORE_NEW_LINES)) { + $idx_data = explode('<>', $lines[0]); +} else { + $idx_data = array_fill(0, 12, ''); +} +$aThread->getThreadInfoFromIdx(); + +//========================================================== +// preview >>1 +//========================================================== + +//if (!empty($_GET['onlyone'])) { +if (!empty($_GET['one'])) { + $aThread->ls = '1'; + $aThread->resrange = array('start' => 1, 'to' => 1, 'nofirst' => false); + + // �K���������m�ł͂Ȃ����֋X�I�� + //if (!isset($aThread->rescount) && !empty($_GET['rc'])) { + if (!isset($aThread->rescount) && !empty($_GET['rescount'])) { + //$aThread->rescount = $_GET['rc']; + $aThread->rescount = (int)$_GET['rescount']; + } + + $preview = $aThread->previewOne(); + $ptitle_ht = p2h($aThread->itaj) . ' / ' . $aThread->ttitle_hd; + + include READ_HEADER_INC_PHP; + echo $preview; + include READ_FOOTER_INC_PHP; + + return; +} + +//=========================================================== +// DAT�̃_�E�����[�h +//=========================================================== +$offline = !empty($_GET['offline']); + +if (!$offline) { + $aThread->downloadDat(); +} + +// DAT��ǂݍ��� +$aThread->readDat(); + +// �I�t���C���w��ł����O���Ȃ���΁A���߂ċ����ǂݍ��� +if (empty($aThread->datlines) && $offline) { + $aThread->downloadDat(); + $aThread->readDat(); +} + +// �^�C�g�����擾���Đݒ� +$aThread->setTitleFromLocal(); + +//=========================================================== +// �\�����X�Ԃ͈̔͂�ݒ� +//=========================================================== +if ($_conf['ktai']) { + $before_respointer = $_conf['mobile.before_respointer']; +} else { + $before_respointer = $_conf['before_respointer']; +} + +// �擾�ς݂Ȃ� +if ($aThread->isKitoku()) { + + //�u�V�����X�̕\���v�̎��͓��ʂɂ�����ƑO�̃��X����\�� + if (!empty($_GET['nt'])) { + if (substr($aThread->ls, -1) == '-') { + $n = $aThread->ls - $before_respointer; + if ($n < 1) { $n = 1; } + $aThread->ls = $n . '-'; + } + + } elseif (!$aThread->ls) { + $from_num = $aThread->readnum +1 - $_conf['respointer'] - $before_respointer; + if ($from_num < 1) { + $from_num = 1; + } elseif ($from_num > $aThread->rescount) { + $from_num = $aThread->rescount - $_conf['respointer'] - $before_respointer; + } + $aThread->ls = $from_num . '-'; + } + + if ($_conf['ktai'] && strpos($aThread->ls, 'n') === false) { + $aThread->ls = $aThread->ls . 'n'; + } + +// ���擾�Ȃ� +} else { + if (!$aThread->ls) { + $aThread->ls = $_conf['get_new_res_l']; + } +} + +// �t�B���^�����O�̎��́Aall�Œ�Ƃ��� +if ($resFilter && $resFilter->hasWord()) { + $aThread->ls = 'all'; +} + +$aThread->lsToPoint(); + +//=============================================================== +// �v�����g +//=============================================================== +$ptitle_ht = p2h($aThread->itaj) . ' / ' . $aThread->ttitle_hd; + +if ($_conf['ktai']) { + + if ($resFilter && $resFilter->hasWord() && $aThread->rescount) { + $GLOBALS['filter_hits'] = 0; + } else { + $GLOBALS['filter_hits'] = null; + } + + $aShowThread = new ShowThreadK($aThread); + + if ($is_ajax) { + $response = trim(mb_convert_encoding($aShowThread->getDatToHtml(true), 'UTF-8', 'CP932')); + if (isset($_GET['respop_id'])) { + $response = preg_replace('/<[^<>]+? id="/u', sprintf('$0_respop%d_', $_GET['respop_id']), $response); + } + /*if ($_conf['iphone']) { + // HTML�̒f�Ђ�XML�Ƃ��ēn���Ă�DOM��id��class�����Ғʂ�ɔ��f����Ȃ� + header('Content-Type: application/xml; charset=UTF-8'); + //$responseId = 'ajaxResponse' . time(); + $doc = new DOMDocument(); + $err = error_reporting(E_ALL & ~E_WARNING); + $html = '' + . '' + . '' + . $response + . ''; + $doc->loadHTML($html); + error_reporting($err); + echo ''; + echo $doc->saveXML($doc->getElementsByTagName('div')->item(0)); + } else {*/ + // ����āAHTML�̒f�Ђ����̂܂ܕԂ���innterHTML�ɑ�����Ȃ��Ƃ����Ȃ��B + // (���{�I�Ƀ��X�|���X�̃t�H�[�}�b�g�ƃN���C�A���g���ł̏�����ς��Ȃ������) + header('Content-Type: text/html; charset=UTF-8'); + echo $response; + //} + } else { + if ($aThread->rescount) { + if ($_GET['showbl']) { + $content = $aShowThread->getDatToHtml_resFrom(); + } else { + $content = $aShowThread->getDatToHtml(); + } + } elseif ($aThread->diedat && count($aThread->datochi_residuums) > 0) { + $content = $aShowThread->getDatochiResiduums(); + } + + include READ_HEADER_INC_PHP; + + if ($_conf['iphone'] && $_conf['expack.spm.enabled']) { + echo $aShowThread->getSpmObjJs(); + } + + echo $content; + + include READ_FOOTER_INC_PHP; + } + +} else { + + // �w�b�_ �\�� + include READ_HEADER_INC_PHP; + flush(); + + //=========================================================== + // ���[�J��Dat��ϊ�����HTML�\�� + //=========================================================== + // ���X������A�����w�肪����� + if ($resFilter && $resFilter->hasWord() && $aThread->rescount) { + + $all = $aThread->rescount; + + $GLOBALS['filter_hits'] = 0; + + echo "

    {$all}���X�� n���X���q�b�g

    \n"; + } + if ($_GET['showbl']) { + echo '

    ' . p2h($aThread->resrange['start']) . '�ւ̃��X

    '; + } + + //$GLOBALS['debug'] && $GLOBALS['profiler']->enterSection("datToHtml"); + + if ($aThread->rescount) { + $mainhtml = ''; + require_once P2_LIB_DIR . '/live/live_ShowThreadPc.php'; + $aShowThread = new ShowThreadPc($aThread); + + if ($_conf['expack.spm.enabled']) { + echo $aShowThread->getSpmObjJs(); + } + + $res1 = $aShowThread->quoteOne(); // >>1�|�b�v�A�b�v�p + if ($_conf['coloredid.enable'] > 0 && $_conf['coloredid.click'] > 0 && + $_conf['coloredid.rate.type'] > 0) { + if ($_GET['showbl']) { + $mainhtml = $aShowThread->datToHtml_resFrom(true); + } else { + $mainhtml .= $aShowThread->datToHtml(true); + } + $mainhtml .= $res1['q']; + } else { + if ($_GET['showbl']) { + $aShowThread->datToHtml_resFrom(); + } else { + $aShowThread->datToHtml(); + } + echo $res1['q']; + } + + + // ���X�ǐՃJ���[ + if ($_conf['backlink_coloring_track']) { + echo $aShowThread->getResColorJs(); + } + + // ID�J���[�����O + if ($_conf['coloredid.enable'] > 0 && $_conf['coloredid.click'] > 0) { + echo $aShowThread->getIdColorJs(); + // �u���E�U���׌y���̂��߁ACSS���������X�N���v�g�̌�ŃR���e���c�� + // �����_�����O������ + echo $mainhtml; + } + + // �O���c�[�� + $pluswiki_js = ''; + + if ($_conf['wiki.idsearch.spm.mimizun.enabled']) { + if (!class_exists('Mimizun', false)) { + require P2_PLUGIN_DIR . '/mimizun/Mimizun.php'; + } + $mimizun = new Mimizun(); + $mimizun->host = $aThread->host; + $mimizun->bbs = $aThread->bbs; + if ($mimizun->isEnabled()) { + $pluswiki_js .= "WikiTools.addMimizun({$aShowThread->spmObjName});"; + } + } + + if ($_conf['wiki.idsearch.spm.hissi.enabled']) { + if (!class_exists('Hissi', false)) { + require P2_PLUGIN_DIR . '/hissi/Hissi.php'; + } + $hissi = new Hissi(); + $hissi->host = $aThread->host; + $hissi->bbs = $aThread->bbs; + if ($hissi->isEnabled()) { + $pluswiki_js .= "WikiTools.addHissi({$aShowThread->spmObjName});"; + } + } + + if ($_conf['wiki.idsearch.spm.stalker.enabled']) { + if (!class_exists('Stalker', false)) { + require P2_PLUGIN_DIR . '/stalker/Stalker.php'; + } + $stalker = new Stalker(); + $stalker->host = $aThread->host; + $stalker->bbs = $aThread->bbs; + if ($stalker->isEnabled()) { + $pluswiki_js .= "WikiTools.addStalker({$aShowThread->spmObjName});"; + } + } + + if ($pluswiki_js !== '') { + echo << +// + +EOP; + } + + } elseif ($aThread->diedat && count($aThread->datochi_residuums) > 0) { + require_once P2_LIB_DIR . '/ShowThreadPc.php'; + $aShowThread = new ShowThreadPc($aThread); + echo $aShowThread->getDatochiResiduums(); + } + + //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection("datToHtml"); + + // �t�B���^���ʂ�\�� + if ($resFilter && $resFilter->hasWord() && $aThread->rescount) { + echo << +// +\n +EOP; + if ($GLOBALS['filter_hits'] > 5) { + echo "

    {$all}���X�� {$GLOBALS['filter_hits']}���X���q�b�g

    \n"; + } + } + + // �t�b�^ �\�� + include READ_FOOTER_INC_PHP; +} +flush(); + +//=========================================================== +// idx�̒l��ݒ�A�L�^ +//=========================================================== +if ($aThread->rescount) { + + // �����̎��́A���ǐ����X�V���Ȃ� + if ((isset($GLOBALS['word']) && strlen($GLOBALS['word']) > 0) || $is_ajax) { + $aThread->readnum = $idx_data[5]; + } else { + $aThread->readnum = min($aThread->rescount, max(0, $idx_data[5], $aThread->resrange['to'])); + } + $newline = $aThread->readnum + 1; // $newline�͔p�~�\�肾���A���݊��p�ɔO�̂��� + + $sar = array($aThread->ttitle, $aThread->key, $idx_data[2], $aThread->rescount, '', + $aThread->readnum, $idx_data[6], $idx_data[7], $idx_data[8], $newline, + $idx_data[10], $idx_data[11], $aThread->datochiok); + P2Util::recKeyIdx($aThread->keyidx, $sar); // key.idx�ɋL�^ +} + +//=========================================================== +// �������L�^ +//=========================================================== +if ($aThread->rescount && !$is_ajax) { + recRecent(implode('<>', array($aThread->ttitle, $aThread->key, $idx_data[2], '', '', + $aThread->readnum, $idx_data[6], $idx_data[7], $idx_data[8], $newline, + $aThread->host, $aThread->bbs))); +} + +// NG���ځ[����L�^ +NgAbornCtl::saveNgAborns(); + +// �ȏ� --------------------------------------------------------------- +exit; + +//=============================================================================== +// �֐� +//=============================================================================== +// {{{ detectThread() + +/** + * �X���b�h���w�肷�� + */ +function detectThread() +{ + global $_conf, $host, $bbs, $key, $ls; + + list($nama_url, $host, $bbs, $key, $ls) = P2Util::detectThread(); + + if (!($host && $bbs && $key)) { + if ($nama_url) { + $nama_url = p2h($nama_url); + p2die('�X���b�h�̎w�肪�ςł��B', "{$nama_url}", true); + } else { + p2die('�X���b�h�̎w�肪�ςł��B'); + } + } +} + +// }}} +// {{{ recRecent() + +/** + * �������L�^���� + */ +function recRecent($data) +{ + global $_conf; + + $lock = new P2Lock($_conf['recent_idx'], false); + + // $_conf['recent_idx'] �t�@�C�����Ȃ���ΐ��� + FileCtl::make_datafile($_conf['recent_idx']); + + $lines = FileCtl::file_read_lines($_conf['recent_idx'], FILE_IGNORE_NEW_LINES); + $neolines = array(); + + // {{{ �ŏ��ɏd���v�f���폜���Ă��� + + if (is_array($lines)) { + foreach ($lines as $l) { + $lar = explode('<>', $l); + $data_ar = explode('<>', $data); + if ($lar[1] == $data_ar[1]) { continue; } // key�ŏd����� + if (!$lar[1]) { continue; } // key�̂Ȃ����͕̂s���f�[�^ + $neolines[] = $l; + } + } + + // }}} + + // �V�K�f�[�^�lj� + array_unshift($neolines, $data); + + while (sizeof($neolines) > $_conf['rct_rec_num']) { + array_pop($neolines); + } + + // {{{ �������� + + if ($neolines) { + $cont = ''; + foreach ($neolines as $l) { + $cont .= $l . "\n"; + } + + if (FileCtl::file_write_contents($_conf['recent_idx'], $cont) === false) { + p2die('cannot write file.'); + } + } + + // }}} + + return true; +} + +// }}} + +/* + * Local Variables: + * mode: php + * coding: cp932 + * tab-width: 4 + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ +// vim: set syn=php fenc=cp932 ai et ts=4 sw=4 sts=4 fdm=marker: diff --git a/rep2/read.php b/rep2/read.php index 4062bfa06..ebf005656 100644 --- a/rep2/read.php +++ b/rep2/read.php @@ -153,7 +153,12 @@ if ($_conf['ktai']) { $before_respointer = $_conf['mobile.before_respointer']; } else { + // +live ���X�\�����ؑ� + if ($_GET['live']) { + $before_respointer = $_conf['live.before_respointer']; + } else { $before_respointer = $_conf['before_respointer']; + } } // �擾�ς݂Ȃ� @@ -184,7 +189,12 @@ // ���擾�Ȃ� } else { if (!$aThread->ls) { + // +live ���X�\�����ؑ� + if ($_GET['live']) { + $aThread->ls = l .$_conf['live.before_respointer']; + } else { $aThread->ls = $_conf['get_new_res_l']; + } } } @@ -260,8 +270,13 @@ } else { + // +live �w�b�_�ؑ� + if ($_GET['live']) { + P2Util::header_content_type(); + } else { // �w�b�_ �\�� include READ_HEADER_INC_PHP; + } flush(); //=========================================================== @@ -397,8 +412,17 @@ } } + // +live �t�b�^�ؑ� + if ($_GET['live']) { + echo << + + +LIVE; + } else { // �t�b�^ �\�� include READ_FOOTER_INC_PHP; + } } flush(); diff --git a/rep2/read_new.php b/rep2/read_new.php old mode 100644 new mode 100755 index 0f95b24d0..6749f9e8e --- a/rep2/read_new.php +++ b/rep2/read_new.php @@ -127,23 +127,33 @@ \n EOHEADER; +// +live �����\�� html popup �؊� +if ($_conf['live.view_type'] > 1 ) { + $live_view_popup = live_; +} + if ($_conf['iframe_popup_type'] == 1) { echo << - + EOP; } else { echo << + EOP; } if ($_conf['link_youtube'] == 2 || $_conf['link_niconico'] == 2) { + // +live YouTube�v���r���[�\���̃T�C�Y�w�� + if ($_conf['live.youtube_winsize'] == 1) { + echo "\t\n"; + } else { echo <<\n EOP; + } } if ($_conf['expack.am.enabled']) { echo << \ No newline at end of file diff --git a/rep2/skin/live/bg.gif b/rep2/skin/live/bg.gif new file mode 100755 index 0000000000000000000000000000000000000000..8ecf7af7d8a873bda2dbc3162b88a740e80d4488 GIT binary patch literal 43 vcmZ?wbhEHbWMW`qXkcVGbLPzd|Nj+#vM@3*Ff!;c00Bsbfr-f_j=>rL2D=Hs literal 0 HcmV?d00001 diff --git a/rep2/skin/live2.php b/rep2/skin/live2.php new file mode 100755 index 000000000..658852d90 --- /dev/null +++ b/rep2/skin/live2.php @@ -0,0 +1,257 @@ + \ No newline at end of file diff --git a/rep2/skin/live_box.php b/rep2/skin/live_box.php new file mode 100755 index 000000000..449dc8e18 --- /dev/null +++ b/rep2/skin/live_box.php @@ -0,0 +1,413 @@ + "6px", // ("") �p�ۃ{�b�N�X + '-webkit-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-moz-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-opera-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + 'background-color' => "#fff", // ("") �p�ۃ{�b�N�X�̔w�i�F + 'border' => "1px solid #999", // ("") �p�ۃ{�b�N�X�̃{�[�_�[ +// 'margin' => "6px 0px", // ("") �p�ۃ{�b�N�X�O�̗]�� +// 'padding' => "6px", // ("") �p�ۃ{�b�N�X���̗]�� +// 'box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +// '-webkit-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +// '-moz-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +// '-opera-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +); + +// ���j���[ +$MYSTYLE['menu']['div.menu_cate'] = array( + 'border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-webkit-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-moz-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-opera-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + 'background-color' => "#fff", // ("") �p�ۃ{�b�N�X�̔w�i�F + 'border' => "1px solid #999", // ("") �p�ۃ{�b�N�X�̃{�[�_�[ +// 'margin' => "6px 0px", // ("") �p�ۃ{�b�N�X�O�̗]�� + 'padding' => "6px", // ("") �p�ۃ{�b�N�X���̗]�� +// 'box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +// '-webkit-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +// '-moz-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +// '-opera-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +); + +$MYSTYLE['menu']['div#c_online_boards div.menu_cate'] = array( + 'border' => "0px", // ("") �p�ۃ{�b�N�X�̃{�[�_�[ + 'padding' => "0px", // ("") �p�ۃ{�b�N�X���̗]�� +// 'box-shadow' => "0px 0px 0px #fff", // ("") �p�ۃ{�b�N�X�̉e +// '-webkit-box-shadow' => "0px 0px 0px #fff", // ("") �p�ۃ{�b�N�X�̉e +// '-moz-box-shadow' => "0px 0px 0px #fff", // ("") �p�ۃ{�b�N�X�̉e +// '-opera-box-shadow' => "0px 0px 0px #fff", // ("") �p�ۃ{�b�N�X�̉e +); + +// �X���^�C +$MYSTYLE['read']['h3.thread_title'] = array( + 'border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-webkit-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-moz-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-opera-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + 'background-color' => "#fff", // ("") �p�ۃ{�b�N�X�̔w�i�F + 'border' => "1px solid #999", // ("") �p�ۃ{�b�N�X�̃{�[�_�[ +// 'margin' => "6px 0px", // ("") �p�ۃ{�b�N�X�O�̗]�� + 'padding' => "6px", // ("") �p�ۃ{�b�N�X���̗]�� +// 'box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +// '-webkit-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +// '-moz-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +// '-opera-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +); + +// ���X �f�t�H���g�\�� +$MYSTYLE['read']['div.res'] = array( + 'border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-webkit-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-moz-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-opera-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + 'background-color' => "#fff", // ("") �p�ۃ{�b�N�X�̔w�i�F + 'border' => "1px solid #999", // ("") �p�ۃ{�b�N�X�̃{�[�_�[ + 'margin' => "6px 0px", // ("") �p�ۃ{�b�N�X�O�̗]�� + 'padding' => "6px", // ("") �p�ۃ{�b�N�X���̗]�� +// 'box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +// '-webkit-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +// '-moz-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +// '-opera-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +); + +// ���X �����\�� +$MYSTYLE['read']['td.live_res'] = array( + 'border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-webkit-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-moz-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-opera-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + 'background-color' => "#fff", // ("") �p�ۃ{�b�N�X�̔w�i�F + 'border' => "1px solid #999", // ("") �p�ۃ{�b�N�X�̃{�[�_�[ + 'margin' => "6px 0px", // ("") �p�ۃ{�b�N�X�O�̗]�� + 'padding' => "6px", // ("") �p�ۃ{�b�N�X���̗]�� +// 'box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +// '-webkit-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +// '-moz-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +// '-opera-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +); + +// ���X ���� +$MYSTYLE['read']['div.aborned'] = array( + 'border' => "0px solid #ccc", // ("") �p�ۃ{�b�N�X�̃{�[�_�[ +); + +$MYSTYLE['read']['div.res-header'] = array( + 'border-bottom' => "1px solid #999", // ("") �p�ۃ{�b�N�X���̎d�ؐ� + 'margin-bottom' => "6px", // ("") �d�ؐ��O�̗]�� + 'padding-bottom' => "6px", // ("") �d�ؐ����̗]�� +); + +// ���X�|�b�v�A�b�v +$MYSTYLE['read']['div.respopup'] = array( + 'border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-webkit-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-moz-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-opera-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + 'background-color' => "#fff", // ("") �p�ۃ{�b�N�X�̔w�i�F + 'border' => "1px solid #999", // ("") �p�ۃ{�b�N�X�̃{�[�_�[ +// 'margin' => "6px 0px", // ("") �p�ۃ{�b�N�X�O�̗]�� + 'padding' => "6px", // ("") �p�ۃ{�b�N�X���̗]�� +// 'box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +// '-webkit-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +// '-moz-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +// '-opera-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +); + +// �X�}�[�g�|�b�v�A�b�v +$MYSTYLE['read']['.spm'] = array( + 'border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-webkit-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-moz-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-opera-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + 'background-color' => "#fff", // ("") �p�ۃ{�b�N�X�̔w�i�F + 'border' => "1px solid #999", // ("") �p�ۃ{�b�N�X�̃{�[�_�[ +// 'margin' => "6px 0px", // ("") �p�ۃ{�b�N�X�O�̗]�� + 'padding' => "6px", // ("") �p�ۃ{�b�N�X���̗]�� +// 'box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +// '-webkit-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +// '-moz-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +// '-opera-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +); + +// �Q�ƃ��X�u���b�N +$MYSTYLE['read']['div.resblock div.resblock_inner'] = array( + 'border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-webkit-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-moz-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-opera-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + 'background-color' => "#fff", // ("") �p�ۃ{�b�N�X�̔w�i�F + 'border' => "1px solid #999", // ("") �p�ۃ{�b�N�X�̃{�[�_�[ +// 'margin' => "6px 0px", // ("") �p�ۃ{�b�N�X�O�̗]�� + 'padding' => "0px", // ("") �p�ۃ{�b�N�X���̗]�� +// 'box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +// '-webkit-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +// '-moz-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +// '-opera-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +); + +// �Q�ƃ��X�u���b�N +$MYSTYLE['read']['blockquote.folding_container'] = array( + 'padding' => "6px", +); + +// }}} + +?> \ No newline at end of file diff --git a/rep2/skin/live_box2.php b/rep2/skin/live_box2.php new file mode 100755 index 000000000..dcaa39d9e --- /dev/null +++ b/rep2/skin/live_box2.php @@ -0,0 +1,413 @@ + "6px", // ("") �p�ۃ{�b�N�X + '-webkit-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-moz-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-opera-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + 'background-color' => "#fff", // ("") �p�ۃ{�b�N�X�̔w�i�F + 'border' => "1px solid #ccc", // ("") �p�ۃ{�b�N�X�̃{�[�_�[ +// 'margin' => "6px 0px", // ("") �p�ۃ{�b�N�X�O�̗]�� +// 'padding' => "6px", // ("") �p�ۃ{�b�N�X���̗]�� + 'box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e + '-webkit-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e + '-moz-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e + '-opera-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +); + +// ���j���[ +$MYSTYLE['menu']['div.menu_cate'] = array( + 'border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-webkit-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-moz-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-opera-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + 'background-color' => "#fff", // ("") �p�ۃ{�b�N�X�̔w�i�F + 'border' => "1px solid #ccc", // ("") �p�ۃ{�b�N�X�̃{�[�_�[ +// 'margin' => "6px 0px", // ("") �p�ۃ{�b�N�X�O�̗]�� + 'padding' => "6px", // ("") �p�ۃ{�b�N�X���̗]�� + 'box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e + '-webkit-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e + '-moz-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e + '-opera-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +); + +$MYSTYLE['menu']['div#c_online_boards div.menu_cate'] = array( + 'border' => "0px", // ("") �p�ۃ{�b�N�X�̃{�[�_�[ + 'padding' => "0px", // ("") �p�ۃ{�b�N�X���̗]�� + 'box-shadow' => "0px 0px 0px #fff", // ("") �p�ۃ{�b�N�X�̉e + '-webkit-box-shadow' => "0px 0px 0px #fff", // ("") �p�ۃ{�b�N�X�̉e + '-moz-box-shadow' => "0px 0px 0px #fff", // ("") �p�ۃ{�b�N�X�̉e + '-opera-box-shadow' => "0px 0px 0px #fff", // ("") �p�ۃ{�b�N�X�̉e +); + +// �X���^�C +$MYSTYLE['read']['h3.thread_title'] = array( + 'border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-webkit-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-moz-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-opera-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + 'background-color' => "#fff", // ("") �p�ۃ{�b�N�X�̔w�i�F + 'border' => "1px solid #ccc", // ("") �p�ۃ{�b�N�X�̃{�[�_�[ +// 'margin' => "6px 0px", // ("") �p�ۃ{�b�N�X�O�̗]�� + 'padding' => "6px", // ("") �p�ۃ{�b�N�X���̗]�� + 'box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e + '-webkit-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e + '-moz-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e + '-opera-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +); + +// ���X �f�t�H���g�\�� +$MYSTYLE['read']['div.res'] = array( + 'border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-webkit-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-moz-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-opera-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + 'background-color' => "#fff", // ("") �p�ۃ{�b�N�X�̔w�i�F + 'border' => "1px solid #ccc", // ("") �p�ۃ{�b�N�X�̃{�[�_�[ + 'margin' => "6px 0px", // ("") �p�ۃ{�b�N�X�O�̗]�� + 'padding' => "6px", // ("") �p�ۃ{�b�N�X���̗]�� + 'box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e + '-webkit-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e + '-moz-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e + '-opera-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +); + +// ���X �����\�� +$MYSTYLE['read']['td.live_res'] = array( + 'border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-webkit-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-moz-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-opera-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + 'background-color' => "#fff", // ("") �p�ۃ{�b�N�X�̔w�i�F + 'border' => "1px solid #ccc", // ("") �p�ۃ{�b�N�X�̃{�[�_�[ + 'margin' => "6px 0px", // ("") �p�ۃ{�b�N�X�O�̗]�� + 'padding' => "6px", // ("") �p�ۃ{�b�N�X���̗]�� + 'box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e + '-webkit-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e + '-moz-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e + '-opera-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +); + +// ���X ���� +$MYSTYLE['read']['div.aborned'] = array( + 'border' => "0px solid #ccc", // ("") �p�ۃ{�b�N�X�̃{�[�_�[ +); + +$MYSTYLE['read']['div.res-header'] = array( + 'border-bottom' => "1px solid #ccc", // ("") �p�ۃ{�b�N�X���̎d�ؐ� + 'margin-bottom' => "6px", // ("") �d�ؐ��O�̗]�� + 'padding-bottom' => "6px", // ("") �d�ؐ����̗]�� +); + +// ���X�|�b�v�A�b�v +$MYSTYLE['read']['div.respopup'] = array( + 'border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-webkit-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-moz-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-opera-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + 'background-color' => "#fff", // ("") �p�ۃ{�b�N�X�̔w�i�F + 'border' => "1px solid #ccc", // ("") �p�ۃ{�b�N�X�̃{�[�_�[ +// 'margin' => "6px 0px", // ("") �p�ۃ{�b�N�X�O�̗]�� + 'padding' => "6px", // ("") �p�ۃ{�b�N�X���̗]�� + 'box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e + '-webkit-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e + '-moz-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e + '-opera-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +); + +// �X�}�[�g�|�b�v�A�b�v +$MYSTYLE['read']['.spm'] = array( + 'border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-webkit-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-moz-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-opera-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + 'background-color' => "#fff", // ("") �p�ۃ{�b�N�X�̔w�i�F + 'border' => "1px solid #ccc", // ("") �p�ۃ{�b�N�X�̃{�[�_�[ +// 'margin' => "6px 0px", // ("") �p�ۃ{�b�N�X�O�̗]�� + 'padding' => "6px", // ("") �p�ۃ{�b�N�X���̗]�� + 'box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e + '-webkit-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e + '-moz-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e + '-opera-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +); + +// �Q�ƃ��X�u���b�N +$MYSTYLE['read']['div.resblock div.resblock_inner'] = array( + 'border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-webkit-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-moz-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + '-opera-border-radius' => "6px", // ("") �p�ۃ{�b�N�X + 'background-color' => "#fff", // ("") �p�ۃ{�b�N�X�̔w�i�F + 'border' => "1px solid #ccc", // ("") �p�ۃ{�b�N�X�̃{�[�_�[ +// 'margin' => "6px 0px", // ("") �p�ۃ{�b�N�X�O�̗]�� + 'padding' => "0px", // ("") �p�ۃ{�b�N�X���̗]�� + 'box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e + '-webkit-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e + '-moz-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e + '-opera-box-shadow' => "0px 0px 6px #ccc", // ("") �p�ۃ{�b�N�X�̉e +); + +// �Q�ƃ��X�u���b�N +$MYSTYLE['read']['blockquote.folding_container'] = array( + 'padding' => "6px", +); + +// }}} + +?> \ No newline at end of file diff --git a/rep2/skin/metal.php b/rep2/skin/metal.php index 00fd26ccb..d87eb9923 100644 --- a/rep2/skin/metal.php +++ b/rep2/skin/metal.php @@ -171,6 +171,19 @@ $MYSTYLE['read']['.thread_title']['text-shadow'] = "3px 3px 2px #000"; +// }}} +// {{{ +live �������[�h + +$STYLE['live_b_l'] = "1px #999 dotted"; // ("1px #999 dotted") +live ���X�Ԃ̎d�ؐ� +$STYLE['live_b_s'] = "1px #999 dotted"; // ("1px #999 dotted") +live �ԍ� �ڗ� ���O ���t ID �\�����ƃ��X�\�����̎d�ؐ� +$STYLE['live_b_n'] = "2px #f30 dotted"; // ("2px #f30 dotted") +live �����\��&�I�[�g�����[�h���̊��ǁ`�V���̎d�ؐ� +$STYLE['live_highlight'] = "#cff"; // ("#cff") +live �n�C���C�g���[�h�\�����̔w�i�F +$STYLE['live_highlight_chain'] = "#ffc"; // ("#ffc") +live �A���n�C���C�g�\�����̔w�i�F +$STYLE['live_highlight_word_weight'] = "bold"; // ("bold") +live �A���n�C���C�g�\�����̃t�H���g�̑��� +$STYLE['live_highlight_word_border'] = "3px #f30 double"; // ("3px #f30 double") +live �A���n�C���C�g�\�����̃A���_�[���C�� +$STYLE['live_font-size'] = "10px"; // ("10px") +live �ԍ� �ڗ� ���O ���t ID ���̃t�H���g�T�C�Y +$STYLE['live2_color'] = "#cfcfcf"; // ("#cfcfcf") +live Type-B�� �ԍ� �ڗ� ���O ���t ID �\�����̔w�i�F + // }}} /* diff --git a/rep2/skin/tangerine.php b/rep2/skin/tangerine.php index 9fea9baa6..34ed154da 100644 --- a/rep2/skin/tangerine.php +++ b/rep2/skin/tangerine.php @@ -166,6 +166,19 @@ $STYLE['info_pop_size'] = "600,380"; // ("600,380") ���|�b�v�A�b�v�E�B���h�E�̑傫���i��,�c�j +// }}} +// {{{ +live �������[�h + +$STYLE['live_b_l'] = "1px #999 dotted"; // ("1px #999 dotted") +live ���X�Ԃ̎d�ؐ� +$STYLE['live_b_s'] = "1px #999 dotted"; // ("1px #999 dotted") +live �ԍ� �ڗ� ���O ���t ID �\�����ƃ��X�\�����̎d�ؐ� +$STYLE['live_b_n'] = "2px ForestGreen dotted"; // ("2px ForestGreen dotted") +live �����\��&�I�[�g�����[�h���̊��ǁ`�V���̎d�ؐ� +$STYLE['live_highlight'] = "#cff"; // ("#cff") +live �n�C���C�g���[�h�\�����̔w�i�F +$STYLE['live_highlight_chain'] = "#ffc"; // ("#ffc") +live �A���n�C���C�g�\�����̔w�i�F +$STYLE['live_highlight_word_weight'] = "bold"; // ("bold") +live �A���n�C���C�g�\�����̃t�H���g�̑��� +$STYLE['live_highlight_word_border'] = "3px ForestGreen double"; // ("3px ForestGreen double") +live �A���n�C���C�g�\�����̃A���_�[���C�� +$STYLE['live_font-size'] = "10px"; // ("10px") +live �ԍ� �ڗ� ���O ���t ID ���̃t�H���g�T�C�Y +$STYLE['live2_color'] = "#fff3c2"; // ("#fff3c2") +live Type-B�� �ԍ� �ڗ� ���O ���t ID �\�����̔w�i�F + // }}} /* diff --git a/rep2/title.php b/rep2/title.php index 711d44b51..438f4b51a 100644 --- a/rep2/title.php +++ b/rep2/title.php @@ -54,9 +54,9 @@ //========================================================= // �ŐV�Ń`�F�b�N $newversion_found = ''; -if (!empty($_conf['updatan_haahaa'])) { +/*if (!empty($_conf['updatan_haahaa'])) { $newversion_found = checkUpdatan(); -} +}*/ // ���O�C�����[�U��� $htm['auth_user'] = "

    ���O�C�����[�U: {$_login->user_u} - " . date("Y/m/d (D) G:i") . "

    \n"; @@ -168,7 +168,8 @@
    {$newversion_found} -

    rep2-expack rev.{$_conf['p2expack']}; extends rep2-{$_conf['p2version']}
    +

    +live {$_conf['p2live']}
    + rep2-expack rev.{$_conf['p2expack']}; extends rep2-{$_conf['p2version']}
    {$_conf['expack.web_url']}
    {$_conf['p2web_url']}

      diff --git a/style/read_css.inc b/style/read_css.inc index 02b8ecbb9..e29f3f1c8 100644 --- a/style/read_css.inc +++ b/style/read_css.inc @@ -86,7 +86,7 @@ div.thread { div.res { margin: 0 0 2.0em 0; padding: 0; - width: 100%; + width: 99%; /*\*//*/ overflow: hidden; /**/ @@ -333,6 +333,16 @@ div.res div.v_reslist ul { div.res div.v_reslist ul li:first-letter { color: #777; } +/* +live �����\���p */ +table.res div.v_reslist ul { + list-style-type: none; + line-height: 0.75; + margin: 0; + padding: 0; +} +table.res div.v_reslist ul li:first-letter { + color: #777; +} /* �t�Q�ƃ��X�g �c�z�u (���p���X�|�b�v�A�b�v) */ div.respopup div.v_reslist { From f6df2b0b43ffd6d1ddc93a283e99208878b89d52 Mon Sep 17 00:00:00 2001 From: pluslive Date: Fri, 7 Sep 2012 15:49:35 +0900 Subject: [PATCH 002/339] =?UTF-8?q?=E5=AE=9F=E6=B3=81=E8=A1=A8=E7=A4=BA?= =?UTF-8?q?=E6=99=82=E3=81=AEHTML=E3=83=9D=E3=83=83=E3=83=97=E3=82=A2?= =?UTF-8?q?=E3=83=83=E3=83=97=E4=BD=8D=E7=BD=AE=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/js/live_htmlpopup.js | 7 ++++++- rep2/js/live_htmlpopup_resizable.js | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/rep2/js/live_htmlpopup.js b/rep2/js/live_htmlpopup.js index 93df16767..fa568ef85 100755 --- a/rep2/js/live_htmlpopup.js +++ b/rep2/js/live_htmlpopup.js @@ -71,7 +71,12 @@ function showHtmlPopUpDo(marker) hideHtmlPopUp(); gUrl = tUrl; - var x_adjust = 300; // x���ʒu���� + // �摜�݈̂ʒu���� + if (gUrl.match(/\.(jpe?g|gif|png)/)) { + var x_adjust = 300; + } else { + var x_adjust = 7; // x���ʒu���� + } var y_adjust = -46; // y���ʒu���� var closebox_width = 18; diff --git a/rep2/js/live_htmlpopup_resizable.js b/rep2/js/live_htmlpopup_resizable.js index 5e8f1042e..7c0cb9e2f 100755 --- a/rep2/js/live_htmlpopup_resizable.js +++ b/rep2/js/live_htmlpopup_resizable.js @@ -78,7 +78,12 @@ function showHtmlPopUpDo(marker) hideHtmlPopUp(null, true); gUrl = tUrl; - var popup_x_adjust = 300; // popup(iframe)��x���ʒu���� + // �摜�݈̂ʒu���� + if (gUrl.match(/\.(jpe?g|gif|png)/)) { + var popup_x_adjust = 300; + } else { + var popup_x_adjust = 7; // popup(iframe)��x���ʒu���� + } var closebox_width = 18; // �~�̉��� var adjust_for_scrollbar = 22; // 22 �X�N���[���o�[���l�����ď��������ڂɔ����� From 45979a05ac4c4492b2fb1f086be8c4f85565f96c Mon Sep 17 00:00:00 2001 From: pluslive Date: Thu, 13 Sep 2012 12:04:43 +0900 Subject: [PATCH 003/339] =?UTF-8?q?+live=E3=81=AE=E3=83=90=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E3=83=A7=E3=83=B3=E8=A1=A8=E7=A4=BA=E3=82=92=E5=89=8A?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 -- rep2/title.php | 3 +-- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 7a1dc7159..f43cb5cde 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -8,8 +8,6 @@ $_conf = array( 'p2name' => 'rep2-expack', // rep2�̖��O 'p2version' => '120912.2345', // rep2�̃o�[�W���� - - 'p2live' => '120824.0000', // +live�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/rep2/title.php b/rep2/title.php index 44144db05..4f72f4ba5 100644 --- a/rep2/title.php +++ b/rep2/title.php @@ -168,8 +168,7 @@
      {$newversion_found} -

      +live {$_conf['p2live']}
      - {$_conf['p2name']} ver.{$_conf['p2version']}
      +

      {$_conf['p2name']} ver.{$_conf['p2version']} +live
      {$_conf['expack.web_url']}
      {$_conf['p2web_url']}

        From b1d310343b9147e0c2ccd24f329638b90f8420e4 Mon Sep 17 00:00:00 2001 From: pluslive Date: Thu, 13 Sep 2012 23:10:53 +0900 Subject: [PATCH 004/339] =?UTF-8?q?=E9=80=A3=E9=8E=96=E3=83=8F=E3=82=A4?= =?UTF-8?q?=E3=83=A9=E3=82=A4=E3=83=88=E3=81=8C=E9=83=A8=E5=88=86=E7=9A=84?= =?UTF-8?q?=E3=81=AB=E5=8A=B9=E3=81=8B=E3=81=AA=E3=81=8F=E3=81=AA=E3=81=A3?= =?UTF-8?q?=E3=81=A6=E3=81=84=E3=81=9F=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ShowThread.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/ShowThread.php b/lib/ShowThread.php index f367843cc..ed7d41383 100644 --- a/lib/ShowThread.php +++ b/lib/ShowThread.php @@ -892,6 +892,8 @@ protected function _markHighlight($num, $type, $isBody) $str = (string)$num; $this->_highlight_nums[$num] = $str; + + $this->_has_ngaborns = true; } return $type; From f4367a6f15973c8a766943b1e72b06068f58adfb Mon Sep 17 00:00:00 2001 From: pluslive Date: Mon, 24 Sep 2012 15:51:08 +0900 Subject: [PATCH 005/339] =?UTF-8?q?submodule=20p2pear=E3=81=8C=E5=8F=82?= =?UTF-8?q?=E7=85=A7=E3=81=99=E3=82=8B=E3=82=B3=E3=83=9F=E3=83=83=E3=83=88?= =?UTF-8?q?=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- p2pear | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/p2pear b/p2pear index ed7f177eb..2c2a09612 160000 --- a/p2pear +++ b/p2pear @@ -1 +1 @@ -Subproject commit ed7f177ebb3e3e1ce38747148fa7b48be0e585a3 +Subproject commit 2c2a096121d6119cec4b81826d2018a24b3ee510 From 3c5190a0d314186ed2e831e725a468ec7c97e733 Mon Sep 17 00:00:00 2001 From: pluslive Date: Mon, 4 Mar 2013 11:40:11 +0900 Subject: [PATCH 006/339] =?UTF-8?q?Dropbox=E3=82=A2=E3=83=83=E3=83=97?= =?UTF-8?q?=E3=83=AD=E3=83=BC=E3=83=89=E6=A9=9F=E8=83=BD=E3=82=92=E5=AE=9F?= =?UTF-8?q?=E6=B3=81=E8=A1=A8=E7=A4=BA=E6=99=82=E3=81=AB=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/live/live_post_form.inc.php | 1 + rep2/live_post_form.php | 1 + rep2/live_read.php | 1 + 3 files changed, 3 insertions(+) diff --git a/lib/live/live_post_form.inc.php b/lib/live/live_post_form.inc.php index eaed7f059..81b762e1d 100755 --- a/lib/live/live_post_form.inc.php +++ b/lib/live/live_post_form.inc.php @@ -143,6 +143,7 @@ {$htm['samba']} {$htm['k_br']}{$savedraft} +{$upload_form}
        diff --git a/rep2/live_post_form.php b/rep2/live_post_form.php index d72292b01..7214d3bce 100755 --- a/rep2/live_post_form.php +++ b/rep2/live_post_form.php @@ -3,6 +3,7 @@ * rep2 - ���X�������݃t�H�[�� */ +define('P2_SESSION_CLOSE_AFTER_AUTHENTICATION', 0); require_once __DIR__ . '/../init.php'; $_login->authorize(); // ���[�U�F�� diff --git a/rep2/live_read.php b/rep2/live_read.php index ab27c4fd6..e9f9b1650 100755 --- a/rep2/live_read.php +++ b/rep2/live_read.php @@ -4,6 +4,7 @@ * �t���[��������ʁA�E������ */ +define('P2_SESSION_CLOSE_AFTER_AUTHENTICATION', 0); require_once __DIR__ . '/../init.php'; $_login->authorize(); // ���[�U�F�� From c17bf5d074a0e1039ad233310054faf098c80e01 Mon Sep 17 00:00:00 2001 From: pluslive Date: Tue, 2 Apr 2013 15:20:15 +0900 Subject: [PATCH 007/339] =?UTF-8?q?README.md=20=E3=81=AE=E4=B8=80=E9=83=A8?= =?UTF-8?q?=E3=82=92=20+live=20=E7=94=A8=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index cbe4fbf8a..219f634b5 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,15 @@ -# rep2 expack +# rep2 expack +live -なんだかんだで歴史の長い、PHPでつくられたサーバーサイド2ちゃんねるビューワーです。 +rskさん作 rep2expack を元に、実況用機能を追加しています。 -作りがレガシーなのは作っているひとがいちばんよくわかっているので、勘弁してつかあさい。 -[次世代版建設予定地](https://github.com/rsky/page2) +### 追加機能 + +* 実況用表示 +* オートリロード/スクロール +* ハイライトワード/連鎖ハイライト + +その他基本機能はベースとなっている rep2expack と同じです。 ## セットアップ @@ -12,7 +17,7 @@ ### Git & Composerで 1. 本体をclone -
        git clone git://github.com/rsky/p2-php.git
        +  
        git clone git://github.com/pluslive/p2-php.git
           cd p2-php
        2. 依存ライブラリをダウンロード From 3f4671cd410a9e34f73ecb90d8aa12cc3585829e Mon Sep 17 00:00:00 2001 From: orzisun Date: Mon, 14 Jul 2014 23:59:25 +0900 Subject: [PATCH 008/339] =?UTF-8?q?composer.json=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.json | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/composer.json b/composer.json index 84ff66609..c9e7b7141 100644 --- a/composer.json +++ b/composer.json @@ -13,24 +13,24 @@ "rsky/pear-core-min": "dev-master", "rsky/pear-pager": ">=2.4.9beta2", "rsky/pear-html_template_flexy": ">=1.3.13alpha6", - "pear-pear/benchmark": "1.2.9", - "pear-pear/cache_lite": "1.7.15", - "pear-pear/db": "1.7.14", - "pear-pear/db_dataobject": "1.11.2", - "pear-pear/date": "1.4.7", - "pear-pear/file": "1.4.1", - "pear-pear/file_util": "1.0.0", - "pear-pear/html_common": "1.2.5", - "pear-pear/html_quickform": "3.2.13", - "pear-pear/http_client": "1.2.1", - "pear-pear/http_request": "1.4.4", - "pear-pear/net_socket": "1.0.10", - "pear-pear/net_url": "1.0.15", - "pear-pear/net_useragent_mobile": "1.0.0", - "pear-pear/validate": "0.8.5", - "pear-pear/var_dump": "1.0.4", - "pear-pear/xml_parser": "1.3.4", - "pear-pear/xml_rss": "1.0.2", + "pear-pear.php.net/benchmark": "1.2.9", + "pear-pear.php.net/cache_lite": "1.7.15", + "pear-pear.php.net/db": "1.7.14", + "pear-pear.php.net/db_dataobject": "1.11.2", + "pear-pear.php.net/date": "1.4.7", + "pear-pear.php.net/file": "1.4.1", + "pear-pear.php.net/file_util": "1.0.0", + "pear-pear.php.net/html_common": "1.2.5", + "pear-pear.php.net/html_quickform": "3.2.13", + "pear-pear.php.net/http_client": "1.2.1", + "pear-pear.php.net/http_request": "1.4.4", + "pear-pear.php.net/net_socket": "1.0.10", + "pear-pear.php.net/net_url": "1.0.15", + "pear-pear.php.net/net_useragent_mobile": "1.0.0", + "pear-pear.php.net/validate": "0.8.5", + "pear-pear.php.net/var_dump": "1.0.4", + "pear-pear.php.net/xml_parser": "1.3.4", + "pear-pear.php.net/xml_rss": "1.0.2", "symfony/console": "2.2.*", "symfony/yaml": "2.2.*", "dropbox/dropbox-sdk": "dev-master" From 16884202aed0d48dc9a259dae9b7da243759ba07 Mon Sep 17 00:00:00 2001 From: orzisun Date: Tue, 15 Jul 2014 14:49:45 +0900 Subject: [PATCH 009/339] =?UTF-8?q?vip2ch.com=E8=AA=AD=E3=81=BF=E8=BE=BC?= =?UTF-8?q?=E3=81=BF=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf_ic2.inc.php | 2 +- lib/P2Util.php | 31 +++++++++++++++++++++++++++++-- lib/ThreadRead.php | 21 +++++++++++++++++---- 3 files changed, 47 insertions(+), 7 deletions(-) diff --git a/conf/conf_ic2.inc.php b/conf/conf_ic2.inc.php index 4bb5d6750..720bbface 100644 --- a/conf/conf_ic2.inc.php +++ b/conf/conf_ic2.inc.php @@ -17,7 +17,7 @@ // SQLite2: 'sqlite:///' . $_conf['db_dir'] . '/imgcache.sqlite' // ��1: username,password,database�͎��ۂ̂��̂Ɠǂݑւ���B // ��2: MySQL,PosrgreSQL�ł͗\�߃f�[�^�x�[�X������Ă����B -$_conf['expack.ic2.general.dsn'] = ""; +$_conf['expack.ic2.general.dsn'] = "mysql://rep2:rep2@localhost:3306/rep2"; // DB�Ŏg���e�[�u���� $_conf['expack.ic2.general.table'] = "imgcache"; diff --git a/lib/P2Util.php b/lib/P2Util.php index a0fde9636..c655a5536 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -53,6 +53,11 @@ class P2Util */ static private $_hostIsJbbsShitaraba = array(); + /** + * isHostVip2ch()�̃L���b�V�� + */ + static private $_hostIsVip2ch = array(); + /** * P2Ime�I�u�W�F�N�g * @@ -445,6 +450,9 @@ static private function _p2DirOfHost($base_dir, $host, $dir_sep = true) } else { $host_dir = $base_dir . DIRECTORY_SEPARATOR . str_replace('/', DIRECTORY_SEPARATOR, $host); } + // vip.2ch.com + } elseif (self::isHostVip2ch($host)) { + $host_dir = $base_dir . DIRECTORY_SEPARATOR . 'vip2ch'; // livedoor �����^���f���ˆȊO�ŃX���b�V�����̕������܂ނƂ� } elseif (preg_match('/[^0-9A-Za-z.\\-_]/', $host)) { @@ -843,6 +851,23 @@ static public function isHost2chs($host) return self::$_hostIs2chs[$host]; } + // }}} + // {{{ isHostVip2ch() + + /** + * host �� vip2ch �Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isHostVip2ch($host) + { + if (!array_key_exists($host, self::$_hostIsVip2ch)) { + self::$_hostIsVip2ch[$host] = (bool)preg_match('<^\\w+\\.(?:vip2ch\\.com)$>', $host); + } + return self::$_hostIsVip2ch[$host]; + } + // }}} // {{{ isHostBe2chNet() @@ -1850,7 +1875,7 @@ static public function detectThread($url = null) if ($nama_url) { // 2ch or pink - http://choco.2ch.net/test/read.cgi/event/1027770702/ - if (preg_match('<^http://(\\w+\\.(?:2ch\\.net|bbspink\\.com))/test/read\\.(?:cgi|html) + if (preg_match('<^http://(\\w+\\.(?:2ch\\.net|bbspink\\.com|vip2ch\\.com))/test/read\\.(?:cgi|html) /(\\w+)/([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) { $host = $matches[1]; @@ -1859,7 +1884,7 @@ static public function detectThread($url = null) $ls = (isset($matches[4]) && strlen($matches[4])) ? $matches[4] : ''; // 2ch or pink �ߋ����Ohtml - http://pc.2ch.net/mac/kako/1015/10153/1015358199.html - } elseif (preg_match('<^(http://(\\w+\\.(?:2ch\\.net|bbspink\\.com))(?:/[^/]+)?/(\\w+) + } elseif (preg_match('<^(http://(\\w+\\.(?:2ch\\.net|bbspink\\.com|vip2ch\\.com))(?:/[^/]+)?/(\\w+) /kako/\\d+(?:/\\d+)?/(\\d+)).html>x', $nama_url, $matches)) { $host = $matches[2]; @@ -2022,6 +2047,8 @@ static public function getHostGroupName($host) return 'machibbs'; } elseif (self::isHostJbbsShitaraba($host)) { return 'shitaraba'; + } elseif (self::isHostVip2ch($host)) { + return 'vip2ch'; } else { return $host; } diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 1d766263c..62dec44d8 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -358,7 +358,7 @@ protected function _downloadDat2ch($from_bytes) protected function _downloadDat2chNotFound($code = null) { // 2ch, bbspink �Ȃ�read.cgi�Ŋm�F - if (P2Util::isHost2chs($this->host)) { + if (P2Util::isHost2chs($this->host) || P2Util::isHostVip2ch($this->host)) { $this->getdat_error_msg_ht .= $this->get2chDatError($code); } $this->diedat = true; @@ -782,6 +782,7 @@ public function get2chDatError($code = null) $dat_response_status = ''; $dat_response_msg = ''; + $vip2ch_kakosoko_match = "/�i.{1,2}����Ă��܂��B�����������݂ł��܂���B�B/"; $kakosoko_match = "/���̃X���b�h�͉ߋ����O�q�ɂɊi.{1,2}����Ă��܂�/"; $naidesu_match = "/����Ȕ�or�X���b�h�Ȃ��ł��B<\/title>/"; @@ -846,7 +847,7 @@ public function get2chDatError($code = null) // // <title>������Ȕ�or�X���b�h�Ȃ��ł��Bor error 3939 // - } elseif ($reason === 'kakohtml' or preg_match($naidesu_match, $read_response_html, $matches) || preg_match($error3939_match, $read_response_html, $matches)) { + } elseif ($reason === 'kakohtml' or preg_match($naidesu_match, $read_response_html, $matches) || preg_match($error3939_match, $read_response_html, $matches) ||preg_match($vip2ch_kakosoko_match, $read_response_html, $matches)) { if ($reason === 'kakohtml' or preg_match($kakohtml_match, $read_response_html, $matches)) { if ($reason === 'kakohtml') { @@ -864,6 +865,18 @@ public function get2chDatError($code = null) $moritori_ht = $this->_generateMoritapoDatLink(); $dat_response_msg = "<p>2ch info - ����! �X���b�h��html�������̂�҂��Ă���悤�ł��B{$marutori_ht}{$moritori_ht}</p>"; + } elseif (preg_match($vip2ch_kakosoko_match, $read_response_html, $matches)) { + //�����̗��������������ꂢ�ȏ����������������� + $ur1test = $this->key; + $ur2test = $this->key; + $ur1test = substr($ur1test,0,4); + $ur2test = substr($ur2test,0,5); + $dat_response_status = "���̃X���b�h�͉ߋ����O�q�ɂɊi�[����Ă��܂��B"; + $kakolog_uri = "http://{$this->host}/{$this->bbs}/kako/{$ur1test}/{$ur2test}/{$this->key}"; + $kakolog_url_en = rawurlencode($kakolog_uri); + $read_kako_url = "{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&kakolog={$kakolog_url_en}&kakoget=1"; + $dat_response_msg = "<p>2ch info - ����! �ߋ����O�q�ɂŁA<a href=\"{$kakolog_uri}.html\"{$_conf['bbs_win_target_at']}>�X���b�h {$this->key}.html</a> �𔭌����܂����B [<a href=\"{$read_kako_url}\">rep2�Ɏ�荞��œǂ�</a>]</p>"; + } else { if (!empty($_GET['kakolog'])) { $dat_response_status = '����Ȕ�or�X���b�h�Ȃ��ł��B'; @@ -1067,8 +1080,8 @@ public function previewOneNotFound($code = null) global $_conf; $this->diedat = true; - // 2ch, bbspink �Ȃ�read.cgi�Ŋm�F - if (P2Util::isHost2chs($this->host)) { + // 2ch, bbspink, vip2ch �Ȃ�read.cgi�Ŋm�F + if (P2Util::isHost2chs($this->host) || P2Util::isHostVip2ch($this->host)) { $this->getdat_error_msg_ht = $this->get2chDatError($code); if (count($this->datochi_residuums)) { if ($_conf['ktai']) { From 74c9e50cc87c537bf8b2a926cb6504d556447f0d Mon Sep 17 00:00:00 2001 From: orzisun <kngw-779@not-exist.info> Date: Tue, 15 Jul 2014 15:07:37 +0900 Subject: [PATCH 010/339] =?UTF-8?q?=E3=81=97=E3=81=9F=E3=82=89=E3=81=B0URL?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/P2Util.php b/lib/P2Util.php index c655a5536..6aa400ace 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -953,7 +953,7 @@ static public function isHostJbbsShitaraba($in_host) if (!array_key_exists($in_host, self::$_hostIsJbbsShitaraba)) { if ($in_host == 'rentalbbs.livedoor.com') { self::$_hostIsJbbsShitaraba[$in_host] = true; - } elseif (preg_match('<^jbbs\\.(?:shitaraba\\.com|livedoor\\.(?:com|jp))(?:/|$)>', $in_host)) { + } elseif (preg_match('<^jbbs\\.(?:shitaraba\\.(?:net|com)|livedoor\\.(?:com|jp))(?:/|$)>', $in_host)) { self::$_hostIsJbbsShitaraba[$in_host] = true; } else { self::$_hostIsJbbsShitaraba[$in_host] = false; @@ -973,7 +973,7 @@ static public function isHostJbbsShitaraba($in_host) */ static public function adjustHostJbbs($in_str) { - return preg_replace('<(^|/)jbbs\\.(?:shitaraba|livedoor)\\.com(/|$)>', '\\1jbbs.livedoor.jp\\2', $in_str, 1); + return preg_replace('<(^|/)jbbs\\.(?:shitaraba|livedoor)\\.(?:net|com)(/|$)>', '\\1jbbs.shitaraba.net\\2', $in_str, 1); //return preg_replace('<(^|/)jbbs\\.(?:shitaraba\\.com|livedoor\\.(?:com|jp))(/|$)>', '\\1rentalbbs.livedoor.com\\2', $in_str, 1); } @@ -1904,7 +1904,7 @@ static public function detectThread($url = null) $ls = (isset($matches[4]) && strlen($matches[4])) ? $matches[4] : ''; // �������JBBS - http://jbbs.livedoor.com/bbs/read.cgi/computer/2999/1081177036/-100 - } elseif (preg_match('<^http://(jbbs\\.(?:livedoor\\.(?:jp|com)|shitaraba\\.com))/bbs/read\\.cgi + } elseif (preg_match('<^http://(jbbs\\.(?:livedoor\\.(?:jp|com)|shitaraba\\.(?:net|com)))/bbs/read\\.cgi /(\\w+)/(\\d+)/(\\d+)/((?:\\d+)?-(?:\\d+)?)?[^"]*>x', $nama_url, $matches)) { $host = $matches[1] . '/' . $matches[2]; @@ -1919,7 +1919,7 @@ static public function detectThread($url = null) $host = $matches[1]; list($bbs, $key, $ls) = self::parseMachiQuery($matches[2]); - } elseif (preg_match('<^http://((jbbs\\.(?:livedoor\\.(?:jp|com)|shitaraba\\.com))(?:/(\\w+))?)/bbs/read\\.(?:pl|cgi)\\?(.+)>', + } elseif (preg_match('<^http://((jbbs\\.(?:livedoor\\.(?:jp|com)|shitaraba\\.(?:net|com)))(?:/(\\w+))?)/bbs/read\\.(?:pl|cgi)\\?(.+)>', $nama_url, $matches)) { $host = $matches[1]; From 400a09c8ccac07ba3903668bf7cd8b08c6478671 Mon Sep 17 00:00:00 2001 From: orzisun <kngw-779@not-exist.info> Date: Tue, 15 Jul 2014 15:31:37 +0900 Subject: [PATCH 011/339] 20140715.1530 --- conf/conf.inc.php | 4 ++-- doc/test.txt | 4 ++++ lib/ThreadRead.php | 11 ++++------- 3 files changed, 10 insertions(+), 9 deletions(-) create mode 100644 doc/test.txt diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 62ff4666f..4fa6b407f 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -6,8 +6,8 @@ // �o�[�W������� $_conf = array( - 'p2name' => 'rep2-expack', // rep2�̖��O - 'p2version' => '130331.2233', // rep2�̃o�[�W���� + 'p2name' => 'rep2-expack_test', // rep2�̖��O + 'p2version' => '140715.1530', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/doc/test.txt b/doc/test.txt new file mode 100644 index 000000000..b5f10ebd2 --- /dev/null +++ b/doc/test.txt @@ -0,0 +1,4 @@ +2014/07/15 (20140715.1530) +�@�Evip2ch.com�ǂݍ��ݑΉ� +�@�E������Όf���ˆړ]�Ή� +�@�Ecomposer.json�ύX (pear-pear �� pear-pear.php.net ) \ No newline at end of file diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 62dec44d8..3e3817e27 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -793,6 +793,7 @@ public function get2chDatError($code = null) //$kakohtml_match = "{<a href=\"\.\./\.\./\.\./\.\./([^/]+/kako/\d+(/\d+)?/(\d+)).html\">}"; $kakohtml_match = "{/([^/]+/kako/\d+(/\d+)?/(\d+)).html\">}"; $waithtml_match = "/html�������̂�҂��Ă���悤�ł��B/"; + $vip2ch_kakodat_match = "{/([^/]+/kako/\d+(/\d+)?/(\d+)).dat\">}"; // vip2ch.com�p // // <title>�����̃X���b�h�͉ߋ����O�q�ɂ� @@ -865,14 +866,10 @@ public function get2chDatError($code = null) $moritori_ht = $this->_generateMoritapoDatLink(); $dat_response_msg = "<p>2ch info - ����! �X���b�h��html�������̂�҂��Ă���悤�ł��B{$marutori_ht}{$moritori_ht}</p>"; - } elseif (preg_match($vip2ch_kakosoko_match, $read_response_html, $matches)) { + } elseif (preg_match($vip2ch_kakodat_match, $read_response_html, $matches)) { //�����̗��������������ꂢ�ȏ����������������� - $ur1test = $this->key; - $ur2test = $this->key; - $ur1test = substr($ur1test,0,4); - $ur2test = substr($ur2test,0,5); - $dat_response_status = "���̃X���b�h�͉ߋ����O�q�ɂɊi�[����Ă��܂��B"; - $kakolog_uri = "http://{$this->host}/{$this->bbs}/kako/{$ur1test}/{$ur2test}/{$this->key}"; + $dat_response_status = "����! �ߋ����O�q�ɂŁAdat�𔭌����܂����B"; + $kakolog_uri = "http://{$this->host}/{$matches[1]}"; $kakolog_url_en = rawurlencode($kakolog_uri); $read_kako_url = "{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&kakolog={$kakolog_url_en}&kakoget=1"; $dat_response_msg = "<p>2ch info - ����! �ߋ����O�q�ɂŁA<a href=\"{$kakolog_uri}.html\"{$_conf['bbs_win_target_at']}>�X���b�h {$this->key}.html</a> �𔭌����܂����B [<a href=\"{$read_kako_url}\">rep2�Ɏ�荞��œǂ�</a>]</p>"; From 1e8ee7ed77edb39d2432b24c6dcab39f0aaf7ccf Mon Sep 17 00:00:00 2001 From: orzisun <kngw-779@not-exist.info> Date: Tue, 15 Jul 2014 17:03:09 +0900 Subject: [PATCH 012/339] 20140715.1701 --- doc/test.txt | 4 ++++ lib/ThreadRead.php | 8 +++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/doc/test.txt b/doc/test.txt index b5f10ebd2..5d3f6172e 100644 --- a/doc/test.txt +++ b/doc/test.txt @@ -1,3 +1,7 @@ +2014/07/15 (20140715.1701) +�@�E�Q�lID�ł�dat�擾�ɑΉ� +�@�Evip2ch.com�ǂݍ��݊֌W�C�� (�{�� ver.1.8.85�ɍ��킹��) + 2014/07/15 (20140715.1530) �@�Evip2ch.com�ǂݍ��ݑΉ� �@�E������Όf���ˆړ]�Ή� diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 3e3817e27..ec7e64066 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -387,7 +387,10 @@ protected function _downloadDat2chMaru($uaMona, $SID2ch) $method = 'GET'; // GET /test/offlaw.cgi?bbs=�–�&key=�X���b�h�ԍ�&sid=�Z�b�V����ID HTTP/1.1 - $url = "http://{$this->host}/test/offlaw.cgi/{$this->bbs}/{$this->key}/?raw=0.0&sid="; + //$url = "http://{$this->host}/test/offlaw.cgi/{$this->bbs}/{$this->key}/?raw=0.0&sid="; + // �Q�l�Ή� + $rokkasystem = explode(".", $this->host , 2); + $url = "http://rokka.$rokkasystem[1]/$rokkasystem[0]/{$this->bbs}/{$this->key}/?raw=0.0&sid="; $url .= rawurlencode($SID2ch); $purl = parse_url($url); // URL���� @@ -479,7 +482,7 @@ protected function _downloadDat2chMaru($uaMona, $SID2ch) if ($marudatlines = FileCtl::file_read_lines($this->keydat)) { $firstline = array_shift($marudatlines); // �`�����N�Ƃ� - if (strpos($firstline, '+OK') === false) { + if (strpos($firstline, 'Success') === false) { // �Q�l(rokka)�Ή� $secondline = array_shift($marudatlines); } $cont = ''; @@ -867,7 +870,6 @@ public function get2chDatError($code = null) $dat_response_msg = "<p>2ch info - ����! �X���b�h��html�������̂�҂��Ă���悤�ł��B{$marutori_ht}{$moritori_ht}</p>"; } elseif (preg_match($vip2ch_kakodat_match, $read_response_html, $matches)) { - //�����̗��������������ꂢ�ȏ����������������� $dat_response_status = "����! �ߋ����O�q�ɂŁAdat�𔭌����܂����B"; $kakolog_uri = "http://{$this->host}/{$matches[1]}"; $kakolog_url_en = rawurlencode($kakolog_uri); From 0a15a54999dbc46950896334be71481097d159f7 Mon Sep 17 00:00:00 2001 From: orzisun <kngw-779@not-exist.info> Date: Tue, 15 Jul 2014 17:04:17 +0900 Subject: [PATCH 013/339] 20140715.1701 --- conf/conf.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 4fa6b407f..8c87cff48 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_test', // rep2�̖��O - 'p2version' => '140715.1530', // rep2�̃o�[�W���� + 'p2version' => '140715.1701', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; From 9407f078732b30daf5f79de3ccac65de702c9a2a Mon Sep 17 00:00:00 2001 From: orzisun <kngw-779@not-exist.info> Date: Tue, 15 Jul 2014 17:48:46 +0900 Subject: [PATCH 014/339] 20140715.1701 --- doc/test.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/test.txt b/doc/test.txt index 5d3f6172e..79219702a 100644 --- a/doc/test.txt +++ b/doc/test.txt @@ -1,5 +1,5 @@ 2014/07/15 (20140715.1701) -�@�E�Q�lID�ł�dat�擾�ɑΉ� +�@�E�Q�lID�ł�dat�擾�ɑΉ� (rokka system���p�A�ꕔ�I�A�‚ł͎擾�s�”\) �@�Evip2ch.com�ǂݍ��݊֌W�C�� (�{�� ver.1.8.85�ɍ��킹��) 2014/07/15 (20140715.1530) From 80a834e877fea4a9b8ad6eade19177e3915bd0df Mon Sep 17 00:00:00 2001 From: orzisun <kngw-779@not-exist.info> Date: Wed, 16 Jul 2014 11:52:48 +0900 Subject: [PATCH 015/339] =?UTF-8?q?shiro=3Dkuma=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- doc/test.txt | 10 ++++++-- lib/ThreadRead.php | 62 +++++++++++++++++++++++++++------------------- 3 files changed, 45 insertions(+), 29 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 8c87cff48..bb68e1743 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_test', // rep2�̖��O - 'p2version' => '140715.1701', // rep2�̃o�[�W���� + 'p2version' => '140716.1150', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/doc/test.txt b/doc/test.txt index 79219702a..a9bb794da 100644 --- a/doc/test.txt +++ b/doc/test.txt @@ -1,8 +1,14 @@ -2014/07/15 (20140715.1701) +2014/07/16 (20140716.1150) +�@�E�ߋ����O�������@�̕ύX +�@�@�E2ch.net��offraw.so�Ashoro=kuma�Ŏ擾 +�@�@�Ebbspink��rokka�Ŏ擾 +�@�@��2ch�ꕔ�� (�I�H)��rokka�Ŏ擾�ł����肷�邪�ʓ|�������̂ŏ�L�̂悤�ɂ��� + +2014/07/15 (140715.1701) �@�E�Q�lID�ł�dat�擾�ɑΉ� (rokka system���p�A�ꕔ�I�A�‚ł͎擾�s�”\) �@�Evip2ch.com�ǂݍ��݊֌W�C�� (�{�� ver.1.8.85�ɍ��킹��) -2014/07/15 (20140715.1530) +2014/07/15 (140715.1530) �@�Evip2ch.com�ǂݍ��ݑΉ� �@�E������Όf���ˆړ]�Ή� �@�Ecomposer.json�ύX (pear-pear �� pear-pear.php.net ) \ No newline at end of file diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index ec7e64066..f45e07185 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -72,23 +72,27 @@ public function downloadDat() // 2ch bbspink���ǂ� if (P2Util::isHost2chs($this->host) && !empty($_GET['maru'])) { - // ���O�C�����ĂȂ���� or ���O�C����A24���Ԉȏ�o�߂��Ă����玩���ă��O�C�� - if (!file_exists($_conf['sid2ch_php']) || - !empty($_REQUEST['relogin2ch']) || - (filemtime($_conf['sid2ch_php']) < time() - 60*60*24)) - { - if (!function_exists('login2ch')) { - include P2_LIB_DIR . '/login2ch.inc.php'; - } - if (!login2ch()) { - $this->getdat_error_msg_ht .= $this->get2chDatError(); - $this->diedat = true; - return false; + if ($this->host === "bbspink.com") { + // ���O�C�����ĂȂ���� or ���O�C����A24���Ԉȏ�o�߂��Ă����玩���ă��O�C�� + if (!file_exists($_conf['sid2ch_php']) || + !empty($_REQUEST['relogin2ch']) || + (filemtime($_conf['sid2ch_php']) < time() - 60*60*24)) + { + if (!function_exists('login2ch')) { + include P2_LIB_DIR . '/login2ch.inc.php'; + } + if (!login2ch()) { + $this->getdat_error_msg_ht .= $this->get2chDatError(); + $this->diedat = true; + return false; + } } - } - include $_conf['sid2ch_php']; - $this->_downloadDat2chMaru($uaMona, $SID2ch); + include $_conf['sid2ch_php']; + $this->_downloadDat2chMaru($uaMona, $SID2ch); + } else { + $this->_downloadDat2chMaru($uaMona, $SID2ch, 'shirokuma'); + } // 2ch bbspink �����^�|�ǂ� } elseif (P2Util::isHost2chs($this->host) && !empty($_GET['moritapodat']) && @@ -373,10 +377,11 @@ protected function _downloadDat2chNotFound($code = null) * * @param string $uaMona * @param string $SID2ch + * @param string $shirokuma * @return bool * @see lib/login2ch.inc.php */ - protected function _downloadDat2chMaru($uaMona, $SID2ch) + protected function _downloadDat2chMaru($uaMona, $SID2ch, $shirokuma) { global $_conf; @@ -388,11 +393,14 @@ protected function _downloadDat2chMaru($uaMona, $SID2ch) // GET /test/offlaw.cgi?bbs=�–�&key=�X���b�h�ԍ�&sid=�Z�b�V����ID HTTP/1.1 //$url = "http://{$this->host}/test/offlaw.cgi/{$this->bbs}/{$this->key}/?raw=0.0&sid="; - // �Q�l�Ή� - $rokkasystem = explode(".", $this->host , 2); - $url = "http://rokka.$rokkasystem[1]/$rokkasystem[0]/{$this->bbs}/{$this->key}/?raw=0.0&sid="; - $url .= rawurlencode($SID2ch); - + if (!$shirokuma) { + // �Q�l�Ή� + $rokkasystem = explode(".", $this->host , 2); + $url = "http://rokka.$rokkasystem[1]/$rokkasystem[0]/{$this->bbs}/{$this->key}/?raw=0.0&sid="; + $url .= rawurlencode($SID2ch); + } else { + $url ="http://{$this->host}/test/offlaw2.so?shiro=kuma&bbs={$this->bbs}&key={$this->key}&sid=ERROR"; + } $purl = parse_url($url); // URL���� if (isset($purl['query'])) { // �N�G���[ $purl['query'] = '?'.$purl['query']; @@ -480,11 +488,13 @@ protected function _downloadDat2chMaru($uaMona, $SID2ch) // �N���[�j���O ===== if ($marudatlines = FileCtl::file_read_lines($this->keydat)) { - $firstline = array_shift($marudatlines); - // �`�����N�Ƃ� - if (strpos($firstline, 'Success') === false) { // �Q�l(rokka)�Ή� - $secondline = array_shift($marudatlines); - } + if (!$shirokuma) { + $firstline = array_shift($marudatlines); + // �`�����N�Ƃ� + if (strpos($firstline, 'Success') === false) { // �Q�l(rokka)�Ή� + $secondline = array_shift($marudatlines); + } + } $cont = ''; foreach ($marudatlines as $aline) { // �`�����N�G���R�[�f�B���O���~�����Ƃ���(HTTP 1.0�ł��̂�) From 2eed46349a1237f69201b2d5bcb011478fe17e7c Mon Sep 17 00:00:00 2001 From: orzisun <kngw-779@not-exist.info> Date: Fri, 18 Jul 2014 21:28:27 +0900 Subject: [PATCH 016/339] =?UTF-8?q?offlaw2.so=20and=20rokka=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index f45e07185..3ee5eb147 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -69,10 +69,10 @@ public function downloadDat() // 2ch�n } else { $this->getDatBytesFromLocalDat(); // $aThread->length ��set + $pinktest = "/\w+\.bbspink.com/"; // 2ch bbspink���ǂ� if (P2Util::isHost2chs($this->host) && !empty($_GET['maru'])) { - if ($this->host === "bbspink.com") { // ���O�C�����ĂȂ���� or ���O�C����A24���Ԉȏ�o�߂��Ă����玩���ă��O�C�� if (!file_exists($_conf['sid2ch_php']) || !empty($_REQUEST['relogin2ch']) || @@ -90,9 +90,6 @@ public function downloadDat() include $_conf['sid2ch_php']; $this->_downloadDat2chMaru($uaMona, $SID2ch); - } else { - $this->_downloadDat2chMaru($uaMona, $SID2ch, 'shirokuma'); - } // 2ch bbspink �����^�|�ǂ� } elseif (P2Util::isHost2chs($this->host) && !empty($_GET['moritapodat']) && @@ -115,6 +112,8 @@ public function downloadDat() $this->_downloadDat2chKako($_GET['kakolog'], $ext); // 2ch or 2ch�݊� + } elseif (P2Util::isHost2chs($this->host) && !empty($_GET['shirokuma'])) { + $this->_downloadDat2chMaru($uaMona, $SID2ch, 'shirokuma'); } else { // DAT������DL���� $this->_downloadDat2ch($this->length); @@ -778,7 +777,10 @@ public function get2chDatError($code = null) } $wap_res = $wap_ua->request($wap_req); - if ($wap_res->isError()) { + $test403 = "/403\.dat/"; + if ($wap_res->code == 302 || preg_match( $test403, $wap_res->content, $test403)) { + $read_response_html = $wap_res->content; + } elseif ($wap_res->isError()) { $url_t = P2Util::throughIme($wap_req->url); $info_msg_ht = "<p class=\"info-msg\">Error: {$wap_res->code} {$wap_res->message}<br>"; $info_msg_ht .= "rep2 info: <a href=\"{$url_t}\"{$_conf['ext_win_target_at']}>{$wap_req->url}</a> �ɐڑ��ł��܂���ł����B</p>"; @@ -797,7 +799,12 @@ public function get2chDatError($code = null) $vip2ch_kakosoko_match = "/�i.{1,2}����Ă��܂��B�����������݂ł��܂���B�B/"; $kakosoko_match = "/���̃X���b�h�͉ߋ����O�q�ɂɊi.{1,2}����Ă��܂�/"; - + //$kakosoko_match = "/���Ȃ��͊Ԉ�����������ł��܂����ɐ\���󂲂����܂���B/"; + $kakosoko_match2 = "/http:\/\/turing1000\.nttec\.com\/?(403|404|500)\.dat/"; +//memo +//�ߋ����O�q�ɂɊi�[�` = sirokuma +//���Ȃ��͊Ԉ�����������ł��܂����ɐ\���󂲂����܂���B = �� +// $naidesu_match = "/<title>����Ȕ�or�X���b�h�Ȃ��ł��B<\/title>/"; $error3939_match = "{<title>�Q�����˂� error 3939}"; // �ߋ����O�q�ɂ�html���̎��i���ɂ����邩���A�悭�m��Ȃ��j @@ -811,10 +818,14 @@ public function get2chDatError($code = null) // // �����̃X���b�h�͉ߋ����O�q�ɂ� // - if ($reason === 'datochi' || preg_match($kakosoko_match, $read_response_html, $matches)) { + if ($reason === 'datochi' || preg_match($kakosoko_match, $read_response_html, $matches) || preg_match($kakosoko_match2, $read_response_html, $matches)) { $dat_response_status = "���̃X���b�h�͉ߋ����O�q�ɂɊi�[����Ă��܂��B"; //if (file_exists($_conf['idpw2ch_php']) || file_exists($_conf['sid2ch_php'])) { + if ( preg_match($kakosoko_match2, $read_response_html, $matches)) { $marutori_ht = " [<a href=\"{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&maru=true{$_conf['k_at_a']}\">��ID��rep2�Ɏ�荞��</a>]"; + } else { + $marutori_ht = " [<a href=\"{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&shirokuma=true{$_conf['k_at_a']}\">offlaw�o�R��rep2�Ɏ�荞��</a>]"; + } //} else { // $marutori_ht = " [<a href=\"login2ch.php\" target=\"subject\">��ID���O�C��</a>]"; //} From f4d60ec3eabb372e583afd81ef3bb2c44d7b4a59 Mon Sep 17 00:00:00 2001 From: orzisun <kngw-779@not-exist.info> Date: Fri, 18 Jul 2014 21:32:45 +0900 Subject: [PATCH 017/339] =?UTF-8?q?offlaw2.so=20and=20rokka=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- doc/test.txt | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index bb68e1743..95d5a598c 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_test', // rep2�̖��O - 'p2version' => '140716.1150', // rep2�̃o�[�W���� + 'p2version' => '140718.2130', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/doc/test.txt b/doc/test.txt index a9bb794da..e58e447a5 100644 --- a/doc/test.txt +++ b/doc/test.txt @@ -1,4 +1,8 @@ -2014/07/16 (20140716.1150) +2014/07/18 (140718.2130) +�@�E�ߋ����O�擾��offlaw2.so�o�R�Arokka�o�R�����ɑΉ�(��) +�@�@�Eread.cgi�o�R�Ŋm�F����HTML�łǂ���𗘗p���邩�I�� + +2014/07/16 (140716.1150) �@�E�ߋ����O�������@�̕ύX �@�@�E2ch.net��offraw.so�Ashoro=kuma�Ŏ擾 �@�@�Ebbspink��rokka�Ŏ擾 From e2ea6749ef9e4a0e1f38e0401c41f83fd3da3226 Mon Sep 17 00:00:00 2001 From: orzisun <kngw-779@not-exist.info> Date: Sat, 19 Jul 2014 14:47:15 +0900 Subject: [PATCH 018/339] Update conf_ic2.inc.php --- conf/conf_ic2.inc.php | 218 +++++++++++++++++++++--------------------- 1 file changed, 109 insertions(+), 109 deletions(-) diff --git a/conf/conf_ic2.inc.php b/conf/conf_ic2.inc.php index 720bbface..1664f0e9c 100644 --- a/conf/conf_ic2.inc.php +++ b/conf/conf_ic2.inc.php @@ -1,284 +1,284 @@ <?php /** - * ImageCache2 �ݒ�t�@�C�� + * ImageCache2 �ݒ�t�@�C�� */ -// {{{ �S�� +// {{{ �S�� -// �L���b�V���ۑ��f�B���N�g���̃p�X��URI +// �L���b�V���ۑ��f�B���N�g���̃p�X��URI $_conf['expack.ic2.general.cachedir'] = P2_WWW_DIR . '/ic'; $_conf['expack.ic2.general.cacheuri'] = './ic'; -// DSN (DB�ɐڑ����邽�߂̃f�[�^�\�[�X��) +// DSN (DB�ɐڑ����邽�߂̃f�[�^�\�[�X��) // @link http://jp.pear.php.net/manual/ja/package.database.db.intro-dsn.php -// ��) +// ��) // MySQL: 'mysql://username:password@localhost:3306/database' // PostgreSQL: 'pgsql://username:password@localhost:5432/database' // SQLite2: 'sqlite:///' . $_conf['db_dir'] . '/imgcache.sqlite' -// ��1: username,password,database�͎��ۂ̂��̂Ɠǂݑւ���B -// ��2: MySQL,PosrgreSQL�ł͗\�߃f�[�^�x�[�X������Ă����B -$_conf['expack.ic2.general.dsn'] = "mysql://rep2:rep2@localhost:3306/rep2"; +// ��1: username,password,database�͎��ۂ̂��̂Ɠǂݑւ���B +// ��2: MySQL,PosrgreSQL�ł͗\�߃f�[�^�x�[�X������Ă����B +$_conf['expack.ic2.general.dsn'] = ""; -// DB�Ŏg���e�[�u���� +// DB�Ŏg���e�[�u���� $_conf['expack.ic2.general.table'] = "imgcache"; -// �폜�ς݁��ă_�E�����[�h���Ȃ��摜���X�g�̃e�[�u���� +// �폜�ς݁��ă_�E�����[�h���Ȃ��摜���X�g�̃e�[�u���� $_conf['expack.ic2.general.blacklist_table'] = "ic2_blacklist"; -// �G���[���L�^����e�[�u���� +// �G���[���L�^����e�[�u���� $_conf['expack.ic2.general.error_table'] = "ic2_errors"; -// �G���[���L�^����ő�̍s�� +// �G���[���L�^����ő�̍s�� $_conf['expack.ic2.general.error_log_num'] = 100; -// �摜��URL���\��ꂽ�X���b�h�̃^�C�g���������ŋL�^���� (off:0;on:1) +// �摜��URL���\��ꂽ�X���b�h�̃^�C�g���������ŋL�^���� (off:0;on:1) $_conf['expack.ic2.general.automemo'] = 1; -// �摜����������v���O���� (gd | imagick | ImageMagick) -// gd, imagick �� PHP �̊g�����W���[���𗘗p�AImageMagick �͊O���R�}���h�𗘗p -// ImageMagick�̃o�[�W�������������肷��悤�ɂȂ����̂� -// �����I��"ImageMagick6"���w�肵�Ȃ��Ă��悢 +// �摜����������v���O���� (gd | imagick | ImageMagick) +// gd, imagick �� PHP �̊g�����W���[���𗘗p�AImageMagick �͊O���R�}���h�𗘗p +// ImageMagick�̃o�[�W�������������肷��悤�ɂȂ����̂� +// �����I��"ImageMagick6"���w�肵�Ȃ��Ă��悢 $_conf['expack.ic2.general.driver'] = "gd"; -// JPEG to JPEG �ϊ��� Epeg �G�N�X�e���V�������g�� (off:0;on:1) +// JPEG to JPEG �ϊ��� Epeg �G�N�X�e���V�������g�� (off:0;on:1) // http://page2.xrea.jp/index.php#php_epeg $_conf['expack.ic2.general.epeg'] = 0; -// JPEG �̕i�������̒l��菬�����Ƃ� Epeg �G�N�X�e���V�������g�� +// JPEG �̕i�������̒l��菬�����Ƃ� Epeg �G�N�X�e���V�������g�� $_conf['expack.ic2.general.epeg_quality_limit'] = 90; -// ImageMagick�̃p�X�iconvert������g�f�B���N�g���h�̃p�X�j -// httpd�̊‹��ϐ��Ńp�X���ʂ��Ă���Ȃ��̂܂܂ł悢 -// �p�X�𖾎��I�Ɏw�肷��ꍇ�́A�X�y�[�X������ƃT���l�C�����쐬�ł��Ȃ��̂Œ��� +// ImageMagick�̃p�X�iconvert������g�f�B���N�g���h�̃p�X�j +// httpd�̊‹��ϐ��Ńp�X���ʂ��Ă���Ȃ��̂܂܂ł悢 +// �p�X�𖾎��I�Ɏw�肷��ꍇ�́A�X�y�[�X������ƃT���l�C�����쐬�ł��Ȃ��̂Œ��� $_conf['expack.ic2.general.magick'] = ""; -// ���߉摜���T���l�C��������ۂ̔w�i�F (ImageMagick(6)�ł͖����A16�i6���Ŏw��) +// ���߉摜���T���l�C��������ۂ̔w�i�F (ImageMagick(6)�ł͖����A16�i6���Ŏw��) $_conf['expack.ic2.general.bgcolor'] = "#FFFFFF"; -// �g�тł��T���l�C�����C�����C���\������ (off:0;on:1) -// ���̂Ƃ��̑傫����PC�Ɠ��� +// �g�тł��T���l�C�����C�����C���\������ (off:0;on:1) +// ���̂Ƃ��̑傫����PC�Ɠ��� $_conf['expack.ic2.general.inline'] = 1; -// �g�їp�̉摜��\������Ƃ�Location �w�b�_���g���ă��_�C���N�g���� (off:0;on:1) -// off�Ȃ�PHP�œK�؂�Content-Type�w�b�_�Ɖ摜���o�͂��� +// �g�їp�̉摜��\������Ƃ�Location �w�b�_���g���ă��_�C���N�g���� (off:0;on:1) +// off�Ȃ�PHP�œK�؂�Content-Type�w�b�_�Ɖ摜���o�͂��� $_conf['expack.ic2.general.redirect'] = 1; // }}} -// {{{ �ꗗ +// {{{ �ꗗ -// �y�[�W�^�C�g�� +// �y�[�W�^�C�g�� $_conf['expack.ic2.viewer.title'] = "ImageCache2::Viewer"; -// Lightbox Plus �ʼn摜��\�� (off:0;on:1) +// Lightbox Plus �ʼn摜��\�� (off:0;on:1) // @link http://serennz.sakura.ne.jp/toybox/lightbox/?ja $_conf['expack.ic2.viewer.lightbox'] = 0; -// �I���W�i���摜�����‚���Ȃ����R�[�h�������ŏ������� (off:0;on:1) +// �I���W�i���摜�����‚���Ȃ����R�[�h�������ŏ������� (off:0;on:1) $_conf['expack.ic2.viewer.delete_src_not_exists'] = 0; -// �\���p�ɒ��������摜�����L���b�V�� (off:0;on:1) +// �\���p�ɒ��������摜�����L���b�V�� (off:0;on:1) $_conf['expack.ic2.viewer.cache'] = 0; -// �L���b�V���̗L�������i�b�j -// 1����=3600 -// 1��=86400 -// 1�T��=604800 -// �蓮�ŃN���A����܂ł�����=-1 +// �L���b�V���̗L�������i�b�j +// 1����=3600 +// 1��=86400 +// 1�T��=604800 +// �蓮�ŃN���A����܂ł�����=-1 $_conf['expack.ic2.viewer.cache_lifetime'] = 3600; -// �d���摜���ŏ��Ƀq�b�g����1�������\�� -// (off:0;on:1;�T�C�Y�ŕ��ёւ���Ƃ�����:2;) -// �T�u�N�G���ɑΉ����Ă��Ȃ�MySQL 4.1�����ŗL���ɂ���ƃG���[���o�� +// �d���摜���ŏ��Ƀq�b�g����1�������\�� +// (off:0;on:1;�T�C�Y�ŕ��ёւ���Ƃ�����:2;) +// �T�u�N�G���ɑΉ����Ă��Ȃ�MySQL 4.1�����ŗL���ɂ���ƃG���[���o�� $_conf['expack.ic2.viewer.unique'] = 0; -// Exif����\�� (off:0;on:1) +// Exif����\�� (off:0;on:1) $_conf['expack.ic2.viewer.exif'] = 0; -// --�ȉ��̐ݒ�͂̓f�t�H���g�l�ŁA�c�[���o�[�ŕύX�ł���-- +// --�ȉ��̐ݒ�͂̓f�t�H���g�l�ŁA�c�[���o�[�ŕύX�ł���-- -// 1�y�[�W������̗� +// 1�y�[�W������̗� $_conf['expack.ic2.viewer.cols'] = 8; -// 1�y�[�W������̍s�� +// 1�y�[�W������̍s�� $_conf['expack.ic2.viewer.rows'] = 5; -// 1�y�[�W������̉摜���i�g�їp�j +// 1�y�[�W������̉摜���i�g�їp�j $_conf['expack.ic2.viewer.inum'] = 10; -// �������l (-1 ~ 5) +// �������l (-1 ~ 5) $_conf['expack.ic2.viewer.threshold'] = 0; -// ��r���@ (>= | = | <=) +// ��r���@ (>= | = | <=) $_conf['expack.ic2.viewer.compare'] = '>='; -// ���ёւ�� (time | uri | date_uri | name | size | width | height | pixels) +// ���ёւ�� (time | uri | date_uri | name | size | width | height | pixels) $_conf['expack.ic2.viewer.order'] = "time"; -// ���ёւ����� (ASC | DESC) +// ���ёւ����� (ASC | DESC) $_conf['expack.ic2.viewer.sort'] = "DESC"; -// �����t�B�[���h (uri | name | memo) +// �����t�B�[���h (uri | name | memo) $_conf['expack.ic2.viewer.field'] = "memo"; // }}} -// {{{ �Ǘ� +// {{{ �Ǘ� -// �y�[�W�^�C�g�� +// �y�[�W�^�C�g�� $_conf['expack.ic2.manager.title'] = "ImageCache2::Manager"; -// �����L������1�s������̔��p������ +// �����L������1�s������̔��p������ $_conf['expack.ic2.manager.cols'] = 40; -// �����L�����̍s�� +// �����L�����̍s�� $_conf['expack.ic2.manager.rows'] = 5; // }}} -// {{{ �_�E�����[�h +// {{{ �_�E�����[�h -// �y�[�W�^�C�g�� +// �y�[�W�^�C�g�� $_conf['expack.ic2.getter.title'] = "ImageCache2::Getter"; -// �T�[�o�ɐڑ�����ۂɃ^�C���A�E�g����܂ł̎��ԁi�b�j +// �T�[�o�ɐڑ�����ۂɃ^�C���A�E�g����܂ł̎��ԁi�b�j $_conf['expack.ic2.getter.conn_timeout'] = 5; -// �_�E�����[�h���^�C���A�E�g����܂ł̎��ԁi�b�j +// �_�E�����[�h���^�C���A�E�g����܂ł̎��ԁi�b�j $_conf['expack.ic2.getter.read_timeout'] = 60; -// �G���[���O�ɂ���摜�̓_�E�����[�h�����݂Ȃ� (no:0;yes:1) +// �G���[���O�ɂ���摜�̓_�E�����[�h�����݂Ȃ� (no:0;yes:1) $_conf['expack.ic2.getter.checkerror'] = 1; -// �f�t�H���g��URL+.html�̋U���t�@���𑗂� (no:0;yes:1) +// �f�t�H���g��URL+.html�̋U���t�@���𑗂� (no:0;yes:1) $_conf['expack.ic2.getter.sendreferer'] = 0; -// sendreferer = 0 �̂Ƃ��A��O�I�Ƀ��t�@���𑗂�z�X�g�i�J���}��؂�j +// sendreferer = 0 �̂Ƃ��A��O�I�Ƀ��t�@���𑗂�z�X�g�i�J���}��؂�j $_conf['expack.ic2.getter.refhosts'] = ""; -// sendreferer = 1 �̂Ƃ��A��O�I�Ƀ��t�@���𑗂�Ȃ��z�X�g�i�J���}��؂�j +// sendreferer = 1 �̂Ƃ��A��O�I�Ƀ��t�@���𑗂�Ȃ��z�X�g�i�J���}��؂�j $_conf['expack.ic2.getter.norefhosts'] = ""; -// �������ځ[��̃z�X�g�i�J���}��؂�j +// �������ځ[��̃z�X�g�i�J���}��؂�j $_conf['expack.ic2.getter.reject_hosts'] = "rotten.com,shinrei.net"; -// �������ځ[��URL�̐��K�\�� +// �������ځ[��URL�̐��K�\�� $_conf['expack.ic2.getter.reject_regex'] = ""; -// �E�B���X�X�L���������� (no:0;clamscan:1;clamdscan:2) -// �iClam AntiVirus�𗘗p�j -// ImageCache2��蓮�X�L�����ɂ���ClamAV���g��Ȃ��Ȃ�1��clamscan�̕�������Ǝv���� +// �E�B���X�X�L���������� (no:0;clamscan:1;clamdscan:2) +// �iClam AntiVirus�𗘗p�j +// ImageCache2��蓮�X�L�����ɂ���ClamAV���g��Ȃ��Ȃ�1��clamscan�̕�������Ǝv���� $_conf['expack.ic2.getter.virusscan'] = 0; -// ClamAV�̃p�X�iclam(d)scan������g�f�B���N�g���h�̃p�X�j -// httpd�̊‹��ϐ��Ńp�X���ʂ��Ă���Ȃ��̂܂܂ł悢 -// �p�X�𖾎��I�Ɏw�肷��ꍇ�́A�X�y�[�X������ƃE�B���X�X�L�����ł��Ȃ��̂Œ��� +// ClamAV�̃p�X�iclam(d)scan������g�f�B���N�g���h�̃p�X�j +// httpd�̊‹��ϐ��Ńp�X���ʂ��Ă���Ȃ��̂܂܂ł悢 +// �p�X�𖾎��I�Ɏw�肷��ꍇ�́A�X�y�[�X������ƃE�B���X�X�L�����ł��Ȃ��̂Œ��� $_conf['expack.ic2.getter.clamav'] = ""; -// ���g���C -// ���g���C���s��URL�̐��K�\�� +// ���g���C +// ���g���C���s��URL�̐��K�\�� $_conf['expack.ic2.getter.retry_regex'] = '{^http://imepita\.jp/}'; -// ���g���C�̍ő�� +// ���g���C�̍ő�� $_conf['expack.ic2.getter.retry_max'] = 5; -// ���g���C�̊Ԋu(�b) +// ���g���C�̊Ԋu(�b) $_conf['expack.ic2.getter.retry_interval'] = 5; // }}} -// {{{ �v���L�V +// {{{ �v���L�V -// �摜�̃_�E�����[�h�Ƀv���L�V���g�� (no:0;yes:1) +// �摜�̃_�E�����[�h�Ƀv���L�V���g�� (no:0;yes:1) $_conf['expack.ic2.proxy.enabled'] = 0; -// �z�X�g +// �z�X�g $_conf['expack.ic2.proxy.host'] = ""; -// �|�[�g +// �|�[�g $_conf['expack.ic2.proxy.port'] = ""; -// ���[�U�� +// ���[�U�� $_conf['expack.ic2.proxy.user'] = ""; -// �p�X���[�h +// �p�X���[�h $_conf['expack.ic2.proxy.pass'] = ""; // }}} -// {{{ �\�[�X +// {{{ �\�[�X -// �ۑ��p�T�u�f�B���N�g���� +// �ۑ��p�T�u�f�B���N�g���� $_conf['expack.ic2.source.name'] = "src"; -// �L���b�V������ő�f�[�^�T�C�Y�i������z����Ƌ֎~���X�g�s���A0�͖������j +// �L���b�V������ő�f�[�^�T�C�Y�i������z����Ƌ֎~���X�g�s���A0�͖������j $_conf['expack.ic2.source.maxsize'] = 10000000; -// �L���b�V������ő�̕��i��ɓ������j +// �L���b�V������ő�̕��i��ɓ������j $_conf['expack.ic2.source.maxwidth'] = 4000; -// �L���b�V������ő�̍����i�V�j +// �L���b�V������ő�̍����i�V�j $_conf['expack.ic2.source.maxheight'] = 4000; // }}} -// {{{ �T���l�C�� +// {{{ �T���l�C�� -// �ݒ薼�i���ۑ��p�T�u�f�B���N�g�����j +// �ݒ薼�i���ۑ��p�T�u�f�B���N�g�����j $_conf['expack.ic2.thumb1.name'] = 6464; -// �T���l�C���̍ő啝�i���̐����j +// �T���l�C���̍ő啝�i���̐����j $_conf['expack.ic2.thumb1.width'] = 64; -// �T���l�C���̍ő卂���i���̐����j +// �T���l�C���̍ő卂���i���̐����j $_conf['expack.ic2.thumb1.height'] = 64; -// �T���l�C����JPEG�i���i���̐����A1~100�ȊO�ɂ����PNG�j +// �T���l�C����JPEG�i���i���̐����A1~100�ȊO�ɂ����PNG�j $_conf['expack.ic2.thumb1.quality'] = 80; // }}} -// {{{ �g�уt���X�N���[�� +// {{{ �g�уt���X�N���[�� -// �ݒ薼 +// �ݒ薼 $_conf['expack.ic2.thumb2.name'] = "qvga_v"; -// �T���l�C���̍ő啝 +// �T���l�C���̍ő啝 $_conf['expack.ic2.thumb2.width'] = 240; -// �T���l�C���̍ő卂�� +// �T���l�C���̍ő卂�� $_conf['expack.ic2.thumb2.height'] = 320; -// �T���l�C����JPEG�i�� +// �T���l�C����JPEG�i�� $_conf['expack.ic2.thumb2.quality'] = 80; // }}} -// {{{ ���ԃC���[�W +// {{{ ���ԃC���[�W -// �ݒ薼 +// �ݒ薼 $_conf['expack.ic2.thumb3.name'] = "vga"; -// �T���l�C���̍ő啝 +// �T���l�C���̍ő啝 $_conf['expack.ic2.thumb3.width'] = 640; -// �T���l�C���̍ő卂�� +// �T���l�C���̍ő卂�� $_conf['expack.ic2.thumb3.height'] = 480; -// �T���l�C����JPEG�i�� +// �T���l�C����JPEG�i�� $_conf['expack.ic2.thumb3.quality'] = 80; // }}} -// {{{ �T���l�C���̑��� +// {{{ �T���l�C���̑��� -// �A�j���[�V����GIF�����o�����ꍇ�ɑ����������� (off:0;on:1) +// �A�j���[�V����GIF�����o�����ꍇ�ɑ����������� (off:0;on:1) $_conf['expack.ic2.thumbdeco.anigif'] = 1; -// �A�j���[�V����GIF�����o�����ꍇ�ɉ����鑕���t�@�C���̃p�X +// �A�j���[�V����GIF�����o�����ꍇ�ɉ����鑕���t�@�C���̃p�X $_conf['expack.ic2.thumbdeco.anigif_path'] = './img/thumb-deco/pera2-3.png'; -// �A�j���[�V����GIF���U�����Ă����ȏꍇ�ɑ����������� (off:0;on:1) +// �A�j���[�V����GIF���U�����Ă����ȏꍇ�ɑ����������� (off:0;on:1) $_conf['expack.ic2.thumbdeco.gifcaution'] = 1; -// �A�j���[�V����GIF���U�����Ă����ȏꍇ�ɉ����鑕���t�@�C���̃p�X +// �A�j���[�V����GIF���U�����Ă����ȏꍇ�ɉ����鑕���t�@�C���̃p�X $_conf['expack.ic2.thumbdeco.gifcaution_path'] = './img/thumb-deco/caution.png'; // }}} -// {{{ ���������摜���L���b�V�����Ȃ����I�����̃v���Z�b�g�l +// {{{ ���������摜���L���b�V�����Ȃ����I�����̃v���Z�b�g�l -// "�ݒ薼" => arrray(width, height, quality) �̘A�z�z�� +// "�ݒ薼" => arrray(width, height, quality) �̘A�z�z�� $_conf['expack.ic2.dynamic.presets'] = array( - //"WQVGA�Ҏ�" => array(240, 400, 90), - //"iPhone�Ҏ�" => array(320, 480, 0), + //"WQVGA�Ҏ�" => array(240, 400, 90), + //"iPhone�Ҏ�" => array(320, 480, 0), ); // }}} From 4f48e8a998980ea2fdfa78181baced33cb7df1fd Mon Sep 17 00:00:00 2001 From: orzisun <kngw-779@not-exist.info> Date: Sat, 19 Jul 2014 14:48:42 +0900 Subject: [PATCH 019/339] =?UTF-8?q?offlaw2.so=20and=20rokka=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf_ic2.inc.php | 2 +- lib/ThreadRead.php | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/conf/conf_ic2.inc.php b/conf/conf_ic2.inc.php index 720bbface..4bb5d6750 100644 --- a/conf/conf_ic2.inc.php +++ b/conf/conf_ic2.inc.php @@ -17,7 +17,7 @@ // SQLite2: 'sqlite:///' . $_conf['db_dir'] . '/imgcache.sqlite' // ��1: username,password,database�͎��ۂ̂��̂Ɠǂݑւ���B // ��2: MySQL,PosrgreSQL�ł͗\�߃f�[�^�x�[�X������Ă����B -$_conf['expack.ic2.general.dsn'] = "mysql://rep2:rep2@localhost:3306/rep2"; +$_conf['expack.ic2.general.dsn'] = ""; // DB�Ŏg���e�[�u���� $_conf['expack.ic2.general.table'] = "imgcache"; diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 3ee5eb147..d67d67a7f 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -799,12 +799,8 @@ public function get2chDatError($code = null) $vip2ch_kakosoko_match = "/�i.{1,2}����Ă��܂��B�����������݂ł��܂���B�B/"; $kakosoko_match = "/���̃X���b�h�͉ߋ����O�q�ɂɊi.{1,2}����Ă��܂�/"; - //$kakosoko_match = "/���Ȃ��͊Ԉ�����������ł��܂����ɐ\���󂲂����܂���B/"; $kakosoko_match2 = "/http:\/\/turing1000\.nttec\.com\/?(403|404|500)\.dat/"; -//memo -//�ߋ����O�q�ɂɊi�[�` = sirokuma -//���Ȃ��͊Ԉ�����������ł��܂����ɐ\���󂲂����܂���B = �� -// + $naidesu_match = "/<title>����Ȕ�or�X���b�h�Ȃ��ł��B<\/title>/"; $error3939_match = "{<title>�Q�����˂� error 3939}"; // �ߋ����O�q�ɂ�html���̎��i���ɂ����邩���A�悭�m��Ȃ��j @@ -823,6 +819,9 @@ public function get2chDatError($code = null) //if (file_exists($_conf['idpw2ch_php']) || file_exists($_conf['sid2ch_php'])) { if ( preg_match($kakosoko_match2, $read_response_html, $matches)) { $marutori_ht = " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&maru=true{$_conf['k_at_a']}\">��ID��rep2�Ɏ�荞��]"; + //$kakolog_url_en = rawurlencode("http://{$this->host}/{$this->bbs}/kako/".substr($this->key, 0, 4)."/".substr($this->key, 0, 5)."/{$this->key}"); + //$read_kako_url = "{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&kakolog={$kakolog_url_en}&kakoget=1"; + //$marutori_ht .= "

        2ch info - ����! �ߋ����O�q�ɂŁA�X���b�h {$matches[3]}.html �𔭌����܂����B [rep2�Ɏ�荞��œǂ�]

        "; } else { $marutori_ht = " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&shirokuma=true{$_conf['k_at_a']}\">offlaw�o�R��rep2�Ɏ�荞��]"; } From edbb15f4a2975775b7e0479b2a93f46d230b6376 Mon Sep 17 00:00:00 2001 From: orzisun Date: Sat, 19 Jul 2014 17:35:53 +0900 Subject: [PATCH 020/339] =?UTF-8?q?=E3=83=AD=E3=82=B0=E5=8F=96=E5=BE=97?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- doc/test.txt | 3 +++ lib/ThreadRead.php | 9 +++++---- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 95d5a598c..db32cc85f 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_test', // rep2�̖��O - 'p2version' => '140718.2130', // rep2�̃o�[�W���� + 'p2version' => '140719.1733', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/doc/test.txt b/doc/test.txt index e58e447a5..9bdeb576b 100644 --- a/doc/test.txt +++ b/doc/test.txt @@ -1,3 +1,6 @@ +2014/07/19 (140719.1733) +�@�E�ߋ����O�擾��offlaw�ōs����rokka(��ID)�ōs�����I������悤�ɂ��� + 2014/07/18 (140718.2130) �@�E�ߋ����O�擾��offlaw2.so�o�R�Arokka�o�R�����ɑΉ�(��) �@�@�Eread.cgi�o�R�Ŋm�F����HTML�łǂ���𗘗p���邩�I�� diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index d67d67a7f..04680be75 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -568,6 +568,7 @@ protected function _downloadDat2chMaruNotFound() return $this->downloadDat(); } else { $remarutori_ht = " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&maru=true&relogin2ch=true{$_conf['k_at_a']}\">�Ď擾�����݂�]"; + $remarutori_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&shirokuma=true{$_conf['k_at_a']}\">offlaw�o�R��rep2�Ɏ�荞��]"; $moritori_ht = $this->_generateMoritapoDatLink(); $this->getdat_error_msg_ht .= "

        rep2 info: ��ID�ł̃X���b�h�擾�Ɏ��s���܂����B{$remarutori_ht}{$moritori_ht}

        "; $this->diedat = true; @@ -817,14 +818,14 @@ public function get2chDatError($code = null) if ($reason === 'datochi' || preg_match($kakosoko_match, $read_response_html, $matches) || preg_match($kakosoko_match2, $read_response_html, $matches)) { $dat_response_status = "���̃X���b�h�͉ߋ����O�q�ɂɊi�[����Ă��܂��B"; //if (file_exists($_conf['idpw2ch_php']) || file_exists($_conf['sid2ch_php'])) { - if ( preg_match($kakosoko_match2, $read_response_html, $matches)) { + //if ( preg_match($kakosoko_match2, $read_response_html, $matches)) { $marutori_ht = " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&maru=true{$_conf['k_at_a']}\">��ID��rep2�Ɏ�荞��]"; //$kakolog_url_en = rawurlencode("http://{$this->host}/{$this->bbs}/kako/".substr($this->key, 0, 4)."/".substr($this->key, 0, 5)."/{$this->key}"); //$read_kako_url = "{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&kakolog={$kakolog_url_en}&kakoget=1"; //$marutori_ht .= "

        2ch info - ����! �ߋ����O�q�ɂŁA�X���b�h {$matches[3]}.html �𔭌����܂����B [rep2�Ɏ�荞��œǂ�]

        "; - } else { - $marutori_ht = " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&shirokuma=true{$_conf['k_at_a']}\">offlaw�o�R��rep2�Ɏ�荞��]"; - } + //} else { + $marutori_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&shirokuma=true{$_conf['k_at_a']}\">offlaw�o�R��rep2�Ɏ�荞��]"; + //} //} else { // $marutori_ht = " [��ID���O�C��]"; //} From ea27c306cbb0ac56a16586aa5087a40267a4def8 Mon Sep 17 00:00:00 2001 From: orzisun Date: Wed, 23 Jul 2014 15:04:43 +0900 Subject: [PATCH 021/339] =?UTF-8?q?fastpic.jp=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/data/p2_replace_imageurl.txt | 230 ++++++++++++++++--------------- lib/P2Util.php | 2 +- 2 files changed, 117 insertions(+), 115 deletions(-) diff --git a/doc/data/p2_replace_imageurl.txt b/doc/data/p2_replace_imageurl.txt index c5ae9b1fe..ae13b8a5d 100644 --- a/doc/data/p2_replace_imageurl.txt +++ b/doc/data/p2_replace_imageurl.txt @@ -8,20 +8,20 @@ ;EXTRACT�Ď擾 �����HTML���擾���邩 ;���ID�擾 EXTRACT�u�����ʂ̉摜URL�ɑ΂��鐳�K�\���B�w�肳��Ă���ꍇ�͂���Ń}�b�`����������őO��L���b�V���Ɣ�r���A����ł���Γ����摜�ƌ��􂷁B ; -http://((?:(?:www\.)?(?:kiken|sekai)\.(?:nu|jp)|www\.animar-japan\.com|altair\.mydns\.jp).+)/image\.php\?\./(log/\d{14}/img/img\d+\.(?:jpe?g|png|gif|bmp)) http://$1/$2 $& +http://((?:(?:www\.)?(?:kiken|sekai)\.(?:nu|jp)|www\.animar-japan\.com|altair\.mydns\.jp).+)/image\.php\?\./(log/\d{14}/img/img\d+\.(?:jpe?g|png|gif|bmp)) http://$1/$2 $& http://((?:[^/]+\.)?(?:haru\.gs|byonavi\.com|byokan\.net|aki\.gs)/.*vip.*)/html/(\w+)\.html http://$1/vip$EXTRACT $& $EXTRACT (/data/$2\.(?:jpe?g|png|gif|bmp)) http://((?:[^/]+\.)?(?:haru\.gs|byonavi\.com|byokan\.net|aki\.gs)/.+(/vip/\w+))\.html http://$1.$EXTRACT $& $EXTRACT $2\.(jpe?g|png|gif|bmp) http://((?:[^/]+\.)?(?:haru\.gs|byonavi\.com|byokan\.net|aki\.gs)/.+)/html/(\w+)\.html http://$1$EXTRACT $& $EXTRACT (/data/$2\.(?:jpe?g|png|gif|bmp)) http://((?:\d\.)?new\.cx)/\?(\w+) $EXTRACT $& $EXTRACT (http://$1/[^"']+$2\.(?:jpe?g|png|gif|bmp)) -http://((?:arn|asc)\.kyosui\.net/ib)/disp\.php\?img=(\w+)_(\d+\.(?:jpe?g|gif|png|bmp)) http://$1/img/$2/$2_$3 $& +http://((?:arn|asc)\.kyosui\.net/ib)/disp\.php\?img=(\w+)_(\d+\.(?:jpe?g|gif|png|bmp)) http://$1/img/$2/$2_$3 $& http://((?:gazou\.tank\.jp|momiage\.sakura\.ne\.jp|namamono\.tk|8\.pro\.tok2.com/~namamono)/\w+)/ref/(\d+)\.htm http://$1$EXTRACT $& $EXTRACT=$& (/src/$2\.(?:jpe?g|png|gif)) -http://((?:gazou\.tank\.jp|momiage\.sakura\.ne\.jp|namamono\.tk|8\.pro\.tok2.com/~namamono)/\w+/)src(/\d+\.)(?:jpe?g|png|gif|bmp) $& http://$1ref$2htm -http://((?:lapislazuli|adularia)\.ath\.cx/)image(/\d+) http://$1uploader$2_tb.gif -http://((?:pinknotora\.net|\dserver\.harikonotora\.net|\dserver\.sakura\.ne\.jp)/[^/]+)/pc/img\.php\?src=\.\.(/src/\d+-\d+\.(?:jpe?g|png|gif|bmp)) http://$1$2 +http://((?:gazou\.tank\.jp|momiage\.sakura\.ne\.jp|namamono\.tk|8\.pro\.tok2.com/~namamono)/\w+/)src(/\d+\.)(?:jpe?g|png|gif|bmp) $& http://$1ref$2htm +http://((?:lapislazuli|adularia)\.ath\.cx/)image(/\d+) http://$1uploader$2_tb.gif +http://((?:pinknotora\.net|\dserver\.harikonotora\.net|\dserver\.sakura\.ne\.jp)/[^/]+)/pc/img\.php\?src=\.\.(/src/\d+-\d+\.(?:jpe?g|png|gif|bmp)) http://$1$2 http://((?:pinknotora\.net|\dserver\.harikonotora\.net|\dserver\.sakura\.ne\.jp)/[^/]+)/pc/index\.php\?res=(\d+) http://$1$EXTRACT $& $EXTRACT (/src/$2-1\.(?:jpe?g|png|gif|bmp)) http://((img\d+)\.imageshack\.us/)my\.php\?image=(.+?\.(?:jpe?g|png|gif|bmp)) $EXTRACT $& $EXTRACT src="(http://$1$2/\d+/$3)" http://((www\.happinetonline\.com).+Action=\w+)(?:(?!_pict)(&.+#)|_pict(&.+))$ http://$2$EXTRACT http://$1_pict$3$4 $EXTRACT src="(.+\.(?:jpe?g|png|gif|bmp))" -http://((www\d?\.uploader\.jp/)dl(/[^/]+/)([^/]+\.(?:jpe?g|png|gif|bmp)))(?:\.html)? http://$2user$3images/$4 http://$1.html +http://((www\d?\.uploader\.jp/)dl(/[^/]+/)([^/]+\.(?:jpe?g|png|gif|bmp)))(?:\.html)? http://$2user$3images/$4 http://$1.html http://(?:img\.)?0bbs\.jp/(?:(\w+)/img|u/(\w+)/[^/]+/)(\d+_\d+) $EXTRACT http://0bbs.jp/$1$2/img$3 $EXTRACT (http://img\.0bbs\.jp/u/$1$2/[^/]+/$3) http://(?:imgb(\d)?|c)(\.rentalcgi\.com/view)(?:(?:(?!1)(\d)|1)/\w+)?/(\w+/\d+\.(?:jpe?g|gif|png|bmp))(?:\.html)? $EXTRACT http://imgb$1$3$2/$4.html $EXTRACT (http://c$2\d/\w+/$4) http://(?:www\.)?77c\.org/[dp]\.php\?f=(\w+\.(?:jpe?g|png|gif)) http://77c.org/$EXTRACT $& $EXTRACT href="(p\.php\?f=$1&c=\w+) @@ -32,122 +32,122 @@ http://(\w+)a\.updoga\.com/(\w+)/?$ $EXTRACT http://wwwa.updoga.com/img.php/$1/$ http://(\w+\.(?:artemisweb|imgbbs)\.jp/.+/)(?!index)[^/]*(\d+)\.html? http://$1$EXTRACT $& $EXTRACT src=["']?((?:[^"']+)?$2\.(?:jpe?g|png|gif|bmp))["']? http://(\w+\.)?p2\.ms/(\w{5}).* http://$1p2.ms$EXTRACT240 $& $EXTRACT (/skur-$2\d&s=)(?:240|30) http://(\w+\.2chan\.net/\w+)/red/(\d+)\.htm http://$1$EXTRACT $& $EXTRACT (/src/$2(?:\w+)?\.(?:jpe?g|png|gif|bmp)) -http://(\w+\.4chan\.org/\w+)/src\.cgi/(\d{13}\.\w+) http://$1/src/$2 -http://(\w+\.meiwasuisan\.com/bbs(?:pink)?/)bin/img/(\w+/)(\d+\.(?:jpe?g|png|gif|bmp)) http://$1$2img/$3 -http://(\w+\.oekakibbs\.com/bbs/\w+)/oekakibbs\.cgi\?.*thisfile=(\d+\.(?:jpe?g|png|gif|bmp)) http://$1/data/$2 -http://(\w+\.s\d\+\.x-beat\.com/)upfile\.php\?n=(img/.+\.(?:jpe?g|png|gif|bmp)) http://$1$2 $& -http://(\w+\.vip2ch\.com|files\.or\.tp)/dl(?:\.p(?:hp)?)?\?f=((?:\w+)\.(?:jpe?g|png|gif|bmp)) http://$1/$2 -http://(\w+\.wtakumi\.com)/bbs\.cgi\?id=(\w+).+&file=(\d+\.(?:jpe?g|png|gif|bmp)) http://$1/s/$2/$3 +http://(\w+\.4chan\.org/\w+)/src\.cgi/(\d{13}\.\w+) http://$1/src/$2 +http://(\w+\.meiwasuisan\.com/bbs(?:pink)?/)bin/img/(\w+/)(\d+\.(?:jpe?g|png|gif|bmp)) http://$1$2img/$3 +http://(\w+\.oekakibbs\.com/bbs/\w+)/oekakibbs\.cgi\?.*thisfile=(\d+\.(?:jpe?g|png|gif|bmp)) http://$1/data/$2 +http://(\w+\.s\d\+\.x-beat\.com/)upfile\.php\?n=(img/.+\.(?:jpe?g|png|gif|bmp)) http://$1$2 $& +http://(\w+\.vip2ch\.com|files\.or\.tp)/dl(?:\.p(?:hp)?)?\?f=((?:\w+)\.(?:jpe?g|png|gif|bmp)) http://$1/$2 +http://(\w+\.wtakumi\.com)/bbs\.cgi\?id=(\w+).+&file=(\d+\.(?:jpe?g|png|gif|bmp)) http://$1/s/$2/$3 http://(\w\.pic\.to/)(\w+)(?:(\?r)=(\d+))?$ http://$1$EXTRACT http://$1$2$3$4 $EXTRACT src='($2-$4[^']+\.(?:jpe?g|png|gif|bmp))' 1 http://\w\.pic\.to/([^-]+-[^-]+)-[^"']+\.(?:jpe?g|png|gif|bmp) http://(18ban\.jp/photo\.php\?)(?:&.*)?(?:kid=(\d+)(?:&.*)?&wid=(\d+)|wid=(\d+)(?:&.*)?&kid=(\d+))(?:&.*)? $EXTRACT http://$1kid=$2$5&wid=$3$4&br=m $EXTRACT (http://[^"]+/photo/\d/$2$5/$2$5-\d+-\d+-$3$4(?:-pc)?\.(?:jpe?g|png|gif|bmp)) http://(appleup\.bbsnow\.net/\w+)/html/(\w+)\.html http://$1$EXTRACT $& $EXTRACT (/data/$2\.(?:jpe?g|png|gif|bmp)) http://(bbs\.avi\.jp/photo)/(\d+)/(\d+)(?:[&/].*)? $EXTRACT http://$1.php?kid=$2&wid=$3&br=m $EXTRACT (http://photo\d\.avi\.jp/photo/\d/$2/$2-\d+-\d+-$3(?:-pc)?\.(?:jpe?g|png|gif|bmp)) http://(bbs\.avi\.jp/photo\.php\?).*(?:kid=(\d+).*&wid=(\d+)|wid=(\d+).*&kid=(\d+)).* $EXTRACT http://$1kid=$2$5&wid=$3$4&br=m $EXTRACT (http://photo\d\.avi\.jp/photo/\d/$2$5/$2$5-\d+-\d+-$3$4(?:-pc)?\.(?:jpe?g|png|gif|bmp)) http://(bbs\.j-banana\.net/\w+)/gazou\.cgi\?room=(\w+)&no=(\d+) http://$1$EXTRACT $& $EXTRACT (/user/(?:images/)?$2_img/$3\.(?:jpe?g|png|gif|bmp)) -http://(bbs\d+\.aimix-z\.com)/photovw\.cgi\?room=(\w+)&image=(\d+\.(?:jpe?g|png|gif|bmp)).* http://$1/gbbsimg/$2/$3 $& +http://(bbs\d+\.aimix-z\.com)/photovw\.cgi\?room=(\w+)&image=(\d+\.(?:jpe?g|png|gif|bmp)).* http://$1/gbbsimg/$2/$3 $& http://(bbs01\.apricot-fizz\.net/\w+/)(?:(?:index\.php)?\?.*&num=)(\d+) http://$1$EXTRACT $& $EXTRACT (grpview.php/$2\.\d{10}\.(?:jpe?g|png|gif|bmp)) http://(beach\.dip\.jp/BBS)/(\w+/\d+\.)html http://$1$EXTRACT $& $EXTRACT (/img/$2(?:jpe?g|png|gif)) -http://(cheke|sabayomi)\.jp/detail/((\w{2})(\w{2})\w+) http://img.$1.jp/$3/$4/$2.jpg -http://(chiba\.tm\.land\.to/upload/src/(\w+\.(?:jpe?g|png|gif|bmp))) http://$1/$2 -http://(cream\.ath\.cx/ichigo)/cream/(IchigoCream\d+\.\w+) $& http://$1/dl.cgi?filename=$2 -http://(cream\.ath\.cx/ichigo)/dl\.cgi\?filename=(IchigoCream\d+\.\w+) http://$1/cream/$2 $& +http://(cheke|sabayomi)\.jp/detail/((\w{2})(\w{2})\w+) http://img.$1.jp/$3/$4/$2.jpg +http://(chiba\.tm\.land\.to/upload/src/(\w+\.(?:jpe?g|png|gif|bmp))) http://$1/$2 +http://(cream\.ath\.cx/ichigo)/cream/(IchigoCream\d+\.\w+) $& http://$1/dl.cgi?filename=$2 +http://(cream\.ath\.cx/ichigo)/dl\.cgi\?filename=(IchigoCream\d+\.\w+) http://$1/cream/$2 $& http://(f\.hatena\.ne\.jp)/(([^/])[^/]+)/((\d{8})\d+) http://$1$EXTRACT $& $EXTRACT (/images/fotolife/$3/$2/$5/$4\.(?:jpe?g|png|gif)) -http://(fancyfree\.myphotos\.cc/[^/]+/)img/\d+\.(?:jpe?g|png|gif|bmp) $& http://$1 +http://(fancyfree\.myphotos\.cc/[^/]+/)img/\d+\.(?:jpe?g|png|gif|bmp) $& http://$1 http://(img\d+\.imagevenue\.com/)[^/]+\.php.*[?&]image=[^&]+\.(?:jpe?g|png|gif|bmp) http://$1$EXTRACT $& $EXTRACT SRC="([^"/]+/loc\d+/[^"/]+\.(?:jpe?g|png|gif|bmp)) http://(imgb1\.ziyu\.net)/view(/[^/]+/\d+\.(?:jpe?g|png|gif))(?:\.html)? http://$1$EXTRACT http://$1/view$2.html $EXTRACT SRC=['"](/[^/]+$2) http://(kjm\.kir\.jp)/(?:mailbbs\d?\.php)?\?pt?=(\d+) http://$1$EXTRACT http://$1/mailbbs2.php?pt=$2 $EXTRACT (/data/\d+\.(?:jpe?g|png|gif|bmp)) -http://(moeboard\.neuromancer\.se)/info/(moeb/.+\.(?:jpe?g|png|gif|bmp)) http://$1/image/32fdab6559cdfa4f167f8c31b9199643/i/$2 +http://(moeboard\.neuromancer\.se)/info/(moeb/.+\.(?:jpe?g|png|gif|bmp)) http://$1/image/32fdab6559cdfa4f167f8c31b9199643/i/$2 http://(mup\.vip2ch\.com)/m?dl(?:\.p(?:hp)?)?\?(?:f|img)=(?:vipper)?(\d+)(?:[&.].+)? http://$1$EXTRACT $& $EXTRACT (/up/vipper$2\.(?:jpe?g|png|gif|bmp)) http://(ona-mona\.s5\.x-beat\.com/file)/html/(\w+)\.html http://$1$EXTRACT $& $EXTRACT (/data/$2\.(?:jpe?g|png|gif|bmp)) -http://(pc\.gban\.jp(?:/[fm])?)/(?:index\.php)?\?p=(.+\.(?:jpe?g|png|gif|bmp)) http://$1/img/$2 $& +http://(pc\.gban\.jp(?:/[fm])?)/(?:index\.php)?\?p=(.+\.(?:jpe?g|png|gif|bmp)) http://$1/img/$2 $& http://(siokara\.ath\.cx/sio2?)/ref/(\d+)\.htm http://$1$EXTRACT $& $EXTRACT (/sio_src/$2\.(?:jpe?g|png|gif|bmp)) http://(siokara\.ath\.cx/sio3)/ref/(\d+)\.htm http://$1$EXTRACT $& $EXTRACT (/src/$2\.(?:jpe?g|png|gif|bmp)) http://(siokara-3\.ath\.cx/hokan/\w+)/refer/(\w+)\.htm http://$1$EXTRACT $& $EXTRACT (/img/$2\.(?:jpe?g|png|gif|bmp)) http://(sourceforge\.net)/project/screenshots\.php\?.+ http://$1$EXTRACT $& $EXTRACT src="(/dbimage\.php\?id=\d+)" -http://(thumb2?\.(?:(?:imgup|uploda|vipper)\.org|vipper\.net)/v?)html/(\w+\.(?:jpe?g|png|gif|bmp))\.html http://$1file/$2 -http://(up2\.viploader\.net/\w+/)link\.php\?updir=([^&]+)&file=(\w+\.)(jpe?g|png|gif|bmp) http://$1$2/$3$4 http://$1refer/$3htm +http://(thumb2?\.(?:(?:imgup|uploda|vipper)\.org|vipper\.net)/v?)html/(\w+\.(?:jpe?g|png|gif|bmp))\.html http://$1file/$2 +http://(up2\.viploader\.net/\w+/)link\.php\?updir=([^&]+)&file=(\w+\.)(jpe?g|png|gif|bmp) http://$1$2/$3$4 http://$1refer/$3htm http://(up2\.viploader\.net/\w+/)refer/(\w+)\.htm http://$1$EXTRACT $& $EXTRACT (\w+/$2\.(?:jpe?g|png|gif|bmp)) http://(upld\.dip\.jp:8713/files/s)/link\.php\?id=(\d+) $EXTRACT $& $EXTRACT (http://$1/img/mohemohe$2\.(?:jpe?g|png|gif|bmp)) -http://(wp\.madcowdisease\.org)/gp(/.+\.(?:jpe?g|png|gif|bmp)) http://$1$2 -http://(www\.774\.cc)/down/downcon\.cgi\?name=(up\d+\.(?:jpe?g|png|gif|bmp))@Uploda(\w+) http://$1:8020/upload-$3/src/files/$2 -http://(www\.774\.cc:80)0(0/upload-\w+/src)/(up\d+\.(?:jpe?g|png|gif|bmp))\.html http://$12$2/files/$3 -http://(www\.channel-h\.net/img(\d)?/cgi)/(?:img-box/img\d{14}\.(?:jpe?g|png|gif|bmp)) $& http://$1/imgboard$2.cgi +http://(wp\.madcowdisease\.org)/gp(/.+\.(?:jpe?g|png|gif|bmp)) http://$1$2 +http://(www\.774\.cc)/down/downcon\.cgi\?name=(up\d+\.(?:jpe?g|png|gif|bmp))@Uploda(\w+) http://$1:8020/upload-$3/src/files/$2 +http://(www\.774\.cc:80)0(0/upload-\w+/src)/(up\d+\.(?:jpe?g|png|gif|bmp))\.html http://$12$2/files/$3 +http://(www\.channel-h\.net/img(\d)?/cgi)/(?:img-box/img\d{14}\.(?:jpe?g|png|gif|bmp)) $& http://$1/imgboard$2.cgi http://(www\.csync\.net/service/file)/view\.cgi\?id=(\d+) http://$1$EXTRACT $& $EXTRACT src="\.(/data/$2\.(?:jpe?g|gif|png|bmp))" http://(www\.ec2up\.com)/view/_(\w+) http://$1$EXTRACT $& $EXTRACT src="(/pics/$2\.(?:jpe?g|gif|png)) http://(www\.ec2up\.com/v)p?(\.php\?\w+) $EXTRACT http://$1p$2 $EXTRACT (http://$1p$2) -http://(www\.gz-loader\.com/[^/]+/)mailbbs\.php\?mode=graphic&log=([^.]+)\.dat&file=(.+\.(?:jpe?g|png|gif|bmp)) http://$1data/$2/org/$3 -http://(www\.hotass\.jp/more-\w+/\d+/)pages(/[^/]+_(jpe?g|gif|png|bmp)\.)htm http://$1images$2$3 +http://(www\.gz-loader\.com/[^/]+/)mailbbs\.php\?mode=graphic&log=([^.]+)\.dat&file=(.+\.(?:jpe?g|png|gif|bmp)) http://$1data/$2/org/$3 +http://(www\.hotass\.jp/more-\w+/\d+/)pages(/[^/]+_(jpe?g|gif|png|bmp)\.)htm http://$1images$2$3 http://(www\.inverse\.jp/perl2/gazou)/html/(\d+)\.htm http://$1$EXTRACT $& $EXTRACT=$& (/src/$2\.(?:jpe?g|png|gif)) -http://(www\.inverse\.jp/perl2/gazou)/src/(\d+)\.(?:jpe?g|png|gif) $& http://$1/html/$2.htm -http://(www\.sukebegazou\.com/(?:[^/]*/)?(?:img)?bbs\d)/image\.cgi\?id=(.+\.(?:jpe?g|png|gif|bmp)) http://$1/$2 $& -http://(www\d+\.axfc\.net/uploader/\d+/so)/(?:l/\d+/|view\.cgi\?dr=\d+&file=)?([^/]+\.(?:jpe?g|png|gif|bmp))(?:\.html)? http://$1/s/$2 http://$1/$2.html -http://[^/.]+\.(?:freespace\.jp|poosan\.net)/(.+(?:jpe?g|png|gif|bmp)) http://new1314.freespace.jp/$1 http://www.sunseagull.com/freespace/download.html?download1314&$1 -http://[^/]*18ban[^/]+/photo/\d/(\d+)/\d+-\d+-\d+-(\d+)(?:-pc)?\.(?:jpe?g|png|gif|bmp) $& http://18ban.jp/photo.php?kid=$1&wid=$2&br=m +http://(www\.inverse\.jp/perl2/gazou)/src/(\d+)\.(?:jpe?g|png|gif) $& http://$1/html/$2.htm +http://(www\.sukebegazou\.com/(?:[^/]*/)?(?:img)?bbs\d)/image\.cgi\?id=(.+\.(?:jpe?g|png|gif|bmp)) http://$1/$2 $& +http://(www\d+\.axfc\.net/uploader/\d+/so)/(?:l/\d+/|view\.cgi\?dr=\d+&file=)?([^/]+\.(?:jpe?g|png|gif|bmp))(?:\.html)? http://$1/s/$2 http://$1/$2.html +http://[^/.]+\.(?:freespace\.jp|poosan\.net)/(.+(?:jpe?g|png|gif|bmp)) http://new1314.freespace.jp/$1 http://www.sunseagull.com/freespace/download.html?download1314&$1 +http://[^/]*18ban[^/]+/photo/\d/(\d+)/\d+-\d+-\d+-(\d+)(?:-pc)?\.(?:jpe?g|png|gif|bmp) $& http://18ban.jp/photo.php?kid=$1&wid=$2&br=m http://\w+\.bannch\.com/\w+/BBSmsg2\?bbsid=\d+&fname=(\d{10}\.(?:jpe?g|png|gif|bmp)) $EXTRACT $& $EXTRACT href="([^"]+/$1)" http://\w+\.updoga\.com/[^/]+(/\w+/\w+)(?:/?$|(/\d+).*$) $EXTRACTe http://wwwa.updoga.com/img.php$1$2/ORG/ $EXTRACT src="([^"]+\.jp)[eg]" http://a\.upup\.be/(?:index(?:\.php)?)?\?(.*)(?:&l=\d)?(.*) http://a.upup.be/?mode=imageout$EXTRACT http://a.upup.be/?$1$2 $EXTRACT src=/\?mode=imageout.*(&k=\w+) http://an\.to/(?:\w+/)?\?.+ $EXTRACT $& $EXTRACT (http://[^"']+?\.(?:jpe?g|png|gif|bmp)) http://atk\.jp/.+ $EXTRACT $& $EXTRACT (http://[^"']+?\.(?:jpe?g|png|gif|bmp)) -http://bbs\.2ch2\.net/(\w+)/\?m=[^/]*/\w+/(img/.+\.(?:jpe?g|png|gif|bmp)) http://bbs.2ch2.net/$1/$2 -http://co0\.sakura\.ne\.jp/ph/link\.php\?f=(\d{10})x(jpe?g|png|gif|bmp) http://co0.sakura.ne.jp/ph/src/$1.$2 +http://bbs\.2ch2\.net/(\w+)/\?m=[^/]*/\w+/(img/.+\.(?:jpe?g|png|gif|bmp)) http://bbs.2ch2.net/$1/$2 +http://co0\.sakura\.ne\.jp/ph/link\.php\?f=(\d{10})x(jpe?g|png|gif|bmp) http://co0.sakura.ne.jp/ph/src/$1.$2 http://doup\.org/(?:files/)?(\w+) http://doup.org/files/$1/$EXTRACT http://doup.org/$1 $EXTRACT src=([^\s]+(?:jpe?g|png|gif|bmp)) http://fout\.garon\.jp/\?key=.+:(\w+)&ext=(jpe?g|png|gif|bmp) $EXTRACT $& $EXTRACT (http://g\d{3}\.garon\.jp/gdb/[^"]+$1\.$2) http://gban\.jp/i/(\w+(\w)) $EXTRACT $& $EXTRACT (http://gban\.jp/d/$2/$1\.(?:jpe?g|png|gif|bmp)) http://hidebbs\.net/bbs/(\w+)\?.*no=\d+ $EXTRACT $& $EXTRACT (http://www7\.hidebbs\.net/\d+/$1/bbs/\d{4}/\d{2}/\d{2}/\w+\.(?:jpe?g|gif|png|bmp)) -http://i\.turboimagehost\.com/p/(\d+/[^/]+\.(?:jpe?g|png|gif|bmp))\.html http://i2.turboimagehost.com/b1/$1 -http://i-bbs\.sijex\.net/imageDisp\.jsp\?id=(.*)&file=([^.]+\.(?:jpe?g|png|gif|bmp)) http://image.i-bbs.sijex.net/bbs/$1/$2 -http://i-bbs\.sijex\.net/servlet/ImageOutput\?pa=([^.]+\.(?:jpe?g|png|gif|bmp))&id=(\w+)&t=\d+ http://i-bbs.sijex.net/bbs/$2/$1 http://i-bbs.sijex.net/imageBoard.jsp?id=$2 +http://i\.turboimagehost\.com/p/(\d+/[^/]+\.(?:jpe?g|png|gif|bmp))\.html http://i2.turboimagehost.com/b1/$1 +http://i-bbs\.sijex\.net/imageDisp\.jsp\?id=(.*)&file=([^.]+\.(?:jpe?g|png|gif|bmp)) http://image.i-bbs.sijex.net/bbs/$1/$2 +http://i-bbs\.sijex\.net/servlet/ImageOutput\?pa=([^.]+\.(?:jpe?g|png|gif|bmp))&id=(\w+)&t=\d+ http://i-bbs.sijex.net/bbs/$2/$1 http://i-bbs.sijex.net/imageBoard.jsp?id=$2 http://iboard\d\.to/GAZOimage/\d{6}/\w\d+_\d+_\w+ $EXTRACT $& $EXTRACT ($&) -http://image\.(i-bbs\.sijex\.net/bbs/\w+/\d{13}o\.(?:jpe?g|png|gif|bmp)) $& http://$1 -http://imagesocket\.com/view/(.+(?:jpe?g|png|gif|bmp)) http://content.imagesocket.com/images/$1 +http://image\.(i-bbs\.sijex\.net/bbs/\w+/\d{13}o\.(?:jpe?g|png|gif|bmp)) $& http://$1 +http://imagesocket\.com/view/(.+(?:jpe?g|png|gif|bmp)) http://content.imagesocket.com/images/$1 http://imepita\.jp/(?:image/)?(\d{8}/\d{6}) http://imepita.jp/image/$1 http://imepita.jp/$1 http://imgcash\d\.imageshack\.us/Himg\d+/scaled\.php\?(?:.+&)?filename=[^&]+\.(?:jpe?g|png|gif|bmp).* $EXTRACT $& $EXTRACT ($&) -http://imgup5\.myphotos\.cc/image/\d+/[^/]+\.(?:jpe?g|png|gif|bmp) $& -http://kjm\.kir\.jp/pc/.*\?p=(.+\.(?:jpe?g|png|gif|bmp)) http://kjm.kir.jp/pc/img/$1 $& +http://imgup5\.myphotos\.cc/image/\d+/[^/]+\.(?:jpe?g|png|gif|bmp) $& +http://kjm\.kir\.jp/pc/.*\?p=(.+\.(?:jpe?g|png|gif|bmp)) http://kjm.kir.jp/pc/img/$1 $& http://mokei\.net/up/img/img\d+\.(?:jpe?g|png|gif|bmp) http://mokei.net$EXTRACT $& $EXTRACT "(/up/gresize\.cgi\?rn=[^"]+)" http://nurupo\.net/(?:(?:index\.php)?\?d=|cabinet/)([^&/]+)(?:&f=|/)([^?&/]+\.(?:jpe?g|png|gif|bmp))[&?](ak=\w+) $EXTRACT http://nurupo.net/cabinet/$1/$2?$3 $EXTRACT (http://nurupo\.net/cabinet/$1/$2\?$3) -http://nurupo\.net/(?:index\.php)?\?d=([^&]+)&f=([^/&]+\.(?:jpe?g|png|gif|bmp))$ http://nurupo.net/cabinet/$1/$2 $& +http://nurupo\.net/(?:index\.php)?\?d=([^&]+)&f=([^/&]+\.(?:jpe?g|png|gif|bmp))$ http://nurupo.net/cabinet/$1/$2 $& http://p\.pita\.st/\?(?:m=)?(\w{8}) $EXTRACT $& $EXTRACT .+img src="?([^"\s]+\.(?:jpe?g|png|gif|bmp)) -http://www\.gazoru\.com/g-((\w)\w{31}\.(?:jpe?g|png|gif|bmp))\.html http://www.gazoru.com/file/pic/$2/$1 -http://www\.sunseagull\.com/freespace/download\.html\?download(\d+)&(.+) http://new$1.freespace.jp/$2 $& -http://www\.uploda\.net/cgi/uploader1/index\.php\?file_id=(\d{10}\.(?:jpe?g|png|gif|bmp)) http://aploda.com/dl.php?mode=pass&file_id=$1 -http://www\.uploda\.net/cgi/uploader2/index\.php\?file_id=(\d{10}\.(?:jpe?g|png|gif|bmp)) http://aploda.net/dl.php?mode=pass&file_id=$1 -http://www\.uploda\.net/cgi/uploader3/index\.php\?file_id=(\d{10}\.(?:jpe?g|png|gif|bmp)) http://xelhes.com/dl.php?mode=pass&file_id=$1 -http://www\.uploda\.net/cgi/uploader4/index\.php\?file_id=(\d{10}\.(?:jpe?g|png|gif|bmp)) http://aploda.org/dl.php?mode=pass&file_id=$1 -http://www\.uploda\.net/i/cgi/upk1/index\.php\?file_id=(\d{10}\.(?:jpe?g|png|gif|bmp)) http://lieza.net/dl.php?mode=pass&file_id=$1 +http://www\.gazoru\.com/g-((\w)\w{31}\.(?:jpe?g|png|gif|bmp))\.html http://www.gazoru.com/file/pic/$2/$1 +http://www\.sunseagull\.com/freespace/download\.html\?download(\d+)&(.+) http://new$1.freespace.jp/$2 $& +http://www\.uploda\.net/cgi/uploader1/index\.php\?file_id=(\d{10}\.(?:jpe?g|png|gif|bmp)) http://aploda.com/dl.php?mode=pass&file_id=$1 +http://www\.uploda\.net/cgi/uploader2/index\.php\?file_id=(\d{10}\.(?:jpe?g|png|gif|bmp)) http://aploda.net/dl.php?mode=pass&file_id=$1 +http://www\.uploda\.net/cgi/uploader3/index\.php\?file_id=(\d{10}\.(?:jpe?g|png|gif|bmp)) http://xelhes.com/dl.php?mode=pass&file_id=$1 +http://www\.uploda\.net/cgi/uploader4/index\.php\?file_id=(\d{10}\.(?:jpe?g|png|gif|bmp)) http://aploda.org/dl.php?mode=pass&file_id=$1 +http://www\.uploda\.net/i/cgi/upk1/index\.php\?file_id=(\d{10}\.(?:jpe?g|png|gif|bmp)) http://lieza.net/dl.php?mode=pass&file_id=$1 http://www-2ch\.net:8080/up/download/\d+\.[^?]+ $EXTRACT $& $EXTRACT ($&) -http://((?:\w+\.)?ascii24\.com/.+/\d{4}/\d{2}/\d{2}/image)view/(images\d{6}\.(?:jpe?g|png|gif|bmp))\.html http://$1s/$2 $& +http://((?:\w+\.)?ascii24\.com/.+/\d{4}/\d{2}/\d{2}/image)view/(images\d{6}\.(?:jpe?g|png|gif|bmp))\.html http://$1s/$2 $& http://((?:www\.)?jeux-france\.com/)images\d+_\d_\d+\.html http://$1$EXTRACT $& $EXTRACT src="(Webmasters/[^"]+_big\.jpg) http://(\w+\.nikkeibp\.co\.jp/.+/\d+/\d+)/\?SS=(?:\w+)?imgview&FD=.+ http://$1/$EXTRACT $& $EXTRACT src="([^/]+\.(?:jpe?g|png|gif|bmp))" http://(\w+\.watch\.impress\.co\.jp)/cda/parts/image_for_link/\d+-\d+-\d+-\d+\.html http://$1$EXTRACT $& $EXTRACT (/cda/static/image/\d{4}/\d{2}/\d{2}/[^/]+\.(?:jpe?g|png|gif|bmp)) http://(arena\.nikkeibp\.co\.jp/.+/\d+/\d+/)(\d{2}v)\.shtml http://$1$EXTRACT $& $EXTRACT src="($2\.(?:jpe?g|png|gif|bmp))" -http://(cms\.rbbtoday\.com/review/(?:photo|images)/[^/]+)\.html http://$1.jpg +http://(cms\.rbbtoday\.com/review/(?:photo|images)/[^/]+)\.html http://$1.jpg http://(ga\.sbcr\.jp/(?!wall/|sound/).+/)(\d{2})(?:-640|-1024)?\.html http://$1$EXTRACT $& $EXTRACT SRC="(?:\./)?(images/$2(?:-640|-1024)?\.jpg)" -http://(ga\.sbcr\.jp/sound/\w+)/(\d{2})\.html http://$1/images/image$2.jpg +http://(ga\.sbcr\.jp/sound/\w+)/(\d{2})\.html http://$1/images/image$2.jpg http://(ga\.sbcr\.jp/wall)/(640|1024)\.html http://$1$EXTRACT $& $EXTRACT SRC="\.(/\d+/images/$2\.jpg)" -http://(ga\.sbcr\.jp/wall/\d+)/(\d{2})\.html http://$1/images/gallery$2.jpg -http://(image\.itmedia\.co\.jp)/(?:l/im/)?(.+\.(?:jpe?g|png|gif|bmp)) http://$1/$2 $& +http://(ga\.sbcr\.jp/wall/\d+)/(\d{2})\.html http://$1/images/gallery$2.jpg +http://(image\.itmedia\.co\.jp)/(?:l/im/)?(.+\.(?:jpe?g|png|gif|bmp)) http://$1/$2 $& http://(it\.nikkei\.co\.jp)/.+\.aspx\?n=[^&]+.*&ps=\d+ http://$1$EXTRACT $& $EXTRACT (/photo/[^"]+\.(?:jpe?g|png|gif|bmp)) -http://(journal\.mycom\.co\.jp)/photo/(.+/images/\w+\.(?:jpe?g|png|gif)) http://$1/$2 +http://(journal\.mycom\.co\.jp)/photo/(.+/images/\w+\.(?:jpe?g|png|gif)) http://$1/$2 http://(k-tai\.impress\.co\.jp)/cda/parts/image_for_link/\d+-\d+-\d+-\d+\.html http://$1$EXTRACT $& $EXTRACT SRC="(/cda/static/image/\d{4}/\d{2}/\d{2}/[^/"]+\.(?:jpe?g|png|gif|bmp)) http://(news\.livedoor\.com)/article/image_detail/\d+/\?img_id=\d+ $EXTRACT $& $EXTRACT (http://image\.$1/newsimage/\w/\w/[^/"]+\.(?:jpe?g|gif|png|bmp)) http://(news\.www\.infoseek\.co\.jp)/photo/(?:\w+)/full/story/\w+/ $EXTRACT $& $EXTRACT (http://$1/img/photos/\w+/[^/]+\.(?:jpe?g|png|gif|bmp)) http://(pc\.nikkeibp\.co\.jp/.+/\d+/\d+)/[^/]+_imgview(\d)\.html http://$1/$2.$EXTRACT $& $EXTRACT $2\.(jpe?g|png|gif|bmp) -http://(release\.nikkei\.co\.jp)/attach\.cfm\?attID=(.+\.(?:jpe?g|gif|png|bmp)) http://$1/attach_file/$2 $& +http://(release\.nikkei\.co\.jp)/attach\.cfm\?attID=(.+\.(?:jpe?g|gif|png|bmp)) http://$1/attach_file/$2 $& http://(sports\.livedoor\.com)/photo/detail-\d+\.html.* $EXTRACT $& $EXTRACT (http://image.$1/photo/\w/\w/[^/"]+\.(?:jpe?g|gif|png|bmp)) http://(www\.4gamer\.net/news/image/\d{4}\.\d{2}/)(\d{14}_\w+)\.html http://$1$EXTRACT $& $EXTRACT ($2\.(?:jpe?g|png|gif|bmp)) http://(www\.asahi\.com)/photonews/\w+\.html http://$1$EXTRACT $& $EXTRACT src="(/photonews/images/\w+\.jpg)" @@ -156,103 +156,105 @@ http://(www\.dengekionline\.com/data/\w+/\d{4}/(?:\d{1,2}/){1,2})\w+_\d+\.html h http://(www\.forest\.impress\.co\.jp/article/.+)/(\w+\d+r)\.html http://$1/$EXTRACT $& $EXTRACT ($2\.(?:jpe?g|png|gif|bmp)) http://(www\.iza\.ne\.jp)/\w+/(?:newsarticle/.+/\d+/slideshow|(?:news)?photo/.+/\d+)/.* http://$1$EXTRACT.jpg $& $EXTRACT (/images/news/\d{8}/\d+)(?:_c350)?\.jpg http://(www\.mainichi-msn\.co\.jp/.+/graph/.+/)\d+\.html http://$1$EXTRACT $& $EXTRACT img src="(\d+\.jpg)" -http://(www\.rbbtoday\.com)/cgi-bin/news/pict/(\d+)/\d+/jpg/([^/]+)\.html http://$1/news/$2/$3.jpg -http://(www\.sponichi\.co\.jp/.+)(/K.+\d{11})_p\.html http://$1/images$2_l.jpg -http://(www\.vector\.co\.jp/games/news)/(\d{6})/(\d{2})/(\d{2})/images_(\d{2})\.html http://$1/$2/$3/$4/images/$2$3_$4_$5.jpg -http://(www\.vector\.co\.jp/games/review/\d{4})/images_(\d{2})\.html http://$1/images/$2_l.gif -http://(www\.vector\.co\.jp/magazine/\w+/\d{6})/(\w+[^b])b?_pic\.html http://$1/images/$2b.gif +http://(www\.rbbtoday\.com)/cgi-bin/news/pict/(\d+)/\d+/jpg/([^/]+)\.html http://$1/news/$2/$3.jpg +http://(www\.sponichi\.co\.jp/.+)(/K.+\d{11})_p\.html http://$1/images$2_l.jpg +http://(www\.vector\.co\.jp/games/news)/(\d{6})/(\d{2})/(\d{2})/images_(\d{2})\.html http://$1/$2/$3/$4/images/$2$3_$4_$5.jpg +http://(www\.vector\.co\.jp/games/review/\d{4})/images_(\d{2})\.html http://$1/images/$2_l.gif +http://(www\.vector\.co\.jp/magazine/\w+/\d{6})/(\w+[^b])b?_pic\.html http://$1/images/$2b.gif http://(www\.watch\.impress\.co\.jp/akiba/hotline/\d{8}/image/)(\w+\d)\.html http://$1$EXTRACT $& $EXTRACT src="($2\.(?:jpe?g|png|gif|bmp))" http://(www\.watch\.impress\.co\.jp/game/docs/\d{8}/)(?:\w*(?:\D|_))?\d{2}\.htm http://$1$EXTRACT $& $EXTRACT Date: Wed, 3 Sep 2014 15:57:28 +0900 Subject: [PATCH 022/339] =?UTF-8?q?dig.2ch.net=E6=A4=9C=E7=B4=A2=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 3 ++- conf/conf_admin_ex.inc.php | 4 ++++ lib/expack/tgrep/view.inc.php | 7 +++++++ lib/expack/tgrep/view_k.inc.php | 1 + lib/expack/tgrep/view_x.inc.php | 2 ++ rep2/tgrepc.php | 34 +++++++++++++++++++-------------- 6 files changed, 36 insertions(+), 15 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index db32cc85f..ebff3dea0 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_test', // rep2�̖��O - 'p2version' => '140719.1733', // rep2�̃o�[�W���� + 'p2version' => '140718.2130', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; @@ -79,6 +79,7 @@ function p2_init() $_conf['expack.download_url'] = 'http://page2.skr.jp/rep2/downloads.html'; $_conf['expack.history_url'] = 'http://page2.skr.jp/rep2/history.html'; $_conf['expack.tgrep_url'] = 'http://page2.xrea.jp/tgrep/search'; + $_conf['test.dig2ch_url'] = 'http://dig.2ch.net/?AndOr=0&maxResult=100&atLeast=1&Sort=5&Link=1&Bbs=all&924=1&json=1&keywords='; $_conf['expack.gate_php'] = 'http://page2.skr.jp/gate.php'; $_conf['menu_php'] = 'menu.php'; $_conf['subject_php'] = 'subject.php'; diff --git a/conf/conf_admin_ex.inc.php b/conf/conf_admin_ex.inc.php index 680288feb..a266f80d7 100644 --- a/conf/conf_admin_ex.inc.php +++ b/conf/conf_admin_ex.inc.php @@ -25,6 +25,10 @@ // ���[�h����悤�ɂȂ��Ă��Ȃ��ꍇ�̂� 1 �ɂ��� $_conf['expack.dl_pecl_http'] = 0; // (0) +// �X���^�C������dig.2ch.net�ōs�� +$_conf['test.search_dig2ch'] = 1; // (1) + + // }}} // {{{ �X�L�� diff --git a/lib/expack/tgrep/view.inc.php b/lib/expack/tgrep/view.inc.php index a1657d35a..7b3ca63ee 100644 --- a/lib/expack/tgrep/view.inc.php +++ b/lib/expack/tgrep/view.inc.php @@ -91,6 +91,13 @@ function sf() { + + + + + +
        +
        diff --git a/lib/expack/tgrep/view_k.inc.php b/lib/expack/tgrep/view_k.inc.php index c2e1087e2..f30cd366f 100644 --- a/lib/expack/tgrep/view_k.inc.php +++ b/lib/expack/tgrep/view_k.inc.php @@ -70,6 +70,7 @@ + {$profile['cm0']}";} + if ($_conf['test.search_dig2ch']) { echo "
      • "; echo $profile['cm0'];echo $profile['cm1'];echo $profile['cm2'];echo "
      • ";} foreach ($threads as $o => $t) { $ttitle_ht = strip_tags($t->title); diff --git a/rep2/tgrepc.php b/rep2/tgrepc.php index 20c4d89df..0201a7cfa 100644 --- a/rep2/tgrepc.php +++ b/rep2/tgrepc.php @@ -156,7 +156,8 @@ // ��{�ϐ� $htm = array(); -$htm['tgrep_url'] = p2h($_conf['expack.tgrep_url']); +//$htm['tgrep_url'] = p2h($_conf['expack.tgrep_url']); +$htm['tgrep_url'] = p2h($_conf['test.dig2ch_url']); $htm['php_self'] = 'tgrepc.php'; //p2h($_SERVER['SCRIPT_NAME']); $htm['query'] = (isset($_GET['Q'])) ? p2h($_GET['Q']) : ''; $htm['query_en'] = (isset($_GET['Q'])) ? rawurlencode($_GET['Q']) : ''; @@ -336,20 +337,25 @@ function tgrep_search($query) { global $_conf; - $client = new HTTP_Client(); - $client->setDefaultHeader('User-Agent', 'p2-tgrep-client'); - $code = $client->get($_conf['expack.tgrep_url'] . '?' . $query); - if (PEAR::isError($code)) { - p2die($code->getMessage()); - } elseif ($code != 200) { - p2die("HTTP Error - {$code}"); - } - $response = $client->currentResponse(); - $result = unserialize($response['body']); - if (!$result) { - p2die('Error: �������ʂ̓W�J�Ɏ��s���܂����B'); + if (!$_conf['test.search_dig2ch']) { + $client = new HTTP_Client(); + $client->setDefaultHeader('User-Agent', 'p2-tgrep-client'); + $code = $client->get($_conf['expack.tgrep_url'] . '?' . $query); + if (PEAR::isError($code)) { + p2die($code->getMessage()); + } elseif ($code != 200) { + p2die("HTTP Error - {$code}"); + } + $response = $client->currentResponse(); + $result = unserialize($response['body']); + if (!$result) { + p2die('Error: �������ʂ̓W�J�Ɏ��s���܂����B'); + } + return $result; + } else { + require_once './dig2ch.php'; + return dig2chsearch($query); // �lj� } - return $result; } // }}} From cbeaab642f1832a8ca7d00378d274f87a30eedc2 Mon Sep 17 00:00:00 2001 From: orzisun Date: Wed, 3 Sep 2014 16:00:06 +0900 Subject: [PATCH 023/339] =?UTF-8?q?dig.2ch.net=E6=A4=9C=E7=B4=A2=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/test.txt | 3 ++ rep2/dig2ch.php | 75 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 rep2/dig2ch.php diff --git a/doc/test.txt b/doc/test.txt index 9bdeb576b..c47e657d0 100644 --- a/doc/test.txt +++ b/doc/test.txt @@ -1,3 +1,6 @@ +2014/09/03 (140903.1600) +�@�Edig.2ch.net�ŃX���^�C�������ł���悤�ɂ��� (tgrepc.php�̕ύX�Adig2����.php�쐬) + 2014/07/19 (140719.1733) �@�E�ߋ����O�擾��offlaw�ōs����rokka(��ID)�ōs�����I������悤�ɂ��� diff --git a/rep2/dig2ch.php b/rep2/dig2ch.php new file mode 100644 index 000000000..0391bc343 --- /dev/null +++ b/rep2/dig2ch.php @@ -0,0 +1,75 @@ +setDefaultHeader('User-Agent', 'p2-tgrep-client'); + $code = $client->get($_conf['test.dig2ch_url'] . $query_arry['q']); + if (PEAR::isError($code)) { + p2die($code->getMessage()); + } elseif ($code != 200) { + p2die("HTTP Error - {$code}"); + } + $response = $client->currentResponse(); + + $jsontest1 = json_decode($response['body'], true); + + //mb_convert_variables('SHIFT-JIS','UTF-8',$jsontest1); + /* switch (json_last_error()) { + case JSON_ERROR_NONE: + echo ' - No errors'; + break; + case JSON_ERROR_DEPTH: + echo ' - Maximum stack depth exceeded'; + break; + case JSON_ERROR_STATE_MISMATCH: + echo ' - Underflow or the modes mismatch'; + break; + case JSON_ERROR_CTRL_CHAR: + echo ' - Unexpected control character found'; + break; + case JSON_ERROR_SYNTAX: + echo ' - Syntax error, malformed JSON'; + break; + case JSON_ERROR_UTF8: + echo ' - Malformed UTF-8 characters, possibly incorrectly encoded'; + break; + default: + echo ' - Unknown error'; + break; + } */ + if ($jsontest1 === NULL) { + p2die('Error: ���s'); + } + + foreach ($jsontest1[result] as $jsontest2) { + $result['threads'][$n1]->title = $jsontest2[subject]; + $result['threads'][$n1]->host = $jsontest2[server]; + $result['threads'][$n1]->bbs = $jsontest2[bbs]; + $result['threads'][$n1]->tkey = $jsontest2[key]; + $result['threads'][$n1]->resnum = $jsontest2[resno]; + $result['threads'][$n1]->ita = $jsontest2[ita]; + $result['threads'][$n1]->dayres = $jsontest2[ikioi]; + $n1++; + } + $result['modified'] = $response['body']['date']; + $result['profile']['regex'] = '/(' . $jsontest1[query] .')/i'; + $result['profile']['hits'] = $jsontest1[found]; + $result['profile']['cm0'] = str_replace("a href=" , "a target=\"_blank\" href=", $jsontest1[cm0]); + if (strstr($result['profile']['cm0'] , "rounin")) { $result['profile']['cm0'] = str_replace("src=\"" , "src=\"http://dig.2ch.net", $result['profile']['cm0']);} + $result['profile']['cm0'] = str_replace("
        " , "", $result['profile']['cm0']); + + $result['profile']['cm1'] = str_replace("a href=" , "a target=\"_blank\" href=", $jsontest1[cm1]); + if (strstr($result['profile']['cm1'] , "rounin")) { $result['profile']['cm1'] = str_replace("src=\"" , "src=\"http://dig.2ch.net", $result['profile']['cm1']);} + $result['profile']['cm1'] = str_replace("
        " , "", $result['profile']['cm1']); + + $result['profile']['cm2'] = str_replace("a href=" , "a target=\"_blank\" href=", $jsontest1[cm2]); + if (strstr($result['profile']['cm2'] , "rounin")) { $result['profile']['cm2'] = str_replace("src=\"" , "src=\"http://dig.2ch.net", $result['profile']['cm2']);} + $result['profile']['cm2'] = str_replace("
        " , "", $result['profile']['cm2']); + + return $result; +} + From 5bf307f45f1b050d1eecd345f11bd1de31c2d28c Mon Sep 17 00:00:00 2001 From: orzisun Date: Sun, 7 Sep 2014 06:15:33 +0900 Subject: [PATCH 024/339] =?UTF-8?q?dig.2ch.net=E6=A4=9C=E7=B4=A2=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 3 ++- lib/expack/tgrep/view_k.inc.php | 23 +++++++++++++++- lib/menu.inc.php | 47 +++++++++++++++++++++++++++++++-- rep2/dig2ch.php | 7 ++--- rep2/menu_i.php | 29 +++++++++++++++++--- rep2/tgrepc.php | 10 +++++++ 6 files changed, 108 insertions(+), 11 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index ebff3dea0..fd332fccd 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -79,7 +79,8 @@ function p2_init() $_conf['expack.download_url'] = 'http://page2.skr.jp/rep2/downloads.html'; $_conf['expack.history_url'] = 'http://page2.skr.jp/rep2/history.html'; $_conf['expack.tgrep_url'] = 'http://page2.xrea.jp/tgrep/search'; - $_conf['test.dig2ch_url'] = 'http://dig.2ch.net/?AndOr=0&maxResult=100&atLeast=1&Sort=5&Link=1&Bbs=all&924=1&json=1&keywords='; + $_conf['test.dig2ch_url'] = 'http://dig.2ch.net/'; + //$_conf['test.dig2ch_url'] = 'http://dig.2ch.net/?AndOr=0&maxResult=100&atLeast=1&Sort=5&Link=1&Bbs=all&924=1&json=1&keywords='; $_conf['expack.gate_php'] = 'http://page2.skr.jp/gate.php'; $_conf['menu_php'] = 'menu.php'; $_conf['subject_php'] = 'subject.php'; diff --git a/lib/expack/tgrep/view_k.inc.php b/lib/expack/tgrep/view_k.inc.php index f30cd366f..73f7c3a93 100644 --- a/lib/expack/tgrep/view_k.inc.php +++ b/lib/expack/tgrep/view_k.inc.php @@ -17,7 +17,28 @@
        > - +
        +
        +�ő����\��
        +
        +924��

        diff --git a/lib/menu.inc.php b/lib/menu.inc.php index d40f85599..2419d9554 100644 --- a/lib/menu.inc.php +++ b/lib/menu.inc.php @@ -166,7 +166,29 @@ function chMenuColor(idnum){ // �X���^�C���� echo << - +
        +
        + �ő����\��
        +
        + 924�� + {$_conf['detect_hint_input_ht']}{$_conf['k_input_ht']}
        \n EOP; @@ -185,7 +207,28 @@ function chMenuColor(idnum){ // �X���^�C���� echo << - +
        +
        + �ő����\��
        +
        + 924�� {$_conf['detect_hint_input_ht']}{$_conf['k_input_ht']}
        \n EOP; diff --git a/rep2/dig2ch.php b/rep2/dig2ch.php index 0391bc343..faf87e722 100644 --- a/rep2/dig2ch.php +++ b/rep2/dig2ch.php @@ -3,11 +3,11 @@ function dig2chsearch($query) { global $_conf; - $fp = fopen("/var/www/html/test/test/test.txt", "w"); + parse_str($query, $query_arry); $client = new HTTP_Client(); $client->setDefaultHeader('User-Agent', 'p2-tgrep-client'); - $code = $client->get($_conf['test.dig2ch_url'] . $query_arry['q']); + $code = $client->get($_conf['test.dig2ch_url'] . '?AndOr=' . $query_arry['AndOr'] . '&maxResult=' . $query_arry['maxResult'] . '&atLeast=1&Sort=' . $query_arry['Sort'] . '&Link=1&Bbs=all&924=' . $query_arry['924'] . '&json=1&keywords=' . $query_arry['q']); if (PEAR::isError($code)) { p2die($code->getMessage()); } elseif ($code != 200) { @@ -17,6 +17,7 @@ function dig2chsearch($query) $jsontest1 = json_decode($response['body'], true); + //mb_convert_variables('SHIFT-JIS','UTF-8',$jsontest1); /* switch (json_last_error()) { case JSON_ERROR_NONE: @@ -42,7 +43,7 @@ function dig2chsearch($query) break; } */ if ($jsontest1 === NULL) { - p2die('Error: ���s'); + p2die("�������ʂ̎擾�Ɏ��s���܂���"); } foreach ($jsontest1[result] as $jsontest2) { diff --git a/rep2/menu_i.php b/rep2/menu_i.php index f210084ed..27d8d7bf2 100644 --- a/rep2/menu_i.php +++ b/rep2/menu_i.php @@ -186,7 +186,7 @@ // }}} // {{{ �G���[ -if (P2Util::hasInfoHtml()) { +if (P2Util::hasInfoHtml()) { echo '
        '; P2Util::printInfoHtml(); echo '
        '; @@ -258,7 +258,7 @@ // }}} // {{{ RSS - if ($_conf['expack.rss.enabled']) { + if ($_conf['expack.rss.enabled']) { $rss = FavSetManager::getFavSetTitles('m_rss_set'); if (!$rss) { $rss = array(); @@ -292,7 +292,7 @@ } else { menu_iphone_show_favorite_boards('���C�ɔ�'); - if ($_conf['expack.rss.enabled']) { + if ($_conf['expack.rss.enabled']) { menu_iphone_show_feed_list('RSS'); } } @@ -382,7 +382,28 @@ ��� ���� - +
        +
        + �ő����\��
        + + 924�� diff --git a/rep2/tgrepc.php b/rep2/tgrepc.php index 0201a7cfa..9ed82b595 100644 --- a/rep2/tgrepc.php +++ b/rep2/tgrepc.php @@ -20,6 +20,11 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') { require_once P2_LIB_DIR . '/menu_iphone.inc.php'; $_GET['Q'] = menu_iphone_unicode_urldecode($_POST['iq']); + if (isset($_POST['AndOr'])) { $_GET['AndOr'] = $_POST['AndOr'];} + if (isset($_POST['maxResult'])) { $_GET['maxResult'] = $_POST['maxResult'];} + if (isset($_POST['Sort'])) { $_GET['Sort'] = $_POST['Sort'];} + if (isset($_POST['Link'])) { $_GET['Link'] = $_POST['Link'];} + if (isset($_POST['924'])) { $_GET['924'] = $_POST['924'];} } else { $_GET['Q'] = $_GET['iq']; } @@ -39,6 +44,11 @@ if (isset($_GET['Q']) && is_string($_GET['Q']) && strlen($_GET['Q']) > 0) { $query_params['q'] = $_GET['Q']; $query_params['n'] = $limit = ($_conf['ktai'] || $_conf['iphone']) ? '25' : '100'; + if (isset($_GET['AndOr'])) { $query_params['AndOr'] = $_GET['AndOr'];} + if (isset($_GET['maxResult'])) { $query_params['maxResult'] = $_GET['maxResult'];} + if (isset($_GET['Sort'])) { $query_params['Sort'] = $_GET['Sort'];} + if (isset($_GET['Link'])) { $query_params['Link'] = $_GET['Link'];} + if (isset($_GET['924'])) { $query_params['924'] = $_GET['924'];} //$query_keys = array('s', 'b', 'c', 'o', 'n', 'p'); $query_keys = array('s', 'b', 'c', 'p'); foreach ($query_keys as $_k) { From 04dfa3b20b3f1cf3375bc686900b0cc41fcf5b3a Mon Sep 17 00:00:00 2001 From: orzisun Date: Sun, 7 Sep 2014 14:22:59 +0900 Subject: [PATCH 025/339] =?UTF-8?q?dig.2ch.net=E6=A4=9C=E7=B4=A2=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 3 +-- doc/test.txt | 4 ++++ rep2/dig2ch.php | 5 ++++- rep2/tgrepc.php | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index fd332fccd..84e50e2c7 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_test', // rep2�̖��O - 'p2version' => '140718.2130', // rep2�̃o�[�W���� + 'p2version' => '1140907.1420', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; @@ -80,7 +80,6 @@ function p2_init() $_conf['expack.history_url'] = 'http://page2.skr.jp/rep2/history.html'; $_conf['expack.tgrep_url'] = 'http://page2.xrea.jp/tgrep/search'; $_conf['test.dig2ch_url'] = 'http://dig.2ch.net/'; - //$_conf['test.dig2ch_url'] = 'http://dig.2ch.net/?AndOr=0&maxResult=100&atLeast=1&Sort=5&Link=1&Bbs=all&924=1&json=1&keywords='; $_conf['expack.gate_php'] = 'http://page2.skr.jp/gate.php'; $_conf['menu_php'] = 'menu.php'; $_conf['subject_php'] = 'subject.php'; diff --git a/doc/test.txt b/doc/test.txt index c47e657d0..44ef83aea 100644 --- a/doc/test.txt +++ b/doc/test.txt @@ -1,3 +1,7 @@ +2014/09/07 (140907.1420) +�@�E�X���^�C������AND/OR�������ł���悤�ɂ��� +�@�E���p�X�y�[�X�A�S�p�X�y�[�X�̏��� + 2014/09/03 (140903.1600) �@�Edig.2ch.net�ŃX���^�C�������ł���悤�ɂ��� (tgrepc.php�̕ύX�Adig2����.php�쐬) diff --git a/rep2/dig2ch.php b/rep2/dig2ch.php index faf87e722..75c95fbff 100644 --- a/rep2/dig2ch.php +++ b/rep2/dig2ch.php @@ -5,6 +5,10 @@ function dig2chsearch($query) global $_conf; parse_str($query, $query_arry); + + //$query_q = preg_replace('/(\s+)/' , '\+' ,$query_arry['q']); + $query_arry['q'] = urlencode($query_arry['q']); + $client = new HTTP_Client(); $client->setDefaultHeader('User-Agent', 'p2-tgrep-client'); $code = $client->get($_conf['test.dig2ch_url'] . '?AndOr=' . $query_arry['AndOr'] . '&maxResult=' . $query_arry['maxResult'] . '&atLeast=1&Sort=' . $query_arry['Sort'] . '&Link=1&Bbs=all&924=' . $query_arry['924'] . '&json=1&keywords=' . $query_arry['q']); @@ -17,7 +21,6 @@ function dig2chsearch($query) $jsontest1 = json_decode($response['body'], true); - //mb_convert_variables('SHIFT-JIS','UTF-8',$jsontest1); /* switch (json_last_error()) { case JSON_ERROR_NONE: diff --git a/rep2/tgrepc.php b/rep2/tgrepc.php index 9ed82b595..71df610fc 100644 --- a/rep2/tgrepc.php +++ b/rep2/tgrepc.php @@ -42,7 +42,7 @@ $query_params = array(); if (isset($_GET['Q']) && is_string($_GET['Q']) && strlen($_GET['Q']) > 0) { - $query_params['q'] = $_GET['Q']; + $query_params['q'] = mb_convert_kana($_GET['Q'], 's'); $query_params['n'] = $limit = ($_conf['ktai'] || $_conf['iphone']) ? '25' : '100'; if (isset($_GET['AndOr'])) { $query_params['AndOr'] = $_GET['AndOr'];} if (isset($_GET['maxResult'])) { $query_params['maxResult'] = $_GET['maxResult'];} From 136f8ead4fd88c8fcf2bbabd096e60d692f60950 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Wed, 4 Mar 2015 21:51:46 +0900 Subject: [PATCH 026/339] =?UTF-8?q?*=20=E3=83=AD=E3=83=BC=E3=82=AB?= =?UTF-8?q?=E3=83=AB=E6=9D=BF=E4=B8=80=E8=A6=A7=E7=94=A8.brd=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE=E7=BD=AE=E3=81=8D=E5=A0=B4?= =?UTF-8?q?=E6=89=80=E3=82=92/rep2/board=E3=81=8B=E3=82=89$=5Fconf['data?= =?UTF-8?q?=5Fdir']/brard=E3=81=AB=E5=A4=89=E6=9B=B4=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/BrdCtl.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/BrdCtl.php b/lib/BrdCtl.php index 66ca87942..b73482b4b 100644 --- a/lib/BrdCtl.php +++ b/lib/BrdCtl.php @@ -30,8 +30,9 @@ static public function read_brds() */ static public function read_brd_dir() { + global $_conf; $brd_menus = array(); - $brd_dir = './board'; + $brd_dir = $_conf['data_dir'] . '/board'; if ($cdir = @dir($brd_dir)) { // �f�B���N�g������ From 63858f543ea6206a170c81b328fb474562b2a311 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Wed, 4 Mar 2015 22:01:15 +0900 Subject: [PATCH 027/339] =?UTF-8?q?2ch=20API=E5=AF=BE=E5=BF=9C=E3=83=91?= =?UTF-8?q?=E3=83=83=E3=83=81=E9=81=A9=E7=94=A8=E3=80=80http://anago.2ch.n?= =?UTF-8?q?et/test/read.cgi/software/1406547695/983?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 1 + conf/conf_user_def.inc.php | 17 +++ lib/ThreadRead.php | 275 ++++++++++++++++++++++++++++++++++++- lib/auth2chapi.inc.php | 92 +++++++++++++ rep2/edit_conf_user.php | 18 +++ 5 files changed, 402 insertions(+), 1 deletion(-) create mode 100644 lib/auth2chapi.inc.php diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 84e50e2c7..2fec7aee8 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -262,6 +262,7 @@ function p2_init() 'auth_user_file' => 'p2_auth_user.php', // �F�؃��[�U�ݒ�t�@�C��(�f�[�^PHP) 'login_log_file' => 'p2_login.log.php', // ���O�C������ (�f�[�^PHP) 'login_failed_log_file' => 'p2_login_failed.dat.php', // ���O�C�����s���� (�f�[�^PHP) + 'sid2chapi_php' => 'p2_sid2chapi.php', // 2ch API�Z�b�V����ID�L�^�t�@�C�� (�f�[�^PHP) ); foreach ($preferences as $k => $v) { $_conf[$k] = $_conf['pref_dir'] . '/' . $v; diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index 644e4fe4f..7ba4dae49 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -373,6 +373,23 @@ $conf_user_def['ngaborn_purge_aborn'] = 0; // (0) $conf_user_rad['ngaborn_purge_aborn'] = array('1' => '�͂�', '0' => '������'); +// }}} +// {{{ 2ch API + +// 2ch API ���g�p���� +$conf_user_def['2chapi_use'] = 1; // (1) +$conf_user_rad['2chapi_use'] = array('1' => '����', '0' => '���Ȃ�'); + +// 2ch API �F�؎��Ɂ�(�Q�l)ID�𑗐M���� +$conf_user_def['2chapi_rounin'] = 0; // (0) +$conf_user_rad['2chapi_rounin'] = array('1' => '����', '0' => '���Ȃ�'); + +// APPKey +$conf_user_def['2chapi_appkey'] = ""; // ("") + +// HMKey +$conf_user_def['2chapi_hmkey'] = ""; // ("") + // }}} // {{{ ETC diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 04680be75..e6e13f5c5 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -113,12 +113,282 @@ public function downloadDat() // 2ch or 2ch�݊� } elseif (P2Util::isHost2chs($this->host) && !empty($_GET['shirokuma'])) { - $this->_downloadDat2chMaru($uaMona, $SID2ch, 'shirokuma'); + $this->_downloadDat2chMaru($uaMona, $SID2ch, 'shirokuma'); + //2ch ��API�o�R�ŗ��Ƃ� + } elseif (P2Util::isHost2chs($this->host) && $_conf['2chapi_use'] == 1 && empty($_GET['olddat'])) { + $AppKey = $_conf['2chapi_appkey']; + $HMKey = $_conf['2chapi_hmkey']; + + // ���O�C�����ĂȂ���� or ���O�C����A55���ȏ�o�߂��Ă����玩���ă��O�C�� + if (!file_exists($_conf['sid2chapi_php']) || + !empty($_REQUEST['relogin2chapi']) || + (filemtime($_conf['sid2chapi_php']) < time() - 60*55)) + { + if (!function_exists('authenticate_2chapi')) { + include P2_LIB_DIR . '/auth2chapi.inc.php'; + } + if (!authenticate_2chapi($AppKey,$HMKey)) { + $this->getdat_error_msg_ht .= $this->get2chDatError(); + $this->diedat = true; + return false; + } + } + + include $_conf['sid2chapi_php']; + $this->_downloadDat2chAPI($AppKey,$HMKey,$SID2chAPI,$this->length); } else { + //2ch �ȊO�̊O���� // DAT������DL���� $this->_downloadDat2ch($this->length); } + } + } + + // }}} + // {{{ _downloadDat2chAPI() + + /** + * 2chAPI�� DAT �������_�E�����[�h���� + * + * @return mix �擾�ł������A�X�V���Ȃ������ꍇ��true��Ԃ� + */ + protected function _downloadDat2chAPI($AppKey,$HMKey,$sid,$from_bytes) + { + global $_conf; + global $debug; + + if (!($this->host && $this->bbs && $this->key)) { + return false; + } + + if ($sid == '') { + return false; + } + + $from_bytes = intval($from_bytes); + + if ($from_bytes == 0) { + $zero_read = true; + } else { + $zero_read = false; + $from_bytes = $from_bytes - 1; + } + + $serverName = explode('.', $this->host); + //$url = "http://{$this->host}/{$this->bbs}/dat/{$this->key}.dat"; + //$url="http://news2.2ch.net/test/read.cgi?bbs=newsplus&key=1038486598"; + $url = 'https://api.2ch.net/v1/'.$serverName[0].'/'.$this->bbs.'/'.$this->key; + $message = '/v1/'.$serverName[0].'/'.$this->bbs.'/'.$this->key.$sid.$AppKey; + $HB = hash_hmac("sha256", $message, $HMKey); + + $headers = "User-Agent: Mozilla/3.0 (compatible; JaneStyle/3.80��)\r\n"; + $headers .= "Connection: close\r\n"; + $headers .= "Content-Type: application/x-www-form-urlencoded\r\n"; + + $purl = parse_url($url); // URL���� + + if (!$zero_read) { + $headers .= "Range: bytes={$from_bytes}-\r\n"; + } + + if ($this->modified) { + $headers .= "If-Modified-Since: {$this->modified}\r\n"; + } + + // Basic�F�ؗp�̃w�b�_ + if (isset($purl['user']) && isset($purl['pass'])) { + $headers .= "Authorization: Basic ".base64_encode($purl['user'].":".$purl['pass'])."\r\n"; + } + + $post_values = array( + 'sid' => $sid, + 'hobo' => $HB, + 'appkey' => $AppKey, + ); + + $http = array( + 'method' => 'POST', + 'header' => $headers, + 'ignore_errors'=> true, + 'content' => http_build_query($post_values), + ); + + // �v���L�V + if ($_conf['proxy_use']) { + $http += array('proxy' => 'tcp://'.$_conf['proxy_host'].":".$_conf['proxy_port']); + $http += array('request_fulluri' => true); + } + + $options = array('http' => $http); + + // WEB�T�[�o�֐ڑ� + $fp = @fopen($url, 'r', false, stream_context_create($options)); + if (!$fp) { + self::_pushInfoConnectFailed($url, $errno, $errstr); + $this->diedat = true; + return false; + } + stream_set_timeout($fp, $_conf['http_read_timeout'], 0); + + $body = ''; + $code = null; + $start_here = false; + while (!p2_stream_eof($fp, $timed_out)) { + + if ($start_here) { + + if ($code == '200' || $code == '206') { + + while (!p2_stream_eof($fp, $timed_out)) { + $body .= fread($fp, 4096); + } + + if ($timed_out) { + self::_pushInfoReadTimedOut($url); + $this->diedat = true; + fclose($fp); + return false; + } + //1�s�ڂ������؂�o�� + $firstmsg = substr($body, 0, 50); + if(strstr($firstmsg, 'ng')) { + //ng�Ŏn�܂��Ă���api�̃G���[ + fclose($fp); + if (strstr($firstmsg, "not valid")) { + //sid�������ɂȂ����”\���B�������F�؂��邽�ߍŏ������蒼���B + if (empty($_REQUEST['relogin2chapi'])) { + $_REQUEST['relogin2chapi'] = true; + return $this->downloadDat(); + } + } + $this->getdat_error_msg_ht .= "

        rep2 error: API�o�R�ł̃X���b�h�擾�Ɏ��s���܂����B".trim($firstmsg)."

        "; + $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&relogin2chapi=true\">API�ōĎ擾�����݂�]"; + $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&olddat=true\">��dat�ōĎ擾�����݂�]"; + $this->diedat = true; + return false; + + } + unset($firstmsg); + + // �����̉��s�ł��ځ[��`�F�b�N + if (!$zero_read) { + if (substr($body, 0, 1) != "\n") { + //echo "���ځ[�񌟏o"; + fclose($fp); + $this->onbytes = 0; + $this->modified = null; + return $this->_downloadDat2chAPI($AppKey,$HMKey,$sid,0); // ���ځ[�񌟏o�B�S����蒼���B + } + $body = substr($body, 1); + } + + $file_append = ($zero_read) ? 0 : FILE_APPEND; + + if (FileCtl::file_write_contents($this->keydat, $body, $file_append) === false) { + p2die('cannot write file.'); + } + + //$GLOBALS['debug'] && $GLOBALS['profiler']->enterSection("dat_size_check"); + // �擾��T�C�Y�`�F�b�N + if ($zero_read == false && $this->onbytes) { + $this->getDatBytesFromLocalDat(); // $aThread->length ��set + if ($this->onbytes != $this->length) { + fclose($fp); + $this->onbytes = 0; + $this->modified = null; + P2Util::pushInfoHtml("

        rep2 info: {$this->onbytes}/{$this->length} �t�@�C���T�C�Y���ςȂ̂ŁAdat���Ď擾

        "); + //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection("dat_size_check"); + return $this->_downloadDat2chAPI($AppKey,$HMKey,$sid,0); //dat�T�C�Y�͕s���B�S����蒼���B + + // �T�C�Y�������Ȃ炻�̂܂� + } elseif ($this->onbytes == $this->length) { + fclose($fp); + $this->isonline = true; + //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('dat_size_check'); + return true; + } + } + //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('dat_size_check'); + + // �X���b�h���Ȃ��Ɣ��f + } else { + fclose($fp); + return $this->_downloadDat2chNotFound($code); + } + + } else { + $meta = stream_get_meta_data($fp); + foreach($meta['wrapper_data'] as $l) + { + // ex) HTTP/1.1 304 Not Modified + if (preg_match('@^HTTP/1\\.\\d (\\d+) (.+)@i', $l, $matches)) { + $code = $matches[1]; + + if ($code == '200' || $code == '206') { // Partial Content + ; + + } elseif ($code == '302') { // Found + + // �z�X�g�̈ړ]��ǐ� + $new_host = BbsMap::getCurrentHost($this->host, $this->bbs); + if ($new_host != $this->host) { + fclose($fp); + $this->old_host = $this->host; + $this->host = $new_host; + return $this->_downloadDat2chAPI($AppKey,$HMKey,$sid,$from_bytes); + } else { + fclose($fp); + return $this->_downloadDat2chNotFound($code); + } + + } elseif ($code == '304') { // Not Modified + fclose($fp); + $this->isonline = true; + return '304 Not Modified'; + + } elseif ($code == '416') { // Requested Range Not Satisfiable + //echo "���ځ[�񌟏o"; + fclose($fp); + $this->onbytes = 0; + $this->modified = null; + return $this->_downloadDat2chAPI($AppKey,$HMKey,$sid,0); // ���ځ[�񌟏o�B�S����蒼���B + + } else { + fclose($fp); + return $this->_downloadDat2chNotFound($code); + } + } + + if ($zero_read) { + if (preg_match('/^Content-Length: ([0-9]+)/i', $l, $matches)) { + $this->onbytes = intval($matches[1]); + } + } else { + + if (preg_match('@^Content-Range: bytes ([^/]+)/([0-9]+)@i', $l, $matches)) { + $this->onbytes = intval($matches[2]); + } + + } + + if (preg_match('/^Last-Modified: (.+)/i', $l, $matches)) { + //echo $matches[1] . '
        '; //debug + $this->modified = $matches[1]; + } + } + $start_here = true; + } + } + + fclose($fp); + if ($timed_out) { + self::_pushInfoReadTimedOut($url); + $this->diedat = true; + return false; + } else { + $this->isonline = true; + return true; } } @@ -760,6 +1030,9 @@ public function get2chDatError($code = null) $reason = 'kakohtml'; } } + } elseif (P2Util::isHost2chs($this->host) && $code == '404') { + //API�̈�404��������ߋ����O�ƌ��߂‚��Ƃ��ifix Here�j + $reason = 'datochi'; } $read_url = "http://{$this->host}/test/read.cgi/{$this->bbs}/{$this->key}/"; diff --git a/lib/auth2chapi.inc.php b/lib/auth2chapi.inc.php new file mode 100644 index 000000000..dc697b8c6 --- /dev/null +++ b/lib/auth2chapi.inc.php @@ -0,0 +1,92 @@ + $login2chID, + 'PW' => $login2chPW, + 'KY' => $AppKey, + 'CT' => $CT, + 'HB' => $HB, + ); + $options = array('http' => array( + 'ignore_errors' => true, + 'method' => 'POST', + 'header' => implode("\r\n", array( + 'User-Agent: Monazilla/1.3', + 'X-2ch-UA: JaneStyle/3.80', + 'Content-Type: application/x-www-form-urlencoded', + )), + 'content' => http_build_query($values), + )); + + // �v���L�V + if ($_conf['proxy_use']) { + $options['http'] += array('proxy' => 'tcp://'.$_conf['proxy_host'].":".$_conf['proxy_port']); + $options['http'] += array('request_fulluri' => true); + } + + $response = ''; + $response = file_get_contents($url, false, stream_context_create($options)); + + if(file_exists($_conf['sid2chapi_php'])) { + unlink($_conf['sid2chapi_php']); + } + + if (strpos($response, ':') != false) + { + $sid = explode(':', $response); + + P2Util::pushInfoHtml($response); + + if($sid[0]!='SESSION-ID=Monazilla/1.00') { + P2Util::pushInfoHtml("

        p2 Error: 2ch API ��SessionID���擾�o���܂���ł����B

        "); + return ''; + } + + $cont = sprintf('p2 Error: {$_conf['sid2chapi_php']} ��ۑ��ł��܂���ł����B���O�C���o�^���s�B

        "); + return ''; + } + + return $sid[1]; + } + + return ''; + } +// }}} + +/* + * Local Variables: + * mode: php + * coding: cp932 + * tab-width: 4 + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ +// vim: set syn=php fenc=cp932 ai et ts=4 sw=4 sts=4 fdm=marker: diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index 1dcc97fcd..11a52d760 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -359,6 +359,24 @@ printEditConfGroupHtml($groupname, $conflist, $flags); } +// }}} +// {{{ '2ch API' + +$groupname = '2ch API'; +$groups[] = $groupname; +$flags = getGroupShowFlags($groupname); +if ($flags & P2_EDIT_CONF_USER_SKIPPED) { + $keep_old = true; +} else { + $conflist = array( + array('2chapi_use','2ch API ���g�p����'), + array('2chapi_rounin','2ch API �F�؎��Ɂ�(�Q�l)ID�𑗐M����(�l���@�\)'), + array('2chapi_appkey','AppKey'), + array('2chapi_hmkey','HMkey'), + ); + printEditConfGroupHtml($groupname, $conflist, $flags); +} + // }}} // {{{ ETC From e9a4c419604fd5d3d176e1fc92a4571d6ec6a6ea Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Wed, 4 Mar 2015 22:48:29 +0900 Subject: [PATCH 028/339] =?UTF-8?q?2ch=20API=E3=81=AE=E8=AA=8D=E8=A8=BC?= =?UTF-8?q?=E3=82=92=E5=B7=A6=E3=83=A1=E3=83=8B=E3=83=A5=E3=83=BC=E3=81=AE?= =?UTF-8?q?=E3=83=AD=E3=82=B0=E3=82=A4=E3=83=B3=E7=AE=A1=E7=90=86=E3=81=8B?= =?UTF-8?q?=E3=82=89=E6=89=8B=E5=8B=95=E3=81=A7=E5=87=BA=E6=9D=A5=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F=E3=80=82=202ch=20?= =?UTF-8?q?API=E3=81=AE=E8=AA=8D=E8=A8=BC=E9=96=93=E9=9A=94=E3=82=92?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E3=81=97=E3=81=9F=E3=80=82=20debug=E7=94=A8=E3=81=AE?= =?UTF-8?q?=E3=83=A1=E3=83=83=E3=82=BB=E3=83=BC=E3=82=B8=E3=81=8C=E5=87=BA?= =?UTF-8?q?=E3=81=A3=E3=81=B1=E3=81=AA=E3=81=97=E3=81=A0=E3=81=A3=E3=81=9F?= =?UTF-8?q?=E3=81=AE=E3=81=A7=E8=A8=AD=E5=AE=9A=E3=81=A7=E5=88=87=E3=82=8A?= =?UTF-8?q?=E6=9B=BF=E3=81=88=E3=82=8B=E3=81=93=E3=81=A8=E3=81=8C=E5=87=BA?= =?UTF-8?q?=E6=9D=A5=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf_user_def.inc.php | 11 +++ lib/ThreadRead.php | 25 +++--- lib/auth2chapi.inc.php | 17 +++- rep2/auth2chapi.php | 162 +++++++++++++++++++++++++++++++++++++ rep2/edit_conf_user.php | 7 ++ rep2/setting.php | 1 + 6 files changed, 208 insertions(+), 15 deletions(-) create mode 100644 rep2/auth2chapi.php diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index 7ba4dae49..55cfaeb4e 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -384,12 +384,23 @@ $conf_user_def['2chapi_rounin'] = 0; // (0) $conf_user_rad['2chapi_rounin'] = array('1' => '����', '0' => '���Ȃ�'); +// 2ch API �F�؂���Ԋu(�P��:����) +$conf_user_def['2chapi_interval'] = 1; // (1) +$conf_user_rules['2chapi_interval'] = array('emptyToDef', 'notIntExceptMinusToDef'); + // APPKey $conf_user_def['2chapi_appkey'] = ""; // ("") // HMKey $conf_user_def['2chapi_hmkey'] = ""; // ("") +// AppName +$conf_user_def['2chapi_appname'] = ""; // ("") + +// �f�o�b�O�p�̏����o�͂��� +$conf_user_def['2chapi_debug_print'] = 0; // (0) +$conf_user_rad['2chapi_debug_print'] = array('1' => '����', '0' => '���Ȃ�'); + // }}} // {{{ ETC diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index e6e13f5c5..68d4b7b9c 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -116,18 +116,16 @@ public function downloadDat() $this->_downloadDat2chMaru($uaMona, $SID2ch, 'shirokuma'); //2ch ��API�o�R�ŗ��Ƃ� } elseif (P2Util::isHost2chs($this->host) && $_conf['2chapi_use'] == 1 && empty($_GET['olddat'])) { - $AppKey = $_conf['2chapi_appkey']; - $HMKey = $_conf['2chapi_hmkey']; - // ���O�C�����ĂȂ���� or ���O�C����A55���ȏ�o�߂��Ă����玩���ă��O�C�� + // ���O�C�����ĂȂ���� or ���O�C����A�ݒ肵�����Ԍo�߂��Ă����玩���ă��O�C�� if (!file_exists($_conf['sid2chapi_php']) || !empty($_REQUEST['relogin2chapi']) || - (filemtime($_conf['sid2chapi_php']) < time() - 60*55)) + (filemtime($_conf['sid2chapi_php']) < time() - 60*60*$_conf['2chapi_interval'])) { if (!function_exists('authenticate_2chapi')) { include P2_LIB_DIR . '/auth2chapi.inc.php'; } - if (!authenticate_2chapi($AppKey,$HMKey)) { + if (!authenticate_2chapi()) { $this->getdat_error_msg_ht .= $this->get2chDatError(); $this->diedat = true; return false; @@ -135,7 +133,7 @@ public function downloadDat() } include $_conf['sid2chapi_php']; - $this->_downloadDat2chAPI($AppKey,$HMKey,$SID2chAPI,$this->length); + $this->_downloadDat2chAPI($SID2chAPI,$this->length); } else { //2ch �ȊO�̊O���� // DAT������DL���� @@ -152,11 +150,14 @@ public function downloadDat() * * @return mix �擾�ł������A�X�V���Ȃ������ꍇ��true��Ԃ� */ - protected function _downloadDat2chAPI($AppKey,$HMKey,$sid,$from_bytes) + protected function _downloadDat2chAPI($sid,$from_bytes) { global $_conf; global $debug; + $AppKey = $_conf['2chapi_appkey']; + $AppName = $_conf['2chapi_appname']; + $HMKey = $_conf['2chapi_hmkey']; if (!($this->host && $this->bbs && $this->key)) { return false; } @@ -181,7 +182,7 @@ protected function _downloadDat2chAPI($AppKey,$HMKey,$sid,$from_bytes) $message = '/v1/'.$serverName[0].'/'.$this->bbs.'/'.$this->key.$sid.$AppKey; $HB = hash_hmac("sha256", $message, $HMKey); - $headers = "User-Agent: Mozilla/3.0 (compatible; JaneStyle/3.80��)\r\n"; + $headers = "User-Agent: Mozilla/3.0 (compatible; ${AppName})\r\n"; $headers .= "Connection: close\r\n"; $headers .= "Content-Type: application/x-www-form-urlencoded\r\n"; @@ -278,7 +279,7 @@ protected function _downloadDat2chAPI($AppKey,$HMKey,$sid,$from_bytes) fclose($fp); $this->onbytes = 0; $this->modified = null; - return $this->_downloadDat2chAPI($AppKey,$HMKey,$sid,0); // ���ځ[�񌟏o�B�S����蒼���B + return $this->_downloadDat2chAPI($sid,0); // ���ځ[�񌟏o�B�S����蒼���B } $body = substr($body, 1); } @@ -299,7 +300,7 @@ protected function _downloadDat2chAPI($AppKey,$HMKey,$sid,$from_bytes) $this->modified = null; P2Util::pushInfoHtml("

        rep2 info: {$this->onbytes}/{$this->length} �t�@�C���T�C�Y���ςȂ̂ŁAdat���Ď擾

        "); //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection("dat_size_check"); - return $this->_downloadDat2chAPI($AppKey,$HMKey,$sid,0); //dat�T�C�Y�͕s���B�S����蒼���B + return $this->_downloadDat2chAPI($sid,0); //dat�T�C�Y�͕s���B�S����蒼���B // �T�C�Y�������Ȃ炻�̂܂� } elseif ($this->onbytes == $this->length) { @@ -336,7 +337,7 @@ protected function _downloadDat2chAPI($AppKey,$HMKey,$sid,$from_bytes) fclose($fp); $this->old_host = $this->host; $this->host = $new_host; - return $this->_downloadDat2chAPI($AppKey,$HMKey,$sid,$from_bytes); + return $this->_downloadDat2chAPI($sid,$from_bytes); } else { fclose($fp); return $this->_downloadDat2chNotFound($code); @@ -352,7 +353,7 @@ protected function _downloadDat2chAPI($AppKey,$HMKey,$sid,$from_bytes) fclose($fp); $this->onbytes = 0; $this->modified = null; - return $this->_downloadDat2chAPI($AppKey,$HMKey,$sid,0); // ���ځ[�񌟏o�B�S����蒼���B + return $this->_downloadDat2chAPI($sid,0); // ���ځ[�񌟏o�B�S����蒼���B } else { fclose($fp); diff --git a/lib/auth2chapi.inc.php b/lib/auth2chapi.inc.php index dc697b8c6..8739ff377 100644 --- a/lib/auth2chapi.inc.php +++ b/lib/auth2chapi.inc.php @@ -11,16 +11,24 @@ * * @return mix �擾�ł����ꍇ��SID��Ԃ� */ - function authenticate_2chapi($AppKey, $HMKey) + function authenticate_2chapi() { global $_conf; $url = 'https://api.2ch.net/v1/auth/'; $CT = time(); + $AppKey = $_conf['2chapi_appkey']; + $AppName = $_conf['2chapi_appname']; + $HMKey = $_conf['2chapi_hmkey']; $login2chID = ""; $login2chPW = ""; $message = $AppKey.$CT; $HB = hash_hmac("sha256", $message, $HMKey); + if(empty($AppKey) || empty($AppName) || empty($HMKey)) { + P2Util::pushInfoHtml("

        p2 Error: 2ch API �̔F�؂ɕK�v�ȏ�񂪐ݒ肳��Ă��܂���B

        "); + return ''; + } + if ($_conf['2chapi_rounin'] == 1&& $array = P2Util::readIdPw2ch()) { list($login2chID, $login2chPW, $autoLogin2ch) = $array; } @@ -37,7 +45,7 @@ function authenticate_2chapi($AppKey, $HMKey) 'method' => 'POST', 'header' => implode("\r\n", array( 'User-Agent: Monazilla/1.3', - 'X-2ch-UA: JaneStyle/3.80', + 'X-2ch-UA: '.$AppName, 'Content-Type: application/x-www-form-urlencoded', )), 'content' => http_build_query($values), @@ -60,7 +68,10 @@ function authenticate_2chapi($AppKey, $HMKey) { $sid = explode(':', $response); - P2Util::pushInfoHtml($response); + if($_conf['2chapi_debug_print']==1) + { + P2Util::pushInfoHtml($response); + } if($sid[0]!='SESSION-ID=Monazilla/1.00') { P2Util::pushInfoHtml("

        p2 Error: 2ch API ��SessionID���擾�o���܂���ł����B

        "); diff --git a/rep2/auth2chapi.php b/rep2/auth2chapi.php new file mode 100644 index 000000000..e415cffc5 --- /dev/null +++ b/rep2/auth2chapi.php @@ -0,0 +1,162 @@ +authorize(); // ���[�U�F�� + +//================================================================ +// �ϐ� +//================================================================ +global $_conf; +$AppKey = $_conf['2chapi_appkey']; +$AppName = $_conf['2chapi_appname']; +$HMKey = $_conf['2chapi_hmkey']; + +//============================================================== +// 2ch���O�C������ +//============================================================== +if (isset($_GET['login2chapi'])) { + if ($_GET['login2chapi'] == "in") { + require_once P2_LIB_DIR . '/auth2chapi.inc.php'; + authenticate_2chapi(); + } elseif ($_GET['login2chapi'] == "out") { + if (file_exists($_conf['sid2chapi_php'])) { + unlink($_conf['sid2chapi_php']); + } + } +} + +//================================================================ +// �w�b�_ +//================================================================ +if ($_conf['ktai']) { + $login_st = "۸޲�"; + $logout_st = "۸ޱ��"; + $password_st = "�߽ܰ��"; +} else { + $login_st = "���O�C��"; + $logout_st = "���O�A�E�g"; + $password_st = "�p�X���[�h"; +} + +if (file_exists($_conf['sid2chapi_php'])) { // 2ch���������� + $ptitle = "��2ch API �F�؊Ǘ�"; +} else { + $ptitle = "2ch API �F�؊Ǘ�"; +} + +P2Util::header_nocache(); +echo $_conf['doctype']; +echo << + + + + + + {$_conf['extra_headers_ht']} + {$ptitle}\n +EOP; + +if (!$_conf['ktai']) { + echo << + + + \n +EOP; +} + +$body_at = ($_conf['ktai']) ? $_conf['k_colors'] : ' onload="setWinTitle();"'; + +if (!$_conf['ktai']) { + echo <<���O�C���Ǘ� > {$ptitle}

        +EOP; +} + +P2Util::printInfoHtml(); + +//================================================================ +// 2ch API ���O�C���t�H�[�� +//================================================================ + +// ���O�C�����Ȃ� +if (file_exists($_conf['sid2chapi_php'])) { + $idsub_str = "�ĔF�؂���"; + $form_now_log = << + ���݁A2�����˂� API �F�ؒ��ł� + {$_conf['k_input_ht']} + + + \n +EOFORM; + +} else { + $idsub_str = "�F�؂���"; + $form_now_log = "2�����˂� API �F�؂��Ă��܂���

        "; +} + +if ($autoLogin2ch) { + $autoLogin2ch_checked = ' checked="checked"'; +} else { + $autoLogin2ch_checked = ''; +} + +$tora3_url = "http://2ch.tora3.net/"; +$tora3_url_r = P2Util::throughIme($tora3_url); + +if (!$_conf['ktai']) { + $id_input_size_at = " size=\"30\""; + $pass_input_size_at = " size=\"24\""; +} + +// �v�����g ================================= +echo "
        "; +echo $form_now_log; +echo "
        "; + +if ($_conf['ktai']) { + echo "
        "; +} + +echo << + {$_conf['k_input_ht']} + AppKey: "{$AppKey}"
        + HMKey: "{$HMKey}"
        + AppName: "{$AppName}"
        + �F�؏������[�U�ݒ�ҏW�ŕύX�ł��܂��B
        + + +\n +EOFORM; + +if ($_conf['ktai']) { + echo "
        "; +} + +//================================================================ +// �t�b�^HTML�\�� +//================================================================ + +if ($_conf['ktai']) { + echo "
        {$_conf['k_to_index_ht']}
        "; +} + +echo ''; + +/* + * Local Variables: + * mode: php + * coding: cp932 + * tab-width: 4 + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ +// vim: set syn=php fenc=cp932 ai et ts=4 sw=4 sts=4 fdm=marker: diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index 11a52d760..d4eee2a71 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -371,8 +371,15 @@ $conflist = array( array('2chapi_use','2ch API ���g�p����'), array('2chapi_rounin','2ch API �F�؎��Ɂ�(�Q�l)ID�𑗐M����(�l���@�\)'), + array('2chapi_interval','2ch API �F�؂���Ԋu(�P��:����)'), + //'API �L�[', + 'API�F�؏��', array('2chapi_appkey','AppKey'), array('2chapi_hmkey','HMkey'), + array('2chapi_appname','AppName API�ɑ��M����A�v���P�[�V������ ��:Hoge/1.00'), + '�f�o�b�O�p', + array('2chapi_debug_print','�f�o�b�O�p�̏����o�͂���'), + '�F�؏���ύX�����ꍇ�ĔF�؂��Ă�������', ); printEditConfGroupHtml($groupname, $conflist, $flags); } diff --git a/rep2/setting.php b/rep2/setting.php index 743daa377..e4b86d094 100644 --- a/rep2/setting.php +++ b/rep2/setting.php @@ -90,6 +90,7 @@ EOP; From 4111e7e537e9dceb6304850485d2172c458c714b Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 5 Mar 2015 08:38:49 +0900 Subject: [PATCH 029/339] =?UTF-8?q?=E3=82=B9=E3=83=AC=E3=82=BF=E3=82=A4?= =?UTF-8?q?=E6=A4=9C=E7=B4=A2=E3=81=A7=E8=A1=A8=E7=A4=BA=E4=BB=B6=E6=95=B0?= =?UTF-8?q?=E3=81=8C=E6=8C=87=E5=AE=9A=E3=81=95=E3=82=8C=E3=81=A6=E3=81=84?= =?UTF-8?q?=E3=81=AA=E3=81=84=E3=81=A8=E3=81=8D=E3=81=AF50=E4=BB=B6?= =?UTF-8?q?=E3=81=A8=E8=A6=8B=E3=81=AA=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/tgrepc.php | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/rep2/tgrepc.php b/rep2/tgrepc.php index 71df610fc..e1d4ac85b 100644 --- a/rep2/tgrepc.php +++ b/rep2/tgrepc.php @@ -45,7 +45,11 @@ $query_params['q'] = mb_convert_kana($_GET['Q'], 's'); $query_params['n'] = $limit = ($_conf['ktai'] || $_conf['iphone']) ? '25' : '100'; if (isset($_GET['AndOr'])) { $query_params['AndOr'] = $_GET['AndOr'];} - if (isset($_GET['maxResult'])) { $query_params['maxResult'] = $_GET['maxResult'];} + if (isset($_GET['maxResult'])) { + $query_params['maxResult'] = $_GET['maxResult']; + } else { + $query_params['maxResult'] = '50'; + } if (isset($_GET['Sort'])) { $query_params['Sort'] = $_GET['Sort'];} if (isset($_GET['Link'])) { $query_params['Link'] = $_GET['Link'];} if (isset($_GET['924'])) { $query_params['924'] = $_GET['924'];} @@ -348,23 +352,23 @@ function tgrep_search($query) { global $_conf; if (!$_conf['test.search_dig2ch']) { - $client = new HTTP_Client(); - $client->setDefaultHeader('User-Agent', 'p2-tgrep-client'); - $code = $client->get($_conf['expack.tgrep_url'] . '?' . $query); - if (PEAR::isError($code)) { - p2die($code->getMessage()); - } elseif ($code != 200) { - p2die("HTTP Error - {$code}"); - } - $response = $client->currentResponse(); - $result = unserialize($response['body']); - if (!$result) { - p2die('Error: �������ʂ̓W�J�Ɏ��s���܂����B'); - } - return $result; + $client = new HTTP_Client(); + $client->setDefaultHeader('User-Agent', 'p2-tgrep-client'); + $code = $client->get($_conf['expack.tgrep_url'] . '?' . $query); + if (PEAR::isError($code)) { + p2die($code->getMessage()); + } elseif ($code != 200) { + p2die("HTTP Error - {$code}"); + } + $response = $client->currentResponse(); + $result = unserialize($response['body']); + if (!$result) { + p2die('Error: �������ʂ̓W�J�Ɏ��s���܂����B'); + } + return $result; } else { - require_once './dig2ch.php'; - return dig2chsearch($query); // �lj� + require_once './dig2ch.php'; + return dig2chsearch($query); // �lj� } } From ebfa7b1c55e5333c13df8d5ace23b862a799b683 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 5 Mar 2015 09:24:23 +0900 Subject: [PATCH 030/339] =?UTF-8?q?=E3=82=B9=E3=83=AC=E3=82=BF=E3=82=A4?= =?UTF-8?q?=E6=A4=9C=E7=B4=A2=E3=83=9A=E3=83=BC=E3=82=B8=E4=B8=8A=E4=B8=8B?= =?UTF-8?q?=E3=81=AE=E6=A4=9C=E7=B4=A2=E3=83=9C=E3=82=BF=E3=83=B3=E3=82=92?= =?UTF-8?q?=E3=82=AF=E3=83=AA=E3=83=83=E3=82=AF=E3=81=97=E3=81=9F=E3=81=A8?= =?UTF-8?q?=E3=81=8D=E3=81=AB=E5=B7=A6=E3=83=A1=E3=83=8B=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E3=81=8B=E3=82=89=E6=8C=87=E5=AE=9A=E3=81=97=E3=81=9F=E6=A4=9C?= =?UTF-8?q?=E7=B4=A2=E6=9D=A1=E4=BB=B6=E3=82=92=E5=BC=95=E3=81=8D=E7=B6=99?= =?UTF-8?q?=E3=81=90=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4=20dig2ch?= =?UTF-8?q?=E3=81=AE=E5=BA=83=E5=91=8A=E8=A1=A8=E7=A4=BA=E4=BD=8D=E7=BD=AE?= =?UTF-8?q?=E3=82=92=E6=9C=AB=E5=B0=BE=E3=81=AB=E5=A4=89=E6=9B=B4=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/expack/tgrep/view.inc.php | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/lib/expack/tgrep/view.inc.php b/lib/expack/tgrep/view.inc.php index 7b3ca63ee..25f23fb0a 100644 --- a/lib/expack/tgrep/view.inc.php +++ b/lib/expack/tgrep/view.inc.php @@ -61,6 +61,10 @@ function sf() {
        /> + + + +
        @@ -91,12 +95,6 @@ function sf() { - - - - - -
        @@ -179,6 +177,13 @@ function sf() { + + + + + + +
        @@ -189,6 +194,10 @@ function sf() {
        /> + + + +
        From 359294ddfae4cae4c2aa8fab8ba0ede70d1b1017 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 5 Mar 2015 13:02:42 +0900 Subject: [PATCH 031/339] =?UTF-8?q?=E3=81=97=E3=81=9F=E3=82=89=E3=81=B0?= =?UTF-8?q?=E3=81=AE=E6=9B=B8=E3=81=8D=E8=BE=BC=E3=81=BF=E3=81=AB=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/post.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rep2/post.php b/rep2/post.php index d8ed63d59..ce42e20c2 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -398,7 +398,8 @@ function postIt($host, $bbs, $key, $post) $request = "{$method} {$send_path} HTTP/1.0\r\n"; $request .= "Host: {$URL['host']}\r\n"; $request .= "User-Agent: Monazilla/1.00 ({$_conf['p2ua']})\r\n"; - $request .= "Referer: http://{$URL['host']}/\r\n"; + //$request .= "Referer: http://{$URL['host']}/\r\n"; + $request .= "Referer: http://{$host}/{$bbs}/{$key}/\r\n"; // �N�b�L�[ $cookies_to_send = ''; From 51ee1a36d7feee21e47695f6473ea50d4e092bf5 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 5 Mar 2015 23:49:20 +0900 Subject: [PATCH 032/339] =?UTF-8?q?=E3=82=B9=E3=83=AC=E3=83=83=E3=83=89?= =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=88=E3=83=AB=E3=81=8B=E3=82=89=E8=91=97?= =?UTF-8?q?=E4=BD=9C=E6=A8=A9=E8=A1=A8=E8=A8=98=E3=82=92=E5=89=8A=E9=99=A4?= =?UTF-8?q?=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97?= =?UTF-8?q?=E3=81=9F=20=E3=83=A6=E3=83=BC=E3=82=B6=E3=83=BC=E8=A8=AD?= =?UTF-8?q?=E5=AE=9A=E2=86=92subject=E3=81=8B=E3=82=89ON=E3=81=AB=E3=81=99?= =?UTF-8?q?=E3=82=8B=E5=BF=85=E8=A6=81=E3=81=8C=E3=81=82=E3=82=8B=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf_user_def.inc.php | 8 ++++++++ lib/Thread.php | 8 ++++++++ rep2/edit_conf_user.php | 2 ++ 3 files changed, 18 insertions(+) diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index 55cfaeb4e..54ec25c95 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -101,6 +101,14 @@ $conf_user_def['cmp_title_norm'] = 0; // (0) $conf_user_rad['cmp_title_norm'] = array('1' => '����', '0' => '���Ȃ�'); +// �X���b�h�̃^�C�g�����璘�쌠�\�L���폜���� +$conf_user_def['delete_copyright'] = 0; // (0) +$conf_user_rad['delete_copyright'] = array('1' => '����', '0' => '���Ȃ�'); + +//�폜���钘�쌠�\�L�̕�����(�J���}��؂�) +$conf_user_def['delete_copyright.list'] = "[�]�ڋ֎~],©2ch.net"; +$conf_user_rules['delete_copyright.list'] = array('emptyToDef'); + // �g�щ{�����A��x�ɕ\������X���̐� $conf_user_def['mobile.sb_disp_range'] = 30; // (30) $conf_user_rules['mobile.sb_disp_range'] = array('emptyToDef', 'notIntExceptMinusToDef'); diff --git a/lib/Thread.php b/lib/Thread.php index 88dcb57b6..de6838704 100644 --- a/lib/Thread.php +++ b/lib/Thread.php @@ -156,6 +156,14 @@ public function __set($name, $value) */ public function setTtitle($ttitle) { + global $_conf; + + //���쌠�\�L������ + if ($_conf['delete_copyright']==1) { + foreach (explode (',',$_conf['delete_copyright.list']) as $value) { + $ttitle = str_replace($value,'',$ttitle); + } + } $this->ttitle = $ttitle; } diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index d4eee2a71..23f0b43bf 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -282,6 +282,8 @@ array('cmp_dayres_midoku', '�����\�[�g���ɐV�����X�̂���X����D��'), array('cmp_title_norm', '�^�C�g���\�[�g���ɑS�p���p�E�啶���������𖳎�'), array('viewall_kitoku', '�����X���͕\�������Ɋւ�炸�\��'), + array('delete_copyright', '�X���b�h�̃^�C�g�����璘�쌠�\�L���폜����'), + array('delete_copyright.list', '�폜���钘�쌠�\�L�̕�����(�J���}��؂�)'), ); printEditConfGroupHtml($groupname, $conflist, $flags); } From b26c63be5031a6404772f0811ce9381e5b3cfa45 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 6 Mar 2015 00:56:48 +0900 Subject: [PATCH 033/339] =?UTF-8?q?+live=E3=81=AE=E5=AE=9F=E6=B3=81?= =?UTF-8?q?=E7=94=BB=E9=9D=A2=E3=81=8B=E3=82=89=E3=81=97=E3=81=9F=E3=82=89?= =?UTF-8?q?=E3=81=B0=E3=81=AB=E6=9B=B8=E3=81=8D=E8=BE=BC=E3=82=81=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/live_post.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rep2/live_post.php b/rep2/live_post.php index 2387c29f4..bc6ae69ae 100755 --- a/rep2/live_post.php +++ b/rep2/live_post.php @@ -401,7 +401,7 @@ function postIt($host, $bbs, $key, $post) $request = "{$method} {$send_path} HTTP/1.0\r\n"; $request .= "Host: {$URL['host']}\r\n"; $request .= "User-Agent: Monazilla/1.00 ({$_conf['p2ua']})\r\n"; - $request .= "Referer: http://{$URL['host']}/\r\n"; + $request .= "Referer: http://{$host}/{$bbs}/{$key}/\r\n"; // �N�b�L�[ $cookies_to_send = ''; From fef53f142dcac7a55e21606096e1e775adf3ae82 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 6 Mar 2015 00:54:30 +0900 Subject: [PATCH 034/339] =?UTF-8?q?+live=E3=81=AE=E3=83=9C=E3=82=BF?= =?UTF-8?q?=E3=83=B3ON/OFF=E3=81=AE=E8=A8=AD=E5=AE=9A=E3=82=92=E4=BD=9C?= =?UTF-8?q?=E3=81=A3=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf_user_def_live.inc.php | 14 ++++++++++++++ rep2/edit_conf_user.php | 6 ++++++ 2 files changed, 20 insertions(+) diff --git a/conf/conf_user_def_live.inc.php b/conf/conf_user_def_live.inc.php index b42464f73..9ef4c138d 100755 --- a/conf/conf_user_def_live.inc.php +++ b/conf/conf_user_def_live.inc.php @@ -4,6 +4,20 @@ */ // {{{ ���\���ݒ� +// ������ +$conf_user_def['live.livebbs_list'] = "livesaturn,livevenus,liveuranus,endless,weekly,livewar,livefield,liveelection,livewkwest,livenhk,liveetv,liventv,livetbs,livecx,liveanb,livetx,livemx,livebs,livebs2,livewowow,liveskyp,liveradio,liveanime,kokkai,dome,livebase,livefoot,oonna,ootoko,dancesite,festival,jasmine,liveanarchy,livesangyou,livemarket1,livemarket2"; // ("livesaturn,livevenus,liveuranus,endless,weekly,livewar,livefield,liveelection,livewkwest,livenhk,liveetv,liventv,livetbs,livecx,liveanb,livetx,livemx,livebs,livebs2,livewowow,liveskyp,liveradio,liveanime,kokkai,dome,livebase,livefoot,oonna,ootoko,dancesite,festival,jasmine,liveanarchy,livesangyou,livemarket1,livemarket2") + +// �X���b�h�ꗗ�Ɏ����\���ւ̃����N��\������ +$conf_user_def['live.livelink_subject'] = "2"; // ("2") +$conf_user_sel['live.livelink_subject'] = array('2' => '�S�Ă̔‚ŕ\��', '1' => '�����‚̂ݕ\��', '0' => '�\�����Ȃ�'); + +// '���X�\���̃w�b�_�ƃt�b�^�[�Ɏ����\���ւ̃����N��\�� +$conf_user_def['live.livelink_thread'] = "2"; // ("2") +$conf_user_sel['live.livelink_thread'] = array('2' => '�S�Ă̔‚ŕ\��', '1' => '�����‚̂ݕ\��', '0' => '�\�����Ȃ�'); + +// �����‚̃X���b�h����Ɏ����p�\���ŊJ�� +$conf_user_def['live.livebbs_forcelive'] = 0; // (0) +$conf_user_rad['live.livebbs_forcelive'] = array('1' => '����', '0' => '���Ȃ�'); // ���X�\���̎�� $conf_user_def['live.view_type'] = "1"; // ("1") diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index 23f0b43bf..e1ce27bfb 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -860,6 +860,12 @@ $keep_old = true; } else { $conflist = array( + array('live.livebbs_list', '������(�J���}��؂�)'), + '�����p�\���ւ̃����N', + array('live.livelink_subject', '�X���b�h�ꗗ�Ɏ����p�\���ւ̃����N��\������'), + array('live.livelink_thread', '���X�\���̃w�b�_�ƃt�b�^�[�Ɏ����p�\���ւ̃����N��\������'), + array('live.livebbs_forcelive', '�����‚̃X���b�h����Ɏ����p�\���ŊJ��'), + '���X�\��', array('live.view_type', '���X�\���̎��'), array('live.id_b', 'ID������ O (�g��) P (����p2) Q (�t���u���E�U) i (iPhone)�𑾎���'), array('live.highlight_chain', '�A���n�C���C�g (�A���͈͂� ngaborn_chain_all �ɂĐݒ�)'), From 7c71d4827db5e8a4ab0728d707440780f7336417 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 6 Mar 2015 11:55:33 +0900 Subject: [PATCH 035/339] =?UTF-8?q?=E3=82=B9=E3=83=AC=E3=83=83=E3=83=89?= =?UTF-8?q?=E4=B8=80=E8=A6=A7=E3=81=AE=E5=AE=9F=E6=B3=81=E3=83=9C=E3=82=BF?= =?UTF-8?q?=E3=83=B3=E5=88=87=E3=82=8A=E6=9B=BF=E3=81=88=E6=A9=9F=E8=83=BD?= =?UTF-8?q?=E3=81=A8=E5=AE=9F=E6=B3=81=E6=9D=BF=E3=81=8C=E5=B8=B8=E3=81=AB?= =?UTF-8?q?=E5=AE=9F=E6=B3=81=E3=83=A2=E3=83=BC=E3=83=89=E3=81=AB=E3=81=AA?= =?UTF-8?q?=E3=82=8B=E6=A9=9F=E8=83=BD=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/sb_print.inc.php | 48 +++++++++++++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/lib/sb_print.inc.php b/lib/sb_print.inc.php index d7be3ebac..d738749d0 100644 --- a/lib/sb_print.inc.php +++ b/lib/sb_print.inc.php @@ -45,6 +45,17 @@ function sb_print($aThreadList) $ita_name_bool = false; } + // �����ł̂ݔ�������@�\��ON�̎��͔‚������‚��ǂ������f + $livebbs_bool = false; + if($_conf['live.livelink_subject']==1||$_conf['live.livebbs_forcelive']==1) { + foreach (explode (',',$_conf['live.livebbs_list']) as $value) { + if(strpos($aThreadList->bbs, $value) !== false) { + $livebbs_bool = true; + break; + } + } + } + $norefresh_q = '&norefresh=true'; $td = array('edit' => '', 'offrec' => '', 'unum' => '', 'rescount' => '', @@ -362,12 +373,16 @@ function sb_print($aThreadList) } $thre_url = "{$_conf['read_php']}?{$host_bbs_key_q}{$rescount_q}{$offline_q}{$word_q}{$anum_ht}"; - // +live �����N�\���ؑ� - $ttitle_en = UrlSafeBase64::encode($aThread->ttitle); - $ttitle_urlen = rawurlencode($ttitle_en); - $ttitle_en_q ="&ttitle_en=".$ttitle_urlen; + // +live �����N�\���ؑ� + if($_conf['live.livelink_subject']==2||$livebbs_bool) + { + $ttitle_en = UrlSafeBase64::encode($aThread->ttitle); + $ttitle_urlen = rawurlencode($ttitle_en); + $ttitle_en_q ="&ttitle_en=".$ttitle_urlen; - $live_url = "live_frame.php?{$host_bbs_key_q}&live=1{$ttitle_en_q}{$rescount_q}{$anum_ht}"; + $live_url = "live_frame.php?{$host_bbs_key_q}&live=1{$ttitle_en_q}{$rescount_q}{$anum_ht}"; + + } // �I�����[>>1 if ($only_one_bool) { @@ -441,22 +456,31 @@ function sb_print($aThreadList) $birthday = date('y/m/d', $aThread->key); // (y/m/d H:i) $td['birth'] = "{$birthday}\n"; + // +live �����{�^���̏��� + // +live �X���̃����N��������ɏ��������� + if($_conf['live.livebbs_forcelive']==1&&$livebbs_bool) { + $thre_url = $live_url; + } elseif (isset($live_url)) { + // +live ������ic2�̃T���l�C���쐬��onoff + if ($_conf['expack.ic2.enabled'] + && (!$_conf['live.ic2_onoff'])) { + $live_ic2_off = "onclick=\"javascript:parent.menu.ic2_menu_switch(0);\""; + } + $livelink_body = <<+live  +EOP; + } + //==================================================================================== // �X���b�h�ꗗ table �{�f�B HTML�v�����g //==================================================================================== - // +live ������ic2�̃T���l�C���쐬��onoff - if ($_conf['expack.ic2.enabled'] - && (!$_conf['live.ic2_onoff'])) { - $live_ic2_off = "onclick=\"javascript:parent.menu.ic2_menu_switch(0);\""; - } - // �{�f�B echo << {$td['edit']}{$td['offrec']}{$td['unum']}{$td['rescount']}{$td['one']}{$td['checkbox']}{$torder_ht}
        {$moto_thre_ht} -+live  +{$livelink_body} {$ttitle_ht}
        {$td['ita']}{$td['spd']}{$td['ikioi']}{$td['birth']}{$td['fav']}\n EOR; From 1ab5ba3b473a8898201e0988595f797476a75296 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 6 Mar 2015 13:27:20 +0900 Subject: [PATCH 036/339] =?UTF-8?q?=E3=82=B9=E3=83=AC=E8=A1=A8=E7=A4=BA?= =?UTF-8?q?=E3=81=AE=E3=83=98=E3=83=83=E3=83=80=E3=81=A8=E3=83=95=E3=83=83?= =?UTF-8?q?=E3=82=BF=E3=81=AB=E5=AE=9F=E6=B3=81=E3=83=AA=E3=83=B3=E3=82=AF?= =?UTF-8?q?=E3=82=92=E8=A1=A8=E7=A4=BA=E5=87=BA=E6=9D=A5=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F=E3=80=82=20=E7=B7=8F?= =?UTF-8?q?=E4=BB=95=E4=B8=8A=E3=81=92=E3=82=82=E5=90=AB=E3=82=80=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/read_header.inc.php | 24 +++++++++++++++++++++++- lib/sb_print.inc.php | 21 +++++++++------------ 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/lib/read_header.inc.php b/lib/read_header.inc.php index 844a56324..104d781b9 100755 --- a/lib/read_header.inc.php +++ b/lib/read_header.inc.php @@ -180,6 +180,28 @@ {$siml_thre_st} EOTOOLBAR; +// +live ���������N�\�� + +// �����\���ł͖����Ƃ��̂ݕ\�� +if(empty($_GET['live'])) { + $livebbs_bool = false; + // �����‚̂ݔ������m�F + if($_conf['live.livelink_thread']==1) { + foreach (explode (',',$_conf['live.livebbs_list']) as $value) { + if(strpos($aThread->bbs, $value) !== false) { + $livebbs_bool = true; + break; + } + } + } + //������or�S�Ă̔‚ŕ\������ݒ�ɂȂ��Ă���\�� + if($_conf['live.livelink_thread']==2||$livebbs_bool) + { + $toolbar_right_ht .= <<���� +EOTOOLBAR; + } +} //===================================== echo $_conf['doctype']; echo << //�����t���[�� 2�y�C���ŊJ�� | + document.writeln('�����t���[�� 2�y�C���ŊJ��<' + '/a> |'); } //]]> \n diff --git a/lib/sb_print.inc.php b/lib/sb_print.inc.php index d738749d0..c6f93b4d2 100644 --- a/lib/sb_print.inc.php +++ b/lib/sb_print.inc.php @@ -376,12 +376,8 @@ function sb_print($aThreadList) // +live �����N�\���ؑ� if($_conf['live.livelink_subject']==2||$livebbs_bool) { - $ttitle_en = UrlSafeBase64::encode($aThread->ttitle); - $ttitle_urlen = rawurlencode($ttitle_en); - $ttitle_en_q ="&ttitle_en=".$ttitle_urlen; - - $live_url = "live_frame.php?{$host_bbs_key_q}&live=1{$ttitle_en_q}{$rescount_q}{$anum_ht}"; - + // $ttitle_en_q �͐ߌ��ȗ� + $live_url = "live_frame.php?{$host_bbs_key_q}&live=1{$rescount_q}{$anum_ht}"; } // �I�����[>>1 @@ -457,15 +453,16 @@ function sb_print($aThreadList) $td['birth'] = "{$birthday}\n"; // +live �����{�^���̏��� + // +live ������ic2�̃T���l�C���쐬��onoff + if ($_conf['expack.ic2.enabled'] + && (!$_conf['live.ic2_onoff'])) { + $live_ic2_off = "onclick=\"javascript:parent.menu.ic2_menu_switch(0);\""; + } // +live �X���̃����N��������ɏ��������� if($_conf['live.livebbs_forcelive']==1&&$livebbs_bool) { + $thre_addtag = $live_ic2_off."target=\"_blank\""; $thre_url = $live_url; } elseif (isset($live_url)) { - // +live ������ic2�̃T���l�C���쐬��onoff - if ($_conf['expack.ic2.enabled'] - && (!$_conf['live.ic2_onoff'])) { - $live_ic2_off = "onclick=\"javascript:parent.menu.ic2_menu_switch(0);\""; - } $livelink_body = <<+live  EOP; @@ -481,7 +478,7 @@ function sb_print($aThreadList) {$td['edit']}{$td['offrec']}{$td['unum']}{$td['rescount']}{$td['one']}{$td['checkbox']}{$torder_ht}
        {$moto_thre_ht} {$livelink_body} -{$ttitle_ht}
        +{$ttitle_ht}
        {$td['ita']}{$td['spd']}{$td['ikioi']}{$td['birth']}{$td['fav']}\n EOR; From 235dee2f31532be040c154650fc1d2cc3e50f657 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 6 Mar 2015 14:08:20 +0900 Subject: [PATCH 037/339] =?UTF-8?q?.gitignore=E3=81=ABdata=E3=83=87?= =?UTF-8?q?=E3=82=A3=E3=83=AC=E3=82=AF=E3=83=88=E3=83=AA=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E3=80=82=20https://github.com/rsky/p2-php/pull/26?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 6c82ac0c5..25c8fe038 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ composer.lock composer.phar ttf vendor +data # Compiled source # ################### From 284e849e379dbea8e066e11729a5c12acdb4b978 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 6 Mar 2015 17:48:00 +0900 Subject: [PATCH 038/339] =?UTF-8?q?view=5Fk.inc.php=E3=81=AEtypo=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/expack/tgrep/view_k.inc.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/expack/tgrep/view_k.inc.php b/lib/expack/tgrep/view_k.inc.php index 73f7c3a93..daa0a6670 100644 --- a/lib/expack/tgrep/view_k.inc.php +++ b/lib/expack/tgrep/view_k.inc.php @@ -23,9 +23,9 @@
        �ő����\��

        �ő����\��
        '. $plugin_ht . ''; - } else { - $plugin_ht = ''; - } - $plugin_ht .= '����'; - } else { - $plugin_ht = ''; - } - $plugin_ht = << - - - - - - {$_conf['k_input_ht']} -{$plugin_ht} - -EOP; + $plugin_ht = $this->_generateWikiDatLink(); $moritori_ht = $this->_generateMoritapoDatLink(); $dat_response_msg = "

        2ch info - ���̃X���b�h�͉ߋ����O�q�ɂɊi�[����Ă��܂��B{$marutori_ht}{$moritori_ht}{$plugin_ht}

        "; @@ -2076,6 +2048,60 @@ private function setDatochiResiduums() } // }}} + // {{{ _generateWikiDatLink() + + /** + * +Wiki��DAT�擾�v���O�C����dat���擾���邽�߂̃����N�𐶐�����B + * + * @param void + * @return string + */ + protected function _generateWikiDatLink() + { + global $_conf; + + // +Wiki + if ($_GET['plugin']) { + $datPlugin = new DatPluginCtl(); + $datPlugin->load(); + foreach ($datPlugin->getData() as $v){ + if (preg_match('{'. $v['match'] . '}', $read_url)) { + $replace = @preg_replace('{'. $v['match'] . '}', $v['replace'], $read_url); + $code = P2UtilWiki::getResponseCode($replace); + if($code == 200) { + $code = '��' . $code; + } else { + $code = '�~' . $code; + } + $plugin_ht .= " \n"; + } + } + if ($plugin_ht) { + $plugin_ht = ''; + } else { + $plugin_ht = ''; + } + $plugin_ht .= '����'; + } else { + $plugin_ht = ''; + } + $plugin_ht = << + + + + + + {$_conf['k_input_ht']} +{$plugin_ht} + +EOP; + + return $plugin_ht; + } + + // }}} + } // }}} From 50389327c5b5f0d8b1f5730e1de40fdd93dd07de Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 13 Mar 2015 13:56:33 +0900 Subject: [PATCH 056/339] =?UTF-8?q?=E3=82=B9=E3=83=AC=E3=82=92=E8=AA=AD?= =?UTF-8?q?=E3=81=BF=E8=BE=BC=E3=82=80=E3=81=A8=E3=81=8D=E3=81=AB2ch?= =?UTF-8?q?=E3=81=8B=E3=82=89DAT=E3=82=92=E5=88=A9=E7=94=A8=E3=81=A7?= =?UTF-8?q?=E3=81=8D=E3=81=AA=E3=81=84=E6=97=A8=E3=81=AE=E3=83=A1=E3=83=83?= =?UTF-8?q?=E3=82=BB=E3=83=BC=E3=82=B8=E3=82=92=E5=8F=97=E4=BF=A1=E3=81=97?= =?UTF-8?q?=E3=81=9F=E5=A0=B4=E5=90=88=E3=81=AFDAT=E7=A0=B4=E6=90=8D?= =?UTF-8?q?=E5=AF=BE=E7=AD=96=E3=81=AE=E3=81=9F=E3=82=81=E3=81=AE=E3=82=A8?= =?UTF-8?q?=E3=83=A9=E3=83=BC=E3=82=92=E5=87=BA=E3=81=99=E3=80=82=20Socket?= =?UTF-8?q?=E9=96=89=E3=81=98=E5=BF=98=E3=82=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 66badc474..682ffe5a8 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -265,9 +265,11 @@ protected function _downloadDat2chAPI($sid,$from_bytes) } $this->getdat_error_msg_ht .= "

        rep2 error: API�o�R�ł̃X���b�h�擾�Ɏ��s���܂����B".trim($firstmsg)."

        "; $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&relogin2chapi=true\">API�ōĎ擾�����݂�]"; + $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&olddat=true\">��dat�ōĎ擾�����݂�]"; $this->diedat = true; return false; } elseif (strpos($firstmsg, "�Q�����˂� ��<><>2015/03/13(��) 00:00:00.00 ID:????????<> 3��13�����Q")===0) { + fclose($fp); $this->getdat_error_msg_ht .= "

        rep2 error: API�o�R�ł̃X���b�h�擾�Ɏ��s���܂����B
        rep2 info: �X���b�h�����݂��Ȃ����ߋ����O�Ɋi�[����Ă��܂��B

        "; $marutori_ht = " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&maru=true{$_conf['k_at_a']}\">��ID��rep2�Ɏ�荞��]"; $marutori_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&shirokuma=true{$_conf['k_at_a']}\">offlaw�o�R��rep2�Ɏ�荞��]"; @@ -510,6 +512,18 @@ protected function _downloadDat2ch($from_bytes) return false; } + //�z�X�g��2ch�̎���DAT�𗘗p�ł��Ȃ��|�̃��b�Z�[�W���o����G���[�Ƃ���iDAT�j���΍�j + if (P2Util::isHost2chs($this->host)) + { + $firstmsg = substr($body, 0, 100); + if (strpos($firstmsg, "�Q�����˂� ��<><>2015/03/13(��) 00:00:00.00 ID:????????<> 3��13�����Q")===0) { + $this->getdat_error_msg_ht .= "

        rep2 error: 2�����˂��DAT�񋟂͏I�����܂����B

        "; + $this->diedat = true; + fclose($fp); + return false; + } + } + // �����̉��s�ł��ځ[��`�F�b�N if (!$zero_read) { if (substr($body, 0, 1) != "\n") { From 06f71b36961835b3c27355fbf2c24f0500c701c9 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 13 Mar 2015 14:05:49 +0900 Subject: [PATCH 057/339] =?UTF-8?q?API=E3=81=AE=E8=AA=AC=E6=98=8E=E3=82=92?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 ++- doc/README-API.txt | 2 ++ rep2/edit_conf_user.php | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 48b03c517..802803e29 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ ### Git & Composerで 1. 本体をclone -
        git clone git://github.com/pluslive/p2-php.git
        +  
        git clone git://github.com/2ch774/p2-php.git
           cd p2-php
        2. 依存ライブラリをダウンロード @@ -103,6 +103,7 @@ Webブラウザから変更できない項目は [conf/conf_admin.inc.php](https * **unpush** https://github.com/unpush/p2-php/ * **thermon** https://github.com/thermon/p2-php/ * **part32の892** *(+live)* https://github.com/pluslive/p2-php/ +* **orzisun** https://github.com/orzisun/p2-php * **2ch p2/rep2スレの>>1-1000** diff --git a/doc/README-API.txt b/doc/README-API.txt index ce80d0528..449c813c2 100644 --- a/doc/README-API.txt +++ b/doc/README-API.txt @@ -5,6 +5,8 @@ API 2ch API���g�p����dat�̎擾�ɑΉ����Ă��܂��B +PHP��OpenSSL�ɑΉ����Ă���K�v������܂��B + ���ݒ���@ �u�ݒ�Ǘ��v���u���[�U�[�ݒ�ҏW�v���urep2��{�ݒ�v���u2ch API�v����ݒ�ύX�ł��܂��B diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index e1ce27bfb..48a4e6d64 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -375,7 +375,7 @@ array('2chapi_rounin','2ch API �F�؎��Ɂ�(�Q�l)ID�𑗐M����(�l���@�\)'), array('2chapi_interval','2ch API �F�؂���Ԋu(�P��:����)'), //'API �L�[', - 'API�F�؏��', + 'API�F�؏��(�S�ĕK�{)', array('2chapi_appkey','AppKey'), array('2chapi_hmkey','HMkey'), array('2chapi_appname','AppName API�ɑ��M����A�v���P�[�V������ ��:Hoge/1.00'), From 2d112be5d05fee19b25ec1f023e32807addbe1ee Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 13 Mar 2015 16:50:17 +0900 Subject: [PATCH 058/339] =?UTF-8?q?ID=E3=82=92HTML=E3=81=AB=E5=A4=89?= =?UTF-8?q?=E6=8F=9B=E3=81=99=E3=82=8B=E5=87=A6=E7=90=86=E3=81=8C=E4=BA=8C?= =?UTF-8?q?=E9=87=8D=E3=81=AB=E5=AE=9F=E8=A1=8C=E3=81=95=E3=82=8C=E3=81=A6?= =?UTF-8?q?=E3=81=84=E3=81=9F=E3=81=AE=E3=81=A7=E4=BF=AE=E6=AD=A3=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 1 + lib/live/default_view.inc.php | 5 ----- rep2/read.php | 27 +++++++++------------------ 3 files changed, 10 insertions(+), 23 deletions(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 682ffe5a8..e9a741d12 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -522,6 +522,7 @@ protected function _downloadDat2ch($from_bytes) fclose($fp); return false; } + unset($firstmsg); } // �����̉��s�ł��ځ[��`�F�b�N diff --git a/lib/live/default_view.inc.php b/lib/live/default_view.inc.php index 1e416996f..b102be925 100755 --- a/lib/live/default_view.inc.php +++ b/lib/live/default_view.inc.php @@ -45,11 +45,6 @@ } } - // ID�t�B���^ - if ($_conf['flex_idpopup'] == 1 && $id && $this->thread->idcount[$id] > 1) { - $date_id = str_replace($idstr, $this->idFilter($idstr, $id), $date_id); - } - $tores .= $date_id; // ���t��ID if ($this->am_side_of_id) { $tores .= ' ' . $this->activeMona->getMona($msg_id); diff --git a/rep2/read.php b/rep2/read.php index 8437024ee..5b28a55f9 100644 --- a/rep2/read.php +++ b/rep2/read.php @@ -307,23 +307,13 @@ } $res1 = $aShowThread->quoteOne(); // >>1�|�b�v�A�b�v�p - if ($_conf['coloredid.enable'] > 0 && $_conf['coloredid.click'] > 0 && - $_conf['coloredid.rate.type'] > 0) { - if ($_GET['showbl']) { - $mainhtml = $aShowThread->datToHtml_resFrom(true); - } else { - $mainhtml .= $aShowThread->datToHtml(true); - } - $mainhtml .= $res1['q']; + + if ($_GET['showbl']) { + $mainhtml = $aShowThread->datToHtml_resFrom(true); } else { - if ($_GET['showbl']) { - $aShowThread->datToHtml_resFrom(); - } else { - $aShowThread->datToHtml(); - } - echo $res1['q']; + $mainhtml .= $aShowThread->datToHtml(true); } - + $mainhtml .= $res1['q']; // ���X�ǐՃJ���[ if ($_conf['backlink_coloring_track']) { @@ -333,11 +323,12 @@ // ID�J���[�����O if ($_conf['coloredid.enable'] > 0 && $_conf['coloredid.click'] > 0) { echo $aShowThread->getIdColorJs(); - // �u���E�U���׌y���̂��߁ACSS���������X�N���v�g�̌�ŃR���e���c�� - // �����_�����O������ - echo $mainhtml; } + // �u���E�U���׌y���̂��߁ACSS���������X�N���v�g�̌�ŃR���e���c�� + // �����_�����O������ + echo $mainhtml; + // �O���c�[�� $pluswiki_js = ''; From 6dbaddb6d7b983ca15107d27ae7d84c045ddfe2e Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 13 Mar 2015 22:49:41 +0900 Subject: [PATCH 059/339] =?UTF-8?q?=E3=82=B9=E3=83=9E=E3=83=9B=E5=90=91?= =?UTF-8?q?=E3=81=91=E3=83=88=E3=83=83=E3=83=97=E3=83=9A=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E3=81=AECSS=E3=82=92=E6=9C=AC=E5=AE=B6=E3=80=8C=E9=A2=A8?= =?UTF-8?q?=E3=80=8D=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/iui/backButton.png | Bin 816 -> 541 bytes rep2/iui/iui.css | 49 +++++++++++++++++++++++----------------- 2 files changed, 28 insertions(+), 21 deletions(-) diff --git a/rep2/iui/backButton.png b/rep2/iui/backButton.png index e27ea8cdf9a4f3b35c78f6bb0a407a4047e72e12..70b416f99d29f521d2ab54a57aec9b3165c0b587 100644 GIT binary patch delta 527 zcmV+q0`UE?2Au?u8Gi-<006b>=iUGS00eVFNmK|32nc)#WQYI&010qNS#tmY3labT z3lag+-G2N40010xMObuGZ)S9NVRB^vL1b@YWgtdra%FdKa%*!SLsKZvtrW>3JCtO_av`g$~W_h21hpQ@eBfT7kicVC^%O#=s+HM0ru zD7kd^C_aC|ZfDIbp)~phqyhZY(#!K4GrIuRlsUb0_jNd1)f79spfvgrqfw|Xu;kPx z+ESPuv+bt<*ZLtu$F3Wwz~1zH1B^n>0aff`pnf`&?0-{ETG4QjS$CfTOUa=InP{jg zuoU>v`d;yfg375&gUpI;9HPl@<U>+8MIu R)c^nh00>D%PDHLkV1kxS?Ii#J delta 804 zcmV+<1Ka$a1h58>8Gix*0026OaESl_02y>eSaefwW^{L9a%BKPWN%_+AW3auXJt}l zVPtu6$z?nM00PoUL_t(|+Qe6FPt#BsZM$x4(J=;f!)=J;Wr8>a$6ycxLqdeamk<6& z4JHQ76p104ppisCL-36lMG0@o#uixs4)# z5!%^WfA(amZ(u0WKSUUy6W48TZOkO5WAXd$3tpSuVX?53aX44Uc>}E<=4UvMmqqvl z27NO|%7 zySIJu2Y@Z0Ra$@|h{{KDF!wUiay4ePIl$1|oy7p)(0_%mtDj_GgPvy9to8&XY6lE* z0>8Yt*fn$qa7h}oKpbHAO(6RFL;Vcv&~)?KA8PPe-re5Rpyabv&;Xaf=cI6F>v>ky zRfQ@tGq1?|2k%!ZlN%ZA(ZwW%!Av6#G{7Yiyr{$n!@10knWL$ggK}v)Fs!Y&BOvi9 zvvW{}C@D?;i+;{tkc3M2#t7^+*5eFtDG-tFD}N4J($&fiN==nHckK}u%C(ymMq<}N zN`Y3WlmHkjLMq(RdUzK8E%HoF@zUgIlrE&@TpD!E(EE@ac~MAhM7!HmOtYuOo?Mm5 zY<^<2@5|cn^^NVUXqY2*dySWK^+Y0wqBBCCJ>xdeG}zqDwgsDRghN)=u)j94H(61W inH`)`C`$WRfB^uXx!j#d-gDys0000 *:not(.toolbar) { body > *[selected="true"] { display: block; } - +/* a[selected], a:active { background-color: #194fdb !important; background-image: url(listArrowSel.png), url(selection.png) !important; @@ -42,7 +42,7 @@ a[selected], a:active { a[selected="progress"] { background-image: url(loading.gif), url(selection.png) !important; } - +*/ /************************************************************************************************/ body > .toolbar { @@ -50,10 +50,10 @@ body > .toolbar { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; border-bottom: 1px solid #2d3642; - border-top: 1px solid #6d84a2; - padding: 10px; + border-top: 1px solid #333; /* �����l #6d84a2 */ + padding: 6px; height: 45px; - background: url(toolbar.png) #6d84a2 repeat-x; + background: #333; /* url(toolbar.png) #6d84a2 repeat-x; */ } .toolbar > h1 { @@ -84,9 +84,10 @@ body[orient="landscape"] > .toolbar > h1 { right: 6px; margin: 0; border-width: 0 5px; - padding: 0 3px; + padding: 1px 4px 0 4px; width: auto; height: 30px; + line-height: 30px; font-family: inherit; font-size: 12px; @@ -96,14 +97,18 @@ body[orient="landscape"] > .toolbar > h1 { text-overflow: ellipsis; text-decoration: none; white-space: nowrap; - background: none; - -webkit-border-image: url(toolButton.png) 0 5 0 5; + background: #444; border-radius: 5px; + /* background: none; + -webkit-border-image: url(toolButton.png) 0 5 0 5; */ + display:block; } +/* .blueButton { -webkit-border-image: url(blueButton.png) 0 5 0 5; border-width: 0 5px; } +*/ .leftButton { left: 6px; @@ -112,10 +117,10 @@ body[orient="landscape"] > .toolbar > h1 { #backButton { display: none; - left: 6px; - right: auto; - padding: 0; - max-width: 55px; + left: 6px; right: auto; + padding-right: 0px; padding-left: 0px; + width: auto; max-width: 55px; + font-family: Helvetica; border-width: 0 8px 0 14px; -webkit-border-image: url(backButton.png) 0 8 0 14; } @@ -163,13 +168,13 @@ body > ul > li { body > ul > li.group { position: relative; - top: -1px; - margin-bottom: -2px; + /* top: -1px; + margin-bottom: -2px; */ border-top: 1px solid #7d7d7d; border-bottom: 1px solid #999999; - padding: 1px 10px; - background: url(listGroup.png) repeat-x; - font-size: 17px; + padding: 2px 10px 0px 10px; + /* background: url(listGroup.png) repeat-x; */ background:#aaa; + font-size: 16px; font-weight: bold; text-shadow: rgba(0, 0, 0, 0.4) 0 1px 0; color: #FFFFFF; @@ -220,12 +225,12 @@ body > .dialog { border: none; border-top: 1px solid #6d84a2; padding: 10px 6px; - background: url(toolbar.png) #7388a5 repeat-x; + background: #333; } .dialog > fieldset > h1 { margin: 0 10px 0 10px; - padding: 0; + padding-top: 2px; font-size: 20px; font-weight: bold; color: #FFFFFF; @@ -238,14 +243,16 @@ body > .dialog { margin: 16px 0 0 6px; font-size: 14px; color: #999999; + text-align: left; + width: 5em; } -input:not(input[type|=radio]):not(input[type|=checkbox]) { +input:not([type|="submit"]):not([type|="radio"]):not([type|="checkbox"]) { box-sizing: border-box; -webkit-box-sizing: border-box; width: 100%; margin: 8px 0 0 0; - padding: 6px 6px 6px 44px; + padding: 6px 6px 6px 5em; font-size: 16px; font-weight: normal; } From 1bde17b62d57abd9ef3de1259d0a3635c5029e01 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sat, 14 Mar 2015 13:32:57 +0900 Subject: [PATCH 060/339] =?UTF-8?q?=E3=82=B9=E3=83=9E=E3=83=9B=E5=90=91?= =?UTF-8?q?=E3=81=91Subject=E3=81=A8Read=E3=81=AECSS=E3=82=92=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=20=E6=8A=BC=E3=81=9B=E3=81=AA=E3=81=84=E3=83=9C?= =?UTF-8?q?=E3=82=BF=E3=83=B3=E3=81=A8=E3=81=8A=E6=B0=97=E3=81=AB=E5=85=A5?= =?UTF-8?q?=E3=82=8A=E3=81=AA=E3=81=A9=E3=81=AE=E3=83=9C=E3=82=BF=E3=83=B3?= =?UTF-8?q?=E3=81=8C=E8=A6=8B=E5=88=86=E3=81=91=E3=82=84=E3=81=99=E3=81=8F?= =?UTF-8?q?=E3=81=AA=E3=81=A3=E3=81=9F=E3=81=AF=E3=81=9A=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/css/iphone.css | 26 ++++++++++-------- rep2/img/glyphish/icons2/01-refresh.png | Bin 535 -> 657 bytes rep2/img/glyphish/icons2/02-redo.png | Bin 564 -> 721 bytes rep2/img/glyphish/icons2/03-loopback.png | Bin 539 -> 743 bytes rep2/img/glyphish/icons2/04-squiggle.png | Bin 449 -> 510 bytes rep2/img/glyphish/icons2/05-shuffle.png | Bin 430 -> 576 bytes .../glyphish/icons2/06-magnifying-glass.png | Bin 476 -> 650 bytes rep2/img/glyphish/icons2/07-map-marker.png | Bin 411 -> 524 bytes rep2/img/glyphish/icons2/08-chat.png | Bin 318 -> 407 bytes rep2/img/glyphish/icons2/09-chat2.png | Bin 363 -> 455 bytes rep2/img/glyphish/icons2/10-medical.png | Bin 251 -> 295 bytes rep2/img/glyphish/icons2/100-coffee.png | Bin 293 -> 337 bytes rep2/img/glyphish/icons2/101-gameplan.png | Bin 505 -> 693 bytes rep2/img/glyphish/icons2/102-walk.png | Bin 517 -> 621 bytes rep2/img/glyphish/icons2/103-map.png | Bin 536 -> 640 bytes rep2/img/glyphish/icons2/104-index-cards.png | Bin 228 -> 260 bytes rep2/img/glyphish/icons2/105-piano.png | Bin 186 -> 211 bytes rep2/img/glyphish/icons2/106-sliders.png | Bin 245 -> 271 bytes rep2/img/glyphish/icons2/107-widescreen.png | Bin 312 -> 383 bytes rep2/img/glyphish/icons2/108-badge.png | Bin 429 -> 504 bytes rep2/img/glyphish/icons2/109-chicken.png | Bin 337 -> 429 bytes rep2/img/glyphish/icons2/11-clock.png | Bin 588 -> 746 bytes rep2/img/glyphish/icons2/110-bug.png | Bin 601 -> 730 bytes rep2/img/glyphish/icons2/111-user.png | Bin 301 -> 354 bytes rep2/img/glyphish/icons2/112-group.png | Bin 510 -> 536 bytes rep2/img/glyphish/icons2/113-navigation.png | Bin 387 -> 517 bytes rep2/img/glyphish/icons2/114-balloon.png | Bin 402 -> 498 bytes .../img/glyphish/icons2/115-bow-and-arrow.png | Bin 526 -> 676 bytes rep2/img/glyphish/icons2/116-controller.png | Bin 459 -> 599 bytes rep2/img/glyphish/icons2/117-todo.png | Bin 288 -> 397 bytes rep2/img/glyphish/icons2/118-coathanger.png | Bin 367 -> 496 bytes rep2/img/glyphish/icons2/119-piggybank.png | Bin 384 -> 492 bytes rep2/img/glyphish/icons2/12-eye.png | Bin 386 -> 564 bytes rep2/img/glyphish/icons2/120-headphones.png | Bin 328 -> 414 bytes rep2/img/glyphish/icons2/121-landscape.png | Bin 298 -> 375 bytes rep2/img/glyphish/icons2/122-stats.png | Bin 312 -> 435 bytes rep2/img/glyphish/icons2/123-id-card.png | Bin 276 -> 334 bytes rep2/img/glyphish/icons2/124-bullhorn.png | Bin 298 -> 334 bytes rep2/img/glyphish/icons2/125-food.png | Bin 409 -> 450 bytes rep2/img/glyphish/icons2/126-moon.png | Bin 350 -> 425 bytes rep2/img/glyphish/icons2/127-sock.png | Bin 342 -> 386 bytes rep2/img/glyphish/icons2/128-bone.png | Bin 221 -> 270 bytes rep2/img/glyphish/icons2/129-golf.png | Bin 443 -> 493 bytes rep2/img/glyphish/icons2/13-target.png | Bin 686 -> 1004 bytes rep2/img/glyphish/icons2/130-dice.png | Bin 374 -> 508 bytes rep2/img/glyphish/icons2/14-tag.png | Bin 401 -> 516 bytes rep2/img/glyphish/icons2/15-tags.png | Bin 576 -> 643 bytes rep2/img/glyphish/icons2/16-line-chart.png | Bin 601 -> 633 bytes rep2/img/glyphish/icons2/17-bar-chart.png | Bin 215 -> 236 bytes rep2/img/glyphish/icons2/18-envelope.png | Bin 320 -> 401 bytes rep2/img/glyphish/icons2/19-gear.png | Bin 467 -> 681 bytes rep2/img/glyphish/icons2/20-gear2.png | Bin 471 -> 623 bytes rep2/img/glyphish/icons2/21-skull.png | Bin 439 -> 573 bytes .../glyphish/icons2/22-skull-n-crossbones.png | Bin 783 -> 1037 bytes rep2/img/glyphish/icons2/23-bird.png | Bin 435 -> 540 bytes rep2/img/glyphish/icons2/24-gift.png | Bin 406 -> 518 bytes rep2/img/glyphish/icons2/25-weather.png | Bin 422 -> 528 bytes rep2/img/glyphish/icons2/26-bandaid.png | Bin 359 -> 505 bytes rep2/img/glyphish/icons2/27-planet.png | Bin 563 -> 601 bytes rep2/img/glyphish/icons2/28-star.png | Bin 436 -> 512 bytes rep2/img/glyphish/icons2/29-heart.png | Bin 337 -> 419 bytes rep2/img/glyphish/icons2/30-key.png | Bin 325 -> 402 bytes rep2/img/glyphish/icons2/31-ipod.png | Bin 365 -> 465 bytes rep2/img/glyphish/icons2/32-iphone.png | Bin 217 -> 260 bytes rep2/img/glyphish/icons2/33-cabinet.png | Bin 194 -> 248 bytes rep2/img/glyphish/icons2/34-coffee.png | Bin 354 -> 460 bytes rep2/img/glyphish/icons2/35-shopping-bag.png | Bin 284 -> 351 bytes rep2/img/glyphish/icons2/36-toolbox.png | Bin 292 -> 347 bytes rep2/img/glyphish/icons2/37-suitcase.png | Bin 258 -> 306 bytes rep2/img/glyphish/icons2/38-airplane.png | Bin 305 -> 390 bytes rep2/img/glyphish/icons2/39-spraycan.png | Bin 285 -> 359 bytes rep2/img/glyphish/icons2/40-inbox.png | Bin 371 -> 476 bytes rep2/img/glyphish/icons2/41-picture-frame.png | Bin 254 -> 313 bytes rep2/img/glyphish/icons2/42-photos.png | Bin 179 -> 214 bytes rep2/img/glyphish/icons2/43-film-roll.png | Bin 345 -> 403 bytes rep2/img/glyphish/icons2/44-shoebox.png | Bin 381 -> 435 bytes rep2/img/glyphish/icons2/45-movie1.png | Bin 252 -> 283 bytes rep2/img/glyphish/icons2/46-movie2.png | Bin 360 -> 377 bytes rep2/img/glyphish/icons2/47-fuel.png | Bin 415 -> 494 bytes .../img/glyphish/icons2/48-fork-and-knife.png | Bin 209 -> 250 bytes rep2/img/glyphish/icons2/49-battery.png | Bin 218 -> 254 bytes rep2/img/glyphish/icons2/50-beaker.png | Bin 210 -> 234 bytes rep2/img/glyphish/icons2/51-outlet.png | Bin 299 -> 351 bytes rep2/img/glyphish/icons2/52-pinetree.png | Bin 295 -> 386 bytes rep2/img/glyphish/icons2/53-house.png | Bin 224 -> 281 bytes rep2/img/glyphish/icons2/54-lock.png | Bin 309 -> 371 bytes rep2/img/glyphish/icons2/55-network.png | Bin 322 -> 424 bytes rep2/img/glyphish/icons2/56-cloud.png | Bin 294 -> 372 bytes rep2/img/glyphish/icons2/57-download.png | Bin 251 -> 283 bytes rep2/img/glyphish/icons2/58-bookmark.png | Bin 186 -> 237 bytes rep2/img/glyphish/icons2/59-flag.png | Bin 298 -> 340 bytes rep2/img/glyphish/icons2/60-signpost.png | Bin 181 -> 240 bytes rep2/img/glyphish/icons2/61-brightness.png | Bin 291 -> 459 bytes rep2/img/glyphish/icons2/62-contrast.png | Bin 459 -> 555 bytes rep2/img/glyphish/icons2/63-runner.png | Bin 426 -> 516 bytes rep2/img/glyphish/icons2/64-zap.png | Bin 364 -> 412 bytes rep2/img/glyphish/icons2/65-note.png | Bin 314 -> 381 bytes rep2/img/glyphish/icons2/66-microphone.png | Bin 314 -> 371 bytes rep2/img/glyphish/icons2/67-tshirt.png | Bin 277 -> 352 bytes rep2/img/glyphish/icons2/68-paperclip.png | Bin 336 -> 437 bytes rep2/img/glyphish/icons2/69-display.png | Bin 314 -> 354 bytes rep2/img/glyphish/icons2/70-tv.png | Bin 391 -> 453 bytes rep2/img/glyphish/icons2/71-compass.png | Bin 422 -> 673 bytes rep2/img/glyphish/icons2/72-pin.png | Bin 265 -> 316 bytes rep2/img/glyphish/icons2/73-radar.png | Bin 938 -> 1008 bytes rep2/img/glyphish/icons2/74-location.png | Bin 361 -> 523 bytes rep2/img/glyphish/icons2/75-phone.png | Bin 363 -> 496 bytes rep2/img/glyphish/icons2/76-baby.png | Bin 448 -> 515 bytes rep2/img/glyphish/icons2/77-ekg.png | Bin 434 -> 512 bytes rep2/img/glyphish/icons2/78-stopwatch.png | Bin 458 -> 590 bytes rep2/img/glyphish/icons2/79-medical-bag.png | Bin 288 -> 363 bytes rep2/img/glyphish/icons2/80-shopping-cart.png | Bin 279 -> 361 bytes rep2/img/glyphish/icons2/81-dashboard.png | Bin 601 -> 823 bytes rep2/img/glyphish/icons2/82-dogpaw.png | Bin 475 -> 577 bytes rep2/img/glyphish/icons2/83-calendar.png | Bin 214 -> 258 bytes rep2/img/glyphish/icons2/84-lightbulb.png | Bin 342 -> 421 bytes rep2/img/glyphish/icons2/85-trophy.png | Bin 423 -> 515 bytes rep2/img/glyphish/icons2/86-camera.png | Bin 382 -> 457 bytes rep2/img/glyphish/icons2/87-wineglass.png | Bin 342 -> 382 bytes rep2/img/glyphish/icons2/88-beermug.png | Bin 434 -> 470 bytes rep2/img/glyphish/icons2/89-dumbbell.png | Bin 248 -> 323 bytes rep2/img/glyphish/icons2/90-lifebuoy.png | Bin 521 -> 610 bytes rep2/img/glyphish/icons2/91-beaker2.png | Bin 446 -> 482 bytes rep2/img/glyphish/icons2/92-testtube.png | Bin 286 -> 326 bytes rep2/img/glyphish/icons2/93-thermometer.png | Bin 392 -> 442 bytes rep2/img/glyphish/icons2/94-pill.png | Bin 404 -> 479 bytes rep2/img/glyphish/icons2/95-equalizer.png | Bin 282 -> 331 bytes rep2/img/glyphish/icons2/96-book.png | Bin 407 -> 464 bytes rep2/img/glyphish/icons2/97-puzzle.png | Bin 561 -> 725 bytes rep2/img/glyphish/icons2/98-palette.png | Bin 530 -> 599 bytes rep2/img/glyphish/icons2/99-umbrella.png | Bin 392 -> 449 bytes rep2/img/gp0-more.png | Bin 309 -> 115 bytes rep2/img/gp1-up.png | Bin 377 -> 133 bytes rep2/img/gp2-down.png | Bin 382 -> 135 bytes rep2/img/gp3-prev.png | Bin 330 -> 143 bytes rep2/img/gp4-next.png | Bin 320 -> 144 bytes rep2/img/gp5-info.png | Bin 496 -> 410 bytes 137 files changed, 15 insertions(+), 11 deletions(-) diff --git a/rep2/css/iphone.css b/rep2/css/iphone.css index 2b2eb7cab..8bba736b7 100644 --- a/rep2/css/iphone.css +++ b/rep2/css/iphone.css @@ -602,7 +602,7 @@ div.ntoolbar { min-width: 320px; margin: 0; padding: 0; - background-color: #000; + background-color: #333; color: #fff; } @@ -720,7 +720,7 @@ div.ntoolbar a:visited { } div.ntoolbar a.inactive { - color: #888; + color: #fff; } div.ntoolbar span.unavailable { @@ -731,7 +731,7 @@ div.ntoolbar a.hover, div.ntoolbar a.active, div.ntoolbar a:hover, div.ntoolbar a:active { - color: #9cf; + color: #b4b4b4; } div.ntoolbar td > a > span.badge { @@ -776,24 +776,28 @@ div.ntoolbar td > a:active > span.badge { background-color: #36f; } -div.ntoolbar a:link > img, -div.ntoolbar a:visited > img { - background-color: #fff; -} - div.ntoolbar a.inactive > img { - background-color: #888; + filter: alpha(opacity=50); + -ms-filter: "alpha(opacity=50)"; + -moz-opacity:0.5; + opacity:0.5; } div.ntoolbar span.unavailable > img { - background-color: #555; + filter: alpha(opacity=20); + -ms-filter: "alpha(opacity=20)"; + -moz-opacity:0.2; + opacity:0.2; } div.ntoolbar a.hover > img, div.ntoolbar a.active > img, div.ntoolbar a:hover > img, div.ntoolbar a:active > img { - background-color: #9cf; + filter: alpha(opacity=70); + -ms-filter: "alpha(opacity=70)"; + -moz-opacity:0.7; + opacity:0.7; } div.ntoolbar td > select { diff --git a/rep2/img/glyphish/icons2/01-refresh.png b/rep2/img/glyphish/icons2/01-refresh.png index f6f4da9b222684a214e138811b4d010b4d1e1f5a..a17882c9f48e63779b21594f44482ff634eb3b2b 100644 GIT binary patch delta 633 zcmV-<0*3vU1d#=hBYyx1a7bBm000XT000XT0n*)m`~Uy~LrFwIR9J=W*iT55K^VvJ zj~RRFB-kYogl?e_MGypg2!p7LVHAN-BpyQW(8X(>79!}HbOqn@PE+*kMIV=y$Ie*0fRUd>^eTldZSXR7H|nq@dMxRA^Poz9`r_4 z0?yzaUf>1>x|FSBrlNW)5ipInG7&M~@v-CG7S7{t1@)r5fLYnFsD*qJ_i+M8aXKoy zfKj|IS?3=VUVla-#_%A@zsFU4?kKl~TUaSkS1zdnYO*iiAM&fXAnSonMzNDv&tFL$ zLNnSc$yZ#ld*kV0<4G5AGqUGp6Lw!n5io?2U^nrkveqP!BH&zPugD)dMHtY1@5m)Z zz_G~QOsTYkI=+NdFY25kpg*#!n4n{_Rjr1zMV(Uw#D9%W>h=x>b7Jp_6agENUHFUb zLL6fww^R-(0#>yr?uhn^ltS$PGsG@Lihw3wM)`XQF?RD^maw9wZe;WL73^_LCd8Nw zzCx_|l!l}VSi@qJe~gI&{u9Bc#bStAm@>!dJ6I2P4NG{a`^q#B$}DLg!Pi5qB+4A8 zo46>uB61!N?`CluuR>}at%qdm{g~`(*0+T%NqWn5Qs zGpyoDxr56g?PVOVMdeHH> z%S#eKmw$}ps0r9&EMNef#9g2pvjMCCPjTgsi})LGCl)FL9Do0H0aaiNm>?KY??xm^ zZh=A{(thmyB>~4kst3tQV97U^1ui2bZ!O@^M=%ZS0}rx*!4A-ln7oyMbG+AZ0ciB_ z%K}$15VsQWWr(?0208)0ajd$vfCE8(3g^mj9Y~AL!KwVW0dC-Uqj?$l+RDUR^>t_mfZz$)-4 z<}$!KumQ}Oxfh)K{sQUo^gv)U`cA zz3>d2;{17dHFLATJg|xPL&zF&2pB5H|3*iRUq)#DeMzG#?*IS*07*qoM6N<$g0h0; A=l}o! diff --git a/rep2/img/glyphish/icons2/02-redo.png b/rep2/img/glyphish/icons2/02-redo.png index 4becb66abd06f23e3bd553f81df9e03a4b6e5f74..5ddfc495461db748c9ae237d1ab39fb341f3db12 100644 GIT binary patch delta 698 zcmV;r0!96_1knYMBYyx1a7bBm000XT000XT0n*)m`~Uy~gGod|R9J=W*k5GTVI0Tt z*Q%QshcRMwwcBNhCC1W4N*5`cQc5vR=_<-ecO!O{h%(ky>SoiF(#3QU-89k|k)o?H z4x_6vQWwwf?EH3i&d%@oonL13=HYps^Zfff&-Zt}&-dvV9e*9Qli9W13uu=eFJMoW zMiUbgvEv>=U#h%}C47z?1g?EB^MN@=;UwDD}h(0qon)HQUJj^qB z9s$EP+k778h108Y0sXOq#0u!b<0N&(PS$`~yiJvF#tslGU{bKv?j&CXuOz>eh|(QZh&hy!?pOR4&O zNgCRs@2ti?Ac~?QvdcIqJeM@`tW_#_BAnb=ku(1|jVSV6Xh9Id=7+6S;j{{Q3rf@R g|8aMl+3^DY0){Ygy+fFFH~;_u07*qoM6N<$g3v@#a{vGU delta 540 zcmV+%0^|MB1+)Z^BYy$=Nklg*rj>f|i`0S;2Zzd%qFw3DE2-5gxnip9Z6>W~C3Ka6>~OH00Ra7pgHZ@!mz z_ueH349GCXM*RZ1$h?5@l>9yd&&qWfm<3kSAR8EJEuaqMBY(I`z#;HtkXPG5AE=6^ z%*Gz@rOTglRcK%rxb)qd0XBdM=lT=42i`-*T>xu3FQEGcEXCJ4a2ql94%qbZ7lF10 zzmX6+$6f<*ZJNNOB4Qrsj7mV#)&dHOi0ZHeG@WKb#1&p7*_}j#d)QlH$?2OAv84!T zq%EMLkW~x`Xn!d_^T2mn0-6M2DwO6FpVw&!a6`urQ=wE-e4a>b;}&!KKsV%m*LkLk zveNHJjU_X6tk@k1ZU0+Se#Ba1(sFuQ>AwkW!*Gh7iTx-#&tgF`V-JemlF&A-%|S%= zgLlRxqICK8jq;DxDNkbks9NkrCA1QakAN=aHGqaNPu zna3{7;@Y=?Gwf1)Bm&$}@^68wM3(|jz>YFryPncLQoaJ)1am?eSO6BWkCh+54Z$O& zMX;n6L-!N*@zyeNVUhe4W+a5d!lOobW_3{l4v0QC4>g4Tg8#?X6n5rbHcgb4fT1Dt e|3)(};1w4!_Cvps$io@{00000x$iW1m^{iBYyx1a7bBm000XT000XT0n*)m`~Uy~nMp)JR9J=Wn9*k(Q5431 z+r<6>O9)FTp_HYyYpYdKtv*yjrH`#VME0@tDJ-czM9NZ1w2v*N`jD4aR^CeGZKd`h zET!}*EG6U*SY7SIJ=ffsOy-`M3}e}k;mpjr=X~F}ckVr=)PHKVm}Fckn!rUd6;L!L zUcju+q0{MT;?#h_h1tZQ-EJqo&ua$yz$Q@6DV`d62`B^G7$LO;zb5cj{Qk<-muJl^ ziL(lb60xWeKN}U`3vdWL1M0wxTy=SNC_a@mM7-ZX1Qp;tu#(_oXX6_16sQ6Rz=9(F z3Z@8mfuV*_ntvInVycux9$*B#0@g5M_6U>z2;9dMZ&vIN&ie%!qxzn-0(?X)20#ON zAwr&GmI%NYc!Ux5UGB$Xx8&VeeCskcHvv8(w(1Rn?Q{m%aAI_TZbFW(_*iU6j6`Sz zXo$E~x3~q&i9H0i6uGtt*8ZHtNQ6d!hDh8YcGa=J5q}nU9!BCD7b6xL0a=JZAR6G0 zatwrbpLw6NMnF~~Sx@DvW1sk(H3Hlq-ikQ5;@HQ^F=gPMbN|yfKqKInV?RJw*(i~? zZzQhe*aR+%eFF4+i8KOw1hY_;BtE!Ah7lrVdEbwWS&GDdO>i!p3ypxW1arwPCHO~) zymN@yUVmwuU?vwa?a4mDzJCPlD7dK)vKW%xv^TRm+0000J5`x9f#Jl6j%>LkNvL~5jcITd%bLQ^+Kn>XNk5MmM zKweY^%0^{CVNp;&sZo@H6W|(H71UoUYzinEZD777?h)t%$A83=S6B7EYRfcs7LqAM zA^@&{NW^~t9goTEsMwtu@D&2kRh%Vo=*dCFE_Y$TS4aR1h%*ooXG!85m;!56ra;e# zIVPFG+y-1iG|V+H5^Z&0yk(3r$3G7^J5L*D*FB zZN9D)de&Vi{Vt@@5<cQn1*@N-)hz3K1-}F|GI+tgHkD@eQ?H376+FfroW&bF!k3zQDdX|DR4+A9ljpb_9bd;~T);sMy%SwaXkE6lc~)^RjH~oc zbTx2@VHi)b9ci0kAL~~O^iEV6Six)j4cjlg#8$zzfABSTZ(jdUqPL>Tz^1Hb=d9xv z-eKb;0tlRIdw*k z%Jd?xVZUK4Xr6&X#Z7pGXJK5W7ttzs+Lchg3E#?A@L-AlKBu23gZ{rzVtNCq=?$c& bH;|ft&?!)D@1w&200000NkvXXu0mjfai`){ delta 424 zcmV;Z0ayP11Hl83BYy#iNkl5 zP78y*A%*%%(g=YRHX%j+R7!${z5pvlQi&vIie0(!*t`8Rhm(W-!jGNZXJ&Suo%u1d z9o(5aAf`2||ab8i6ji|<#hRJi%)qT|&35v5j&=MfsQUy<18oQOl@WR)$_yOi zD7e4EAy#oVjsfJHHf>mDU=hm&&u?(h^rZ#7!j1;BQf6QVU-XmaW1uzuYB|?I`44un zpm=!>rEU^G4S&kLp|z^L^Ot^Z{m!4A;UzX@vs}5e$D~`L_ppyQDtx3A2Hs;Eb0g|> z@j-?0r7$pscev2ct^1`pFWXD@WV>~x&YE(KPr?06O+92nkKOwTzv<6bs8c5B=8~6v}j_zB+ SNuv`00000m}~nVLB>nT_)>X1;m9XWr*A?>FCT8qH?Y|9^}Pbqgqqk%77~GEg@* z=AGDXxBo@{X}n7dv|6oP52*VM+(ieI!#<#H18^Geabg&95d-6RiXSP*R~*aWP2h0` zZ(p1B@oWyf%$}6gffwx%tLwo{@*qXR^EsDyE zE)L*ZUP2KA-+yrkje%ndU*eo?f{8Jqrf($p^C{fr7+b*^%*N~7sA3U+#3`)B@iKM^ zrPId}u4M4L*o}o@lIPwB{(@(Mz@xa0mwwgppur?A;dPnBRenb21)&{mkM~w_Jf71~ zN<7u?1Glh0Uaw&epDNDr8>%#L0p}9qtLWhkwq$Uo%YP=V%D_R~NsR9ci?f5B@jRBo zTNkawjwoV0j$h%tAiOVZMkuc|)ZR*bNC^Ebe9L=ygzE|Z2^7fNMPiTO!0h@P&P*rOpbx z@(f%rxqmQ#0Y?0^zyOz7&?&Gj!tVg@4o}gUQ3Ehp&_fYE z0iG(}BPzhD2!G!O?y+sO764bw>jHZ=c7ZpCXR;~)BVb*GKf!jVPWFA#AyywHWKghe zbcTI=qy`QESbhM~PPUp|;ZgQy;7bKwAxfw!Q%{fvSmF^$s~400000NkvXXu0mjf&KaqB diff --git a/rep2/img/glyphish/icons2/06-magnifying-glass.png b/rep2/img/glyphish/icons2/06-magnifying-glass.png index 95be7e1290c7b93ea930d5628ec4486f54faf138..854cc6705e0d8ffb27b3ae9cadc6e96630d73951 100644 GIT binary patch delta 626 zcmV-&0*(FL1BwNZBYyx1a7bBm000XT000XT0n*)m`~Uy~JV``BR9J=Wn6Yb9Q51*2 z7zuPO2!)7)ZM= z5C{~y3J(Gf?>ydVUa!eHH}DYh!6WzH^E>a}AGz;w-mSD+Er0%JE|k51SY`&w=At#B z+wGn=Tn8QkH-Lup`@k;xC~U}cU8tSnvz#@&Rf81;5GT;6JP^a z0(#_oy)XSGiGL4eyeaup!DFBftgHTW{=K&oi9b_g>%bMq+yy)a*2uTOchZM*61GH- zbG3dYs50O&&`|9IW3JXWf+_x$H1v-Ti@wg ze;QO7@EAB&?PX)G)*lB|20RA#RQriBSL^qJDgzz^+kfQm{A;AI)k#Ti-3Yt?|hD)CJ5sfFIJ%D$*n14zM8O3(`N5xUPTh%N32coKApS zoGs`Ufv*$hSAkEY_0g_#4M1EueF9tu-ZH+%Pk_(l1s$X&z5sV4))4(k`3HCjTqWIB z2f#pL18eDbB>n)n$CORPevxJLNlWI9F}fb9i5>EXJ~J_txQQ}8>N69g|HKY((|WVA zP9;JnK3H#5=CR6oCWZlRkh0H(dcbYc2YvuNvfiLFI~y&TnSrwT3ljBbCbOat)c^nh M07*qoM6N<$f+*f1IsgCw delta 451 zcmV;!0X+VS1>6IWBYy#-Nkl6^}5QaYx6kSDHk3yiTNYT7QAESa);OGk= z8Xf@Apem|r`YMP6L49*1-7Yhs0wk1J)zAqP)fFJL zd;!dXSD*{r0~Pt~%J*|m>tre^aK*qgP(QIoUE<<`>t$We#(yR7V0u(({PGe2;*8{5 zz!ZoiCX#t81H$KDR04f^_gKmJ8jAM4s!zr!AkN9Ha+6Qu}#J6hvWAy6y z+uSIFTmYJC{C{oq>iA|}kVP&4JvDwadUbp+H_9mM!I`nU@5g8Q#>x}44kV1VP|7aN#~_6$GtZ1VR)^&^quRL_0xT2tp79LKH0mAqWDu{sWCD>^Tz4(w8(bk^=;7=ABvJ_Ya^`yx-2EB8v7r#qaOM|4dIB$P z)}nl4Lm{Bf&oasaZ$J@PH=}55_G5Dh-1-Lh?uCF4MwvXYY#HEwhF=5t^bM~1C%*h6 zpI=Z3cm|p=_)X*E4P`f4jln%v1yu@|cNdyKR~1zKK5Q^gW@Xt2y?`#WTM1eAA^mHSZXk93jtzs#C6|Q1n96VDCbZ p>_b=qAnJFbkoZ5`T`-njz&BO5NTrG_C8z)Z002ovPDHLkV1gVo)`9>4 delta 385 zcmV-{0e=3B1e*hpBYy#6Nkl;?Emv;?6u?$U}!PAO&1W0 zqX7@Lz%4KUPHYV9+EzgiBN+EUFQC=4Ig*+pBwxU|M$^W2Pk%B7u4@!u;3gFVFZ_O& zE`T}kW@B#G%IE@{6b!iC?*n^J-X6%DT!|?}6ZD;;@<8r`lbfYr;LIuNBar*)Ij|Ji#GVjrQI!A(L`=(R4P{NhHK4}S@Y7tx9Df6Q} f0d*YzjW&%RbZ0($rz6tB00000NkvXXu0mjfeT}Ne diff --git a/rep2/img/glyphish/icons2/08-chat.png b/rep2/img/glyphish/icons2/08-chat.png index e50edf2558b68f89e32c85166b9dee2f916a0e82..6f20159fcee01bbe654c331fb5a0463f0c0d4e78 100644 GIT binary patch delta 381 zcmV-@0fPR%0+$1jBYyx1a7bBm000XT000XT0n*)m`~Uy}Nl8ROR9J=Wn6XO3P!xv0 ziu5IXhC+v;IO!@l3OczMIy>eOvI>IW8wec*XF(7OPFcHlbrOUwI^0tQ5zP6M(-_DH zfd+E^o-etlxpa_a8C_n1Rki@{7=S~>3xclz!Vq>b$>CkY!`~asZbM^ ztqAN2HDTH63`DV!8TeQ90&SxRtQzm)n>TNPBJd*ARHgJ5C<1pvO<1-faD#BCDo|Rs z3v~vLXjY=MOm_EtslP%?U;~D?8SF{Bqqpa8BCyH%=Xa zD!h`G#ysi^B41<+V2{A&Ax>aUYJL%v|3!qr3^*h$pKzKMxCYKhgS!z1{a=eM(+jjs b=LJ3iV)QWQQ8mZ{00000NkvXXu0mjf{-U4i delta 292 zcmV+<0o(qU1HJ-~BYyz}NklZ6rb$}h0&IX8kOP@;<*s() zda0=t>i~>=Hhp2_dTO$W3(i0hFnmqndYcQZ4Z_!~V+fRn0)M46PgYw9$npH>KG5a< z8hwpMAQN6MMU*G$bD$L@DbNj`;z3_ppb;1=YQ9B$KxzaQiW<}2$&C{AFc(syAmT9h z{3KSu)FXK5dT8#vx4_$GZ|DKr!23iK7yvuN@TLMoU~e4WOke^WBZM~*m;+ZQNz=b4n^zqG0000=Z8BYyx1a7bBm000XT000XT0n*)m`~Uy}c}YY;R9J=Wn6XL&K@>$# zRPqgi-w;R<6e}$iECsD>45=;i3EK)nK=K1ZO2IlH2mz~Y(*~`qgupgh%tTgQP2SxZ zmW3P`m>qI&-p#)3Ow#CfyVRMDstYK~IzZLbKERe$kR-`s+J6Lkz$viruPtQ26EFg9 z{Wbl5-(+GA;MoE0fwrgz7x=)BOW*{USxuA{Y61_GEB+^K?`ge@Qh*-N5_HRGd2bU+ zfHOf8&07huD`=v5tKWe|up*-inYi|A`u1kd2$TkDbB|-!k0^5EJ zORP&MEtK)SSAUNvZUgH&z`L~=QSiDsaDhAb2Pec%{2y<))|kY4 zgP1=lr?~S@wBjLNfC;YnX(azIVgwighq(5MPUrwPxF-|lJh1PdG}eDDR?Ip;)zm(~ YCx^a975;VqwEzGB07*qoM6N<$f)WtDd;kCd delta 337 zcmV-X0j~bX1M32iBYy!hNklWOL> z7Q{Gix+jdNmQiaYr%+S;0{Av<;V}LvcPp&dT!Z4~S>Z4)(&OVIyLjr0ah-t`)t4+x zUpg+*)3;6h3H;auNS4r-Af_$W7o^0%Mi8T#dvK*hNmY3HG?5Unn7f^c9ru@!4XMc? z`SQ*N+8nU}V@hD}`8~l5OsGl*E%B-brocg2yqbYIa0(z^#lRZ)4J6*Xfh}+jC|*6N7wQFX16^|k8{;Jy6Jav#00000NkvXXu0mjfcQ%;_ diff --git a/rep2/img/glyphish/icons2/10-medical.png b/rep2/img/glyphish/icons2/10-medical.png index d8bd7ab83dc1decab0decab36782118582129485..0fad9fb42428132bfe984e4bb621a518f8a14eb2 100644 GIT binary patch delta 268 zcmV+n0rUR*0jC0xB!3BTNLh0L01FZT01FZU(%pXi0002lNkl$IwsklIC z%nK}(P}g-ea0E6$lemXF&;yqc!fR|;5&+IX5VJ82um|SAZhvf8ZK180%U)9zScM^qSIft0v`rD7qjI} SZFm3x002ovP6b4+LSTYaLvINH delta 223 zcmV<503iRT0{a1wB!9w5L_t(oh3%Iy4ul{OML!#lKw;wLw(ta2CVO&i+=eaI5F#HY z?V+>MVmqio`jLi1cHt&~0!5ZF(KzE7c?SO!L7uzgPny%KZns15yo5HLSo)&MWa|Co(PN24Dd&wj@rBX|0XP!nTyR!F&~R0d33+ Zd;u>4UMjc-n$Z9N002ovPDHLkV1i!0U|;|M diff --git a/rep2/img/glyphish/icons2/100-coffee.png b/rep2/img/glyphish/icons2/100-coffee.png index 91f2086494fc6806ce892fac1d27a7792895e1da..f0c4e8c2149af066bb60ae9ec615107ca648f6c3 100644 GIT binary patch delta 310 zcmV-60m=TQ0?`7HB!3BTNLh0L01FZT01FZU(%pXi00034NklAJq})y!V$1w?5EO0%CT9LI6pJ;iO}FlV@fVHlDI$dSOJkbf3|1aORVyiV;aOI%F- zOB{YP&Js7%b88|7?tgec^Sd3M;Rs#IBK~g?OWd*CL=!l`N3ey68hDE?AWDuJcrK*H zA21Lp;x*TJNYp+?C(n_T94SAXWnrE%F$6FQi4jPblRy$#RS5xCh__ z^DQ+iTtz3YJ}-e>2A+1L*`OVx6RRC*HmE*{U1XqAQ*W=Fy&Ev6DtmU1%Ffr?${^LDu7mLmi_Xb|Z0mDBgj;e^O>gEg&}@KG9Vj5a-%b Q00000NkvXXt^-0~f+)mlsQ>@~ diff --git a/rep2/img/glyphish/icons2/101-gameplan.png b/rep2/img/glyphish/icons2/101-gameplan.png index a4fe28668da88d353e36a99ab2581bc36c3669b6..0e0bc143d643b397b2c641a81deb714dd01122f3 100644 GIT binary patch delta 670 zcmV;P0%8661GNQ^BYyx1a7bBm000XT000XT0n*)m`~Uy~XGugsR9J=Wn9Xt9Fc5`5 zXL66y0aJmQ4wMQ)S73TZ1yDELMBQ|=IuKle=?bI{!c<^(5Ot6ob`gRUX^|#K$1`~| z9Q+E{2fSSXx>_t2yk~rPYXgSjW7m$`?bg?v0T2VXz#VXG>VLFatvU_XnSck(fwiU< z`Orb9lu!=LYIUcfgAO4O)XK4bwk@f(pQx_*vB%i0=tJNakZOJg{BX(u*T5bz{1K6h zyW+8a23P`x)+ahvsO414ozTYzHo(0a8mIv~r+ujg-)s3Rr9?ul&$XW`oeXj4141rA zoZCBrof`evV1J;+PbVKz>VB_vcMZQOfNwf(f)FxYjp`$z86t~ZzXRpATZ7kXK(2X^ zl@HbUwx|;!(aC6j-_q|4eZ#1gfHln3_!?PFyZr%G-DelZULw2v1bpvmP#*#(s@kmU z^ae5dKo%#81qeh1inzd58&KC><#x5m+woB82e3Z zFMz3*?G1JVe5Q2b`t!3hrv6`Ou4zh1uBf&3!qfx;P2K2J)Y4v* z@StgoL?HX`!>b$^rYDe6y(d{e===h!<09Q$us6Wt5rP6dwC#)_zB+X#=28 z@9y{dJu?DV06(fN+v{`>flfVtk#gUs>d!EcU@12EUX-=r%6|YErF+p1}tu|yJtQru{GDj%KG%EK6-!i?p3_`$A$@NC`GjQ&A3fPiwiy?X( zX?(YQg44HhGK$3?8=-Qu#+Gw;NHVQ27Ue9@7um#ufobGaP#D4@Q7z^-K~$ zoHB_F)9pqw1Uv!f6PH|-9LAMMpDCgu;4yCc^g&2V8CfdIm1nmTnBYyx1a7bBm000XT000XT0n*)m`~Uy~A4x<(R9J=W*iVF&Q5eVZ z&omi^p>4E^h=?ecS(PYJo3>?g<7ySrA8tmfsWh92XkA0QXwxWV(rD2ir6I<&Yty2l z)iA`U#X0ZHd$0FK?(-T$UtZ_D_qpER`JHo~^Pck#v|26enSTvy-GF}C81azF$;rQk zw__7NV7VM zXM6l7Jb{TbP=ECNJshlv&){2-RtHfAiWk&n{Hln53DoK!>Y*d0`cOrD0Uxm=NNQ`+tw?7h#i9%pjb7>zU&gIc`ApEV8fBoEHdXVVvO7U?##C?3nZ@h>Qjv9e|*n>rk;T5iw;(sHUl2)rH(iS6xI+D1Fm-#wk z^$;^Eoex5ZHqek(8@PjM>D^FpwG8_5l_Zc#5!Av;EvzKsKZvo&p4l9GSY*a*zz4(K?JWD| z&F;=F7X#{aF?u>3K)d)00XIMy_|hV%E8335lLcxD9I65aLx0ISljhJ~LPMeNVGR=L ztk-}Ipah%)BQ$0rufV0UgqE!2%mEdpz*PjSS(4cSl-4VVQUgt$dE(|{T4*;p7k)9(OCn>ML?k;oufU;?NDPrz14 zKtFJ6`kor|s*Ku}2Z}T*l8p>qa-9y&gd$L&b)V(h99vyL$qF`Q+P1B>IB?;!fMqM# z6RUk8BusKCi4F8dvl^uwzF=tqT>B`%zR(>z`~}Ou?`5Na87up)B~qoip;vqpaAyVQ z%6?!|rcc^80YS}AMr1#*oaq;*aqad-K*9ue^h>`AO_U_KC2yliTFa#i<23&jl_f}H im}%%%{QunTG`<1<%v}KoP={y$00001R9J=W*gI%cK@aj9PZ38^UwM3*>mp9b`1^=T7St{RkZ`T=m@A9D_+2w zl*uC_Ba039VhDZc!7S>yjaLcue|Uz6hkJ@HN)ph5n&9wIY`3Bt{m~kNka}#V@DxI- zfPS2cn-)P0qtWVkgs~DlOCnXk{fxc(qK#$p{DZ2Kcy7Tn8C42sV5bm~BN!+{QdYnv z%-|Tll;o%hxqmSrL}0WGNvePgcqsgqH{%xG;$xZ3g(!5#XT1zTY7*axYgWhpF5EyD zwk2{ka2*pub?QxAk8}a+7W5~u2M0^+UBh(b{DHOcxp0rR$VuW~*cz=YYC`1B;3__) z666RtCnWN|W#;|Fy8?W7BVQ771l+UqmvkQAg+!mlX@8+wy==qx8P8Ll$PsWBZx$J! z#|fc2y~h^35R&$Bobzpwb?b35)rlMdPw@d)FeOwHcz{VExi_@T-!D`h!keBE@~DaF z$diP!r_m-3VXqMWW@)`xVBK*ccb?%1cH=cJr#g@;U{kd1((CvXz6y7Sqc~8;fm{K( z*od34y8m4v|BGs7&DPB;+?z$3s~a<)^sm0aweBj=7;(S`;(Ls z`9hXJt(Y|u0RVU<2?|mHQL!h`2ml{Q;$OSa1$R$uONu&=OkpblYT@Qf&J$o3?k<62 z!=Atq?lziRH=uAc^1ILNll@){|OY zw~Up*YGLyumkBTnAD6(`a3(Oqy+*5b0~R#F0OrS`zSeySQ$h3Goh*0}4DWzAuA6bL1b5 zuDd&rYg>fkvJEU{4iiLGo0}G`$U1qZO;3S~^}-VI8+(P%ypffS-Ou_dDEsTQ&0Cn$ zukSmy_h-&t&6oWGtQP_pctJ$(Z%xAmf2ZgRitbonuW4|8d4qYp+F!v%3{qSR7J>-D hI^Cv)470v4i8m)nh`znO;R?`244$rjF6*2UngGX1NaFwi delta 158 zcmcc2xQlUuN`0fJi(^Pc>)Yv$Tn7|*SSDX8|9+wWdN!Y_s@n~{Hw_Aci<=u4%)Xg? zMCJu|$wUUJs>WjHKI=2<-D*0gihnRjdwsQHnttoP7L^7!rVKD~=hgql8;1A4ohwTF zsB`~$suk162eBW8zNo4&ng}^4gNV(SI_p{ga(giFitjzZ@ctLS^X3_1a~XiZ)78&q Iol`;+0Qn(APyhe` diff --git a/rep2/img/glyphish/icons2/106-sliders.png b/rep2/img/glyphish/icons2/106-sliders.png index 77daa27954e41d217d839344b13dd69925a9d6b0..7e91a3bf78dcbf926fe59e4f5ab92fa3154cb2d9 100644 GIT binary patch delta 243 zcmVe9gs%7faY`H4@%>n%_)CyCTvT0;JCR@4|%^hOXo%e zoN08~{8dH-^wQh8OJ)h6G+x<+wR1~v;u5SjDKSgHYa3j>h13h+uu$nMsy9{*hX9%o tt46(rmK1RJj_06xZD;>Rg)srrd;$GC8>=4l;@JQI002ovPDHLkV1ieeYLWl| delta 217 zcmV;~04D#B0`&oqB!9d~L_t(oh3%N#3V<*OgDoT=+4 z5Ya(~nOX~w;s$!)0FOmc%Yy0&gb#73rIrEGW4?vl0NwpqGggdOpf%f0n2Ydprz&r4$ zeb`kX6c#uDADlwBQwq%~V1XmB2R8lK`4*i+phI?g3%nr`!H6kvMA~D6^tX+%NN9nf zO?JRD@Ey4R1tA4mq)pb$5PTqnK!^193it|8&j}v^iv(UG$6%BmA7iRO3%nq^?tK*c zFhyVwJRwJ8a$Q^nR{fQvU4Fw=U>PNa2d)C^C@DP93e?QsHnnDwR=}WmH$UV214tFf zmC&yeTj2JOd!`?Ez+I>Xi~M6NF{1ae@oxcUUSdYfz&c4O3bog`K@>xG-%+_HQ{ zjn@`vfd;tPKD<;w3N_Z=F^6`_5>wzcbcYG;Jw##%DCW?6>3^Cb1!_!tbeR4QGP0!w zrZ#DTBd`(P{{u;ZDfo#9!C#B|qA3$6k+=Ht{PK2Ny_G{6}% z8k4hBKx01AY)-K*0$K4lr_p}gFeX<2AR*uE_3b{$Pm#310eJja(*k#?f+>1ilx)VK jD@7nRMIbe+7Z!K|GomD3)V;!s00000NkvXXu0mjfqLzWm diff --git a/rep2/img/glyphish/icons2/108-badge.png b/rep2/img/glyphish/icons2/108-badge.png index f8b66a6f78a518fe1a6a860f2de54289946b3dd2..7ca2febb40fccb7e5e12b7feb02d7012625116d0 100644 GIT binary patch delta 479 zcmV<50U-XZ1NZ}wBYyx1a7bBm000XT000XT0n*)m`~Uy}s!2paR9J=Wm_JLyKp2Og ziU>}Epo<^~>Q+H;DL6=R5F9!Qf@@YMp>!-xgCD($@akz@++HY2vLwDaaik}1F=FbRll zD6OiAl)r)?<}OK1-t+`U`yuq6puH42VQ|T7K#UbfE;iKtjKr` z*p+_O$G;AI{eK!i0YmA30ynr&b4wSX4O{~cz>Y?~2m1_M03FRbjMhL0I0PD+`3=d} zE*{Jm@enBBz5?TjIb-n`_<4=AWosv{0VhB|#Mc*J&C-3X9wl19AjC5epEcP8*aos8 zo~-z+$tHl`$@3$kPg`*URDn&V_l186unOd*-@{#~MOfUOwy9z=|^dv|#KkVmw-{zXKgWYIOjq)il6u!|OK=@YwMBYJY(Bin)8QT{b>QT7a#J zxo59kHa+=zojfBCi>M10H~3P4PqVS>-eZaKNYrU}T)n6kt|Ue6E=#faPYcXy>^W z=!=#mz_r&u2HvEt@~LHUD;NA;?Hyp^%}-<;@hyzl;=he4^(ANDc1*0000~%zBf|;9`ZePqJ*U zW_IV>-?Ne@MN#mdxd>grSfYT?L;<0R0zwl7gk~xYtn2!(Ykw?&63Bo#u#+TJRVA8S z^9C|t4}98lawdKTyxAkOW96Bg#O8_72-pCry-s^Y`N%PaFFfPRWs#ElRr&w95FcJu=`HV=JGv yb{I>x7!hJ7@vlT+qJYpu0ilTkLK6jq<_jbHIRDXdI1TFn0000e35B_ay_Gjr;B4qMC;pW2YH(u1YG5hF=;ezR`=e(;-hmwXw3mJokk%I$Mwbi`*1>lan23u-Ww#=*>Q5AREoqDmeE)0f!FYYWpn29;!n=1Yu=_dJV4v-uC6DUO zPW)OksVZ-W-CBd4wj%dS>LWcLC#^ZMKQMO@BNVyiKj5?aCu=-I>z*XazkwR?0mxbHpMYPgeiL}8>UV(8z++%HNdQR%)PSz49|Ny}_rTu}ei3*AJOc_C z(On=fW4z!yg@3A;e?GtfxC=B14<2c63U8p=-;!WD`3T6$LxX8E1nvVPi}w=vC#A+n z_(RKI)*}`#0c${6>=WP-Fb?50tWskv<4&Yr7QfE$5wNA~CT5KfL(VE~907V`*_y$N zgsXrXKt=2^2|hkSo9WxDh<_)z3MebPk6C$=;8^^G`G21at^$^oZGW`B(0-O@vSz?l zfS%8>=Ng4>MBi^^=iS0_7jUZVr5Nt6vTMv1ab4MAt63ym1sp2-Rt&e!c@b|yc-qfl zNPi?;1q_va4|6=2g$d_HtXrI-_zCkr7hDC5m>vVNz(x!|5Yd);+v?w7x&sgJSQvaZ zG9APV&VME@VVD3Sf61lVM{ zB2|E|#J`CECE*7<`UKdP(iy(T={`n8fK}iCGbLty*hT3-5PpDd;EQJ*i4vM1uYHHv z;0nMi`2`u-sr1y;kYSPu~mWFjHmjdm&e3F7HMcj7tHF#(xLJd*j82ipu~1002ovPDHLk FV1g`;Ooadd delta 564 zcmV-40?YmC1D>WNoAKR4{LI|<2G6=FMoK3Fl&bqU+ZV+-{V0Q1Bd*|%joxcp= zvcquxx&yY@c>#M{@c9Wm18?Hp5l{v8w-66Ep>hw@H^izdUVlw7vKM^qIu?D1ok9ba zU(iDZ7)5M5QhW~%cIjl?U;&gx2g<-KfY(&^W`J!L;A4@N0GT>@V65SJBb3$H$Ev-D zZdwB5@VCPp3xDW1Ey1azAz&l|=76cCfT{B1A?knhQ%tuKFQQ&!eMT`wLHP;t9|@)c zhN6CK8cYM}XQ*XqU@AZ^SO*5}&O&U5qW)#p9diM4?*G`pZHRggy@+>F&uKWJF!^cv zqFrqRcftBL;W~gP|AD??f2?L92mQ7|CnE2&PgurEg7-pUWyb1AmPm0gV0d`2kR5r18|A{M3z-H-HEINoLj^PEY$OxPDR6*MG`s_Cm}$l zRO+`9wk;_X1bHtsXPGKnyBFGqfK;*bSBw7w{um4- diff --git a/rep2/img/glyphish/icons2/110-bug.png b/rep2/img/glyphish/icons2/110-bug.png index 4a0c9c2ea910b0482bf33e1d6ba0459efba7d1fd..c2e1bbf1e8963d6a505f3078499e60fdb4ff91ba 100644 GIT binary patch delta 707 zcmV;!0zCcM1lk3VBYyx1a7bBm000XT000XT0n*)m`~Uy~j7da6R9J=W*uQHOK^VsI zPc%v_6cq%EV4-LdP*ey(OAE0OR3g}jAR%h2f*7z+6eMDy|AB?3v{MlaTcb(guOeEA zMN$b-5Q9+*i+Pt@qjz5B7D6Cj7;fL4cV^#bcjld$Ya1LKw11dcw$K5z%94PErah<8 z@bGZiyoIy4fuUx*z(w4~x#H%~P_xZzWC@tVCCo-Z$FUhd>-es~2Xsn;ueSQ|Du&RE z^yYh{z+N=)eGxuA(PpOAhgb0h3MQ}@&#)gG&=qy>@Cm!ZXQHZyRw)2RrQn{_shqrQCiT4WCu`KHorc1$@U#DXXlIW>r=qWU2TyBRXt(qhk70}SRSI@SX+#&^iPTja#ihLP%!2z{lmrW}Iy73%m)Xze5cb#SXwRDzvuJQhq@(DmuxHdi z#Wkdrh3rg}f+y0VR-Tld{+{q7YUhP}QL?G}JUnm`V-4!Z!lyE-7Vt|N)7PYhs$e?q p^@UGmv@QL$xWFt4SZEf#fZtF)dIBlWxUm2L002ovPDHLkV1nu6RLcMW delta 577 zcmV-H0>1s)1=$3UBYy%QNkl3>t`oM&+O$7E(4XnnXl| zBWW0p6C@ji5PgVfVuNrh7)`7XkT@wKQX4jkAc9Dglx%SKrK|WJ&vQ?`0vBv9=g(ei z?{m*S_np^;E&nkNbUJ{#*iWF-$dSM}x-hv1pULnU&!BIsrhl#CZgBNuqs82fm?L~v zGw9bQC~YYM8*DLWFy<`f((Nj<$bu1}D+LbF9Z$1J`gY+FxS)ZN+~C@52W1Ix&t~dvFHV zaV|l(fg8cm@gnX^NT4T&c6Wj>yu){NE4Iz2%Ghw&LRd4b2hTb-aRjGRf=PO974#{# zQHeWv5YJZV#jU!rq#mQyEpr0jD(wY))q3?QPOYC!IDhwq95ryh33tDuQ18XFzcO|^ zhjxzpz$`vC85>d@w};|6R2h4LXLZHvB(RJNcx?O1R4I(vxA2@?W ze85$^@8O++mF+%UR-8hM!L^wfOY;63!$H44MDx3FH>-j9@Oc{Tqc!5lQpBZ=wy|KN znKiSLZ93Rqs5>#F^_{un36yqU@u4cw8-3Zea^H#nI`;qA>NNHf=rn!-<{d$8-zBFY P00000NkvXXu0mjfe^8)OAWpx_W82xB`JnMi(}ecw6v*^cuw$@82s zGmTw9Uy^~?jNZV^H=(X;7g+_Y0VC}ju#5U5ciWoZjz6eGJTjtrWADwomR}a<`tj zZ-f{yyk@bW-#{!H8RNNn-eZLr*r2?Rg^bVdh@XTQC<1Z@8#^7Nv6-YlbCF2~Vv`KS Z<_?+9Czl!3{doWY002ovPDHLkV1i$cjD-LI delta 274 zcmV+t0qy?c0<8j&B!BctL_t(oh3%Hn4T3NfMGsC;HedxeU<8=J6_@}=aTFcF4HyA7 zzz=I;j8s}~X-s;O{_tM=-c8#}3t;AtIizl2D_KBlvVaB7KnWCfl=fQ`X7T79wfYG4 zq>GJ!aR@LrM^;mPgzmuPh)*_0hFZW?l(U-bLa9*;IEr#sQ-7d+%uPH!-^DMd@ z2521d24V9M=MJ0#V?n5o(EGaIkk`sC^uY~i9r4!YNKw3hE=GJo|Q2iUK4GE1M$w-XWq<_s=@nW|^N$YDET9r%p@8@6zEBm^=xXKG;t z^5(GB`<50zwyZc2;}kN_c3%c`Kl+^^I)y^-fmM*Uiz)>!$vG%fo({E zWB%`nP}>XOjC`p~5Nu$OzlE+4+?rc_wN;q|?-YCsg%J2P+9$*b-b4d90=|kEg%Ef( z+C!^W99#o8MGPwco4E1>YWsiYO2(c*+1L{(8-LLgOf0%&B@h4r002ovPDHLkV1nM+ BJJTEK<_=BRE5 z{z?---82E@a0hgOmXxma?S)OnW#*V`wukvD75fGPM*xA0sef!v?G}oGNJ^RouyWX~ zWK5bwC)PM}tgwlJ2VgDjK5!%TxrhB6m`ME*_>_7FxCPo}oYAbng01t2151U@lCATI zW_EQ7(F71#`o0u8HXEC^ld99`X+>ka(FD-5^d*^R;$feRv1Kcpwi8VNqfEO445c0b zQ-|%8t>Z(nb$@9Wq6r|tWS)c`yP4zKVVi!|X7`Qvai1Ypv{@*fv$MIqXa&+b=`$ln zk%e0L{m>*%E-)vljV@*jobh{WB&>nZQ)h(7iueQ&0xv~ELIiw}e=ZDxF);AdyTrVZ zTzmp3x<$qqhu?5tBhm!G1ty@PllR{BP;-??SYh6F_FkLtwS5L&FTBYyx1a7bBm000XT000XT0n*)m`~Uy}w@E}nR9J=Wm_JGbK@^9- zh^1aYuo1y42wp-&Y@I+rEbVduA+0CKt35+nZDOkj(8AKjN((KrLxv@reQ)LsLGTAl zUS{Xd@5{X1$;@Ch8u6F4wP^#T+SXQ_OeWU8r$A_80fv^wYjX^nwu z0JP0V1u8&z19X{>3OGY}0`!@W3OGV|0cg!f1)Lx}0IcSt0uB(R0PD%`{nO}n~rwgk&RLq@0q%fTV6VAOdfEpJ>13IKps4cz zJSN|tfFncubS%{@#>FM&rPt`J8vu z>yl7l9(?u#x#=Vnng_ofnH55CFb}?aVl9N=WFGuaCHf!)NApnUT&N2|a5fM1PUhMW iLIv{xga6a%4eJ+VSx+%-Eqg)$00000AZDxJd00000NkvXX Hu0mjf6I7XR diff --git a/rep2/img/glyphish/icons2/114-balloon.png b/rep2/img/glyphish/icons2/114-balloon.png index f8d594e3c07c1759911d938de2584a2ee6d71e24..344dedab8390693c06873e38af971c1b0f865a23 100644 GIT binary patch delta 473 zcmV;~0Ve*E1M&lqBYyx1a7bBm000XT000XT0n*)m`~Uy}q)9|UR9J=Wn89trKoCVA zQ7$>fB_tg<9gt&AfeHc=$`y0t2HdzMB|rsnDhR0{lt2kCA%|In4Fr~%iI63pWbN9! zGoHWR^^V=>^?KBqt8)inrS<}@wT9E_^slBS&<|x&x?TV|FnN{)gJS@*fKYn-oNabrDYxAzB6)Mjz|~3M6$d6t-O? zdo|(l8eIa9#EV#qo;lpxZ68915K_omXd}7(Yq)j;e22Ci-Bde> zrvQ*_^ci>x=M887J9wuO8PyM+v9tdjyanV`(}G)P|2s4;KX=be?FIY-$$CKPr2@}; P00000NkvXXu0mjfG2zMi delta 376 zcmV-;0f+wb1Cj%fBYy!|Nkle`e)Z4&FqU3J5Vqe-3=&7Ogo5mMukAS372vpIo=OYQ@-Q&M7qA8vKqcA& z*qr`1#Tm5&&_>qW0!O2|CWCwfb)@(}V`Rcyd`J9BG^Gt3fq$hCv=`5tNE3ZY1HBNk z%@7ZM^)y>aHT!|3c%C9Y5LRwh1MedOQfQ zmP#pjNS2OA7AnoH7|1z#0iA(X(bsG&je!?M-yv_B&bi0vK~q%FDm19R0}h{mG}QPs zTg<>Pji$0!)^S%GaO7QPti+obNHtO8V~0guGXoC)Qomji-(hzbcA(2bm-qyBr{BN8 z3V6nw)1=jln9T-$cDsqjo_q^A&M!3D`|j0dorTu?j|D%*IB^+ngyWkIj_P( zpi713`CCE~&3|m~5$l22?ItD&3jq)d)SS=W9ig2-?DLES?(q~8fRzBqr0r4xgy5aq zA0c+xA*2dK2~eeaAq9agud7fK+ND59RlpLhT)mNk0CcO6Ber=#2|&0$91tr;Ar*lw zlI44MoS}h_kcu>M*8zM;G_ILIv#P8S8+}0nFA;cbI35Jq1*LAn7GRBTYXK}KMLsuNIkf{Z{m z$Ow#(Zr~~lWQ6nwcja(^CfI>+k`>vG?R)pxXR`v%EZCk#jClrD^7{sS0^c#6y4B7% zmUYiO2~Ys15p#x=n+Kc(A_qQz)B{;h3^Hm^A&#n(&a_!Ys((iXP!)=f_QF%7d_;gQ z6>K@s-dbG{mCSLN3!qO0+rJrrs7zl1Y^MhJPX#R&!jE=h`tmsd)QLV7R0-WqsfoUy zz4mhflvk*5Fpg@}bL#AsNqy}4!2s8&;An3b=fMq)odlpy1t*clL>l6z)@TzY)Hm~4 zK-BS+=0el9&3~f+*sM~Db04Bc(h=#sQDIhqJxw0ZXf7qh`JpYMRt@~;?f{uMx}kah zXdT*zv}-Jkzqq1pA$3FnG@>cPmy$w;WS+k==7UDuWbi*9j{`p!t+(+-i&z&!y}mC9?^ zvoiMaHW`3MJ2Q1hV{Qomz6zz(lZb2F6~I>^6M%e40QxPU(YJ~$0^m&Z3Wd1aXEK1w r0F+AvaN>L#d+wD|EY(7v60_Sc%IYeA-DMR900000NkvXXu0mjfA|>dQ diff --git a/rep2/img/glyphish/icons2/116-controller.png b/rep2/img/glyphish/icons2/116-controller.png index 0b8a117022b88ea221a65af4bd2fcb6eee4a4325..189b0bbfe87a4704fa5632273b072b77957872b7 100644 GIT binary patch delta 575 zcmV-F0>J&t1J?wQBYyx1a7bBm000XT000XT0n*)m`~Uy~2}wjjR9J=Wn6Xa7Fc5~n zA||H30eu4sJOE+pND))FB2{!{V5nHCZXFoP%0jnJh%$ET3jlqD@CKb&Vemm**Kuqb zh>-G0QJk~y&cAa_oK`xW4*!|0q9?E^rGTO-1r*J;&!FLOXn&fTKp&_Z_9ZX{o}@h& zdjwR06Y;GYehXkAzTfnEz0A3J2{32__bGi<>2C+dtOJk0IWP`!3@xFE^vUPJz2xvF zR6t*A&w(yblcP&gGA^?G`lf@6kP@nqtj-*`0-k{vu^q_u4e6^mm+{xY4ln}l48KTn z#Xge?xdTnDJ%5p;0Q+(vwuvLg1ULhBflJM9`sulxga|m&+B4KjerUE2vCSMYW~fzv zle5`p%jG0QKol_6#Ryd*Bh+1pS-l%UxqJoGS$%dlP&HrCY!$IJ9C6IPOOkTZ`>L$J zW2}S-&}jjO(tec#v9%m=bU#SS>A~XXCBXM7v}asLsDG!%1UMDjg-jxH#L@j`sF&A! zil3R&imw3MYDAW#KKT0mY6<-Xxt5T*`EoHP+04aatC4Kx+Ii;u$!0E%1!^<4u=K@p zo&vY1Jx?xoHLvf1CF;j)o4mOWzHo{lHIK>|P z0b+@pCOE2JV23ms`gbAp~r^0;!)s;NH^~0jZEje*OG@+=c)G z7G8mppMPB=ma!(3LQbzhrQ#ML1k45!pjXw2@#AJg3)m|nr)(iVufLsi+}^^?dXasq z_bu=t&+ZT-zJF~?9zPD?NytCe#Oa!iu<kCN3dN8+BM4xtS(ehz*Uz$gT4M9t);} z9P#%cHX-UzcnLfRfqU^CfG^+;c*M9K|4z1KZ%b z);QA=m;!IWXHT03HZQ`*N)v#VzyX-`teFERKX!D|0eD7v0;(jY3qJe7+OMSJl>7f` z4wy=(g*Aa4O-}5@eTT7hT4*ICvG)CpCUIAcB%K!41Wt4n=gIfESkp>p0laEAw3bj< zaiAd~rSsv(GHWLW!J0tLHHmP}`MCp^&xXMmqY8aTBCI+KtIftLqmsl1qpBleox~w( z;C@8^z#sS?`1b^kzVCY*l`XVYK}+C)VSyaItr}VSu@xDKKx`xev2pVR&Lv(%fe*bh QR{#J207*qoM6N<$f)mH6Z~y=R delta 260 zcmV+f0sH=q1E2zsB!A~gL_t(oh3%K&4T3NbgOR9I@txbj!qJR0e!bv4QgJB=p+%49FaCU zNd%e&iM8mQOBC=65|R zQU3?nSOvQK(?t$hYsPYjLa)=B4zE{i+99U%_h*1k6<|{Z*jxe7S1GOC(|}k20000< KMNUMnLSTaI0Bgel diff --git a/rep2/img/glyphish/icons2/118-coathanger.png b/rep2/img/glyphish/icons2/118-coathanger.png index 5bdc2f3b2132463868f242ee39ad9dcbea5e4dc2..3f783fcde45764fd93f212fbf9b423c28ff00510 100644 GIT binary patch delta 471 zcmV;|0Vw|O0`LQnBYyx1a7bBm000XT000XT0n*)m`~Uy}qDe$SR9J=Wn89s>FcgNr zR2_g3=mum1vOzmRRVnu-H*TS~+|mu&PS9k6WP@gdFajg=;Afen&=`0Yt;8o;U~K&S zzvpKxCiD56|IE$M6X?q*U}#1GLvwqr!+O2$GVVRF0b;2az<(0hwjC(TvR~UnL?8w} zag%R)ra}k-&vGq+nUwOPO^px&61lzuhf1losc|(2IkUZqTNODL7TD$(dGAfevtGtBY9QpmHqX!QCv z^bwGA?)5Fs>rL2b*fUWoW8_^Y(M3QaMpsfVfd?st$NNR4zui_>GG^;&v=I>DylxF` zfjc^!GHc$oj>*NA7rp{g&b?mn(~DiGi=K@}>N9|kfKZ(Ct?zOjYjBxAvDnP7z33yL z>hed;_ugfP70;YWAy@Fn`)hidXi&;00000NkvXXu0mjfYy6u< diff --git a/rep2/img/glyphish/icons2/119-piggybank.png b/rep2/img/glyphish/icons2/119-piggybank.png index 3e1fc746d59448ed6818dc84451636abba63d5dc..4209a2a0df2fe508326cc6e25f5b2b4d3713afd0 100644 GIT binary patch delta 467 zcmV;^0WAK21MCBkBYyx1a7bBm000XT000XT0n*)m`~Uy}o=HSOR9J=Wm{Cr`KoEw% z8V`Us@Ca}M*-8_*lz!z^iOY2E3zSxovRO-gpA zJO9pfXG<`dO!&`S_zu98PJnMZ0lvAkHJs1qf0^`v5EueC=6`pVEf52rz^dv&)9KVU ztVS}>17^SvumHvsg9o@aV-c`3J{w?fuCUJJ))^?F4}6&501{vgd?PEKwHqP=Km@*I z#$)5B#zjCMS;6dTUzON?0ZXK`HYdh!5%Fp?CDhB^M-)pXL^84?EsZ@=UJ)YT6bnTh zM`$vz0PfBG6MvF{JW+}7HPtmfHsf0)Th?eY5R$Ioon{hCBBZ?DG)@`;F;X5g(wDXk z9yG=p0k0Hy5ASFMtdK0671~BN;><*71th?L<0jQKt-Zuq-fQ|*F#-bMQR7rsz>;Q5 zX^nFKKTuadf;6>S?LS9M+91`qoJO4{&M?AZAzY8sO-y9K=^1T(k(~;v39$v*$UuS| ztApG%u=H2qDj-I7qyq`?Tw=S;jaAuN6LkN~d8QNKn@)glegT|QOiH?>kMIBh002ov JPDHLkV1hhB$m{?B delta 358 zcmV-s0h#{n1AqgNBYy!$NkllEAo8#c6>go}2?7|1aE2k{QNlokY8PmJ47m?Tj?l^GNO2>ZG8F@MQlS7-#-?g| z@brxW7E*(qW8zKF_cbv02)Y~DO=n+a07*qoM6N<$ Eg8nn3V*mgE diff --git a/rep2/img/glyphish/icons2/12-eye.png b/rep2/img/glyphish/icons2/12-eye.png index b99d2f6d2d95459ecff1226ae013c505e5759952..7949ddc7feae9df6889c02e2e94275a7ba06dcc1 100644 GIT binary patch delta 540 zcmV+%0^|LH1GEH?BYyx1a7bBm000XT000XT0n*)m`~Uy}=1D|BR9J=Wn6XO&Q5?rV zW{Z;$2nH>IYhVZmL2^w&Oa28xgAhtvi-V(sOH*KL(9-NAL7*f>PJ*k@6x`(MBs9F= z<#pbf_wL{b?gNi|{NDTh{C(wj@AouStycNZY{i{GSP}tolYa<^n?yj|YzK8{x7&Yh zF@Q^X?u+dc7y%FR^rg{g1j;9{fHfQe9iZs3wgZ%a8ZZXxznBFWJrvh zZW6izvcL;aaDUkcKy!^>6BxQ|1&Ni_Nkm6L26zSzJl2}PLgps$A;T2g0&jr_5;O2S zp(CKfYT4LK9P=mHXUN=U?Bi=l>_F%UNN>1rvB6w7_76G&uJCV0&a$ckmJH{wrjn2E zNMZ*@5XOJ{3O0Fwloo;zt`J}4EERkJU&lwV zvOX+Me1>Zei^IaoMu|m6SY^$vn@uLdelV~M^Y2?`GMf&N^Tz0E7f=u7-T%f#e$)IOH3MZK%AJ1Dt@l>unjBihr*vfjy8}iW>tf;8$cN zx<_OZLxsQ}kXnjbl=v(x_Nl~bl)w?_TZ$P2mlD4VFtYgdC1xW8PT1Q9U}M;QiCrdV zQ*T3t-%PyhFnLk{+}~ni=o3SKEb*VbT93~jI6K;P9nQY7?@(6@ttoCkk#lQWCumWbl7)YdzrEeu;Qpp_XmOhKGz&mDDYhVf7 zVpes>&n;3*Um;_b(l?bFYJ3C=z9&Be);+Ro$ykX(I|;2oirMpERQ|6o4 z8k3GOtqlIJL=*^(ufS2-Mv>h#@@oF-6S)7U%rCBf3k4?%gyw1mKAiV&iW+Xlt$7hi id@>i9C=i+`5SlMWT{r#&z~-U=00000&p!BHpxj7XS6>;|-C1F=coz%gL1H-I~U2Y@Fnj-ho1 zZ~;(;Dm(^Q&B}&K(uAn362I`htB#5q>**Sg>*-p>;*A&gcYgz}`4WI#p|hBtn2BYe zVa*Q${lH9U#z{Onu6U~`-m;q@9VL;-Qeo}mA2E%gmFT74fsT$hp`PP%bhA-EkQ#7% zyqS$!hRfl9Hx^NV=18D}P#ZK~^1l+CF2*d%Y@0|f~OxNs5^H2?qr07*qoM6N<$g8Soz AvH$=8 diff --git a/rep2/img/glyphish/icons2/121-landscape.png b/rep2/img/glyphish/icons2/121-landscape.png index df91c4598b7f856e8597dc8035891b1be20429e2..2e7f300305d6d7a83b756ccbe3d73a98f4416bd9 100644 GIT binary patch delta 348 zcmV-i0i*t^0`~%tB!3BTNLh0L01FZT01FZU(%pXi0003gNkl04)GNRaMPh5`TOu5K25i;hNxFfdQEy z_ZBCgq{;6AEdvYSNVked8;^pPfjwaCx3TdkXc;gM;$UbQXdlGE&@%AKMRaT9QP48* z3C!qztuq_{rvMIg8~p_AG$xju11|L9hkN54_yay91CMbI+!Eij26D;Z8U_s4t?>)2 z=+1&A_r>=tB~_D4TgU+4T(4pdY#hdT1Gc^bq!l#1$CD5p)Aaa0Euc z4#?_C(eH}1T zZZ~l9b4>N39e7Pl_B|jK;0e@>vsh2}$#89A+qmjWvl7yc+JD4@<=GMm-JeL6knIa3 zK`OwVkLhZRtFOWHApk&e}dD^jDPgfHoz7HYI>IZ%(5Y VNmR4Zq5uE@00>D%PDHLkV1l-zc&7jW diff --git a/rep2/img/glyphish/icons2/122-stats.png b/rep2/img/glyphish/icons2/122-stats.png index 73ecde83a05f7b2f5a401bc618f7536bf4430415..c85420e13577ccbf8276c846e05f1fa4544cdfc6 100644 GIT binary patch delta 409 zcmV;K0cQTV0SakKCe8&~Cs8@d#|tj=%=(!L|ghX>32J6^TzmabCdh{XG8$ zr8pjs+%k8$3y`u4$jvSwH}|0@c3rnc{u1bc+I&|))3)sxI)6d#4or*3jQf}gato*f zV~gY#AZ9HAC2#@0&2cfYYpB53B5MgqUCXXW1vD{685NGu-K6EJvUBg;N`H@_+1Ly~w60X2FlOtHoL%=~1o8G&bMa;X6OBn5pZ3v(RM zU8$IhD1oyXzkdN=!u(v+;)-W$v5&63C7cm}C z{O*DZxXzk+6Jk2B>77ia*#Fqd%q}1|yMWx>ynr7wT@pb*H45a#00000NkvXXu0mjf Djk>sn delta 285 zcmV+&0pk9%1GoZ^B!B-&L_t(oh3%K!4TCTYgfE?-qjUs!la9~{ScOqKLPuZ(x&eI& zk`*QV#HLrIoRk;KB=;Q_5dpx26YIh@U{wQPs{ydZ2KWHD0|;^5V{Mlv;*yLX*|SFg z_Z|p^`esk;5i-jQpmvsJV{K8)S-xeS8F!xT0#Fl97kjQ1rhn-GLo^Nmz4dGlfOHhr zl9kva9^qLxcoobef~63>>KWJoqcZzQ>hoLC5W2r}FmDEsg`_paY#OTH!@LRLsm#3# zJvwnMVE~NCfA9OX0}A>%K+gP@QTQ8xS|d4dITJuSdIHpDW7NgfVxbdptz{X=6` j`=Md00kG8o*cSQ%_i9!~9yTL%00000NkvXXu0mjf=T&=4 diff --git a/rep2/img/glyphish/icons2/123-id-card.png b/rep2/img/glyphish/icons2/123-id-card.png index c7a79f5cc8d60a7421b3badc31bab99728e9a157..aa1da76722396ba612ac2048eb610882d11588e5 100644 GIT binary patch delta 307 zcmV-30nGlC0?q=EB!3BTNLh0L01FZT01FZU(%pXi00031NklP*EjfK+Ym84(NKwn_-IfT08d(gXq0j9$RB?|?K-AHdo{EC6|uB%3}1Ofujqcz>h0M}LHD2q=LAu&ke@ z!Y9%+V|v$sf<17n-=Dw-xVC)07S>T>L%>_p2mLM^3$$^B7Mea(0sd>o*vP<%YKLFI z95^a`oMpgtcCWt! zUGVl6>bkJEH7p>GiGbXC6a(gt!ha!Qf&giP0BM2%X?{+~EqtL4I2`~0002ovPDHLk FV1krMhi3o) delta 248 zcmVp`Ta`4UQD zU;ysG>-!uw*6fvn3TXz`Osn_PKlNOdn*rQ*=8LEh(YZ=dLUGTXIm`k>Lxr}4mJB>d zlY!nwrC7lI4C@h9Wf!uZHCraK>CqT)o;6M=D%yZH1EFtYvm(-y;v6_awsSyh;ONHL yI@c+G=5pT$M8t%+Do$BKRnZNUrW+_t^9DZEue{ZUtHF%`0000MetP>b_U;%F&^~TWwygPsc$OgI*9tu(}0;TY!Nnb+RG^PDs`kO{+n&LAH z=>WzO1f&T9(s(bh9Qs3^=PvtCfHklKjzE%SSu~`9!2%;#0e=b|^uEdiysI>^X>>{f zMH6fS#8Y(QN+3oDyhR7A9JSktjX((;XaZK~=^=vc2)vv|F#_+m(I6m=_X4(y*y~-W zKI#jjtgO--9-IUJI2(Dz3@7oFYoI`n$O+gOWf5Tscsfpa%x% z2IY_x6)xn*traPs6s4^q=X$W;ZvoGynhq00>D%PDHLkV1jg;c1-{P diff --git a/rep2/img/glyphish/icons2/125-food.png b/rep2/img/glyphish/icons2/125-food.png index e78d8484c95895968264174a8f4c4ff01209a05f..35f583278b13959f239440a6dd42b530f3bbcbe9 100644 GIT binary patch delta 425 zcmV;a0apH*1HuE4BYyx1a7bBm000XT000XT0n*)m`~Uy}bV)=(R9J=Wm_bg%Fc3w5 zQ1^rz^a#BIdyqH+NZF(AvO!3!vf~JdBcO5s_Xa&eI6-p*SlE$FV7C0GbFkX<}udWme|_J_ElB-7MLVl+Yf)DRBQ8z=NCH!VKYz*?Mn4(QlCa20i0p8!;Z6CN5KYQSc4t?2f~d$ zMDEs6#5l|iktMb-Dk1ja8VE0O|~yG=HM$;k@j$mnnSVY|DYQp<8j=7G0G0z| z?*LAI?0{}dZAo1-Y!1}k+`!n*zrOkLFO0aA*c?~_I48!gz4vDfKdB-}lK4CEd8k6` z2Yy9h16bi_xeWBbeR#i>dPPF4Wi$@T8MV|f9j_H?wxq7v*eCEJ3_$9yru1p_2%tgw zpf_ZVpGUzqvUuRj5;Qd(ysz;qISzB?MOct*A+|ZiejCWPPq2+(U3A7fQqM(mEM%=h z0AE>Hzbr@scvkqm3iM;>d6Fb<6n-B9eHD@bG)Y{%jFxU>E#$uqY6y-ll1BC?ng7_D dnmK@}xdW@hh&oxHExiB$002ovPDHLkV1o7it>XXy diff --git a/rep2/img/glyphish/icons2/126-moon.png b/rep2/img/glyphish/icons2/126-moon.png index a6ca515387fd3cb212e6c4ec7b963bb6d9b69c1a..d38d8df5f4af2812e160af81da20efa2e364ce27 100644 GIT binary patch delta 400 zcmV;B0dM}^0;vO#BYyx1a7bBm000XT000XT0n*)m`~Uy}TS-JgR9J=Wn9EJWKoCG* z5CymdmylF|(}AfVAo&hQU%B}R6&NbO9gtK&O4t(I0UQRSAlA{wGpm&)ze}X-Z=Pnq zUR71aoViLJfR;rdHM1AEp4zZ!nz5n+*!}$Gz!BI2{aAy#u79V7FkblyVmvR}MSM^Ag>8^%ksZne zt$;%$F5wPY7hi~w?3X314Ep^ZcLov&Flrp=Kq8&J7hq^AG3%pK+0?&HnV{NZomOp0U59X>Hza} zG)hqcrk8u!Ue}sqC{&VMTd{pkfyJvBxDE)ntN%*fK;>9@fPdl#;v4B9KHxr}TVZZ5 zBnED6xX1;$y^$EWsHqSj-GS&x3_OMRRS4Ni+ymzB$Y^Wn#IfJ7Utw37RUzaK)WA7l z{*I|1k=!G9@Lou=1IFW-8rYL)H(HLEV@}(>@qr z7u$d}F{R!wfjvhG2JGu(Mu^{`Q)1N&*eLnD=lOu>95^Ch^)4i>L=w#Zg<>-sh|L?l WTGI#G?mGDo_|`DC3S;YmVYTN{PPt6o}6?cpbA`D z)bz!STH*>=)bz!ST2B5Ujsl^H0-=cl7M%OM`7s2Zfg7Oh&)pa4EB zYqv!na3tbFV2Zs2n8vSwTc9Q8%L3Krm>oE;02;uhm@f;AH|OO6bKdz8?uz-cKndJq znzE%3Gk@XYEn!pwLtwz)D^US+2btfvdX2sTk3a|L0h2v-uRGV38tmgc@B&<5WbQC> z0Bc~iQ#(e)=Z9>G*;*aU_L^>uRhVa|R6~;ZZ!|DbAT(cesn+Lc40Ny$ulgzKZGPOlW#sI^IlS5Y>8RvyMQR!K;Nte z^NR*CNoVZeci^;>DgqQ@E$;ml${lDBlZW^xvVp$I2Kpu&Xn(*{YJqX!Xu<}r@fy^c zTSICCsf~n^hZrniJm>W2+fxWsykoP(g|6kY5C6>f0r_fC}9?LhOJt~Ro-mE{GGIGz)CICEb{g;VUr zN4Qs;xl)^hEj4V<#Et}s{*g7|4G*RVwp15iMIZhb29lD$M*C*z4SWKzq@$FXG@ktc O00007>$bNug5E s>Mo?x4*n`Z#tpD>18m#?8#ln_1WisIoU+uHOaK4?07*qoM6N<$f~E6n6#xJL delta 193 zcmV;y06zbY0^I?SB!8qyL_t(oh3%HX5`Z8GM3<%y@e}R;4|eUMQb5SaoAK1RvgHy4 zpdm1acL7q;fH!Htn>66fRt7Er^jMc-9U|?;{_Y3sysU_?)xnV2nCH5&V>JoJdOMdG@mP~8Y2(e`wojMY}jY_+aMmEISUw`=; vV}w|n8{%czCIico2E0iF-lPFYB(2SM4#00000NkvXXu0mjfQ?FGt diff --git a/rep2/img/glyphish/icons2/129-golf.png b/rep2/img/glyphish/icons2/129-golf.png index c013d3b8f5745e8d740d7a0f58c9e95438d76e2b..ef49e97a1dd7dc4a5f9ceb188eac7fea4c161463 100644 GIT binary patch delta 468 zcmV;_0W1Ey1MLHlBYyx1a7bBm000XT000XT0n*)m`~Uy}pGibPR9J=Wm@iMmKp2Og z5kw_&va)ir5*%_kBw_-I+(($3L=GHsd;=tIm32(cQCSD#*JWc2_TKJpO9M}GX>w~X z@9*BfS!Xa9&}L4KZGbPW7jSBMX*3#bZhZh#;JJBLVa7R0!s-hsP9f2As3IBQFK^kboy7 z%0#RX%279V9e*cM;D+yB`jHp{`oN{f_g&;U6QKnxLm|XDCPE6x2sgAHJcPPLoH&0Y zL>0>Mi}`JsM-x{83A$~7Yqr<*5WHAlv zna7oKZFyaaRX~ACTaGHvu8^r%mBMOmEm-AH5IX;V?jD)e3-|=yi%Vs*=DErM0000< KMNUMnLSTXw8P1>p delta 418 zcmV;T0bTy>1G@u|BYy#cNkl>?p-!5H}K8u+)R_Z?tgc?dzS=Q5HVYucAzbPRzLzA z1J}UZ%$qz7$DVKC8CQMm=f+hzzec+Dy#+M_-&b=#!+D@V1^vpET{*1BUS=lk*%|K zEYfJ3fNi3ueSgtcK#9yYz=ZGfx&?>Y7qtRPBs1JsetXjU_7BseY1#*@-egyQ9xR@aq z8ec}pY-hBb6rZzDfuziW)tRS_qg&Pw6g(i9dA6Bh3B5JDmqT4f2Lwbe?L&83wHiBwDVP^x>1P*Q5Ednrp-qq(${(n}AOO0*g(kx*GG z(MU9evP2Fcgs|kaM3)}sedg`Te*4Y0sVMz3zBe;(-prft&3}7urYV(5@h{`dX)mBr zGzVqO<#IvTdVo>jIuHXcO8X{I0+xW!z*ap$>2x~Kx&kXu2cy7qAYP+CA>V7jGoS!u zfZ0YTZq$UjfEC~qwHJRJ;=qiI?P_EJjVO==egeI!tq8mUMu5whKin+zi1ZZ|f3L_$ zhFwHh1(Lub(0?lR5|9JV17pA(umO~%Y)IRf@Z@9+B4d$|N`z719Om~&rM?gJ15bd% z0OJpZw_nC0vSviK6T&F)9%vJK54Z}fss1?d5?BX*OIepTeNNV7?4H!yM79%L6}W}* zBmhUiO<-5`Phf0%0^@liQW8~t9(F~>k<_or9D(7gKz~-zQ`nu40`r(%j`@s_3C}#% z1lL5?adXs#ivmfk2^<2Gs_z9bpz3*y*EuU?MA|$IVB&^{N$mNF<8Yu|6wnL&igkxQ zz_{wmVGigV#=iH2?w39f4}or>i@=8(bNRwW0qyTUD*6G&&cW<*#z#g5_%3ur#(G$& zF_$k~6o2SebV1R2w=x*N55^3BNbyXfOr?T)>_&~beBqJ{wJ3UD(b{+GByAdKS9FKa zn~JAX(FZl=^2Ogwr^^B8h@zu}fQte;%C;+7$AKP2r!aqNUuX{rMeDKpZv=_xfSUrp z6s;qwK73j1t}bBArbF>WsPywoHDv0!eBq+Ns(+$&w0ukD!SxG7S!^UP1MgIyKG1qD zU$`iscX}9m(6%sXvWGOVEIjQ}hNVqkvtDBleG70`_31z33l}ex$GFe9Oqj-Gl>m=` z3)o#u;vY>HfXAwy#%@Rf_!e|gu3kv{a4%s4lZ*{w6e(2?QYZ<}AU1(ZV50JIbJT^a z0)MmENE!vcQ0YCUfJ^e#{(iHn&qJrk@DjjP9Pi0tF7@{@ciA>szzT31o0%3cyIc=f zFqar_0}gDv)r&uoe!OQ+j`(a5_{9#CV`)7b2>6_Z+z*BVrXRp1Vl5!nfi=0dwb zAMU^3Gs8X_SUjBE%iOG#1SV+tJuP}qE+>Mf|F6@hj6d=C#W_IJK*0b2002ovPDHLk FV1g0z&cOfx delta 663 zcmV;I0%-m02d)K>BYy&QNkl? z%=>S4=bd+E3y9fZwASrFUEFF|-zVTD@D}(5d@%d~xD7l6o__%Mnlu_W&|U%k5;pt5 ztRdUAgfD<$3CCRwjgGYh5CS`nLp#6-2!J_oZQ9&$qa2xV)d7S+Tb$?sQy?lJ8=1Ks zk#E-sqO`y_pex3Ez)1x?Cq~wyYjk@LU|)>hVfi2a0!)DWBx$;3`V%vzb1#ezi+$e# z%*0qbW96Td{(m)Gbj%$0OX%-dHanG?tf_J;{1tHcAIDuB8W}4;m9f6B075ac4P46D zk>lV2N!D4I78p)35&27_)1u6VE<90J>8bGNq)U=%K^-mNvy6=j>Zlxmu3#X%uKoc@ z-p|uGEuvfzIJsNu0+OknJgj143 x>kaUm^wVMocmzBqx#Ty3rUO_xHvV<`ALRy23J{nw70dtt002ovPDHLkV1iINIcER> diff --git a/rep2/img/glyphish/icons2/130-dice.png b/rep2/img/glyphish/icons2/130-dice.png index 2981a6c997c27ff21f150dc49397085e04a1a04d..0bff011167d378cd096ccb8d732498f16b9f63cc 100644 GIT binary patch delta 483 zcmV<90UZAJ0{jDzBYyx1a7bBm000XT000XT0n*)m`~Uy}u1Q2eR9J=Wm_bg%Fc3vw z5eMK5thf#0296X$5u0{JcI;4h%>tnc7G#aM5Vzn2ltpdfShg9v#1W`ZisH;P$)C)O z6L(hEHGi3-sRiuIamcY+tsa1zjB9qlGFy>{wrzvHSO#*$1AieG=R$iif=%pjuQ#c^7>6DR*o!e$53GT$-qwld4w#|`UI1ks zFMt!EO1utGz6V_K2Bm$;l8K)_*uuHlKm9K_SdUECUV0CzDF7=I4R2jX5`(326zXvc_NY0GE323U~eJ zYkUw{UyK!iyC$$}9)==eC*EY+?TH1E0RHcia!)#jS!jTn9=lK9wYmN-cB8QZShD*( zP?pUVw$b}}zz@*#!}@xx0N{J}P#)g~xVDacGf|J=U0g7B4^&!6?7lt?J;E2+m>Dqm zG7;;Eo`f&c5&?ieh)~TZeO8y8MnmOf=*d_UlztC{g6J7}LGznb4CnTaOz{A-!@tuL Z^99rIVCZzskr)5~002ovPDHLkV1gy|*_{9Y delta 348 zcmV-i0i*u>1NH)tBYy!sNklwnI=tYp$`Va;V{J zyz$JDLM33R2ZoT36_L#Y68RVrDgk>-@~F&f$gge0ib(DOihSktS1}@_w-EJoG}t)p z6@ZQyQ!?#0Iy+Z|Q1|=7c=oMrNHB_hl8|o*GF;93`kN^Pe8a7Iisahqr#unlf!Saw zAtsDK7Wi`$`&C5L&KORFhJ11loIs0sGVM2vovT916Oc|K`BfsfCql?)72p#QLO#0y uPDCjANd)xx{7(4Z^I}N9Rc3+NUnO2-(0?OFdj1mt0000-YmeXs zE@L|w_cu`iaDSzDjlxm9l+Mgff!MV)vSWCSvn8D63b-GPJBK$o6ZDfU-~sO7Me1CT>aPGnW(6PR!>zh@OEbxG5%LUJ@~vV_f18cW@ow0zMY7nqye13cbQr zX|%}YOO8>=GWu3(QeQJ{J6O*NTDlKxOHFE=r`eItQDjy{tD=$ZNFqLuu(qFkb`hwm z6Tim_J{_nJxF?m_b+HlT4`!x+ hE!NCbK;2BdfL{nWM$1dy?KS`a002ovPDHLkV1i~G>N@}c delta 375 zcmV--0f_#D1d#)fBYy!{Nkl!$DwTzZ*x95CDMBD%AwGbOodFq($q@+`yxZN$UPykJ;+DIc`Sx!ASvCQLJys)j z0lqo{#MZ$ABqicDKz*eo4pBx8;NJ25m1^+?NP$bBy#-=aXMcbcn6JjZS0I~e0*`eC z$Tr6B3IKA57YhJi7g_+zKiAVO_bq`Q@ambbP`+y*1BSpA|GQcWj2&~D{6a1|1t$9p z0MG(vF#(1FAkJ7j*vBGtwOk(z@dff2qds3%ec;D2XHWn^n^cwA?4ujOXp6Wgrl`+b7jFh2 zXp=fOF5VPCfOpjAt%^4X5VT2kjf$5fr!dwRaD&?HfPkkVy8L{ diff --git a/rep2/img/glyphish/icons2/15-tags.png b/rep2/img/glyphish/icons2/15-tags.png index b924dca81a196f5c1923825b06bfb58e8db3e241..ba55b843b1a433743a86b906b1cfa7e3fcc1c095 100644 GIT binary patch delta 619 zcmV-x0+jv01cL>TBYyx1a7bBm000XT000XT0n*)m`~Uy~HAzH4R9J=W*v(5+Q5XjB zpPG^p7(t7QBuk2dplBfkK@dc3il{KCR!J>`R2yh9KxtT zycK7#rv$zW(5x+V3kUE3zl2Jh6)ICIQUy%oH9q~b-iABaD^wyE(U0E5oHa-hFpWMO z#STHpe6-;%dVlaxt%#iod25g&;H|j_a|X8;vFQ-VZ^mOmL_5x7dqVENND;7GAedwS z5_TN|`3-7CTtIh1exwQL$p~G+4P2{Z+lePwhibOgj*Hlqz#;h|K8~BXF6{4mSdZtK zT`rcUI>G$&#$E@4Ydz!(8nV-n57Mt_Xq2cBkYxrnZ!!D0jq3uT{; z@XfJFsKi%1%hoz^uxOyzEp$(4g)@=0r%Cm(<0~=MD%5` z3J-j#4{;Tz@I4_$uh5F$$2gbKgjc zU$csH5@b4B*$3GNLB!_mC-x5n9PxD5J3E{PJa*=zbk*B${&_^83 zzH^jHp0tCk5ljm2#+QXQJ0fiaS%8++|3;S?s{)oAe*lurY$>dSUl9NR002ovPDHLk FV1h@)6lnke delta 552 zcmV+@0@wY61;7N5BYy%1NklmsqOp-A*^nX|G$g+kvOt=WjLc*4eQxfZ=9>FF=bo8v`PAt?ozC-o zKkw&!&-b3^G*B2|4K25UR1G}9iiCSl_b}!Fb|l1DRJmv1CV!sg4A78g5x>GDeqk7g zusuVZS~Jk-p*;|$NAMfhG2I8h3!14q1C1WW4B>*v|7!wb1c$M$V!TBIrKpMB*f_6$ z4#)69%*3!rr%Aj{jMT{F5U`|cFo}^-r=B5h&KswJCp*j)8B=;5+@cIGb>8z zC+rsxKXFBXC4VagU|JY#>1mg7vlz!Woe-DtAt64}7x9>Q!!L1Gq)j(9aR;k$qwHIS z>7R zxQLmm532)k3YTi$+tO$3#X9UO`@Z9G)d$rzaRgUI`G2gdkJy6^0!DdVSw%vdk_G`= z@kRV8*71-8P~eux=MU>>|rWi<_fmVAc>U>pAh}~-4xP1dC@I4Oz`Xw@-1)#ul|1OFBGM^2g5Z?%!Gn>x}P~bhbWHevoI+bYG49<%( qds3f|av_!iAgc!cXz@S5a_bNDG;h(zNrV3Y0000S`E(00w8qku5E%jWq;!|k37%1U3_Dj^%Yy)f2S!H|= zHsdsE=6y^v4fNt3&Q`2j!l9`DIwfec4D7=ltj9JSj^=ivJ8S>MSW4iODwKx~oD>Yi z9K{DrT4?48W`9x^SV{w3xGJPhnYnDu63$};J=xq0o~AC+XbP>t#{bM6w@~~`9KpA& z-zn@)nP>QwDxeVq9k_-If{~bRA-Bs6;WEDBqOcP&GZ@VyBCmlCToFp&1{|xH?~7u; zsSr0U+|V)O_>o6Q9s}*TgssuoL2Sy}T|!+iGh8Lc7=I?R_8cDP(1COVB_U@i2CE$CENo&IDx&<{DVbe%?dj?o2X#{sXOpC zYLDUu?nh$>g!==g@V-X8&*rOAE>d@3BKu9RP+17Id$)hf=}05O>Lt&E>_tWYH?HGu z6mMF{|5_!dsI$;VJc{}c3yNElA`f%J_##x6R|Uphlp@bUbHbB(U4b!cQuJYNs^EAv vSuU@Xxk=f9y1o)Lo3_<&qb+9DK&$x!?AKBdQ>M$R00000NkvXXu0mjfhwTu> delta 577 zcmV-H0>1tE1la_TBYy%QNkl&QL#}hL@X>)h=f!@B!#3B2_ag{VkXNaceA&5 zm%x3^&3kY7=6y47-_C6p{#wE4Zg&EWq9dT)sMI-cq^Vgfj(^LwCe$kcwl$DQ5qzy@ z(uyykJi*{x=xI9b8HwY^8v4oWU&%cXN7iVaoa zIEcO3xPoH^@<6(PIiUnTRq@{z#EoXZgf7#!2-g*C!he3OP0ZszQoGPFK1TKc-U-jZ z1n%Q?6hFBHSC6n6J&8FiKQC2zjPFNksZj{-9kG(YrgjTg!*qf%DM|}#_`BLQ4()WlzEvO!UmzU>@Jaa zNtAgPsyg5rewD~s*P>;jzhu6eST27l3nS$O>iSC1YINy*8*MK-0@{s#H#Jx5qS1Ui P00000NkvXXu0mjfzf}zw diff --git a/rep2/img/glyphish/icons2/17-bar-chart.png b/rep2/img/glyphish/icons2/17-bar-chart.png index ce72952f888c6397643d390ced55ac3fc1e29e40..1b69f45435ffc4e02791d6189d2c3994943803ac 100644 GIT binary patch delta 208 zcmV;>05AX70qg;gB!3BTNLh0L01FZT01FZU(%pXi0001BRztpT_@Am=w}S3nqjZ6R-CW#*18xgpulv;B^Cm$2}w51ci%$p1$vx;u01dL zWd(-r@E7hYKmjxqKtlmEHU9y5_gjA#@v91`UkXMN_%;fL0%&el#1CKYskGE$cS delta 187 zcmV;s07U=n0oMVLB!8YsL_t(oh3%NZ4S*mFML))YT)~YTg^gUnjr3}Wi62U-jeRE% z)%4L%3?u+295Y!rASDE>naR4W+Ql;)Q^X1Yz|z=A3kO^1K0+a2P0b$Y#d>?*r5}q4 z5OiJfk{$xm21W0?kC1x-jXj{6`I28wVCV|J;eG-kU`+^E6Ep(WBybm78RO5y)S=$} p1Zw`o^i9D?*a&?V_Yn#KYc7&_4jaGS+MNIZ002ovPDHLkV1l=@P&@zt diff --git a/rep2/img/glyphish/icons2/18-envelope.png b/rep2/img/glyphish/icons2/18-envelope.png index f99067781208fc26fc2d38b0a51e96569c9e38ea..4964e8114bcc0e67c50d39e9de4e62510733fffd 100644 GIT binary patch delta 375 zcmV--0f_#<0+9odBYyx1a7bBm000XT000XT0n*)m`~Uy}LrFwIR9J=Wn89tsFbqXs ziVWZlvO>B+SMUVM!3*T(Tj85;UcsHfD|7>Ag>K*xdXNY=LJ~(50il52(GUrKke>v+ zYnq1t%vAAVtb5JhRR^+#bFmc$NEPs?c%gdo-9$u+ zfUV-UFcF~@kXpQuEJ7o|s(2wugk}rL6*b%CtRm{IhatQ2Unnz0KyHeF+!O)1`2|&a VNxayRnl}Id002ovPDHLkV1j1vs89d^ delta 294 zcmV+>0oneM1Hb~1BYy!0NklRbcBv#H)-M`_64Fb z{NxI9HRUA6L~+Ef8;s(>~}1U^6yG?|ayj4fsn9xd zo|v$TfR%_9_dtBhsR>w#FKc0L8BJSktBLaDe397|=z*DartS6Fv>h#aFS%;qy$fdd z`o1X<}IDf&MrG|wuFEmEbP90@6CIeH2|xUGS`+JKz}SNpTPAH<$k{(qJ9Xp zlGg4DrcaTabGHBB(PSpEQpu{ZUIB!7tpcf&wvAu{(-zp=!or5e5nXp z0~S?GjW^}_Gw=r30O}bw4}ovM6gc6stTsjd2$+QiqD|l?&~Ri$>%2}n$)@-`4-G_H zLg&CXFjv~UY=5H&9^%%(K5*=j&wvlW7H~tZEs^<3=n7A{&z4?@x&6sbX4*SNONQD)3IOBDBPp zsvpwMz<(OBr?mC4hw^l$P2ex-wqe5Jn#f{GdIuYe&tS9(%rIXWMwt424cr6PG27tC zV>6O>>%e`nnTz~6iqjaxt${zl1K>7rX2}N<)Ne<>&ElbDA9EHsBZ4wo310xd)0Iya s6+B#RFEq%wFO|ywkGo4|a9f|lHjKGnw2f##p4n{x$c|a0*hd8_q74=jAm;x#AMwu3cJf|{eV%af< zPR370Ff(A^puZO#9r0KMwniXR;LyVEKz%2+LlgLhr|KLm)Kg$9auW%EPn+sKG0K%vA2VMT+0jD4mLfJ=r*Z$R(t!1a k=b-3w2L{3Y+vwQ%1qU@}E4CD2ivR!s07*qoM6N<$f-YmlK>z>% diff --git a/rep2/img/glyphish/icons2/20-gear2.png b/rep2/img/glyphish/icons2/20-gear2.png index bcd50966cb694a7d1f1f63c4fd113aea60dfd34b..38d1a1331cbd407b0663bc5726f01f5cf975df3f 100644 GIT binary patch delta 599 zcmV-d0;v7h1MdWoBYyx1a7bBm000XT000XT0n*)m`~Uy~AxT6*R9J=WnBQ&VFbu|j zKHLBqLEXT&L9#)*feU1Tyk&&Eb%e_X?FP9G>Jc5XO|?b9;c%F&JAY>fR)DL}cd}+tSP85c zy!`>RB5O$rx$N18tXY&qRR{^xcs1?}_-L+h3`X|^@3*4A0WOAje}ZKP^3YMkuAwFM zx?{mzun_Q!d$5&4IpP#5?c={F3WQWHCI~$(dj!(2|DDJMc_O%8M)} zk*}ML+9W>9-G62B{m7aUl?9{TRjfY9$!j14zB7 z1 zA+!%Z(({pAd#9eXk6Kf%Et6r*0X5taysrh#$=qkp;wEk-zoC`AA%tYr?pO)vi)xaw zC**+66~762Q}thA4uKN(O!H)(=$+iFPp72`+%iCSO^rXvy^Gf0Ercxi8;wuEOEmAI ztC{+P-%zfZn~R1aVLL+D5RFfyyK)ovCXjys=(6Yf0bp_-JSv2GLINXWQ-5^t9nb=( l<4(pe7z*2;C3J# z>~-LMY#3t%HNfimW*7wl^GNbQ3jiZ7jE}PoNJVY}4S<45lX-40QV9G4u!{bc#$?AB zQJw%Q040E)+Ij$n&1=N7lEyqE-x(^=#ygavF5!ssdQKAR0e^!qNQ;u@IE?@g2_Gti zJ;FooR05;N$S<+71GPzVIgL;9fHXeTSCYu;fx@xa38(EAa|s)R>b z9fZnV9_$H=P);O!;POX_o3ejRSBoix9&~R4V=VP?Fe`ndaOotDCE$ze%gN|vH?m>H z_&vyal!#HG5`Xg~)E?#x(iUKW80NW-(;bz=bHI_1@mwD}7&R5wz3RtQyCuDn`-fY&cTnOyG% om)U~uN9>c|18YpCYbxZlhX_jviBfu4J+#MOwp2^B?6H(mT0*IoYAMwvT0-bCrKcQo zSW5qZ5K0gGu1;cSvh%*f2>WHs`_B7&o_T&V-kEo1rqk&-%YU4!yMR=t2I}T~Oi-`a z%Nx3gb+pjLwQ&3=2H3`X{2mwF?RHDoQq>)3;w29746FVZFSJ*~*g?=Xt2l8L23pv| z9W*A;H-dIA#3qqyppCDXkBFTQvF(%sQVcBM9cB}9%!V8bu?bQPyue&S{D`@bD~ebH zEi7gFeO$+duz&B5i7C=7iJT9y2G%m|FId439EJS~K9tm~#}pE4Aba&6$0yN55o=(OX+O!)JSwRf-yTp4sv^47s96G4Kl;1>@N(|Fl525pqQlI|oL5E*Se(L5@>7^PiMc1Nc)@EUGc^ zIw5u|_2j9O7#!w_8?BkCfx7tz^yFB)dlo9b00000NkvXXu0mjfD`W*A delta 414 zcmV;P0b%~V1h)f_BYy#YNkl!IAQy%}a^Jjrlgyi!B!HsF7{wOg ziorl^9C@Da2Y3bEfp6eb&R+rnn6?;4C|G&MdW9 z1?h_zU_n_~lz$u-H8-k>lZQ00t`S&=nT$4AhcuvQw~=jSG$Hs#rf6;@W*YbE054iA zp(qV0}{u0r~JMDq#O)j_ci7t7Vu->(INKULw=_!q$nG*73H6X z40r;bYx2CvwM@7x%uQafGTLP7M20W1|58SyVyHr~(HDCIzc@fxZw_e~1ONa407*qo IM6N<$g3$)Mq5uE@ diff --git a/rep2/img/glyphish/icons2/22-skull-n-crossbones.png b/rep2/img/glyphish/icons2/22-skull-n-crossbones.png index d11ac2d6673706a6d579425108e621b4ec7e887e..b3c9415661f9a761df1ec4a7783ebf672b39524a 100644 GIT binary patch delta 1016 zcmV@3Yq0>wjaPz1Cjm&gkv!)eeJ$ zgKcFp=)y`|g^MtWgZKa=m@cZQzrVk&%t>WDYlE4125T`R!M{fcrVlT6(r72pg>kHt zcD{yLcmZ#B$Zp31_!O6vkY9;cJ7KsJ0rcTA{DwQQ2pe)Thcdi@NV`kOlS=4B4m=pg z>##4*zZTB>Q-AS!8NST%HsJx>TE%$PH!u(9;&*lDYj`J)N7S9Kp_T(HD%!6c!1-}J z6Q}2R-Elmt1@F|VK2!~0GBe+XljHnCJeT3U*Me90UPz&84t$lFFU3*(to~+dxTXp3 zn~L@;zkzAIk)vfD{7|SsDIVeCtAtLK(c?{c>#(s2Z+{FgS2f;=0Di(v3HlDeU)LjZ?lXyPf%{&j`YJ8rP z`xl$lH|Ufczt%7HU`w3Oi@Gls0xE>E0W3+-mf_=s-YZ(@`8BgPWutHaWslHAf;Jw< zfeh`noPW$e!d)OIJFXEa8%RV?*5fasjII)zx#c)pD6c(n zZ64dzbE_@N1hBaYy$5@QUZ@)%MfxV3hB?CS|0yK}Ml-Y>!j3ofEv!p7vWAlhtusTDm!6T-J`E4+?{!fuWx_@j}x zFv_;V5e0ALGC6RAdIy=sD>w&t;y?jC2XUh8oVYfRgV9zYlnG!jRww9V8vFesI270B zu{zo+gtE=t`~>a1k~*?TRhyKJrYIZ0HjV!x43*T8#hbb3>1d-c$_8*)XxN6aRj4fa mKeWnVU(~TR>g-nXIQ|C%V#GAumXP@X0000^&UH|pfd1NS`U z415Xr4xCOuXN)(SfIbKE5hj~Oz-=Ma0XzgYfLn@eA?CXoYhP&w0UbhSO|{>N5nWI4 z`B+Ms25$Mihq{L(!Mi|77zeeEQE&$cc3KPZw3J$Ed?0Kr?fY>o8wBKlbHG`#o&*8Q zhIpGUoN|T$HoP#jEdhh7?Kkks5+^#nmlASxr6uHgkbkuq+Ir<0uW=?+pX0!#*zc%T z>ZKN@99E=#T#pjQ4-zhg0C)>Lm-`vQQlUV&wkw1)zC(5S=qDE;dbhm31NEL(f6B!3 z($|I--vTOzB&`X_i@=;A#vI9~v?*4_r+@$$RtX*e+rV|gT}R_2;WC<$dySlo-4=0i z3_I{j-G6bP@a3BX7L{+0@FmV0h-&1e@1BaW2wasM`$r)ljlIEM`xK;)&zz|{ZV`SK z=>w*f?adv$Q2&k2ZH_W&tZeryE8#{UH#d$!Qmp&`Wp0000F+&mhM zqI?IifmQs(SKPtY_=e$dSjk`|0S#aSS4#ckSiw2GtYfh45bBq%FW~{Yc!pjbgKY{p zTKvX1iNnQp7f&%?)o7an&QJ8O;zFsvDD6lkv~>o$xHd7igEhQ~7;b9^F8ecl;FX~B zv?E{5qYDD+{=VyAi?(JdrBW+NgR4?%_p* zu!JqCoCu++faf?HC6%)9X?%|wsw$u_wgWp-7_Q+*z6cAosT(C4E4l8Yd>fbF7vmy00x2hB>+Zc4lG z4Uh4uDT15=j!AigRMd?NyCvMvz{d>C&HfvmGG+p%jb8&ZJ}AN>1~vcy002ovPDHLk FV1haE>skN+ delta 410 zcmV;L0cHN21hWH>BYy#UNkl1vUI7x?2PHs{W2PY~10u@~y1VLO} z6#NA)(m_fG@i#a-2~G|wh=RYsK@`- z;}y6i-1{u@y_}8$hsd;yQ-J=_PyoBGJY0X!OsTo*%D^>1vc54>Y%V1{F%#Ig$MWoWD_r-Ho@IWP9fJ&N@$gywn}Ncv`Q&GR4a#`mYgcrrH5SimWJM2dWs%;>7mL}S|Xu@Qt}6s zkke91sq`@K%2*MbcebXh`|$Z@-g%yH-sk(?Z)QxR-ENy?oPVi1fvT8z17|a$Zns-L zoy97y-~d~Ai(f;sSvKoc(&v%7#D z+(AEhEk#KU#(zkm>I!^`{5=mXeC%ngJ%$GRxc&2y)-HX^aJg$24aTw_161Ej}e>WO@ zjQ&xy0d{b84EIi#&^iu>TJsp*t!Tq&9;08+B$73-l4jJMgw#h_*1)->?j+1*L=*ol zG&N8+rUvRp_C?nC%lwh?->$&nh`hnfpO!x|CVmB`2I|Jtz!;JGGx0AOn8}E;2A(H% jV;{3I{kdB+Cf>jw@<&U7u)s_j00000NkvXXu0mjft90r| delta 380 zcmV-?0fYXA1eODkBYy#1Nkl4B-ZGw#mx;Ah0u}m>LGcsA20|U#QH}Bn>gzRnsH1wFg)CNN7 zeSrN4JwAauU=0j`bD#naEOigS6YvI{0k@XA&NKn*3z%4Xo__+hs;fn7Gm#!49)b?9 z#K;J^2j;-BXhYx`c#&&lZ!WbX(N-w~EX72nv@KAoPxwNvOW8AZmFUZq0oGz-0Bn@L z0S@`2z5gm2(j!@b2DlL;C%~i9rz*fy>9y1%XG7-)H`oGWW%deKs9?tE0=QP%IKu2G z0n9SLd(EY+Hg#phxn7567E?BUhd40v@ltdcpg96Q9O_K(!l8BmymvL?8^Fa7bPJ&C zo$39vP!5oq93VBm|3W)M@4o@xH?n*mh(!*Nnj9b^US4)7z_-sK-vF*JH2>Z+--%Px a`v5=mt2gGs7UQJ=0000V(b{(^Aoa^D_O$xdGB7o z&)AHn(d895B^=q zM!?lz?E)AZ?0+$_4cG~I?@43~d?0;(LO*hSY*%0-U(q6v`*+2aZ$F7 zV4Fe{<*ZI)&)dr?`Gdu}3{?Ct0ur3#F{2Q;S(b*0)^fjsfohCM4Jt#lDr+N0SC zTLC(9?RQ2q`J5Z^ykXuNzT0Sq5G`usDN+xqXMaJ?fp8p2m33`AM(Sek(^;s4>|Smc zz?V-)A-{?1PkM($=IGOrk0Nfufm;i`0B<;Un|lZmfjLsFWvd+%h&=d@K#cVJBSOCL tZ2u2@3)mv*;x*6PF#7*<_rVyvfL|;~QSZH(0?_~f002ovPDHLkV1o7PMn2H{6-$qFgX-PuV|`6NqKYv_|U|n20EY#fEr*s5#Fm^(m)8WRexn+D7*`WzJO~3cqlD{ zsR}(B)(*9^EY6vv5@{1!yg-_y5^d)&P-ZkxN_jL%T%@8sAra3-_Ck^))B*>=8u9Ve z7`UGZasW2KC$MK4+>~ekkTi*7jauX8gwW5#cS76TscLTrJd6POGB{Rhy@{bp_bgRs zYH20B-U5&cxPJp)N9I+|!21B+d?{*nKzhkFiQ|}$&~IbU@!uY*a=)Fu0iPqMc4Lz= zR<4Vz1a3yYuYlXs!E)`uutKRTO=M&-&;;N$$LfW}K@f*O zj89_F%EAYrSQDSYj!H_k&_XH;sw;%zpp`E@yxsEM&h^$fSlqP zSC01k66dJ_a(*hWafA4j1V{-`Ca;a(GN^oV zd5{D2fD4O_<}XB&2l*h|5!h-1hgp=1q#bw@*aiORp)T14HV z?qZ7&2Eoz))ft2NAR-LTdw*oUx&SPH9LuQza$^=y#tS$CTi^_QawfAQw@ZNIs+@0B z_%4#nTgw75co**$1>TA90EgBDT;?B%0;`q;{AH6Ov2R7d!G9Z}#Ipr~KD-r3TomuB zo_W6yNp#BhjgonP>`Q3jiweXt@AodG|NSZgshRi3Ihije;1?;A*q4CM76=t7L;cKW z3&e_)3G^l5)dHc7S?o)chF1xM_VYs$wcy19&j@@-q87YZV4o<^m#7IZ7FY=cAiqdO zoAgk>6Fl1iYewPxs*o6`o~&vw8}$;h{B93gfmaC(Noe--lL)xwbOJW~4&wI-;O)X$ f{A1sT1la_TBYyx1a7bBm000XT000XT0n*)m`~Uy~3rR#lR9J=W*s*IWw`*PpA=bqnr_vD^rrQL2@WG>Cyfq$wj1tVSwLs(`iF?;G#a6TA@)vpgew7b1R`o4;x7c*fgkr!+;Acy;3Q zo^b&;h%Kvcns^Xf^B=Yjg#c6{Rlu=OpRC80XE%49Mf#>tDoo=D+bTw%bOC+Axt34@ z=Q$Pj_c|-#RK17;Gjg6{TPWKi)7Un{A2g|~EdSV=GfM&UW+`CaEWCif2Nq;Ci_fc2 P00000NkvXXu0mjf;#v=k delta 539 zcmV+$0_6SK1hWK?BYy$m||In}tQVFAUG_?Cw0z z@0r(aVC+BUP~8FKG8a%ca{+ZT7cj*JZejtALRpCQ8x{N0P=C!nFvK-!0ba!e{K6=f zA6P^aOX#LLu0p_;5d7B?-*j*X#}9aZ6qiyO$`vrgc|k;3j^Qni6zX>HIbPpNX(V?J zJT_bK@C`47Y){IGvW?{Qzz`>+os~AeL_5OsXuDWRX&|Qu*5m~*e!qsFSQmnC;#_J2 zhcldi%=os*W`DGk;IBlR#4G|vcq3#jmyR&@N5W)YjdjVC6)?c-=rETHxQvz{VpWOE zPbedx7<_XUXOXV3D|hfo*uavO%>76eFtQu`qL3|kTEf?|ko8kSG9ICiXC>O$L+UcR z5uG)0J=&pg#`zm9oW(^U;{&|Hhxoj>jLt-A5A>rgj(^iO?%~PQyDgj+GJYo3ZTmCu z33p`#Px(o_Gj)I4?g6eF%jA4Bz$G+t{v-p75f`k^+Qt|^MB&HnG2|! dxq!O)4HUK`K@i4& z@kFrAGuTE*W3V!fa$uDp2&wNOt`GtN;ocxsoJ_Vctoi%&zBZ$uw>agngx)62v6mVZ+tHPInI-8R>lsa|z642py z2}Nu#Y2-^luVS4uv;_pfm6UDd^?_zUQvors1inkk5_qM!lYzYZi(h>kwh)j2Z6Gz| zRY59k8=Y5dQh#UyG=Z@Nw+v%xb7D%godZ+g2IvEsWg9vA($>_5>^g}D4#D$}FmUOB z#wzrJ`S7cyq1G~*0z(7;AxaB@=00%i$#*BT1O%AM5qN4x+002ovPDHLkV1j72*!utg delta 411 zcmV;M0c8Gw1hfN?BYy#VNklJ|`+ zLjXIlu_A*yfP3IpNpPfe4ovNNsv>Bh+l5xZvDM#!mV!i?LVs6$2C=fb1j+y|x76K{ z3d$SM%y2ZV&7Dg%1K0fAJ~!4Tfno-RIXpuVm#eb`cqD&qMfNVKGl0n!abAdwLplR< zpeqpHHQ$w_&?_)<6hAVbm9K#@;VCr^)DXOg9)Qjs!aKm71AnlC6nFs!CBzTR#)I3% zNy_)hvk0bMynmis;*F^9PI!z&0<=qTwsHEPdCkBR5a+bF$o~(B%_bOL0pz7bA9%LX zFKDwDJW{Ba@fQIXz&i7OZEe{B>p5`;J6L2yo$&i{U~YZBu=ooBOiauym z!A%mt88F+!Zf3SY{2sRwG3B;UFIzx+tx^dNccXRV0~BuaK!#5G{*M3v002ovPDHLk FV1jPZz-j;h diff --git a/rep2/img/glyphish/icons2/29-heart.png b/rep2/img/glyphish/icons2/29-heart.png index 18ec259d8ca575bb681e96524a079268d8b32d02..27b5c3fa19af5b4122dac845c57a41d6d9d4051c 100644 GIT binary patch delta 394 zcmV;50d@Y-0;272@=zvcbpOtgYi`{38YvDdf<() z5|H>zl4>E-JpVM6X{%FooN^_$^}IB=?fqmk*cw|2#aJHNv1wydsXL4Lq+G(*xcwrN o4s z9mEfU!;BA--3{o#o!Kw4H|Gw4BpKlNV{PUJ&}t1Zw-z7Z4D5kyP+OpWGq(26hGX~M zLnSAyYQ(n$ZobNqv6X@&3H&g`7`!$_bVC~mBvCs>fJ4Fnhksa}tWOc4%!>AdqIeen z8=YN?46w6?(0EG%90ff|y(ODR=;jooQph4|x&XN$eC|Cb3*dm0VStl@L)_?q2Hl&; zy@!TD)vQ@gnq^}ezyVj{KJ3!>Sj=r=;^@x(RRDbD$6C#6X4F^n1-?lzpShuC?s`d0>%~a z3=F;82FQV>xE7$jg)V>vf1AfXFKk|pQeX=7EPe-`Y{c?YVJ(MJVC==0z{JMTybPtl zz>9wZ^SwasXp{mkUc3SxfmbhA32Ql&0y7S0{tURW5zEhnwH!);3bgPZRS+gOU5U7(W z7wh&wYElSDH*pgJnH>)?7H{$j+;WhSZRA)2-?cFsu>|gbHE)xto~Q3+wvI@Pd z>#pMP7L3(E>TRT!W&-SJrcf#vOC^PJejnm|>;_64l+nPr5aa3|~fF^8t0@GNyu;V8;Le002ovPDHLkV1nn;eY*ev diff --git a/rep2/img/glyphish/icons2/31-ipod.png b/rep2/img/glyphish/icons2/31-ipod.png index 222319ee54b01f913f03cb74fcb3f9485806932e..41c68bcfe047aac9d83c78c7d9b4b1db91549afc 100644 GIT binary patch delta 440 zcmV;p0Z0Dr0?`AIBYyx1a7bBm000XT000XT0n*)m`~Uy}gGod|R9J=Wn6XO3P!xv0 zh)bbsp(wca0R%e=PEM|ZlS7uSX@?d>5gamT5G+1|k5Leu#JLY3GzhK*C&8h&7_JFv zbN?Cw`5=Uodk*LP$;ss;p6~lqnQfQgFbw-Z0PGY9kAY}79Dm-q)Uf3eO!49|ae-rg zX93IN2Y|Q6F|gtb<0@dux^3XpHc3BVENca5J6rGODI&GDHU zKN%_k@4z@=H-A`+%x~u0NUV*GzXa7gFtO|#e!sT%%{jUEPk?hpV$~D)u& z6VSHommFKRrK(!!$g)SkH;X&}3|v_2$D+J40eiq1@MP>Svge&s<1azEjot&D9G?#G zAj~Nh&|z1^Ik2Jd1Qy=H z+TOz67z=w#ELaSgXb@*`G4hiQncW#?|AyW9O8{j2FnY@P6%YZz2Q6~(YGjHQDszX* z{F#68DIc6-2K^JdJ} zZ~;vT41r^X|4h;OwUPkjMQZ)RcTEG8xG6O{BG*D8a3S24TChbpdc%^p2W;QG30%bUr2WbMmhO|&D(hkEp3&VRw`&R cSM4+FVRexOUrPOYfL>tmboFyt=akR{0KVg9_5c6? delta 189 zcmV;u07CzS0@(qOB!8euL_t(oh3%L@3cw%?1lQ7s>5u$*`vZHi&`Z_2mL-q@Z^mQ{ z9!vmGV3qGKCV<_X$rX_kvlHP&mZtYe(cGOeN_I?DPn{`##8ytKjMAS zIkUIOcF%qXTtJNrsBr-`E}+H*)VP2e7f@qfVAY3){+P^SzBU7Y3-l%zG~NNU2V3_P rZYFjZcCd9!77}Z$e6S_O{2RCcW0#@o^O6fUf02}d|9e@Xb z7$fNd?hA01$32@l3y@#n#xv*Ha0DD;TU~x WP8jT@muOJ{0000)WZ0Tn7|*Sj?C5U;b}@O0LRJJIz(B?7-p~8P_-&m=DD) z=U(xMjiH2L;|{BbH9d#2T0TcFZEL9Lcz@{Lg3ynfN+$As%+ykz^3j~@%Ej9k877E( z{x>M=xp19#bMyN7jMWVtwhEoL6B78(D53D=f!s>|6Z;!#nE8!n>)MA@9N=aE0#8>z Jmvv4FO#tQyMn?bu diff --git a/rep2/img/glyphish/icons2/34-coffee.png b/rep2/img/glyphish/icons2/34-coffee.png index 56f338f53a8893f971d90e83614857e9e00a5725..6d50d49f4ac8a2849405ed28e63ad9564f03a6b0 100644 GIT binary patch delta 435 zcmV;k0Zjhl0?Y%DBYyx1a7bBm000XT000XT0n*)m`~Uy}en~_@R9J=Wn9)(fKoEw% zI2I5)paiTysX**NXY$VEEpNfMyr~ta6%Z?c4xof|KswNeO$N|}VK0l9%=pdhOai&P z{mI_$9zhgE44Dhx4s>Pk0xq=!vMf9H^%S@P#+8ND=fSD-Cx1zz@<%P8g*h-o9Nqvc z-~%WsI~!I4QpC|GM8F0pjpjaz)gE|61f;+c*jBa#9*ov##7e+BFafSAy9aXM7I-sS zqYPsn$x@@g6n|hzh}4NSyUeA+w}6@uDS9LAK%W98NU^I4kuh{ZANM74AX3qX5CU<2g2VCC zw}299yRVTpT#e5VGU-@d-auinZh=G2Z^A`DY_M*O(JX<-ML>?U0ENTYg5T{!CxZV! dcRe$B0pDDYO_rdsOz!{y002ovPDHLkV1n58!ASrB delta 328 zcmV-O0k{6l1L6XZBYy!YNkly^h$UzR+JPkqHed-6 z8xSkd4zvU9AU<5g5Dn;MjEro1{4@ZuWJHrVO~IA9B&64fpcm1(w}Th zGg0sruptm00b^hY_=+WgNV%Lk1!a@vc>zdz+4W z7JOprYr3mz>&(u7!MK9?U|_)qhIzrLQ=FeWB{lpFjDdCYhbu z#54cp4!s4sjt5NdahK$(Pf5+>>THym!I=Egnn5~&_0Fq$HF4L((EhCrjdB}U+vNWW zXL2WSg+y^@**O_*cpO>7y2K$qN~_knvvaH1Rgn{oj0H?W31>II@OmfwK*Mn7wMDa- zig)TYo}T`(yJzq5ZEnE{D%Wd$&t&I>2q(Kvp8g|GV*kGh%Ii)F-xPWL*G_;XMi_=3 z?{%2GxW)Er*#G>0g<@IW7Thxfe#=}rao0tG`5f=FnHJu8+KWD9Uo-?e-iD#-m#X`R SPaS;>K;Y@>=d#Wzp$Py>B!zGQ delta 256 zcmV+b0ssEr0-OSnB!A;cL_t(oh3%Iy4uU`sMIXjUr8VII7KVZYkZ?%6gt4&nM3fXJ zHqv0>*cimHj2Vpcl1<3&XXgKe4Z9K0@xv^v4NS!YSmObDXn{RY0TBDKvfG$#Dz9+(v#z?wVQ0npo71zU^&0000D~!On%o6?ylA75{PGTqnnZ-@;7ZsL+nc$LT08jUpo^Lf;3H;GYi)R znBoPv#tU%GO5&X7d7pU=T!9S`b@)7iJ8%MCT^nUtHo7K}fPVpQz<$6d0*=5EIM_&P zvxTl_#{0X~%U;|MHg2FfoKwerA-#d-$w}?D34s zn>wZfbcfJ*csVO(-$Gu1YjgyZ)~hhsTSve}C(#H>wYP}C|Cw`)7vLH%z%?IkE;J67 S{uJy00000JhJTiwy^HVYWzVv`lJDe2FEw#)j<%F^ zM81T0DJ?&3K>~mU6?5}mKrT&yH%)*ymI7t~4*)%Ya58$bnGNG&F&d*F=4cq#%uz>+ zn||0#WYby24VwxB0)12dxOOb0J@5iB;Cp>P=ZLl-5xY9T(SrLiYCCD>IJMebCr^y-_U~q P0000nf diff --git a/rep2/img/glyphish/icons2/37-suitcase.png b/rep2/img/glyphish/icons2/37-suitcase.png index a3e94776dd53207ed37f5c334ecb5e28f8d6c4e8..124703b70f9abf757dd6af0142a68ec5842e3126 100644 GIT binary patch delta 279 zcmV+y0qFjM0-B!3BTNLh0L01FZT01FZU(%pXi0002wNklzIto8%lGz#^T6VihecH7D^Zo+RQKY_wS+1d{BS4a34b7^5;PykfbOIVrHg2 zz*tN`o9G1=lIE(a`i_^t4cGwdj-D5A2Ts7d>p^8%de0;h7=Pdb><4;M;0VltLx|9j zuh7=5IgoTz-s&AqNP*O?kDi|2*(y}1RA2|xz{eG>ee=4j+I`J^?J~TP3Y>vVc#nk4 zWq2bMm~!~PGNS(un1D7Wpp6M=V*=WkfHo$eja1+{$rK|pqykrIfRLxl@FuZei^`aQ dHqi@w0mD@%1Q7fpRxtno002ovPDHLkV1lV@dinqW delta 230 zcmV2JBQOAIX6%6za5vOtG8$)v=D|?cEYYqM zH@=A(OU%|vH$7b#kjnK_zTUVlv}fST>mEnU>-F4_arJyC8eb|juPis7U5d<+H8p9s zP!j8@aZgJtM|Vx}9q=X$coPP^2?O4Q0dK;9H>)!sf2Y5JT0_$hT!esiKah)tOH1j( g>dwH=5eB?@06W@`lRgS0RsaA107*qoM6N<$g1G!-Q~&?~ diff --git a/rep2/img/glyphish/icons2/38-airplane.png b/rep2/img/glyphish/icons2/38-airplane.png index 09cbee24c01f32e183d374690b3e62ac4dbb38a9..5d593670e7cac448df2fb6e0a1bfa0f83d897966 100644 GIT binary patch delta 363 zcmV-x0hIo+0)_*SB!3BTNLh0L01FZT01FZU(%pXi0003vNklk>3pDr>9mN{U1+4_e4M?4xpU0vq_4m&qpGCpJRl2qz$flxuhDT9dI6s0 z8jMz;P|kBPm1GGf@5COSX2zmfLf{QJI^sv^GsRM1&2W(4|1)MUW7bxSS_<@B9^Stg zewbTnkCgn~3)E=;g?x;A!aMLii64Lm;1%O96s!DgG%;BqH9x9!I%GF};8Fkp002ov JPDHLkV1nYbqR{{V delta 278 zcmV+x0qOpR1F-^-B!BoxL_t(oh3%K&5rQxbg}*uhqsRtsB5dFUtiTLTzzS}F8!&<+ z;1BadxkhVAsowS7!*e%|Z@RUy| zH;RDVC<1b$2=L$v)SmTPeCC)9tqb7mj5$p%8G(IZ!jQe=uYU*#$+`xMYHXHu4Qs1m zn)M23fWhM%#8)Y2W2+H&NC{fov*gjlY$iYpI#hrr=IdC>|3Ge}5^xDzGePY5(yV{O z)hFOHyXeNF89$+sy(YZYP5j)r2jD2rXI?)c(}uPzX9b*q$>W>E7d0+5OF2e2K^ddD c@%IAmct(3dCJ%aQLjV8(07*qoM6N<$g4v6J)c^nh diff --git a/rep2/img/glyphish/icons2/39-spraycan.png b/rep2/img/glyphish/icons2/39-spraycan.png index 819fcd83e0107dff75ff91d5f915f1e7dbe97006..f9b8645ccebfd79ed4f7b832c7ea29f4cf7c9c89 100644 GIT binary patch delta 332 zcmV-S0ki&{0_OsdB!3BTNLh0L01FZT01FZU(%pXi0003QNkl9cgC`uU@#~-;nk;4uz2XcH_*k(&Gp|4pZ3^gO+*prs zihCU53U7`5j`_C`L>mG|=4~@YuVL@iwyO4-;1Wj`Rrwbcxc#NiyG2!ALX)>4U@yRD z5}G`p#A_%b#YO!_%!902T1OGJ^(~YIq$UeUP0T5@kx?2;!14$skI~g+0jbFXQd8uA eqlw7^Qu773dL_t(oh3%KI4Z<)G0MCdb9f*nn7$gl1LYXBc6%{2NBQQZ~ z#4a=}zyhHmQe++x$#&k6{-iXC^Zxs{Y}o-V6K1BJKqw}lji$g0IE4loTi^klfi18A zmNA01iJv=g05;ydC9sbWKYGF)S77z0c$b_7THpyBfwho)NqS}-xB*o!!Rqs_``!RM zPa=yB)IxQA>fZQ%SF-3pF+iaB@oy74zw0ala0ADM&LcAUlX#veZjx$Cq!NJdrDaP< z!UVK20c}$5LZfV@sRX3c*|t#$6VS#4w25&aP-XHRFad4edW-Vgggs7@00000NkvXX Hu0mjf(iUzj diff --git a/rep2/img/glyphish/icons2/40-inbox.png b/rep2/img/glyphish/icons2/40-inbox.png index a089f06dd217314b0382ee77e3e008b3bb704b13..5cf46ee7e313e41cded73fe72376dcf68d2a5bd9 100644 GIT binary patch delta 451 zcmV;!0X+Wm0^9?TBYyx1a7bBm000XT000XT0n*)m`~Uy}j!8s8R9J=Wn6YZYKp4k= zsYMXF3Vi@4A3$*G1Gsh-Is~VRP$*<|3ls{1;Og$&HxNo6pf0|EQzxf_*dbpa4HwOQ z7deFdKoal1|KIy-?s72*!;ov{#`geRsRQ`t)>aV5aoN&i?tgtyMifPn)p)M{7pNjY z1K5&$5GRN*8neaTmX9u-Ci_V4;3x}y1)SV1?CFLcIV0002ovPDHLkV1fva%6I?( delta 345 zcmV-f0jB=k1M>oqBYy!pNklQumOD6d~;V1l+$!ev%Iu{^$4EV4wm53s&tNV5$m$w^kXwtKM;zXKnE- zFbBX7u;Du6U5n}VnvH5FD@<(1h^M9RIK%jp4Ymq%=o=>{>VKfVtvA3)L7stj1VF1A z|RJx5spTHr;4e#K0U;e$MoXMZQl0$|<4E#bQsdzWMZc-3H^7IQ=R zATQ*d9U!GQ;8K#Pz37^hTmb;~iQ2uP-W{L@&I5I4oxAr1JStCR40Ws2=kgpHm8bmB rc&h+-s{nZGk!|!}Y4Iyi0KD}JuYm`B9KQWC00000NkvXXu0mjfu`r>3 diff --git a/rep2/img/glyphish/icons2/41-picture-frame.png b/rep2/img/glyphish/icons2/41-picture-frame.png index cee8bf06e08adf477a29692f1e28f748604a4a2a..983a79855f389deed7df134b9aac660decbcca42 100644 GIT binary patch delta 286 zcmV+(0pb4s0l5N@B!3BTNLh0L01FZT01FZU(%pXi0002%NklpKM47^Y46_*=4guUDrg`X6Xd93Jl1X&60D5Pu#3)8t1boFJ?LJ|#aY z;Q*1n3jrsfRL*<&@;>oiGqWYBKq-iE^A5j_N?K^Dok>^ kBsAW|dbzu>!WRR)03T~6OQWq;d>x_33WAKy-q7Gb5(lA_dsv77|7ltEU}gUg?7Oq cOX#QY0r26nOC3qv;Q#;t07*qoM6N<$f?=g)4gdfE diff --git a/rep2/img/glyphish/icons2/42-photos.png b/rep2/img/glyphish/icons2/42-photos.png index 827d9a1bb577ac9133dc79824064d3f2b672ab53..23a9be7b75c2383d63488a0c45b3cd2029be2795 100644 GIT binary patch delta 186 zcmV;r07d_^0oDPKB!3BTNLh0L01FZT01FZU(%pXi0001pNkl_!V zZi%Ykuz(k@_=PBeUo!EA@)177$ZbR#EQl| z>IGD>fSMN^m!$d2{TrLW2fBl-1j_;_w5yvXAnU~V4*WUZiS`LtK#c{|SU}Bq0otPs zWqbm1+6%BBbH_V@3S9G-)cy!rKuyL)=NX}W0v1rS0pyVgOAu*z2P^;p002ovPDHLk FV1h;vKG*;N diff --git a/rep2/img/glyphish/icons2/43-film-roll.png b/rep2/img/glyphish/icons2/43-film-roll.png index 07c11055cca34f2eaf7b2cdcaf2b87799baea937..62734e8cb7855ca0e5d5bb0af56a7ca8bc9993e4 100644 GIT binary patch delta 377 zcmV-<0fzqB0+R!fBYyx1a7bBm000XT000XT0n*)m`~Uy}MM*?KR9J=Wm@!VnPz;8@ zAa20MLOB2u5))#eT{uUENUX4BW6j7BdX6p$17bp|)B{i!HtxXiQZ=9k{5w*gBHp+7 z4R)S?+li%QMNu$j4q_)Tlq4WFqZe?fI9F8#kOSAi1eo@?Hh;hxcmn2XQe|11eI)_F z8zJ#7H^6gyz5*6(h2_8la4Ozo=6{V4p^`b@M`*FbuVKIlDX0RbgoNf|Oe5Z7Mio#K zD%$|>zzX>M;d2C>0VjmyCqU*;@pn`K5E9D8m|E~%0{2#D^(B79KMpgaJy#y;`3fx^ zF|h5zUsl31LUJB9)vY_{J|rQd-vdcNY?6T3j9$RLKBINdc`*CzfOQi~cmznRzJqlW zOPgLDp*zukgR8n0)DEm2cX(pVs2#WkE`bZ+xV5`@1wLB);?B-MmVPZpCJBhm=mmTM X8+$b?E~*lC00000NkvXXu0mjfU3Z-W delta 319 zcmV-F0l@x~1K9$QBYy!PNkl(Po&iu?Kvx$H!0aNpxz_(Nad=tEYx?#>7SOEuM zS>TfZF)#pzh8Pl8!Qwab7r^Cii#PXUF@|KpZ=ndi56lU83x8#zzjcnYsTGLGpKJoO zfHu&0@i_x~;7DGfgBU}?BEUi-_;!GatF!tNkHlo2$sEU>vZz{t@qL^sLC{5KpIve+ zjm*L$p_I?brOLv=_kl`)Zz=)430^>1pV747`fJLpfNLj~un3S^{S&F<*ijZO>oE7T z)2Ld3*bu`q$2b}FC7uCmU;~_hZGm4GXaYT;Z_dsE%P-|$5qux01o$R+0XNVhfSdG< Ru&Mw6002ovPDHLkV1gZUkXir$ diff --git a/rep2/img/glyphish/icons2/44-shoebox.png b/rep2/img/glyphish/icons2/44-shoebox.png index 6e2053c332d94560ff39c905da751682eac8c82f..d3ef328e7c3457575cfbff7050d069ed9f33d645 100644 GIT binary patch delta 410 zcmV;L0cHOE0Kq&u6{mLJ|`C|jb2DB5qS%)zij*f=jxJ}* zuI=l!Sy`6MnX9P-NM%W2YG$9nwbh`mYkkatuaV+d0S!P^RevVKlnN9Hwxjt*bXF#|S0XRhK_XF)eBionA-`N_7H-U}lhLAvJu-Cl@ z@sZP3;oTaDw}tMa0KncpaT}=**Bp2&P>4Q8YeU;d(Kb5LR3cN2(vX9PX)AB57C;neU$h#dL+!&U_2FAi{AI{ zvf=(d@D4G+NA#?pWCJ|WeMedWZ-g0wa2mN7`!<>b+n)DZeg~h-C9c!A{6CBvc{eI4 zE!4-e$is%=z%Iz^lA|) z4YUc|Y+5M|yjY&I+lrN#?`gS_V+L+5duusPI(_y;*K7tGiFEA+3XJg~YFC7ty;@?Gq5JvjCn+SO?x| ziwo@p{(f|k-iMd3SSU0wvq(L}f)2piTa03%SIbTG&TF55V50_j0=8ZOWd=Si-wE7f z2wJU|sGI}Uz+70(Zab`xjQ7Aj!*?H7J-KhAJ+K-WUy*QeJA`vwr{6ie7}qwI6}c^x z14S+L=a?EOjj4gs7<~ikAKAab=x1PRpfpC`zz-iuj~f7jaYg_D002ovPDHLkV1hVj BovQ!< diff --git a/rep2/img/glyphish/icons2/45-movie1.png b/rep2/img/glyphish/icons2/45-movie1.png index 2817f5987e9ccec03faf6b9c130b7aaa7830062f..d1ea25ea82cbc396e0835b0ce1811b05e6115f7c 100644 GIT binary patch delta 255 zcmVM5CBzu9Wp=$U(8}fu z?Ac(>`Qvqolu}@`bb-RTysrQbD{}XrEKO?x%LL$9aqi~$&3NVlCo_)#hKkI%kfmuY za53`);8Bs87P2&+J1_%yR%GUdERE+5%m7}M=iKnzfp>YBERE+5to6d*?SMSMAP<;X z9$=6M%q$Nu$O8s>fI%K8Z+U=49x!tk4+Q-i?TiZa<_o|9P+LgwotLMxA7jH+$(HtV{hvLv{^6& zi|qd&Hi3Cf!jd5w_`|>^;6uj@TR*@{_Xb9XHif;yF~%MP0QY6R0nZh>OQAL6HITCd z9u?=Vfp@wM%-MbdP8FKzkJe1WK7VBf-oUFucLol{wVa&p9> zw}?y>y2LGefzkb3$pOI$4mwTTVs<@8o>VW9(0u>o^km~7se+NAp+C~uV&ffj>g^rQ zb@^W2qocoM-Rqu@FBt89_{JZM@_uo_-t7&;>I7Sc2UG6V2Y=8^Vvk_YW=~l1WnGhh z;>-ZPgf(B}z^vJfdQg#NU;2Qoxfhl^-FH&eBzI?i5U1#c`3{OdM5b|CzQ|Adzt2NU zkv(Dgmp=@is$2TMX#UDynDF+)Ud#GI@fxnz;xoS)R*BVcoo?}BC|+7F3}JCEEf~Tpz%ZG8s}Eq#w9{p3+lOkes=}h$zbMno_|7!(`}FW jO0WM*znxLnu&$Ch?St8!cT?BdFaUw4tDnm{r-UW|$+(l< delta 334 zcmV-U0kQu10_XyeBYy!eNkl{JmRWoA`zT82F1Pj)WLde~o9h!;iQZ%2pr|!RXnz7eb{sbpLKFH9oXq%5 zs)^7m@FaRKf%Br)6++XD-=x|Iy^FpSAQVE6z`f|b0j`Q#bA&eNhd6yN!Xb1k`a&Y) zRda;?#9e3D2ghFVS0B19PlWHRL3_OV5Yv7`& zb%jtm?4b}^0Y@*QFMYAy2zdi6vbJRh7F&A>s(qbS1BARzkHDSiOFIziE##GH9-aUp g)cvo;{{XG^4Qno4TX)sVGynhq07*qoM6N<$f=uO@0{{R3 diff --git a/rep2/img/glyphish/icons2/47-fuel.png b/rep2/img/glyphish/icons2/47-fuel.png index 6af5342b4573fc5c4115824b9f96a0022902f831..350bb08a8bc3166812891eda004780486dbb3850 100644 GIT binary patch delta 469 zcmV;`0V@8V1MUNmBYyx1a7bBm000XT000XT0n*)m`~Uy}ph-kQR9J=WnBPsqFc62o zA_jmB!UpLEVFQ?eAY}k}>s#Bmz7-}Y8&D=78;}j^5wbyfu%oz9XwFHMD^foxit9hu z`{`_-ok^Bu{AaGT9T>_*fHv3Cj;qzGDlUL|;QuV$I5D%?On=m`PXt1p?>k1skSVkT zCLPamsDoV$5wPglCk7Jt3`V>LPDBL!c)v^F9e8u)U^I3i-_aZF`q%+4eTf#hSo;G3G9mw6q&+B&I;_>Vk5{5CL;w z-|_g)e7m|G@PE*-RbZo0kw~4;m_iZo$#EyeTk4nsZaJLu&8ZT5<3lXruo@M&7r#{@hQahPq z&q*8X_E}=@3nD@UoZ`zuWupY{v6p`1wdby09D&K@+o&=Z0owcm(kW6U0nv+g00000 LNkvXXu0mjf7Btmf delta 389 zcmV;00eb%K1D^wsBYy#ANklfjufM8H?ils^MkIj;lHwqouU&3_T9r^|Q7*@7`jeS{zX z_O~V=ESD&NuU8;2Fy3~f5fK)dtO=;m0TolkL?Iag7YU#0whDpJGTJ_nJ29A08%3LO5hYym_sFrAw~lr zmG4Xdb^vpHJ^(DvxwEu})*ZMPkC=DKhOGtW%&}~`zXK}3Mpp&c)Dj4Z{5ikxz*aa{ z4XMD2=jQ_A*ecvRi{Bq1I;{l^-j7@{+5t8yz(xhwr~n%kU{gzAOXOPXlNkNEOQw5) Y3&xTY|5^&%F#rGn07*qoM6N<$f`C|B3IG5A delta 181 zcmV;m080P*0nq`FB!8GmL_t(oh3(c+3VBT&AH?SXrMO;DG7{YlVEG6b- zp+Q87{Mdz_fYLT#g3yG10a`>9@YDUPPcuxj06=lRhyhtNE5*87&rpzif=EzjZj ze*lgF&={Z!M*X?tS0FFm+s3<*>2Wk`Om1W?2AI?y0^PU*Xf6zZ#sFvxfW`o5y8>jR j-qqi<>o^U=PYCS+IbSvLy4fL500000NkvXXu0mjfU#?Zg diff --git a/rep2/img/glyphish/icons2/49-battery.png b/rep2/img/glyphish/icons2/49-battery.png index 707d6f55f24a04535aede4ac58eaa25c3a80451b..eae0d9ed8f3bc00f2cc610f6f34376ae5bb28dee 100644 GIT binary patch delta 226 zcmV<803H9@0saAyB!3BTNLh0L01FZT01FZU(%pXi00026NklO*_<(wIrhj#;3Lcp64@FoPj8D3zL z6xUi`z}l#n1=s*eDVIai3AAcny|!oqCz3Mvk3$>O3IM#7xm%}U&mVd_#0T(^1bPzy zm?gzM3Wx{+Z+aBiCB>F&v<2e##UgO)eXd0-pnf^;MtTO8CS4fTPVuecObB=r0^Wpx cH^U2j0sI~hyueXI_W%F@07*qoM6N<$f-<9B!2kdN delta 190 zcmV;v073u$0onnOB!8hvL_t(oh3%Hn4Z|P|1Ej^dN} z1I!`dVZfIQvt%z|mKMmS1+r;@Y;Gqo01IlvBVcGrY@Q+l@~_}=R-ql-8{-uKSe@hE z6E**+c8LvmDFdnr0DP3r6$K<(Ae)K;Po?wBGa7-MFWw}M3OBOTk~sQHaTxUuY$2q0^VQ_gvrnKk+XRwy8v=>=?-;ack@9@F6XJ6lQ_ zoqe%7pnfrGhsl8kiyLZ?0^BYwK?*p4yShQP(Ec1(kPe){T}R#g`#aDe|?NAb4=qn3$oP z*=dDYvL66N0ym7}`km$g% kV>pmX`ENi1vMDd%0&+MLOQr-OL;wH)07*qoM6N<$f0Fpcq&QIfH2{1{ObJNww7YFYQJY19Kr~Fl}`PhQh2p`im?Y2#xtE z(Zby`Zf5iyPz<=fi}2A_43vg*Yu;X(J!;n|GjO5XmA~axkOQtAwM{4;ICVT%e%be- zU8Byxp~JcR$31G}z@KISU=Q5H+$L_7rWw_M1C|Iw*FafmIVCxXf93)c4TL5d2+adU W!7Gg@xX$B!BWrL_t(oh3%K&4TB&QgpZ~JID&5ANN(gP?Fya1Zr~{N4>Z;` zz&o%&VG2)`ue@pkMaoqLU|0j z#`yZ%F+rUAA}fOG16&j9x%PHQUrhBYzy#=1n~2e70*r!jH&c>1Vx$+@9H_f&<}878 zX2Q>5kGZc81t5ORF#$9xe@@#~sQQP-?rZAM?HKWSUPQ$_=8EE!7ggdFr)VUVg?}nwe0m;TotzW`O77Mv zJ#`XNSm*}S!0)WSPS9485vYLcLj9ElHc|^HfiufidG#(DrGStQ%0;LIOdSicNQF>@ zO29O6Yj*tf4_5LLs073RglV z=ItrIvo@}r#9$3!zAlLyu|-q@Djs|P5Kf4;6$$}U23m_G6Db75=Jjb!Fkuxi0tdtQ z2aK7>dLHQbKaoAXj@ZFlL_ zuX$&2t@UvhmcS<0bf5psr?e@zLTd|A$ZsFx925Su=tMG)1 z1WMp8JOP(L2<(O@pb}Dnr{M|M!IlVc!xIn*u7ET=A(r4);#F1Ua3n!B)@mhIf#8Kq zvllw2=a0rm+_%#qU`+^E69U$_7s&Bz(U=gh#=XD~6r(HpTa`VN00000NkvXXu0mjf D7h-SR delta 196 zcmV;#06YJg0^k9VB!8z#L_t(oh3%JN3Vx0He478y8Rrxl9{ay@l%FNm=j0>I6#2nCrdk)ygl yEt>e}G#eLS;{t44fQ{u({Vyzk0xrO2d4UUs(h&p|#k>Rn0000C;ge7<-!>Stg;)f+p`N&gID_P~L^DpkNS^kAzB zy!OT|sg~F#%uIjIj16qfTMCw#q2+1cP-!qbYgwFD>fB-(k2li;3;6O*j zg>HhF0vxasb5U1f)mXI>Q+#l4A1;_RaDDO>`iFPV*p!$83eVV-e1%dI^DPA9*1??F qS0F^dr&$&OdoA+6(Zpl{srdyf$}`B`z%^e00000Gnf~Y|qJI_dZSfR(Ft4%bu)c%b zItzRCj%ate23ct&0S5f0Yzm#gbZuz|t_jI+fSQrQ@^R`GsshUZ4uFp<=OvGg#`N97 zCt7diqxlvB>`uTX+ME_*`LKSBF13$n57B%JH6P$^Twi-yuW0@RBmtgkE(Eo-{?HWT g)Gbs6%?J1bA``_9^XNjM^8f$<07*qoM6N<$f>FhT^Z)<= diff --git a/rep2/img/glyphish/icons2/55-network.png b/rep2/img/glyphish/icons2/55-network.png index b1ca76d5eb181be5e115794f985f0787a665ad44..0aa28d6923449cbb87496949acf6113150488011 100644 GIT binary patch delta 399 zcmV;A0dW4p0;mI!BYyx1a7bBm000XT000XT0n*)m`~Uy}T1iAfR9J=Wn9Fg4Fcd`( znH1o303D=+lt6l5mu$Ram&uNuH`%8ID8(J164HUQKpD$SWLbLpOeUNeMxSTkU8Hwm zTy{eFPK{ZEN(LbkGfsQ zyeP4SCYHig#+=e~(=WfjN-6;@Fasxj%v@UJ1T@CDAs~53BOt2JyGS7*s?WQS7V!)4 zVTsv%{v^ET1%J{NuqE%qtK{TZHd-0|nd?4p7O$8T?}4a3??SSLo-FfGecnZ=fEM^P z#x|dCfCmIV?;=EikIyTX@1JCZ2*~R5E<%d9)~(IwcO-u5CMn*;*^-B_6;MR{o|h6L tAgj;22-!keecna2{Wn^eO+abB0ct8u1m05O_y7O^00>D%PDHLkV1kJjxN`si delta 296 zcmV+@0oVSh1HuB3BYy!2NklO9c*_gm4&V%6;CALdmFC86TJSO{)@u$x zZ1%#2Cw>NxZ5rU6h<3OutJdtkh=DzYR=4hpSRiC4B=Q>bW`6*=21O622lH)Hv@Pi00e@9aWXQm z2FNw|#P0000>FCi(4f`4Wd zx&bRuAT&`RG*KWlV`)NN*OKrBFb5_N&rZM=sNN-%Whv@ssDBYifdjCn-8}Ao>Hbfx zFX~GmrQOUP$U1T|7iYpMkh&($?%H#o8ePpdWPF%PzE}lzK>l!_bDtg(W|ju50=Y3C zUe|~Si$G<0abLBx0te(%LmWutWxhtc%u=xc*I=Y)%8qMyM;zzqsSSowssdfD)PEG@}pe{U<#~I4EY-_ ruGUnOoW$=!fr$d4i2|XC0-?D9jFuSBa{sofr&Z-tk6vvfxa}AD^bNi zaV;c&QeF_Y?-XpA0^q=fxkU@Gk_Mtl1JR^`XuJ(P0Zaf2ITL_wWRb(+>;UFY-TD2V zwbn4fR7_7iH4$oH2e1%93xJg=zOhCcpyIXMEgDL5p`;jMDSv7WmMOFuVu$9^TphPb zC1@L393X8{$>*VIXmLOlivJX1P^Ee_P0VfFv%H*GkshyA;+F`^#5+Y}fb$8py{Gp~ zllu#efrlc-HMi#&l{E3+#wZ=9y({M!s4(n9)>R^${3DAd4MdX$qPe_*7aGnZw=v6g RGXMYp07*qoLsM diff --git a/rep2/img/glyphish/icons2/57-download.png b/rep2/img/glyphish/icons2/57-download.png index eb5a82c69b6c5057025e99b6d09daa152402ae66..e2b0a6955d67da2f0050b410bd1b60e0bf18cad6 100644 GIT binary patch delta 255 zcmV z>I{(iv_TqGuGPe2dVnn8G_DLAN<CrE2~{pOR9|1MMAXky8&dizPlIIaCtw$(oP{TN_<>PZL<@ zfGK(Sfgt;90gDm`Q5}hZ8F)#Wvt6r53Z%Fjbw&vA#v55V9g(LhdjS9d002ovPDHLk FV1f$gW*7hf delta 223 zcmV<503iRH0{a1wB!9w5L_t(oh3%NZ3d0}}L}x?K={^0-{zre=UL+7{Y3j_P8+{mL;6(yYq>K^zdPCm>$ zn)sW@P?NY6>mnZTjZrJUE_lxYSMk6F2HDUCHjxIZ4rAa6{$*mzb*f=rCAwhf9_WJb Z2HxrQCg0@H>+Apk002ovPDHLkV1f|!YAXN$ diff --git a/rep2/img/glyphish/icons2/58-bookmark.png b/rep2/img/glyphish/icons2/58-bookmark.png index aab3fce7e1d52802c28f5dc6a06cde9d518a5547..7303ee3b58b62dc5f69a18db4bbaa3b4d1f63bec 100644 GIT binary patch delta 209 zcmdnR_?B^kNwh{&oZ+zd%~?TG zYpbICAL#zMKI?qQekY*>Wkxe}!YkpiZos$4Z719%w^KP=c@On;>n8WNAzK5I_ yJdpZ#!1Yj7Ynn~FJqJV8>9$_G@{=L@8yG!*2!wb#Due;u%HZkh=d#Wzp$Py8F;MRS delta 158 zcmaFMxQlUuN`0fJi(^Pc>)RQQTn7|*Sj_*<-EOD&|9{KgEdfmn65d4JXxy8jAQ`|f z)zBqhyn%g&D^nxW0V~a!yu3Th53s$yRP~Bu<3t8&&JE~<1N;8XQ)bPu__O()cJ(@e z56A9BCuKKY`w*BE-Dtcr&Elqf^!&x?;#1DDrbcW&s8h>P!~g`Iu6{1-oD!M<>dQhx diff --git a/rep2/img/glyphish/icons2/59-flag.png b/rep2/img/glyphish/icons2/59-flag.png index 9ab9fc7c3ce244a70ce45c378667e65b1c1e72f8..57a33ed7d1d9a7062ee54440160ee89418bf8f6d 100644 GIT binary patch delta 313 zcmV-90mlBS0@MPKB!3BTNLh0L01FZT01FZU(%pXi00037NklPi6hI%w z0qAUX0&xRJUu{l=2%r@aayu>R>u(rSf;d`PfPy<_O5>0^} z&H5Liy@bSQ3T${*Bx_s=oGoHPAeT<;O5g-6fIa=zbW*% delta 271 zcmV+q0r39R0;&R#B!BTqL_t(oh3%HH4Z<)GMPCpDWQ4E)f`&R9zz9r$#0X4)L`BC4 ztiT3DEC4kP*&r0y5&}|$Z#W|Sq$`rhclYE=;smH@F&*m$RQ_Hdabd>a?|^3w6oGOz zq8ljB85jaNFa`$hejX@)EujQFI~R3iE>fTm^xSo>6s?5tEPsUhnbN~Ayu=%2v9-Vi zaeOQVQedeju@snbn|}%G5t6YKSOF(BNhpEQ8*55n9-?@N|3C%ofho=BdaLx1JT%f2 ze-eF_qvZK~Q~(#?aQ8d~j!FZc68H-7D`ZU+uqFyv69ue^0@kQU33FP%1FaXh0?F4{ V0}1TGJ^%m!00>D%PDHLkV1h70Z6g2x diff --git a/rep2/img/glyphish/icons2/60-signpost.png b/rep2/img/glyphish/icons2/60-signpost.png index 4808b9e5dbfdbba330ac47e2c72ca33be72c7128..3d993c3191eda9e8456928776cb0ec81441f77ee 100644 GIT binary patch delta 212 zcmV;_04x8s0q_BkB!3BTNLh0L01FZT01FZU(%pXi0001@NkllyDND#>hp0-hu8C%SjTe887hbAUitS zyRZTl#RI&6&FSrokcC8oY(au-MFiADKurYHj2B1}t9bzFsS*r3k1*F|00000NkvXX Hu0mjf7fVAt diff --git a/rep2/img/glyphish/icons2/61-brightness.png b/rep2/img/glyphish/icons2/61-brightness.png index 529a82f8cfc4be755ef324c7e41533e7f7a9e649..e0592e7af65d4797f5545e6a4bcdf4df79a494ea 100644 GIT binary patch delta 433 zcmV;i0Z#s-0?PxCB!3BTNLh0L01FZT01FZU(%pXi0004fNklXR)@3Qp_f_;XNm0+HyI59cOb{<%9>0x9d|5}l6Fvld%2)#LVr6Si4Hp3g%@!#v zeoiw&n_+ zACYz2QRg|KafmN8MYY?5t^(`cDVAI(w4OqjiShRtIVzp_{zc~8E)Nl`|I97SDqv|= b0Za1(J!?ztkGIQY00000NkvXXu0mjf=~}~o delta 264 zcmV+j0r&pP1ET_vB!B8jL_t(oh3!{S4uc>JeJneGN8kwT^-*(FIsTTfmD<4FS5xXrQOs8d4Q_16WS@FEmF4YokpR zCjpp?cZn;u2(AQY{?f;&>x;~N zD>3~bB-E&R= diff --git a/rep2/img/glyphish/icons2/62-contrast.png b/rep2/img/glyphish/icons2/62-contrast.png index 473b17a3aa43c7dc754b83d500357b895119c535..d517726ea0390ecf6f4f5e4831eb84ad85cef902 100644 GIT binary patch delta 531 zcmV+u0_^?E1FHm(BYyx1a7bBm000XT000XT0n*)m`~Uy}-AP12R9J=W*u9GrK^VvJ zPkd_>#ZI_`<7zFm3Mg0T3H}#0rq4A80R0roI18uog9%?pst{mS73(AIKs_%eTaQww#RsmYuLmc zYzRUgqK!#P@Kga;@LouMf~OcRi18Dj@B#O5KiV8wyjrIw^$~g@PrhwF`B_>xk9T;5 z<7k`oIHd?!6Mr5B!pwgz5%W7<$LntNRf!Y6JmcX z_^RZjD%s{csA%89mx8a-)KLfKic$%Fqy|6ptwbFHDxV;@o*Fzwz$lJYH{gj-oo9WO zCPhHDd8@vYPKDND)>mm#1nk9eOJ2}U%T#D7HVVE#fm8v%geEQ%F~A!bF5XOHo+Spoog;*bVjUX1DjragQgJ7Gp z6A=pwIj;0tLGV391ho>Z)LMkZ%1$lRcovx>ag}hp6A6KQuuQ`4{Q20O*;x-5QejM# z9e@@!fwEB(C>uo+h=4B820UZ5WiBe%C&Pk9VBs?;(68FSD}T_;1lIvhfKcZ5fh}Mi zn9HndimuAPH)7$47hnmv2d04@zjtDfx|s6KU-aP*gH)5+9JX z5O2UD`8(kQQ@|B)419|2p)!VQx6?%ssQiN_J3b%707*qoM6N<$f<*DgO#lD@ diff --git a/rep2/img/glyphish/icons2/63-runner.png b/rep2/img/glyphish/icons2/63-runner.png index 89cd1b1cf0963098ebc0524687e8d3cb0e9e9e53..3e6aabaf7771f4aa7e7c51e5bb4eef48f57a5575 100644 GIT binary patch delta 491 zcmV;}#C^DbFqH-*EA--b<8#6+F-5r+Amg zF9xh#2+E0=5`S8dN~ei!C!1f!;{oe01mrv>Lcn!g#-8LdN4%0ss7f;+=P?lix{@8< zlpF?D_1AtkpBMGJ)7V70&K#luGP=KEkNu zO}t)-5AmgjJgC2wIFw52o78=VQ@4OM>DgGq4qp2YZDjN;y10g|96yo%6NFKRfGd@F zUvi*lIbMxSRx045eotRHW$jV#f2lC%Uz7?stFx^7dw1ZfLQ3BQjgVawF!P^P<^rZo hWBzS)%FG2!n?J@uMd?W=Sq%UH002ovPDHLkV1mXQ3i+ct; zJ6}NIp1{gN@BwVC^eUf1EIcaH$!9gNV|#Wffvi31>QmerhjgswG#VZNZCSnz`*bh zj2#+NG{Fa8zocM8VNS6?ALvb41!4kbDiT(~F>np!=qiKWu;JcvK}=ks zkJxAQ{C@zvOOr_V<Bjf8gNkGxh$|qo4;ICD{Z}7E>xPZ`U vv`j>Fbk{0%qxAw(U#p0t^()W`s2g9r97O*T;n^+#015yANkvXXu0mjfxG=is diff --git a/rep2/img/glyphish/icons2/64-zap.png b/rep2/img/glyphish/icons2/64-zap.png index 64fd017de5c0f43925803e17bf738a868ec09b71..0567a6f0a6e41b637277617ec9fa00d023600be7 100644 GIT binary patch delta 386 zcmV-|0e$}L0-OVoBYyx1a7bBm000XT000XT0n*)m`~Uy}PDw;TR9J=Wm@!VnFcgNr zAS4C`=C%y19HKi@2au|69msvf?{7O4|c2X4{A3FrkX^$OtzbYLk%3bN8T9{RsV zNckm8@w4UMpOWV%CyL{k|E#0BH?Xf7fVy?8S}09ZxBCgSJbzQafs-UjB)%4Jpo@R= z08^!z1;A}!e4;c{1DpcGit!ncDGk*Cp`!9C_LBoV1jgUQeo}xg&Pku&wwYjnFWCFD7^x{)MjdcA$c(? zY7DHzUVt9px_czH1fIn{e^LUR1HF>?nb2cLN`Mk_4Xh|@fB^=H>&g<~9atEy57+{jC9bQe g`8Qg#8i2a>1G~T}+}>6INdN!<07*qoM6N<$f|i}A+5i9m delta 338 zcmV-Y0j>U=1MC8jBYy!iNklzF{LE;f7JG+Q6l_2dEmZ z01rSE7YR83?d6 zXvqV-1@~ diff --git a/rep2/img/glyphish/icons2/65-note.png b/rep2/img/glyphish/icons2/65-note.png index 70e807da5235b5f17c006145c80923fa3c6c76ed..0354f8940891052702a6e33eebad89d5d2eea1a1 100644 GIT binary patch delta 355 zcmV-p0i6E20{sGzBYyx1a7bBm000XT000XT0n*)m`~Uy}FG)l}R9J=Wn9YsCFc5`5 z5Cx=!?Ep$(JJ_vYgOmc`mK%G_ElUMZ0wqvF=ztQ^0UT_^k64J}7mtwgNl{|idd`bI z<531#mhsLEtzRIN-hefuP=TT-o^>DneFkjqJM%mboj%$M{C{*M9LvBIn0Fx@GX_c^ zRg1 delta 288 zcmV+*0pI@p0=fc_BYyz_Nkl2=08m>OAh8qK1pvU!qJYcKxV0vrjppOHv?gHi)e}Bb0)IlxJ|(u+Rl+Y%SqII# zP{AP467WRYmHviS5qFFj8aq$|Xh1qb4r!*CaHDULI7cGa8{d2XD~``Z?pZL-dX44Q zC{|}%37U+FN{mqhCjk9Q0dz3BP`_eML5MSnTy3|0000VFNi7mwACAp(UGuza&` zFr&|bBp^1U7a;qLdVB?%_XVYZo7oTk7O(@ZR-Y+?Dg`*P-&=&pfqT!fUW`78lYkD^ zJ;!>X6wvH%M}7PBsdy%^EEkjlPG+~jhTkG8>)U$1gHa0DnRUP!H~^nk4%X*9-@z!) zfeZCh{s!h|yHePguLN}x@2Q`7*A_Y1*j^bh#9gT3x&I$#vjA~`bPmKvDPTdpW!j~| r?_a2bDg~Sa`Tk3m{*6W^35d-PaTGBw0l&JJ00000NkvXXu0mjfO9Ga| delta 288 zcmV+*0pI@f0=fc_BYyz_NklN-xJoCnn{))-z!7wV z^q&h25pnswcH0B)eXTQVt90=E4 zCi^BX1|qyqK05`|Kqa3u)-QAOVl4&MG1>;jjSCZ2a=!4Es7u?Z4+?$)=m2~qI>~wZ ze>C8v&^-*^)#ypd;AJ*^iS4|Qn8D03h+OalXc|3diiEb{|Pl-UCh9KUJq mUAqsX-NfpY9vMhY_6EMpeh4=p$Il@E0000$~W1womE&h~;mqIHHpGcQg55>!|JKik_mA|%xHjLur_8Qwx0 z)HoxA_a5*PzO(IZdN^lJY2mZMW)*9UjyxGTEH{rC* z^Oek7tP28BHR3DfpxHAvvzI^L@ RZW99#c)I$ztaD0e0szu#id6sr delta 249 zcmV4Z|P|gpW>;5t0ouN+)VYX*Xh&b_4pyNEAU^ z8%q|7KM5sL$oVe35&$Gj%*EQkC?3EX4`9vd13Un107B7@Fa3|I??xI!Btg3aSUY+P zfY^8^(z6yTX-d4P8Lva!$aJLpp83%rtj_b0>8{D^j-Z2Xx;ge20)LD)M{5EyvTwfu5H=KrI1OZO*|06iTE!?jQU zD`AcYu*L&e;{mMEI>^kJegr&#H6Fm4=>xn0n3JogJh!^(00000NkvXXu0mjf(C2a7 diff --git a/rep2/img/glyphish/icons2/68-paperclip.png b/rep2/img/glyphish/icons2/68-paperclip.png index fb28a7fc90696d2b54d100371790e191a57f9b5d..ba2f85a791a2854d30b8c65a789445df7f839b91 100644 GIT binary patch delta 412 zcmV;N0b~Bq0<{B>BYyx1a7bBm000XT000XT0n*)m`~Uy}XGugsR9J=Wn4wO?P!xv0 z64XHO2>9VJ2s+IJpa}_8QwT_END8V60u+9pAf`|VsK9S~4+O&waZhQ}bPLdbX`0+G zSa zGe&?)K;DTBfV&lWBZ?BL>)!s1Y7dNn2v_&#xKoH*;KSlOxSlw)>&)(HjB*nn0na!Q z`Kd%5ndM4QZsIv^(xc-^k*H;xNRlIKwgWJcb!_|?vw(t{JUDztM8S&^(SHaqOb*}VXjn{uvJ(D^ zVhyeFe~VvD{)~pkmjJU5cqh+5XtIFNWC5Yc0z#9#fUW2JC(ro-$o@``bgvzCH2Fr! z+R{ttLf121kC+vW@fa~AW}u~9&5GEDVq2lwB1wAoKwQU4V>=et$0WdB_Zq-}=iz>E z_@(NKCAz`=@-NzGij7VHUrx27@fvc==3!EY`d}o#6DKd=4jj6ogMv4VBLDyZ07*qo IM6N<$f|q8DG5`Po diff --git a/rep2/img/glyphish/icons2/69-display.png b/rep2/img/glyphish/icons2/69-display.png index 14a67ad69eb104c301a0335cd809362d29df098a..b9b4668e4fb15f703c232407fd3bb6e98abef9b0 100644 GIT binary patch delta 328 zcmV-O0k{6T0^$OYBYyx1a7bBm000XT000XT0n*)m`~Uy}6iGxuR9J=Wm|bdvKomxg zX~~MRBp2aZ$2WJB4VBVR8q*L`nx-}n&Oi}U;+=aP0&_s{;{1GvQJAqP%aVI$kvc#u zSs*o8AT^JYPEFG|;7Ku>t_AiS3WT0XX~m zC1!FBf#r?uj=&!H_Vt6p+_MOL0q?-c*DApSmI58H1wMSO8a!YnZ~!*I4@SWQ+5#PY z@SU$s!-KBCC-6-F&YK4hXbH6R;X7sw4>|&Gz^lKXeQ%{9uvQpDOss%-3!sH`$!paV z5o1bM!1?PxhC#ba3u%>a;2LgFn+V+fiOfo1>~Lan2r?098UH?DZEz)rx zErABuVI@R6?jtQwVS}r7-9=KM1`gO+SM9oslt70KUy-5fE)oJ;?ASo&@Q{9#kbV+p zKT2qwiGqnejUGi)B-}H0ghDuZYYk~t0e`$y>iq2+*)RO@8Tu|6jS<=a*MZ+!;38Q} ma}Q);-UFqX1sO^+d4U)3ydzj?K>euz0000R12K?x z$WzhrhR*;-zyg>9NrOBQ*+O)^;4^>jNFjQXAmOMef{fJfj~X?HKSOPR}>Y^im^52B0mUpR90w04@VfPmoSRXCP=31H2pU&4kWC@FuoqAb1mh812o3&VU)q zTPOuKz^8I-=>FNM!jge))0LfCze(}Wx5)~VG%0W5&sf$^P;6*AW=uiHZVmVX1cJ(0Ea{vb_rhnU~rDRC+8wqd8EbuV5*$;TmC|3QGk_;2wBZ z#ySQkRC>;p$wQXF6L6`FdjVF4yx*`G0KND=+kxjFliI)=-L{FwYT(Kk zp933t-qIOTk!HFA8@^s*h^U6uz=bj1OzH}lUt-HS&;suZu{?+80*?00000 LNkvXXu0mjf;Pk42 diff --git a/rep2/img/glyphish/icons2/71-compass.png b/rep2/img/glyphish/icons2/71-compass.png index d5d11f3ce3804da5c25d3b47c5e36444cc01e30c..5fb3238461a624556a04dd2cc7aeb3a2db5326fe 100644 GIT binary patch delta 650 zcmV;50(JeS1EB?wBYyx1a7bBm000XT000XT0n*)m`~Uy~Q%OWYR9J=Wn8A(PFc3wb zgDt@BK-lS#% z%xnvs2X<%a%f-f~P$52o5ksKDqys>Snc@D1=X$X%~~LJSFuznF+_pRbR&J4^nZoOtrIaTu%7Av!Z^==OM7`b z-{R{kLJ0KIrW0csI{O)B6IXKYl3eSnci2oKgg__ll;phvf6%~xp!Ja}&#kY{VKa#k z0#@=e#;RctxED+cZ7^rRwGEn}ish2#NrVt+(WM?1VF{*4duCcH=U{#GI9_z-5W0zT zY3J&iTYpiYm!>sHG!#PvBXJSV${P{n;Fw}&=5Tfz0@yNN^}_YiTIig$PT&fT;0SgDM{xv4 z@ct+#JtdSYN-*5?BqXgpAMbO(0BwMkitXoY0Y~i%aJJ;ZRoCW(xIuxB>iMkljS2a716WtgZtz`z4rrCgP^VLJ z9tH??F(ll2!o`Mwzsza~E<1qO67jKwt&ISS6$6NMzvbC!AEY~ww-`Xj`%(~ymiVj{ z2lymLx-Z`c=YMY_Ig2hK;|hgd;z4y^KDSPMtoub@VjJnG;khx1@a_-cTXJRx__UGf zE)EI#W|gnVMy8jMK1%dE1r$F@to(z++)CxgX&F|DsO~}&nh6n9&6QHdM8%hSJ*3Ma r7{hCJvej&aqE`F*`JW)dCr_! zSP$S=T!1w$z?!Az$EvF89s^JSsq`D57C&WKs^wG_Al!j$;D1Yj6R-m|n#r_FD9{f6 z0&K%fl1sGu#NtNFvgj>V`DV+{ZtrA0@31{$T9$!H6xm0~6nV;6dS zdH>+gcOhu^`7@uT(uhy>41joxI7oX*e-$au{O>|8z#11|jSH|Q);X{T*1diJp1@5z n(d=g+@jr9MxEcU!T!1xi4_Y3?01*5G00000NkvXXu0mjfOhbHJ delta 237 zcmV%S!@@imhJ<1Nd?vfu1S~Yn&bxts2?O4Q0dK4fOh6B$9DROg!Xl30i`HPE zCtYmJjh=yf&NZV_GZhyidSK4Y7mig;2Rv1R>OC;$e68|Yjb;S(1k%PjnWlOIov3Cr zY6BNh%}>NJx)LLwpGt@L_$;B`#5HA8n`y*d$eS?WO&IW|c>{Z+b#K7q?Rf$Yz)3CC n`~1PxZp+N9eR6au28Ty31nuS&Fug^)7M zLOR2OFk;~#h)N(1iePc><=vUYBzM9R7d-HI_nvnj?|;tupMUety;CbIEAD4`;H&|h zRvtX*!u9p_%K&}sr18JX+S=MlVV&H7BczR`bRS?Bn;2p>jR)!ZJgy2u zw$lAna#{mA8bCdV1InK73(#$0a2MOcz=>s21Ev#z8GI(ZK9jEBj(N8)jGf0ao=Nk) zNq|h6#9aZlCx5`-!msJNB@Aq*wXHNCmtA~;YxrpM?&U}ky-xa9mI?rNfP(LJm}jJ5>Xkdjt8 z$vbK7U-(#XozY~^y8TKFBT{2PZi%xDlkV!6u74*Qwd+ZD4d3Bg{GD_U3u^5bIwAsh zD=<|V&`-ch*%q{!DRcutq1+~K;XS+~D6}Z3w>0)1Jcc_Jn5qoe(fo}|-9RL5Nw1-% zY3rx?K0Yv7=dXxp5Z=FluPZQBQ>ZUIS4vNKvg@En$K}x@p3MpG-!lr)?5IjA4K+Wl z>wlu-9N!bSl73Y*a#`+({%A%-;G;@B)n&9Vc)x6PKQI&}c0nZdYVl4t-E&8}BPf@9 zqi2OvK2^zoCfm?#YW@K|qx*uLbmcaqo7V3bZT5(q_(bf+zBj>UhRL^-JyFxU4pt@t zY(I?$4uY57ds*~KZ%l||;!S;~Oh?e6?^NW+ByG(x%$c1^WZ4vd-z5=^d@j^4*5rh4 z3$N#{w&y=^E<^(+pUll0Ew#A;%w_nv{dAQ~{eQT7#&X{q@DBsU(eACaXMX?y002ov JPDHLkV1g_E;|c%( delta 917 zcmV;G18V&62dW2j(-B1JG8gZ#tAfM^`~>D zr%-`4YzUBx0%!v(cvJu`@S`y9PMk{prjltru!^q)pyzi1)J*!e09^=!Kg9ibWEudI z8ZbZ?eLN>ty`P?i{~6mxM|k5?{F1(pP6A}oAnppV9RYqBx1?uT7+9pfz4SdQi+CF6 z@xp{SCW?Vo5r3>5!(f~n>GQgXfvU8yB!U>W@D6^$&v*u}W@5=Upb*?GX;Yo2DjR|- z%OW-!_!{4fczGOW@q6mu7gRcjlNorjDYTXVRKXAMaOL}q@nCM^NxXuqVzoCa?F%@D z4>Iv&8PH3AdTK=9#Z%Z8-h6A1Ic~d+M2i^=zp|t$uVHvFd0>Kn|M~8^Mlkz z&~9MJ`Cgji3jV5$Ifi+BmVqg28!gnSL-6_@^{ulfyi&>+_!58Pa?;J?R$NNIr7Yl^ z3`|)b*i>KrLDDUa=(@tt(@FOPe!%CrR_S}2@Jdy8R3?RT6IpME_v)Tsh*(%m?bq-= z{!Qw%XIlUE^fLUq?!7m4n)Sk*Uh zhoH(u99QT31>7Y9mY?HP}ntd?tpP*8x(9sDn1tsnjq`TJMTOO0PalFX>mr8K9JtqCV;i z<9}Yv#51$=Kq>1YsCPTm&-^?<7?As{;Ozu-r}k~(sWaltyuC}mU-6JA1}DLBebOUk zN9^fc<2w^Ut9E*C8b6&$<316!(zyw7Onj(s;3Yw)kK|pG6o%I@Q{PG)A4Y8>dj r&@2on<D-B3C7m%E4Ffd2qqRsi={O%CZ>00000NkvXXu0mjfeXYiz diff --git a/rep2/img/glyphish/icons2/74-location.png b/rep2/img/glyphish/icons2/74-location.png index c286d2ce1a627c5db4f1e9ae0be790ba1a810e67..cffb2968a3d986c3c0dfddeb6c478b1c44b12f7e 100644 GIT binary patch delta 498 zcmV80V1lwiy8(29W`i<9IzfBzOKpY3B7T-4qo6V-Kc?isbG4NQqmVW~$U=N(D9hb{xP#iIz zz!vxhGA@Hh+A`5>fh5MHF$^TY7bZA>0@wjlN3)i;LVjn!kq9QV1`-LRyyFL81T26L zNB1giBheszj>`Gf23FYMU!)YxatcR>^xbL#&=?qEm(2ltXI%zTs<`@0#tK4XU@mom zSsra!V4v39Cx7&zF))_;fPdLEQDC3KxLM{$W1w97KZ-FvD`T}L#x}YFex+PXseji_ ze)FkB3b%707*qoM6N<$f?mJgO#lD@ delta 335 zcmV-V0kHmy1nB~hBYy!fNkl79U4;?s0U*B+(a|rkg?8%7n4q_$Y)NPbQz>=3>68sJE zw;BZKE&wN#5=h>-Vvegw*#x%aH0>}Q4l1W9iP#?+iM(P2yjfS=T3f8#oR!SUkrIbM hmJ-^?1hjE_0w1!Z7BZ$dak2ma002ovPDHLkV1jxilPCZH diff --git a/rep2/img/glyphish/icons2/75-phone.png b/rep2/img/glyphish/icons2/75-phone.png index ed58adc9f86abfe740a6fec11974adced18fa38d..9353db473ed1d3b3bdade9218bc82764a5e83698 100644 GIT binary patch delta 471 zcmV;|0Vw|K0`LQnBYyx1a7bBm000XT000XT0n*)m`~Uy}qDe$SR9J=Wm_1U%Fc3yx z7!Hslzzxg|?2Zy{AkUZ@=v+eQ4sKx4(S;JK_y*(#xT4MxC=?UNk&}4k$S~t?CX-~9 zX!luvyP70P!hhDu&;ht=1Q=SUUH_0}S@kgo6rh2)uYl4t?SJ%p=?FYwf@k%f3;S`F z1mF&MZ`c$AK}Y~@fmh(NVOIc}q=@!=Ek^mGI+Z4!v3p@r7GJuyBySHgmmvjV5i(LVMLo6am7jawakYlEkH%S2s z;LTzWfH@u^Tz|IF82f?^Fu9T!2p51QaNW|T*gu^@2j9PPJ;(~$*TWU<(;i*#ic|rYY;EJ!AVIRKTayai1k+3_R~>SD0y~S&u-a z03k%*HSs-%m6sYj#JsD+V-)q8!xB2pHbmIf*|BaV3Q*u2`(am?W)q@WTkO>_uT`pZ zBEp_KRni!U2>9sg#K*l*fffftg_C*$4dz#0LD)(?K?N_pcy%T)jX N002ovPDHLkV1mon%klsK delta 337 zcmV-X0j~b=1M32iBYy!hNklgx3SMlu{t|gPMnuPeM5$5I_73iU&aGICrfVP?{T{bxHuwz%c(djVRhn zFo#plQ=_dO@CFq|M`rX?i!Qzn)!-hrh(8bPQBp75tnEN(+Y(cn}mfqz0d z#AE>=z()p=DknGhI|~2-UNeXtKX=;&{iTR%wHPiejKi1JXQZ#>608Oge*e))r6!^( zK*+xnmkt_|qqK*`*K%OMvsIG5!HDDd+!pz&XSPm_6_g9JTWf ji=x+D^_Mvl=^pS6*C1iuZ-lK(00000NkvXXu0mjfqh^o- diff --git a/rep2/img/glyphish/icons2/76-baby.png b/rep2/img/glyphish/icons2/76-baby.png index cf00694d52a386679be012f5b2007553708afda9..7f0671dde3f24cca5cb27082db98dcaf2149b855 100644 GIT binary patch delta 490 zcmVDoa{@w1#TCK{2wlpQloXzo?TH;ZyR(Wc@g>Xl z&aU!byfeG@Xt7u@WL;g_K&S=}a2+x@&-1QO3cLXmx!(aZV1L`zIm6v=1o)&f z-_>TK7ywHkX=zU+W~vwfsb|bfF#rypF)zgcc=e2VDF(m>ShuvVC1$FiGI~Pqzz^_H zyKgO_p|S=@D9fcz);l?GfhmT$U^#`l%-5AlpSCjVB`bhF=ABF-EC9|i?_>rM3ZTvR zncJ?92}CG>Hh(|uF{Ylx4#HcZ0NQ+?QmHFZ(Dovhdx9Ahdl zpR(I2tF6Q{$K~(|xRvW~6-#8yEcAyhS7NO><MzF%ya5}hePcE$atJsSD)KPOA%DONpA=gsO{|c{i}R5ihKsGUnG%35Y}Ch22%DtnJX4&QOGqmyzqh z?j^53a~3)#A}4vN08d24ZYas`1L`|*yglAp*^*x%z987EGx6X!|2KMSd;?9U3;ui$ RLR$a;002ovPDHLkV1j|t#uNYm diff --git a/rep2/img/glyphish/icons2/77-ekg.png b/rep2/img/glyphish/icons2/77-ekg.png index f9b0e0afc8e71455cabdca018ef69279ed2472a7..71329e7eb5c90aaa7426bcb36ae39961a2c5d8fb 100644 GIT binary patch delta 487 zcmVYi9}z3o9**#ZJuZ z#kfo67y|iW`RD8mGw0v4J9~Chxm=D;Mo+sZ&?>qD+KrAE(0`jGxKt{|37ZA3#hwSQ z63&TyJ|8>Q#R{w_`@=zgA6y7nRCd}yejls_q=6ANo;J=Og0+CfB!zZXK@bbUPAr3d5;&kpFy=47TEIy( zpEc$$z*@j@G#?uCCowi0Ip)MJ8uJ&1rFo z*R6<}lJE{;@9XxeSqrdip$D-Wz-zSjD0T$g7{&x_Dv@fL9JfqbCx`XMHX+%R<9L2jzD4tOk071`mX*KY z6~t3OUHLB62VVgrh zZWM<%P(lJc1HY`Ufu;041973h4a}rp1=S+nfJl-^DmXWCrN9GliVYLn0kh{+f1hdQ5azQH~lD5267I9Iq&pkXFBl2*Z*kvj4 zS+Ku$^^ij?hd+1!8GA3_56X98(_v%{RsaA107*qoM6N<$ Ef|aiRy8r+H delta 433 zcmV;i0Z#tT1j+-DBYy#rNkl*bcUnJw`dD zgxwsX9HE0v2T2Fn4#SEGt>eSZRGKuiOifG2A%*ThZ; z*XNOX2hZ}H0UO}4W%nw!UmbpKsYwk+$j%=uKPj;9v1Tu}HlBfRWe!2IX%b1PckiF` zj!inXNL*SwIsxNJ-bJ8I!c0xT)~ZW3E&`358Wd9!$R%jzbM7Hfi4RbIg|z2DDff+X zy^Y34=`wObRev^ttL$%<-MhoC2+3v4R^q`L-;Wh!?S&jDI>ynVc?U9CyYtxfiLn!# zOp}YY0!Hpfk6nR(_ZuI^W#odU0(Me;`k$`LKFGA~ggUs9z^+!pbVDls2IpG6)pz$z{Fu*6BAY23YX8QY4fwU`&_X0i_V|Koi`wP62s@V zsmtY35A6I31W5zFk$wmA%Joc>6XRbi5dEs~zYG-35;vr`P?h|LwO_cbz*fAA7PX`B iXU;RhfNz2U-#h`M3oQ|CX2ui%0000z0-yqrB!A~gL_t(oh3%Iy4udcZMSpq#cHl6*5li=Sg08(!C+@^hx;R6l z2JGO}isUCn5z>$CPn;kEfDH|Eu`b{&ZonEhV2!4M6~GNZ404FXg_0e30vPdq zyF_xgPda|-M~W>*dT@r4BuoZrJtZv^jwJwqSMq#it`pVcUt(*tTPSUt9DD8LEz}gv z8}MtC$-7qIe;KHjr)CS4QoV&91#7Cs*8HI{q4{gn4Ors_toZmY@=2AQ$V&2Lr*To1CAQ2i z^#P=00jbFXQnTj-TWkBkGy%A)oMylnvpANUfhI6V%r#Wu3V%2`U#)(c2v{XF@XJC4 z;5_)D(vnat4U}ABx131H0?f=7oL0hG>rcG_95@>;;A)I{EDe_aMr+3>CF`y^i!=il z08h?_GqeDXYyL)kYHv(J>#sM9R6q;e%Up2}pwUXy-k2h7XsuZ^1iZX4McM{H$K8C5 z48+1NA0X}}_DAW!csaG%d^@cv;D&Ec)DON^>?E23XvCMsPLfN=fku33>?EvS=pV@? gl$tCcHCaGvJ|#X#qt{A20000007*qoM6N<$f_=!2d;kCd delta 251 zcmV75gdUDx|1&82pz#uI+Fd-Hlao+ zkGpyyy)U^432^s(hy(x|I_6?sfD{*CjSH}b6%Y<$)-H-=BVtroLp$gR_gBPT1-xU) zxS>IH9g>eY-A+Y00wU# zkRM~Ye?to^n_uH95qJGlPar_v!7hp~I0v=Vr{>~txsTBYK002ovPDHLkV1hT5 BYR&)v diff --git a/rep2/img/glyphish/icons2/81-dashboard.png b/rep2/img/glyphish/icons2/81-dashboard.png index 4f3e0984b30476f188263aa9c8da35819dcb1ac0..79312f524cbb0b21bfdf1aaa6075bbdd4536ba22 100644 GIT binary patch delta 801 zcmV++1K#}E1h)o|BYyx1a7bBm000XT000XT0n*)m`~Uy~=}AOER9J=WnB8sTFbv0k zJ=_592E7T+ognE1bvHC@JOs)0 z85T%@C*TMyfs9k(l`a#Sqs*zJi$bsk8j#fpvcv82!J|!a*2!c%lKxoc^ujp`EP;D7 zUH~haU1Klb6PY)c{#M@4`Uuh2g{<%g;2Ov|75*rXwNN3n*OXSe7oO4Rqd-Pg_#0_6 z;Dgddn&v8voqvn)Y@1t)SOqj-F#_nWr_v4#{V#b6@0-#VRF#Mh>{tbsW`QwPmsyE0 z3-hk95s_7zNaSca*z)M`;a30sNs`iGKr5=sPn{^TD8YMh#*V7)twM z-t9O&KA&;B`$p9=J__8~Z;j7B&jW?cu(K=_6hr8=#$8H zl*ghfk>Y~6YjM3F486Gs&tTtI^i5>Bv>FSqBG|fVf`P`0&CUzL4uBJ!lZkU&AZjcm zBGhlfeyc#~lF>V_IQPHM4i}J1%1cN_*yVgf^-$=A&nV_}7cVL6`#PcY!ZH)u=zy)m f#Tx&=)8CB0<#@l&GHXnG00000NkvXXu0mjfOCN=s delta 577 zcmV-H0>1sX2H6CVBYy%QNklFB7~(=+Qjzx^;djZ0Udvsu72BqsWc~mZ{Q7h0B(Sl zTQ~CTO?YRcZsKZzDr4VDWGC&vVpWHlTEqkw@%M9 zaUN}j*V1-^9g~eOfhNFL$m#>ua2};x5Xl02XMF4K?*{;Qp4Ne|vWoy{#UO8d$0;qg zj^FZV<-a)%qyHei72f1!I)xn;l=WHPsz&+z{+md7Sw6F_K?}J0HM1W!= zphk~*#~KuBuVYaz5@g~Tg*07!hv@^m9^mPE^!T)zHHAFg%IZs%C%Jxc9O7OAI=+pb zELv)uesup|7utvG39{|Lvtrai2<`w{^9MhRU_LL?Nhe@84nN^}el zb86U_jy|9l8Rj$!p>evF`!P|h-Mx#A(;eXhO%8yIA82g4SP%{ADddloIh`yUfCmBT zMQkb8_&WdnS;gjcm9cNd3?H`U0APXaI6v@M(gVwGCc|e*pi~oDS$9P6z1#N8%p1akG!ya0fUQKnFktBo)LZxP%;b9Ghir*s&#q#4lOwYi8%4 z*~cuS>2%6Hd~t?}$Duv{+Ny4FA}p8ugUgc-MF}h9dClXqy3ne4kg!c*A=MwIFC|A9wV($#`L?2>d8y4ns_=CGd_} z*OAn7pmdBYZq`(G9fF0)aDL6lMGHL>u)i;;+wdkmHrM|{!_JF-1 zW8e!Dg*_%Z1%I`N!5Dl1LTN8B9*-TmQy*hA1YDbMf-%0}+}jnlR(*1%?oJG~i9<(y z4IF`ADZ9q>h9&~Vg~JErAlnwcmj`N{94$6X)`4=RSLkHxCV?0?Z>m r;&iQ7jv~lWV)XcL^u~A)xHbL&Jr!Tn$E#dm00000NkvXXu0mjforM47 delta 450 zcmV;z0X_b~1lt3UBYy#+Nkl3uFaGV1$m) zc7k*Rx&drJJ}eH`CpTEA5bpBse1K(3Nb-~I3_yxjPeEdWL780k07*qoM6N<$fDu5gDCPpSu|9JCZ g-A>;|nNb1U9P1%6hzoHjSpWb407*qoM6N<$f;R(P-2eap delta 186 zcmV;r07d_T0@eYLB!8VrL_t(oh3%C~3V<*WLsRiYUch6ycV}L^Fz%hgM0a}rO#G2~s-Xe0q8b&|_5VE?+$Diu0Hxg%|1T4%(z19t=e+NRj zg{JyV8i`FNVoo>QJK+8nVt%2EJ^P*;$0*!8AOY66zl9WHYcnLk8in|VLd+lm*0>Kb o9#K8z^`zh0SU0?1a?Cmnx;H$@c;k-07*qoM6N<$g5NMx)&Kwi diff --git a/rep2/img/glyphish/icons2/84-lightbulb.png b/rep2/img/glyphish/icons2/84-lightbulb.png index 9f658ef2025cee70d24ba5f12e8414fe0cb0ee52..6fadc828fb899061a7cfbc4acdefac4082a60623 100644 GIT binary patch delta 396 zcmV;70dxM=0;L0xBYyx1a7bBm000XT000XT0n*)m`~Uy}S4l)cR9J=W*gr}GQ4q)R zPgE2OK}8S|D^H+!fTXtZ2ns>%V!9k5ow3x$D+D}1QrX&Bc>oU}mTHkFgapl>on;B^ zw|TqsX6DV0c?-i<>h-!sW~t}`vQi2tnuQmz5|O0cZV$g!(SN|%h+7wT=>Hm8tybo< zqdRbmp7G)(TQB*95z>LgBhK-TH|*g6t0R6l*u+J|p-~;E8WjJECw$=0c=5lSrV_6@<9k~>HFVLUh+x}kWgb9RVPrEV4!M(fed!Q6fmhV zwa?@v!m)JFTZ%Phfo3+rE-(aoKr6?@?B5K;HnBc12gW&xzkd@ev{idx1+;+ykA1aw ze5W)9O(!-yN@fI{fvw|vrL~o((9O;VVa%^64P5M8TLUNH3LJ$oolu-Y6C0~jKzAb2 zmL8);kQ}2b0|{SqZ*B zJ}16$YzFiBoWG2lt_ie7FQ9AO+6JuG>$2{X5Hf)Ig;E~a1rngOo5=p762<0X|whd>08yrO(nM#Tm)=UPtmMvlWYj=O5%3pOV5mn zC1=xe`-ST&6n_C@<Didn(s}^Ak@CJ~}3rT#*YAR{;qyLrwdEbFG`?wCy1Grbz9t zZ8PeZ+e)-qMn7fHH!hdSNAl(JMV{cD#OzTow-b42zZXh`zyq)_h?Fg}p%Jr?m{#P$ z--j#(-chqsd|6Fs!C8gf8oqa<8H(U5d6Jp*c_k0m*<(s%z>74!S-Zc&IKV$R5A*`M zMlYai^a2b7z%%MYb|Qb?)xUS*6Zjg`mw+eWh}sv8Yy8IIbCj6Y@F5_;?aUkFVI~Is gf1@3v7tl3+0HVrV=IF60KL7v#07*qoM6N<$f~4TzXaE2J delta 398 zcmV;90df9=1g8U#BYy#INkl=n#y-D5MMm!4Rq< zNEx^c2EqH0v+Aby7QfiCBITr~#2@dyJAWn(0E-Rdtu}$R*ag(ad!{&z&~NqrYXm{0 zWS1g|k8}xLn8;ZSEiDE=#zjIT*Aj~1i_gze2_!Rc0B~E__kV-71UJS`fNnRN{88*>0{S3l;pe5nC--y@!;Mxq!TEHjS!D1T4&MVJ}seq3P z2z6~8V@kM)oJNv3vD`<<89ZicF0yC+iRI9&6%$|q3>?+gd-us{JobQ|iB$Ayy>}@O zv7?)b4zCEE{ePjl4)T%DBEXr!G{S#fTE37T&xb&D0nUE@5z(?w&YW3;IT7D@-V=&- zxyf6}$6N~BhhMQAoBto!1=Pkapf+{^9_|3n0FIcBPygT9m5=Om&zLvMg)#{84w-VV s4qyc29n9MNrElWm*f())Y+k@G`$vZGqPe#B00000Ne4wvM6N<$g33U=vH$=8 diff --git a/rep2/img/glyphish/icons2/86-camera.png b/rep2/img/glyphish/icons2/86-camera.png index 1ea2cb80e9afdca44ea704110152ed82b4dba966..47fffaa1041d51eac6cedbc3e6ab302805be9463 100644 GIT binary patch delta 432 zcmV;h0Z;z^0?7lABYyx1a7bBm000XT000XT0n*)m`~Uy}dr3q=R9J=Wm_1IzKoCZs z5r=?~G8HX|CIv?bjjN=zat3!MozIXuNJyq2hoEr54Jd<@TbN?U!dmQv-Sui^$xj+t znVnh9w?AVmQIaGKnTyZ`xH1X|%_tx=gBNgVnvmzY?s^9nntyK(JlPbKrm0bUA3LBI z-{tdyjetj>1S+vEDnlz}ZX=A35bz3IS>&DLLFT?TNwN`8%5w_bS>&I>cwt=bzybK| z7^{FC5CapjSbX}i+dI@?wF6BK{N05L*oZZG6Z--(AVL+tlX0ty?<$~;7gX^RV2xUN zfCAXc*bG?lTYt25*YfcqtB=GQwbHj@nfRJ9;Mj6~2>6g^+%gtxG0qJBQ^JRUxjc)O zu|kV+#>XXIpt{Xge(RUGj_Cy-0+y&&xdEQVnq(5w3$6mDExrg<I*wZt^87A zdcj4&sZWUr)#q0Z^ZyGQ0r$X7--QU@rU^D(C;^TZc`4^O%G^do;~!gr83lx96cC!h a3-|#x=tR~k@~4{s0000+=b3* zQqiN-T!1zRZea?K1sScA%+8t>(mrXl%Fh0L<6V0u70~gIxymiTO9>!1C4k(N0DvV> zDO)C3_aZ9%d7v8U|C9U@a{{lxoS&yXhCY>ZHkY-{bVjRVHh;O0+N$R|Vv~Dm55SvK zu;$A;!SfQ|0Cy++YoG-_#aijpEF2mD`xRO!3$Zydf1|{=Y8|VdT@+y~GAw_=U- zbsV3BUL$(|t&D2|zD9g)z!w$36q)!z+HJtMRb$+gQX;@!+Eu`}Qe)i2dW2w`!phpf_CcF$7c2sMhIF1F7WR4sYa6{mtkWdLya5Rz*>(Of2=l=! zmigbj`C)e6&SphXaLwGrUO*_xKx|ryNvf*)ydTbO88`u>2KtfZ1fw#r0tOBA1Ir0UWnc;PE&jsmmWskE16zv;kpH5~ zP2=^!C|}|SpbgCV*+gz*ZPQ9n9-~L#4%h%Mz#7=wSRc3tK1_2|6;&Dl*a1D@8JOa> z3%C>K6<8oTeO)|i1K<`ov+&WFR)lKx~qM*r*KL;yUjeaKJUN^Gmyb zKA2`|Il-tp@rHW$fv&|Ecm#%_g|qZ;G&0FRY`y>i%q=?uVER}90000fD`lzNZbO6 zJ9K7dtvCW*+o?Aw1IoZshPqPQ0kz4CtVsS#9^!m{&!23^F9WRgn6umyXiG7WoAaPJ zgNEZ;pT8&roIaVRruQgYXouIpSVt3SpbCt2G`-(KQ3fhZPk+!)1+7?=fk(_v(9hDC z)-48&EVOWfiLFStB-U*iow_`-EW(nter z_Vzt~@qnAuzrY7B@QG1iPV3;d!n6IaOqKdp(fOiR;E-*-(^-ykk>#cs$W1Yjn_?h0 zQ3k#-!4rly7d6=KPy6rE5w^RlOVt+uSk_CxH82GBWv&mj5FuHxC?WUo0GmJ+*pR0n zbEIPGj$dOUDl--W(p{h+V-Z+Q&ABlVUn`)dNp4j_JIa`C$9~i#UZgJ6*KD#7aOKzu zldkd(ya6v_kAGw>abkvIPibkATa?flaO(K4z=`9Rfd;T8{uAK#;Y%4acOcLUxB;3o z<~uSrfLpN#z@Fo$*S*k|P}3s01-{>bNS{4;F!;A#J{{sq;Hz@d^Oersu|-ez6q@b95(R#Lsfu7--K2_>Zg=|BjeBf n5vw=Q3$;JW|J)7C(hK+iYA!iNLTr2400000NkvXXu0mjfycNUq delta 409 zcmV;K0cQTz1F{29{dzqb9=U2ps^Yt~~_SfhXV__C+DW1zt}4`Mf#h|&Z$Tsz}KPfD7PV z*zAk>U018(h=0pX3fTdA1>;Aqz67>idkc6J{rtQa+8pRvIJdwziLNklb6}7k)kLtO(rDs5)u+W-}y|CsI=ConG<&bR3rd5 z5`Y^Cz>NgpruqQqRAJxuu}3cejh!0+?Sa(@;AZC&fa{j1>wmhWx=K1Q0{GbR#8N!G z!uIerjrDMTV{S1e0sI0k1?xk6kCYAgfqDiMaXr~1`3zugamYPUw@2vV)+Yt4{wtId zKw-Tr!;UUCLPC$2ZWC$;{?S2_N6BL2&EJ%lZ+MufDndzs7E7BSm@lK80({M6J)Gas uCAdP#PdzgdfFTNgpMgnkCeSj|)Z62lPX_R6B0000$f?I^!^Z*>3gD{sa43?FkIBxZb z>QA!7;J+u!4hg`4fqAeS@Dc*pga9@nfK3Qs69NFt0Mcnoga0D@=P%U9VYDn_*N%J| znIl{K>6ySLzW0uJjm)uCy($d90}1WF)9IIu6lm&e_z749lvS4Sb>Y{##5zaKuZVX7 zZ)dzaM~?t`MxUPIg&eu+b%FIA&^D z8!1A62qY)x{Q3XfB=_9Z27>|r8GG9n5R09GZDT*QU^E)}PJj1+GoTG5*0~gz0Z+ix zMKBx=gY*O&aG(uLSQni~0$jH-h=#oI`vrWgqlH(I1MnY?#P4>(mAf zJMaR0NW2MjfPX`vp5r+Xj+Ss9hYHb*K#!jn)|fCO@dk{6J75lc$u^hRSaNLf2xsv7 zpfPY}9UBv$z$38q)Gj6Gli%W9+#8`W&@PCz$Q~P?c!Q8hbz~`?SF*Ez^ov)Ae*EbCF&cJTQp-A zaeJXL@MImE_Mi@&<2TWeoI1sAht0hanpR>;Hq;60z0DDDL%CMM^iF0%OYtmpT+sGH zeX@SOs4=^yc#?v3!+8^ZjS%fuXeJl5#TT^)dDy)Z!l7QB#e7DefmhitBi_I^@hV&@ z#IA{_WJ7n*wAW=}O!SEm57kU$&%gy?-|$pwqQpaWeU_|MVte-K-02z2|NMs{3Kss09-rragO}1 z!AA-_0E-Ii7k^@Fx@uilK0YxpGK|eo*Tr`7I+|iTGt8NM?}T&Wuwd%oV;YN(PYfiM z@ekm*qK{AD#4_i^=TOXPnE#UPR`>|WEaNWO)Mjh*ZH143OT$=-I@M)`^-Hley+%#G zx57ujRjFSjvK1;xZ4*%>vK8jCqwISp{$(ivD&gE=E@{ll<$(@cG1mtk@wh_10zjSU z*g(WazJN)@1?nGjM#yWl1GMG2DtW}F&vz-_#*=)3T7Oc;5U`=Y1*n}j{b1s>ywgb=-6KI=jU&HZu>=J$dVVc-B2ZMoE9Dm*koFKs@(G1kKr{>~Y zC??Q0F@d&;30Rl_Tg(1dWI+j?Knj$=$RZnwEDd>J$OJmT3|IhDi+n1wndk-~0BYy#fNklLYaQ0?L#vQD2~p-NM){9ekCbg+P6#2#HTZGWh(T58v4&9&lp7T=YEwEn@(E zbJ>BW*U;~@<~-MeXLLL9HTV=71L&JEfW8?6sNf!$Ry?0dpMP^s4zENsql&&r`Vz-J zoe3QQ9|+Fa1Y&b^<=5q>LUci@H$Vt18*F#LE3gL^TF0&e zxCJucPVQ4+EA15~b&5P=QYk@+i(M$jOgJn&+t#$d31v*Ib*>E{$K>(?nEhegOvbE5 z!y0V>5%59z?SF$wo2qt^P{u|z{jJc{Kn`4Cc9x*QHl?~IQs51Er~2?~M6&`h@JV^s zd6MfVbv3aRjo5Y)ngBMKJf0{tCZe&i70?`H8Nc)Up~iMaIfaT`W6lOEv?p=fw;xbn zCz=&hrH~K2U{=DGOf-CjhV_Tkp61=B4S{G`&7-ToRUZD0@fTU&3_gG_TV}8kyWPom P00000NkvXXu0mjfS(m{- diff --git a/rep2/img/glyphish/icons2/92-testtube.png b/rep2/img/glyphish/icons2/92-testtube.png index 001e76c336f00676abc9fe621e53e76a1c3006cf..87335ac1c85d5dbd4271fac02fff189e02fdc389 100644 GIT binary patch delta 299 zcmV+`0o4AU0>%Q6B!3BTNLh0L01FZT01FZU(%pXi0002^Nklc9>Ip*Qc6lJxe=7!z|tdd11(sii6V$IZYJ565H{>)W`E`nS#WutW0^(h z4g89E0ZXYsRaITTSzi=|lgKM30C2$7-#;;B&1B45C<+Ko6n_vJ^8zGaqjyS$n1jR$ zjIaSRKW>3WI)QctvVpM}<}IWxpdA>Cq1^)w3ci0vs{#jqsbjtev@CQ~iu=MpDxhko zXrT$H+DW4V>CCxVNDJr~7tl#2lon6}Yan?um-x9_GNE)2l)x6)0Vm+%pQrSjKO_9T xpwYxD`c3Y6oFqUy`erVrlezeFH!$V}+yIRn9hL$KJd*$b002ovPDHLkV1fogdIA6d delta 258 zcmV+d0sa2Q0-gepB!A^eL_t(oh3%Lz3c^4TMc;}C$Pp}UZ7f4hl+sdrPbDdBY%Npf z7O`*z#e|snCt+Y8EDSqgWPdULw@?zW zG)chHxEG*&2VR^EYW9*QFu(<fKV*;jjN*4M7Q#)Bqpq`kUgjztxuz*b2P%WSYu0Yd~YhtccHdOys z0oVa|U=M8KUd{9HTi_<{M{BT-d|D-od-7fu6POkE?|^#&56b#RDDD8&?EnA(07*qo IM6N<$g7`XgLjV8( diff --git a/rep2/img/glyphish/icons2/93-thermometer.png b/rep2/img/glyphish/icons2/93-thermometer.png index 0f78d2ebe243e8c247fed5e93f5df8355a1c0ee8..627e333bbfd81c4faf75d53177a9d874159ab4d3 100644 GIT binary patch delta 417 zcmV;S0bc%y1G)o{BYyx1a7bBm000XT000XT0n*)m`~Uy}Y)M2xR9J=Wm@!VnFcgNr zASNbXpi;K3^awCBlsiOphAA7$mZ_cDxIsBV%Mr4&Md|^XiM0%VrUpVN%6qCR<&!Ks z`JZh6$#W7X$+C=7=Iq!L=*ziQM`c;Yhf`nyq;gyX_rOaC$ba)(Wn7CpFa?(ECy%t3 zqN!qGU?Ft{+)AmwX=;SAIlV)0e6P|149aR@+8F+>l89)NTCkQ(+6w~3@LO7+6FF_Vh%>rKnkp- z{obO7b88eotA8~OJOU0s(RqtL7tKkm3YrGOc5wx4TJ()*acpli4LGUaI%0z6I%59C z@Dz#&yRLCZOwiPJXqpDX2L2itwdfMxI#JLjYG$`00000 LNkvXXu0mjfY7Vzn delta 366 zcmV-!0g?W?1Be5VBYy!;Nkl;t z63PTw!KvNYfCq@Gv`V2PLiU`NYZN?|q>Wt4xCG>>wECX>n4 z?FPo^W9@;poM4J=9KvWcYOR!IAn_b~Si(2_#E(?=`<8mUneD&CP<)(C9OP8WHLxMX zf5$#n@C)x!`HnEQipMk8+t|fxe8Lxe#a8O;g)|ZmVPKpD?&A&C(agl0<5U=HM1C#d zV@unAmpAwzMt@_B_ie&*lejOY&595YJ@Mst((?t*@JE<971OLMjWE^E3C=aJmc%qT zPVbKY9e!_)WG)h2lK6_xcc?Qra!23jvF+XjFLj0zTJ%DaWd>}TLu1ASs wX55XVL=Fq}uS8+0fznh1rKtu=Qw@~n64Jj%(3Ex+ssI2007*qoM6N<$f|Ov`@&Et; delta 378 zcmV-=0fqkG1C#@hBYy!~NklH_+^0++r2A9M(}wYTtIUri$>R#D6vB@rGFpVI;XX@J-%g zVEqg1qJdLPha`mx++hZzm`f%Z#C~#rRV>y>#!Kq=)Hih(ae@_85n&r=xWeR539R7| z%Q(h^cn4ln0`G0cWk1h9m7HD`g%a_MnFs}N7%t*R$yosdJ;eJ zD(cC#di(I6nR7_y%%s1I;>%s+N*s4PXmT>9oPn#!^xScMA1cwT2 ziC?#K`AU4Y(MB?7CcS>h#sl)Qx=@50@oUrZhm3!8l=zkW`O|1AP&B1L(Uby3QwkK# Y2U6~G@)A~)+W-In07*qoM6N<$g7*)ueEw9Y8KaKx>{UoxS%z zcO{}vq+52IbMA6XXa-_IlxmBD3Ro+*Md^MGbT1%j5fjnD{C_PxjZ!QSsRD?IcILkn zV#t~lM8FKZa|S#qcM$-86A>_>g9%g>5F0F~mf=a!&H!4=RWq;@2n5bR>Op3Ly_wIM znQ@L_8}m5}vm~@n;)&TmJ2TGNq=+CTBq5bhiS1WifKb7chV6kcTo1mV#QptuZQ4Ue z1pvS#?q3c*n1aFxn29+#=%6qHKE#|HbWoyXfDVeM081^0$#(!-%T)!u3pipb%Z0GV z#xnr83Bzh^@4F_Sym#VR*qTY$ma{S_f5ViJhE@tCRt<807*qoM6N<$ Ef{cM|R{#J2 diff --git a/rep2/img/glyphish/icons2/96-book.png b/rep2/img/glyphish/icons2/96-book.png index 4f1856fa6fa28625202b24e8226064c7529d109b..16948c17afc8ba2b3e5fd0fc712691ee9d1e94ee 100644 GIT binary patch delta 439 zcmV;o0Z9Ir1JDDIBYyx1a7bBm000XT000XT0n*)m`~Uy}f=NU{R9J=W*gt3#K@@=T z->I#jg|UiJD+>z`Y{VvTU|}PvY;)mC!Ny`s1%)dFJFyV%2nd3OCm5nd;8I!URM5i4 z%0dvY30~u$V&+JpDC}$)7Wae4?85HO`(_@yylwS*J$2?l?tcVQslC9Vl$-ng{`~L= z2Dpq*7-2h(|D-62(m7PI1Lv@VC7j1qyv7>7;3-ydvVysOBWVYO#O~oS?&6{#@&UK; z4aaZ^*KiPHJd0y8sR9GM!hNBPzQ;Hd1HNJdPw)e0aUBowR*)H%O(0bOF5nHe@KUJ# zDNYDwa~z#`?SBmKaR<9Njps58%<0%m^fT54sWA=<$u6QD18$~Hx?iu+1>C?U-l4!x zVYMF#rBn%3?!ezzi2*GYE?n(DWQ{;>8iCw20=a1fa?=RprV+@^e=pD#x~XY;D&t$CLm7 delta 381 zcmV-@0fPR}1D6AkBYy#2Nkl;uCVJ3IS6 z^WU9eYAF1})N==jr4s1!9jkbPalFA!qOl(&g}^ap(7_=-VSgGQ&=kbl-TTR@iTjD$ z!fdZ$6Z^QtBqlJ7ulRyp{J|?McdyaJ3e+%*E&RfnFw;LveVTYF$kcI)&p5$zL8cWG zAXeaxc`RZMqe3M*xGwb>!W5oi1m{?a$&gZ@%u{S&0b}?fguTK|so%TU41*HrWd-ZP zC)2<-eoG+G=yvzPN3!GZvRVk?lTdABxv2zlQwijz639&@kef;%HqK`46C&dz_o b3T5XOA7GFlDNpT;00000NkvXXu0mjfj6JQL diff --git a/rep2/img/glyphish/icons2/97-puzzle.png b/rep2/img/glyphish/icons2/97-puzzle.png index 328d4ca0ae22f52c2d047005af7f47c53823bd76..53bf45dde844dec62eb279d37b01105258b894cb 100644 GIT binary patch delta 702 zcmV;v0zv(;1l0wQBYyx1a7bBm000XT000XT0n*)m`~Uy~he`s+$p~n_ZPT0BzDAAbGh;EuY6Q~v2Ucm0O z152e+t#fr@4r^%!kB*L}a{50a(1F)@i*xmM-bev$c!V+%rLZlOEtM5*^cMyyI+=^J>8CG5d_6eIUXa5wEl^@>1S?DrEKDSyT{Z7UuN z0tfv~o)C$+zkfv3Dxekj@Iy$CC>C*15D`Z=-UulcM+*+8C6G6TnuRK!rrfrRm$8U0V;UE0BU1Qb=0r+U~=qJI;A^TMY7hz0!2LMG21 z7{}Kt_I~u1zwg5}yh!111|`hONS=HGR&lk8y?~eajelQ4nzf|xH;jWhcp!fjdR4ya zfr2157iuY^BT^pBQlJk<^E_CKfCWsX7`K9(IEGXBk}&Rp4CQkjd8$ymP>J?SE}iRG z5=cjT!7M(h%=;oPU@{AttOD)}?LX~Gombh&mIab`V)g~0duKwH6e9uN2AU=UZLLW%-|4(E|p+%vA#dCKOL&DzZjolk8 ze-6d$GuSI9=_s;9U`?ndQG5`}DWSPlBQ%I-Dw|r(BYy$-Nkl?TF`QAS9fVuZfU8RSj@}7dYP6>1M?HJQ8x4Qr1Fp_-(8QI(-)LUr!8wP5y$$ z%5yZaIPBtE;D7qpz_kx}GooGtS8+!EVosz6N*#eNP6g`JuvK_|;i>pe)UW#!WSDvl zY>g3YT-C5QYk&+FON6*I4}g|(4})K34UoytI-^v_qaxrtoR0V!5_X?y0NO>6rhMp! zX$?CA&v%430eD$8z+Gw6CN?cXM~L+y{!##T5`y>iBY#qByU%m10GjleJ+`qG30W6k z3wI*5-WS1d;pc?GlK~Ed=WZ`#Y+H>%l=WegWZoDEcNTw&dwcR9rI4=l`O0p|4{XYZ zz8MJhAOcX6f8;C#z_8ZA$${{fO?On7DM0@;Ye@SrSr~u}Z)XrZL$=bRSXLeWwK#7r bJ-|O>EfPHy38gi!00000NkvXXu0mjfp+fnq diff --git a/rep2/img/glyphish/icons2/98-palette.png b/rep2/img/glyphish/icons2/98-palette.png index 45623531047836c997ada1c1111483f4eb908eb7..f2cfd475e2b5f1d393710250c3d9e4683e75a0b7 100644 GIT binary patch delta 575 zcmV-F0>J%}1lI(RBYyx1a7bBm000XT000XT0n*)m`~Uy~2}wjjR9J=W*guOCK^O+` zUqnO*2igdBXJe~^g;uAPm3n>xPe`9Tut;~NOCxfnAS5=5m52BN;s=mRea&5Ug;hiZ zv9g$5cU|*uXQQi-2ZouPM00f>-FZD zoWmwIa5X7K4Dk|!;)717Q;N?rJ+O{Gj*@yyM*cfK;!E=TR?c>_%A(5>@I)Z9C3v8S zp&;OWp?@83lW|d4hJXX?Che!Vj(a%F*{mh?nOxsjyu&BK8&RI9D&RmCCWm;Pv`_Fj zXLl2KlagW&FMrS$#Pm(}-b_>xkS7lpWjjq4@A>CN52W>xKz_R{iC6*8{GMIb@En(u zvRfQfKtdqr$=4#xdUDn~+sD1mdq2oacrtSg1f<#G3eF0#d#4JCDu@jsrr)xE76011(0_i}0m~9_8x3@)JRf4Tz&v|p z7hZ;dfk05MPBFqILEtsh1rm0@IDRf-1mqVPV`qkK*RL6BIN8hyk0Q842}s>M7It=A zVr+Xt-zZ|9pNPpq`$9MzFR*A|xZpnHp)7-?7>L~Y6fpvrejtne)822!0`byWr-)^z z(Xsglu{bLn?8@Z%Gxxv)le5td&I=zuQSm+rjnzMMHDe{9Zma~N z`NohStpZ!XMxXf;SKn!*Pz5-W_xr#t&;rWJnh$yXQpTo%HDC^rZWpcul0-gG_9;v9 zk+n2G^N3W6a3I&5NijaqvE`8D1S-J2^81CKNW<@Ze0}F^R$T~0uTmv_@&Jn2t&{M{&__&-vQ(l)5 zI_kRnCO1z_xZ)5I0`=MzV z3mo=|!R6TQFh@*}un+7aQm16_U3c`KD1`=DXT+fSB>x|fi2(f_F`$O00000NkvXXu0mjfc+2K{ diff --git a/rep2/img/glyphish/icons2/99-umbrella.png b/rep2/img/glyphish/icons2/99-umbrella.png index 4c645daa3544182fb5fd12d94ec4704efe4847d4..2907049230ed5f8c38090be365c01b4d42ef7a9d 100644 GIT binary patch delta 424 zcmV;Z0ayNr1Hl83BYyx1a7bBm000XT000XT0n*)m`~Uy}b4f%&R9J=Wn9*&6Fc5}6 zst!OmV1$m~PSA{yO1zi6F#>Ni6EH&Apcx?>G#i8s(g!;N0g3SWQiQ}OMG3w;`+m-` zF;SYPESaad69{GT0-k*XilUh68Uw%X_si6vJkP!I@fP4o{D0v7)u+$~sIYhb+-bkK zw#xaap;ZBcO)k0PlK@-yIRPKQA#`Ak3Y5SP_ml6FxR^3@@K6C2kOjnNt`9LG0!r+3 z2xUt^C8PojVRyby=KAzTDj=xrnte(HZ1DTTP9;IG#7YFb3t}GDw`3nMKm+V)*Kq@U z((b%h`^8;HH-GH?c;lOlL_iF@0mn|;0jRNSI~{vhz?l73{A45o_PxQc9GwjX`(z{n zzJxXn`v8f6MrhNp4_N$xW)(0us{lvLKO7&&&^nQMAKtalu7K&ZnNd$=v;>^ocZp5h z&>m7w18+sNrqB-f23{FH&+L@O7)7fBHTEq-cPDLJTOqA9#wgMHa(8AHFW?W%(??A> SO`8k=0000i>rc7m`0 zBXopjfhzrxiwKcZarPZnr93G@+{JhI*#@60pywa+RJwp%Rsny|0Wb2n@$4C#L4+&T zEARpAfi1T)Ux{rm@0ijXJS`9uIfIO`$ekVFs3?5Sv9y3)Mt|`myHWyjW`0i2N+j=j zYf^s`NrQrefbb{*Cx_xkPTG1>&Vf&pQjKC)$TBF{GMumn;8kob@W%Dzt;N5Q?>`Iv z`S=?6Qr4s1LN#!S*e~Ln`lmT!{@8d`Jt@7=0caxjMtm6f?Hq)$ M07*qoM6N<$g81pJUjP6A diff --git a/rep2/img/gp0-more.png b/rep2/img/gp0-more.png index 0e0f2ca5f7526f2e8fb716067de5527c7b764721..919198183014efcf12b88ceebd138787cddeb3a5 100644 GIT binary patch delta 85 zcmV-b0IL7B0&|cgPdZ6NK~#9!?bERd05AvyK=+^39g-?#x(FKX!0ti6FaiJo#>vce rraDu4{B8NGi~?U482QK$!8;-MT+OL75WQh?3y^w370~ zqErUQl>DSr1-Hzi)bjkI>|zDyU=y}YmlpuliGtKQ7o{eaWaj57gk*lZC*}l3 zDNcI3V!zR6?x~_t7moMWzBzs1%vbFa^|;?X_u3F9aqPIsa8~$GhwJ9;8}0zz#^CAd K=d#Wzp$PzfM{VB# diff --git a/rep2/img/gp1-up.png b/rep2/img/gp1-up.png index a918cde412628f38b400c538ecd27d887da9cb41..ed5c8d25b1212e7953f40901f8285e7b1359933f 100644 GIT binary patch delta 104 zcmey#)XF$PCDF&z#WAGf*4y(3IT;j04hMXn|MmTX3Q-r^n+|ec?rl-?oHS+Ss$X*$ z?awDGUtoM)8N*_gP%bA}XeBS-$hX5*Ub>O5!d70qksoLlZ>&?h$9chT$_zl@>FVdQ I&MBb@01$O39RL6T delta 350 zcmZo={K+&yrJkkO$uool2x>S|Iv5xjI14-?iy0WWg+Q3`(%rg0KtY)j*NBqf{Irtt z#G+IN$CUh}R0X%pqSW&IqU>S?=U@}IO_vt{)ro@CITxiSmSpDVDTHL^rZN~B=vn9) z8d@lQjsYsTRU&?!s!LvY?Ipa9PEyISgC5+Q6jyzJ>?sbQe=i^VV2RbGE z8YN7g6IdD)D*8Px{=8b#G$Wen2S3Aou7s+5J4YW~hF|&(`^paN0Ln;Yv+6MH;&Bka zAHJ4Ppw3j^B&=H`viB^H%gT*WOHO3vq%qX!Hk{o!v(dsP%=?WK^U2%u_~#be&a1xk m&O@)bzVk0X)ETqbZ5U$pcDfdxnEnRnKL$@%KbLh*2~7a0RDlct diff --git a/rep2/img/gp2-down.png b/rep2/img/gp2-down.png index fed33c282bcf0e5a95eab586dea38c7e1ad2953b..bcc85d365c321d50e8ff48cbe158f862a2637f7e 100644 GIT binary patch delta 106 zcmeyz)Xq3TCE3r@#WAGf*4rxwIT;jqj$U|YpIv@oHM^rm$Fe7l-{k|8RXl}a()vyr zK1gNxC$;cC(?7$-^-IKc00K`} KKbLh*2~7aMXDws^ delta 355 zcmZo?{KqswrJkkO$uool2x>S|Iv5xjI14-?iy0WWg+Q3`(%rg0KtY)j*NBqf{Irtt z#G+IN$CUh}R0X%pqSW&IqU>S?=U@}IO_vt{)ro@CITxiSmSpDVDTHL^rZN~B=vn9) z8d@lQjsYsT?&;zf64Cm0`fbi;2Lac9#rpr#9+V|%ZcE^Nc_c{Zs8GrC6;$`}4&nab!>W($hRI(pYvee|o~*E5EgCo!MrNnyXs7Zk6_ngL^&hmK4`v1c06ydH z>pa=vashF;R6sU<{9 delta 303 zcmeBYJjFCYrJkkO$uool2x>S|Iv5xjI14-?iy0WWg+Q3`(%rg0KtY)j*NBqf{Irtt z#G+IN$CUh}R0X%pqSW&IqU>S?=U@}IO_vt{)ro@CITxiSmSpDVDTHL^rZN~B=vn9) z8d@lQjsYrI?CIhd64Cm0+CkoC0|A!fne`1q9_pH{K`}xllY)W{Jx%58`Ppzdb*Xgb z{xo;1V!sB(GlzE{2z5FzTi}Bl%O1|g$vOu%Ur#JczIWjC8H3Gn_xCOR!9K&Q(6o_< zr?ir_QBorM=>OORET}h#P~M=W_SkRhMSogz77J+ Vhe$254j=#k002ovPDHLkV1l9_Fd_f| delta 293 zcmbQhcz|hwNrMq>1fPyk5t`Q}{`DrEP ziAAXljw$&`sS0kHMXBZaMcKs)&cP;Zn=UT^suKmNb1q6vEXmBzQwYh-O=U1N(6i7p zG_+9q90OD^)6>N(WU%St?v=X$DoDc{6}wnP~|V; zt(|ax2{TV()qD0msw{gr8S|YE%ogzQIS{up-0<7BGd#x3Ga47Woo`yDKA}_RfTs2Y z6}E(_q9bP0l+XkKtO09i diff --git a/rep2/img/gp5-info.png b/rep2/img/gp5-info.png index a4e5253596e50b3a8bb0ae0b00bfffcec9e1c258..8fe68102d7f011aa4732ec111f42d6790aa1751a 100644 GIT binary patch delta 384 zcmV-`0e}AR1DXSnBYy#5Nkl*| zklq0@z!fk6*aQRJzX0|k5k|$Jr@OAZ%}5JD>tYdkc&1+je1G&T@VE*Cz2__m(dGG* zihPnJW1i=tNZgG^0&`xKHbqg4u#_Pr>9jKZ zz`p)N;Vu?5%?*7b;7^Y#VnGlvS^m!u=@t;n2!&zDT-SY)_dM?#0kLiYk*sj>%DrEf zF`8dmjZTyg$%h%Iwy9)4S1WBsO~dbVG7wVRUJ4ZXi@?ZDjy4FfKSQF)=tI^IQM`0338hSaefwW^{L9a%BKPWN%_+ zAVz6&Wp{6KYjYq&Q#1y$)1UwV0ZBzKoZ6bwQ4{RdrZB(|D-RucYz&>`hCfKX4Ie{+1**D;2=6z>P zpce^V!Gb^+Nubr{LryNFDUQy22(-ZG z)KCCPe$={&Z-95;R-aFm>;QFkV0SV1LoGjQ5kQ@e4WGX!Ksbp9mGd2+Ba)LiCkO65 zV|T!{_MiC)sg${bNZkS7MfRaGgZ4u?;4=J3Ruq0OB~Zrkf$-}0nLcDG3-iTX%lRk` z!MvCg{y{nY9ZoFtgJ#+s=fZ3*tU4WYC2ck%i=|@yD`Ab5fHf9R;0sm;cfuuVv}^zX N002ovPDHLkV1h_mzd`^2 From 844c91559a035faf4b39b21e835ac6e5c60c55fb Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sun, 15 Mar 2015 01:20:59 +0900 Subject: [PATCH 061/339] =?UTF-8?q?=E6=9C=AC=E5=AE=B6=E3=81=8B=E3=82=89be?= =?UTF-8?q?=E3=81=AE=E3=83=AD=E3=82=B0=E3=82=A4=E3=83=B3=E9=83=A8=E5=88=86?= =?UTF-8?q?=E3=82=92=E7=A7=BB=E6=A4=8D=E3=81=97=E3=81=9F=20+live=E3=81=AEl?= =?UTF-8?q?ive=5Fpost.php=E3=81=A8post.php=E3=82=92=E5=90=88=E4=BD=93?= =?UTF-8?q?=E3=81=95=E3=81=9B=E3=81=9F=20BE2.0=E3=81=AB=E5=AF=BE=E5=BF=9C?= =?UTF-8?q?=E3=81=95=E3=81=9B=E3=81=9F=20http://anago.2ch.net/test/read.cg?= =?UTF-8?q?i/software/1425420543/507=20=E6=97=A2=E5=8F=96=E5=BE=97?= =?UTF-8?q?=E3=82=B9=E3=83=AC=E3=81=A7=E3=82=82=E3=82=B9=E3=83=AC=E4=B8=80?= =?UTF-8?q?=E8=A6=A7=E3=81=AB=E5=85=83=E3=82=B9=E3=83=AC=E3=81=AE=E3=83=AA?= =?UTF-8?q?=E3=83=B3=E3=82=AF=E3=82=92=E8=A1=A8=E7=A4=BA=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F=20http://anago.2c?= =?UTF-8?q?h.net/test/read.cgi/software/1425420543/527=20proxy=E9=80=9A?= =?UTF-8?q?=E3=81=99=E3=81=A8api=E8=AA=8D=E8=A8=BC=E3=81=A7=E3=81=A7?= =?UTF-8?q?=E3=81=8D=E3=81=AA=E3=81=84=E4=BB=B6=E3=82=92=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=20http://anago.2ch.net/test/read.cgi/software/1425420543/493?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- conf/conf_user_def.inc.php | 14 +- lib/P2Util.php | 126 ++++ lib/ThreadRead.php | 9 +- lib/auth2chapi.inc.php | 1 + lib/live/live_post_form.inc.php | 3 +- lib/post_form_options.inc.php | 2 +- lib/sb_print.inc.php | 2 +- rep2/edit_conf_user.php | 11 +- rep2/live_post.php | 1012 ------------------------------- rep2/post.php | 33 +- rep2/setting.php | 8 +- 12 files changed, 186 insertions(+), 1037 deletions(-) delete mode 100755 rep2/live_post.php diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 0695b9592..45cea0766 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150307.1230', // rep2�̃o�[�W���� + 'p2version' => '150315.0117', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index ca616871f..191767882 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -7,12 +7,18 @@ // {{{ be.2ch.net�A�J�E���g -// be.2ch.net�̔F�؃R�[�h(�p�X���[�h�ł͂Ȃ�) -$conf_user_def['be_2ch_code'] = ""; // ("") +// be.2ch.net�̔F�؃p�X���[�h(�F�؃R�[�h�͎g���Ȃ��Ȃ�܂���) +$conf_user_def['be_2ch_password'] = ""; // ("") // be.2ch.net�̓o�^���[���A�h���X $conf_user_def['be_2ch_mail'] = ""; // ("") +// be.2ch.net��DMDM(�蓮�ݒ肷��ꍇ�̂ݓ���) +$conf_user_def['be_2ch_DMDM'] = ""; // ("") + +// be.2ch.net��MDMD(�蓮�ݒ肷��ꍇ�̂ݓ���) +$conf_user_def['be_2ch_MDMD'] = ""; // ("") + // }}} // {{{ p2.2ch.net�A�J�E���g @@ -59,9 +65,9 @@ // �X���b�h�ꗗ�̎����X�V�Ԋu�B�i���w��B0�Ȃ玩���X�V���Ȃ��B�j $conf_user_def['refresh_time'] = 0; // (0) -// �X���b�h�ꗗ�Ŗ��擾�X���ɑ΂��Č��X���ւ̃����N�i�E�j��\�� (����:1, ���Ȃ�:0) +// �X���b�h�ꗗ�Ŗ��擾�X���ɑ΂��Č��X���ւ̃����N�i�E�j��\�� (����:1, ���Ȃ�:0, ���擾�X���ł�����:2) $conf_user_def['sb_show_motothre'] = 1; // (1) -$conf_user_rad['sb_show_motothre'] = array('1' => '����', '0' => '���Ȃ�'); +$conf_user_rad['sb_show_motothre'] = array('1' => '����', '0' => '���Ȃ�', '2' => '���擾�X���ł�'); // PC�{�����A�X���b�h�ꗗ�i�•\���j�� ����ޭ�>>1 ��\�� (����:1, ���Ȃ�:0, �j���[�X�n�̂�:2) $conf_user_def['sb_show_one'] = 0; // (0) diff --git a/lib/P2Util.php b/lib/P2Util.php index 4cf6a8370..d74543d0d 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -2097,6 +2097,132 @@ static public function rawurlencodeCallback(array $m) return rawurlencode($m[0]); } + // }}} + // {{{ + /** + * be���g�p�”\�Ȑݒ肩���ׂ� + * @access public + * @return boolean + */ + function isEnableBe2ch() + { + global $_conf; + + if ( + strlen($_conf['be_2ch_password']) && $_conf['be_2ch_mail'] + || strlen($_conf['be_2ch_DMDM']) && $_conf['be_2ch_MDMD'] + //|| isset($_COOKIE['DMDM']) && isset($_COOKIE['MDMD']) + ) { + return true; + } + return false; + } + + // }}} + // {{{ + /** + * ���[�U�[�ݒ肵���A�J�E���g�ŁAbe.2ch.net�Ƀ��O�C������DMDM, MDMD���擾���� + * �i�F�؃R�[�h��urlencode���ꂽ�܂܂̏�ԁj + * + * @access public + * @return array|false|null �F�؃R�[�h�z��|�F�؂ł��Ȃ�����|���ݒ肾���� + */ + function getBe2chCodeWithUserConf() + { + global $_conf; + + if ($_conf['be_2ch_mail'] && strlen($_conf['be_2ch_password'])) { + $r = P2Util::getBe2chCodeByMailPass($_conf['be_2ch_mail'], $_conf['be_2ch_password']); + if (is_array($r)) { + return $r; + } + return false; + } + return null; + } + + // }}} + // {{{ + /** + * be.2ch.net�Ƀ��O�C������DMDM, MDMD���擾���� + * �i�F�؃R�[�h��urlencode���ꂽ�܂܂̏�ԁj + * + * @access private + * @return array|string ����|�G���[���b�Z�[�W + */ + function getBe2chCodeByMailPass($mail, $pass) + { + global $_conf; + + //require_once 'HTTP/Request.php'; + + $params = array('timeout' => $_conf['fsockopen_timeout']); + + if (!empty($GLOBALS['_conf']['proxy_use'])) { + $params['proxy_host'] = $GLOBALS['_conf']['proxy_host']; + $params['proxy_port'] = $GLOBALS['_conf']['proxy_port']; + } + + $req = new HTTP_Request('http://be.2ch.net/index.php', $params); + + $req->setMethod(HTTP_REQUEST_METHOD_POST); + $req->addPostData('mail', $mail); + $req->addPostData('pass', $pass); + $req->addPostData('login', '���O�C������'); + + //var_dump($req); + // If-Modified-Since => gmdate('D, d M Y H:i:s', time()) . ' GMT'; + + /* + if ($headers) { + foreach ($headers as $k => $v) { + $req->addHeader($k, $v); + } + } + */ + $response = $req->sendRequest(); // $saveBody = true +//var_dump($req->getResponseHeader()); +//var_dump($req->getResponseCookies()); +//var_dump($req->getResponseCode()); +//var_dump(mb_convert_encoding($req->getResponseBody(), 'SJIS-win', 'eucJP-win')); + + if (PEAR::isError($response)) { + $error_msg = $response->getMessage(); + + } else { + $code = $req->getResponseCode(); + // �����Ƃ݂Ȃ��R�[�h + if ($code == 302) { + //return $req->getResponseBody(); + if ($cookies = $req->getResponseCookies()) { // urlencode���ꂽ��� + $r = array(); + foreach ($cookies as $cookie) { + if (in_array($cookie['name'], array('DMDM', 'MDMD'))) { + $r[$cookie['name']] = $cookie['value']; + } + } + if (!empty($r['DMDM']) && !empty($r['MDMD'])) { + return $r; + } + } + + //$error_msg = mb_convert_encoding($req->getResponseBody(), 'SJIS-win', 'eucJP-win'); + + /* + // �X�V���Ȃ����null��Ԃ� + } elseif ($code == 304) { + // 304�̎��́A$req->getResponseBody() �͋󕶎�""�ƂȂ� + return null; + */ + } else { + //var_dump($req->getResponseHeader()); + $error_msg = $code; + } + } + + return false; // $error_msg + } + // }}} // {{{ debug() /* diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index e9a741d12..dbdff8349 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -207,7 +207,7 @@ protected function _downloadDat2chAPI($sid,$from_bytes) 'appkey' => $AppKey, ); - $http = array( + $options['http'] = array( 'method' => 'POST', 'header' => $headers, 'ignore_errors'=> true, @@ -216,12 +216,11 @@ protected function _downloadDat2chAPI($sid,$from_bytes) // �v���L�V if ($_conf['proxy_use']) { - $http += array('proxy' => 'tcp://'.$_conf['proxy_host'].":".$_conf['proxy_port']); - $http += array('request_fulluri' => true); + $options['http'] += array('proxy' => 'tcp://'.$_conf['proxy_host'].":".$_conf['proxy_port']); + $options['http'] += array('request_fulluri' => true); + $options['ssl'] = array('SNI_enabled' => false); } - $options = array('http' => $http); - // WEB�T�[�o�֐ڑ� $fp = @fopen($url, 'r', false, stream_context_create($options)); if (!$fp) { diff --git a/lib/auth2chapi.inc.php b/lib/auth2chapi.inc.php index 8739ff377..32390cf1c 100644 --- a/lib/auth2chapi.inc.php +++ b/lib/auth2chapi.inc.php @@ -55,6 +55,7 @@ function authenticate_2chapi() if ($_conf['proxy_use']) { $options['http'] += array('proxy' => 'tcp://'.$_conf['proxy_host'].":".$_conf['proxy_port']); $options['http'] += array('request_fulluri' => true); + $options['ssl'] = array('SNI_enabled' => false); } $response = ''; diff --git a/lib/live/live_post_form.inc.php b/lib/live/live_post_form.inc.php index 81b762e1d..5d9b579e2 100755 --- a/lib/live/live_post_form.inc.php +++ b/lib/live/live_post_form.inc.php @@ -118,7 +118,7 @@ $htm['post_form'] = << -
        +  {$ttitle_pfi}  {$htm['maru_post']} @@ -156,6 +156,7 @@ + {$newthread_hidden_ht}{$readnew_hidden_ht} {$_conf['detect_hint_input_ht']}
        diff --git a/lib/post_form_options.inc.php b/lib/post_form_options.inc.php index b8b66e76f..1ee73342f 100644 --- a/lib/post_form_options.inc.php +++ b/lib/post_form_options.inc.php @@ -174,7 +174,7 @@ function setHiddenValue(button) { } // Be -if (P2Util::isHost2chs($host) and $_conf['be_2ch_code'] && $_conf['be_2ch_mail']) { +if (P2Util::isHost2chs($host) and P2Util::isEnableBe2ch()) { $htm['beres'] = '' . ''; } diff --git a/lib/sb_print.inc.php b/lib/sb_print.inc.php index c6f93b4d2..137a06bd0 100644 --- a/lib/sb_print.inc.php +++ b/lib/sb_print.inc.php @@ -347,7 +347,7 @@ function sb_print($aThreadList) // ���X�� $moto_thre_ht = ''; if ($_conf['sb_show_motothre']) { - if (!$aThread->isKitoku()) { + if ($_conf['sb_show_motothre'] == 2 || !$aThread->isKitoku()) { $moto_thre_ht = '�E'; diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index 48a4e6d64..4b7512d1b 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -227,8 +227,12 @@ $keep_old = true; } else { $conflist = array( - array('be_2ch_code', 'be.2ch.net�̔F�؃R�[�h(�p�X���[�h�ł͂Ȃ�)', P2_EDIT_CONF_USER_LONGTEXT), + 'be', array('be_2ch_mail', 'be.2ch.net�̓o�^���[���A�h���X', P2_EDIT_CONF_USER_LONGTEXT), + array('be_2ch_password', 'be.2ch.net�̃p�X���[�h(�F�؃R�[�h�͎g���Ȃ��Ȃ�܂���)', P2_EDIT_CONF_USER_LONGTEXT), + array('be_2ch_DMDM', 'be.2ch.net��DMDM(�蓮�ݒ肷��ꍇ�̂ݓ���)', P2_EDIT_CONF_USER_LONGTEXT), + array('be_2ch_MDMD', 'be.2ch.net��MDMD(�蓮�ݒ肷��ꍇ�̂ݓ���)', P2_EDIT_CONF_USER_LONGTEXT), + '����p2', array('p2_2ch_host', '����p2 (p2.2ch.net) �Ŋ��蓖�Ă��Ă���T�[�o�[', P2_EDIT_CONF_USER_LONGTEXT), array('p2_2ch_mail', '����p2�̓o�^���[���A�h���X', P2_EDIT_CONF_USER_LONGTEXT), array('p2_2ch_pass', '����p2�̃��O�C���p�X���[�h', P2_EDIT_CONF_USER_LONGTEXT | P2_EDIT_CONF_USER_PASSWORD), @@ -374,10 +378,9 @@ array('2chapi_use','2ch API ���g�p����'), array('2chapi_rounin','2ch API �F�؎��Ɂ�(�Q�l)ID�𑗐M����(�l���@�\)'), array('2chapi_interval','2ch API �F�؂���Ԋu(�P��:����)'), - //'API �L�[', 'API�F�؏��(�S�ĕK�{)', - array('2chapi_appkey','AppKey'), - array('2chapi_hmkey','HMkey'), + array('2chapi_appkey','AppKey', P2_EDIT_CONF_USER_LONGTEXT), + array('2chapi_hmkey','HMkey', P2_EDIT_CONF_USER_LONGTEXT), array('2chapi_appname','AppName API�ɑ��M����A�v���P�[�V������ ��:Hoge/1.00'), '�f�o�b�O�p', array('2chapi_debug_print','�f�o�b�O�p�̏����o�͂���'), diff --git a/rep2/live_post.php b/rep2/live_post.php deleted file mode 100755 index a12aa8947..000000000 --- a/rep2/live_post.php +++ /dev/null @@ -1,1012 +0,0 @@ -authorize(); // ���[�U�F�� - -if (!empty($_conf['disable_res'])) { - p2die('�������݋@�\�͖����ł��B'); -} - -// �����G���[ -if (empty($_POST['host'])) { - p2die('�����̎w�肪�ςł�'); -} - -$el = error_reporting(E_ALL & ~E_NOTICE); -$salt = 'post' . $_POST['host'] . $_POST['bbs'] . $_POST['key']; -error_reporting($el); - -if (!isset($_POST['csrfid']) or $_POST['csrfid'] != P2Util::getCsrfId($salt)) { - p2die('�s���ȃ|�X�g�ł�'); -} - -if ($_conf['expack.aas.enabled'] && !empty($_POST['PREVIEW_AAS'])) { - include P2_BASE_DIR . '/aas.php'; - exit; -} - -//================================================================ -// �ϐ� -//================================================================ -$newtime = date('gis'); - -$post_param_keys = array('bbs', 'key', 'time', 'FROM', 'mail', 'MESSAGE', 'subject', 'submit'); -$post_internal_keys = array('host', 'sub', 'popup', 'rescount', 'ttitle_en'); -$post_optional_keys = array('newthread', 'beres', 'p2res', 'from_read_new', 'maru', 'csrfid'); -$post_p2_flag_keys = array('b', 'p2_post_confirm_cookie'); - -foreach ($post_param_keys as $pk) { - ${$pk} = (isset($_POST[$pk])) ? $_POST[$pk] : ''; -} -foreach ($post_internal_keys as $pk) { - ${$pk} = (isset($_POST[$pk])) ? $_POST[$pk] : ''; -} - -if (!isset($ttitle)) { - if ($ttitle_en) { - $ttitle = UrlSafeBase64::decode($ttitle_en); - } elseif ($subject) { - $ttitle = $subject; - } else { - $ttitle = ''; - } -} - -//$MESSAGE = rtrim($MESSAGE); - -// {{{ �\�[�X�R�[�h�����ꂢ�ɍČ������悤�ɕϊ� - -if (!empty($_POST['fix_source'])) { - // �^�u���X�y�[�X�� - $MESSAGE = tab2space($MESSAGE); - // ���ꕶ�������̎Q�Ƃ� - $MESSAGE = p2h($MESSAGE); - // ����URL�����N��� - $MESSAGE = str_replace('tp://', 'tp://', $MESSAGE); - // �s���̃X�y�[�X�����̎Q�Ƃ� - $MESSAGE = preg_replace('/^ /m', ' ', $MESSAGE); - // ��‘����X�y�[�X�̈�–ڂ����̎Q�Ƃ� - $MESSAGE = preg_replace('/(? $v) { - if (!array_key_exists($k, $post) && !in_array($k, $post_ignore_keys)) { - $post[$k] = $v; - } - } -} - -if (!empty($_POST['newthread'])) { - $ptitle = 'rep2 - �V�K�X���b�h�쐬'; -} else { - $ptitle = 'rep2 - ���X��������'; -} - -$post_backup_key = PostDataStore::getKeyForBackup($host, $bbs, $key, !empty($_REQUEST['newthread'])); -$post_config_key = PostDataStore::getKeyForConfig($host, $bbs); - -// �ݒ��ۑ� -PostDataStore::set($post_config_key, array( - 'beres' => !empty($_REQUEST['beres']), - 'p2res' => !empty($_REQUEST['p2res']), -)); - -//================================================================ -// �������ݏ��� -//================================================================ - -// �������݂��ꎞ�I�ɕۑ� -PostDataStore::set($post_backup_key, $post_cache); - -// �|�X�g���s -if (!empty($_POST['p2res']) && empty($_POST['newthread'])) { - // ����p2�ŏ������� - $posted = postIt2($host, $bbs, $key, $FROM, $mail, $MESSAGE); -} else { - // cookie �ǂݍ��� - $cookie_key = $_login->user_u . '/' . P2Util::normalizeHostName(P2Util::isHostBbsPink($host) ? 'www.bbspink.com' : P2Util::isHost2chs($host) ? 'www.2ch.net' : $host); // �E�@���Ή� - if ($p2cookies = CookieDataStore::get($cookie_key)) { - if (is_array($p2cookies)) { - if (array_key_exists('expires', $p2cookies)) { - // �����؂�Ȃ�j�� - if (time() > strtotime($p2cookies['expires'])) { - CookieDataStore::delete($cookie_key); - $p2cookies = null; - } - } - } else { - CookieDataStore::delete($cookie_key); - $p2cookies = null; - } - } else { - $p2cookies = null; - } - - // ���ڏ������� - $posted = postIt($host, $bbs, $key, $post); - - // cookie �ۑ� - if ($p2cookies) { - CookieDataStore::set($cookie_key, $p2cookies); - } -} - -// ���e���s�L�^���폜 -if ($posted) { - PostDataStore::delete($post_backup_key); -} - -//============================================= -// �X�����Đ����Ȃ�Asubject����key���擾 -//============================================= -if (!empty($_POST['newthread']) && $posted) { - sleep(1); - $key = getKeyInSubject(); -} - -//============================================= -// key.idx �ۑ� -//============================================= -// <> ���O���B�B -$tag_rec['FROM'] = str_replace('<>', '', $FROM); -$tag_rec['mail'] = str_replace('<>', '', $mail); - -// ���O�ƃ��[���A�󔒎��� P2NULL ���L�^ -$tag_rec_n['FROM'] = ($tag_rec['FROM'] == '') ? 'P2NULL' : $tag_rec['FROM']; -$tag_rec_n['mail'] = ($tag_rec['mail'] == '') ? 'P2NULL' : $tag_rec['mail']; - -if ($host && $bbs && $key) { - $keyidx = P2Util::idxDirOfHostBbs($host, $bbs) . $key . '.idx'; - - // �ǂݍ��� - if ($keylines = FileCtl::file_read_lines($keyidx, FILE_IGNORE_NEW_LINES)) { - $akeyline = explode('<>', $keylines[0]); - } - $sar = array($akeyline[0], $akeyline[1], $akeyline[2], $akeyline[3], $akeyline[4], - $akeyline[5], $akeyline[6], $tag_rec_n['FROM'], $tag_rec_n['mail'], $akeyline[9], - $akeyline[10], $akeyline[11], $akeyline[12]); - P2Util::recKeyIdx($keyidx, $sar); // key.idx�ɋL�^ -} - -//============================================= -// �������ݗ��� -//============================================= -if (empty($posted)) { - exit; -} - -if ($host && $bbs && $key) { - - $lock = new P2Lock($_conf['res_hist_idx'], false); - - FileCtl::make_datafile($_conf['res_hist_idx']); // �Ȃ���ΐ��� - - $lines = FileCtl::file_read_lines($_conf['res_hist_idx'], FILE_IGNORE_NEW_LINES); - - $neolines = array(); - - // {{{ �ŏ��ɏd���v�f���폜���Ă��� - - if (is_array($lines)) { - foreach ($lines as $line) { - $lar = explode('<>', $line); - // �d�����, key�̂Ȃ����͕̂s���f�[�^ - if (!$lar[1] || $lar[1] == $key) { - continue; - } - $neolines[] = $line; - } - } - - // }}} - - // �V�K�f�[�^�lj� - $newdata = "{$ttitle}<>{$key}<><><><><><>{$tag_rec['FROM']}<>{$tag_rec['mail']}<><>{$host}<>{$bbs}"; - array_unshift($neolines, $newdata); - while (sizeof($neolines) > $_conf['res_hist_rec_num']) { - array_pop($neolines); - } - - // {{{ �������� - - if ($neolines) { - $cont = ''; - foreach ($neolines as $l) { - $cont .= $l . "\n"; - } - - if (FileCtl::file_write_contents($_conf['res_hist_idx'], $cont) === false) { - p2die('cannot write file.'); - } - } - - // }}} - - $lock->free(); -} - -//============================================= -// �������݃��O�L�^ -//============================================= -if ($_conf['res_write_rec']) { - - // �f�[�^PHP�`���ip2_res_hist.dat.php, �^�u��؂�j�̏������ݗ������Adat�`���ip2_res_hist.dat, <>��؂�j�ɕϊ����� - P2Util::transResHistLogPhpToDat(); - - $date_and_id = date('y/m/d H:i'); - $message = htmlspecialchars($MESSAGE, ENT_NOQUOTES, 'Shift_JIS'); - $message = preg_replace('/\\r\\n|\\r|\\n/', '
        ', $message); - - FileCtl::make_datafile($_conf['res_hist_dat']); // �Ȃ���ΐ��� - - $resnum = ''; - if (!empty($_POST['newthread'])) { - $resnum = 1; - } else { - if ($rescount) { - $resnum = $rescount + 1; - } - } - - // �V�K�f�[�^ - $newdata = "{$tag_rec['FROM']}<>{$tag_rec['mail']}<>{$date_and_id}<>{$message}<>{$ttitle}<>{$host}<>{$bbs}<>{$key}<>{$resnum}"; - - // �܂��^�u��S�ĊO���āi2ch�̏������݂ł̓^�u�͍폜����� 2004/12/13�j - $newdata = str_replace("\t", '', $newdata); - // <>���^�u�ɕϊ����� - //$newdata = str_replace('<>', "\t", $newdata); - - $cont = $newdata."\n"; - - // �������ݏ��� - if (FileCtl::file_write_contents($_conf['res_hist_dat'], $cont, FILE_APPEND) === false) { - trigger_error('rep2 error: �������݃��O�̕ۑ��Ɏ��s���܂���', E_USER_WARNING); - // ����͎��ۂ͕\������Ȃ�����ǂ� - //P2Util::pushInfoHtml('

        rep2 error: �������݃��O�̕ۑ��Ɏ��s���܂���

        '); - } -} - -//=========================================================== -// �֐� -//=========================================================== -// {{{ postIt() - -/** - * ���X���������� - * - * @return boolean �������ݐ����Ȃ� true�A���s�Ȃ� false - */ -function postIt($host, $bbs, $key, $post) -{ - global $_conf, $post_result, $post_error2ch, $p2cookies, $host, $bbs, $key, $popup, $rescount, $ttitle_en; - global $bbs_cgi; - - $method = 'POST'; - $bbs_cgi_url = 'http://' . $host . $bbs_cgi; - - $URL = parse_url($bbs_cgi_url); // URL���� - if (isset($URL['query'])) { // �N�G���[ - $URL['query'] = '?' . $URL['query']; - } else { - $URL['query'] = ''; - } - - // �v���L�V - if ($_conf['proxy_use']) { - $send_host = $_conf['proxy_host']; - $send_port = $_conf['proxy_port']; - $send_path = $bbs_cgi_url; - } else { - $send_host = $URL['host']; - $send_port = isset($URL['port']) ? $URL['port'] : 80; - $send_path = $URL['path'] . $URL['query']; - } - - if (!$send_port) { $send_port = 80; } // �f�t�H���g��80 - - $request = "{$method} {$send_path} HTTP/1.0\r\n"; - $request .= "Host: {$URL['host']}\r\n"; - - // API���g�p����ݒ�ő��肪2ch��������API��UA�𑗂� - if(P2Util::isHost2chs($URL['host']) && $_conf['2chapi_use'] == 1) { - if($_conf['2chapi_appname'] != "") { - $request .= "User-Agent: Monazilla/1.00 ({$_conf['2chapi_appname']})\r\n"; - } else { - showPostMsg(false, "p2 Error: 2ch�ƒʐM���邽�߂ɕK�v�ȏ�񂪐ݒ肳��Ă��܂���B

        ", false); - return false; - } - } else { - $request .= "User-Agent: Monazilla/1.00 ({$_conf['p2ua']})\r\n"; - } - - $request .= "Referer: http://{$host}/{$bbs}/{$key}/\r\n"; - - // �N�b�L�[ - $cookies_to_send = ''; - if ($p2cookies) { - foreach ($p2cookies as $cname => $cvalue) { - if ($cname != 'expires') { - $cookies_to_send .= " {$cname}={$cvalue};"; - } - } - } - - // be.2ch.net �F�؃N�b�L�[ - if (P2Util::isHostBe2chNet($host) || !empty($_REQUEST['beres'])) { - $cookies_to_send .= ' MDMD='.$_conf['be_2ch_code'].';'; // be.2ch.net�̔F�؃R�[�h(�p�X���[�h�ł͂Ȃ�) - $cookies_to_send .= ' DMDM='.$_conf['be_2ch_mail'].';'; // be.2ch.net�̓o�^���[���A�h���X - } - - if (!$cookies_to_send) { $cookies_to_send = ' ;'; } - $request .= 'Cookie:'.$cookies_to_send."\r\n"; - //$request .= 'Cookie: PON='.$SPID.'; NAME='.$FROM.'; MAIL='.$mail."\r\n"; - - $request .= "Connection: Close\r\n"; - - // {{{ POST�̎��̓w�b�_��lj����Ė�����URL�G���R�[�h�����f�[�^��Y�t - - if (strcasecmp($method, 'POST') == 0) { - $post_enc = array(); - while (list($name, $value) = each($post)) { - - // ������� or be.2ch.net�Ȃ�AEUC�ɕϊ� - if (P2Util::isHostJbbsShitaraba($host) || P2Util::isHostBe2chNet($host)) { - $value = mb_convert_encoding($value, 'CP51932', 'CP932'); - } - - $post_enc[] = $name . '=' . rawurlencode($value); - } - $postdata = implode("&", $post_enc); - $request .= "Content-Type: application/x-www-form-urlencoded\r\n"; - $request .= "Content-Length: ".strlen($postdata)."\r\n"; - $request .= "\r\n"; - $request .= $postdata; - - } else { - $request .= "\r\n"; - } - // }}} - - // WEB�T�[�o�֐ڑ� - $fp = fsockopen($send_host, $send_port, $errno, $errstr, $_conf['http_conn_timeout']); - if (!$fp) { - $errstr = p2h($errstr); - showPostMsg(false, "�T�[�o�ڑ��G���[: $errstr ($errno)
        p2 Error: �ƒT�[�o�ւ̐ڑ��Ɏ��s���܂���", false); - return false; - } - stream_set_timeout($fp, $_conf['http_read_timeout'], 0); - - //echo '

        $request

        ' . $request . "

        "; //for debug - fputs($fp, $request); - - $start_here = false; - $post_seikou = false; - - while (!p2_stream_eof($fp, $timed_out)) { - - if ($start_here) { - $wr = ''; - while (!p2_stream_eof($fp, $timed_out)) { - $wr .= fread($fp, 164000); - } - $response = $wr; - break; - - } else { - $l = fgets($fp, 164000); - //echo $l .'
        '; // for debug - // �N�b�L�[�L�^ - if (preg_match('/Set-Cookie: (.+?)\\r\\n/', $l, $matches)) { - //echo '

        ' . $matches[0] . '

        '; // - $cgroups = explode(';', $matches[1]); - if ($cgroups) { - foreach ($cgroups as $v) { - if (preg_match('/(.+)=(.*)/', $v, $m)) { - $k = ltrim($m[1]); - if ($k != 'path') { - if (!$p2cookies) { - $p2cookies = array(); - } - $p2cookies[$k] = $m[2]; - } - } - } - } - if ($p2cookies) { - $cookies_to_send = ''; - foreach ($p2cookies as $cname => $cvalue) { - if ($cname != 'expires') { - $cookies_to_send .= " {$cname}={$cvalue};"; - } - } - $newcookies = "Cookie:{$cookies_to_send}\r\n"; - - $request = preg_replace('/Cookie: .*?\\r\\n/', $newcookies, $request); - } - - // �]���͏������ݐ����Ɣ��f - } elseif (preg_match('/^Location: /', $l, $matches)) { - $post_seikou = true; - } - if ($l == "\r\n") { - $start_here = true; - } - } - - } - fclose($fp); - - // be.2ch.net or JBBS������� �����R�[�h�ϊ� EUC��SJIS - if (P2Util::isHostBe2chNet($host) || P2Util::isHostJbbsShitaraba($host)) { - $response = mb_convert_encoding($response, 'CP932', 'CP51932'); - - // - $response = preg_replace( - '{(.*?)(.*)}is', - '$1$2', - $response); - } - - $kakikonda_match = '{.*(?:�������݂܂���|�� �������݂܂��� ��|�������ݏI�� - SubAll BBS).*}is'; - $cookie_kakunin_match = '{|�� �������݊m�F ��|>�������݊m�F�B<}'; - - if (preg_match('/<.+>/s', $response, $matches)) { - $response = $matches[0]; - } - - // �J�L�R�~���� - if ($post_seikou || preg_match($kakikonda_match, $response)) { - $reload = empty($_POST['from_read_new']); - showPostMsg(true, '�������݂��I���܂����B', $reload); - - // +Wiki samba�^�C�}�[ - if ($_conf['wiki.samba_timer']) { - require_once P2_LIB_DIR . '/wiki/Samba.php'; - $samba = new Samba(); - $samba->setWriteTime($host, $bbs); - $samba->save(); - } - - return true; - //$response_ht = p2h($response); - //echo "
        {$response_ht}
        "; - - // cookie�m�F�ipost�ă`�������W�j - } elseif (preg_match($cookie_kakunin_match, $response)) { - showCookieConfirmation($host, $response); - return false; - - // ���̑��̓��X�|���X�����̂܂ܕ\�� - } else { - echo preg_replace('@������Ń����[�h���Ă��������B GO!
        @', '', $response); - return false; - } -} - -// }}} -// {{{ postIt2() - -/** - * ����p2�Ń��X���������� - * - * @return boolean �������ݐ����Ȃ� true�A���s�Ȃ� false - */ -function postIt2($host, $bbs, $key, $FROM, $mail, $MESSAGE) -{ - if (P2Util::isHostBe2chNet($host) || !empty($_REQUEST['beres'])) { - $beRes = true; - } else { - $beRes = false; - } - - try { - $posted = P2Util::getP2Client()->post($host, $bbs, $key, - $FROM, $mail, $MESSAGE, - $beRes, $response); - } catch (P2Exception $e) { - p2die('����p2�|�X�g���s', $e->getMessage()); - } - - if ($posted) { - $reload = empty($_POST['from_read_new']); - showPostMsg(true, '�������݂��I���܂����B', $reload); - } else { - $result_msg = '����p2�|�X�g���s

        ' - . '
        ' . p2h($response['body']) . '
        ' - . '

        -'; - showPostMsg(false, $result_msg, false); - } - - return $posted; -} - -// }}} -// {{{ showPostMsg() - -/** - * �������ݏ������ʕ\������ - * - * @return void - */ -function showPostMsg($isDone, $result_msg, $reload) -{ - global $_conf, $location_ht, $popup, $ttitle, $ptitle; - global $STYLE, $skin_en; - - // �v�����g�p�ϐ� =============== - if (!$_conf['ktai']) { - $class_ttitle = ' class="thre_title"'; - } else { - $class_ttitle = ''; - } - $ttitle_ht = "{$ttitle}"; - - $popup_ht = ''; - if ($isDone) { - // 2005/03/01 aki: jig�u���E�U�ɑΉ����邽�߁A& �ł͂Ȃ� & �� - // 2005/04/25 rsk: -EOJS; - } else { - $_conf['extra_headers_ht'] .= << -EOP; - } - } - - // �v�����g ============== - echo $_conf['doctype']; - echo << - - - - - - {$_conf['extra_headers_ht']} -EOHEADER; - - if ($isDone) { - echo " rep2 - �������݂܂����B"; - } else { - echo " {$ptitle}"; - } - - if (!$_conf['ktai']) { - echo << - - \n -EOP; - if ($popup) { - echo << - // - -EOSCRIPT; - } - if ($reload) { - echo $popup_ht; - } - $kakunin_ht = ''; - } else { - $kakunin_ht = <<�m�F

        -EOP; - } - - echo "\n"; - echo "\n"; - - P2Util::printInfoHtml(); - - echo <<{$ttitle_ht}

        -

        {$result_msg}

        -{$kakunin_ht} - - -EOP; -} - -// }}} -// {{{ showCookieConfirmation() - -/** - * Cookie�m�FHTML��\������ - * - * @param string $host �z�X�g�� - * @param string $response ���X�|���X�{�f�B - * @return void - */ -function showCookieConfirmation($host, $response) -{ - global $_conf, $post_param_keys, $post_send_keys, $post_optional_keys; - global $popup, $rescount, $ttitle_en; - global $STYLE, $skin_en; - - // HTML��DOM�ʼn�� - $doc = P2Util::getHtmlDom($response, 'Shift_JIS', false); - if (!$doc) { - showUnexpectedResponse($response, __LINE__); - return; - } - - $xpath = new DOMXPath($doc); - $heads = $doc->getElementsByTagName('head'); - $bodies = $doc->getElementsByTagName('body'); - if ($heads->length != 1 || $bodies->length != 1) { - showUnexpectedResponse($response, __LINE__); - return; - } - - $head = $heads->item(0); - $body = $bodies->item(0); - $xpath = new DOMXPath($doc); - - // �t�H�[����T�� - $forms = $xpath->query(".//form[(@method = 'POST' or @method = 'post') - and (starts-with(@action, '../test/bbs.cgi') or starts-with(@action, '../test/subbbs.cgi'))]", $body); - if ($forms->length != 1) { - showUnexpectedResponse($response, __LINE__); - return; - } - $form = $forms->item(0); - - if (!preg_match('{^\\.\\./test/(sub)?bbs\\.cgi(?:\\?guid=ON)?$}', $form->getAttribute('action'), $matches)) { - showUnexpectedResponse($response, __LINE__); - return; - } - - if (array_key_exists(1, $matches) && strlen($matches[1])) { - $subbbs = $matches[1]; - } else { - $subbbs = false; - } - - // form�v�f�̑����l������������ - // method������action�����ȊO�̑����͍폜���Aaccept-charset������lj����� - // DOMNamedNodeMap�̃C�e���[�V�����ƁA����Ɋ܂܂��m�[�h�̍폜�͕ʂɍs�� - $rmattrs = array(); - foreach ($form->attributes as $name => $node) { - switch ($name) { - case 'method': - //$node->value = 'POST'; - break; - case 'action': - $node->value = './live_post.php'; - break; - default: - $rmattrs[] = $name; - } - } - foreach ($rmattrs as $name) { - $form->removeAttribute($name); - } - $form->setAttribute('accept-charset', $_conf['accept_charset']); - - // POST����l���Đݒ� - foreach (array_combine($post_send_keys, $post_param_keys) as $key => $name) { - if (array_key_exists($name, $_POST)) { - $nodes = $xpath->query("./input[@type = 'hidden' and @name = '{$key}']"); - if ($nodes->length) { - $elem = $nodes->item(0); - if ($key != $name) { - $elem->setAttribute('name', $name); - } - $elem->setAttribute('value', mb_convert_encoding($_POST[$name], 'UTF-8', 'CP932')); - } - } - } - - // �e��B���p�����[�^��lj� - $hidden = $doc->createElement('input'); - $hidden->setAttribute('type', 'hidden'); - - // rep2���g�p����ϐ�����1 - foreach (array('host', 'popup', 'rescount', 'ttitle_en') as $name) { - $elem = $hidden->cloneNode(); - $elem->setAttribute('name', $name); - $elem->setAttribute('value', $$name); - $form->appendChild($elem); - } - - // rep2���g�p����ϐ�����2 - foreach ($post_optional_keys as $name) { - if (array_key_exists($name, $_POST)) { - $elem = $hidden->cloneNode(); - $elem->setAttribute('name', $name); - $elem->setAttribute('value', mb_convert_encoding($_POST[$name], 'UTF-8', 'CP932')); - $form->appendChild($elem); - } - } - - // POST�悪subbbs.cgi - if ($subbbs !== false) { - $elem = $hidden->cloneNode(); - $elem->setAttribute('name', 'sub'); - $elem->setAttribute('value', $subbbs); - $form->appendChild($elem); - } - - // �\�[�X�R�[�h�␳ - if (!empty($_POST['fix_source'])) { - $elem = $hidden->cloneNode(); - $elem->setAttribute('name', 'fix_source'); - $elem->setAttribute('value', '1'); - $form->appendChild($elem); - } - - // �����r���[�w�� - if ($_conf['b'] != $_conf['client_type']) { - $elem = $hidden->cloneNode(); - $elem->setAttribute('name', 'b'); - $elem->setAttribute('value', $_conf['b']); - $form->appendChild($elem); - } - - // Cookie�m�F�t���O - $elem = $hidden->cloneNode(); - $elem->setAttribute('name', 'p2_post_confirm_cookie'); - $elem->setAttribute('value', '1'); - $form->appendChild($elem); - - // �G���R�[�f�B���O����̃q���g - $hidden->setAttribute('name', '_hint'); - $hidden->setAttribute('value', mb_convert_encoding($_conf['detect_hint'], 'UTF-8', 'CP932')); - $form->insertBefore($hidden, $form->firstChild); - - // �w�b�_�ɗv�f��lj� - if (!$_conf['ktai']) { - $skin_q = str_replace('&', '&', $skin_en); - $link = $doc->createElement('link'); - $link->setAttribute('rel', 'stylesheet'); - $link->setAttribute('type', 'text/css'); - $link->setAttribute('href', "css.php?css=style&skin={$skin_q}"); - $link = $head->appendChild($link)->cloneNode(); - $link->setAttribute('href', "css.php?css=post&skin={$skin_q}"); - $head->appendChild($link); - - if ($popup) { - $mado_okisa = explode(',', $STYLE['post_pop_size']); - $script = $doc->createElement('script'); - $script->setAttribute('type', 'text/javascript'); - $head->appendChild($script)->appendChild($doc->createCDATASection( - sprintf('resizeTo(%d,%d);', $mado_okisa[0], $mado_okisa[1] + 200) - )); - } - } - - // �\���C�� - // li�v�f�𒼐ڂ̎q�v�f�Ƃ��Ċ܂܂Ȃ�ul�v�f��blockquote�v�f�Œu�� - // DOMNodeList�̃C�e���[�V�����ƁA����Ɋ܂܂��m�[�h�̍폜�͕ʂɍs�� - $nodes = array(); - foreach ($xpath->query('.//ul[count(./li)=0]', $body) as $node) { - $nodes[] = $node; - } - foreach ($nodes as $node) { - $children = array(); - foreach ($node->childNodes as $child) { - $children[] = $child; - } - $elem = $doc->createElement('blockquote'); - foreach ($children as $child) { - $elem->appendChild($node->removeChild($child)); - } - $node->parentNode->replaceChild($elem, $node); - } - - // libxml2�����̕�����G���R�[�f�B���O��UTF-8�ł��邪�AsaveHTML()���� - // ���\�b�h�ł͓ǂݍ��񂾕����̃G���R�[�f�B���O�ɍĕϊ����ďo�͂���� - // (DOMDocument��encoding�v���p�e�B��ύX���邱�Ƃŕς���) - echo $doc->saveHTML(); -} - -// }}} -// {{{ showUnexpectedResponse() - -/** - * �T�[�o����\�����Ȃ����X�|���X���Ԃ��Ă����|��\������ - * - * @param string $response ���X�|���X�{�f�B - * @param int $line �s�ԍ� - * @return void - */ -function showUnexpectedResponse($response, $line = null) -{ - echo 'p2 ERROR'; - echo '

        p2 ERROR

        �T�[�o����̃��X�|���X���ςł��B'; - if (is_numeric($line)) { - echo "({$line})"; - } - echo '

        ';
        -    echo p2h($response);
        -    echo '
        '; -} - -// }}} -// {{{ getKeyInSubject() - -/** - * subject����key���擾���� - * - * @return string|false - */ -function getKeyInSubject() -{ - global $host, $bbs, $ttitle; - - $aSubjectTxt = new SubjectTxt($host, $bbs); - - foreach ($aSubjectTxt->subject_lines as $l) { - if (strpos($l, $ttitle) !== false) { - if (preg_match("/^([0-9]+)\.(dat|cgi)(,|<>)(.+) ?(\(|�i)([0-9]+)(\)|�j)/", $l, $matches)) { - return $key = $matches[1]; - } - } - } - - return false; -} - -// }}} -// {{{ tab2space() - -/** - * ���`���ێ����Ȃ���A�^�u���X�y�[�X�ɒu�������� - * - * @param string $in_str �Ώە����� - * @param int $tabwidth �^�u�� - * @param string $linebreak ���s����(��) - * @return string - */ -function tab2space($in_str, $tabwidth = 4, $linebreak = "\n") -{ - $out_str = ''; - $lines = preg_split('/\\r\\n|\\r|\\n/', $in_str); - $ln = count($lines); - $i = 0; - - while ($i < $ln) { - $parts = explode("\t", rtrim($lines[$i])); - $pn = count($parts); - - for ($j = 0; $j < $pn; $j++) { - if ($j == 0) { - $l = $parts[$j]; - } else { - //$t = $tabwidth - (strlen($l) % $tabwidth); - $sn = $tabwidth - (mb_strwidth($l) % $tabwidth); // UTF-8�ł��S�p��������2�ƃJ�E���g���� - for ($k = 0; $k < $sn; $k++) { - $l .= ' '; - } - $l .= $parts[$j]; - } - } - - $out_str .= $l; - if (++$i < $ln) { - $out_str .= $linebreak; - } - } - - return $out_str; -} - -// }}} - -/* - * Local Variables: - * mode: php - * coding: cp932 - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: nil - * End: - */ -// vim: set syn=php fenc=cp932 ai et ts=4 sw=4 sts=4 fdm=marker: diff --git a/rep2/post.php b/rep2/post.php index 83c76b6b5..d07f7a907 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -123,7 +123,13 @@ $location_ht = "{$_conf['subject_php']}?host={$host}&bbs={$bbs}{$_conf['k_at_a']}"; } else { unset($post[$subject_k]); - $location_ht = "{$_conf['read_php']}?host={$host}&bbs={$bbs}&key={$key}&ls={$rescount}-&refresh=1&nt={$newtime}{$_conf['k_at_a']}"; + if (empty($_POST['live'])) { + $location_ht = "{$_conf['read_php']}?host={$host}&bbs={$bbs}&key={$key}&ls={$rescount}-&refresh=1&nt={$newtime}{$_conf['k_at_a']}"; + } else { + $ttitle_urlen = rawurlencode($ttitle_en); + $ttitle_en_q = "&ttitle_en=" . $ttitle_urlen; + $location_ht = "live_post_form.php?host={$host}&bbs={$bbs}&key={$key}{$ttitle_en_q}&w_reg=1{$_conf['k_at_a']}"; + } if (!$_conf['iphone']) { $location_ht .= "#r{$rescount}"; } @@ -413,23 +419,36 @@ function postIt($host, $bbs, $key, $post) $request .= "Referer: http://{$host}/{$bbs}/{$key}/\r\n"; // �N�b�L�[ - $cookies_to_send = ''; + $cookies_to_send = array(); if ($p2cookies) { foreach ($p2cookies as $cname => $cvalue) { if ($cname != 'expires') { - $cookies_to_send .= " {$cname}={$cvalue};"; + $cookies_to_send[$cname] = $cvalue; } } } // be.2ch.net �F�؃N�b�L�[ if (P2Util::isHostBe2chNet($host) || !empty($_REQUEST['beres'])) { - $cookies_to_send .= ' MDMD='.$_conf['be_2ch_code'].';'; // be.2ch.net�̔F�؃R�[�h(�p�X���[�h�ł͂Ȃ�) - $cookies_to_send .= ' DMDM='.$_conf['be_2ch_mail'].';'; // be.2ch.net�̓o�^���[���A�h���X + if ($_conf['be_2ch_DMDM'] && $_conf['be_2ch_MDMD']) { + $cookies_to_send['DMDM'] = urlencode(rawurldecode($_conf['be_2ch_DMDM'])); + $cookies_to_send['MDMD'] = urlencode(rawurldecode($_conf['be_2ch_MDMD'])); + } else { + $ar = P2Util::getBe2chCodeWithUserConf(); // urlencode���ꂽ�܂܂̏�� + if (is_array($ar)) { + $cookies_to_send['DMDM'] = $ar['DMDM']; + $cookies_to_send['MDMD'] = $ar['MDMD']; + } + } } - if (!$cookies_to_send) { $cookies_to_send = ' ;'; } - $request .= 'Cookie:'.$cookies_to_send."\r\n"; + if ($cookies_to_send) { + $cstrs = array(); + foreach ($cookies_to_send as $k => $v) { + $cstrs[] = "$k=$v"; + } + $request .= 'Cookie: ' . implode('; ', $cstrs) . "\r\n"; + } //$request .= 'Cookie: PON='.$SPID.'; NAME='.$FROM.'; MAIL='.$mail."\r\n"; $request .= "Connection: Close\r\n"; diff --git a/rep2/setting.php b/rep2/setting.php index e4b86d094..b9943452b 100644 --- a/rep2/setting.php +++ b/rep2/setting.php @@ -90,9 +90,15 @@ EOP; +} +echo '
      '; + if ($_conf['ktai']) { echo '
      '; From dfc1bcb377d97e3eb3f4384e0add3be030851211 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Mon, 16 Mar 2015 10:40:20 +0900 Subject: [PATCH 062/339] =?UTF-8?q?>>1=E3=82=92=E3=83=97=E3=83=AC=E3=83=93?= =?UTF-8?q?=E3=83=A5=E3=83=BC=E3=81=99=E3=82=8B=E6=A9=9F=E8=83=BD=E3=81=A7?= =?UTF-8?q?API=E3=82=92=E4=BD=BF=E7=94=A8=E3=81=97=E3=81=A6=E3=81=84?= =?UTF-8?q?=E3=81=AA=E3=81=8B=E3=81=A3=E3=81=9F=E3=81=AE=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 162 +++++++++++++-------------------------------- rep2/read.php | 5 ++ 2 files changed, 51 insertions(+), 116 deletions(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index dbdff8349..2a6bbf5a6 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -161,7 +161,12 @@ protected function _downloadDat2chAPI($sid,$from_bytes) if (!($this->host && $this->bbs && $this->key)) { return false; } - + + //>>1�v���r���[�̎��͍����擾���Ȃ��ėǂ��̂ŏ��true(�V������)��Ԃ� + if (is_readable($this->keydat) && !empty($_GET['one'])) { + return true; + } + if ($sid == '') { return false; } @@ -188,7 +193,10 @@ protected function _downloadDat2chAPI($sid,$from_bytes) $purl = parse_url($url); // URL���� - if (!$zero_read) { + if(!empty($_GET['one'])) { + //>>1�v���r���[�̎��̓T�[�o�[�ɍŏ��̕����������� + $headers .= "Range: bytes=0-8192\r\n"; + } elseif (!$zero_read) { $headers .= "Range: bytes={$from_bytes}-\r\n"; } @@ -241,7 +249,16 @@ protected function _downloadDat2chAPI($sid,$from_bytes) if ($code == '200' || $code == '206') { while (!p2_stream_eof($fp, $timed_out)) { - $body .= fread($fp, 4096); + //>>1���v���r���[����p + if (!empty($_GET['one'])) { + $line = fgets($fp, 32800); //���s�P�ʂœǍ��� + if (strstr($line, "\n")) {//���s���L��Εۑ�; + $body .= $line; + } + unset($line); + } else { + $body .= fread($fp, 4096); //�ʏ�擾�͂��ځ[�񔻒���s�����߂������ŕۑ����� + } } if ($timed_out) { @@ -418,6 +435,11 @@ protected function _downloadDat2ch($from_bytes) return false; } + //>>1�v���r���[�̎��͍����擾���Ȃ��ėǂ��̂ŏ��true(�V������)��Ԃ� + if (is_readable($this->keydat) && !empty($_GET['one'])) { + return true; + } + $from_bytes = intval($from_bytes); if ($from_bytes == 0) { @@ -461,9 +483,14 @@ protected function _downloadDat2ch($from_bytes) //$request .= "Accept-Encoding: gzip, deflate\r\n"; $request .= "Accept-Language: ja, en\r\n"; $request .= "User-Agent: Monazilla/1.00 ({$_conf['p2ua']})\r\n"; - if (!$zero_read) { + + if(!empty($_GET['one'])) { + //>>1�v���r���[�̎��̓T�[�o�[�ɍŏ��̕����������� + $headers .= "Range: bytes=0-8192\r\n"; + } elseif (!$zero_read) { $request .= "Range: bytes={$from_bytes}-\r\n"; } + $request .= "Referer: http://{$purl['host']}/{$this->bbs}/\r\n"; if ($this->modified) { @@ -501,7 +528,16 @@ protected function _downloadDat2ch($from_bytes) if ($code == '200' || $code == '206') { while (!p2_stream_eof($fp, $timed_out)) { - $body .= fread($fp, 4096); + //>>1���v���r���[����p + if (!empty($_GET['one'])) { + $line = fgets($fp, 32800); //���s�P�ʂœǍ��� + if (strstr($line, "\n")) {//���s���L��Εۑ�; + $body .= $line; + } + unset($line); + } else { + $body .= fread($fp, 4096); //�ʏ�擾�͂��ځ[�񔻒���s�����߂������ŕۑ����� + } } if ($timed_out) { @@ -1198,6 +1234,9 @@ public function previewOne() if (!($this->host && $this->bbs && $this->key)) { return false; } + //�ʏ�Ɠ����悤��DAT�̎擾�����݂�B$_GET['one']���Z�b�g����Ă����2ch�݊���>>1�������Ƃ� + $this->downloadDat(); + // ���[�J��dat����擾 if (is_readable($this->keydat)) { $fd = fopen($this->keydat, 'rb'); @@ -1220,114 +1259,8 @@ public function previewOne() $this->setTtitle($d[4]); } - // ���[�J��dat�Ȃ���΃I�����C������ - if (!$first_line) { - - $method = 'GET'; - $url = "http://{$this->host}/{$this->bbs}/dat/{$this->key}.dat"; - - $purl = parse_url($url); // URL���� - if (isset($purl['query'])) { // �N�G���[ - $purl['query'] = '?' . $purl['query']; - } else { - $purl['query'] = ''; - } - - // �v���L�V - if ($_conf['proxy_use']) { - $send_host = $_conf['proxy_host']; - $send_port = $_conf['proxy_port']; - $send_path = $url; - } else { - $send_host = $purl['host']; - $send_port = $purl['port']; - $send_path = $purl['path'] . $purl['query']; - } - - if (!$send_port) {$send_port = 80;} // �f�t�H���g��80 - - $request = "{$method} {$send_path} HTTP/1.0\r\n"; - $request .= "Host: {$purl['host']}\r\n"; - $request .= "User-Agent: Monazilla/1.00 ({$_conf['p2ua']})\r\n"; - // $request .= "Range: bytes={$from_bytes}-\r\n"; - - // Basic�F�ؗp�̃w�b�_ - if (isset($purl['user']) && isset($purl['pass'])) { - $request .= "Authorization: Basic ".base64_encode($purl['user'].":".$purl['pass'])."\r\n"; - } - - $request .= "Connection: Close\r\n"; - $request .= "\r\n"; - - // WEB�T�[�o�֐ڑ� - $fp = @fsockopen($send_host, $send_port, $errno, $errstr, $_conf['http_conn_timeout']); - if (!$fp) { - self::_pushInfoConnectFailed($url, $errno, $errstr); - $this->diedat = true; - return false; - } - stream_set_timeout($fp, $_conf['http_read_timeout'], 0); - - fputs($fp, $request); - - $code = null; - $start_here = false; - - while (!p2_stream_eof($fp, $timed_out)) { - - if ($start_here) { - - if ($code == '200') { - $first_line = fgets($fp, 32800); - break; - } else { - fclose($fp); - return $this->previewOneNotFound($code); - } - } else { - $l = rtrim(fgets($fp, 32800), "\r\n"); - //echo $l."
      ";// for debug - if (preg_match('@^HTTP/1\\.\\d (\\d+) (.+)@i', $l, $matches)) { // ex) HTTP/1.1 304 Not Modified - $code = $matches[1]; - - if ($code == '200') { - ; - } else { - fclose($fp); - return $this->previewOneNotFound($code); - } - - } elseif ($l === '') { - $start_here = true; - } - } - - } - fclose($fp); - - // be.2ch.net �Ȃ�EUC��SJIS�ϊ� - if (P2Util::isHostBe2chNet($this->host)) { - $first_line = mb_convert_encoding($first_line, 'CP932', 'CP51932'); - } - - $first_datline = rtrim($first_line); - - if (strpos($first_datline, '<>') !== false) { - $datline_sepa = '<>'; - } else { - $datline_sepa = ','; - $this->dat_type = '2ch_old'; - } - $d = explode($datline_sepa, $first_datline); - $this->setTtitle($d[4]); - - $this->onthefly = true; - - } else { - // �֋X�� - if (!$this->readnum) { - $this->readnum = 1; - } + if (!$this->readnum) { + $this->readnum = 1; } if ($_conf['ktai']) { @@ -1338,9 +1271,6 @@ public function previewOne() } $body = ''; - if ($this->onthefly) { - $body .= "
      on the fly
      \n"; - } $body .= "
      \n"; $res = $aShowThread->transRes($first_line, 1); // 1��\�� $body .= is_array($res) ? $res['body'] . $res['q'] : $res; diff --git a/rep2/read.php b/rep2/read.php index 5b28a55f9..1e497f2ba 100644 --- a/rep2/read.php +++ b/rep2/read.php @@ -122,6 +122,11 @@ include READ_HEADER_INC_PHP; echo $preview; + echo <<
      +EOP; include READ_FOOTER_INC_PHP; return; From 2fcdf744030aea30551f5ae8222a9a2abf840270 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Mon, 16 Mar 2015 11:28:33 +0900 Subject: [PATCH 063/339] =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E3=81=8B=E3=82=893?= =?UTF-8?q?=E3=83=9A=E3=82=A4=E3=83=B3=E8=A1=A8=E7=A4=BA=E3=81=AE=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E3=82=92=E5=A4=89=E6=9B=B4=E3=81=A7=E3=81=8D=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F=20Be=E3=81=AE?= =?UTF-8?q?=E3=82=A2=E3=82=A4=E3=82=B3=E3=83=B3=E3=82=92=E8=A1=A8=E7=A4=BA?= =?UTF-8?q?=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97?= =?UTF-8?q?=E3=81=9F=20http://anago.2ch.net/test/read.cgi/software/1425420?= =?UTF-8?q?543/570?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- conf/conf_user_def.inc.php | 3 +++ lib/ShowThread.php | 13 +++++++++++++ lib/ShowThreadPc.php | 6 ++++++ rep2/edit_conf_user.php | 1 + rep2/index.php | 10 ++++++++-- 6 files changed, 32 insertions(+), 3 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 45cea0766..5078177e0 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150315.0117', // rep2�̃o�[�W���� + 'p2version' => '150316.1120', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index 191767882..0721d16fb 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -523,6 +523,9 @@ // �t���[���E�� �X���{�� �̕\���� $conf_user_def['frame_read_width'] = "60%"; // ("40%") +// 3�y�C����ʂ̃t���[���̕��ו� +$conf_user_def['pane_mode'] = 0; // (0) +$conf_user_rad['pane_mode'] = array('0' => '�W���i�Ɍ`�j', '1' => '�����i��`�j'); // �����O�C�����A�܂���openssl�Ŏ��݂�B��PHP 4.3.0�ȍ~�ŁAOpenSSL���ÓI�Ƀ����N����Ă���K�v������ $conf_user_def['precede_openssl'] = 0; // (0) diff --git a/lib/ShowThread.php b/lib/ShowThread.php index ed7d41383..68b2d2f10 100644 --- a/lib/ShowThread.php +++ b/lib/ShowThread.php @@ -694,6 +694,19 @@ public function replaceBeId($date_id, $i) return $date_id; } + // }}} + // {{{ replaceSsspIcon() + + /** + * BE���G�����A�C�R�������N�ϊ� + */ + public function replaceSsspIcon($msg) + { + //sssp://img.2ch.net/ico/miyabi.gif + //sssp://img.2ch.net/emoji/2ch-cry.gif + return preg_replace("{sssp(://[-_.!~*()0-9A-Za-z;/:@&=+\$,%]+?\.(?:gif|png|jpe|jpe?g|ico|bmp|tif|mng|j2k)(?:[?#][-_.!~*()0-9A-Za-z;/?:@&=+\$,%#]*|))}", "", $msg); + } + // }}} // {{{ _ngAbornCheck() diff --git a/lib/ShowThreadPc.php b/lib/ShowThreadPc.php index c3133a180..5f7cc9290 100644 --- a/lib/ShowThreadPc.php +++ b/lib/ShowThreadPc.php @@ -224,6 +224,9 @@ public function transRes($ares, $i, $pattern = null) // BE�v���t�@�C�������N�ϊ� $date_id = $this->replaceBeId($date_id, $i); + // BE���G�����A�C�R�������N�ϊ� + $msg = $this->replaceSsspIcon($msg); + // HTML�|�b�v�A�b�v if ($_conf['iframe_popup']) { $date_id = preg_replace_callback("{((\?#*)|(Lv\.\d+))}", array($this, 'iframePopupCallback'), $date_id); @@ -388,6 +391,9 @@ public function qRes($ares, $i) // BE�v���t�@�C�������N�ϊ� $date_id = $this->replaceBeId($date_id, $i); + // BE���G�����A�C�R�������N�ϊ� + $msg = $this->replaceSsspIcon($msg); + // HTML�|�b�v�A�b�v if ($_conf['iframe_popup']) { $date_id = preg_replace_callback("{((\?#*)|(Lv\.\d+))}", array($this, 'iframePopupCallback'), $date_id); diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index 4b7512d1b..f8b9273d5 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -402,6 +402,7 @@ array('frame_menu_width', '�t���[���� �ƒ��j���[ �̕\����'), array('frame_subject_width', '�t���[���E�� �X���ꗗ �̕\����'), array('frame_read_width', '�t���[���E�� �X���{�� �̕\����'), + array('pane_mode', '3�y�C����ʂ̃t���[���̕��ו�'), array('my_FROM', '���X�������ݎ��̃f�t�H���g�̖��O'), array('my_mail', '���X�������ݎ��̃f�t�H���g��mail'), diff --git a/rep2/index.php b/rep2/index.php index 12df2b2ba..95ee4e89d 100644 --- a/rep2/index.php +++ b/rep2/index.php @@ -52,8 +52,14 @@ } // �f�t�H���g�̃y�C������ - $panes = 'default'; - $direction = 'rows'; + if(!$_conf['pane_mode']) + { + $panes = 'default'; + $direction = 'rows'; + } else { + $panes = 'v3'; + $direction = 'cols'; + } $_SESSION['use_narrow_toolbars'] = false; // index.php?panes={v3,v2,h2} or index.php?sidebar=1 �Ńy�C���w�� From 31f6e80fbeee3f5d9b67561f40d3bc303df6769b Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Mon, 16 Mar 2015 13:12:52 +0900 Subject: [PATCH 064/339] =?UTF-8?q?=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=82=92=E6=9B=B4=E6=96=B0=20=E3=82=B9?= =?UTF-8?q?=E3=83=9E=E3=83=9B=E5=90=91=E3=81=91CSS=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/README-774.txt | 36 ++++++++++++++++++++++++++++++++---- doc/README-API.txt | 1 + rep2/css/iphone.css | 2 +- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/doc/README-774.txt b/doc/README-774.txt index fcc67d110..e4958c057 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -9,14 +9,16 @@ rep2-expack test https://github.com/orzisun/p2-php �Ǝ��̉��ǂ��s���Ă��܂��B -���@�\ +����ȋ@�\ �E�u���[�U�[�ݒ�ҏW�v����+live�����N�̕\���ݒ��ύX�”\ -�E�����‚̃X���ꗗ����X�����J�����Ƃ��Ɏ����I�Ɏ������[�h�ŃX�����J�� -�E�X���b�h�^�C�g�����璘�쌠�\�L���폜�”\ +�E�����‚̃X���ꗗ����X�����J�����Ƃ��Ɏ����I�Ɏ������[�h�ŃX�����J���ݒ��lj� +�E3�y�C���\���̔z�u��ύX�ł���ݒ��lj� +�E�X���b�h�^�C�g�����璘�쌠�\�L���폜����ݒ��lj� �E���[�J���ˆꗗ�p.brd�t�@�C���̒u���ꏊ��rep2/board����$_conf['data_dir']/brard�ɕύX +�Ecron�Ƃ��ōŋߓǂ񂾃X���Ȃǂ�dat��DL�o����X�N���v�g�lj� +�E�{�Ƃ���be�̃��O�C���������ڐA����BE2.0�ɑΉ� �E���̑������̃A���ɍ��킹���C����git�̃R�~�b�g���O���m�F���Ă��������B - ���Ɛ� �{�\�t�g�E�F�A�̎g�p�ɂ�蒼�ڂ���ъԐړI�ɐ����������Ȃ鑹�Q���⏞�������܂���B @@ -32,3 +34,29 @@ rep2-expack test https://github.com/orzisun/p2-php �����C�Z���X �{��p2�Ɠ������AX11���C�Z���X�ł��B + +��ChangeLog +150316.1120 +�E3�y�C���\���̔z�u��ύX�ł���ݒ��lj� +�EBe�̃A�C�R����\���ł���悤�ɂ��� +�E���̑����X + +150315.0117 +�Eyoutu.be��nico.(ms|sc)�̃v���r���[�ɑΉ� +�EYouTube�̖��ߍ��ݕ��@��object����iframe�ɕύX +�Ecron�Ƃ��ōŋߓǂ񂾃X���Ȃǂ�dat��DL�o����X�N���v�g�lj� +�E�ꕔ�̉�ʃf�U�C����{�Ƃ��ۂ��f�U�C���ɕύX +�E�ꕔ�̃��X�̉��s���폜�����s����C�� +�EID��F�Â����Ȃ��ݒ�̍ۂ�ID�̕\�������������Ȃ�s����C�� +�E2ch��DAT�񋟏I���ɔ������O�j���΍��lj� +�E�{�Ƃ���be�̃��O�C���������ڐA����BE2.0�ɑΉ� +�E���擾�X���ł��X���ꗗ�Ɍ��X���̃����N��\���ł���ݒ��lj� +�E���̑����X + +150307.1230 +�Edoc�f�B���N�g���Ɋe�@�\��Readme.txt���쐬 +�E�u���[�U�[�ݒ�ҏW�v����+live�����N�̕\���ݒ��ύX�”\ +�E�����‚̃X���ꗗ����X�����J�����Ƃ��Ɏ����I�Ɏ������[�h�ŃX�����J���ݒ��lj� +�E�X���b�h�^�C�g�����璘�쌠�\�L���폜����ݒ��lj� +�E���[�J���ˆꗗ�p.brd�t�@�C���̒u���ꏊ��rep2/board����$_conf['data_dir']/brard�ɕύX +�E���̑����X \ No newline at end of file diff --git a/doc/README-API.txt b/doc/README-API.txt index 449c813c2..da6edf1cc 100644 --- a/doc/README-API.txt +++ b/doc/README-API.txt @@ -2,6 +2,7 @@ API �����H �����܂Ŕ�����Ȏ����@�\�ł��B +�@�\���g�p���邽�߂ɂ͐ݒ肪�K�v�ɂȂ�܂��B 2ch API���g�p����dat�̎擾�ɑΉ����Ă��܂��B diff --git a/rep2/css/iphone.css b/rep2/css/iphone.css index 8bba736b7..3d4d105b1 100644 --- a/rep2/css/iphone.css +++ b/rep2/css/iphone.css @@ -816,7 +816,7 @@ div.mtoolbar { min-width: 320px; margin: 0; padding: 0; - background-color: #000; + background-color: #333; color: #fff; } From a7d89638b40608cf65586c09c37a0e29d0dd8853 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Tue, 17 Mar 2015 09:03:29 +0900 Subject: [PATCH 065/339] =?UTF-8?q?lib/ThreadRead.php=E3=81=AEDAT=E3=83=80?= =?UTF-8?q?=E3=82=A6=E3=83=B3=E3=83=AD=E3=83=BC=E3=83=89=E9=83=A8=E5=88=86?= =?UTF-8?q?=E3=82=92=E6=9C=AC=E5=AE=B6=E3=81=AE=E3=82=BD=E3=83=BC=E3=82=B9?= =?UTF-8?q?=E3=82=92=E4=BD=BF=E3=81=A3=E3=81=A6=E4=BD=9C=E3=82=8A=E6=9B=BF?= =?UTF-8?q?=E3=81=88=E3=81=9F=E3=80=82=20subject.php=E3=81=AEDAT=E5=89=8A?= =?UTF-8?q?=E9=99=A4=E3=83=AA=E3=83=B3=E3=82=AF=E3=81=ABtarget=3D"=5Fself"?= =?UTF-8?q?=E3=82=92=E4=BB=98=E3=81=91=E3=81=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 1195 ++++++++++++++++++++++-------------------- lib/sb_print.inc.php | 6 +- 2 files changed, 621 insertions(+), 580 deletions(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 2a6bbf5a6..31f4e0fcf 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -11,137 +11,117 @@ /** * �X���b�h���[�h�N���X */ -class ThreadRead extends Thread -{ +class ThreadRead extends Thread { // {{{ properties - public $datlines; // dat����ǂݍ��񂾃��C�����i�[����z�� - public $resrange; // array('start' => i, 'to' => i, 'nofirst' => bool) - public $onbytes; // �T�[�o����擾����dat�T�C�Y public $diedat; // �T�[�o����dat�擾���悤�Ƃ��Ăł��Ȃ���������true���Z�b�g����� public $onthefly; // ���[�J����dat�ۑ����Ȃ��I���U�t���C�ǂݍ��݂Ȃ�true - - public $idp; // ���X�ԍ����L�[�AID�̑O�̕����� ("ID:", " " ��) ��l�Ƃ���A�z�z�� - public $ids; // ���X�ԍ����L�[�AID��l�Ƃ���A�z�z�� + public $idp; // ���X�ԍ����L�[�AID�̑O�̕����� ("ID:", " " ��) ��l�Ƃ���A�z�z�� + public $ids; // ���X�ԍ����L�[�AID��l�Ƃ���A�z�z�� public $idcount; // ID���L�[�A�o���񐔂�l�Ƃ���A�z�z�� - public $getdat_error_msg_ht; // dat�擾�Ɏ��s�������ɕ\������郁�b�Z�[�W�iHTML�j - - public $old_host; // �z�X�g�ړ]���o���A�ړ]�O�̃z�X�g��ێ����� - + public $old_host; // �z�X�g�ړ]���o���A�ړ]�O�̃z�X�g��ێ����� private $getdat_error_body; // dat�擾�Ɏ��s��������203�Ŏ擾�ł���BODY public $datochi_residuums; // dat�擾�Ɏ��s��������203�Ŏ擾�ł���datline�̔z��i���X��=>datline�j // }}} // {{{ constructor - + /** * �R���X�g���N�^ */ - public function __construct() - { - parent::__construct(); + public function __construct() { + parent::__construct (); $this->getdat_error_msg_ht = ""; } - + // }}} // {{{ downloadDat() - + /** * DAT���_�E�����[�h���� */ - public function downloadDat() - { + public function downloadDat() { global $_conf; - + // �܂�BBS - if (P2Util::isHostMachiBbs($this->host)) { - return DownloadDatMachiBbs::invoke($this); - // JBBS@������� - } elseif (P2Util::isHostJbbsShitaraba($this->host)) { - if (!function_exists('shitarabaDownload')) { + if (P2Util::isHostMachiBbs ( $this->host )) { + return DownloadDatMachiBbs::invoke ( $this ); + // JBBS@������� + } elseif (P2Util::isHostJbbsShitaraba ( $this->host )) { + if (! function_exists ( 'shitarabaDownload' )) { include P2_LIB_DIR . '/read_shitaraba.inc.php'; } - return shitarabaDownload($this); - - // 2ch�n + return shitarabaDownload ( $this ); + + // 2ch�n } else { - $this->getDatBytesFromLocalDat(); // $aThread->length ��set + $this->getDatBytesFromLocalDat (); // $aThread->length ��set $pinktest = "/\w+\.bbspink.com/"; - + // 2ch bbspink���ǂ� - if (P2Util::isHost2chs($this->host) && !empty($_GET['maru'])) { - // ���O�C�����ĂȂ���� or ���O�C����A24���Ԉȏ�o�߂��Ă����玩���ă��O�C�� - if (!file_exists($_conf['sid2ch_php']) || - !empty($_REQUEST['relogin2ch']) || - (filemtime($_conf['sid2ch_php']) < time() - 60*60*24)) - { - if (!function_exists('login2ch')) { - include P2_LIB_DIR . '/login2ch.inc.php'; - } - if (!login2ch()) { - $this->getdat_error_msg_ht .= $this->get2chDatError(); - $this->diedat = true; - return false; - } + if (P2Util::isHost2chs ( $this->host ) && ! empty ( $_GET ['maru'] )) { + // ���O�C�����ĂȂ���� or ���O�C����A24���Ԉȏ�o�߂��Ă����玩���ă��O�C�� + if (! file_exists ( $_conf ['sid2ch_php'] ) || ! empty ( $_REQUEST ['relogin2ch'] ) || (filemtime ( $_conf ['sid2ch_php'] ) < time () - 60 * 60 * 24)) { + if (! function_exists ( 'login2ch' )) { + include P2_LIB_DIR . '/login2ch.inc.php'; + } + if (! login2ch ()) { + $this->getdat_error_msg_ht .= $this->get2chDatError (); + $this->diedat = true; + return false; } - - include $_conf['sid2ch_php']; - return $this->_downloadDat2chMaru($uaMona, $SID2ch); - - // 2ch bbspink �����^�|�ǂ� - } elseif (P2Util::isHost2chs($this->host) && !empty($_GET['moritapodat']) && - $_conf['p2_2ch_mail'] && $_conf['p2_2ch_pass']) - { - if (!array_key_exists('csrfid', $_GET) || - $this->_getCsrfIdForMoritapoDat() != $_GET['csrfid']) - { - p2die('�s���ȃ��N�G�X�g�ł�'); } - return $this->_downloadDat2chMoritapo(); - - // 2ch�̉ߋ����O�q�ɓǂ� - } elseif (!empty($_GET['kakolog']) && !empty($_GET['kakoget'])) { - if ($_GET['kakoget'] == 1) { + + include $_conf ['sid2ch_php']; + return $this->_downloadDat2chMaru ( $uaMona, $SID2ch ); + + // 2ch bbspink �����^�|�ǂ� + } elseif (P2Util::isHost2chs ( $this->host ) && ! empty ( $_GET ['moritapodat'] ) && $_conf ['p2_2ch_mail'] && $_conf ['p2_2ch_pass']) { + if (! array_key_exists ( 'csrfid', $_GET ) || $this->_getCsrfIdForMoritapoDat () != $_GET ['csrfid']) { + p2die ( '�s���ȃ��N�G�X�g�ł�' ); + } + return $this->_downloadDat2chMoritapo (); + + // 2ch�̉ߋ����O�q�ɓǂ� + } elseif (! empty ( $_GET ['kakolog'] ) && ! empty ( $_GET ['kakoget'] )) { + if ($_GET ['kakoget'] == 1) { $ext = '.dat.gz'; - } elseif ($_GET['kakoget'] == 2) { + } elseif ($_GET ['kakoget'] == 2) { $ext = '.dat'; } - return $this->_downloadDat2chKako($_GET['kakolog'], $ext); - - // 2ch or 2ch�݊� - } elseif (P2Util::isHost2chs($this->host) && !empty($_GET['shirokuma'])) { - return $this->_downloadDat2chMaru($uaMona, $SID2ch, 'shirokuma'); - //2ch ��API�o�R�ŗ��Ƃ� - } elseif (P2Util::isHost2chs($this->host) && $_conf['2chapi_use'] == 1 && empty($_GET['olddat'])) { + return $this->_downloadDat2chKako ( $_GET ['kakolog'], $ext ); + + // 2ch or 2ch�݊� + } elseif (P2Util::isHost2chs ( $this->host ) && ! empty ( $_GET ['shirokuma'] )) { + return $this->_downloadDat2chMaru ( $uaMona, $SID2ch, 'shirokuma' ); + // 2ch ��API�o�R�ŗ��Ƃ� + } elseif (P2Util::isHost2chs ( $this->host ) && $_conf ['2chapi_use'] == 1 && empty ( $_GET ['olddat'] )) { // ���O�C�����ĂȂ���� or ���O�C����A�ݒ肵�����Ԍo�߂��Ă����玩���ă��O�C�� - if (!file_exists($_conf['sid2chapi_php']) || - !empty($_REQUEST['relogin2chapi']) || - (filemtime($_conf['sid2chapi_php']) < time() - 60*60*$_conf['2chapi_interval'])) - { - if (!function_exists('authenticate_2chapi')) { + if (! file_exists ( $_conf ['sid2chapi_php'] ) || ! empty ( $_REQUEST ['relogin2chapi'] ) || (filemtime ( $_conf ['sid2chapi_php'] ) < time () - 60 * 60 * $_conf ['2chapi_interval'])) { + if (! function_exists ( 'authenticate_2chapi' )) { include P2_LIB_DIR . '/auth2chapi.inc.php'; } - if (!authenticate_2chapi()) { - $this->getdat_error_msg_ht .= $this->get2chDatError(); + if (! authenticate_2chapi ()) { + $this->getdat_error_msg_ht .= $this->get2chDatError (); $this->diedat = true; return false; } } - - include $_conf['sid2chapi_php']; - return $this->_downloadDat2chAPI($SID2chAPI,$this->length); + + include $_conf ['sid2chapi_php']; + return $this->_downloadDat2chAPI ( $SID2chAPI, $this->length ); } else { - //2ch �ȊO�̊O���� + // 2ch �ȊO�̊O���� // DAT������DL���� - return $this->_downloadDat2ch($this->length); + return $this->_downloadDat2ch ( $this->length ); } } } - + // }}} // {{{ _downloadDat2chAPI() @@ -150,266 +130,257 @@ public function downloadDat() * * @return mix �擾�ł������A�X�V���Ȃ������ꍇ��true��Ԃ� */ - protected function _downloadDat2chAPI($sid,$from_bytes) - { + protected function _downloadDat2chAPI($sid, $from_bytes) { global $_conf; global $debug; - - $AppKey = $_conf['2chapi_appkey']; - $AppName = $_conf['2chapi_appname']; - $HMKey = $_conf['2chapi_hmkey']; - if (!($this->host && $this->bbs && $this->key)) { + + $AppKey = $_conf ['2chapi_appkey']; + $AppName = $_conf ['2chapi_appname']; + $HMKey = $_conf ['2chapi_hmkey']; + if (! ($this->host && $this->bbs && $this->key)) { return false; } - - //>>1�v���r���[�̎��͍����擾���Ȃ��ėǂ��̂ŏ��true(�V������)��Ԃ� - if (is_readable($this->keydat) && !empty($_GET['one'])) { + + // >>1�v���r���[�̎��͍����擾���Ȃ��ėǂ��̂ŏ��true(�V������)��Ԃ� + if (is_readable ( $this->keydat ) && ! empty ( $_GET ['one'] )) { return true; } - + if ($sid == '') { return false; } - - $from_bytes = intval($from_bytes); - + + $from_bytes = intval ( $from_bytes ); + if ($from_bytes == 0) { $zero_read = true; } else { $zero_read = false; $from_bytes = $from_bytes - 1; } - - $serverName = explode('.', $this->host); - //$url = "http://{$this->host}/{$this->bbs}/dat/{$this->key}.dat"; - //$url="http://news2.2ch.net/test/read.cgi?bbs=newsplus&key=1038486598"; - $url = 'https://api.2ch.net/v1/'.$serverName[0].'/'.$this->bbs.'/'.$this->key; - $message = '/v1/'.$serverName[0].'/'.$this->bbs.'/'.$this->key.$sid.$AppKey; - $HB = hash_hmac("sha256", $message, $HMKey); - + + $serverName = explode ( '.', $this->host ); + // $url = "http://{$this->host}/{$this->bbs}/dat/{$this->key}.dat"; + // $url="http://news2.2ch.net/test/read.cgi?bbs=newsplus&key=1038486598"; + $url = 'https://api.2ch.net/v1/' . $serverName [0] . '/' . $this->bbs . '/' . $this->key; + $message = '/v1/' . $serverName [0] . '/' . $this->bbs . '/' . $this->key . $sid . $AppKey; + $HB = hash_hmac ( "sha256", $message, $HMKey ); + $headers = "User-Agent: Mozilla/3.0 (compatible; ${AppName})\r\n"; $headers .= "Connection: close\r\n"; $headers .= "Content-Type: application/x-www-form-urlencoded\r\n"; - $purl = parse_url($url); // URL���� - - if(!empty($_GET['one'])) { - //>>1�v���r���[�̎��̓T�[�o�[�ɍŏ��̕����������� + $purl = parse_url ( $url ); // URL���� + + if (! empty ( $_GET ['one'] )) { + // >>1�v���r���[�̎��̓T�[�o�[�ɍŏ��̕����������� $headers .= "Range: bytes=0-8192\r\n"; - } elseif (!$zero_read) { + } elseif (! $zero_read) { $headers .= "Range: bytes={$from_bytes}-\r\n"; } - + if ($this->modified) { $headers .= "If-Modified-Since: {$this->modified}\r\n"; } - + // Basic�F�ؗp�̃w�b�_ - if (isset($purl['user']) && isset($purl['pass'])) { - $headers .= "Authorization: Basic ".base64_encode($purl['user'].":".$purl['pass'])."\r\n"; + if (isset ( $purl ['user'] ) && isset ( $purl ['pass'] )) { + $headers .= "Authorization: Basic " . base64_encode ( $purl ['user'] . ":" . $purl ['pass'] ) . "\r\n"; } - $post_values = array( - 'sid' => $sid, - 'hobo' => $HB, - 'appkey' => $AppKey, + $post_values = array ( + 'sid' => $sid, + 'hobo' => $HB, + 'appkey' => $AppKey ); - $options['http'] = array( - 'method' => 'POST', - 'header' => $headers, - 'ignore_errors'=> true, - 'content' => http_build_query($post_values), + $options ['http'] = array ( + 'method' => 'POST', + 'header' => $headers, + 'ignore_errors' => true, + 'content' => http_build_query ( $post_values ) ); // �v���L�V - if ($_conf['proxy_use']) { - $options['http'] += array('proxy' => 'tcp://'.$_conf['proxy_host'].":".$_conf['proxy_port']); - $options['http'] += array('request_fulluri' => true); - $options['ssl'] = array('SNI_enabled' => false); + if ($_conf ['proxy_use']) { + $options ['http'] += array ( + 'proxy' => 'tcp://' . $_conf ['proxy_host'] . ":" . $_conf ['proxy_port'] + ); + $options ['http'] += array ( + 'request_fulluri' => true + ); + $options ['ssl'] = array ( + 'SNI_enabled' => false + ); } - + // WEB�T�[�o�֐ڑ� - $fp = @fopen($url, 'r', false, stream_context_create($options)); - if (!$fp) { - self::_pushInfoConnectFailed($url, $errno, $errstr); + $fp = @fopen ( $url, 'r', false, stream_context_create ( $options ) ); + if (! $fp) { + self::_pushInfoConnectFailed ( $url, $errno, $errstr ); $this->diedat = true; return false; } - stream_set_timeout($fp, $_conf['http_read_timeout'], 0); - - $body = ''; + stream_set_timeout ( $fp, $_conf ['http_read_timeout'], 0 ); + $code = null; - $start_here = false; - - while (!p2_stream_eof($fp, $timed_out)) { - - if ($start_here) { - - if ($code == '200' || $code == '206') { - - while (!p2_stream_eof($fp, $timed_out)) { - //>>1���v���r���[����p - if (!empty($_GET['one'])) { - $line = fgets($fp, 32800); //���s�P�ʂœǍ��� - if (strstr($line, "\n")) {//���s���L��Εۑ�; - $body .= $line; - } - unset($line); - } else { - $body .= fread($fp, 4096); //�ʏ�擾�͂��ځ[�񔻒���s�����߂������ŕۑ����� - } - } - - if ($timed_out) { - self::_pushInfoReadTimedOut($url); - $this->diedat = true; - fclose($fp); - return false; - } - //1�s�ڂ������؂�o�� - $firstmsg = substr($body, 0, 100); - if(strpos($firstmsg, 'ng ')===0) { - //ng�Ŏn�܂��Ă���api�̃G���[ - fclose($fp); - if (strstr($firstmsg, "not valid")) { - //sid�������ɂȂ����”\���B�������F�؂��邽�ߍŏ������蒼���B - if (empty($_REQUEST['relogin2chapi'])) { - $_REQUEST['relogin2chapi'] = true; - return $this->downloadDat(); - } - } - $this->getdat_error_msg_ht .= "

      rep2 error: API�o�R�ł̃X���b�h�擾�Ɏ��s���܂����B".trim($firstmsg)."

      "; - $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&relogin2chapi=true\">API�ōĎ擾�����݂�]"; - $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&olddat=true\">��dat�ōĎ擾�����݂�]"; - $this->diedat = true; - return false; - } elseif (strpos($firstmsg, "�Q�����˂� ��<><>2015/03/13(��) 00:00:00.00 ID:????????<> 3��13�����Q")===0) { - fclose($fp); - $this->getdat_error_msg_ht .= "

      rep2 error: API�o�R�ł̃X���b�h�擾�Ɏ��s���܂����B
      rep2 info: �X���b�h�����݂��Ȃ����ߋ����O�Ɋi�[����Ă��܂��B

      "; - $marutori_ht = " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&maru=true{$_conf['k_at_a']}\">��ID��rep2�Ɏ�荞��]"; - $marutori_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&shirokuma=true{$_conf['k_at_a']}\">offlaw�o�R��rep2�Ɏ�荞��]"; - $plugin_ht = $this->_generateWikiDatLink(); - $moritori_ht = $this->_generateMoritapoDatLink(); - $this->getdat_error_msg_ht .= "{$marutori_ht}{$moritori_ht}{$plugin_ht}"; - $this->diedat = true; - return false; - } - unset($firstmsg); - - // �����̉��s�ł��ځ[��`�F�b�N - if (!$zero_read) { - if (substr($body, 0, 1) != "\n") { - //echo "���ځ[�񌟏o"; - fclose($fp); - $this->onbytes = 0; - $this->modified = null; - return $this->_downloadDat2chAPI($sid,0); // ���ځ[�񌟏o�B�S����蒼���B - } - $body = substr($body, 1); - } - - $file_append = ($zero_read) ? 0 : FILE_APPEND; - - if (FileCtl::file_write_contents($this->keydat, $body, $file_append) === false) { - p2die('cannot write file.'); - } - - //$GLOBALS['debug'] && $GLOBALS['profiler']->enterSection("dat_size_check"); - // �擾��T�C�Y�`�F�b�N - if ($zero_read == false && $this->onbytes) { - $this->getDatBytesFromLocalDat(); // $aThread->length ��set - if ($this->onbytes != $this->length) { - fclose($fp); - $this->onbytes = 0; - $this->modified = null; - P2Util::pushInfoHtml("

      rep2 info: {$this->onbytes}/{$this->length} �t�@�C���T�C�Y���ςȂ̂ŁAdat���Ď擾

      "); - //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection("dat_size_check"); - return $this->_downloadDat2chAPI($sid,0); //dat�T�C�Y�͕s���B�S����蒼���B - - // �T�C�Y�������Ȃ炻�̂܂� - } elseif ($this->onbytes == $this->length) { - fclose($fp); - $this->isonline = true; - //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('dat_size_check'); - return true; - } + $meta = stream_get_meta_data ( $fp ); + foreach ( $meta ['wrapper_data'] as $l ) { + // ex) HTTP/1.1 304 Not Modified + if (preg_match ( '@^HTTP/1\\.\\d (\\d+) (.+)@i', $l, $matches )) { + $code = $matches [1]; + + if ($code == '200' || $code == '206') { // Partial Content + ; + } elseif ($code == '302') { // Found + + // �z�X�g�̈ړ]��ǐ� + $new_host = BbsMap::getCurrentHost ( $this->host, $this->bbs ); + if ($new_host != $this->host) { + fclose ( $fp ); + $this->old_host = $this->host; + $this->host = $new_host; + return $this->_downloadDat2chAPI ( $sid, $from_bytes ); + } else { + fclose ( $fp ); + return $this->_downloadDat2chNotFound ( $code ); } - //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('dat_size_check'); - - // �X���b�h���Ȃ��Ɣ��f + } elseif ($code == '304') { // Not Modified + fclose ( $fp ); + $this->isonline = true; + return '304 Not Modified'; + } elseif ($code == '416') { // Requested Range Not Satisfiable + // echo "���ځ[�񌟏o"; + fclose ( $fp ); + $this->onbytes = 0; + $this->modified = null; + return $this->_downloadDat2chAPI ( $sid, 0 ); // ���ځ[�񌟏o�B�S����蒼���B } else { - fclose($fp); - return $this->_downloadDat2chNotFound($code); + fclose ( $fp ); + return $this->_downloadDat2chNotFound ( $code ); + } + } + + if ($zero_read) { + if (preg_match ( '/^Content-Length: ([0-9]+)/i', $l, $matches )) { + $this->onbytes = intval ( $matches [1] ); } - } else { - $meta = stream_get_meta_data($fp); - foreach($meta['wrapper_data'] as $l) - { - // ex) HTTP/1.1 304 Not Modified - if (preg_match('@^HTTP/1\\.\\d (\\d+) (.+)@i', $l, $matches)) { - $code = $matches[1]; - - if ($code == '200' || $code == '206') { // Partial Content - ; - - } elseif ($code == '302') { // Found - - // �z�X�g�̈ړ]��ǐ� - $new_host = BbsMap::getCurrentHost($this->host, $this->bbs); - if ($new_host != $this->host) { - fclose($fp); - $this->old_host = $this->host; - $this->host = $new_host; - return $this->_downloadDat2chAPI($sid,$from_bytes); - } else { - fclose($fp); - return $this->_downloadDat2chNotFound($code); - } - - } elseif ($code == '304') { // Not Modified - fclose($fp); - $this->isonline = true; - return '304 Not Modified'; - - } elseif ($code == '416') { // Requested Range Not Satisfiable - //echo "���ځ[�񌟏o"; - fclose($fp); - $this->onbytes = 0; - $this->modified = null; - return $this->_downloadDat2chAPI($sid,0); // ���ځ[�񌟏o�B�S����蒼���B - - } else { - fclose($fp); - return $this->_downloadDat2chNotFound($code); - } + + if (preg_match ( '@^Content-Range: bytes ([^/]+)/([0-9]+)@i', $l, $matches )) { + $this->onbytes = intval ( $matches [2] ); + } + } + + if (preg_match ( '/^Last-Modified: (.+)/i', $l, $matches )) { + // echo $matches[1] . '
      '; //debug + $this->modified = $matches [1]; + } + } + + $body = ''; + + if ($code == '200' || $code == '206') { + + while ( ! p2_stream_eof ( $fp, $timed_out ) ) { + // >>1���v���r���[����p + if (! empty ( $_GET ['one'] )) { + $line = fgets ( $fp, 32800 ); // ���s�P�ʂœǍ��� + if (strstr ( $line, "\n" )) { // ���s���L��Εۑ�; + $body .= $line; } - - if ($zero_read) { - if (preg_match('/^Content-Length: ([0-9]+)/i', $l, $matches)) { - $this->onbytes = intval($matches[1]); - } - } else { - - if (preg_match('@^Content-Range: bytes ([^/]+)/([0-9]+)@i', $l, $matches)) { - $this->onbytes = intval($matches[2]); + unset ( $line ); + } else { + $body .= fread ( $fp, 4096 ); // �ʏ�擾�͂��ځ[�񔻒���s�����߂������ŕۑ����� + } + } + + if ($timed_out) { + self::_pushInfoReadTimedOut ( $url ); + $this->diedat = true; + fclose ( $fp ); + return false; + } + // 1�s�ڂ������؂�o�� + $firstmsg = trim ( substr ( $body, 0, 100 ) ); + if (strpos ( $firstmsg, 'ng ' ) === 0) { + // ng�Ŏn�܂��Ă���api�̃G���[�̉”\�� + if (preg_match ( "/^ng \((.*)\)$/", $firstmsg )) { + // �딻��h�~�̂���preg_match�œ�d�`�F�b�N���� + fclose ( $fp ); + if (strstr ( $firstmsg, "not valid" )) { + // sid�������ɂȂ����”\���B�������F�؂��邽�ߍŏ������蒼���B + if (empty ( $_REQUEST ['relogin2chapi'] )) { + $_REQUEST ['relogin2chapi'] = true; + return $this->downloadDat (); } - - } - - if (preg_match('/^Last-Modified: (.+)/i', $l, $matches)) { - //echo $matches[1] . '
      '; //debug - $this->modified = $matches[1]; } + $this->getdat_error_msg_ht .= "

      rep2 error: API�o�R�ł̃X���b�h�擾�Ɏ��s���܂����B" . $firstmsg . "

      "; + $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&relogin2chapi=true\">API�ōĎ擾�����݂�]"; + $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&olddat=true\">��dat�ōĎ擾�����݂�]"; + $this->diedat = true; + return false; + } + } elseif (strpos ( $firstmsg, "�Q�����˂� ��<><>2015/03/13(��) 00:00:00.00 ID:????????<> 3��13�����Q" ) === 0) { + fclose ( $fp ); + $this->getdat_error_msg_ht .= "

      rep2 error: API�o�R�ł̃X���b�h�擾�Ɏ��s���܂����B
      rep2 info: �X���b�h�����݂��Ȃ����ߋ����O�Ɋi�[����Ă��܂��B

      "; + $marutori_ht = " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&maru=true{$_conf['k_at_a']}\">��ID��rep2�Ɏ�荞��]"; + $marutori_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&shirokuma=true{$_conf['k_at_a']}\">offlaw�o�R��rep2�Ɏ�荞��]"; + $plugin_ht = $this->_generateWikiDatLink (); + $moritori_ht = $this->_generateMoritapoDatLink (); + $this->getdat_error_msg_ht .= "{$marutori_ht}{$moritori_ht}{$plugin_ht}"; + $this->diedat = true; + return false; + } + unset ( $firstmsg ); + + // �����̉��s�ł��ځ[��`�F�b�N + if (! $zero_read) { + if (substr ( $body, 0, 1 ) != "\n") { + // echo "���ځ[�񌟏o"; + fclose ( $fp ); + $this->onbytes = 0; + $this->modified = null; + return $this->_downloadDat2chAPI ( $sid, 0 ); // ���ځ[�񌟏o�B�S����蒼���B + } + $body = substr ( $body, 1 ); + } + + $file_append = ($zero_read) ? 0 : FILE_APPEND; + + if (FileCtl::file_write_contents ( $this->keydat, $body, $file_append ) === false) { + p2die ( 'cannot write file.' ); + } + + // $GLOBALS['debug'] && $GLOBALS['profiler']->enterSection("dat_size_check"); + // �擾��T�C�Y�`�F�b�N + if ($zero_read == false && $this->onbytes) { + $this->getDatBytesFromLocalDat (); // $aThread->length ��set + if ($this->onbytes != $this->length) { + fclose ( $fp ); + $this->onbytes = 0; + $this->modified = null; + P2Util::pushInfoHtml ( "

      rep2 info: {$this->onbytes}/{$this->length} �t�@�C���T�C�Y���ςȂ̂ŁAdat���Ď擾

      " ); + // $GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection("dat_size_check"); + return $this->_downloadDat2chAPI ( $sid, 0 ); // dat�T�C�Y�͕s���B�S����蒼���B + + // �T�C�Y�������Ȃ炻�̂܂� + } elseif ($this->onbytes == $this->length) { + fclose ( $fp ); + $this->isonline = true; + // $GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('dat_size_check'); + return true; } - $start_here = true; } + } else { + // �X���b�h���Ȃ��Ɣ��f + fclose ( $fp ); + return $this->_downloadDat2chNotFound ( $code ); } - - fclose($fp); + + fclose ( $fp ); if ($timed_out) { - self::_pushInfoReadTimedOut($url); + self::_pushInfoReadTimedOut ( $url ); $this->diedat = true; return false; } else { @@ -418,6 +389,83 @@ protected function _downloadDat2chAPI($sid,$from_bytes) } } + // }}} + // {{{ _freadHttpHeader() + /** + * HTTP�w�b�_���X�|���X��ǂݍ��� + * + * @access private + * @param resource $fp fsockopen �ŊJ�����t�@�C���|�C���^ + * @return array|false + */ + function _freadHttpHeader($fp) + { + $h = array(); + + while (!feof($fp)) { + $l = fgets($fp, 8192); + + // ex) HTTP/1.1 304 Not Modified + if (preg_match("|HTTP/1\.\d (\d+) (.+)\r\n|", $l, $matches)) { + $h['code'] = $matches[1]; + $h['message'] = $matches[2]; + $h['HTTP'] = rtrim($l); + } + + if (preg_match('/^(.+?): (.+)\r\n/', $l, $matches)) { + $h['headers'][$matches[1]] = $matches[2]; + + } elseif ($l == "\r\n") { + if (!isset($h['code'])) { + return false; + } + return $h; + } + } + + return false; + } + // }}} + // {{{ _pushInfoHtmlFreadHttpHeaderError() + /** + * HTTP�w�b�_���X�|���X�̎擾�G���[�� P2Util::pushInfoHtml() ���� + * + * @access private + * @return void + */ + function _pushInfoHtmlFreadHttpHeaderError($url) + { + P2Util::pushInfoHtml(sprintf('

      p2 info: %s ����w�b�_���X�|���X���擾�ł��܂���ł����B

      ',$url)); + } + // }}} + // {{{ _getOnbytesFromHeader() + /** + * HTTP�w�b�_���X�|���X����t�@�C���T�C�Y���擾���� + * + * @access private + * @param array $headers + * @param boolean $zero_read + * @return integer|false + */ + function _getOnbytesFromHeader($headers, $zero_read = true) + { + if ($zero_read) { + if (isset($headers['Content-Length'])) { + if (preg_match("/^([0-9]+)/", $headers['Content-Length'], $matches)) { + return $onbytes = $matches[1]; + } + } + + } else { + if (isset($headers['Content-Range'])) { + if (preg_match("/^bytes ([^\/]+)\/([0-9]+)/", $headers['Content-Range'], $matches)) { + return $onbytes = $matches[2]; + } + } + } + + return false; + } // }}} // {{{ _downloadDat2ch() @@ -517,156 +565,142 @@ protected function _downloadDat2ch($from_bytes) fputs($fp, $request); - $body = ''; $code = null; - $start_here = false; - - while (!p2_stream_eof($fp, $timed_out)) { - - if ($start_here) { - - if ($code == '200' || $code == '206') { - - while (!p2_stream_eof($fp, $timed_out)) { - //>>1���v���r���[����p - if (!empty($_GET['one'])) { - $line = fgets($fp, 32800); //���s�P�ʂœǍ��� - if (strstr($line, "\n")) {//���s���L��Εۑ�; - $body .= $line; - } - unset($line); - } else { - $body .= fread($fp, 4096); //�ʏ�擾�͂��ځ[�񔻒���s�����߂������ŕۑ����� - } - } - - if ($timed_out) { - self::_pushInfoReadTimedOut($url); - $this->diedat = true; - fclose($fp); - return false; - } - - //�z�X�g��2ch�̎���DAT�𗘗p�ł��Ȃ��|�̃��b�Z�[�W���o����G���[�Ƃ���iDAT�j���΍�j - if (P2Util::isHost2chs($this->host)) - { - $firstmsg = substr($body, 0, 100); - if (strpos($firstmsg, "�Q�����˂� ��<><>2015/03/13(��) 00:00:00.00 ID:????????<> 3��13�����Q")===0) { - $this->getdat_error_msg_ht .= "

      rep2 error: 2�����˂��DAT�񋟂͏I�����܂����B

      "; - $this->diedat = true; - fclose($fp); - return false; - } - unset($firstmsg); - } - - // �����̉��s�ł��ځ[��`�F�b�N - if (!$zero_read) { - if (substr($body, 0, 1) != "\n") { - //echo "���ځ[�񌟏o"; - fclose($fp); - $this->onbytes = 0; - $this->modified = null; - return $this->_downloadDat2ch(0); // ���ځ[�񌟏o�B�S����蒼���B - } - $body = substr($body, 1); - } - - $file_append = ($zero_read) ? 0 : FILE_APPEND; - - if (FileCtl::file_write_contents($this->keydat, $body, $file_append) === false) { - p2die('cannot write file.'); - } - - //$GLOBALS['debug'] && $GLOBALS['profiler']->enterSection("dat_size_check"); - // �擾��T�C�Y�`�F�b�N - if ($zero_read == false && $this->onbytes) { - $this->getDatBytesFromLocalDat(); // $aThread->length ��set - if ($this->onbytes != $this->length) { - fclose($fp); - $this->onbytes = 0; - $this->modified = null; - P2Util::pushInfoHtml("

      rep2 info: {$this->onbytes}/{$this->length} �t�@�C���T�C�Y���ςȂ̂ŁAdat���Ď擾

      "); - //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection("dat_size_check"); - return $this->_downloadDat2ch(0); //dat�T�C�Y�͕s���B�S����蒼���B - - // �T�C�Y�������Ȃ炻�̂܂� - } elseif ($this->onbytes == $this->length) { - fclose($fp); - $this->isonline = true; - //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('dat_size_check'); - return true; - } + + // HTTP�w�b�_���X�|���X���擾���� + $h = $this->_freadHttpHeader($fp); + if ($h === false) { + fclose($fp); + $this->_pushInfoHtmlFreadHttpHeaderError($url); + $this->diedat = true; + return false; + } + $code = $h['code']; + + if ($code == '200' || $code == '206') { // Partial Content + ; + + } elseif ($code == '302') { // Found + + // �z�X�g�̈ړ]��ǐ� + $new_host = BbsMap::getCurrentHost($this->host, $this->bbs); + if ($new_host != $this->host) { + fclose($fp); + $this->old_host = $this->host; + $this->host = $new_host; + return $this->_downloadDat2ch($from_bytes); + } else { + fclose($fp); + return $this->_downloadDat2chNotFound($code); + } + + } elseif ($code == '304') { // Not Modified + fclose($fp); + $this->isonline = true; + return '304 Not Modified'; + + } elseif ($code == '416') { // Requested Range Not Satisfiable + //echo "���ځ[�񌟏o"; + fclose($fp); + $this->onbytes = 0; + $this->modified = null; + return $this->_downloadDat2ch(0); // ���ځ[�񌟏o�B�S����蒼���B + + } else { + fclose($fp); + return $this->_downloadDat2chNotFound($code); + } + + $r = $this->_getOnbytesFromHeader($h['headers'], $zero_read); + if ($r !== false) { + $this->onbytes = $r; + } + + if (isset($h['headers']['Last-Modified'])) { + $this->modified = $h['headers']['Last-Modified']; + } + + // body��ǂ� + $body = ''; + if ($code == '200' || $code == '206') { + + while (!p2_stream_eof($fp, $timed_out)) { + //>>1���v���r���[����p + if (!empty($_GET['one'])) { + $line = fgets($fp, 32800); //���s�P�ʂœǍ��� + if (strstr($line, "\n")) {//���s���L��Εۑ�; + $body .= $line; } - //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('dat_size_check'); - - // �X���b�h���Ȃ��Ɣ��f + unset($line); } else { - fclose($fp); - return $this->_downloadDat2chNotFound($code); + $body .= fread($fp, 4096); //�ʏ�擾�͂��ځ[�񔻒���s�����߂������ŕۑ����� } - - } else { - $l = rtrim(fgets($fp, 32800), "\r\n"); - // ex) HTTP/1.1 304 Not Modified - if (preg_match('@^HTTP/1\\.\\d (\\d+) (.+)@i', $l, $matches)) { - $code = $matches[1]; - - if ($code == '200' || $code == '206') { // Partial Content - ; - - } elseif ($code == '302') { // Found - - // �z�X�g�̈ړ]��ǐ� - $new_host = BbsMap::getCurrentHost($this->host, $this->bbs); - if ($new_host != $this->host) { - fclose($fp); - $this->old_host = $this->host; - $this->host = $new_host; - return $this->_downloadDat2ch($from_bytes); - } else { - fclose($fp); - return $this->_downloadDat2chNotFound($code); - } - - } elseif ($code == '304') { // Not Modified - fclose($fp); - $this->isonline = true; - return '304 Not Modified'; - - } elseif ($code == '416') { // Requested Range Not Satisfiable - //echo "���ځ[�񌟏o"; - fclose($fp); - $this->onbytes = 0; - $this->modified = null; - return $this->_downloadDat2ch(0); // ���ځ[�񌟏o�B�S����蒼���B - - } else { - fclose($fp); - return $this->_downloadDat2chNotFound($code); - } + } + + if ($timed_out) { + self::_pushInfoReadTimedOut($url); + $this->diedat = true; + fclose($fp); + return false; + } + + //�z�X�g��2ch�̎���DAT�𗘗p�ł��Ȃ��|�̃��b�Z�[�W���o����G���[�Ƃ���iDAT�j���΍�j + if (P2Util::isHost2chs($this->host)) + { + $firstmsg = substr($body, 0, 100); + if (strpos($firstmsg, "�Q�����˂� ��<><>2015/03/13(��) 00:00:00.00 ID:????????<> 3��13�����Q")===0) { + $this->getdat_error_msg_ht .= "

      rep2 error: 2�����˂��DAT�񋟂͏I�����܂����B

      "; + $this->diedat = true; + fclose($fp); + return false; } - - if ($zero_read) { - if (preg_match('/^Content-Length: ([0-9]+)/i', $l, $matches)) { - $this->onbytes = intval($matches[1]); - } - } else { - - if (preg_match('@^Content-Range: bytes ([^/]+)/([0-9]+)@i', $l, $matches)) { - $this->onbytes = intval($matches[2]); - } - + unset($firstmsg); + } + + // �����̉��s�ł��ځ[��`�F�b�N + if (!$zero_read) { + if (substr($body, 0, 1) != "\n") { + //echo "���ځ[�񌟏o"; + fclose($fp); + $this->onbytes = 0; + $this->modified = null; + return $this->_downloadDat2ch(0); // ���ځ[�񌟏o�B�S����蒼���B } - - if (preg_match('/^Last-Modified: (.+)/i', $l, $matches)) { - //echo $matches[1] . '
      '; //debug - $this->modified = $matches[1]; - - } elseif ($l === '') { - $start_here = true; + $body = substr($body, 1); + } + + $file_append = ($zero_read) ? 0 : FILE_APPEND; + + if (FileCtl::file_write_contents($this->keydat, $body, $file_append) === false) { + p2die('cannot write file.'); + } + + //$GLOBALS['debug'] && $GLOBALS['profiler']->enterSection("dat_size_check"); + // �擾��T�C�Y�`�F�b�N + if ($zero_read == false && $this->onbytes) { + $this->getDatBytesFromLocalDat(); // $aThread->length ��set + if ($this->onbytes != $this->length) { + fclose($fp); + $this->onbytes = 0; + $this->modified = null; + P2Util::pushInfoHtml("

      rep2 info: {$this->onbytes}/{$this->length} �t�@�C���T�C�Y���ςȂ̂ŁAdat���Ď擾

      "); + //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection("dat_size_check"); + return $this->_downloadDat2ch(0); //dat�T�C�Y�͕s���B�S����蒼���B + + // �T�C�Y�������Ȃ炻�̂܂� + } elseif ($this->onbytes == $this->length) { + fclose($fp); + $this->isonline = true; + //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('dat_size_check'); + return true; } } + //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('dat_size_check'); + + } else { + // �X���b�h���Ȃ��Ɣ��f + fclose($fp); + return $this->_downloadDat2chNotFound($code); } fclose($fp); @@ -781,99 +815,106 @@ protected function _downloadDat2chMaru($uaMona, $SID2ch, $shirokuma) $chunked = false; $is_gzip = false; $start_here = false; + + // HTTP�w�b�_���X�|���X���擾���� + $h = $this->_freadHttpHeader($fp); + if ($h === false) { + fclose($fp); + $this->_pushInfoHtmlFreadHttpHeaderError($url); + $this->diedat = true; + return false; + } + + // {{{ HTTP�R�[�h���`�F�b�N + + $code = $h['code']; + + if ($code == '200') { + ; + } elseif ($code == '304') { + fclose($fp); + //$this->isonline = true; + return '304 Not Modified'; + } else { + fclose($fp); + return $this->_downloadDat2chMaruNotFound(); + } + + if (isset($h['headers']['Content-Encoding'])) { + if (preg_match("/^(x-)?gzip/", $h['headers']['Content-Encoding'], $matches)) { + $isGzip = true; + } + } + if (isset($h['headers']['Content-Length'])) { + if (preg_match("/^([0-9]+)/", $h['headers']['Content-Length'], $matches)) { + $this->onbytes = $h['headers']['Content-Length']; + } + } + if (isset($h['headers']['Transfer-Encoding'])) { + if ($h['headers']['Transfer-Encoding'] == 'chunked') { + $chunked = true; + } + } + if (isset($h['headers']['Last-Modified'])) { + $this->modified = $h['headers']['Last-Modified']; + } - while (!p2_stream_eof($fp, $timed_out)) { - - if ($start_here) { - - if ($code == '200') { - - while (!p2_stream_eof($fp, $timed_out)) { - $body .= fread($fp, 4096); - } - - if ($timed_out) { - self::_pushInfoReadTimedOut($url); - //$this->diedat = true; - fclose($fp); - return false; - } - - // gzip���k�Ȃ� - if ($is_gzip) { - $body = self::_decodeGzip($body, $url); - if ($body === null) { - //$this->diedat = true; - fclose($fp); - return false; - } - } - - if (FileCtl::file_write_contents($this->keydat, $body) === false) { - p2die('cannot write file. downloadDat2chMaru()'); - } - - // �N���[�j���O ===== - if ($marudatlines = FileCtl::file_read_lines($this->keydat)) { - if (!$shirokuma) { - $firstline = array_shift($marudatlines); - // �`�����N�Ƃ� - if (strpos($firstline, 'Success') === false) { // �Q�l(rokka)�Ή� - $secondline = array_shift($marudatlines); - } - } - $cont = ''; - foreach ($marudatlines as $aline) { - // �`�����N�G���R�[�f�B���O���~�����Ƃ���(HTTP 1.0�ł��̂�) - if ($chunked) { - $cont .= $aline; - } else { - $cont .= $aline; - } - } - if (FileCtl::file_write_contents($this->keydat, $cont) === false) { - p2die('cannot write file. downloadDat2chMaru()'); - } - } - - // dat.gz�͂Ȃ������Ɣ��f - } else { + if ($code == '200') { + + while (!p2_stream_eof($fp, $timed_out)) { + $body .= fread($fp, 4096); + } + + if ($timed_out) { + self::_pushInfoReadTimedOut($url); + //$this->diedat = true; + fclose($fp); + return false; + } + + // gzip���k�Ȃ� + if ($is_gzip) { + $body = self::_decodeGzip($body, $url); + if ($body === null) { + //$this->diedat = true; fclose($fp); - return $this->_downloadDat2chMaruNotFound(); + return false; } - - // �w�b�_�̏��� - } else { - $l = rtrim(fgets($fp, 128000), "\r\n"); - //echo $l.'
      ';// for debug - // ex) HTTP/1.1 304 Not Modified - if (preg_match('@^HTTP/1\\.\\d (\\d+) (.+)@', $l, $matches)) { - $code = $matches[1]; - - if ($code == '200') { - ; - } elseif ($code == '304') { - fclose($fp); - //$this->isonline = true; - return '304 Not Modified'; - } else { - fclose($fp); - return $this->_downloadDat2chMaruNotFound(); + } + + if (FileCtl::file_write_contents($this->keydat, $body) === false) { + p2die('cannot write file. downloadDat2chMaru()'); + } + + // �N���[�j���O ===== + if ($marudatlines = FileCtl::file_read_lines($this->keydat)) { + if (!$shirokuma) { + $firstline = array_shift($marudatlines); + // �`�����N�Ƃ� + if (strpos($firstline, 'Success') === false) { // �Q�l(rokka)�Ή� + $secondline = array_shift($marudatlines); } - - } elseif (preg_match('/^Content-Encoding: (?:x-)?gzip/i', $l)) { - $is_gzip = true; - } elseif (preg_match('/^Transfer-Encoding: (.+)/i', $l, $matches)) { // Transfer-Encoding: chunked - $t_enco = $matches[1]; - if ($t_enco == 'chunked') { - $chunked = true; + } + $cont = ''; + foreach ($marudatlines as $aline) { + // �`�����N�G���R�[�f�B���O���~�����Ƃ���(HTTP 1.0�ł��̂�) + if ($chunked) { + $cont .= $aline; + } else { + $cont .= $aline; } - } elseif ($l === '') { - $start_here = true; + } + if (FileCtl::file_write_contents($this->keydat, $cont) === false) { + p2die('cannot write file. downloadDat2chMaru()'); } } - + + } else { + // dat.gz�͂Ȃ������Ɣ��f + fclose($fp); + return $this->_downloadDat2chMaruNotFound(); } + fclose($fp); //$this->isonline = true; //$this->datochiok = 1; @@ -967,68 +1008,68 @@ protected function _downloadDat2chKako($uri, $ext) $code = null; $is_gzip = false; $start_here = false; + + // HTTP�w�b�_���X�|���X���擾���� + $h = $this->_freadHttpHeader($fp); + if ($h === false) { + fclose($fp); + $this->_pushInfoHtmlFreadHttpHeaderError($url); + $this->diedat = true; + return false; + } + + // {{{ HTTP�R�[�h���`�F�b�N + + $code = $h['code']; + + if ($code == '200') { + ; + } elseif ($code == '304') { + fclose($fp); + //$this->isonline = true; + return '304 Not Modified'; + } else { + fclose($fp); + return $this->_downloadDat2chMaruNotFound(); + } + + if (isset($h['headers']['Content-Encoding'])) { + if (preg_match("/^(x-)?gzip/", $h['headers']['Content-Encoding'], $matches)) { + $isGzip = true; + } + } - while (!p2_stream_eof($fp, $timed_out)) { - - if ($start_here) { - - if ($code == '200') { - - while (!p2_stream_eof($fp, $timed_out)) { - $body .= fread($fp, 4096); - } - - if ($timed_out) { - self::_pushInfoReadTimedOut($url); - $this->diedat = true; - fclose($fp); - return false; - } - - if ($is_gzip) { - $body = self::_decodeGzip($body, $url); - if ($body === null) { - $this->diedat = true; - fclose($fp); - return false; - } - } - - if (FileCtl::file_write_contents($this->keydat, $body) === false) { - p2die('cannot write file. downloadDat2chKako()'); - } - - // �Ȃ������Ɣ��f - } else { + if ($code == '200') { + + while (!p2_stream_eof($fp, $timed_out)) { + $body .= fread($fp, 4096); + } + + if ($timed_out) { + self::_pushInfoReadTimedOut($url); + $this->diedat = true; + fclose($fp); + return false; + } + + if ($is_gzip) { + $body = self::_decodeGzip($body, $url); + if ($body === null) { + $this->diedat = true; fclose($fp); - return $this->_downloadDat2chKakoNotFound($uri, $ext); - - } - - } else { - $l = rtrim(fgets($fp, 128000), "\r\n"); - if (preg_match('@^HTTP/1\\.\\d (\\d+) (.+)@', $l, $matches)) { // ex) HTTP/1.1 304 Not Modified - $code = $matches[1]; - - if ($code == '200') { - ; - } elseif ($code == '304') { - fclose($fp); - //$this->isonline = true; - return '304 Not Modified'; - } else { - fclose($fp); - return $this->_downloadDat2chKakoNotFound($uri, $ext); - } - - } elseif (preg_match('/^Content-Encoding: (?:x-)?gzip/i', $l)) { - $is_gzip = true; - } elseif ($l === '') { - $start_here = true; + return false; } } - + + if (FileCtl::file_write_contents($this->keydat, $body) === false) { + p2die('cannot write file. downloadDat2chKako()'); + } + } else { + // �Ȃ������Ɣ��f + fclose($fp); + return $this->_downloadDat2chKakoNotFound($uri, $ext); } + fclose($fp); //$this->isonline = true; return !$timed_out; diff --git a/lib/sb_print.inc.php b/lib/sb_print.inc.php index 137a06bd0..6a668b804 100644 --- a/lib/sb_print.inc.php +++ b/lib/sb_print.inc.php @@ -256,7 +256,7 @@ function sb_print($aThreadList) $row_class .= ' r_offline'; // JavaScript�ł̊m�F�_�C�A���O���� $unum_ht_c = <<- +- EOP; $row_class = ' nosubject'; @@ -265,13 +265,13 @@ function sb_print($aThreadList) $row_class .= ' r_new'; $midoku_ari = true; $unum_ht_c = <<{$aThread->unum} +{$aThread->unum} EOP; // subject.txt�ɂ͂��邪�A�V���Ȃ� } else { $unum_ht_c = <<{$aThread->unum} +{$aThread->unum} EOP; } } From 9562e704597d01a3ebe5f560ba02b9e15ae2a7f2 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Tue, 17 Mar 2015 12:15:58 +0900 Subject: [PATCH 066/339] =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E9=A0=85=E7=9B=AE?= =?UTF-8?q?=E3=82=92=E5=A2=97=E3=82=84=E3=81=97=E3=81=9F=20Mango=E6=9D=BF?= =?UTF-8?q?=E3=81=AE=E3=82=B9=E3=83=AC=E3=83=83=E3=83=89=E3=82=BF=E3=82=A4?= =?UTF-8?q?=E3=83=88=E3=83=AB=E8=A3=85=E9=A3=BE=E3=81=8C=E5=8F=8D=E6=98=A0?= =?UTF-8?q?=E3=81=95=E3=82=8C=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97?= =?UTF-8?q?=E3=81=9F=20http://anago.2ch.net/test/read.cgi/software/1425420?= =?UTF-8?q?543/769?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- conf/conf_user_def.inc.php | 16 ++++++++++++++++ lib/Thread.php | 2 ++ lib/ThreadRead.php | 5 +++-- lib/auth2chapi.inc.php | 7 ++++--- rep2/edit_conf_user.php | 3 +++ 6 files changed, 29 insertions(+), 6 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 5078177e0..0eef511cf 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150316.1120', // rep2�̃o�[�W���� + 'p2version' => '150317.1200', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index 0721d16fb..547fab700 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -411,6 +411,22 @@ // AppName $conf_user_def['2chapi_appname'] = ""; // ("") +// API�F�؂Ŏg�p����User-Agent +$conf_user_def['2chapi_ua.auth'] = "Monazilla/1.3"; // ("Monazilla/1.3") +$conf_user_sel['2chapi_ua.auth'] = array( + 'DOLIB/1.00' => '1 DOLIB/1.00', + 'Monazilla/1.3' => '2 Monazilla/1.3', + 'Monazilla/1.00 (%s)' => '3 Monazilla/1.00 (AppName)', + 'Mozilla/3.0 (compatible; %s)' => '4 Mozilla/3.0 (compatible; AppName)', +); + +//DAT�擾�Ŏg�p����User-Agent +$conf_user_def['2chapi_ua.read'] = "Mozilla/3.0 (compatible; %s)"; // ("Monazilla/1.3") +$conf_user_sel['2chapi_ua.read'] = array( + 'Monazilla/1.00 (%s)' => '1 Monazilla/1.00 (AppName)', + 'Mozilla/3.0 (compatible; %s)' => '2 Mozilla/3.0 (compatible; AppName)', +); + // �f�o�b�O�p�̏����o�͂��� $conf_user_def['2chapi_debug_print'] = 0; // (0) $conf_user_rad['2chapi_debug_print'] = array('1' => '����', '0' => '���Ȃ�'); diff --git a/lib/Thread.php b/lib/Thread.php index de6838704..a24bb0ae8 100644 --- a/lib/Thread.php +++ b/lib/Thread.php @@ -197,6 +197,8 @@ public function getTtitleHd() if ($this->_ttitle_hd === null) { // HTML�\���p�� htmlspecialchars() �������� $this->_ttitle_hd = p2h($this->ttitle, false); + // [�u���a��]�Ȃǂ��f�R�[�h + $this->_ttitle_hd = str_replace('</mark>', '', str_replace('<mark>', '', $this->_ttitle_hd)); } return $this->_ttitle_hd; } diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 31f4e0fcf..485886280 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -137,6 +137,8 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { $AppKey = $_conf ['2chapi_appkey']; $AppName = $_conf ['2chapi_appname']; $HMKey = $_conf ['2chapi_hmkey']; + $ReadUA = sprintf($_conf['2chapi_ua.read'],$AppName); + if (! ($this->host && $this->bbs && $this->key)) { return false; } @@ -166,7 +168,7 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { $message = '/v1/' . $serverName [0] . '/' . $this->bbs . '/' . $this->key . $sid . $AppKey; $HB = hash_hmac ( "sha256", $message, $HMKey ); - $headers = "User-Agent: Mozilla/3.0 (compatible; ${AppName})\r\n"; + $headers = "User-Agent: ${ReadUA}\r\n"; $headers .= "Connection: close\r\n"; $headers .= "Content-Type: application/x-www-form-urlencoded\r\n"; @@ -233,7 +235,6 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { if ($code == '200' || $code == '206') { // Partial Content ; } elseif ($code == '302') { // Found - // �z�X�g�̈ړ]��ǐ� $new_host = BbsMap::getCurrentHost ( $this->host, $this->bbs ); if ($new_host != $this->host) { diff --git a/lib/auth2chapi.inc.php b/lib/auth2chapi.inc.php index 32390cf1c..764403200 100644 --- a/lib/auth2chapi.inc.php +++ b/lib/auth2chapi.inc.php @@ -18,7 +18,8 @@ function authenticate_2chapi() $CT = time(); $AppKey = $_conf['2chapi_appkey']; $AppName = $_conf['2chapi_appname']; - $HMKey = $_conf['2chapi_hmkey']; + $HMKey = $_conf['2chapi_hmkey']; + $AuthUA = sprintf($_conf['2chapi_ua.auth'],$AppName); $login2chID = ""; $login2chPW = ""; $message = $AppKey.$CT; @@ -44,7 +45,7 @@ function authenticate_2chapi() 'ignore_errors' => true, 'method' => 'POST', 'header' => implode("\r\n", array( - 'User-Agent: Monazilla/1.3', + 'User-Agent: '.$AuthUA, 'X-2ch-UA: '.$AppName, 'Content-Type: application/x-www-form-urlencoded', )), @@ -71,7 +72,7 @@ function authenticate_2chapi() if($_conf['2chapi_debug_print']==1) { - P2Util::pushInfoHtml($response); + P2Util::pushInfoHtml($response."
      ".$AuthUA); } if($sid[0]!='SESSION-ID=Monazilla/1.00') { diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index f8b9273d5..3a6d23839 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -382,6 +382,9 @@ array('2chapi_appkey','AppKey', P2_EDIT_CONF_USER_LONGTEXT), array('2chapi_hmkey','HMkey', P2_EDIT_CONF_USER_LONGTEXT), array('2chapi_appname','AppName API�ɑ��M����A�v���P�[�V������ ��:Hoge/1.00'), + 'User-Agent', + array('2chapi_ua.auth','API�F�؂Ŏg�p����User-Agent'), + array('2chapi_ua.read','DAT�擾�Ŏg�p����User-Agent'), '�f�o�b�O�p', array('2chapi_debug_print','�f�o�b�O�p�̏����o�͂���'), '�F�؏���ύX�����ꍇ�ĔF�؂��Ă�������', From 1055715828374cc81ed27339e62362634710bead Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Tue, 17 Mar 2015 23:53:59 +0900 Subject: [PATCH 067/339] =?UTF-8?q?dig2ch=E3=82=92=E4=BF=AE=E6=AD=A3=20htt?= =?UTF-8?q?p://anago.2ch.net/test/read.cgi/software/1425420543/704?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/expack/tgrep/view.inc.php | 1 + rep2/dig2ch.php | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/expack/tgrep/view.inc.php b/lib/expack/tgrep/view.inc.php index 25f23fb0a..8112cece5 100644 --- a/lib/expack/tgrep/view.inc.php +++ b/lib/expack/tgrep/view.inc.php @@ -183,6 +183,7 @@ function sf() { + diff --git a/rep2/dig2ch.php b/rep2/dig2ch.php index 75c95fbff..56b2b537a 100644 --- a/rep2/dig2ch.php +++ b/rep2/dig2ch.php @@ -50,6 +50,7 @@ function dig2chsearch($query) } foreach ($jsontest1[result] as $jsontest2) { + $result['threads'][$n1] = new stdClass; $result['threads'][$n1]->title = $jsontest2[subject]; $result['threads'][$n1]->host = $jsontest2[server]; $result['threads'][$n1]->bbs = $jsontest2[bbs]; @@ -59,7 +60,7 @@ function dig2chsearch($query) $result['threads'][$n1]->dayres = $jsontest2[ikioi]; $n1++; } - $result['modified'] = $response['body']['date']; + $result['modified'] = isset($response['body']['date'])? $response['body']['date'] : ''; $result['profile']['regex'] = '/(' . $jsontest1[query] .')/i'; $result['profile']['hits'] = $jsontest1[found]; $result['profile']['cm0'] = str_replace("a href=" , "a target=\"_blank\" href=", $jsontest1[cm0]); From b808ad83a8ee82f991d752364a80401210cb3712 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Wed, 18 Mar 2015 00:44:48 +0900 Subject: [PATCH 068/339] =?UTF-8?q?=E6=B6=88=E3=81=97=E3=81=A6=E3=82=82?= =?UTF-8?q?=E5=AE=9F=E6=B3=81=E3=81=AB=E5=BD=B1=E9=9F=BF=E3=81=AA=E3=81=95?= =?UTF-8?q?=E3=81=9D=E3=81=86=E3=81=AA=E3=81=AE=E3=81=A7live/live=5FShowTh?= =?UTF-8?q?read.php=E3=82=92=E5=89=8A=E9=99=A4=20live=5Fread.php=E3=81=8B?= =?UTF-8?q?=E3=82=89=E5=AE=9F=E6=B3=81=E3=81=AB=E4=BD=BF=E3=82=8F=E3=81=AA?= =?UTF-8?q?=E3=81=84=E9=83=A8=E5=88=86=E3=82=92=E5=89=8A=E9=99=A4=20?= =?UTF-8?q?=E5=AE=9F=E6=B3=81=E3=83=A2=E3=83=BC=E3=83=89=E3=81=8B=E3=82=89?= =?UTF-8?q?=E3=81=AE=E6=9B=B8=E3=81=8D=E8=BE=BC=E3=81=BF=E3=81=A7Cookie?= =?UTF-8?q?=E7=A2=BA=E8=AA=8D=E3=81=8C=E7=99=BA=E7=94=9F=E3=81=97=E3=81=9F?= =?UTF-8?q?=E5=A0=B4=E5=90=88=E5=AE=9F=E6=B3=81=E3=83=A2=E3=83=BC=E3=83=89?= =?UTF-8?q?=E3=81=AB=E6=88=BB=E3=82=8C=E3=81=AA=E3=81=84=E4=B8=8D=E5=85=B7?= =?UTF-8?q?=E5=90=88=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/live/live_ShowThread.php | 2050 -------------------------------- lib/live/live_ShowThreadPc.php | 1999 ------------------------------- rep2/live_read.php | 209 +--- rep2/post.php | 8 + 4 files changed, 11 insertions(+), 4255 deletions(-) delete mode 100755 lib/live/live_ShowThread.php delete mode 100755 lib/live/live_ShowThreadPc.php diff --git a/lib/live/live_ShowThread.php b/lib/live/live_ShowThread.php deleted file mode 100755 index 9d205aedb..000000000 --- a/lib/live/live_ShowThread.php +++ /dev/null @@ -1,2050 +0,0 @@ -(<[Aa][ ].+?>)(.*?)()) # �����N�iPCRE�̓�����A�K�����̃p�^�[�����ŏ��Ɏ��s����j -| -(?: - (?P # ���p - ((?:>|��){1,2}[ ]?) # ���p�� - ( - (?:[1-9]\\d{0,3}) # 1�–ڂ̔ԍ� - (?: - (?:[ ]?(?:[,=]|�A)[ ]?[1-9]\\d{0,3})+ # �A�� - | - -(?:[1-9]\\d{0,3})? # �͈� - )? - ) - (?=\\D|$) - ) # ���p�����܂� -| # PHP 5.3����ɂ���Ȃ�A����\'�̃G�X�P�[�v���O���ANOWDOC�ɂ��� - (?P(ftp|h?t?tps?)://([0-9A-Za-z][\\w;/?:@=&$\\-_.+!*\'(),#%\\[\\]^~]+)) # URL - ([^\\s<>]*) # URL�̒���A�^�Oor�z���C�g�X�y�[�X�������܂ł̕����� -| - (?PID:[ ]?([0-9A-Za-z/.+]{8,11})(?=[^0-9A-Za-z/.+]|$)) # ID�i8,10�� +PC/�g�ю��ʃt���O�j -) -}x'; - - /** - * ���_�C���N�^�̎�� - * - * @var int - */ - const REDIRECTOR_NONE = 0; - const REDIRECTOR_IMENU = 1; - const REDIRECTOR_PINKTOWER = 2; - const REDIRECTOR_MACHIBBS = 3; - - /** - * NG���ځ[��̎�� - * - * @var int - */ - const ABORN = -1; - const NG_NONE = 0; - const NG_NAME = 1; - const NG_MAIL = 2; - const NG_ID = 4; - const NG_MSG = 8; - const NG_FREQ = 16; - const NG_CHAIN = 32; - const NG_AA = 64; - - // }}} - // {{{ static properties - - /** - * �܂Ƃߓǂ݃��[�h���̃X���b�h�� - * - * @var int - */ - static private $_matome_count = 0; - - /** - * �{���ȊO��NG���ځ[��Ƀq�b�g�������� - * - * @var int - */ - static protected $_ngaborns_head_hits = 0; - - /** - * �{����NG���ځ[��Ƀq�b�g�������� - * - * @var int - */ - static protected $_ngaborns_body_hits = 0; - - /** - * getAnchorRegex() �̃L���b�V�� - * - * @var array - */ - static private $_anchorRegexes = array(); - - /** - * _getAnchorRegexParts() �̃L���b�V�� - * - * @var array - */ - static private $_anchorRegexParts = null; - - // }}} - // {{{ properties - - /** - * �܂Ƃߓǂ݃��[�h���̃X���b�h�ԍ� - * - * @var int - */ - protected $_matome; - - /** - * URL����������֐��E���\�b�h���Ȃǂ��i�[����z�� - * (�g�ݍ���) - * - * @var array - */ - protected $_url_handlers; - - /** - * URL����������֐��E���\�b�h���Ȃǂ��i�[����z�� - * (���[�U��`�A�g�ݍ��݂̂��̂��D��) - * - * @var array - */ - protected $_user_url_handlers; - - /** - * �p�oID�����ځ[�񂷂� - * - * @var bool - */ - protected $_ngaborn_frequent; - - /** - * NG or ���ځ[�񃌃X�����邩�ǂ��� - * - * @var bool - */ - protected $_has_ngaborns; - - /** - * ���ځ[�񃌃X�ԍ������NG���X�ԍ����i�[����z�� - * array_intersect()�������悭�s�����߁A�Y�����郌�X�ԍ��͕�����ɃL���X�g���Ċi�[���� - * - * @var array - */ - protected $_aborn_nums; - protected $_ng_nums; - - /** - * ���_�C���N�^�̎�� - * - * @var int - */ - protected $_redirector; - - /** - * �X���b�h�I�u�W�F�N�g - * - * @var ThreadRead - */ - public $thread; - - /** - * �A�N�e�B�u���i�[�E�I�u�W�F�N�g - * - * @var ActiveMona - */ - public $activeMona; - - /** - * �A�N�e�B�u���i�[���L�����ۂ� - * - * @var bool - */ - public $am_enabled = false; - - /** - * ���p���Ă��郌�X�ԍ���o�^�����z�� - * - * @var array - */ - protected $_quote_res_nums; - - - /** - * ���p�`�F�b�N�ς݃��X�ԍ��̔z�� - * - * @var array - */ - protected $_quote_res_nums_checked; - - /** - * ���p�ϊ��ς݃��X�ԍ��̔z�� - * - * @var array - */ - protected $_quote_res_nums_done; - - /** - * ���X�ԍ��`�F�b�N�̍ċA�̐[�� - * - * @var int - */ - private $_quote_check_depth; - - /** - * �f�t�H���g�̖��O - * - * @var string - */ - protected $_nanashiName = null; - - /** - * ��A���J�[���W�v�����z��(�͈̓A���J�[�܂�) // [��Q�ƃ��X�� : [�Q�ƃ��X��, ...], ...) - * - * @var array - */ - protected $_quote_from = null; - - /** - * �A���J�[���W�v�����z��(�͈̓A���J�[����) // [���X�� : [�Q�Ɛ惌�X��, ...], ...) - * - * @var array - */ - protected $_quote_to = null; - - /** - * ���C�Ɏ��������N - * - * @var bool - */ - private $_auto_fav_rank = false; - - /** - * �����N����T���l�C���𐶐�����N���X�̃C���X�^���X - * - * @var ImageCache2_Thumbnailer - */ - public $thumbnailer; - - /** - * �C�����C���\������T���l�C���𐶐�����N���X�̃C���X�^���X - * - * @var ImageCache2_Thumbnailer - */ - public $inline_prvw; - - /** - * �C�����C���T���l�C����ID�����ڔ��� - * - * @var string - */ - public $thumb_id_suffix; - - /** - * �摜�ɕt�����郁�� - * - * @var string - */ - public $img_memo; - - /** - * �摜�Ƀ�����t���邽�߂̃N�G�������� - * - * @var string - */ - public $img_memo_query; - - /** - * �摜�𑜓x - * - * @var float - */ - public $img_dpr = 1.0; - - /** - * �摜�𑜓x���w�肷��N�G�������� - * - * @var string - */ - public $img_dpr_query; - - // }}} - // {{{ constructor - - /** - * �R���X�g���N�^ - */ - protected function __construct(ThreadRead $aThread, $matome = false) - { - global $_conf; - - // �X���b�h�I�u�W�F�N�g��o�^ - $this->thread = $aThread; - $this->str_to_link_regex = $this->_buildStrToLinkRegex(); - - // �܂Ƃߓǂ݃��[�h���ۂ� - if ($matome) { - $this->_matome = ++self::$_matome_count; - } else { - $this->_matome = false; - } - - $this->_url_handlers = array(); - $this->_user_url_handlers = array(); - - $this->_ngaborn_frequent = 0; - if ($_conf['ngaborn_frequent']) { - if ($_conf['ngaborn_frequent_dayres'] == 0) { - $this->_ngaborn_frequent = $_conf['ngaborn_frequent']; - } elseif ($this->thread->setDayRes() && $this->thread->dayres < $_conf['ngaborn_frequent_dayres']) { - $this->_ngaborn_frequent = $_conf['ngaborn_frequent']; - } - } - - $this->_has_ngaborns = false; - $this->_aborn_nums = array(); - $this->_ng_nums = array(); - - if (P2Util::isHostBbsPink($this->thread->host)) { - $this->_redirector = self::REDIRECTOR_PINKTOWER; - } elseif (P2Util::isHost2chs($this->thread->host)) { - $this->_redirector = self::REDIRECTOR_IMENU; - } elseif (P2Util::isHostMachiBbs($this->thread->host)) { - $this->_redirector = self::REDIRECTOR_MACHIBBS; - } else { - $this->_redirector = self::REDIRECTOR_NONE; - } - - $this->_quote_res_nums = array(); - $this->_quote_res_nums_checked = array(); - $this->_quote_res_nums_done = array(); - } - - // }}} - - /** - * @param void - * @return void - */ - protected function setBbsNonameName() - { - $st = new SettingTxt($this->thread->host, $this->thread->bbs); - $st->setSettingArray(); - if (array_key_exists('BBS_NONAME_NAME', $st->setting_array)) { - $BBS_NONAME_NAME = $st->setting_array['BBS_NONAME_NAME']; - if (strlen($BBS_NONAME_NAME)) { - $this->_nanashiName = $BBS_NONAME_NAME; - } - } - } - - // {{{ getDatToHtml() - - /** - * Dat��HTML�ϊ��������̂��擾���� - * - * @param bool $is_fragment - * @return bool|string - */ - public function getDatToHtml($is_fragment = false) - { - return $this->datToHtml(true, $is_fragment); - } - public function getDatToHtml_resFrom($is_fragment = false) - { - return $this->datToHtml_resFrom(true, $is_fragment); - } - - // }}} - // {{{ datToHtml() - - /** - * Dat��HTML�ɕϊ����ĕ\������ - * - * @param bool $capture true�Ȃ�ϊ����ʂ��o�͂����ɕԂ� - * @param bool $is_fragment true�Ȃ�
      �ň͂܂Ȃ� - * @return bool|string - */ - public function datToHtml($capture = false, $is_fragment = false) - { - global $_conf, $filter_hits, $last_hit_resnum; - - $aThread = $this->thread; - - // �\�����X�͈͂��w�肳��Ă��Ȃ���� - if (!$aThread->resrange) { - $error = '

      p2 error: {$this->resrange} is false at datToHtml()

      '; - if ($capture) { - return $error; - } else { - echo $error; - return false; - } - } - - $start = $aThread->resrange['start']; - $to = $aThread->resrange['to']; - $nofirst = $aThread->resrange['nofirst']; - - $is_ktai = $_conf['ktai']; - $resFilter = ResFilter::getFilter(); - if ($resFilter && $resFilter->hasWord()) { - $do_filtering = true; - $nofirst = true; - } else { - $do_filtering = false; - } - - $datlines = $aThread->datlines; - $count = count($datlines); - - $buf['body'] = $is_fragment ? '' : "
      \n"; - $buf['q'] = ''; - - // �܂� 1 ��\�� - if (!$nofirst) { - $res = $this->transRes($datlines[0], 1); - if (is_array($res)) { - $buf['body'] .= $res['body']; - $buf['q'] .= $res['q'] ? $res['q'] : ''; - } else { - $buf['body'] .= $res; - } - } - - // �A���̂��߁A�͈͊O��NG���ځ[��`�F�b�N - if ($_conf['ngaborn_chain_all'] && empty($_GET['nong'])) { - $pre = min($count, $start); - for ($i = ($nofirst) ? 0 : 1; $i < $pre; $i++) { - $n = $i + 1; - list($name, $mail, $date_id, $msg) = $aThread->explodeDatLine($datlines[$i]); - if (($id = $aThread->ids[$n]) !== null) { - $date_id = str_replace($aThread->idp[$n] . $id, "ID:$id", $date_id); - } - $this->_ngAbornCheck($n, strip_tags($name), $mail, $date_id, $id, $msg); - } - } - - // �t�B���^�����O - if ($do_filtering) { - $datlines = $resFilter->apply($this); - $filter_hits = $resFilter->hits; - $last_hit_resnum = $resFilter->last_hit_resnum; - } - - // �w��͈͂�\�� - $i = 0; - $n = 0; - $rn = 0; - - if ($do_filtering) { - if (!empty($resFilter->range)) { - $start = $resFilter->range['start']; - $to = $resFilter->range['to']; - } - $pattern = $resFilter->getPattern(); - } else { - $pattern = null; - } - - foreach ($datlines as $i => $ares) { - if ($ares === null) { - continue; - } - $n++; - if ($i === 0 && !$nofirst) { - continue; - } - if ($n < $start) { - continue; - } - if ($n > $to) { - break; - } - $rn = $i + 1; - $res = $this->transRes($ares, $rn, $pattern); - if (is_array($res)) { - $buf['body'] .= $res['body']; - $buf['q'] .= $res['q'] ? $res['q'] : ''; - } else { - $buf['body'] .= $res; - } - if (!$capture && $n % 10 == 0) { - echo $buf['body']; - if ($do_filtering && !$is_ktai) { - echo "\n"; - } - flush(); - $buf['body'] = ''; - } - } - - if ($this->thread->readnum < $rn) { - $this->thread->readnum = $rn; - } - - if ($do_filtering && !$is_ktai) { - $buf['body'] .= "\n"; - } - -// +live �I�[�g�����[�h�����X�����e�̕\���� -echo <<
      \n -LIVE; - - if (!$is_fragment) { - $buf['body'] .= "
      \n"; - } - - if ($capture) { - return $buf['body'] . $buf['q']; - } else { - echo $buf['body']; - echo $buf['q']; - flush(); - return true; - } - } - - /** - * �w��̏����݂ւ̃��X��HTML�ɕϊ����ĕ\������ - * - * @param bool $capture true�Ȃ�ϊ����ʂ��o�͂����ɕԂ� - * @param bool $is_fragment true�Ȃ�
      �ň͂܂Ȃ� - * @param bool $show_rootres true�Ȃ�w��̏����݂����ʂɊ܂߂� - * @return bool|string - */ - public function datToHtml_resFrom($capture = false, $is_fragment = false, $show_rootres = false) - { - global $_conf; - - $aThread = $this->thread; - - // �\�����X���w�肳��Ă��Ȃ���� - $target = $aThread->resrange['start']; - if (!$aThread->resrange || $target != $aThread->resrange['to']) { - $error = '

      p2 error: {$this->resrange} is false at datToHtml()

      '; - if ($capture) { - return $error; - } else { - echo $error; - return false; - } - } - - $datlines = $aThread->datlines; - $count = count($datlines); - - $buf['body'] = $is_fragment ? '' : "
      \n"; - $buf['q'] = ''; - - // �A���̂��߁A�͈͊O��NG���ځ[��`�F�b�N - if ($_conf['ngaborn_chain_all'] && empty($_GET['nong'])) { - $pre = min($count, $start); - for ($i = ($nofirst) ? 0 : 1; $i < $pre; $i++) { - $n = $i + 1; - list($name, $mail, $date_id, $msg) = $aThread->explodeDatLine($datlines[$i]); - if (($id = $aThread->ids[$n]) !== null) { - $date_id = str_replace($aThread->idp[$n] . $id, "ID:$id", $date_id); - } - $this->_ngAbornCheck($n, strip_tags($name), $mail, $date_id, $id, $msg); - } - } - - // ���X�W�J - $datlines = array_fill(0, count($aThread->datlines), null); - if ($show_rootres) { - $datlines[$target - 1] = $aThread->datlines[$target - 1]; - } - list($name, $mail, $date_id, $msg) = - $aThread->explodeDatLine($aThread->datlines[$target - 1]); - foreach ($this->checkQuoteResNums($target, $name, $msg, false, true, false) as $rn) { - $ri = $rn - 1; - if ($datlines[$ri] === null) { - $datlines[$ri] = $aThread->datlines[$ri]; - } - } - - // �\�� - $i = 0; - $n = 0; - $rn = 0; - foreach ($datlines as $i => $ares) { - if ($ares === null) { - continue; - } - $n++; - $rn = $i + 1; - $res = $this->transRes($ares, $rn); - if (is_array($res)) { - $buf['body'] .= $res['body']; - $buf['q'] .= $res['q'] ? $res['q'] : ''; - } else { - $buf['body'] .= $res; - } - if (!$capture && $n % 10 == 0) { - echo $buf['body']; - flush(); - $buf['body'] = ''; - } - } - - if (!$is_fragment) { - $buf['body'] .= "
      \n"; - } - - if ($capture) { - return $buf['body'] . $buf['q']; - } else { - echo $buf['body']; - echo $buf['q']; - flush(); - return true; - } - } - - // }}} - // {{{ transRes() - - /** - * Dat���X��HTML���X�ɕϊ����� - * - * @param string $ares dat��1���C�� - * @param int $i ���X�ԍ� - * @return string - */ - abstract public function transRes($ares, $i); - - // }}} - // {{{ transName() - - /** - * ���O��HTML�p�ɕϊ����� - * - * @param string $name ���O - * @return string - */ - abstract public function transName($name); - - // }}} - // {{{ transMsg() - - /** - * dat�̃��X���b�Z�[�W��HTML�\���p���b�Z�[�W�ɕϊ����� - * - * @param string $msg ���b�Z�[�W - * @param int $mynum ���X�ԍ� - * @return string - */ - abstract public function transMsg($msg, $mynum); - - // }}} - // {{{ replaceBeId() - - /** - * BE�v���t�@�C�������N�ϊ� - */ - public function replaceBeId($date_id, $i) - { - global $_conf; - - $beid_replace = "thread->host}/test/read.cgi/{$this->thread->bbs}/{$this->thread->key}/{$i}\"{$_conf['ext_win_target_at']}>Lv.\$2"; - - // - $be_match = '||i'; - if (preg_match($be_match, $date_id)) { - $date_id = preg_replace($be_match, $beid_replace, $date_id); - - } else { - - $beid_replace = "thread->host}/test/read.cgi/{$this->thread->bbs}/{$this->thread->key}/{$i}\"{$_conf['ext_win_target_at']}>?\$2"; - $date_id = preg_replace('|BE: ?(\d+)-(#*)|i', $beid_replace, $date_id); - } - - return $date_id; - } - - // }}} - // {{{ _ngAbornCheck() - - /** - * NG���ځ[��`�F�b�N - * - * @param int $i ���X�ԍ� - * @param string $name ���O�� - * @param string $mail ���[���� - * @param string $date_id ���t�EID�� - * @param string $id ID - * @param string $msg ���X�{�� - * @param bool $nong NG�`�F�b�N�����邩�ǂ��� - * @param array &$info NG�̗��R���i�[�����ϐ��̎Q�� - * @return int NG�^�C�v�BShowThread::NG_XXX �̃r�b�g�a�� ShowThread::ABORN - */ - protected function _ngAbornCheck($i, $name, $mail, $date_id, $id, $msg, $nong = false, &$info = null) - { - global $_conf, $ngaborns_hits; - - $info = array(); - $type = self::NG_NONE; - - // {{{ �p�oID�`�F�b�N - - if ($this->_ngaborn_frequent && $id && $this->thread->idcount[$id] >= $_conf['ngaborn_frequent_num']) { - if (!$_conf['ngaborn_frequent_one'] && $id == $this->thread->ids[1]) { - // >>1 �͂��̂܂ܕ\�� - } elseif ($this->_ngaborn_frequent == 1) { - $ngaborns_hits['aborn_freq']++; - return $this->_markNgAborn($i, self::ABORN, false); - } elseif (!$nong) { - $ngaborns_hits['ng_freq']++; - $type |= $this->_markNgAborn($i, self::NG_FREQ, false); - $info[] = sprintf('�p�oID:%s(%d)', $id, $this->thread->idcount[$id]); - } - } - - // }}} - // {{{ �A���`�F�b�N - - if ($_conf['ngaborn_chain'] && $this->_has_ngaborns && - preg_match_all('/(?:>|��)([1-9][0-9\\-,]*)/', $msg, $matches) - ) { - $references = array_unique(preg_split('/[-,]+/', - trim(implode(',', $matches[1]), '-,'), - -1, - PREG_SPLIT_NO_EMPTY)); - $intersections = array_intersect($references, $this->_aborn_nums); - $info_suffix = ''; - - if ($intersections) { - if ($_conf['ngaborn_chain'] == 1) { - $ngaborns_hits['aborn_chain']++; - return $this->_markNgAborn($i, self::ABORN, true); - } - if ($nong) { - $intersections = null; - } else { - $info_suffix = '(' . (($_conf['ktai']) ? '����' : '���ځ[��') . ')'; - } - } elseif (!$nong) { - $intersections = array_intersect($references, $this->_ng_nums); - } - - if ($intersections) { - $ngaborns_hits['ng_chain']++; - $type |= $this->_markNgAborn($i, self::NG_CHAIN, true); - $info[] = sprintf('�A��NG:>>%d%s', current($intersections), $info_suffix); - } - } - - // }}} - // {{{ ���ځ[��`�F�b�N - - // ���ځ[�񃌃X - if ($this->abornResCheck($i) !== false) { - $ngaborns_hits['aborn_res']++; - return $this->_markNgAborn($i, self::ABORN, false); - } - - // ���ځ[��l�[�� - if ($this->ngAbornCheck('aborn_name', $name) !== false) { - $ngaborns_hits['aborn_name']++; - return $this->_markNgAborn($i, self::ABORN, false); - } - - // ���ځ[�񃁁[�� - if ($this->ngAbornCheck('aborn_mail', $mail) !== false) { - $ngaborns_hits['aborn_mail']++; - return $this->_markNgAborn($i, self::ABORN, false); - } - - // ���ځ[��ID - if ($this->ngAbornCheck('aborn_id', $date_id) !== false) { - $ngaborns_hits['aborn_id']++; - return $this->_markNgAborn($i, self::ABORN, false); - } - - // ���ځ[�񃁃b�Z�[�W - if ($this->ngAbornCheck('aborn_msg', $msg) !== false) { - $ngaborns_hits['aborn_msg']++; - return $this->_markNgAborn($i, self::ABORN, true); - } - - // }}} - - if ($nong) { - return $type; - } - - // {{{ NG�`�F�b�N - - // NG�l�[���`�F�b�N - if ($this->ngAbornCheck('ng_name', $name) !== false) { - $ngaborns_hits['ng_name']++; - $type |= $this->_markNgAborn($i, self::NG_NAME, false); - } - - // NG���[���`�F�b�N - if ($this->ngAbornCheck('ng_mail', $mail) !== false) { - $ngaborns_hits['ng_mail']++; - $type |= $this->_markNgAborn($i, self::NG_MAIL, false); - } - - // NGID�`�F�b�N - if ($this->ngAbornCheck('ng_id', $date_id) !== false) { - $ngaborns_hits['ng_id']++; - $type |= $this->_markNgAborn($i, self::NG_ID, false); - } - - // NG���b�Z�[�W�`�F�b�N - $a_ng_msg = $this->ngAbornCheck('ng_msg', $msg); - if ($a_ng_msg !== false) { - $ngaborns_hits['ng_msg']++; - $type |= $this->_markNgAborn($i, self::NG_MSG, true); - $info[] = sprintf('NG%s:%s', - ($_conf['ktai']) ? 'ܰ��' : '���[�h', - p2h($a_ng_msg)); - } - - // }}} - - return $type; - } - - // }}} - // {{{ _markNgAborn() - - /** - * NG���ځ[��Ƀq�b�g�������X�ԍ����L�^���� - * - * @param int $num ���X�ԍ� - * @param int $type NG���ځ[��̎�� - * @param bool $isBody �{���Ƀq�b�g�������ǂ��� - * @return int $type�Ɠ����l - */ - protected function _markNgAborn($num, $type, $isBody) - { - if ($type) { - if ($isBody) { - self::$_ngaborns_body_hits++; - } else { - self::$_ngaborns_head_hits++; - } - - // array_intersect()�������悭�s�����߁A���X�ԍ��𕶎���^�ɃL���X�g���� - $str = (string)$num; - if ($type == self::ABORN) { - $this->_aborn_nums[$num] = $str; - } else { - $this->_ng_nums[$num] = $str; - } - - $this->_has_ngaborns = true; - } - - return $type; - } - - // }}} - // {{{ ngAbornCheck() - - /** - * NG���ځ[��`�F�b�N - */ - public function ngAbornCheck($code, $resfield, $ic = false) - { - global $ngaborns; - - //$GLOBALS['debug'] && $GLOBALS['profiler']->enterSection('ngAbornCheck()'); - - if (isset($ngaborns[$code]['data']) && is_array($ngaborns[$code]['data'])) { - // +Wiki:BE���ځ[�� - if ($code == 'aborn_be' || $code == 'ng_be') { - // �v���t�B�[��ID�𔲂��o�� - if (preg_match('/BE:(\\d+)/', $resfield, $matches)) { - $beId = P2UtilWiki::calcBeId((int)$matches[1]); - if ($beId === 0) { - return false; - } - $resfield = (string)$beId; - } else { - return false; - } - } - - $bbs = $this->thread->bbs; - $title = $this->thread->ttitle_hc; - - foreach ($ngaborns[$code]['data'] as $k => $v) { - // �ƒ`�F�b�N - if (isset($v['bbs']) && in_array($bbs, $v['bbs']) == false) { - continue; - } - - // �^�C�g���`�F�b�N - if (isset($v['title']) && stripos($title, $v['title']) === false) { - continue; - } - - // ���[�h�`�F�b�N - // ���K�\�� - if ($v['regex']) { - $re_method = $v['regex']; - /*if ($re_method($v['word'], $resfield, $matches)) { - $this->ngAbornUpdate($code, $k); - //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('ngAbornCheck()'); - return p2h($matches[0]); - }*/ - if ($re_method($v['word'], $resfield)) { - $this->ngAbornUpdate($code, $k); - //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('ngAbornCheck()'); - return $v['cond']; - } - // +Wiki:BE���ځ[��(���S��v) - } elseif ($code == 'aborn_be' || $code == 'ng_be') { - if ($resfield == $v['word']) { - $this->ngAbornUpdate($code, $k); - //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('ngAbornCheck()'); - return $v['cond']; - } - // �啶���������𖳎� - } elseif ($ic || $v['ignorecase']) { - if (stripos($resfield, $v['word']) !== false) { - $this->ngAbornUpdate($code, $k); - //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('ngAbornCheck()'); - return $v['cond']; - } - // �P���ɕ����񂪊܂܂�邩�ǂ������`�F�b�N - } else { - if (strpos($resfield, $v['word']) !== false) { - $this->ngAbornUpdate($code, $k); - //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('ngAbornCheck()'); - return $v['cond']; - } - } - } - } - - //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('ngAbornCheck()'); - return false; - } - - // }}} - // {{{ abornResCheck() - - /** - * ���背�X�̓������ځ[��`�F�b�N - */ - public function abornResCheck($resnum) - { - global $ngaborns; - - $target = $this->thread->host . '/' . $this->thread->bbs . '/' . $this->thread->key . '/' . $resnum; - - if (isset($ngaborns['aborn_res']['data']) && is_array($ngaborns['aborn_res']['data'])) { - foreach ($ngaborns['aborn_res']['data'] as $k => $v) { - if ($ngaborns['aborn_res']['data'][$k]['word'] == $target) { - $this->ngAbornUpdate('aborn_res', $k); - return true; - } - } - } - return false; - } - - // }}} - // {{{ ngAbornUpdate() - - /** - * NG/���ځ`������Ɖ񐔂��X�V - */ - public function ngAbornUpdate($code, $k) - { - global $ngaborns; - - if (isset($ngaborns[$code]['data'][$k])) { - $ngaborns[$code]['data'][$k]['lasttime'] = date('Y/m/d G:i'); // HIT���Ԃ��X�V - if (empty($ngaborns[$code]['data'][$k]['hits'])) { - $ngaborns[$code]['data'][$k]['hits'] = 1; // ��HIT - } else { - $ngaborns[$code]['data'][$k]['hits']++; // HIT�񐔂��X�V - } - } - } - - // }}} - // {{{ addURLHandler() - - /** - * ���[�U��`URL�n���h���i���b�Z�[�W����URL������������֐��j��lj����� - * - * �n���h���͍ŏ��ɒlj����ꂽ���̂��珇�ԂɎ��s����� - * URL�̓n���h���̕Ԃ�l�i������j�Œu������� - * false���A�����ꍇ�͎��̃n���h���ɏ������ς˂��� - * - * ���[�U��`URL�n���h���̈����� - * 1. string $url URL - * 2. array $purl URL��parse_url()�������� - * 3. string $str �p�^�[���Ƀ}�b�`����������AURL�Ɠ������Ƃ����� - * 4. object $aShowThread �Ăяo�����̃I�u�W�F�N�g - * �ł��� - * ���false��Ԃ��A�����ŏ������邾���̊֐���o�^���Ă��悢 - * - * @param callback $function �R�[���o�b�N���\�b�h - * @return void - * @access public - * @todo ���[�U��`URL�n���h���̃I�[�g���[�h�@�\������ - */ - public function addURLHandler($function) - { - $this->_user_url_handlers[] = $function; - } - - // }}} - // {{{ stripLineBreaks() - - /** - * �����̉��s�ƘA��������s����菜�� - * - * @param string $msg - * @param string $replacement - * @return string - */ - public function stripLineBreaks($msg, $replacement = '

      ') - { - if (P2_MBREGEX_AVAILABLE) { - $msg = mb_ereg_replace('(?:[\\s�@]*
      )+[\\s�@]*$', '', $msg); - $msg = mb_ereg_replace('(?:[\\s�@]*
      ){3,}', $replacement, $msg); - } else { - mb_convert_variables('UTF-8', 'CP932', $msg, $replacement); - $msg = preg_replace('/(?:[\\s\\x{3000}]*
      )+[\\s\\x{3000}]*$/u', '', $msg); - $msg = preg_replace('/(?:[\\s\\x{3000}]*
      ){3,}/u', $replacement, $msg); - $msg = mb_convert_encoding($msg, 'CP932', 'UTF-8'); - } - - return $msg; - } - - // }}} - // {{{ transLink() - - /** - * �����N�Ώە������ϊ����� - * - * @param string $str - * @return string - */ - public function transLink($str) - { - return preg_replace_callback($this->str_to_link_regex, array($this, 'transLinkDo'), $str); - } - - // }}} - // {{{ transLinkDo() - - /** - * �����N�Ώە�����̎�ނ𔻒肵�đΉ������֐�/���\�b�h�ɓn�� - * - * @param array $s - * @return string - */ - public function transLinkDo(array $s) - { - global $_conf; - - $orig = $s[0]; - $following = ''; - - // PHP 5.2.7 ������ preg_replace_callback() �ł͖��O�t���ߊl���W�����g���Ȃ��̂� - /* - if (!array_key_exists('link', $s)) { - $s['link'] = $s[1]; - $s['quote'] = $s[5]; - $s['url'] = $s[8]; - $s['id'] = $s[11]; - } - */ - - // �}�b�`�����T�u�p�^�[���ɉ����ĕ��� - // �����N - if ($s['link']) { - if (preg_match('{ href=(["\'])?(.+?)(?(1)\\1)(?=[ >])}i', $s[2], $m)) { - $url = $m[2]; - $str = $s[3]; - } else { - return $s[3]; - } - - // ���p - } elseif ($s['quote']) { - return preg_replace_callback( - self::getAnchorRegex('/(%prefix%)?(%a_range%)/'), - array($this, '_quoteResCallback'), $s['quote']); - - // http or ftp ��URL - } elseif ($s['url']) { - if ($_conf['ktai'] && $s[9] == 'ftp') { - return $orig; - } - $url = preg_replace('/^t?(tps?)$/', 'ht$1', $s[9]) . '://' . $s[10]; - $str = $s['url']; - $following = $s[11]; - if (strlen($following) > 0) { - // �E�B�L�y�f�B�A���{��ł�URL�ŁASJIS��2�o�C�g�����̏�ʃo�C�g - // (0x81-0x9F,0xE0-0xEF)�������Ƃ� - if (P2Util::isUrlWikipediaJa($url)) { - $leading = ord($following); - if ((($leading ^ 0x90) < 32 && $leading != 0x80) || ($leading ^ 0xE0) < 16) { - $url .= rawurlencode(mb_convert_encoding($following, 'UTF-8', 'CP932')); - $str .= $following; - $following = ''; - } - } elseif (strpos($following, 'tp://') !== false) { - // �S�p�X�y�[�X+URL���̏ꍇ������̂ōă`�F�b�N - $following = $this->transLink($following); - } - } - - // ID - } elseif ($s['id'] && $_conf['flex_idpopup']) { // && $_conf['flex_idlink_k'] - return $this->idFilter($s['id'], $s[12]); - - // ���̑��i�\���j - } else { - return strip_tags($orig); - } - - // ���_�C���N�^���O�� - switch ($this->_redirector) { - case self::REDIRECTOR_IMENU: - $url = preg_replace('{^([a-z]+://)ime\\.nu/}', '$1', $url); - break; - case self::REDIRECTOR_PINKTOWER: - $url = preg_replace('{^([a-z]+://)pinktower\\.com/}', '$1', $url); - break; - case self::REDIRECTOR_MACHIBBS: - $url = preg_replace('{^[a-z]+://machi(?:bbs\\.com|\\.to)/bbs/link\\.cgi\\?URL=}', '', $url); - break; - } - - // �G�X�P�[�v����Ă��Ȃ����ꕶ�����G�X�P�[�v - $url = p2h($url, false); - $str = p2h($str, false); - // ���ԎQ�ƁE���l�Q�Ƃ����S�Ƀf�R�[�h���悤�Ƃ���ƕ��ׂ��傫�����A - // "&"�ȊO�̓��ꕶ���͂قƂ�ǂ̏ꍇURL�G���R�[�h����Ă���͂��Ȃ̂� - // ���r���[�ɋÂ��������͂����A"&"��"&"�̂ݍĕϊ�����B - $raw_url = str_replace('&', '&', $url); - - // URL���p�[�X�E�z�X�g������ - $purl = @parse_url($raw_url); - if (!$purl || !array_key_exists('host', $purl) || - strpos($purl['host'], '.') === false || - $purl['host'] == '127.0.0.1' || - //HostCheck::isAddressLocal($purl['host']) || - //HostCheck::isAddressPrivate($purl['host']) || - P2Util::isHostExample($purl['host'])) - { - return $orig; - } - // URL�̃}�b�`���O��"&"���l�����Ȃ��čςނ悤�ɁA����URL��o�^���Ă��� - $purl[0] = $raw_url; - - // URL������ - foreach ($this->_user_url_handlers as $handler) { - if (false !== ($link = call_user_func($handler, $url, $purl, $str, $this))) { - return $link . $following; - } - } - foreach ($this->_url_handlers as $handler) { - if (false !== ($link = $this->$handler($url, $purl, $str))) { - return $link . $following; - } - } - - return $orig; - } - - // }}} - // {{{ idFilter() - - /** - * ID�t�B���^�����O�ϊ� - * - * @param string $idstr ID:xxxxxxxxxx - * @param string $id xxxxxxxxxx - * @return string - */ - abstract public function idFilter($idstr, $id); - - // }}} - // {{{ _idFilterCallback() - - /** - * ID�t�B���^�����O�ϊ� - * - * @param array $s ���K�\���Ƀ}�b�`�����v�f�̔z�� - * @return string - */ - protected function _idFilterCallback(array $s) - { - return $this->idFilter($s[0], $s[1]); - } - - // }}} - // {{{ _quoteNameCallback() - - /** - * @param array $s - * @return string HTML - */ - protected function _quoteNameCallback($s) - { - return preg_replace_callback( - self::getAnchorRegex('/(%prefix%)?(%a_num%)/'), - array($this, '_quoteResCallback'), $s[0] - ); - } - - // }}} - // {{{ quoteRes() - - /** - * ���p�ϊ��i�P�Ɓj - * - * @param string $full >>1 - * @param string $qsign >> - * @param string $appointed_num 1 - * @return string - */ - abstract public function quoteRes($full, $qsign, $appointed_num); - - // }}} - // {{{ _quoteResCallback() - - /** - * ���p�ϊ��i�P�Ɓj - * - * @param array $s ���K�\���Ƀ}�b�`�����v�f�̔z�� - * @return string - */ - protected function _quoteResCallback(array $s) - { - return $this->quoteRes($s[0], $s[1], $s[2]); - } - - // }}} - // {{{ quoteResRange() - - /** - * ���p�ϊ��i�͈́j - * - * @param string $full >>1-100 - * @param string $qsign >> - * @param string $appointed_num 1-100 - * @return string - */ - abstract public function quoteResRange($full, $qsign, $appointed_num); - - // }}} - // {{{ _quoteResRangeCallback() - - /** - * ���p�ϊ��i�͈́j - * - * @param array $s ���K�\���Ƀ}�b�`�����v�f�̔z�� - * @return string - */ - protected function _quoteResRangeCallback(array $s) - { - return $this->quoteResRange($s[0], $s[1], $s[2]); - } - - // }}} - // {{{ checkQuoteResNums() - - /** - * HTML���b�Z�[�W���̈��p���X�̔ԍ����ċA�`�F�b�N���� - */ - public function checkQuoteResNums($res_num, $name, $msg, - $with_quotes = true, - $with_backlinks = null, - $cascade = true) - { - global $_conf; - - $this->_quote_check_depth = 0; - - if ($with_backlinks === null) { - $with_backlinks = ($_conf['backlink_list'] > 0 || $_conf['backlink_block'] > 0) ? true : false; - } - - if ($with_backlinks) { - return $this->checkQuoteResNumsFromSummary( - $res_num == 0 ? 1 : $res_num, $with_quotes, $with_backlinks); - } - - return $this->_checkQuoteResNums($res_num, $name, $msg); - } - - // }}} - // {{{ _checkQuoteResNums() - - /** - * HTML���b�Z�[�W���̈��p���X�̔ԍ����ċA�`�F�b�N���� - */ - protected function _checkQuoteResNums($res_num, $name, $msg) - { - // �ċA���~�b�^ - if ($this->_quote_check_depth > 30) { - return array(); - } else { - $this->_quote_check_depth++; - } - - if (array_key_exists($res_num, $this->_quote_res_nums)) { - return $this->_quote_res_nums[$res_num]; - } - - $aThread = $this->thread; - - $quote_res_nums = array(); - - $name = preg_replace('/(��.*)/', '', $name, 1); - - // ���O - if ($matches = $this->getQuoteResNumsName($name)) { - foreach ($matches as $a_quote_res_num) { - if ($a_quote_res_num) { - $quote_res_nums[] = $a_quote_res_num; - $a_quote_res_idx = $a_quote_res_num - 1; - - // �������g�̔ԍ��Ɠ���łȂ���΁A - if ($a_quote_res_num != $res_num) { - // �`�F�b�N���Ă��Ȃ��ԍ����ċA�`�F�b�N - if (!isset($this->_quote_res_nums_checked[$a_quote_res_num])) { - $this->_quote_res_nums_checked[$a_quote_res_num] = true; - if (isset($aThread->datlines[$a_quote_res_idx])) { - $datalinear = $aThread->explodeDatLine($aThread->datlines[$a_quote_res_idx]); - $quote_name = $datalinear[0]; - $quote_msg = $aThread->datlines[$a_quote_res_idx]; - $quote_res_nums = array_merge($quote_res_nums, - $this->_checkQuoteResNums($a_quote_res_num, - $quote_name, - $quote_msg)); - } - } - } - } - // $name=preg_replace("/([0-9]+)/", "", $name, 1); - } - } - - // >>1�̃����N����������O�� - // >>1 - $msg = preg_replace('{<[Aa] .+?>(>>[1-9][\\d\\-]*)}', '$1', $msg); - - //echo $msg; - if (preg_match_all(self::getAnchorRegex('/%full%/'), $msg, $out, PREG_PATTERN_ORDER)) { - foreach ($out[2] as $numberq) { - if ($matches=preg_split(self::getAnchorRegex('/%delimiter%/'), $numberq)) { - foreach ($matches as $a_quote_res_num) { - if (preg_match(self::getAnchorRegex('/%range_delimiter%/'),$a_quote_res_num)) { continue;} - $a_quote_res_num = (int) (mb_convert_kana($a_quote_res_num, 'n')); - $a_quote_res_idx = $a_quote_res_num - 1; - - //echo $a_quote_res_num; - - if (!$a_quote_res_num) {break;} - $quote_res_nums[] = $a_quote_res_num; - - // �������g�̔ԍ��Ɠ���łȂ���΁A - if ($a_quote_res_num != $res_num) { - // �`�F�b�N���Ă��Ȃ��ԍ����ċA�`�F�b�N - if (!isset($this->_quote_res_nums_checked[$a_quote_res_num])) { - $this->_quote_res_nums_checked[$a_quote_res_num] = true; - if (isset($aThread->datlines[$a_quote_res_idx])) { - $datalinear = $aThread->explodeDatLine($aThread->datlines[$a_quote_res_idx]); - $quote_name = $datalinear[0]; - $quote_msg = $aThread->datlines[$a_quote_res_idx]; - $quote_res_nums = array_merge($quote_res_nums, - $this->_checkQuoteResNums($a_quote_res_num, - $quote_name, - $quote_msg)); - } - } - } - - } - - } - - } - - } - - if (count($quote_res_nums)) { - sort($quote_res_nums, SORT_NUMERIC); - $this->_quote_res_nums[$res_num] = array_unique($quote_res_nums); - $quote_res_nums = $this->_quote_res_nums[$res_num]; - } - - return $quote_res_nums; - } - - // }}} - // {{{ checkQuoteResNumsFromSummary() - - /** - * ���p���X�W�v���ʂ���|�b�v�A�b�v�p�ɗp�ӂ��ׂ��ԍ����ċA�`�F�b�N���� - */ - public function checkQuoteResNumsFromSummary($res_num, $with_quotes, $with_backlinks) - { - // �ċA���~�b�^ - if ($this->_quote_check_depth > 3000) { - return array(); - } else { - $this->_quote_check_depth++; - } - - $ret = array(); - - // �Q�ƃ��X - if ($with_quotes) { - $ret = array_merge($ret, - $this->_checkQuoteResNumsFromSummary( - $res_num, $this->getQuoteTo(), $with_quotes, $with_backlinks)); - } - // ��Q�ƃ��X - if ($with_backlinks) { - $ret = array_merge($ret, - $this->_checkQuoteResNumsFromSummary( - $res_num, $this->getQuoteFrom(), $with_quotes, $with_backlinks)); - } - return $ret; - } - - // }}} - // {{{ _checkQuoteResNumsFromSummary() - - protected function _checkQuoteResNumsFromSummary($res_num, $quotes, $with_quotes, $with_backlinks) - { - $ret = array(); - if (array_key_exists($res_num, $quotes)) { - foreach ($quotes[$res_num] as $quote_num) { - $ret[] = $quote_num; - if ($quote_num != $res_num) { - if (!isset($this->_quote_res_nums_checked[$quote_num])) { - $this->_quote_res_nums_checked[$quote_num] = true; - $ret = array_merge($ret, - $this->checkQuoteResNumsFromSummary($quote_num, $with_quotes, $with_backlinks)); - } - } - } - } - return $ret; - } - - // }}} - // {{{ getQuoteResNumsName() - - public function getQuoteResNumsName($name) - { - if (strlen(trim($name)) == 0 || $name == $this->_nanashiName) { - return false; - } - - // �g���b�v������ - $name = preg_replace('/��.*/', '', $name, 1); - $name = strip_tags($name); - - /* - //if (preg_match('/[0-9]+/', $name, $m)) { - return (int)$m[0]; - } - */ - - if (preg_match_all(self::getAnchorRegex('/(?:^|%prefix%)(%nums%)/'), $name, $matches)) { - foreach ($matches[1] as $a_quote_res_num) { - $quote_res_nums[] = (int)mb_convert_kana($a_quote_res_num, 'n'); - } - return array_unique($quote_res_nums); - } - - return false; - } - - // }}} - // {{{ _wikipediaFilter() - - /** - * [[���]]������������Wikipedia�֎��������N - * - * @param string $msg ���b�Z�[�W - * @return string - * - * original code: - * http://akid.s17.xrea.com/p2puki/index.phtml?%A5%E6%A1%BC%A5%B6%A1%BC%A5%AB%A5%B9%A5%BF%A5%DE%A5%A4%A5%BA%28rep2%20Ver%201.7.0%A1%C1%29#led2c85d - */ - protected function _wikipediaFilter($msg) - { - if (strpos($msg, '[[') === false) { - return $msg; - } - - $msg = preg_replace_callback('/\\[\\[([^\\[\\]\\n<>]+)\\]\\]+/u', - array($this, '_linkToWikipeidaCallback'), - mb_convert_encoding($msg, 'UTF-8', 'CP932')); - - return mb_convert_encoding($msg, 'CP932', 'UTF-8'); - } - - // }}} - // {{{ _linkToWikipeidaCallback() - - /** - * Wikipedia�̌��������N�ɕϊ����ĕԂ�. - * - * @param array $matches - * @return string - */ - protected function _linkToWikipeidaCallback($matches) - { - return '[[' . $this->_linkToWikipeida($matches[1]) . ']]'; - } - - // }}} - // {{{ _linkToWikipeida() - - /** - * Wikipedia�̌��������N�ɕϊ����ĕԂ�. - * - * @param string $word ��� - * @return string - */ - abstract protected function _linkToWikipeida($word); - - // }}} - // {{{ _makeQuotes() - - /** - * ���X�f�[�^���W�v����$this->_quote_to��$this->_quote_from�ɕۑ�. - */ - protected function _makeQuotes() - { - global $_conf; - - $this->_quote_to = array(); - $this->_quote_from = array(); - - if (!$this->thread->datlines) { - return; - } - - foreach ($this->thread->datlines as $num => $line) { - list($name, $mail, $date_id, $msg) = $this->thread->explodeDatLine($line); - - // NG���ځ[��`�F�b�N - if (($id = $this->thread->ids[$num + 1]) !== null) { - $date_id = str_replace($this->thread->idp[$i] . $id, 'ID:' . $id, $date_id); - } - $ng_type = $this->_ngAbornCheck($num + 1, strip_tags($name), $mail, $date_id, $id, $msg); - if ($ng_type == self::ABORN) { - continue; - } - - // ���O - if ($nmatches = $this->getQuoteResNumsName($name)) { - foreach ($nmatches as $a_quote_res_num) { - if ($a_quote_res_num) { - if (!array_key_exists($a_quote_res_num, $this->_quote_from) || $this->_quote_from[$a_quote_res_num] === null) { - $this->_quote_from[$a_quote_res_num] = array(); - } - if (!in_array($num + 1, $this->_quote_from[$a_quote_res_num])) { - $this->_quote_from[$a_quote_res_num][] = $num + 1; - } - - if (!array_key_exists($num + 1, $this->_quote_to) || $this->_quote_to[$num + 1] === null) { - $this->_quote_to[$num + 1] = array(); - } - if (!in_array($a_quote_res_num, $this->_quote_to[$num + 1])) { - $this->_quote_to[$num + 1][] = $a_quote_res_num; - } - } - } - } - - - // >>1�̃����N����������O�� - // >>1 - $msg = preg_replace('{<[Aa] .+?>(>>[1-9][\\d\\-]*)}', '$1', $msg); - if (!preg_match_all(self::getAnchorRegex('/%full%/'), $msg, $out, PREG_PATTERN_ORDER)) { - continue; - } - foreach ($out[2] as $numberq) { - if (!preg_match_all(self::getAnchorRegex('/(?:%prefix%)?(%a_range%)/'), $numberq, $anchors, PREG_PATTERN_ORDER)) continue; - foreach ($anchors[1] as $anchor) { - if (preg_match(self::getAnchorRegex('/(%a_num%)%range_delimiter%(?:%prefix%)?(%a_num%)/'), $anchor, $matches)) { - $from = intval(mb_convert_kana($matches[1], 'n')); - $to = intval(mb_convert_kana($matches[2], 'n')); - if ($from < 1 || $to < 1 || $from > $to - || ($to - $from + 1) > sizeof($this->thread->datlines)) { - continue; - } - if ($_conf['backlink_list_range_anchor_limit'] != 0) { - if ($to - $from >= $_conf['backlink_list_range_anchor_limit']) { - continue; - } - } - for ($i = $from; $i <= $to; $i++) { - if ($i > sizeof($this->thread->datlines)) { - break; - } - if ($_conf['backlink_list_future_anchor'] == 0) { - // ���X�ԍ��ȍ~�̃A���J�[�͖������� - if ($i >= $num + 1) { - continue; - } - } - if (!array_key_exists($i, $this->_quote_from) || $this->_quote_from[$i] === null) { - $this->_quote_from[$i] = array(); - } - if (!in_array($num + 1, $this->_quote_from[$i])) { - $this->_quote_from[$i][] = $num + 1; - } - } - } elseif (preg_match(self::getAnchorRegex('/(%a_num%)/'), $anchor, $matches)) { - $quote_num = intval(mb_convert_kana($matches[1], 'n')); - if (!array_key_exists($num + 1, $this->_quote_to) || $this->_quote_to[$num + 1] === null) { - $this->_quote_to[$num + 1] = array(); - } - if (!in_array($quote_num, $this->_quote_to[$num + 1])) { - $this->_quote_to[$num + 1][] = $quote_num; - } - - if ($_conf['backlink_list_future_anchor'] == 0) { - // ���X�ԍ��ȍ~�̃A���J�[�͖������� - if ($quote_num >= $num + 1) { - continue; - } - } - if (!array_key_exists($quote_num, $this->_quote_from) || $this->_quote_from[$quote_num] === null) { - $this->_quote_from[$quote_num] = array(); - } - if (!in_array($num + 1, $this->_quote_from[$quote_num])) { - $this->_quote_from[$quote_num][] = $num + 1; - } - } - } - } - } - } - - // }}} - // {{{ getQuoteFrom() - - /** - * �탌�X���X�g��Ԃ�. - * - * @return array - */ - public function getQuoteFrom() - { - if ($this->_quote_from === null) { - $this->_makeQuotes(); // �탌�X�f�[�^�W�v - } - return $this->_quote_from; - } - - // }}} - // {{{ getQuoteTo() - - /** - * ���X���X�g��Ԃ�. - * - * @return array - */ - public function getQuoteTo() - { - if ($this->_quote_to === null) { - $this->_makeQuotes(); // ���X�f�[�^�W�v - } - return $this->_quote_to; - } - - // }}} - // {{{ _quotebackListHtml() - - /** - * �탌�X���X�g��HTML�Ő��`���ĕԂ�. - * - * @param int $resnum ���X�ԍ� - * @param int $type 1:�c�`�� 2:���`�� 3:�W�J�p�u���b�N�p������ - * @param bool $popup ���`���ł̃|�b�v�A�b�v����(true:�|�b�v�A�b�v����Afalse:�}������) - * @return string - */ - protected function _quotebackListHtml($resnum, $type, $popup=true) - { - $quote_from = $this->getQuoteFrom(); - if (!array_key_exists($resnum, $quote_from)) return $ret; - - $anchors = $quote_from[$resnum]; - sort($anchors); - - if ($type == 1) { - return $this->_quotebackVerticalListHtml($anchors, $resnum); - } elseif ($type == 2) { - return $this->_quotebackHorizontalListHtml($anchors, $resnum); - } elseif ($type == 3) { - return $this->_quotebackResData($anchors, $resnum); - } - } - - // }}} - // {{{ _quotebackVerticalListHtml() - - protected function _quotebackVerticalListHtml($anchors, $resnum) - { - $ret = '
        '; - $anchor_cnt = 1; - foreach ($anchors as $anchor) { - if ($anchor_cnt > 1) { - $ret .= '
      • ��
      • '; - } - if ($anchor_cnt < count($anchors)) { - $ret .= '
      • ��'; - } else { - $ret .= '
      • ��'; - } - $ret .= ($anchor == $resnum) - ? $anchor - : $this->quoteRes($anchor, '', $anchor, true); - $anchor_cnt++; - } - $ret .= '
      '; - return $ret; - } - - // }}} - // {{{ _quotebackHorizontalListHtml() - - protected function _quotebackHorizontalListHtml($anchors, $resnum) - { - $ret = '
      '; - $count = 0; - - foreach ($anchors as $idx => $anchor) { - if ($anchor == $resnum) { - continue; - } - $anchor_link= $this->quoteRes('>>' . $anchor, '>>', $anchor); - $qres_id = ($this->_matome ? "t{$this->_matome}" : '') ."qr{$anchor}"; - $ret .= '
      '; - $ret .= sprintf('
      �y�Q�ƃ��X�F%s�z
      ',$anchor_link); - $ret .= '
      '; - $count++; - } - $ret .= '
      '; - - return $ret; - } - - // }}} - // {{{ _quotebackResData() - - protected function _quotebackResData($anchors, $resnum) - { - $ret = array(); - foreach ($anchors as $idx => $anchor) { - if ($anchor == $resnum) { - continue; - } - $ret[] = ($this->_matome ? "t{$this->_matome}" : '') ."qr{$anchor}"; - } - - return join('/', $ret); - } - - // }}} - // {{{ getDatochiResiduums() - - /** - * DAT�����̍ۂɎ擾�ł���>>1�ƍŌ�̃��X��HTML�ŕԂ�. - * - * @return string|false - */ - public function getDatochiResiduums() - { - $ret = ''; - $elines = $this->thread->datochi_residuums; - if (!count($elines)) { - return $ret; - } - - $this->thread->onthefly = true; - $ret = "
      on the fly
      \n"; - $ret .= "
      \n"; - - foreach($elines as $num => $line) { - $res = $this->transRes($line, $num); - if (is_array($res)) { - $ret .= $res['body'] . $res['q']; - } else { - $ret .= $res; - } - } - - $ret .= "
      \n"; - - return $ret; - } - - // }}} - // {{{ getAutoFavRanks() - - /** - * ���������N�ݒ��Ԃ�. - * - * @return array - */ - public function getAutoFavRank() - { - global $_conf; - - if ($this->_auto_fav_rank !== false) { - return $this->_auto_fav_rank; - } - - $ranks = explode(',', strtr($_conf['expack.ic2.fav_auto_rank_setting'], ' ', '')); - $ret = null; - if ($_conf['expack.misc.multi_favs']) { - $idx = 0; - if (!is_array($this->thread->favs)) { - return null; - } - foreach ($this->thread->favs as $fav) { - if ($fav) { - $rank = $ranks[$idx]; - if (is_numeric($rank)) { - $rank = intval($rank); - if ($ret === null) { - $ret = $rank; - } else { - $ret = max($ret, $rank); - } - } - } - $idx++; - } - } else { - if ($this->thread->fav && is_numeric($ranks[0])) { - $ret = intval($ranks[0]); - } - } - $this->_auto_fav_rank = $ret; - - return $ret; - } - - // }}} - // {{{ isAutoFavRankOverride() - - /** - * ���������N�ݒ�Ń����N���㏑�����ׂ����Ԃ�. - * - * @param int $now ���݂̃����N - * @param int $new ���������N - * @return bool - */ - static public function isAutoFavRankOverride($now, $new) - { - global $_conf; - - switch ($_conf['expack.ic2.fav_auto_rank_override']) { - case 0: - return false; - break; - case 1: - return $now != $new; - break; - case 2: - return $now == 0 && $now != $new; - break; - case 3: - return $now < $new; - break; - default: - return false; - } - return false; - } - - // }}} - // {{{ getAnchorRegex() - - /** - * �A���J�[�̐��K�\����Ԃ� - * - * @param string $pattern ex)'/%full%/' - * @param boolean $unicode - * @return string - */ - static public function getAnchorRegex($pattern, $unicode = false) - { - if (!array_key_exists($pattern, self::$_anchorRegexes)) { - self::$_anchorRegexes[$pattern] = strtr($pattern, self::_getAnchorRegexParts()); - // �卷�͂Ȃ��� compileMobile2chUriCallBack() �̂悤�� preg_relplace_callback()���Ă����������B - } - if ($unicode) { - return StrSjis::toUnicodePattern($_anchorRegexes[$pattern]); - } - return self::$_anchorRegexes[$pattern]; - } - - // }}} - // {{{ _getAnchorRegexParts() - - /** - * �A���J�[�̍\���v�f�i���K�\���p�[�c�̔z��j��Ԃ� - * - * @param void - * @return string - */ - static private function _getAnchorRegexParts() - { - if (!is_null(self::$_anchorRegexParts)) { - return self::$_anchorRegexParts; - } - - $anchor = array(); - - // �A���J�[�̍\���v�f�i���K�\���p�[�c�̔z��j - - // �󔒕��� - $anchor_space = '(?:[ ]|�@)'; - //$anchor[' '] = ''; - - // �A���J�[���p�q >> - $anchor['prefix'] = "(?:(?:>|��|<|��|�r){1,2}|(?:\)){2}|�t|��){$anchor_space}*\.?"; - - // ���� - $anchor['a_digit'] = '(?:\\d|�O|�P|�Q|�R|�S|�T|�U|�V|�W|�X)'; - /* - $anchor[0] = '(?:0|�O)'; - $anchor[1] = '(?:1|�P)'; - $anchor[2] = '(?:2|�Q)'; - $anchor[3] = '(?:3|�R)'; - $anchor[4] = '(?:4|�S)'; - $anchor[5] = '(?:5|�T)'; - $anchor[6] = '(?:6|�U)'; - $anchor[7] = '(?:7|�V)'; - $anchor[8] = '(?:8|�W)'; - $anchor[9] = '(?:9|�X)'; - */ - - // �͈͎w��q - // -|�]|�[ = HYPHEN-MINUS | HYPHEN | KATAKANA-HIRAGANA PROLONGED SOUND MARK - $anchor['range_delimiter'] = '(?:-|\\x81\\x5d|\\x81\\x5b)'; // [\\-\\x{2010}\\x{30fc}] - - // �񋓎w��q - $anchor['delimiter'] = "{$anchor_space}?(?:[\.,=+]|�A|�E|��|�C){$anchor_space}?"; - - // ���ځ[��p�A���J�[���p�q - //$anchor['prefix_abon'] = ">{1,2}{$anchor_space}?"; - - // ���X�ԍ� - $anchor['a_num'] = sprintf('%s{1,4}', $anchor['a_digit']); - - // ���X�͈� - /* - $anchor['a_range'] = sprintf('%s(?:%s%s)?', - $anchor['a_num'], $anchor['range_delimiter'], $anchor['a_num'] - ); - */ - $anchor['a_range'] = sprintf('%s(?:%s(?:%s)?%s)?', - $anchor['a_num'], $anchor['range_delimiter'], $anchor['prefix'], $anchor['a_num'] - ); - - // ���X�͈̗͂� - $anchor['ranges'] = sprintf('%s(?:%s%s)*(?!%s)', - $anchor['a_range'], $anchor['delimiter'], $anchor['a_range'], $anchor['a_digit'] - ); - - // ���X�ԍ��̗� - $anchor['nums'] = sprintf('%s(?:%s%s)*(?!%s)', - $anchor['a_num'], $anchor['delimiter'], $anchor['a_num'], $anchor['a_digit'] - ); - - // �A���J�[�S�� - $anchor['full'] = sprintf('(%s)(%s)', $anchor['prefix'], $anchor['ranges']); - - // getAnchorRegex() �� strtr() �u���p��key�� '%key%' �ɕϊ����� - foreach ($anchor as $k => $v) { - $anchor['%' . $k . '%'] = $v; - unset($anchor[$k]); - } - - self::$_anchorRegexParts = $anchor; - - return self::$_anchorRegexParts; - } - - // }}} - // {{{_buildStrToLinkRegex() - - /** - * �����N�Ƃ��Ĉ����p�^�[����Ԃ� - * - * @param void - * @return string - */ - static protected function _buildStrToLinkRegex() - { - return '{' - . '(?P(<[Aa] .+?>)(.*?)())' // �����N�iPCRE�̓�����A�K�����̃p�^�[�����ŏ��Ɏ��s����j - . '|' - . '(?:' - . '(?P' // ���p - . self::getAnchorRegex('%full%') - . ')' - . '|' - . '(?P' - . '(ftp|h?ttps?|tps?)://([0-9A-Za-z][\\w!#%&+*,\\-./:;=?@\\[\\]^~]+)' // URL - . ')' - . '|' - . '(?PID: ?([0-9A-Za-z/.+]{8,11})(?=[^0-9A-Za-z/.+]|$))' // ID�i8,10�� +PC/�g�ю��ʃt���O�j - . ')' - . '}'; - } - - // }}} -} - -// }}} - -/* - * Local Variables: - * mode: php - * coding: cp932 - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: nil - * End: - */ -// vim: set syn=php fenc=cp932 ai et ts=4 sw=4 sts=4 fdm=marker: diff --git a/lib/live/live_ShowThreadPc.php b/lib/live/live_ShowThreadPc.php deleted file mode 100755 index 7c2f12102..000000000 --- a/lib/live/live_ShowThreadPc.php +++ /dev/null @@ -1,1999 +0,0 @@ -_url_handlers = array( - 'plugin_linkThread', - 'plugin_link2chSubject', - ); - // +Wiki - if (isset($GLOBALS['linkPluginCtl'])) { - $this->_url_handlers[] = 'plugin_linkPlugin'; - } - if (isset($GLOBALS['replaceImageUrlCtl'])) { - $this->_url_handlers[] = 'plugin_replaceImageUrl'; - } - if (P2_IMAGECACHE_AVAILABLE == 2) { - $this->_url_handlers[] = 'plugin_imageCache2'; - } elseif ($_conf['preview_thumbnail']) { - $this->_url_handlers[] = 'plugin_viewImage'; - } - if ($_conf['link_youtube']) { - $this->_url_handlers[] = 'plugin_linkYouTube'; - } - if ($_conf['link_niconico']) { - $this->_url_handlers[] = 'plugin_linkNicoNico'; - } - $this->_url_handlers[] = 'plugin_linkURL'; - - // imepita��URL�����H����ImageCache2������v���O�C����o�^ - if (P2_IMAGECACHE_AVAILABLE == 2) { - $this->addURLHandler(array($this, 'plugin_imepitaToImageCache2')); - } - - // �T���l�C���\����������ݒ� - if (!isset($GLOBALS['pre_thumb_unlimited']) || !isset($GLOBALS['pre_thumb_limit'])) { - if (isset($_conf['pre_thumb_limit']) && $_conf['pre_thumb_limit'] > 0) { - $GLOBALS['pre_thumb_limit'] = $_conf['pre_thumb_limit']; - $GLOBALS['pre_thumb_unlimited'] = false; - } else { - $GLOBALS['pre_thumb_limit'] = null; // �k���l����isset()��false��Ԃ� - $GLOBALS['pre_thumb_unlimited'] = true; - } - } - $GLOBALS['pre_thumb_ignore_limit'] = false; - - // �A�N�e�B�u���i�[������ - if (P2_ACTIVEMONA_AVAILABLE) { - ExpackLoader::initActiveMona($this); - } - - // ImageCache2������ - if (P2_IMAGECACHE_AVAILABLE == 2) { - ExpackLoader::initImageCache($this); - } - - // �񓯊����X�|�b�v�A�b�v�ESPM������ - $js_id = sprintf('%u', crc32($this->thread->keydat)); - if ($this->_matome) { - $this->asyncObjName = "t{$this->_matome}asp{$js_id}"; - $this->spmObjName = "t{$this->_matome}spm{$js_id}"; - } else { - $this->asyncObjName = "asp{$js_id}"; - $this->spmObjName = "spm{$js_id}"; - } - - // ������������ - $this->setBbsNonameName(); - } - - // }}} - // {{{ transRes() - - /** - * Dat���X��HTML���X�ɕϊ����� - * - * @param string $ares dat��1���C�� - * @param int $i ���X�ԍ� - * @param string $pattern �n�C���C�g�p���K�\�� - * @return string - */ - public function transRes($ares, $i, $pattern = null) - { - global $_conf, $STYLE, $mae_msg; - - list($name, $mail, $date_id, $msg) = $this->thread->explodeDatLine($ares); - if (($id = $this->thread->ids[$i]) !== null) { - $idstr = 'ID:' . $id; - $date_id = str_replace($this->thread->idp[$i] . $id, $idstr, $date_id); - } else { - $idstr = null; - } - - // +Wiki:�u�����[�h - if (isset($GLOBALS['replaceWordCtl'])) { - $replaceWordCtl = $GLOBALS['replaceWordCtl']; - $name = $replaceWordCtl->replace('name', $this->thread, $ares, $i); - $mail = $replaceWordCtl->replace('mail', $this->thread, $ares, $i); - $date_id = $replaceWordCtl->replace('date', $this->thread, $ares, $i); - $msg = $replaceWordCtl->replace('msg', $this->thread, $ares, $i); - } - - $tores = ''; - $rpop = ''; - if ($this->_matome) { - $res_id = "t{$this->_matome}r{$i}"; - $msg_id = "t{$this->_matome}m{$i}"; - } else { - $res_id = "r{$i}"; - $msg_id = "m{$i}"; - } - $msg_class = 'message'; - - // NG���ځ[��`�F�b�N - $ng_type = $this->_ngAbornCheck($i, strip_tags($name), $mail, $date_id, $id, $msg, false, $ng_info); - if ($ng_type == self::ABORN) { - return $this->_abornedRes($res_id); - } - if ($ng_type != self::NG_NONE) { - $ngaborns_head_hits = self::$_ngaborns_head_hits; - $ngaborns_body_hits = self::$_ngaborns_body_hits; - } - - // AA���� - if ($this->am_autodetect && $this->activeMona->detectAA($msg)) { - $msg_class .= ' ActiveMona'; - } - - //============================================================= - // ���X���|�b�v�A�b�v�\�� - //============================================================= - if ($_conf['quote_res_view']) { - $quote_res_nums = $this->checkQuoteResNums($i, $name, $msg); - - foreach ($quote_res_nums as $rnv) { - if (!isset($this->_quote_res_nums_done[$rnv])) { - $this->_quote_res_nums_done[$rnv] = true; - if (isset($this->thread->datlines[$rnv-1])) { - if ($this->_matome) { - $qres_id = "t{$this->_matome}qr{$rnv}"; - } else { - $qres_id = "qr{$rnv}"; - } - $ds = $this->qRes($this->thread->datlines[$rnv-1], $rnv); - $onPopUp_at = " onmouseover=\"showResPopUp('{$qres_id}',event)\" onmouseout=\"hideResPopUp('{$qres_id}')\""; - $rpop .= "
      \n{$ds}
      \n"; - } - } - } - } - - //============================================================= - // �܂Ƃ߂ďo�� - //============================================================= - - $name = $this->transName($name); // ���OHTML�ϊ� - $msg = $this->transMsg($msg, $i); // ���b�Z�[�WHTML�ϊ� - - - // BE�v���t�@�C�������N�ϊ� - $date_id = $this->replaceBeId($date_id, $i); - - // HTML�|�b�v�A�b�v - if ($_conf['iframe_popup']) { - $date_id = preg_replace_callback("{((\?#*)|(Lv\.\d+))}", array($this, 'iframePopupCallback'), $date_id); - } - - // NG���b�Z�[�W�ϊ� - if ($ng_type != self::NG_NONE && count($ng_info)) { - $ng_info = implode(', ', $ng_info); - $msg = <<{$ng_info} -
      {$msg}
      -EOMSG; - } - - // NG�l�[���ϊ� - if ($ng_type & self::NG_NAME) { - $name = <<{$name} -EONAME; - $msg = <<{$msg}
    -EOMSG; - - // NG���[���ϊ� - } elseif ($ng_type & self::NG_MAIL) { - $mail = <<{$mail} -EOMAIL; - $msg = <<{$msg}
    -EOMSG; - - // NGID�ϊ� - } elseif ($ng_type & self::NG_ID) { - $date_id = <<{$date_id} -EOID; - $msg = <<{$msg} -EOMSG; - - } - - /* - //�u��������V���v�摜��}�� - if ($i == $this->thread->readnum +1) { - $tores .= <<�V�����X -EOP; - } - */ - - // SPM - if ($_conf['expack.spm.enabled']) { - $spmeh = " onmouseover=\"{$this->spmObjName}.show({$i},'{$msg_id}',event)\""; - $spmeh .= " onmouseout=\"{$this->spmObjName}.hide(event)\""; - } else { - $spmeh = ''; - } - - // +live �X�����e�\�����폜 - - /*if ($_conf['expack.am.enabled'] == 2) { - $tores .= << -// -\n -EOJS; - }*/ - - // �܂Ƃ߂ăt�B���^�F���� - if ($pattern) { - $tores = StrCtl::filterMarking($pattern, $tores); - } - - return array('body' => $tores, 'q' => $rpop); - } - - // }}} - // {{{ quoteOne() - - /** - * >>1 ��\������ (���p�|�b�v�A�b�v�p) - */ - public function quoteOne() - { - global $_conf; - - if (!$_conf['quote_res_view']) { - return false; - } - - $rpop = ''; - $quote_res_nums = $this->checkQuoteResNums(0, '1', ''); - if (array_search(1, $quote_res_nums) === false) { - $quote_res_nums[] = 1; - } - - foreach ($quote_res_nums as $rnv) { - if (!isset($this->_quote_res_nums_done[$rnv])) { - $this->_quote_res_nums_done[$rnv] = true; - if (isset($this->thread->datlines[$rnv-1])) { - if ($this->_matome) { - $qres_id = "t{$this->_matome}qr{$rnv}"; - } else { - $qres_id = "qr{$rnv}"; - } - $ds = $this->qRes($this->thread->datlines[$rnv-1], $rnv); - $onPopUp_at = " onmouseover=\"showResPopUp('{$qres_id}',event)\" onmouseout=\"hideResPopUp('{$qres_id}')\""; - $rpop .= "
    \n{$ds}
    \n"; - } - } - } - - $res1['q'] = $rpop; - $res1['body'] = $this->transMsg('>>1', 1); - - return $res1; - } - - // }}} - // {{{ qRes() - - /** - * ���X���pHTML - */ - public function qRes($ares, $i) - { - global $_conf; - - $resar = $this->thread->explodeDatLine($ares); - $name = $this->transName($resar[0]); - $mail = $resar[1]; - if (($id = $this->thread->ids[$i]) !== null) { - $idstr = 'ID:' . $id; - $date_id = str_replace($this->thread->idp[$i] . $id, $idstr, $resar[2]); - } else { - $idstr = null; - $date_id = $resar[2]; - } - $msg = $this->transMsg($resar[3], $i); - - $tores = ''; - - if ($this->_matome) { - $qmsg_id = "t{$this->_matome}qm{$i}"; - } else { - $qmsg_id = "qm{$i}"; - } - - // >>1 - if ($i == 1) { - $tores = "

    {$this->thread->ttitle_hd}

    "; - } - - // BE�v���t�@�C�������N�ϊ� - $date_id = $this->replaceBeId($date_id, $i); - - // HTML�|�b�v�A�b�v - if ($_conf['iframe_popup']) { - $date_id = preg_replace_callback("{((\?#*)|(Lv\.\d+))}", array($this, 'iframePopupCallback'), $date_id); - } - // - - // ID�t�B���^ - if ($_conf['flex_idpopup'] == 1 && $id && $this->thread->idcount[$id] > 1) { - $date_id = str_replace($idstr, $this->idFilter($idstr, $id), $date_id); - } - - $msg_class = 'message'; - - // AA ���� - if ($this->am_autodetect && $this->activeMona->detectAA($msg)) { - $msg_class .= ' ActiveMona'; - } - - // SPM - if ($_conf['expack.spm.enabled']) { - $spmeh = " onmouseover=\"{$this->spmObjName}.show({$i},'{$qmsg_id}',event)\""; - $spmeh .= " onmouseout=\"{$this->spmObjName}.hide(event)\""; - } else { - $spmeh = ''; - } - - // $tores�ɂ܂Ƃ߂ďo�� - $tores .= '
    '; - $tores .= "{$i} : "; // �ԍ� - $tores .= preg_replace('{[ ]*}i', '', "{$name} : "); - if ($mail) { - $tores .= $mail . ' : '; // ���[�� - } - $tores .= $date_id; // ���t��ID - if ($this->am_side_of_id) { - $tores .= ' ' . $this->activeMona->getMona($qmsg_id); - } - $tores .= "
    \n"; - - // �탌�X���X�g(�c�`��) - if ($_conf['backlink_list'] == 1 || $_conf['backlink_list'] > 2) { - $tores .= $this->_quotebackListHtml($i, 1); - } - - $tores .= "
    {$msg}
    \n"; // ���e - // �탌�X���X�g(���`��) - if ($_conf['backlink_list'] == 2 || $_conf['backlink_list'] > 2) { - $tores .= $this->_quotebackListHtml($i, 2); - } - - // ��Q�ƃu���b�N�p�f�[�^ - if ($_conf['backlink_block'] > 0) { - $tores .= $this->_getBacklinkComment($i); - } - - return $tores; - } - - // }}} - // {{{ _getBacklinkComment() - - protected function _getBacklinkComment($i) - { - $backlinks = $this->_quotebackListHtml($i, 3); - if (strlen($backlinks)) { - return ''; - } - return ''; - } - - // }}} - // {{{ transName() - - /** - * ���O��HTML�p�ɕϊ����� - * - * @param string $name ���O - * @return string - */ - public function transName($name) - { - global $_conf; - - // �g���b�v��z�X�g�t���Ȃ番������ - if (($pos = strpos($name, '��')) !== false) { - $trip = substr($name, $pos); - $name = substr($name, 0, $pos); - } else { - $trip = null; - } - - // ���������p���X�|�b�v�A�b�v�����N�� - if ($_conf['quote_res_view']) { - if (strlen($name) && $name != $this->_nanashiName) { - $name = preg_replace_callback( - self::getAnchorRegex('/(?:^|%prefix%)(%nums%)/'), - array($this, '_quoteNameCallback'), $name - ); - } - } - - if ($trip) { - $name .= $trip; - } elseif ($name) { - // ����������� - $name = $name . ' '; - //if (in_array(0xF0 & ord(substr($name, -1)), array(0x80, 0x90, 0xE0))) { - // $name .= ' '; - //} - } - - return $name; - } - - // }}} - // {{{ transMsg() - - /** - * dat�̃��X���b�Z�[�W��HTML�\���p���b�Z�[�W�ɕϊ����� - * - * @param string $msg ���b�Z�[�W - * @param int $mynum ���X�ԍ� - * @return string - */ - public function transMsg($msg, $mynum) - { - global $_conf; - global $pre_thumb_ignore_limit; - - // 2ch���`����dat - if ($this->thread->dat_type == '2ch_old') { - $msg = str_replace('���M', ',', $msg); - $msg = preg_replace('/&(?=[^;])/', '&', $msg); - } - - // &�␳ - $msg = preg_replace('/&(?!#?\\w+;)/', '&', $msg); - - // Safari���瓊�e���ꂽ�����N���`���_�̕��������␳ - //$msg = preg_replace('{(h?t?tp://[\w\.\-]+/)�`([\w\.\-%]+/?)}', '$1~$2', $msg); - - // >>1�̃����N����������O�� - // >>1 - $msg = preg_replace('{<[Aa] .+?>(>>\\d[\\d\\-]*)}', '$1', $msg); - - // �{����2ch��DAT���_�łȂ���Ă��Ȃ��ƃG�X�P�[�v�̐����������Ȃ��C������B�iURL�����N�̃}�b�`�ŕ���p���o�Ă��܂��j - //$msg = str_replace(array('"', "'"), array('"', '''), $msg); - - // 2006/05/06 �m�[�g���̌딽���΍� body onload=window() - $msg = str_replace('onload=window()', 'onload=window()', $msg); - - // �V�����X�̉摜�͕\�������𖳎�����ݒ�Ȃ� - if ($mynum > $this->thread->readnum && $_conf['expack.ic2.newres_ignore_limit']) { - $pre_thumb_ignore_limit = true; - } - - // �����̉��s�ƘA��������s������ - if ($_conf['strip_linebreaks']) { - $msg = $this->stripLineBreaks($msg /*, '
    ***
    '*/); - } - - // ���p��URL�Ȃǂ������N - $msg = $this->transLink($msg); - - // Wikipedia�L�@�ւ̎��������N - if ($_conf['_linkToWikipeida']) { - $msg = $this->_wikipediaFilter($msg); - } - - return $msg; - } - - // }}} - // {{{ _abornedRes() - - /** - * ���ځ[�񃌃X��HTML���擾���� - * - * @param string $res_id - * @return string - */ - protected function _abornedRes($res_id) - { - global $_conf; - - if ($_conf['ngaborn_purge_aborn']) { - return ''; - } - - return << -
     
    -
     
    -\n -EOP; - } - - // }}} - // {{{ idFilter() - - /** - * ID�t�B���^�����O�|�b�v�A�b�v�ϊ� - * - * @param string $idstr ID:xxxxxxxxxx - * @param string $id xxxxxxxxxx - * @return string - */ - public function idFilter($idstr, $id) - { - global $_conf; - - // ID��8���܂���10��(+�g��/PC���ʎq)�Ɖ��肵�� - /* - if (strlen($id) % 2 == 1) { - $id = substr($id, 0, -1); - } - */ - $num_ht = ''; - if (isset($this->thread->idcount[$id]) && $this->thread->idcount[$id] > 0) { - $num = (string) $this->thread->idcount[$id]; - if ($_conf['iframe_popup'] == 3) { - $num_ht = ' '; - $num_ht .= preg_replace('/\\d/', '', $num); - $num_ht .= ' '; - } else { - $num_ht = '('.$num.')'; - } - } else { - return $idstr; - } - - if ($_conf['coloredid.enable'] > 0 && preg_match("|^ID:[ ]?[0-9A-Za-z/.+]{8,11}|",$idstr)) { - if ($this->_ids_for_render === null) { - $this->_ids_for_render = array(); - } - $this->_ids_for_render[substr($id, 0, 8)] = $this->thread->idcount[$id]; - if ($_conf['coloredid.click'] > 0) { - $num_ht = '' . $num_ht . ''; - } - $idstr = $this->_coloredIdStr( - $idstr, $id, $_conf['coloredid.click'] > 0 ? true : false); - } - - $filter_url = $_conf['read_php'] . '?' . http_build_query(array( - 'host' => $this->thread->host, - 'bbs' => $this->thread->bbs, - 'key' => $this->thread->key, - 'ls' => 'all', - 'offline' => '1', - 'idpopup' => '1', - 'rf' => array( - 'field' => ResFilter::FIELD_ID, - 'method' => ResFilter::METHOD_JUST, - 'match' => ResFilter::MATCH_ON, - 'include' => ResFilter::INCLUDE_NONE, - 'word' => $id, - ), - ), '', '&') . $_conf['k_at_a']; - - if ($_conf['iframe_popup']) { - return $this->iframePopup($filter_url, $idstr, $_conf['bbs_win_target_at']) . $num_ht; - } - return "{$idstr}{$num_ht}"; - } - - // }}} - // {{{ _linkToWikipeida() - - /** - * @see ShowThread - */ - protected function _linkToWikipeida($word) - { - global $_conf; - - $link = 'http://ja.wikipedia.org/wiki/' . rawurlencode($word); - if ($_conf['through_ime']) { - $link = P2Util::throughIme($link); - } - - return "{$word}"; - } - - // }}} - // {{{ quoteRes() - - /** - * ���p�ϊ��i�P�Ɓj - * - * @param string $full >>1-100 - * @param string $qsign >> - * @param string $appointed_num 1-100 - * @param bool $anchor_jump - * @return string - */ - public function quoteRes($full, $qsign, $appointed_num, $anchor_jump = false) - { - global $_conf; - - $appointed_num = mb_convert_kana($appointed_num, 'n'); // �S�p�����𔼊p�����ɕϊ� - if (preg_match('/\\D/', $appointed_num)) { - $appointed_num = preg_replace('/\\D+/', '-', $appointed_num); - return $this->quoteResRange($full, $qsign, $appointed_num); - } - if (preg_match('/^0/', $appointed_num)) { - return $full; - } - - $qnum = intval($appointed_num); - if ($qnum < 1 || $qnum > sizeof($this->thread->datlines)) { - return $full; - } - - // ���ځ[�񃌃X�ւ̃A���J�[ - if ($_conf['quote_res_view_aborn'] == 0 && - in_array($qnum, $this->_aborn_nums)) { - return '' . "{$full}"; - } - - if ($anchor_jump && $qnum >= $this->thread->resrange['start'] && $qnum <= $this->thread->resrange['to']) { - $read_url = '#' . ($this->_matome ? "t{$this->_matome}" : '') . "r{$qnum}"; - } else { - $read_url = "{$_conf['read_php']}?host={$this->thread->host}&bbs={$this->thread->bbs}&key={$this->thread->key}&offline=1&ls={$appointed_num}"; - } - $attributes = $_conf['bbs_win_target_at']; - if ($_conf['quote_res_view'] && ($_conf['quote_res_view_ng'] != 0 || - !in_array($qnum, $this->_ng_nums))) { - if ($this->_matome) { - $qres_id = "t{$this->_matome}qr{$qnum}"; - } else { - $qres_id = "qr{$qnum}"; - } - $attributes .= " onmouseover=\"showResPopUp('{$qres_id}',event)\""; - $attributes .= " onmouseout=\"hideResPopUp('{$qres_id}')\""; - } - return "_aborn_nums) ? ' class="abornanchor"' : - (in_array($qnum, $this->_ng_nums) ? ' class="nganchor"' : '')) - . ">{$full}"; - } - - // }}} - // {{{ quoteResRange() - - /** - * ���p�ϊ��i�͈́j - * - * @param string $full >>1-100 - * @param string $qsign >> - * @param string $appointed_num 1-100 - * @return string - */ - public function quoteResRange($full, $qsign, $appointed_num) - { - global $_conf; - - if ($appointed_num == '-') { - return $full; - } - - $read_url = "{$_conf['read_php']}?host={$this->thread->host}&bbs={$this->thread->bbs}&key={$this->thread->key}&offline=1&ls={$appointed_num}n"; - - if ($_conf['iframe_popup']) { - $pop_url = $read_url . "&renzokupop=true"; - return $this->iframePopup(array($read_url, $pop_url), $full, $_conf['bbs_win_target_at'], 1); - } - - // ���ʂɃ����N - return "{$full}"; - - // 1�–ڂ����p���X�|�b�v�A�b�v - /* - $qnums = explode('-', $appointed_num); - $qlink = $this->quoteRes($qsign . $qnum[0], $qsign, $qnum[0]) . '-'; - if (isset($qnums[1])) { - $qlink .= $qnums[1]; - } - return $qlink; - */ - } - - // }}} - // {{{ iframePopup() - - /** - * HTML�|�b�v�A�b�v�ϊ� - * - * @param string|array $url - * @param string|array $str - * @param string $attr - * @param int|null $mode - * @param bool $marker - * @return string - */ - public function iframePopup($url, $str, $attr = '', $mode = null, $marker = false) - { - global $_conf; - - // �����N�pURL�ƃ|�b�v�A�b�v�pURL - if (is_array($url)) { - $link_url = $url[0]; - $pop_url = $url[1]; - } else { - $link_url = $url; - $pop_url = $url; - } - - // �����N������ƃ|�b�v�A�b�v�̈� - if (is_array($str)) { - $link_str = $str[0]; - $pop_str = $str[1]; - } else { - $link_str = $str; - $pop_str = null; - } - - // �����N�̑��� - if (is_array($attr)) { - $_attr = $attr; - $attr = ''; - foreach ($_attr as $key => $value) { - $attr .= ' ' . $key . '="' . p2h($value) . '"'; - } - } elseif ($attr !== '' && substr($attr, 0, 1) != ' ') { - $attr = ' ' . $attr; - } - - // �����N�̑�����HTML�|�b�v�A�b�v�p�̃C�x���g�n���h���������� - $pop_attr = $attr; - if ($_conf['iframe_popup_event'] == 1) { - $pop_attr .= " onclick=\"stophide=true; showHtmlPopUp('{$pop_url}',event,0" . ($marker ? ' ,this' : '') . "); return false;\""; - } else { - $pop_attr .= " onmouseover=\"showHtmlPopUp('{$pop_url}',event,{$_conf['iframe_popup_delay']}" . ($marker ? ' ,this' : '') . ")\""; - } - $pop_attr .= " onmouseout=\"offHtmlPopUp()\""; - - // �ŏI���� - if (is_null($mode)) { - $mode = $_conf['iframe_popup']; - } - if ($mode == 2 && !is_null($pop_str)) { - $mode = 3; - } elseif ($mode == 3 && is_null($pop_str)) { - global $skin, $STYLE; - - $custom_pop_img = "skin/{$skin}/pop.png"; - if (file_exists($custom_pop_img)) { - $pop_img = p2h($custom_pop_img); - $x = $STYLE['iframe_popup_mark_width']; - $y = $STYLE['iframe_popup_mark_height']; - } else { - $pop_img = 'img/pop.png'; - $y = $x = 12; - } - $pop_str = "\"\""; - } - - // �����N�쐬 - switch ($mode) { - // �}�[�N���� - case 1: - return "{$link_str}"; - // (p)�}�[�N - case 2: - return "(p){$link_str}"; - // [p]�摜�A�T���l�C���Ȃ� - case 3: - return "{$pop_str}{$link_str}"; - // �|�b�v�A�b�v���Ȃ� - default: - return "{$link_str}"; - } - } - - // }}} - // {{{ iframePopupCallback() - - /** - * HTML�|�b�v�A�b�v�ϊ��i�R�[���o�b�N�p�C���^�[�t�F�[�X�j - * - * @param array $s ���K�\���Ƀ}�b�`�����v�f�̔z�� - * @return string - */ - public function iframePopupCallback($s) - { - return $this->iframePopup(p2h($s[1], false), p2h($s[3], false), $s[2]); - } - - // }}} - // {{{ _coloredIdStr() - - /** - * Merged from http://jiyuwiki.com/index.php?cmd=read&page=rep2%A4%C7%A3%C9%A3%C4%A4%CE%C7%D8%B7%CA%BF%A7%CA%D1%B9%B9&alias%5B%5D=pukiwiki%B4%D8%CF%A2 - * - * @return string - */ - protected function _coloredIdStr($idstr, $id, $classed = false) - { - global $_conf; - - if (!(isset($this->thread->idcount[$id]) - && $this->thread->idcount[$id] > 1)) { - return $idstr; - } - if ($classed) { - return $this->_coloredIdStrClassed($idstr, $id); - } - - switch ($_conf['coloredid.rate.type']) { - case 1: - $rate = $_conf['coloredid.rate.times']; - break; - case 2: - $rate = $this->getIdCountRank(10); - break; - case 3: - $rate = $this->getIdCountAverage(); - break; - default: - return $idstr; - } - - if ($rate > 1 && $this->thread->idcount[$id] >= $rate) { - switch ($_conf['coloredid.coloring.type']) { - case 0: - return $this->_coloredIdStr0($idstr, $id); - break; - case 1: - return $this->_coloredIdStr1($idstr, $id); - break; - default: - return $idstr; - } - } - - return $idstr; - } - - // }}} - // {{{ _coloredIdStrClassed() - - private function _coloredIdStrClassed($idstr, $id) - { - $ret = array(); - $arr = explode(':', $idstr); - foreach ($arr as $i => $str) { - if ($i == 0 || $i == 1) { - $ret[] = '' . $str . ''; - } else { - $ret[] = $str; - } - } - return implode(':', $ret); - } - - // }}} - // {{{ _coloredIdStr0() - - /** - * ID�J���[ �I���W�i�����F�p - */ - private function _coloredIdStr0($idstr, $id) - { - if (!function_exists('coloredIdStyle0')) { - require P2_LIB_DIR . '/color/coloredIdStyle0.inc.php'; - } - - if (isset($this->idstyles[$id])) { - $colored = $this->idstyles[$id]; - } else { - $colored = coloredIdStyle0($id, $this->thread->idcount[$id]); - $this->idstyles[$id] = $colored; - } - $ret = array(); - foreach ($arr = explode(':', $idstr) as $i => $str) { - if ($colored[$i]) { - $ret[] = "{$str}"; - } else { - $ret[] = $str; - } - } - return implode(':', $ret); - } - - // }}} - // {{{ _coloredIdStr1() - - /** - * ID�J���[ thermon�ŗp - */ - private function _coloredIdStr1($idstr, $id) - { - if (!function_exists('coloredIdStyle')) { - require P2_LIB_DIR . '/color/coloredIdStyle.inc.php'; - } - - $colored = coloredIdStyle($idstr, $id, $this->thread->idcount[$id]); - $idstr2 = preg_split('/:/',$idstr,2); // �R������ID������𕪊� - $ret = array_shift($idstr2).':'; - if ($colored[1]) { - $idstr2[1] = substr($idstr2[0], 4); - $idstr2[0] = substr($idstr2[0], 0, 4); - } - foreach ($idstr2 as $i => $str) { - if ($colored[$i]) { - $ret .= "{$str}"; - } else { - $ret .= $str; - } - } - return $ret; - } - - // }}} - // {{{ cssClassedId() - - /** - * ID�J���[�Ɏg�p����CSS�N���X����ID�����񂩂�Z�o���ĕԂ�. - */ - static public function cssClassedId($id) - { - return 'idcss-' . bin2hex( - base64_decode(str_replace('.', '+', substr($id, 0, 8)))); - } - - // }}} - // {{{ ���[�e�B���e�B���\�b�h - // {{{ imageHtmlPopup() - - /** - * �摜��HTML�|�b�v�A�b�v&�|�b�v�A�b�v�E�C���h�E�T�C�Y�ɍ��킹�� - */ - public function imageHtmlPopup($img_url, $img_tag, $link_str) - { - global $_conf; - - if ($_conf['expack.ic2.enabled'] && $_conf['expack.ic2.fitimage']) { - $popup_url = 'ic2_fitimage.php?url=' . rawurlencode(str_replace('&', '&', $img_url)); - } else { - $popup_url = $img_url; - } - - $pops = ($_conf['iframe_popup'] == 1) ? $img_tag . $link_str : array($link_str, $img_tag); - return $this->iframePopup(array($img_url, $popup_url), $pops, $_conf['ext_win_target_at'], null, true); - } - - // }}} - // {{{ respopToAsync() - - /** - * ���X�|�b�v�A�b�v��񓯊����[�h�ɉ��H���� - */ - public function respopToAsync($str) - { - $respop_regex = '/(onmouseover)=\"(showResPopUp\(\'(q(\d+)of\d+)\',event\).*?)\"/'; - $respop_replace = '$1="loadResPopUp(' . $this->asyncObjName . ', $4);$2"'; - return preg_replace($respop_regex, $respop_replace, $str); - } - - // }}} - // {{{ getASyncObjJs() - - /** - * �񓯊��ǂݍ��݂ŗ��p����JavaScript�I�u�W�F�N�g�𐶐����� - */ - public function getASyncObjJs() - { - global $_conf; - static $done = array(); - - if (isset($done[$this->asyncObjName])) { - return; - } - $done[$this->asyncObjName] = true; - - $code = << -//asyncObjName} = { - host:"{$this->thread->host}", bbs:"{$this->thread->bbs}", key:"{$this->thread->key}", - readPhp:"{$_conf['read_php']}", readTarget:"{$_conf['bbs_win_target']}" -}; -//]]> -\n -EOJS; - return $code; - } - - // }}} - // {{{ getSpmObjJs() - - /** - * �X�}�[�g�|�b�v�A�b�v���j���[�𐶐�����JavaScript�R�[�h�𐶐����� - */ - public function getSpmObjJs($retry = false) - { - global $_conf, $STYLE; - - if (isset(self::$_spm_objects[$this->spmObjName])) { - return $retry ? self::$_spm_objects[$this->spmObjName] : ''; - } - - $ttitle_en = UrlSafeBase64::encode($this->thread->ttitle); - - if ($_conf['expack.spm.filter_target'] == '' || $_conf['expack.spm.filter_target'] == 'read') { - $_conf['expack.spm.filter_target'] = '_self'; - } - - $motothre_url = $this->thread->getMotoThread(); - $motothre_url = substr($motothre_url, 0, strlen($this->thread->ls) * -1); - - $_spmOptions = array( - 'null', - ((!$_conf['disable_res'] && $_conf['expack.spm.kokores']) ? (($_conf['expack.spm.kokores_orig']) ? '2' : '1') : '0'), - (($_conf['expack.spm.ngaborn']) ? (($_conf['expack.spm.ngaborn_confirm']) ? '2' : '1') : '0'), - (($_conf['expack.spm.filter']) ? '1' : '0'), - (($this->am_on_spm) ? '1' : '0'), - (($_conf['expack.aas.enabled']) ? '1' : '0'), - ); - $spmOptions = implode(',', $_spmOptions); - - // �G�X�P�[�v - $_spm_title = StrCtl::toJavaScript($this->thread->ttitle_hc); - $_spm_url = addslashes($motothre_url); - $_spm_host = addslashes($this->thread->host); - $_spm_bbs = addslashes($this->thread->bbs); - $_spm_key = addslashes($this->thread->key); - $_spm_ls = addslashes($this->thread->ls); - - $code = << -//spmObjName} = { - 'objName':'{$this->spmObjName}', - 'rc':'{$this->thread->rescount}', - 'title':'{$_spm_title}', - 'ttitle_en':'{$ttitle_en}', - 'url':'{$_spm_url}', - 'host':'{$_spm_host}', - 'bbs':'{$_spm_bbs}', - 'key':'{$_spm_key}', - 'ls':'{$_spm_ls}', - 'spmOption':[{$spmOptions}] -}; -SPM.init({$this->spmObjName}); -//]]> -\n -EOJS; - - self::$_spm_objects[$this->spmObjName] = $code; - - return $code; - } - - // }}} - // }}} - // {{{ transLinkDo()����Ăяo�����URL�����������\�b�h - /** - * �����̃��\�b�h�͈����������Ώۃp�^�[���ɍ��v���Ȃ���false��Ԃ��A - * transLinkDo()��false���Ԃ��Ă����$_url_handlers�ɓo�^����Ă��鎟�̊֐�/���\�b�h�ɏ��������悤�Ƃ���B - */ - // {{{ plugin_linkURL() - - /** - * URL�����N - * - * @param string $url - * @param array $purl - * @param string $str - * @return string|false - */ - public function plugin_linkURL($url, $purl, $str) - { - global $_conf; - - if (isset($purl['scheme'])) { - // ime - if ($_conf['through_ime']) { - $link_url = P2Util::throughIme($purl[0]); - } else { - $link_url = $url; - } - - $is_http = ($purl['scheme'] == 'http' || $purl['scheme'] == 'https'); - - // HTML�|�b�v�A�b�v - if ($_conf['iframe_popup'] && $is_http) { - // *pm �w��̏ꍇ�̂݁A���ʂɎ蓮�]���w���lj����� - if (substr($_conf['through_ime'], -2) == 'pm') { - $pop_url = P2Util::throughIme($purl[0], -1); - } else { - $pop_url = $link_url; - } - $link = $this->iframePopup(array($link_url, $pop_url), $str, $_conf['ext_win_target_at']); - } else { - $link = "{$str}"; - } - - // �u���N���`�F�b�J - if ($_conf['brocra_checker_use'] && $_conf['brocra_checker_url'] && $is_http) { - if (strlen($_conf['brocra_checker_query'])) { - $brocra_checker_url = $_conf['brocra_checker_url'] . '?' . $_conf['brocra_checker_query'] . '=' . rawurlencode($purl[0]); - } else { - $brocra_checker_url = rtrim($_conf['brocra_checker_url'], '/') . '/' . $url; - } - $brocra_checker_url_orig = $brocra_checker_url; - // �u���N���`�F�b�J�Eime - if ($_conf['through_ime']) { - $brocra_checker_url = P2Util::throughIme($brocra_checker_url); - } - $check_mark = '�`�F�b�N'; - $check_mark_prefix = '['; - $check_mark_suffix = ']'; - // �u���N���`�F�b�J�EHTML�|�b�v�A�b�v - if ($_conf['iframe_popup']) { - // *pm �w��̏ꍇ�̂݁A���ʂɎ蓮�]���w���lj����� - if (substr($_conf['through_ime'], -2) == 'pm') { - $brocra_checker_url = P2Util::throughIme($brocra_checker_url_orig, -1); - } else { - $brocra_pop_url = $brocra_checker_url; - } - if ($_conf['iframe_popup'] == 3) { - $check_mark = ''; - $check_mark_prefix = ''; - $check_mark_suffix = ''; - } - $brocra_checker_link = $this->iframePopup(array($brocra_checker_url, $brocra_pop_url), $check_mark, $_conf['ext_win_target_at']); - } else { - $brocra_checker_link = "{$check_mark}"; - } - $link .= $check_mark_prefix . $brocra_checker_link . $check_mark_suffix; - } - - return $link; - } - return false; - } - - // }}} - // {{{ plugin_link2chSubject() - - /** - * 2ch bbspink �ƒ����N - * - * @param string $url - * @param array $purl - * @param string $str - * @return string|false - */ - public function plugin_link2chSubject($url, $purl, $str) - { - global $_conf; - - if (preg_match('{^http://(\\w+\\.(?:2ch\\.net|bbspink\\.com))/(\\w+)/$}', $purl[0], $m)) { - $subject_url = "{$_conf['subject_php']}?host={$m[1]}&bbs={$m[2]}"; - return "{$str} [�‚�p2�ŊJ��]"; - } - return false; - } - - // }}} - // {{{ plugin_linkThread() - - /** - * �X���b�h�����N - * - * @param string $url - * @param array $purl - * @param string $str - * @return string|false - */ - public function plugin_linkThread($url, $purl, $str) - { - global $_conf; - - list($nama_url, $host, $bbs, $key, $ls) = P2Util::detectThread($purl[0]); - if ($host && $bbs && $key) { - $read_url = "{$_conf['read_php']}?host={$host}&bbs={$bbs}&key={$key}&ls={$ls}"; - if ($_conf['iframe_popup']) { - if ($ls && preg_match('/^[0-9\\-n]+$/', $ls)) { - $pop_url = $read_url; - } else { - $pop_url = $read_url . '&one=true'; - } - return $this->iframePopup(array($read_url, $pop_url), $str, $_conf['bbs_win_target_at']); - } - return "{$str}"; - } - - return false; - } - - // }}} - // {{{ plugin_linkYouTube() - - /** - * YouTube�����N�ϊ��v���O�C�� - * - * Zend_Gdata_Youtube���g���΃T���l�C�����̑��̏����ȒP�Ɏ擾�ł��邪... - * - * @param string $url - * @param array $purl - * @param string $str - * @return string|false - */ - public function plugin_linkYouTube($url, $purl, $str) - { - global $_conf; - - // http://www.youtube.com/watch?v=Mn8tiFnAUAI - // http://m.youtube.com/watch?v=OhcX0xJsDK8&client=mv-google&gl=JP&hl=ja&guid=ON&warned=True - if (preg_match('{^http://(www|jp|m)\\.youtube\\.com/watch\\?(?:.+&)?v=([0-9a-zA-Z_\\-]+)}', $url, $m)) { - // ime - if ($_conf['through_ime']) { - $link_url = P2Util::throughIme($url); - } else { - $link_url = $url; - } - - // HTML�|�b�v�A�b�v - if ($_conf['iframe_popup']) { - $link = $this->iframePopup($link_url, $str, $_conf['ext_win_target_at']); - } else { - $link = "{$str}"; - } - - $subd = $m[1]; - $id = $m[2]; - - if ($_conf['link_youtube'] == 2) { - return << -EOP; - } else { - return << -EOP; - } - } - return false; - } - - // }}} - // {{{ plugin_linkNicoNico() - - /** - * �j�R�j�R����ϊ��v���O�C�� - * - * @param string $url - * @param array $purl - * @param string $str - * @return string|false - */ - public function plugin_linkNicoNico($url, $purl, $str) - { - global $_conf; - - // http://www.nicovideo.jp/watch?v=utbrYUJt9CSl0 - // http://www.nicovideo.jp/watch/utvWwAM30N0No - // http://m.nicovideo.jp/watch/sm7044684 - if (preg_match('{^http://(?:www|m)\\.nicovideo\\.jp/watch(?:/|(?:\\?v=))([0-9a-zA-Z_-]+)}', $url, $m)) { - // ime - if ($_conf['through_ime']) { - $link_url = P2Util::throughIme($purl[0]); - } else { - $link_url = $url; - } - - // HTML�|�b�v�A�b�v - if ($_conf['iframe_popup']) { - $link = $this->iframePopup($link_url, $str, $_conf['ext_win_target_at']); - } else { - $link = "{$str}"; - } - - $id = $m[1]; - - if ($_conf['link_niconico'] == 2) { - return << -EOP; - } else { - return << -EOP; - } - } - return false; - } - - // }}} - // {{{ plugin_viewImage() - - /** - * �摜�|�b�v�A�b�v�ϊ� - * - * @param string $url - * @param array $purl - * @param string $str - * @return string|false - */ - public function plugin_viewImage($url, $purl, $str) - { - global $_conf; - global $pre_thumb_unlimited, $pre_thumb_limit; - - if (P2Util::isUrlWikipediaJa($url)) { - return false; - } - - // �\������ - if (!$pre_thumb_unlimited && empty($pre_thumb_limit)) { - return false; - } - - if (preg_match('{^https?://.+?\\.(jpe?g|gif|png)$}i', $purl[0]) && empty($purl['query'])) { - $pre_thumb_limit--; // �\�������J�E���^�������� - $img_tag = ""; - - if ($_conf['iframe_popup']) { - $view_img = $this->imageHtmlPopup($url, $img_tag, $str); - } else { - $view_img = "{$img_tag}{$str}"; - } - - // �u���N���`�F�b�J �i�v���r���[�Ƃ͑��e��Ȃ��̂ŃR�����g�A�E�g�j - /*if ($_conf['brocra_checker_use']) { - $link_url_en = rawurlencode($url); - if ($_conf['iframe_popup'] == 3) { - $check_mark = ''; - $check_mark_prefix = ''; - $check_mark_suffix = ''; - } else { - $check_mark = '�`�F�b�N'; - $check_mark_prefix = '['; - $check_mark_suffix = ']'; - } - $view_img .= $check_mark_prefix . "{$check_mark}" . $check_mark_suffix; - }*/ - - return $view_img; - } - - return false; - } - - // }}} - // {{{ plugin_imageCache2() - - /** - * ImageCache2�T���l�C���ϊ� - * - * @param string $url - * @param array $purl - * @param string $str - * @return string|false - */ - public function plugin_imageCache2($url, $purl, $str, - $force = false, - $referer = null) - { - static $serial = 0; - - global $_conf; - global $pre_thumb_unlimited, $pre_thumb_ignore_limit, $pre_thumb_limit; - - if (P2Util::isUrlWikipediaJa($url)) { - return false; - } - - if ((preg_match('{^https?://.+?\\.(jpe?g|gif|png)$}i', $purl[0]) && empty($purl['query'])) || $force) { - // ���� - $serial++; - $thumb_id = 'thumbs' . $serial . $this->thumb_id_suffix; - $tmp_thumb = './img/ic_load.png'; - $url_ht = $url; - $url = $purl[0]; - $url_en = rawurlencode($url) . - ($referer ? '&ref=' . rawurlencode($referer) : ''); - $img_id = null; - - $icdb = new ImageCache2_DataObject_Images(); - - // r=0:�����N;r=1:���_�C���N�g;r=2:PHP�ŕ\�� - // t=0:�I���W�i��;t=1:PC�p�T���l�C��;t=2:�g�їp�T���l�C��;t=3:���ԃC���[�W - $img_url = 'ic2.php?r=1&uri=' . $url_en; - $thumb_url = 'ic2.php?r=1&t=1&uri=' . $url_en; - // ���C�ɃX�������摜�����N - $rank = null; - if ($_conf['expack.ic2.fav_auto_rank']) { - $rank = $this->getAutoFavRank(); - if ($rank !== null) { - $thumb_url .= '&rank=' . $rank; - } - } - - // DB�ɉ摜��񂪓o�^����Ă����Ƃ� - if ($icdb->get($url)) { - $img_id = $icdb->id; - - // �E�B���X�Ɋ������Ă����t�@�C���̂Ƃ� - if ($icdb->mime == 'clamscan/infected') { - return " {$str}"; - } - // ���ځ[��摜�̂Ƃ� - if ($icdb->rank < 0) { - return " {$str}"; - } - - // �I���W�i�����L���b�V������Ă���Ƃ��͉摜�𒼐ړǂݍ��� - $_img_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime); - if (file_exists($_img_url)) { - $img_url = $_img_url; - $cached = true; - } else { - $cached = false; - } - - // �T���l�C�����쐬����Ă��Ă���Ƃ��͉摜�𒼐ړǂݍ��� - $_thumb_url = $this->thumbnailer->thumbUrl($icdb->size, $icdb->md5, $icdb->mime); - if (file_exists($_thumb_url)) { - $thumb_url = $_thumb_url; - // �����X���^�C�����@�\��ON�ŃX���^�C���L�^����Ă��Ȃ��Ƃ���DB���X�V - if (!is_null($this->img_memo) && strpos($icdb->memo, $this->img_memo) === false){ - $update = new ImageCache2_DataObject_Images(); - if (!is_null($icdb->memo) && strlen($icdb->memo) > 0) { - $update->memo = $this->img_memo . ' ' . $icdb->memo; - } else { - $update->memo = $this->img_memo; - } - $update->whereAddQuoted('uri', '=', $url); - } - - // expack.ic2.fav_auto_rank_override �̐ݒ�ƃ����N������OK�Ȃ� - // ���C�ɃX�������摜�����N���㏑���X�V - if ($rank !== null && - self::isAutoFavRankOverride($icdb->rank, $rank)) { - if ($update === null) { - $update = new ImageCache2_DataObject_Images(); - $update->whereAddQuoted('uri', '=', $url); - } - $update->rank = $rank; - } - - if ($update !== null) { - $update->update(); - } - } - - // �T���l�C���̉摜�T�C�Y - $thumb_size = $this->thumbnailer->calc($icdb->width, $icdb->height); - $thumb_size = preg_replace('/(\d+)x(\d+)/', 'width="$1" height="$2"', $thumb_size); - $tmp_thumb = './img/ic_load1.png'; - - $orig_img_url = $img_url; - $orig_thumb_url = $thumb_url; - - // �摜���L���b�V������Ă��Ȃ��Ƃ� - // �����X���^�C�����@�\��ON�Ȃ�N�G����UTF-8�G���R�[�h�����X���^�C���܂߂� - } else { - // �摜���u���b�N���X�gor�G���[���O�ɂ��邩�m�F - if (false !== ($errcode = $icdb->ic2_isError($url))) { - return " {$str}"; - } - - $cached = false; - - $orig_img_url = $img_url; - $orig_thumb_url = $thumb_url; - $img_url .= $this->img_memo_query; - $thumb_url .= $this->img_memo_query; - $thumb_size = ''; - $tmp_thumb = './img/ic_load2.png'; - } - - // �L���b�V������Ă��炸�A�\�����������L���̂Ƃ� - if (!$cached && !$pre_thumb_unlimited && !$pre_thumb_ignore_limit) { - // �\�������𒴂��Ă�����A�\�����Ȃ� - // �\�������𒴂��Ă��Ȃ���΁A�\�������J�E���^�������� - if ($pre_thumb_limit <= 0) { - $show_thumb = false; - } else { - $show_thumb = true; - $pre_thumb_limit--; - } - } else { - $show_thumb = true; - } - - // �\�����[�h - if ($show_thumb) { - $img_tag = ""; - if ($_conf['iframe_popup']) { - $view_img = $this->imageHtmlPopup($img_url, $img_tag, $str); - } else { - $view_img = "{$img_tag}{$str}"; - } - } else { - $img_tag = ""; - $view_img = "{$img_tag}{$str}"; - } - - // �\�[�X�ւ̃����N��ime�t���ŕ\�� - if ($_conf['expack.ic2.enabled'] && $_conf['expack.ic2.through_ime']) { - $ime_url = P2Util::throughIme($url); - if ($_conf['iframe_popup'] == 3) { - $ime_mark = ''; - } else { - $ime_mark = '[ime]'; - } - $view_img .= " {$ime_mark}"; - } - - $view_img .= ''; - - return $view_img; - } - - return false; - } - - // }}} - // {{{ plugin_replaceImageUrl() - - /** - * �u���摜URL+ImageCache2 - */ - public function plugin_replaceImageUrl($url, $purl, $str) - { - static $serial = 0; - - global $_conf; - global $pre_thumb_unlimited, $pre_thumb_ignore_limit, $pre_thumb_limit; - - // +Wiki - global $replaceImageUrlCtl; - - $url = $purl[0]; - $replaced = $replaceImageUrlCtl->replaceImageUrl($url); - if (!$replaced[0]) { - return false; - } - - foreach ($replaced as $v) { - $url_en = rawurlencode($v['url']); - $url_ht = p2h($v['url']); - $ref_en = $v['referer'] ? '&ref=' . rawurlencode($v['referer']) : ''; - - // ���� - $serial++; - $thumb_id = 'thumbs' . $serial . $this->thumb_id_suffix; - $tmp_thumb = './img/ic_load.png'; - - $icdb = new ImageCache2_DataObject_Images(); - - // r=0:�����N;r=1:���_�C���N�g;r=2:PHP�ŕ\�� - // t=0:�I���W�i��;t=1:PC�p�T���l�C��;t=2:�g�їp�T���l�C��;t=3:���ԃC���[�W - // +Wiki - $img_url = 'ic2.php?r=1&uri=' . $url_en . $ref_en; - $thumb_url = 'ic2.php?r=1&t=1&uri=' . $url_en . $ref_en; - // ���C�ɃX�������摜�����N - $rank = null; - if ($_conf['expack.ic2.fav_auto_rank']) { - $rank = $this->getAutoFavRank(); - if ($rank !== null) $thumb_url .= '&rank=' . $rank; - } - - // DB�ɉ摜��񂪓o�^����Ă����Ƃ� - if ($icdb->get($v['url'])) { - - // �E�B���X�Ɋ������Ă����t�@�C���̂Ƃ� - if ($icdb->mime == 'clamscan/infected') { - $result .= ""; - continue; - } - // ���ځ[��摜�̂Ƃ� - if ($icdb->rank < 0) { - $result .= ""; - continue; - } - - // �I���W�i�����L���b�V������Ă���Ƃ��͉摜�𒼐ړǂݍ��� - $_img_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime); - if (file_exists($_img_url)) { - $img_url = $_img_url; - $cached = true; - } else { - $cached = false; - } - - // �T���l�C�����쐬����Ă��Ă���Ƃ��͉摜�𒼐ړǂݍ��� - $_thumb_url = $this->thumbnailer->thumbUrl($icdb->size, $icdb->md5, $icdb->mime); - if (file_exists($_thumb_url)) { - $thumb_url = $_thumb_url; - // �����X���^�C�����@�\��ON�ŃX���^�C���L�^����Ă��Ȃ��Ƃ���DB���X�V - if (!is_null($this->img_memo) && strpos($icdb->memo, $this->img_memo) === false){ - $update = new ImageCache2_DataObject_Images(); - if (!is_null($icdb->memo) && strlen($icdb->memo) > 0) { - $update->memo = $this->img_memo . ' ' . $icdb->memo; - } else { - $update->memo = $this->img_memo; - } - $update->whereAddQuoted('uri', '=', $v['url']); - } - - // expack.ic2.fav_auto_rank_override �̐ݒ�ƃ����N������OK�Ȃ� - // ���C�ɃX�������摜�����N���㏑���X�V - if ($rank !== null && - self::isAutoFavRankOverride($icdb->rank, $rank)) { - if ($update === null) { - $update = new ImageCache2_DataObject_Images(); - $update->whereAddQuoted('uri', '=', $v['url']); - } - $update->rank = $rank; - } - - if ($update !== null) { - $update->update(); - } - } - - // �T���l�C���̉摜�T�C�Y - $thumb_size = $this->thumbnailer->calc($icdb->width, $icdb->height); - $thumb_size = preg_replace('/(\d+)x(\d+)/', 'width="$1" height="$2"', $thumb_size); - $tmp_thumb = './img/ic_load1.png'; - - $orig_img_url = $img_url; - $orig_thumb_url = $thumb_url; - - // �摜���L���b�V������Ă��Ȃ��Ƃ� - // �����X���^�C�����@�\��ON�Ȃ�N�G����UTF-8�G���R�[�h�����X���^�C���܂߂� - } else { - // �摜���u���b�N���X�gor�G���[���O�ɂ��邩�m�F - if (false !== ($errcode = $icdb->ic2_isError($v['url']))) { - $result .= ""; - continue; - } - - $cached = false; - - $orig_img_url = $img_url; - $orig_thumb_url = $thumb_url; - $img_url .= $this->img_memo_query; - $thumb_url .= $this->img_memo_query; - $thumb_size = ''; - $tmp_thumb = './img/ic_load2.png'; - } - - // �L���b�V������Ă��炸�A�\�����������L���̂Ƃ� - if (!$cached && !$pre_thumb_unlimited && !$pre_thumb_ignore_limit) { - // �\�������𒴂��Ă�����A�\�����Ȃ� - // �\�������𒴂��Ă��Ȃ���΁A�\�������J�E���^�������� - if ($pre_thumb_limit <= 0) { - $show_thumb = false; - } else { - $show_thumb = true; - $pre_thumb_limit--; - } - } else { - $show_thumb = true; - } - - // �\�����[�h - if ($show_thumb) { - $img_tag = ""; - if ($_conf['iframe_popup']) { - $view_img = $this->imageHtmlPopup($img_url, $img_tag, ''); - } else { - $view_img = "{$img_tag}"; - } - } else { - $img_tag = ""; - $view_img = "{$img_tag}"; - } - - $view_img .= '"; - . "'{$url_ht}', event)\">"; - - $result .= $view_img; - } - // �\�[�X�ւ̃����N��ime�t���ŕ\�� - $ime_url = P2Util::throughIme($url); - $result .= "{$str}"; - return $result; - } - - /** - * +Wiki:�����N�v���O�C�� - */ - public function plugin_linkPlugin($url, $purl, $str) - { - return $GLOBALS['linkPluginCtl']->replaceLinkToHTML($url, $str); - } - - // }}} - // {{{ plugin_imepitaToImageCache2() - - /** - * imepita��URL�����H����ImageCache2������v���O�C�� - * - * @param string $url - * @param array $purl - * @param string $str - * @return string|false - */ - public function plugin_imepitaToImageCache2($url, $purl, $str) - { - if (preg_match('{^https?://imepita\.jp/(?:image/)?(\d{8}/\d{6})}i', - $purl[0], $m) && empty($purl['query'])) { - $_url = 'http://imepita.jp/image/' . $m[1]; - $_purl = @parse_url($_url); - $_purl[0] = $_url; - return $this->plugin_imageCache2($_url, $_purl, $str, true, $url); - } - return false; - } - - // }}} - // }}} - // {{{ getQuotebacksJson() - - public function getQuotebacksJson() - { - $ret = array(); - foreach ($this->getQuoteFrom() as $resnum => $quote_from) { - if (!$quote_from) { - continue; - } - if ($resnum != 1 && ($resnum < $this->thread->resrange['start'] || $resnum > $this->thread->resrange['to'])) { - continue; - } - $tmp = array(); - foreach ($quote_from as $quote) { - if ($quote != 1 && ($quote < $this->thread->resrange['start'] || $quote > $this->thread->resrange['to'])) { - continue; - } - $tmp[] = $quote; - } - if ($tmp) $ret[] = "{$resnum}:[" . join(',', $tmp) . "]"; - } - return '{' . join(',', $ret) . '}'; - } - - // }}} - // {{{ getResColorJs() - - public function getResColorJs() - { - global $_conf, $STYLE; - - $fontstyle_bold = empty($STYLE['fontstyle_bold']) ? 'normal' : $STYLE['fontstyle_bold']; - $fontweight_bold = empty($STYLE['fontweight_bold']) ? 'normal' : $STYLE['fontweight_bold']; - $fontfamily_bold = $STYLE['fontfamily_bold']; - $backlinks = $this->getQuotebacksJson(); - $colors = array(); - $backlink_colors = join(',', - array_map(create_function('$x', 'return "\'{$x}\'";'), - explode(',', $_conf['backlink_coloring_track_colors'])) - ); - $prefix = $this->_matome ? "t{$this->_matome}" : ''; - return << -if (typeof rescolObjs == 'undefined') rescolObjs = []; -rescolObjs.push((function() { - var obj = new BacklinkColor('{$prefix}'); - obj.colors = [{$backlink_colors}]; - obj.highlightStyle = {fontStyle :'{$fontstyle_bold}', fontWeight : '{$fontweight_bold}', fontFamily : '{$fontfamily_bold}'}; - obj.backlinks = {$backlinks}; - return obj; -})()); - -EOJS; - } - - // }}} - // {{{ getIdsForRenderJson() - - public function getIdsForRenderJson() - { - $ret = array(); - if ($this->_ids_for_render) { - foreach ($this->_ids_for_render as $id => $count) { - $ret[] = "'{$id}':{$count}"; - } - } - return '{' . join(',', $ret) . '}'; - } - - // }}} - // {{{ getIdColorJs() - - public function getIdColorJs() - { - global $_conf, $STYLE; - - if ($_conf['coloredid.enable'] < 1 || $_conf['coloredid.click'] < 1) { - return ''; - } - if (count($this->thread->idcount) < 1) { - return ''; - } - - $idslist = $this->getIdsForRenderJson(); - - $rate = $_conf['coloredid.rate.times']; - $tops = $this->getIdCountRank(10); - $average = $this->getIdCountAverage(); - $color_init = ''; - if ($_conf['coloredid.rate.type'] > 0) { - switch($_conf['coloredid.rate.type']) { - case 2: - $init_rate = $tops; - break; - case 3: - $init_rate = $average; - break; - case 1: - $init_rate = $rate; - default: - } - if ($init_rate > 1) - $color_init .= 'idCol.initColor(' . $init_rate . ', idslist);'; - } - $color_init .= "idCol.rate = {$rate};"; - if (!$this->_matome) { - $color_init .= "idCol.tops = {$tops};"; - $color_init .= "idCol.average = {$average};"; - } - $hissiCount = $_conf['coloredid.rate.hissi.times']; - $mark_colors = join(',', - array_map(create_function('$x', 'return "\'{$x}\'";'), - explode(',', $_conf['coloredid.marking.colors'])) - ); - $fontstyle_bold = empty($STYLE['fontstyle_bold']) ? 'normal' : $STYLE['fontstyle_bold']; - $fontweight_bold = empty($STYLE['fontweight_bold']) ? 'normal' : $STYLE['fontweight_bold']; - $fontfamily_bold = $STYLE['fontfamily_bold']; - $uline = $STYLE['a_underline_none'] != 1 - ? 'idCol.colorStyle["textDecoration"] = "underline"' : ''; - return << -(function() { -var idslist = {$idslist}; -if (typeof idCol == 'undefined') { - idCol = new IDColorChanger(idslist, {$hissiCount}); - idCol.colors = [{$mark_colors}]; -{$uline}; - idCol.highlightStyle = {fontStyle :'{$fontstyle_bold}', fontWeight : '{$fontweight_bold}', fontFamily : '{$fontfamily_bold}', fontSize : '104%'}; -} else idCol.addIdlist(idslist); -{$color_init} -idCol.setupSPM('{$this->spmObjName}'); -})(); - -EOJS; - } - - // }}} - // {{{ getIdCountAverage() - - public function getIdCountAverage() - { - if ($this->_idcount_average !== null) { - return $this->_idcount_average; - } - - $sum = 0; - $param = 0; - - foreach ($this->thread->idcount as $count) { - if ($count > 1) { - $sum += $count; - $param++; - } - } - - $result = ($param < 1) ? 0 : intval(ceil($sum / $param)); - $this->_idcount_average = $result; - - return $result; - } - - // }}} - // {{{ getIdCountRank() - - public function getIdCountRank($rank) - { - if ($this->_idcount_tops !== null) { - return $this->_idcount_tops; - } - - $ranking = array(); - - foreach ($this->thread->idcount as $count) { - if ($count > 1) { - $ranking[] = $count; - } - } - - if (count($ranking) == 0) { - return 0; - } - - rsort($ranking); - $rcount = count($ranking); - - $result = ($rcount >= $rank) ? $ranking[$rank - 1] : $ranking[$rcount - 1]; - $this->_idcount_tops = $result; - - return $result; - } - - // }}} -} - -// }}} - -/* - * Local Variables: - * mode: php - * coding: cp932 - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: nil - * End: - */ -// vim: set syn=php fenc=cp932 ai et ts=4 sw=4 sts=4 fdm=marker: diff --git a/rep2/live_read.php b/rep2/live_read.php index e9f9b1650..e3d9bb49a 100755 --- a/rep2/live_read.php +++ b/rep2/live_read.php @@ -1,6 +1,6 @@ getThreadInfoFromIdx(); -//========================================================== -// preview >>1 -//========================================================== - -//if (!empty($_GET['onlyone'])) { -if (!empty($_GET['one'])) { - $aThread->ls = '1'; - $aThread->resrange = array('start' => 1, 'to' => 1, 'nofirst' => false); - - // �K���������m�ł͂Ȃ����֋X�I�� - //if (!isset($aThread->rescount) && !empty($_GET['rc'])) { - if (!isset($aThread->rescount) && !empty($_GET['rescount'])) { - //$aThread->rescount = $_GET['rc']; - $aThread->rescount = (int)$_GET['rescount']; - } - - $preview = $aThread->previewOne(); - $ptitle_ht = p2h($aThread->itaj) . ' / ' . $aThread->ttitle_hd; - - include READ_HEADER_INC_PHP; - echo $preview; - include READ_FOOTER_INC_PHP; - - return; -} - //=========================================================== // DAT�̃_�E�����[�h //=========================================================== @@ -284,99 +258,10 @@ //$GLOBALS['debug'] && $GLOBALS['profiler']->enterSection("datToHtml"); if ($aThread->rescount) { - $mainhtml = ''; - require_once P2_LIB_DIR . '/live/live_ShowThreadPc.php'; - $aShowThread = new ShowThreadPc($aThread); - - if ($_conf['expack.spm.enabled']) { - echo $aShowThread->getSpmObjJs(); - } - - $res1 = $aShowThread->quoteOne(); // >>1�|�b�v�A�b�v�p - if ($_conf['coloredid.enable'] > 0 && $_conf['coloredid.click'] > 0 && - $_conf['coloredid.rate.type'] > 0) { - if ($_GET['showbl']) { - $mainhtml = $aShowThread->datToHtml_resFrom(true); - } else { - $mainhtml .= $aShowThread->datToHtml(true); - } - $mainhtml .= $res1['q']; - } else { - if ($_GET['showbl']) { - $aShowThread->datToHtml_resFrom(); - } else { - $aShowThread->datToHtml(); - } - echo $res1['q']; - } - - - // ���X�ǐՃJ���[ - if ($_conf['backlink_coloring_track']) { - echo $aShowThread->getResColorJs(); - } - - // ID�J���[�����O - if ($_conf['coloredid.enable'] > 0 && $_conf['coloredid.click'] > 0) { - echo $aShowThread->getIdColorJs(); - // �u���E�U���׌y���̂��߁ACSS���������X�N���v�g�̌�ŃR���e���c�� - // �����_�����O������ - echo $mainhtml; - } - - // �O���c�[�� - $pluswiki_js = ''; - - if ($_conf['wiki.idsearch.spm.mimizun.enabled']) { - if (!class_exists('Mimizun', false)) { - require P2_PLUGIN_DIR . '/mimizun/Mimizun.php'; - } - $mimizun = new Mimizun(); - $mimizun->host = $aThread->host; - $mimizun->bbs = $aThread->bbs; - if ($mimizun->isEnabled()) { - $pluswiki_js .= "WikiTools.addMimizun({$aShowThread->spmObjName});"; - } - } - - if ($_conf['wiki.idsearch.spm.hissi.enabled']) { - if (!class_exists('Hissi', false)) { - require P2_PLUGIN_DIR . '/hissi/Hissi.php'; - } - $hissi = new Hissi(); - $hissi->host = $aThread->host; - $hissi->bbs = $aThread->bbs; - if ($hissi->isEnabled()) { - $pluswiki_js .= "WikiTools.addHissi({$aShowThread->spmObjName});"; - } - } - - if ($_conf['wiki.idsearch.spm.stalker.enabled']) { - if (!class_exists('Stalker', false)) { - require P2_PLUGIN_DIR . '/stalker/Stalker.php'; - } - $stalker = new Stalker(); - $stalker->host = $aThread->host; - $stalker->bbs = $aThread->bbs; - if ($stalker->isEnabled()) { - $pluswiki_js .= "WikiTools.addStalker({$aShowThread->spmObjName});"; - } - } - - if ($pluswiki_js !== '') { - echo << -// - -EOP; - } + echo '
    '; } elseif ($aThread->diedat && count($aThread->datochi_residuums) > 0) { - require_once P2_LIB_DIR . '/ShowThreadPc.php'; - $aShowThread = new ShowThreadPc($aThread); - echo $aShowThread->getDatochiResiduums(); + echo '�ߋ����O����DAT���擾�o���Ȃ��X���b�h�͎����ł��܂���'; } //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection("datToHtml"); @@ -404,37 +289,6 @@ } flush(); -//=========================================================== -// idx�̒l��ݒ�A�L�^ -//=========================================================== -if ($aThread->rescount) { - - // �����̎��́A���ǐ����X�V���Ȃ� - if ((isset($GLOBALS['word']) && strlen($GLOBALS['word']) > 0) || $is_ajax) { - $aThread->readnum = $idx_data[5]; - } else { - $aThread->readnum = min($aThread->rescount, max(0, $idx_data[5], $aThread->resrange['to'])); - } - $newline = $aThread->readnum + 1; // $newline�͔p�~�\�肾���A���݊��p�ɔO�̂��� - - $sar = array($aThread->ttitle, $aThread->key, $idx_data[2], $aThread->rescount, '', - $aThread->readnum, $idx_data[6], $idx_data[7], $idx_data[8], $newline, - $idx_data[10], $idx_data[11], $aThread->datochiok); - P2Util::recKeyIdx($aThread->keyidx, $sar); // key.idx�ɋL�^ -} - -//=========================================================== -// �������L�^ -//=========================================================== -if ($aThread->rescount && !$is_ajax) { - recRecent(implode('<>', array($aThread->ttitle, $aThread->key, $idx_data[2], '', '', - $aThread->readnum, $idx_data[6], $idx_data[7], $idx_data[8], $newline, - $aThread->host, $aThread->bbs))); -} - -// NG���ځ[����L�^ -NgAbornCtl::saveNgAborns(); - // �ȏ� --------------------------------------------------------------- exit; @@ -462,63 +316,6 @@ function detectThread() } } -// }}} -// {{{ recRecent() - -/** - * �������L�^���� - */ -function recRecent($data) -{ - global $_conf; - - $lock = new P2Lock($_conf['recent_idx'], false); - - // $_conf['recent_idx'] �t�@�C�����Ȃ���ΐ��� - FileCtl::make_datafile($_conf['recent_idx']); - - $lines = FileCtl::file_read_lines($_conf['recent_idx'], FILE_IGNORE_NEW_LINES); - $neolines = array(); - - // {{{ �ŏ��ɏd���v�f���폜���Ă��� - - if (is_array($lines)) { - foreach ($lines as $l) { - $lar = explode('<>', $l); - $data_ar = explode('<>', $data); - if ($lar[1] == $data_ar[1]) { continue; } // key�ŏd����� - if (!$lar[1]) { continue; } // key�̂Ȃ����͕̂s���f�[�^ - $neolines[] = $l; - } - } - - // }}} - - // �V�K�f�[�^�lj� - array_unshift($neolines, $data); - - while (sizeof($neolines) > $_conf['rct_rec_num']) { - array_pop($neolines); - } - - // {{{ �������� - - if ($neolines) { - $cont = ''; - foreach ($neolines as $l) { - $cont .= $l . "\n"; - } - - if (FileCtl::file_write_contents($_conf['recent_idx'], $cont) === false) { - p2die('cannot write file.'); - } - } - - // }}} - - return true; -} - // }}} /* diff --git a/rep2/post.php b/rep2/post.php index d07f7a907..0902dde02 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -858,6 +858,14 @@ function showCookieConfirmation($host, $response) $form->appendChild($elem); } + // �������[�h + if (!empty($_POST['live'])) { + $elem = $hidden->cloneNode(); + $elem->setAttribute('name', 'live'); + $elem->setAttribute('value', '1'); + $form->appendChild($elem); + } + // �����r���[�w�� if ($_conf['b'] != $_conf['client_type']) { $elem = $hidden->cloneNode(); From 97ad2e4c9ee4a6201fe7fd65604c05517f7a7d0f Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Wed, 18 Mar 2015 11:01:42 +0900 Subject: [PATCH 069/339] =?UTF-8?q?=E4=B8=8B=E6=9B=B8=E3=81=8D=E4=BF=9D?= =?UTF-8?q?=E5=AD=98(expack.editor.savedraft)=E3=81=8C=E7=84=A1=E5=8A=B9?= =?UTF-8?q?=E3=81=AA=E3=81=A8=E3=81=8D=E3=81=AB=E5=AE=9F=E6=B3=81=E3=83=A2?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=81=8B=E3=82=89=E6=9B=B8=E3=81=8D=E8=BE=BC?= =?UTF-8?q?=E3=82=81=E3=81=AA=E3=81=84=E4=B8=8D=E5=85=B7=E5=90=88=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/live_post_form.php | 103 ++++++++++++++++++++-------------------- 1 file changed, 51 insertions(+), 52 deletions(-) diff --git a/rep2/live_post_form.php b/rep2/live_post_form.php index 7214d3bce..14182b32a 100755 --- a/rep2/live_post_form.php +++ b/rep2/live_post_form.php @@ -124,61 +124,60 @@ echo << EOP; +} +// +live �����K���p�^�C�}�[ +if ($_GET['w_reg'] && $_conf['live.write_regulation']) { + $load_control = "cd_on()"; + if ($_conf['live.write_regulation'] == 3) { + $count_down_second = "31"; + } else if ($_conf['live.write_regulation'] == 2) { + $count_down_second = "21"; + } else if ($_conf['live.write_regulation'] == 1) { + $count_down_second = "11"; + } +} else { + $load_control = "cd_off()"; + $count_down_second = "0"; +} - // +live �����K���p�^�C�}�[ - if ($_GET['w_reg'] && $_conf['live.write_regulation']) { - $load_control = "cd_on()"; - if ($_conf['live.write_regulation'] == 3) { - $count_down_second = "31"; - } else if ($_conf['live.write_regulation'] == 2) { - $count_down_second = "21"; - } else if ($_conf['live.write_regulation'] == 1) { - $count_down_second = "11"; - } - } else { - $load_control = "cd_off()"; - $count_down_second = "0"; - } - - echo << - - -LIVE; +echo << + + +LIVE; + $body_on_load = << Date: Wed, 18 Mar 2015 22:58:40 +0900 Subject: [PATCH 070/339] =?UTF-8?q?Revert=20"=E6=B6=88=E3=81=97=E3=81=A6?= =?UTF-8?q?=E3=82=82=E5=AE=9F=E6=B3=81=E3=81=AB=E5=BD=B1=E9=9F=BF=E3=81=AA?= =?UTF-8?q?=E3=81=95=E3=81=9D=E3=81=86=E3=81=AA=E3=81=AE=E3=81=A7live/live?= =?UTF-8?q?=5FShowThread.php=E3=82=92=E5=89=8A=E9=99=A4"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit b808ad83a8ee82f991d752364a80401210cb3712. 次は殺す。必ず殺す。 --- lib/live/live_ShowThread.php | 2050 ++++++++++++++++++++++++++++++++ lib/live/live_ShowThreadPc.php | 1999 +++++++++++++++++++++++++++++++ rep2/live_read.php | 209 +++- rep2/post.php | 8 - rep2/read.php | 4 +- rep2/read_async.php | 8 - 6 files changed, 4257 insertions(+), 21 deletions(-) create mode 100755 lib/live/live_ShowThread.php create mode 100755 lib/live/live_ShowThreadPc.php diff --git a/lib/live/live_ShowThread.php b/lib/live/live_ShowThread.php new file mode 100755 index 000000000..9d205aedb --- /dev/null +++ b/lib/live/live_ShowThread.php @@ -0,0 +1,2050 @@ +(<[Aa][ ].+?>)(.*?)()) # �����N�iPCRE�̓�����A�K�����̃p�^�[�����ŏ��Ɏ��s����j +| +(?: + (?P # ���p + ((?:>|��){1,2}[ ]?) # ���p�� + ( + (?:[1-9]\\d{0,3}) # 1�–ڂ̔ԍ� + (?: + (?:[ ]?(?:[,=]|�A)[ ]?[1-9]\\d{0,3})+ # �A�� + | + -(?:[1-9]\\d{0,3})? # �͈� + )? + ) + (?=\\D|$) + ) # ���p�����܂� +| # PHP 5.3����ɂ���Ȃ�A����\'�̃G�X�P�[�v���O���ANOWDOC�ɂ��� + (?P(ftp|h?t?tps?)://([0-9A-Za-z][\\w;/?:@=&$\\-_.+!*\'(),#%\\[\\]^~]+)) # URL + ([^\\s<>]*) # URL�̒���A�^�Oor�z���C�g�X�y�[�X�������܂ł̕����� +| + (?PID:[ ]?([0-9A-Za-z/.+]{8,11})(?=[^0-9A-Za-z/.+]|$)) # ID�i8,10�� +PC/�g�ю��ʃt���O�j +) +}x'; + + /** + * ���_�C���N�^�̎�� + * + * @var int + */ + const REDIRECTOR_NONE = 0; + const REDIRECTOR_IMENU = 1; + const REDIRECTOR_PINKTOWER = 2; + const REDIRECTOR_MACHIBBS = 3; + + /** + * NG���ځ[��̎�� + * + * @var int + */ + const ABORN = -1; + const NG_NONE = 0; + const NG_NAME = 1; + const NG_MAIL = 2; + const NG_ID = 4; + const NG_MSG = 8; + const NG_FREQ = 16; + const NG_CHAIN = 32; + const NG_AA = 64; + + // }}} + // {{{ static properties + + /** + * �܂Ƃߓǂ݃��[�h���̃X���b�h�� + * + * @var int + */ + static private $_matome_count = 0; + + /** + * �{���ȊO��NG���ځ[��Ƀq�b�g�������� + * + * @var int + */ + static protected $_ngaborns_head_hits = 0; + + /** + * �{����NG���ځ[��Ƀq�b�g�������� + * + * @var int + */ + static protected $_ngaborns_body_hits = 0; + + /** + * getAnchorRegex() �̃L���b�V�� + * + * @var array + */ + static private $_anchorRegexes = array(); + + /** + * _getAnchorRegexParts() �̃L���b�V�� + * + * @var array + */ + static private $_anchorRegexParts = null; + + // }}} + // {{{ properties + + /** + * �܂Ƃߓǂ݃��[�h���̃X���b�h�ԍ� + * + * @var int + */ + protected $_matome; + + /** + * URL����������֐��E���\�b�h���Ȃǂ��i�[����z�� + * (�g�ݍ���) + * + * @var array + */ + protected $_url_handlers; + + /** + * URL����������֐��E���\�b�h���Ȃǂ��i�[����z�� + * (���[�U��`�A�g�ݍ��݂̂��̂��D��) + * + * @var array + */ + protected $_user_url_handlers; + + /** + * �p�oID�����ځ[�񂷂� + * + * @var bool + */ + protected $_ngaborn_frequent; + + /** + * NG or ���ځ[�񃌃X�����邩�ǂ��� + * + * @var bool + */ + protected $_has_ngaborns; + + /** + * ���ځ[�񃌃X�ԍ������NG���X�ԍ����i�[����z�� + * array_intersect()�������悭�s�����߁A�Y�����郌�X�ԍ��͕�����ɃL���X�g���Ċi�[���� + * + * @var array + */ + protected $_aborn_nums; + protected $_ng_nums; + + /** + * ���_�C���N�^�̎�� + * + * @var int + */ + protected $_redirector; + + /** + * �X���b�h�I�u�W�F�N�g + * + * @var ThreadRead + */ + public $thread; + + /** + * �A�N�e�B�u���i�[�E�I�u�W�F�N�g + * + * @var ActiveMona + */ + public $activeMona; + + /** + * �A�N�e�B�u���i�[���L�����ۂ� + * + * @var bool + */ + public $am_enabled = false; + + /** + * ���p���Ă��郌�X�ԍ���o�^�����z�� + * + * @var array + */ + protected $_quote_res_nums; + + + /** + * ���p�`�F�b�N�ς݃��X�ԍ��̔z�� + * + * @var array + */ + protected $_quote_res_nums_checked; + + /** + * ���p�ϊ��ς݃��X�ԍ��̔z�� + * + * @var array + */ + protected $_quote_res_nums_done; + + /** + * ���X�ԍ��`�F�b�N�̍ċA�̐[�� + * + * @var int + */ + private $_quote_check_depth; + + /** + * �f�t�H���g�̖��O + * + * @var string + */ + protected $_nanashiName = null; + + /** + * ��A���J�[���W�v�����z��(�͈̓A���J�[�܂�) // [��Q�ƃ��X�� : [�Q�ƃ��X��, ...], ...) + * + * @var array + */ + protected $_quote_from = null; + + /** + * �A���J�[���W�v�����z��(�͈̓A���J�[����) // [���X�� : [�Q�Ɛ惌�X��, ...], ...) + * + * @var array + */ + protected $_quote_to = null; + + /** + * ���C�Ɏ��������N + * + * @var bool + */ + private $_auto_fav_rank = false; + + /** + * �����N����T���l�C���𐶐�����N���X�̃C���X�^���X + * + * @var ImageCache2_Thumbnailer + */ + public $thumbnailer; + + /** + * �C�����C���\������T���l�C���𐶐�����N���X�̃C���X�^���X + * + * @var ImageCache2_Thumbnailer + */ + public $inline_prvw; + + /** + * �C�����C���T���l�C����ID�����ڔ��� + * + * @var string + */ + public $thumb_id_suffix; + + /** + * �摜�ɕt�����郁�� + * + * @var string + */ + public $img_memo; + + /** + * �摜�Ƀ�����t���邽�߂̃N�G�������� + * + * @var string + */ + public $img_memo_query; + + /** + * �摜�𑜓x + * + * @var float + */ + public $img_dpr = 1.0; + + /** + * �摜�𑜓x���w�肷��N�G�������� + * + * @var string + */ + public $img_dpr_query; + + // }}} + // {{{ constructor + + /** + * �R���X�g���N�^ + */ + protected function __construct(ThreadRead $aThread, $matome = false) + { + global $_conf; + + // �X���b�h�I�u�W�F�N�g��o�^ + $this->thread = $aThread; + $this->str_to_link_regex = $this->_buildStrToLinkRegex(); + + // �܂Ƃߓǂ݃��[�h���ۂ� + if ($matome) { + $this->_matome = ++self::$_matome_count; + } else { + $this->_matome = false; + } + + $this->_url_handlers = array(); + $this->_user_url_handlers = array(); + + $this->_ngaborn_frequent = 0; + if ($_conf['ngaborn_frequent']) { + if ($_conf['ngaborn_frequent_dayres'] == 0) { + $this->_ngaborn_frequent = $_conf['ngaborn_frequent']; + } elseif ($this->thread->setDayRes() && $this->thread->dayres < $_conf['ngaborn_frequent_dayres']) { + $this->_ngaborn_frequent = $_conf['ngaborn_frequent']; + } + } + + $this->_has_ngaborns = false; + $this->_aborn_nums = array(); + $this->_ng_nums = array(); + + if (P2Util::isHostBbsPink($this->thread->host)) { + $this->_redirector = self::REDIRECTOR_PINKTOWER; + } elseif (P2Util::isHost2chs($this->thread->host)) { + $this->_redirector = self::REDIRECTOR_IMENU; + } elseif (P2Util::isHostMachiBbs($this->thread->host)) { + $this->_redirector = self::REDIRECTOR_MACHIBBS; + } else { + $this->_redirector = self::REDIRECTOR_NONE; + } + + $this->_quote_res_nums = array(); + $this->_quote_res_nums_checked = array(); + $this->_quote_res_nums_done = array(); + } + + // }}} + + /** + * @param void + * @return void + */ + protected function setBbsNonameName() + { + $st = new SettingTxt($this->thread->host, $this->thread->bbs); + $st->setSettingArray(); + if (array_key_exists('BBS_NONAME_NAME', $st->setting_array)) { + $BBS_NONAME_NAME = $st->setting_array['BBS_NONAME_NAME']; + if (strlen($BBS_NONAME_NAME)) { + $this->_nanashiName = $BBS_NONAME_NAME; + } + } + } + + // {{{ getDatToHtml() + + /** + * Dat��HTML�ϊ��������̂��擾���� + * + * @param bool $is_fragment + * @return bool|string + */ + public function getDatToHtml($is_fragment = false) + { + return $this->datToHtml(true, $is_fragment); + } + public function getDatToHtml_resFrom($is_fragment = false) + { + return $this->datToHtml_resFrom(true, $is_fragment); + } + + // }}} + // {{{ datToHtml() + + /** + * Dat��HTML�ɕϊ����ĕ\������ + * + * @param bool $capture true�Ȃ�ϊ����ʂ��o�͂����ɕԂ� + * @param bool $is_fragment true�Ȃ�
    �ň͂܂Ȃ� + * @return bool|string + */ + public function datToHtml($capture = false, $is_fragment = false) + { + global $_conf, $filter_hits, $last_hit_resnum; + + $aThread = $this->thread; + + // �\�����X�͈͂��w�肳��Ă��Ȃ���� + if (!$aThread->resrange) { + $error = '

    p2 error: {$this->resrange} is false at datToHtml()

    '; + if ($capture) { + return $error; + } else { + echo $error; + return false; + } + } + + $start = $aThread->resrange['start']; + $to = $aThread->resrange['to']; + $nofirst = $aThread->resrange['nofirst']; + + $is_ktai = $_conf['ktai']; + $resFilter = ResFilter::getFilter(); + if ($resFilter && $resFilter->hasWord()) { + $do_filtering = true; + $nofirst = true; + } else { + $do_filtering = false; + } + + $datlines = $aThread->datlines; + $count = count($datlines); + + $buf['body'] = $is_fragment ? '' : "
    \n"; + $buf['q'] = ''; + + // �܂� 1 ��\�� + if (!$nofirst) { + $res = $this->transRes($datlines[0], 1); + if (is_array($res)) { + $buf['body'] .= $res['body']; + $buf['q'] .= $res['q'] ? $res['q'] : ''; + } else { + $buf['body'] .= $res; + } + } + + // �A���̂��߁A�͈͊O��NG���ځ[��`�F�b�N + if ($_conf['ngaborn_chain_all'] && empty($_GET['nong'])) { + $pre = min($count, $start); + for ($i = ($nofirst) ? 0 : 1; $i < $pre; $i++) { + $n = $i + 1; + list($name, $mail, $date_id, $msg) = $aThread->explodeDatLine($datlines[$i]); + if (($id = $aThread->ids[$n]) !== null) { + $date_id = str_replace($aThread->idp[$n] . $id, "ID:$id", $date_id); + } + $this->_ngAbornCheck($n, strip_tags($name), $mail, $date_id, $id, $msg); + } + } + + // �t�B���^�����O + if ($do_filtering) { + $datlines = $resFilter->apply($this); + $filter_hits = $resFilter->hits; + $last_hit_resnum = $resFilter->last_hit_resnum; + } + + // �w��͈͂�\�� + $i = 0; + $n = 0; + $rn = 0; + + if ($do_filtering) { + if (!empty($resFilter->range)) { + $start = $resFilter->range['start']; + $to = $resFilter->range['to']; + } + $pattern = $resFilter->getPattern(); + } else { + $pattern = null; + } + + foreach ($datlines as $i => $ares) { + if ($ares === null) { + continue; + } + $n++; + if ($i === 0 && !$nofirst) { + continue; + } + if ($n < $start) { + continue; + } + if ($n > $to) { + break; + } + $rn = $i + 1; + $res = $this->transRes($ares, $rn, $pattern); + if (is_array($res)) { + $buf['body'] .= $res['body']; + $buf['q'] .= $res['q'] ? $res['q'] : ''; + } else { + $buf['body'] .= $res; + } + if (!$capture && $n % 10 == 0) { + echo $buf['body']; + if ($do_filtering && !$is_ktai) { + echo "\n"; + } + flush(); + $buf['body'] = ''; + } + } + + if ($this->thread->readnum < $rn) { + $this->thread->readnum = $rn; + } + + if ($do_filtering && !$is_ktai) { + $buf['body'] .= "\n"; + } + +// +live �I�[�g�����[�h�����X�����e�̕\���� +echo <<
    \n +LIVE; + + if (!$is_fragment) { + $buf['body'] .= "\n"; + } + + if ($capture) { + return $buf['body'] . $buf['q']; + } else { + echo $buf['body']; + echo $buf['q']; + flush(); + return true; + } + } + + /** + * �w��̏����݂ւ̃��X��HTML�ɕϊ����ĕ\������ + * + * @param bool $capture true�Ȃ�ϊ����ʂ��o�͂����ɕԂ� + * @param bool $is_fragment true�Ȃ�
    �ň͂܂Ȃ� + * @param bool $show_rootres true�Ȃ�w��̏����݂����ʂɊ܂߂� + * @return bool|string + */ + public function datToHtml_resFrom($capture = false, $is_fragment = false, $show_rootres = false) + { + global $_conf; + + $aThread = $this->thread; + + // �\�����X���w�肳��Ă��Ȃ���� + $target = $aThread->resrange['start']; + if (!$aThread->resrange || $target != $aThread->resrange['to']) { + $error = '

    p2 error: {$this->resrange} is false at datToHtml()

    '; + if ($capture) { + return $error; + } else { + echo $error; + return false; + } + } + + $datlines = $aThread->datlines; + $count = count($datlines); + + $buf['body'] = $is_fragment ? '' : "
    \n"; + $buf['q'] = ''; + + // �A���̂��߁A�͈͊O��NG���ځ[��`�F�b�N + if ($_conf['ngaborn_chain_all'] && empty($_GET['nong'])) { + $pre = min($count, $start); + for ($i = ($nofirst) ? 0 : 1; $i < $pre; $i++) { + $n = $i + 1; + list($name, $mail, $date_id, $msg) = $aThread->explodeDatLine($datlines[$i]); + if (($id = $aThread->ids[$n]) !== null) { + $date_id = str_replace($aThread->idp[$n] . $id, "ID:$id", $date_id); + } + $this->_ngAbornCheck($n, strip_tags($name), $mail, $date_id, $id, $msg); + } + } + + // ���X�W�J + $datlines = array_fill(0, count($aThread->datlines), null); + if ($show_rootres) { + $datlines[$target - 1] = $aThread->datlines[$target - 1]; + } + list($name, $mail, $date_id, $msg) = + $aThread->explodeDatLine($aThread->datlines[$target - 1]); + foreach ($this->checkQuoteResNums($target, $name, $msg, false, true, false) as $rn) { + $ri = $rn - 1; + if ($datlines[$ri] === null) { + $datlines[$ri] = $aThread->datlines[$ri]; + } + } + + // �\�� + $i = 0; + $n = 0; + $rn = 0; + foreach ($datlines as $i => $ares) { + if ($ares === null) { + continue; + } + $n++; + $rn = $i + 1; + $res = $this->transRes($ares, $rn); + if (is_array($res)) { + $buf['body'] .= $res['body']; + $buf['q'] .= $res['q'] ? $res['q'] : ''; + } else { + $buf['body'] .= $res; + } + if (!$capture && $n % 10 == 0) { + echo $buf['body']; + flush(); + $buf['body'] = ''; + } + } + + if (!$is_fragment) { + $buf['body'] .= "
    \n"; + } + + if ($capture) { + return $buf['body'] . $buf['q']; + } else { + echo $buf['body']; + echo $buf['q']; + flush(); + return true; + } + } + + // }}} + // {{{ transRes() + + /** + * Dat���X��HTML���X�ɕϊ����� + * + * @param string $ares dat��1���C�� + * @param int $i ���X�ԍ� + * @return string + */ + abstract public function transRes($ares, $i); + + // }}} + // {{{ transName() + + /** + * ���O��HTML�p�ɕϊ����� + * + * @param string $name ���O + * @return string + */ + abstract public function transName($name); + + // }}} + // {{{ transMsg() + + /** + * dat�̃��X���b�Z�[�W��HTML�\���p���b�Z�[�W�ɕϊ����� + * + * @param string $msg ���b�Z�[�W + * @param int $mynum ���X�ԍ� + * @return string + */ + abstract public function transMsg($msg, $mynum); + + // }}} + // {{{ replaceBeId() + + /** + * BE�v���t�@�C�������N�ϊ� + */ + public function replaceBeId($date_id, $i) + { + global $_conf; + + $beid_replace = "thread->host}/test/read.cgi/{$this->thread->bbs}/{$this->thread->key}/{$i}\"{$_conf['ext_win_target_at']}>Lv.\$2"; + + // + $be_match = '||i'; + if (preg_match($be_match, $date_id)) { + $date_id = preg_replace($be_match, $beid_replace, $date_id); + + } else { + + $beid_replace = "thread->host}/test/read.cgi/{$this->thread->bbs}/{$this->thread->key}/{$i}\"{$_conf['ext_win_target_at']}>?\$2"; + $date_id = preg_replace('|BE: ?(\d+)-(#*)|i', $beid_replace, $date_id); + } + + return $date_id; + } + + // }}} + // {{{ _ngAbornCheck() + + /** + * NG���ځ[��`�F�b�N + * + * @param int $i ���X�ԍ� + * @param string $name ���O�� + * @param string $mail ���[���� + * @param string $date_id ���t�EID�� + * @param string $id ID + * @param string $msg ���X�{�� + * @param bool $nong NG�`�F�b�N�����邩�ǂ��� + * @param array &$info NG�̗��R���i�[�����ϐ��̎Q�� + * @return int NG�^�C�v�BShowThread::NG_XXX �̃r�b�g�a�� ShowThread::ABORN + */ + protected function _ngAbornCheck($i, $name, $mail, $date_id, $id, $msg, $nong = false, &$info = null) + { + global $_conf, $ngaborns_hits; + + $info = array(); + $type = self::NG_NONE; + + // {{{ �p�oID�`�F�b�N + + if ($this->_ngaborn_frequent && $id && $this->thread->idcount[$id] >= $_conf['ngaborn_frequent_num']) { + if (!$_conf['ngaborn_frequent_one'] && $id == $this->thread->ids[1]) { + // >>1 �͂��̂܂ܕ\�� + } elseif ($this->_ngaborn_frequent == 1) { + $ngaborns_hits['aborn_freq']++; + return $this->_markNgAborn($i, self::ABORN, false); + } elseif (!$nong) { + $ngaborns_hits['ng_freq']++; + $type |= $this->_markNgAborn($i, self::NG_FREQ, false); + $info[] = sprintf('�p�oID:%s(%d)', $id, $this->thread->idcount[$id]); + } + } + + // }}} + // {{{ �A���`�F�b�N + + if ($_conf['ngaborn_chain'] && $this->_has_ngaborns && + preg_match_all('/(?:>|��)([1-9][0-9\\-,]*)/', $msg, $matches) + ) { + $references = array_unique(preg_split('/[-,]+/', + trim(implode(',', $matches[1]), '-,'), + -1, + PREG_SPLIT_NO_EMPTY)); + $intersections = array_intersect($references, $this->_aborn_nums); + $info_suffix = ''; + + if ($intersections) { + if ($_conf['ngaborn_chain'] == 1) { + $ngaborns_hits['aborn_chain']++; + return $this->_markNgAborn($i, self::ABORN, true); + } + if ($nong) { + $intersections = null; + } else { + $info_suffix = '(' . (($_conf['ktai']) ? '����' : '���ځ[��') . ')'; + } + } elseif (!$nong) { + $intersections = array_intersect($references, $this->_ng_nums); + } + + if ($intersections) { + $ngaborns_hits['ng_chain']++; + $type |= $this->_markNgAborn($i, self::NG_CHAIN, true); + $info[] = sprintf('�A��NG:>>%d%s', current($intersections), $info_suffix); + } + } + + // }}} + // {{{ ���ځ[��`�F�b�N + + // ���ځ[�񃌃X + if ($this->abornResCheck($i) !== false) { + $ngaborns_hits['aborn_res']++; + return $this->_markNgAborn($i, self::ABORN, false); + } + + // ���ځ[��l�[�� + if ($this->ngAbornCheck('aborn_name', $name) !== false) { + $ngaborns_hits['aborn_name']++; + return $this->_markNgAborn($i, self::ABORN, false); + } + + // ���ځ[�񃁁[�� + if ($this->ngAbornCheck('aborn_mail', $mail) !== false) { + $ngaborns_hits['aborn_mail']++; + return $this->_markNgAborn($i, self::ABORN, false); + } + + // ���ځ[��ID + if ($this->ngAbornCheck('aborn_id', $date_id) !== false) { + $ngaborns_hits['aborn_id']++; + return $this->_markNgAborn($i, self::ABORN, false); + } + + // ���ځ[�񃁃b�Z�[�W + if ($this->ngAbornCheck('aborn_msg', $msg) !== false) { + $ngaborns_hits['aborn_msg']++; + return $this->_markNgAborn($i, self::ABORN, true); + } + + // }}} + + if ($nong) { + return $type; + } + + // {{{ NG�`�F�b�N + + // NG�l�[���`�F�b�N + if ($this->ngAbornCheck('ng_name', $name) !== false) { + $ngaborns_hits['ng_name']++; + $type |= $this->_markNgAborn($i, self::NG_NAME, false); + } + + // NG���[���`�F�b�N + if ($this->ngAbornCheck('ng_mail', $mail) !== false) { + $ngaborns_hits['ng_mail']++; + $type |= $this->_markNgAborn($i, self::NG_MAIL, false); + } + + // NGID�`�F�b�N + if ($this->ngAbornCheck('ng_id', $date_id) !== false) { + $ngaborns_hits['ng_id']++; + $type |= $this->_markNgAborn($i, self::NG_ID, false); + } + + // NG���b�Z�[�W�`�F�b�N + $a_ng_msg = $this->ngAbornCheck('ng_msg', $msg); + if ($a_ng_msg !== false) { + $ngaborns_hits['ng_msg']++; + $type |= $this->_markNgAborn($i, self::NG_MSG, true); + $info[] = sprintf('NG%s:%s', + ($_conf['ktai']) ? 'ܰ��' : '���[�h', + p2h($a_ng_msg)); + } + + // }}} + + return $type; + } + + // }}} + // {{{ _markNgAborn() + + /** + * NG���ځ[��Ƀq�b�g�������X�ԍ����L�^���� + * + * @param int $num ���X�ԍ� + * @param int $type NG���ځ[��̎�� + * @param bool $isBody �{���Ƀq�b�g�������ǂ��� + * @return int $type�Ɠ����l + */ + protected function _markNgAborn($num, $type, $isBody) + { + if ($type) { + if ($isBody) { + self::$_ngaborns_body_hits++; + } else { + self::$_ngaborns_head_hits++; + } + + // array_intersect()�������悭�s�����߁A���X�ԍ��𕶎���^�ɃL���X�g���� + $str = (string)$num; + if ($type == self::ABORN) { + $this->_aborn_nums[$num] = $str; + } else { + $this->_ng_nums[$num] = $str; + } + + $this->_has_ngaborns = true; + } + + return $type; + } + + // }}} + // {{{ ngAbornCheck() + + /** + * NG���ځ[��`�F�b�N + */ + public function ngAbornCheck($code, $resfield, $ic = false) + { + global $ngaborns; + + //$GLOBALS['debug'] && $GLOBALS['profiler']->enterSection('ngAbornCheck()'); + + if (isset($ngaborns[$code]['data']) && is_array($ngaborns[$code]['data'])) { + // +Wiki:BE���ځ[�� + if ($code == 'aborn_be' || $code == 'ng_be') { + // �v���t�B�[��ID�𔲂��o�� + if (preg_match('/BE:(\\d+)/', $resfield, $matches)) { + $beId = P2UtilWiki::calcBeId((int)$matches[1]); + if ($beId === 0) { + return false; + } + $resfield = (string)$beId; + } else { + return false; + } + } + + $bbs = $this->thread->bbs; + $title = $this->thread->ttitle_hc; + + foreach ($ngaborns[$code]['data'] as $k => $v) { + // �ƒ`�F�b�N + if (isset($v['bbs']) && in_array($bbs, $v['bbs']) == false) { + continue; + } + + // �^�C�g���`�F�b�N + if (isset($v['title']) && stripos($title, $v['title']) === false) { + continue; + } + + // ���[�h�`�F�b�N + // ���K�\�� + if ($v['regex']) { + $re_method = $v['regex']; + /*if ($re_method($v['word'], $resfield, $matches)) { + $this->ngAbornUpdate($code, $k); + //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('ngAbornCheck()'); + return p2h($matches[0]); + }*/ + if ($re_method($v['word'], $resfield)) { + $this->ngAbornUpdate($code, $k); + //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('ngAbornCheck()'); + return $v['cond']; + } + // +Wiki:BE���ځ[��(���S��v) + } elseif ($code == 'aborn_be' || $code == 'ng_be') { + if ($resfield == $v['word']) { + $this->ngAbornUpdate($code, $k); + //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('ngAbornCheck()'); + return $v['cond']; + } + // �啶���������𖳎� + } elseif ($ic || $v['ignorecase']) { + if (stripos($resfield, $v['word']) !== false) { + $this->ngAbornUpdate($code, $k); + //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('ngAbornCheck()'); + return $v['cond']; + } + // �P���ɕ����񂪊܂܂�邩�ǂ������`�F�b�N + } else { + if (strpos($resfield, $v['word']) !== false) { + $this->ngAbornUpdate($code, $k); + //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('ngAbornCheck()'); + return $v['cond']; + } + } + } + } + + //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('ngAbornCheck()'); + return false; + } + + // }}} + // {{{ abornResCheck() + + /** + * ���背�X�̓������ځ[��`�F�b�N + */ + public function abornResCheck($resnum) + { + global $ngaborns; + + $target = $this->thread->host . '/' . $this->thread->bbs . '/' . $this->thread->key . '/' . $resnum; + + if (isset($ngaborns['aborn_res']['data']) && is_array($ngaborns['aborn_res']['data'])) { + foreach ($ngaborns['aborn_res']['data'] as $k => $v) { + if ($ngaborns['aborn_res']['data'][$k]['word'] == $target) { + $this->ngAbornUpdate('aborn_res', $k); + return true; + } + } + } + return false; + } + + // }}} + // {{{ ngAbornUpdate() + + /** + * NG/���ځ`������Ɖ񐔂��X�V + */ + public function ngAbornUpdate($code, $k) + { + global $ngaborns; + + if (isset($ngaborns[$code]['data'][$k])) { + $ngaborns[$code]['data'][$k]['lasttime'] = date('Y/m/d G:i'); // HIT���Ԃ��X�V + if (empty($ngaborns[$code]['data'][$k]['hits'])) { + $ngaborns[$code]['data'][$k]['hits'] = 1; // ��HIT + } else { + $ngaborns[$code]['data'][$k]['hits']++; // HIT�񐔂��X�V + } + } + } + + // }}} + // {{{ addURLHandler() + + /** + * ���[�U��`URL�n���h���i���b�Z�[�W����URL������������֐��j��lj����� + * + * �n���h���͍ŏ��ɒlj����ꂽ���̂��珇�ԂɎ��s����� + * URL�̓n���h���̕Ԃ�l�i������j�Œu������� + * false���A�����ꍇ�͎��̃n���h���ɏ������ς˂��� + * + * ���[�U��`URL�n���h���̈����� + * 1. string $url URL + * 2. array $purl URL��parse_url()�������� + * 3. string $str �p�^�[���Ƀ}�b�`����������AURL�Ɠ������Ƃ����� + * 4. object $aShowThread �Ăяo�����̃I�u�W�F�N�g + * �ł��� + * ���false��Ԃ��A�����ŏ������邾���̊֐���o�^���Ă��悢 + * + * @param callback $function �R�[���o�b�N���\�b�h + * @return void + * @access public + * @todo ���[�U��`URL�n���h���̃I�[�g���[�h�@�\������ + */ + public function addURLHandler($function) + { + $this->_user_url_handlers[] = $function; + } + + // }}} + // {{{ stripLineBreaks() + + /** + * �����̉��s�ƘA��������s����菜�� + * + * @param string $msg + * @param string $replacement + * @return string + */ + public function stripLineBreaks($msg, $replacement = '

    ') + { + if (P2_MBREGEX_AVAILABLE) { + $msg = mb_ereg_replace('(?:[\\s�@]*
    )+[\\s�@]*$', '', $msg); + $msg = mb_ereg_replace('(?:[\\s�@]*
    ){3,}', $replacement, $msg); + } else { + mb_convert_variables('UTF-8', 'CP932', $msg, $replacement); + $msg = preg_replace('/(?:[\\s\\x{3000}]*
    )+[\\s\\x{3000}]*$/u', '', $msg); + $msg = preg_replace('/(?:[\\s\\x{3000}]*
    ){3,}/u', $replacement, $msg); + $msg = mb_convert_encoding($msg, 'CP932', 'UTF-8'); + } + + return $msg; + } + + // }}} + // {{{ transLink() + + /** + * �����N�Ώە������ϊ����� + * + * @param string $str + * @return string + */ + public function transLink($str) + { + return preg_replace_callback($this->str_to_link_regex, array($this, 'transLinkDo'), $str); + } + + // }}} + // {{{ transLinkDo() + + /** + * �����N�Ώە�����̎�ނ𔻒肵�đΉ������֐�/���\�b�h�ɓn�� + * + * @param array $s + * @return string + */ + public function transLinkDo(array $s) + { + global $_conf; + + $orig = $s[0]; + $following = ''; + + // PHP 5.2.7 ������ preg_replace_callback() �ł͖��O�t���ߊl���W�����g���Ȃ��̂� + /* + if (!array_key_exists('link', $s)) { + $s['link'] = $s[1]; + $s['quote'] = $s[5]; + $s['url'] = $s[8]; + $s['id'] = $s[11]; + } + */ + + // �}�b�`�����T�u�p�^�[���ɉ����ĕ��� + // �����N + if ($s['link']) { + if (preg_match('{ href=(["\'])?(.+?)(?(1)\\1)(?=[ >])}i', $s[2], $m)) { + $url = $m[2]; + $str = $s[3]; + } else { + return $s[3]; + } + + // ���p + } elseif ($s['quote']) { + return preg_replace_callback( + self::getAnchorRegex('/(%prefix%)?(%a_range%)/'), + array($this, '_quoteResCallback'), $s['quote']); + + // http or ftp ��URL + } elseif ($s['url']) { + if ($_conf['ktai'] && $s[9] == 'ftp') { + return $orig; + } + $url = preg_replace('/^t?(tps?)$/', 'ht$1', $s[9]) . '://' . $s[10]; + $str = $s['url']; + $following = $s[11]; + if (strlen($following) > 0) { + // �E�B�L�y�f�B�A���{��ł�URL�ŁASJIS��2�o�C�g�����̏�ʃo�C�g + // (0x81-0x9F,0xE0-0xEF)�������Ƃ� + if (P2Util::isUrlWikipediaJa($url)) { + $leading = ord($following); + if ((($leading ^ 0x90) < 32 && $leading != 0x80) || ($leading ^ 0xE0) < 16) { + $url .= rawurlencode(mb_convert_encoding($following, 'UTF-8', 'CP932')); + $str .= $following; + $following = ''; + } + } elseif (strpos($following, 'tp://') !== false) { + // �S�p�X�y�[�X+URL���̏ꍇ������̂ōă`�F�b�N + $following = $this->transLink($following); + } + } + + // ID + } elseif ($s['id'] && $_conf['flex_idpopup']) { // && $_conf['flex_idlink_k'] + return $this->idFilter($s['id'], $s[12]); + + // ���̑��i�\���j + } else { + return strip_tags($orig); + } + + // ���_�C���N�^���O�� + switch ($this->_redirector) { + case self::REDIRECTOR_IMENU: + $url = preg_replace('{^([a-z]+://)ime\\.nu/}', '$1', $url); + break; + case self::REDIRECTOR_PINKTOWER: + $url = preg_replace('{^([a-z]+://)pinktower\\.com/}', '$1', $url); + break; + case self::REDIRECTOR_MACHIBBS: + $url = preg_replace('{^[a-z]+://machi(?:bbs\\.com|\\.to)/bbs/link\\.cgi\\?URL=}', '', $url); + break; + } + + // �G�X�P�[�v����Ă��Ȃ����ꕶ�����G�X�P�[�v + $url = p2h($url, false); + $str = p2h($str, false); + // ���ԎQ�ƁE���l�Q�Ƃ����S�Ƀf�R�[�h���悤�Ƃ���ƕ��ׂ��傫�����A + // "&"�ȊO�̓��ꕶ���͂قƂ�ǂ̏ꍇURL�G���R�[�h����Ă���͂��Ȃ̂� + // ���r���[�ɋÂ��������͂����A"&"��"&"�̂ݍĕϊ�����B + $raw_url = str_replace('&', '&', $url); + + // URL���p�[�X�E�z�X�g������ + $purl = @parse_url($raw_url); + if (!$purl || !array_key_exists('host', $purl) || + strpos($purl['host'], '.') === false || + $purl['host'] == '127.0.0.1' || + //HostCheck::isAddressLocal($purl['host']) || + //HostCheck::isAddressPrivate($purl['host']) || + P2Util::isHostExample($purl['host'])) + { + return $orig; + } + // URL�̃}�b�`���O��"&"���l�����Ȃ��čςނ悤�ɁA����URL��o�^���Ă��� + $purl[0] = $raw_url; + + // URL������ + foreach ($this->_user_url_handlers as $handler) { + if (false !== ($link = call_user_func($handler, $url, $purl, $str, $this))) { + return $link . $following; + } + } + foreach ($this->_url_handlers as $handler) { + if (false !== ($link = $this->$handler($url, $purl, $str))) { + return $link . $following; + } + } + + return $orig; + } + + // }}} + // {{{ idFilter() + + /** + * ID�t�B���^�����O�ϊ� + * + * @param string $idstr ID:xxxxxxxxxx + * @param string $id xxxxxxxxxx + * @return string + */ + abstract public function idFilter($idstr, $id); + + // }}} + // {{{ _idFilterCallback() + + /** + * ID�t�B���^�����O�ϊ� + * + * @param array $s ���K�\���Ƀ}�b�`�����v�f�̔z�� + * @return string + */ + protected function _idFilterCallback(array $s) + { + return $this->idFilter($s[0], $s[1]); + } + + // }}} + // {{{ _quoteNameCallback() + + /** + * @param array $s + * @return string HTML + */ + protected function _quoteNameCallback($s) + { + return preg_replace_callback( + self::getAnchorRegex('/(%prefix%)?(%a_num%)/'), + array($this, '_quoteResCallback'), $s[0] + ); + } + + // }}} + // {{{ quoteRes() + + /** + * ���p�ϊ��i�P�Ɓj + * + * @param string $full >>1 + * @param string $qsign >> + * @param string $appointed_num 1 + * @return string + */ + abstract public function quoteRes($full, $qsign, $appointed_num); + + // }}} + // {{{ _quoteResCallback() + + /** + * ���p�ϊ��i�P�Ɓj + * + * @param array $s ���K�\���Ƀ}�b�`�����v�f�̔z�� + * @return string + */ + protected function _quoteResCallback(array $s) + { + return $this->quoteRes($s[0], $s[1], $s[2]); + } + + // }}} + // {{{ quoteResRange() + + /** + * ���p�ϊ��i�͈́j + * + * @param string $full >>1-100 + * @param string $qsign >> + * @param string $appointed_num 1-100 + * @return string + */ + abstract public function quoteResRange($full, $qsign, $appointed_num); + + // }}} + // {{{ _quoteResRangeCallback() + + /** + * ���p�ϊ��i�͈́j + * + * @param array $s ���K�\���Ƀ}�b�`�����v�f�̔z�� + * @return string + */ + protected function _quoteResRangeCallback(array $s) + { + return $this->quoteResRange($s[0], $s[1], $s[2]); + } + + // }}} + // {{{ checkQuoteResNums() + + /** + * HTML���b�Z�[�W���̈��p���X�̔ԍ����ċA�`�F�b�N���� + */ + public function checkQuoteResNums($res_num, $name, $msg, + $with_quotes = true, + $with_backlinks = null, + $cascade = true) + { + global $_conf; + + $this->_quote_check_depth = 0; + + if ($with_backlinks === null) { + $with_backlinks = ($_conf['backlink_list'] > 0 || $_conf['backlink_block'] > 0) ? true : false; + } + + if ($with_backlinks) { + return $this->checkQuoteResNumsFromSummary( + $res_num == 0 ? 1 : $res_num, $with_quotes, $with_backlinks); + } + + return $this->_checkQuoteResNums($res_num, $name, $msg); + } + + // }}} + // {{{ _checkQuoteResNums() + + /** + * HTML���b�Z�[�W���̈��p���X�̔ԍ����ċA�`�F�b�N���� + */ + protected function _checkQuoteResNums($res_num, $name, $msg) + { + // �ċA���~�b�^ + if ($this->_quote_check_depth > 30) { + return array(); + } else { + $this->_quote_check_depth++; + } + + if (array_key_exists($res_num, $this->_quote_res_nums)) { + return $this->_quote_res_nums[$res_num]; + } + + $aThread = $this->thread; + + $quote_res_nums = array(); + + $name = preg_replace('/(��.*)/', '', $name, 1); + + // ���O + if ($matches = $this->getQuoteResNumsName($name)) { + foreach ($matches as $a_quote_res_num) { + if ($a_quote_res_num) { + $quote_res_nums[] = $a_quote_res_num; + $a_quote_res_idx = $a_quote_res_num - 1; + + // �������g�̔ԍ��Ɠ���łȂ���΁A + if ($a_quote_res_num != $res_num) { + // �`�F�b�N���Ă��Ȃ��ԍ����ċA�`�F�b�N + if (!isset($this->_quote_res_nums_checked[$a_quote_res_num])) { + $this->_quote_res_nums_checked[$a_quote_res_num] = true; + if (isset($aThread->datlines[$a_quote_res_idx])) { + $datalinear = $aThread->explodeDatLine($aThread->datlines[$a_quote_res_idx]); + $quote_name = $datalinear[0]; + $quote_msg = $aThread->datlines[$a_quote_res_idx]; + $quote_res_nums = array_merge($quote_res_nums, + $this->_checkQuoteResNums($a_quote_res_num, + $quote_name, + $quote_msg)); + } + } + } + } + // $name=preg_replace("/([0-9]+)/", "", $name, 1); + } + } + + // >>1�̃����N����������O�� + // >>1 + $msg = preg_replace('{<[Aa] .+?>(>>[1-9][\\d\\-]*)}', '$1', $msg); + + //echo $msg; + if (preg_match_all(self::getAnchorRegex('/%full%/'), $msg, $out, PREG_PATTERN_ORDER)) { + foreach ($out[2] as $numberq) { + if ($matches=preg_split(self::getAnchorRegex('/%delimiter%/'), $numberq)) { + foreach ($matches as $a_quote_res_num) { + if (preg_match(self::getAnchorRegex('/%range_delimiter%/'),$a_quote_res_num)) { continue;} + $a_quote_res_num = (int) (mb_convert_kana($a_quote_res_num, 'n')); + $a_quote_res_idx = $a_quote_res_num - 1; + + //echo $a_quote_res_num; + + if (!$a_quote_res_num) {break;} + $quote_res_nums[] = $a_quote_res_num; + + // �������g�̔ԍ��Ɠ���łȂ���΁A + if ($a_quote_res_num != $res_num) { + // �`�F�b�N���Ă��Ȃ��ԍ����ċA�`�F�b�N + if (!isset($this->_quote_res_nums_checked[$a_quote_res_num])) { + $this->_quote_res_nums_checked[$a_quote_res_num] = true; + if (isset($aThread->datlines[$a_quote_res_idx])) { + $datalinear = $aThread->explodeDatLine($aThread->datlines[$a_quote_res_idx]); + $quote_name = $datalinear[0]; + $quote_msg = $aThread->datlines[$a_quote_res_idx]; + $quote_res_nums = array_merge($quote_res_nums, + $this->_checkQuoteResNums($a_quote_res_num, + $quote_name, + $quote_msg)); + } + } + } + + } + + } + + } + + } + + if (count($quote_res_nums)) { + sort($quote_res_nums, SORT_NUMERIC); + $this->_quote_res_nums[$res_num] = array_unique($quote_res_nums); + $quote_res_nums = $this->_quote_res_nums[$res_num]; + } + + return $quote_res_nums; + } + + // }}} + // {{{ checkQuoteResNumsFromSummary() + + /** + * ���p���X�W�v���ʂ���|�b�v�A�b�v�p�ɗp�ӂ��ׂ��ԍ����ċA�`�F�b�N���� + */ + public function checkQuoteResNumsFromSummary($res_num, $with_quotes, $with_backlinks) + { + // �ċA���~�b�^ + if ($this->_quote_check_depth > 3000) { + return array(); + } else { + $this->_quote_check_depth++; + } + + $ret = array(); + + // �Q�ƃ��X + if ($with_quotes) { + $ret = array_merge($ret, + $this->_checkQuoteResNumsFromSummary( + $res_num, $this->getQuoteTo(), $with_quotes, $with_backlinks)); + } + // ��Q�ƃ��X + if ($with_backlinks) { + $ret = array_merge($ret, + $this->_checkQuoteResNumsFromSummary( + $res_num, $this->getQuoteFrom(), $with_quotes, $with_backlinks)); + } + return $ret; + } + + // }}} + // {{{ _checkQuoteResNumsFromSummary() + + protected function _checkQuoteResNumsFromSummary($res_num, $quotes, $with_quotes, $with_backlinks) + { + $ret = array(); + if (array_key_exists($res_num, $quotes)) { + foreach ($quotes[$res_num] as $quote_num) { + $ret[] = $quote_num; + if ($quote_num != $res_num) { + if (!isset($this->_quote_res_nums_checked[$quote_num])) { + $this->_quote_res_nums_checked[$quote_num] = true; + $ret = array_merge($ret, + $this->checkQuoteResNumsFromSummary($quote_num, $with_quotes, $with_backlinks)); + } + } + } + } + return $ret; + } + + // }}} + // {{{ getQuoteResNumsName() + + public function getQuoteResNumsName($name) + { + if (strlen(trim($name)) == 0 || $name == $this->_nanashiName) { + return false; + } + + // �g���b�v������ + $name = preg_replace('/��.*/', '', $name, 1); + $name = strip_tags($name); + + /* + //if (preg_match('/[0-9]+/', $name, $m)) { + return (int)$m[0]; + } + */ + + if (preg_match_all(self::getAnchorRegex('/(?:^|%prefix%)(%nums%)/'), $name, $matches)) { + foreach ($matches[1] as $a_quote_res_num) { + $quote_res_nums[] = (int)mb_convert_kana($a_quote_res_num, 'n'); + } + return array_unique($quote_res_nums); + } + + return false; + } + + // }}} + // {{{ _wikipediaFilter() + + /** + * [[���]]������������Wikipedia�֎��������N + * + * @param string $msg ���b�Z�[�W + * @return string + * + * original code: + * http://akid.s17.xrea.com/p2puki/index.phtml?%A5%E6%A1%BC%A5%B6%A1%BC%A5%AB%A5%B9%A5%BF%A5%DE%A5%A4%A5%BA%28rep2%20Ver%201.7.0%A1%C1%29#led2c85d + */ + protected function _wikipediaFilter($msg) + { + if (strpos($msg, '[[') === false) { + return $msg; + } + + $msg = preg_replace_callback('/\\[\\[([^\\[\\]\\n<>]+)\\]\\]+/u', + array($this, '_linkToWikipeidaCallback'), + mb_convert_encoding($msg, 'UTF-8', 'CP932')); + + return mb_convert_encoding($msg, 'CP932', 'UTF-8'); + } + + // }}} + // {{{ _linkToWikipeidaCallback() + + /** + * Wikipedia�̌��������N�ɕϊ����ĕԂ�. + * + * @param array $matches + * @return string + */ + protected function _linkToWikipeidaCallback($matches) + { + return '[[' . $this->_linkToWikipeida($matches[1]) . ']]'; + } + + // }}} + // {{{ _linkToWikipeida() + + /** + * Wikipedia�̌��������N�ɕϊ����ĕԂ�. + * + * @param string $word ��� + * @return string + */ + abstract protected function _linkToWikipeida($word); + + // }}} + // {{{ _makeQuotes() + + /** + * ���X�f�[�^���W�v����$this->_quote_to��$this->_quote_from�ɕۑ�. + */ + protected function _makeQuotes() + { + global $_conf; + + $this->_quote_to = array(); + $this->_quote_from = array(); + + if (!$this->thread->datlines) { + return; + } + + foreach ($this->thread->datlines as $num => $line) { + list($name, $mail, $date_id, $msg) = $this->thread->explodeDatLine($line); + + // NG���ځ[��`�F�b�N + if (($id = $this->thread->ids[$num + 1]) !== null) { + $date_id = str_replace($this->thread->idp[$i] . $id, 'ID:' . $id, $date_id); + } + $ng_type = $this->_ngAbornCheck($num + 1, strip_tags($name), $mail, $date_id, $id, $msg); + if ($ng_type == self::ABORN) { + continue; + } + + // ���O + if ($nmatches = $this->getQuoteResNumsName($name)) { + foreach ($nmatches as $a_quote_res_num) { + if ($a_quote_res_num) { + if (!array_key_exists($a_quote_res_num, $this->_quote_from) || $this->_quote_from[$a_quote_res_num] === null) { + $this->_quote_from[$a_quote_res_num] = array(); + } + if (!in_array($num + 1, $this->_quote_from[$a_quote_res_num])) { + $this->_quote_from[$a_quote_res_num][] = $num + 1; + } + + if (!array_key_exists($num + 1, $this->_quote_to) || $this->_quote_to[$num + 1] === null) { + $this->_quote_to[$num + 1] = array(); + } + if (!in_array($a_quote_res_num, $this->_quote_to[$num + 1])) { + $this->_quote_to[$num + 1][] = $a_quote_res_num; + } + } + } + } + + + // >>1�̃����N����������O�� + // >>1 + $msg = preg_replace('{<[Aa] .+?>(>>[1-9][\\d\\-]*)}', '$1', $msg); + if (!preg_match_all(self::getAnchorRegex('/%full%/'), $msg, $out, PREG_PATTERN_ORDER)) { + continue; + } + foreach ($out[2] as $numberq) { + if (!preg_match_all(self::getAnchorRegex('/(?:%prefix%)?(%a_range%)/'), $numberq, $anchors, PREG_PATTERN_ORDER)) continue; + foreach ($anchors[1] as $anchor) { + if (preg_match(self::getAnchorRegex('/(%a_num%)%range_delimiter%(?:%prefix%)?(%a_num%)/'), $anchor, $matches)) { + $from = intval(mb_convert_kana($matches[1], 'n')); + $to = intval(mb_convert_kana($matches[2], 'n')); + if ($from < 1 || $to < 1 || $from > $to + || ($to - $from + 1) > sizeof($this->thread->datlines)) { + continue; + } + if ($_conf['backlink_list_range_anchor_limit'] != 0) { + if ($to - $from >= $_conf['backlink_list_range_anchor_limit']) { + continue; + } + } + for ($i = $from; $i <= $to; $i++) { + if ($i > sizeof($this->thread->datlines)) { + break; + } + if ($_conf['backlink_list_future_anchor'] == 0) { + // ���X�ԍ��ȍ~�̃A���J�[�͖������� + if ($i >= $num + 1) { + continue; + } + } + if (!array_key_exists($i, $this->_quote_from) || $this->_quote_from[$i] === null) { + $this->_quote_from[$i] = array(); + } + if (!in_array($num + 1, $this->_quote_from[$i])) { + $this->_quote_from[$i][] = $num + 1; + } + } + } elseif (preg_match(self::getAnchorRegex('/(%a_num%)/'), $anchor, $matches)) { + $quote_num = intval(mb_convert_kana($matches[1], 'n')); + if (!array_key_exists($num + 1, $this->_quote_to) || $this->_quote_to[$num + 1] === null) { + $this->_quote_to[$num + 1] = array(); + } + if (!in_array($quote_num, $this->_quote_to[$num + 1])) { + $this->_quote_to[$num + 1][] = $quote_num; + } + + if ($_conf['backlink_list_future_anchor'] == 0) { + // ���X�ԍ��ȍ~�̃A���J�[�͖������� + if ($quote_num >= $num + 1) { + continue; + } + } + if (!array_key_exists($quote_num, $this->_quote_from) || $this->_quote_from[$quote_num] === null) { + $this->_quote_from[$quote_num] = array(); + } + if (!in_array($num + 1, $this->_quote_from[$quote_num])) { + $this->_quote_from[$quote_num][] = $num + 1; + } + } + } + } + } + } + + // }}} + // {{{ getQuoteFrom() + + /** + * �탌�X���X�g��Ԃ�. + * + * @return array + */ + public function getQuoteFrom() + { + if ($this->_quote_from === null) { + $this->_makeQuotes(); // �탌�X�f�[�^�W�v + } + return $this->_quote_from; + } + + // }}} + // {{{ getQuoteTo() + + /** + * ���X���X�g��Ԃ�. + * + * @return array + */ + public function getQuoteTo() + { + if ($this->_quote_to === null) { + $this->_makeQuotes(); // ���X�f�[�^�W�v + } + return $this->_quote_to; + } + + // }}} + // {{{ _quotebackListHtml() + + /** + * �탌�X���X�g��HTML�Ő��`���ĕԂ�. + * + * @param int $resnum ���X�ԍ� + * @param int $type 1:�c�`�� 2:���`�� 3:�W�J�p�u���b�N�p������ + * @param bool $popup ���`���ł̃|�b�v�A�b�v����(true:�|�b�v�A�b�v����Afalse:�}������) + * @return string + */ + protected function _quotebackListHtml($resnum, $type, $popup=true) + { + $quote_from = $this->getQuoteFrom(); + if (!array_key_exists($resnum, $quote_from)) return $ret; + + $anchors = $quote_from[$resnum]; + sort($anchors); + + if ($type == 1) { + return $this->_quotebackVerticalListHtml($anchors, $resnum); + } elseif ($type == 2) { + return $this->_quotebackHorizontalListHtml($anchors, $resnum); + } elseif ($type == 3) { + return $this->_quotebackResData($anchors, $resnum); + } + } + + // }}} + // {{{ _quotebackVerticalListHtml() + + protected function _quotebackVerticalListHtml($anchors, $resnum) + { + $ret = '
      '; + $anchor_cnt = 1; + foreach ($anchors as $anchor) { + if ($anchor_cnt > 1) { + $ret .= '
    • ��
    • '; + } + if ($anchor_cnt < count($anchors)) { + $ret .= '
    • ��'; + } else { + $ret .= '
    • ��'; + } + $ret .= ($anchor == $resnum) + ? $anchor + : $this->quoteRes($anchor, '', $anchor, true); + $anchor_cnt++; + } + $ret .= '
    '; + return $ret; + } + + // }}} + // {{{ _quotebackHorizontalListHtml() + + protected function _quotebackHorizontalListHtml($anchors, $resnum) + { + $ret = '
    '; + $count = 0; + + foreach ($anchors as $idx => $anchor) { + if ($anchor == $resnum) { + continue; + } + $anchor_link= $this->quoteRes('>>' . $anchor, '>>', $anchor); + $qres_id = ($this->_matome ? "t{$this->_matome}" : '') ."qr{$anchor}"; + $ret .= '
    '; + $ret .= sprintf('
    �y�Q�ƃ��X�F%s�z
    ',$anchor_link); + $ret .= '
    '; + $count++; + } + $ret .= '
    '; + + return $ret; + } + + // }}} + // {{{ _quotebackResData() + + protected function _quotebackResData($anchors, $resnum) + { + $ret = array(); + foreach ($anchors as $idx => $anchor) { + if ($anchor == $resnum) { + continue; + } + $ret[] = ($this->_matome ? "t{$this->_matome}" : '') ."qr{$anchor}"; + } + + return join('/', $ret); + } + + // }}} + // {{{ getDatochiResiduums() + + /** + * DAT�����̍ۂɎ擾�ł���>>1�ƍŌ�̃��X��HTML�ŕԂ�. + * + * @return string|false + */ + public function getDatochiResiduums() + { + $ret = ''; + $elines = $this->thread->datochi_residuums; + if (!count($elines)) { + return $ret; + } + + $this->thread->onthefly = true; + $ret = "
    on the fly
    \n"; + $ret .= "
    \n"; + + foreach($elines as $num => $line) { + $res = $this->transRes($line, $num); + if (is_array($res)) { + $ret .= $res['body'] . $res['q']; + } else { + $ret .= $res; + } + } + + $ret .= "
    \n"; + + return $ret; + } + + // }}} + // {{{ getAutoFavRanks() + + /** + * ���������N�ݒ��Ԃ�. + * + * @return array + */ + public function getAutoFavRank() + { + global $_conf; + + if ($this->_auto_fav_rank !== false) { + return $this->_auto_fav_rank; + } + + $ranks = explode(',', strtr($_conf['expack.ic2.fav_auto_rank_setting'], ' ', '')); + $ret = null; + if ($_conf['expack.misc.multi_favs']) { + $idx = 0; + if (!is_array($this->thread->favs)) { + return null; + } + foreach ($this->thread->favs as $fav) { + if ($fav) { + $rank = $ranks[$idx]; + if (is_numeric($rank)) { + $rank = intval($rank); + if ($ret === null) { + $ret = $rank; + } else { + $ret = max($ret, $rank); + } + } + } + $idx++; + } + } else { + if ($this->thread->fav && is_numeric($ranks[0])) { + $ret = intval($ranks[0]); + } + } + $this->_auto_fav_rank = $ret; + + return $ret; + } + + // }}} + // {{{ isAutoFavRankOverride() + + /** + * ���������N�ݒ�Ń����N���㏑�����ׂ����Ԃ�. + * + * @param int $now ���݂̃����N + * @param int $new ���������N + * @return bool + */ + static public function isAutoFavRankOverride($now, $new) + { + global $_conf; + + switch ($_conf['expack.ic2.fav_auto_rank_override']) { + case 0: + return false; + break; + case 1: + return $now != $new; + break; + case 2: + return $now == 0 && $now != $new; + break; + case 3: + return $now < $new; + break; + default: + return false; + } + return false; + } + + // }}} + // {{{ getAnchorRegex() + + /** + * �A���J�[�̐��K�\����Ԃ� + * + * @param string $pattern ex)'/%full%/' + * @param boolean $unicode + * @return string + */ + static public function getAnchorRegex($pattern, $unicode = false) + { + if (!array_key_exists($pattern, self::$_anchorRegexes)) { + self::$_anchorRegexes[$pattern] = strtr($pattern, self::_getAnchorRegexParts()); + // �卷�͂Ȃ��� compileMobile2chUriCallBack() �̂悤�� preg_relplace_callback()���Ă����������B + } + if ($unicode) { + return StrSjis::toUnicodePattern($_anchorRegexes[$pattern]); + } + return self::$_anchorRegexes[$pattern]; + } + + // }}} + // {{{ _getAnchorRegexParts() + + /** + * �A���J�[�̍\���v�f�i���K�\���p�[�c�̔z��j��Ԃ� + * + * @param void + * @return string + */ + static private function _getAnchorRegexParts() + { + if (!is_null(self::$_anchorRegexParts)) { + return self::$_anchorRegexParts; + } + + $anchor = array(); + + // �A���J�[�̍\���v�f�i���K�\���p�[�c�̔z��j + + // �󔒕��� + $anchor_space = '(?:[ ]|�@)'; + //$anchor[' '] = ''; + + // �A���J�[���p�q >> + $anchor['prefix'] = "(?:(?:>|��|<|��|�r){1,2}|(?:\)){2}|�t|��){$anchor_space}*\.?"; + + // ���� + $anchor['a_digit'] = '(?:\\d|�O|�P|�Q|�R|�S|�T|�U|�V|�W|�X)'; + /* + $anchor[0] = '(?:0|�O)'; + $anchor[1] = '(?:1|�P)'; + $anchor[2] = '(?:2|�Q)'; + $anchor[3] = '(?:3|�R)'; + $anchor[4] = '(?:4|�S)'; + $anchor[5] = '(?:5|�T)'; + $anchor[6] = '(?:6|�U)'; + $anchor[7] = '(?:7|�V)'; + $anchor[8] = '(?:8|�W)'; + $anchor[9] = '(?:9|�X)'; + */ + + // �͈͎w��q + // -|�]|�[ = HYPHEN-MINUS | HYPHEN | KATAKANA-HIRAGANA PROLONGED SOUND MARK + $anchor['range_delimiter'] = '(?:-|\\x81\\x5d|\\x81\\x5b)'; // [\\-\\x{2010}\\x{30fc}] + + // �񋓎w��q + $anchor['delimiter'] = "{$anchor_space}?(?:[\.,=+]|�A|�E|��|�C){$anchor_space}?"; + + // ���ځ[��p�A���J�[���p�q + //$anchor['prefix_abon'] = ">{1,2}{$anchor_space}?"; + + // ���X�ԍ� + $anchor['a_num'] = sprintf('%s{1,4}', $anchor['a_digit']); + + // ���X�͈� + /* + $anchor['a_range'] = sprintf('%s(?:%s%s)?', + $anchor['a_num'], $anchor['range_delimiter'], $anchor['a_num'] + ); + */ + $anchor['a_range'] = sprintf('%s(?:%s(?:%s)?%s)?', + $anchor['a_num'], $anchor['range_delimiter'], $anchor['prefix'], $anchor['a_num'] + ); + + // ���X�͈̗͂� + $anchor['ranges'] = sprintf('%s(?:%s%s)*(?!%s)', + $anchor['a_range'], $anchor['delimiter'], $anchor['a_range'], $anchor['a_digit'] + ); + + // ���X�ԍ��̗� + $anchor['nums'] = sprintf('%s(?:%s%s)*(?!%s)', + $anchor['a_num'], $anchor['delimiter'], $anchor['a_num'], $anchor['a_digit'] + ); + + // �A���J�[�S�� + $anchor['full'] = sprintf('(%s)(%s)', $anchor['prefix'], $anchor['ranges']); + + // getAnchorRegex() �� strtr() �u���p��key�� '%key%' �ɕϊ����� + foreach ($anchor as $k => $v) { + $anchor['%' . $k . '%'] = $v; + unset($anchor[$k]); + } + + self::$_anchorRegexParts = $anchor; + + return self::$_anchorRegexParts; + } + + // }}} + // {{{_buildStrToLinkRegex() + + /** + * �����N�Ƃ��Ĉ����p�^�[����Ԃ� + * + * @param void + * @return string + */ + static protected function _buildStrToLinkRegex() + { + return '{' + . '(?P(<[Aa] .+?>)(.*?)())' // �����N�iPCRE�̓�����A�K�����̃p�^�[�����ŏ��Ɏ��s����j + . '|' + . '(?:' + . '(?P' // ���p + . self::getAnchorRegex('%full%') + . ')' + . '|' + . '(?P' + . '(ftp|h?ttps?|tps?)://([0-9A-Za-z][\\w!#%&+*,\\-./:;=?@\\[\\]^~]+)' // URL + . ')' + . '|' + . '(?PID: ?([0-9A-Za-z/.+]{8,11})(?=[^0-9A-Za-z/.+]|$))' // ID�i8,10�� +PC/�g�ю��ʃt���O�j + . ')' + . '}'; + } + + // }}} +} + +// }}} + +/* + * Local Variables: + * mode: php + * coding: cp932 + * tab-width: 4 + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ +// vim: set syn=php fenc=cp932 ai et ts=4 sw=4 sts=4 fdm=marker: diff --git a/lib/live/live_ShowThreadPc.php b/lib/live/live_ShowThreadPc.php new file mode 100755 index 000000000..7c2f12102 --- /dev/null +++ b/lib/live/live_ShowThreadPc.php @@ -0,0 +1,1999 @@ +_url_handlers = array( + 'plugin_linkThread', + 'plugin_link2chSubject', + ); + // +Wiki + if (isset($GLOBALS['linkPluginCtl'])) { + $this->_url_handlers[] = 'plugin_linkPlugin'; + } + if (isset($GLOBALS['replaceImageUrlCtl'])) { + $this->_url_handlers[] = 'plugin_replaceImageUrl'; + } + if (P2_IMAGECACHE_AVAILABLE == 2) { + $this->_url_handlers[] = 'plugin_imageCache2'; + } elseif ($_conf['preview_thumbnail']) { + $this->_url_handlers[] = 'plugin_viewImage'; + } + if ($_conf['link_youtube']) { + $this->_url_handlers[] = 'plugin_linkYouTube'; + } + if ($_conf['link_niconico']) { + $this->_url_handlers[] = 'plugin_linkNicoNico'; + } + $this->_url_handlers[] = 'plugin_linkURL'; + + // imepita��URL�����H����ImageCache2������v���O�C����o�^ + if (P2_IMAGECACHE_AVAILABLE == 2) { + $this->addURLHandler(array($this, 'plugin_imepitaToImageCache2')); + } + + // �T���l�C���\����������ݒ� + if (!isset($GLOBALS['pre_thumb_unlimited']) || !isset($GLOBALS['pre_thumb_limit'])) { + if (isset($_conf['pre_thumb_limit']) && $_conf['pre_thumb_limit'] > 0) { + $GLOBALS['pre_thumb_limit'] = $_conf['pre_thumb_limit']; + $GLOBALS['pre_thumb_unlimited'] = false; + } else { + $GLOBALS['pre_thumb_limit'] = null; // �k���l����isset()��false��Ԃ� + $GLOBALS['pre_thumb_unlimited'] = true; + } + } + $GLOBALS['pre_thumb_ignore_limit'] = false; + + // �A�N�e�B�u���i�[������ + if (P2_ACTIVEMONA_AVAILABLE) { + ExpackLoader::initActiveMona($this); + } + + // ImageCache2������ + if (P2_IMAGECACHE_AVAILABLE == 2) { + ExpackLoader::initImageCache($this); + } + + // �񓯊����X�|�b�v�A�b�v�ESPM������ + $js_id = sprintf('%u', crc32($this->thread->keydat)); + if ($this->_matome) { + $this->asyncObjName = "t{$this->_matome}asp{$js_id}"; + $this->spmObjName = "t{$this->_matome}spm{$js_id}"; + } else { + $this->asyncObjName = "asp{$js_id}"; + $this->spmObjName = "spm{$js_id}"; + } + + // ������������ + $this->setBbsNonameName(); + } + + // }}} + // {{{ transRes() + + /** + * Dat���X��HTML���X�ɕϊ����� + * + * @param string $ares dat��1���C�� + * @param int $i ���X�ԍ� + * @param string $pattern �n�C���C�g�p���K�\�� + * @return string + */ + public function transRes($ares, $i, $pattern = null) + { + global $_conf, $STYLE, $mae_msg; + + list($name, $mail, $date_id, $msg) = $this->thread->explodeDatLine($ares); + if (($id = $this->thread->ids[$i]) !== null) { + $idstr = 'ID:' . $id; + $date_id = str_replace($this->thread->idp[$i] . $id, $idstr, $date_id); + } else { + $idstr = null; + } + + // +Wiki:�u�����[�h + if (isset($GLOBALS['replaceWordCtl'])) { + $replaceWordCtl = $GLOBALS['replaceWordCtl']; + $name = $replaceWordCtl->replace('name', $this->thread, $ares, $i); + $mail = $replaceWordCtl->replace('mail', $this->thread, $ares, $i); + $date_id = $replaceWordCtl->replace('date', $this->thread, $ares, $i); + $msg = $replaceWordCtl->replace('msg', $this->thread, $ares, $i); + } + + $tores = ''; + $rpop = ''; + if ($this->_matome) { + $res_id = "t{$this->_matome}r{$i}"; + $msg_id = "t{$this->_matome}m{$i}"; + } else { + $res_id = "r{$i}"; + $msg_id = "m{$i}"; + } + $msg_class = 'message'; + + // NG���ځ[��`�F�b�N + $ng_type = $this->_ngAbornCheck($i, strip_tags($name), $mail, $date_id, $id, $msg, false, $ng_info); + if ($ng_type == self::ABORN) { + return $this->_abornedRes($res_id); + } + if ($ng_type != self::NG_NONE) { + $ngaborns_head_hits = self::$_ngaborns_head_hits; + $ngaborns_body_hits = self::$_ngaborns_body_hits; + } + + // AA���� + if ($this->am_autodetect && $this->activeMona->detectAA($msg)) { + $msg_class .= ' ActiveMona'; + } + + //============================================================= + // ���X���|�b�v�A�b�v�\�� + //============================================================= + if ($_conf['quote_res_view']) { + $quote_res_nums = $this->checkQuoteResNums($i, $name, $msg); + + foreach ($quote_res_nums as $rnv) { + if (!isset($this->_quote_res_nums_done[$rnv])) { + $this->_quote_res_nums_done[$rnv] = true; + if (isset($this->thread->datlines[$rnv-1])) { + if ($this->_matome) { + $qres_id = "t{$this->_matome}qr{$rnv}"; + } else { + $qres_id = "qr{$rnv}"; + } + $ds = $this->qRes($this->thread->datlines[$rnv-1], $rnv); + $onPopUp_at = " onmouseover=\"showResPopUp('{$qres_id}',event)\" onmouseout=\"hideResPopUp('{$qres_id}')\""; + $rpop .= "
    \n{$ds}
    \n"; + } + } + } + } + + //============================================================= + // �܂Ƃ߂ďo�� + //============================================================= + + $name = $this->transName($name); // ���OHTML�ϊ� + $msg = $this->transMsg($msg, $i); // ���b�Z�[�WHTML�ϊ� + + + // BE�v���t�@�C�������N�ϊ� + $date_id = $this->replaceBeId($date_id, $i); + + // HTML�|�b�v�A�b�v + if ($_conf['iframe_popup']) { + $date_id = preg_replace_callback("{((\?#*)|(Lv\.\d+))}", array($this, 'iframePopupCallback'), $date_id); + } + + // NG���b�Z�[�W�ϊ� + if ($ng_type != self::NG_NONE && count($ng_info)) { + $ng_info = implode(', ', $ng_info); + $msg = <<{$ng_info} +
    {$msg}
    +EOMSG; + } + + // NG�l�[���ϊ� + if ($ng_type & self::NG_NAME) { + $name = <<{$name} +EONAME; + $msg = <<{$msg} +EOMSG; + + // NG���[���ϊ� + } elseif ($ng_type & self::NG_MAIL) { + $mail = <<{$mail} +EOMAIL; + $msg = <<{$msg} +EOMSG; + + // NGID�ϊ� + } elseif ($ng_type & self::NG_ID) { + $date_id = <<{$date_id} +EOID; + $msg = <<{$msg} +EOMSG; + + } + + /* + //�u��������V���v�摜��}�� + if ($i == $this->thread->readnum +1) { + $tores .= <<�V�����X +EOP; + } + */ + + // SPM + if ($_conf['expack.spm.enabled']) { + $spmeh = " onmouseover=\"{$this->spmObjName}.show({$i},'{$msg_id}',event)\""; + $spmeh .= " onmouseout=\"{$this->spmObjName}.hide(event)\""; + } else { + $spmeh = ''; + } + + // +live �X�����e�\�����폜 + + /*if ($_conf['expack.am.enabled'] == 2) { + $tores .= << +// +\n +EOJS; + }*/ + + // �܂Ƃ߂ăt�B���^�F���� + if ($pattern) { + $tores = StrCtl::filterMarking($pattern, $tores); + } + + return array('body' => $tores, 'q' => $rpop); + } + + // }}} + // {{{ quoteOne() + + /** + * >>1 ��\������ (���p�|�b�v�A�b�v�p) + */ + public function quoteOne() + { + global $_conf; + + if (!$_conf['quote_res_view']) { + return false; + } + + $rpop = ''; + $quote_res_nums = $this->checkQuoteResNums(0, '1', ''); + if (array_search(1, $quote_res_nums) === false) { + $quote_res_nums[] = 1; + } + + foreach ($quote_res_nums as $rnv) { + if (!isset($this->_quote_res_nums_done[$rnv])) { + $this->_quote_res_nums_done[$rnv] = true; + if (isset($this->thread->datlines[$rnv-1])) { + if ($this->_matome) { + $qres_id = "t{$this->_matome}qr{$rnv}"; + } else { + $qres_id = "qr{$rnv}"; + } + $ds = $this->qRes($this->thread->datlines[$rnv-1], $rnv); + $onPopUp_at = " onmouseover=\"showResPopUp('{$qres_id}',event)\" onmouseout=\"hideResPopUp('{$qres_id}')\""; + $rpop .= "
    \n{$ds}
    \n"; + } + } + } + + $res1['q'] = $rpop; + $res1['body'] = $this->transMsg('>>1', 1); + + return $res1; + } + + // }}} + // {{{ qRes() + + /** + * ���X���pHTML + */ + public function qRes($ares, $i) + { + global $_conf; + + $resar = $this->thread->explodeDatLine($ares); + $name = $this->transName($resar[0]); + $mail = $resar[1]; + if (($id = $this->thread->ids[$i]) !== null) { + $idstr = 'ID:' . $id; + $date_id = str_replace($this->thread->idp[$i] . $id, $idstr, $resar[2]); + } else { + $idstr = null; + $date_id = $resar[2]; + } + $msg = $this->transMsg($resar[3], $i); + + $tores = ''; + + if ($this->_matome) { + $qmsg_id = "t{$this->_matome}qm{$i}"; + } else { + $qmsg_id = "qm{$i}"; + } + + // >>1 + if ($i == 1) { + $tores = "

    {$this->thread->ttitle_hd}

    "; + } + + // BE�v���t�@�C�������N�ϊ� + $date_id = $this->replaceBeId($date_id, $i); + + // HTML�|�b�v�A�b�v + if ($_conf['iframe_popup']) { + $date_id = preg_replace_callback("{((\?#*)|(Lv\.\d+))}", array($this, 'iframePopupCallback'), $date_id); + } + // + + // ID�t�B���^ + if ($_conf['flex_idpopup'] == 1 && $id && $this->thread->idcount[$id] > 1) { + $date_id = str_replace($idstr, $this->idFilter($idstr, $id), $date_id); + } + + $msg_class = 'message'; + + // AA ���� + if ($this->am_autodetect && $this->activeMona->detectAA($msg)) { + $msg_class .= ' ActiveMona'; + } + + // SPM + if ($_conf['expack.spm.enabled']) { + $spmeh = " onmouseover=\"{$this->spmObjName}.show({$i},'{$qmsg_id}',event)\""; + $spmeh .= " onmouseout=\"{$this->spmObjName}.hide(event)\""; + } else { + $spmeh = ''; + } + + // $tores�ɂ܂Ƃ߂ďo�� + $tores .= '
    '; + $tores .= "{$i} : "; // �ԍ� + $tores .= preg_replace('{[ ]*}i', '', "{$name} : "); + if ($mail) { + $tores .= $mail . ' : '; // ���[�� + } + $tores .= $date_id; // ���t��ID + if ($this->am_side_of_id) { + $tores .= ' ' . $this->activeMona->getMona($qmsg_id); + } + $tores .= "
    \n"; + + // �탌�X���X�g(�c�`��) + if ($_conf['backlink_list'] == 1 || $_conf['backlink_list'] > 2) { + $tores .= $this->_quotebackListHtml($i, 1); + } + + $tores .= "
    {$msg}
    \n"; // ���e + // �탌�X���X�g(���`��) + if ($_conf['backlink_list'] == 2 || $_conf['backlink_list'] > 2) { + $tores .= $this->_quotebackListHtml($i, 2); + } + + // ��Q�ƃu���b�N�p�f�[�^ + if ($_conf['backlink_block'] > 0) { + $tores .= $this->_getBacklinkComment($i); + } + + return $tores; + } + + // }}} + // {{{ _getBacklinkComment() + + protected function _getBacklinkComment($i) + { + $backlinks = $this->_quotebackListHtml($i, 3); + if (strlen($backlinks)) { + return ''; + } + return ''; + } + + // }}} + // {{{ transName() + + /** + * ���O��HTML�p�ɕϊ����� + * + * @param string $name ���O + * @return string + */ + public function transName($name) + { + global $_conf; + + // �g���b�v��z�X�g�t���Ȃ番������ + if (($pos = strpos($name, '��')) !== false) { + $trip = substr($name, $pos); + $name = substr($name, 0, $pos); + } else { + $trip = null; + } + + // ���������p���X�|�b�v�A�b�v�����N�� + if ($_conf['quote_res_view']) { + if (strlen($name) && $name != $this->_nanashiName) { + $name = preg_replace_callback( + self::getAnchorRegex('/(?:^|%prefix%)(%nums%)/'), + array($this, '_quoteNameCallback'), $name + ); + } + } + + if ($trip) { + $name .= $trip; + } elseif ($name) { + // ����������� + $name = $name . ' '; + //if (in_array(0xF0 & ord(substr($name, -1)), array(0x80, 0x90, 0xE0))) { + // $name .= ' '; + //} + } + + return $name; + } + + // }}} + // {{{ transMsg() + + /** + * dat�̃��X���b�Z�[�W��HTML�\���p���b�Z�[�W�ɕϊ����� + * + * @param string $msg ���b�Z�[�W + * @param int $mynum ���X�ԍ� + * @return string + */ + public function transMsg($msg, $mynum) + { + global $_conf; + global $pre_thumb_ignore_limit; + + // 2ch���`����dat + if ($this->thread->dat_type == '2ch_old') { + $msg = str_replace('���M', ',', $msg); + $msg = preg_replace('/&(?=[^;])/', '&', $msg); + } + + // &�␳ + $msg = preg_replace('/&(?!#?\\w+;)/', '&', $msg); + + // Safari���瓊�e���ꂽ�����N���`���_�̕��������␳ + //$msg = preg_replace('{(h?t?tp://[\w\.\-]+/)�`([\w\.\-%]+/?)}', '$1~$2', $msg); + + // >>1�̃����N����������O�� + // >>1 + $msg = preg_replace('{<[Aa] .+?>(>>\\d[\\d\\-]*)}', '$1', $msg); + + // �{����2ch��DAT���_�łȂ���Ă��Ȃ��ƃG�X�P�[�v�̐����������Ȃ��C������B�iURL�����N�̃}�b�`�ŕ���p���o�Ă��܂��j + //$msg = str_replace(array('"', "'"), array('"', '''), $msg); + + // 2006/05/06 �m�[�g���̌딽���΍� body onload=window() + $msg = str_replace('onload=window()', 'onload=window()', $msg); + + // �V�����X�̉摜�͕\�������𖳎�����ݒ�Ȃ� + if ($mynum > $this->thread->readnum && $_conf['expack.ic2.newres_ignore_limit']) { + $pre_thumb_ignore_limit = true; + } + + // �����̉��s�ƘA��������s������ + if ($_conf['strip_linebreaks']) { + $msg = $this->stripLineBreaks($msg /*, '
    ***
    '*/); + } + + // ���p��URL�Ȃǂ������N + $msg = $this->transLink($msg); + + // Wikipedia�L�@�ւ̎��������N + if ($_conf['_linkToWikipeida']) { + $msg = $this->_wikipediaFilter($msg); + } + + return $msg; + } + + // }}} + // {{{ _abornedRes() + + /** + * ���ځ[�񃌃X��HTML���擾���� + * + * @param string $res_id + * @return string + */ + protected function _abornedRes($res_id) + { + global $_conf; + + if ($_conf['ngaborn_purge_aborn']) { + return ''; + } + + return << +
     
    +
     
    +\n +EOP; + } + + // }}} + // {{{ idFilter() + + /** + * ID�t�B���^�����O�|�b�v�A�b�v�ϊ� + * + * @param string $idstr ID:xxxxxxxxxx + * @param string $id xxxxxxxxxx + * @return string + */ + public function idFilter($idstr, $id) + { + global $_conf; + + // ID��8���܂���10��(+�g��/PC���ʎq)�Ɖ��肵�� + /* + if (strlen($id) % 2 == 1) { + $id = substr($id, 0, -1); + } + */ + $num_ht = ''; + if (isset($this->thread->idcount[$id]) && $this->thread->idcount[$id] > 0) { + $num = (string) $this->thread->idcount[$id]; + if ($_conf['iframe_popup'] == 3) { + $num_ht = ' '; + $num_ht .= preg_replace('/\\d/', '', $num); + $num_ht .= ' '; + } else { + $num_ht = '('.$num.')'; + } + } else { + return $idstr; + } + + if ($_conf['coloredid.enable'] > 0 && preg_match("|^ID:[ ]?[0-9A-Za-z/.+]{8,11}|",$idstr)) { + if ($this->_ids_for_render === null) { + $this->_ids_for_render = array(); + } + $this->_ids_for_render[substr($id, 0, 8)] = $this->thread->idcount[$id]; + if ($_conf['coloredid.click'] > 0) { + $num_ht = '' . $num_ht . ''; + } + $idstr = $this->_coloredIdStr( + $idstr, $id, $_conf['coloredid.click'] > 0 ? true : false); + } + + $filter_url = $_conf['read_php'] . '?' . http_build_query(array( + 'host' => $this->thread->host, + 'bbs' => $this->thread->bbs, + 'key' => $this->thread->key, + 'ls' => 'all', + 'offline' => '1', + 'idpopup' => '1', + 'rf' => array( + 'field' => ResFilter::FIELD_ID, + 'method' => ResFilter::METHOD_JUST, + 'match' => ResFilter::MATCH_ON, + 'include' => ResFilter::INCLUDE_NONE, + 'word' => $id, + ), + ), '', '&') . $_conf['k_at_a']; + + if ($_conf['iframe_popup']) { + return $this->iframePopup($filter_url, $idstr, $_conf['bbs_win_target_at']) . $num_ht; + } + return "{$idstr}{$num_ht}"; + } + + // }}} + // {{{ _linkToWikipeida() + + /** + * @see ShowThread + */ + protected function _linkToWikipeida($word) + { + global $_conf; + + $link = 'http://ja.wikipedia.org/wiki/' . rawurlencode($word); + if ($_conf['through_ime']) { + $link = P2Util::throughIme($link); + } + + return "{$word}"; + } + + // }}} + // {{{ quoteRes() + + /** + * ���p�ϊ��i�P�Ɓj + * + * @param string $full >>1-100 + * @param string $qsign >> + * @param string $appointed_num 1-100 + * @param bool $anchor_jump + * @return string + */ + public function quoteRes($full, $qsign, $appointed_num, $anchor_jump = false) + { + global $_conf; + + $appointed_num = mb_convert_kana($appointed_num, 'n'); // �S�p�����𔼊p�����ɕϊ� + if (preg_match('/\\D/', $appointed_num)) { + $appointed_num = preg_replace('/\\D+/', '-', $appointed_num); + return $this->quoteResRange($full, $qsign, $appointed_num); + } + if (preg_match('/^0/', $appointed_num)) { + return $full; + } + + $qnum = intval($appointed_num); + if ($qnum < 1 || $qnum > sizeof($this->thread->datlines)) { + return $full; + } + + // ���ځ[�񃌃X�ւ̃A���J�[ + if ($_conf['quote_res_view_aborn'] == 0 && + in_array($qnum, $this->_aborn_nums)) { + return '' . "{$full}"; + } + + if ($anchor_jump && $qnum >= $this->thread->resrange['start'] && $qnum <= $this->thread->resrange['to']) { + $read_url = '#' . ($this->_matome ? "t{$this->_matome}" : '') . "r{$qnum}"; + } else { + $read_url = "{$_conf['read_php']}?host={$this->thread->host}&bbs={$this->thread->bbs}&key={$this->thread->key}&offline=1&ls={$appointed_num}"; + } + $attributes = $_conf['bbs_win_target_at']; + if ($_conf['quote_res_view'] && ($_conf['quote_res_view_ng'] != 0 || + !in_array($qnum, $this->_ng_nums))) { + if ($this->_matome) { + $qres_id = "t{$this->_matome}qr{$qnum}"; + } else { + $qres_id = "qr{$qnum}"; + } + $attributes .= " onmouseover=\"showResPopUp('{$qres_id}',event)\""; + $attributes .= " onmouseout=\"hideResPopUp('{$qres_id}')\""; + } + return "_aborn_nums) ? ' class="abornanchor"' : + (in_array($qnum, $this->_ng_nums) ? ' class="nganchor"' : '')) + . ">{$full}"; + } + + // }}} + // {{{ quoteResRange() + + /** + * ���p�ϊ��i�͈́j + * + * @param string $full >>1-100 + * @param string $qsign >> + * @param string $appointed_num 1-100 + * @return string + */ + public function quoteResRange($full, $qsign, $appointed_num) + { + global $_conf; + + if ($appointed_num == '-') { + return $full; + } + + $read_url = "{$_conf['read_php']}?host={$this->thread->host}&bbs={$this->thread->bbs}&key={$this->thread->key}&offline=1&ls={$appointed_num}n"; + + if ($_conf['iframe_popup']) { + $pop_url = $read_url . "&renzokupop=true"; + return $this->iframePopup(array($read_url, $pop_url), $full, $_conf['bbs_win_target_at'], 1); + } + + // ���ʂɃ����N + return "{$full}"; + + // 1�–ڂ����p���X�|�b�v�A�b�v + /* + $qnums = explode('-', $appointed_num); + $qlink = $this->quoteRes($qsign . $qnum[0], $qsign, $qnum[0]) . '-'; + if (isset($qnums[1])) { + $qlink .= $qnums[1]; + } + return $qlink; + */ + } + + // }}} + // {{{ iframePopup() + + /** + * HTML�|�b�v�A�b�v�ϊ� + * + * @param string|array $url + * @param string|array $str + * @param string $attr + * @param int|null $mode + * @param bool $marker + * @return string + */ + public function iframePopup($url, $str, $attr = '', $mode = null, $marker = false) + { + global $_conf; + + // �����N�pURL�ƃ|�b�v�A�b�v�pURL + if (is_array($url)) { + $link_url = $url[0]; + $pop_url = $url[1]; + } else { + $link_url = $url; + $pop_url = $url; + } + + // �����N������ƃ|�b�v�A�b�v�̈� + if (is_array($str)) { + $link_str = $str[0]; + $pop_str = $str[1]; + } else { + $link_str = $str; + $pop_str = null; + } + + // �����N�̑��� + if (is_array($attr)) { + $_attr = $attr; + $attr = ''; + foreach ($_attr as $key => $value) { + $attr .= ' ' . $key . '="' . p2h($value) . '"'; + } + } elseif ($attr !== '' && substr($attr, 0, 1) != ' ') { + $attr = ' ' . $attr; + } + + // �����N�̑�����HTML�|�b�v�A�b�v�p�̃C�x���g�n���h���������� + $pop_attr = $attr; + if ($_conf['iframe_popup_event'] == 1) { + $pop_attr .= " onclick=\"stophide=true; showHtmlPopUp('{$pop_url}',event,0" . ($marker ? ' ,this' : '') . "); return false;\""; + } else { + $pop_attr .= " onmouseover=\"showHtmlPopUp('{$pop_url}',event,{$_conf['iframe_popup_delay']}" . ($marker ? ' ,this' : '') . ")\""; + } + $pop_attr .= " onmouseout=\"offHtmlPopUp()\""; + + // �ŏI���� + if (is_null($mode)) { + $mode = $_conf['iframe_popup']; + } + if ($mode == 2 && !is_null($pop_str)) { + $mode = 3; + } elseif ($mode == 3 && is_null($pop_str)) { + global $skin, $STYLE; + + $custom_pop_img = "skin/{$skin}/pop.png"; + if (file_exists($custom_pop_img)) { + $pop_img = p2h($custom_pop_img); + $x = $STYLE['iframe_popup_mark_width']; + $y = $STYLE['iframe_popup_mark_height']; + } else { + $pop_img = 'img/pop.png'; + $y = $x = 12; + } + $pop_str = "\"\""; + } + + // �����N�쐬 + switch ($mode) { + // �}�[�N���� + case 1: + return "{$link_str}"; + // (p)�}�[�N + case 2: + return "(p){$link_str}"; + // [p]�摜�A�T���l�C���Ȃ� + case 3: + return "{$pop_str}{$link_str}"; + // �|�b�v�A�b�v���Ȃ� + default: + return "{$link_str}"; + } + } + + // }}} + // {{{ iframePopupCallback() + + /** + * HTML�|�b�v�A�b�v�ϊ��i�R�[���o�b�N�p�C���^�[�t�F�[�X�j + * + * @param array $s ���K�\���Ƀ}�b�`�����v�f�̔z�� + * @return string + */ + public function iframePopupCallback($s) + { + return $this->iframePopup(p2h($s[1], false), p2h($s[3], false), $s[2]); + } + + // }}} + // {{{ _coloredIdStr() + + /** + * Merged from http://jiyuwiki.com/index.php?cmd=read&page=rep2%A4%C7%A3%C9%A3%C4%A4%CE%C7%D8%B7%CA%BF%A7%CA%D1%B9%B9&alias%5B%5D=pukiwiki%B4%D8%CF%A2 + * + * @return string + */ + protected function _coloredIdStr($idstr, $id, $classed = false) + { + global $_conf; + + if (!(isset($this->thread->idcount[$id]) + && $this->thread->idcount[$id] > 1)) { + return $idstr; + } + if ($classed) { + return $this->_coloredIdStrClassed($idstr, $id); + } + + switch ($_conf['coloredid.rate.type']) { + case 1: + $rate = $_conf['coloredid.rate.times']; + break; + case 2: + $rate = $this->getIdCountRank(10); + break; + case 3: + $rate = $this->getIdCountAverage(); + break; + default: + return $idstr; + } + + if ($rate > 1 && $this->thread->idcount[$id] >= $rate) { + switch ($_conf['coloredid.coloring.type']) { + case 0: + return $this->_coloredIdStr0($idstr, $id); + break; + case 1: + return $this->_coloredIdStr1($idstr, $id); + break; + default: + return $idstr; + } + } + + return $idstr; + } + + // }}} + // {{{ _coloredIdStrClassed() + + private function _coloredIdStrClassed($idstr, $id) + { + $ret = array(); + $arr = explode(':', $idstr); + foreach ($arr as $i => $str) { + if ($i == 0 || $i == 1) { + $ret[] = '' . $str . ''; + } else { + $ret[] = $str; + } + } + return implode(':', $ret); + } + + // }}} + // {{{ _coloredIdStr0() + + /** + * ID�J���[ �I���W�i�����F�p + */ + private function _coloredIdStr0($idstr, $id) + { + if (!function_exists('coloredIdStyle0')) { + require P2_LIB_DIR . '/color/coloredIdStyle0.inc.php'; + } + + if (isset($this->idstyles[$id])) { + $colored = $this->idstyles[$id]; + } else { + $colored = coloredIdStyle0($id, $this->thread->idcount[$id]); + $this->idstyles[$id] = $colored; + } + $ret = array(); + foreach ($arr = explode(':', $idstr) as $i => $str) { + if ($colored[$i]) { + $ret[] = "{$str}"; + } else { + $ret[] = $str; + } + } + return implode(':', $ret); + } + + // }}} + // {{{ _coloredIdStr1() + + /** + * ID�J���[ thermon�ŗp + */ + private function _coloredIdStr1($idstr, $id) + { + if (!function_exists('coloredIdStyle')) { + require P2_LIB_DIR . '/color/coloredIdStyle.inc.php'; + } + + $colored = coloredIdStyle($idstr, $id, $this->thread->idcount[$id]); + $idstr2 = preg_split('/:/',$idstr,2); // �R������ID������𕪊� + $ret = array_shift($idstr2).':'; + if ($colored[1]) { + $idstr2[1] = substr($idstr2[0], 4); + $idstr2[0] = substr($idstr2[0], 0, 4); + } + foreach ($idstr2 as $i => $str) { + if ($colored[$i]) { + $ret .= "{$str}"; + } else { + $ret .= $str; + } + } + return $ret; + } + + // }}} + // {{{ cssClassedId() + + /** + * ID�J���[�Ɏg�p����CSS�N���X����ID�����񂩂�Z�o���ĕԂ�. + */ + static public function cssClassedId($id) + { + return 'idcss-' . bin2hex( + base64_decode(str_replace('.', '+', substr($id, 0, 8)))); + } + + // }}} + // {{{ ���[�e�B���e�B���\�b�h + // {{{ imageHtmlPopup() + + /** + * �摜��HTML�|�b�v�A�b�v&�|�b�v�A�b�v�E�C���h�E�T�C�Y�ɍ��킹�� + */ + public function imageHtmlPopup($img_url, $img_tag, $link_str) + { + global $_conf; + + if ($_conf['expack.ic2.enabled'] && $_conf['expack.ic2.fitimage']) { + $popup_url = 'ic2_fitimage.php?url=' . rawurlencode(str_replace('&', '&', $img_url)); + } else { + $popup_url = $img_url; + } + + $pops = ($_conf['iframe_popup'] == 1) ? $img_tag . $link_str : array($link_str, $img_tag); + return $this->iframePopup(array($img_url, $popup_url), $pops, $_conf['ext_win_target_at'], null, true); + } + + // }}} + // {{{ respopToAsync() + + /** + * ���X�|�b�v�A�b�v��񓯊����[�h�ɉ��H���� + */ + public function respopToAsync($str) + { + $respop_regex = '/(onmouseover)=\"(showResPopUp\(\'(q(\d+)of\d+)\',event\).*?)\"/'; + $respop_replace = '$1="loadResPopUp(' . $this->asyncObjName . ', $4);$2"'; + return preg_replace($respop_regex, $respop_replace, $str); + } + + // }}} + // {{{ getASyncObjJs() + + /** + * �񓯊��ǂݍ��݂ŗ��p����JavaScript�I�u�W�F�N�g�𐶐����� + */ + public function getASyncObjJs() + { + global $_conf; + static $done = array(); + + if (isset($done[$this->asyncObjName])) { + return; + } + $done[$this->asyncObjName] = true; + + $code = << +//asyncObjName} = { + host:"{$this->thread->host}", bbs:"{$this->thread->bbs}", key:"{$this->thread->key}", + readPhp:"{$_conf['read_php']}", readTarget:"{$_conf['bbs_win_target']}" +}; +//]]> +\n +EOJS; + return $code; + } + + // }}} + // {{{ getSpmObjJs() + + /** + * �X�}�[�g�|�b�v�A�b�v���j���[�𐶐�����JavaScript�R�[�h�𐶐����� + */ + public function getSpmObjJs($retry = false) + { + global $_conf, $STYLE; + + if (isset(self::$_spm_objects[$this->spmObjName])) { + return $retry ? self::$_spm_objects[$this->spmObjName] : ''; + } + + $ttitle_en = UrlSafeBase64::encode($this->thread->ttitle); + + if ($_conf['expack.spm.filter_target'] == '' || $_conf['expack.spm.filter_target'] == 'read') { + $_conf['expack.spm.filter_target'] = '_self'; + } + + $motothre_url = $this->thread->getMotoThread(); + $motothre_url = substr($motothre_url, 0, strlen($this->thread->ls) * -1); + + $_spmOptions = array( + 'null', + ((!$_conf['disable_res'] && $_conf['expack.spm.kokores']) ? (($_conf['expack.spm.kokores_orig']) ? '2' : '1') : '0'), + (($_conf['expack.spm.ngaborn']) ? (($_conf['expack.spm.ngaborn_confirm']) ? '2' : '1') : '0'), + (($_conf['expack.spm.filter']) ? '1' : '0'), + (($this->am_on_spm) ? '1' : '0'), + (($_conf['expack.aas.enabled']) ? '1' : '0'), + ); + $spmOptions = implode(',', $_spmOptions); + + // �G�X�P�[�v + $_spm_title = StrCtl::toJavaScript($this->thread->ttitle_hc); + $_spm_url = addslashes($motothre_url); + $_spm_host = addslashes($this->thread->host); + $_spm_bbs = addslashes($this->thread->bbs); + $_spm_key = addslashes($this->thread->key); + $_spm_ls = addslashes($this->thread->ls); + + $code = << +//spmObjName} = { + 'objName':'{$this->spmObjName}', + 'rc':'{$this->thread->rescount}', + 'title':'{$_spm_title}', + 'ttitle_en':'{$ttitle_en}', + 'url':'{$_spm_url}', + 'host':'{$_spm_host}', + 'bbs':'{$_spm_bbs}', + 'key':'{$_spm_key}', + 'ls':'{$_spm_ls}', + 'spmOption':[{$spmOptions}] +}; +SPM.init({$this->spmObjName}); +//]]> +\n +EOJS; + + self::$_spm_objects[$this->spmObjName] = $code; + + return $code; + } + + // }}} + // }}} + // {{{ transLinkDo()����Ăяo�����URL�����������\�b�h + /** + * �����̃��\�b�h�͈����������Ώۃp�^�[���ɍ��v���Ȃ���false��Ԃ��A + * transLinkDo()��false���Ԃ��Ă����$_url_handlers�ɓo�^����Ă��鎟�̊֐�/���\�b�h�ɏ��������悤�Ƃ���B + */ + // {{{ plugin_linkURL() + + /** + * URL�����N + * + * @param string $url + * @param array $purl + * @param string $str + * @return string|false + */ + public function plugin_linkURL($url, $purl, $str) + { + global $_conf; + + if (isset($purl['scheme'])) { + // ime + if ($_conf['through_ime']) { + $link_url = P2Util::throughIme($purl[0]); + } else { + $link_url = $url; + } + + $is_http = ($purl['scheme'] == 'http' || $purl['scheme'] == 'https'); + + // HTML�|�b�v�A�b�v + if ($_conf['iframe_popup'] && $is_http) { + // *pm �w��̏ꍇ�̂݁A���ʂɎ蓮�]���w���lj����� + if (substr($_conf['through_ime'], -2) == 'pm') { + $pop_url = P2Util::throughIme($purl[0], -1); + } else { + $pop_url = $link_url; + } + $link = $this->iframePopup(array($link_url, $pop_url), $str, $_conf['ext_win_target_at']); + } else { + $link = "{$str}"; + } + + // �u���N���`�F�b�J + if ($_conf['brocra_checker_use'] && $_conf['brocra_checker_url'] && $is_http) { + if (strlen($_conf['brocra_checker_query'])) { + $brocra_checker_url = $_conf['brocra_checker_url'] . '?' . $_conf['brocra_checker_query'] . '=' . rawurlencode($purl[0]); + } else { + $brocra_checker_url = rtrim($_conf['brocra_checker_url'], '/') . '/' . $url; + } + $brocra_checker_url_orig = $brocra_checker_url; + // �u���N���`�F�b�J�Eime + if ($_conf['through_ime']) { + $brocra_checker_url = P2Util::throughIme($brocra_checker_url); + } + $check_mark = '�`�F�b�N'; + $check_mark_prefix = '['; + $check_mark_suffix = ']'; + // �u���N���`�F�b�J�EHTML�|�b�v�A�b�v + if ($_conf['iframe_popup']) { + // *pm �w��̏ꍇ�̂݁A���ʂɎ蓮�]���w���lj����� + if (substr($_conf['through_ime'], -2) == 'pm') { + $brocra_checker_url = P2Util::throughIme($brocra_checker_url_orig, -1); + } else { + $brocra_pop_url = $brocra_checker_url; + } + if ($_conf['iframe_popup'] == 3) { + $check_mark = ''; + $check_mark_prefix = ''; + $check_mark_suffix = ''; + } + $brocra_checker_link = $this->iframePopup(array($brocra_checker_url, $brocra_pop_url), $check_mark, $_conf['ext_win_target_at']); + } else { + $brocra_checker_link = "{$check_mark}"; + } + $link .= $check_mark_prefix . $brocra_checker_link . $check_mark_suffix; + } + + return $link; + } + return false; + } + + // }}} + // {{{ plugin_link2chSubject() + + /** + * 2ch bbspink �ƒ����N + * + * @param string $url + * @param array $purl + * @param string $str + * @return string|false + */ + public function plugin_link2chSubject($url, $purl, $str) + { + global $_conf; + + if (preg_match('{^http://(\\w+\\.(?:2ch\\.net|bbspink\\.com))/(\\w+)/$}', $purl[0], $m)) { + $subject_url = "{$_conf['subject_php']}?host={$m[1]}&bbs={$m[2]}"; + return "{$str} [�‚�p2�ŊJ��]"; + } + return false; + } + + // }}} + // {{{ plugin_linkThread() + + /** + * �X���b�h�����N + * + * @param string $url + * @param array $purl + * @param string $str + * @return string|false + */ + public function plugin_linkThread($url, $purl, $str) + { + global $_conf; + + list($nama_url, $host, $bbs, $key, $ls) = P2Util::detectThread($purl[0]); + if ($host && $bbs && $key) { + $read_url = "{$_conf['read_php']}?host={$host}&bbs={$bbs}&key={$key}&ls={$ls}"; + if ($_conf['iframe_popup']) { + if ($ls && preg_match('/^[0-9\\-n]+$/', $ls)) { + $pop_url = $read_url; + } else { + $pop_url = $read_url . '&one=true'; + } + return $this->iframePopup(array($read_url, $pop_url), $str, $_conf['bbs_win_target_at']); + } + return "{$str}"; + } + + return false; + } + + // }}} + // {{{ plugin_linkYouTube() + + /** + * YouTube�����N�ϊ��v���O�C�� + * + * Zend_Gdata_Youtube���g���΃T���l�C�����̑��̏����ȒP�Ɏ擾�ł��邪... + * + * @param string $url + * @param array $purl + * @param string $str + * @return string|false + */ + public function plugin_linkYouTube($url, $purl, $str) + { + global $_conf; + + // http://www.youtube.com/watch?v=Mn8tiFnAUAI + // http://m.youtube.com/watch?v=OhcX0xJsDK8&client=mv-google&gl=JP&hl=ja&guid=ON&warned=True + if (preg_match('{^http://(www|jp|m)\\.youtube\\.com/watch\\?(?:.+&)?v=([0-9a-zA-Z_\\-]+)}', $url, $m)) { + // ime + if ($_conf['through_ime']) { + $link_url = P2Util::throughIme($url); + } else { + $link_url = $url; + } + + // HTML�|�b�v�A�b�v + if ($_conf['iframe_popup']) { + $link = $this->iframePopup($link_url, $str, $_conf['ext_win_target_at']); + } else { + $link = "{$str}"; + } + + $subd = $m[1]; + $id = $m[2]; + + if ($_conf['link_youtube'] == 2) { + return << +EOP; + } else { + return << +EOP; + } + } + return false; + } + + // }}} + // {{{ plugin_linkNicoNico() + + /** + * �j�R�j�R����ϊ��v���O�C�� + * + * @param string $url + * @param array $purl + * @param string $str + * @return string|false + */ + public function plugin_linkNicoNico($url, $purl, $str) + { + global $_conf; + + // http://www.nicovideo.jp/watch?v=utbrYUJt9CSl0 + // http://www.nicovideo.jp/watch/utvWwAM30N0No + // http://m.nicovideo.jp/watch/sm7044684 + if (preg_match('{^http://(?:www|m)\\.nicovideo\\.jp/watch(?:/|(?:\\?v=))([0-9a-zA-Z_-]+)}', $url, $m)) { + // ime + if ($_conf['through_ime']) { + $link_url = P2Util::throughIme($purl[0]); + } else { + $link_url = $url; + } + + // HTML�|�b�v�A�b�v + if ($_conf['iframe_popup']) { + $link = $this->iframePopup($link_url, $str, $_conf['ext_win_target_at']); + } else { + $link = "{$str}"; + } + + $id = $m[1]; + + if ($_conf['link_niconico'] == 2) { + return << +EOP; + } else { + return << +EOP; + } + } + return false; + } + + // }}} + // {{{ plugin_viewImage() + + /** + * �摜�|�b�v�A�b�v�ϊ� + * + * @param string $url + * @param array $purl + * @param string $str + * @return string|false + */ + public function plugin_viewImage($url, $purl, $str) + { + global $_conf; + global $pre_thumb_unlimited, $pre_thumb_limit; + + if (P2Util::isUrlWikipediaJa($url)) { + return false; + } + + // �\������ + if (!$pre_thumb_unlimited && empty($pre_thumb_limit)) { + return false; + } + + if (preg_match('{^https?://.+?\\.(jpe?g|gif|png)$}i', $purl[0]) && empty($purl['query'])) { + $pre_thumb_limit--; // �\�������J�E���^�������� + $img_tag = ""; + + if ($_conf['iframe_popup']) { + $view_img = $this->imageHtmlPopup($url, $img_tag, $str); + } else { + $view_img = "{$img_tag}{$str}"; + } + + // �u���N���`�F�b�J �i�v���r���[�Ƃ͑��e��Ȃ��̂ŃR�����g�A�E�g�j + /*if ($_conf['brocra_checker_use']) { + $link_url_en = rawurlencode($url); + if ($_conf['iframe_popup'] == 3) { + $check_mark = ''; + $check_mark_prefix = ''; + $check_mark_suffix = ''; + } else { + $check_mark = '�`�F�b�N'; + $check_mark_prefix = '['; + $check_mark_suffix = ']'; + } + $view_img .= $check_mark_prefix . "{$check_mark}" . $check_mark_suffix; + }*/ + + return $view_img; + } + + return false; + } + + // }}} + // {{{ plugin_imageCache2() + + /** + * ImageCache2�T���l�C���ϊ� + * + * @param string $url + * @param array $purl + * @param string $str + * @return string|false + */ + public function plugin_imageCache2($url, $purl, $str, + $force = false, + $referer = null) + { + static $serial = 0; + + global $_conf; + global $pre_thumb_unlimited, $pre_thumb_ignore_limit, $pre_thumb_limit; + + if (P2Util::isUrlWikipediaJa($url)) { + return false; + } + + if ((preg_match('{^https?://.+?\\.(jpe?g|gif|png)$}i', $purl[0]) && empty($purl['query'])) || $force) { + // ���� + $serial++; + $thumb_id = 'thumbs' . $serial . $this->thumb_id_suffix; + $tmp_thumb = './img/ic_load.png'; + $url_ht = $url; + $url = $purl[0]; + $url_en = rawurlencode($url) . + ($referer ? '&ref=' . rawurlencode($referer) : ''); + $img_id = null; + + $icdb = new ImageCache2_DataObject_Images(); + + // r=0:�����N;r=1:���_�C���N�g;r=2:PHP�ŕ\�� + // t=0:�I���W�i��;t=1:PC�p�T���l�C��;t=2:�g�їp�T���l�C��;t=3:���ԃC���[�W + $img_url = 'ic2.php?r=1&uri=' . $url_en; + $thumb_url = 'ic2.php?r=1&t=1&uri=' . $url_en; + // ���C�ɃX�������摜�����N + $rank = null; + if ($_conf['expack.ic2.fav_auto_rank']) { + $rank = $this->getAutoFavRank(); + if ($rank !== null) { + $thumb_url .= '&rank=' . $rank; + } + } + + // DB�ɉ摜��񂪓o�^����Ă����Ƃ� + if ($icdb->get($url)) { + $img_id = $icdb->id; + + // �E�B���X�Ɋ������Ă����t�@�C���̂Ƃ� + if ($icdb->mime == 'clamscan/infected') { + return " {$str}"; + } + // ���ځ[��摜�̂Ƃ� + if ($icdb->rank < 0) { + return " {$str}"; + } + + // �I���W�i�����L���b�V������Ă���Ƃ��͉摜�𒼐ړǂݍ��� + $_img_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime); + if (file_exists($_img_url)) { + $img_url = $_img_url; + $cached = true; + } else { + $cached = false; + } + + // �T���l�C�����쐬����Ă��Ă���Ƃ��͉摜�𒼐ړǂݍ��� + $_thumb_url = $this->thumbnailer->thumbUrl($icdb->size, $icdb->md5, $icdb->mime); + if (file_exists($_thumb_url)) { + $thumb_url = $_thumb_url; + // �����X���^�C�����@�\��ON�ŃX���^�C���L�^����Ă��Ȃ��Ƃ���DB���X�V + if (!is_null($this->img_memo) && strpos($icdb->memo, $this->img_memo) === false){ + $update = new ImageCache2_DataObject_Images(); + if (!is_null($icdb->memo) && strlen($icdb->memo) > 0) { + $update->memo = $this->img_memo . ' ' . $icdb->memo; + } else { + $update->memo = $this->img_memo; + } + $update->whereAddQuoted('uri', '=', $url); + } + + // expack.ic2.fav_auto_rank_override �̐ݒ�ƃ����N������OK�Ȃ� + // ���C�ɃX�������摜�����N���㏑���X�V + if ($rank !== null && + self::isAutoFavRankOverride($icdb->rank, $rank)) { + if ($update === null) { + $update = new ImageCache2_DataObject_Images(); + $update->whereAddQuoted('uri', '=', $url); + } + $update->rank = $rank; + } + + if ($update !== null) { + $update->update(); + } + } + + // �T���l�C���̉摜�T�C�Y + $thumb_size = $this->thumbnailer->calc($icdb->width, $icdb->height); + $thumb_size = preg_replace('/(\d+)x(\d+)/', 'width="$1" height="$2"', $thumb_size); + $tmp_thumb = './img/ic_load1.png'; + + $orig_img_url = $img_url; + $orig_thumb_url = $thumb_url; + + // �摜���L���b�V������Ă��Ȃ��Ƃ� + // �����X���^�C�����@�\��ON�Ȃ�N�G����UTF-8�G���R�[�h�����X���^�C���܂߂� + } else { + // �摜���u���b�N���X�gor�G���[���O�ɂ��邩�m�F + if (false !== ($errcode = $icdb->ic2_isError($url))) { + return " {$str}"; + } + + $cached = false; + + $orig_img_url = $img_url; + $orig_thumb_url = $thumb_url; + $img_url .= $this->img_memo_query; + $thumb_url .= $this->img_memo_query; + $thumb_size = ''; + $tmp_thumb = './img/ic_load2.png'; + } + + // �L���b�V������Ă��炸�A�\�����������L���̂Ƃ� + if (!$cached && !$pre_thumb_unlimited && !$pre_thumb_ignore_limit) { + // �\�������𒴂��Ă�����A�\�����Ȃ� + // �\�������𒴂��Ă��Ȃ���΁A�\�������J�E���^�������� + if ($pre_thumb_limit <= 0) { + $show_thumb = false; + } else { + $show_thumb = true; + $pre_thumb_limit--; + } + } else { + $show_thumb = true; + } + + // �\�����[�h + if ($show_thumb) { + $img_tag = ""; + if ($_conf['iframe_popup']) { + $view_img = $this->imageHtmlPopup($img_url, $img_tag, $str); + } else { + $view_img = "{$img_tag}{$str}"; + } + } else { + $img_tag = ""; + $view_img = "{$img_tag}{$str}"; + } + + // �\�[�X�ւ̃����N��ime�t���ŕ\�� + if ($_conf['expack.ic2.enabled'] && $_conf['expack.ic2.through_ime']) { + $ime_url = P2Util::throughIme($url); + if ($_conf['iframe_popup'] == 3) { + $ime_mark = ''; + } else { + $ime_mark = '[ime]'; + } + $view_img .= " {$ime_mark}"; + } + + $view_img .= ''; + + return $view_img; + } + + return false; + } + + // }}} + // {{{ plugin_replaceImageUrl() + + /** + * �u���摜URL+ImageCache2 + */ + public function plugin_replaceImageUrl($url, $purl, $str) + { + static $serial = 0; + + global $_conf; + global $pre_thumb_unlimited, $pre_thumb_ignore_limit, $pre_thumb_limit; + + // +Wiki + global $replaceImageUrlCtl; + + $url = $purl[0]; + $replaced = $replaceImageUrlCtl->replaceImageUrl($url); + if (!$replaced[0]) { + return false; + } + + foreach ($replaced as $v) { + $url_en = rawurlencode($v['url']); + $url_ht = p2h($v['url']); + $ref_en = $v['referer'] ? '&ref=' . rawurlencode($v['referer']) : ''; + + // ���� + $serial++; + $thumb_id = 'thumbs' . $serial . $this->thumb_id_suffix; + $tmp_thumb = './img/ic_load.png'; + + $icdb = new ImageCache2_DataObject_Images(); + + // r=0:�����N;r=1:���_�C���N�g;r=2:PHP�ŕ\�� + // t=0:�I���W�i��;t=1:PC�p�T���l�C��;t=2:�g�їp�T���l�C��;t=3:���ԃC���[�W + // +Wiki + $img_url = 'ic2.php?r=1&uri=' . $url_en . $ref_en; + $thumb_url = 'ic2.php?r=1&t=1&uri=' . $url_en . $ref_en; + // ���C�ɃX�������摜�����N + $rank = null; + if ($_conf['expack.ic2.fav_auto_rank']) { + $rank = $this->getAutoFavRank(); + if ($rank !== null) $thumb_url .= '&rank=' . $rank; + } + + // DB�ɉ摜��񂪓o�^����Ă����Ƃ� + if ($icdb->get($v['url'])) { + + // �E�B���X�Ɋ������Ă����t�@�C���̂Ƃ� + if ($icdb->mime == 'clamscan/infected') { + $result .= ""; + continue; + } + // ���ځ[��摜�̂Ƃ� + if ($icdb->rank < 0) { + $result .= ""; + continue; + } + + // �I���W�i�����L���b�V������Ă���Ƃ��͉摜�𒼐ړǂݍ��� + $_img_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime); + if (file_exists($_img_url)) { + $img_url = $_img_url; + $cached = true; + } else { + $cached = false; + } + + // �T���l�C�����쐬����Ă��Ă���Ƃ��͉摜�𒼐ړǂݍ��� + $_thumb_url = $this->thumbnailer->thumbUrl($icdb->size, $icdb->md5, $icdb->mime); + if (file_exists($_thumb_url)) { + $thumb_url = $_thumb_url; + // �����X���^�C�����@�\��ON�ŃX���^�C���L�^����Ă��Ȃ��Ƃ���DB���X�V + if (!is_null($this->img_memo) && strpos($icdb->memo, $this->img_memo) === false){ + $update = new ImageCache2_DataObject_Images(); + if (!is_null($icdb->memo) && strlen($icdb->memo) > 0) { + $update->memo = $this->img_memo . ' ' . $icdb->memo; + } else { + $update->memo = $this->img_memo; + } + $update->whereAddQuoted('uri', '=', $v['url']); + } + + // expack.ic2.fav_auto_rank_override �̐ݒ�ƃ����N������OK�Ȃ� + // ���C�ɃX�������摜�����N���㏑���X�V + if ($rank !== null && + self::isAutoFavRankOverride($icdb->rank, $rank)) { + if ($update === null) { + $update = new ImageCache2_DataObject_Images(); + $update->whereAddQuoted('uri', '=', $v['url']); + } + $update->rank = $rank; + } + + if ($update !== null) { + $update->update(); + } + } + + // �T���l�C���̉摜�T�C�Y + $thumb_size = $this->thumbnailer->calc($icdb->width, $icdb->height); + $thumb_size = preg_replace('/(\d+)x(\d+)/', 'width="$1" height="$2"', $thumb_size); + $tmp_thumb = './img/ic_load1.png'; + + $orig_img_url = $img_url; + $orig_thumb_url = $thumb_url; + + // �摜���L���b�V������Ă��Ȃ��Ƃ� + // �����X���^�C�����@�\��ON�Ȃ�N�G����UTF-8�G���R�[�h�����X���^�C���܂߂� + } else { + // �摜���u���b�N���X�gor�G���[���O�ɂ��邩�m�F + if (false !== ($errcode = $icdb->ic2_isError($v['url']))) { + $result .= ""; + continue; + } + + $cached = false; + + $orig_img_url = $img_url; + $orig_thumb_url = $thumb_url; + $img_url .= $this->img_memo_query; + $thumb_url .= $this->img_memo_query; + $thumb_size = ''; + $tmp_thumb = './img/ic_load2.png'; + } + + // �L���b�V������Ă��炸�A�\�����������L���̂Ƃ� + if (!$cached && !$pre_thumb_unlimited && !$pre_thumb_ignore_limit) { + // �\�������𒴂��Ă�����A�\�����Ȃ� + // �\�������𒴂��Ă��Ȃ���΁A�\�������J�E���^�������� + if ($pre_thumb_limit <= 0) { + $show_thumb = false; + } else { + $show_thumb = true; + $pre_thumb_limit--; + } + } else { + $show_thumb = true; + } + + // �\�����[�h + if ($show_thumb) { + $img_tag = ""; + if ($_conf['iframe_popup']) { + $view_img = $this->imageHtmlPopup($img_url, $img_tag, ''); + } else { + $view_img = "{$img_tag}"; + } + } else { + $img_tag = ""; + $view_img = "{$img_tag}"; + } + + $view_img .= '"; + . "'{$url_ht}', event)\">"; + + $result .= $view_img; + } + // �\�[�X�ւ̃����N��ime�t���ŕ\�� + $ime_url = P2Util::throughIme($url); + $result .= "{$str}"; + return $result; + } + + /** + * +Wiki:�����N�v���O�C�� + */ + public function plugin_linkPlugin($url, $purl, $str) + { + return $GLOBALS['linkPluginCtl']->replaceLinkToHTML($url, $str); + } + + // }}} + // {{{ plugin_imepitaToImageCache2() + + /** + * imepita��URL�����H����ImageCache2������v���O�C�� + * + * @param string $url + * @param array $purl + * @param string $str + * @return string|false + */ + public function plugin_imepitaToImageCache2($url, $purl, $str) + { + if (preg_match('{^https?://imepita\.jp/(?:image/)?(\d{8}/\d{6})}i', + $purl[0], $m) && empty($purl['query'])) { + $_url = 'http://imepita.jp/image/' . $m[1]; + $_purl = @parse_url($_url); + $_purl[0] = $_url; + return $this->plugin_imageCache2($_url, $_purl, $str, true, $url); + } + return false; + } + + // }}} + // }}} + // {{{ getQuotebacksJson() + + public function getQuotebacksJson() + { + $ret = array(); + foreach ($this->getQuoteFrom() as $resnum => $quote_from) { + if (!$quote_from) { + continue; + } + if ($resnum != 1 && ($resnum < $this->thread->resrange['start'] || $resnum > $this->thread->resrange['to'])) { + continue; + } + $tmp = array(); + foreach ($quote_from as $quote) { + if ($quote != 1 && ($quote < $this->thread->resrange['start'] || $quote > $this->thread->resrange['to'])) { + continue; + } + $tmp[] = $quote; + } + if ($tmp) $ret[] = "{$resnum}:[" . join(',', $tmp) . "]"; + } + return '{' . join(',', $ret) . '}'; + } + + // }}} + // {{{ getResColorJs() + + public function getResColorJs() + { + global $_conf, $STYLE; + + $fontstyle_bold = empty($STYLE['fontstyle_bold']) ? 'normal' : $STYLE['fontstyle_bold']; + $fontweight_bold = empty($STYLE['fontweight_bold']) ? 'normal' : $STYLE['fontweight_bold']; + $fontfamily_bold = $STYLE['fontfamily_bold']; + $backlinks = $this->getQuotebacksJson(); + $colors = array(); + $backlink_colors = join(',', + array_map(create_function('$x', 'return "\'{$x}\'";'), + explode(',', $_conf['backlink_coloring_track_colors'])) + ); + $prefix = $this->_matome ? "t{$this->_matome}" : ''; + return << +if (typeof rescolObjs == 'undefined') rescolObjs = []; +rescolObjs.push((function() { + var obj = new BacklinkColor('{$prefix}'); + obj.colors = [{$backlink_colors}]; + obj.highlightStyle = {fontStyle :'{$fontstyle_bold}', fontWeight : '{$fontweight_bold}', fontFamily : '{$fontfamily_bold}'}; + obj.backlinks = {$backlinks}; + return obj; +})()); + +EOJS; + } + + // }}} + // {{{ getIdsForRenderJson() + + public function getIdsForRenderJson() + { + $ret = array(); + if ($this->_ids_for_render) { + foreach ($this->_ids_for_render as $id => $count) { + $ret[] = "'{$id}':{$count}"; + } + } + return '{' . join(',', $ret) . '}'; + } + + // }}} + // {{{ getIdColorJs() + + public function getIdColorJs() + { + global $_conf, $STYLE; + + if ($_conf['coloredid.enable'] < 1 || $_conf['coloredid.click'] < 1) { + return ''; + } + if (count($this->thread->idcount) < 1) { + return ''; + } + + $idslist = $this->getIdsForRenderJson(); + + $rate = $_conf['coloredid.rate.times']; + $tops = $this->getIdCountRank(10); + $average = $this->getIdCountAverage(); + $color_init = ''; + if ($_conf['coloredid.rate.type'] > 0) { + switch($_conf['coloredid.rate.type']) { + case 2: + $init_rate = $tops; + break; + case 3: + $init_rate = $average; + break; + case 1: + $init_rate = $rate; + default: + } + if ($init_rate > 1) + $color_init .= 'idCol.initColor(' . $init_rate . ', idslist);'; + } + $color_init .= "idCol.rate = {$rate};"; + if (!$this->_matome) { + $color_init .= "idCol.tops = {$tops};"; + $color_init .= "idCol.average = {$average};"; + } + $hissiCount = $_conf['coloredid.rate.hissi.times']; + $mark_colors = join(',', + array_map(create_function('$x', 'return "\'{$x}\'";'), + explode(',', $_conf['coloredid.marking.colors'])) + ); + $fontstyle_bold = empty($STYLE['fontstyle_bold']) ? 'normal' : $STYLE['fontstyle_bold']; + $fontweight_bold = empty($STYLE['fontweight_bold']) ? 'normal' : $STYLE['fontweight_bold']; + $fontfamily_bold = $STYLE['fontfamily_bold']; + $uline = $STYLE['a_underline_none'] != 1 + ? 'idCol.colorStyle["textDecoration"] = "underline"' : ''; + return << +(function() { +var idslist = {$idslist}; +if (typeof idCol == 'undefined') { + idCol = new IDColorChanger(idslist, {$hissiCount}); + idCol.colors = [{$mark_colors}]; +{$uline}; + idCol.highlightStyle = {fontStyle :'{$fontstyle_bold}', fontWeight : '{$fontweight_bold}', fontFamily : '{$fontfamily_bold}', fontSize : '104%'}; +} else idCol.addIdlist(idslist); +{$color_init} +idCol.setupSPM('{$this->spmObjName}'); +})(); + +EOJS; + } + + // }}} + // {{{ getIdCountAverage() + + public function getIdCountAverage() + { + if ($this->_idcount_average !== null) { + return $this->_idcount_average; + } + + $sum = 0; + $param = 0; + + foreach ($this->thread->idcount as $count) { + if ($count > 1) { + $sum += $count; + $param++; + } + } + + $result = ($param < 1) ? 0 : intval(ceil($sum / $param)); + $this->_idcount_average = $result; + + return $result; + } + + // }}} + // {{{ getIdCountRank() + + public function getIdCountRank($rank) + { + if ($this->_idcount_tops !== null) { + return $this->_idcount_tops; + } + + $ranking = array(); + + foreach ($this->thread->idcount as $count) { + if ($count > 1) { + $ranking[] = $count; + } + } + + if (count($ranking) == 0) { + return 0; + } + + rsort($ranking); + $rcount = count($ranking); + + $result = ($rcount >= $rank) ? $ranking[$rank - 1] : $ranking[$rcount - 1]; + $this->_idcount_tops = $result; + + return $result; + } + + // }}} +} + +// }}} + +/* + * Local Variables: + * mode: php + * coding: cp932 + * tab-width: 4 + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ +// vim: set syn=php fenc=cp932 ai et ts=4 sw=4 sts=4 fdm=marker: diff --git a/rep2/live_read.php b/rep2/live_read.php index e3d9bb49a..e9f9b1650 100755 --- a/rep2/live_read.php +++ b/rep2/live_read.php @@ -1,6 +1,6 @@ getThreadInfoFromIdx(); +//========================================================== +// preview >>1 +//========================================================== + +//if (!empty($_GET['onlyone'])) { +if (!empty($_GET['one'])) { + $aThread->ls = '1'; + $aThread->resrange = array('start' => 1, 'to' => 1, 'nofirst' => false); + + // �K���������m�ł͂Ȃ����֋X�I�� + //if (!isset($aThread->rescount) && !empty($_GET['rc'])) { + if (!isset($aThread->rescount) && !empty($_GET['rescount'])) { + //$aThread->rescount = $_GET['rc']; + $aThread->rescount = (int)$_GET['rescount']; + } + + $preview = $aThread->previewOne(); + $ptitle_ht = p2h($aThread->itaj) . ' / ' . $aThread->ttitle_hd; + + include READ_HEADER_INC_PHP; + echo $preview; + include READ_FOOTER_INC_PHP; + + return; +} + //=========================================================== // DAT�̃_�E�����[�h //=========================================================== @@ -258,10 +284,99 @@ //$GLOBALS['debug'] && $GLOBALS['profiler']->enterSection("datToHtml"); if ($aThread->rescount) { - echo '
    '; + $mainhtml = ''; + require_once P2_LIB_DIR . '/live/live_ShowThreadPc.php'; + $aShowThread = new ShowThreadPc($aThread); + + if ($_conf['expack.spm.enabled']) { + echo $aShowThread->getSpmObjJs(); + } + + $res1 = $aShowThread->quoteOne(); // >>1�|�b�v�A�b�v�p + if ($_conf['coloredid.enable'] > 0 && $_conf['coloredid.click'] > 0 && + $_conf['coloredid.rate.type'] > 0) { + if ($_GET['showbl']) { + $mainhtml = $aShowThread->datToHtml_resFrom(true); + } else { + $mainhtml .= $aShowThread->datToHtml(true); + } + $mainhtml .= $res1['q']; + } else { + if ($_GET['showbl']) { + $aShowThread->datToHtml_resFrom(); + } else { + $aShowThread->datToHtml(); + } + echo $res1['q']; + } + + + // ���X�ǐՃJ���[ + if ($_conf['backlink_coloring_track']) { + echo $aShowThread->getResColorJs(); + } + + // ID�J���[�����O + if ($_conf['coloredid.enable'] > 0 && $_conf['coloredid.click'] > 0) { + echo $aShowThread->getIdColorJs(); + // �u���E�U���׌y���̂��߁ACSS���������X�N���v�g�̌�ŃR���e���c�� + // �����_�����O������ + echo $mainhtml; + } + + // �O���c�[�� + $pluswiki_js = ''; + + if ($_conf['wiki.idsearch.spm.mimizun.enabled']) { + if (!class_exists('Mimizun', false)) { + require P2_PLUGIN_DIR . '/mimizun/Mimizun.php'; + } + $mimizun = new Mimizun(); + $mimizun->host = $aThread->host; + $mimizun->bbs = $aThread->bbs; + if ($mimizun->isEnabled()) { + $pluswiki_js .= "WikiTools.addMimizun({$aShowThread->spmObjName});"; + } + } + + if ($_conf['wiki.idsearch.spm.hissi.enabled']) { + if (!class_exists('Hissi', false)) { + require P2_PLUGIN_DIR . '/hissi/Hissi.php'; + } + $hissi = new Hissi(); + $hissi->host = $aThread->host; + $hissi->bbs = $aThread->bbs; + if ($hissi->isEnabled()) { + $pluswiki_js .= "WikiTools.addHissi({$aShowThread->spmObjName});"; + } + } + + if ($_conf['wiki.idsearch.spm.stalker.enabled']) { + if (!class_exists('Stalker', false)) { + require P2_PLUGIN_DIR . '/stalker/Stalker.php'; + } + $stalker = new Stalker(); + $stalker->host = $aThread->host; + $stalker->bbs = $aThread->bbs; + if ($stalker->isEnabled()) { + $pluswiki_js .= "WikiTools.addStalker({$aShowThread->spmObjName});"; + } + } + + if ($pluswiki_js !== '') { + echo << +// + +EOP; + } } elseif ($aThread->diedat && count($aThread->datochi_residuums) > 0) { - echo '�ߋ����O����DAT���擾�o���Ȃ��X���b�h�͎����ł��܂���'; + require_once P2_LIB_DIR . '/ShowThreadPc.php'; + $aShowThread = new ShowThreadPc($aThread); + echo $aShowThread->getDatochiResiduums(); } //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection("datToHtml"); @@ -289,6 +404,37 @@ } flush(); +//=========================================================== +// idx�̒l��ݒ�A�L�^ +//=========================================================== +if ($aThread->rescount) { + + // �����̎��́A���ǐ����X�V���Ȃ� + if ((isset($GLOBALS['word']) && strlen($GLOBALS['word']) > 0) || $is_ajax) { + $aThread->readnum = $idx_data[5]; + } else { + $aThread->readnum = min($aThread->rescount, max(0, $idx_data[5], $aThread->resrange['to'])); + } + $newline = $aThread->readnum + 1; // $newline�͔p�~�\�肾���A���݊��p�ɔO�̂��� + + $sar = array($aThread->ttitle, $aThread->key, $idx_data[2], $aThread->rescount, '', + $aThread->readnum, $idx_data[6], $idx_data[7], $idx_data[8], $newline, + $idx_data[10], $idx_data[11], $aThread->datochiok); + P2Util::recKeyIdx($aThread->keyidx, $sar); // key.idx�ɋL�^ +} + +//=========================================================== +// �������L�^ +//=========================================================== +if ($aThread->rescount && !$is_ajax) { + recRecent(implode('<>', array($aThread->ttitle, $aThread->key, $idx_data[2], '', '', + $aThread->readnum, $idx_data[6], $idx_data[7], $idx_data[8], $newline, + $aThread->host, $aThread->bbs))); +} + +// NG���ځ[����L�^ +NgAbornCtl::saveNgAborns(); + // �ȏ� --------------------------------------------------------------- exit; @@ -316,6 +462,63 @@ function detectThread() } } +// }}} +// {{{ recRecent() + +/** + * �������L�^���� + */ +function recRecent($data) +{ + global $_conf; + + $lock = new P2Lock($_conf['recent_idx'], false); + + // $_conf['recent_idx'] �t�@�C�����Ȃ���ΐ��� + FileCtl::make_datafile($_conf['recent_idx']); + + $lines = FileCtl::file_read_lines($_conf['recent_idx'], FILE_IGNORE_NEW_LINES); + $neolines = array(); + + // {{{ �ŏ��ɏd���v�f���폜���Ă��� + + if (is_array($lines)) { + foreach ($lines as $l) { + $lar = explode('<>', $l); + $data_ar = explode('<>', $data); + if ($lar[1] == $data_ar[1]) { continue; } // key�ŏd����� + if (!$lar[1]) { continue; } // key�̂Ȃ����͕̂s���f�[�^ + $neolines[] = $l; + } + } + + // }}} + + // �V�K�f�[�^�lj� + array_unshift($neolines, $data); + + while (sizeof($neolines) > $_conf['rct_rec_num']) { + array_pop($neolines); + } + + // {{{ �������� + + if ($neolines) { + $cont = ''; + foreach ($neolines as $l) { + $cont .= $l . "\n"; + } + + if (FileCtl::file_write_contents($_conf['recent_idx'], $cont) === false) { + p2die('cannot write file.'); + } + } + + // }}} + + return true; +} + // }}} /* diff --git a/rep2/post.php b/rep2/post.php index 0902dde02..d07f7a907 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -858,14 +858,6 @@ function showCookieConfirmation($host, $response) $form->appendChild($elem); } - // �������[�h - if (!empty($_POST['live'])) { - $elem = $hidden->cloneNode(); - $elem->setAttribute('name', 'live'); - $elem->setAttribute('value', '1'); - $form->appendChild($elem); - } - // �����r���[�w�� if ($_conf['b'] != $_conf['client_type']) { $elem = $hidden->cloneNode(); diff --git a/rep2/read.php b/rep2/read.php index 1e497f2ba..2d9b277fb 100644 --- a/rep2/read.php +++ b/rep2/read.php @@ -314,9 +314,9 @@ $res1 = $aShowThread->quoteOne(); // >>1�|�b�v�A�b�v�p if ($_GET['showbl']) { - $mainhtml = $aShowThread->datToHtml_resFrom(true); + $mainhtml = $aShowThread->getDatToHtml_resFrom(); } else { - $mainhtml .= $aShowThread->datToHtml(true); + $mainhtml .= $aShowThread->getDatToHtml(); } $mainhtml .= $res1['q']; diff --git a/rep2/read_async.php b/rep2/read_async.php index 5c8c43ab3..7f633a2a2 100644 --- a/rep2/read_async.php +++ b/rep2/read_async.php @@ -145,14 +145,6 @@ exit; } - -// �e���r�ԑg����2ch�Ȃǂ̓��O�Eidx�E������ۑ����Ȃ� -if (P2Util::isHostNoCacheData($aThread->host)) { - //@unlink($aThread->keydat); // ThreadRead::readDat()�ō폜���� - exit; -} - - //=========================================================== // idx�̒l��ݒ�A�L�^ //=========================================================== From f7a579d3c42d13277e67bfc74b7db9725c7930ab Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Wed, 18 Mar 2015 23:01:13 +0900 Subject: [PATCH 071/339] =?UTF-8?q?=E5=AE=9F=E6=B3=81=E3=83=A2=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=81=8B=E3=82=89=E3=81=AE=E6=9B=B8=E3=81=8D=E8=BE=BC?= =?UTF-8?q?=E3=81=BF=E3=81=A7Cookie=E7=A2=BA=E8=AA=8D=E3=81=8C=E7=99=BA?= =?UTF-8?q?=E7=94=9F=E3=81=97=E3=81=9F=E5=A0=B4=E5=90=88=E5=AE=9F=E6=B3=81?= =?UTF-8?q?=E3=83=A2=E3=83=BC=E3=83=89=E3=81=AB=E6=88=BB=E3=82=8C=E3=81=AA?= =?UTF-8?q?=E3=81=84=E4=B8=8D=E5=85=B7=E5=90=88=E3=82=92=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=20=E6=8E=83=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ShowThread.php | 74 ++++----------------------------- lib/live/live_post_form.inc.php | 58 -------------------------- rep2/post.php | 8 ++++ 3 files changed, 17 insertions(+), 123 deletions(-) diff --git a/lib/ShowThread.php b/lib/ShowThread.php index 68b2d2f10..47ae65f4b 100644 --- a/lib/ShowThread.php +++ b/lib/ShowThread.php @@ -378,29 +378,10 @@ protected function setBbsNonameName() /** * Dat��HTML�ϊ��������̂��擾���� * - * @param bool $is_fragment - * @return bool|string - */ - public function getDatToHtml($is_fragment = false) - { - return $this->datToHtml(true, $is_fragment); - } - public function getDatToHtml_resFrom($is_fragment = false) - { - return $this->datToHtml_resFrom(true, $is_fragment); - } - - // }}} - // {{{ datToHtml() - - /** - * Dat��HTML�ɕϊ����ĕ\������ - * - * @param bool $capture true�Ȃ�ϊ����ʂ��o�͂����ɕԂ� * @param bool $is_fragment true�Ȃ�
    �ň͂܂Ȃ� * @return bool|string */ - public function datToHtml($capture = false, $is_fragment = false) + public function getDatToHtml($is_fragment = false) { global $_conf, $filter_hits, $last_hit_resnum; @@ -408,13 +389,8 @@ public function datToHtml($capture = false, $is_fragment = false) // �\�����X�͈͂��w�肳��Ă��Ȃ���� if (!$aThread->resrange) { - $error = '

    p2 error: {$this->resrange} is false at datToHtml()

    '; - if ($capture) { - return $error; - } else { - echo $error; - return false; - } + $error = '

    p2 error: {$this->resrange} is false at getDatToHtml()

    '; + return $error; } $start = $aThread->resrange['start']; @@ -504,14 +480,6 @@ public function datToHtml($capture = false, $is_fragment = false) } else { $buf['body'] .= $res; } - if (!$capture && $n % 10 == 0) { - echo $buf['body']; - if ($do_filtering && !$is_ktai) { - echo "\n"; - } - flush(); - $buf['body'] = ''; - } } if ($this->thread->readnum < $rn) { @@ -526,25 +494,18 @@ public function datToHtml($capture = false, $is_fragment = false) $buf['body'] .= "\n"; } - if ($capture) { - return $buf['body'] . $buf['q']; - } else { - echo $buf['body']; - echo $buf['q']; - flush(); - return true; - } + return $buf['body'] . $buf['q']; + } /** - * �w��̏����݂ւ̃��X��HTML�ɕϊ����ĕ\������ + * �w��̏����݂ւ̃��X��HTML�ɕϊ��������̂��擾���� * - * @param bool $capture true�Ȃ�ϊ����ʂ��o�͂����ɕԂ� * @param bool $is_fragment true�Ȃ�
    �ň͂܂Ȃ� * @param bool $show_rootres true�Ȃ�w��̏����݂����ʂɊ܂߂� * @return bool|string */ - public function datToHtml_resFrom($capture = false, $is_fragment = false, $show_rootres = false) + public function getDatToHtml_resFrom($is_fragment = false, $show_rootres = false) { global $_conf; @@ -554,12 +515,7 @@ public function datToHtml_resFrom($capture = false, $is_fragment = false, $show_ $target = $aThread->resrange['start']; if (!$aThread->resrange || $target != $aThread->resrange['to']) { $error = '

    p2 error: {$this->resrange} is false at datToHtml()

    '; - if ($capture) { - return $error; - } else { - echo $error; - return false; - } + return $error; } $datlines = $aThread->datlines; @@ -612,25 +568,13 @@ public function datToHtml_resFrom($capture = false, $is_fragment = false, $show_ } else { $buf['body'] .= $res; } - if (!$capture && $n % 10 == 0) { - echo $buf['body']; - flush(); - $buf['body'] = ''; - } } if (!$is_fragment) { $buf['body'] .= "\n"; } - if ($capture) { - return $buf['body'] . $buf['q']; - } else { - echo $buf['body']; - echo $buf['q']; - flush(); - return true; - } + return $buf['body'] . $buf['q']; } // }}} diff --git a/lib/live/live_post_form.inc.php b/lib/live/live_post_form.inc.php index 5d9b579e2..68b917bba 100755 --- a/lib/live/live_post_form.inc.php +++ b/lib/live/live_post_form.inc.php @@ -18,40 +18,6 @@ $htm['p2res'] = ''; } -/*if ($_conf['ktai']) { - $htm['k_br'] = '
    '; - $htm['kaiko_on_js'] = ''; - $htm['kaiko_set_hidden_js'] = ''; - $htm['table_begin'] = ''; - $htm['table_break1'] = ''; - $htm['table_break2'] = ''; - $htm['table_end'] = '
    '; - if ($_conf['iphone']) { - $htm['options'] .= << - - - - -EOP; - $htm['name_label'] = '���O�F'; - $htm['mail_label'] = 'E-mail�F'; - $htm['name_extra_at'] = ' autocorrect="off" autocapitalize="off"'; - $htm['mail_extra_at'] = ' autocorrect="off" autocapitalize="off"'; - $htm['msg_extra_at'] = ' autocorrect="off" autocapitalize="off"'; - $htm['submit_extra_at'] = ''; - if ($_conf['expack.editor.mobile.savedraft'] != '0' && $_conf['expack.editor.mobile.savedraft.interval'] > 0) { - $htm['kaiko_on_js'] = ' onfocus="DraftKakiko.startAutoSave(this.form, ' . ($_conf['expack.editor.mobile.savedraft.interval'] * 1000) . ')"'; - } - } else { - $htm['name_label'] = '���O�F'; - $htm['mail_label'] = 'E-mail�F'; - $htm['name_extra_at'] = ''; - $htm['mail_extra_at'] = ''; - $htm['msg_extra_at'] = ''; - $htm['submit_extra_at'] = ''; - } -} else {*/ // ���X�A���J�[ if ($q_resnum) { $hd['MESSAGE'] = ">>" . $q_resnum . "\r\n"; @@ -62,18 +28,6 @@ } else { $htm['kaiko_on_js_fmt'] = ' onfocus="%1$s" onkeyup="if(%2$s){%1$s}"'; } -/* $htm['kaiko_on_js_func'] = sprintf("adjustTextareaRows(this,%d,2)", $STYLE['post_msg_rows']); - if ($_conf['expack.editor.savedraft'] != '0' && $_conf['expack.editor.savedraft.interval'] > 0) { - $htm['kaiko_on_js_func'] = 'DraftKakiko.startAutoSave(this.form, ' . ($_conf['expack.editor.savedraft.interval'] * 1000) . '); ' . $htm['kaiko_on_js_func']; - } - $htm['kaiko_on_js_cond'] = '!event||((event.keyCode&&(event.keyCode==8||event.keyCode==13))||event.ctrlKey||event.metaKey||event.altKey)'; - $htm['kaiko_on_js'] = sprintf($htm['kaiko_on_js_fmt'], $htm['kaiko_on_js_func'], p2h($htm['kaiko_on_js_cond'])); - //$htm['kaiko_on_js'] .= ' ondblclick="this.rows=this.value.split(/\r\n|\r|\n/).length+1"'; - $htm['kaiko_set_hidden_js'] = ' onclick="setHiddenValue(this);"'; - $htm['table_begin'] = '
    '; - $htm['table_break1'] = '
    '; - $htm['table_break2'] = ''; - $htm['table_end'] = '
    ';*/ $htm['name_label'] = '�F'; $htm['mail_label'] = '�F'; $htm['name_extra_at'] = ' tabindex="1"'; @@ -116,31 +70,20 @@ // �����R�[�h����p�������擪�Ɏd���ނ��Ƃ�mb_convert_variables()�̎�������������� $htm['post_form'] = << -
    -  {$ttitle_pfi}  {$htm['maru_post']} {$htm['name_label']} {$htm['mail_label']} {$htm['sage_cb']} {$htm['options']} - - - - - {$htm['src_fix']} {$htm['block_submit']} - - {$htm['beres']} {$htm['p2res']} - {$htm['samba']} {$htm['k_br']}{$savedraft} {$upload_form} @@ -160,7 +103,6 @@ {$newthread_hidden_ht}{$readnew_hidden_ht} {$_conf['detect_hint_input_ht']}
    - EOP; /* diff --git a/rep2/post.php b/rep2/post.php index d07f7a907..0902dde02 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -858,6 +858,14 @@ function showCookieConfirmation($host, $response) $form->appendChild($elem); } + // �������[�h + if (!empty($_POST['live'])) { + $elem = $hidden->cloneNode(); + $elem->setAttribute('name', 'live'); + $elem->setAttribute('value', '1'); + $form->appendChild($elem); + } + // �����r���[�w�� if ($_conf['b'] != $_conf['client_type']) { $elem = $hidden->cloneNode(); From e570117263d6035433a931a8dbfffc152b5b0666 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 19 Mar 2015 01:59:14 +0900 Subject: [PATCH 072/339] =?UTF-8?q?rep2/live=5Fread.php=E3=81=A7=E6=9C=AC?= =?UTF-8?q?=E4=BD=93=E3=81=AElib/ShowThreadP=EF=BD=83.php=E3=82=92?= =?UTF-8?q?=E4=BD=BF=E3=81=86=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/live/live_ShowThread.php | 2050 -------------------------------- lib/live/live_ShowThreadPc.php | 1999 ------------------------------- rep2/live_read.php | 118 +- 3 files changed, 16 insertions(+), 4151 deletions(-) delete mode 100755 lib/live/live_ShowThread.php delete mode 100755 lib/live/live_ShowThreadPc.php diff --git a/lib/live/live_ShowThread.php b/lib/live/live_ShowThread.php deleted file mode 100755 index 9d205aedb..000000000 --- a/lib/live/live_ShowThread.php +++ /dev/null @@ -1,2050 +0,0 @@ -(<[Aa][ ].+?>)(.*?)()) # �����N�iPCRE�̓�����A�K�����̃p�^�[�����ŏ��Ɏ��s����j -| -(?: - (?P # ���p - ((?:>|��){1,2}[ ]?) # ���p�� - ( - (?:[1-9]\\d{0,3}) # 1�–ڂ̔ԍ� - (?: - (?:[ ]?(?:[,=]|�A)[ ]?[1-9]\\d{0,3})+ # �A�� - | - -(?:[1-9]\\d{0,3})? # �͈� - )? - ) - (?=\\D|$) - ) # ���p�����܂� -| # PHP 5.3����ɂ���Ȃ�A����\'�̃G�X�P�[�v���O���ANOWDOC�ɂ��� - (?P(ftp|h?t?tps?)://([0-9A-Za-z][\\w;/?:@=&$\\-_.+!*\'(),#%\\[\\]^~]+)) # URL - ([^\\s<>]*) # URL�̒���A�^�Oor�z���C�g�X�y�[�X�������܂ł̕����� -| - (?PID:[ ]?([0-9A-Za-z/.+]{8,11})(?=[^0-9A-Za-z/.+]|$)) # ID�i8,10�� +PC/�g�ю��ʃt���O�j -) -}x'; - - /** - * ���_�C���N�^�̎�� - * - * @var int - */ - const REDIRECTOR_NONE = 0; - const REDIRECTOR_IMENU = 1; - const REDIRECTOR_PINKTOWER = 2; - const REDIRECTOR_MACHIBBS = 3; - - /** - * NG���ځ[��̎�� - * - * @var int - */ - const ABORN = -1; - const NG_NONE = 0; - const NG_NAME = 1; - const NG_MAIL = 2; - const NG_ID = 4; - const NG_MSG = 8; - const NG_FREQ = 16; - const NG_CHAIN = 32; - const NG_AA = 64; - - // }}} - // {{{ static properties - - /** - * �܂Ƃߓǂ݃��[�h���̃X���b�h�� - * - * @var int - */ - static private $_matome_count = 0; - - /** - * �{���ȊO��NG���ځ[��Ƀq�b�g�������� - * - * @var int - */ - static protected $_ngaborns_head_hits = 0; - - /** - * �{����NG���ځ[��Ƀq�b�g�������� - * - * @var int - */ - static protected $_ngaborns_body_hits = 0; - - /** - * getAnchorRegex() �̃L���b�V�� - * - * @var array - */ - static private $_anchorRegexes = array(); - - /** - * _getAnchorRegexParts() �̃L���b�V�� - * - * @var array - */ - static private $_anchorRegexParts = null; - - // }}} - // {{{ properties - - /** - * �܂Ƃߓǂ݃��[�h���̃X���b�h�ԍ� - * - * @var int - */ - protected $_matome; - - /** - * URL����������֐��E���\�b�h���Ȃǂ��i�[����z�� - * (�g�ݍ���) - * - * @var array - */ - protected $_url_handlers; - - /** - * URL����������֐��E���\�b�h���Ȃǂ��i�[����z�� - * (���[�U��`�A�g�ݍ��݂̂��̂��D��) - * - * @var array - */ - protected $_user_url_handlers; - - /** - * �p�oID�����ځ[�񂷂� - * - * @var bool - */ - protected $_ngaborn_frequent; - - /** - * NG or ���ځ[�񃌃X�����邩�ǂ��� - * - * @var bool - */ - protected $_has_ngaborns; - - /** - * ���ځ[�񃌃X�ԍ������NG���X�ԍ����i�[����z�� - * array_intersect()�������悭�s�����߁A�Y�����郌�X�ԍ��͕�����ɃL���X�g���Ċi�[���� - * - * @var array - */ - protected $_aborn_nums; - protected $_ng_nums; - - /** - * ���_�C���N�^�̎�� - * - * @var int - */ - protected $_redirector; - - /** - * �X���b�h�I�u�W�F�N�g - * - * @var ThreadRead - */ - public $thread; - - /** - * �A�N�e�B�u���i�[�E�I�u�W�F�N�g - * - * @var ActiveMona - */ - public $activeMona; - - /** - * �A�N�e�B�u���i�[���L�����ۂ� - * - * @var bool - */ - public $am_enabled = false; - - /** - * ���p���Ă��郌�X�ԍ���o�^�����z�� - * - * @var array - */ - protected $_quote_res_nums; - - - /** - * ���p�`�F�b�N�ς݃��X�ԍ��̔z�� - * - * @var array - */ - protected $_quote_res_nums_checked; - - /** - * ���p�ϊ��ς݃��X�ԍ��̔z�� - * - * @var array - */ - protected $_quote_res_nums_done; - - /** - * ���X�ԍ��`�F�b�N�̍ċA�̐[�� - * - * @var int - */ - private $_quote_check_depth; - - /** - * �f�t�H���g�̖��O - * - * @var string - */ - protected $_nanashiName = null; - - /** - * ��A���J�[���W�v�����z��(�͈̓A���J�[�܂�) // [��Q�ƃ��X�� : [�Q�ƃ��X��, ...], ...) - * - * @var array - */ - protected $_quote_from = null; - - /** - * �A���J�[���W�v�����z��(�͈̓A���J�[����) // [���X�� : [�Q�Ɛ惌�X��, ...], ...) - * - * @var array - */ - protected $_quote_to = null; - - /** - * ���C�Ɏ��������N - * - * @var bool - */ - private $_auto_fav_rank = false; - - /** - * �����N����T���l�C���𐶐�����N���X�̃C���X�^���X - * - * @var ImageCache2_Thumbnailer - */ - public $thumbnailer; - - /** - * �C�����C���\������T���l�C���𐶐�����N���X�̃C���X�^���X - * - * @var ImageCache2_Thumbnailer - */ - public $inline_prvw; - - /** - * �C�����C���T���l�C����ID�����ڔ��� - * - * @var string - */ - public $thumb_id_suffix; - - /** - * �摜�ɕt�����郁�� - * - * @var string - */ - public $img_memo; - - /** - * �摜�Ƀ�����t���邽�߂̃N�G�������� - * - * @var string - */ - public $img_memo_query; - - /** - * �摜�𑜓x - * - * @var float - */ - public $img_dpr = 1.0; - - /** - * �摜�𑜓x���w�肷��N�G�������� - * - * @var string - */ - public $img_dpr_query; - - // }}} - // {{{ constructor - - /** - * �R���X�g���N�^ - */ - protected function __construct(ThreadRead $aThread, $matome = false) - { - global $_conf; - - // �X���b�h�I�u�W�F�N�g��o�^ - $this->thread = $aThread; - $this->str_to_link_regex = $this->_buildStrToLinkRegex(); - - // �܂Ƃߓǂ݃��[�h���ۂ� - if ($matome) { - $this->_matome = ++self::$_matome_count; - } else { - $this->_matome = false; - } - - $this->_url_handlers = array(); - $this->_user_url_handlers = array(); - - $this->_ngaborn_frequent = 0; - if ($_conf['ngaborn_frequent']) { - if ($_conf['ngaborn_frequent_dayres'] == 0) { - $this->_ngaborn_frequent = $_conf['ngaborn_frequent']; - } elseif ($this->thread->setDayRes() && $this->thread->dayres < $_conf['ngaborn_frequent_dayres']) { - $this->_ngaborn_frequent = $_conf['ngaborn_frequent']; - } - } - - $this->_has_ngaborns = false; - $this->_aborn_nums = array(); - $this->_ng_nums = array(); - - if (P2Util::isHostBbsPink($this->thread->host)) { - $this->_redirector = self::REDIRECTOR_PINKTOWER; - } elseif (P2Util::isHost2chs($this->thread->host)) { - $this->_redirector = self::REDIRECTOR_IMENU; - } elseif (P2Util::isHostMachiBbs($this->thread->host)) { - $this->_redirector = self::REDIRECTOR_MACHIBBS; - } else { - $this->_redirector = self::REDIRECTOR_NONE; - } - - $this->_quote_res_nums = array(); - $this->_quote_res_nums_checked = array(); - $this->_quote_res_nums_done = array(); - } - - // }}} - - /** - * @param void - * @return void - */ - protected function setBbsNonameName() - { - $st = new SettingTxt($this->thread->host, $this->thread->bbs); - $st->setSettingArray(); - if (array_key_exists('BBS_NONAME_NAME', $st->setting_array)) { - $BBS_NONAME_NAME = $st->setting_array['BBS_NONAME_NAME']; - if (strlen($BBS_NONAME_NAME)) { - $this->_nanashiName = $BBS_NONAME_NAME; - } - } - } - - // {{{ getDatToHtml() - - /** - * Dat��HTML�ϊ��������̂��擾���� - * - * @param bool $is_fragment - * @return bool|string - */ - public function getDatToHtml($is_fragment = false) - { - return $this->datToHtml(true, $is_fragment); - } - public function getDatToHtml_resFrom($is_fragment = false) - { - return $this->datToHtml_resFrom(true, $is_fragment); - } - - // }}} - // {{{ datToHtml() - - /** - * Dat��HTML�ɕϊ����ĕ\������ - * - * @param bool $capture true�Ȃ�ϊ����ʂ��o�͂����ɕԂ� - * @param bool $is_fragment true�Ȃ�
    �ň͂܂Ȃ� - * @return bool|string - */ - public function datToHtml($capture = false, $is_fragment = false) - { - global $_conf, $filter_hits, $last_hit_resnum; - - $aThread = $this->thread; - - // �\�����X�͈͂��w�肳��Ă��Ȃ���� - if (!$aThread->resrange) { - $error = '

    p2 error: {$this->resrange} is false at datToHtml()

    '; - if ($capture) { - return $error; - } else { - echo $error; - return false; - } - } - - $start = $aThread->resrange['start']; - $to = $aThread->resrange['to']; - $nofirst = $aThread->resrange['nofirst']; - - $is_ktai = $_conf['ktai']; - $resFilter = ResFilter::getFilter(); - if ($resFilter && $resFilter->hasWord()) { - $do_filtering = true; - $nofirst = true; - } else { - $do_filtering = false; - } - - $datlines = $aThread->datlines; - $count = count($datlines); - - $buf['body'] = $is_fragment ? '' : "
    \n"; - $buf['q'] = ''; - - // �܂� 1 ��\�� - if (!$nofirst) { - $res = $this->transRes($datlines[0], 1); - if (is_array($res)) { - $buf['body'] .= $res['body']; - $buf['q'] .= $res['q'] ? $res['q'] : ''; - } else { - $buf['body'] .= $res; - } - } - - // �A���̂��߁A�͈͊O��NG���ځ[��`�F�b�N - if ($_conf['ngaborn_chain_all'] && empty($_GET['nong'])) { - $pre = min($count, $start); - for ($i = ($nofirst) ? 0 : 1; $i < $pre; $i++) { - $n = $i + 1; - list($name, $mail, $date_id, $msg) = $aThread->explodeDatLine($datlines[$i]); - if (($id = $aThread->ids[$n]) !== null) { - $date_id = str_replace($aThread->idp[$n] . $id, "ID:$id", $date_id); - } - $this->_ngAbornCheck($n, strip_tags($name), $mail, $date_id, $id, $msg); - } - } - - // �t�B���^�����O - if ($do_filtering) { - $datlines = $resFilter->apply($this); - $filter_hits = $resFilter->hits; - $last_hit_resnum = $resFilter->last_hit_resnum; - } - - // �w��͈͂�\�� - $i = 0; - $n = 0; - $rn = 0; - - if ($do_filtering) { - if (!empty($resFilter->range)) { - $start = $resFilter->range['start']; - $to = $resFilter->range['to']; - } - $pattern = $resFilter->getPattern(); - } else { - $pattern = null; - } - - foreach ($datlines as $i => $ares) { - if ($ares === null) { - continue; - } - $n++; - if ($i === 0 && !$nofirst) { - continue; - } - if ($n < $start) { - continue; - } - if ($n > $to) { - break; - } - $rn = $i + 1; - $res = $this->transRes($ares, $rn, $pattern); - if (is_array($res)) { - $buf['body'] .= $res['body']; - $buf['q'] .= $res['q'] ? $res['q'] : ''; - } else { - $buf['body'] .= $res; - } - if (!$capture && $n % 10 == 0) { - echo $buf['body']; - if ($do_filtering && !$is_ktai) { - echo "\n"; - } - flush(); - $buf['body'] = ''; - } - } - - if ($this->thread->readnum < $rn) { - $this->thread->readnum = $rn; - } - - if ($do_filtering && !$is_ktai) { - $buf['body'] .= "\n"; - } - -// +live �I�[�g�����[�h�����X�����e�̕\���� -echo <<
    \n -LIVE; - - if (!$is_fragment) { - $buf['body'] .= "\n"; - } - - if ($capture) { - return $buf['body'] . $buf['q']; - } else { - echo $buf['body']; - echo $buf['q']; - flush(); - return true; - } - } - - /** - * �w��̏����݂ւ̃��X��HTML�ɕϊ����ĕ\������ - * - * @param bool $capture true�Ȃ�ϊ����ʂ��o�͂����ɕԂ� - * @param bool $is_fragment true�Ȃ�
    �ň͂܂Ȃ� - * @param bool $show_rootres true�Ȃ�w��̏����݂����ʂɊ܂߂� - * @return bool|string - */ - public function datToHtml_resFrom($capture = false, $is_fragment = false, $show_rootres = false) - { - global $_conf; - - $aThread = $this->thread; - - // �\�����X���w�肳��Ă��Ȃ���� - $target = $aThread->resrange['start']; - if (!$aThread->resrange || $target != $aThread->resrange['to']) { - $error = '

    p2 error: {$this->resrange} is false at datToHtml()

    '; - if ($capture) { - return $error; - } else { - echo $error; - return false; - } - } - - $datlines = $aThread->datlines; - $count = count($datlines); - - $buf['body'] = $is_fragment ? '' : "
    \n"; - $buf['q'] = ''; - - // �A���̂��߁A�͈͊O��NG���ځ[��`�F�b�N - if ($_conf['ngaborn_chain_all'] && empty($_GET['nong'])) { - $pre = min($count, $start); - for ($i = ($nofirst) ? 0 : 1; $i < $pre; $i++) { - $n = $i + 1; - list($name, $mail, $date_id, $msg) = $aThread->explodeDatLine($datlines[$i]); - if (($id = $aThread->ids[$n]) !== null) { - $date_id = str_replace($aThread->idp[$n] . $id, "ID:$id", $date_id); - } - $this->_ngAbornCheck($n, strip_tags($name), $mail, $date_id, $id, $msg); - } - } - - // ���X�W�J - $datlines = array_fill(0, count($aThread->datlines), null); - if ($show_rootres) { - $datlines[$target - 1] = $aThread->datlines[$target - 1]; - } - list($name, $mail, $date_id, $msg) = - $aThread->explodeDatLine($aThread->datlines[$target - 1]); - foreach ($this->checkQuoteResNums($target, $name, $msg, false, true, false) as $rn) { - $ri = $rn - 1; - if ($datlines[$ri] === null) { - $datlines[$ri] = $aThread->datlines[$ri]; - } - } - - // �\�� - $i = 0; - $n = 0; - $rn = 0; - foreach ($datlines as $i => $ares) { - if ($ares === null) { - continue; - } - $n++; - $rn = $i + 1; - $res = $this->transRes($ares, $rn); - if (is_array($res)) { - $buf['body'] .= $res['body']; - $buf['q'] .= $res['q'] ? $res['q'] : ''; - } else { - $buf['body'] .= $res; - } - if (!$capture && $n % 10 == 0) { - echo $buf['body']; - flush(); - $buf['body'] = ''; - } - } - - if (!$is_fragment) { - $buf['body'] .= "
    \n"; - } - - if ($capture) { - return $buf['body'] . $buf['q']; - } else { - echo $buf['body']; - echo $buf['q']; - flush(); - return true; - } - } - - // }}} - // {{{ transRes() - - /** - * Dat���X��HTML���X�ɕϊ����� - * - * @param string $ares dat��1���C�� - * @param int $i ���X�ԍ� - * @return string - */ - abstract public function transRes($ares, $i); - - // }}} - // {{{ transName() - - /** - * ���O��HTML�p�ɕϊ����� - * - * @param string $name ���O - * @return string - */ - abstract public function transName($name); - - // }}} - // {{{ transMsg() - - /** - * dat�̃��X���b�Z�[�W��HTML�\���p���b�Z�[�W�ɕϊ����� - * - * @param string $msg ���b�Z�[�W - * @param int $mynum ���X�ԍ� - * @return string - */ - abstract public function transMsg($msg, $mynum); - - // }}} - // {{{ replaceBeId() - - /** - * BE�v���t�@�C�������N�ϊ� - */ - public function replaceBeId($date_id, $i) - { - global $_conf; - - $beid_replace = "thread->host}/test/read.cgi/{$this->thread->bbs}/{$this->thread->key}/{$i}\"{$_conf['ext_win_target_at']}>Lv.\$2"; - - // - $be_match = '||i'; - if (preg_match($be_match, $date_id)) { - $date_id = preg_replace($be_match, $beid_replace, $date_id); - - } else { - - $beid_replace = "thread->host}/test/read.cgi/{$this->thread->bbs}/{$this->thread->key}/{$i}\"{$_conf['ext_win_target_at']}>?\$2"; - $date_id = preg_replace('|BE: ?(\d+)-(#*)|i', $beid_replace, $date_id); - } - - return $date_id; - } - - // }}} - // {{{ _ngAbornCheck() - - /** - * NG���ځ[��`�F�b�N - * - * @param int $i ���X�ԍ� - * @param string $name ���O�� - * @param string $mail ���[���� - * @param string $date_id ���t�EID�� - * @param string $id ID - * @param string $msg ���X�{�� - * @param bool $nong NG�`�F�b�N�����邩�ǂ��� - * @param array &$info NG�̗��R���i�[�����ϐ��̎Q�� - * @return int NG�^�C�v�BShowThread::NG_XXX �̃r�b�g�a�� ShowThread::ABORN - */ - protected function _ngAbornCheck($i, $name, $mail, $date_id, $id, $msg, $nong = false, &$info = null) - { - global $_conf, $ngaborns_hits; - - $info = array(); - $type = self::NG_NONE; - - // {{{ �p�oID�`�F�b�N - - if ($this->_ngaborn_frequent && $id && $this->thread->idcount[$id] >= $_conf['ngaborn_frequent_num']) { - if (!$_conf['ngaborn_frequent_one'] && $id == $this->thread->ids[1]) { - // >>1 �͂��̂܂ܕ\�� - } elseif ($this->_ngaborn_frequent == 1) { - $ngaborns_hits['aborn_freq']++; - return $this->_markNgAborn($i, self::ABORN, false); - } elseif (!$nong) { - $ngaborns_hits['ng_freq']++; - $type |= $this->_markNgAborn($i, self::NG_FREQ, false); - $info[] = sprintf('�p�oID:%s(%d)', $id, $this->thread->idcount[$id]); - } - } - - // }}} - // {{{ �A���`�F�b�N - - if ($_conf['ngaborn_chain'] && $this->_has_ngaborns && - preg_match_all('/(?:>|��)([1-9][0-9\\-,]*)/', $msg, $matches) - ) { - $references = array_unique(preg_split('/[-,]+/', - trim(implode(',', $matches[1]), '-,'), - -1, - PREG_SPLIT_NO_EMPTY)); - $intersections = array_intersect($references, $this->_aborn_nums); - $info_suffix = ''; - - if ($intersections) { - if ($_conf['ngaborn_chain'] == 1) { - $ngaborns_hits['aborn_chain']++; - return $this->_markNgAborn($i, self::ABORN, true); - } - if ($nong) { - $intersections = null; - } else { - $info_suffix = '(' . (($_conf['ktai']) ? '����' : '���ځ[��') . ')'; - } - } elseif (!$nong) { - $intersections = array_intersect($references, $this->_ng_nums); - } - - if ($intersections) { - $ngaborns_hits['ng_chain']++; - $type |= $this->_markNgAborn($i, self::NG_CHAIN, true); - $info[] = sprintf('�A��NG:>>%d%s', current($intersections), $info_suffix); - } - } - - // }}} - // {{{ ���ځ[��`�F�b�N - - // ���ځ[�񃌃X - if ($this->abornResCheck($i) !== false) { - $ngaborns_hits['aborn_res']++; - return $this->_markNgAborn($i, self::ABORN, false); - } - - // ���ځ[��l�[�� - if ($this->ngAbornCheck('aborn_name', $name) !== false) { - $ngaborns_hits['aborn_name']++; - return $this->_markNgAborn($i, self::ABORN, false); - } - - // ���ځ[�񃁁[�� - if ($this->ngAbornCheck('aborn_mail', $mail) !== false) { - $ngaborns_hits['aborn_mail']++; - return $this->_markNgAborn($i, self::ABORN, false); - } - - // ���ځ[��ID - if ($this->ngAbornCheck('aborn_id', $date_id) !== false) { - $ngaborns_hits['aborn_id']++; - return $this->_markNgAborn($i, self::ABORN, false); - } - - // ���ځ[�񃁃b�Z�[�W - if ($this->ngAbornCheck('aborn_msg', $msg) !== false) { - $ngaborns_hits['aborn_msg']++; - return $this->_markNgAborn($i, self::ABORN, true); - } - - // }}} - - if ($nong) { - return $type; - } - - // {{{ NG�`�F�b�N - - // NG�l�[���`�F�b�N - if ($this->ngAbornCheck('ng_name', $name) !== false) { - $ngaborns_hits['ng_name']++; - $type |= $this->_markNgAborn($i, self::NG_NAME, false); - } - - // NG���[���`�F�b�N - if ($this->ngAbornCheck('ng_mail', $mail) !== false) { - $ngaborns_hits['ng_mail']++; - $type |= $this->_markNgAborn($i, self::NG_MAIL, false); - } - - // NGID�`�F�b�N - if ($this->ngAbornCheck('ng_id', $date_id) !== false) { - $ngaborns_hits['ng_id']++; - $type |= $this->_markNgAborn($i, self::NG_ID, false); - } - - // NG���b�Z�[�W�`�F�b�N - $a_ng_msg = $this->ngAbornCheck('ng_msg', $msg); - if ($a_ng_msg !== false) { - $ngaborns_hits['ng_msg']++; - $type |= $this->_markNgAborn($i, self::NG_MSG, true); - $info[] = sprintf('NG%s:%s', - ($_conf['ktai']) ? 'ܰ��' : '���[�h', - p2h($a_ng_msg)); - } - - // }}} - - return $type; - } - - // }}} - // {{{ _markNgAborn() - - /** - * NG���ځ[��Ƀq�b�g�������X�ԍ����L�^���� - * - * @param int $num ���X�ԍ� - * @param int $type NG���ځ[��̎�� - * @param bool $isBody �{���Ƀq�b�g�������ǂ��� - * @return int $type�Ɠ����l - */ - protected function _markNgAborn($num, $type, $isBody) - { - if ($type) { - if ($isBody) { - self::$_ngaborns_body_hits++; - } else { - self::$_ngaborns_head_hits++; - } - - // array_intersect()�������悭�s�����߁A���X�ԍ��𕶎���^�ɃL���X�g���� - $str = (string)$num; - if ($type == self::ABORN) { - $this->_aborn_nums[$num] = $str; - } else { - $this->_ng_nums[$num] = $str; - } - - $this->_has_ngaborns = true; - } - - return $type; - } - - // }}} - // {{{ ngAbornCheck() - - /** - * NG���ځ[��`�F�b�N - */ - public function ngAbornCheck($code, $resfield, $ic = false) - { - global $ngaborns; - - //$GLOBALS['debug'] && $GLOBALS['profiler']->enterSection('ngAbornCheck()'); - - if (isset($ngaborns[$code]['data']) && is_array($ngaborns[$code]['data'])) { - // +Wiki:BE���ځ[�� - if ($code == 'aborn_be' || $code == 'ng_be') { - // �v���t�B�[��ID�𔲂��o�� - if (preg_match('/BE:(\\d+)/', $resfield, $matches)) { - $beId = P2UtilWiki::calcBeId((int)$matches[1]); - if ($beId === 0) { - return false; - } - $resfield = (string)$beId; - } else { - return false; - } - } - - $bbs = $this->thread->bbs; - $title = $this->thread->ttitle_hc; - - foreach ($ngaborns[$code]['data'] as $k => $v) { - // �ƒ`�F�b�N - if (isset($v['bbs']) && in_array($bbs, $v['bbs']) == false) { - continue; - } - - // �^�C�g���`�F�b�N - if (isset($v['title']) && stripos($title, $v['title']) === false) { - continue; - } - - // ���[�h�`�F�b�N - // ���K�\�� - if ($v['regex']) { - $re_method = $v['regex']; - /*if ($re_method($v['word'], $resfield, $matches)) { - $this->ngAbornUpdate($code, $k); - //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('ngAbornCheck()'); - return p2h($matches[0]); - }*/ - if ($re_method($v['word'], $resfield)) { - $this->ngAbornUpdate($code, $k); - //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('ngAbornCheck()'); - return $v['cond']; - } - // +Wiki:BE���ځ[��(���S��v) - } elseif ($code == 'aborn_be' || $code == 'ng_be') { - if ($resfield == $v['word']) { - $this->ngAbornUpdate($code, $k); - //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('ngAbornCheck()'); - return $v['cond']; - } - // �啶���������𖳎� - } elseif ($ic || $v['ignorecase']) { - if (stripos($resfield, $v['word']) !== false) { - $this->ngAbornUpdate($code, $k); - //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('ngAbornCheck()'); - return $v['cond']; - } - // �P���ɕ����񂪊܂܂�邩�ǂ������`�F�b�N - } else { - if (strpos($resfield, $v['word']) !== false) { - $this->ngAbornUpdate($code, $k); - //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('ngAbornCheck()'); - return $v['cond']; - } - } - } - } - - //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('ngAbornCheck()'); - return false; - } - - // }}} - // {{{ abornResCheck() - - /** - * ���背�X�̓������ځ[��`�F�b�N - */ - public function abornResCheck($resnum) - { - global $ngaborns; - - $target = $this->thread->host . '/' . $this->thread->bbs . '/' . $this->thread->key . '/' . $resnum; - - if (isset($ngaborns['aborn_res']['data']) && is_array($ngaborns['aborn_res']['data'])) { - foreach ($ngaborns['aborn_res']['data'] as $k => $v) { - if ($ngaborns['aborn_res']['data'][$k]['word'] == $target) { - $this->ngAbornUpdate('aborn_res', $k); - return true; - } - } - } - return false; - } - - // }}} - // {{{ ngAbornUpdate() - - /** - * NG/���ځ`������Ɖ񐔂��X�V - */ - public function ngAbornUpdate($code, $k) - { - global $ngaborns; - - if (isset($ngaborns[$code]['data'][$k])) { - $ngaborns[$code]['data'][$k]['lasttime'] = date('Y/m/d G:i'); // HIT���Ԃ��X�V - if (empty($ngaborns[$code]['data'][$k]['hits'])) { - $ngaborns[$code]['data'][$k]['hits'] = 1; // ��HIT - } else { - $ngaborns[$code]['data'][$k]['hits']++; // HIT�񐔂��X�V - } - } - } - - // }}} - // {{{ addURLHandler() - - /** - * ���[�U��`URL�n���h���i���b�Z�[�W����URL������������֐��j��lj����� - * - * �n���h���͍ŏ��ɒlj����ꂽ���̂��珇�ԂɎ��s����� - * URL�̓n���h���̕Ԃ�l�i������j�Œu������� - * false���A�����ꍇ�͎��̃n���h���ɏ������ς˂��� - * - * ���[�U��`URL�n���h���̈����� - * 1. string $url URL - * 2. array $purl URL��parse_url()�������� - * 3. string $str �p�^�[���Ƀ}�b�`����������AURL�Ɠ������Ƃ����� - * 4. object $aShowThread �Ăяo�����̃I�u�W�F�N�g - * �ł��� - * ���false��Ԃ��A�����ŏ������邾���̊֐���o�^���Ă��悢 - * - * @param callback $function �R�[���o�b�N���\�b�h - * @return void - * @access public - * @todo ���[�U��`URL�n���h���̃I�[�g���[�h�@�\������ - */ - public function addURLHandler($function) - { - $this->_user_url_handlers[] = $function; - } - - // }}} - // {{{ stripLineBreaks() - - /** - * �����̉��s�ƘA��������s����菜�� - * - * @param string $msg - * @param string $replacement - * @return string - */ - public function stripLineBreaks($msg, $replacement = '

    ') - { - if (P2_MBREGEX_AVAILABLE) { - $msg = mb_ereg_replace('(?:[\\s�@]*
    )+[\\s�@]*$', '', $msg); - $msg = mb_ereg_replace('(?:[\\s�@]*
    ){3,}', $replacement, $msg); - } else { - mb_convert_variables('UTF-8', 'CP932', $msg, $replacement); - $msg = preg_replace('/(?:[\\s\\x{3000}]*
    )+[\\s\\x{3000}]*$/u', '', $msg); - $msg = preg_replace('/(?:[\\s\\x{3000}]*
    ){3,}/u', $replacement, $msg); - $msg = mb_convert_encoding($msg, 'CP932', 'UTF-8'); - } - - return $msg; - } - - // }}} - // {{{ transLink() - - /** - * �����N�Ώە������ϊ����� - * - * @param string $str - * @return string - */ - public function transLink($str) - { - return preg_replace_callback($this->str_to_link_regex, array($this, 'transLinkDo'), $str); - } - - // }}} - // {{{ transLinkDo() - - /** - * �����N�Ώە�����̎�ނ𔻒肵�đΉ������֐�/���\�b�h�ɓn�� - * - * @param array $s - * @return string - */ - public function transLinkDo(array $s) - { - global $_conf; - - $orig = $s[0]; - $following = ''; - - // PHP 5.2.7 ������ preg_replace_callback() �ł͖��O�t���ߊl���W�����g���Ȃ��̂� - /* - if (!array_key_exists('link', $s)) { - $s['link'] = $s[1]; - $s['quote'] = $s[5]; - $s['url'] = $s[8]; - $s['id'] = $s[11]; - } - */ - - // �}�b�`�����T�u�p�^�[���ɉ����ĕ��� - // �����N - if ($s['link']) { - if (preg_match('{ href=(["\'])?(.+?)(?(1)\\1)(?=[ >])}i', $s[2], $m)) { - $url = $m[2]; - $str = $s[3]; - } else { - return $s[3]; - } - - // ���p - } elseif ($s['quote']) { - return preg_replace_callback( - self::getAnchorRegex('/(%prefix%)?(%a_range%)/'), - array($this, '_quoteResCallback'), $s['quote']); - - // http or ftp ��URL - } elseif ($s['url']) { - if ($_conf['ktai'] && $s[9] == 'ftp') { - return $orig; - } - $url = preg_replace('/^t?(tps?)$/', 'ht$1', $s[9]) . '://' . $s[10]; - $str = $s['url']; - $following = $s[11]; - if (strlen($following) > 0) { - // �E�B�L�y�f�B�A���{��ł�URL�ŁASJIS��2�o�C�g�����̏�ʃo�C�g - // (0x81-0x9F,0xE0-0xEF)�������Ƃ� - if (P2Util::isUrlWikipediaJa($url)) { - $leading = ord($following); - if ((($leading ^ 0x90) < 32 && $leading != 0x80) || ($leading ^ 0xE0) < 16) { - $url .= rawurlencode(mb_convert_encoding($following, 'UTF-8', 'CP932')); - $str .= $following; - $following = ''; - } - } elseif (strpos($following, 'tp://') !== false) { - // �S�p�X�y�[�X+URL���̏ꍇ������̂ōă`�F�b�N - $following = $this->transLink($following); - } - } - - // ID - } elseif ($s['id'] && $_conf['flex_idpopup']) { // && $_conf['flex_idlink_k'] - return $this->idFilter($s['id'], $s[12]); - - // ���̑��i�\���j - } else { - return strip_tags($orig); - } - - // ���_�C���N�^���O�� - switch ($this->_redirector) { - case self::REDIRECTOR_IMENU: - $url = preg_replace('{^([a-z]+://)ime\\.nu/}', '$1', $url); - break; - case self::REDIRECTOR_PINKTOWER: - $url = preg_replace('{^([a-z]+://)pinktower\\.com/}', '$1', $url); - break; - case self::REDIRECTOR_MACHIBBS: - $url = preg_replace('{^[a-z]+://machi(?:bbs\\.com|\\.to)/bbs/link\\.cgi\\?URL=}', '', $url); - break; - } - - // �G�X�P�[�v����Ă��Ȃ����ꕶ�����G�X�P�[�v - $url = p2h($url, false); - $str = p2h($str, false); - // ���ԎQ�ƁE���l�Q�Ƃ����S�Ƀf�R�[�h���悤�Ƃ���ƕ��ׂ��傫�����A - // "&"�ȊO�̓��ꕶ���͂قƂ�ǂ̏ꍇURL�G���R�[�h����Ă���͂��Ȃ̂� - // ���r���[�ɋÂ��������͂����A"&"��"&"�̂ݍĕϊ�����B - $raw_url = str_replace('&', '&', $url); - - // URL���p�[�X�E�z�X�g������ - $purl = @parse_url($raw_url); - if (!$purl || !array_key_exists('host', $purl) || - strpos($purl['host'], '.') === false || - $purl['host'] == '127.0.0.1' || - //HostCheck::isAddressLocal($purl['host']) || - //HostCheck::isAddressPrivate($purl['host']) || - P2Util::isHostExample($purl['host'])) - { - return $orig; - } - // URL�̃}�b�`���O��"&"���l�����Ȃ��čςނ悤�ɁA����URL��o�^���Ă��� - $purl[0] = $raw_url; - - // URL������ - foreach ($this->_user_url_handlers as $handler) { - if (false !== ($link = call_user_func($handler, $url, $purl, $str, $this))) { - return $link . $following; - } - } - foreach ($this->_url_handlers as $handler) { - if (false !== ($link = $this->$handler($url, $purl, $str))) { - return $link . $following; - } - } - - return $orig; - } - - // }}} - // {{{ idFilter() - - /** - * ID�t�B���^�����O�ϊ� - * - * @param string $idstr ID:xxxxxxxxxx - * @param string $id xxxxxxxxxx - * @return string - */ - abstract public function idFilter($idstr, $id); - - // }}} - // {{{ _idFilterCallback() - - /** - * ID�t�B���^�����O�ϊ� - * - * @param array $s ���K�\���Ƀ}�b�`�����v�f�̔z�� - * @return string - */ - protected function _idFilterCallback(array $s) - { - return $this->idFilter($s[0], $s[1]); - } - - // }}} - // {{{ _quoteNameCallback() - - /** - * @param array $s - * @return string HTML - */ - protected function _quoteNameCallback($s) - { - return preg_replace_callback( - self::getAnchorRegex('/(%prefix%)?(%a_num%)/'), - array($this, '_quoteResCallback'), $s[0] - ); - } - - // }}} - // {{{ quoteRes() - - /** - * ���p�ϊ��i�P�Ɓj - * - * @param string $full >>1 - * @param string $qsign >> - * @param string $appointed_num 1 - * @return string - */ - abstract public function quoteRes($full, $qsign, $appointed_num); - - // }}} - // {{{ _quoteResCallback() - - /** - * ���p�ϊ��i�P�Ɓj - * - * @param array $s ���K�\���Ƀ}�b�`�����v�f�̔z�� - * @return string - */ - protected function _quoteResCallback(array $s) - { - return $this->quoteRes($s[0], $s[1], $s[2]); - } - - // }}} - // {{{ quoteResRange() - - /** - * ���p�ϊ��i�͈́j - * - * @param string $full >>1-100 - * @param string $qsign >> - * @param string $appointed_num 1-100 - * @return string - */ - abstract public function quoteResRange($full, $qsign, $appointed_num); - - // }}} - // {{{ _quoteResRangeCallback() - - /** - * ���p�ϊ��i�͈́j - * - * @param array $s ���K�\���Ƀ}�b�`�����v�f�̔z�� - * @return string - */ - protected function _quoteResRangeCallback(array $s) - { - return $this->quoteResRange($s[0], $s[1], $s[2]); - } - - // }}} - // {{{ checkQuoteResNums() - - /** - * HTML���b�Z�[�W���̈��p���X�̔ԍ����ċA�`�F�b�N���� - */ - public function checkQuoteResNums($res_num, $name, $msg, - $with_quotes = true, - $with_backlinks = null, - $cascade = true) - { - global $_conf; - - $this->_quote_check_depth = 0; - - if ($with_backlinks === null) { - $with_backlinks = ($_conf['backlink_list'] > 0 || $_conf['backlink_block'] > 0) ? true : false; - } - - if ($with_backlinks) { - return $this->checkQuoteResNumsFromSummary( - $res_num == 0 ? 1 : $res_num, $with_quotes, $with_backlinks); - } - - return $this->_checkQuoteResNums($res_num, $name, $msg); - } - - // }}} - // {{{ _checkQuoteResNums() - - /** - * HTML���b�Z�[�W���̈��p���X�̔ԍ����ċA�`�F�b�N���� - */ - protected function _checkQuoteResNums($res_num, $name, $msg) - { - // �ċA���~�b�^ - if ($this->_quote_check_depth > 30) { - return array(); - } else { - $this->_quote_check_depth++; - } - - if (array_key_exists($res_num, $this->_quote_res_nums)) { - return $this->_quote_res_nums[$res_num]; - } - - $aThread = $this->thread; - - $quote_res_nums = array(); - - $name = preg_replace('/(��.*)/', '', $name, 1); - - // ���O - if ($matches = $this->getQuoteResNumsName($name)) { - foreach ($matches as $a_quote_res_num) { - if ($a_quote_res_num) { - $quote_res_nums[] = $a_quote_res_num; - $a_quote_res_idx = $a_quote_res_num - 1; - - // �������g�̔ԍ��Ɠ���łȂ���΁A - if ($a_quote_res_num != $res_num) { - // �`�F�b�N���Ă��Ȃ��ԍ����ċA�`�F�b�N - if (!isset($this->_quote_res_nums_checked[$a_quote_res_num])) { - $this->_quote_res_nums_checked[$a_quote_res_num] = true; - if (isset($aThread->datlines[$a_quote_res_idx])) { - $datalinear = $aThread->explodeDatLine($aThread->datlines[$a_quote_res_idx]); - $quote_name = $datalinear[0]; - $quote_msg = $aThread->datlines[$a_quote_res_idx]; - $quote_res_nums = array_merge($quote_res_nums, - $this->_checkQuoteResNums($a_quote_res_num, - $quote_name, - $quote_msg)); - } - } - } - } - // $name=preg_replace("/([0-9]+)/", "", $name, 1); - } - } - - // >>1�̃����N����������O�� - // >>1 - $msg = preg_replace('{<[Aa] .+?>(>>[1-9][\\d\\-]*)}', '$1', $msg); - - //echo $msg; - if (preg_match_all(self::getAnchorRegex('/%full%/'), $msg, $out, PREG_PATTERN_ORDER)) { - foreach ($out[2] as $numberq) { - if ($matches=preg_split(self::getAnchorRegex('/%delimiter%/'), $numberq)) { - foreach ($matches as $a_quote_res_num) { - if (preg_match(self::getAnchorRegex('/%range_delimiter%/'),$a_quote_res_num)) { continue;} - $a_quote_res_num = (int) (mb_convert_kana($a_quote_res_num, 'n')); - $a_quote_res_idx = $a_quote_res_num - 1; - - //echo $a_quote_res_num; - - if (!$a_quote_res_num) {break;} - $quote_res_nums[] = $a_quote_res_num; - - // �������g�̔ԍ��Ɠ���łȂ���΁A - if ($a_quote_res_num != $res_num) { - // �`�F�b�N���Ă��Ȃ��ԍ����ċA�`�F�b�N - if (!isset($this->_quote_res_nums_checked[$a_quote_res_num])) { - $this->_quote_res_nums_checked[$a_quote_res_num] = true; - if (isset($aThread->datlines[$a_quote_res_idx])) { - $datalinear = $aThread->explodeDatLine($aThread->datlines[$a_quote_res_idx]); - $quote_name = $datalinear[0]; - $quote_msg = $aThread->datlines[$a_quote_res_idx]; - $quote_res_nums = array_merge($quote_res_nums, - $this->_checkQuoteResNums($a_quote_res_num, - $quote_name, - $quote_msg)); - } - } - } - - } - - } - - } - - } - - if (count($quote_res_nums)) { - sort($quote_res_nums, SORT_NUMERIC); - $this->_quote_res_nums[$res_num] = array_unique($quote_res_nums); - $quote_res_nums = $this->_quote_res_nums[$res_num]; - } - - return $quote_res_nums; - } - - // }}} - // {{{ checkQuoteResNumsFromSummary() - - /** - * ���p���X�W�v���ʂ���|�b�v�A�b�v�p�ɗp�ӂ��ׂ��ԍ����ċA�`�F�b�N���� - */ - public function checkQuoteResNumsFromSummary($res_num, $with_quotes, $with_backlinks) - { - // �ċA���~�b�^ - if ($this->_quote_check_depth > 3000) { - return array(); - } else { - $this->_quote_check_depth++; - } - - $ret = array(); - - // �Q�ƃ��X - if ($with_quotes) { - $ret = array_merge($ret, - $this->_checkQuoteResNumsFromSummary( - $res_num, $this->getQuoteTo(), $with_quotes, $with_backlinks)); - } - // ��Q�ƃ��X - if ($with_backlinks) { - $ret = array_merge($ret, - $this->_checkQuoteResNumsFromSummary( - $res_num, $this->getQuoteFrom(), $with_quotes, $with_backlinks)); - } - return $ret; - } - - // }}} - // {{{ _checkQuoteResNumsFromSummary() - - protected function _checkQuoteResNumsFromSummary($res_num, $quotes, $with_quotes, $with_backlinks) - { - $ret = array(); - if (array_key_exists($res_num, $quotes)) { - foreach ($quotes[$res_num] as $quote_num) { - $ret[] = $quote_num; - if ($quote_num != $res_num) { - if (!isset($this->_quote_res_nums_checked[$quote_num])) { - $this->_quote_res_nums_checked[$quote_num] = true; - $ret = array_merge($ret, - $this->checkQuoteResNumsFromSummary($quote_num, $with_quotes, $with_backlinks)); - } - } - } - } - return $ret; - } - - // }}} - // {{{ getQuoteResNumsName() - - public function getQuoteResNumsName($name) - { - if (strlen(trim($name)) == 0 || $name == $this->_nanashiName) { - return false; - } - - // �g���b�v������ - $name = preg_replace('/��.*/', '', $name, 1); - $name = strip_tags($name); - - /* - //if (preg_match('/[0-9]+/', $name, $m)) { - return (int)$m[0]; - } - */ - - if (preg_match_all(self::getAnchorRegex('/(?:^|%prefix%)(%nums%)/'), $name, $matches)) { - foreach ($matches[1] as $a_quote_res_num) { - $quote_res_nums[] = (int)mb_convert_kana($a_quote_res_num, 'n'); - } - return array_unique($quote_res_nums); - } - - return false; - } - - // }}} - // {{{ _wikipediaFilter() - - /** - * [[���]]������������Wikipedia�֎��������N - * - * @param string $msg ���b�Z�[�W - * @return string - * - * original code: - * http://akid.s17.xrea.com/p2puki/index.phtml?%A5%E6%A1%BC%A5%B6%A1%BC%A5%AB%A5%B9%A5%BF%A5%DE%A5%A4%A5%BA%28rep2%20Ver%201.7.0%A1%C1%29#led2c85d - */ - protected function _wikipediaFilter($msg) - { - if (strpos($msg, '[[') === false) { - return $msg; - } - - $msg = preg_replace_callback('/\\[\\[([^\\[\\]\\n<>]+)\\]\\]+/u', - array($this, '_linkToWikipeidaCallback'), - mb_convert_encoding($msg, 'UTF-8', 'CP932')); - - return mb_convert_encoding($msg, 'CP932', 'UTF-8'); - } - - // }}} - // {{{ _linkToWikipeidaCallback() - - /** - * Wikipedia�̌��������N�ɕϊ����ĕԂ�. - * - * @param array $matches - * @return string - */ - protected function _linkToWikipeidaCallback($matches) - { - return '[[' . $this->_linkToWikipeida($matches[1]) . ']]'; - } - - // }}} - // {{{ _linkToWikipeida() - - /** - * Wikipedia�̌��������N�ɕϊ����ĕԂ�. - * - * @param string $word ��� - * @return string - */ - abstract protected function _linkToWikipeida($word); - - // }}} - // {{{ _makeQuotes() - - /** - * ���X�f�[�^���W�v����$this->_quote_to��$this->_quote_from�ɕۑ�. - */ - protected function _makeQuotes() - { - global $_conf; - - $this->_quote_to = array(); - $this->_quote_from = array(); - - if (!$this->thread->datlines) { - return; - } - - foreach ($this->thread->datlines as $num => $line) { - list($name, $mail, $date_id, $msg) = $this->thread->explodeDatLine($line); - - // NG���ځ[��`�F�b�N - if (($id = $this->thread->ids[$num + 1]) !== null) { - $date_id = str_replace($this->thread->idp[$i] . $id, 'ID:' . $id, $date_id); - } - $ng_type = $this->_ngAbornCheck($num + 1, strip_tags($name), $mail, $date_id, $id, $msg); - if ($ng_type == self::ABORN) { - continue; - } - - // ���O - if ($nmatches = $this->getQuoteResNumsName($name)) { - foreach ($nmatches as $a_quote_res_num) { - if ($a_quote_res_num) { - if (!array_key_exists($a_quote_res_num, $this->_quote_from) || $this->_quote_from[$a_quote_res_num] === null) { - $this->_quote_from[$a_quote_res_num] = array(); - } - if (!in_array($num + 1, $this->_quote_from[$a_quote_res_num])) { - $this->_quote_from[$a_quote_res_num][] = $num + 1; - } - - if (!array_key_exists($num + 1, $this->_quote_to) || $this->_quote_to[$num + 1] === null) { - $this->_quote_to[$num + 1] = array(); - } - if (!in_array($a_quote_res_num, $this->_quote_to[$num + 1])) { - $this->_quote_to[$num + 1][] = $a_quote_res_num; - } - } - } - } - - - // >>1�̃����N����������O�� - // >>1 - $msg = preg_replace('{<[Aa] .+?>(>>[1-9][\\d\\-]*)}', '$1', $msg); - if (!preg_match_all(self::getAnchorRegex('/%full%/'), $msg, $out, PREG_PATTERN_ORDER)) { - continue; - } - foreach ($out[2] as $numberq) { - if (!preg_match_all(self::getAnchorRegex('/(?:%prefix%)?(%a_range%)/'), $numberq, $anchors, PREG_PATTERN_ORDER)) continue; - foreach ($anchors[1] as $anchor) { - if (preg_match(self::getAnchorRegex('/(%a_num%)%range_delimiter%(?:%prefix%)?(%a_num%)/'), $anchor, $matches)) { - $from = intval(mb_convert_kana($matches[1], 'n')); - $to = intval(mb_convert_kana($matches[2], 'n')); - if ($from < 1 || $to < 1 || $from > $to - || ($to - $from + 1) > sizeof($this->thread->datlines)) { - continue; - } - if ($_conf['backlink_list_range_anchor_limit'] != 0) { - if ($to - $from >= $_conf['backlink_list_range_anchor_limit']) { - continue; - } - } - for ($i = $from; $i <= $to; $i++) { - if ($i > sizeof($this->thread->datlines)) { - break; - } - if ($_conf['backlink_list_future_anchor'] == 0) { - // ���X�ԍ��ȍ~�̃A���J�[�͖������� - if ($i >= $num + 1) { - continue; - } - } - if (!array_key_exists($i, $this->_quote_from) || $this->_quote_from[$i] === null) { - $this->_quote_from[$i] = array(); - } - if (!in_array($num + 1, $this->_quote_from[$i])) { - $this->_quote_from[$i][] = $num + 1; - } - } - } elseif (preg_match(self::getAnchorRegex('/(%a_num%)/'), $anchor, $matches)) { - $quote_num = intval(mb_convert_kana($matches[1], 'n')); - if (!array_key_exists($num + 1, $this->_quote_to) || $this->_quote_to[$num + 1] === null) { - $this->_quote_to[$num + 1] = array(); - } - if (!in_array($quote_num, $this->_quote_to[$num + 1])) { - $this->_quote_to[$num + 1][] = $quote_num; - } - - if ($_conf['backlink_list_future_anchor'] == 0) { - // ���X�ԍ��ȍ~�̃A���J�[�͖������� - if ($quote_num >= $num + 1) { - continue; - } - } - if (!array_key_exists($quote_num, $this->_quote_from) || $this->_quote_from[$quote_num] === null) { - $this->_quote_from[$quote_num] = array(); - } - if (!in_array($num + 1, $this->_quote_from[$quote_num])) { - $this->_quote_from[$quote_num][] = $num + 1; - } - } - } - } - } - } - - // }}} - // {{{ getQuoteFrom() - - /** - * �탌�X���X�g��Ԃ�. - * - * @return array - */ - public function getQuoteFrom() - { - if ($this->_quote_from === null) { - $this->_makeQuotes(); // �탌�X�f�[�^�W�v - } - return $this->_quote_from; - } - - // }}} - // {{{ getQuoteTo() - - /** - * ���X���X�g��Ԃ�. - * - * @return array - */ - public function getQuoteTo() - { - if ($this->_quote_to === null) { - $this->_makeQuotes(); // ���X�f�[�^�W�v - } - return $this->_quote_to; - } - - // }}} - // {{{ _quotebackListHtml() - - /** - * �탌�X���X�g��HTML�Ő��`���ĕԂ�. - * - * @param int $resnum ���X�ԍ� - * @param int $type 1:�c�`�� 2:���`�� 3:�W�J�p�u���b�N�p������ - * @param bool $popup ���`���ł̃|�b�v�A�b�v����(true:�|�b�v�A�b�v����Afalse:�}������) - * @return string - */ - protected function _quotebackListHtml($resnum, $type, $popup=true) - { - $quote_from = $this->getQuoteFrom(); - if (!array_key_exists($resnum, $quote_from)) return $ret; - - $anchors = $quote_from[$resnum]; - sort($anchors); - - if ($type == 1) { - return $this->_quotebackVerticalListHtml($anchors, $resnum); - } elseif ($type == 2) { - return $this->_quotebackHorizontalListHtml($anchors, $resnum); - } elseif ($type == 3) { - return $this->_quotebackResData($anchors, $resnum); - } - } - - // }}} - // {{{ _quotebackVerticalListHtml() - - protected function _quotebackVerticalListHtml($anchors, $resnum) - { - $ret = '
      '; - $anchor_cnt = 1; - foreach ($anchors as $anchor) { - if ($anchor_cnt > 1) { - $ret .= '
    • ��
    • '; - } - if ($anchor_cnt < count($anchors)) { - $ret .= '
    • ��'; - } else { - $ret .= '
    • ��'; - } - $ret .= ($anchor == $resnum) - ? $anchor - : $this->quoteRes($anchor, '', $anchor, true); - $anchor_cnt++; - } - $ret .= '
    '; - return $ret; - } - - // }}} - // {{{ _quotebackHorizontalListHtml() - - protected function _quotebackHorizontalListHtml($anchors, $resnum) - { - $ret = '
    '; - $count = 0; - - foreach ($anchors as $idx => $anchor) { - if ($anchor == $resnum) { - continue; - } - $anchor_link= $this->quoteRes('>>' . $anchor, '>>', $anchor); - $qres_id = ($this->_matome ? "t{$this->_matome}" : '') ."qr{$anchor}"; - $ret .= '
    '; - $ret .= sprintf('
    �y�Q�ƃ��X�F%s�z
    ',$anchor_link); - $ret .= '
    '; - $count++; - } - $ret .= '
    '; - - return $ret; - } - - // }}} - // {{{ _quotebackResData() - - protected function _quotebackResData($anchors, $resnum) - { - $ret = array(); - foreach ($anchors as $idx => $anchor) { - if ($anchor == $resnum) { - continue; - } - $ret[] = ($this->_matome ? "t{$this->_matome}" : '') ."qr{$anchor}"; - } - - return join('/', $ret); - } - - // }}} - // {{{ getDatochiResiduums() - - /** - * DAT�����̍ۂɎ擾�ł���>>1�ƍŌ�̃��X��HTML�ŕԂ�. - * - * @return string|false - */ - public function getDatochiResiduums() - { - $ret = ''; - $elines = $this->thread->datochi_residuums; - if (!count($elines)) { - return $ret; - } - - $this->thread->onthefly = true; - $ret = "
    on the fly
    \n"; - $ret .= "
    \n"; - - foreach($elines as $num => $line) { - $res = $this->transRes($line, $num); - if (is_array($res)) { - $ret .= $res['body'] . $res['q']; - } else { - $ret .= $res; - } - } - - $ret .= "
    \n"; - - return $ret; - } - - // }}} - // {{{ getAutoFavRanks() - - /** - * ���������N�ݒ��Ԃ�. - * - * @return array - */ - public function getAutoFavRank() - { - global $_conf; - - if ($this->_auto_fav_rank !== false) { - return $this->_auto_fav_rank; - } - - $ranks = explode(',', strtr($_conf['expack.ic2.fav_auto_rank_setting'], ' ', '')); - $ret = null; - if ($_conf['expack.misc.multi_favs']) { - $idx = 0; - if (!is_array($this->thread->favs)) { - return null; - } - foreach ($this->thread->favs as $fav) { - if ($fav) { - $rank = $ranks[$idx]; - if (is_numeric($rank)) { - $rank = intval($rank); - if ($ret === null) { - $ret = $rank; - } else { - $ret = max($ret, $rank); - } - } - } - $idx++; - } - } else { - if ($this->thread->fav && is_numeric($ranks[0])) { - $ret = intval($ranks[0]); - } - } - $this->_auto_fav_rank = $ret; - - return $ret; - } - - // }}} - // {{{ isAutoFavRankOverride() - - /** - * ���������N�ݒ�Ń����N���㏑�����ׂ����Ԃ�. - * - * @param int $now ���݂̃����N - * @param int $new ���������N - * @return bool - */ - static public function isAutoFavRankOverride($now, $new) - { - global $_conf; - - switch ($_conf['expack.ic2.fav_auto_rank_override']) { - case 0: - return false; - break; - case 1: - return $now != $new; - break; - case 2: - return $now == 0 && $now != $new; - break; - case 3: - return $now < $new; - break; - default: - return false; - } - return false; - } - - // }}} - // {{{ getAnchorRegex() - - /** - * �A���J�[�̐��K�\����Ԃ� - * - * @param string $pattern ex)'/%full%/' - * @param boolean $unicode - * @return string - */ - static public function getAnchorRegex($pattern, $unicode = false) - { - if (!array_key_exists($pattern, self::$_anchorRegexes)) { - self::$_anchorRegexes[$pattern] = strtr($pattern, self::_getAnchorRegexParts()); - // �卷�͂Ȃ��� compileMobile2chUriCallBack() �̂悤�� preg_relplace_callback()���Ă����������B - } - if ($unicode) { - return StrSjis::toUnicodePattern($_anchorRegexes[$pattern]); - } - return self::$_anchorRegexes[$pattern]; - } - - // }}} - // {{{ _getAnchorRegexParts() - - /** - * �A���J�[�̍\���v�f�i���K�\���p�[�c�̔z��j��Ԃ� - * - * @param void - * @return string - */ - static private function _getAnchorRegexParts() - { - if (!is_null(self::$_anchorRegexParts)) { - return self::$_anchorRegexParts; - } - - $anchor = array(); - - // �A���J�[�̍\���v�f�i���K�\���p�[�c�̔z��j - - // �󔒕��� - $anchor_space = '(?:[ ]|�@)'; - //$anchor[' '] = ''; - - // �A���J�[���p�q >> - $anchor['prefix'] = "(?:(?:>|��|<|��|�r){1,2}|(?:\)){2}|�t|��){$anchor_space}*\.?"; - - // ���� - $anchor['a_digit'] = '(?:\\d|�O|�P|�Q|�R|�S|�T|�U|�V|�W|�X)'; - /* - $anchor[0] = '(?:0|�O)'; - $anchor[1] = '(?:1|�P)'; - $anchor[2] = '(?:2|�Q)'; - $anchor[3] = '(?:3|�R)'; - $anchor[4] = '(?:4|�S)'; - $anchor[5] = '(?:5|�T)'; - $anchor[6] = '(?:6|�U)'; - $anchor[7] = '(?:7|�V)'; - $anchor[8] = '(?:8|�W)'; - $anchor[9] = '(?:9|�X)'; - */ - - // �͈͎w��q - // -|�]|�[ = HYPHEN-MINUS | HYPHEN | KATAKANA-HIRAGANA PROLONGED SOUND MARK - $anchor['range_delimiter'] = '(?:-|\\x81\\x5d|\\x81\\x5b)'; // [\\-\\x{2010}\\x{30fc}] - - // �񋓎w��q - $anchor['delimiter'] = "{$anchor_space}?(?:[\.,=+]|�A|�E|��|�C){$anchor_space}?"; - - // ���ځ[��p�A���J�[���p�q - //$anchor['prefix_abon'] = ">{1,2}{$anchor_space}?"; - - // ���X�ԍ� - $anchor['a_num'] = sprintf('%s{1,4}', $anchor['a_digit']); - - // ���X�͈� - /* - $anchor['a_range'] = sprintf('%s(?:%s%s)?', - $anchor['a_num'], $anchor['range_delimiter'], $anchor['a_num'] - ); - */ - $anchor['a_range'] = sprintf('%s(?:%s(?:%s)?%s)?', - $anchor['a_num'], $anchor['range_delimiter'], $anchor['prefix'], $anchor['a_num'] - ); - - // ���X�͈̗͂� - $anchor['ranges'] = sprintf('%s(?:%s%s)*(?!%s)', - $anchor['a_range'], $anchor['delimiter'], $anchor['a_range'], $anchor['a_digit'] - ); - - // ���X�ԍ��̗� - $anchor['nums'] = sprintf('%s(?:%s%s)*(?!%s)', - $anchor['a_num'], $anchor['delimiter'], $anchor['a_num'], $anchor['a_digit'] - ); - - // �A���J�[�S�� - $anchor['full'] = sprintf('(%s)(%s)', $anchor['prefix'], $anchor['ranges']); - - // getAnchorRegex() �� strtr() �u���p��key�� '%key%' �ɕϊ����� - foreach ($anchor as $k => $v) { - $anchor['%' . $k . '%'] = $v; - unset($anchor[$k]); - } - - self::$_anchorRegexParts = $anchor; - - return self::$_anchorRegexParts; - } - - // }}} - // {{{_buildStrToLinkRegex() - - /** - * �����N�Ƃ��Ĉ����p�^�[����Ԃ� - * - * @param void - * @return string - */ - static protected function _buildStrToLinkRegex() - { - return '{' - . '(?P(<[Aa] .+?>)(.*?)())' // �����N�iPCRE�̓�����A�K�����̃p�^�[�����ŏ��Ɏ��s����j - . '|' - . '(?:' - . '(?P' // ���p - . self::getAnchorRegex('%full%') - . ')' - . '|' - . '(?P' - . '(ftp|h?ttps?|tps?)://([0-9A-Za-z][\\w!#%&+*,\\-./:;=?@\\[\\]^~]+)' // URL - . ')' - . '|' - . '(?PID: ?([0-9A-Za-z/.+]{8,11})(?=[^0-9A-Za-z/.+]|$))' // ID�i8,10�� +PC/�g�ю��ʃt���O�j - . ')' - . '}'; - } - - // }}} -} - -// }}} - -/* - * Local Variables: - * mode: php - * coding: cp932 - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: nil - * End: - */ -// vim: set syn=php fenc=cp932 ai et ts=4 sw=4 sts=4 fdm=marker: diff --git a/lib/live/live_ShowThreadPc.php b/lib/live/live_ShowThreadPc.php deleted file mode 100755 index 7c2f12102..000000000 --- a/lib/live/live_ShowThreadPc.php +++ /dev/null @@ -1,1999 +0,0 @@ -_url_handlers = array( - 'plugin_linkThread', - 'plugin_link2chSubject', - ); - // +Wiki - if (isset($GLOBALS['linkPluginCtl'])) { - $this->_url_handlers[] = 'plugin_linkPlugin'; - } - if (isset($GLOBALS['replaceImageUrlCtl'])) { - $this->_url_handlers[] = 'plugin_replaceImageUrl'; - } - if (P2_IMAGECACHE_AVAILABLE == 2) { - $this->_url_handlers[] = 'plugin_imageCache2'; - } elseif ($_conf['preview_thumbnail']) { - $this->_url_handlers[] = 'plugin_viewImage'; - } - if ($_conf['link_youtube']) { - $this->_url_handlers[] = 'plugin_linkYouTube'; - } - if ($_conf['link_niconico']) { - $this->_url_handlers[] = 'plugin_linkNicoNico'; - } - $this->_url_handlers[] = 'plugin_linkURL'; - - // imepita��URL�����H����ImageCache2������v���O�C����o�^ - if (P2_IMAGECACHE_AVAILABLE == 2) { - $this->addURLHandler(array($this, 'plugin_imepitaToImageCache2')); - } - - // �T���l�C���\����������ݒ� - if (!isset($GLOBALS['pre_thumb_unlimited']) || !isset($GLOBALS['pre_thumb_limit'])) { - if (isset($_conf['pre_thumb_limit']) && $_conf['pre_thumb_limit'] > 0) { - $GLOBALS['pre_thumb_limit'] = $_conf['pre_thumb_limit']; - $GLOBALS['pre_thumb_unlimited'] = false; - } else { - $GLOBALS['pre_thumb_limit'] = null; // �k���l����isset()��false��Ԃ� - $GLOBALS['pre_thumb_unlimited'] = true; - } - } - $GLOBALS['pre_thumb_ignore_limit'] = false; - - // �A�N�e�B�u���i�[������ - if (P2_ACTIVEMONA_AVAILABLE) { - ExpackLoader::initActiveMona($this); - } - - // ImageCache2������ - if (P2_IMAGECACHE_AVAILABLE == 2) { - ExpackLoader::initImageCache($this); - } - - // �񓯊����X�|�b�v�A�b�v�ESPM������ - $js_id = sprintf('%u', crc32($this->thread->keydat)); - if ($this->_matome) { - $this->asyncObjName = "t{$this->_matome}asp{$js_id}"; - $this->spmObjName = "t{$this->_matome}spm{$js_id}"; - } else { - $this->asyncObjName = "asp{$js_id}"; - $this->spmObjName = "spm{$js_id}"; - } - - // ������������ - $this->setBbsNonameName(); - } - - // }}} - // {{{ transRes() - - /** - * Dat���X��HTML���X�ɕϊ����� - * - * @param string $ares dat��1���C�� - * @param int $i ���X�ԍ� - * @param string $pattern �n�C���C�g�p���K�\�� - * @return string - */ - public function transRes($ares, $i, $pattern = null) - { - global $_conf, $STYLE, $mae_msg; - - list($name, $mail, $date_id, $msg) = $this->thread->explodeDatLine($ares); - if (($id = $this->thread->ids[$i]) !== null) { - $idstr = 'ID:' . $id; - $date_id = str_replace($this->thread->idp[$i] . $id, $idstr, $date_id); - } else { - $idstr = null; - } - - // +Wiki:�u�����[�h - if (isset($GLOBALS['replaceWordCtl'])) { - $replaceWordCtl = $GLOBALS['replaceWordCtl']; - $name = $replaceWordCtl->replace('name', $this->thread, $ares, $i); - $mail = $replaceWordCtl->replace('mail', $this->thread, $ares, $i); - $date_id = $replaceWordCtl->replace('date', $this->thread, $ares, $i); - $msg = $replaceWordCtl->replace('msg', $this->thread, $ares, $i); - } - - $tores = ''; - $rpop = ''; - if ($this->_matome) { - $res_id = "t{$this->_matome}r{$i}"; - $msg_id = "t{$this->_matome}m{$i}"; - } else { - $res_id = "r{$i}"; - $msg_id = "m{$i}"; - } - $msg_class = 'message'; - - // NG���ځ[��`�F�b�N - $ng_type = $this->_ngAbornCheck($i, strip_tags($name), $mail, $date_id, $id, $msg, false, $ng_info); - if ($ng_type == self::ABORN) { - return $this->_abornedRes($res_id); - } - if ($ng_type != self::NG_NONE) { - $ngaborns_head_hits = self::$_ngaborns_head_hits; - $ngaborns_body_hits = self::$_ngaborns_body_hits; - } - - // AA���� - if ($this->am_autodetect && $this->activeMona->detectAA($msg)) { - $msg_class .= ' ActiveMona'; - } - - //============================================================= - // ���X���|�b�v�A�b�v�\�� - //============================================================= - if ($_conf['quote_res_view']) { - $quote_res_nums = $this->checkQuoteResNums($i, $name, $msg); - - foreach ($quote_res_nums as $rnv) { - if (!isset($this->_quote_res_nums_done[$rnv])) { - $this->_quote_res_nums_done[$rnv] = true; - if (isset($this->thread->datlines[$rnv-1])) { - if ($this->_matome) { - $qres_id = "t{$this->_matome}qr{$rnv}"; - } else { - $qres_id = "qr{$rnv}"; - } - $ds = $this->qRes($this->thread->datlines[$rnv-1], $rnv); - $onPopUp_at = " onmouseover=\"showResPopUp('{$qres_id}',event)\" onmouseout=\"hideResPopUp('{$qres_id}')\""; - $rpop .= "
    \n{$ds}
    \n"; - } - } - } - } - - //============================================================= - // �܂Ƃ߂ďo�� - //============================================================= - - $name = $this->transName($name); // ���OHTML�ϊ� - $msg = $this->transMsg($msg, $i); // ���b�Z�[�WHTML�ϊ� - - - // BE�v���t�@�C�������N�ϊ� - $date_id = $this->replaceBeId($date_id, $i); - - // HTML�|�b�v�A�b�v - if ($_conf['iframe_popup']) { - $date_id = preg_replace_callback("{((\?#*)|(Lv\.\d+))}", array($this, 'iframePopupCallback'), $date_id); - } - - // NG���b�Z�[�W�ϊ� - if ($ng_type != self::NG_NONE && count($ng_info)) { - $ng_info = implode(', ', $ng_info); - $msg = <<{$ng_info} -
    {$msg}
    -EOMSG; - } - - // NG�l�[���ϊ� - if ($ng_type & self::NG_NAME) { - $name = <<{$name} -EONAME; - $msg = <<{$msg} -EOMSG; - - // NG���[���ϊ� - } elseif ($ng_type & self::NG_MAIL) { - $mail = <<{$mail} -EOMAIL; - $msg = <<{$msg} -EOMSG; - - // NGID�ϊ� - } elseif ($ng_type & self::NG_ID) { - $date_id = <<{$date_id} -EOID; - $msg = <<{$msg} -EOMSG; - - } - - /* - //�u��������V���v�摜��}�� - if ($i == $this->thread->readnum +1) { - $tores .= <<�V�����X -EOP; - } - */ - - // SPM - if ($_conf['expack.spm.enabled']) { - $spmeh = " onmouseover=\"{$this->spmObjName}.show({$i},'{$msg_id}',event)\""; - $spmeh .= " onmouseout=\"{$this->spmObjName}.hide(event)\""; - } else { - $spmeh = ''; - } - - // +live �X�����e�\�����폜 - - /*if ($_conf['expack.am.enabled'] == 2) { - $tores .= << -// -\n -EOJS; - }*/ - - // �܂Ƃ߂ăt�B���^�F���� - if ($pattern) { - $tores = StrCtl::filterMarking($pattern, $tores); - } - - return array('body' => $tores, 'q' => $rpop); - } - - // }}} - // {{{ quoteOne() - - /** - * >>1 ��\������ (���p�|�b�v�A�b�v�p) - */ - public function quoteOne() - { - global $_conf; - - if (!$_conf['quote_res_view']) { - return false; - } - - $rpop = ''; - $quote_res_nums = $this->checkQuoteResNums(0, '1', ''); - if (array_search(1, $quote_res_nums) === false) { - $quote_res_nums[] = 1; - } - - foreach ($quote_res_nums as $rnv) { - if (!isset($this->_quote_res_nums_done[$rnv])) { - $this->_quote_res_nums_done[$rnv] = true; - if (isset($this->thread->datlines[$rnv-1])) { - if ($this->_matome) { - $qres_id = "t{$this->_matome}qr{$rnv}"; - } else { - $qres_id = "qr{$rnv}"; - } - $ds = $this->qRes($this->thread->datlines[$rnv-1], $rnv); - $onPopUp_at = " onmouseover=\"showResPopUp('{$qres_id}',event)\" onmouseout=\"hideResPopUp('{$qres_id}')\""; - $rpop .= "
    \n{$ds}
    \n"; - } - } - } - - $res1['q'] = $rpop; - $res1['body'] = $this->transMsg('>>1', 1); - - return $res1; - } - - // }}} - // {{{ qRes() - - /** - * ���X���pHTML - */ - public function qRes($ares, $i) - { - global $_conf; - - $resar = $this->thread->explodeDatLine($ares); - $name = $this->transName($resar[0]); - $mail = $resar[1]; - if (($id = $this->thread->ids[$i]) !== null) { - $idstr = 'ID:' . $id; - $date_id = str_replace($this->thread->idp[$i] . $id, $idstr, $resar[2]); - } else { - $idstr = null; - $date_id = $resar[2]; - } - $msg = $this->transMsg($resar[3], $i); - - $tores = ''; - - if ($this->_matome) { - $qmsg_id = "t{$this->_matome}qm{$i}"; - } else { - $qmsg_id = "qm{$i}"; - } - - // >>1 - if ($i == 1) { - $tores = "

    {$this->thread->ttitle_hd}

    "; - } - - // BE�v���t�@�C�������N�ϊ� - $date_id = $this->replaceBeId($date_id, $i); - - // HTML�|�b�v�A�b�v - if ($_conf['iframe_popup']) { - $date_id = preg_replace_callback("{((\?#*)|(Lv\.\d+))}", array($this, 'iframePopupCallback'), $date_id); - } - // - - // ID�t�B���^ - if ($_conf['flex_idpopup'] == 1 && $id && $this->thread->idcount[$id] > 1) { - $date_id = str_replace($idstr, $this->idFilter($idstr, $id), $date_id); - } - - $msg_class = 'message'; - - // AA ���� - if ($this->am_autodetect && $this->activeMona->detectAA($msg)) { - $msg_class .= ' ActiveMona'; - } - - // SPM - if ($_conf['expack.spm.enabled']) { - $spmeh = " onmouseover=\"{$this->spmObjName}.show({$i},'{$qmsg_id}',event)\""; - $spmeh .= " onmouseout=\"{$this->spmObjName}.hide(event)\""; - } else { - $spmeh = ''; - } - - // $tores�ɂ܂Ƃ߂ďo�� - $tores .= '
    '; - $tores .= "{$i} : "; // �ԍ� - $tores .= preg_replace('{[ ]*}i', '', "{$name} : "); - if ($mail) { - $tores .= $mail . ' : '; // ���[�� - } - $tores .= $date_id; // ���t��ID - if ($this->am_side_of_id) { - $tores .= ' ' . $this->activeMona->getMona($qmsg_id); - } - $tores .= "
    \n"; - - // �탌�X���X�g(�c�`��) - if ($_conf['backlink_list'] == 1 || $_conf['backlink_list'] > 2) { - $tores .= $this->_quotebackListHtml($i, 1); - } - - $tores .= "
    {$msg}
    \n"; // ���e - // �탌�X���X�g(���`��) - if ($_conf['backlink_list'] == 2 || $_conf['backlink_list'] > 2) { - $tores .= $this->_quotebackListHtml($i, 2); - } - - // ��Q�ƃu���b�N�p�f�[�^ - if ($_conf['backlink_block'] > 0) { - $tores .= $this->_getBacklinkComment($i); - } - - return $tores; - } - - // }}} - // {{{ _getBacklinkComment() - - protected function _getBacklinkComment($i) - { - $backlinks = $this->_quotebackListHtml($i, 3); - if (strlen($backlinks)) { - return ''; - } - return ''; - } - - // }}} - // {{{ transName() - - /** - * ���O��HTML�p�ɕϊ����� - * - * @param string $name ���O - * @return string - */ - public function transName($name) - { - global $_conf; - - // �g���b�v��z�X�g�t���Ȃ番������ - if (($pos = strpos($name, '��')) !== false) { - $trip = substr($name, $pos); - $name = substr($name, 0, $pos); - } else { - $trip = null; - } - - // ���������p���X�|�b�v�A�b�v�����N�� - if ($_conf['quote_res_view']) { - if (strlen($name) && $name != $this->_nanashiName) { - $name = preg_replace_callback( - self::getAnchorRegex('/(?:^|%prefix%)(%nums%)/'), - array($this, '_quoteNameCallback'), $name - ); - } - } - - if ($trip) { - $name .= $trip; - } elseif ($name) { - // ����������� - $name = $name . ' '; - //if (in_array(0xF0 & ord(substr($name, -1)), array(0x80, 0x90, 0xE0))) { - // $name .= ' '; - //} - } - - return $name; - } - - // }}} - // {{{ transMsg() - - /** - * dat�̃��X���b�Z�[�W��HTML�\���p���b�Z�[�W�ɕϊ����� - * - * @param string $msg ���b�Z�[�W - * @param int $mynum ���X�ԍ� - * @return string - */ - public function transMsg($msg, $mynum) - { - global $_conf; - global $pre_thumb_ignore_limit; - - // 2ch���`����dat - if ($this->thread->dat_type == '2ch_old') { - $msg = str_replace('���M', ',', $msg); - $msg = preg_replace('/&(?=[^;])/', '&', $msg); - } - - // &�␳ - $msg = preg_replace('/&(?!#?\\w+;)/', '&', $msg); - - // Safari���瓊�e���ꂽ�����N���`���_�̕��������␳ - //$msg = preg_replace('{(h?t?tp://[\w\.\-]+/)�`([\w\.\-%]+/?)}', '$1~$2', $msg); - - // >>1�̃����N����������O�� - // >>1 - $msg = preg_replace('{<[Aa] .+?>(>>\\d[\\d\\-]*)}', '$1', $msg); - - // �{����2ch��DAT���_�łȂ���Ă��Ȃ��ƃG�X�P�[�v�̐����������Ȃ��C������B�iURL�����N�̃}�b�`�ŕ���p���o�Ă��܂��j - //$msg = str_replace(array('"', "'"), array('"', '''), $msg); - - // 2006/05/06 �m�[�g���̌딽���΍� body onload=window() - $msg = str_replace('onload=window()', 'onload=window()', $msg); - - // �V�����X�̉摜�͕\�������𖳎�����ݒ�Ȃ� - if ($mynum > $this->thread->readnum && $_conf['expack.ic2.newres_ignore_limit']) { - $pre_thumb_ignore_limit = true; - } - - // �����̉��s�ƘA��������s������ - if ($_conf['strip_linebreaks']) { - $msg = $this->stripLineBreaks($msg /*, '
    ***
    '*/); - } - - // ���p��URL�Ȃǂ������N - $msg = $this->transLink($msg); - - // Wikipedia�L�@�ւ̎��������N - if ($_conf['_linkToWikipeida']) { - $msg = $this->_wikipediaFilter($msg); - } - - return $msg; - } - - // }}} - // {{{ _abornedRes() - - /** - * ���ځ[�񃌃X��HTML���擾���� - * - * @param string $res_id - * @return string - */ - protected function _abornedRes($res_id) - { - global $_conf; - - if ($_conf['ngaborn_purge_aborn']) { - return ''; - } - - return << -
     
    -
     
    -\n -EOP; - } - - // }}} - // {{{ idFilter() - - /** - * ID�t�B���^�����O�|�b�v�A�b�v�ϊ� - * - * @param string $idstr ID:xxxxxxxxxx - * @param string $id xxxxxxxxxx - * @return string - */ - public function idFilter($idstr, $id) - { - global $_conf; - - // ID��8���܂���10��(+�g��/PC���ʎq)�Ɖ��肵�� - /* - if (strlen($id) % 2 == 1) { - $id = substr($id, 0, -1); - } - */ - $num_ht = ''; - if (isset($this->thread->idcount[$id]) && $this->thread->idcount[$id] > 0) { - $num = (string) $this->thread->idcount[$id]; - if ($_conf['iframe_popup'] == 3) { - $num_ht = ' '; - $num_ht .= preg_replace('/\\d/', '', $num); - $num_ht .= ' '; - } else { - $num_ht = '('.$num.')'; - } - } else { - return $idstr; - } - - if ($_conf['coloredid.enable'] > 0 && preg_match("|^ID:[ ]?[0-9A-Za-z/.+]{8,11}|",$idstr)) { - if ($this->_ids_for_render === null) { - $this->_ids_for_render = array(); - } - $this->_ids_for_render[substr($id, 0, 8)] = $this->thread->idcount[$id]; - if ($_conf['coloredid.click'] > 0) { - $num_ht = '' . $num_ht . ''; - } - $idstr = $this->_coloredIdStr( - $idstr, $id, $_conf['coloredid.click'] > 0 ? true : false); - } - - $filter_url = $_conf['read_php'] . '?' . http_build_query(array( - 'host' => $this->thread->host, - 'bbs' => $this->thread->bbs, - 'key' => $this->thread->key, - 'ls' => 'all', - 'offline' => '1', - 'idpopup' => '1', - 'rf' => array( - 'field' => ResFilter::FIELD_ID, - 'method' => ResFilter::METHOD_JUST, - 'match' => ResFilter::MATCH_ON, - 'include' => ResFilter::INCLUDE_NONE, - 'word' => $id, - ), - ), '', '&') . $_conf['k_at_a']; - - if ($_conf['iframe_popup']) { - return $this->iframePopup($filter_url, $idstr, $_conf['bbs_win_target_at']) . $num_ht; - } - return "{$idstr}{$num_ht}"; - } - - // }}} - // {{{ _linkToWikipeida() - - /** - * @see ShowThread - */ - protected function _linkToWikipeida($word) - { - global $_conf; - - $link = 'http://ja.wikipedia.org/wiki/' . rawurlencode($word); - if ($_conf['through_ime']) { - $link = P2Util::throughIme($link); - } - - return "{$word}"; - } - - // }}} - // {{{ quoteRes() - - /** - * ���p�ϊ��i�P�Ɓj - * - * @param string $full >>1-100 - * @param string $qsign >> - * @param string $appointed_num 1-100 - * @param bool $anchor_jump - * @return string - */ - public function quoteRes($full, $qsign, $appointed_num, $anchor_jump = false) - { - global $_conf; - - $appointed_num = mb_convert_kana($appointed_num, 'n'); // �S�p�����𔼊p�����ɕϊ� - if (preg_match('/\\D/', $appointed_num)) { - $appointed_num = preg_replace('/\\D+/', '-', $appointed_num); - return $this->quoteResRange($full, $qsign, $appointed_num); - } - if (preg_match('/^0/', $appointed_num)) { - return $full; - } - - $qnum = intval($appointed_num); - if ($qnum < 1 || $qnum > sizeof($this->thread->datlines)) { - return $full; - } - - // ���ځ[�񃌃X�ւ̃A���J�[ - if ($_conf['quote_res_view_aborn'] == 0 && - in_array($qnum, $this->_aborn_nums)) { - return '' . "{$full}"; - } - - if ($anchor_jump && $qnum >= $this->thread->resrange['start'] && $qnum <= $this->thread->resrange['to']) { - $read_url = '#' . ($this->_matome ? "t{$this->_matome}" : '') . "r{$qnum}"; - } else { - $read_url = "{$_conf['read_php']}?host={$this->thread->host}&bbs={$this->thread->bbs}&key={$this->thread->key}&offline=1&ls={$appointed_num}"; - } - $attributes = $_conf['bbs_win_target_at']; - if ($_conf['quote_res_view'] && ($_conf['quote_res_view_ng'] != 0 || - !in_array($qnum, $this->_ng_nums))) { - if ($this->_matome) { - $qres_id = "t{$this->_matome}qr{$qnum}"; - } else { - $qres_id = "qr{$qnum}"; - } - $attributes .= " onmouseover=\"showResPopUp('{$qres_id}',event)\""; - $attributes .= " onmouseout=\"hideResPopUp('{$qres_id}')\""; - } - return "_aborn_nums) ? ' class="abornanchor"' : - (in_array($qnum, $this->_ng_nums) ? ' class="nganchor"' : '')) - . ">{$full}"; - } - - // }}} - // {{{ quoteResRange() - - /** - * ���p�ϊ��i�͈́j - * - * @param string $full >>1-100 - * @param string $qsign >> - * @param string $appointed_num 1-100 - * @return string - */ - public function quoteResRange($full, $qsign, $appointed_num) - { - global $_conf; - - if ($appointed_num == '-') { - return $full; - } - - $read_url = "{$_conf['read_php']}?host={$this->thread->host}&bbs={$this->thread->bbs}&key={$this->thread->key}&offline=1&ls={$appointed_num}n"; - - if ($_conf['iframe_popup']) { - $pop_url = $read_url . "&renzokupop=true"; - return $this->iframePopup(array($read_url, $pop_url), $full, $_conf['bbs_win_target_at'], 1); - } - - // ���ʂɃ����N - return "{$full}"; - - // 1�–ڂ����p���X�|�b�v�A�b�v - /* - $qnums = explode('-', $appointed_num); - $qlink = $this->quoteRes($qsign . $qnum[0], $qsign, $qnum[0]) . '-'; - if (isset($qnums[1])) { - $qlink .= $qnums[1]; - } - return $qlink; - */ - } - - // }}} - // {{{ iframePopup() - - /** - * HTML�|�b�v�A�b�v�ϊ� - * - * @param string|array $url - * @param string|array $str - * @param string $attr - * @param int|null $mode - * @param bool $marker - * @return string - */ - public function iframePopup($url, $str, $attr = '', $mode = null, $marker = false) - { - global $_conf; - - // �����N�pURL�ƃ|�b�v�A�b�v�pURL - if (is_array($url)) { - $link_url = $url[0]; - $pop_url = $url[1]; - } else { - $link_url = $url; - $pop_url = $url; - } - - // �����N������ƃ|�b�v�A�b�v�̈� - if (is_array($str)) { - $link_str = $str[0]; - $pop_str = $str[1]; - } else { - $link_str = $str; - $pop_str = null; - } - - // �����N�̑��� - if (is_array($attr)) { - $_attr = $attr; - $attr = ''; - foreach ($_attr as $key => $value) { - $attr .= ' ' . $key . '="' . p2h($value) . '"'; - } - } elseif ($attr !== '' && substr($attr, 0, 1) != ' ') { - $attr = ' ' . $attr; - } - - // �����N�̑�����HTML�|�b�v�A�b�v�p�̃C�x���g�n���h���������� - $pop_attr = $attr; - if ($_conf['iframe_popup_event'] == 1) { - $pop_attr .= " onclick=\"stophide=true; showHtmlPopUp('{$pop_url}',event,0" . ($marker ? ' ,this' : '') . "); return false;\""; - } else { - $pop_attr .= " onmouseover=\"showHtmlPopUp('{$pop_url}',event,{$_conf['iframe_popup_delay']}" . ($marker ? ' ,this' : '') . ")\""; - } - $pop_attr .= " onmouseout=\"offHtmlPopUp()\""; - - // �ŏI���� - if (is_null($mode)) { - $mode = $_conf['iframe_popup']; - } - if ($mode == 2 && !is_null($pop_str)) { - $mode = 3; - } elseif ($mode == 3 && is_null($pop_str)) { - global $skin, $STYLE; - - $custom_pop_img = "skin/{$skin}/pop.png"; - if (file_exists($custom_pop_img)) { - $pop_img = p2h($custom_pop_img); - $x = $STYLE['iframe_popup_mark_width']; - $y = $STYLE['iframe_popup_mark_height']; - } else { - $pop_img = 'img/pop.png'; - $y = $x = 12; - } - $pop_str = "\"\""; - } - - // �����N�쐬 - switch ($mode) { - // �}�[�N���� - case 1: - return "{$link_str}"; - // (p)�}�[�N - case 2: - return "(p){$link_str}"; - // [p]�摜�A�T���l�C���Ȃ� - case 3: - return "{$pop_str}{$link_str}"; - // �|�b�v�A�b�v���Ȃ� - default: - return "{$link_str}"; - } - } - - // }}} - // {{{ iframePopupCallback() - - /** - * HTML�|�b�v�A�b�v�ϊ��i�R�[���o�b�N�p�C���^�[�t�F�[�X�j - * - * @param array $s ���K�\���Ƀ}�b�`�����v�f�̔z�� - * @return string - */ - public function iframePopupCallback($s) - { - return $this->iframePopup(p2h($s[1], false), p2h($s[3], false), $s[2]); - } - - // }}} - // {{{ _coloredIdStr() - - /** - * Merged from http://jiyuwiki.com/index.php?cmd=read&page=rep2%A4%C7%A3%C9%A3%C4%A4%CE%C7%D8%B7%CA%BF%A7%CA%D1%B9%B9&alias%5B%5D=pukiwiki%B4%D8%CF%A2 - * - * @return string - */ - protected function _coloredIdStr($idstr, $id, $classed = false) - { - global $_conf; - - if (!(isset($this->thread->idcount[$id]) - && $this->thread->idcount[$id] > 1)) { - return $idstr; - } - if ($classed) { - return $this->_coloredIdStrClassed($idstr, $id); - } - - switch ($_conf['coloredid.rate.type']) { - case 1: - $rate = $_conf['coloredid.rate.times']; - break; - case 2: - $rate = $this->getIdCountRank(10); - break; - case 3: - $rate = $this->getIdCountAverage(); - break; - default: - return $idstr; - } - - if ($rate > 1 && $this->thread->idcount[$id] >= $rate) { - switch ($_conf['coloredid.coloring.type']) { - case 0: - return $this->_coloredIdStr0($idstr, $id); - break; - case 1: - return $this->_coloredIdStr1($idstr, $id); - break; - default: - return $idstr; - } - } - - return $idstr; - } - - // }}} - // {{{ _coloredIdStrClassed() - - private function _coloredIdStrClassed($idstr, $id) - { - $ret = array(); - $arr = explode(':', $idstr); - foreach ($arr as $i => $str) { - if ($i == 0 || $i == 1) { - $ret[] = '' . $str . ''; - } else { - $ret[] = $str; - } - } - return implode(':', $ret); - } - - // }}} - // {{{ _coloredIdStr0() - - /** - * ID�J���[ �I���W�i�����F�p - */ - private function _coloredIdStr0($idstr, $id) - { - if (!function_exists('coloredIdStyle0')) { - require P2_LIB_DIR . '/color/coloredIdStyle0.inc.php'; - } - - if (isset($this->idstyles[$id])) { - $colored = $this->idstyles[$id]; - } else { - $colored = coloredIdStyle0($id, $this->thread->idcount[$id]); - $this->idstyles[$id] = $colored; - } - $ret = array(); - foreach ($arr = explode(':', $idstr) as $i => $str) { - if ($colored[$i]) { - $ret[] = "{$str}"; - } else { - $ret[] = $str; - } - } - return implode(':', $ret); - } - - // }}} - // {{{ _coloredIdStr1() - - /** - * ID�J���[ thermon�ŗp - */ - private function _coloredIdStr1($idstr, $id) - { - if (!function_exists('coloredIdStyle')) { - require P2_LIB_DIR . '/color/coloredIdStyle.inc.php'; - } - - $colored = coloredIdStyle($idstr, $id, $this->thread->idcount[$id]); - $idstr2 = preg_split('/:/',$idstr,2); // �R������ID������𕪊� - $ret = array_shift($idstr2).':'; - if ($colored[1]) { - $idstr2[1] = substr($idstr2[0], 4); - $idstr2[0] = substr($idstr2[0], 0, 4); - } - foreach ($idstr2 as $i => $str) { - if ($colored[$i]) { - $ret .= "{$str}"; - } else { - $ret .= $str; - } - } - return $ret; - } - - // }}} - // {{{ cssClassedId() - - /** - * ID�J���[�Ɏg�p����CSS�N���X����ID�����񂩂�Z�o���ĕԂ�. - */ - static public function cssClassedId($id) - { - return 'idcss-' . bin2hex( - base64_decode(str_replace('.', '+', substr($id, 0, 8)))); - } - - // }}} - // {{{ ���[�e�B���e�B���\�b�h - // {{{ imageHtmlPopup() - - /** - * �摜��HTML�|�b�v�A�b�v&�|�b�v�A�b�v�E�C���h�E�T�C�Y�ɍ��킹�� - */ - public function imageHtmlPopup($img_url, $img_tag, $link_str) - { - global $_conf; - - if ($_conf['expack.ic2.enabled'] && $_conf['expack.ic2.fitimage']) { - $popup_url = 'ic2_fitimage.php?url=' . rawurlencode(str_replace('&', '&', $img_url)); - } else { - $popup_url = $img_url; - } - - $pops = ($_conf['iframe_popup'] == 1) ? $img_tag . $link_str : array($link_str, $img_tag); - return $this->iframePopup(array($img_url, $popup_url), $pops, $_conf['ext_win_target_at'], null, true); - } - - // }}} - // {{{ respopToAsync() - - /** - * ���X�|�b�v�A�b�v��񓯊����[�h�ɉ��H���� - */ - public function respopToAsync($str) - { - $respop_regex = '/(onmouseover)=\"(showResPopUp\(\'(q(\d+)of\d+)\',event\).*?)\"/'; - $respop_replace = '$1="loadResPopUp(' . $this->asyncObjName . ', $4);$2"'; - return preg_replace($respop_regex, $respop_replace, $str); - } - - // }}} - // {{{ getASyncObjJs() - - /** - * �񓯊��ǂݍ��݂ŗ��p����JavaScript�I�u�W�F�N�g�𐶐����� - */ - public function getASyncObjJs() - { - global $_conf; - static $done = array(); - - if (isset($done[$this->asyncObjName])) { - return; - } - $done[$this->asyncObjName] = true; - - $code = << -//asyncObjName} = { - host:"{$this->thread->host}", bbs:"{$this->thread->bbs}", key:"{$this->thread->key}", - readPhp:"{$_conf['read_php']}", readTarget:"{$_conf['bbs_win_target']}" -}; -//]]> -\n -EOJS; - return $code; - } - - // }}} - // {{{ getSpmObjJs() - - /** - * �X�}�[�g�|�b�v�A�b�v���j���[�𐶐�����JavaScript�R�[�h�𐶐����� - */ - public function getSpmObjJs($retry = false) - { - global $_conf, $STYLE; - - if (isset(self::$_spm_objects[$this->spmObjName])) { - return $retry ? self::$_spm_objects[$this->spmObjName] : ''; - } - - $ttitle_en = UrlSafeBase64::encode($this->thread->ttitle); - - if ($_conf['expack.spm.filter_target'] == '' || $_conf['expack.spm.filter_target'] == 'read') { - $_conf['expack.spm.filter_target'] = '_self'; - } - - $motothre_url = $this->thread->getMotoThread(); - $motothre_url = substr($motothre_url, 0, strlen($this->thread->ls) * -1); - - $_spmOptions = array( - 'null', - ((!$_conf['disable_res'] && $_conf['expack.spm.kokores']) ? (($_conf['expack.spm.kokores_orig']) ? '2' : '1') : '0'), - (($_conf['expack.spm.ngaborn']) ? (($_conf['expack.spm.ngaborn_confirm']) ? '2' : '1') : '0'), - (($_conf['expack.spm.filter']) ? '1' : '0'), - (($this->am_on_spm) ? '1' : '0'), - (($_conf['expack.aas.enabled']) ? '1' : '0'), - ); - $spmOptions = implode(',', $_spmOptions); - - // �G�X�P�[�v - $_spm_title = StrCtl::toJavaScript($this->thread->ttitle_hc); - $_spm_url = addslashes($motothre_url); - $_spm_host = addslashes($this->thread->host); - $_spm_bbs = addslashes($this->thread->bbs); - $_spm_key = addslashes($this->thread->key); - $_spm_ls = addslashes($this->thread->ls); - - $code = << -//spmObjName} = { - 'objName':'{$this->spmObjName}', - 'rc':'{$this->thread->rescount}', - 'title':'{$_spm_title}', - 'ttitle_en':'{$ttitle_en}', - 'url':'{$_spm_url}', - 'host':'{$_spm_host}', - 'bbs':'{$_spm_bbs}', - 'key':'{$_spm_key}', - 'ls':'{$_spm_ls}', - 'spmOption':[{$spmOptions}] -}; -SPM.init({$this->spmObjName}); -//]]> -\n -EOJS; - - self::$_spm_objects[$this->spmObjName] = $code; - - return $code; - } - - // }}} - // }}} - // {{{ transLinkDo()����Ăяo�����URL�����������\�b�h - /** - * �����̃��\�b�h�͈����������Ώۃp�^�[���ɍ��v���Ȃ���false��Ԃ��A - * transLinkDo()��false���Ԃ��Ă����$_url_handlers�ɓo�^����Ă��鎟�̊֐�/���\�b�h�ɏ��������悤�Ƃ���B - */ - // {{{ plugin_linkURL() - - /** - * URL�����N - * - * @param string $url - * @param array $purl - * @param string $str - * @return string|false - */ - public function plugin_linkURL($url, $purl, $str) - { - global $_conf; - - if (isset($purl['scheme'])) { - // ime - if ($_conf['through_ime']) { - $link_url = P2Util::throughIme($purl[0]); - } else { - $link_url = $url; - } - - $is_http = ($purl['scheme'] == 'http' || $purl['scheme'] == 'https'); - - // HTML�|�b�v�A�b�v - if ($_conf['iframe_popup'] && $is_http) { - // *pm �w��̏ꍇ�̂݁A���ʂɎ蓮�]���w���lj����� - if (substr($_conf['through_ime'], -2) == 'pm') { - $pop_url = P2Util::throughIme($purl[0], -1); - } else { - $pop_url = $link_url; - } - $link = $this->iframePopup(array($link_url, $pop_url), $str, $_conf['ext_win_target_at']); - } else { - $link = "{$str}"; - } - - // �u���N���`�F�b�J - if ($_conf['brocra_checker_use'] && $_conf['brocra_checker_url'] && $is_http) { - if (strlen($_conf['brocra_checker_query'])) { - $brocra_checker_url = $_conf['brocra_checker_url'] . '?' . $_conf['brocra_checker_query'] . '=' . rawurlencode($purl[0]); - } else { - $brocra_checker_url = rtrim($_conf['brocra_checker_url'], '/') . '/' . $url; - } - $brocra_checker_url_orig = $brocra_checker_url; - // �u���N���`�F�b�J�Eime - if ($_conf['through_ime']) { - $brocra_checker_url = P2Util::throughIme($brocra_checker_url); - } - $check_mark = '�`�F�b�N'; - $check_mark_prefix = '['; - $check_mark_suffix = ']'; - // �u���N���`�F�b�J�EHTML�|�b�v�A�b�v - if ($_conf['iframe_popup']) { - // *pm �w��̏ꍇ�̂݁A���ʂɎ蓮�]���w���lj����� - if (substr($_conf['through_ime'], -2) == 'pm') { - $brocra_checker_url = P2Util::throughIme($brocra_checker_url_orig, -1); - } else { - $brocra_pop_url = $brocra_checker_url; - } - if ($_conf['iframe_popup'] == 3) { - $check_mark = ''; - $check_mark_prefix = ''; - $check_mark_suffix = ''; - } - $brocra_checker_link = $this->iframePopup(array($brocra_checker_url, $brocra_pop_url), $check_mark, $_conf['ext_win_target_at']); - } else { - $brocra_checker_link = "{$check_mark}"; - } - $link .= $check_mark_prefix . $brocra_checker_link . $check_mark_suffix; - } - - return $link; - } - return false; - } - - // }}} - // {{{ plugin_link2chSubject() - - /** - * 2ch bbspink �ƒ����N - * - * @param string $url - * @param array $purl - * @param string $str - * @return string|false - */ - public function plugin_link2chSubject($url, $purl, $str) - { - global $_conf; - - if (preg_match('{^http://(\\w+\\.(?:2ch\\.net|bbspink\\.com))/(\\w+)/$}', $purl[0], $m)) { - $subject_url = "{$_conf['subject_php']}?host={$m[1]}&bbs={$m[2]}"; - return "{$str} [�‚�p2�ŊJ��]"; - } - return false; - } - - // }}} - // {{{ plugin_linkThread() - - /** - * �X���b�h�����N - * - * @param string $url - * @param array $purl - * @param string $str - * @return string|false - */ - public function plugin_linkThread($url, $purl, $str) - { - global $_conf; - - list($nama_url, $host, $bbs, $key, $ls) = P2Util::detectThread($purl[0]); - if ($host && $bbs && $key) { - $read_url = "{$_conf['read_php']}?host={$host}&bbs={$bbs}&key={$key}&ls={$ls}"; - if ($_conf['iframe_popup']) { - if ($ls && preg_match('/^[0-9\\-n]+$/', $ls)) { - $pop_url = $read_url; - } else { - $pop_url = $read_url . '&one=true'; - } - return $this->iframePopup(array($read_url, $pop_url), $str, $_conf['bbs_win_target_at']); - } - return "{$str}"; - } - - return false; - } - - // }}} - // {{{ plugin_linkYouTube() - - /** - * YouTube�����N�ϊ��v���O�C�� - * - * Zend_Gdata_Youtube���g���΃T���l�C�����̑��̏����ȒP�Ɏ擾�ł��邪... - * - * @param string $url - * @param array $purl - * @param string $str - * @return string|false - */ - public function plugin_linkYouTube($url, $purl, $str) - { - global $_conf; - - // http://www.youtube.com/watch?v=Mn8tiFnAUAI - // http://m.youtube.com/watch?v=OhcX0xJsDK8&client=mv-google&gl=JP&hl=ja&guid=ON&warned=True - if (preg_match('{^http://(www|jp|m)\\.youtube\\.com/watch\\?(?:.+&)?v=([0-9a-zA-Z_\\-]+)}', $url, $m)) { - // ime - if ($_conf['through_ime']) { - $link_url = P2Util::throughIme($url); - } else { - $link_url = $url; - } - - // HTML�|�b�v�A�b�v - if ($_conf['iframe_popup']) { - $link = $this->iframePopup($link_url, $str, $_conf['ext_win_target_at']); - } else { - $link = "{$str}"; - } - - $subd = $m[1]; - $id = $m[2]; - - if ($_conf['link_youtube'] == 2) { - return << -EOP; - } else { - return << -EOP; - } - } - return false; - } - - // }}} - // {{{ plugin_linkNicoNico() - - /** - * �j�R�j�R����ϊ��v���O�C�� - * - * @param string $url - * @param array $purl - * @param string $str - * @return string|false - */ - public function plugin_linkNicoNico($url, $purl, $str) - { - global $_conf; - - // http://www.nicovideo.jp/watch?v=utbrYUJt9CSl0 - // http://www.nicovideo.jp/watch/utvWwAM30N0No - // http://m.nicovideo.jp/watch/sm7044684 - if (preg_match('{^http://(?:www|m)\\.nicovideo\\.jp/watch(?:/|(?:\\?v=))([0-9a-zA-Z_-]+)}', $url, $m)) { - // ime - if ($_conf['through_ime']) { - $link_url = P2Util::throughIme($purl[0]); - } else { - $link_url = $url; - } - - // HTML�|�b�v�A�b�v - if ($_conf['iframe_popup']) { - $link = $this->iframePopup($link_url, $str, $_conf['ext_win_target_at']); - } else { - $link = "{$str}"; - } - - $id = $m[1]; - - if ($_conf['link_niconico'] == 2) { - return << -EOP; - } else { - return << -EOP; - } - } - return false; - } - - // }}} - // {{{ plugin_viewImage() - - /** - * �摜�|�b�v�A�b�v�ϊ� - * - * @param string $url - * @param array $purl - * @param string $str - * @return string|false - */ - public function plugin_viewImage($url, $purl, $str) - { - global $_conf; - global $pre_thumb_unlimited, $pre_thumb_limit; - - if (P2Util::isUrlWikipediaJa($url)) { - return false; - } - - // �\������ - if (!$pre_thumb_unlimited && empty($pre_thumb_limit)) { - return false; - } - - if (preg_match('{^https?://.+?\\.(jpe?g|gif|png)$}i', $purl[0]) && empty($purl['query'])) { - $pre_thumb_limit--; // �\�������J�E���^�������� - $img_tag = ""; - - if ($_conf['iframe_popup']) { - $view_img = $this->imageHtmlPopup($url, $img_tag, $str); - } else { - $view_img = "{$img_tag}{$str}"; - } - - // �u���N���`�F�b�J �i�v���r���[�Ƃ͑��e��Ȃ��̂ŃR�����g�A�E�g�j - /*if ($_conf['brocra_checker_use']) { - $link_url_en = rawurlencode($url); - if ($_conf['iframe_popup'] == 3) { - $check_mark = ''; - $check_mark_prefix = ''; - $check_mark_suffix = ''; - } else { - $check_mark = '�`�F�b�N'; - $check_mark_prefix = '['; - $check_mark_suffix = ']'; - } - $view_img .= $check_mark_prefix . "{$check_mark}" . $check_mark_suffix; - }*/ - - return $view_img; - } - - return false; - } - - // }}} - // {{{ plugin_imageCache2() - - /** - * ImageCache2�T���l�C���ϊ� - * - * @param string $url - * @param array $purl - * @param string $str - * @return string|false - */ - public function plugin_imageCache2($url, $purl, $str, - $force = false, - $referer = null) - { - static $serial = 0; - - global $_conf; - global $pre_thumb_unlimited, $pre_thumb_ignore_limit, $pre_thumb_limit; - - if (P2Util::isUrlWikipediaJa($url)) { - return false; - } - - if ((preg_match('{^https?://.+?\\.(jpe?g|gif|png)$}i', $purl[0]) && empty($purl['query'])) || $force) { - // ���� - $serial++; - $thumb_id = 'thumbs' . $serial . $this->thumb_id_suffix; - $tmp_thumb = './img/ic_load.png'; - $url_ht = $url; - $url = $purl[0]; - $url_en = rawurlencode($url) . - ($referer ? '&ref=' . rawurlencode($referer) : ''); - $img_id = null; - - $icdb = new ImageCache2_DataObject_Images(); - - // r=0:�����N;r=1:���_�C���N�g;r=2:PHP�ŕ\�� - // t=0:�I���W�i��;t=1:PC�p�T���l�C��;t=2:�g�їp�T���l�C��;t=3:���ԃC���[�W - $img_url = 'ic2.php?r=1&uri=' . $url_en; - $thumb_url = 'ic2.php?r=1&t=1&uri=' . $url_en; - // ���C�ɃX�������摜�����N - $rank = null; - if ($_conf['expack.ic2.fav_auto_rank']) { - $rank = $this->getAutoFavRank(); - if ($rank !== null) { - $thumb_url .= '&rank=' . $rank; - } - } - - // DB�ɉ摜��񂪓o�^����Ă����Ƃ� - if ($icdb->get($url)) { - $img_id = $icdb->id; - - // �E�B���X�Ɋ������Ă����t�@�C���̂Ƃ� - if ($icdb->mime == 'clamscan/infected') { - return " {$str}"; - } - // ���ځ[��摜�̂Ƃ� - if ($icdb->rank < 0) { - return " {$str}"; - } - - // �I���W�i�����L���b�V������Ă���Ƃ��͉摜�𒼐ړǂݍ��� - $_img_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime); - if (file_exists($_img_url)) { - $img_url = $_img_url; - $cached = true; - } else { - $cached = false; - } - - // �T���l�C�����쐬����Ă��Ă���Ƃ��͉摜�𒼐ړǂݍ��� - $_thumb_url = $this->thumbnailer->thumbUrl($icdb->size, $icdb->md5, $icdb->mime); - if (file_exists($_thumb_url)) { - $thumb_url = $_thumb_url; - // �����X���^�C�����@�\��ON�ŃX���^�C���L�^����Ă��Ȃ��Ƃ���DB���X�V - if (!is_null($this->img_memo) && strpos($icdb->memo, $this->img_memo) === false){ - $update = new ImageCache2_DataObject_Images(); - if (!is_null($icdb->memo) && strlen($icdb->memo) > 0) { - $update->memo = $this->img_memo . ' ' . $icdb->memo; - } else { - $update->memo = $this->img_memo; - } - $update->whereAddQuoted('uri', '=', $url); - } - - // expack.ic2.fav_auto_rank_override �̐ݒ�ƃ����N������OK�Ȃ� - // ���C�ɃX�������摜�����N���㏑���X�V - if ($rank !== null && - self::isAutoFavRankOverride($icdb->rank, $rank)) { - if ($update === null) { - $update = new ImageCache2_DataObject_Images(); - $update->whereAddQuoted('uri', '=', $url); - } - $update->rank = $rank; - } - - if ($update !== null) { - $update->update(); - } - } - - // �T���l�C���̉摜�T�C�Y - $thumb_size = $this->thumbnailer->calc($icdb->width, $icdb->height); - $thumb_size = preg_replace('/(\d+)x(\d+)/', 'width="$1" height="$2"', $thumb_size); - $tmp_thumb = './img/ic_load1.png'; - - $orig_img_url = $img_url; - $orig_thumb_url = $thumb_url; - - // �摜���L���b�V������Ă��Ȃ��Ƃ� - // �����X���^�C�����@�\��ON�Ȃ�N�G����UTF-8�G���R�[�h�����X���^�C���܂߂� - } else { - // �摜���u���b�N���X�gor�G���[���O�ɂ��邩�m�F - if (false !== ($errcode = $icdb->ic2_isError($url))) { - return " {$str}"; - } - - $cached = false; - - $orig_img_url = $img_url; - $orig_thumb_url = $thumb_url; - $img_url .= $this->img_memo_query; - $thumb_url .= $this->img_memo_query; - $thumb_size = ''; - $tmp_thumb = './img/ic_load2.png'; - } - - // �L���b�V������Ă��炸�A�\�����������L���̂Ƃ� - if (!$cached && !$pre_thumb_unlimited && !$pre_thumb_ignore_limit) { - // �\�������𒴂��Ă�����A�\�����Ȃ� - // �\�������𒴂��Ă��Ȃ���΁A�\�������J�E���^�������� - if ($pre_thumb_limit <= 0) { - $show_thumb = false; - } else { - $show_thumb = true; - $pre_thumb_limit--; - } - } else { - $show_thumb = true; - } - - // �\�����[�h - if ($show_thumb) { - $img_tag = ""; - if ($_conf['iframe_popup']) { - $view_img = $this->imageHtmlPopup($img_url, $img_tag, $str); - } else { - $view_img = "{$img_tag}{$str}"; - } - } else { - $img_tag = ""; - $view_img = "{$img_tag}{$str}"; - } - - // �\�[�X�ւ̃����N��ime�t���ŕ\�� - if ($_conf['expack.ic2.enabled'] && $_conf['expack.ic2.through_ime']) { - $ime_url = P2Util::throughIme($url); - if ($_conf['iframe_popup'] == 3) { - $ime_mark = ''; - } else { - $ime_mark = '[ime]'; - } - $view_img .= " {$ime_mark}"; - } - - $view_img .= ''; - - return $view_img; - } - - return false; - } - - // }}} - // {{{ plugin_replaceImageUrl() - - /** - * �u���摜URL+ImageCache2 - */ - public function plugin_replaceImageUrl($url, $purl, $str) - { - static $serial = 0; - - global $_conf; - global $pre_thumb_unlimited, $pre_thumb_ignore_limit, $pre_thumb_limit; - - // +Wiki - global $replaceImageUrlCtl; - - $url = $purl[0]; - $replaced = $replaceImageUrlCtl->replaceImageUrl($url); - if (!$replaced[0]) { - return false; - } - - foreach ($replaced as $v) { - $url_en = rawurlencode($v['url']); - $url_ht = p2h($v['url']); - $ref_en = $v['referer'] ? '&ref=' . rawurlencode($v['referer']) : ''; - - // ���� - $serial++; - $thumb_id = 'thumbs' . $serial . $this->thumb_id_suffix; - $tmp_thumb = './img/ic_load.png'; - - $icdb = new ImageCache2_DataObject_Images(); - - // r=0:�����N;r=1:���_�C���N�g;r=2:PHP�ŕ\�� - // t=0:�I���W�i��;t=1:PC�p�T���l�C��;t=2:�g�їp�T���l�C��;t=3:���ԃC���[�W - // +Wiki - $img_url = 'ic2.php?r=1&uri=' . $url_en . $ref_en; - $thumb_url = 'ic2.php?r=1&t=1&uri=' . $url_en . $ref_en; - // ���C�ɃX�������摜�����N - $rank = null; - if ($_conf['expack.ic2.fav_auto_rank']) { - $rank = $this->getAutoFavRank(); - if ($rank !== null) $thumb_url .= '&rank=' . $rank; - } - - // DB�ɉ摜��񂪓o�^����Ă����Ƃ� - if ($icdb->get($v['url'])) { - - // �E�B���X�Ɋ������Ă����t�@�C���̂Ƃ� - if ($icdb->mime == 'clamscan/infected') { - $result .= ""; - continue; - } - // ���ځ[��摜�̂Ƃ� - if ($icdb->rank < 0) { - $result .= ""; - continue; - } - - // �I���W�i�����L���b�V������Ă���Ƃ��͉摜�𒼐ړǂݍ��� - $_img_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime); - if (file_exists($_img_url)) { - $img_url = $_img_url; - $cached = true; - } else { - $cached = false; - } - - // �T���l�C�����쐬����Ă��Ă���Ƃ��͉摜�𒼐ړǂݍ��� - $_thumb_url = $this->thumbnailer->thumbUrl($icdb->size, $icdb->md5, $icdb->mime); - if (file_exists($_thumb_url)) { - $thumb_url = $_thumb_url; - // �����X���^�C�����@�\��ON�ŃX���^�C���L�^����Ă��Ȃ��Ƃ���DB���X�V - if (!is_null($this->img_memo) && strpos($icdb->memo, $this->img_memo) === false){ - $update = new ImageCache2_DataObject_Images(); - if (!is_null($icdb->memo) && strlen($icdb->memo) > 0) { - $update->memo = $this->img_memo . ' ' . $icdb->memo; - } else { - $update->memo = $this->img_memo; - } - $update->whereAddQuoted('uri', '=', $v['url']); - } - - // expack.ic2.fav_auto_rank_override �̐ݒ�ƃ����N������OK�Ȃ� - // ���C�ɃX�������摜�����N���㏑���X�V - if ($rank !== null && - self::isAutoFavRankOverride($icdb->rank, $rank)) { - if ($update === null) { - $update = new ImageCache2_DataObject_Images(); - $update->whereAddQuoted('uri', '=', $v['url']); - } - $update->rank = $rank; - } - - if ($update !== null) { - $update->update(); - } - } - - // �T���l�C���̉摜�T�C�Y - $thumb_size = $this->thumbnailer->calc($icdb->width, $icdb->height); - $thumb_size = preg_replace('/(\d+)x(\d+)/', 'width="$1" height="$2"', $thumb_size); - $tmp_thumb = './img/ic_load1.png'; - - $orig_img_url = $img_url; - $orig_thumb_url = $thumb_url; - - // �摜���L���b�V������Ă��Ȃ��Ƃ� - // �����X���^�C�����@�\��ON�Ȃ�N�G����UTF-8�G���R�[�h�����X���^�C���܂߂� - } else { - // �摜���u���b�N���X�gor�G���[���O�ɂ��邩�m�F - if (false !== ($errcode = $icdb->ic2_isError($v['url']))) { - $result .= ""; - continue; - } - - $cached = false; - - $orig_img_url = $img_url; - $orig_thumb_url = $thumb_url; - $img_url .= $this->img_memo_query; - $thumb_url .= $this->img_memo_query; - $thumb_size = ''; - $tmp_thumb = './img/ic_load2.png'; - } - - // �L���b�V������Ă��炸�A�\�����������L���̂Ƃ� - if (!$cached && !$pre_thumb_unlimited && !$pre_thumb_ignore_limit) { - // �\�������𒴂��Ă�����A�\�����Ȃ� - // �\�������𒴂��Ă��Ȃ���΁A�\�������J�E���^�������� - if ($pre_thumb_limit <= 0) { - $show_thumb = false; - } else { - $show_thumb = true; - $pre_thumb_limit--; - } - } else { - $show_thumb = true; - } - - // �\�����[�h - if ($show_thumb) { - $img_tag = ""; - if ($_conf['iframe_popup']) { - $view_img = $this->imageHtmlPopup($img_url, $img_tag, ''); - } else { - $view_img = "{$img_tag}"; - } - } else { - $img_tag = ""; - $view_img = "{$img_tag}"; - } - - $view_img .= '"; - . "'{$url_ht}', event)\">"; - - $result .= $view_img; - } - // �\�[�X�ւ̃����N��ime�t���ŕ\�� - $ime_url = P2Util::throughIme($url); - $result .= "{$str}"; - return $result; - } - - /** - * +Wiki:�����N�v���O�C�� - */ - public function plugin_linkPlugin($url, $purl, $str) - { - return $GLOBALS['linkPluginCtl']->replaceLinkToHTML($url, $str); - } - - // }}} - // {{{ plugin_imepitaToImageCache2() - - /** - * imepita��URL�����H����ImageCache2������v���O�C�� - * - * @param string $url - * @param array $purl - * @param string $str - * @return string|false - */ - public function plugin_imepitaToImageCache2($url, $purl, $str) - { - if (preg_match('{^https?://imepita\.jp/(?:image/)?(\d{8}/\d{6})}i', - $purl[0], $m) && empty($purl['query'])) { - $_url = 'http://imepita.jp/image/' . $m[1]; - $_purl = @parse_url($_url); - $_purl[0] = $_url; - return $this->plugin_imageCache2($_url, $_purl, $str, true, $url); - } - return false; - } - - // }}} - // }}} - // {{{ getQuotebacksJson() - - public function getQuotebacksJson() - { - $ret = array(); - foreach ($this->getQuoteFrom() as $resnum => $quote_from) { - if (!$quote_from) { - continue; - } - if ($resnum != 1 && ($resnum < $this->thread->resrange['start'] || $resnum > $this->thread->resrange['to'])) { - continue; - } - $tmp = array(); - foreach ($quote_from as $quote) { - if ($quote != 1 && ($quote < $this->thread->resrange['start'] || $quote > $this->thread->resrange['to'])) { - continue; - } - $tmp[] = $quote; - } - if ($tmp) $ret[] = "{$resnum}:[" . join(',', $tmp) . "]"; - } - return '{' . join(',', $ret) . '}'; - } - - // }}} - // {{{ getResColorJs() - - public function getResColorJs() - { - global $_conf, $STYLE; - - $fontstyle_bold = empty($STYLE['fontstyle_bold']) ? 'normal' : $STYLE['fontstyle_bold']; - $fontweight_bold = empty($STYLE['fontweight_bold']) ? 'normal' : $STYLE['fontweight_bold']; - $fontfamily_bold = $STYLE['fontfamily_bold']; - $backlinks = $this->getQuotebacksJson(); - $colors = array(); - $backlink_colors = join(',', - array_map(create_function('$x', 'return "\'{$x}\'";'), - explode(',', $_conf['backlink_coloring_track_colors'])) - ); - $prefix = $this->_matome ? "t{$this->_matome}" : ''; - return << -if (typeof rescolObjs == 'undefined') rescolObjs = []; -rescolObjs.push((function() { - var obj = new BacklinkColor('{$prefix}'); - obj.colors = [{$backlink_colors}]; - obj.highlightStyle = {fontStyle :'{$fontstyle_bold}', fontWeight : '{$fontweight_bold}', fontFamily : '{$fontfamily_bold}'}; - obj.backlinks = {$backlinks}; - return obj; -})()); - -EOJS; - } - - // }}} - // {{{ getIdsForRenderJson() - - public function getIdsForRenderJson() - { - $ret = array(); - if ($this->_ids_for_render) { - foreach ($this->_ids_for_render as $id => $count) { - $ret[] = "'{$id}':{$count}"; - } - } - return '{' . join(',', $ret) . '}'; - } - - // }}} - // {{{ getIdColorJs() - - public function getIdColorJs() - { - global $_conf, $STYLE; - - if ($_conf['coloredid.enable'] < 1 || $_conf['coloredid.click'] < 1) { - return ''; - } - if (count($this->thread->idcount) < 1) { - return ''; - } - - $idslist = $this->getIdsForRenderJson(); - - $rate = $_conf['coloredid.rate.times']; - $tops = $this->getIdCountRank(10); - $average = $this->getIdCountAverage(); - $color_init = ''; - if ($_conf['coloredid.rate.type'] > 0) { - switch($_conf['coloredid.rate.type']) { - case 2: - $init_rate = $tops; - break; - case 3: - $init_rate = $average; - break; - case 1: - $init_rate = $rate; - default: - } - if ($init_rate > 1) - $color_init .= 'idCol.initColor(' . $init_rate . ', idslist);'; - } - $color_init .= "idCol.rate = {$rate};"; - if (!$this->_matome) { - $color_init .= "idCol.tops = {$tops};"; - $color_init .= "idCol.average = {$average};"; - } - $hissiCount = $_conf['coloredid.rate.hissi.times']; - $mark_colors = join(',', - array_map(create_function('$x', 'return "\'{$x}\'";'), - explode(',', $_conf['coloredid.marking.colors'])) - ); - $fontstyle_bold = empty($STYLE['fontstyle_bold']) ? 'normal' : $STYLE['fontstyle_bold']; - $fontweight_bold = empty($STYLE['fontweight_bold']) ? 'normal' : $STYLE['fontweight_bold']; - $fontfamily_bold = $STYLE['fontfamily_bold']; - $uline = $STYLE['a_underline_none'] != 1 - ? 'idCol.colorStyle["textDecoration"] = "underline"' : ''; - return << -(function() { -var idslist = {$idslist}; -if (typeof idCol == 'undefined') { - idCol = new IDColorChanger(idslist, {$hissiCount}); - idCol.colors = [{$mark_colors}]; -{$uline}; - idCol.highlightStyle = {fontStyle :'{$fontstyle_bold}', fontWeight : '{$fontweight_bold}', fontFamily : '{$fontfamily_bold}', fontSize : '104%'}; -} else idCol.addIdlist(idslist); -{$color_init} -idCol.setupSPM('{$this->spmObjName}'); -})(); - -EOJS; - } - - // }}} - // {{{ getIdCountAverage() - - public function getIdCountAverage() - { - if ($this->_idcount_average !== null) { - return $this->_idcount_average; - } - - $sum = 0; - $param = 0; - - foreach ($this->thread->idcount as $count) { - if ($count > 1) { - $sum += $count; - $param++; - } - } - - $result = ($param < 1) ? 0 : intval(ceil($sum / $param)); - $this->_idcount_average = $result; - - return $result; - } - - // }}} - // {{{ getIdCountRank() - - public function getIdCountRank($rank) - { - if ($this->_idcount_tops !== null) { - return $this->_idcount_tops; - } - - $ranking = array(); - - foreach ($this->thread->idcount as $count) { - if ($count > 1) { - $ranking[] = $count; - } - } - - if (count($ranking) == 0) { - return 0; - } - - rsort($ranking); - $rcount = count($ranking); - - $result = ($rcount >= $rank) ? $ranking[$rank - 1] : $ranking[$rcount - 1]; - $this->_idcount_tops = $result; - - return $result; - } - - // }}} -} - -// }}} - -/* - * Local Variables: - * mode: php - * coding: cp932 - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: nil - * End: - */ -// vim: set syn=php fenc=cp932 ai et ts=4 sw=4 sts=4 fdm=marker: diff --git a/rep2/live_read.php b/rep2/live_read.php index e9f9b1650..03695eb95 100755 --- a/rep2/live_read.php +++ b/rep2/live_read.php @@ -1,6 +1,6 @@ getThreadInfoFromIdx(); -//========================================================== -// preview >>1 -//========================================================== - -//if (!empty($_GET['onlyone'])) { -if (!empty($_GET['one'])) { - $aThread->ls = '1'; - $aThread->resrange = array('start' => 1, 'to' => 1, 'nofirst' => false); - - // �K���������m�ł͂Ȃ����֋X�I�� - //if (!isset($aThread->rescount) && !empty($_GET['rc'])) { - if (!isset($aThread->rescount) && !empty($_GET['rescount'])) { - //$aThread->rescount = $_GET['rc']; - $aThread->rescount = (int)$_GET['rescount']; - } - - $preview = $aThread->previewOne(); - $ptitle_ht = p2h($aThread->itaj) . ' / ' . $aThread->ttitle_hd; - - include READ_HEADER_INC_PHP; - echo $preview; - include READ_FOOTER_INC_PHP; - - return; -} - //=========================================================== // DAT�̃_�E�����[�h //=========================================================== @@ -202,62 +176,11 @@ $ptitle_ht = p2h($aThread->itaj) . ' / ' . $aThread->ttitle_hd; if ($_conf['ktai']) { + include READ_HEADER_INC_PHP; - if ($resFilter && $resFilter->hasWord() && $aThread->rescount) { - $GLOBALS['filter_hits'] = 0; - } else { - $GLOBALS['filter_hits'] = null; - } - - $aShowThread = new ShowThreadK($aThread); - - if ($is_ajax) { - $response = trim(mb_convert_encoding($aShowThread->getDatToHtml(true), 'UTF-8', 'CP932')); - if (isset($_GET['respop_id'])) { - $response = preg_replace('/<[^<>]+? id="/u', sprintf('$0_respop%d_', $_GET['respop_id']), $response); - } - /*if ($_conf['iphone']) { - // HTML�̒f�Ђ�XML�Ƃ��ēn���Ă�DOM��id��class�����Ғʂ�ɔ��f����Ȃ� - header('Content-Type: application/xml; charset=UTF-8'); - //$responseId = 'ajaxResponse' . time(); - $doc = new DOMDocument(); - $err = error_reporting(E_ALL & ~E_WARNING); - $html = '' - . '' - . '' - . $response - . ''; - $doc->loadHTML($html); - error_reporting($err); - echo ''; - echo $doc->saveXML($doc->getElementsByTagName('div')->item(0)); - } else {*/ - // ����āAHTML�̒f�Ђ����̂܂ܕԂ���innterHTML�ɑ�����Ȃ��Ƃ����Ȃ��B - // (���{�I�Ƀ��X�|���X�̃t�H�[�}�b�g�ƃN���C�A���g���ł̏�����ς��Ȃ������) - header('Content-Type: text/html; charset=UTF-8'); - echo $response; - //} - } else { - if ($aThread->rescount) { - if ($_GET['showbl']) { - $content = $aShowThread->getDatToHtml_resFrom(); - } else { - $content = $aShowThread->getDatToHtml(); - } - } elseif ($aThread->diedat && count($aThread->datochi_residuums) > 0) { - $content = $aShowThread->getDatochiResiduums(); - } - - include READ_HEADER_INC_PHP; - - if ($_conf['iphone'] && $_conf['expack.spm.enabled']) { - echo $aShowThread->getSpmObjJs(); - } - - echo $content; + echo "PC�̂ݎ����ł��܂��B"; - include READ_FOOTER_INC_PHP; - } + include READ_FOOTER_INC_PHP; } else { @@ -284,8 +207,8 @@ //$GLOBALS['debug'] && $GLOBALS['profiler']->enterSection("datToHtml"); if ($aThread->rescount) { - $mainhtml = ''; - require_once P2_LIB_DIR . '/live/live_ShowThreadPc.php'; + //�ǂ����\�����Ȃ��̂Ŗ{�̂�ShowThreadPc���g�� + //require_once P2_LIB_DIR . '/live/live_ShowThreadPc.php'; $aShowThread = new ShowThreadPc($aThread); if ($_conf['expack.spm.enabled']) { @@ -293,24 +216,14 @@ } $res1 = $aShowThread->quoteOne(); // >>1�|�b�v�A�b�v�p - if ($_conf['coloredid.enable'] > 0 && $_conf['coloredid.click'] > 0 && - $_conf['coloredid.rate.type'] > 0) { - if ($_GET['showbl']) { - $mainhtml = $aShowThread->datToHtml_resFrom(true); - } else { - $mainhtml .= $aShowThread->datToHtml(true); - } - $mainhtml .= $res1['q']; + + //�Ă΂Ȃ���ID�J���[�Ȃǂ����f����Ȃ��̂ŌĂԂ����ʂ͕\�����Ȃ� + if ($_GET['showbl']) { + $aShowThread->getDatToHtml_resFrom(); } else { - if ($_GET['showbl']) { - $aShowThread->datToHtml_resFrom(); - } else { - $aShowThread->datToHtml(); - } - echo $res1['q']; + $aShowThread->getDatToHtml(); } - // ���X�ǐՃJ���[ if ($_conf['backlink_coloring_track']) { echo $aShowThread->getResColorJs(); @@ -319,11 +232,13 @@ // ID�J���[�����O if ($_conf['coloredid.enable'] > 0 && $_conf['coloredid.click'] > 0) { echo $aShowThread->getIdColorJs(); - // �u���E�U���׌y���̂��߁ACSS���������X�N���v�g�̌�ŃR���e���c�� - // �����_�����O������ - echo $mainhtml; } + // �{���̑��� + echo <<\n +LIVE; + // �O���c�[�� $pluswiki_js = ''; @@ -374,7 +289,6 @@ } } elseif ($aThread->diedat && count($aThread->datochi_residuums) > 0) { - require_once P2_LIB_DIR . '/ShowThreadPc.php'; $aShowThread = new ShowThreadPc($aThread); echo $aShowThread->getDatochiResiduums(); } From ea112fb0a2fb3e0af1bb000e749679b9b825ff96 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 19 Mar 2015 02:10:59 +0900 Subject: [PATCH 073/339] =?UTF-8?q?rep2/info.php=E3=81=A7Mango=E6=9D=BF?= =?UTF-8?q?=E3=81=AE=E3=82=B9=E3=83=AC=E3=83=83=E3=83=89=E3=82=BF=E3=82=A4?= =?UTF-8?q?=E3=83=88=E3=83=AB=E8=A3=85=E9=A3=BE=E3=81=8C=E5=8F=8D=E6=98=A0?= =?UTF-8?q?=E3=81=95=E3=82=8C=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97?= =?UTF-8?q?=E3=81=9F=20http://anago.2ch.net/test/read.cgi/software/1425420?= =?UTF-8?q?543/769?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/info.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rep2/info.php b/rep2/info.php index 0cd0f8a69..8362de0e7 100644 --- a/rep2/info.php +++ b/rep2/info.php @@ -336,7 +336,7 @@ P2Util::printInfoHtml(); echo "

    \n"; -echo "{$hd['ttitle_name']}\n"; +echo "",(isset($title_msg) ? $hd['ttitle_name'] : $aThread->ttitle_hd),"\n";echo "

    \n"; echo "

    \n"; // �g�тȂ�`���ŕ\�� From ea38f48531e8595c900e3a7ab6ed4e6bc65edce5 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 19 Mar 2015 12:52:54 +0900 Subject: [PATCH 074/339] =?UTF-8?q?=E5=89=8A=E9=99=A4=E3=81=97=E3=81=9Fliv?= =?UTF-8?q?e=5FShowThreadPc.php=E3=82=92=E5=9F=BA=E3=81=ABlive=5FShowThrea?= =?UTF-8?q?dLive.php=E3=82=92=E4=BD=9C=E6=88=90=20=E6=9C=AC=E4=BD=93?= =?UTF-8?q?=E3=81=AEShowThreadPc=E3=82=92=E7=B6=99=E6=89=BF=E3=81=97?= =?UTF-8?q?=E3=81=A6=E3=81=84=E3=82=8B=E3=81=9F=E3=82=81=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=86=E3=83=8A=E3=83=B3=E3=82=B9=E3=81=8C=E3=82=AF=E3=83=83?= =?UTF-8?q?=E3=82=BD=E6=A5=BD=E3=81=AB=E3=81=AA=E3=82=8B=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/live/live_ShowThreadLive.php | 207 +++++++++++++++++++++++++++++++ rep2/live_read.php | 9 +- 2 files changed, 212 insertions(+), 4 deletions(-) create mode 100644 lib/live/live_ShowThreadLive.php diff --git a/lib/live/live_ShowThreadLive.php b/lib/live/live_ShowThreadLive.php new file mode 100644 index 000000000..64815d13c --- /dev/null +++ b/lib/live/live_ShowThreadLive.php @@ -0,0 +1,207 @@ +thread->explodeDatLine($ares); + if (($id = $this->thread->ids[$i]) !== null) { + $idstr = 'ID:' . $id; + $date_id = str_replace($this->thread->idp[$i] . $id, $idstr, $date_id); + } else { + $idstr = null; + } + + // +Wiki:�u�����[�h + if (isset($GLOBALS['replaceWordCtl'])) { + $replaceWordCtl = $GLOBALS['replaceWordCtl']; + $name = $replaceWordCtl->replace('name', $this->thread, $ares, $i); + $mail = $replaceWordCtl->replace('mail', $this->thread, $ares, $i); + $date_id = $replaceWordCtl->replace('date', $this->thread, $ares, $i); + $msg = $replaceWordCtl->replace('msg', $this->thread, $ares, $i); + } + + $tores = ''; + $rpop = ''; + if ($this->_matome) { + $res_id = "t{$this->_matome}r{$i}"; + $msg_id = "t{$this->_matome}m{$i}"; + } else { + $res_id = "r{$i}"; + $msg_id = "m{$i}"; + } + $msg_class = 'message'; + + // NG���ځ[��`�F�b�N + $ng_type = $this->_ngAbornCheck($i, strip_tags($name), $mail, $date_id, $id, $msg, false, $ng_info); + if ($ng_type == self::ABORN) { + return $this->_abornedRes($res_id); + } + if ($ng_type != self::NG_NONE) { + $ngaborns_head_hits = self::$_ngaborns_head_hits; + $ngaborns_body_hits = self::$_ngaborns_body_hits; + } + + // AA���� + if ($this->am_autodetect && $this->activeMona->detectAA($msg)) { + $msg_class .= ' ActiveMona'; + } + + //============================================================= + // ���X���|�b�v�A�b�v�\�� + //============================================================= + if ($_conf['quote_res_view']) { + $quote_res_nums = $this->checkQuoteResNums($i, $name, $msg); + + foreach ($quote_res_nums as $rnv) { + if (!isset($this->_quote_res_nums_done[$rnv])) { + $this->_quote_res_nums_done[$rnv] = true; + if (isset($this->thread->datlines[$rnv-1])) { + if ($this->_matome) { + $qres_id = "t{$this->_matome}qr{$rnv}"; + } else { + $qres_id = "qr{$rnv}"; + } + $ds = $this->qRes($this->thread->datlines[$rnv-1], $rnv); + $onPopUp_at = " onmouseover=\"showResPopUp('{$qres_id}',event)\" onmouseout=\"hideResPopUp('{$qres_id}')\""; + $rpop .= "
    \n{$ds}
    \n"; + } + } + } + } + + //============================================================= + // �܂Ƃ߂ďo�� + //============================================================= + + $name = $this->transName($name); // ���OHTML�ϊ� + $msg = $this->transMsg($msg, $i); // ���b�Z�[�WHTML�ϊ� + + + // BE�v���t�@�C�������N�ϊ� + $date_id = $this->replaceBeId($date_id, $i); + + // HTML�|�b�v�A�b�v + if ($_conf['iframe_popup']) { + $date_id = preg_replace_callback("{((\?#*)|(Lv\.\d+))}", array($this, 'iframePopupCallback'), $date_id); + } + + // NG���b�Z�[�W�ϊ� + if ($ng_type != self::NG_NONE && count($ng_info)) { + $ng_info = implode(', ', $ng_info); + $msg = <<{$ng_info} +
    {$msg}
    +EOMSG; + } + + // NG�l�[���ϊ� + if ($ng_type & self::NG_NAME) { + $name = <<{$name} +EONAME; + $msg = <<{$msg} +EOMSG; + + // NG���[���ϊ� + } elseif ($ng_type & self::NG_MAIL) { + $mail = <<{$mail} +EOMAIL; + $msg = <<{$msg} +EOMSG; + + // NGID�ϊ� + } elseif ($ng_type & self::NG_ID) { + $date_id = <<{$date_id} +EOID; + $msg = <<{$msg} +EOMSG; + + } + + /* + //�u��������V���v�摜��}�� + if ($i == $this->thread->readnum +1) { + $tores .= <<�V�����X +EOP; + } + */ + + // SPM + if ($_conf['expack.spm.enabled']) { + $spmeh = " onmouseover=\"{$this->spmObjName}.show({$i},'{$msg_id}',event)\""; + $spmeh .= " onmouseout=\"{$this->spmObjName}.hide(event)\""; + } else { + $spmeh = ''; + } + + // +live �X�����e�\�����폜 + + /*if ($_conf['expack.am.enabled'] == 2) { + $tores .= << +// +\n +EOJS; + }*/ + + // �܂Ƃ߂ăt�B���^�F���� + if ($pattern) { + $tores = StrCtl::filterMarking($pattern, $tores); + } + + return array('body' => $tores, 'q' => $rpop); + } + + // }}} +} + +// }}} + +/* + * Local Variables: + * mode: php + * coding: cp932 + * tab-width: 4 + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ +// vim: set syn=php fenc=cp932 ai et ts=4 sw=4 sts=4 fdm=marker: diff --git a/rep2/live_read.php b/rep2/live_read.php index 03695eb95..3b7c485c7 100755 --- a/rep2/live_read.php +++ b/rep2/live_read.php @@ -207,9 +207,10 @@ //$GLOBALS['debug'] && $GLOBALS['profiler']->enterSection("datToHtml"); if ($aThread->rescount) { - //�ǂ����\�����Ȃ��̂Ŗ{�̂�ShowThreadPc���g�� - //require_once P2_LIB_DIR . '/live/live_ShowThreadPc.php'; - $aShowThread = new ShowThreadPc($aThread); + // �ǂ����\�����Ȃ��̂Ŗ{�̂�ShowThreadPc���g�� + // �\�����Ȃ����e��S�����̂��A���Ȃ̂ōŒ���̏o�͂�ShowThreadLive�ɕύX + require_once P2_LIB_DIR . '/live/live_ShowThreadLive.php'; + $aShowThread = new ShowThreadLive($aThread); if ($_conf['expack.spm.enabled']) { echo $aShowThread->getSpmObjJs(); @@ -217,7 +218,7 @@ $res1 = $aShowThread->quoteOne(); // >>1�|�b�v�A�b�v�p - //�Ă΂Ȃ���ID�J���[�Ȃǂ����f����Ȃ��̂ŌĂԂ����ʂ͕\�����Ȃ� + // �Ă΂Ȃ���ID�J���[�Ȃǂ����f����Ȃ��̂ŌĂԂ����ʂ͕\�����Ȃ� if ($_GET['showbl']) { $aShowThread->getDatToHtml_resFrom(); } else { From d9900c1d5643345d76d9d99be9f396c89a93f967 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 20 Mar 2015 10:57:19 +0900 Subject: [PATCH 075/339] =?UTF-8?q?=E3=83=9D=E3=83=83=E3=83=97=E3=82=A2?= =?UTF-8?q?=E3=83=83=E3=83=97=E3=81=8B=E3=82=89=E6=9B=B8=E3=81=8D=E8=BE=BC?= =?UTF-8?q?=E3=81=BF=E6=88=90=E5=8A=9F=E3=81=97=E3=81=9F=E5=BE=8C=E3=81=AB?= =?UTF-8?q?=E3=82=B9=E3=83=AC=E3=82=92=E5=86=8D=E8=AA=AD=E3=81=BF=E8=BE=BC?= =?UTF-8?q?=E3=81=BF=E3=81=97=E3=81=AA=E3=81=84=E8=A8=AD=E5=AE=9A=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- conf/conf_user_def.inc.php | 4 ++++ doc/README-774.txt | 11 +++++++++++ rep2/edit_conf_user.php | 1 + rep2/info.php | 1 - rep2/post.php | 7 +++++++ 6 files changed, 24 insertions(+), 2 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 0eef511cf..a95f4c705 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150317.1200', // rep2�̃o�[�W���� + 'p2version' => '150320.1020', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index 547fab700..d00defce8 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -459,6 +459,10 @@ $conf_user_def['res_write_rec'] = 1; // (1) $conf_user_rad['res_write_rec'] = array('1' => '����', '0' => '���Ȃ�'); +// �|�b�v�A�b�v���珑�����ݐ���������X�����ēǂݍ��݂���(����:1, ���Ȃ�:0) +$conf_user_def['res_popup_reload'] = 1; // (1) +$conf_user_rad['res_popup_reload'] = array('1' => '����', '0' => '���Ȃ�'); + // �O��URL�W�����v����ۂɒʂ��Q�[�g // �u���ځv�ł�Cookie���g���Ȃ��[���ł� gate.php ��ʂ� $conf_user_def['through_ime'] = "exm"; // ("exm") diff --git a/doc/README-774.txt b/doc/README-774.txt index e4958c057..8674088d1 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -36,6 +36,17 @@ rep2-expack test https://github.com/orzisun/p2-php �{��p2�Ɠ������AX11���C�Z���X�ł��B ��ChangeLog +150320.1020 +�E�|�b�v�A�b�v���珑�����ݐ���������ɃX�����ēǂݍ��݂��Ȃ��ݒ��lj� +�E�������[�h����̏������݂�Cookie�m�F�����������ꍇ�������[�h�ɖ߂�Ȃ��s����C�� +�E�����e�i���X�������コ���邽��live_ShowThreadPc.php��live_ShowThread.php�̑���� +live_ShowThreadLive.php�Ɩ{�̂�ShowThread.php���g�p����悤�ɕύX +�E�������ۑ�(expack.editor.savedraft)�������ȂƂ��Ɏ������[�h���珑�����߂Ȃ��s����C�� +�E�X���^�C������Warning���o��s����C�� + +150317.1200 +�E���̑����X + 150316.1120 �E3�y�C���\���̔z�u��ύX�ł���ݒ��lj� �EBe�̃A�C�R����\���ł���悤�ɂ��� diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index 3a6d23839..3c3a59e9a 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -416,6 +416,7 @@ array('rct_rec_num', '�ŋߓǂ񂾃X���̋L�^��'), array('res_hist_rec_num', '�������ݗ����̋L�^��'), array('res_write_rec', '�������ݓ��e���O���L�^'), + array('res_popup_reload', '�|�b�v�A�b�v���珑�����ݐ���������X�����ēǂݍ��݂���'), array('through_ime', '�O��URL�W�����v����ۂɒʂ��Q�[�g
    �u���ځv�ł�Cookie���g���Ȃ��[���ł� gate.php ��ʂ�'), array('through_ime_http_only', ' HTTPS�ŃA�N�Z�X���Ă���Ƃ��͊O��URL�Q�[�g��ʂ��Ȃ�
    (�ŋ߂�Web�u���E�U�̑����� https �� http �̑J�ڂ�Referer�𑗏o���܂��񂪁A
    �uHTTPS�ł͒��v�ɂ���ꍇ�́A���g���̃u���E�U�̎d�l���m�F���Ă�������)'), array('ime_manual_ext', '�Q�[�g�Ŏ����]�����Ȃ��g���q�i�J���}��؂�ŁA�g���q�̑O�̃s���I�h�͕s�v�j'), diff --git a/rep2/info.php b/rep2/info.php index 8362de0e7..7fbe15e64 100644 --- a/rep2/info.php +++ b/rep2/info.php @@ -337,7 +337,6 @@ echo "

    \n"; echo "",(isset($title_msg) ? $hd['ttitle_name'] : $aThread->ttitle_hd),"\n";echo "

    \n"; -echo "

    \n"; // �g�тȂ�`���ŕ\�� if ($_conf['ktai']) { diff --git a/rep2/post.php b/rep2/post.php index 0902dde02..f9ac31fb8 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -660,7 +660,14 @@ function showPostMsg($isDone, $result_msg, $reload) $popup_ht = << // From a69d8a571931f37ed50171c957912ed30f657e5e Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sat, 21 Mar 2015 22:45:52 +0900 Subject: [PATCH 076/339] =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E3=81=AE=E3=82=B5=E3=83=B3=E3=83=97=E3=83=AB?= =?UTF-8?q?=E9=81=94=E3=82=92=E6=9B=B4=E6=96=B0=E3=81=97=E3=81=A6Readme?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/data/Readme.txt | 15 +++++++++++++++ doc/data/p2_replace_msg.txt | 2 ++ 2 files changed, 17 insertions(+) create mode 100644 doc/data/Readme.txt create mode 100644 doc/data/p2_replace_msg.txt diff --git a/doc/data/Readme.txt b/doc/data/Readme.txt new file mode 100644 index 000000000..7df6aa584 --- /dev/null +++ b/doc/data/Readme.txt @@ -0,0 +1,15 @@ ++Wiki�ݒ�t�@�C���̃T���v���W + +�W���ݒ�̏ꍇ��data/pref/�ɓ����Ƌ@�\���܂��B +�ڂ���������doc/wiki/���̃e�L�X�g�ɋL�ڂ���Ă��܂��B + +p2_plugin_dat.txt DAT�擾�v���O�C�� +p2_plugin_link.txt �����N�v���O�C�� +p2_replace_imageurl.txt �u���摜URL(Jane��ImageViewURLReplace.dat����) + +���L�̃t�@�C���͒��ڕҏW����K�v������܂��B +�ҏW���@��doc/wiki/���̃e�L�X�g���悭�ǂ�ł��������B +p2_replace_mail.txt ���[�� +p2_replace_name.txt ���O +p2_replace_date.txt ���t�EID�� +p2_replace_msg.txt �{�� diff --git a/doc/data/p2_replace_msg.txt b/doc/data/p2_replace_msg.txt new file mode 100644 index 000000000..b90bb9c49 --- /dev/null +++ b/doc/data/p2_replace_msg.txt @@ -0,0 +1,2 @@ +//Jim���t�@�r�����ĕt���������t�b�^�[������ +
    .* From 0f1559463100d98b8f5de62790a80c1b85bc474c Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sun, 22 Mar 2015 10:21:50 +0900 Subject: [PATCH 077/339] =?UTF-8?q?dig2ch=E3=81=AE=E9=AF=96=E3=81=AB?= =?UTF-8?q?=E8=BB=BD=E5=BE=AE=E3=81=AA=E4=B8=8D=E5=85=B7=E5=90=88=E3=81=8C?= =?UTF-8?q?=E7=99=BA=E7=94=9F=E3=81=97=E3=81=9F=E3=81=A8=E3=81=8D=E3=81=AE?= =?UTF-8?q?=E5=AF=BE=E7=AD=96=E3=82=92=E8=AC=9B=E3=81=98=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/dig2ch.php | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/rep2/dig2ch.php b/rep2/dig2ch.php index 56b2b537a..87fc80681 100644 --- a/rep2/dig2ch.php +++ b/rep2/dig2ch.php @@ -10,7 +10,7 @@ function dig2chsearch($query) $query_arry['q'] = urlencode($query_arry['q']); $client = new HTTP_Client(); - $client->setDefaultHeader('User-Agent', 'p2-tgrep-client'); + $client->setDefaultHeader('User-Agent', 'Mozilla/5.0 (Windows NT 6.4; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko'); $code = $client->get($_conf['test.dig2ch_url'] . '?AndOr=' . $query_arry['AndOr'] . '&maxResult=' . $query_arry['maxResult'] . '&atLeast=1&Sort=' . $query_arry['Sort'] . '&Link=1&Bbs=all&924=' . $query_arry['924'] . '&json=1&keywords=' . $query_arry['q']); if (PEAR::isError($code)) { p2die($code->getMessage()); @@ -19,34 +19,38 @@ function dig2chsearch($query) } $response = $client->currentResponse(); - $jsontest1 = json_decode($response['body'], true); + // ����̎I�ʼn�����Q������������JSON��HTML�̃R�����g��������̂ł��̑΍� + $body = preg_replace("/<\!--.*-->/", "", $response['body']); + + $jsontest1 = json_decode($body, true); //mb_convert_variables('SHIFT-JIS','UTF-8',$jsontest1); - /* switch (json_last_error()) { + $jsonerror = ""; + switch (json_last_error()) { case JSON_ERROR_NONE: - echo ' - No errors'; + $jsonerror = ' - No errors'; break; case JSON_ERROR_DEPTH: - echo ' - Maximum stack depth exceeded'; + $jsonerror = ' - Maximum stack depth exceeded'; break; case JSON_ERROR_STATE_MISMATCH: - echo ' - Underflow or the modes mismatch'; + $jsonerror = ' - Underflow or the modes mismatch'; break; case JSON_ERROR_CTRL_CHAR: - echo ' - Unexpected control character found'; + $jsonerror = ' - Unexpected control character found'; break; case JSON_ERROR_SYNTAX: - echo ' - Syntax error, malformed JSON'; + $jsonerror = ' - Syntax error, malformed JSON'; break; case JSON_ERROR_UTF8: - echo ' - Malformed UTF-8 characters, possibly incorrectly encoded'; + $jsonerror = ' - Malformed UTF-8 characters, possibly incorrectly encoded'; break; default: - echo ' - Unknown error'; + $jsonerror = ' - Unknown error'; break; - } */ + } if ($jsontest1 === NULL) { - p2die("�������ʂ̎擾�Ɏ��s���܂���"); + p2die("�������ʂ̎擾�Ɏ��s���܂���".$jsonerror); } foreach ($jsontest1[result] as $jsontest2) { From cfa904dabc97eb79f97eb5224a40360282862641 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Mon, 23 Mar 2015 00:06:40 +0900 Subject: [PATCH 078/339] =?UTF-8?q?=E7=BD=AE=E6=8F=9B=E3=83=AF=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=82=92=E3=83=9D=E3=83=83=E3=83=97=E3=82=A2=E3=83=83?= =?UTF-8?q?=E3=83=97=E3=81=AB=E3=82=82=E5=8A=B9=E3=81=8F=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4=E3=80=82=20=E7=BD=AE=E6=8F=9B?= =?UTF-8?q?=E3=83=AF=E3=83=BC=E3=83=89=E3=81=AE=E5=87=A6=E7=90=86=E3=82=92?= =?UTF-8?q?strtr=E3=81=AB=E3=81=97=E3=81=9F=E3=80=82=E3=80=80http://anago.?= =?UTF-8?q?2ch.net/test/read.cgi/software/1426940268/27=20dig2ch=E3=81=A7?= =?UTF-8?q?=E6=A4=9C=E7=B4=A2=E7=B5=90=E6=9E=9C=E3=81=AE=E7=95=AA=E5=8F=B7?= =?UTF-8?q?=E3=81=8C1=E3=81=8B=E3=82=89=E8=A1=A8=E7=A4=BA=E3=81=95?= =?UTF-8?q?=E3=82=8C=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=20dig2ch=E3=81=AEjson=E3=82=A8=E3=83=A9=E3=83=BC=E5=87=A6?= =?UTF-8?q?=E7=90=86=E3=82=92=E5=A4=89=E6=9B=B4=20dig2ch.php=E3=81=AE?= =?UTF-8?q?=E3=82=BF=E3=83=96=E3=82=92=E3=82=B9=E3=83=9A=E3=83=BC=E3=82=B9?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 22 ++++++ lib/ShowThreadPc.php | 13 +++- lib/expack/tgrep/view.inc.php | 2 +- lib/wiki/ReplaceWordCtl.php | 24 +++--- rep2/dig2ch.php | 139 ++++++++++++++++++---------------- 5 files changed, 118 insertions(+), 82 deletions(-) diff --git a/lib/P2Util.php b/lib/P2Util.php index d74543d0d..adda081ba 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -58,6 +58,11 @@ class P2Util */ static private $_hostIsVip2ch = array(); + /** + * isHost2chSc()�̃L���b�V�� + */ + static private $_hostIs2chSc = array(); + /** * P2Ime�I�u�W�F�N�g * @@ -977,6 +982,23 @@ static public function adjustHostJbbs($in_str) //return preg_replace('<(^|/)jbbs\\.(?:shitaraba\\.com|livedoor\\.(?:com|jp))(/|$)>', '\\1rentalbbs.livedoor.com\\2', $in_str, 1); } + // }}} + // {{{ isHost2chSc() + + /** + * host �� 2ch.sc �Ȃ� true ��Ԃ� + * + * @param string $host + * @return boolean + */ + static public function isHost2chSc($host) + { + if (!array_key_exists($host, self::$_hostIs2chSc)) { + self::$_hostIs2chSc[$host] = (bool)preg_match('/\\.(2ch\\.sc)$/', $host); + } + return self::$_hostIs2chSc[$host]; + } + // }}} // {{{ header_nocache() diff --git a/lib/ShowThreadPc.php b/lib/ShowThreadPc.php index 5f7cc9290..d628add09 100644 --- a/lib/ShowThreadPc.php +++ b/lib/ShowThreadPc.php @@ -364,7 +364,7 @@ public function qRes($ares, $i) global $_conf; $resar = $this->thread->explodeDatLine($ares); - $name = $this->transName($resar[0]); + $name = $resar[0]; $mail = $resar[1]; if (($id = $this->thread->ids[$i]) !== null) { $idstr = 'ID:' . $id; @@ -375,6 +375,17 @@ public function qRes($ares, $i) } $msg = $this->transMsg($resar[3], $i); + // +Wiki:�u�����[�h + if (isset($GLOBALS['replaceWordCtl'])) { + $replaceWordCtl = $GLOBALS['replaceWordCtl']; + $name = $replaceWordCtl->replace('name', $this->thread, $ares, $i); + $mail = $replaceWordCtl->replace('mail', $this->thread, $ares, $i); + $date_id = $replaceWordCtl->replace('date', $this->thread, $ares, $i); + $msg = $replaceWordCtl->replace('msg', $this->thread, $ares, $i); + } + + $name = $this->transName($name); // ���OHTML�ϊ� + $tores = ''; if ($this->_matome) { diff --git a/lib/expack/tgrep/view.inc.php b/lib/expack/tgrep/view.inc.php index 8112cece5..9c93c96a0 100644 --- a/lib/expack/tgrep/view.inc.php +++ b/lib/expack/tgrep/view.inc.php @@ -161,7 +161,7 @@ function sf() { - + �Etitle; ?> ita; ?> tkey); ?> diff --git a/lib/wiki/ReplaceWordCtl.php b/lib/wiki/ReplaceWordCtl.php index 02396f040..7e75136e7 100644 --- a/lib/wiki/ReplaceWordCtl.php +++ b/lib/wiki/ReplaceWordCtl.php @@ -119,7 +119,7 @@ public function replace($cont, $aThread, $ares, $i) $mail = $resar[1]; $date_id = $resar[2]; $msg = $resar[3]; - + switch ($cont) { case 'name': $word = $name; @@ -169,19 +169,15 @@ public function replace($cont, $aThread, $ares, $i) ���ꎩ�̂ɐ��K�\���������Ă�����ǂ����悤�B �����I�Ɏg���̂�$i, $host, $bbs, $key, $date_id���炢��������Ȃ����낤���ǁB */ - $v['replace'] = str_replace ('$ttitle_hd', $aThread->ttitle_hd, $v['replace']); - $v['replace'] = str_replace ('$ttitle', $aThread->ttitle, $v['replace']); - $v['replace'] = str_replace ('$host', $aThread->host, $v['replace']); - $v['replace'] = str_replace ('$bbs', $aThread->bbs, $v['replace']); - $v['replace'] = str_replace ('$key', $aThread->key, $v['replace']); - // $v['replace'] = str_replace ('$name', $name, $v['replace']); - // $v['replace'] = str_replace ('$mail', $mail, $v['replace']); - // $v['replace'] = str_replace ('$date_id', $date_id, $v['replace']); - // $v['replace'] = str_replace ('$msg', $msg, $v['replace']); - $v['replace'] = str_replace ('$id_base64', base64_encode($id), $v['replace']); - $v['replace'] = str_replace ('$id', $id, $v['replace']); - $v['replace'] = str_replace ('$i', $i, $v['replace']); - + $v['replace'] = strtr($v['replace'], array( + '$ttitle_hd' => $aThread->ttitle_hd, + '$host' => $aThread->host, + '$bbs' => $aThread->bbs, + '$key' => $aThread->key, + '$id' => $id, + '$id_base64' => base64_encode($id), + '$i' => $i + )); $word = @preg_replace ('{'.$v['match'].'}', $v['replace'], $word); } diff --git a/rep2/dig2ch.php b/rep2/dig2ch.php index 87fc80681..6eb8e04f9 100644 --- a/rep2/dig2ch.php +++ b/rep2/dig2ch.php @@ -2,83 +2,90 @@ // {{{ dig2chsearch() function dig2chsearch($query) { - global $_conf; + global $_conf; - parse_str($query, $query_arry); + parse_str($query, $query_arry); - //$query_q = preg_replace('/(\s+)/' , '\+' ,$query_arry['q']); - $query_arry['q'] = urlencode($query_arry['q']); + //$query_q = preg_replace('/(\s+)/' , '\+' ,$query_arry['q']); + $query_arry['q'] = urlencode($query_arry['q']); - $client = new HTTP_Client(); - $client->setDefaultHeader('User-Agent', 'Mozilla/5.0 (Windows NT 6.4; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko'); - $code = $client->get($_conf['test.dig2ch_url'] . '?AndOr=' . $query_arry['AndOr'] . '&maxResult=' . $query_arry['maxResult'] . '&atLeast=1&Sort=' . $query_arry['Sort'] . '&Link=1&Bbs=all&924=' . $query_arry['924'] . '&json=1&keywords=' . $query_arry['q']); - if (PEAR::isError($code)) { - p2die($code->getMessage()); - } elseif ($code != 200) { - p2die("HTTP Error - {$code}"); - } - $response = $client->currentResponse(); + $client = new HTTP_Client(); + $client->setDefaultHeader('User-Agent', 'Mozilla/5.0 (Windows NT 6.4; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko'); + $code = $client->get($_conf['test.dig2ch_url'] . '?AndOr=' . $query_arry['AndOr'] . '&maxResult=' . $query_arry['maxResult'] . '&atLeast=1&Sort=' . $query_arry['Sort'] . '&Link=1&Bbs=all&924=' . $query_arry['924'] . '&json=1&keywords=' . $query_arry['q']); + if (PEAR::isError($code)) { + p2die($code->getMessage()); + } elseif ($code != 200) { + p2die("HTTP Error - {$code}"); + } + $response = $client->currentResponse(); + $body = $response['body']; // ����̎I�ʼn�����Q������������JSON��HTML�̃R�����g��������̂ł��̑΍� - $body = preg_replace("/<\!--.*-->/", "", $response['body']); + if (strpos($body,"/", "", $body); + } - $jsontest1 = json_decode($body, true); + $jsontest1 = json_decode($body, true); + unset($body); - //mb_convert_variables('SHIFT-JIS','UTF-8',$jsontest1); - $jsonerror = ""; - switch (json_last_error()) { - case JSON_ERROR_NONE: - $jsonerror = ' - No errors'; - break; - case JSON_ERROR_DEPTH: - $jsonerror = ' - Maximum stack depth exceeded'; - break; - case JSON_ERROR_STATE_MISMATCH: - $jsonerror = ' - Underflow or the modes mismatch'; - break; - case JSON_ERROR_CTRL_CHAR: - $jsonerror = ' - Unexpected control character found'; - break; - case JSON_ERROR_SYNTAX: - $jsonerror = ' - Syntax error, malformed JSON'; - break; - case JSON_ERROR_UTF8: - $jsonerror = ' - Malformed UTF-8 characters, possibly incorrectly encoded'; - break; - default: - $jsonerror = ' - Unknown error'; - break; - } - if ($jsontest1 === NULL) { - p2die("�������ʂ̎擾�Ɏ��s���܂���".$jsonerror); - } + //mb_convert_variables('SHIFT-JIS','UTF-8',$jsontest1); - foreach ($jsontest1[result] as $jsontest2) { + if ($jsontest1 === NULL) { + + $jsonerror = ""; + switch (json_last_error()) { + case JSON_ERROR_NONE: + $jsonerror = ' - No errors'; + break; + case JSON_ERROR_DEPTH: + $jsonerror = ' - Maximum stack depth exceeded'; + break; + case JSON_ERROR_STATE_MISMATCH: + $jsonerror = ' - Underflow or the modes mismatch'; + break; + case JSON_ERROR_CTRL_CHAR: + $jsonerror = ' - Unexpected control character found'; + break; + case JSON_ERROR_SYNTAX: + $jsonerror = ' - Syntax error, malformed JSON'; + break; + case JSON_ERROR_UTF8: + $jsonerror = ' - Malformed UTF-8 characters, possibly incorrectly encoded'; + break; + default: + $jsonerror = ' - Unknown error'; + break; + } + p2die("�������ʂ̎擾�Ɏ��s���܂���".$jsonerror); + } + + foreach ($jsontest1[result] as $jsontest2) { $result['threads'][$n1] = new stdClass; - $result['threads'][$n1]->title = $jsontest2[subject]; - $result['threads'][$n1]->host = $jsontest2[server]; - $result['threads'][$n1]->bbs = $jsontest2[bbs]; - $result['threads'][$n1]->tkey = $jsontest2[key]; - $result['threads'][$n1]->resnum = $jsontest2[resno]; - $result['threads'][$n1]->ita = $jsontest2[ita]; - $result['threads'][$n1]->dayres = $jsontest2[ikioi]; - $n1++; - } - $result['modified'] = isset($response['body']['date'])? $response['body']['date'] : ''; - $result['profile']['regex'] = '/(' . $jsontest1[query] .')/i'; - $result['profile']['hits'] = $jsontest1[found]; - $result['profile']['cm0'] = str_replace("a href=" , "a target=\"_blank\" href=", $jsontest1[cm0]); - if (strstr($result['profile']['cm0'] , "rounin")) { $result['profile']['cm0'] = str_replace("src=\"" , "src=\"http://dig.2ch.net", $result['profile']['cm0']);} - $result['profile']['cm0'] = str_replace("
    " , "", $result['profile']['cm0']); + $result['threads'][$n1]->title = $jsontest2[subject]; + $result['threads'][$n1]->host = $jsontest2[server]; + $result['threads'][$n1]->bbs = $jsontest2[bbs]; + $result['threads'][$n1]->tkey = $jsontest2[key]; + $result['threads'][$n1]->resnum = $jsontest2[resno]; + $result['threads'][$n1]->ita = $jsontest2[ita]; + $result['threads'][$n1]->dayres = $jsontest2[ikioi]; + $n1++; + } + $result['modified'] = isset($response['body']['date'])? $response['body']['date'] : ''; + $result['profile']['regex'] = '/(' . $jsontest1[query] .')/i'; + $result['profile']['hits'] = $jsontest1[found]; + $result['profile']['cm0'] = str_replace("a href=" , "a target=\"_blank\" href=", $jsontest1[cm0]); + if (strstr($result['profile']['cm0'] , "rounin")) { $result['profile']['cm0'] = str_replace("src=\"" , "src=\"http://dig.2ch.net", $result['profile']['cm0']);} + $result['profile']['cm0'] = str_replace("
    " , "", $result['profile']['cm0']); - $result['profile']['cm1'] = str_replace("a href=" , "a target=\"_blank\" href=", $jsontest1[cm1]); - if (strstr($result['profile']['cm1'] , "rounin")) { $result['profile']['cm1'] = str_replace("src=\"" , "src=\"http://dig.2ch.net", $result['profile']['cm1']);} - $result['profile']['cm1'] = str_replace("
    " , "", $result['profile']['cm1']); + $result['profile']['cm1'] = str_replace("a href=" , "a target=\"_blank\" href=", $jsontest1[cm1]); + if (strstr($result['profile']['cm1'] , "rounin")) { $result['profile']['cm1'] = str_replace("src=\"" , "src=\"http://dig.2ch.net", $result['profile']['cm1']);} + $result['profile']['cm1'] = str_replace("
    " , "", $result['profile']['cm1']); - $result['profile']['cm2'] = str_replace("a href=" , "a target=\"_blank\" href=", $jsontest1[cm2]); - if (strstr($result['profile']['cm2'] , "rounin")) { $result['profile']['cm2'] = str_replace("src=\"" , "src=\"http://dig.2ch.net", $result['profile']['cm2']);} - $result['profile']['cm2'] = str_replace("
    " , "", $result['profile']['cm2']); + $result['profile']['cm2'] = str_replace("a href=" , "a target=\"_blank\" href=", $jsontest1[cm2]); + if (strstr($result['profile']['cm2'] , "rounin")) { $result['profile']['cm2'] = str_replace("src=\"" , "src=\"http://dig.2ch.net", $result['profile']['cm2']);} + $result['profile']['cm2'] = str_replace("
    " , "", $result['profile']['cm2']); - return $result; + return $result; } From 0419bdb7ab399ad9344ad56f3905e1ac4e17dd46 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Mon, 23 Mar 2015 10:37:15 +0900 Subject: [PATCH 079/339] =?UTF-8?q?=E3=83=9D=E3=83=83=E3=83=97=E3=82=A2?= =?UTF-8?q?=E3=83=83=E3=83=97=E5=86=85=E3=81=AE=E3=83=AC=E3=82=B9=E3=82=A2?= =?UTF-8?q?=E3=83=B3=E3=82=AB=E3=83=BC=E3=83=AA=E3=83=B3=E3=82=AF=E5=85=88?= =?UTF-8?q?=E3=81=8C=E3=81=8A=E3=81=8B=E3=81=97=E3=81=8F=E3=81=AA=E3=82=8B?= =?UTF-8?q?=E4=B8=8D=E5=85=B7=E5=90=88=E3=82=92=E4=BF=AE=E6=AD=A3=E3=80=82?= =?UTF-8?q?=20+Wiki:=E7=BD=AE=E6=8F=9B=E3=83=AF=E3=83=BC=E3=83=89=E3=82=92?= =?UTF-8?q?=E3=83=9D=E3=83=83=E3=83=97=E3=82=A2=E3=83=83=E3=83=97=E3=81=AB?= =?UTF-8?q?=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B=E6=99=82=E3=81=AB=E3=83=9F?= =?UTF-8?q?=E3=82=B9=E3=81=A3=E3=81=A6=E3=81=84=E3=81=9F=E6=A8=A1=E6=A7=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ShowThreadPc.php | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/lib/ShowThreadPc.php b/lib/ShowThreadPc.php index d628add09..3784c1c31 100644 --- a/lib/ShowThreadPc.php +++ b/lib/ShowThreadPc.php @@ -363,17 +363,13 @@ public function qRes($ares, $i) { global $_conf; - $resar = $this->thread->explodeDatLine($ares); - $name = $resar[0]; - $mail = $resar[1]; + list($name, $mail, $date_id, $msg) = $this->thread->explodeDatLine($ares); if (($id = $this->thread->ids[$i]) !== null) { $idstr = 'ID:' . $id; - $date_id = str_replace($this->thread->idp[$i] . $id, $idstr, $resar[2]); + $date_id = str_replace($this->thread->idp[$i] . $id, $idstr, $date_id); } else { $idstr = null; - $date_id = $resar[2]; } - $msg = $this->transMsg($resar[3], $i); // +Wiki:�u�����[�h if (isset($GLOBALS['replaceWordCtl'])) { @@ -385,6 +381,7 @@ public function qRes($ares, $i) } $name = $this->transName($name); // ���OHTML�ϊ� + $msg = $this->transMsg($msg, $i); // ���b�Z�[�WHTML�ϊ� $tores = ''; From a3ce5857fd3f2bfd2afb03acb79f8b8c4cf01544 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Mon, 23 Mar 2015 11:13:35 +0900 Subject: [PATCH 080/339] =?UTF-8?q?=E3=83=AC=E3=82=B9=E3=82=92=E3=83=9D?= =?UTF-8?q?=E3=83=83=E3=83=97=E3=82=A2=E3=83=83=E3=83=97(quote=5Fres=5Fvie?= =?UTF-8?q?w)=E3=81=8C=E7=84=A1=E5=8A=B9=E3=81=AA=E3=81=A8=E3=81=8D?= =?UTF-8?q?=E3=81=AB=E5=AE=9F=E6=B3=81=E3=83=A2=E3=83=BC=E3=83=89=E3=81=AE?= =?UTF-8?q?ID=E8=89=B2=E3=81=A5=E3=81=91(coloredid)=E3=81=8C=E5=8A=B9?= =?UTF-8?q?=E3=81=8B=E3=81=AA=E3=81=84=E4=B8=8D=E5=85=B7=E5=90=88=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=20=E3=83=AC=E3=82=B9=E3=82=92HTML=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=8F=9B=E3=81=99=E3=82=8B=E9=9A=9B=E3=81=AB=E3=83=AF?= =?UTF-8?q?=E3=83=BC=E3=83=89=E7=BD=AE=E6=8F=9B=E3=81=8C=E6=9C=89=E5=8A=B9?= =?UTF-8?q?=E3=81=A0=E3=81=A8explodeDatLine=E3=81=8C=E5=BF=85=E8=A6=81?= =?UTF-8?q?=E4=BB=A5=E4=B8=8A=E3=81=AB=E5=AE=9F=E8=A1=8C=E3=81=95=E3=82=8C?= =?UTF-8?q?=E3=82=8B=E4=B8=8D=E5=85=B7=E5=90=88=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ShowThreadPc.php | 34 ++++++++++++----------- lib/live/live_ShowThreadLive.php | 46 ++++++++++---------------------- 2 files changed, 32 insertions(+), 48 deletions(-) diff --git a/lib/ShowThreadPc.php b/lib/ShowThreadPc.php index 3784c1c31..a13ea0b63 100644 --- a/lib/ShowThreadPc.php +++ b/lib/ShowThreadPc.php @@ -136,14 +136,6 @@ public function transRes($ares, $i, $pattern = null) { global $_conf, $STYLE, $mae_msg, $highlight_msgs, $highlight_chain_nums; - list($name, $mail, $date_id, $msg) = $this->thread->explodeDatLine($ares); - if (($id = $this->thread->ids[$i]) !== null) { - $idstr = 'ID:' . $id; - $date_id = str_replace($this->thread->idp[$i] . $id, $idstr, $date_id); - } else { - $idstr = null; - } - // +Wiki:�u�����[�h if (isset($GLOBALS['replaceWordCtl'])) { $replaceWordCtl = $GLOBALS['replaceWordCtl']; @@ -151,6 +143,15 @@ public function transRes($ares, $i, $pattern = null) $mail = $replaceWordCtl->replace('mail', $this->thread, $ares, $i); $date_id = $replaceWordCtl->replace('date', $this->thread, $ares, $i); $msg = $replaceWordCtl->replace('msg', $this->thread, $ares, $i); + } else { + list($name, $mail, $date_id, $msg) = $this->thread->explodeDatLine($ares); + } + + if (($id = $this->thread->ids[$i]) !== null) { + $idstr = 'ID:' . $id; + $date_id = str_replace($this->thread->idp[$i] . $id, $idstr, $date_id); + } else { + $idstr = null; } // +live (live.bbs_noname) �p @@ -363,14 +364,6 @@ public function qRes($ares, $i) { global $_conf; - list($name, $mail, $date_id, $msg) = $this->thread->explodeDatLine($ares); - if (($id = $this->thread->ids[$i]) !== null) { - $idstr = 'ID:' . $id; - $date_id = str_replace($this->thread->idp[$i] . $id, $idstr, $date_id); - } else { - $idstr = null; - } - // +Wiki:�u�����[�h if (isset($GLOBALS['replaceWordCtl'])) { $replaceWordCtl = $GLOBALS['replaceWordCtl']; @@ -378,6 +371,15 @@ public function qRes($ares, $i) $mail = $replaceWordCtl->replace('mail', $this->thread, $ares, $i); $date_id = $replaceWordCtl->replace('date', $this->thread, $ares, $i); $msg = $replaceWordCtl->replace('msg', $this->thread, $ares, $i); + } else { + list($name, $mail, $date_id, $msg) = $this->thread->explodeDatLine($ares); + } + + if (($id = $this->thread->ids[$i]) !== null) { + $idstr = 'ID:' . $id; + $date_id = str_replace($this->thread->idp[$i] . $id, $idstr, $date_id); + } else { + $idstr = null; } $name = $this->transName($name); // ���OHTML�ϊ� diff --git a/lib/live/live_ShowThreadLive.php b/lib/live/live_ShowThreadLive.php index 64815d13c..248369e1b 100644 --- a/lib/live/live_ShowThreadLive.php +++ b/lib/live/live_ShowThreadLive.php @@ -33,14 +33,6 @@ public function transRes($ares, $i, $pattern = null) { global $_conf, $STYLE, $mae_msg; - list($name, $mail, $date_id, $msg) = $this->thread->explodeDatLine($ares); - if (($id = $this->thread->ids[$i]) !== null) { - $idstr = 'ID:' . $id; - $date_id = str_replace($this->thread->idp[$i] . $id, $idstr, $date_id); - } else { - $idstr = null; - } - // +Wiki:�u�����[�h if (isset($GLOBALS['replaceWordCtl'])) { $replaceWordCtl = $GLOBALS['replaceWordCtl']; @@ -48,6 +40,15 @@ public function transRes($ares, $i, $pattern = null) $mail = $replaceWordCtl->replace('mail', $this->thread, $ares, $i); $date_id = $replaceWordCtl->replace('date', $this->thread, $ares, $i); $msg = $replaceWordCtl->replace('msg', $this->thread, $ares, $i); + } else { + list($name, $mail, $date_id, $msg) = $this->thread->explodeDatLine($ares); + } + + if (($id = $this->thread->ids[$i]) !== null) { + $idstr = 'ID:' . $id; + $date_id = str_replace($this->thread->idp[$i] . $id, $idstr, $date_id); + } else { + $idstr = null; } $tores = ''; @@ -76,29 +77,6 @@ public function transRes($ares, $i, $pattern = null) $msg_class .= ' ActiveMona'; } - //============================================================= - // ���X���|�b�v�A�b�v�\�� - //============================================================= - if ($_conf['quote_res_view']) { - $quote_res_nums = $this->checkQuoteResNums($i, $name, $msg); - - foreach ($quote_res_nums as $rnv) { - if (!isset($this->_quote_res_nums_done[$rnv])) { - $this->_quote_res_nums_done[$rnv] = true; - if (isset($this->thread->datlines[$rnv-1])) { - if ($this->_matome) { - $qres_id = "t{$this->_matome}qr{$rnv}"; - } else { - $qres_id = "qr{$rnv}"; - } - $ds = $this->qRes($this->thread->datlines[$rnv-1], $rnv); - $onPopUp_at = " onmouseover=\"showResPopUp('{$qres_id}',event)\" onmouseout=\"hideResPopUp('{$qres_id}')\""; - $rpop .= "
    \n{$ds}
    \n"; - } - } - } - } - //============================================================= // �܂Ƃ߂ďo�� //============================================================= @@ -106,10 +84,14 @@ public function transRes($ares, $i, $pattern = null) $name = $this->transName($name); // ���OHTML�ϊ� $msg = $this->transMsg($msg, $i); // ���b�Z�[�WHTML�ϊ� - // BE�v���t�@�C�������N�ϊ� $date_id = $this->replaceBeId($date_id, $i); + // ID�t�B���^ + if ($_conf['flex_idpopup'] == 1 && $id && $this->thread->idcount[$id] > 1) { + $date_id = str_replace($idstr, $this->idFilter($idstr, $id), $date_id); + } + // HTML�|�b�v�A�b�v if ($_conf['iframe_popup']) { $date_id = preg_replace_callback("{((\?#*)|(Lv\.\d+))}", array($this, 'iframePopupCallback'), $date_id); From 24e8da597d5970f51cc92f46e5c632887ef9dd8b Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Mon, 23 Mar 2015 11:26:30 +0900 Subject: [PATCH 081/339] =?UTF-8?q?=E6=90=BA=E5=B8=AF=E5=90=91=E3=81=91IC2?= =?UTF-8?q?=E3=81=AEimg=E3=82=BF=E3=82=B0=E3=81=AB=E3=82=B5=E3=82=A4?= =?UTF-8?q?=E3=82=BA=E6=8C=87=E5=AE=9A=E3=82=92=E4=BB=98=E3=81=91=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ShowThreadK.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/ShowThreadK.php b/lib/ShowThreadK.php index d346c3eb3..549c8517a 100644 --- a/lib/ShowThreadK.php +++ b/lib/ShowThreadK.php @@ -1093,7 +1093,7 @@ public function plugin_imageCache2($url, $purl, $str) } else { $prv_onload = ''; } - $img_str = ""; + $img_str = ""; } $inline_preview_done = true; } else { @@ -1137,7 +1137,7 @@ public function plugin_imageCache2($url, $purl, $str) // �C�����C���v���r���[���L���ŁA�T���l�C���\���������ȓ��Ȃ� if ($this->thumbnailer->ini['General']['inline'] == 1 && $inline_preview_flag) { $rank_str = ($rank !== null) ? '&rank=' . $rank : ''; - $img_str = "img_memo_query}{$rank_str}\">"; + $img_str = "img_memo_query}{$rank_str}\" width=\"{$prvw_size[0]}\" height=\"{$prvw_size[1]}\">"; $inline_preview_done = true; } else { $img_url .= $this->img_memo_query; @@ -1288,7 +1288,7 @@ public function plugin_replaceImageUrl($url, $purl, $str) } else { $prv_onload = ''; } - $img_str = ""; + $img_str = ""; } $inline_preview_done = true; } else { @@ -1333,7 +1333,7 @@ public function plugin_replaceImageUrl($url, $purl, $str) // �C�����C���v���r���[���L���ŁA�T���l�C���\���������ȓ��Ȃ� if ($this->thumbnailer->ini['General']['inline'] == 1 && $inline_preview_flag) { $rank_str = ($rank !== null) ? '&rank=' . $rank : ''; - $img_str = "img_memo_query}{$rank_str}{$ref_en}\">"; + $img_str = "img_memo_query}{$rank_str}{$ref_en}\" width=\"{$prvw_size[0]}\" height=\"{$prvw_size[1]}\">"; $inline_preview_done = true; } else { $img_url .= $this->img_memo_query; From 4163e37eda6b37ddaf743659293b700f48bbe346 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Mon, 23 Mar 2015 23:41:17 +0900 Subject: [PATCH 082/339] =?UTF-8?q?lib/ThreadRead.php=E3=82=92=E3=81=84?= =?UTF-8?q?=E3=82=8D=E3=81=84=E3=82=8D=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 246 +++++++++++++++++++++++---------------------- 1 file changed, 125 insertions(+), 121 deletions(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 485886280..7cf16338a 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -28,7 +28,7 @@ class ThreadRead extends Thread { // }}} // {{{ constructor - + /** * �R���X�g���N�^ */ @@ -36,16 +36,16 @@ public function __construct() { parent::__construct (); $this->getdat_error_msg_ht = ""; } - + // }}} // {{{ downloadDat() - + /** * DAT���_�E�����[�h���� */ public function downloadDat() { global $_conf; - + // �܂�BBS if (P2Util::isHostMachiBbs ( $this->host )) { return DownloadDatMachiBbs::invoke ( $this ); @@ -55,12 +55,12 @@ public function downloadDat() { include P2_LIB_DIR . '/read_shitaraba.inc.php'; } return shitarabaDownload ( $this ); - + // 2ch�n } else { $this->getDatBytesFromLocalDat (); // $aThread->length ��set $pinktest = "/\w+\.bbspink.com/"; - + // 2ch bbspink���ǂ� if (P2Util::isHost2chs ( $this->host ) && ! empty ( $_GET ['maru'] )) { // ���O�C�����ĂȂ���� or ���O�C����A24���Ԉȏ�o�߂��Ă����玩���ă��O�C�� @@ -74,17 +74,17 @@ public function downloadDat() { return false; } } - + include $_conf ['sid2ch_php']; return $this->_downloadDat2chMaru ( $uaMona, $SID2ch ); - + // 2ch bbspink �����^�|�ǂ� } elseif (P2Util::isHost2chs ( $this->host ) && ! empty ( $_GET ['moritapodat'] ) && $_conf ['p2_2ch_mail'] && $_conf ['p2_2ch_pass']) { if (! array_key_exists ( 'csrfid', $_GET ) || $this->_getCsrfIdForMoritapoDat () != $_GET ['csrfid']) { p2die ( '�s���ȃ��N�G�X�g�ł�' ); } return $this->_downloadDat2chMoritapo (); - + // 2ch�̉ߋ����O�q�ɓǂ� } elseif (! empty ( $_GET ['kakolog'] ) && ! empty ( $_GET ['kakoget'] )) { if ($_GET ['kakoget'] == 1) { @@ -93,13 +93,13 @@ public function downloadDat() { $ext = '.dat'; } return $this->_downloadDat2chKako ( $_GET ['kakolog'], $ext ); - + // 2ch or 2ch�݊� } elseif (P2Util::isHost2chs ( $this->host ) && ! empty ( $_GET ['shirokuma'] )) { - return $this->_downloadDat2chMaru ( $uaMona, $SID2ch, 'shirokuma' ); + return $this->_downloadDat2chMaru ( $uaMona, $SID2ch, true); // 2ch ��API�o�R�ŗ��Ƃ� } elseif (P2Util::isHost2chs ( $this->host ) && $_conf ['2chapi_use'] == 1 && empty ( $_GET ['olddat'] )) { - + // ���O�C�����ĂȂ���� or ���O�C����A�ݒ肵�����Ԍo�߂��Ă����玩���ă��O�C�� if (! file_exists ( $_conf ['sid2chapi_php'] ) || ! empty ( $_REQUEST ['relogin2chapi'] ) || (filemtime ( $_conf ['sid2chapi_php'] ) < time () - 60 * 60 * $_conf ['2chapi_interval'])) { if (! function_exists ( 'authenticate_2chapi' )) { @@ -111,7 +111,7 @@ public function downloadDat() { return false; } } - + include $_conf ['sid2chapi_php']; return $this->_downloadDat2chAPI ( $SID2chAPI, $this->length ); } else { @@ -121,10 +121,10 @@ public function downloadDat() { } } } - + // }}} // {{{ _downloadDat2chAPI() - + /** * 2chAPI�� DAT �������_�E�����[�h���� * @@ -133,89 +133,89 @@ public function downloadDat() { protected function _downloadDat2chAPI($sid, $from_bytes) { global $_conf; global $debug; - + $AppKey = $_conf ['2chapi_appkey']; $AppName = $_conf ['2chapi_appname']; $HMKey = $_conf ['2chapi_hmkey']; $ReadUA = sprintf($_conf['2chapi_ua.read'],$AppName); - + if (! ($this->host && $this->bbs && $this->key)) { return false; } - + // >>1�v���r���[�̎��͍����擾���Ȃ��ėǂ��̂ŏ��true(�V������)��Ԃ� if (is_readable ( $this->keydat ) && ! empty ( $_GET ['one'] )) { return true; } - + if ($sid == '') { return false; } - + $from_bytes = intval ( $from_bytes ); - + if ($from_bytes == 0) { $zero_read = true; } else { $zero_read = false; $from_bytes = $from_bytes - 1; } - + $serverName = explode ( '.', $this->host ); // $url = "http://{$this->host}/{$this->bbs}/dat/{$this->key}.dat"; // $url="http://news2.2ch.net/test/read.cgi?bbs=newsplus&key=1038486598"; $url = 'https://api.2ch.net/v1/' . $serverName [0] . '/' . $this->bbs . '/' . $this->key; $message = '/v1/' . $serverName [0] . '/' . $this->bbs . '/' . $this->key . $sid . $AppKey; $HB = hash_hmac ( "sha256", $message, $HMKey ); - + $headers = "User-Agent: ${ReadUA}\r\n"; $headers .= "Connection: close\r\n"; $headers .= "Content-Type: application/x-www-form-urlencoded\r\n"; - + $purl = parse_url ( $url ); // URL���� - + if (! empty ( $_GET ['one'] )) { // >>1�v���r���[�̎��̓T�[�o�[�ɍŏ��̕����������� $headers .= "Range: bytes=0-8192\r\n"; } elseif (! $zero_read) { $headers .= "Range: bytes={$from_bytes}-\r\n"; } - + if ($this->modified) { $headers .= "If-Modified-Since: {$this->modified}\r\n"; } - + // Basic�F�ؗp�̃w�b�_ if (isset ( $purl ['user'] ) && isset ( $purl ['pass'] )) { $headers .= "Authorization: Basic " . base64_encode ( $purl ['user'] . ":" . $purl ['pass'] ) . "\r\n"; } - + $post_values = array ( 'sid' => $sid, 'hobo' => $HB, - 'appkey' => $AppKey + 'appkey' => $AppKey ); - + $options ['http'] = array ( 'method' => 'POST', 'header' => $headers, 'ignore_errors' => true, - 'content' => http_build_query ( $post_values ) + 'content' => http_build_query ( $post_values ) ); - + // �v���L�V if ($_conf ['proxy_use']) { $options ['http'] += array ( - 'proxy' => 'tcp://' . $_conf ['proxy_host'] . ":" . $_conf ['proxy_port'] + 'proxy' => 'tcp://' . $_conf ['proxy_host'] . ":" . $_conf ['proxy_port'] ); $options ['http'] += array ( - 'request_fulluri' => true + 'request_fulluri' => true ); $options ['ssl'] = array ( - 'SNI_enabled' => false + 'SNI_enabled' => false ); } - + // WEB�T�[�o�֐ڑ� $fp = @fopen ( $url, 'r', false, stream_context_create ( $options ) ); if (! $fp) { @@ -224,14 +224,14 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { return false; } stream_set_timeout ( $fp, $_conf ['http_read_timeout'], 0 ); - + $code = null; $meta = stream_get_meta_data ( $fp ); foreach ( $meta ['wrapper_data'] as $l ) { // ex) HTTP/1.1 304 Not Modified if (preg_match ( '@^HTTP/1\\.\\d (\\d+) (.+)@i', $l, $matches )) { $code = $matches [1]; - + if ($code == '200' || $code == '206') { // Partial Content ; } elseif ($code == '302') { // Found @@ -261,28 +261,28 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { return $this->_downloadDat2chNotFound ( $code ); } } - + if ($zero_read) { if (preg_match ( '/^Content-Length: ([0-9]+)/i', $l, $matches )) { $this->onbytes = intval ( $matches [1] ); } } else { - + if (preg_match ( '@^Content-Range: bytes ([^/]+)/([0-9]+)@i', $l, $matches )) { $this->onbytes = intval ( $matches [2] ); } } - + if (preg_match ( '/^Last-Modified: (.+)/i', $l, $matches )) { // echo $matches[1] . '
    '; //debug $this->modified = $matches [1]; } } - + $body = ''; - + if ($code == '200' || $code == '206') { - + while ( ! p2_stream_eof ( $fp, $timed_out ) ) { // >>1���v���r���[����p if (! empty ( $_GET ['one'] )) { @@ -295,7 +295,7 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { $body .= fread ( $fp, 4096 ); // �ʏ�擾�͂��ځ[�񔻒���s�����߂������ŕۑ����� } } - + if ($timed_out) { self::_pushInfoReadTimedOut ( $url ); $this->diedat = true; @@ -325,8 +325,7 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { } elseif (strpos ( $firstmsg, "�Q�����˂� ��<><>2015/03/13(��) 00:00:00.00 ID:????????<> 3��13�����Q" ) === 0) { fclose ( $fp ); $this->getdat_error_msg_ht .= "

    rep2 error: API�o�R�ł̃X���b�h�擾�Ɏ��s���܂����B
    rep2 info: �X���b�h�����݂��Ȃ����ߋ����O�Ɋi�[����Ă��܂��B

    "; - $marutori_ht = " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&maru=true{$_conf['k_at_a']}\">��ID��rep2�Ɏ�荞��]"; - $marutori_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&shirokuma=true{$_conf['k_at_a']}\">offlaw�o�R��rep2�Ɏ�荞��]"; + $marutori_ht = $this->_generateMarutoriLink(); $plugin_ht = $this->_generateWikiDatLink (); $moritori_ht = $this->_generateMoritapoDatLink (); $this->getdat_error_msg_ht .= "{$marutori_ht}{$moritori_ht}{$plugin_ht}"; @@ -334,7 +333,7 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { return false; } unset ( $firstmsg ); - + // �����̉��s�ł��ځ[��`�F�b�N if (! $zero_read) { if (substr ( $body, 0, 1 ) != "\n") { @@ -346,13 +345,13 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { } $body = substr ( $body, 1 ); } - + $file_append = ($zero_read) ? 0 : FILE_APPEND; - + if (FileCtl::file_write_contents ( $this->keydat, $body, $file_append ) === false) { p2die ( 'cannot write file.' ); } - + // $GLOBALS['debug'] && $GLOBALS['profiler']->enterSection("dat_size_check"); // �擾��T�C�Y�`�F�b�N if ($zero_read == false && $this->onbytes) { @@ -364,7 +363,7 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { P2Util::pushInfoHtml ( "

    rep2 info: {$this->onbytes}/{$this->length} �t�@�C���T�C�Y���ςȂ̂ŁAdat���Ď擾

    " ); // $GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection("dat_size_check"); return $this->_downloadDat2chAPI ( $sid, 0 ); // dat�T�C�Y�͕s���B�S����蒼���B - + // �T�C�Y�������Ȃ炻�̂܂� } elseif ($this->onbytes == $this->length) { fclose ( $fp ); @@ -378,7 +377,7 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { fclose ( $fp ); return $this->_downloadDat2chNotFound ( $code ); } - + fclose ( $fp ); if ($timed_out) { self::_pushInfoReadTimedOut ( $url ); @@ -402,20 +401,20 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { function _freadHttpHeader($fp) { $h = array(); - + while (!feof($fp)) { $l = fgets($fp, 8192); - + // ex) HTTP/1.1 304 Not Modified if (preg_match("|HTTP/1\.\d (\d+) (.+)\r\n|", $l, $matches)) { $h['code'] = $matches[1]; $h['message'] = $matches[2]; $h['HTTP'] = rtrim($l); } - + if (preg_match('/^(.+?): (.+)\r\n/', $l, $matches)) { $h['headers'][$matches[1]] = $matches[2]; - + } elseif ($l == "\r\n") { if (!isset($h['code'])) { return false; @@ -423,7 +422,7 @@ function _freadHttpHeader($fp) return $h; } } - + return false; } // }}} @@ -436,7 +435,7 @@ function _freadHttpHeader($fp) */ function _pushInfoHtmlFreadHttpHeaderError($url) { - P2Util::pushInfoHtml(sprintf('

    p2 info: %s ����w�b�_���X�|���X���擾�ł��܂���ł����B

    ',$url)); + P2Util::pushInfoHtml(sprintf('

    p2 info: %s ����w�b�_���X�|���X���擾�ł��܂���ł����B

    ',self::_urlToAnchor($url))); } // }}} // {{{ _getOnbytesFromHeader() @@ -456,7 +455,7 @@ function _getOnbytesFromHeader($headers, $zero_read = true) return $onbytes = $matches[1]; } } - + } else { if (isset($headers['Content-Range'])) { if (preg_match("/^bytes ([^\/]+)\/([0-9]+)/", $headers['Content-Range'], $matches)) { @@ -464,7 +463,7 @@ function _getOnbytesFromHeader($headers, $zero_read = true) } } } - + return false; } // }}} @@ -567,7 +566,7 @@ protected function _downloadDat2ch($from_bytes) fputs($fp, $request); $code = null; - + // HTTP�w�b�_���X�|���X���擾���� $h = $this->_freadHttpHeader($fp); if ($h === false) { @@ -577,12 +576,12 @@ protected function _downloadDat2ch($from_bytes) return false; } $code = $h['code']; - + if ($code == '200' || $code == '206') { // Partial Content ; - + } elseif ($code == '302') { // Found - + // �z�X�g�̈ړ]��ǐ� $new_host = BbsMap::getCurrentHost($this->host, $this->bbs); if ($new_host != $this->host) { @@ -594,37 +593,37 @@ protected function _downloadDat2ch($from_bytes) fclose($fp); return $this->_downloadDat2chNotFound($code); } - + } elseif ($code == '304') { // Not Modified fclose($fp); $this->isonline = true; return '304 Not Modified'; - + } elseif ($code == '416') { // Requested Range Not Satisfiable //echo "���ځ[�񌟏o"; fclose($fp); $this->onbytes = 0; $this->modified = null; return $this->_downloadDat2ch(0); // ���ځ[�񌟏o�B�S����蒼���B - + } else { fclose($fp); return $this->_downloadDat2chNotFound($code); } - + $r = $this->_getOnbytesFromHeader($h['headers'], $zero_read); if ($r !== false) { $this->onbytes = $r; } - + if (isset($h['headers']['Last-Modified'])) { $this->modified = $h['headers']['Last-Modified']; } - + // body��ǂ� $body = ''; if ($code == '200' || $code == '206') { - + while (!p2_stream_eof($fp, $timed_out)) { //>>1���v���r���[����p if (!empty($_GET['one'])) { @@ -637,14 +636,14 @@ protected function _downloadDat2ch($from_bytes) $body .= fread($fp, 4096); //�ʏ�擾�͂��ځ[�񔻒���s�����߂������ŕۑ����� } } - + if ($timed_out) { self::_pushInfoReadTimedOut($url); $this->diedat = true; fclose($fp); return false; } - + //�z�X�g��2ch�̎���DAT�𗘗p�ł��Ȃ��|�̃��b�Z�[�W���o����G���[�Ƃ���iDAT�j���΍�j if (P2Util::isHost2chs($this->host)) { @@ -657,7 +656,7 @@ protected function _downloadDat2ch($from_bytes) } unset($firstmsg); } - + // �����̉��s�ł��ځ[��`�F�b�N if (!$zero_read) { if (substr($body, 0, 1) != "\n") { @@ -669,13 +668,13 @@ protected function _downloadDat2ch($from_bytes) } $body = substr($body, 1); } - + $file_append = ($zero_read) ? 0 : FILE_APPEND; - + if (FileCtl::file_write_contents($this->keydat, $body, $file_append) === false) { p2die('cannot write file.'); } - + //$GLOBALS['debug'] && $GLOBALS['profiler']->enterSection("dat_size_check"); // �擾��T�C�Y�`�F�b�N if ($zero_read == false && $this->onbytes) { @@ -687,7 +686,7 @@ protected function _downloadDat2ch($from_bytes) P2Util::pushInfoHtml("

    rep2 info: {$this->onbytes}/{$this->length} �t�@�C���T�C�Y���ςȂ̂ŁAdat���Ď擾

    "); //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection("dat_size_check"); return $this->_downloadDat2ch(0); //dat�T�C�Y�͕s���B�S����蒼���B - + // �T�C�Y�������Ȃ炻�̂܂� } elseif ($this->onbytes == $this->length) { fclose($fp); @@ -739,11 +738,11 @@ protected function _downloadDat2chNotFound($code = null) * * @param string $uaMona * @param string $SID2ch - * @param string $shirokuma + * @param bool $shirokuma true�Ȃ�offlaw2�Ŏ擾 * @return bool * @see lib/login2ch.inc.php */ - protected function _downloadDat2chMaru($uaMona, $SID2ch, $shirokuma) + protected function _downloadDat2chMaru($uaMona, $SID2ch, $shirokuma = false) { global $_conf; @@ -816,7 +815,7 @@ protected function _downloadDat2chMaru($uaMona, $SID2ch, $shirokuma) $chunked = false; $is_gzip = false; $start_here = false; - + // HTTP�w�b�_���X�|���X���擾���� $h = $this->_freadHttpHeader($fp); if ($h === false) { @@ -825,11 +824,11 @@ protected function _downloadDat2chMaru($uaMona, $SID2ch, $shirokuma) $this->diedat = true; return false; } - + // {{{ HTTP�R�[�h���`�F�b�N - + $code = $h['code']; - + if ($code == '200') { ; } elseif ($code == '304') { @@ -840,7 +839,7 @@ protected function _downloadDat2chMaru($uaMona, $SID2ch, $shirokuma) fclose($fp); return $this->_downloadDat2chMaruNotFound(); } - + if (isset($h['headers']['Content-Encoding'])) { if (preg_match("/^(x-)?gzip/", $h['headers']['Content-Encoding'], $matches)) { $isGzip = true; @@ -861,18 +860,18 @@ protected function _downloadDat2chMaru($uaMona, $SID2ch, $shirokuma) } if ($code == '200') { - + while (!p2_stream_eof($fp, $timed_out)) { $body .= fread($fp, 4096); } - + if ($timed_out) { self::_pushInfoReadTimedOut($url); //$this->diedat = true; fclose($fp); return false; } - + // gzip���k�Ȃ� if ($is_gzip) { $body = self::_decodeGzip($body, $url); @@ -882,11 +881,11 @@ protected function _downloadDat2chMaru($uaMona, $SID2ch, $shirokuma) return false; } } - + if (FileCtl::file_write_contents($this->keydat, $body) === false) { p2die('cannot write file. downloadDat2chMaru()'); } - + // �N���[�j���O ===== if ($marudatlines = FileCtl::file_read_lines($this->keydat)) { if (!$shirokuma) { @@ -909,13 +908,13 @@ protected function _downloadDat2chMaru($uaMona, $SID2ch, $shirokuma) p2die('cannot write file. downloadDat2chMaru()'); } } - + } else { // dat.gz�͂Ȃ������Ɣ��f fclose($fp); return $this->_downloadDat2chMaruNotFound(); } - + fclose($fp); //$this->isonline = true; //$this->datochiok = 1; @@ -933,12 +932,11 @@ protected function _downloadDat2chMaruNotFound() global $_conf; // �ă`�������W���܂��Ȃ�A�ă`�������W����BSID���ύX����Ă��܂��Ă���ꍇ�����鎞�̂��߂̎����`�������W�B - if (empty($_REQUEST['relogin2ch'])) { + if (empty($_REQUEST['relogin2ch']) && empty($_REQUEST['shirokuma'])) { $_REQUEST['relogin2ch'] = true; return $this->downloadDat(); } else { - $remarutori_ht = " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&maru=true&relogin2ch=true{$_conf['k_at_a']}\">�Ď擾�����݂�]"; - $remarutori_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&shirokuma=true{$_conf['k_at_a']}\">offlaw�o�R��rep2�Ɏ�荞��]"; + $remarutori_ht = $this->_generateMarutoriLink(true); $moritori_ht = $this->_generateMoritapoDatLink(); $this->getdat_error_msg_ht .= "

    rep2 info: ��ID�ł̃X���b�h�擾�Ɏ��s���܂����B{$remarutori_ht}{$moritori_ht}

    "; $this->diedat = true; @@ -1009,7 +1007,7 @@ protected function _downloadDat2chKako($uri, $ext) $code = null; $is_gzip = false; $start_here = false; - + // HTTP�w�b�_���X�|���X���擾���� $h = $this->_freadHttpHeader($fp); if ($h === false) { @@ -1018,11 +1016,11 @@ protected function _downloadDat2chKako($uri, $ext) $this->diedat = true; return false; } - + // {{{ HTTP�R�[�h���`�F�b�N - + $code = $h['code']; - + if ($code == '200') { ; } elseif ($code == '304') { @@ -1033,7 +1031,7 @@ protected function _downloadDat2chKako($uri, $ext) fclose($fp); return $this->_downloadDat2chMaruNotFound(); } - + if (isset($h['headers']['Content-Encoding'])) { if (preg_match("/^(x-)?gzip/", $h['headers']['Content-Encoding'], $matches)) { $isGzip = true; @@ -1041,18 +1039,18 @@ protected function _downloadDat2chKako($uri, $ext) } if ($code == '200') { - + while (!p2_stream_eof($fp, $timed_out)) { $body .= fread($fp, 4096); } - + if ($timed_out) { self::_pushInfoReadTimedOut($url); $this->diedat = true; fclose($fp); return false; } - + if ($is_gzip) { $body = self::_decodeGzip($body, $url); if ($body === null) { @@ -1061,7 +1059,7 @@ protected function _downloadDat2chKako($uri, $ext) return false; } } - + if (FileCtl::file_write_contents($this->keydat, $body) === false) { p2die('cannot write file. downloadDat2chKako()'); } @@ -1190,19 +1188,7 @@ public function get2chDatError($code = null) // if ($reason === 'datochi' || preg_match($kakosoko_match, $read_response_html, $matches) || preg_match($kakosoko_match2, $read_response_html, $matches)) { $dat_response_status = "���̃X���b�h�͉ߋ����O�q�ɂɊi�[����Ă��܂��B"; - //if (file_exists($_conf['idpw2ch_php']) || file_exists($_conf['sid2ch_php'])) { - //if ( preg_match($kakosoko_match2, $read_response_html, $matches)) { - $marutori_ht = " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&maru=true{$_conf['k_at_a']}\">��ID��rep2�Ɏ�荞��]"; - //$kakolog_url_en = rawurlencode("http://{$this->host}/{$this->bbs}/kako/".substr($this->key, 0, 4)."/".substr($this->key, 0, 5)."/{$this->key}"); - //$read_kako_url = "{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&kakolog={$kakolog_url_en}&kakoget=1"; - //$marutori_ht .= "

    2ch info - ����! �ߋ����O�q�ɂŁA�X���b�h {$matches[3]}.html �𔭌����܂����B [rep2�Ɏ�荞��œǂ�]

    "; - //} else { - $marutori_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&shirokuma=true{$_conf['k_at_a']}\">offlaw�o�R��rep2�Ɏ�荞��]"; - //} - //} else { - // $marutori_ht = " [��ID���O�C��]"; - //} - + $marutori_ht = $this->_generateMarutoriLink(); $plugin_ht = $this->_generateWikiDatLink(); $moritori_ht = $this->_generateMoritapoDatLink(); $dat_response_msg = "

    2ch info - ���̃X���b�h�͉ߋ����O�q�ɂɊi�[����Ă��܂��B{$marutori_ht}{$moritori_ht}{$plugin_ht}

    "; @@ -1224,7 +1210,7 @@ public function get2chDatError($code = null) } elseif (preg_match($waithtml_match, $read_response_html, $matches)) { $dat_response_status = "����! �X���b�h��html�������̂�҂��Ă���悤�ł��B"; - $marutori_ht = " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&maru=true{$_conf['k_at_a']}\">��ID��rep2�Ɏ�荞��]"; + $marutori_ht = $this->_generateMarutoriLink(); $moritori_ht = $this->_generateMoritapoDatLink(); $dat_response_msg = "

    2ch info - ����! �X���b�h��html�������̂�҂��Ă���悤�ł��B{$marutori_ht}{$moritori_ht}

    "; @@ -1757,7 +1743,7 @@ protected function _downloadDat2chMoritapoNotFound() $ls_ht = p2h($this->ls); $query_ht = p2h("host={$host_en}&bbs={$bbs_en}&key={$key_en}&ls={$ls_en}&maru=true"); - $marutori_ht = " [��ID��rep2�Ɏ�荞��]"; + $marutori_ht = $this->_generateMarutoriLink(); if ($hosts = $this->scanOriginalHosts()) { $hostlist_ht = '
    dat���瑼�̃z�X�g�������o���܂����B'; @@ -2087,7 +2073,25 @@ protected function _generateWikiDatLink() } // }}} - + // {{{ _generateMarutoriHtml() + /** + * ����offlaw��dat���擾���邽�߂̃����N�𐶐�����B + * + * @param bool $retry + * @return string HTML + */ + protected function _generateMarutoriLink($retry = false) { + if($retry) { + $retry_q = "&relogin2ch=true"; + $atext = "��ID�ōĎ擾����"; + } else { + $atext = "��ID��rep2�Ɏ�荞��"; + } + $marutori_ht = " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&maru=true{$retry_q}{$_conf['k_at_a']}\">{$atext}]"; + $marutori_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&shirokuma=true{$_conf['k_at_a']}\">offlaw�o�R��rep2�Ɏ�荞��]"; + return $marutori_ht; + } + // }}} } // }}} From a0e218cb7cce49122b56f7dda34ec6455a290deb Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Tue, 24 Mar 2015 22:31:23 +0900 Subject: [PATCH 083/339] =?UTF-8?q?dig2ch.php=E3=81=8C=E3=83=97=E3=83=AD?= =?UTF-8?q?=E3=82=AD=E3=82=B7=E8=A8=AD=E5=AE=9A(proxy=5Fuse)=E3=81=AB?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C=E3=81=97=E3=81=A6=E3=81=84=E3=81=AA=E3=81=84?= =?UTF-8?q?=E4=B8=8D=E5=85=B7=E5=90=88=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/dig2ch.php | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/rep2/dig2ch.php b/rep2/dig2ch.php index 6eb8e04f9..25bc445f1 100644 --- a/rep2/dig2ch.php +++ b/rep2/dig2ch.php @@ -9,21 +9,35 @@ function dig2chsearch($query) //$query_q = preg_replace('/(\s+)/' , '\+' ,$query_arry['q']); $query_arry['q'] = urlencode($query_arry['q']); - $client = new HTTP_Client(); - $client->setDefaultHeader('User-Agent', 'Mozilla/5.0 (Windows NT 6.4; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko'); - $code = $client->get($_conf['test.dig2ch_url'] . '?AndOr=' . $query_arry['AndOr'] . '&maxResult=' . $query_arry['maxResult'] . '&atLeast=1&Sort=' . $query_arry['Sort'] . '&Link=1&Bbs=all&924=' . $query_arry['924'] . '&json=1&keywords=' . $query_arry['q']); - if (PEAR::isError($code)) { - p2die($code->getMessage()); - } elseif ($code != 200) { - p2die("HTTP Error - {$code}"); + $url = $_conf['test.dig2ch_url'] . '?AndOr=' . $query_arry['AndOr'] . '&maxResult=' . $query_arry['maxResult'] . '&atLeast=1&Sort=' . $query_arry['Sort'] . '&Link=1&Bbs=all&924=' . $query_arry['924'] . '&json=1&keywords=' . $query_arry['q']; + $params = array(); + $params['timeout'] = $_conf['http_conn_timeout']; + $params['readTimeout'] = array($_conf['http_read_timeout'], 0); + if ($_conf['proxy_use']) { + $params['proxy_host'] = $_conf['proxy_host']; + $params['proxy_port'] = $_conf['proxy_port']; } - $response = $client->currentResponse(); - $body = $response['body']; + $req = new HTTP_Request($url, $params); + $req->addHeader('User-Agent', 'Mozilla/5.0 (Windows NT 6.4; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko'); + + $response = $req->sendRequest(); + + if (PEAR::isError($response)) { + p2die($response->getMessage()); + } else { + $code = $req->getResponseCode(); + if ($code != 200) { + p2die("HTTP Error - {$code}"); + } + } + + $body = $req->getResponseBody(); + // ����̎I�ʼn�����Q������������JSON��HTML�̃R�����g��������̂ł��̑΍� if (strpos($body,"/", "", $body); + $body = preg_replace("/<\!--.*?-->/", "", $body); } $jsontest1 = json_decode($body, true); From a7483eac6a39d9e5649d78442abe2ea9ca6a2420 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Tue, 24 Mar 2015 22:56:45 +0900 Subject: [PATCH 084/339] =?UTF-8?q?dig2ch=E3=81=A7=E3=81=A7=E3=80=8C?= =?UTF-8?q?=E6=9D=BF=E3=81=A7=E7=B5=9E=E3=82=8A=E8=BE=BC=E3=82=80=E3=80=8D?= =?UTF-8?q?=E3=81=AB=E5=AF=BE=E5=BF=9C=E3=81=97=E3=81=9F=20http://anago.2c?= =?UTF-8?q?h.net/test/read.cgi/software/1426940268/98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/dig2ch.php | 228 ++++++++++++++++++++++++++---------------------- 1 file changed, 123 insertions(+), 105 deletions(-) diff --git a/rep2/dig2ch.php b/rep2/dig2ch.php index 25bc445f1..38c55a10f 100644 --- a/rep2/dig2ch.php +++ b/rep2/dig2ch.php @@ -1,105 +1,123 @@ -addHeader('User-Agent', 'Mozilla/5.0 (Windows NT 6.4; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko'); - - $response = $req->sendRequest(); - - if (PEAR::isError($response)) { - p2die($response->getMessage()); - } else { - $code = $req->getResponseCode(); - if ($code != 200) { - p2die("HTTP Error - {$code}"); - } - } - - $body = $req->getResponseBody(); - - // ����̎I�ʼn�����Q������������JSON��HTML�̃R�����g��������̂ł��̑΍� - if (strpos($body,"/", "", $body); - } - - $jsontest1 = json_decode($body, true); - unset($body); - - //mb_convert_variables('SHIFT-JIS','UTF-8',$jsontest1); - - if ($jsontest1 === NULL) { - - $jsonerror = ""; - switch (json_last_error()) { - case JSON_ERROR_NONE: - $jsonerror = ' - No errors'; - break; - case JSON_ERROR_DEPTH: - $jsonerror = ' - Maximum stack depth exceeded'; - break; - case JSON_ERROR_STATE_MISMATCH: - $jsonerror = ' - Underflow or the modes mismatch'; - break; - case JSON_ERROR_CTRL_CHAR: - $jsonerror = ' - Unexpected control character found'; - break; - case JSON_ERROR_SYNTAX: - $jsonerror = ' - Syntax error, malformed JSON'; - break; - case JSON_ERROR_UTF8: - $jsonerror = ' - Malformed UTF-8 characters, possibly incorrectly encoded'; - break; - default: - $jsonerror = ' - Unknown error'; - break; - } - p2die("�������ʂ̎擾�Ɏ��s���܂���".$jsonerror); - } - - foreach ($jsontest1[result] as $jsontest2) { - $result['threads'][$n1] = new stdClass; - $result['threads'][$n1]->title = $jsontest2[subject]; - $result['threads'][$n1]->host = $jsontest2[server]; - $result['threads'][$n1]->bbs = $jsontest2[bbs]; - $result['threads'][$n1]->tkey = $jsontest2[key]; - $result['threads'][$n1]->resnum = $jsontest2[resno]; - $result['threads'][$n1]->ita = $jsontest2[ita]; - $result['threads'][$n1]->dayres = $jsontest2[ikioi]; - $n1++; - } - $result['modified'] = isset($response['body']['date'])? $response['body']['date'] : ''; - $result['profile']['regex'] = '/(' . $jsontest1[query] .')/i'; - $result['profile']['hits'] = $jsontest1[found]; - $result['profile']['cm0'] = str_replace("a href=" , "a target=\"_blank\" href=", $jsontest1[cm0]); - if (strstr($result['profile']['cm0'] , "rounin")) { $result['profile']['cm0'] = str_replace("src=\"" , "src=\"http://dig.2ch.net", $result['profile']['cm0']);} - $result['profile']['cm0'] = str_replace("
    " , "", $result['profile']['cm0']); - - $result['profile']['cm1'] = str_replace("a href=" , "a target=\"_blank\" href=", $jsontest1[cm1]); - if (strstr($result['profile']['cm1'] , "rounin")) { $result['profile']['cm1'] = str_replace("src=\"" , "src=\"http://dig.2ch.net", $result['profile']['cm1']);} - $result['profile']['cm1'] = str_replace("
    " , "", $result['profile']['cm1']); - - $result['profile']['cm2'] = str_replace("a href=" , "a target=\"_blank\" href=", $jsontest1[cm2]); - if (strstr($result['profile']['cm2'] , "rounin")) { $result['profile']['cm2'] = str_replace("src=\"" , "src=\"http://dig.2ch.net", $result['profile']['cm2']);} - $result['profile']['cm2'] = str_replace("
    " , "", $result['profile']['cm2']); - - return $result; -} - +addHeader('User-Agent', 'Mozilla/5.0 (Windows NT 6.4; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko'); + + $response = $req->sendRequest(); + + if (PEAR::isError($response)) { + p2die($response->getMessage()); + } else { + $code = $req->getResponseCode(); + if ($code != 200) { + p2die("HTTP Error - {$code}"); + } + } + + $body = $req->getResponseBody(); + + // ����̎I�ʼn�����Q������������JSON��HTML�̃R�����g��������̂ł��̑΍� + if (strpos($body,"/", "", $body); + } + + $jsontest1 = json_decode($body, true); + unset($body); + + //mb_convert_variables('SHIFT-JIS','UTF-8',$jsontest1); + + if ($jsontest1 === NULL) { + + $jsonerror = ""; + switch (json_last_error()) { + case JSON_ERROR_NONE: + $jsonerror = ' - No errors'; + break; + case JSON_ERROR_DEPTH: + $jsonerror = ' - Maximum stack depth exceeded'; + break; + case JSON_ERROR_STATE_MISMATCH: + $jsonerror = ' - Underflow or the modes mismatch'; + break; + case JSON_ERROR_CTRL_CHAR: + $jsonerror = ' - Unexpected control character found'; + break; + case JSON_ERROR_SYNTAX: + $jsonerror = ' - Syntax error, malformed JSON'; + break; + case JSON_ERROR_UTF8: + $jsonerror = ' - Malformed UTF-8 characters, possibly incorrectly encoded'; + break; + default: + $jsonerror = ' - Unknown error'; + break; + } + p2die("�������ʂ̎擾�Ɏ��s���܂���".$jsonerror); + } + + $boards = array(); + $hits = array(); + $names = array(); + foreach ($jsontest1[result] as $jsontest2) { + $result['threads'][$n1] = new stdClass; + $result['threads'][$n1]->title = $jsontest2[subject]; + $result['threads'][$n1]->host = $jsontest2[server]; + $result['threads'][$n1]->bbs = $jsontest2[bbs]; + $result['threads'][$n1]->tkey = $jsontest2[key]; + $result['threads'][$n1]->resnum = $jsontest2[resno]; + $result['threads'][$n1]->ita = $jsontest2[ita]; + $result['threads'][$n1]->dayres = $jsontest2[ikioi]; + $n1++; + $bkey = md5($jsontest2['server'].'-'.$jsontest2['bbs'].'-'.$jsontest2['ita']); + if (! isset($boards[$bkey])) { + $board = new stdClass; + $board->host = $jsontest2['server']; + $board->bbs = $jsontest2['bbs']; + $names[$bkey] = $board->name = $jsontest2['ita']; + $hits[$bkey] = $board->hits = 1; + $boards[$bkey] = $board; + } else { + $hits[$bkey] = ++$boards[$bkey]->hits; + $names[$bkey] = $boards[$bkey]->name; + } + } + $result['modified'] = isset($response['body']['date'])? $response['body']['date'] : ''; + $result['profile']['regex'] = '/(' . $jsontest1[query] .')/i'; + $result['profile']['hits'] = $jsontest1[found]; + $result['profile']['cm0'] = str_replace("a href=" , "a target=\"_blank\" href=", $jsontest1[cm0]); + if (strstr($result['profile']['cm0'] , "rounin")) { $result['profile']['cm0'] = str_replace("src=\"" , "src=\"http://dig.2ch.net", $result['profile']['cm0']);} + $result['profile']['cm0'] = str_replace("
    " , "", $result['profile']['cm0']); + + $result['profile']['cm1'] = str_replace("a href=" , "a target=\"_blank\" href=", $jsontest1[cm1]); + if (strstr($result['profile']['cm1'] , "rounin")) { $result['profile']['cm1'] = str_replace("src=\"" , "src=\"http://dig.2ch.net", $result['profile']['cm1']);} + $result['profile']['cm1'] = str_replace("
    " , "", $result['profile']['cm1']); + + $result['profile']['cm2'] = str_replace("a href=" , "a target=\"_blank\" href=", $jsontest1[cm2]); + if (strstr($result['profile']['cm2'] , "rounin")) { $result['profile']['cm2'] = str_replace("src=\"" , "src=\"http://dig.2ch.net", $result['profile']['cm2']);} + $result['profile']['cm2'] = str_replace("
    " , "", $result['profile']['cm2']); + array_multisort($hits, SORT_DESC, $names, $boards); + $result['profile']['boards'] = $boards; + unset($boards,$hits,$names); + + return $result; +} + From b448cea8c2b9f0ad3c92fee8e3c409a9ce2964a9 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Wed, 25 Mar 2015 06:49:10 +0900 Subject: [PATCH 085/339] =?UTF-8?q?P2Util::fileDownload=E3=82=92HTTP=5FReq?= =?UTF-8?q?uest2=E3=81=AB=E3=81=97=E3=81=9F=20dig2ch=E3=82=92HTTP=5FReques?= =?UTF-8?q?t2=E3=81=AB=E3=81=97=E3=81=9F=20P2Util::getP2UA=E3=82=92?= =?UTF-8?q?=E5=AE=9F=E8=A3=85=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.json | 2 + lib/BrdCtl.php | 8 +-- lib/DownloadDatMachiBbs.php | 7 +- lib/P2HttpExt.php | 4 +- lib/P2Util.php | 118 ++++++++++++++++++++++------------ lib/SettingTxt.php | 13 +--- lib/SubjectTxt.php | 12 +--- lib/expack/rss/parser.inc.php | 2 +- lib/login2ch.inc.php | 2 +- lib/post_form_options.inc.php | 2 +- lib/read_shitaraba.inc.php | 3 +- lib/setfav.inc.php | 2 +- rep2/dig2ch.php | 39 ++++++----- 13 files changed, 119 insertions(+), 95 deletions(-) diff --git a/composer.json b/composer.json index c9e7b7141..6dff89b60 100644 --- a/composer.json +++ b/composer.json @@ -24,8 +24,10 @@ "pear-pear.php.net/html_quickform": "3.2.13", "pear-pear.php.net/http_client": "1.2.1", "pear-pear.php.net/http_request": "1.4.4", + "pear-pear.php.net/http_request2": "2.2.1", "pear-pear.php.net/net_socket": "1.0.10", "pear-pear.php.net/net_url": "1.0.15", + "pear-pear.php.net/net_url2": "2.1.1", "pear-pear.php.net/net_useragent_mobile": "1.0.0", "pear-pear.php.net/validate": "0.8.5", "pear-pear.php.net/var_dump": "1.0.4", diff --git a/lib/BrdCtl.php b/lib/BrdCtl.php index b73482b4b..6080c47b5 100644 --- a/lib/BrdCtl.php +++ b/lib/BrdCtl.php @@ -86,15 +86,13 @@ static public function read_brd_online() } } - // DL���Ȃ� - if ($noDL) { - ; // DL���� - } else { + if (!$noDL) { //echo "DL!
    ";// $brdfile_online_res = P2Util::fileDownload($_conf['brdfile_online'], $cachefile); - if ($brdfile_online_res->isSuccess() && $brdfile_online_res->code != 304) { + if (isset($brdfile_online_res) && $brdfile_online_res->getStatus() != 304) { $isNewDL = true; + unset($brdfile_online_res); } } diff --git a/lib/DownloadDatMachiBbs.php b/lib/DownloadDatMachiBbs.php index 7a8566356..f39357f80 100644 --- a/lib/DownloadDatMachiBbs.php +++ b/lib/DownloadDatMachiBbs.php @@ -64,12 +64,11 @@ static public function invoke(ThreadRead $thread) } $response = P2Util::fileDownload($url, $tempfile); - if ($response->isError()) { - if (304 != $response->code) { - $thread->diedat = true; - } + if (empty($response)) { + $thread->diedat = true; return false; } + unset($response); // }}} // {{{ �_�E�����[�h�����e�s���`�F�b�N���‚ƒ��[�J��dat�ɏ������� diff --git a/lib/P2HttpExt.php b/lib/P2HttpExt.php index ce35a77d6..1ac35f065 100644 --- a/lib/P2HttpExt.php +++ b/lib/P2HttpExt.php @@ -246,7 +246,9 @@ public function __construct($url, } if (!isset($options['useragent'])) { - $options['useragent'] = "Monazilla/1.00 ({$_conf['p2ua']})"; + $purl = parse_url($url); // URL���� + $options['useragent'] = P2Util::getP2UA(true,P2Util::isHost2chs($purl['host'])); + unset($purl); } if ($_conf['proxy_use'] && !isset($options['proxyhost']) && !empty($_conf['proxy_host'])) { diff --git a/lib/P2Util.php b/lib/P2Util.php index adda081ba..1f2cf44ac 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -261,48 +261,58 @@ static public function fileDownload($url, $localfile, $modified = false; } - // DL - $wap_ua = new WapUserAgent(); - $wap_ua->setTimeout($_conf['http_conn_timeout'], $_conf['http_read_timeout']); - $wap_ua->setAtFsockopen(true); - $wap_req = new WapRequest(); - $wap_req->setUrl($url); - $wap_req->setModified($modified); - if ($_conf['proxy_use']) { - $wap_req->setProxy($_conf['proxy_host'], $_conf['proxy_port']); - } - $wap_res = $wap_ua->request($wap_req); - - // 1�i�K�������_�C���N�g��ǐ� - if ($wap_res->isRedirect() && array_key_exists('Location', $wap_res->headers) && - ($trace_redirection === true || $trace_redirection == $wap_res->code)) - { - $wap_req->setUrl($wap_res->headers['Location']); - $wap_res = $wap_ua->request($wap_req); - } - - // �G���[���b�Z�[�W��ݒ� - if ($wap_res->isError() && $disp_error) { - $url_t = self::throughIme($wap_req->url); - $info_msg_ht = "

    Error: {$wap_res->code} {$wap_res->message}
    "; - if ($wap_res->isRedirect() && array_key_exists('Location', $wap_res->headers)) { - $location = $wap_res->headers['Location']; - $location_ht = p2h($location); - $location_t = self::throughIme($location); - $info_msg_ht .= "Location: {$location_ht}
    "; + try { + // DL + $req = new HTTP_Request2($url, HTTP_Request2::METHOD_GET); + $purl = parse_url($url); // URL���� + $req->setHeader('User-Agent', self::getP2UA(true,self::isHost2chs($purl['host']))); + unset($purl); + + $req->setConfig(array( + 'connect_timeout' => $_conf['http_conn_timeout'], + 'timeout' => $_conf['http_read_timeout'], + 'follow_redirects' => $trace_redirection, + )); + + if ($_conf['proxy_use']) { + $req->setConfig(array( + �eproxy_host�f => $_conf['proxy_host'], + �eproxy_port�f => $_conf['proxy_port'], + )); + } + + $response = $req->send(); + + $code = $response->getStatus(); + if (!($code == 200 || $code == 206 || $code == 304)) { + $error_msg = $code; + } + $body = $response->getBody(); + + } catch (Exception $e) { + $error_msg = $e->getMessage(); + } + + // �G���[���o����null��Ԃ��ďI��� + if (isset($error_msg) && strlen($error_msg) > 0) { + // �G���[���b�Z�[�W��ݒ� + if ($disp_error) { + $url_t = P2Util::throughIme($url); + $info_msg_ht = "

    Error: {$error_msg}
    "; + $info_msg_ht .= "rep2 info: {$url} �ɐڑ��ł��܂���ł����B

    "; + P2Util::pushInfoHtml($info_msg_ht); } - $info_msg_ht .= "rep2 info: {$wap_req->url} �ɐڑ��ł��܂���ł����B

    "; - self::pushInfoHtml($info_msg_ht); + return null; } - // �X�V����Ă����� - if ($wap_res->isSuccess() && $wap_res->code != 304) { - if (FileCtl::file_write_contents($localfile, $wap_res->content) === false) { + // �X�V����Ă�����ۑ� + if ($code != 304) { + if (FileCtl::file_write_contents($localfile, $body) === false) { p2die('cannot write file.'); } } - return $wap_res; + return $response; } // }}} @@ -2120,16 +2130,44 @@ static public function rawurlencodeCallback(array $m) } // }}} - // {{{ + // {{{ getP2UA() + /** + * p2����API��UA��Ԃ� + * @param bool $withMonazilla true�Ȃ�Monazilla/1.00��t���� + * @param bool $apiUA true�ŏ�����API�����p�”\�ȂƂ���API��UA��Ԃ� + * @return string + */ + static public function getP2UA($withMonazilla = true,$apiUA = false) + { + global $_conf; + + // API���g�p����ݒ�̏ꍇ��API��UA��Ԃ� + if ($apiUA && $_conf['2chapi_use'] == 1) { + if ($_conf['2chapi_appname'] != "") { + $p2ua = $_conf['2chapi_appname']; + } else { + p2die("2ch�ƒʐM���邽�߂ɕK�v�ȏ�񂪐ݒ肳��Ă��܂���B"); + } + + } else { + $p2ua = $_conf['p2ua']; + } + + if ($withMonazilla) { + $p2ua = 'Monazilla/1.00' . ' (' . $p2ua . ')'; + } + return $p2ua; + } + // {{{ isEnableBe2ch() /** * be���g�p�”\�Ȑݒ肩���ׂ� * @access public * @return boolean */ - function isEnableBe2ch() + static public function isEnableBe2ch() { global $_conf; - + if ( strlen($_conf['be_2ch_password']) && $_conf['be_2ch_mail'] || strlen($_conf['be_2ch_DMDM']) && $_conf['be_2ch_MDMD'] @@ -2149,7 +2187,7 @@ function isEnableBe2ch() * @access public * @return array|false|null �F�؃R�[�h�z��|�F�؂ł��Ȃ�����|���ݒ肾���� */ - function getBe2chCodeWithUserConf() + static public function getBe2chCodeWithUserConf() { global $_conf; @@ -2172,7 +2210,7 @@ function getBe2chCodeWithUserConf() * @access private * @return array|string ����|�G���[���b�Z�[�W */ - function getBe2chCodeByMailPass($mail, $pass) + static public function getBe2chCodeByMailPass($mail, $pass) { global $_conf; diff --git a/lib/SettingTxt.php b/lib/SettingTxt.php index 875660b2d..e261753c7 100644 --- a/lib/SettingTxt.php +++ b/lib/SettingTxt.php @@ -104,18 +104,7 @@ public function downloadSettingTxt() $req = new HTTP_Request($this->_url, $params); $modified && $req->addHeader('If-Modified-Since', $modified); - // API���g�p����ݒ�ő��肪2ch��������API��UA�𑗂� - if(P2Util::isHost2chs($this->_host) && $_conf['2chapi_use'] == 1) { - if($_conf['2chapi_appname'] != "") { - $req->addHeader('User-Agent', "Monazilla/1.00 ({$_conf['2chapi_appname']})"); - } else { - $info_msg_ht = "

    Error: 2ch�ƒʐM���邽�߂ɕK�v�ȏ�񂪐ݒ肳��Ă��܂���B

    "; - P2Util::pushInfoHtml($info_msg_ht); - return false; - } - } else { - $req->addHeader('User-Agent', "Monazilla/1.00 ({$_conf['p2ua']})"); - } + $req->addHeader('User-Agent', P2Util::getP2UA(true,P2Util::isHost2chs($this->host))); $response = $req->sendRequest(); diff --git a/lib/SubjectTxt.php b/lib/SubjectTxt.php index 8b65142bd..f7f81d733 100644 --- a/lib/SubjectTxt.php +++ b/lib/SubjectTxt.php @@ -97,17 +97,7 @@ public function downloadSubject() $modified && $req->addHeader("If-Modified-Since", $modified); // API���g�p����ݒ�ő��肪2ch��������API��UA�𑗂� - if(P2Util::isHost2chs($this->host) && $_conf['2chapi_use'] == 1) { - if($_conf['2chapi_appname'] != "") { - $req->addHeader('User-Agent', "Monazilla/1.00 ({$_conf['2chapi_appname']})"); - } else { - $info_msg_ht = "

    Error: 2ch �ƒʐM���邽�߂ɕK�v�ȏ�񂪐ݒ肳��Ă��܂���B

    "; - P2Util::pushInfoHtml($info_msg_ht); - return; - } - } else { - $req->addHeader('User-Agent', "Monazilla/1.00 ({$_conf['p2ua']})"); - } + $req->addHeader('User-Agent', P2Util::getP2UA(true,P2Util::isHost2chs($this->host))); $response = $req->sendRequest(); diff --git a/lib/expack/rss/parser.inc.php b/lib/expack/rss/parser.inc.php index f7198faad..3677416bf 100644 --- a/lib/expack/rss/parser.inc.php +++ b/lib/expack/rss/parser.inc.php @@ -59,7 +59,7 @@ function p2GetRSS($remotefile, $atom = 0) // �L���b�V�����X�V����Ȃ��������A�_�E�����[�h�����Ȃ�RSS���p�[�X if (file_exists($localpath) && (!isset($dl) || $dl->isSuccess())) { if ($atom) { - $atom = (isset($dl) && $dl->code == 200) ? 2 : 1; + $atom = (isset($dl) && $dl->getStatus() == 200) ? 2 : 1; } $rss = p2ParseRSS($localpath, $atom); return $rss; diff --git a/lib/login2ch.inc.php b/lib/login2ch.inc.php index dcfd1660e..b466fa06c 100644 --- a/lib/login2ch.inc.php +++ b/lib/login2ch.inc.php @@ -36,7 +36,7 @@ function login2ch() return false; } } else { - $x_2ch_ua = 'X-2ch-UA: ' . $_conf['p2ua']; + $x_2ch_ua = 'X-2ch-UA: ' . P2Util::getP2UA(false,false); } // �O�̂��߂��炩����temp�t�@�C�����������Ă��� diff --git a/lib/post_form_options.inc.php b/lib/post_form_options.inc.php index 1ee73342f..908b6ff4c 100644 --- a/lib/post_form_options.inc.php +++ b/lib/post_form_options.inc.php @@ -343,7 +343,7 @@ function setHiddenValue(button) { $upload_multiple = 'multiple'; $upload_name = 'upload[]'; } - $upload_token = sha1($_conf['p2ua'] . microtime()); + $upload_token = sha1(P2Util::getP2UA(false,false) . microtime()); $_SESSION['upload_token'] = $upload_token; $upload_form = << diff --git a/lib/read_shitaraba.inc.php b/lib/read_shitaraba.inc.php index 093b4c55e..b6e7d4615 100644 --- a/lib/read_shitaraba.inc.php +++ b/lib/read_shitaraba.inc.php @@ -48,10 +48,11 @@ function shitarabaDownload(ThreadRead $aThread) FileCtl::mkdirFor($tempfile); $machiurl_res = P2Util::fileDownload($machiurl, $tempfile); - if ($machiurl_res->isError()) { + if (empty($machiurl_res)) { $aThread->diedat = true; return false; } + unset($machiurl_res); // {{{ ������΂Ȃ�EUC��SJIS�ɕϊ� if (P2Util::isHostJbbsShitaraba($aThread->host)) { diff --git a/lib/setfav.inc.php b/lib/setfav.inc.php index 38edc8c84..a9241bad1 100644 --- a/lib/setfav.inc.php +++ b/lib/setfav.inc.php @@ -189,7 +189,7 @@ function postFavRank($post) $request = "{$method} {$send_path} HTTP/1.0\r\n"; $request .= "Host: {$URL['host']}\r\n"; - $request .= "User-Agent: Monazilla/1.00 ({$_conf['p2ua']})\r\n"; + $request .= "User-Agent: ".P2Util::getP2UA(ture)."\r\n"; $request .= "Connection: Close\r\n"; /* POST�̎��̓w�b�_��lj����Ė�����URL�G���R�[�h�����f�[�^��Y�t */ diff --git a/rep2/dig2ch.php b/rep2/dig2ch.php index 38c55a10f..59c66e819 100644 --- a/rep2/dig2ch.php +++ b/rep2/dig2ch.php @@ -10,29 +10,34 @@ function dig2chsearch($query) $query_arry['q'] = urlencode($query_arry['q']); $url = $_conf['test.dig2ch_url'] . '?AndOr=' . $query_arry['AndOr'] . '&maxResult=' . $query_arry['maxResult'] . '&atLeast=1&Sort=' . $query_arry['Sort'] . '&Link=1&Bbs=all&924=' . $query_arry['924'] . '&json=1&keywords=' . $query_arry['q']; - $params = array(); - $params['timeout'] = $_conf['http_conn_timeout']; - $params['readTimeout'] = array($_conf['http_read_timeout'], 0); - if ($_conf['proxy_use']) { - $params['proxy_host'] = $_conf['proxy_host']; - $params['proxy_port'] = $_conf['proxy_port']; - } - $req = new HTTP_Request($url, $params); - $req->addHeader('User-Agent', 'Mozilla/5.0 (Windows NT 6.4; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko'); + try { + $req = new HTTP_Request2($url, HTTP_Request2::METHOD_GET); + $req->setHeader('User-Agent', 'Mozilla/5.0 (Windows NT 6.4; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko'); + + $req->setConfig(array( + 'connect_timeout' => $_conf['http_conn_timeout'], + 'timeout' => $_conf['http_read_timeout'], + )); + + if ($_conf['proxy_use']) { + $req->setConfig(array( + �eproxy_host�f => $_conf['proxy_host'], + �eproxy_port�f => $_conf['proxy_port'], + )); + } - $response = $req->sendRequest(); + $response = $req->send(); - if (PEAR::isError($response)) { - p2die($response->getMessage()); - } else { - $code = $req->getResponseCode(); + $code = $response->getStatus(); if ($code != 200) { p2die("HTTP Error - {$code}"); } - } - $body = $req->getResponseBody(); + $body = $response->getBody(); + } catch (Exception $e) { + p2die($e->getMessage()); + } // ����̎I�ʼn�����Q������������JSON��HTML�̃R�����g��������̂ł��̑΍� if (strpos($body,"|�� �������݊m�F ��|>�������݊m�F�B<}'; - if (preg_match('/<.+>/s', $response, $matches)) { - $response = $matches[0]; + if (preg_match('/<.+>/s', $body, $matches)) { + $body = $matches[0]; } // �J�L�R�~���� - if ($post_seikou || preg_match($kakikonda_match, $response)) { + if ($post_seikou || preg_match($kakikonda_match, $body)) { $reload = empty($_POST['from_read_new']); showPostMsg(true, '�������݂��I���܂����B', $reload); @@ -582,13 +493,13 @@ function postIt($host, $bbs, $key, $post) //echo "
    {$response_ht}
    "; // cookie�m�F�ipost�ă`�������W�j - } elseif (preg_match($cookie_kakunin_match, $response)) { - showCookieConfirmation($host, $response); + } elseif (preg_match($cookie_kakunin_match, $body)) { + showCookieConfirmation($host, $body); return false; // ���̑��̓��X�|���X�����̂܂ܕ\�� } else { - echo preg_replace('@������Ń����[�h���Ă��������B GO!
    @', '', $response); + echo preg_replace('@����������[�h�����������B GO!
    @', '', $body); return false; } } From d2c48649bfc218ed3bda40fa0a246194b61fbf04 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 26 Mar 2015 02:46:42 +0900 Subject: [PATCH 087/339] =?UTF-8?q?=E8=AA=8D=E8=A8=BC=E7=B3=BB=E3=81=AE?= =?UTF-8?q?=E6=A9=9F=E8=83=BD=E3=82=92HTTP=5FRequest2=E3=81=AB=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=20HTTP=5FRequest2=E3=82=92=E4=BD=BF=E3=81=A3=E3=81=9F?= =?UTF-8?q?SSL=E9=80=9A=E4=BF=A1=E3=81=AEopenSSL=E3=81=A8cRUL=E3=82=92?= =?UTF-8?q?=E5=88=87=E3=82=8A=E6=9B=BF=E3=81=88=E3=82=8B=E3=81=93=E3=81=A8?= =?UTF-8?q?=E3=81=8C=E5=87=BA=E6=9D=A5=E3=82=8B=E8=A8=AD=E5=AE=9A=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=20=E3=82=B3=E3=83=9E=E3=83=B3=E3=83=89?= =?UTF-8?q?=E3=83=A9=E3=82=A4=E3=83=B3=E7=89=88curl=E3=81=AE=E3=82=B5?= =?UTF-8?q?=E3=83=9D=E3=83=BC=E3=83=88=E3=82=92=E5=89=8A=E9=99=A4=20?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E7=89=88=E3=81=AA=E3=81=AE=E3=81=A7?= =?UTF-8?q?=E3=83=90=E3=83=BC=E3=82=B8=E3=83=A7=E3=83=B3=E7=95=AA=E5=8F=B7?= =?UTF-8?q?=EF=BC=88=E6=99=82=E5=88=BB=EF=BC=89=E3=81=AF=E9=81=A9=E5=BD=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- conf/conf_user_def.inc.php | 10 +- lib/auth2chapi.inc.php | 95 ++++++++------- lib/login2ch.inc.php | 234 +++++-------------------------------- rep2/edit_conf_user.php | 3 +- 5 files changed, 89 insertions(+), 255 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index a95f4c705..69dff7c1e 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150320.1020', // rep2�̃o�[�W���� + 'p2version' => '150326.1020', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index d00defce8..f7039b4bf 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -547,13 +547,9 @@ $conf_user_def['pane_mode'] = 0; // (0) $conf_user_rad['pane_mode'] = array('0' => '�W���i�Ɍ`�j', '1' => '�����i��`�j'); -// �����O�C�����A�܂���openssl�Ŏ��݂�B��PHP 4.3.0�ȍ~�ŁAOpenSSL���ÓI�Ƀ����N����Ă���K�v������ -$conf_user_def['precede_openssl'] = 0; // (0) -$conf_user_rad['precede_openssl'] = array('1' => 'Yes', '0' => 'No'); - -// curl���g�����A�R�}���h���C���ł�PHP�֐��łǂ����D�悷�邩 (�R�}���h���C����:0, PHP�֐���:1) -$conf_user_def['precede_phpcurl'] = 0; // (0) -$conf_user_rad['precede_phpcurl'] = array('0' => '�R�}���h���C����', '1' => 'PHP�֐���'); +// SSL�ʐM(�����O�C����)�Ɏg�p����֐� ���Y������g�����C���X�g�[������K�v������ +$conf_user_def['ssl_function'] = "socket"; // (socket) +$conf_user_sel['ssl_function'] = array('socket' => 'OpenSSL', 'curl' => 'cURL'); // }}} // {{{ �g���p�b�N��iPhone diff --git a/lib/auth2chapi.inc.php b/lib/auth2chapi.inc.php index 764403200..479f614a5 100644 --- a/lib/auth2chapi.inc.php +++ b/lib/auth2chapi.inc.php @@ -24,71 +24,86 @@ function authenticate_2chapi() $login2chPW = ""; $message = $AppKey.$CT; $HB = hash_hmac("sha256", $message, $HMKey); - + if(empty($AppKey) || empty($AppName) || empty($HMKey)) { P2Util::pushInfoHtml("

    p2 Error: 2ch API �̔F�؂ɕK�v�ȏ�񂪐ݒ肳��Ă��܂���B

    "); return ''; } - + if ($_conf['2chapi_rounin'] == 1&& $array = P2Util::readIdPw2ch()) { list($login2chID, $login2chPW, $autoLogin2ch) = $array; } - - $values = array( - 'ID' => $login2chID, - 'PW' => $login2chPW, - 'KY' => $AppKey, - 'CT' => $CT, - 'HB' => $HB, - ); - $options = array('http' => array( - 'ignore_errors' => true, - 'method' => 'POST', - 'header' => implode("\r\n", array( - 'User-Agent: '.$AuthUA, - 'X-2ch-UA: '.$AppName, - 'Content-Type: application/x-www-form-urlencoded', - )), - 'content' => http_build_query($values), - )); - - // �v���L�V - if ($_conf['proxy_use']) { - $options['http'] += array('proxy' => 'tcp://'.$_conf['proxy_host'].":".$_conf['proxy_port']); - $options['http'] += array('request_fulluri' => true); - $options['ssl'] = array('SNI_enabled' => false); + + try { + $req = new HTTP_Request2($url,HTTP_Request2::METHOD_POST); + $req->setHeader('User-Agent', $AuthUA); + $req->setHeader('X-2ch-UA', $AppName); + $req->setAdapter($_conf['ssl_function']); + // �v���L�V + if ($_conf['proxy_use']) { + $req->setConfig(array( + �eproxy_host�f => $_conf['proxy_host'], + �eproxy_port�f => $_conf['proxy_port'], + )); + } + $req->addPostParameter('ID', $login2chID); + $req->addPostParameter('PW', $login2chPW); + $req->addPostParameter('KY', $AppKey); + $req->addPostParameter('CT', $CT); + $req->addPostParameter('HB', $HB); + + // POST�f�[�^�̑��M + $res = $req->send(); + + $code = $res->getStatus(); + if ($code =! 200) { + P2Util::pushInfoHtml("

    p2 Error: HTTP Error({$code})

    "); + } else { + $body = $res->getBody(); + } + } catch (Exception $e) { + P2Util::pushInfoHtml("

    p2 Error: 2ch API �̔F�؃T�[�o�ɐڑ��o���܂���ł����B({$e->getMessage()})

    "); } - - $response = ''; - $response = file_get_contents($url, false, stream_context_create($options)); - + if(file_exists($_conf['sid2chapi_php'])) { unlink($_conf['sid2chapi_php']); } - - if (strpos($response, ':') != false) + + // �ڑ����s�Ȃ�� + if (empty($body)) { + P2Util::pushInfoHtml('

    p2 info: 2�����˂��API���g�p����ɂ́APHP��cURL�֐�����OpenSSL�֐����L���ł���K�v������܂��B

    '); + + P2Util::pushInfoHtml("

    p2 error: 2ch API�F�؂Ɏ��s���܂����B{$curl_msg}

    "); + return false; + } + + if (strpos($body, ':') != false) { - $sid = explode(':', $response); - + $sid = explode(':', $body); + if($_conf['2chapi_debug_print']==1) { - P2Util::pushInfoHtml($response."
    ".$AuthUA); + P2Util::pushInfoHtml($body."
    ".$AuthUA); } - + if($sid[0]!='SESSION-ID=Monazilla/1.00') { - P2Util::pushInfoHtml("

    p2 Error: 2ch API ��SessionID���擾�o���܂���ł����B

    "); + P2Util::pushInfoHtml("

    p2 Error: ���X�|���X����SessionID���擾�o���܂���ł����B

    "); return ''; } - + $cont = sprintf('p2 Error: {$_conf['sid2chapi_php']} ��ۑ��ł��܂���ł����B���O�C���o�^���s�B

    "); return ''; } - + return $sid[1]; } - + return ''; } // }}} diff --git a/lib/login2ch.inc.php b/lib/login2ch.inc.php index b466fa06c..74054782e 100644 --- a/lib/login2ch.inc.php +++ b/lib/login2ch.inc.php @@ -24,9 +24,7 @@ function login2ch() } $auth2ch_url = 'https://2chv.tora3.net/futen.cgi'; - $postf = 'ID=' . $login2chID . '&PW=' . $login2chPW; $dolib2ch = 'DOLIB/1.00'; - $tempfile = $_conf['tmp_dir'] . '/p2temp.php'; if($_conf['2chapi_use'] == 1) { if($_conf['2chapi_appname'] != "") { @@ -39,73 +37,54 @@ function login2ch() $x_2ch_ua = 'X-2ch-UA: ' . P2Util::getP2UA(false,false); } - // �O�̂��߂��炩����temp�t�@�C�����������Ă��� - if (file_exists($tempfile)) { - unlink($tempfile); - } - - $curl_msg = ''; - - // �܂���fsockopen��SSL�ڑ����� - // ������PHP�R���p�C������OpenSSL�T�|�[�g���L���ɂȂ��Ă��Ȃ��Ɨ��p�ł����A - // DSO�Łiopenssl.{so,dll}���j�ł̓G���[���o��B - // @see http://jp.php.net/manual/ja/function.fsockopen.php - if ($_conf['precede_openssl']) { - if (!extension_loaded('openssl')) { - $curl_msg .= "�uPHP��openssl�v�͎g���Ȃ��悤�ł�"; - } elseif (!$r = getAuth2chWithOpenSSL($login2chID, $login2chPW, $auth2ch_url, $x_2ch_ua, $dolib2ch)) { - $curl_msg .= "�uPHP��openssl�v�Ŏ��s���s�B"; + try { + $req = new HTTP_Request2($auth2ch_url,HTTP_Request2::METHOD_POST); + $req->setHeader('User-Agent', $dolib2ch); + $req->setHeader('X-2ch-UA', $x_2ch_ua); + $req->setAdapter($_conf['ssl_function']); + // �v���L�V + if ($_conf['proxy_use']) { + $req->setConfig(array( + �eproxy_host�f => $_conf['proxy_host'], + �eproxy_port�f => $_conf['proxy_port'], + )); } - } - - if (empty($r)) { + $req->addPostParameter('ID', $login2chID); + $req->addPostParameter('PW', $login2chPW); - // �R�}���hCURL�D�� - if (empty($_conf['precede_phpcurl'])) { - if (!$r = getAuth2chWithCommandCurl($login2chID, $login2chPW, $tempfile, $auth2ch_url, $x_2ch_ua, $dolib2ch)) { - $curl_msg .= "�usystem��curl�R�}���h�v�Ŏ��s���s�B"; - if (!extension_loaded('curl')) { - $curl_msg .= "�uPHP��curl�v�͎g���Ȃ��悤�ł�"; - } elseif (!$r = getAuth2chWithPhpCurl($tempfile, $auth2ch_url, $x_2ch_ua, $dolib2ch, $postf)) { - $curl_msg .= "�uPHP��curl�v�Ŏ��s���s�B"; - } - } + // POST�f�[�^�̑��M + $res = $req->send(); - // PHP CURL�D�� + $code = $res->getStatus(); + if ($code =! 200) { + P2Util::pushInfoHtml("

    p2 Error: HTTP Error({$code})

    "); } else { - if (!extension_loaded('curl')) { - $curl_msg .= "�uPHP��curl�v�͎g���Ȃ��悤�ł�"; - } elseif (!$r = getAuth2chWithPhpCurl($tempfile, $auth2ch_url, $x_2ch_ua, $dolib2ch, $postf)) { - $curl_msg .= "�uPHP��curl�v�Ŏ��s���s�B"; - } - - if (empty($r)) { - if (!$r = getAuth2chWithCommandCurl($login2chID, $login2chPW, $tempfile, $auth2ch_url, $x_2ch_ua, $dolib2ch)) { - $curl_msg .= "�usystem��curl�R�}���h�v�Ŏ��s���s�B"; - } - } + $body = $res->getBody(); } + } catch (Exception $e) { + P2Util::pushInfoHtml("

    p2 Error: ���̔F�؃T�[�o�ɐڑ��o���܂���ł����B({$e->getMessage()})

    "); } // �ڑ����s�Ȃ�� - if (empty($r)) { + if (empty($body)) { if (file_exists($_conf['idpw2ch_php'])) { unlink($_conf['idpw2ch_php']); } if (file_exists($_conf['sid2ch_php'])) { unlink($_conf['sid2ch_php']); } - P2Util::pushInfoHtml("

    p2 info: 2�����˂�ւ́�ID���O�C�����s���ɂ́Asystem��curl�R�}���h���g�p�”\�ł��邩�APHP��CURL�֐����L���ł���K�v������܂��B

    "); + P2Util::pushInfoHtml('

    p2 info: 2�����˂�ւ́�ID���O�C�����s���ɂ́APHP��cURL�֐�����OpenSSL�֐����L���ł���K�v������܂��B

    '); P2Util::pushInfoHtml("

    p2 error: 2ch���O�C�������Ɏ��s���܂����B{$curl_msg}

    "); return false; } - // temp�t�@�C���͂����Ɏ̂Ă� - if (file_exists($tempfile)) { unlink($tempfile); } - - $r = rtrim($r); + $body = rtrim($body); // ���� - if (preg_match('/SESSION-ID=(.+?):(.+)/', $r, $matches)) { + if (preg_match('/SESSION-ID=(.+?):(.+)/', $body, $matches)) { $uaMona = $matches[1]; $SID2ch = $matches[1] . ':' . $matches[2]; } else { @@ -122,8 +101,6 @@ function login2ch() return false; } - //echo $r;// - // SID�̋L�^�ێ� $cont = sprintf('setAgent($dolib2ch); - $wap_ua->setTimeout($_conf['http_conn_timeout'], $_conf['http_read_timeout']); - - $wap_req = new WapRequest(); - $wap_req->setMethod('POST'); - $wap_req->post['ID'] = $login2chID; - $wap_req->post['PW'] = $login2chPW; - $wap_req->setHeaders($x_2ch_ua . "\r\n"); - $wap_req->setUrl($auth2ch_url); - if ($_conf['proxy_use']) { - $wap_req->setProxy($_conf['proxy_host'], $_conf['proxy_port']); - } - - // futen.cgi�̎d�l���A����Ƃ��e�X�g�‹���PHP�����������̂��A - // �Ƃɂ��������O�C���ł�POST���镶�����URL�G���R�[�h���Ă���Ǝ��s���� - $wap_req->setNoUrlencodePost(true); - - $wap_res = $wap_ua->request($wap_req); - - //P2Util::pushInfoHtml(Var_Dump::display(array($wap_ua, $wap_req, $wap_res), true)); - - if (!$wap_res || $wap_res->isError()) { - return false; - } - - return $wap_res->content; -} - // }}} /* diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index 3c3a59e9a..4eb605f21 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -432,8 +432,7 @@ array('proxy_use', '�v���L�V�𗘗p'), array('proxy_host', '�v���L�V�z�X�g ex)"127.0.0.1", "p2proxy.example"'), array('proxy_port', '�v���L�V�|�[�g ex)"8080"'), - array('precede_openssl', '�����O�C�����A�܂���openssl�Ŏ��݂�
    (OpenSSL���ÓI�Ƀ����N����Ă���K�v������)'), - array('precede_phpcurl', 'curl���g�����A�R�}���h���C���ł�PHP�֐��łǂ����D�悷�邩'), + array('ssl_function', 'SSL�ʐM(�����O�C����)�Ɏg�p����֐�
    (�֐��ɊY������g�����C���X�g�[������K�v������)'), ); printEditConfGroupHtml($groupname, $conflist, $flags); } From 59a81e7901d81a34c5fc21d16bf3cb99db650643 Mon Sep 17 00:00:00 2001 From: Killer4989 Date: Sat, 28 Mar 2015 21:35:17 +0900 Subject: [PATCH 088/339] =?UTF-8?q?=E5=88=9D=E6=9C=9F=E8=A8=AD=E5=AE=9A?= =?UTF-8?q?=E6=99=82=E3=81=AB=E3=83=87=E3=82=A3=E3=83=AC=E3=82=AF=E3=83=88?= =?UTF-8?q?=E3=83=AA=E3=81=8C=E3=81=AA=E3=81=84=E5=A0=B4=E5=90=88=E3=81=AF?= =?UTF-8?q?=E6=96=B0=E8=A6=8F=E4=BD=9C=E6=88=90=E3=81=99=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- lib/bootstrap.php | 9 +++++++++ rep2/ic2.php | 9 +++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index a95f4c705..af93efed6 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150320.1020', // rep2�̃o�[�W���� + 'p2version' => '150328.2132', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/lib/bootstrap.php b/lib/bootstrap.php index ea88eae8c..73d09cae0 100644 --- a/lib/bootstrap.php +++ b/lib/bootstrap.php @@ -49,6 +49,15 @@ $save_conf_user = false; } } else { + // �ݒ�t�@�C�����ۑ������f�B���N�g�����Ȃ��ꍇ�͐V�K�ō쐬 + if(!file_exists($_conf['pref_dir'])){ + FileCtl::mkdirFor($_conf['conf_user_file']) + } + if(!is_writable($_conf['pref_dir'])){ + // �������݌����𓾂��Ȃ������ꍇ�̓p�[�~�b�V�����̒��ӊ��N������ + p2die("�e�f�B���N�g���̃p�[�~�b�V�������������ĉ������B"); + } + // �f�t�H���g�ݒ��ǂݍ��݁A�}�[�W include P2_CONFIG_DIR . '/conf_user_def.inc.php'; $_conf = array_merge($_conf, $conf_user_def); diff --git a/rep2/ic2.php b/rep2/ic2.php index 1dc843b7c..0793389ba 100644 --- a/rep2/ic2.php +++ b/rep2/ic2.php @@ -49,6 +49,15 @@ ic2_error('x06', 'URL�܂��̓t�@�C����������܂���B', false); } +// �ۑ��f�B���N�g�����Ȃ��ꍇ�͐V�K�ō쐬 +if(!file_exists($ini['General']['cachedir'])){ + FileCtl::mkdirRecursive($ini['General']['cachedir']); +} +if(!is_writable($ini['General']['cachedir'])){ + // �������݌����𓾂��Ȃ������ꍇ�̓p�[�~�b�V�����̒��ӊ��N������ + p2die("�e�f�B���N�g���̃p�[�~�b�V�������������ĉ������B"); +} + if (!is_dir($_conf['tmp_dir'])) { FileCtl::mkdirRecursive($_conf['tmp_dir']); } From a21c3efdad2504d07d5160df123332426ca70e1b Mon Sep 17 00:00:00 2001 From: Killer4989 Date: Sat, 28 Mar 2015 21:50:34 +0900 Subject: [PATCH 089/339] Not has ";" --- lib/bootstrap.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/bootstrap.php b/lib/bootstrap.php index 73d09cae0..24e3b80f4 100644 --- a/lib/bootstrap.php +++ b/lib/bootstrap.php @@ -51,7 +51,7 @@ } else { // �ݒ�t�@�C�����ۑ������f�B���N�g�����Ȃ��ꍇ�͐V�K�ō쐬 if(!file_exists($_conf['pref_dir'])){ - FileCtl::mkdirFor($_conf['conf_user_file']) + FileCtl::mkdirFor($_conf['conf_user_file']); } if(!is_writable($_conf['pref_dir'])){ // �������݌����𓾂��Ȃ������ꍇ�̓p�[�~�b�V�����̒��ӊ��N������ From 36c0ea87598e11c9044e717152f05030122b69c0 Mon Sep 17 00:00:00 2001 From: Killer4989 Date: Sat, 28 Mar 2015 21:54:12 +0900 Subject: [PATCH 090/339] =?UTF-8?q?ng=20=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=81=AE=E5=88=87=E3=82=8A=E5=87=BA=E3=81=97=E6=96=B9=E3=82=92?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 7cf16338a..ab0ed5bb7 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -303,8 +303,9 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { return false; } // 1�s�ڂ������؂�o�� - $firstmsg = trim ( substr ( $body, 0, 100 ) ); - if (strpos ( $firstmsg, 'ng ' ) === 0) { + $posLF = strpos ( $body, "\n" ); + $firstmsg = substr ( $body, 0, $posLF === false ? strlen($body) : $posLF ); + if (preg_match ( "/^ng \((.*)\)$/", $firstmsg ) ) { // ng�Ŏn�܂��Ă���api�̃G���[�̉”\�� if (preg_match ( "/^ng \((.*)\)$/", $firstmsg )) { // �딻��h�~�̂���preg_match�œ�d�`�F�b�N���� From d891630f44afc680e151419d4043803e8f68e0e7 Mon Sep 17 00:00:00 2001 From: Killer4989 Date: Sat, 28 Mar 2015 22:04:38 +0900 Subject: [PATCH 091/339] =?UTF-8?q?ImageCache2=20=E3=81=AE=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E3=83=87=E3=82=A3=E3=83=AC=E3=82=AF=E3=83=88=E3=83=AA?= =?UTF-8?q?=E3=81=8C=E3=81=AA=E3=81=8B=E3=81=A3=E3=81=9F=E9=9A=9B=E3=81=AE?= =?UTF-8?q?=E3=83=91=E3=83=BC=E3=83=9F=E3=83=83=E3=82=B7=E3=83=A7=E3=83=B3?= =?UTF-8?q?=E3=82=92=E6=8C=87=E5=AE=9A=E3=81=99=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- rep2/ic2.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index af93efed6..ca4a1ed82 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150328.2132', // rep2�̃o�[�W���� + 'p2version' => '150328.2202', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/rep2/ic2.php b/rep2/ic2.php index 0793389ba..0f0271c54 100644 --- a/rep2/ic2.php +++ b/rep2/ic2.php @@ -51,7 +51,7 @@ // �ۑ��f�B���N�g�����Ȃ��ꍇ�͐V�K�ō쐬 if(!file_exists($ini['General']['cachedir'])){ - FileCtl::mkdirRecursive($ini['General']['cachedir']); + FileCtl::mkdirRecursive($ini['General']['cachedir'], 0777); } if(!is_writable($ini['General']['cachedir'])){ // �������݌����𓾂��Ȃ������ꍇ�̓p�[�~�b�V�����̒��ӊ��N������ From a824d66db5729a52b6b7c1ff51457f89ff37e02a Mon Sep 17 00:00:00 2001 From: Killer4989 Date: Sat, 28 Mar 2015 22:17:56 +0900 Subject: [PATCH 092/339] =?UTF-8?q?ng=20=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=81=AE=E5=88=A4=E5=AE=9A=E3=82=92=E8=A4=87=E6=95=B0=E3=82=84?= =?UTF-8?q?=E3=81=A3=E3=81=A6=E3=81=84=E3=81=9F=E3=81=AE=E3=81=A7=E5=89=8A?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index ab0ed5bb7..793dcda86 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -302,27 +302,26 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { fclose ( $fp ); return false; } - // 1�s�ڂ������؂�o�� + // 1�s�ڂ�؂�o�� $posLF = strpos ( $body, "\n" ); $firstmsg = substr ( $body, 0, $posLF === false ? strlen($body) : $posLF ); - if (preg_match ( "/^ng \((.*)\)$/", $firstmsg ) ) { - // ng�Ŏn�܂��Ă���api�̃G���[�̉”\�� - if (preg_match ( "/^ng \((.*)\)$/", $firstmsg )) { - // �딻��h�~�̂���preg_match�œ�d�`�F�b�N���� - fclose ( $fp ); - if (strstr ( $firstmsg, "not valid" )) { - // sid�������ɂȂ����”\���B�������F�؂��邽�ߍŏ������蒼���B - if (empty ( $_REQUEST ['relogin2chapi'] )) { - $_REQUEST ['relogin2chapi'] = true; - return $this->downloadDat (); - } + + // ng�Ŏn�܂��Ă���api�̃G���[�̉”\�� + if (preg_match ( "/^ng \((.*)\)$/", $firstmsg )) { + fclose ( $fp ); + if (strstr ( $firstmsg, "not valid" )) { + // sid�������ɂȂ����”\���B�������F�؂��邽�ߍŏ������蒼���B + if (empty ( $_REQUEST ['relogin2chapi'] )) { + $_REQUEST ['relogin2chapi'] = true; + return $this->downloadDat (); } - $this->getdat_error_msg_ht .= "

    rep2 error: API�o�R�ł̃X���b�h�擾�Ɏ��s���܂����B" . $firstmsg . "

    "; - $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&relogin2chapi=true\">API�ōĎ擾�����݂�]"; - $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&olddat=true\">��dat�ōĎ擾�����݂�]"; - $this->diedat = true; - return false; } + $this->getdat_error_msg_ht .= "

    rep2 error: API�o�R�ł̃X���b�h�擾�Ɏ��s���܂����B" . $firstmsg . "

    "; + $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&relogin2chapi=true\">API�ōĎ擾�����݂�]"; + $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&olddat=true\">��dat�ōĎ擾�����݂�]"; + $this->diedat = true; + return false; + } elseif (strpos ( $firstmsg, "�Q�����˂� ��<><>2015/03/13(��) 00:00:00.00 ID:????????<> 3��13�����Q" ) === 0) { fclose ( $fp ); $this->getdat_error_msg_ht .= "

    rep2 error: API�o�R�ł̃X���b�h�擾�Ɏ��s���܂����B
    rep2 info: �X���b�h�����݂��Ȃ����ߋ����O�Ɋi�[����Ă��܂��B

    "; From 589d4dd78a8e32be73b793656f6d06d05694615f Mon Sep 17 00:00:00 2001 From: Killer4989 Date: Sat, 28 Mar 2015 21:54:12 +0900 Subject: [PATCH 093/339] =?UTF-8?q?ng=20=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=81=AE=E5=88=87=E3=82=8A=E5=87=BA=E3=81=97=E6=96=B9=E3=82=92?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 7cf16338a..ab0ed5bb7 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -303,8 +303,9 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { return false; } // 1�s�ڂ������؂�o�� - $firstmsg = trim ( substr ( $body, 0, 100 ) ); - if (strpos ( $firstmsg, 'ng ' ) === 0) { + $posLF = strpos ( $body, "\n" ); + $firstmsg = substr ( $body, 0, $posLF === false ? strlen($body) : $posLF ); + if (preg_match ( "/^ng \((.*)\)$/", $firstmsg ) ) { // ng�Ŏn�܂��Ă���api�̃G���[�̉”\�� if (preg_match ( "/^ng \((.*)\)$/", $firstmsg )) { // �딻��h�~�̂���preg_match�œ�d�`�F�b�N���� From 522f00ee1c191eaa92d3a0b0bf228d914d9f6daf Mon Sep 17 00:00:00 2001 From: Killer4989 Date: Sat, 28 Mar 2015 22:17:56 +0900 Subject: [PATCH 094/339] =?UTF-8?q?ng=20=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=81=AE=E5=88=A4=E5=AE=9A=E3=82=92=E8=A4=87=E6=95=B0=E3=82=84?= =?UTF-8?q?=E3=81=A3=E3=81=A6=E3=81=84=E3=81=9F=E3=81=AE=E3=81=A7=E5=89=8A?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index ab0ed5bb7..793dcda86 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -302,27 +302,26 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { fclose ( $fp ); return false; } - // 1�s�ڂ������؂�o�� + // 1�s�ڂ�؂�o�� $posLF = strpos ( $body, "\n" ); $firstmsg = substr ( $body, 0, $posLF === false ? strlen($body) : $posLF ); - if (preg_match ( "/^ng \((.*)\)$/", $firstmsg ) ) { - // ng�Ŏn�܂��Ă���api�̃G���[�̉”\�� - if (preg_match ( "/^ng \((.*)\)$/", $firstmsg )) { - // �딻��h�~�̂���preg_match�œ�d�`�F�b�N���� - fclose ( $fp ); - if (strstr ( $firstmsg, "not valid" )) { - // sid�������ɂȂ����”\���B�������F�؂��邽�ߍŏ������蒼���B - if (empty ( $_REQUEST ['relogin2chapi'] )) { - $_REQUEST ['relogin2chapi'] = true; - return $this->downloadDat (); - } + + // ng�Ŏn�܂��Ă���api�̃G���[�̉”\�� + if (preg_match ( "/^ng \((.*)\)$/", $firstmsg )) { + fclose ( $fp ); + if (strstr ( $firstmsg, "not valid" )) { + // sid�������ɂȂ����”\���B�������F�؂��邽�ߍŏ������蒼���B + if (empty ( $_REQUEST ['relogin2chapi'] )) { + $_REQUEST ['relogin2chapi'] = true; + return $this->downloadDat (); } - $this->getdat_error_msg_ht .= "

    rep2 error: API�o�R�ł̃X���b�h�擾�Ɏ��s���܂����B" . $firstmsg . "

    "; - $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&relogin2chapi=true\">API�ōĎ擾�����݂�]"; - $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&olddat=true\">��dat�ōĎ擾�����݂�]"; - $this->diedat = true; - return false; } + $this->getdat_error_msg_ht .= "

    rep2 error: API�o�R�ł̃X���b�h�擾�Ɏ��s���܂����B" . $firstmsg . "

    "; + $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&relogin2chapi=true\">API�ōĎ擾�����݂�]"; + $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&olddat=true\">��dat�ōĎ擾�����݂�]"; + $this->diedat = true; + return false; + } elseif (strpos ( $firstmsg, "�Q�����˂� ��<><>2015/03/13(��) 00:00:00.00 ID:????????<> 3��13�����Q" ) === 0) { fclose ( $fp ); $this->getdat_error_msg_ht .= "

    rep2 error: API�o�R�ł̃X���b�h�擾�Ɏ��s���܂����B
    rep2 info: �X���b�h�����݂��Ȃ����ߋ����O�Ɋi�[����Ă��܂��B

    "; From 158df2d785f249e60102b67f73c8851f6b7150b9 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Mon, 30 Mar 2015 11:13:06 +0900 Subject: [PATCH 095/339] =?UTF-8?q?lib/ThreadRead.php=E3=82=92HTTP=5FReque?= =?UTF-8?q?st2=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 1883 +++++++++++++++++--------------------------- 1 file changed, 722 insertions(+), 1161 deletions(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 793dcda86..215c31075 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -47,14 +47,14 @@ public function downloadDat() { global $_conf; // �܂�BBS - if (P2Util::isHostMachiBbs ( $this->host )) { - return DownloadDatMachiBbs::invoke ( $this ); + if (P2Util::isHostMachiBbs ($this->host)) { + return DownloadDatMachiBbs::invoke ($this); // JBBS@������� - } elseif (P2Util::isHostJbbsShitaraba ( $this->host )) { - if (! function_exists ( 'shitarabaDownload' )) { + } elseif (P2Util::isHostJbbsShitaraba ($this->host)) { + if (! function_exists ('shitarabaDownload')) { include P2_LIB_DIR . '/read_shitaraba.inc.php'; } - return shitarabaDownload ( $this ); + return shitarabaDownload ($this); // 2ch�n } else { @@ -62,10 +62,10 @@ public function downloadDat() { $pinktest = "/\w+\.bbspink.com/"; // 2ch bbspink���ǂ� - if (P2Util::isHost2chs ( $this->host ) && ! empty ( $_GET ['maru'] )) { + if (P2Util::isHost2chs ($this->host) && ! empty ($_GET['maru'])) { // ���O�C�����ĂȂ���� or ���O�C����A24���Ԉȏ�o�߂��Ă����玩���ă��O�C�� - if (! file_exists ( $_conf ['sid2ch_php'] ) || ! empty ( $_REQUEST ['relogin2ch'] ) || (filemtime ( $_conf ['sid2ch_php'] ) < time () - 60 * 60 * 24)) { - if (! function_exists ( 'login2ch' )) { + if (! file_exists ($_conf['sid2ch_php']) || ! empty ($_REQUEST['relogin2ch']) || (filemtime ($_conf['sid2ch_php']) < time () - 60 * 60 * 24)) { + if (! function_exists ('login2ch')) { include P2_LIB_DIR . '/login2ch.inc.php'; } if (! login2ch ()) { @@ -75,34 +75,34 @@ public function downloadDat() { } } - include $_conf ['sid2ch_php']; - return $this->_downloadDat2chMaru ( $uaMona, $SID2ch ); + include $_conf['sid2ch_php']; + return $this->_downloadDat2chMaru ($uaMona, $SID2ch); // 2ch bbspink �����^�|�ǂ� - } elseif (P2Util::isHost2chs ( $this->host ) && ! empty ( $_GET ['moritapodat'] ) && $_conf ['p2_2ch_mail'] && $_conf ['p2_2ch_pass']) { - if (! array_key_exists ( 'csrfid', $_GET ) || $this->_getCsrfIdForMoritapoDat () != $_GET ['csrfid']) { - p2die ( '�s���ȃ��N�G�X�g�ł�' ); + } elseif (P2Util::isHost2chs ($this->host) && ! empty ($_GET['moritapodat']) && $_conf['p2_2ch_mail'] && $_conf['p2_2ch_pass']) { + if (! array_key_exists ('csrfid', $_GET) || $this->_getCsrfIdForMoritapoDat () != $_GET['csrfid']) { + p2die ('�s���ȃ��N�G�X�g�ł�'); } return $this->_downloadDat2chMoritapo (); // 2ch�̉ߋ����O�q�ɓǂ� - } elseif (! empty ( $_GET ['kakolog'] ) && ! empty ( $_GET ['kakoget'] )) { - if ($_GET ['kakoget'] == 1) { + } elseif (! empty ($_GET['kakolog']) && ! empty ($_GET['kakoget'])) { + if ($_GET['kakoget'] == 1) { $ext = '.dat.gz'; - } elseif ($_GET ['kakoget'] == 2) { + } elseif ($_GET['kakoget'] == 2) { $ext = '.dat'; } - return $this->_downloadDat2chKako ( $_GET ['kakolog'], $ext ); + return $this->_downloadDat2chKako ($_GET['kakolog'], $ext); // 2ch or 2ch�݊� - } elseif (P2Util::isHost2chs ( $this->host ) && ! empty ( $_GET ['shirokuma'] )) { - return $this->_downloadDat2chMaru ( $uaMona, $SID2ch, true); + } elseif (P2Util::isHost2chs ($this->host) && ! empty ($_GET['shirokuma'])) { + return $this->_downloadDat2chMaru ($uaMona, $SID2ch, true); // 2ch ��API�o�R�ŗ��Ƃ� - } elseif (P2Util::isHost2chs ( $this->host ) && $_conf ['2chapi_use'] == 1 && empty ( $_GET ['olddat'] )) { + } elseif (P2Util::isHost2chs ($this->host) && $_conf['2chapi_use'] == 1 && empty ($_GET['olddat'])) { // ���O�C�����ĂȂ���� or ���O�C����A�ݒ肵�����Ԍo�߂��Ă����玩���ă��O�C�� - if (! file_exists ( $_conf ['sid2chapi_php'] ) || ! empty ( $_REQUEST ['relogin2chapi'] ) || (filemtime ( $_conf ['sid2chapi_php'] ) < time () - 60 * 60 * $_conf ['2chapi_interval'])) { - if (! function_exists ( 'authenticate_2chapi' )) { + if (! file_exists ($_conf['sid2chapi_php']) || ! empty ($_REQUEST['relogin2chapi']) || (filemtime ($_conf['sid2chapi_php']) < time () - 60 * 60 * $_conf['2chapi_interval'])) { + if (! function_exists ('authenticate_2chapi')) { include P2_LIB_DIR . '/auth2chapi.inc.php'; } if (! authenticate_2chapi ()) { @@ -112,12 +112,12 @@ public function downloadDat() { } } - include $_conf ['sid2chapi_php']; - return $this->_downloadDat2chAPI ( $SID2chAPI, $this->length ); + include $_conf['sid2chapi_php']; + return $this->_downloadDat2chAPI ($SID2chAPI, $this->length); } else { // 2ch �ȊO�̊O���� // DAT������DL���� - return $this->_downloadDat2ch ( $this->length ); + return $this->_downloadDat2ch ($this->length); } } } @@ -134,17 +134,17 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { global $_conf; global $debug; - $AppKey = $_conf ['2chapi_appkey']; - $AppName = $_conf ['2chapi_appname']; - $HMKey = $_conf ['2chapi_hmkey']; - $ReadUA = sprintf($_conf['2chapi_ua.read'],$AppName); + $AppKey = $_conf['2chapi_appkey']; + $AppName = $_conf['2chapi_appname']; + $HMKey = $_conf['2chapi_hmkey']; + $ReadUA = sprintf ($_conf['2chapi_ua.read'], $AppName); if (! ($this->host && $this->bbs && $this->key)) { return false; } // >>1�v���r���[�̎��͍����擾���Ȃ��ėǂ��̂ŏ��true(�V������)��Ԃ� - if (is_readable ( $this->keydat ) && ! empty ( $_GET ['one'] )) { + if (is_readable ($this->keydat) && ! empty ($_GET['one'])) { return true; } @@ -152,7 +152,7 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { return false; } - $from_bytes = intval ( $from_bytes ); + $from_bytes = intval ($from_bytes); if ($from_bytes == 0) { $zero_read = true; @@ -161,311 +161,173 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { $from_bytes = $from_bytes - 1; } - $serverName = explode ( '.', $this->host ); + $serverName = explode ('.', $this->host); // $url = "http://{$this->host}/{$this->bbs}/dat/{$this->key}.dat"; // $url="http://news2.2ch.net/test/read.cgi?bbs=newsplus&key=1038486598"; - $url = 'https://api.2ch.net/v1/' . $serverName [0] . '/' . $this->bbs . '/' . $this->key; - $message = '/v1/' . $serverName [0] . '/' . $this->bbs . '/' . $this->key . $sid . $AppKey; - $HB = hash_hmac ( "sha256", $message, $HMKey ); + $url = 'https://api.2ch.net/v1/' . $serverName[0] . '/' . $this->bbs . '/' . $this->key; + $message = '/v1/' . $serverName[0] . '/' . $this->bbs . '/' . $this->key . $sid . $AppKey; + $HB = hash_hmac ("sha256", $message, $HMKey); - $headers = "User-Agent: ${ReadUA}\r\n"; - $headers .= "Connection: close\r\n"; - $headers .= "Content-Type: application/x-www-form-urlencoded\r\n"; + $purl = parse_url ($url); // URL���� - $purl = parse_url ( $url ); // URL���� - - if (! empty ( $_GET ['one'] )) { - // >>1�v���r���[�̎��̓T�[�o�[�ɍŏ��̕����������� - $headers .= "Range: bytes=0-8192\r\n"; - } elseif (! $zero_read) { - $headers .= "Range: bytes={$from_bytes}-\r\n"; - } - - if ($this->modified) { - $headers .= "If-Modified-Since: {$this->modified}\r\n"; - } - - // Basic�F�ؗp�̃w�b�_ - if (isset ( $purl ['user'] ) && isset ( $purl ['pass'] )) { - $headers .= "Authorization: Basic " . base64_encode ( $purl ['user'] . ":" . $purl ['pass'] ) . "\r\n"; - } + try { + $req = new HTTP_Request2 ($url, HTTP_Request2::METHOD_POST); + // �w�b�_ + $req->setHeader ('User-Agent', $ReadUA); + + if (! empty ($_GET['one'])) { + // >>1�v���r���[�̎��̓T�[�o�[�ɍŏ��̕����������� + $req->setHeader ('Range', "bytes=0-8192"); + } elseif (! $zero_read) { + $req->setHeader ('Range', "bytes=" . $from_bytes); + } - $post_values = array ( - 'sid' => $sid, - 'hobo' => $HB, - 'appkey' => $AppKey - ); - - $options ['http'] = array ( - 'method' => 'POST', - 'header' => $headers, - 'ignore_errors' => true, - 'content' => http_build_query ( $post_values ) - ); - - // �v���L�V - if ($_conf ['proxy_use']) { - $options ['http'] += array ( - 'proxy' => 'tcp://' . $_conf ['proxy_host'] . ":" . $_conf ['proxy_port'] - ); - $options ['http'] += array ( - 'request_fulluri' => true - ); - $options ['ssl'] = array ( - 'SNI_enabled' => false - ); - } + if ($this->modified) { + $req->setHeader ('If-Modified-Since', $this->modified); + } - // WEB�T�[�o�֐ڑ� - $fp = @fopen ( $url, 'r', false, stream_context_create ( $options ) ); - if (! $fp) { - self::_pushInfoConnectFailed ( $url, $errno, $errstr ); - $this->diedat = true; - return false; - } - stream_set_timeout ( $fp, $_conf ['http_read_timeout'], 0 ); - - $code = null; - $meta = stream_get_meta_data ( $fp ); - foreach ( $meta ['wrapper_data'] as $l ) { - // ex) HTTP/1.1 304 Not Modified - if (preg_match ( '@^HTTP/1\\.\\d (\\d+) (.+)@i', $l, $matches )) { - $code = $matches [1]; - - if ($code == '200' || $code == '206') { // Partial Content - ; - } elseif ($code == '302') { // Found - // �z�X�g�̈ړ]��ǐ� - $new_host = BbsMap::getCurrentHost ( $this->host, $this->bbs ); - if ($new_host != $this->host) { - fclose ( $fp ); - $this->old_host = $this->host; - $this->host = $new_host; - return $this->_downloadDat2chAPI ( $sid, $from_bytes ); - } else { - fclose ( $fp ); - return $this->_downloadDat2chNotFound ( $code ); - } - } elseif ($code == '304') { // Not Modified - fclose ( $fp ); - $this->isonline = true; - return '304 Not Modified'; - } elseif ($code == '416') { // Requested Range Not Satisfiable - // echo "���ځ[�񌟏o"; - fclose ( $fp ); - $this->onbytes = 0; - $this->modified = null; - return $this->_downloadDat2chAPI ( $sid, 0 ); // ���ځ[�񌟏o�B�S����蒼���B - } else { - fclose ( $fp ); - return $this->_downloadDat2chNotFound ( $code ); - } + // Basic�F�ؗp�̃w�b�_ + if (isset ($purl['user']) && isset ($purl['pass'])) { + $req->setAuth ($purl['user'], $purl['pass'], HTTP_Request2::AUTH_BASIC); } - if ($zero_read) { - if (preg_match ( '/^Content-Length: ([0-9]+)/i', $l, $matches )) { - $this->onbytes = intval ( $matches [1] ); - } - } else { + $req->setConfig (array ( + 'connect_timeout' => $_conf['http_conn_timeout'], + 'timeout' => $_conf['http_read_timeout'], + 'follow_redirects' => false + )); - if (preg_match ( '@^Content-Range: bytes ([^/]+)/([0-9]+)@i', $l, $matches )) { - $this->onbytes = intval ( $matches [2] ); - } + // �v���L�V + if ($_conf['proxy_use']) { + $req->setConfig (array ( + �eproxy_host�f => $_conf['proxy_host'], + �eproxy_port�f => $_conf['proxy_port'] + )); } - if (preg_match ( '/^Last-Modified: (.+)/i', $l, $matches )) { - // echo $matches[1] . '
    '; //debug - $this->modified = $matches [1]; - } - } + // POST������e + $req->addPostParameter (array ( + 'sid' => $sid, + 'hobo' => $HB, + 'appkey' => $AppKey + )); - $body = ''; + // POST�f�[�^�̑��M + $response = $req->send (); - if ($code == '200' || $code == '206') { + $code = $response->getStatus (); - while ( ! p2_stream_eof ( $fp, $timed_out ) ) { - // >>1���v���r���[����p - if (! empty ( $_GET ['one'] )) { - $line = fgets ( $fp, 32800 ); // ���s�P�ʂœǍ��� - if (strstr ( $line, "\n" )) { // ���s���L��Εۑ�; - $body .= $line; - } - unset ( $line ); - } else { - $body .= fread ( $fp, 4096 ); // �ʏ�擾�͂��ځ[�񔻒���s�����߂������ŕۑ����� - } - } + if ($code == '200' || $code == '206') { // Partial Content + $body = $response->getBody (); - if ($timed_out) { - self::_pushInfoReadTimedOut ( $url ); - $this->diedat = true; - fclose ( $fp ); - return false; - } - // 1�s�ڂ�؂�o�� - $posLF = strpos ( $body, "\n" ); - $firstmsg = substr ( $body, 0, $posLF === false ? strlen($body) : $posLF ); - - // ng�Ŏn�܂��Ă���api�̃G���[�̉”\�� - if (preg_match ( "/^ng \((.*)\)$/", $firstmsg )) { - fclose ( $fp ); - if (strstr ( $firstmsg, "not valid" )) { - // sid�������ɂȂ����”\���B�������F�؂��邽�ߍŏ������蒼���B - if (empty ( $_REQUEST ['relogin2chapi'] )) { - $_REQUEST ['relogin2chapi'] = true; - return $this->downloadDat (); + if (! empty ($_GET['one'])) { + $cut = mb_strrpos ($body, "\n"); + $body = mb_substr ($body, 0, $cut === false ? mb_strlen ($body) : $cut + 1); + $this->onbytes = strlen ($body); + } elseif ($zero_read) { + $this->onbytes = intval ($response->getHeader ('Content-Length')); + } else { + if (preg_match ('@^bytes ([^/]+)/([0-9]+)@i', $response->getHeader ('Content-Range'), $matches)) { + $this->onbytes = intval ($matches[2]); } } - $this->getdat_error_msg_ht .= "

    rep2 error: API�o�R�ł̃X���b�h�擾�Ɏ��s���܂����B" . $firstmsg . "

    "; - $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&relogin2chapi=true\">API�ōĎ擾�����݂�]"; - $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&olddat=true\">��dat�ōĎ擾�����݂�]"; - $this->diedat = true; - return false; - } elseif (strpos ( $firstmsg, "�Q�����˂� ��<><>2015/03/13(��) 00:00:00.00 ID:????????<> 3��13�����Q" ) === 0) { - fclose ( $fp ); - $this->getdat_error_msg_ht .= "

    rep2 error: API�o�R�ł̃X���b�h�擾�Ɏ��s���܂����B
    rep2 info: �X���b�h�����݂��Ȃ����ߋ����O�Ɋi�[����Ă��܂��B

    "; - $marutori_ht = $this->_generateMarutoriLink(); - $plugin_ht = $this->_generateWikiDatLink (); - $moritori_ht = $this->_generateMoritapoDatLink (); - $this->getdat_error_msg_ht .= "{$marutori_ht}{$moritori_ht}{$plugin_ht}"; - $this->diedat = true; - return false; - } - unset ( $firstmsg ); - - // �����̉��s�ł��ځ[��`�F�b�N - if (! $zero_read) { - if (substr ( $body, 0, 1 ) != "\n") { - // echo "���ځ[�񌟏o"; - fclose ( $fp ); - $this->onbytes = 0; - $this->modified = null; - return $this->_downloadDat2chAPI ( $sid, 0 ); // ���ځ[�񌟏o�B�S����蒼���B - } - $body = substr ( $body, 1 ); - } + $this->modified = $response->getHeader ('Last-Modified'); - $file_append = ($zero_read) ? 0 : FILE_APPEND; - - if (FileCtl::file_write_contents ( $this->keydat, $body, $file_append ) === false) { - p2die ( 'cannot write file.' ); - } + // 1�s�ڂ�؂�o�� + $posLF = mb_strpos ($body, "\n"); + $firstmsg = mb_substr ($body, 0, $posLF === false ? mb_strlen ($body) : $posLF); - // $GLOBALS['debug'] && $GLOBALS['profiler']->enterSection("dat_size_check"); - // �擾��T�C�Y�`�F�b�N - if ($zero_read == false && $this->onbytes) { - $this->getDatBytesFromLocalDat (); // $aThread->length ��set - if ($this->onbytes != $this->length) { - fclose ( $fp ); - $this->onbytes = 0; - $this->modified = null; - P2Util::pushInfoHtml ( "

    rep2 info: {$this->onbytes}/{$this->length} �t�@�C���T�C�Y���ςȂ̂ŁAdat���Ď擾

    " ); - // $GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection("dat_size_check"); - return $this->_downloadDat2chAPI ( $sid, 0 ); // dat�T�C�Y�͕s���B�S����蒼���B - - // �T�C�Y�������Ȃ炻�̂܂� - } elseif ($this->onbytes == $this->length) { - fclose ( $fp ); - $this->isonline = true; - // $GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('dat_size_check'); - return true; + // ng�Ŏn�܂��Ă���api�̃G���[�̉”\�� + if (preg_match ("/^ng \((.*)\)$/", $firstmsg)) { + if (strstr ($firstmsg, "not valid")) { + // sid�������ɂȂ����”\���B�������F�؂��邽�ߍŏ������蒼���B + if (empty ($_REQUEST['relogin2chapi'])) { + $_REQUEST['relogin2chapi'] = true; + return $this->downloadDat (); + } + } + $this->getdat_error_msg_ht .= "

    rep2 error: API�o�R�ł̃X���b�h�擾�Ɏ��s���܂����B" . $firstmsg . "

    "; + $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&relogin2chapi=true\">API�ōĎ擾�����݂�]"; + $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&olddat=true\">��dat�ōĎ擾�����݂�]"; + $this->diedat = true; + return false; + } elseif (mb_strpos ($firstmsg, "�Q�����˂� ��<><>2015/03/13(��) 00:00:00.00 ID:????????<> 3��13�����Q") === 0) { + $this->getdat_error_msg_ht .= "

    rep2 error: API�o�R�ł̃X���b�h�擾�Ɏ��s���܂����B
    rep2 info: �X���b�h�����݂��Ȃ����ߋ����O�Ɋi�[����Ă��܂��B

    "; + $marutori_ht = $this->_generateMarutoriLink (); + $plugin_ht = $this->_generateWikiDatLink (); + $moritori_ht = $this->_generateMoritapoDatLink (); + $this->getdat_error_msg_ht .= "{$marutori_ht}{$moritori_ht}{$plugin_ht}"; + $this->diedat = true; + return false; + } + unset ($firstmsg); + + // �����̉��s�ł��ځ[��`�F�b�N + if (! $zero_read) { + if (substr ($body, 0, 1) != "\n") { + // echo "���ځ[�񌟏o"; + $this->onbytes = 0; + $this->modified = null; + return $this->_downloadDat2chAPI ($sid, 0); // ���ځ[�񌟏o�B�S����蒼���B + } + $body = substr ($body, 1); } - } - } else { - // �X���b�h���Ȃ��Ɣ��f - fclose ( $fp ); - return $this->_downloadDat2chNotFound ( $code ); - } - - fclose ( $fp ); - if ($timed_out) { - self::_pushInfoReadTimedOut ( $url ); - $this->diedat = true; - return false; - } else { - $this->isonline = true; - return true; - } - } - // }}} - // {{{ _freadHttpHeader() - /** - * HTTP�w�b�_���X�|���X��ǂݍ��� - * - * @access private - * @param resource $fp fsockopen �ŊJ�����t�@�C���|�C���^ - * @return array|false - */ - function _freadHttpHeader($fp) - { - $h = array(); - - while (!feof($fp)) { - $l = fgets($fp, 8192); - - // ex) HTTP/1.1 304 Not Modified - if (preg_match("|HTTP/1\.\d (\d+) (.+)\r\n|", $l, $matches)) { - $h['code'] = $matches[1]; - $h['message'] = $matches[2]; - $h['HTTP'] = rtrim($l); - } + $file_append = ($zero_read) ? 0 : FILE_APPEND; - if (preg_match('/^(.+?): (.+)\r\n/', $l, $matches)) { - $h['headers'][$matches[1]] = $matches[2]; + if (FileCtl::file_write_contents ($this->keydat, $body, $file_append) === false) { + p2die ('cannot write file.'); + } - } elseif ($l == "\r\n") { - if (!isset($h['code'])) { - return false; + // $GLOBALS['debug'] && $GLOBALS['profiler']->enterSection("dat_size_check"); + // �擾��T�C�Y�`�F�b�N + if ($zero_read == false && $this->onbytes) { + $this->getDatBytesFromLocalDat (); // $aThread->length ��set + if ($this->onbytes != $this->length) { + $this->onbytes = 0; + $this->modified = null; + P2Util::pushInfoHtml ("

    rep2 info: {$this->onbytes}/{$this->length} �t�@�C���T�C�Y���ςȂ̂ŁAdat���Ď擾

    "); + // $GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection("dat_size_check"); + return $this->_downloadDat2chAPI ($sid, 0); // dat�T�C�Y�͕s���B�S����蒼���B + } } - return $h; - } - } - return false; - } - // }}} - // {{{ _pushInfoHtmlFreadHttpHeaderError() - /** - * HTTP�w�b�_���X�|���X�̎擾�G���[�� P2Util::pushInfoHtml() ���� - * - * @access private - * @return void - */ - function _pushInfoHtmlFreadHttpHeaderError($url) - { - P2Util::pushInfoHtml(sprintf('

    p2 info: %s ����w�b�_���X�|���X���擾�ł��܂���ł����B

    ',self::_urlToAnchor($url))); - } - // }}} - // {{{ _getOnbytesFromHeader() - /** - * HTTP�w�b�_���X�|���X����t�@�C���T�C�Y���擾���� - * - * @access private - * @param array $headers - * @param boolean $zero_read - * @return integer|false - */ - function _getOnbytesFromHeader($headers, $zero_read = true) - { - if ($zero_read) { - if (isset($headers['Content-Length'])) { - if (preg_match("/^([0-9]+)/", $headers['Content-Length'], $matches)) { - return $onbytes = $matches[1]; + $this->isonline = true; + return true; + } elseif ($code == '302') { // Found + // �z�X�g�̈ړ]��ǐ� + $new_host = BbsMap::getCurrentHost ($this->host, $this->bbs); + if ($new_host != $this->host) { + $this->old_host = $this->host; + $this->host = $new_host; + return $this->_downloadDat2chAPI ($sid, $from_bytes); + } else { + return $this->_downloadDat2chNotFound ($code); } + } elseif ($code == '304') { + $this->isonline = true; + return '304 Not Modified'; + } elseif ($code == '416') { // Requested Range Not Satisfiable + // echo "���ځ[�񌟏o"; + $this->onbytes = 0; + $this->modified = null; + return $this->_downloadDat2chAPI ($sid, 0); // ���ځ[�񌟏o�B�S����蒼���B + } else { + return $this->_downloadDat2chNotFound ($code); } - } else { - if (isset($headers['Content-Range'])) { - if (preg_match("/^bytes ([^\/]+)\/([0-9]+)/", $headers['Content-Range'], $matches)) { - return $onbytes = $matches[2]; - } + if ($response->getHeader ('Location')) { + $post_seikou = true; } + } catch (Exception $e) { + $this->getdat_error_msg_ht .= "

    �T�[�o�ڑ��G���[: " . $e->getMessage (); + $this->getdat_error_msg_ht .= "
    rep2 error: �ƒT�[�o�ւ̐ڑ��Ɏ��s���܂����B

    "; + $this->diedat = true; + return false; } - - return false; } + // }}} // {{{ _downloadDat2ch() @@ -474,21 +336,20 @@ function _getOnbytesFromHeader($headers, $zero_read = true) * * @return mix �擾�ł������A�X�V���Ȃ������ꍇ��true��Ԃ� */ - protected function _downloadDat2ch($from_bytes) - { + protected function _downloadDat2ch($from_bytes) { global $_conf; global $debug; - if (!($this->host && $this->bbs && $this->key)) { + if (! ($this->host && $this->bbs && $this->key)) { return false; } - //>>1�v���r���[�̎��͍����擾���Ȃ��ėǂ��̂ŏ��true(�V������)��Ԃ� - if (is_readable($this->keydat) && !empty($_GET['one'])) { + // >>1�v���r���[�̎��͍����擾���Ȃ��ėǂ��̂ŏ��true(�V������)��Ԃ� + if (is_readable ($this->keydat) && ! empty ($_GET['one'])) { return true; } - $from_bytes = intval($from_bytes); + $from_bytes = intval ($from_bytes); if ($from_bytes == 0) { $zero_read = true; @@ -497,220 +358,147 @@ protected function _downloadDat2ch($from_bytes) $from_bytes = $from_bytes - 1; } - $method = 'GET'; - $url = "http://{$this->host}/{$this->bbs}/dat/{$this->key}.dat"; - //$url="http://news2.2ch.net/test/read.cgi?bbs=newsplus&key=1038486598"; - - $purl = parse_url($url); // URL���� - if (isset($purl['query'])) { // �N�G���[ - $purl['query'] = '?' . $purl['query']; - } else { - $purl['query'] = ''; - } - - // �v���L�V - if ($_conf['proxy_use']) { - $send_host = $_conf['proxy_host']; - $send_port = $_conf['proxy_port']; - $send_path = $url; - } else { - $send_host = $purl['host']; - $send_port = isset($purl['port']) ? $purl['port'] : 80; - $send_path = $purl['path'] . $purl['query']; - } - - if (!$send_port) { - $send_port = 80; // �f�t�H���g��80 - } - - $request = "{$method} {$send_path} HTTP/1.0\r\n"; - $request .= "Host: {$purl['host']}\r\n"; - $request .= "Accept: */*\r\n"; - //$request .= "Accept-Charset: Shift_JIS\r\n"; - //$request .= "Accept-Encoding: gzip, deflate\r\n"; - $request .= "Accept-Language: ja, en\r\n"; - $request .= "User-Agent: Monazilla/1.00 ({$_conf['p2ua']})\r\n"; - - if(!empty($_GET['one'])) { - //>>1�v���r���[�̎��̓T�[�o�[�ɍŏ��̕����������� - $headers .= "Range: bytes=0-8192\r\n"; - } elseif (!$zero_read) { - $request .= "Range: bytes={$from_bytes}-\r\n"; - } - - $request .= "Referer: http://{$purl['host']}/{$this->bbs}/\r\n"; - - if ($this->modified) { - $request .= "If-Modified-Since: {$this->modified}\r\n"; - } - - // Basic�F�ؗp�̃w�b�_ - if (isset($purl['user']) && isset($purl['pass'])) { - $request .= "Authorization: Basic ".base64_encode($purl['user'].":".$purl['pass'])."\r\n"; - } - - $request .= "Connection: Close\r\n"; + // $url="http://news2.2ch.net/test/read.cgi?bbs=newsplus&key=1038486598"; - $request .= "\r\n"; + $purl = parse_url ($url); // URL���� + // $request .= "Accept-Charset: Shift_JIS\r\n"; + // $request .= "Accept-Encoding: gzip, deflate\r\n"; - // WEB�T�[�o�֐ڑ� - $fp = @fsockopen($send_host, $send_port, $errno, $errstr, $_conf['http_conn_timeout']); - if (!$fp) { - self::_pushInfoConnectFailed($url, $errno, $errstr); - $this->diedat = true; - return false; - } - stream_set_timeout($fp, $_conf['http_read_timeout'], 0); + try { + $req = new HTTP_Request2 ($url, HTTP_Request2::METHOD_GET); + // �w�b�_ + $req->setHeader ('User-Agent', P2Util::getP2UA (true)); + $req->setHeader ('Referer', "http://{$purl['host']}/{$this->bbs}/"); + + if (! empty ($_GET['one'])) { + // >>1�v���r���[�̎��̓T�[�o�[�ɍŏ��̕����������� + $req->setHeader ('Range', "bytes=0-8192"); + } elseif (! $zero_read) { + $req->setHeader ('Range', "bytes=" . $from_bytes); + } - fputs($fp, $request); + if ($this->modified) { + $req->setHeader ('If-Modified-Since', $this->modified); + } - $code = null; + // Basic�F�ؗp�̃w�b�_ + if (isset ($purl['user']) && isset ($purl['pass'])) { + $req->setAuth ($purl['user'], $purl['pass'], HTTP_Request2::AUTH_BASIC); + } - // HTTP�w�b�_���X�|���X���擾���� - $h = $this->_freadHttpHeader($fp); - if ($h === false) { - fclose($fp); - $this->_pushInfoHtmlFreadHttpHeaderError($url); - $this->diedat = true; - return false; - } - $code = $h['code']; + $req->setConfig (array ( + 'connect_timeout' => $_conf['http_conn_timeout'], + 'timeout' => $_conf['http_read_timeout'], + 'follow_redirects' => false + )); - if ($code == '200' || $code == '206') { // Partial Content - ; + // �v���L�V + if ($_conf['proxy_use']) { + $req->setConfig (array ( + �eproxy_host�f => $_conf['proxy_host'], + �eproxy_port�f => $_conf['proxy_port'] + )); + } - } elseif ($code == '302') { // Found + // Request�̑��M + $response = $req->send (); - // �z�X�g�̈ړ]��ǐ� - $new_host = BbsMap::getCurrentHost($this->host, $this->bbs); - if ($new_host != $this->host) { - fclose($fp); - $this->old_host = $this->host; - $this->host = $new_host; - return $this->_downloadDat2ch($from_bytes); - } else { - fclose($fp); - return $this->_downloadDat2chNotFound($code); - } + $code = $response->getStatus (); - } elseif ($code == '304') { // Not Modified - fclose($fp); - $this->isonline = true; - return '304 Not Modified'; + if ($code == '200' || $code == '206') { // Partial Content + $body = $response->getBody (); - } elseif ($code == '416') { // Requested Range Not Satisfiable - //echo "���ځ[�񌟏o"; - fclose($fp); - $this->onbytes = 0; - $this->modified = null; - return $this->_downloadDat2ch(0); // ���ځ[�񌟏o�B�S����蒼���B + if (! empty ($_GET['one'])) { + $cut = mb_strrpos ($body, "\n"); + $body = mb_substr ($body, 0, $cut === false ? mb_strlen ($body) : $cut + 1); + $this->onbytes = strlen ($body); + } elseif ($zero_read) { + $this->onbytes = intval ($response->getHeader ('Content-Length')); + } else { + if (preg_match ('@^bytes ([^/]+)/([0-9]+)@i', $response->getHeader ('Content-Range'), $matches)) { + $this->onbytes = intval ($matches[2]); + } + } - } else { - fclose($fp); - return $this->_downloadDat2chNotFound($code); - } + $this->modified = $response->getHeader ('Last-Modified'); - $r = $this->_getOnbytesFromHeader($h['headers'], $zero_read); - if ($r !== false) { - $this->onbytes = $r; - } + // 1�s�ڂ�؂�o�� + $posLF = mb_strpos ($body, "\n"); + $firstmsg = mb_substr ($body, 0, $posLF === false ? mb_strlen ($body) : $posLF); - if (isset($h['headers']['Last-Modified'])) { - $this->modified = $h['headers']['Last-Modified']; - } + // �z�X�g��2ch�̎���DAT�𗘗p�ł��Ȃ��|�̃��b�Z�[�W���o����G���[�Ƃ���iDAT�j���΍�j + if (P2Util::isHost2chs ($this->host)) { + if (mb_strpos ($firstmsg, "�Q�����˂� ��<><>2015/03/13(��) 00:00:00.00 ID:????????<> 3��13�����Q") === 0) { + $this->getdat_error_msg_ht .= "

    rep2 error: API�o�R�ł̃X���b�h�擾�Ɏ��s���܂����B
    rep2 info: �X���b�h�����݂��Ȃ����ߋ����O�Ɋi�[����Ă��܂��B

    "; + $marutori_ht = $this->_generateMarutoriLink (); + $plugin_ht = $this->_generateWikiDatLink (); + $moritori_ht = $this->_generateMoritapoDatLink (); + $this->getdat_error_msg_ht .= "{$marutori_ht}{$moritori_ht}{$plugin_ht}"; + $this->diedat = true; + return false; + } + unset ($firstmsg); + } - // body��ǂ� - $body = ''; - if ($code == '200' || $code == '206') { - - while (!p2_stream_eof($fp, $timed_out)) { - //>>1���v���r���[����p - if (!empty($_GET['one'])) { - $line = fgets($fp, 32800); //���s�P�ʂœǍ��� - if (strstr($line, "\n")) {//���s���L��Εۑ�; - $body .= $line; + // �����̉��s�ł��ځ[��`�F�b�N + if (! $zero_read) { + if (substr ($body, 0, 1) != "\n") { + // echo "���ځ[�񌟏o"; + $this->onbytes = 0; + $this->modified = null; + return $this->_downloadDat2chAPI ($sid, 0); // ���ځ[�񌟏o�B�S����蒼���B } - unset($line); - } else { - $body .= fread($fp, 4096); //�ʏ�擾�͂��ځ[�񔻒���s�����߂������ŕۑ����� + $body = substr ($body, 1); } - } - if ($timed_out) { - self::_pushInfoReadTimedOut($url); - $this->diedat = true; - fclose($fp); - return false; - } + $file_append = ($zero_read) ? 0 : FILE_APPEND; - //�z�X�g��2ch�̎���DAT�𗘗p�ł��Ȃ��|�̃��b�Z�[�W���o����G���[�Ƃ���iDAT�j���΍�j - if (P2Util::isHost2chs($this->host)) - { - $firstmsg = substr($body, 0, 100); - if (strpos($firstmsg, "�Q�����˂� ��<><>2015/03/13(��) 00:00:00.00 ID:????????<> 3��13�����Q")===0) { - $this->getdat_error_msg_ht .= "

    rep2 error: 2�����˂��DAT�񋟂͏I�����܂����B

    "; - $this->diedat = true; - fclose($fp); - return false; + if (FileCtl::file_write_contents ($this->keydat, $body, $file_append) === false) { + p2die ('cannot write file.'); } - unset($firstmsg); - } - // �����̉��s�ł��ځ[��`�F�b�N - if (!$zero_read) { - if (substr($body, 0, 1) != "\n") { - //echo "���ځ[�񌟏o"; - fclose($fp); - $this->onbytes = 0; - $this->modified = null; - return $this->_downloadDat2ch(0); // ���ځ[�񌟏o�B�S����蒼���B + // $GLOBALS['debug'] && $GLOBALS['profiler']->enterSection("dat_size_check"); + // �擾��T�C�Y�`�F�b�N + if ($zero_read == false && $this->onbytes) { + $this->getDatBytesFromLocalDat (); // $aThread->length ��set + if ($this->onbytes != $this->length) { + $this->onbytes = 0; + $this->modified = null; + P2Util::pushInfoHtml ("

    rep2 info: {$this->onbytes}/{$this->length} �t�@�C���T�C�Y���ςȂ̂ŁAdat���Ď擾

    "); + // $GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection("dat_size_check"); + return $this->_downloadDat2chAPI ($sid, 0); // dat�T�C�Y�͕s���B�S����蒼���B + } } - $body = substr($body, 1); - } - - $file_append = ($zero_read) ? 0 : FILE_APPEND; - - if (FileCtl::file_write_contents($this->keydat, $body, $file_append) === false) { - p2die('cannot write file.'); - } - //$GLOBALS['debug'] && $GLOBALS['profiler']->enterSection("dat_size_check"); - // �擾��T�C�Y�`�F�b�N - if ($zero_read == false && $this->onbytes) { - $this->getDatBytesFromLocalDat(); // $aThread->length ��set - if ($this->onbytes != $this->length) { - fclose($fp); - $this->onbytes = 0; - $this->modified = null; - P2Util::pushInfoHtml("

    rep2 info: {$this->onbytes}/{$this->length} �t�@�C���T�C�Y���ςȂ̂ŁAdat���Ď擾

    "); - //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection("dat_size_check"); - return $this->_downloadDat2ch(0); //dat�T�C�Y�͕s���B�S����蒼���B - - // �T�C�Y�������Ȃ炻�̂܂� - } elseif ($this->onbytes == $this->length) { - fclose($fp); - $this->isonline = true; - //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('dat_size_check'); - return true; + $this->isonline = true; + return true; + } elseif ($code == '302') { // Found + // �z�X�g�̈ړ]��ǐ� + $new_host = BbsMap::getCurrentHost ($this->host, $this->bbs); + if ($new_host != $this->host) { + $this->old_host = $this->host; + $this->host = $new_host; + return $this->_downloadDat2chAPI ($sid, $from_bytes); + } else { + return $this->_downloadDat2chNotFound ($code); } + } elseif ($code == '304') { + $this->isonline = true; + return '304 Not Modified'; + } elseif ($code == '416') { // Requested Range Not Satisfiable + // echo "���ځ[�񌟏o"; + $this->onbytes = 0; + $this->modified = null; + return $this->_downloadDat2chAPI ($sid, 0); // ���ځ[�񌟏o�B�S����蒼���B + } else { + return $this->_downloadDat2chNotFound ($code); } - //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('dat_size_check'); - - } else { - // �X���b�h���Ȃ��Ɣ��f - fclose($fp); - return $this->_downloadDat2chNotFound($code); - } - - fclose($fp); - if ($timed_out) { - self::_pushInfoReadTimedOut($url); + } catch (Exception $e) { + $this->getdat_error_msg_ht .= "

    �T�[�o�ڑ��G���[: " . $e->getMessage (); + $this->getdat_error_msg_ht .= "
    rep2 error: �ƒT�[�o�ւ̐ڑ��Ɏ��s���܂����B

    "; $this->diedat = true; return false; - } else { - $this->isonline = true; - return true; } } @@ -720,11 +508,10 @@ protected function _downloadDat2ch($from_bytes) /** * 2ch DAT���_�E�����[�h�ł��Ȃ������Ƃ��ɌĂяo����� */ - protected function _downloadDat2chNotFound($code = null) - { + protected function _downloadDat2chNotFound($code = null) { // 2ch, bbspink �Ȃ�read.cgi�Ŋm�F - if (P2Util::isHost2chs($this->host) || P2Util::isHostVip2ch($this->host)) { - $this->getdat_error_msg_ht .= $this->get2chDatError($code); + if (P2Util::isHost2chs ($this->host) || P2Util::isHostVip2ch ($this->host)) { + $this->getdat_error_msg_ht .= $this->get2chDatError ($code); } $this->diedat = true; return false; @@ -738,187 +525,96 @@ protected function _downloadDat2chNotFound($code = null) * * @param string $uaMona * @param string $SID2ch - * @param bool $shirokuma true�Ȃ�offlaw2�Ŏ擾 + * @param bool $shirokuma + * true�Ȃ�offlaw2�Ŏ擾 * @return bool * @see lib/login2ch.inc.php */ - protected function _downloadDat2chMaru($uaMona, $SID2ch, $shirokuma = false) - { + protected function _downloadDat2chMaru($uaMona, $SID2ch, $shirokuma = false) { global $_conf; - if (!($this->host && $this->bbs && $this->key && $this->keydat)) { + if (! ($this->host && $this->bbs && $this->key && $this->keydat)) { return false; } - $method = 'GET'; - - // GET /test/offlaw.cgi?bbs=�–�&key=�X���b�h�ԍ�&sid=�Z�b�V����ID HTTP/1.1 - //$url = "http://{$this->host}/test/offlaw.cgi/{$this->bbs}/{$this->key}/?raw=0.0&sid="; - if (!$shirokuma) { + // GET /test/offlaw.cgi?bbs=�–�&key=�X���b�h�ԍ�&sid=�Z�b�V����ID HTTP/1.1 + // $url = "http://{$this->host}/test/offlaw.cgi/{$this->bbs}/{$this->key}/?raw=0.0&sid="; + if (! $shirokuma) { // �Q�l�Ή� - $rokkasystem = explode(".", $this->host , 2); + $rokkasystem = explode (".", $this->host, 2); $url = "http://rokka.$rokkasystem[1]/$rokkasystem[0]/{$this->bbs}/{$this->key}/?raw=0.0&sid="; - $url .= rawurlencode($SID2ch); + $url .= rawurlencode ($SID2ch); } else { - $url ="http://{$this->host}/test/offlaw2.so?shiro=kuma&bbs={$this->bbs}&key={$this->key}&sid=ERROR"; - } - $purl = parse_url($url); // URL���� - if (isset($purl['query'])) { // �N�G���[ - $purl['query'] = '?'.$purl['query']; - } else { - $purl['query'] = ''; - } - - // �v���L�V - if ($_conf['proxy_use']) { - $send_host = $_conf['proxy_host']; - $send_port = $_conf['proxy_port']; - $send_path = $url; - } else { - $send_host = $purl['host']; - $send_port = $purl['port']; - $send_path = $purl['path'].$purl['query']; - } - - if (!$send_port) { - $send_port = 80; // �f�t�H���g��80 - } - - $request = $method." ".$send_path." HTTP/1.0\r\n"; - $request .= "Host: ".$purl['host']."\r\n"; - $request .= "Accept-Encoding: gzip, deflate\r\n"; - //$request .= "Accept-Language: ja, en\r\n"; - $request .= "User-Agent: {$uaMona} ({$_conf['p2ua']})\r\n"; - //$request .= "X-2ch-UA: {$_conf['p2ua']}\r\n"; - //$request .= "Range: bytes={$from_bytes}-\r\n"; - $request .= "Connection: Close\r\n"; - /* - if ($modified) { - $request .= "If-Modified-Since: $modified\r\n"; - } - */ - $request .= "\r\n"; - - // WEB�T�[�o�֐ڑ� - $fp = @fsockopen($send_host, $send_port, $errno, $errstr, $_conf['http_conn_timeout']); - if (!$fp) { - self::_pushInfoConnectFailed($url, $errno, $errstr); - $this->diedat = true; - return false; - } - stream_set_timeout($fp, $_conf['http_read_timeout'], 0); - - fputs($fp, $request); - - $body = ''; - $code = null; - $chunked = false; - $is_gzip = false; - $start_here = false; - - // HTTP�w�b�_���X�|���X���擾���� - $h = $this->_freadHttpHeader($fp); - if ($h === false) { - fclose($fp); - $this->_pushInfoHtmlFreadHttpHeaderError($url); - $this->diedat = true; - return false; + $url = "http://{$this->host}/test/offlaw2.so?shiro=kuma&bbs={$this->bbs}&key={$this->key}&sid=ERROR"; } + $purl = parse_url ($url); // URL���� - // {{{ HTTP�R�[�h���`�F�b�N + try { + $req = new HTTP_Request2 ($url, HTTP_Request2::METHOD_GET); + // �w�b�_ + $req->setHeader ('User-Agent', "{$uaMona} ({$_conf['p2ua']})"); + $req->setHeader ('Accept-Encoding', "gzip, deflate"); + + $req->setConfig (array ( + 'connect_timeout' => $_conf['http_conn_timeout'], + 'timeout' => $_conf['http_read_timeout'], + 'follow_redirects' => false + )); + + // �v���L�V + if ($_conf['proxy_use']) { + $req->setConfig (array ( + �eproxy_host�f => $_conf['proxy_host'], + �eproxy_port�f => $_conf['proxy_port'] + )); + } - $code = $h['code']; + // Request�̑��M + $response = $req->send (); - if ($code == '200') { - ; - } elseif ($code == '304') { - fclose($fp); - //$this->isonline = true; - return '304 Not Modified'; - } else { - fclose($fp); - return $this->_downloadDat2chMaruNotFound(); - } + $code = $response->getStatus (); - if (isset($h['headers']['Content-Encoding'])) { - if (preg_match("/^(x-)?gzip/", $h['headers']['Content-Encoding'], $matches)) { - $isGzip = true; - } - } - if (isset($h['headers']['Content-Length'])) { - if (preg_match("/^([0-9]+)/", $h['headers']['Content-Length'], $matches)) { - $this->onbytes = $h['headers']['Content-Length']; - } - } - if (isset($h['headers']['Transfer-Encoding'])) { - if ($h['headers']['Transfer-Encoding'] == 'chunked') { - $chunked = true; - } - } - if (isset($h['headers']['Last-Modified'])) { - $this->modified = $h['headers']['Last-Modified']; - } + if ($code == '200' || $code == '206') { // Partial Content + $body = $response->getBody (); - if ($code == '200') { + $this->onbytes = intval ($response->getHeader ('Content-Length')); - while (!p2_stream_eof($fp, $timed_out)) { - $body .= fread($fp, 4096); - } - - if ($timed_out) { - self::_pushInfoReadTimedOut($url); - //$this->diedat = true; - fclose($fp); - return false; - } + $this->modified = $response->getHeader ('Last-Modified'); - // gzip���k�Ȃ� - if ($is_gzip) { - $body = self::_decodeGzip($body, $url); - if ($body === null) { - //$this->diedat = true; - fclose($fp); - return false; + if (FileCtl::file_write_contents ($this->keydat, $body, $file_append) === false) { + p2die ('cannot write file. downloadDat2chMaru()'); } - } - - if (FileCtl::file_write_contents($this->keydat, $body) === false) { - p2die('cannot write file. downloadDat2chMaru()'); - } - // �N���[�j���O ===== - if ($marudatlines = FileCtl::file_read_lines($this->keydat)) { - if (!$shirokuma) { - $firstline = array_shift($marudatlines); - // �`�����N�Ƃ� - if (strpos($firstline, 'Success') === false) { // �Q�l(rokka)�Ή� - $secondline = array_shift($marudatlines); + // �N���[�j���O ===== + if ($marudatlines = FileCtl::file_read_lines ($this->keydat)) { + if (! $shirokuma) { + $firstline = array_shift ($marudatlines); + // �`�����N�Ƃ� + if (strpos ($firstline, 'Success') === false) { // �Q�l(rokka)�Ή� + $secondline = array_shift ($marudatlines); + } } - } - $cont = ''; - foreach ($marudatlines as $aline) { - // �`�����N�G���R�[�f�B���O���~�����Ƃ���(HTTP 1.0�ł��̂�) - if ($chunked) { - $cont .= $aline; - } else { + $cont = ''; + foreach ($marudatlines as $aline) { $cont .= $aline; } + if (FileCtl::file_write_contents ($this->keydat, $cont) === false) { + p2die ('cannot write file. downloadDat2chMaru()'); + } } - if (FileCtl::file_write_contents($this->keydat, $cont) === false) { - p2die('cannot write file. downloadDat2chMaru()'); - } - } - } else { - // dat.gz�͂Ȃ������Ɣ��f - fclose($fp); - return $this->_downloadDat2chMaruNotFound(); + return true; + } elseif ($code == '304') { + return '304 Not Modified'; + } else { + return $this->_downloadDat2chMaruNotFound ($code); + } + } catch (Exception $e) { + $this->getdat_error_msg_ht .= "

    �T�[�o�ڑ��G���[: " . $e->getMessage (); + $this->getdat_error_msg_ht .= "
    rep2 error: �ƒT�[�o�ւ̐ڑ��Ɏ��s���܂����B

    "; + $this->diedat = true; + return false; } - - fclose($fp); - //$this->isonline = true; - //$this->datochiok = 1; - return !$timed_out; } // }}} @@ -927,17 +623,16 @@ protected function _downloadDat2chMaru($uaMona, $SID2ch, $shirokuma = false) /** * ��ID�ł̎擾���ł��Ȃ������Ƃ��ɌĂяo����� */ - protected function _downloadDat2chMaruNotFound() - { + protected function _downloadDat2chMaruNotFound() { global $_conf; // �ă`�������W���܂��Ȃ�A�ă`�������W����BSID���ύX����Ă��܂��Ă���ꍇ�����鎞�̂��߂̎����`�������W�B - if (empty($_REQUEST['relogin2ch']) && empty($_REQUEST['shirokuma'])) { + if (empty ($_REQUEST['relogin2ch']) && empty ($_REQUEST['shirokuma'])) { $_REQUEST['relogin2ch'] = true; - return $this->downloadDat(); + return $this->downloadDat (); } else { - $remarutori_ht = $this->_generateMarutoriLink(true); - $moritori_ht = $this->_generateMoritapoDatLink(); + $remarutori_ht = $this->_generateMarutoriLink (true); + $moritori_ht = $this->_generateMoritapoDatLink (); $this->getdat_error_msg_ht .= "

    rep2 info: ��ID�ł̃X���b�h�擾�Ɏ��s���܂����B{$remarutori_ht}{$moritori_ht}

    "; $this->diedat = true; return false; @@ -950,128 +645,61 @@ protected function _downloadDat2chMaruNotFound() /** * 2ch�̉ߋ����O�q�ɂ���dat.gz���_�E�����[�h���𓀂��� */ - protected function _downloadDat2chKako($uri, $ext) - { + protected function _downloadDat2chKako($uri, $ext) { global $_conf; - $url = $uri.$ext; - - $method = 'GET'; - - $purl = parse_url($url); // URL���� - // �N�G���[ - if (isset($purl['query'])) { - $purl['query'] = "?".$purl['query']; - } else { - $purl['query'] = ""; - } - - // �v���L�V - if ($_conf['proxy_use']) { - $send_host = $_conf['proxy_host']; - $send_port = $_conf['proxy_port']; - $send_path = $url; - } else { - $send_host = $purl['host']; - $send_port = $purl['port']; - $send_path = $purl['path'].$purl['query']; - } - // �f�t�H���g��80 - if (!$send_port) { - $send_port = 80; - } - - $request = "{$method} {$send_path} HTTP/1.0\r\n"; - $request .= "Host: {$purl['host']}\r\n"; - $request .= "User-Agent: Monazilla/1.00 ({$_conf['p2ua']})\r\n"; - $request .= "Connection: Close\r\n"; - //$request .= "Accept-Encoding: gzip\r\n"; - /* - if ($modified) { - $request .= "If-Modified-Since: $modified\r\n"; - } - */ - $request .= "\r\n"; - - // WEB�T�[�o�֐ڑ� - $fp = @fsockopen($send_host, $send_port, $errno, $errstr, $_conf['http_conn_timeout']); - if (!$fp) { - self::_pushInfoConnectFailed($url, $errno, $errstr); - return false; - } - stream_set_timeout($fp, $_conf['http_read_timeout'], 0); + $url = $uri . $ext; - fputs($fp, $request); + $purl = parse_url ($url); // URL���� - $body = ''; - $code = null; - $is_gzip = false; - $start_here = false; - - // HTTP�w�b�_���X�|���X���擾���� - $h = $this->_freadHttpHeader($fp); - if ($h === false) { - fclose($fp); - $this->_pushInfoHtmlFreadHttpHeaderError($url); - $this->diedat = true; - return false; - } + try { + $req = new HTTP_Request2 ($url, HTTP_Request2::METHOD_GET); + // �w�b�_ + $req->setHeader ('User-Agent', P2Util::getP2UA(true)); + $req->setHeader ('Accept-Encoding', "gzip, deflate"); + + $req->setConfig (array ( + 'connect_timeout' => $_conf['http_conn_timeout'], + 'timeout' => $_conf['http_read_timeout'], + 'follow_redirects' => false + )); + + // �v���L�V + if ($_conf['proxy_use']) { + $req->setConfig (array ( + �eproxy_host�f => $_conf['proxy_host'], + �eproxy_port�f => $_conf['proxy_port'] + )); + } - // {{{ HTTP�R�[�h���`�F�b�N + // Request�̑��M + $response = $req->send (); - $code = $h['code']; + $code = $response->getStatus (); - if ($code == '200') { - ; - } elseif ($code == '304') { - fclose($fp); - //$this->isonline = true; - return '304 Not Modified'; - } else { - fclose($fp); - return $this->_downloadDat2chMaruNotFound(); - } + if ($code == '200' || $code == '206') { // Partial Content + $body = $response->getBody (); - if (isset($h['headers']['Content-Encoding'])) { - if (preg_match("/^(x-)?gzip/", $h['headers']['Content-Encoding'], $matches)) { - $isGzip = true; - } - } + $this->onbytes = intval ($response->getHeader ('Content-Length')); - if ($code == '200') { + $this->modified = $response->getHeader ('Last-Modified'); - while (!p2_stream_eof($fp, $timed_out)) { - $body .= fread($fp, 4096); - } - - if ($timed_out) { - self::_pushInfoReadTimedOut($url); - $this->diedat = true; - fclose($fp); - return false; - } - - if ($is_gzip) { - $body = self::_decodeGzip($body, $url); - if ($body === null) { - $this->diedat = true; - fclose($fp); - return false; + if (FileCtl::file_write_contents ($this->keydat, $body, $file_append) === false) { + p2die ('cannot write file. downloadDat2chMaru()'); } - } - if (FileCtl::file_write_contents($this->keydat, $body) === false) { - p2die('cannot write file. downloadDat2chKako()'); + return true; + } elseif ($code == '304') { + return '304 Not Modified'; + } else { + return $this->_downloadDat2chKakoNotFound ($uri, $ext); } - } else { - // �Ȃ������Ɣ��f - fclose($fp); - return $this->_downloadDat2chKakoNotFound($uri, $ext); + } catch (Exception $e) { + $this->getdat_error_msg_ht .= "

    �T�[�o�ڑ��G���[: " . $e->getMessage (); + $this->getdat_error_msg_ht .= "
    rep2 error: �ƒT�[�o�ւ̐ڑ��Ɏ��s���܂����B

    "; + $this->diedat = true; + return false; } - - fclose($fp); - //$this->isonline = true; - return !$timed_out; } // }}} @@ -1080,16 +708,15 @@ protected function _downloadDat2chKako($uri, $ext) /** * �ߋ����O���擾�ł��Ȃ������Ƃ��ɌĂяo����� */ - protected function _downloadDat2chKakoNotFound($uri, $ext) - { + protected function _downloadDat2chKakoNotFound($uri, $ext) { global $_conf; if ($ext == ".dat.gz") { - //.dat.gz���Ȃ�������.dat�ł�����x - return $this->_downloadDat2chKako($uri, ".dat"); + // .dat.gz���Ȃ�������.dat�ł�����x + return $this->_downloadDat2chKako ($uri, ".dat"); } - if (!empty($_GET['kakolog'])) { - $kako_html_url = p2h($_GET['kakolog'] . '.html'); + if (! empty ($_GET['kakolog'])) { + $kako_html_url = p2h ($_GET['kakolog'] . '.html'); $kakolog_ht = "

    {$kako_html_url}

    "; } $this->getdat_error_msg_ht = "

    rep2 info: 2�����˂�ߋ����O�q�ɂ���̃X���b�h��荞�݂Ɏ��s���܂����B

    "; @@ -1104,32 +731,31 @@ protected function _downloadDat2chKakoNotFound($uri, $ext) /** * 2ch��dat���擾�ł��Ȃ�����������Ԃ� * - * @return string �G���[���b�Z�[�W�i�������킩��Ȃ��ꍇ�͋�ŕԂ��j + * @return string �G���[���b�Z�[�W�i�������킩��Ȃ��ꍇ�͋�ŕԂ��j */ - public function get2chDatError($code = null) - { + public function get2chDatError($code = null) { global $_conf; // �z�X�g�ړ]���o�ŕύX�����z�X�g�����ɖ߂� - if (!empty($this->old_host)) { + if (! empty ($this->old_host)) { $this->host = $this->old_host; $this->old_host = null; } $reason = null; if ($code == '302') { - $body203 = $this->_get2ch203Body(); - if ($body203 !== false && preg_match('/�ߋ����O ��/', $body203)) { + $body203 = $this->_get2ch203Body (); + if ($body203 !== false && preg_match ('/�ߋ����O ��/', $body203)) { $this->getdat_error_body = $body203; - if (preg_match('/���̃X���b�h�͉ߋ����O�q�ɂɊi.{1,2}����Ă��܂�/', $body203)) { + if (preg_match ('/���̃X���b�h�͉ߋ����O�q�ɂɊi.{1,2}����Ă��܂�/', $body203)) { $reason = 'datochi'; - $this->setDatochiResiduums(); - } elseif (preg_match('{http://[^/]+/[^/]+/kako/\\d+(/\\d+)?/(\\d+)\\.html}', $body203, $matches)) { + $this->setDatochiResiduums (); + } elseif (preg_match ('{http://[^/]+/[^/]+/kako/\\d+(/\\d+)?/(\\d+)\\.html}', $body203, $matches)) { $reason = 'kakohtml'; } } - } elseif (P2Util::isHost2chs($this->host) && $code == '404') { - //API�̈�404��������ߋ����O�ƌ��߂‚��Ƃ��ifix Here�j + } elseif (P2Util::isHost2chs ($this->host) && $code == '404') { + // API�̈�404��������ߋ����O�ƌ��߂‚��Ƃ��ifix Here�j $reason = 'datochi'; } @@ -1138,29 +764,49 @@ public function get2chDatError($code = null) // {{{ read.cgi ����HTML���擾 $read_response_html = ''; - if (!$reason) { - $wap_ua = new WapUserAgent(); - $wap_ua->setAgent($_conf['p2ua']); // �����́A"Monazilla/" ���‚����NG - $wap_ua->setTimeout($_conf['http_conn_timeout'], $_conf['http_read_timeout']); - $wap_req = new WapRequest(); - $wap_req->setUrl($read_url); - if ($_conf['proxy_use']) { - $wap_req->setProxy($_conf['proxy_host'], $_conf['proxy_port']); - } - $wap_res = $wap_ua->request($wap_req); - - $test403 = "/403\.dat/"; - if ($wap_res->code == 302 || preg_match( $test403, $wap_res->content, $test403)) { - $read_response_html = $wap_res->content; - } elseif ($wap_res->isError()) { - $url_t = P2Util::throughIme($wap_req->url); - $info_msg_ht = "

    Error: {$wap_res->code} {$wap_res->message}
    "; - $info_msg_ht .= "rep2 info: {$wap_req->url} �ɐڑ��ł��܂���ł����B

    "; - P2Util::pushInfoHtml($info_msg_ht); - } else { - $read_response_html = $wap_res->content; + if (! $reason) { + try { + $req = new HTTP_Request2 ($read_url, HTTP_Request2::METHOD_GET); + // �w�b�_ + $req->setHeader ('User-Agent', P2Util::getP2UA(false)); // �����́A"Monazilla/" ���‚����NG + $req->setHeader ('Accept-Encoding', "gzip, deflate"); + + $req->setConfig (array ( + 'connect_timeout' => $_conf['http_conn_timeout'], + 'timeout' => $_conf['http_read_timeout'], + 'follow_redirects' => false + )); + + // �v���L�V + if ($_conf['proxy_use']) { + $req->setConfig (array ( + �eproxy_host�f => $_conf['proxy_host'], + �eproxy_port�f => $_conf['proxy_port'] + )); + } + + // Request�̑��M + $response = $req->send (); + + $res_code = $response->getStatus (); + + $test403 = "/403\.dat/"; + if ($res_code == '200' || $res_code == '206') { // Partial Content + $read_response_html = $response->getBody (); + } elseif ($res_code == '302' || preg_match ($test403, $response->getBody (), $test403)) { + $read_response_html = $response->getBody (); + } else { + $url_t = P2Util::throughIme ($read_url); + $info_msg_ht = "

    Error: {$code}
    "; + $info_msg_ht .= "rep2 info: {$read_url} �ɐڑ��ł��܂���ł����B

    "; + P2Util::pushInfoHtml ($info_msg_ht); + } + } catch (Exception $e) { + $this->getdat_error_msg_ht .= "

    �T�[�o�ڑ��G���[: " . $e->getMessage (); + $this->getdat_error_msg_ht .= "
    rep2 error: �ƒT�[�o�ւ̐ڑ��Ɏ��s���܂����B

    "; + $this->diedat = true; } - unset($wap_ua, $wap_req, $wap_res); + unset ($req, $response); } // }}} @@ -1174,58 +820,51 @@ public function get2chDatError($code = null) $kakosoko_match2 = "/http:\/\/turing1000\.nttec\.com\/?(403|404|500)\.dat/"; $naidesu_match = "/����Ȕ�or�X���b�h�Ȃ��ł��B<\/title>/"; - $error3939_match = "{<title>�Q�����˂� error 3939}"; // �ߋ����O�q�ɂ�html���̎��i���ɂ����邩���A�悭�m��Ȃ��j + $error3939_match = "{�Q�����˂� error 3939}"; // �ߋ����O�q�ɂ�html���̎��i���ɂ����邩���A�悭�m��Ȃ��j - // - // - //$kakohtml_match = "{}"; + // + // + // $kakohtml_match = "{}"; $kakohtml_match = "{/([^/]+/kako/\d+(/\d+)?/(\d+)).html\">}"; $waithtml_match = "/html�������̂�҂��Ă���悤�ł��B/"; $vip2ch_kakodat_match = "{/([^/]+/kako/\d+(/\d+)?/(\d+)).dat\">}"; // vip2ch.com�p - // // �����̃X���b�h�͉ߋ����O�q�ɂ� - // - if ($reason === 'datochi' || preg_match($kakosoko_match, $read_response_html, $matches) || preg_match($kakosoko_match2, $read_response_html, $matches)) { + if ($reason === 'datochi' || preg_match ($kakosoko_match, $read_response_html, $matches) || preg_match ($kakosoko_match2, $read_response_html, $matches)) { $dat_response_status = "���̃X���b�h�͉ߋ����O�q�ɂɊi�[����Ă��܂��B"; - $marutori_ht = $this->_generateMarutoriLink(); - $plugin_ht = $this->_generateWikiDatLink(); - $moritori_ht = $this->_generateMoritapoDatLink(); + $marutori_ht = $this->_generateMarutoriLink (); + $plugin_ht = $this->_generateWikiDatLink (); + $moritori_ht = $this->_generateMoritapoDatLink (); $dat_response_msg = "<p>2ch info - ���̃X���b�h�͉ߋ����O�q�ɂɊi�[����Ă��܂��B{$marutori_ht}{$moritori_ht}{$plugin_ht}</p>"; - // // <title>������Ȕ�or�X���b�h�Ȃ��ł��Bor error 3939 - // - } elseif ($reason === 'kakohtml' or preg_match($naidesu_match, $read_response_html, $matches) || preg_match($error3939_match, $read_response_html, $matches) ||preg_match($vip2ch_kakosoko_match, $read_response_html, $matches)) { + } elseif ($reason === 'kakohtml' or preg_match ($naidesu_match, $read_response_html, $matches) || preg_match ($error3939_match, $read_response_html, $matches) || preg_match ($vip2ch_kakosoko_match, $read_response_html, $matches)) { - if ($reason === 'kakohtml' or preg_match($kakohtml_match, $read_response_html, $matches)) { + if ($reason === 'kakohtml' or preg_match ($kakohtml_match, $read_response_html, $matches)) { if ($reason === 'kakohtml') { - preg_match('{/([^/]+/kako/\d+(/\d+)?/(\d+)).html}', $this->getdat_error_body, $matches); + preg_match ('{/([^/]+/kako/\d+(/\d+)?/(\d+)).html}', $this->getdat_error_body, $matches); } $dat_response_status = "����! �ߋ����O�q�ɂŁAhtml�����ꂽ�X���b�h�𔭌����܂����B"; $kakolog_uri = "http://{$this->host}/{$matches[1]}"; - $kakolog_url_en = rawurlencode($kakolog_uri); + $kakolog_url_en = rawurlencode ($kakolog_uri); $read_kako_url = "{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&kakolog={$kakolog_url_en}&kakoget=1"; $dat_response_msg = "<p>2ch info - ����! �ߋ����O�q�ɂŁA<a href=\"{$kakolog_uri}.html\"{$_conf['bbs_win_target_at']}>�X���b�h {$matches[3]}.html</a> �𔭌����܂����B [<a href=\"{$read_kako_url}\">rep2�Ɏ�荞��œǂ�</a>]</p>"; - - } elseif (preg_match($waithtml_match, $read_response_html, $matches)) { + } elseif (preg_match ($waithtml_match, $read_response_html, $matches)) { $dat_response_status = "����! �X���b�h��html�������̂�҂��Ă���悤�ł��B"; - $marutori_ht = $this->_generateMarutoriLink(); - $moritori_ht = $this->_generateMoritapoDatLink(); + $marutori_ht = $this->_generateMarutoriLink (); + $moritori_ht = $this->_generateMoritapoDatLink (); $dat_response_msg = "<p>2ch info - ����! �X���b�h��html�������̂�҂��Ă���悤�ł��B{$marutori_ht}{$moritori_ht}</p>"; - - } elseif (preg_match($vip2ch_kakodat_match, $read_response_html, $matches)) { - $dat_response_status = "����! �ߋ����O�q�ɂŁAdat�𔭌����܂����B"; - $kakolog_uri = "http://{$this->host}/{$matches[1]}"; - $kakolog_url_en = rawurlencode($kakolog_uri); - $read_kako_url = "{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&kakolog={$kakolog_url_en}&kakoget=1"; - $dat_response_msg = "<p>2ch info - ����! �ߋ����O�q�ɂŁA<a href=\"{$kakolog_uri}.html\"{$_conf['bbs_win_target_at']}>�X���b�h {$this->key}.html</a> �𔭌����܂����B [<a href=\"{$read_kako_url}\">rep2�Ɏ�荞��œǂ�</a>]</p>"; - + } elseif (preg_match ($vip2ch_kakodat_match, $read_response_html, $matches)) { + $dat_response_status = "����! �ߋ����O�q�ɂŁAdat�𔭌����܂����B"; + $kakolog_uri = "http://{$this->host}/{$matches[1]}"; + $kakolog_url_en = rawurlencode ($kakolog_uri); + $read_kako_url = "{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&kakolog={$kakolog_url_en}&kakoget=1"; + $dat_response_msg = "<p>2ch info - ����! �ߋ����O�q�ɂŁA<a href=\"{$kakolog_uri}.html\"{$_conf['bbs_win_target_at']}>�X���b�h {$this->key}.html</a> �𔭌����܂����B [<a href=\"{$read_kako_url}\">rep2�Ɏ�荞��œǂ�</a>]</p>"; } else { - if (!empty($_GET['kakolog'])) { + if (! empty ($_GET['kakolog'])) { $dat_response_status = '����Ȕ�or�X���b�h�Ȃ��ł��B'; - $kako_html_url = p2h($_GET['kakolog'] . '.html'); - $kakolog_query = rawurlencode($_GET['kakolog']); + $kako_html_url = p2h ($_GET['kakolog'] . '.html'); + $kakolog_query = rawurlencode ($_GET['kakolog']); $read_kako_url = "{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&kakolog={$kakolog_query}&kakoget=1"; $dat_response_msg = '<p>2ch info - ����Ȕ�or�X���b�h�Ȃ��ł��B</p>'; $dat_response_msg .= "<p><a href=\"{$kako_html_url}\"{$_conf['bbs_win_target_at']}>{$kako_html_url}</a> [<a href=\"{$read_kako_url}\">rep2�Ƀ��O����荞��œǂ�</a>]</p>"; @@ -1236,13 +875,12 @@ public function get2chDatError($code = null) } // ������������Ȃ��ꍇ�ł��A�Ƃ肠�����ߋ����O��荞�݂̃����N���ێ����Ă���B�Ǝv���B���܂�o���Ă��Ȃ� 2005/2/27 aki - } elseif (!empty($_GET['kakolog'])) { + } elseif (! empty ($_GET['kakolog'])) { $dat_response_status = ''; - $kako_html_url = p2h($_GET['kakolog'] . '.html'); - $kakolog_query = rawurlencode($_GET['kakolog']); + $kako_html_url = p2h ($_GET['kakolog'] . '.html'); + $kakolog_query = rawurlencode ($_GET['kakolog']); $read_kako_url = "{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&kakolog={$kakolog_query}&kakoget=1"; $dat_response_msg = "<p><a href=\"{$kako_html_url}\"{$_conf['bbs_win_target_at']}>{$kako_html_url}</a> [<a href=\"{$read_kako_url}\">rep2�Ƀ��O����荞��œǂ�</a>]</p>"; - } // }}} @@ -1256,52 +894,53 @@ public function get2chDatError($code = null) /** * >>1�݂̂��v���r���[���� */ - public function previewOne() - { + public function previewOne() { global $_conf; - if (!($this->host && $this->bbs && $this->key)) { return false; } + if (! ($this->host && $this->bbs && $this->key)) { + return false; + } - //�ʏ�Ɠ����悤��DAT�̎擾�����݂�B$_GET['one']���Z�b�g����Ă����2ch�݊���>>1�������Ƃ� - $this->downloadDat(); + // �ʏ�Ɠ����悤��DAT�̎擾�����݂�B$_GET['one']���Z�b�g����Ă����2ch�݊���>>1�������Ƃ� + $this->downloadDat (); // ���[�J��dat����擾 - if (is_readable($this->keydat)) { - $fd = fopen($this->keydat, 'rb'); - $first_line = fgets($fd, 32800); + if (is_readable ($this->keydat)) { + $fd = fopen ($this->keydat, 'rb'); + $first_line = fgets ($fd, 32800); fclose ($fd); // be.2ch.net �Ȃ�EUC��SJIS�ϊ� - if (P2Util::isHostBe2chNet($this->host)) { - $first_line = mb_convert_encoding($first_line, 'CP932', 'CP51932'); + if (P2Util::isHostBe2chNet ($this->host)) { + $first_line = mb_convert_encoding ($first_line, 'CP932', 'CP51932'); } - $first_datline = rtrim($first_line); - if (strpos($first_datline, '<>') !== false) { + $first_datline = rtrim ($first_line); + if (strpos ($first_datline, '<>') !== false) { $datline_sepa = "<>"; } else { $datline_sepa = ','; $this->dat_type = '2ch_old'; } - $d = explode($datline_sepa, $first_datline); - $this->setTtitle($d[4]); + $d = explode ($datline_sepa, $first_datline); + $this->setTtitle ($d[4]); } - if (!$this->readnum) { + if (! $this->readnum) { $this->readnum = 1; } if ($_conf['ktai']) { - $aShowThread = new ShowThreadK($this); + $aShowThread = new ShowThreadK ($this); $aShowThread->am_autong = false; } else { - $aShowThread = new ShowThreadPc($this); + $aShowThread = new ShowThreadPc ($this); } $body = ''; $body .= "<div class=\"thread\">\n"; - $res = $aShowThread->transRes($first_line, 1); // 1��\�� - $body .= is_array($res) ? $res['body'] . $res['q'] : $res; + $res = $aShowThread->transRes ($first_line, 1); // 1��\�� + $body .= is_array ($res) ? $res['body'] . $res['q'] : $res; $body .= "</div>\n"; return $body; @@ -1313,26 +952,25 @@ public function previewOne() /** * >>1���v���r���[�ŃX���b�h�f�[�^�����‚���Ȃ������Ƃ��ɌĂяo����� */ - public function previewOneNotFound($code = null) - { + public function previewOneNotFound($code = null) { global $_conf; $this->diedat = true; // 2ch, bbspink, vip2ch �Ȃ�read.cgi�Ŋm�F - if (P2Util::isHost2chs($this->host) || P2Util::isHostVip2ch($this->host)) { - $this->getdat_error_msg_ht = $this->get2chDatError($code); - if (count($this->datochi_residuums)) { + if (P2Util::isHost2chs ($this->host) || P2Util::isHostVip2ch ($this->host)) { + $this->getdat_error_msg_ht = $this->get2chDatError ($code); + if (count ($this->datochi_residuums)) { if ($_conf['ktai']) { - $aShowThread = new ShowThreadK($this); + $aShowThread = new ShowThreadK ($this); $aShowThread->am_autong = false; } else { - $aShowThread = new ShowThreadPc($this); + $aShowThread = new ShowThreadPc ($this); } $this->onthefly = true; $body = "<div><span class=\"onthefly\">on the fly</span></div>\n"; $body .= "<div class=\"thread\">\n"; - $res = $aShowThread->transRes($this->datochi_residuums[1], 1); - $body .= is_array($res) ? $res['body'] . $res['q'] : $res; + $res = $aShowThread->transRes ($this->datochi_residuums[1], 1); + $body .= is_array ($res) ? $res['body'] . $res['q'] : $res; $body .= "</div>\n"; return $body; } @@ -1346,8 +984,7 @@ public function previewOneNotFound($code = null) /** * $ls�𕪉�����start��to��nofirst�����߂� */ - public function lsToPoint() - { + public function lsToPoint() { global $_conf; $start = 1; @@ -1355,18 +992,18 @@ public function lsToPoint() $nofirst = false; // n���܂�ł���ꍇ�́A>>1��\�����Ȃ��i$nofirst�j - if (strpos($this->ls, 'n') !== false) { + if (strpos ($this->ls, 'n') !== false) { $nofirst = true; - $this->ls = str_replace('n', '', $this->ls); + $this->ls = str_replace ('n', '', $this->ls); } // �͈͎w��ŕ��� - $n = explode('-', $this->ls); + $n = explode ('-', $this->ls); // �͈͎w�肪�Ȃ���� - if (sizeof($n) == 1) { + if (sizeof ($n) == 1) { // l�w�肪����� - if (substr($n[0], 0, 1) === 'l') { - $ln = intval(substr($n[0], 1)); + if (substr ($n[0], 0, 1) === 'l') { + $ln = intval (substr ($n[0], 1)); if ($_conf['ktai']) { if ($ln > $_conf['mobile.rnum_range']) { $ln = $_conf['mobile.rnum_range']; @@ -1381,84 +1018,82 @@ public function lsToPoint() } elseif ($this->ls === 'all') { $start = 1; $to = $this->rescount; - } else { // ���X�Ԏw�� - if (intval($this->ls) > 0) { - $this->ls = intval($this->ls); + if (intval ($this->ls) > 0) { + $this->ls = intval ($this->ls); $start = $this->ls; $to = $this->ls; $nofirst = true; - // �w�肪�Ȃ� or �s���ȏꍇ�́Aall�Ɠ����\���ɂ��� + // �w�肪�Ȃ� or �s���ȏꍇ�́Aall�Ɠ����\���ɂ��� } else { $start = 1; $to = $this->rescount; } } - // �͈͎w�肪����� + // �͈͎w�肪����� } else { - if (!$start = intval($n[0])) { + if (! $start = intval ($n[0])) { $start = 1; } - if (!$to = intval($n[1])) { + if (! $to = intval ($n[1])) { $to = $this->rescount; } } // �V���܂Ƃߓǂ݂̕\�������� - if (isset($GLOBALS['rnum_all_range']) and $GLOBALS['rnum_all_range'] > 0) { + if (isset ($GLOBALS['rnum_all_range']) and $GLOBALS['rnum_all_range'] > 0) { /* - ���g�т̐V���܂Ƃߓǂ݂��A����������ŏI��������ɁA�́u����or�X�V�v������ - - ���~�b�g < �X���̕\���͈� - �����~�b�g�́@0 - �X���̕\���͈͂��I����O�Ƀ��~�b�g������ - ������ - - ���~�b�g > �X���̕\���͈� - �����~�b�g�� + - ���~�b�g�����c���Ă���ԂɁA�X���̕\���͈͂��I���� - ���X�V - - ���~�b�g = �X���̕\���͈� - �����~�b�g�� 0 - �X���̕\���͈͒��x�Ń��~�b�g���������� - ������? �X�V? - �����̏ꍇ���X�V�̏ꍇ������B���������̂��߁A - ���̃X���̎c��V���������邩�ǂ������s���Ŕ���ł��Ȃ��B - */ + * ���g�т̐V���܂Ƃߓǂ݂��A����������ŏI��������ɁA�́u����or�X�V�v������ + * + * ���~�b�g < �X���̕\���͈� + * �����~�b�g�́@0 + * �X���̕\���͈͂��I����O�Ƀ��~�b�g������ + * ������ + * + * ���~�b�g > �X���̕\���͈� + * �����~�b�g�� + + * ���~�b�g�����c���Ă���ԂɁA�X���̕\���͈͂��I���� + * ���X�V + * + * ���~�b�g = �X���̕\���͈� + * �����~�b�g�� 0 + * �X���̕\���͈͒��x�Ń��~�b�g���������� + * ������? �X�V? + * �����̏ꍇ���X�V�̏ꍇ������B���������̂��߁A + * ���̃X���̎c��V���������邩�ǂ������s���Ŕ���ł��Ȃ��B + */ // ���~�b�g���X���̕\���͈͂�菬�����ꍇ�́A�X���̕\���͈͂����~�b�g�ɍ��킹�� - $limit_to = $start + $GLOBALS['rnum_all_range'] -1; + $limit_to = $start + $GLOBALS['rnum_all_range'] - 1; if ($limit_to < $to) { $to = $limit_to; - // �X���̕\���͈͒��x�Ń��~�b�g�����������ꍇ + // �X���̕\���͈͒��x�Ń��~�b�g�����������ꍇ } elseif ($limit_to == $to) { $GLOBALS['limit_to_eq_to'] = true; } // ���̃��~�b�g�́A����̃X���̕\���͈͕������炵���� - $GLOBALS['rnum_all_range'] = $GLOBALS['rnum_all_range'] - ($to - $start) -1; - - //print_r("$start, $to, {$GLOBALS['rnum_all_range']}"); + $GLOBALS['rnum_all_range'] = $GLOBALS['rnum_all_range'] - ($to - $start) - 1; + // print_r("$start, $to, {$GLOBALS['rnum_all_range']}"); } else { // �g�їp if ($_conf['ktai']) { // �\�������� /* - if ($start + $_conf['mobile.rnum_range'] -1 <= $to) { - $to = $start + $_conf['mobile.rnum_range'] -1; - } - */ + * if ($start + $_conf['mobile.rnum_range'] -1 <= $to) { + * $to = $start + $_conf['mobile.rnum_range'] -1; + * } + */ // ��X���ł́A�O��‚��܂݁A����+1�ƂȂ�̂ŁA1�‚��܂����� if ($start + $_conf['mobile.rnum_range'] <= $to) { $to = $start + $_conf['mobile.rnum_range']; } - if (ResFilter::getWord() !== null) { + if (ResFilter::getWord () !== null) { $start = 1; $to = $this->rescount; $nofirst = false; @@ -1466,7 +1101,7 @@ public function lsToPoint() } } - $this->resrange = compact('start', 'to', 'nofirst'); + $this->resrange = compact ('start', 'to', 'nofirst'); return $this->resrange; } @@ -1477,22 +1112,21 @@ public function lsToPoint() * Dat��ǂݍ��� * $this->datlines �� set ���� */ - public function readDat() - { + public function readDat() { global $_conf; - if (file_exists($this->keydat)) { - if ($this->datlines = FileCtl::file_read_lines($this->keydat)) { + if (file_exists ($this->keydat)) { + if ($this->datlines = FileCtl::file_read_lines ($this->keydat)) { // be.2ch.net �Ȃ�EUC��SJIS�ϊ� // �O�̂���SJIS��UTF-8�������R�[�h����̌��ɓ���Ă��� // �E�E�E���A�������������^�C�g���̃X���b�h�Ō딻�肪�������̂ŁA�w�肵�Ă��� - if (P2Util::isHostBe2chNet($this->host)) { - //mb_convert_variables('CP932', 'CP51932,CP932,UTF-8', $this->datlines); - mb_convert_variables('CP932', 'CP51932', $this->datlines); + if (P2Util::isHostBe2chNet ($this->host)) { + // mb_convert_variables('CP932', 'CP51932,CP932,UTF-8', $this->datlines); + mb_convert_variables ('CP932', 'CP51932', $this->datlines); } - if (strpos($this->datlines[0], '<>') === false) { + if (strpos ($this->datlines[0], '<>') === false) { $this->dat_type = '2ch_old'; } } @@ -1500,12 +1134,10 @@ public function readDat() return false; } - $this->rescount = sizeof($this->datlines); + $this->rescount = sizeof ($this->datlines); - if ($_conf['flex_idpopup'] || $_conf['ngaborn_chain'] || $_conf['ngaborn_frequent'] || - ($_conf['ktai'] && ($_conf['mobile.clip_unique_id'] || $_conf['mobile.underline_id']))) - { - $this->_setIdCount(); + if ($_conf['flex_idpopup'] || $_conf['ngaborn_chain'] || $_conf['ngaborn_frequent'] || ($_conf['ktai'] && ($_conf['mobile.clip_unique_id'] || $_conf['mobile.underline_id']))) { + $this->_setIdCount (); } return true; @@ -1517,20 +1149,19 @@ public function readDat() /** * ��‚̃X�����ł�ID�o�������Z�b�g���� */ - protected function _setIdCount() - { - if (!$this->datlines) { + protected function _setIdCount() { + if (! $this->datlines) { return; } $i = 0; - $idp = array_fill(1, $this->rescount, null); - $ids = array_fill(1, $this->rescount, null); + $idp = array_fill (1, $this->rescount, null); + $ids = array_fill (1, $this->rescount, null); foreach ($this->datlines as $l) { - $lar = explode('<>', $l); - $i++; - if (preg_match('<(ID: ?| )([0-9A-Za-z/.+]{8,11})(?=[^0-9A-Za-z/.+]|$)>', $lar[2], $m)) { + $lar = explode ('<>', $l); + $i ++; + if (preg_match ('<(ID: ?| )([0-9A-Za-z/.+]{8,11})(?=[^0-9A-Za-z/.+]|$)>', $lar[2], $m)) { $idp[$i] = $m[1]; $ids[$i] = $m[2]; } @@ -1538,7 +1169,7 @@ protected function _setIdCount() $this->idp = $idp; $this->ids = $ids; - $this->idcount = array_count_values(array_filter($ids, 'is_string')); + $this->idcount = array_count_values (array_filter ($ids, 'is_string')); } // }}} @@ -1547,18 +1178,17 @@ protected function _setIdCount() /** * datline��explode���� */ - public function explodeDatLine($aline) - { - $aline = rtrim($aline); + public function explodeDatLine($aline) { + $aline = rtrim ($aline); if ($this->dat_type === '2ch_old') { - $parts = explode(',', $aline); + $parts = explode (',', $aline); } else { - $parts = explode('<>', $aline); + $parts = explode ('<>', $aline); } // iframe ���폜�B2ch�����퉻���ĕK�v�Ȃ��Ȃ����炱�̃R�[�h�͊O�������B2005/05/19 - $parts[3] = preg_replace('{<(iframe|script)( .*?)?>.*?</\\1>}i', '', $parts[3]); + $parts[3] = preg_replace ('{<(iframe|script)( .*?)?>.*?</\\1>}i', '', $parts[3]); return $parts; } @@ -1569,29 +1199,26 @@ public function explodeDatLine($aline) /** * dat�𑖍����ăX�����Ď��̃z�X�g�������o���� * - * @param void + * @param + * void * @return array */ - public function scanOriginalHosts() - { - if (P2Util::isHost2chs($this->host) && - file_exists($this->keydat) && - ($dat = file_get_contents($this->keydat))) - { - $bbs_re = preg_quote($this->bbs, '@'); + public function scanOriginalHosts() { + if (P2Util::isHost2chs ($this->host) && file_exists ($this->keydat) && ($dat = file_get_contents ($this->keydat))) { + $bbs_re = preg_quote ($this->bbs, '@'); $pattern = "@/(\\w+\\.(?:2ch\\.net|bbspink\\.com))(?:/test/read\\.cgi)?/{$bbs_re}\\b@"; - if (preg_match_all($pattern, $dat, $matches, PREG_PATTERN_ORDER)) { - $hosts = array_unique($matches[1]); - $arKey = array_search($this->host, $hosts); - if ($arKey !== false && array_key_exists($arKey, $hosts)) { - unset($hosts[$arKey]); + if (preg_match_all ($pattern, $dat, $matches, PREG_PATTERN_ORDER)) { + $hosts = array_unique ($matches[1]); + $arKey = array_search ($this->host, $hosts); + if ($arKey !== false && array_key_exists ($arKey, $hosts)) { + unset ($hosts[$arKey]); } return $hosts; } } - return array(); + return array (); } // }}} @@ -1600,18 +1227,16 @@ public function scanOriginalHosts() /** * �f�t�H���g��dat�擾���s�G���[���b�Z�[�WHTML���擾���� * - * @param void + * @param + * void * @return string */ - public function getDefaultGetDatErrorMessageHTML() - { + public function getDefaultGetDatErrorMessageHTML() { global $_conf; $diedat_msg = '<p><b>rep2 info: �ƒT�[�o����ŐV�̃X���b�h�����擾�ł��܂���ł����B</b>'; - if ($hosts = $this->scanOriginalHosts()) { - $common_q = '&bbs=' . rawurldecode($this->bbs) - . '&key=' . rawurldecode($this->key) - . '&ls=' . rawurldecode($this->ls); + if ($hosts = $this->scanOriginalHosts ()) { + $common_q = '&bbs=' . rawurldecode ($this->bbs) . '&key=' . rawurldecode ($this->key) . '&ls=' . rawurldecode ($this->ls); $diedat_msg .= '<br>dat���瑼�̃z�X�g�������o���܂����B'; foreach ($hosts as $host) { $diedat_msg .= " [<a href=\"{$_conf['read_php']}?host={$host}{$common_q}{$_conf['k_at_a']}\">{$host}</a>]"; @@ -1628,21 +1253,16 @@ public function getDefaultGetDatErrorMessageHTML() /** * ����p2��(dat�擾�������Ȃ��ꍇ�̓����^�|�������)dat���擾���邽�߂̃����N�𐶐�����B * - * @param void + * @param + * void * @return string */ - protected function _generateMoritapoDatLink() - { + protected function _generateMoritapoDatLink() { global $_conf; if ($_conf['p2_2ch_mail'] && $_conf['p2_2ch_pass']) { - $csrfid = $this->_getCsrfIdForMoritapoDat(); - $query = p2h('host=' . rawurlencode($this->host) - . '&bbs=' . rawurlencode($this->bbs) - . '&key=' . rawurlencode($this->key) - . '&ls=' . rawurlencode($this->ls) - . '&moritapodat=true' - . '&csrfid=' . rawurlencode($csrfid)); + $csrfid = $this->_getCsrfIdForMoritapoDat (); + $query = p2h ('host=' . rawurlencode ($this->host) . '&bbs=' . rawurlencode ($this->bbs) . '&key=' . rawurlencode ($this->key) . '&ls=' . rawurlencode ($this->ls) . '&moritapodat=true' . '&csrfid=' . rawurlencode ($csrfid)); return " [<a href=\"{$_conf['read_php']}?{$query}{$_conf['k_at_a']}\">�����^�|��rep2�Ɏ�荞��</a>]"; } else { return ''; @@ -1655,67 +1275,67 @@ protected function _generateMoritapoDatLink() /** * ����p2��(dat�擾�������Ȃ��ꍇ�̓����^�|�������)dat���擾���� * - * @param void + * @param + * void * @return bool */ - protected function _downloadDat2chMoritapo() - { - global $_conf; + protected function _downloadDat2chMoritapo() { + global $_conf; // dat���_�E�����[�h try { - $client = P2Util::getP2Client(); - $body = $client->downloadDat($this->host, $this->bbs, $this->key, $response); + $client = P2Util::getP2Client (); + $body = $client->downloadDat ($this->host, $this->bbs, $this->key, $response); // DEBUG /* - $GLOBALS['_downloadDat2chMoritapo_response_dump'] = '<pre>' . p2h(print_r($response, true)) . '</pre>'; - register_shutdown_function(create_function('', 'echo $GLOBALS[\'_downloadDat2chMoritapo_response_dump\'];')); - */ + * $GLOBALS['_downloadDat2chMoritapo_response_dump'] = '<pre>' . p2h(print_r($response, true)) . '</pre>'; + * register_shutdown_function(create_function('', 'echo $GLOBALS[\'_downloadDat2chMoritapo_response_dump\'];')); + */ } catch (P2Exception $e) { - p2die($e->getMessage()); + p2die ($e->getMessage ()); } // �f�[�^���؂���1 - if (!$body || (strpos($body, '<>') === false && strpos($body, ',') === false)) { - return $this->_downloadDat2chMoritapoNotFound(); + if (! $body || (strpos ($body, '<>') === false && strpos ($body, ',') === false)) { + return $this->_downloadDat2chMoritapoNotFound (); } // ���s�ʒu�����o - $posCR = strpos($body, "\r"); - $posLF = strpos($body, "\n"); + $posCR = strpos ($body, "\r"); + $posLF = strpos ($body, "\n"); if ($posCR === false && $posLF === false) { - $pos = strlen($body); + $pos = strlen ($body); } elseif ($posCR === false) { $pos = $posLF; } elseif ($posLF === false) { $pos = $posCR; } else { - $pos = min($posLF, $posCR); + $pos = min ($posLF, $posCR); } // 1�s�ڂ̎擾�ƃf�[�^���؂���2 - $firstLine = rtrim(substr($body, 0, $pos)); - if (strpos($firstLine, '<>') !== false) { + $firstLine = rtrim (substr ($body, 0, $pos)); + if (strpos ($firstLine, '<>') !== false) { $this->dat_type = '2ch'; - } elseif (strpos($firstLine, ',') !== false) { + } elseif (strpos ($firstLine, ',') !== false) { $this->dat_type = '2ch_old'; } else { - return $this->_downloadDat2chMoritapoNotFound(); + return $this->_downloadDat2chMoritapoNotFound (); } // �f�[�^���؂���3 (�^�C�g�� = $ar[4]) - $ar = $this->explodeDatLine($firstLine); - if (count($ar) < 5) { - return $this->_downloadDat2chMoritapoNotFound(); + $ar = $this->explodeDatLine ($firstLine); + if (count ($ar) < 5) { + return $this->_downloadDat2chMoritapoNotFound (); } // ���[�J��dat�ɏ������� - if (FileCtl::file_write_contents($this->keydat, $body) === false) { - p2die('cannot write file. downloadDat2chMoritapo()'); + if (FileCtl::file_write_contents ($this->keydat, $body) === false) { + p2die ('cannot write file. downloadDat2chMoritapo()'); } return true; - } + } // }}} // {{{ _downloadDat2chMoritapoNotFound() @@ -1723,29 +1343,29 @@ protected function _downloadDat2chMoritapo() /** * �����^�|�ł̎擾���ł��Ȃ������Ƃ��ɌĂяo����� * - * @param void + * @param + * void * @return bool */ - protected function _downloadDat2chMoritapoNotFound() - { + protected function _downloadDat2chMoritapoNotFound() { global $_conf; - $csrfid = $this->_getCsrfIdForMoritapoDat(); + $csrfid = $this->_getCsrfIdForMoritapoDat (); - $host_en = rawurlencode($this->host); - $bbs_en = rawurlencode($this->bbs); - $key_en = rawurlencode($this->key); - $ls_en = rawurlencode($this->ls); + $host_en = rawurlencode ($this->host); + $bbs_en = rawurlencode ($this->bbs); + $key_en = rawurlencode ($this->key); + $ls_en = rawurlencode ($this->ls); - $host_ht = p2h($this->host); - $bbs_ht = p2h($this->bbs); - $key_ht = p2h($this->key); - $ls_ht = p2h($this->ls); + $host_ht = p2h ($this->host); + $bbs_ht = p2h ($this->bbs); + $key_ht = p2h ($this->key); + $ls_ht = p2h ($this->ls); - $query_ht = p2h("host={$host_en}&bbs={$bbs_en}&key={$key_en}&ls={$ls_en}&maru=true"); - $marutori_ht = $this->_generateMarutoriLink(); + $query_ht = p2h ("host={$host_en}&bbs={$bbs_en}&key={$key_en}&ls={$ls_en}&maru=true"); + $marutori_ht = $this->_generateMarutoriLink (); - if ($hosts = $this->scanOriginalHosts()) { + if ($hosts = $this->scanOriginalHosts ()) { $hostlist_ht = '<br>dat���瑼�̃z�X�g�������o���܂����B'; foreach ($hosts as $host) { $hostlist_ht .= " [<a href=\"#\" onclick=\"this.parentNode.elements['host'].value='{$host}';return false;\">{$host}</a>]"; @@ -1780,62 +1400,12 @@ protected function _downloadDat2chMoritapoNotFound() /** * ����p2����dat���擾����ۂɎg��CSRF�h�~�g�[�N���𐶐����� * - * @param void + * @param + * void * @return string */ - protected function _getCsrfIdForMoritapoDat() - { - return P2Util::getCsrfId('moritapodat' . $this->host . $this->bbs . $this->key); - } - - // }}} - // {{{ _decodeGzip() - - /** - * Gzip���k���ꂽ���X�|���X�{�f�B���f�R�[�h���� - * - * @param string $body - * @param string $caller - * @return string - */ - static protected function _decodeGzip($body, $url) - { - global $_conf; - - if (function_exists('http_inflate')) { - // pecl_http �� http_inflate() �œW�J - $body = http_inflate($body); - } else { - // gzip temp�t�@�C���ɕۑ��EPHP�ʼn𓀓ǂݍ��� - if (!is_dir($_conf['tmp_dir'])) { - FileCtl::mkdirRecursive($_conf['tmp_dir']); - } - - $gztempfile = tempnam($_conf['tmp_dir'], 'gz_'); - if (false === $gztempfile) { - p2die('�ꎞ�t�@�C�����쐬�ł��܂���ł����B'); - } - - if (false === file_put_contents($gztempfile, $body)) { - unlink($gztempfile); - p2die('�ꎞ�t�@�C���ɏ������߂܂���ł����B'); - } - - $body = file_get_contents('compress.zlib://' . $gztempfile); - if (false === $body) { - $body = null; - } - - unlink($gztempfile); - } - - if (is_null($body)) { - $summary = 'gzip�W�J�G���['; - $description = self::_urlToAnchor($url) . ' ��gzip�f�R�[�h�ł��܂���ł����B'; - self::_pushInfoMessage($summary, $description); - } - - return $body; + protected function _getCsrfIdForMoritapoDat() { + return P2Util::getCsrfId ('moritapodat' . $this->host . $this->bbs . $this->key); } // }}} @@ -1844,50 +1414,45 @@ static protected function _decodeGzip($body, $url) /** * ��񃁃b�Z�[�W���v�b�V������ * - * @param string $summary - * @param string $description - * @return void + * @param string $summary + * @param string $description + * @return void */ - static protected function _pushInfoMessage($summary, $description) - { + static protected function _pushInfoMessage($summary, $description) { $message = '<p class="info-msg">' . $summary . '<br>rep2 info: ' . $description . '</p>'; - P2Util::pushInfoHtml($message); + P2Util::pushInfoHtml ($message); } - // }}} // {{{ _pushInfoConnectFailed() /** * �ڑ��Ɏ��s�����|�̃��b�Z�[�W���v�b�V������ * - * @param string $url - * @param int $errno - * @param string $errstr - * @return void + * @param string $url + * @param int $errno + * @param string $errstr + * @return void */ - static protected function _pushInfoConnectFailed($url, $errno, $errstr) - { - $summary = sprintf('HTTP�ڑ��G���[ (%d) %s', $errno, $errstr); - $description = self::_urlToAnchor($url) . ' �ɐڑ��ł��܂���ł����B'; - self::_pushInfoMessage($summary, $description); + static protected function _pushInfoConnectFailed($url, $errno, $errstr) { + $summary = sprintf ('HTTP�ڑ��G���[ (%d) %s', $errno, $errstr); + $description = self::_urlToAnchor ($url) . ' �ɐڑ��ł��܂���ł����B'; + self::_pushInfoMessage ($summary, $description); } - // }}} // {{{ _pushInfoReadTimedOut() /** * �ǂݍ��݂��^�C���A�E�g�����|�̃��b�Z�[�W���v�b�V������ * - * @param string $url - * @return void + * @param string $url + * @return void */ - static protected function _pushInfoReadTimedOut($url) - { + static protected function _pushInfoReadTimedOut($url) { $summary = 'HTTP�ڑ��^�C���A�E�g'; - $description = self::_urlToAnchor($url) . ' ��ǂݍ��݊����ł��܂���ł����B'; - self::_pushInfoMessage($summary, $description); + $description = self::_urlToAnchor ($url) . ' ��ǂݍ��݊����ł��܂���ł����B'; + self::_pushInfoMessage ($summary, $description); } // }}} @@ -1896,16 +1461,15 @@ static protected function _pushInfoReadTimedOut($url) /** * HTTP�G���[�̃��b�Z�[�W���v�b�V������ * - * @param string $url - * @param int $errno - * @param string $errstr + * @param string $url + * @param int $errno + * @param string $errstr * @return void */ - static protected function _pushInfoHttpError($url, $errno, $errstr) - { - $summary = sprintf('HTTP %d %s', $errno, $errstr); - $description = self::_urlToAnchor($url) . ' ��ǂݍ��߂܂���ł����B'; - self::_pushInfoMessage($summary, $description); + static protected function _pushInfoHttpError($url, $errno, $errstr) { + $summary = sprintf ('HTTP %d %s', $errno, $errstr); + $description = self::_urlToAnchor ($url) . ' ��ǂݍ��߂܂���ł����B'; + self::_pushInfoMessage ($summary, $description); } // }}} @@ -1914,17 +1478,13 @@ static protected function _pushInfoHttpError($url, $errno, $errstr) /** * _pushInfo�n���\�b�h�p��URL���A���J�[�ɕϊ����� * - * @param string $url - * @return string + * @param string $url + * @return string */ - static protected function _urlToAnchor($url) - { + static protected function _urlToAnchor($url) { global $_conf; - return sprintf('<a href="%s"%s>%s</a>', - P2Util::throughIme($url), - $_conf['ext_win_target_at'], - p2h($url)); + return sprintf ('<a href="%s"%s>%s</a>', P2Util::throughIme ($url), $_conf['ext_win_target_at'], p2h ($url)); } // }}} @@ -1941,30 +1501,32 @@ private function _get2ch203Body() { // �d�l�̊m�؂����Ă��Ȃ��̂ŁA���̂悤�Ȕ��f�ł悢�̂��͂����肵�Ȃ��B // 203 Non-Authoritative Information // �ߋ����O �� - /* - ��������W���B�B�B<><>2007/06/10(��) 13:29:51.68 0<> http://mlb.yahoo.co.jp/headlines/?a=2279 <br> ����큄������������������������������������������� <>������탁�W���[���i���� ����c�_14001�� - 1001, 131428 (�����X��, �T�C�Y)<><>1181480550000000 (�ŏI�X�V)<><div style="color:navy;font-size:smaller;">|<br />| ����<br />|</div><> - �P�O�O�P<><>Over 1000 Thread<> ���̃X���b�h�͂P�O�O�O�𒴂��܂����B <br> ���������Ȃ��̂ŁA�V�����X���b�h�𗧂ĂĂ��������ł��B�B�B <> - �ߋ����O ��<><>[�ߋ����O]<><div style="color:red;text-align:center;">�� ���̃X���b�h�͉ߋ����O�q�ɂɊi�[����Ă��܂�</div><hr /><br />IE�����ʂ̃u���E�U�Ō���ꍇ http://tubo.80.kg/tubo_and_maru.html<br />��p�̃u���E�U�Ō���ꍇ http://www.monazilla.org/<br /><br />�Q�����˂� Viewer ���g���ƁA�����ɓǂ߂܂��B http://2ch.tora3.net/<br /><div style="color:navy;">���� Viewer(�ʏ́�) �̔���ŁA�Q�����˂�͐ݔ��𑝋����Ă��܂��B<br />�������ꂽ��A�V�����T�[�o�𓊓��ł���Ƃ������ł��B</div><br />�悭�킩��Ȃ��ꍇ�̓\�t�g�E�F�A�‚�Go http://pc11.2ch.net/software/<br /><br />�����^�| ( http://find.2ch.net/faq/faq2.php#c1 ) �������Ă���΁A50�����^�|�ŕ\���ł��܂��B<br />�@�@�@�@�����炩�� �� http://find.2ch.net/index.php?STR=dat:http://ex23.2ch.net/test/read.cgi/morningcoffee/1181449791/<br /><br /><hr /><> - */ - $params = array(); - $params['timeout'] = $_conf['fsockopen_time_limit']; - if ($_conf['proxy_use']) { - $params['proxy_host'] = $_conf['proxy_host']; - $params['proxy_port'] = $_conf['proxy_port']; - } - $url = "http://{$this->host}/{$this->bbs}/dat/{$this->key}.dat"; - $req = new HTTP_Request($url, $params); - $req->setMethod('GET'); - $err = $req->sendRequest(true); + /* + * ��������W���B�B�B<><>2007/06/10(��) 13:29:51.68 0<> http://mlb.yahoo.co.jp/headlines/?a=2279 <br> ����큄������������������������������������������� <>������탁�W���[���i���� ����c�_14001�� + * 1001, 131428 (�����X��, �T�C�Y)<><>1181480550000000 (�ŏI�X�V)<><div style="color:navy;font-size:smaller;">|<br />| ����<br />|</div><> + * �P�O�O�P<><>Over 1000 Thread<> ���̃X���b�h�͂P�O�O�O�𒴂��܂����B <br> ���������Ȃ��̂ŁA�V�����X���b�h�𗧂ĂĂ��������ł��B�B�B <> + * �ߋ����O ��<><>[�ߋ����O]<><div style="color:red;text-align:center;">�� ���̃X���b�h�͉ߋ����O�q�ɂɊi�[����Ă��܂�</div><hr /><br />IE�����ʂ̃u���E�U�Ō���ꍇ http://tubo.80.kg/tubo_and_maru.html<br />��p�̃u���E�U�Ō���ꍇ http://www.monazilla.org/<br /><br />�Q�����˂� Viewer ���g���ƁA�����ɓǂ߂܂��B http://2ch.tora3.net/<br /><div style="color:navy;">���� Viewer(�ʏ́�) �̔���ŁA�Q�����˂�͐ݔ��𑝋����Ă��܂��B<br />�������ꂽ��A�V�����T�[�o�𓊓��ł���Ƃ������ł��B</div><br />�悭�킩��Ȃ��ꍇ�̓\�t�g�E�F�A�‚�Go http://pc11.2ch.net/software/<br /><br />�����^�| ( http://find.2ch.net/faq/faq2.php#c1 ) �������Ă���΁A50�����^�|�ŕ\���ł��܂��B<br />�@�@�@�@�����炩�� �� http://find.2ch.net/index.php?STR=dat:http://ex23.2ch.net/test/read.cgi/morningcoffee/1181449791/<br /><br /><hr /><> + */ + try { + $params = array (); + $params['timeout'] = $_conf['fsockopen_time_limit']; + if ($_conf['proxy_use']) { + $params['proxy_host'] = $_conf['proxy_host']; + $params['proxy_port'] = $_conf['proxy_port']; + } + $url = "http://{$this->host}/{$this->bbs}/dat/{$this->key}.dat"; + $req = new HTTP_Request2 ($url,HTTP_Request2::METHOD_GET, $params); + $res = $req->send (); - if (!PEAR::isError($err)) { // ���X�|���X�R�[�h������ - if ('203' == $req->getResponseCode()) { - return $req->getResponseBody(); + if ('203' == $res->getStatus ()) { + return $res->getBody (); } + + return false; + } catch (Exception $exp) { + return false; } - return false; } // }}} @@ -1975,43 +1537,42 @@ private function _get2ch203Body() { * �ۑ�����i���X�� => datline �̔z��j * $this->getdat_error_body�̓��e����\�z. * - * @return boolean ����ɏI�������ꍇ��true + * @return boolean ����ɏI�������ꍇ��true */ - private function setDatochiResiduums() - { - $this->datochi_residuums = array(); - if (!$this->getdat_error_body || strlen($this->getdat_error_body) === 0) { + private function setDatochiResiduums() { + $this->datochi_residuums = array (); + if (! $this->getdat_error_body || strlen ($this->getdat_error_body) === 0) { return false; } - $lines = explode("\n", $this->getdat_error_body); - if (count($lines) < 3) { + $lines = explode ("\n", $this->getdat_error_body); + if (count ($lines) < 3) { return false; } $first_line = $lines[0]; - $first_datline = rtrim($first_line); - if (strpos($first_datline, '<>') !== false) { + $first_datline = rtrim ($first_line); + if (strpos ($first_datline, '<>') !== false) { $datline_sepa = '<>'; } else { $datline_sepa = ','; $this->dat_type = '2ch_old'; } - $d = explode($datline_sepa, $first_datline); - $this->setTtitle($d[4]); + $d = explode ($datline_sepa, $first_datline); + $this->setTtitle ($d[4]); $this->datochi_residuums[1] = $first_line; $second_line = $lines[1]; - if (strpos($second_line, '<>') === false) { + if (strpos ($second_line, '<>') === false) { return false; } - $d = explode('<>', $second_line); - if (count($d) < 1) { + $d = explode ('<>', $second_line); + if (count ($d) < 1) { return false; } - list($lastn, $size) = explode(',', $d[0]); - $lastn = intval(trim($lastn)); - if (!$lastn) { + list ($lastn, $size) = explode (',', $d[0]); + $lastn = intval (trim ($lastn)); + if (! $lastn) { return false; } @@ -2025,22 +1586,22 @@ private function setDatochiResiduums() /** * +Wiki��DAT�擾�v���O�C����dat���擾���邽�߂̃����N�𐶐�����B * - * @param void + * @param + * void * @return string */ - protected function _generateWikiDatLink() - { + protected function _generateWikiDatLink() { global $_conf; // +Wiki if ($_GET['plugin']) { - $datPlugin = new DatPluginCtl(); - $datPlugin->load(); - foreach ($datPlugin->getData() as $v){ - if (preg_match('{'. $v['match'] . '}', $read_url)) { - $replace = @preg_replace('{'. $v['match'] . '}', $v['replace'], $read_url); - $code = P2UtilWiki::getResponseCode($replace); - if($code == 200) { + $datPlugin = new DatPluginCtl (); + $datPlugin->load (); + foreach ($datPlugin->getData () as $v) { + if (preg_match ('{' . $v['match'] . '}', $read_url)) { + $replace = @preg_replace ('{' . $v['match'] . '}', $v['replace'], $read_url); + $code = P2UtilWiki::getResponseCode ($replace); + if ($code == 200) { $code = '��' . $code; } else { $code = '�~' . $code; @@ -2049,7 +1610,7 @@ protected function _generateWikiDatLink() } } if ($plugin_ht) { - $plugin_ht = '<select size=1 name="kakolog">'. $plugin_ht . '</select>'; + $plugin_ht = '<select size=1 name="kakolog">' . $plugin_ht . '</select>'; } else { $plugin_ht = '<input type="text" name="kakolog" size="64">'; } @@ -2077,11 +1638,11 @@ protected function _generateWikiDatLink() /** * ����offlaw��dat���擾���邽�߂̃����N�𐶐�����B * - * @param bool $retry - * @return string HTML + * @param bool $retry + * @return string HTML */ protected function _generateMarutoriLink($retry = false) { - if($retry) { + if ($retry) { $retry_q = "&relogin2ch=true"; $atext = "��ID�ōĎ擾����"; } else { From 85ff3e6b649aa8a03845c1cf0ea44803d3bffd36 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Mon, 30 Mar 2015 12:52:22 +0900 Subject: [PATCH 096/339] =?UTF-8?q?HTTP=5FRequest2=E3=81=AB=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=E3=81=97=E3=81=9F=E9=83=A8=E5=88=86=E3=82=92=E8=AA=8D?= =?UTF-8?q?=E8=A8=BC=E4=BB=98=E3=83=97=E3=83=AD=E3=82=AD=E3=82=B7=E3=81=AB?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C=E3=81=95=E3=81=9B=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- conf/conf_user_def.inc.php | 6 ++++ lib/P2Util.php | 8 +++-- lib/ThreadRead.php | 64 ++++++++++++++++++++++---------------- lib/auth2chapi.inc.php | 8 +++-- lib/login2ch.inc.php | 8 +++-- rep2/dig2ch.php | 8 +++-- rep2/edit_conf_user.php | 21 ++++++++----- rep2/post.php | 6 ++-- 9 files changed, 83 insertions(+), 48 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 69dff7c1e..180943746 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150326.1020', // rep2�̃o�[�W���� + 'p2version' => '150330.1220', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index f7039b4bf..7df8aacdf 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -534,6 +534,12 @@ // �v���L�V�|�[�g ex)"8080" $conf_user_def['proxy_port'] = ""; // ("") +// �v���L�V���[�U�[�� (�g�p����ꍇ�̂�) +$conf_user_def['proxy_user'] = ""; // ("") + +// �v���L�V�p�X���[�h (�g�p����ꍇ�̂�) +$conf_user_def['proxy_password'] = ""; // ("") + // �t���[���� �ƒ��j���[ �̕\���� $conf_user_def['frame_menu_width'] = "158"; // ("158") diff --git a/lib/P2Util.php b/lib/P2Util.php index 1f2cf44ac..73d368eb7 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -275,9 +275,11 @@ static public function fileDownload($url, $localfile, )); if ($_conf['proxy_use']) { - $req->setConfig(array( - �eproxy_host�f => $_conf['proxy_host'], - �eproxy_port�f => $_conf['proxy_port'], + $req->setConfig (array ( + 'proxy_host' => $_conf['proxy_host'], + 'proxy_port' => $_conf['proxy_port'], + 'proxy_user' => $_conf['proxy_user'], + 'proxy_password' => $_conf['proxy_password'] )); } diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 215c31075..da5f7515e 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -179,7 +179,7 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { // >>1�v���r���[�̎��̓T�[�o�[�ɍŏ��̕����������� $req->setHeader ('Range', "bytes=0-8192"); } elseif (! $zero_read) { - $req->setHeader ('Range', "bytes=" . $from_bytes); + $req->setHeader ('Range', sprintf ('bytes=%d-', $from_bytes) ); } if ($this->modified) { @@ -200,8 +200,10 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { // �v���L�V if ($_conf['proxy_use']) { $req->setConfig (array ( - �eproxy_host�f => $_conf['proxy_host'], - �eproxy_port�f => $_conf['proxy_port'] + 'proxy_host' => $_conf['proxy_host'], + 'proxy_port' => $_conf['proxy_port'], + 'proxy_user' => $_conf['proxy_user'], + 'proxy_password' => $_conf['proxy_password'] )); } @@ -317,9 +319,6 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { return $this->_downloadDat2chNotFound ($code); } - if ($response->getHeader ('Location')) { - $post_seikou = true; - } } catch (Exception $e) { $this->getdat_error_msg_ht .= "<p>�T�[�o�ڑ��G���[: " . $e->getMessage (); $this->getdat_error_msg_ht .= "<br>rep2 error: �ƒT�[�o�ւ̐ڑ��Ɏ��s���܂����B</p>"; @@ -375,7 +374,7 @@ protected function _downloadDat2ch($from_bytes) { // >>1�v���r���[�̎��̓T�[�o�[�ɍŏ��̕����������� $req->setHeader ('Range', "bytes=0-8192"); } elseif (! $zero_read) { - $req->setHeader ('Range', "bytes=" . $from_bytes); + $req->setHeader ('Range', sprintf ('bytes=%d-', $from_bytes) ); } if ($this->modified) { @@ -396,8 +395,10 @@ protected function _downloadDat2ch($from_bytes) { // �v���L�V if ($_conf['proxy_use']) { $req->setConfig (array ( - �eproxy_host�f => $_conf['proxy_host'], - �eproxy_port�f => $_conf['proxy_port'] + 'proxy_host' => $_conf['proxy_host'], + 'proxy_port' => $_conf['proxy_port'], + 'proxy_user' => $_conf['proxy_user'], + 'proxy_password' => $_conf['proxy_password'] )); } @@ -423,12 +424,12 @@ protected function _downloadDat2ch($from_bytes) { $this->modified = $response->getHeader ('Last-Modified'); - // 1�s�ڂ�؂�o�� - $posLF = mb_strpos ($body, "\n"); - $firstmsg = mb_substr ($body, 0, $posLF === false ? mb_strlen ($body) : $posLF); - // �z�X�g��2ch�̎���DAT�𗘗p�ł��Ȃ��|�̃��b�Z�[�W���o����G���[�Ƃ���iDAT�j���΍�j if (P2Util::isHost2chs ($this->host)) { + // 1�s�ڂ�؂�o�� + $posLF = mb_strpos ($body, "\n"); + $firstmsg = mb_substr ($body, 0, $posLF === false ? mb_strlen ($body) : $posLF); + if (mb_strpos ($firstmsg, "�Q�����˂� ��<><>2015/03/13(��) 00:00:00.00 ID:????????<> 3��13�����Q") === 0) { $this->getdat_error_msg_ht .= "<p>rep2 error: API�o�R�ł̃X���b�h�擾�Ɏ��s���܂����B<br />rep2 info: �X���b�h�����݂��Ȃ����ߋ����O�Ɋi�[����Ă��܂��B</p>"; $marutori_ht = $this->_generateMarutoriLink (); @@ -564,8 +565,10 @@ protected function _downloadDat2chMaru($uaMona, $SID2ch, $shirokuma = false) { // �v���L�V if ($_conf['proxy_use']) { $req->setConfig (array ( - �eproxy_host�f => $_conf['proxy_host'], - �eproxy_port�f => $_conf['proxy_port'] + 'proxy_host' => $_conf['proxy_host'], + 'proxy_port' => $_conf['proxy_port'], + 'proxy_user' => $_conf['proxy_user'], + 'proxy_password' => $_conf['proxy_password'] )); } @@ -667,8 +670,10 @@ protected function _downloadDat2chKako($uri, $ext) { // �v���L�V if ($_conf['proxy_use']) { $req->setConfig (array ( - �eproxy_host�f => $_conf['proxy_host'], - �eproxy_port�f => $_conf['proxy_port'] + 'proxy_host' => $_conf['proxy_host'], + 'proxy_port' => $_conf['proxy_port'], + 'proxy_user' => $_conf['proxy_user'], + 'proxy_password' => $_conf['proxy_password'] )); } @@ -780,8 +785,10 @@ public function get2chDatError($code = null) { // �v���L�V if ($_conf['proxy_use']) { $req->setConfig (array ( - �eproxy_host�f => $_conf['proxy_host'], - �eproxy_port�f => $_conf['proxy_port'] + 'proxy_host' => $_conf['proxy_host'], + 'proxy_port' => $_conf['proxy_port'], + 'proxy_user' => $_conf['proxy_user'], + 'proxy_password' => $_conf['proxy_password'] )); } @@ -1508,14 +1515,19 @@ private function _get2ch203Body() { * �ߋ����O ��<><>[�ߋ����O]<><div style="color:red;text-align:center;">�� ���̃X���b�h�͉ߋ����O�q�ɂɊi�[����Ă��܂�</div><hr /><br />IE�����ʂ̃u���E�U�Ō���ꍇ http://tubo.80.kg/tubo_and_maru.html<br />��p�̃u���E�U�Ō���ꍇ http://www.monazilla.org/<br /><br />�Q�����˂� Viewer ���g���ƁA�����ɓǂ߂܂��B http://2ch.tora3.net/<br /><div style="color:navy;">���� Viewer(�ʏ́�) �̔���ŁA�Q�����˂�͐ݔ��𑝋����Ă��܂��B<br />�������ꂽ��A�V�����T�[�o�𓊓��ł���Ƃ������ł��B</div><br />�悭�킩��Ȃ��ꍇ�̓\�t�g�E�F�A�‚�Go http://pc11.2ch.net/software/<br /><br />�����^�| ( http://find.2ch.net/faq/faq2.php#c1 ) �������Ă���΁A50�����^�|�ŕ\���ł��܂��B<br />�@�@�@�@�����炩�� �� http://find.2ch.net/index.php?STR=dat:http://ex23.2ch.net/test/read.cgi/morningcoffee/1181449791/<br /><br /><hr /><> */ try { - $params = array (); - $params['timeout'] = $_conf['fsockopen_time_limit']; - if ($_conf['proxy_use']) { - $params['proxy_host'] = $_conf['proxy_host']; - $params['proxy_port'] = $_conf['proxy_port']; - } $url = "http://{$this->host}/{$this->bbs}/dat/{$this->key}.dat"; - $req = new HTTP_Request2 ($url,HTTP_Request2::METHOD_GET, $params); + $req = new HTTP_Request2 ($url,HTTP_Request2::METHOD_GET); + + // �v���L�V + if ($_conf['proxy_use']) { + $req->setConfig (array ( + 'proxy_host' => $_conf['proxy_host'], + 'proxy_port' => $_conf['proxy_port'], + 'proxy_user' => $_conf['proxy_user'], + 'proxy_password' => $_conf['proxy_password'] + )); + } + $res = $req->send (); // ���X�|���X�R�[�h������ diff --git a/lib/auth2chapi.inc.php b/lib/auth2chapi.inc.php index 479f614a5..3e0d86916 100644 --- a/lib/auth2chapi.inc.php +++ b/lib/auth2chapi.inc.php @@ -41,9 +41,11 @@ function authenticate_2chapi() $req->setAdapter($_conf['ssl_function']); // �v���L�V if ($_conf['proxy_use']) { - $req->setConfig(array( - �eproxy_host�f => $_conf['proxy_host'], - �eproxy_port�f => $_conf['proxy_port'], + $req->setConfig (array ( + 'proxy_host' => $_conf['proxy_host'], + 'proxy_port' => $_conf['proxy_port'], + 'proxy_user' => $_conf['proxy_user'], + 'proxy_password' => $_conf['proxy_password'] )); } $req->addPostParameter('ID', $login2chID); diff --git a/lib/login2ch.inc.php b/lib/login2ch.inc.php index 74054782e..92606e86d 100644 --- a/lib/login2ch.inc.php +++ b/lib/login2ch.inc.php @@ -44,9 +44,11 @@ function login2ch() $req->setAdapter($_conf['ssl_function']); // �v���L�V if ($_conf['proxy_use']) { - $req->setConfig(array( - �eproxy_host�f => $_conf['proxy_host'], - �eproxy_port�f => $_conf['proxy_port'], + $req->setConfig (array ( + 'proxy_host' => $_conf['proxy_host'], + 'proxy_port' => $_conf['proxy_port'], + 'proxy_user' => $_conf['proxy_user'], + 'proxy_password' => $_conf['proxy_password'] )); } $req->addPostParameter('ID', $login2chID); diff --git a/rep2/dig2ch.php b/rep2/dig2ch.php index 59c66e819..f48ae6ca2 100644 --- a/rep2/dig2ch.php +++ b/rep2/dig2ch.php @@ -21,9 +21,11 @@ function dig2chsearch($query) )); if ($_conf['proxy_use']) { - $req->setConfig(array( - �eproxy_host�f => $_conf['proxy_host'], - �eproxy_port�f => $_conf['proxy_port'], + $req->setConfig (array ( + 'proxy_host' => $_conf['proxy_host'], + 'proxy_port' => $_conf['proxy_port'], + 'proxy_user' => $_conf['proxy_user'], + 'proxy_password' => $_conf['proxy_password'] )); } diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index 4eb605f21..da8df807c 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -229,7 +229,7 @@ $conflist = array( 'be', array('be_2ch_mail', 'be.2ch.net�̓o�^���[���A�h���X', P2_EDIT_CONF_USER_LONGTEXT), - array('be_2ch_password', '<a href="http://be.2ch.net/" target="_blank">be.2ch.net</a>�̃p�X���[�h(�F�؃R�[�h�͎g���Ȃ��Ȃ�܂���)', P2_EDIT_CONF_USER_LONGTEXT), + array('be_2ch_password', '<a href="http://be.2ch.net/" target="_blank">be.2ch.net</a>�̃p�X���[�h(�F�؃R�[�h�͎g���Ȃ��Ȃ�܂���)', P2_EDIT_CONF_USER_PASSWORD), array('be_2ch_DMDM', '<a href="http://be.2ch.net/" target="_blank">be.2ch.net</a>��DMDM(�蓮�ݒ肷��ꍇ�̂ݓ���)', P2_EDIT_CONF_USER_LONGTEXT), array('be_2ch_MDMD', '<a href="http://be.2ch.net/" target="_blank">be.2ch.net</a>��MDMD(�蓮�ݒ肷��ꍇ�̂ݓ���)', P2_EDIT_CONF_USER_LONGTEXT), '����p2', @@ -402,11 +402,12 @@ $keep_old = true; } else { $conflist = array( + '3�y�C�����', array('frame_menu_width', '�t���[���� �ƒ��j���[ �̕\����'), array('frame_subject_width', '�t���[���E�� �X���ꗗ �̕\����'), array('frame_read_width', '�t���[���E�� �X���{�� �̕\����'), array('pane_mode', '3�y�C����ʂ̃t���[���̕��ו�'), - + '��������', array('my_FROM', '���X�������ݎ��̃f�t�H���g�̖��O'), array('my_mail', '���X�������ݎ��̃f�t�H���g��mail'), @@ -417,21 +418,27 @@ array('res_hist_rec_num', '�������ݗ����̋L�^��'), array('res_write_rec', '�������ݓ��e���O���L�^'), array('res_popup_reload', '�|�b�v�A�b�v���珑�����ݐ���������X�����ēǂݍ��݂���'), + '�O��URL�E�u���N���`�F�b�J', array('through_ime', '�O��URL�W�����v����ۂɒʂ��Q�[�g<br>�u���ځv�ł�Cookie���g���Ȃ��[���ł� gate.php ��ʂ�'), array('through_ime_http_only', ' HTTPS�ŃA�N�Z�X���Ă���Ƃ��͊O��URL�Q�[�g��ʂ��Ȃ�<br>(�ŋ߂�Web�u���E�U�̑����� https �� http �̑J�ڂ�Referer�𑗏o���܂��񂪁A<br>�uHTTPS�ł͒��v�ɂ���ꍇ�́A���g���̃u���E�U�̎d�l���m�F���Ă�������)'), array('ime_manual_ext', '�Q�[�g�Ŏ����]�����Ȃ��g���q�i�J���}��؂�ŁA�g���q�̑O�̃s���I�h�͕s�v�j'), + array('brocra_checker_use', '�u���N���`�F�b�J (�‚���, �‚��Ȃ�)'), + array('brocra_checker_url', '�u���N���`�F�b�JURL'), + array('brocra_checker_query', '�u���N���`�F�b�J�̃N�G���[ (��̏ꍇ�APATH_INFO��URL��n��)'), + '�ƒ��j���[�E���C�ɔ�', array('join_favrank', '<a href="http://akid.s17.xrea.com/favrank/favrank.html" target="_blank">���C�ɃX�����L</a>�ɎQ��'), array('merge_favita', '���C�ɔ‚̃X���ꗗ���܂Ƃ߂ĕ\�� (���C�ɔ‚̐��ɂ���Ă͏����Ɏ��Ԃ�������)'), array('favita_order_dnd', '�h���b�O���h���b�v�ł��C�ɔ‚���בւ���'), array('enable_menu_new', '�ƒ��j���[�ɐV������\��'), array('menu_refresh_time', '�ƒ��j���[�����̎����X�V�Ԋu (���w��B0�Ȃ玩���X�V���Ȃ�)'), array('menu_hide_brds', '�ƒJ�e�S���ꗗ��‚�����Ԃɂ���'), - array('brocra_checker_use', '�u���N���`�F�b�J (�‚���, �‚��Ȃ�)'), - array('brocra_checker_url', '�u���N���`�F�b�JURL'), - array('brocra_checker_query', '�u���N���`�F�b�J�̃N�G���[ (��̏ꍇ�APATH_INFO��URL��n��)'), + '�v���L�V', array('proxy_use', '�v���L�V�𗘗p'), - array('proxy_host', '�v���L�V�z�X�g ex)"127.0.0.1", "p2proxy.example"'), - array('proxy_port', '�v���L�V�|�[�g ex)"8080"'), + array('proxy_host', '�v���L�V�z�X�g ex)"127.0.0.1", "p2proxy.example"'), + array('proxy_port', '�v���L�V�|�[�g ex)"8080"'), + array('proxy_user', '�v���L�V���[�U�[�� (�g�p����ꍇ�̂�)'), + array('proxy_password', '�v���L�V�p�X���[�h (�g�p����ꍇ�̂�)'), + '�ʐM�ݒ�', array('ssl_function', 'SSL�ʐM(�����O�C����)�Ɏg�p����֐�<br>(�֐��ɊY������g�����C���X�g�[������K�v������)'), ); printEditConfGroupHtml($groupname, $conflist, $flags); diff --git a/rep2/post.php b/rep2/post.php index 146a4ec12..35f98cb97 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -394,8 +394,10 @@ function postIt($host, $bbs, $key, $post) // �v���L�V if ($_conf['proxy_use']) { $req->setConfig(array( - �eproxy_host�f => $_conf['proxy_host'], - �eproxy_port�f => $_conf['proxy_port'], + 'proxy_host' => $_conf['proxy_host'], + 'proxy_port' => $_conf['proxy_port'], + 'proxy_user' => $_conf['proxy_user'], + 'proxy_password' => $_conf['proxy_password'] )); } From 8d4c34c07f10710674e2e39e4ede7b76099491f3 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Tue, 31 Mar 2015 10:11:15 +0900 Subject: [PATCH 097/339] =?UTF-8?q?DAT=E8=90=BD=E3=81=A1=E5=88=A4=E5=AE=9A?= =?UTF-8?q?=E3=82=92=E5=A4=89=E6=9B=B4=20ID=E3=81=AE=E4=BB=95=E6=A7=98?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=E3=81=AB=E5=AF=BE=E5=BF=9C=20DAT=E3=82=92?= =?UTF-8?q?=E5=8F=96=E5=BE=97=E3=81=99=E3=82=8B=E9=9A=9B=E3=81=ABgzip?= =?UTF-8?q?=E3=81=A7=E5=8F=96=E5=BE=97=E3=81=99=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ShowThread.php | 4 ++-- lib/ShowThreadPc.php | 2 +- lib/ThreadRead.php | 27 ++++++++------------------- 3 files changed, 11 insertions(+), 22 deletions(-) diff --git a/lib/ShowThread.php b/lib/ShowThread.php index 47ae65f4b..5f0676026 100644 --- a/lib/ShowThread.php +++ b/lib/ShowThread.php @@ -36,7 +36,7 @@ abstract class ShowThread (?P<url>(ftp|h?t?tps?)://([0-9A-Za-z][\\w;/?:@=&$\\-_.+!*\'(),#%\\[\\]^~]+)) # URL ([^\\s<>]*) # URL�̒���A�^�Oor�z���C�g�X�y�[�X�������܂ł̕����� | - (?P<id>ID:[ ]?([0-9A-Za-z/.+]{8,11})(?=[^0-9A-Za-z/.+]|$)) # ID�i8,10�� +PC/�g�ю��ʃt���O�j + (?P<id>ID:[ ]?([0-9A-Za-z/.+]{8,14})(?=[^0-9A-Za-z/.+]|$)) # ID�i8,10�� +PC/�g�ю��ʃt���O�j ) }x'; @@ -2023,7 +2023,7 @@ static protected function _buildStrToLinkRegex() . '(ftp|h?ttps?|tps?)://([0-9A-Za-z][\\w!#%&+*,\\-./:;=?@\\[\\]^~]+)' // URL . ')' . '|' - . '(?P<id>ID: ?([0-9A-Za-z/.+]{8,11})(?=[^0-9A-Za-z/.+]|$))' // ID�i8,10�� +PC/�g�ю��ʃt���O�j + . '(?P<id>ID: ?([0-9A-Za-z/.+]{8,14})(?=[^0-9A-Za-z/.+]|$))' // ID�i8,10�� +PC/�g�ю��ʃt���O�j . ')' . '}'; } diff --git a/lib/ShowThreadPc.php b/lib/ShowThreadPc.php index a13ea0b63..5b635c3eb 100644 --- a/lib/ShowThreadPc.php +++ b/lib/ShowThreadPc.php @@ -640,7 +640,7 @@ public function idFilter($idstr, $id) return $idstr; } - if ($_conf['coloredid.enable'] > 0 && preg_match("|^ID:[ ]?[0-9A-Za-z/.+]{8,11}|",$idstr)) { + if ($_conf['coloredid.enable'] > 0 && preg_match("|^ID: ?[0-9A-Za-z/.+]+|",$idstr)) { if ($this->_ids_for_render === null) { $this->_ids_for_render = array(); } diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index da5f7515e..3d7e7080d 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -174,6 +174,7 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { $req = new HTTP_Request2 ($url, HTTP_Request2::METHOD_POST); // �w�b�_ $req->setHeader ('User-Agent', $ReadUA); + $req->setHeader ('Accept-Encoding', "gzip, deflate"); if (! empty ($_GET['one'])) { // >>1�v���r���[�̎��̓T�[�o�[�ɍŏ��̕����������� @@ -255,13 +256,7 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { $this->diedat = true; return false; } elseif (mb_strpos ($firstmsg, "�Q�����˂� ��<><>2015/03/13(��) 00:00:00.00 ID:????????<> 3��13�����Q") === 0) { - $this->getdat_error_msg_ht .= "<p>rep2 error: API�o�R�ł̃X���b�h�擾�Ɏ��s���܂����B<br />rep2 info: �X���b�h�����݂��Ȃ����ߋ����O�Ɋi�[����Ă��܂��B</p>"; - $marutori_ht = $this->_generateMarutoriLink (); - $plugin_ht = $this->_generateWikiDatLink (); - $moritori_ht = $this->_generateMoritapoDatLink (); - $this->getdat_error_msg_ht .= "{$marutori_ht}{$moritori_ht}{$plugin_ht}"; - $this->diedat = true; - return false; + return $this->_downloadDat2chNotFound ('404'); } unset ($firstmsg); @@ -369,6 +364,7 @@ protected function _downloadDat2ch($from_bytes) { // �w�b�_ $req->setHeader ('User-Agent', P2Util::getP2UA (true)); $req->setHeader ('Referer', "http://{$purl['host']}/{$this->bbs}/"); + $req->setHeader ('Accept-Encoding', "gzip, deflate"); if (! empty ($_GET['one'])) { // >>1�v���r���[�̎��̓T�[�o�[�ɍŏ��̕����������� @@ -431,11 +427,7 @@ protected function _downloadDat2ch($from_bytes) { $firstmsg = mb_substr ($body, 0, $posLF === false ? mb_strlen ($body) : $posLF); if (mb_strpos ($firstmsg, "�Q�����˂� ��<><>2015/03/13(��) 00:00:00.00 ID:????????<> 3��13�����Q") === 0) { - $this->getdat_error_msg_ht .= "<p>rep2 error: API�o�R�ł̃X���b�h�擾�Ɏ��s���܂����B<br />rep2 info: �X���b�h�����݂��Ȃ����ߋ����O�Ɋi�[����Ă��܂��B</p>"; - $marutori_ht = $this->_generateMarutoriLink (); - $plugin_ht = $this->_generateWikiDatLink (); - $moritori_ht = $this->_generateMoritapoDatLink (); - $this->getdat_error_msg_ht .= "{$marutori_ht}{$moritori_ht}{$plugin_ht}"; + $this->getdat_error_msg_ht .= "<p>rep2 error: �ƒT�[�o����ڑ������ۂ���܂���<br>rep2 info: 2�����˂��DAT�񋟂͏I�����܂���</p>"; $this->diedat = true; return false; } @@ -759,12 +751,9 @@ public function get2chDatError($code = null) { $reason = 'kakohtml'; } } - } elseif (P2Util::isHost2chs ($this->host) && $code == '404') { - // API�̈�404��������ߋ����O�ƌ��߂‚��Ƃ��ifix Here�j - $reason = 'datochi'; } - $read_url = "http://{$this->host}/test/read.cgi/{$this->bbs}/{$this->key}/"; + $read_url = "http://{$this->host}/test/read.cgi/{$this->bbs}/{$this->key}/1"; // {{{ read.cgi ����HTML���擾 @@ -773,7 +762,7 @@ public function get2chDatError($code = null) { try { $req = new HTTP_Request2 ($read_url, HTTP_Request2::METHOD_GET); // �w�b�_ - $req->setHeader ('User-Agent', P2Util::getP2UA(false)); // �����́A"Monazilla/" ���‚����NG + $req->setHeader ('User-Agent', P2Util::getP2UA(false,P2Util::isHost2chs($this->host))); // �����́A"Monazilla/" ���‚����NG $req->setHeader ('Accept-Encoding', "gzip, deflate"); $req->setConfig (array ( @@ -805,7 +794,7 @@ public function get2chDatError($code = null) { } else { $url_t = P2Util::throughIme ($read_url); $info_msg_ht = "<p class=\"info-msg\">Error: {$code}<br>"; - $info_msg_ht .= "rep2 info: <a href=\"{$url_t}\"{$_conf['ext_win_target_at']}>{$read_url}</a> �ɐڑ��ł��܂���ł����B</p>"; + $info_msg_ht .= "rep2 info: <a href=\"{$url_t}\"{$_conf['ext_win_target_at']}>{$read_url}</a> ��HTML���擾�o���܂���ł����B</p>"; P2Util::pushInfoHtml ($info_msg_ht); } } catch (Exception $e) { @@ -1168,7 +1157,7 @@ protected function _setIdCount() { foreach ($this->datlines as $l) { $lar = explode ('<>', $l); $i ++; - if (preg_match ('<(ID: ?| )([0-9A-Za-z/.+]{8,11})(?=[^0-9A-Za-z/.+]|$)>', $lar[2], $m)) { + if (preg_match ('<(ID: ?)([0-9A-Za-z/.+]+)(?=[^0-9A-Za-z/.+]|$)>', $lar[2], $m)) { $idp[$i] = $m[1]; $ids[$i] = $m[2]; } From 325ddc9a5b09939f70e164d1ce4f6bff3b6e8223 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Tue, 31 Mar 2015 10:55:51 +0900 Subject: [PATCH 098/339] =?UTF-8?q?HTTP=5FRequest2=E3=81=AB=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=E3=81=AE=E3=81=9F=E3=82=81Wap.php=E3=82=92=E5=89=8A?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/Wap.php | 689 ------------------------------------------ lib/startup.funcs.php | 7 +- 2 files changed, 1 insertion(+), 695 deletions(-) delete mode 100644 lib/Wap.php diff --git a/lib/Wap.php b/lib/Wap.php deleted file mode 100644 index 77206a660..000000000 --- a/lib/Wap.php +++ /dev/null @@ -1,689 +0,0 @@ -<?php -/** - * WWW Access on PHP - * http://member.nifty.ne.jp/hippo2000/perltips/LWP.html ���Q�l�ɂ��‚Ž����悤�ȊȈՂ̂��̂� - * - * @author aki - */ - -// 2005/04/20 aki ���̃N���X�͖����I���ɂ��āAPEAR���p�Ɉڍs�������iHTTP_Client�Ȃǁj - -// {{{ WapUserAgent - -/** - * UserAgent �N���X - */ -class WapUserAgent -{ - // {{{ constants - - const CRLF = "\r\n"; - - // }}} - // {{{ properties - - /** - * User-Agent - * - * @var string - */ - private $_agent = null; - - /** - * fsockopen() ���̃^�C���A�E�g�b - * - * @var int - */ - private $_timeout = -1; - - /** - * fread() ���̃^�C���A�E�g�b - * - * @var int - */ - private $_readTimeout = -1; - - /** - * fsockopen() ��@���Z�q��t���āA�G���[��}������Ȃ�true - * - * @var bool - */ - private $_atFsockopen = false; - - /** - * @var int - */ - private $_maxRedirect = 3; - - /** - * @var int - */ - private $_redirectCount = 0; - - /** - * @var array - */ - private $_redirectCache = array(); - - // }}} - // {{{ constructor - - /** - * �R���X�g���N�^ - * - * @param string $agent_name - */ - public function __construct($agent_name = null) - { - if ($agent_name !== null) { - $this->setAgent($agent_name); - } - } - - // }}} - // {{{ setAgent() - - /** - * setAgent - * - * @param string $agent_name - * @return void - */ - public function setAgent($agent_name) - { - $this->_agent = $agent_name; - } - - // }}} - // {{{ setTimeout() - - /** - * set timeout - * - * @param int $timeout - * @param int $readTimeout - * @return void - */ - public function setTimeout($timeout, $readTimeout) - { - $this->_timeout = $timeout; - $this->_readTimeout = $readTimeout; - } - - // }}} - // {{{ setAtFsockopen() - - /** - * set atFsockopen - * - * @param bool $atFsockopen - * @return void - */ - public function setAtFsockopen($atFsockopen) - { - $this->_atFsockopen = $atFsockopen; - } - - // }}} - // {{{ header() - - /** - * HTTP���N�G�X�g���T�[�o�ɑ��M���āA�w�b�_���X�|���X�iWapResponse�I�u�W�F�N�g�j���擾���� - * - * @param WapRequest $req - * @return WapResponse - * @see WapUserAgent::request() - */ - public function header(WapRequest $req) - { - return $this->request($req, array('onlyHeader' => true)); - } - - // }}} - // {{{ request() - - /** - * HTTP���N�G�X�g���T�[�o�ɑ��M���āA���X�|���X�iWapResponse�I�u�W�F�N�g�j���擾���� - * - * @thanks http://www.spencernetwork.org/memo/tips-3.php - * - * @param WapRequest $req - * @param array $options - * @return WapResponse - */ - public function request(WapRequest $req, array $options = array()) - { - if (!empty($options['onlyHeader'])) { - $req->setOnlyHeader($options['onlyHeader']); - } - - if (!$purl = parse_url($req->url)) { - $res = new WapResponse(); - $res->message = 'parse_url() failed'; - return $res; - } - - if (isset($purl['query'])) { - $purl['query'] = '?' . $purl['query']; - } else { - $purl['query'] = ''; - } - $default_port = ($purl['scheme'] == 'https') ? 443 : 80; - - // �v���L�V - if ($req->proxy) { - $send_host = $req->proxy['host']; - $send_port = isset($req->proxy['port']) ? $req->proxy['port'] : $default_port; - $send_path = $req->url; - } else { - $send_host = $purl['host']; - $send_port = isset($purl['port']) ? $purl['port'] : $default_port; - $send_path = $purl['path'] . $purl['query']; - } - - // SSL - if ($purl['scheme'] == 'https') { - $send_host = 'ssl://' . $send_host; - } - - $request = $req->method . ' ' . $send_path . ' HTTP/1.0' . self::CRLF; - $request .= 'Host: ' . $purl['host'] . self::CRLF; - if ($this->_agent) { - $request .= 'User-Agent: '. $this->_agent . self::CRLF; - } - $request .= 'Connection: Close' . self::CRLF; - //$request .= 'Accept-Encoding: gzip' . self::CRLF; - - if ($req->modified) { - $request .= 'If-Modified-Since: ' . $req->modified . self::CRLF; - } - - // Basic�F�ؗp�̃w�b�_ - if (isset($purl['user']) && isset($purl['pass'])) { - $request .= 'Authorization: Basic ' . base64_encode($purl['user'] . ':' . $purl['pass']) . self::CRLF; - } - - // �lj��w�b�_ - if ($req->headers) { - $request .= $req->headers; - } - - // POST�̎��̓w�b�_��lj����Ė�����URL�G���R�[�h�����f�[�^��Y�t - if (strtoupper($req->method) == 'POST') { - // �ʏ��URL�G���R�[�h���� - if (empty($req->noUrlencodePost)) { - foreach ($req->post as $name => $value) { - $POST[] = $name . '=' . rawurlencode($value); - } - $postdata_content_type = 'application/x-www-form-urlencoded'; - - // �����O�C���̂Ƃ��Ȃǂ�URL�G���R�[�h���Ȃ� - } else { - foreach ($req->post as $name => $value) { - $POST[] = $name . '=' . $value; - } - $postdata_content_type = 'text/plain'; - } - $postdata = implode('&', $POST); - $request .= 'Content-Type: ' . $postdata_content_type . self::CRLF; - $request .= 'Content-Length: ' . strlen($postdata) . self::CRLF; - $request .= self::CRLF; - $request .= $postdata; - } else { - $request .= self::CRLF; - } - - $res = new WapResponse(); - - // WEB�T�[�o�֐ڑ� - if ($this->_timeout > 0) { - if ($this->_atFsockopen) { - $fp = @fsockopen($send_host, $send_port, $errno, $errstr, $this->_timeout); - } else { - $fp = fsockopen($send_host, $send_port, $errno, $errstr, $this->_timeout); - } - } else { - if ($this->_atFsockopen) { - $fp = @fsockopen($send_host, $send_port, $errno, $errstr); - } else { - $fp = fsockopen($send_host, $send_port, $errno, $errstr); - } - } - - if (!$fp) { - $res->code = $errno; // ex) 602 - $res->message = $errstr; // ex) "Connection Failed" - return $res; - } - - if ($this->_readTimeout > 0) { - stream_set_timeout($fp, $this->_readTimeout, 0); - } - - fputs($fp, $request); - $body = ''; - - // header response - while (!p2_stream_eof($fp, $timed_out)) { - $l = fgets($fp,128000); - //echo $l."<br>"; // - // ex) HTTP/1.1 304 Not Modified - if (preg_match('/^(.+?): (.+)\\r\\n/', $l, $matches)) { - $res->headers[$matches[1]] = $matches[2]; - } elseif (preg_match('/HTTP\\/1\\.\\d (\\d+) (.+)\\r\\n/', $l, $matches)) { - $res->code = (int)$matches[1]; - $res->message = $matches[2]; - $res->headers['HTTP'] = rtrim($l); - } elseif ($l == self::CRLF) { - break; - } - } - - // body response - if (!$req->onlyHeader) { - while (!p2_stream_eof($fp, $timed_out)) { - $body .= fread($fp, 4096); - } - $res->setContent($body); - } - - fclose($fp); - - // ���_�C���N�g(301 Moved, 302 Found)��ǐ� - // RFC2616 - Section 10.3 - /*if ($GLOBALS['trace_http_redirect']) { - if ($res->code == 301 || ($res->code == 302 && $req->isSafeMethod())) { - if (!$this->_redirectCache) { - $this->_maxRedirect = 5; - $this->_redirectCount = 0; - $this->_redirectCache = array(); - } - while ($res->isRedirect() && isset($res->headers['Location']) && $this->_redirectCount < $this->_maxRedirect) { - $this->_redirectCache[] = $res; - $req->setUrl($res->headers['Location']); - $res = $this->request($req); - $this->_redirectCount++; - } - } - } elseif ($res->isRedirect() && isset($res->headers['Location'])) { - $res->message .= " (Location: <a href=\"{$res->headers['Location']}\">{$res->headers['Location']}</a>)"; - }*/ - - return $res; - } - - // }}} -} - -// }}} -// {{{ WapRequest - -/** - * Request �N���X - */ -class WapRequest -{ - // {{{ constants - - const CRLF = "\r\n"; - - // }}} - // {{{ properties - - /** - * GET, POST, HEAD�̂����ꂩ(�f�t�H���g��GET�APUT,DELETE���͂Ȃ�) - * - * @var string - */ - public $method = 'GET'; - - /** - * http://����n�܂�URL( http://user:pass@host:port/path?query ) - * - * @var string - */ - public $url = null; - - /** - * �C�ӂ̒lj��w�b�_ - * - * @var string - */ - public $headers = null; - - /** - * POST�̎��ɑ��M����f�[�^���i�[�����z��("�ϐ���"=>"�l") - * - * @var array - */ - public $post = array(); - - /** - * ('host'=>"", 'port'=>"") - * - * @var array - */ - public $proxy = array(); - - /** - * If-Modified-Since - * - * @var string - */ - public $modified = null; - - /** - * �w�b�_�������擾����Ȃ�true - * - * @var bool - */ - public $onlyHeader = false; - - /** - * POST�f�[�^��urlencode���Ȃ��Ȃ�true�B�ʏ��urlencode����̂�false - * - * @var bool - */ - public $noUrlencodePost = false; - - // }}} - // {{{ constructor - - /** - * �R���X�g���N�^ - * - * @param string $url - * @param string $method - * @param array $options - */ - public function __construct($url = null, $method = null, array $options = null) - { - if ($url) { - $this->setUrl($url); - } - if ($method) { - $this->setMethod($method); - } - if (!$options) { - return; - } - if (array_key_exists('headers', $options)) { - $this->setHeaders($options['headers']); - } - if (array_key_exists('proxy', $options)) { - $this->setProxy($options['proxy']); - } - if (array_key_exists('modified', $options)) { - $this->setModified($options['modified']); - } - if (array_key_exists('onlyHeader', $options)) { - $this->setOnlyHeader($options['onlyHeader']); - } - if (array_key_exists('noUrlencodePost', $options)) { - $this->setNoUrlencodePost($options['noUrlencodePost']); - } - } - - // }}} - // {{{ setProxy() - - /** - * set proxy - * - * @param string $host - * @param string $port - * @return void - */ - public function setProxy($host, $port) - { - $this->proxy['host'] = $host; - $this->proxy['port'] = $port; - } - - // }}} - // {{{ setMethod() - - /** - * set method - * - * @param string $method - * @return void - */ - public function setMethod($method) - { - $this->method = $method; - } - - // }}} - // {{{ setUrl() - - /** - * set url - * - * @param string $url - * @return void - */ - public function setUrl($url) - { - $this->url = $url; - } - - // }}} - // {{{ setModified() - - /** - * set modified - * - * @param string|int $modified - * @return void - */ - public function setModified($modified) - { - if (is_numeric($modified)) { - $this->modified = http_date((int)$modified); - } else { - $this->modified = $modified; - } - } - - // }}} - // {{{ setOnlyHeader() - - /** - * set onlyHeader - * - * @param bool $onlyHeader - * @return void - */ - public function setOnlyHeader($onlyHeader) - { - $this->onlyHeader = $onlyHeader; - } - - // }}} - // {{{ setHeaders() - - /** - * set noUrlencodePost - * - * @param bool $noUrlencodePost - * @return void - */ - public function setNoUrlencodePost($noUrlencodePost) - { - $this->noUrlencodePost = $noUrlencodePost; - } - - // }}} - // {{{ setHeaders() - - /** - * set headers - * - * @param string $headers - * @return void - */ - public function setHeaders($headers) - { - $this->headers = $headers; - } - - // }}} - // {{{ isSafeMethod() - - /** - * is safe method? - * - * @return bool - */ - public function isSafeMethod() - { - $method = strtoupper($this->method); - // RFC2616 - Section 9 - if ($method == 'GET' || $method == 'HEAD'){ - return true; - } else { - return false; - } - } - - // }}} -} - -// }}} -// {{{ WapResponse - -/** - * Response �N���X - */ -class WapResponse -{ - // {{{ properties - - /** - * ���N�G�X�g�̌��ʂ��������l - * - * @var int - */ - public $code = false; - - /** - * code�ɑΉ�����l�Ԃ��ǂ߂�Z�������� - * - * @var string - */ - public $message = ''; - - /** - * �z�� - * - * @var array - */ - public $headers = array(); - - /** - * ���e�B�C�ӂ̃f�[�^�̌ł܂� - * - * @var string - */ - public $content = null; - - // }}} - // {{{ setContent() - - /** - * set content - * - * @param string $content - * @return void - */ - public function setContent($content) - { - $this->content = $content; - } - - // }}} - // {{{ isSuccess() - - /** - * is success? - * - * @return bool - */ - public function isSuccess() - { - return in_array($this->code, array(200, 206, 304)); - } - - // }}} - // {{{ isError() - - /** - * is error ? - * - * @return bool - */ - public function isError() - { - if (!$this->code) { - return true; - } - return !$this->isSuccess(); - } - - // }}} - // {{{ isRedirect() - - /** - * is redirect? - * - * @return bool - */ - public function isRedirect() - { - return in_array($this->code, array(301, 302)); - } - - // }}} - // {{{ HTTP Status Codes (note) -/* - 000, 'Unknown Error', - 200, 'OK', - 201, 'CREATED', - 202, 'Accepted', - 203, 'Partial Information', - 204, 'No Response', - 206, 'Partial Content', - 301, 'Moved', - 302, 'Found', - 303, 'Method', - 304, 'Not Modified', - 400, 'Bad Request', - 401, 'Unauthorized', - 402, 'Payment Required', - 403, 'Forbidden', - 404, 'Not Found', - 500, 'Internal Error', - 501, 'Not Implemented', - 502, 'Bad Response', - 503, 'Too Busy', - 600, 'Bad Request in Client', - 601, 'Not Implemented in Client', - 602, 'Connection Failed', - 603, 'Timed Out', -*/ - // }}} -} - -// }}} - -/* - * Local Variables: - * mode: php - * coding: cp932 - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: nil - * End: - */ -// vim: set syn=php fenc=cp932 ai et ts=4 sw=4 sts=4 fdm=marker: diff --git a/lib/startup.funcs.php b/lib/startup.funcs.php index 26887bde7..7edaa0dc0 100644 --- a/lib/startup.funcs.php +++ b/lib/startup.funcs.php @@ -40,14 +40,9 @@ function p2_load_class($name) Thread(?:List|Read)? | UA | UrlSafeBase64 | - Wap(?:UserAgent|Request|Response) )$/x', $name)) { - if (strncmp($name, 'Wap', 3) === 0) { - include P2_LIB_DIR . '/Wap.php'; - } else { - include P2_LIB_DIR . '/' . $name . '.php'; - } + include P2_LIB_DIR . '/' . $name . '.php'; } elseif (preg_match('/^[A-Z][A-Za-z]*DataStore$/', $name)) { include P2_LIB_DIR . '/P2DataStore/' . $name . '.php'; } From 6e1c7a0c6594e2fba44f7c551009e6ee4a17c97d Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Wed, 1 Apr 2015 07:18:54 +0900 Subject: [PATCH 099/339] =?UTF-8?q?BbsMap::=5FgetMapping=E3=81=AB10?= =?UTF-8?q?=E5=88=86=E9=96=93=E9=9A=94=E3=81=A72ch=E3=81=AB=E3=82=A2?= =?UTF-8?q?=E3=82=AF=E3=82=BB=E3=82=B9=E3=81=99=E3=82=8B=E6=A9=9F=E8=83=BD?= =?UTF-8?q?=E3=81=8C=E3=81=82=E3=81=A3=E3=81=9F=E3=81=AE=E3=81=A7=E3=82=A2?= =?UTF-8?q?=E3=82=AF=E3=82=BB=E3=82=B9=E9=96=93=E9=9A=94=E3=82=92=E6=9C=80?= =?UTF-8?q?=E4=BD=8E=E4=B8=80=E6=99=82=E9=96=93=E9=96=93=E9=9A=94=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=20Subject.txt=E3=81=A8SETTING.TXT=E3=81=AEDL?= =?UTF-8?q?=E5=87=A6=E7=90=86=E3=82=92HTTP=5FRequest2=E3=81=AB=E5=A4=89?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/BbsMap.php | 92 ++++++++--------------------------------- lib/BrdCtl.php | 3 +- lib/SettingTxt.php | 100 ++++++++++++++++++++++----------------------- lib/SubjectTxt.php | 81 ++++++++++++++++++------------------ 4 files changed, 110 insertions(+), 166 deletions(-) diff --git a/lib/BbsMap.php b/lib/BbsMap.php index df29457cb..a1d3a57ee 100644 --- a/lib/BbsMap.php +++ b/lib/BbsMap.php @@ -265,13 +265,8 @@ static private function _getMapping() global $_conf; // {{{ �ݒ� - - $bbsmenu_url = 'http://menu.2ch.net/bbsmenu.html'; // �������j���[�� URL - $altmenu_url = 'http://www.2ch.se/bbsmenu.html'; // ��փ��j���[�� URL $map_cache_path = $_conf['cache_dir'] . '/host_bbs_map.txt'; - $map_cache_lifetime = 600; // TTL�͏����Z�߂� - $err_fmt = '<p>rep2 error: BbsMap: %s - %s ���_�E�����[�h�ł��܂���ł����B</p>'; - $use_alt = false; + $map_cache_lifetime = 60 * 60 * 30; // 30�������ɍX�V�����邩�m�F���邪BrdCtl���ōŒ�1���Ԃ̓A�N�Z�X���Ȃ��B // }}} // {{{ �L���b�V���m�F @@ -294,77 +289,26 @@ static private function _getMapping() // }}} // {{{ ���j���[���_�E�����[�h - - $params = array(); - $params['timeout'] = $_conf['http_conn_timeout']; - $params['readTimeout'] = array($_conf['http_read_timeout'], 0); - if (isset($mtime)) { - $params['requestHeaders'] = array('If-Modified-Since' => http_date($mtime)); - } - if ($_conf['proxy_use']) { - $params['proxy_host'] = $_conf['proxy_host']; - $params['proxy_port'] = $_conf['proxy_port']; - } - $req = new HTTP_Request($bbsmenu_url, $params); - $req->setMethod('GET'); - $err = $req->sendRequest(true); - - // �G���[�̂Ƃ��A����̃��j���[���g���Ă݂� - if (PEAR::isError($err) && $use_alt) { - P2Util::pushInfoHtml(sprintf($err_fmt, p2h($err->getMessage()), p2h($bbsmenu_url))); - P2Util::pushInfoHtml(sprintf("<p>����� %s ���_�E�����[�h���܂��B</p>", p2h($altmenu_url))); - $bbsmenu_url = $altmenu_url; - unset ($req, $err); - $req = new HTTP_Request($bbsmenu_url, $params); - $req->setMethod('GET'); - $err = $req->sendRequest(true); - } - - // �G���[������ - if (PEAR::isError($err)) { - P2Util::pushInfoHtml(sprintf($err_fmt, p2h($err->getMessage()), p2h($bbsmenu_url))); - if (file_exists($map_cache_path)) { - return unserialize(file_get_contents($map_cache_path)); - } else { - return false; - } - } - - // ���X�|���X�R�[�h������ - $code = $req->getResponseCode(); - if ($code == 304) { - $map_cahce = file_get_contents($map_cache_path); - self::$_map = unserialize($map_cahce); - return self::$_map; - } elseif ($code != 200) { - P2Util::pushInfoHtml(sprintf($err_fmt, p2h(strval($code)), p2h($bbsmenu_url))); - if (file_exists($map_cache_path)) { - return unserialize(file_get_contents($map_cache_path)); - } else { - return false; - } - } - - $res_body = $req->getResponseBody(); - - // }}} - // {{{ �p�[�X - - $regex = '!<A HREF=http://(\w+\.(?:2ch\.net|bbspink\.com|machi\.to|mathibbs\.com))/(\w+)/(?: TARGET=_blank)?>(.+?)</A>!'; - preg_match_all($regex, $res_body, $matches, PREG_SET_ORDER); - + $brd_menus_online = BrdCtl::read_brd_online(); $map = array(); - foreach ($matches as $match) { - $host = $match[1]; - $bbs = $match[2]; - $itaj = $match[3]; - $type = self::_detectHostType($host); - if (!isset($map[$type])) { - $map[$type] = array(); + + foreach ($brd_menus_online as $a_brd_menu) { + foreach ($a_brd_menu->categories as $cate) { + if ($cate->num > 0) { + foreach ($cate->menuitas as $mita) { + $host = $mita->host; + $bbs = $mita->bbs; + $itaj = $mita->itaj; + $type = self::_detectHostType($host); + if (!isset($map[$type])) { + $map[$type] = array(); + } + $map[$type][$bbs] = array('host' => $host, 'itaj' => $itaj); + } + } } - $map[$type][$bbs] = array('host' => $host, 'itaj' => $itaj); } - + unset ($brd_menus_online); // }}} // {{{ �L���b�V������ diff --git a/lib/BrdCtl.php b/lib/BrdCtl.php index 6080c47b5..51f8a1288 100644 --- a/lib/BrdCtl.php +++ b/lib/BrdCtl.php @@ -92,8 +92,9 @@ static public function read_brd_online() $brdfile_online_res = P2Util::fileDownload($_conf['brdfile_online'], $cachefile); if (isset($brdfile_online_res) && $brdfile_online_res->getStatus() != 304) { $isNewDL = true; - unset($brdfile_online_res); } + + unset($brdfile_online_res); } // html�`���Ȃ� diff --git a/lib/SettingTxt.php b/lib/SettingTxt.php index e261753c7..94224ad6f 100644 --- a/lib/SettingTxt.php +++ b/lib/SettingTxt.php @@ -94,39 +94,64 @@ public function downloadSettingTxt() } // DL - $params = array(); - $params['timeout'] = $_conf['http_conn_timeout']; - $params['readTimeout'] = array($_conf['http_read_timeout'], 0); - if ($_conf['proxy_use']) { - $params['proxy_host'] = $_conf['proxy_host']; - $params['proxy_port'] = $_conf['proxy_port']; - } - $req = new HTTP_Request($this->_url, $params); - $modified && $req->addHeader('If-Modified-Since', $modified); - - $req->addHeader('User-Agent', P2Util::getP2UA(true,P2Util::isHost2chs($this->host))); - - $response = $req->sendRequest(); + try { + $req = new HTTP_Request2($this->_url, HTTP_Request2::METHOD_GET); + $modified && $req->setHeader("If-Modified-Since", $modified); + + // API���g�p����ݒ�ő��肪2ch��������API��UA�𑗂� + $req->setHeader('User-Agent', P2Util::getP2UA(true,P2Util::isHost2chs($this->host))); + $req->setConfig (array ( + 'connect_timeout' => $_conf['http_conn_timeout'], + 'timeout' => $_conf['http_read_timeout'], + 'follow_redirects' => false + )); + + // �v���L�V + if ($_conf['proxy_use']) { + $req->setConfig (array ( + 'proxy_host' => $_conf['proxy_host'], + 'proxy_port' => $_conf['proxy_port'], + 'proxy_user' => $_conf['proxy_user'], + 'proxy_password' => $_conf['proxy_password'] + )); + } - if (PEAR::isError($response)) { - $error_msg = $response->getMessage(); - } else { - $code = $req->getResponseCode(); + $response = $req->send(); + $code = $response->getStatus(); if ($code == 302) { // �z�X�g�̈ړ]��ǐ� - $new_host = BbsMap::getCurrentHost($this->_host, $this->_bbs); - if ($new_host != $this->_host) { + $new_host = BbsMap::getCurrentHost($this->host, $this->bbs); + if ($new_host != $this->host) { $aNewSettingTxt = new SettingTxt($new_host, $this->_bbs); - $body = $aNewSettingTxt->downloadSettingTxt(); - return true; + return $aNewSettingTxt->downloadSettingTxt(); } - } - - if (!($code == 200 || $code == 206 || $code == 304)) { + } elseif ($code == 200 || $code == 206) { //var_dump($req->getResponseHeader()); + $body = $response->getBody(); + // ������� or be.2ch.net �Ȃ�EUC��SJIS�ɕϊ� + if (P2Util::isHostJbbsShitaraba($this->host) || P2Util::isHostBe2chNet($this->host)) { + $body = mb_convert_encoding($body, 'CP932', 'CP51932'); + } + if (FileCtl::file_write_contents($this->_setting_txt, $body) === false) { + p2die('cannot write file'); + } + // �p�[�X���ăL���b�V����ۑ����� + if (!$this->cacheParsedSettingTxt()) { + return false; + } + } elseif ($code == 304) { + // touch���邱�ƂōX�V�C���^�[�o���������̂ŁA���΂炭�ă`�F�b�N����Ȃ��Ȃ� + // �i�ύX���Ȃ��̂ɏC�����Ԃ��X�V����̂́A�����C���i�܂Ȃ����A�����ł͓��ɖ��Ȃ����낤�j + touch($this->_setting_txt); + // �����ɃL���b�V����touch���Ȃ��ƁA_setting_txt��_setting_srd�ōX�V���Ԃ�����A + // ���񂱂��܂ŏ���������i�T�[�o�ւ̃w�b�_���N�G�X�g����ԁj�ꍇ������B + touch($this->_setting_srd); + } else { $error_msg = $code; } + } catch (Exception $e) { + $error_msg = $e->getMessage(); } // DL�G���[ @@ -140,33 +165,6 @@ public function downloadSettingTxt() } - $body = $req->getResponseBody(); - - // DL�������� ���� �X�V����Ă�����ۑ� - if ($body && $code != '304') { - - // ������� or be.2ch.net �Ȃ�EUC��SJIS�ɕϊ� - if (P2Util::isHostJbbsShitaraba($this->_host) || P2Util::isHostBe2chNet($this->_host)) { - $body = mb_convert_encoding($body, 'CP932', 'CP51932'); - } - - if (FileCtl::file_write_contents($this->_setting_txt, $body) === false) { - p2die('cannot write file'); - } - - // �p�[�X���ăL���b�V����ۑ����� - if (!$this->cacheParsedSettingTxt()) { - return false; - } - - } else { - // touch���邱�ƂōX�V�C���^�[�o���������̂ŁA���΂炭�ă`�F�b�N����Ȃ��Ȃ� - touch($this->_setting_txt); - // �����ɃL���b�V����touch���Ȃ��ƁA_setting_txt��_setting_srd�ōX�V���Ԃ�����A - // ���񂱂��܂ŏ���������i�T�[�o�ւ̃w�b�_���N�G�X�g����ԁj�ꍇ������B - touch($this->_setting_srd); - } - return true; } diff --git a/lib/SubjectTxt.php b/lib/SubjectTxt.php index f7f81d733..1bb025d54 100644 --- a/lib/SubjectTxt.php +++ b/lib/SubjectTxt.php @@ -86,25 +86,31 @@ public function downloadSubject() } // DL - $params = array(); - $params['timeout'] = $_conf['http_conn_timeout']; - $params['readTimeout'] = array($_conf['http_read_timeout'], 0); - if ($_conf['proxy_use']) { - $params['proxy_host'] = $_conf['proxy_host']; - $params['proxy_port'] = $_conf['proxy_port']; - } - $req = new HTTP_Request($this->subject_url, $params); - $modified && $req->addHeader("If-Modified-Since", $modified); - - // API���g�p����ݒ�ő��肪2ch��������API��UA�𑗂� - $req->addHeader('User-Agent', P2Util::getP2UA(true,P2Util::isHost2chs($this->host))); + try { + $req = new HTTP_Request2($this->subject_url, HTTP_Request2::METHOD_GET); + $modified && $req->setHeader("If-Modified-Since", $modified); + + // API���g�p����ݒ�ő��肪2ch��������API��UA�𑗂� + $req->setHeader('User-Agent', P2Util::getP2UA(true,P2Util::isHost2chs($this->host))); + $req->setConfig (array ( + 'connect_timeout' => $_conf['http_conn_timeout'], + 'timeout' => $_conf['http_read_timeout'], + 'follow_redirects' => false + )); + + // �v���L�V + if ($_conf['proxy_use']) { + $req->setConfig (array ( + 'proxy_host' => $_conf['proxy_host'], + 'proxy_port' => $_conf['proxy_port'], + 'proxy_user' => $_conf['proxy_user'], + 'proxy_password' => $_conf['proxy_password'] + )); + } - $response = $req->sendRequest(); + $response = $req->send(); - if (PEAR::isError($response)) { - $error_msg = $response->getMessage(); - } else { - $code = $req->getResponseCode(); + $code = $response->getStatus(); if ($code == 302) { // �z�X�g�̈ړ]��ǐ� $new_host = BbsMap::getCurrentHost($this->host, $this->bbs); @@ -113,11 +119,27 @@ public function downloadSubject() $body = $aNewSubjectTxt->downloadSubject(); return $body; } - } - if (!($code == 200 || $code == 206 || $code == 304)) { + } elseif ($code == 200 || $code == 206) { //var_dump($req->getResponseHeader()); + $body = $response->getBody(); + // ������� or be.2ch.net �Ȃ�EUC��SJIS�ɕϊ� + if (P2Util::isHostJbbsShitaraba($this->host) || P2Util::isHostBe2chNet($this->host)) { + $body = mb_convert_encoding($body, 'CP932', 'CP51932'); + } + if (FileCtl::file_write_contents($this->subject_file, $body) === false) { + p2die('cannot write file'); + } + } elseif ($code == 304) { + // touch���邱�ƂōX�V�C���^�[�o���������̂ŁA���΂炭�ă`�F�b�N����Ȃ��Ȃ� + // �i�ύX���Ȃ��̂ɏC�����Ԃ��X�V����̂́A�����C���i�܂Ȃ����A�����ł͓��ɖ��Ȃ����낤�j + if ($this->storage === 'file') { + touch($this->subject_file); + } + } else { $error_msg = $code; } + } catch (Exception $e) { + $error_msg = $e->getMessage(); } if (isset($error_msg) && strlen($error_msg) > 0) { @@ -126,27 +148,6 @@ public function downloadSubject() $info_msg_ht .= "rep2 info: <a href=\"{$url_t}\"{$_conf['ext_win_target_at']}>{$this->subject_url}</a> �ɐڑ��ł��܂���ł����B</p>"; P2Util::pushInfoHtml($info_msg_ht); $body = ''; - } else { - $body = $req->getResponseBody(); - } - - // �� DL�������� ���� �X�V����Ă����� - if ($body && $code != "304") { - - // ������� or be.2ch.net �Ȃ�EUC��SJIS�ɕϊ� - if (P2Util::isHostJbbsShitaraba($this->host) || P2Util::isHostBe2chNet($this->host)) { - $body = mb_convert_encoding($body, 'CP932', 'CP51932'); - } - - if (FileCtl::file_write_contents($this->subject_file, $body) === false) { - p2die('cannot write file'); - } - } else { - // touch���邱�ƂōX�V�C���^�[�o���������̂ŁA���΂炭�ă`�F�b�N����Ȃ��Ȃ� - // �i�ύX���Ȃ��̂ɏC�����Ԃ��X�V����̂́A�����C���i�܂Ȃ����A�����ł͓��ɖ��Ȃ����낤�j - if ($this->storage === 'file') { - touch($this->subject_file); - } } return $body; From cdf59c016099addd42aebb9ebe1a484e15336b78 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Wed, 1 Apr 2015 07:49:14 +0900 Subject: [PATCH 100/339] =?UTF-8?q?Be=E3=83=AD=E3=82=B0=E3=82=A4=E3=83=B3?= =?UTF-8?q?=E3=82=92HTTP=5FRequest2=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 49 +++++++++++-------------------------------------- 1 file changed, 11 insertions(+), 38 deletions(-) diff --git a/lib/P2Util.php b/lib/P2Util.php index 73d368eb7..ccffd03c1 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -2225,38 +2225,20 @@ static public function getBe2chCodeByMailPass($mail, $pass) $params['proxy_port'] = $GLOBALS['_conf']['proxy_port']; } - $req = new HTTP_Request('http://be.2ch.net/index.php', $params); - - $req->setMethod(HTTP_REQUEST_METHOD_POST); - $req->addPostData('mail', $mail); - $req->addPostData('pass', $pass); - $req->addPostData('login', '���O�C������'); + try { + $req = new HTTP_Request2('http://be.2ch.net/index.php', HTTP_Request2::METHOD_POST); - //var_dump($req); - // If-Modified-Since => gmdate('D, d M Y H:i:s', time()) . ' GMT'; + $req->addPostParameter('mail', $mail); + $req->addPostParameter('pass', $pass); + $req->addPostParameter('login', '���O�C������'); - /* - if ($headers) { - foreach ($headers as $k => $v) { - $req->addHeader($k, $v); - } - } - */ - $response = $req->sendRequest(); // $saveBody = true -//var_dump($req->getResponseHeader()); -//var_dump($req->getResponseCookies()); -//var_dump($req->getResponseCode()); -//var_dump(mb_convert_encoding($req->getResponseBody(), 'SJIS-win', 'eucJP-win')); - - if (PEAR::isError($response)) { - $error_msg = $response->getMessage(); + $response = $req->send(); - } else { - $code = $req->getResponseCode(); + $code = $response->getStatus(); // �����Ƃ݂Ȃ��R�[�h if ($code == 302) { //return $req->getResponseBody(); - if ($cookies = $req->getResponseCookies()) { // urlencode���ꂽ��� + if ($cookies = $response->getCookies()) { // urlencode���ꂽ��� $r = array(); foreach ($cookies as $cookie) { if (in_array($cookie['name'], array('DMDM', 'MDMD'))) { @@ -2267,19 +2249,10 @@ static public function getBe2chCodeByMailPass($mail, $pass) return $r; } } - - //$error_msg = mb_convert_encoding($req->getResponseBody(), 'SJIS-win', 'eucJP-win'); - - /* - // �X�V���Ȃ����null��Ԃ� - } elseif ($code == 304) { - // 304�̎��́A$req->getResponseBody() �͋󕶎�""�ƂȂ� - return null; - */ - } else { - //var_dump($req->getResponseHeader()); - $error_msg = $code; } + + } catch (Exception $e) { + return false; // $error_msg } return false; // $error_msg From 25ff4b23fe53ec0de49807e44ead3bdae4aa639e Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Wed, 1 Apr 2015 07:56:43 +0900 Subject: [PATCH 101/339] =?UTF-8?q?HTTP=5FClient=E3=82=92HTTP=5FRequest2?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 12 ++++++++++++ lib/wiki/P2UtilWiki.php | 26 +++++++++++++++++++------- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/lib/P2Util.php b/lib/P2Util.php index ccffd03c1..345d91262 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -2228,6 +2228,18 @@ static public function getBe2chCodeByMailPass($mail, $pass) try { $req = new HTTP_Request2('http://be.2ch.net/index.php', HTTP_Request2::METHOD_POST); + $req->setHeader('User-Agent', P2Util::getP2UA(true,true)); + + // �v���L�V + if ($_conf['proxy_use']) { + $req->setConfig(array( + 'proxy_host' => $_conf['proxy_host'], + 'proxy_port' => $_conf['proxy_port'], + 'proxy_user' => $_conf['proxy_user'], + 'proxy_password' => $_conf['proxy_password'] + )); + } + $req->addPostParameter('mail', $mail); $req->addPostParameter('pass', $pass); $req->addPostParameter('login', '���O�C������'); diff --git a/lib/wiki/P2UtilWiki.php b/lib/wiki/P2UtilWiki.php index 8350828f5..86f867b66 100644 --- a/lib/wiki/P2UtilWiki.php +++ b/lib/wiki/P2UtilWiki.php @@ -39,14 +39,26 @@ public static function isUrlImepita($url) public static function getResponseCode($url) { - $client = new HTTP_Client(); - $client->setRequestParameter('timeout', $timeout); - $client->setDefaultHeader('User-Agent', 'Monazilla/1.00'); - if (!empty($_conf['proxy_use'])) { - $client->setRequestParameter('proxy_host', $_conf['proxy_host']); - $client->setRequestParameter('proxy_port', $_conf['proxy_port']); + try { + $req = new HTTP_Request2($url, HTTP_Request2::METHOD_HEAD); + + $req->setHeader('User-Agent', 'Monazilla/1.00'); + + // �v���L�V + if ($_conf['proxy_use']) { + $req->setConfig(array( + 'proxy_host' => $_conf['proxy_host'], + 'proxy_port' => $_conf['proxy_port'], + 'proxy_user' => $_conf['proxy_user'], + 'proxy_password' => $_conf['proxy_password'] + )); + } + + return $response->getStatus(); + + } catch (Exception $e) { + return false; // $error_msg } - return $client->head($url); } /** From 90387f08bfd7d92d85905da0f329c439787018b6 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Wed, 1 Apr 2015 23:37:58 +0900 Subject: [PATCH 102/339] =?UTF-8?q?ThreadRead.php=E3=81=ABssl=5Ffunction?= =?UTF-8?q?=E3=81=8C=E5=AE=9F=E8=A3=85=E3=81=95=E3=82=8C=E3=81=A6=E3=81=84?= =?UTF-8?q?=E3=81=AA=E3=81=84=E4=B8=8D=E5=85=B7=E5=90=88=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=20=E8=A8=AD=E5=AE=9A=E9=A0=85=E7=9B=AEssl=5Fcapath?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- conf/conf_user_def.inc.php | 15 +++++++++------ lib/ThreadRead.php | 8 ++++++++ lib/auth2chapi.inc.php | 7 +++++++ lib/login2ch.inc.php | 7 +++++++ rep2/edit_conf_user.php | 7 ++++--- 6 files changed, 36 insertions(+), 10 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 180943746..f0d91e866 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150330.1220', // rep2�̃o�[�W���� + 'p2version' => '150401.2321', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index 7df8aacdf..9333c77f4 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -40,7 +40,7 @@ // {{{ PATH // �E�������ɍŏ��ɕ\�������y�[�W�B�I�����C��URL���B -$conf_user_def['first_page'] = "first_cont.php"; // ("first_cont.php") +$conf_user_def['first_page'] = "first_cont.php"; // ("first_cont.php") /* �ƒ��X�g�̓I�����C���ƃ��[�J���̗�������ǂݍ��߂� @@ -92,7 +92,7 @@ // �•\���̃X���b�h�ꗗ�ł̃f�t�H���g�̃\�[�g�w�� $conf_user_def['sb_sort_ita'] = 'ikioi'; // ('ikioi') $conf_user_sel['sb_sort_ita'] = array( - 'midoku' => '�V��', 'res' => '���X', 'no' => 'No.', 'title' => '�^�C�g��', // 'spd' => '���΂₳', + 'midoku' => '�V��', 'res' => '���X', 'no' => 'No.', 'title' => '�^�C�g��', // 'spd' => '���΂₳', 'ikioi' => '����', 'bd' => 'Birthday'); // , 'fav' => '���C�ɃX��' // �V���\�[�g�ł́u�����Ȃ��v�́u�V�����[���v�ɑ΂���\�[�g�D�揇�� (���:0.1, ����:0, ����:-0.1) @@ -465,7 +465,7 @@ // �O��URL�W�����v����ۂɒʂ��Q�[�g // �u���ځv�ł�Cookie���g���Ȃ��[���ł� gate.php ��ʂ� -$conf_user_def['through_ime'] = "exm"; // ("exm") +$conf_user_def['through_ime'] = "exm"; // ("exm") $conf_user_sel['through_ime'] = array( '' => '����', 'p2' => 'p2 ime (�����]��)', @@ -483,7 +483,7 @@ $conf_user_rad['through_ime_http_only'] = array('1' => 'HTTPS�ł͒�', '0' => '��ɒʂ�'); // �Q�[�g�Ŏ����]�����Ȃ��g���q�i�J���}��؂�ŁA�g���q�̑O�̃s���I�h�͕s�v�j -$conf_user_def['ime_manual_ext'] = "exe,zip"; // ("exe,zip") +$conf_user_def['ime_manual_ext'] = "exe,zip"; // ("exe,zip") // ���C�ɃX�����L�ɎQ���i����:1, ���Ȃ�:0�j $conf_user_def['join_favrank'] = 0; // (0) @@ -521,7 +521,7 @@ $conf_user_def['brocra_checker_query'] = ""; // ("") // �g�щ{�����A�p�P�b�g�ʂ����炷���߁A�S�p�p���E�J�i�E�X�y�[�X�𔼊p�ɕϊ� (����:1, ���Ȃ�:0) -$conf_user_def['mobile.save_packet'] = 1; // (1) +$conf_user_def['mobile.save_packet'] = 1; // (1) $conf_user_rad['mobile.save_packet'] = array('1' => '����', '0' => '���Ȃ�'); // �v���L�V�𗘗p(����:1, ���Ȃ�:0) @@ -547,7 +547,7 @@ $conf_user_def['frame_subject_width'] = "40%"; // ("40%") // �t���[���E�� �X���{�� �̕\���� -$conf_user_def['frame_read_width'] = "60%"; // ("40%") +$conf_user_def['frame_read_width'] = "60%"; // ("60%") // 3�y�C����ʂ̃t���[���̕��ו� $conf_user_def['pane_mode'] = 0; // (0) @@ -557,6 +557,9 @@ $conf_user_def['ssl_function'] = "socket"; // (socket) $conf_user_sel['ssl_function'] = array('socket' => 'OpenSSL', 'curl' => 'cURL'); +// SSL�ʐM�̐ڑ�������؂��邽�߂Ɏg�p����ؖ������i�[���ꂽ�f�B���N�g�� �����؂ł��Ȃ����̂ݎw�� +$conf_user_def['ssl_capath'] = ""; // () + // }}} // {{{ �g���p�b�N��iPhone diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 3d7e7080d..c8b2b8f2d 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -172,6 +172,14 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { try { $req = new HTTP_Request2 ($url, HTTP_Request2::METHOD_POST); + + $req->setAdapter($_conf['ssl_function']); + + if($_conf['ssl_capath']) + { + $req->setConfig ('ssl_capath', $_conf['ssl_capath']); + } + // �w�b�_ $req->setHeader ('User-Agent', $ReadUA); $req->setHeader ('Accept-Encoding', "gzip, deflate"); diff --git a/lib/auth2chapi.inc.php b/lib/auth2chapi.inc.php index 3e0d86916..740ee9dec 100644 --- a/lib/auth2chapi.inc.php +++ b/lib/auth2chapi.inc.php @@ -38,7 +38,14 @@ function authenticate_2chapi() $req = new HTTP_Request2($url,HTTP_Request2::METHOD_POST); $req->setHeader('User-Agent', $AuthUA); $req->setHeader('X-2ch-UA', $AppName); + $req->setAdapter($_conf['ssl_function']); + + if($_conf['ssl_capath']) + { + $req->setConfig ('ssl_capath', $_conf['ssl_capath']); + } + // �v���L�V if ($_conf['proxy_use']) { $req->setConfig (array ( diff --git a/lib/login2ch.inc.php b/lib/login2ch.inc.php index 92606e86d..b1cf64fcf 100644 --- a/lib/login2ch.inc.php +++ b/lib/login2ch.inc.php @@ -41,7 +41,14 @@ function login2ch() $req = new HTTP_Request2($auth2ch_url,HTTP_Request2::METHOD_POST); $req->setHeader('User-Agent', $dolib2ch); $req->setHeader('X-2ch-UA', $x_2ch_ua); + $req->setAdapter($_conf['ssl_function']); + + if($_conf['ssl_capath']) + { + $req->setConfig ('ssl_capath', $_conf['ssl_capath']); + } + // �v���L�V if ($_conf['proxy_use']) { $req->setConfig (array ( diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index da8df807c..b75eb9f74 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -433,13 +433,14 @@ array('menu_refresh_time', '�ƒ��j���[�����̎����X�V�Ԋu (���w��B0�Ȃ玩���X�V���Ȃ�)'), array('menu_hide_brds', '�ƒJ�e�S���ꗗ��‚�����Ԃɂ���'), '�v���L�V', - array('proxy_use', '�v���L�V�𗘗p'), + array('proxy_use', '�v���L�V�𗘗p'), array('proxy_host', '�v���L�V�z�X�g ex)"127.0.0.1", "p2proxy.example"'), array('proxy_port', '�v���L�V�|�[�g ex)"8080"'), - array('proxy_user', '�v���L�V���[�U�[�� (�g�p����ꍇ�̂�)'), + array('proxy_user', '�v���L�V���[�U�[�� (�g�p����ꍇ�̂�)'), array('proxy_password', '�v���L�V�p�X���[�h (�g�p����ꍇ�̂�)'), '�ʐM�ݒ�', array('ssl_function', 'SSL�ʐM(�����O�C����)�Ɏg�p����֐�<br>(�֐��ɊY������g�����C���X�g�[������K�v������)'), + array('ssl_capath', 'SSL�ʐM�Őڑ�������؂��邽�߂̏ؖ���������f�B���N�g�� ex)"/etc/ssl/certs"<br>�ݒ�Ȃ��ē����ꍇ�͐ݒ�s�v<br>ssl_function�ɑΉ������`���̏ؖ������K�v'), ); printEditConfGroupHtml($groupname, $conflist, $flags); } @@ -1050,7 +1051,7 @@ function applyRules() } } -// }}} +// }}} // {{{ �t�B���^�֐� // emptyToDef() �Ȃǂ̃t�B���^��EditConfFiter�N���X�Ȃǂɂ܂Ƃ߂�\�� // {{{ emptyToDef() From 7f22f65ff0a201079291f55c76ea1f3e9c66dbd9 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Wed, 1 Apr 2015 23:43:06 +0900 Subject: [PATCH 103/339] =?UTF-8?q?dig.2ch.net=E3=81=AB=E9=80=81=E3=82=8B?= =?UTF-8?q?=E3=83=98=E3=83=83=E3=83=80=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/dig2ch.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rep2/dig2ch.php b/rep2/dig2ch.php index f48ae6ca2..2649cda26 100644 --- a/rep2/dig2ch.php +++ b/rep2/dig2ch.php @@ -13,7 +13,8 @@ function dig2chsearch($query) try { $req = new HTTP_Request2($url, HTTP_Request2::METHOD_GET); - $req->setHeader('User-Agent', 'Mozilla/5.0 (Windows NT 6.4; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko'); + $req->setHeader('User-Agent', $_SERVER['HTTP_USER_AGENT']); + $req->setHeader('Acecpt-Language', 'ja'); $req->setConfig(array( 'connect_timeout' => $_conf['http_conn_timeout'], From bdb264f4cc9301cdee9b7a663107fd0d7181f0ab Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Wed, 1 Apr 2015 23:59:19 +0900 Subject: [PATCH 104/339] =?UTF-8?q?HttpRequest=E3=82=92=E8=AA=8D=E8=A8=BC?= =?UTF-8?q?=E3=83=97=E3=83=AD=E3=82=AD=E3=82=B7=E3=81=AB=E5=AF=BE=E5=BF=9C?= =?UTF-8?q?=E3=81=95=E3=81=9B=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2HttpExt.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/P2HttpExt.php b/lib/P2HttpExt.php index 1ac35f065..e101ecc8b 100644 --- a/lib/P2HttpExt.php +++ b/lib/P2HttpExt.php @@ -258,6 +258,12 @@ public function __construct($url, } elseif (strpos($_conf['proxy_host'], ':') === false) { $options['proxyport'] = 80; } + + if ($_conf['proxy_user'] && $_conf['proxy_password']) + { + $options['proxy_auth'] = sprintf('%s:%s', $_conf['proxy_user'], $_conf['proxy_password']); + $options['proxyauthtype'] = HTTP_AUTH_BASIC; + } /* $options['proxytype'] = HTTP_PROXY_HTTP; if (isset($_conf['proxy_type'])) { From 2fd5af6f509f6d44e53e53a1d50811a13b6eba3b Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 2 Apr 2015 00:34:05 +0900 Subject: [PATCH 105/339] v150401.2321 --- doc/README-774.txt | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/doc/README-774.txt b/doc/README-774.txt index 8674088d1..ad331c03b 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -36,11 +36,26 @@ rep2-expack test https://github.com/orzisun/p2-php �{��p2�Ɠ������AX11���C�Z���X�ł��B ��ChangeLog +150401.2321 +�E�F�ؕt�v���L�V�ɑΉ��iBASIC�F�؂̂݁j +�ESSL�ʐM��openSSL��cURL��؂�ւ��邱�Ƃ��o����ݒ��lj� +�Edig.2ch.net�ɑ���w�b�_��ύX +�E2ch�Ƃ̒ʐM��HTTP_Request2�ɕύX + +150328.2132 +�Edig2ch�̎I�Ɍy���ȕs������������Ƃ��̑΍���u���� +�Edig2ch�Ō������ʂ̔ԍ���1����\�������悤�ɏC�� +�Edig2ch��json�G���[������ύX +�Edig2ch���v���L�V�ݒ�(proxy_use)�ɑΉ����Ă��Ȃ��s����C�� +�Edig2ch�Łu�‚ōi�荞�ށv�ɑΉ����� +�E�u�����[�h���|�b�v�A�b�v�ɂ������悤�ɕύX +�E���X���|�b�v�A�b�v(quote_res_view)�������ȂƂ��Ɏ������[�h��ID�F�Â�(coloredid)�������Ȃ��s����C�� + 150320.1020 �E�|�b�v�A�b�v���珑�����ݐ���������ɃX�����ēǂݍ��݂��Ȃ��ݒ��lj� �E�������[�h����̏������݂�Cookie�m�F�����������ꍇ�������[�h�ɖ߂�Ȃ��s����C�� �E�����e�i���X�������コ���邽��live_ShowThreadPc.php��live_ShowThread.php�̑���� -live_ShowThreadLive.php�Ɩ{�̂�ShowThread.php���g�p����悤�ɕύX +�Elive_ShowThreadLive.php�Ɩ{�̂�ShowThread.php���g�p����悤�ɕύX �E�������ۑ�(expack.editor.savedraft)�������ȂƂ��Ɏ������[�h���珑�����߂Ȃ��s����C�� �E�X���^�C������Warning���o��s����C�� From 3e8d2ee1e17198fd26f2f0b1b83c2be5746ee85a Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 2 Apr 2015 13:00:36 +0900 Subject: [PATCH 106/339] =?UTF-8?q?ssl=5Ffunction=E3=81=AE=E3=83=87?= =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=AB=E3=83=88=E8=A8=AD=E5=AE=9A=E3=82=92?= =?UTF-8?q?cURL=E3=81=AB=E5=A4=89=E6=9B=B4=20new=20HTTP=5FRequest2?= =?UTF-8?q?=E3=82=92=E5=85=B1=E9=80=9A=E5=8C=96=E3=81=97=E3=81=A6SSL?= =?UTF-8?q?=E9=80=9A=E4=BF=A1=E4=BB=A5=E5=A4=96=E3=81=A7=E3=82=82SSL?= =?UTF-8?q?=E3=81=AE=E8=A8=AD=E5=AE=9A=E3=81=8C=E5=8F=8D=E6=98=A0=E3=81=95?= =?UTF-8?q?=E3=82=8C=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=20=E4=B8=8A=E8=A8=98=E5=A4=89=E6=9B=B4=E3=81=AE=E3=81=9F?= =?UTF-8?q?=E3=82=81cURL=E5=BF=85=E9=A0=88=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf_user_def.inc.php | 2 +- conf/setup_info.php | 1 + lib/P2Util.php | 109 +++++++++++++++++++----------------- lib/SettingTxt.php | 17 +----- lib/SubjectTxt.php | 17 +----- lib/ThreadRead.php | 110 +++---------------------------------- lib/auth2chapi.inc.php | 19 +------ lib/login2ch.inc.php | 21 ++----- lib/wiki/P2UtilWiki.php | 12 +--- rep2/dig2ch.php | 16 +----- rep2/post.php | 18 +----- 11 files changed, 79 insertions(+), 263 deletions(-) diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index 9333c77f4..e1ddfbee2 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -554,7 +554,7 @@ $conf_user_rad['pane_mode'] = array('0' => '�W���i�Ɍ`�j', '1' => '�����i��`�j'); // SSL�ʐM(�����O�C����)�Ɏg�p����֐� ���Y������g�����C���X�g�[������K�v������ -$conf_user_def['ssl_function'] = "socket"; // (socket) +$conf_user_def['ssl_function'] = "curl"; // (socket) $conf_user_sel['ssl_function'] = array('socket' => 'OpenSSL', 'curl' => 'cURL'); // SSL�ʐM�̐ڑ�������؂��邽�߂Ɏg�p����ؖ������i�[���ꂽ�f�B���N�g�� �����؂ł��Ȃ����̂ݎw�� diff --git a/conf/setup_info.php b/conf/setup_info.php index 5b0340329..96d379355 100644 --- a/conf/setup_info.php +++ b/conf/setup_info.php @@ -9,6 +9,7 @@ // �K�{�g�����W���[�� $p2_required_extensions = array( + 'curl', 'dom', 'json', 'libxml', diff --git a/lib/P2Util.php b/lib/P2Util.php index 345d91262..5596ae0b8 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -263,26 +263,11 @@ static public function fileDownload($url, $localfile, try { // DL - $req = new HTTP_Request2($url, HTTP_Request2::METHOD_GET); + $req = self::getHTTPRequest2($url, HTTP_Request2::METHOD_GET); $purl = parse_url($url); // URL���� $req->setHeader('User-Agent', self::getP2UA(true,self::isHost2chs($purl['host']))); unset($purl); - $req->setConfig(array( - 'connect_timeout' => $_conf['http_conn_timeout'], - 'timeout' => $_conf['http_read_timeout'], - 'follow_redirects' => $trace_redirection, - )); - - if ($_conf['proxy_use']) { - $req->setConfig (array ( - 'proxy_host' => $_conf['proxy_host'], - 'proxy_port' => $_conf['proxy_port'], - 'proxy_user' => $_conf['proxy_user'], - 'proxy_password' => $_conf['proxy_password'] - )); - } - $response = $req->send(); $code = $response->getStatus(); @@ -299,10 +284,10 @@ static public function fileDownload($url, $localfile, if (isset($error_msg) && strlen($error_msg) > 0) { // �G���[���b�Z�[�W��ݒ� if ($disp_error) { - $url_t = P2Util::throughIme($url); + $url_t = self::throughIme($url); $info_msg_ht = "<p class=\"info-msg\">Error: {$error_msg}<br>"; $info_msg_ht .= "rep2 info: <a href=\"{$url_t}\"{$_conf['ext_win_target_at']}>{$url}</a> �ɐڑ��ł��܂���ł����B</p>"; - P2Util::pushInfoHtml($info_msg_ht); + self::pushInfoHtml($info_msg_ht); } return null; } @@ -1709,30 +1694,19 @@ static public function mkTrip2($key) */ static public function getWebPage($url, &$error_msg, $timeout = 15) { - $params = array("timeout" => $timeout); - - if (!empty($_conf['proxy_use'])) { - $params['proxy_host'] = $_conf['proxy_host']; - $params['proxy_port'] = $_conf['proxy_port']; - } - - $req = new HTTP_Request($url, $params); - //$req->addHeader("X-PHP-Version", phpversion()); + try { + $req = self::getHTTPRequest2($url, HTTP_Request2::METHOD_GET); + //$req->addHeader("X-PHP-Version", phpversion()); - $response = $req->sendRequest(); + $response = $req->send(); - if (PEAR::isError($response)) { - $error_msg = $response->getMessage(); - } else { - $code = $req->getResponseCode(); + $code = $response->getStatus(); if ($code == 200 || $code == 206) { // || $code == 304) { - return $req->getResponseBody(); - } else { - //var_dump($req->getResponseHeader()); - $error_msg = $code; + return $response->getBody(); } + } catch (Exception $e) { + return false; } - return false; } @@ -2194,7 +2168,7 @@ static public function getBe2chCodeWithUserConf() global $_conf; if ($_conf['be_2ch_mail'] && strlen($_conf['be_2ch_password'])) { - $r = P2Util::getBe2chCodeByMailPass($_conf['be_2ch_mail'], $_conf['be_2ch_password']); + $r = self::getBe2chCodeByMailPass($_conf['be_2ch_mail'], $_conf['be_2ch_password']); if (is_array($r)) { return $r; } @@ -2226,19 +2200,9 @@ static public function getBe2chCodeByMailPass($mail, $pass) } try { - $req = new HTTP_Request2('http://be.2ch.net/index.php', HTTP_Request2::METHOD_POST); - - $req->setHeader('User-Agent', P2Util::getP2UA(true,true)); - - // �v���L�V - if ($_conf['proxy_use']) { - $req->setConfig(array( - 'proxy_host' => $_conf['proxy_host'], - 'proxy_port' => $_conf['proxy_port'], - 'proxy_user' => $_conf['proxy_user'], - 'proxy_password' => $_conf['proxy_password'] - )); - } + $req = self::getHTTPRequest2 ('http://be.2ch.net/index.php', HTTP_Request2::METHOD_POST); + + $req->setHeader('User-Agent', self::getP2UA(true,true)); $req->addPostParameter('mail', $mail); $req->addPostParameter('pass', $pass); @@ -2270,6 +2234,49 @@ static public function getBe2chCodeByMailPass($mail, $pass) return false; // $error_msg } + // }}} + // {{{ getHTTPRequest2() + + /** + * HTTP_Request2�N���X�̃C���X�^���X�𐶐����� + * + * @param $url HTTP_Request2�Ɠ��� + * @param $method HTTP_Request2�Ɠ��� + * @return HTTP_Request2 + */ + static public function getHTTPRequest2($url , $method = HTTP_Request2::METHOD_GET) + { + global $_conf; + + $req = new HTTP_Request2($url, $method); + + // �^�C���A�E�g�̐ݒ� + $req->setConfig (array ( + 'connect_timeout' => $_conf['http_conn_timeout'], + 'timeout' => $_conf['http_read_timeout'], + )); + + // SSL�̐ݒ� + $req->setAdapter($_conf['ssl_function']); + + if($_conf['ssl_capath']) + { + $req->setConfig ('ssl_capath', $_conf['ssl_capath']); + } + + // �v���L�V + if ($_conf['proxy_use']) { + $req->setConfig (array ( + 'proxy_host' => $_conf['proxy_host'], + 'proxy_port' => $_conf['proxy_port'], + 'proxy_user' => $_conf['proxy_user'], + 'proxy_password' => $_conf['proxy_password'] + )); + } + + return $req; + } + // }}} // {{{ debug() /* diff --git a/lib/SettingTxt.php b/lib/SettingTxt.php index 94224ad6f..1a9d7466a 100644 --- a/lib/SettingTxt.php +++ b/lib/SettingTxt.php @@ -95,26 +95,11 @@ public function downloadSettingTxt() // DL try { - $req = new HTTP_Request2($this->_url, HTTP_Request2::METHOD_GET); + $req = P2Util::getHTTPRequest2($this->_url, HTTP_Request2::METHOD_GET); $modified && $req->setHeader("If-Modified-Since", $modified); // API���g�p����ݒ�ő��肪2ch��������API��UA�𑗂� $req->setHeader('User-Agent', P2Util::getP2UA(true,P2Util::isHost2chs($this->host))); - $req->setConfig (array ( - 'connect_timeout' => $_conf['http_conn_timeout'], - 'timeout' => $_conf['http_read_timeout'], - 'follow_redirects' => false - )); - - // �v���L�V - if ($_conf['proxy_use']) { - $req->setConfig (array ( - 'proxy_host' => $_conf['proxy_host'], - 'proxy_port' => $_conf['proxy_port'], - 'proxy_user' => $_conf['proxy_user'], - 'proxy_password' => $_conf['proxy_password'] - )); - } $response = $req->send(); diff --git a/lib/SubjectTxt.php b/lib/SubjectTxt.php index 1bb025d54..3b412d5fc 100644 --- a/lib/SubjectTxt.php +++ b/lib/SubjectTxt.php @@ -87,26 +87,11 @@ public function downloadSubject() // DL try { - $req = new HTTP_Request2($this->subject_url, HTTP_Request2::METHOD_GET); + $req = P2Util::getHTTPRequest2($this->subject_url, HTTP_Request2::METHOD_GET); $modified && $req->setHeader("If-Modified-Since", $modified); // API���g�p����ݒ�ő��肪2ch��������API��UA�𑗂� $req->setHeader('User-Agent', P2Util::getP2UA(true,P2Util::isHost2chs($this->host))); - $req->setConfig (array ( - 'connect_timeout' => $_conf['http_conn_timeout'], - 'timeout' => $_conf['http_read_timeout'], - 'follow_redirects' => false - )); - - // �v���L�V - if ($_conf['proxy_use']) { - $req->setConfig (array ( - 'proxy_host' => $_conf['proxy_host'], - 'proxy_port' => $_conf['proxy_port'], - 'proxy_user' => $_conf['proxy_user'], - 'proxy_password' => $_conf['proxy_password'] - )); - } $response = $req->send(); diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index c8b2b8f2d..7ece08944 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -171,14 +171,7 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { $purl = parse_url ($url); // URL���� try { - $req = new HTTP_Request2 ($url, HTTP_Request2::METHOD_POST); - - $req->setAdapter($_conf['ssl_function']); - - if($_conf['ssl_capath']) - { - $req->setConfig ('ssl_capath', $_conf['ssl_capath']); - } + $req = P2Util::getHTTPRequest2 ($url, HTTP_Request2::METHOD_POST); // �w�b�_ $req->setHeader ('User-Agent', $ReadUA); @@ -200,22 +193,6 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { $req->setAuth ($purl['user'], $purl['pass'], HTTP_Request2::AUTH_BASIC); } - $req->setConfig (array ( - 'connect_timeout' => $_conf['http_conn_timeout'], - 'timeout' => $_conf['http_read_timeout'], - 'follow_redirects' => false - )); - - // �v���L�V - if ($_conf['proxy_use']) { - $req->setConfig (array ( - 'proxy_host' => $_conf['proxy_host'], - 'proxy_port' => $_conf['proxy_port'], - 'proxy_user' => $_conf['proxy_user'], - 'proxy_password' => $_conf['proxy_password'] - )); - } - // POST������e $req->addPostParameter (array ( 'sid' => $sid, @@ -368,7 +345,7 @@ protected function _downloadDat2ch($from_bytes) { // $request .= "Accept-Encoding: gzip, deflate\r\n"; try { - $req = new HTTP_Request2 ($url, HTTP_Request2::METHOD_GET); + $req = P2Util::getHTTPRequest2 ($url, HTTP_Request2::METHOD_GET); // �w�b�_ $req->setHeader ('User-Agent', P2Util::getP2UA (true)); $req->setHeader ('Referer', "http://{$purl['host']}/{$this->bbs}/"); @@ -390,22 +367,6 @@ protected function _downloadDat2ch($from_bytes) { $req->setAuth ($purl['user'], $purl['pass'], HTTP_Request2::AUTH_BASIC); } - $req->setConfig (array ( - 'connect_timeout' => $_conf['http_conn_timeout'], - 'timeout' => $_conf['http_read_timeout'], - 'follow_redirects' => false - )); - - // �v���L�V - if ($_conf['proxy_use']) { - $req->setConfig (array ( - 'proxy_host' => $_conf['proxy_host'], - 'proxy_port' => $_conf['proxy_port'], - 'proxy_user' => $_conf['proxy_user'], - 'proxy_password' => $_conf['proxy_password'] - )); - } - // Request�̑��M $response = $req->send (); @@ -551,27 +512,11 @@ protected function _downloadDat2chMaru($uaMona, $SID2ch, $shirokuma = false) { $purl = parse_url ($url); // URL���� try { - $req = new HTTP_Request2 ($url, HTTP_Request2::METHOD_GET); + $req = P2Util::getHTTPRequest2 ($url, HTTP_Request2::METHOD_GET); // �w�b�_ $req->setHeader ('User-Agent', "{$uaMona} ({$_conf['p2ua']})"); $req->setHeader ('Accept-Encoding', "gzip, deflate"); - $req->setConfig (array ( - 'connect_timeout' => $_conf['http_conn_timeout'], - 'timeout' => $_conf['http_read_timeout'], - 'follow_redirects' => false - )); - - // �v���L�V - if ($_conf['proxy_use']) { - $req->setConfig (array ( - 'proxy_host' => $_conf['proxy_host'], - 'proxy_port' => $_conf['proxy_port'], - 'proxy_user' => $_conf['proxy_user'], - 'proxy_password' => $_conf['proxy_password'] - )); - } - // Request�̑��M $response = $req->send (); @@ -656,27 +601,12 @@ protected function _downloadDat2chKako($uri, $ext) { $purl = parse_url ($url); // URL���� try { - $req = new HTTP_Request2 ($url, HTTP_Request2::METHOD_GET); + $req = P2Util::getHTTPRequest2 ($url, HTTP_Request2::METHOD_GET); + // �w�b�_ $req->setHeader ('User-Agent', P2Util::getP2UA(true)); $req->setHeader ('Accept-Encoding', "gzip, deflate"); - $req->setConfig (array ( - 'connect_timeout' => $_conf['http_conn_timeout'], - 'timeout' => $_conf['http_read_timeout'], - 'follow_redirects' => false - )); - - // �v���L�V - if ($_conf['proxy_use']) { - $req->setConfig (array ( - 'proxy_host' => $_conf['proxy_host'], - 'proxy_port' => $_conf['proxy_port'], - 'proxy_user' => $_conf['proxy_user'], - 'proxy_password' => $_conf['proxy_password'] - )); - } - // Request�̑��M $response = $req->send (); @@ -768,27 +698,11 @@ public function get2chDatError($code = null) { $read_response_html = ''; if (! $reason) { try { - $req = new HTTP_Request2 ($read_url, HTTP_Request2::METHOD_GET); + $req = P2Util::getHTTPRequest2 ($read_url, HTTP_Request2::METHOD_GET); // �w�b�_ $req->setHeader ('User-Agent', P2Util::getP2UA(false,P2Util::isHost2chs($this->host))); // �����́A"Monazilla/" ���‚����NG $req->setHeader ('Accept-Encoding', "gzip, deflate"); - $req->setConfig (array ( - 'connect_timeout' => $_conf['http_conn_timeout'], - 'timeout' => $_conf['http_read_timeout'], - 'follow_redirects' => false - )); - - // �v���L�V - if ($_conf['proxy_use']) { - $req->setConfig (array ( - 'proxy_host' => $_conf['proxy_host'], - 'proxy_port' => $_conf['proxy_port'], - 'proxy_user' => $_conf['proxy_user'], - 'proxy_password' => $_conf['proxy_password'] - )); - } - // Request�̑��M $response = $req->send (); @@ -1513,17 +1427,7 @@ private function _get2ch203Body() { */ try { $url = "http://{$this->host}/{$this->bbs}/dat/{$this->key}.dat"; - $req = new HTTP_Request2 ($url,HTTP_Request2::METHOD_GET); - - // �v���L�V - if ($_conf['proxy_use']) { - $req->setConfig (array ( - 'proxy_host' => $_conf['proxy_host'], - 'proxy_port' => $_conf['proxy_port'], - 'proxy_user' => $_conf['proxy_user'], - 'proxy_password' => $_conf['proxy_password'] - )); - } + $req = P2Util::getHTTPRequest2 ($url,HTTP_Request2::METHOD_GET); $res = $req->send (); diff --git a/lib/auth2chapi.inc.php b/lib/auth2chapi.inc.php index 740ee9dec..030c0f2cb 100644 --- a/lib/auth2chapi.inc.php +++ b/lib/auth2chapi.inc.php @@ -35,26 +35,11 @@ function authenticate_2chapi() } try { - $req = new HTTP_Request2($url,HTTP_Request2::METHOD_POST); + $req = P2Util::getHTTPRequest2($url,HTTP_Request2::METHOD_POST); + $req->setHeader('User-Agent', $AuthUA); $req->setHeader('X-2ch-UA', $AppName); - $req->setAdapter($_conf['ssl_function']); - - if($_conf['ssl_capath']) - { - $req->setConfig ('ssl_capath', $_conf['ssl_capath']); - } - - // �v���L�V - if ($_conf['proxy_use']) { - $req->setConfig (array ( - 'proxy_host' => $_conf['proxy_host'], - 'proxy_port' => $_conf['proxy_port'], - 'proxy_user' => $_conf['proxy_user'], - 'proxy_password' => $_conf['proxy_password'] - )); - } $req->addPostParameter('ID', $login2chID); $req->addPostParameter('PW', $login2chPW); $req->addPostParameter('KY', $AppKey); diff --git a/lib/login2ch.inc.php b/lib/login2ch.inc.php index b1cf64fcf..5bcd50d37 100644 --- a/lib/login2ch.inc.php +++ b/lib/login2ch.inc.php @@ -38,26 +38,13 @@ function login2ch() } try { - $req = new HTTP_Request2($auth2ch_url,HTTP_Request2::METHOD_POST); + $req = P2Util::getHTTPRequest2($auth2ch_url,HTTP_Request2::METHOD_POST); + + // �w�b�_�[ $req->setHeader('User-Agent', $dolib2ch); $req->setHeader('X-2ch-UA', $x_2ch_ua); - $req->setAdapter($_conf['ssl_function']); - - if($_conf['ssl_capath']) - { - $req->setConfig ('ssl_capath', $_conf['ssl_capath']); - } - - // �v���L�V - if ($_conf['proxy_use']) { - $req->setConfig (array ( - 'proxy_host' => $_conf['proxy_host'], - 'proxy_port' => $_conf['proxy_port'], - 'proxy_user' => $_conf['proxy_user'], - 'proxy_password' => $_conf['proxy_password'] - )); - } + // POST�f�[�^ $req->addPostParameter('ID', $login2chID); $req->addPostParameter('PW', $login2chPW); diff --git a/lib/wiki/P2UtilWiki.php b/lib/wiki/P2UtilWiki.php index 86f867b66..52d31c5ad 100644 --- a/lib/wiki/P2UtilWiki.php +++ b/lib/wiki/P2UtilWiki.php @@ -40,20 +40,10 @@ public static function isUrlImepita($url) public static function getResponseCode($url) { try { - $req = new HTTP_Request2($url, HTTP_Request2::METHOD_HEAD); + $req = P2Util::getHTTPRequest2 ($url, HTTP_Request2::METHOD_HEAD); $req->setHeader('User-Agent', 'Monazilla/1.00'); - // �v���L�V - if ($_conf['proxy_use']) { - $req->setConfig(array( - 'proxy_host' => $_conf['proxy_host'], - 'proxy_port' => $_conf['proxy_port'], - 'proxy_user' => $_conf['proxy_user'], - 'proxy_password' => $_conf['proxy_password'] - )); - } - return $response->getStatus(); } catch (Exception $e) { diff --git a/rep2/dig2ch.php b/rep2/dig2ch.php index 2649cda26..9747d8828 100644 --- a/rep2/dig2ch.php +++ b/rep2/dig2ch.php @@ -12,24 +12,10 @@ function dig2chsearch($query) $url = $_conf['test.dig2ch_url'] . '?AndOr=' . $query_arry['AndOr'] . '&maxResult=' . $query_arry['maxResult'] . '&atLeast=1&Sort=' . $query_arry['Sort'] . '&Link=1&Bbs=all&924=' . $query_arry['924'] . '&json=1&keywords=' . $query_arry['q']; try { - $req = new HTTP_Request2($url, HTTP_Request2::METHOD_GET); + $req = P2Util::getHTTPRequest2 ($url, HTTP_Request2::METHOD_GET); $req->setHeader('User-Agent', $_SERVER['HTTP_USER_AGENT']); $req->setHeader('Acecpt-Language', 'ja'); - $req->setConfig(array( - 'connect_timeout' => $_conf['http_conn_timeout'], - 'timeout' => $_conf['http_read_timeout'], - )); - - if ($_conf['proxy_use']) { - $req->setConfig (array ( - 'proxy_host' => $_conf['proxy_host'], - 'proxy_port' => $_conf['proxy_port'], - 'proxy_user' => $_conf['proxy_user'], - 'proxy_password' => $_conf['proxy_password'] - )); - } - $response = $req->send(); $code = $response->getStatus(); diff --git a/rep2/post.php b/rep2/post.php index 35f98cb97..55246b821 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -381,25 +381,11 @@ function postIt($host, $bbs, $key, $post) $bbs_cgi_url = 'http://' . $host . $bbs_cgi; try { - $req = new HTTP_Request2($bbs_cgi_url,HTTP_Request2::METHOD_POST); + $req = P2Util::getHTTPRequest2 ($bbs_cgi_url,HTTP_Request2::METHOD_POST); + // �w�b�_ $req->setHeader('User-Agent', P2Util::getP2UA(true,P2Util::isHost2chs($host))); $req->setHeader('Referer', "http://{$host}/{$bbs}/{$key}/"); - $req->setConfig(array( - 'connect_timeout' => $_conf['http_conn_timeout'], - 'timeout' => $_conf['http_read_timeout'], - //'follow_redirects' => true, - )); - - // �v���L�V - if ($_conf['proxy_use']) { - $req->setConfig(array( - 'proxy_host' => $_conf['proxy_host'], - 'proxy_port' => $_conf['proxy_port'], - 'proxy_user' => $_conf['proxy_user'], - 'proxy_password' => $_conf['proxy_password'] - )); - } // �N�b�L�[ if ($p2cookies) { From 7084915b9f205c9f98ca0d27ea6bbe0944426bb4 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 2 Apr 2015 13:44:07 +0900 Subject: [PATCH 107/339] =?UTF-8?q?=E6=8E=A5=E7=B6=9A=E5=85=88=E3=81=8C2ch?= =?UTF-8?q?.net=E3=81=AA=E3=82=89=E3=81=B0SSL=E9=80=9A=E4=BF=A1=E3=82=92?= =?UTF-8?q?=E8=A1=8C=E3=81=86=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= =?UTF-8?q?(pink=E3=81=AF=E5=AF=BE=E5=BF=9C=E3=81=97=E3=81=A6=E3=81=84?= =?UTF-8?q?=E3=81=AA=E3=81=84=E3=81=AE=E3=81=A7=E3=81=97=E3=81=AA=E3=81=84?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/SettingTxt.php | 7 ++++++- lib/SubjectTxt.php | 12 ++++++++++-- rep2/post.php | 7 ++++++- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/lib/SettingTxt.php b/lib/SettingTxt.php index 1a9d7466a..ce6b95975 100644 --- a/lib/SettingTxt.php +++ b/lib/SettingTxt.php @@ -37,7 +37,12 @@ public function __construct($host, $bbs) $this->_setting_txt = $dat_host_bbs_dir_s . 'SETTING.TXT'; $this->_setting_srd = $dat_host_bbs_dir_s . 'p2_kb_setting.srd'; - $this->_url = 'http://' . $host . '/' . $bbs . '/SETTING.TXT'; + // �ڑ��悪2ch.net�Ȃ��SSL�ʐM���s��(pink�͑Ή����Ă��Ȃ��̂ł��Ȃ�) + if (P2Util::isHost2chs($host) && ! P2Util::isHostBbsPink($host)) { + $this->_url = 'https://' . $host . '/' . $bbs . '/SETTING.TXT'; + } else { + $this->_url = 'http://' . $host . '/' . $bbs . '/SETTING.TXT'; + } //$this->_url = P2Util::adjustHostJbbs($this->_url); // ������΂�livedoor�ړ]�ɑΉ��B�Ǎ����livedoor�Ƃ���B $this->setting_array = array(); diff --git a/lib/SubjectTxt.php b/lib/SubjectTxt.php index 3b412d5fc..995fde7e1 100644 --- a/lib/SubjectTxt.php +++ b/lib/SubjectTxt.php @@ -29,10 +29,18 @@ public function __construct($host, $bbs) $this->storage = 'file'; $this->subject_file = P2Util::datDirOfHostBbs($host, $bbs) . 'subject.txt'; - $this->subject_url = 'http://' . $host . '/' . $bbs . '/subject.txt'; + // �ڑ��悪2ch.net�Ȃ��SSL�ʐM���s��(pink�͑Ή����Ă��Ȃ��̂ł��Ȃ�) + if (P2Util::isHost2chs($host) && ! P2Util::isHostBbsPink($host)) { + $this->subject_url = 'https://' . $host . '/' . $bbs . '/subject.txt'; + } else { + $this->subject_url = 'http://' . $host . '/' . $bbs . '/subject.txt'; + } // ������΂�livedoor�ړ]�ɑΉ��B�Ǎ����livedoor�Ƃ���B - $this->subject_url = P2Util::adjustHostJbbs($this->subject_url); + if(P2Util::isHostJbbsShitaraba($host)) + { + $this->subject_url = P2Util::adjustHostJbbs($this->subject_url); + } // subject.txt���_�E�����[�h���Z�b�g���� $this->dlAndSetSubject(); diff --git a/rep2/post.php b/rep2/post.php index 55246b821..71809c1ee 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -378,7 +378,12 @@ function postIt($host, $bbs, $key, $post) global $_conf, $post_result, $post_error2ch, $p2cookies, $popup, $rescount, $ttitle_en; global $bbs_cgi; - $bbs_cgi_url = 'http://' . $host . $bbs_cgi; + // �ڑ��悪2ch.net�Ȃ��SSL�ʐM���s��(pink�͑Ή����Ă��Ȃ��̂ł��Ȃ�) + if (P2Util::isHost2chs($host) && ! P2Util::isHostBbsPink($host)) { + $bbs_cgi_url = 'https://' . $host . $bbs_cgi; + } else { + $bbs_cgi_url = 'http://' . $host . $bbs_cgi; + } try { $req = P2Util::getHTTPRequest2 ($bbs_cgi_url,HTTP_Request2::METHOD_POST); From bc8fbdee868e2ef32e872a0b45481dacdfe862e5 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 2 Apr 2015 14:07:44 +0900 Subject: [PATCH 108/339] v150402.1350 --- conf/conf.inc.php | 2 +- doc/README-774.txt | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index f0d91e866..36c180d3c 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150401.2321', // rep2�̃o�[�W���� + 'p2version' => '150402.1350', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/doc/README-774.txt b/doc/README-774.txt index ad331c03b..8e789d442 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -36,6 +36,12 @@ rep2-expack test https://github.com/orzisun/p2-php �{��p2�Ɠ������AX11���C�Z���X�ł��B ��ChangeLog +150402.1350 +�E�ڑ��悪2ch.net�Ȃ��SSL�ʐM���s���悤�ɕύX(pink��be���O�C���F�؂͑Ή����Ă��Ȃ��̂ł��Ȃ�) +�Essl_function�̃f�t�H���g�ݒ��cURL�ɕύX +�ESSL�ʐM�ȊO�ł�SSL�̐ݒ肪���f�����悤�ɕύX +�E��L�ύX�̂���cURL�K�{�ɕύX + 150401.2321 �E�F�ؕt�v���L�V�ɑΉ��iBASIC�F�؂̂݁j �ESSL�ʐM��openSSL��cURL��؂�ւ��邱�Ƃ��o����ݒ��lj� From d8b870508aa4a8f88046cdf583cc799831c612c6 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 3 Apr 2015 00:57:12 +0900 Subject: [PATCH 109/339] =?UTF-8?q?http://page2.skr.jp/rep2/=20=E3=81=8C?= =?UTF-8?q?=E6=B6=88=E6=BB=85=E3=81=97=E3=81=A6=E3=81=97=E3=81=BE=E3=81=A3?= =?UTF-8?q?=E3=81=9F=E3=81=AE=E3=81=A7gate.php=E3=81=AE=E4=BB=A3=E6=9B=BF?= =?UTF-8?q?=E3=82=92=E4=BD=9C=E6=88=90=E3=81=97=E3=81=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 8 ++++---- rep2/title.php | 9 +++++++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 36c180d3c..d1554ef84 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -75,12 +75,12 @@ function p2_init() $_conf['p2web_url'] = 'http://akid.s17.xrea.com/'; $_conf['p2ime_url'] = 'http://akid.s17.xrea.com/p2ime.php'; $_conf['favrank_url'] = 'http://akid.s17.xrea.com/favrank/favrank.php'; - $_conf['expack.web_url'] = 'http://page2.skr.jp/rep2/'; - $_conf['expack.download_url'] = 'http://page2.skr.jp/rep2/downloads.html'; - $_conf['expack.history_url'] = 'http://page2.skr.jp/rep2/history.html'; + $_conf['expack.web_url'] = 'http://2ch774.github.io/p2-php/'; + $_conf['expack.download_url'] = 'https://github.com/2ch774/p2-php/releases'; + $_conf['expack.history_url'] = 'https://github.com/2ch774/p2-php/blob/master/doc/ChangeLog.txt'; $_conf['expack.tgrep_url'] = 'http://page2.xrea.jp/tgrep/search'; $_conf['test.dig2ch_url'] = 'http://dig.2ch.net/'; - $_conf['expack.gate_php'] = 'http://page2.skr.jp/gate.php'; + $_conf['expack.gate_php'] = 'http://2ch774.github.io/p2-php/gate.html'; $_conf['menu_php'] = 'menu.php'; $_conf['subject_php'] = 'subject.php'; $_conf['read_php'] = 'read.php'; diff --git a/rep2/title.php b/rep2/title.php index c9bddb914..fdff4a7ed 100644 --- a/rep2/title.php +++ b/rep2/title.php @@ -20,6 +20,10 @@ $expack_dl_url_r = P2Util::throughIme($_conf['expack.download_url']); $expack_hist_url_r = P2Util::throughIme($_conf['expack.history_url']); +// rsk����̃T�C�g�ւ̃����N��\�����邽�� by 2ch774 +$rsk_expack_url = "http://rsky.github.io/p2-php/"; +$rsk_expack_url_r = P2Util::throughIme($rsk_expack_url); + // {{{ �f�[�^�ۑ��f�B���N�g���̃p�[�~�b�V�����̒��ӂ����N���� P2Util::checkDirWritable($_conf['dat_dir']); @@ -54,9 +58,9 @@ //========================================================= // �ŐV�Ń`�F�b�N $newversion_found = ''; -/*if (!empty($_conf['updatan_haahaa'])) { +if (!empty($_conf['updatan_haahaa'])) { $newversion_found = checkUpdatan(); -}*/ +} // ���O�C�����[�U��� $htm['auth_user'] = "<p>���O�C�����[�U: {$_login->user_u} - " . date("Y/m/d (D) G:i") . "</p>\n"; @@ -173,6 +177,7 @@ </td><td style="padding-left:30px;"> <p>{$_conf['p2name']} ver.{$_conf['p2version']} +live<br> <a href="{$expack_url_r}"{$_conf['ext_win_target_at']}>{$_conf['expack.web_url']}</a><br> + <a href="{$rsk_expack_url_r}"{$_conf['ext_win_target_at']}>{$rsk_expack_url}</a><br> <a href="{$p2web_url_r}"{$_conf['ext_win_target_at']}>{$_conf['p2web_url']}</a></p> <ul> <li><a href="viewtxt.php?file=doc/README.txt">README.txt</a></li> From 9ab35292b76d427d6e50f1e6f2b590e01ae87215 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 3 Apr 2015 22:10:38 +0900 Subject: [PATCH 110/339] =?UTF-8?q?2ch=E3=81=A8=E3=81=AESSL=E9=80=9A?= =?UTF-8?q?=E4=BF=A1=E3=82=92API=E4=BD=BF=E7=94=A8=E6=99=82=E3=81=AE?= =?UTF-8?q?=E3=81=BF=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/SettingTxt.php | 3 ++- lib/SubjectTxt.php | 3 ++- rep2/post.php | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/SettingTxt.php b/lib/SettingTxt.php index ce6b95975..a3c6558e6 100644 --- a/lib/SettingTxt.php +++ b/lib/SettingTxt.php @@ -28,6 +28,7 @@ class SettingTxt */ public function __construct($host, $bbs) { + global $_conf; $this->_cache_interval = 60 * 60 * 12; // �L���b�V����12���ԗL�� $this->_host = $host; @@ -38,7 +39,7 @@ public function __construct($host, $bbs) $this->_setting_srd = $dat_host_bbs_dir_s . 'p2_kb_setting.srd'; // �ڑ��悪2ch.net�Ȃ��SSL�ʐM���s��(pink�͑Ή����Ă��Ȃ��̂ł��Ȃ�) - if (P2Util::isHost2chs($host) && ! P2Util::isHostBbsPink($host)) { + if (P2Util::isHost2chs($host) && ! P2Util::isHostBbsPink($host) && $_conf['2chapi_use'] == 1) { $this->_url = 'https://' . $host . '/' . $bbs . '/SETTING.TXT'; } else { $this->_url = 'http://' . $host . '/' . $bbs . '/SETTING.TXT'; diff --git a/lib/SubjectTxt.php b/lib/SubjectTxt.php index 995fde7e1..6a00345c4 100644 --- a/lib/SubjectTxt.php +++ b/lib/SubjectTxt.php @@ -24,13 +24,14 @@ class SubjectTxt */ public function __construct($host, $bbs) { + global $_conf; $this->host = $host; $this->bbs = $bbs; $this->storage = 'file'; $this->subject_file = P2Util::datDirOfHostBbs($host, $bbs) . 'subject.txt'; // �ڑ��悪2ch.net�Ȃ��SSL�ʐM���s��(pink�͑Ή����Ă��Ȃ��̂ł��Ȃ�) - if (P2Util::isHost2chs($host) && ! P2Util::isHostBbsPink($host)) { + if (P2Util::isHost2chs($host) && ! P2Util::isHostBbsPink($host) && $_conf['2chapi_use'] == 1) { $this->subject_url = 'https://' . $host . '/' . $bbs . '/subject.txt'; } else { $this->subject_url = 'http://' . $host . '/' . $bbs . '/subject.txt'; diff --git a/rep2/post.php b/rep2/post.php index 71809c1ee..1288a9187 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -379,7 +379,7 @@ function postIt($host, $bbs, $key, $post) global $bbs_cgi; // �ڑ��悪2ch.net�Ȃ��SSL�ʐM���s��(pink�͑Ή����Ă��Ȃ��̂ł��Ȃ�) - if (P2Util::isHost2chs($host) && ! P2Util::isHostBbsPink($host)) { + if (P2Util::isHost2chs($host) && ! P2Util::isHostBbsPink($host) && $_conf['2chapi_use'] == 1) { $bbs_cgi_url = 'https://' . $host . $bbs_cgi; } else { $bbs_cgi_url = 'http://' . $host . $bbs_cgi; From ca6328ba6d11f8d0b79de6611d573dd6a7cfb954 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sat, 4 Apr 2015 08:13:39 +0900 Subject: [PATCH 111/339] =?UTF-8?q?HTTP=E6=8E=A5=E7=B6=9A=E3=81=A7?= =?UTF-8?q?=E3=81=AFSSL=E9=96=A2=E4=BF=82=E3=81=AE=E8=A8=AD=E5=AE=9A?= =?UTF-8?q?=E3=82=92=E7=84=A1=E8=A6=96=E3=81=99=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/lib/P2Util.php b/lib/P2Util.php index 5596ae0b8..38e29d96c 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -2240,7 +2240,7 @@ static public function getBe2chCodeByMailPass($mail, $pass) /** * HTTP_Request2�N���X�̃C���X�^���X�𐶐����� * - * @param $url HTTP_Request2�Ɠ��� + * @param string $url �������URL(��΂ɕK�{) * @param $method HTTP_Request2�Ɠ��� * @return HTTP_Request2 */ @@ -2248,6 +2248,13 @@ static public function getHTTPRequest2($url , $method = HTTP_Request2::METHOD_GE { global $_conf; + $protocol = parse_url($url, PHP_URL_SCHEME); + + if(empty($url) || $protocol === false) + { + throw new InvalidArgumentException("URL�̎w�肪�ςł��B"); + } + $req = new HTTP_Request2($url, $method); // �^�C���A�E�g�̐ݒ� @@ -2257,11 +2264,13 @@ static public function getHTTPRequest2($url , $method = HTTP_Request2::METHOD_GE )); // SSL�̐ݒ� - $req->setAdapter($_conf['ssl_function']); + if($protocol == 'https') { + $req->setAdapter($_conf['ssl_function']); - if($_conf['ssl_capath']) - { - $req->setConfig ('ssl_capath', $_conf['ssl_capath']); + if($_conf['ssl_capath']) + { + $req->setConfig ('ssl_capath', $_conf['ssl_capath']); + } } // �v���L�V From 5c53324135570ab94d6be51d5b2fa9569184cdcb Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sat, 4 Apr 2015 11:27:42 +0900 Subject: [PATCH 112/339] =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E3=81=ABCookie=E3=82=84=E3=81=9D=E3=81=AE=E4=BB=96=E3=81=AE?= =?UTF-8?q?=E5=B1=A5=E6=AD=B4=E3=82=92=E5=89=8A=E9=99=A4=E5=87=BA=E6=9D=A5?= =?UTF-8?q?=E3=82=8B=E6=A9=9F=E8=83=BD=E3=82=92=E8=BF=BD=E5=8A=A0=E3=80=82?= =?UTF-8?q?=20rep2/editpref.php=E3=81=ABlib/wiki/editpref.inc.php=E3=82=92?= =?UTF-8?q?=E7=B5=B1=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/wiki/editpref.inc.php | 16 ----- rep2/editpref.php | 126 +++++++++++++++++++++++++++++++++++++- 2 files changed, 123 insertions(+), 19 deletions(-) delete mode 100644 lib/wiki/editpref.inc.php diff --git a/lib/wiki/editpref.inc.php b/lib/wiki/editpref.inc.php deleted file mode 100644 index 3fac320ef..000000000 --- a/lib/wiki/editpref.inc.php +++ /dev/null @@ -1,16 +0,0 @@ -<?php - -// +Wiki -// {{{ PC - +Wiki -echo "<td>\n\n"; -echo <<<EOP -<fieldset> -<legend>+Wiki</legend> - <a href="edit_link_plugin.php{$_conf['k_at_q']}">�����N�v���O�C���ҏW</a> �b - <a href="edit_dat_plugin.php{$_conf['k_at_q']}">DAT�擾�v���O�C���ҏW</a> �b - <a href="edit_replace_imageurl.php{$_conf['k_at_q']}">�u���摜URL�v���O�C���ҏW</a> -</fieldset>\n -EOP; -echo "</td></tr>\n\n"; - -// }}} \ No newline at end of file diff --git a/rep2/editpref.php b/rep2/editpref.php index 778ce4c33..83f84ff63 100644 --- a/rep2/editpref.php +++ b/rep2/editpref.php @@ -88,6 +88,39 @@ // ���C�ɓ���Z�b�g�ύX������΁A�ݒ�t�@�C�������������� } elseif ($_conf['expack.misc.multi_favs'] && isset($_POST['favsetlist'])) { updateFavSetList(); + +} elseif (isset($_POST['delete']) && isset($_POST['submit'])) { // �����̍폜���� + switch ($_POST['delete']) { + case cookie: + // cookie + $delflag = CookieDataStore::clear() === flase ? false : true; + break; + case matome: + // �V���܂Ƃߓǂ� + $delflag = MatomeCacheList::trim(0) === flase ? false : true; + break; + case recent: + // �ŋߓǂ񂾃X�� + $delflag = deleteFile($_conf['recent_idx']); + break; + case reshist: + // �������� + if(deleteFile($_conf['res_hist_idx']) && + deleteFile($_conf['res_hist_dat']) && + deleteFile($_conf['res_hist_dat_php']) ) { + $delflag = true; + } + break; + default: + $delflag = false; + P2Util::pushInfoHtml("<p>p2 error: ���� {$_POST['delete']} ���s���ł��B "); + break; + } + if ($delflag) { + P2Util::pushInfoHtml("<p>p2 info: {$_POST['submit']}���폜���܂����B"); + } else { + P2Util::pushInfoHtml("<p>p2 error: {$_POST['submit']}�̍폜�Ɏ��s���܂����B"); + } } // }}} @@ -267,7 +300,7 @@ // }}} // {{{ PC - +live �n�C���C�g���[�h�ҏW - echo "<td>\n\n"; + echo "<tr><td>\n\n"; echo <<<EOP <fieldset> @@ -281,9 +314,41 @@ </fieldset>\n EOP; - echo "</td></tr>"; + echo "</td>"; // }}} + // {{{ PC - 2ch774 �����E�L���b�V���̍폜 + + echo "<td>\n\n"; + + echo <<<EOP +<fieldset> +<legend>�����E�L���b�V���̍폜</legend>\n +<script type="text/javascript"> +//<![CDATA[ +function deleteCheck(submit){ + if(window.confirm(submit + '��S�č폜���Ă�낵���ł����H')){ + return true; + } + else{ + return false; // ���M�𒆎~ + } +} +//]]> +</script> + +EOP; + echo getDeleteHistoryFormHt('cookie', 'Cookie'); + echo getDeleteHistoryFormHt('matome', '�V���܂Ƃߓǂ�'); + echo getDeleteHistoryFormHt('reshist', '��������'); + echo getDeleteHistoryFormHt('recent', '�ŋߓǂ񂾃X��'); + echo <<<EOP +</fieldset>\n +EOP; + + echo "</td></tr>"; + + // }}} // {{{ PC - �z�X�g�̓��� HTML�̃Z�b�g echo <<<EOP @@ -335,7 +400,20 @@ echo "</td></tr>\n\n"; } - include_once P2_LIB_DIR . '/wiki/editpref.inc.php'; + // }}} + // +Wiki + // {{{ PC - +Wiki + echo "<tr><td>\n\n"; + echo <<<EOP +<fieldset> +<legend>+Wiki</legend> + <a href="edit_link_plugin.php{$_conf['k_at_q']}" target="_self">�����N�v���O�C���ҏW</a> �b + <a href="edit_dat_plugin.php{$_conf['k_at_q']}" target="_self">DAT�擾�v���O�C���ҏW</a> �b + <a href="edit_replace_imageurl.php{$_conf['k_at_q']}" target="_self">�u���摜URL�v���O�C���ҏW</a> +</fieldset>\n +EOP; + echo "</td></tr>\n\n"; + // }}} } @@ -587,6 +665,34 @@ function getSyncFavoritesFormHt($path_value, $submit_value) return $ht; } +// }}} +// {{{ getDeleteHistoryFormHt() + +/** + * �����폜�p�t�H�[����HTML���擾���� + * + * @param string $path_value �폜����t�@�C���̎�� + * @param string $submit_value submit�{�^���̒l + * @return string + */ +function getDeleteHistoryFormHt($path_value, $submit_value) +{ + global $_conf; + + $ht = <<<EOFORM +<form action="editpref.php" method="POST" target="_self" class="inline-form" onSubmit="return deleteCheck('{$submit_value}')"> + {$_conf['k_input_ht']} + <input type="hidden" name="delete" value="{$path_value}"> + <input type="submit" name="submit" value="{$submit_value}"> +</form>\n +EOFORM; + + if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) { + $ht = ' ' . preg_replace('/>\s+</', '><', $ht); + } + return $ht; +} + // }}} // {{{ getFavSetListFormHt() @@ -740,6 +846,20 @@ function compareSkinNames($a, $b) return strcmp($a, $b); } +// }}} +// {{{ deleteFile() + +/** + * �t�@�C�����폜����B + * + * @param string �t�@�C���� + * @return boolean ���ɖ������폜�ɐ���������true + */ +function deleteFile($filename) +{ + return file_exists($filename) ? unlink($filename) : true; +} + // }}} /* From b11e66f55cb47a71db6616c8c8e87100478e1e62 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sat, 4 Apr 2015 13:31:31 +0900 Subject: [PATCH 113/339] =?UTF-8?q?=E5=90=8D=E7=84=A1=E3=81=97=E3=81=8C?= =?UTF-8?q?=E7=AF=80=E7=A9=B4=E3=81=AB=E3=81=AA=E3=82=8B=E6=9D=BF=E3=81=AF?= =?UTF-8?q?=E8=AD=A6=E5=91=8A=E3=82=92=E5=87=BA=E3=81=99=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E3=81=97=E3=81=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/post_form_options.inc.php | 27 ++++++++++++++++++++++++--- rep2/js/post_form.js | 13 +++++++++++++ 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/lib/post_form_options.inc.php b/lib/post_form_options.inc.php index 908b6ff4c..dafe87791 100644 --- a/lib/post_form_options.inc.php +++ b/lib/post_form_options.inc.php @@ -223,6 +223,7 @@ function setHiddenValue(button) { $_dpreview_noname = $_dpreview_st->setting_array['BBS_NONAME_NAME']; $_dpreview_noname = '"' . StrCtl::toJavaScript($_dpreview_noname) . '"'; } + unset($_dpreview_st); } $_dpreview_hide = 'false'; if ($_conf['expack.editor.dpreview'] == 2) { @@ -315,11 +316,31 @@ function setHiddenValue(button) { $onsubmit_at = ''; -if (!$_conf['ktai']) { +if (!$_conf['ktai'] || $_conf['iphone']) { if (!preg_match('{NetFront|AVE-?Front/}', $_SERVER['HTTP_USER_AGENT'])) { - $onsubmit_at = sprintf(' onsubmit="if (validateAll(%s,%s)) { switchBlockSubmit(true); return true; } else { return false }"', + + // �������ŏ����Ɛߌ��ɂȂ�‚��`�F�b�N���Čx�����o���B + $confirmNanashi = false; + $_st = new SettingTxt($host, $bbs); + $_st->setSettingArray(); + + // ���������ߌ� + if (strpos($_st->setting_array['BBS_NONAME_NAME'], "fusianasan")) { + $confirmNanashi = true; + } + + // �������ŏ����Ȃ� + if($_st->setting_array['BBS_NANASHI_CHECK']=='1') + { + $confirmNanashi = true; + } + + unset($_st); + + $onsubmit_at = sprintf(' onsubmit="if (validateAll(%s,%s) && confirmNanashi(%s)) { switchBlockSubmit(true); return true; } else { return false }"', (($_conf['expack.editor.check_message']) ? 'true' : 'false'), - (($_conf['expack.editor.check_sage']) ? 'true' : 'false')); + (($_conf['expack.editor.check_sage']) ? 'true' : 'false'), + ($confirmNanashi ? 'true' : 'false')); } } diff --git a/rep2/js/post_form.js b/rep2/js/post_form.js index 5fafa002a..95ea1f1fe 100644 --- a/rep2/js/post_form.js +++ b/rep2/js/post_form.js @@ -194,3 +194,16 @@ function validateSage() { } return true; } + +// ������true���w�肵���疼�����ŏ������邩�ǂ����m�F���� +function confirmNanashi(doconfirmNanashi) { + // ������true�Ŗ��O����0����(������)�Ȃ�� + if (doconfirmNanashi && document.getElementById('FROM').value.length == 0) { + if(window.confirm('���̔‚͖������ł̏������݂���������Ă��邩\n�������� fusianasan ���܂܂�Ă��܂��B\n�������ŏ������݂܂����H')) { + return true; + } else { + return false; + } + } + return true; +} \ No newline at end of file From a36dc7432cfa56ea04c7597f02231b6859ab113c Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sat, 4 Apr 2015 14:18:44 +0900 Subject: [PATCH 114/339] =?UTF-8?q?=E3=82=B9=E3=83=9E=E3=83=9B=E5=90=91?= =?UTF-8?q?=E3=81=91=E8=A1=A8=E7=A4=BA=E3=81=A7=E7=AF=80=E7=A9=B4=E6=9D=BF?= =?UTF-8?q?=E3=82=92=E8=AD=A6=E5=91=8A=E3=81=99=E3=82=8B=E6=A9=9F=E8=83=BD?= =?UTF-8?q?=E3=81=8C=E5=8B=95=E4=BD=9C=E3=81=99=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/post_form.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rep2/post_form.php b/rep2/post_form.php index 8c47d1009..f3230d454 100644 --- a/rep2/post_form.php +++ b/rep2/post_form.php @@ -110,6 +110,8 @@ if ($_conf['expack.editor.dpreview']) { echo "<link rel=\"stylesheet\" href=\"css.php?css=prvw&skin={$skin_en}\" type=\"text/css\">\n"; } +} +if (!$_conf['ktai'] || $_conf['iphone']) { echo <<<EOP <link rel="shortcut icon" type="image/x-icon" href="favicon.ico"> <script type="text/javascript" src="js/basic.js?{$_conf['p2_version_id']}"></script> From b5b3ac047853be56a4336b2a91bb625a0224348b Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Mon, 6 Apr 2015 11:32:21 +0900 Subject: [PATCH 115/339] v150406.1111 --- conf/conf.inc.php | 2 +- conf/conf_user_def.inc.php | 20 +++++++ doc/README-774.txt | 107 ++++++++++++++++++++----------------- doc/README-API.txt | 5 ++ lib/P2Util.php | 3 +- lib/SettingTxt.php | 2 +- lib/SubjectTxt.php | 2 +- lib/ThreadRead.php | 21 +++++--- lib/auth2chapi.inc.php | 9 +++- lib/login2ch.inc.php | 9 +++- rep2/edit_conf_user.php | 12 +++-- rep2/post.php | 7 +-- 12 files changed, 131 insertions(+), 68 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index d1554ef84..0332cfea4 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150402.1350', // rep2�̃o�[�W���� + 'p2version' => '150406.1111', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index e1ddfbee2..47fd3d13f 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -427,6 +427,14 @@ 'Mozilla/3.0 (compatible; %s)' => '2 Mozilla/3.0 (compatible; AppName)', ); +// API�F�؂�SSL���g�p���� +$conf_user_def['2chapi_ssl.auth'] = 1; // (1) +$conf_user_rad['2chapi_ssl.auth'] = array('1' => '����', '0' => '���Ȃ�'); + +// DAT�擾��SSL���g�p���� +$conf_user_def['2chapi_ssl.read'] = 1; // (1) +$conf_user_rad['2chapi_ssl.read'] = array('1' => '����', '0' => '���Ȃ�'); + // �f�o�b�O�p�̏����o�͂��� $conf_user_def['2chapi_debug_print'] = 0; // (0) $conf_user_rad['2chapi_debug_print'] = array('1' => '����', '0' => '���Ȃ�'); @@ -560,6 +568,18 @@ // SSL�ʐM�̐ڑ�������؂��邽�߂Ɏg�p����ؖ������i�[���ꂽ�f�B���N�g�� �����؂ł��Ȃ����̂ݎw�� $conf_user_def['ssl_capath'] = ""; // () +// 2ch.net�́����O�C����SSL���g�p���� +$conf_user_def['2ch_ssl.maru'] = 1; // (1) +$conf_user_rad['2ch_ssl.maru'] = array('1' => '����', '0' => '���Ȃ�'); + +// 2ch.net��subjec.txt��SETTING.TXT�̎擾��SSL���g�p���� +$conf_user_def['2ch_ssl.subject'] = 0; // (0) +$conf_user_rad['2ch_ssl.subject'] = array('1' => '����', '0' => '���Ȃ�'); + +// 2ch.net�̏������݂�SSL���g�p���� +$conf_user_def['2ch_ssl.post'] = 0; // (0) +$conf_user_rad['2ch_ssl.post'] = array('1' => '����', '0' => '���Ȃ�'); + // }}} // {{{ �g���p�b�N��iPhone diff --git a/doc/README-774.txt b/doc/README-774.txt index 8e789d442..b73c70909 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -10,14 +10,14 @@ rep2-expack test https://github.com/orzisun/p2-php ����ȋ@�\ -�E�u���[�U�[�ݒ�ҏW�v����+live�����N�̕\���ݒ��ύX�”\ -�E�����‚̃X���ꗗ����X�����J�����Ƃ��Ɏ����I�Ɏ������[�h�ŃX�����J���ݒ��lj� -�E3�y�C���\���̔z�u��ύX�ł���ݒ��lj� -�E�X���b�h�^�C�g�����璘�쌠�\�L���폜����ݒ��lj� -�E���[�J���ˆꗗ�p.brd�t�@�C���̒u���ꏊ��rep2/board����$_conf['data_dir']/brard�ɕύX -�Ecron�Ƃ��ōŋߓǂ񂾃X���Ȃǂ�dat��DL�o����X�N���v�g�lj� -�E�{�Ƃ���be�̃��O�C���������ڐA����BE2.0�ɑΉ� -�E���̑������̃A���ɍ��킹���C����git�̃R�~�b�g���O���m�F���Ă��������B +* �u���[�U�[�ݒ�ҏW�v����+live�����N�̕\���ݒ��ύX�”\ +* �����‚̃X���ꗗ����X�����J�����Ƃ��Ɏ����I�Ɏ������[�h�ŃX�����J���ݒ��lj� +* 3�y�C���\���̔z�u��ύX�ł���ݒ��lj� +* �X���b�h�^�C�g�����璘�쌠�\�L���폜����ݒ��lj� +* ���[�J���ˆꗗ�p.brd�t�@�C���̒u���ꏊ��rep2/board����$_conf['data_dir']/brard�ɕύX +* cron�Ƃ��ōŋߓǂ񂾃X���Ȃǂ�dat��DL�o����X�N���v�g�lj� +* �{�Ƃ���be�̃��O�C���������ڐA����BE2.0�ɑΉ� +* ���̑������̃A���ɍ��킹���C����git�̃R�~�b�g���O���m�F���Ă��������B ���Ɛ� @@ -36,59 +36,68 @@ rep2-expack test https://github.com/orzisun/p2-php �{��p2�Ɠ������AX11���C�Z���X�ł��B ��ChangeLog +150406.1111 +* ���������ߌ��ɂȂ�‚ɖ������ŏ������ނƂ��Ɍx�����o���@�\��lj� +* �ݒ�Ǘ���Cookie�₻�̑��̗������폜�o����@�\��lj� +* http://page2.skr.jp/rep2/ �����ł��Ă��܂����̂�gate.php�̑�ւ�lj� +* HTTP�ڑ��ł�SSL�֌W�̐ݒ�𖳎�����悤�ɕύX +* 2ch.net�Ƃ�SSL�ʐM��ݒ�őI�ׂ�悤�ɕύX +* �������݂ŗ�O�����������ۂɃG���[���b�Z�[�W���\������Ȃ��s����C�� +* ���̑����X + 150402.1350 -�E�ڑ��悪2ch.net�Ȃ��SSL�ʐM���s���悤�ɕύX(pink��be���O�C���F�؂͑Ή����Ă��Ȃ��̂ł��Ȃ�) -�Essl_function�̃f�t�H���g�ݒ��cURL�ɕύX -�ESSL�ʐM�ȊO�ł�SSL�̐ݒ肪���f�����悤�ɕύX -�E��L�ύX�̂���cURL�K�{�ɕύX +* �ڑ��悪2ch.net�Ȃ��SSL�ʐM���s���悤�ɕύX(pink��be���O�C���F�؂͑Ή����Ă��Ȃ��̂ł��Ȃ�) +* ssl_function�̃f�t�H���g�ݒ��cURL�ɕύX +* SSL�ʐM�ȊO�ł�SSL�̐ݒ肪���f�����悤�ɕύX +* ��L�ύX�̂���cURL�K�{�ɕύX 150401.2321 -�E�F�ؕt�v���L�V�ɑΉ��iBASIC�F�؂̂݁j -�ESSL�ʐM��openSSL��cURL��؂�ւ��邱�Ƃ��o����ݒ��lj� -�Edig.2ch.net�ɑ���w�b�_��ύX -�E2ch�Ƃ̒ʐM��HTTP_Request2�ɕύX +* �F�ؕt�v���L�V�ɑΉ��iBASIC�F�؂̂݁j +* SSL�ʐM��openSSL��cURL��؂�ւ��邱�Ƃ��o����ݒ��lj� +* dig.2ch.net�ɑ���w�b�_��ύX +* 2ch�Ƃ̒ʐM��HTTP_Request2�ɕύX 150328.2132 -�Edig2ch�̎I�Ɍy���ȕs������������Ƃ��̑΍���u���� -�Edig2ch�Ō������ʂ̔ԍ���1����\�������悤�ɏC�� -�Edig2ch��json�G���[������ύX -�Edig2ch���v���L�V�ݒ�(proxy_use)�ɑΉ����Ă��Ȃ��s����C�� -�Edig2ch�Łu�‚ōi�荞�ށv�ɑΉ����� -�E�u�����[�h���|�b�v�A�b�v�ɂ������悤�ɕύX -�E���X���|�b�v�A�b�v(quote_res_view)�������ȂƂ��Ɏ������[�h��ID�F�Â�(coloredid)�������Ȃ��s����C�� +* dig2ch�̎I�Ɍy���ȕs������������Ƃ��̑΍���u���� +* dig2ch�Ō������ʂ̔ԍ���1����\�������悤�ɏC�� +* dig2ch��json�G���[������ύX +* dig2ch���v���L�V�ݒ�(proxy_use)�ɑΉ����Ă��Ȃ��s����C�� +* dig2ch�Łu�‚ōi�荞�ށv�ɑΉ����� +* �u�����[�h���|�b�v�A�b�v�ɂ������悤�ɕύX +* ���X���|�b�v�A�b�v(quote_res_view)�������ȂƂ��Ɏ������[�h��ID�F�Â�(coloredid)�������Ȃ��s����C�� 150320.1020 -�E�|�b�v�A�b�v���珑�����ݐ���������ɃX�����ēǂݍ��݂��Ȃ��ݒ��lj� -�E�������[�h����̏������݂�Cookie�m�F�����������ꍇ�������[�h�ɖ߂�Ȃ��s����C�� -�E�����e�i���X�������コ���邽��live_ShowThreadPc.php��live_ShowThread.php�̑���� -�Elive_ShowThreadLive.php�Ɩ{�̂�ShowThread.php���g�p����悤�ɕύX -�E�������ۑ�(expack.editor.savedraft)�������ȂƂ��Ɏ������[�h���珑�����߂Ȃ��s����C�� -�E�X���^�C������Warning���o��s����C�� +* �|�b�v�A�b�v���珑�����ݐ���������ɃX�����ēǂݍ��݂��Ȃ��ݒ��lj� +* �������[�h����̏������݂�Cookie�m�F�����������ꍇ�������[�h�ɖ߂�Ȃ��s����C�� +* �����e�i���X�������コ���邽��live_ShowThreadPc.php��live_ShowThread.php�̑���� +* live_ShowThreadLive.php�Ɩ{�̂�ShowThread.php���g�p����悤�ɕύX +* �������ۑ�(expack.editor.savedraft)�������ȂƂ��Ɏ������[�h���珑�����߂Ȃ��s����C�� +* �X���^�C������Warning���o��s����C�� 150317.1200 -�E���̑����X +* ���̑����X 150316.1120 -�E3�y�C���\���̔z�u��ύX�ł���ݒ��lj� -�EBe�̃A�C�R����\���ł���悤�ɂ��� -�E���̑����X +* 3�y�C���\���̔z�u��ύX�ł���ݒ��lj� +* Be�̃A�C�R����\���ł���悤�ɂ��� +* ���̑����X 150315.0117 -�Eyoutu.be��nico.(ms|sc)�̃v���r���[�ɑΉ� -�EYouTube�̖��ߍ��ݕ��@��object����iframe�ɕύX -�Ecron�Ƃ��ōŋߓǂ񂾃X���Ȃǂ�dat��DL�o����X�N���v�g�lj� -�E�ꕔ�̉�ʃf�U�C����{�Ƃ��ۂ��f�U�C���ɕύX -�E�ꕔ�̃��X�̉��s���폜�����s����C�� -�EID��F�Â����Ȃ��ݒ�̍ۂ�ID�̕\�������������Ȃ�s����C�� -�E2ch��DAT�񋟏I���ɔ������O�j���΍��lj� -�E�{�Ƃ���be�̃��O�C���������ڐA����BE2.0�ɑΉ� -�E���擾�X���ł��X���ꗗ�Ɍ��X���̃����N��\���ł���ݒ��lj� -�E���̑����X +* youtu.be��nico.(ms|sc)�̃v���r���[�ɑΉ� +* YouTube�̖��ߍ��ݕ��@��object����iframe�ɕύX +* cron�Ƃ��ōŋߓǂ񂾃X���Ȃǂ�dat��DL�o����X�N���v�g�lj� +* �ꕔ�̉�ʃf�U�C����{�Ƃ��ۂ��f�U�C���ɕύX +* �ꕔ�̃��X�̉��s���폜�����s����C�� +* ID��F�Â����Ȃ��ݒ�̍ۂ�ID�̕\�������������Ȃ�s����C�� +* 2ch��DAT�񋟏I���ɔ������O�j���΍��lj� +* �{�Ƃ���be�̃��O�C���������ڐA����BE2.0�ɑΉ� +* ���擾�X���ł��X���ꗗ�Ɍ��X���̃����N��\���ł���ݒ��lj� +* ���̑����X 150307.1230 -�Edoc�f�B���N�g���Ɋe�@�\��Readme.txt���쐬 -�E�u���[�U�[�ݒ�ҏW�v����+live�����N�̕\���ݒ��ύX�”\ -�E�����‚̃X���ꗗ����X�����J�����Ƃ��Ɏ����I�Ɏ������[�h�ŃX�����J���ݒ��lj� -�E�X���b�h�^�C�g�����璘�쌠�\�L���폜����ݒ��lj� -�E���[�J���ˆꗗ�p.brd�t�@�C���̒u���ꏊ��rep2/board����$_conf['data_dir']/brard�ɕύX -�E���̑����X \ No newline at end of file +* doc�f�B���N�g���Ɋe�@�\��Readme.txt���쐬 +* �u���[�U�[�ݒ�ҏW�v����+live�����N�̕\���ݒ��ύX�”\ +* �����‚̃X���ꗗ����X�����J�����Ƃ��Ɏ����I�Ɏ������[�h�ŃX�����J���ݒ��lj� +* �X���b�h�^�C�g�����璘�쌠�\�L���폜����ݒ��lj� +* ���[�J���ˆꗗ�p.brd�t�@�C���̒u���ꏊ��rep2/board����$_conf['data_dir']/brard�ɕύX +* ���̑����X \ No newline at end of file diff --git a/doc/README-API.txt b/doc/README-API.txt index da6edf1cc..74a835536 100644 --- a/doc/README-API.txt +++ b/doc/README-API.txt @@ -20,6 +20,11 @@ dat �u����v�ɐݒ肵���ꍇ��API �F�؎��Ɂ�(�Q�l)�𑗐M���܂��B ���M�����牽���N����̂�����Ȃ����ߐ؂�ւ��邱�Ƃ��o����悤�ɂȂ��Ă��܂��B +2chapi_ssl.auth +2chapi_ssl.read +���̐ݒ��SSL�ʐM���G���[�ƂȂ�‹������̐ݒ�ł��B +2chapi_use ���u���Ȃ��v�̏ꍇ�͖�������܂��B + 2chapi_interval 2ch API �F�؂���Ԋu�ł��BSessionID���ǂꂭ�炢�̊��Ԏ��‚̂��s���Ȃ��߂Ƃ肠����1���Ԃɂ��Ă��܂��B diff --git a/lib/P2Util.php b/lib/P2Util.php index 38e29d96c..4bc5c2fd0 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -2130,8 +2130,9 @@ static public function getP2UA($withMonazilla = true,$apiUA = false) } if ($withMonazilla) { - $p2ua = 'Monazilla/1.00' . ' (' . $p2ua . ')'; + $p2ua = sprintf('Monazilla/1.00 (%s)', $p2ua); } + return $p2ua; } // {{{ isEnableBe2ch() diff --git a/lib/SettingTxt.php b/lib/SettingTxt.php index a3c6558e6..215b4c3db 100644 --- a/lib/SettingTxt.php +++ b/lib/SettingTxt.php @@ -39,7 +39,7 @@ public function __construct($host, $bbs) $this->_setting_srd = $dat_host_bbs_dir_s . 'p2_kb_setting.srd'; // �ڑ��悪2ch.net�Ȃ��SSL�ʐM���s��(pink�͑Ή����Ă��Ȃ��̂ł��Ȃ�) - if (P2Util::isHost2chs($host) && ! P2Util::isHostBbsPink($host) && $_conf['2chapi_use'] == 1) { + if (P2Util::isHost2chs($host) && ! P2Util::isHostBbsPink($host) && $_conf['2ch_ssl.subject']) { $this->_url = 'https://' . $host . '/' . $bbs . '/SETTING.TXT'; } else { $this->_url = 'http://' . $host . '/' . $bbs . '/SETTING.TXT'; diff --git a/lib/SubjectTxt.php b/lib/SubjectTxt.php index 6a00345c4..a3c84573c 100644 --- a/lib/SubjectTxt.php +++ b/lib/SubjectTxt.php @@ -31,7 +31,7 @@ public function __construct($host, $bbs) $this->subject_file = P2Util::datDirOfHostBbs($host, $bbs) . 'subject.txt'; // �ڑ��悪2ch.net�Ȃ��SSL�ʐM���s��(pink�͑Ή����Ă��Ȃ��̂ł��Ȃ�) - if (P2Util::isHost2chs($host) && ! P2Util::isHostBbsPink($host) && $_conf['2chapi_use'] == 1) { + if (P2Util::isHost2chs($host) && ! P2Util::isHostBbsPink($host) && $_conf['2ch_ssl.subject']) { $this->subject_url = 'https://' . $host . '/' . $bbs . '/subject.txt'; } else { $this->subject_url = 'http://' . $host . '/' . $bbs . '/subject.txt'; diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 7ece08944..eb4c533d1 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -78,14 +78,14 @@ public function downloadDat() { include $_conf['sid2ch_php']; return $this->_downloadDat2chMaru ($uaMona, $SID2ch); - // 2ch bbspink �����^�|�ǂ� + // 2ch bbspink �����^�|�ǂ� } elseif (P2Util::isHost2chs ($this->host) && ! empty ($_GET['moritapodat']) && $_conf['p2_2ch_mail'] && $_conf['p2_2ch_pass']) { if (! array_key_exists ('csrfid', $_GET) || $this->_getCsrfIdForMoritapoDat () != $_GET['csrfid']) { p2die ('�s���ȃ��N�G�X�g�ł�'); } return $this->_downloadDat2chMoritapo (); - // 2ch�̉ߋ����O�q�ɓǂ� + // 2ch�̉ߋ����O�q�ɓǂ� } elseif (! empty ($_GET['kakolog']) && ! empty ($_GET['kakoget'])) { if ($_GET['kakoget'] == 1) { $ext = '.dat.gz'; @@ -94,11 +94,12 @@ public function downloadDat() { } return $this->_downloadDat2chKako ($_GET['kakolog'], $ext); - // 2ch or 2ch�݊� + // 2ch or 2ch�݊� } elseif (P2Util::isHost2chs ($this->host) && ! empty ($_GET['shirokuma'])) { return $this->_downloadDat2chMaru ($uaMona, $SID2ch, true); - // 2ch ��API�o�R�ŗ��Ƃ� - } elseif (P2Util::isHost2chs ($this->host) && $_conf['2chapi_use'] == 1 && empty ($_GET['olddat'])) { + + // 2ch ��API�o�R�ŗ��Ƃ� + } elseif (P2Util::isHost2chs ($this->host) && $_conf['2chapi_use'] && empty ($_GET['olddat'])) { // ���O�C�����ĂȂ���� or ���O�C����A�ݒ肵�����Ԍo�߂��Ă����玩���ă��O�C�� if (! file_exists ($_conf['sid2chapi_php']) || ! empty ($_REQUEST['relogin2chapi']) || (filemtime ($_conf['sid2chapi_php']) < time () - 60 * 60 * $_conf['2chapi_interval'])) { @@ -115,6 +116,7 @@ public function downloadDat() { include $_conf['sid2chapi_php']; return $this->_downloadDat2chAPI ($SID2chAPI, $this->length); } else { + // 2ch �ȊO�̊O���� // DAT������DL���� return $this->_downloadDat2ch ($this->length); @@ -164,7 +166,14 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { $serverName = explode ('.', $this->host); // $url = "http://{$this->host}/{$this->bbs}/dat/{$this->key}.dat"; // $url="http://news2.2ch.net/test/read.cgi?bbs=newsplus&key=1038486598"; - $url = 'https://api.2ch.net/v1/' . $serverName[0] . '/' . $this->bbs . '/' . $this->key; + + if($_conf['2chapi_ssl.read']) { + $url = 'https://api.2ch.net/v1/'; + } else { + $url = 'http://api.2ch.net/v1/'; + } + + $url .= $serverName[0] . '/' . $this->bbs . '/' . $this->key; $message = '/v1/' . $serverName[0] . '/' . $this->bbs . '/' . $this->key . $sid . $AppKey; $HB = hash_hmac ("sha256", $message, $HMKey); diff --git a/lib/auth2chapi.inc.php b/lib/auth2chapi.inc.php index 030c0f2cb..8fe81d949 100644 --- a/lib/auth2chapi.inc.php +++ b/lib/auth2chapi.inc.php @@ -14,7 +14,14 @@ function authenticate_2chapi() { global $_conf; - $url = 'https://api.2ch.net/v1/auth/'; + + if ($_conf['2chapi_ssl.auth']) + { + $url = 'https://api.2ch.net/v1/auth/'; + } else { + $url = 'http://api.2ch.net/v1/auth/'; + } + $CT = time(); $AppKey = $_conf['2chapi_appkey']; $AppName = $_conf['2chapi_appname']; diff --git a/lib/login2ch.inc.php b/lib/login2ch.inc.php index 5bcd50d37..dbf04884a 100644 --- a/lib/login2ch.inc.php +++ b/lib/login2ch.inc.php @@ -23,8 +23,13 @@ function login2ch() return false; } - $auth2ch_url = 'https://2chv.tora3.net/futen.cgi'; - $dolib2ch = 'DOLIB/1.00'; + if ($_conf['2ch_ssl.maru']) { + $auth2ch_url = 'https://2chv.tora3.net/futen.cgi'; + } else { + $auth2ch_url = 'http://2chv.tora3.net/futen.cgi'; + } + + $dolib2ch = 'DOLIB/1.00'; if($_conf['2chapi_use'] == 1) { if($_conf['2chapi_appname'] != "") { diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index b75eb9f74..adb229a2f 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -383,8 +383,11 @@ array('2chapi_hmkey','HMkey', P2_EDIT_CONF_USER_LONGTEXT), array('2chapi_appname','AppName API�ɑ��M����A�v���P�[�V������ ��:Hoge/1.00'), 'User-Agent', - array('2chapi_ua.auth','API�F�؂Ŏg�p����User-Agent'), - array('2chapi_ua.read','DAT�擾�Ŏg�p����User-Agent'), + array('2chapi_ua.auth','API�F�؂Ɏg�p����User-Agent'), + array('2chapi_ua.read','DAT�擾�Ɏg�p����User-Agent'), + 'SSL�ʐM�ݒ�', + array('2chapi_ssl.auth','API�F�؂�SSL���g�p����'), + array('2chapi_ssl.read','DAT�擾��SSL���g�p����'), '�f�o�b�O�p', array('2chapi_debug_print','�f�o�b�O�p�̏����o�͂���'), '�F�؏���ύX�����ꍇ�ĔF�؂��Ă�������', @@ -438,9 +441,12 @@ array('proxy_port', '�v���L�V�|�[�g ex)"8080"'), array('proxy_user', '�v���L�V���[�U�[�� (�g�p����ꍇ�̂�)'), array('proxy_password', '�v���L�V�p�X���[�h (�g�p����ꍇ�̂�)'), - '�ʐM�ݒ�', + 'SSL�ʐM�ݒ�', array('ssl_function', 'SSL�ʐM(�����O�C����)�Ɏg�p����֐�<br>(�֐��ɊY������g�����C���X�g�[������K�v������)'), array('ssl_capath', 'SSL�ʐM�Őڑ�������؂��邽�߂̏ؖ���������f�B���N�g�� ex)"/etc/ssl/certs"<br>�ݒ�Ȃ��ē����ꍇ�͐ݒ�s�v<br>ssl_function�ɑΉ������`���̏ؖ������K�v'), + array('2ch_ssl.maru', '2ch.net�́����O�C����SSL���g�p����'), + array('2ch_ssl.subject', '2ch.net��subjec.txt��SETTING.TXT�̎擾��SSL���g�p����'), + array('2ch_ssl.post', '2ch.net�̏������݂�SSL���g�p����'), ); printEditConfGroupHtml($groupname, $conflist, $flags); } diff --git a/rep2/post.php b/rep2/post.php index 1288a9187..d90508a03 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -379,7 +379,7 @@ function postIt($host, $bbs, $key, $post) global $bbs_cgi; // �ڑ��悪2ch.net�Ȃ��SSL�ʐM���s��(pink�͑Ή����Ă��Ȃ��̂ł��Ȃ�) - if (P2Util::isHost2chs($host) && ! P2Util::isHostBbsPink($host) && $_conf['2chapi_use'] == 1) { + if (P2Util::isHost2chs($host) && ! P2Util::isHostBbsPink($host) && $_conf['2ch_ssl.post']) { $bbs_cgi_url = 'https://' . $host . $bbs_cgi; } else { $bbs_cgi_url = 'http://' . $host . $bbs_cgi; @@ -389,7 +389,7 @@ function postIt($host, $bbs, $key, $post) $req = P2Util::getHTTPRequest2 ($bbs_cgi_url,HTTP_Request2::METHOD_POST); // �w�b�_ - $req->setHeader('User-Agent', P2Util::getP2UA(true,P2Util::isHost2chs($host))); + $req->setHeader('User-Agent', P2Util::getP2UA(true, P2Util::isHost2chs($host))); $req->setHeader('Referer', "http://{$host}/{$bbs}/{$key}/"); // �N�b�L�[ @@ -447,7 +447,8 @@ function postIt($host, $bbs, $key, $post) } } catch (Exception $e) { - showPostMsg(false, "�T�[�o�ڑ��G���[: $e->getMessage()<br>p2 Error: �ƒT�[�o�ւ̐ڑ��Ɏ��s���܂���", false); + $error_msg = $e->getMessage(); + showPostMsg(false, "�T�[�o�ڑ��G���[: {$error_msg}<br>p2 Error: �ƒT�[�o�ւ̐ڑ��Ɏ��s���܂���", false); } // be.2ch.net or JBBS������� �����R�[�h�ϊ� EUC��SJIS From 46748ebeb687533b2fac1e166df4b9cbc80d69b1 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Mon, 6 Apr 2015 22:11:58 +0900 Subject: [PATCH 116/339] =?UTF-8?q?=E7=AF=80=E7=A9=B4=E6=9D=BF=E3=81=A8?= =?UTF-8?q?=E5=90=8D=E7=84=A1=E3=81=97=E3=81=A7=E6=9B=B8=E3=81=8D=E8=BE=BC?= =?UTF-8?q?=E3=81=BF=E3=81=A7=E3=81=8D=E3=81=AA=E3=81=84=E6=9D=BF=E3=81=AE?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6=E3=82=92=E6=AD=A3=E3=81=97=E3=81=8F=E5=8B=95?= =?UTF-8?q?=E4=BD=9C=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=20=E5=90=8D=E7=84=A1=E3=81=97=E3=81=A7=E6=9B=B8?= =?UTF-8?q?=E8=BE=BC=E5=87=BA=E6=9D=A5=E3=81=AA=E3=81=84=E6=9D=BF=E3=81=AF?= =?UTF-8?q?=E6=9B=B8=E3=81=8D=E8=BE=BC=E3=81=BF=E7=B6=9A=E8=A1=8C=E3=81=A7?= =?UTF-8?q?=E3=81=8D=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=20expack=E3=81=AEsage=E3=83=81=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=82=AF=E6=A9=9F=E8=83=BD=E3=81=A8=E6=9C=AC=E6=96=87=E3=81=8C?= =?UTF-8?q?=E7=A9=BA=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF=E6=A9=9F=E8=83=BD?= =?UTF-8?q?=E3=81=AE=E3=83=87=E3=83=95=E3=82=A9=E3=83=AB=E3=83=88=E5=80=A4?= =?UTF-8?q?=E3=82=92ON=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf_user_def_ex.inc.php | 4 ++-- lib/post_form_options.inc.php | 14 ++++---------- rep2/js/post_form.js | 12 +++++++++++- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/conf/conf_user_def_ex.inc.php b/conf/conf_user_def_ex.inc.php index 112a88d63..58fa1757f 100644 --- a/conf/conf_user_def_ex.inc.php +++ b/conf/conf_user_def_ex.inc.php @@ -141,11 +141,11 @@ $conf_user_rad['expack.editor.dpreview_chkaa'] = array('1' => '����', '0' => '���Ȃ�'); // �{������łȂ����`�F�b�N -$conf_user_def['expack.editor.check_message'] = 0; // (0) +$conf_user_def['expack.editor.check_message'] = 1; // (1) $conf_user_rad['expack.editor.check_message'] = array('1' => '����', '0' => '���Ȃ�'); // sage �`�F�b�N -$conf_user_def['expack.editor.check_sage'] = 0; // (0) +$conf_user_def['expack.editor.check_sage'] = 1; // (1) $conf_user_rad['expack.editor.check_sage'] = array('1' => '����', '0' => '���Ȃ�'); // �������ۑ� diff --git a/lib/post_form_options.inc.php b/lib/post_form_options.inc.php index dafe87791..8741a329f 100644 --- a/lib/post_form_options.inc.php +++ b/lib/post_form_options.inc.php @@ -320,27 +320,21 @@ function setHiddenValue(button) { if (!preg_match('{NetFront|AVE-?Front/}', $_SERVER['HTTP_USER_AGENT'])) { // �������ŏ����Ɛߌ��ɂȂ�‚��`�F�b�N���Čx�����o���B - $confirmNanashi = false; $_st = new SettingTxt($host, $bbs); $_st->setSettingArray(); // ���������ߌ� - if (strpos($_st->setting_array['BBS_NONAME_NAME'], "fusianasan")) { - $confirmNanashi = true; - } + $confirmNanashi = ( (strpos($_st->setting_array['BBS_NONAME_NAME'], "fusianasan") !== false)); // �������ŏ����Ȃ� - if($_st->setting_array['BBS_NANASHI_CHECK']=='1') - { - $confirmNanashi = true; - } + $blockNanashi = ($_st->setting_array['BBS_NANASHI_CHECK'] == '1' || $_st->setting_array['NANASHI_CHECK'] == '1'); unset($_st); - $onsubmit_at = sprintf(' onsubmit="if (validateAll(%s,%s) && confirmNanashi(%s)) { switchBlockSubmit(true); return true; } else { return false }"', + $onsubmit_at = sprintf(' onsubmit="if (validateAll(%s,%s) && confirmNanashi(%s) && blockNanashi(%s)) { switchBlockSubmit(true); return true; } else { return false }"', (($_conf['expack.editor.check_message']) ? 'true' : 'false'), (($_conf['expack.editor.check_sage']) ? 'true' : 'false'), - ($confirmNanashi ? 'true' : 'false')); + ($confirmNanashi ? 'true' : 'false'), ($blockNanashi ? 'true' : 'false')); } } diff --git a/rep2/js/post_form.js b/rep2/js/post_form.js index 95ea1f1fe..60065fcb3 100644 --- a/rep2/js/post_form.js +++ b/rep2/js/post_form.js @@ -199,11 +199,21 @@ function validateSage() { function confirmNanashi(doconfirmNanashi) { // ������true�Ŗ��O����0����(������)�Ȃ�� if (doconfirmNanashi && document.getElementById('FROM').value.length == 0) { - if(window.confirm('���̔‚͖������ł̏������݂���������Ă��邩\n�������� fusianasan ���܂܂�Ă��܂��B\n�������ŏ������݂܂����H')) { + if(window.confirm('���̔‚͖������� fusianasan ���܂܂�Ă��܂��B\n�������ŏ������݂܂����H')) { return true; } else { return false; } } return true; +} + +//������true���w�肵���疼�����ŏ����o���Ȃ� +function blockNanashi(blockNanashi) { + // ������true�Ŗ��O����0����(������)�Ȃ�� + if (blockNanashi && document.getElementById('FROM').value.length == 0) { + alert('���̔‚͖������̏������݂���������Ă���̂Ŗ������ŏ������ނ��Ƃ��o���܂���B'); + return false; + } + return true; } \ No newline at end of file From 5d69ff9bae32a7c5726696f5799c7e4f63bf171b Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Mon, 6 Apr 2015 22:14:47 +0900 Subject: [PATCH 117/339] v150406.2211 --- conf/conf.inc.php | 2 +- doc/README-774.txt | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 0332cfea4..04b38cf6f 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150406.1111', // rep2�̃o�[�W���� + 'p2version' => '150406.2211', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/doc/README-774.txt b/doc/README-774.txt index b73c70909..c3755f301 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -17,6 +17,7 @@ rep2-expack test https://github.com/orzisun/p2-php * ���[�J���ˆꗗ�p.brd�t�@�C���̒u���ꏊ��rep2/board����$_conf['data_dir']/brard�ɕύX * cron�Ƃ��ōŋߓǂ񂾃X���Ȃǂ�dat��DL�o����X�N���v�g�lj� * �{�Ƃ���be�̃��O�C���������ڐA����BE2.0�ɑΉ� +* ���������ߌ��ɂȂ�‚ɖ������ŏ������ނƂ��Ɍx�����o���@�\��lj� * ���̑������̃A���ɍ��킹���C����git�̃R�~�b�g���O���m�F���Ă��������B ���Ɛ� @@ -36,6 +37,11 @@ rep2-expack test https://github.com/orzisun/p2-php �{��p2�Ɠ������AX11���C�Z���X�ł��B ��ChangeLog +150406.2211 +* �ߌ��‚Ɩ������ŏ������݂ł��Ȃ��‚̏����𐳂������삷��悤�ɏC�� +* �������ŏ����o���Ȃ��‚͏������ݑ��s�ł��Ȃ��悤�ɕύX +* expack��sage�`�F�b�N�@�\�Ɩ{������`�F�b�N�@�\�̃f�t�H���g�l��ON�ɕύX + 150406.1111 * ���������ߌ��ɂȂ�‚ɖ������ŏ������ނƂ��Ɍx�����o���@�\��lj� * �ݒ�Ǘ���Cookie�₻�̑��̗������폜�o����@�\��lj� From 7617af6a3ae60eec71527cdc7bc126ce678fcd5d Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Tue, 7 Apr 2015 01:22:51 +0900 Subject: [PATCH 118/339] =?UTF-8?q?dig.2ch.net=E3=81=AB=E9=80=81=E3=82=8B?= =?UTF-8?q?=E3=83=98=E3=83=83=E3=83=80=E3=83=BC=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=20dig2ch.php=E3=81=A7=E8=A7=A3=E6=9E=90=E3=82=A8=E3=83=A9?= =?UTF-8?q?=E3=83=BC=E3=81=8C=E7=99=BA=E7=94=9F=E3=81=97=E3=81=9F=E9=9A=9B?= =?UTF-8?q?=E3=81=AB=E8=A9=B3=E7=B4=B0=E6=83=85=E5=A0=B1=E3=82=92=E5=87=BA?= =?UTF-8?q?=E3=81=99=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/dig2ch.php | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/rep2/dig2ch.php b/rep2/dig2ch.php index 9747d8828..ed015569c 100644 --- a/rep2/dig2ch.php +++ b/rep2/dig2ch.php @@ -15,6 +15,7 @@ function dig2chsearch($query) $req = P2Util::getHTTPRequest2 ($url, HTTP_Request2::METHOD_GET); $req->setHeader('User-Agent', $_SERVER['HTTP_USER_AGENT']); $req->setHeader('Acecpt-Language', 'ja'); + $req->setHeader('Accept', '*/*'); $response = $req->send(); @@ -35,7 +36,6 @@ function dig2chsearch($query) } $jsontest1 = json_decode($body, true); - unset($body); //mb_convert_variables('SHIFT-JIS','UTF-8',$jsontest1); @@ -65,7 +65,26 @@ function dig2chsearch($query) $jsonerror = ' - Unknown error'; break; } - p2die("�������ʂ̎擾�Ɏ��s���܂���".$jsonerror); + if (true) { // �{����conf_admin.php�Ő؂�ւ��邱�Ƃ��o����悤�ɂ��邪����ON + echo "<b>PHP�����삵�Ă���OS��uname</b><br>". php_uname() ."<br>"; + echo "<b>PHP�̃o�[�W����</b><br>". phpversion() ."<br>"; + if ($_conf['proxy_use']) + { + echo '<font color="red"><b>���̊‹��͋����ݒ肳��Ă��܂�(2ch�Ƃ̒ʐM�ɉ����������g�p���Ă���ꍇ�͂��܊�)</b></font><br>'; + echo "{$_conf['proxy_host']}:{$_conf['proxy_port']}<br>"; + } + echo "<b>dig2ch�ɑ��M����URL(�u���E�U�ŃA�N�Z�X�������Ă݂Ă��������B)</b><br>{$url}<br>"; + // �\���̂���SJIS�� + $body = mb_convert_encoding($body, "SJIS", "UTF-8"); + echo '<b>dig2ch����̃��X�|���X(http://jsonlint.com/ �ŃG���[��������΂��܊�)</b><br><textarea readonly rows="30" cols="100" wrap="off">'.$body.'</textarea><br>'; + echo '<b>HTTP_Request��var_dump</b><br>'; + var_dump($req); + echo '<b>HTTP_Response��var_dump</b><br>'; + var_dump($response); + } + p2die("�������ʂ̉�͂Ɏ��s���܂���".$jsonerror); + } else { + unset ($body); } $boards = array(); From cb6331f68d5d3c172fb87fbd223ab2961efe02c9 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Tue, 7 Apr 2015 08:34:39 +0900 Subject: [PATCH 119/339] =?UTF-8?q?HTTP=E9=80=9A=E4=BF=A1=E3=81=AE?= =?UTF-8?q?=E3=83=98=E3=83=83=E3=83=80=E3=82=92=E8=A6=8B=E7=9B=B4=E3=81=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 20 +++++++++++++------- lib/SettingTxt.php | 3 --- lib/SubjectTxt.php | 3 --- lib/ThreadRead.php | 9 --------- lib/wiki/P2UtilWiki.php | 3 --- rep2/dig2ch.php | 7 ++++--- rep2/post.php | 1 - 7 files changed, 17 insertions(+), 29 deletions(-) diff --git a/lib/P2Util.php b/lib/P2Util.php index 4bc5c2fd0..7f8ad804d 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -264,9 +264,6 @@ static public function fileDownload($url, $localfile, try { // DL $req = self::getHTTPRequest2($url, HTTP_Request2::METHOD_GET); - $purl = parse_url($url); // URL���� - $req->setHeader('User-Agent', self::getP2UA(true,self::isHost2chs($purl['host']))); - unset($purl); $response = $req->send(); @@ -2249,15 +2246,22 @@ static public function getHTTPRequest2($url , $method = HTTP_Request2::METHOD_GE { global $_conf; - $protocol = parse_url($url, PHP_URL_SCHEME); + $purl = parse_url ($url); - if(empty($url) || $protocol === false) + if(empty($url) || $purl === false) { - throw new InvalidArgumentException("URL�̎w�肪�ςł��B"); + throw new InvalidArgumentException ("URL�̎w�肪�ςł��B"); } $req = new HTTP_Request2($url, $method); + // �悭�g���w�b�_���w�� + // p2��HTTP�ʐM�͓��Ɏw��̖�������Monazilla�𖼏��悤�ɂ��� + $req->setHeader ('User-Agent', self::getP2UA(true,self::isHost2chs($purl['host']))); + $req->setHeader ('Acecpt-Language', 'ja,en-us;q=0.7,en;q=0.3'); + $req->setHeader ('Accept', '*/*'); + $req->setHeader ('Accept-Encoding', 'gzip, deflate'); + // �^�C���A�E�g�̐ݒ� $req->setConfig (array ( 'connect_timeout' => $_conf['http_conn_timeout'], @@ -2265,7 +2269,7 @@ static public function getHTTPRequest2($url , $method = HTTP_Request2::METHOD_GE )); // SSL�̐ݒ� - if($protocol == 'https') { + if($purl['scheme'] == 'https') { $req->setAdapter($_conf['ssl_function']); if($_conf['ssl_capath']) @@ -2284,6 +2288,8 @@ static public function getHTTPRequest2($url , $method = HTTP_Request2::METHOD_GE )); } + unset ($purl); + return $req; } diff --git a/lib/SettingTxt.php b/lib/SettingTxt.php index 215b4c3db..4c4202378 100644 --- a/lib/SettingTxt.php +++ b/lib/SettingTxt.php @@ -104,9 +104,6 @@ public function downloadSettingTxt() $req = P2Util::getHTTPRequest2($this->_url, HTTP_Request2::METHOD_GET); $modified && $req->setHeader("If-Modified-Since", $modified); - // API���g�p����ݒ�ő��肪2ch��������API��UA�𑗂� - $req->setHeader('User-Agent', P2Util::getP2UA(true,P2Util::isHost2chs($this->host))); - $response = $req->send(); $code = $response->getStatus(); diff --git a/lib/SubjectTxt.php b/lib/SubjectTxt.php index a3c84573c..5519933aa 100644 --- a/lib/SubjectTxt.php +++ b/lib/SubjectTxt.php @@ -99,9 +99,6 @@ public function downloadSubject() $req = P2Util::getHTTPRequest2($this->subject_url, HTTP_Request2::METHOD_GET); $modified && $req->setHeader("If-Modified-Since", $modified); - // API���g�p����ݒ�ő��肪2ch��������API��UA�𑗂� - $req->setHeader('User-Agent', P2Util::getP2UA(true,P2Util::isHost2chs($this->host))); - $response = $req->send(); $code = $response->getStatus(); diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index eb4c533d1..a54169200 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -184,7 +184,6 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { // �w�b�_ $req->setHeader ('User-Agent', $ReadUA); - $req->setHeader ('Accept-Encoding', "gzip, deflate"); if (! empty ($_GET['one'])) { // >>1�v���r���[�̎��̓T�[�o�[�ɍŏ��̕����������� @@ -356,9 +355,7 @@ protected function _downloadDat2ch($from_bytes) { try { $req = P2Util::getHTTPRequest2 ($url, HTTP_Request2::METHOD_GET); // �w�b�_ - $req->setHeader ('User-Agent', P2Util::getP2UA (true)); $req->setHeader ('Referer', "http://{$purl['host']}/{$this->bbs}/"); - $req->setHeader ('Accept-Encoding', "gzip, deflate"); if (! empty ($_GET['one'])) { // >>1�v���r���[�̎��̓T�[�o�[�ɍŏ��̕����������� @@ -524,7 +521,6 @@ protected function _downloadDat2chMaru($uaMona, $SID2ch, $shirokuma = false) { $req = P2Util::getHTTPRequest2 ($url, HTTP_Request2::METHOD_GET); // �w�b�_ $req->setHeader ('User-Agent', "{$uaMona} ({$_conf['p2ua']})"); - $req->setHeader ('Accept-Encoding', "gzip, deflate"); // Request�̑��M $response = $req->send (); @@ -612,10 +608,6 @@ protected function _downloadDat2chKako($uri, $ext) { try { $req = P2Util::getHTTPRequest2 ($url, HTTP_Request2::METHOD_GET); - // �w�b�_ - $req->setHeader ('User-Agent', P2Util::getP2UA(true)); - $req->setHeader ('Accept-Encoding', "gzip, deflate"); - // Request�̑��M $response = $req->send (); @@ -710,7 +702,6 @@ public function get2chDatError($code = null) { $req = P2Util::getHTTPRequest2 ($read_url, HTTP_Request2::METHOD_GET); // �w�b�_ $req->setHeader ('User-Agent', P2Util::getP2UA(false,P2Util::isHost2chs($this->host))); // �����́A"Monazilla/" ���‚����NG - $req->setHeader ('Accept-Encoding', "gzip, deflate"); // Request�̑��M $response = $req->send (); diff --git a/lib/wiki/P2UtilWiki.php b/lib/wiki/P2UtilWiki.php index 52d31c5ad..d79c6316c 100644 --- a/lib/wiki/P2UtilWiki.php +++ b/lib/wiki/P2UtilWiki.php @@ -41,9 +41,6 @@ public static function getResponseCode($url) { try { $req = P2Util::getHTTPRequest2 ($url, HTTP_Request2::METHOD_HEAD); - - $req->setHeader('User-Agent', 'Monazilla/1.00'); - return $response->getStatus(); } catch (Exception $e) { diff --git a/rep2/dig2ch.php b/rep2/dig2ch.php index ed015569c..063d88896 100644 --- a/rep2/dig2ch.php +++ b/rep2/dig2ch.php @@ -13,9 +13,10 @@ function dig2chsearch($query) try { $req = P2Util::getHTTPRequest2 ($url, HTTP_Request2::METHOD_GET); - $req->setHeader('User-Agent', $_SERVER['HTTP_USER_AGENT']); - $req->setHeader('Acecpt-Language', 'ja'); - $req->setHeader('Accept', '*/*'); + // $req->setHeader('User-Agent', $_SERVER['HTTP_USER_AGENT']); �����Monazilla������Ƃ��������ǂ������� + $req->setHeader('Accept-Charset', 'utf-8'); + $req->setHeader('Cache-Control', 'no-cache'); + $req->setHeader('Accept', 'application/json'); $response = $req->send(); diff --git a/rep2/post.php b/rep2/post.php index d90508a03..a35b337b8 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -389,7 +389,6 @@ function postIt($host, $bbs, $key, $post) $req = P2Util::getHTTPRequest2 ($bbs_cgi_url,HTTP_Request2::METHOD_POST); // �w�b�_ - $req->setHeader('User-Agent', P2Util::getP2UA(true, P2Util::isHost2chs($host))); $req->setHeader('Referer', "http://{$host}/{$bbs}/{$key}/"); // �N�b�L�[ From 214b4a99d95308632b21066bcfe16c39d99964fa Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Tue, 7 Apr 2015 11:49:28 +0900 Subject: [PATCH 120/339] =?UTF-8?q?NG=E3=81=82=E3=81=BC=E3=83=BC=E3=82=93?= =?UTF-8?q?=E3=81=AE=E5=AF=BE=E8=B1=A1=E3=81=AB=E3=81=AA=E3=81=A3=E3=81=9F?= =?UTF-8?q?=E3=83=AC=E3=82=B9=E3=81=AEID=E3=82=92=E8=87=AA=E5=8B=95?= =?UTF-8?q?=E7=9A=84=E3=81=ABNG=E3=81=82=E3=81=BC=E3=83=BC=E3=82=93?= =?UTF-8?q?=E3=81=99=E3=82=8B=E6=A9=9F=E8=83=BD=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- conf/conf_user_def.inc.php | 4 +++ lib/NgAbornCtl.php | 58 +++++++++++++++++++++++++++++--------- lib/ShowThread.php | 45 +++++++++++++++++++++++++++++ rep2/edit_conf_user.php | 1 + rep2/editpref.php | 11 ++++++-- 6 files changed, 104 insertions(+), 17 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 04b38cf6f..fcb695736 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150406.2211', // rep2�̃o�[�W���� + 'p2version' => '150407.1000', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index 47fd3d13f..970660c4c 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -374,6 +374,10 @@ $conf_user_def['ngaborn_chain'] = 0; // (0) $conf_user_rad['ngaborn_chain'] = array('1' => '����', '0' => '���Ȃ�', '2' => '���ׂ�NG�ɂ���'); +// NG���ځ[��̑ΏۂɂȂ������X��ID�������I��NG���ځ[�񂷂�(����:1, ���Ȃ�:0 NG�ɂ���:2) +$conf_user_def['ngaborn_auto'] = 0; // (0) +$conf_user_rad['ngaborn_auto'] = array('1' => '����', '0' => '���Ȃ�'); + // �\���͈͊O�̃��X���A��NG���ځ[��̑Ώۂɂ���(����:1, ���Ȃ�:0) // �������y�����邽�߁A�f�t�H���g�ł͂��Ȃ� $conf_user_def['ngaborn_chain_all'] = 0; // (0) diff --git a/lib/NgAbornCtl.php b/lib/NgAbornCtl.php index c16402b8f..cee8c5e03 100644 --- a/lib/NgAbornCtl.php +++ b/lib/NgAbornCtl.php @@ -14,12 +14,14 @@ 'aborn_name' => 0, 'aborn_res' => 0, 'aborn_thread' => 0, + 'aborn_auto' => 0, 'ng_chain' => 0, 'ng_freq' => 0, 'ng_id' => 0, 'ng_mail' => 0, 'ng_msg' => 0, 'ng_name' => 0, + 'ng_auto' => 0, 'highlight_chain' => 0, 'highlight_id' => 0, 'highlight_mail' => 0, @@ -30,8 +32,7 @@ // }}} // {{{ NgAbornCtl -class NgAbornCtl -{ +class NgAbornCtl { // {{{ saveNgAborns() /** @@ -40,8 +41,7 @@ class NgAbornCtl * @param void * @return void */ - static public function saveNgAborns() - { + static public function saveNgAborns() { global $ngaborns, $ngaborns_hits; global $_conf; @@ -116,8 +116,7 @@ static public function saveNgAborns() * @param array $aborn_threads * @return void */ - static public function saveAbornThreads(array $aborn_threads) - { + static public function saveAbornThreads(array $aborn_threads) { if (array_key_exists('ngaborns', $GLOBALS)) { $orig_ngaborns = $GLOBALS['ngaborns']; $restore_ngaborns = true; @@ -141,8 +140,7 @@ static public function saveAbornThreads(array $aborn_threads) /** * NG���ځ[��HIT�L�^���X�V���ԂŃ\�[�g���� */ - static public function cmpLastTime($a, $b) - { + static public function cmpLastTime($a, $b) { if (empty($a['lasttime']) || empty($b['lasttime'])) { return strcmp($a['lasttime'], $b['lasttime']); } @@ -161,8 +159,8 @@ static public function cmpLastTime($a, $b) * @param void * @return array */ - static public function loadNgAborns() - { + static public function loadNgAborns() { + global $_conf; $ngaborns = array(); $ngaborns['aborn_res'] = self::_readNgAbornFromFile('p2_aborn_res.txt'); // ���ꂾ���������i���قȂ� @@ -183,6 +181,12 @@ static public function loadNgAborns() $ngaborns['highlight_msg'] = self::_readNgAbornFromFile('p2_highlight_msg.txt'); $ngaborns['highlight_id'] = self::_readNgAbornFromFile('p2_highlight_id.txt'); + if ($_conf['ngaborn_auto']) { + // ����NG + $ngaborns['aborn_auto'] = self::_readNgAbornFromFile('p2_aborn_auto.txt'); + $ngaborns['ng_auto'] = self::_readNgAbornFromFile('p2_ng_auto.txt'); + } + return $ngaborns; } @@ -195,19 +199,45 @@ static public function loadNgAborns() * @param void * @return array */ - static public function loadAbornThreads() - { + static public function loadAbornThreads() { return self::_readNgAbornFromFile('p2_aborn_thread.txt'); } + // }}} + // {{{ ngAbornAdd() + /** + * ���ځ[��&NG���[�h�ݒ��lj����� + * + * @param string �ǂ��ɒlj����邩 + * @param string �lj�������e + * @return bool �o�^���ꂽ��true + */ + static public function ngAbornAdd($code, $word) { + global $ngaborns; + foreach ($ngaborns[$code]['data'] as $data) { + if ($data['cond'] === $word) { + return false; //���‚�������lj������ɔ����� + } + } + + // �lj� + $ngaborns[$code]['data'][] = array( + 'cond' => $word, // �������� + 'word' => $word, // �Ώە����� + 'lasttime' => null, // �Ō��HIT�������� + 'hits' => 0, // HIT�� + 'regex' => false, // �p�^�[���}�b�`�֐� + 'ignorecase' => false, // �啶���������𖳎� + ); + return; + } // }}} // {{{ _readNgAbornFromFile() /** * readNgAbornFromFile */ - static protected function _readNgAbornFromFile($filename) - { + static protected function _readNgAbornFromFile($filename) { global $_conf; $file = $_conf['pref_dir'] . '/' . $filename; diff --git a/lib/ShowThread.php b/lib/ShowThread.php index 5f0676026..a4fc233a2 100644 --- a/lib/ShowThread.php +++ b/lib/ShowThread.php @@ -726,20 +726,40 @@ protected function _ngAbornCheck($i, $name, $mail, $date_id, $id, $msg, $nong = // }}} // {{{ ���ځ[��`�F�b�N + if ($_conf['ngaborn_auto']) {//�������ځ[�� + // �������ځ[��ID + if ($this->ngAbornCheck('aborn_auto', $date_id) !== false) { + $ngaborns_hits['aborn_auto']++; + return $this->_markNgAborn($i, self::ABORN, false); + } + } + // ���ځ[�񃌃X if ($this->abornResCheck($i) !== false) { + if ($_conf['ngaborn_auto']) { + //�������ځ[��Ȃ�ID��lj� + NgAbornCtl::ngAbornAdd('aborn_auto', $id); + } $ngaborns_hits['aborn_res']++; return $this->_markNgAborn($i, self::ABORN, false); } // ���ځ[��l�[�� if ($this->ngAbornCheck('aborn_name', $name) !== false) { + if ($_conf['ngaborn_auto']) { + //�������ځ[��Ȃ�ID��lj� + NgAbornCtl::ngAbornAdd('aborn_auto', $id); + } $ngaborns_hits['aborn_name']++; return $this->_markNgAborn($i, self::ABORN, false); } // ���ځ[�񃁁[�� if ($this->ngAbornCheck('aborn_mail', $mail) !== false) { + if ($_conf['ngaborn_auto']) { + //�������ځ[��Ȃ�ID��lj� + NgAbornCtl::ngAbornAdd('aborn_auto', $id); + } $ngaborns_hits['aborn_mail']++; return $this->_markNgAborn($i, self::ABORN, false); } @@ -752,6 +772,10 @@ protected function _ngAbornCheck($i, $name, $mail, $date_id, $id, $msg, $nong = // ���ځ[�񃁃b�Z�[�W if ($this->ngAbornCheck('aborn_msg', $msg) !== false) { + if ($_conf['ngaborn_auto']) { + //�������ځ[��Ȃ�ID��lj� + NgAbornCtl::ngAbornAdd('aborn_auto', $id); + } $ngaborns_hits['aborn_msg']++; return $this->_markNgAborn($i, self::ABORN, true); } @@ -764,14 +788,31 @@ protected function _ngAbornCheck($i, $name, $mail, $date_id, $id, $msg, $nong = // {{{ NG�`�F�b�N + if ($_conf['ngaborn_auto']) {//�������ځ[�� + // ����NGID����NG���� + if ($this->ngAbornCheck('ng_auto', $date_id) !== false) { + $ngaborns_hits['ng_auto']++; + $type |= $this->_markNgAborn($i, self::NG_ID, false); + $autong_done = true; //����NGID�̑ΏۂɂȂ������X�͈Ӗ��������̂�NGID�ɒlj����Ȃ� + } + } + // NG�l�[���`�F�b�N if ($this->ngAbornCheck('ng_name', $name) !== false) { + if ($_conf['ngaborn_auto'] && !$autong_done) { + //�������ځ[��Ȃ�ID��lj� + $add_done = NgAbornCtl::ngAbornAdd('ng_auto', $id); + } $ngaborns_hits['ng_name']++; $type |= $this->_markNgAborn($i, self::NG_NAME, false); } // NG���[���`�F�b�N if ($this->ngAbornCheck('ng_mail', $mail) !== false) { + if ($_conf['ngaborn_auto'] && !$autong_done && !$add_done) { + //�������ځ[��Ȃ�ID��lj� + $add_done = NgAbornCtl::ngAbornAdd('ng_auto', $id); + } $ngaborns_hits['ng_mail']++; $type |= $this->_markNgAborn($i, self::NG_MAIL, false); } @@ -785,6 +826,10 @@ protected function _ngAbornCheck($i, $name, $mail, $date_id, $id, $msg, $nong = // NG���b�Z�[�W�`�F�b�N $a_ng_msg = $this->ngAbornCheck('ng_msg', $msg); if ($a_ng_msg !== false) { + if ($_conf['ngaborn_auto'] && !$autong_done && !$add_done) { + //�������ځ[��Ȃ�ID��lj� + $add_done = NgAbornCtl::ngAbornAdd('ng_auto', $id); + } $ngaborns_hits['ng_msg']++; $type |= $this->_markNgAborn($i, self::NG_MSG, true); $info[] = sprintf('NG%s:%s', diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index adb229a2f..6eee5da17 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -358,6 +358,7 @@ array('ngaborn_frequent_num', '�p�oID���ځ[��̂������l (�o���񐔂�����ȏ��ID�����ځ[��)'), array('ngaborn_frequent_dayres', '�����̑����X���ł͕p�oID���ځ[�񂵂Ȃ�<br>(�����X��/�X�����Ă���̓����A0�Ȃ疳��)'), array('ngaborn_chain', '�A��NG���ځ[��<br>�u����v�Ȃ炠�ځ[�񃌃X�ւ̃��X�͂��ځ[��ANG���X�ւ̃��X��NG�B<br>�u���ׂ�NG�ɂ���v�̏ꍇ�A���ځ[�񃌃X�ւ̃��X��NG�ɂ���B'), + array('ngaborn_auto', 'NG���ځ[��̑ΏۂɂȂ������X��ID�������I��NG���ځ[�񂷂�<br>�u����v�Ȃ炠�ځ[�񃌃X��ID�͂��ځ[��ANG���X��ID��NG�B'), array('ngaborn_chain_all', '�\���͈͊O�̃��X���A��NG/���ځ[��/�n�C���C�g�̑Ώۂɂ���<br>(�������y�����邽�߁A�f�t�H���g�ł͂��Ȃ�)'), array('ngaborn_daylimit', '���̊��ԁANG/���ځ[��/�n�C���C�g��HIT���Ȃ���΁A�o�^���[�h�������I�ɊO�� (����)'), array('ngaborn_purge_aborn', '���ځ[�񃌃X�͕s�Ž�div�u���b�N���`�悵�Ȃ�'), diff --git a/rep2/editpref.php b/rep2/editpref.php index 83f84ff63..20effc447 100644 --- a/rep2/editpref.php +++ b/rep2/editpref.php @@ -111,6 +111,12 @@ $delflag = true; } break; + case autong: + if(deleteFile($_conf['pref_dir'] . '/p2_aborn_auto.txt') && + deleteFile($_conf['pref_dir'] . '/p2_ng_auto.txt') ) { + $delflag = true; + } + break; default: $delflag = false; P2Util::pushInfoHtml("<p>p2 error: ���� {$_POST['delete']} ���s���ł��B "); @@ -339,9 +345,10 @@ function deleteCheck(submit){ EOP; echo getDeleteHistoryFormHt('cookie', 'Cookie'); - echo getDeleteHistoryFormHt('matome', '�V���܂Ƃߓǂ�'); + echo getDeleteHistoryFormHt('matome', '�܂Ƃߓǂ�'); echo getDeleteHistoryFormHt('reshist', '��������'); - echo getDeleteHistoryFormHt('recent', '�ŋߓǂ񂾃X��'); + echo getDeleteHistoryFormHt('recent', '�{������'); + echo getDeleteHistoryFormHt('autong', '����NG��ް�'); echo <<<EOP </fieldset>\n EOP; From 220f8bc008c128fcf07de3f0124656544e8104f7 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Wed, 8 Apr 2015 12:44:10 +0900 Subject: [PATCH 121/339] v150408.1234 --- conf/conf.inc.php | 2 +- doc/README-774.txt | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index fcb695736..926142da6 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150407.1000', // rep2�̃o�[�W���� + 'p2version' => '150408.1234', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/doc/README-774.txt b/doc/README-774.txt index c3755f301..8ff07bb3a 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -18,6 +18,7 @@ rep2-expack test https://github.com/orzisun/p2-php * cron�Ƃ��ōŋߓǂ񂾃X���Ȃǂ�dat��DL�o����X�N���v�g�lj� * �{�Ƃ���be�̃��O�C���������ڐA����BE2.0�ɑΉ� * ���������ߌ��ɂȂ�‚ɖ������ŏ������ނƂ��Ɍx�����o���@�\��lj� +* NG���ځ[��̑ΏۂɂȂ������X��ID�������I��NG���ځ[�񂷂�@�\��lj� * ���̑������̃A���ɍ��킹���C����git�̃R�~�b�g���O���m�F���Ă��������B ���Ɛ� @@ -37,6 +38,11 @@ rep2-expack test https://github.com/orzisun/p2-php �{��p2�Ɠ������AX11���C�Z���X�ł��B ��ChangeLog +150408.1234 +* NG���ځ[��̑ΏۂɂȂ������X��ID�������I��NG���ځ[�񂷂�@�\��lj� +* HTTP�ʐM�̃w�b�_�������� +* dig2ch.php�ʼn�̓G���[�����������ۂɏڍ׏����o���悤�ɕύX + 150406.2211 * �ߌ��‚Ɩ������ŏ������݂ł��Ȃ��‚̏����𐳂������삷��悤�ɏC�� * �������ŏ����o���Ȃ��‚͏������ݑ��s�ł��Ȃ��悤�ɕύX From 9227716b6a9650f49e562ba55166f405743c4477 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 9 Apr 2015 11:04:15 +0900 Subject: [PATCH 122/339] =?UTF-8?q?=E3=82=B9=E3=83=9E=E3=83=9B=E5=90=91?= =?UTF-8?q?=E3=81=91=E6=94=B9=E8=89=AF=E3=81=AE=E4=B8=8B=E6=BA=96=E5=82=99?= =?UTF-8?q?=20lib/ShowThreadK.php=E3=81=8B=E3=82=89=20lib/ShowThreadI.php?= =?UTF-8?q?=E3=82=92=E7=8B=AC=E7=AB=8B=E3=81=95=E3=81=9B=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ShowThreadI.php | 1437 +++++++++++++++++++++++++++++++++++++++++ lib/ShowThreadK.php | 239 ++----- lib/startup.funcs.php | 2 +- rep2/read.php | 8 +- 4 files changed, 1483 insertions(+), 203 deletions(-) create mode 100644 lib/ShowThreadI.php diff --git a/lib/ShowThreadI.php b/lib/ShowThreadI.php new file mode 100644 index 000000000..d85e0310d --- /dev/null +++ b/lib/ShowThreadI.php @@ -0,0 +1,1437 @@ +<?php +/** + * rep2 - �g�їp�ŃX���b�h��\������ �N���X + */ + +require_once P2EX_LIB_DIR . '/ExpackLoader.php'; + +ExpackLoader::loadAAS(); +ExpackLoader::loadActiveMona(); +ExpackLoader::loadImageCache(); + +// {{{ ShowThreadI + +class ShowThreadI extends ShowThread +{ + // {{{ properties + + static private $_spm_objects = array(); + + public $am_autong = false; // ����AA�������邩�ۂ� + + public $aas_rotate = '90����]'; // AAS ��]�����N������ + + public $respopup_at = ' onclick="return iResPopUp(this, event);"'; // ���X�|�b�v�A�b�v�E�C�x���g�n���h�� + public $target_at = ' target="_blank"'; // ���p�A�ȗ��AID�ANG���̃����N�^�[�Q�b�g + public $check_st = 'check'; // �ȗ��ANG���̃����N������ + + public $spmObjName; // �X�}�[�g�|�b�v�A�b�v���j���[�pJavaScript�I�u�W�F�N�g�� + + private $_dateIdPattern; // ���t���������̌����p�^�[�� + private $_dateIdReplace; // ���t���������̒u�������� + + //private $_lineBreaksReplace; // �A��������s�̒u�������� + + private $_kushiYakiName = null; // BBQ�ɏĂ���Ă���Ƃ��̖��O�ړ��� + + // }}} + // {{{ constructor + + /** + * �R���X�g���N�^ + */ + public function __construct(ThreadRead $aThread, $matome = false) + { + parent::__construct($aThread, $matome); + + global $_conf, $STYLE; + + $this->_url_handlers = array( + 'plugin_linkThread', + 'plugin_link2chSubject', + ); + // +Wiki + if (isset($GLOBALS['replaceImageUrlCtl'])) { + $this->_url_handlers[] = 'plugin_replaceImageUrl'; + } + if (P2_IMAGECACHE_AVAILABLE == 2) { + $this->_url_handlers[] = 'plugin_imageCache2'; + } elseif ($_conf['mobile.use_picto']) { + $this->_url_handlers[] = 'plugin_viewImage'; + } + if ($_conf['mobile.link_youtube']) { + $this->_url_handlers[] = 'plugin_linkYouTube'; + } + $this->_url_handlers[] = 'plugin_linkURL'; + + if (!$_conf['mobile.bbs_noname_name']) { + $this->setBbsNonameName(); + } + + if (P2Util::isHost2chs($aThread->host)) { + $this->_kushiYakiName = ' </b>[�\{}@{}@{}-]<b> '; + } + + if ($_conf['mobile.date_zerosuppress']) { + $this->_dateIdPattern = '~^(?:' . date('Y|y') . ')/(?:0(\\d)|(\\d\\d))?(?:(/)0)?~'; + $this->_dateIdReplace = '$1$2$3'; + } else { + $this->_dateIdPattern = '~^(?:' . date('Y|y') . ')/~'; + $this->_dateIdReplace = ''; + } + + // �A��������s�̒u���������ݒ� + /* + if ($_conf['mobile.strip_linebreaks']) { + $ngword_color = $GLOBALS['STYLE']['mobile_read_ngword_color']; + if (strpos($ngword_color, '\\') === false && strpos($ngword_color, '$') === false) { + $this->_lineBreaksReplace = " <br><s><font color=\"{$ngword_color}\">***</font></s><br> "; + } else { + $this->_lineBreaksReplace = ' <br><s>***</s><br> '; + } + } else { + $this->_lineBreaksReplace = null; + } + */ + + // �T���l�C���\����������ݒ� + if (!isset($GLOBALS['pre_thumb_unlimited']) || !isset($GLOBALS['expack.ic2.pre_thumb_limit_k'])) { + if (isset($_conf['expack.ic2.pre_thumb_limit_k']) && $_conf['expack.ic2.pre_thumb_limit_k'] > 0) { + $GLOBALS['pre_thumb_limit_k'] = $_conf['expack.ic2.pre_thumb_limit_k']; + $GLOBALS['pre_thumb_unlimited'] = false; + } else { + $GLOBALS['pre_thumb_limit_k'] = null; // �k���l����isset()��false��Ԃ� + $GLOBALS['pre_thumb_unlimited'] = true; + } + } + $GLOBALS['pre_thumb_ignore_limit'] = false; + + // �A�N�e�B�u���i�[������ + if (P2_ACTIVEMONA_AVAILABLE) { + ExpackLoader::initActiveMona($this); + } + + // ImageCache2������ + if (P2_IMAGECACHE_AVAILABLE == 2) { + ExpackLoader::initImageCache($this); + } + + // AAS ������ + if (P2_AAS_AVAILABLE) { + ExpackLoader::initAAS($this); + } + + // SPM������ + //if ($this->_matome) { + // $this->spmObjName = sprintf('t%dspm%u', $this->_matome, crc32($this->thread->keydat)); + //} else { + $this->spmObjName = sprintf('spm%u', crc32($this->thread->keydat)); + //} + } + + // }}} + // {{{ transRes() + + /** + * Dat���X��HTML���X�ɕϊ����� + * + * @param string $ares dat��1���C�� + * @param int $i ���X�ԍ� + * @param string $pattern �n�C���C�g�p���K�\�� + * @return string + */ + public function transRes($ares, $i, $pattern = null) + { + global $_conf, $STYLE, $mae_msg; + + list($name, $mail, $date_id, $msg) = $this->thread->explodeDatLine($ares); + if (($id = $this->thread->ids[$i]) !== null) { + $idstr = 'ID:' . $id; + $date_id = str_replace($this->thread->idp[$i] . $id, $idstr, $date_id); + } else { + $idstr = null; + } + + // +Wiki:�u�����[�h + if (isset($GLOBALS['replaceWordCtl'])) { + $replaceWordCtl = $GLOBALS['replaceWordCtl']; + $name = $replaceWordCtl->replace('name', $this->thread, $ares, $i); + $mail = $replaceWordCtl->replace('mail', $this->thread, $ares, $i); + $date_id = $replaceWordCtl->replace('date', $this->thread, $ares, $i); + $msg = $replaceWordCtl->replace('msg', $this->thread, $ares, $i); + } + + $tores = ''; + if ($this->_matome) { + $res_id = "t{$this->_matome}r{$i}"; + } else { + $res_id = "r{$i}"; + } + + // NG���ځ[��`�F�b�N + $nong = !empty($_GET['nong']); + $ng_type = $this->_ngAbornCheck($i, strip_tags($name), $mail, $date_id, $id, $msg, $nong, $ng_info); + if ($ng_type == self::ABORN) { + return $this->_abornedRes($res_id); + } + if (!$nong && $this->am_autong && $this->activeMona->detectAA($msg)) { + $is_ng = array_key_exists($i, $this->_ng_nums); + $ng_type |= $this->_markNgAborn($i, self::NG_AA, true); + $ng_info[] = 'AA��'; + // AA��A��NG�Ώۂ���O���ꍇ + if (!$is_ng && $_conf['expack.am.autong_k'] == 2) { + unset($this->_ng_nums[$i]); + } + } + if ($ng_type != self::NG_NONE) { + $ngaborns_head_hits = self::$_ngaborns_head_hits; + $ngaborns_body_hits = self::$_ngaborns_body_hits; + } + + // {{{ ���O�Ɠ��t�EID�𒲐� + + // ���Ă��}�[�N��Z�k + if ($this->_kushiYakiName !== null && strpos($name, $this->_kushiYakiName) === 0) { + $name = substr($name, strlen($this->_kushiYakiName)); + // �f�t�H���g�̖��O�͏ȗ� + if ($name === $this->_nanashiName) { + $name = '[��]'; + } else { + $name = '[��]' . $name; + } + // �f�t�H���g�̖��O�Ɠ����Ȃ�ȗ� + } elseif ($name === $this->_nanashiName) { + $name = ''; + } + + // ���݂̔N���͏ȗ��J�b�g����B�����̐擪0���J�b�g�B + $date_id = preg_replace($this->_dateIdPattern, $this->_dateIdReplace, $date_id); + + // �j���Ǝ��Ԃ̊Ԃ��l�߂� + $date_id = str_replace(') ', ')', $date_id); + + // �b���J�b�g + if ($_conf['mobile.clip_time_sec']) { + $date_id = preg_replace('/(\\d\\d:\\d\\d):\\d\\d(?:\\.\\d\\d)?/', '$1', $date_id); + } + + // ID + if ($id !== null) { + $id_suffix = substr($id, -1); + + if ($_conf['mobile.underline_id'] && $id_suffix == 'O' && strlen($id) % 2) { + $do_underline_id_suffix = true; + } else { + $do_underline_id_suffix = false; + } + + if ($this->thread->idcount[$id] > 1) { + if ($_conf['flex_idpopup'] == 1) { + $date_id = str_replace($idstr, $this->idFilter($idstr, $id), $date_id); + } + if ($do_underline_id_suffix) { + $date_id = str_replace($idstr, substr($idstr, 0, -1) . '<u>' . $id_suffix . '</u>', $date_id); + } + } else { + if ($_conf['mobile.clip_unique_id']) { + if ($do_underline_id_suffix) { + $date_id = str_replace($idstr, 'ID:*<u>' . $id_suffix . '</u>', $date_id); + } else { + $date_id = str_replace($idstr, 'ID:*' . $id_suffix, $date_id); + } + } else { + if ($do_underline_id_suffix) { + $date_id = str_replace($idstr, substr($idstr, 0, -1) . '<u>' . $id_suffix . '</u>', $date_id); + } + } + } + } else { + if ($_conf['mobile.clip_unique_id']) { + $date_id = str_replace('ID:???', 'ID:?', $date_id); + } + } + + // }}} + + //============================================================= + // �܂Ƃ߂ďo�� + //============================================================= + + if ($name) { + $name = $this->transName($name); // ���OHTML�ϊ� + } + $msg = $this->transMsg($msg, $i); // ���b�Z�[�WHTML�ϊ� + + // BE�v���t�@�C�������N�ϊ� + $date_id = $this->replaceBeId($date_id, $i); + + // NG���b�Z�[�W�ϊ� + if ($ng_type != self::NG_NONE && count($ng_info)) { + $ng_info = implode(', ', $ng_info); + if ($ng_type == self::NG_AA) { + $msg = <<<EOMSG +<a class="button" href="{$_conf['read_php']}?host={$this->thread->host}&bbs={$this->thread->bbs}&key={$this->thread->key}&ls={$i}&k_continue=1&nong=1{$_conf['k_at_a']}"{$this->respopup_at}{$this->target_at}>{$ng_info}</a> +EOMSG; + } else { + $msg = <<<EOMSG +<s><font color="{$STYLE['mobile_read_ngword_color']}">{$ng_info}</font></s> <a class="button" href="{$_conf['read_php']}?host={$this->thread->host}&bbs={$this->thread->bbs}&key={$this->thread->key}&ls={$i}&k_continue=1&nong=1{$_conf['k_at_a']}"{$this->respopup_at}{$this->target_at}>{$this->check_st}</a> +EOMSG; + } + + // AAS + if (($ng_type & self::NG_AA) && P2_AAS_AVAILABLE) { + $aas_url = "aas.php?host={$this->thread->host}&bbs={$this->thread->bbs}&key={$this->thread->key}&resnum={$i}"; + if (P2_AAS_AVAILABLE == 2) { + $aas_txt = "<img src=\"{$aas_url}{$_conf['k_at_a']}&inline=1\">"; + } else { + $aas_txt = "AAS"; + } + $msg .= " <a class=\"aas limelight\" href=\"{$aas_url}&b=pc\" title=\">>{$i}\"{$this->target_at}>{$aas_txt}</a>"; + } + } + + // NG�l�[���ϊ� + if ($ng_type & self::NG_NAME) { + $name = <<<EONAME +<s><font color="{$STYLE['mobile_read_ngword_color']}">{$name}</font></s> +EONAME; + $msg = <<<EOMSG +<a class="button" href="{$_conf['read_php']}?host={$this->thread->host}&bbs={$this->thread->bbs}&key={$this->thread->key}&ls={$i}&k_continue=1&nong=1{$_conf['k_at_a']}"{$this->respopup_at}{$this->target_at}>{$this->check_st}</a> +EOMSG; + + // NG���[���ϊ� + } elseif ($ng_type & self::NG_MAIL) { + $mail = <<<EOMAIL +<s class="ngword" onmouseover="document.getElementById('ngn{$ngaborns_head_hits}').style.display = 'block';">{$mail}</s> +EOMAIL; + $msg = <<<EOMSG +<div id="ngn{$ngaborns_head_hits}" style="display:none;">{$msg}</div> +EOMSG; + + // NGID�ϊ� + } elseif ($ng_type & self::NG_ID) { + $date_id = <<<EOID +<s><font color="{$STYLE['mobile_read_ngword_color']}">{$date_id}</font></s> +EOID; + $msg = <<<EOMSG +<a class="button" href="{$_conf['read_php']}?host={$this->thread->host}&bbs={$this->thread->bbs}&key={$this->thread->key}&ls={$i}&k_continue=1&nong=1{$_conf['k_at_a']}"{$this->respopup_at}{$this->target_at}>{$this->check_st}</a> +EOMSG; + } + + /* + //�u��������V���v�摜��}�� + if ($i == $this->thread->readnum +1) { + $tores .= <<<EOP + <div><img src="img/image.png" alt="�V�����X" border="0" vspace="4"></div> +EOP; + } + */ + + $tores .= "<div id=\"{$res_id}\" class=\"res\"><div class=\"res-header\">"; + + $no_class = 'no'; + $no_onclick = ''; + + // �I���U�t���C�� + if ($this->thread->onthefly) { + $GLOBALS['newres_to_show_flag'] = true; + $no_class .= ' onthefly'; + // �V�����X�� + } elseif ($i > $this->thread->readnum) { + $GLOBALS['newres_to_show_flag'] = true; + $no_class .= ' newres'; + } + + // SPM + if ($_conf['expack.spm.enabled']) { + $no_onclick = " onclick=\"{$this->spmObjName}.show({$i},'{$res_id}',event)\""; + } + + // �ԍ� + $tores .= "<span class=\"{$no_class}\"{$no_onclick}>{$i}</span>"; + // ���O + $tores .= " <span class=\"name\">{$name}</span>"; + // ���[�� + $tores .= " <span class=\"mail\">{$mail}</span>"; + // ���t��ID + $tores .= " <span class=\"date-id\">{$date_id}</span></div>\n"; + // ���e + $tores .= "<div class=\"message\">{$msg}</div>"; + // �탌�X���X�g + if ($_conf['mobile.backlink_list'] == 1) { + $linkstr = $this->_quotebackListHtml($i, 2); + if (strlen($linkstr)) { + $tores .= '<br>' . $linkstr; + } + } + $tores .= "</div>\n"; // ���e��‚��� + + // �܂Ƃ߂ăt�B���^�F���� + if ($pattern) { + if (is_string($_conf['k_filter_marker'])) { + $tores = StrCtl::filterMarking($pattern, $tores, $_conf['k_filter_marker']); + } else { + $tores = StrCtl::filterMarking($pattern, $tores); + } + } + + // �S�p�p���X�y�[�X�J�i�𔼊p�� + if (!empty($_conf['mobile.save_packet'])) { + $tores = mb_convert_kana($tores, 'rnsk'); // CP932 ���� ask �� �� �� < �ɕϊ����Ă��܂��悤�� + } + + return array('body' => $tores, 'q' => ''); + } + + // }}} + // {{{ transName() + + /** + * ���O��HTML�p�ɕϊ����� + * + * @param string $name ���O + * @return string + */ + public function transName($name) + { + $name = strip_tags($name); + + // �g���b�v��z�X�g�t���Ȃ番������ + if (($pos = strpos($name, '��')) !== false) { + $trip = substr($name, $pos); + $name = substr($name, 0, $pos); + } else { + $trip = null; + } + + // ���������p���X�|�b�v�A�b�v�����N�� + if (strlen($name) && $name != $this->_nanashiName) { + $name = preg_replace_callback( + self::getAnchorRegex('/(?:^|%prefix%)%nums%/'), + array($this, '_quoteNameCallback'), $name + ); + } + + if ($trip) { + $name .= $trip; + } elseif ($name) { + // ����������� + $name = $name . ' '; + //if (in_array(0xF0 & ord(substr($name, -1)), array(0x80, 0x90, 0xE0))) { + // $name .= ' '; + //} + } + + return $name; + } + + // }}} + // {{{ transMsg() + + /** + * dat�̃��X���b�Z�[�W��HTML�\���p���b�Z�[�W�ɕϊ����� + * + * @param string $msg ���b�Z�[�W + * @param int $mynum ���X�ԍ� + * @return string + */ + public function transMsg($msg, $mynum) + { + global $_conf; + global $pre_thumb_ignore_limit; + + $ryaku = false; + + // 2ch���`����dat + if ($this->thread->dat_type == '2ch_old') { + $msg = str_replace('���M', ',', $msg); + $msg = preg_replace('/&(?=[^;])/', '&', $msg); + } + + // &�␳ + $msg = preg_replace('/&(?!#?\\w+;)/', '&', $msg); + + // >>1�̃����N����������O�� + // <a href="../test/read.cgi/accuse/1001506967/1" target="_blank">>>1</a> + $msg = preg_replace('{<[Aa] .+?>(>>\\d[\\d\\-]*)</[Aa]>}', '$1', $msg); + + // �傫������ + if (empty($_GET['k_continue']) && strlen($msg) > $_conf['mobile.res_size']) { + // <br>�ȊO�̃^�O���������A������؂�l�߂� + $msg = strip_tags($msg, '<br>'); + $msg = mb_strcut($msg, 0, $_conf['mobile.ryaku_size']); + $msg = preg_replace('/ *<[^>]*$/', '', $msg); + + // >>1, >1, ��1, ����1�����p���X�|�b�v�A�b�v�����N�� + $msg = preg_replace_callback( + self::getAnchorRegex('/%full%/'), + array($this, '_quoteResCallback'), $msg + ); + + $msg .= "<a href=\"{$_conf['read_php']}?host={$this->thread->host}&bbs={$this->thread->bbs}&key={$this->thread->key}&ls={$mynum}&k_continue=1&offline=1{$_conf['k_at_a']}\"{$this->respopup_at}{$this->target_at}>��</a>"; + return $msg; + } + + // �V�����X�̉摜�͕\�������𖳎�����ݒ�Ȃ� + if ($mynum > $this->thread->readnum && $_conf['expack.ic2.newres_ignore_limit_k']) { + $pre_thumb_ignore_limit = true; + } + + // �����̉��s�ƘA��������s������ + if ($_conf['mobile.strip_linebreaks']) { + $msg = $this->stripLineBreaks($msg /*, $this->_lineBreaksReplace*/); + } + + // ���p��URL�Ȃǂ������N + $msg = $this->transLink($msg); + + // Wikipedia�L�@�ւ̎��������N + if ($_conf['mobile._linkToWikipeida']) { + $msg = $this->_wikipediaFilter($msg); + } + + return $msg; + } + + // }}} + // {{{ _abornedRes() + + /** + * ���ځ[�񃌃X��HTML���擾���� + * + * @param string $res_id + * @return string + */ + protected function _abornedRes($res_id) + { + global $_conf; + + if ($_conf['ngaborn_purge_aborn']) { + return ''; + } + + return <<<EOP +<div id="{$res_id}" name="{$res_id}" class="res aborned"> </div>\n +EOP; + } + + // }}} + // {{{ getSpmObjJs() + + /** + * �X�}�[�g�|�b�v�A�b�v���j���[�ɕK�v�ȃX���b�h�����i�[����JavaScript�R�[�h���擾 + */ + public function getSpmObjJs($retry = false) + { + global $_conf; + + if (isset(self::$_spm_objects[$this->spmObjName])) { + return $retry ? self::$_spm_objects[$this->spmObjName] : ''; + } + + $ttitle_en = UrlSafeBase64::encode($this->thread->ttitle); + + $motothre_url = $this->thread->getMotoThread(); + $motothre_url = substr($motothre_url, 0, strlen($this->thread->ls) * -1); + + // �G�X�P�[�v + $_spm_title = StrCtl::toJavaScript($this->thread->ttitle_hc); + $_spm_url = addslashes($motothre_url); + $_spm_host = addslashes($this->thread->host); + $_spm_bbs = addslashes($this->thread->bbs); + $_spm_key = addslashes($this->thread->key); + $_spm_ls = addslashes($this->thread->ls); + $_spm_b = ($_conf['view_forced_by_query']) ? "&b={$_conf['b']}" : ''; + + $code = <<<EOJS +<script type="text/javascript"> +//<![CDATA[ +var {$this->spmObjName} = { + 'objName':'{$this->spmObjName}', + 'query':'&host={$_spm_host}&bbs={$_spm_bbs}&key={$_spm_key}&rescount={$this->thread->rescount}&ttitle_en={$ttitle_en}{$_spm_b}', + 'rc':'{$this->thread->rescount}', + 'title':'{$_spm_title}', + 'ttitle_en':'{$ttitle_en}', + 'url':'{$_spm_url}', + 'host':'{$_spm_host}', + 'bbs':'{$_spm_bbs}', + 'key':'{$_spm_key}', + 'ls':'{$_spm_ls}', + 'client':['{$_conf['b']}','{$_conf['client_type']}'] +}; +{$this->spmObjName}.show = (function(no,id,evt){SPM.show({$this->spmObjName},no,id,evt);}); +{$this->spmObjName}.hide = SPM.hide; // (function(evt){SPM.hide(evt);}); +//]]> +</script>\n +EOJS; + + self::$_spm_objects[$this->spmObjName] = $code; + + return $code; + } + + // }}} + // {{{ getSpmElementHtml() + + /** + * �X�}�[�g�|�b�v�A�b�v���j���[�p��HTML�𐶐����� + */ + static public function getSpmElementHtml() + { + global $_conf; + + return <<<EOP +<div id="spm"> +<div id="spm-reply"> + <span id="spm-reply-quote" onclick="SPM.replyTo(true)">>><span id="spm-num">???</span>�Ƀ��X</span> + <span id="spm-reply-noquote" onclick="SPM.replyTo(false)">[���p�Ȃ�]</span> +</div> +<div id="spm-action"><select id="spm-select-target"> + <option value="name">���O</option> + <option value="mail">���[��</option> + <option value="id" selected>ID</option> + <option value="msg">�{��</option> +</select>��<select id="spm-select-action"> + <option value="aborn" selected>���ځ[��</option> + <option value="ng">NG</option> +<!-- <option value="search">����</option> --> +</select><input type="button" onclick="SPM.doAction()" value="OK"></div> +<img id="spm-closer" src="img/iphone/close.png" width="24" height="26" onclick="SPM.hide(event)"> +</div> +EOP; + } + + // }}} + // {{{ idFilter() + + /** + * ID�t�B���^�����O�����N�ϊ� + * + * @param string $idstr ID:xxxxxxxxxx + * @param string $id xxxxxxxxxx + * @return string + */ + public function idFilter($idstr, $id) + { + global $_conf; + + //$idflag = ''; // �g��/PC���ʎq + // ID��8���܂���10��(+�g��/PC���ʎq)�Ɖ��肵�� + /* + if (strlen($id) % 2 == 1) { + $id = substr($id, 0, -1); + $idflag = substr($id, -1); + } elseif (isset($s[2])) { + $idflag = $s[2]; + } + */ + + $filter_url = $_conf['read_php'] . '?' . http_build_query(array( + 'host' => $this->thread->host, + 'bbs' => $this->thread->bbs, + 'key' => $this->thread->key, + 'ls' => 'all', + 'offline' => '1', + 'idpopup' => '1', + 'rf' => array( + 'field' => ResFilter::FIELD_ID, + 'method' => ResFilter::METHOD_JUST, + 'match' => ResFilter::MATCH_ON, + 'include' => ResFilter::INCLUDE_NONE, + 'word' => $id, + ), + ), '', '&') . $_conf['k_at_a']; + + if (isset($this->thread->idcount[$id]) && $this->thread->idcount[$id] > 0) { + $num_ht = "(<a href=\"{$filter_url}\"{$this->target_at}>{$this->thread->idcount[$id]}</a>)"; + } else { + return $idstr; + } + + return "{$idstr}{$num_ht}"; + } + + // }}} + // {{{ _linkToWikipeida() + + /** + * @see ShowThread + */ + protected function _linkToWikipeida($word) + { + global $_conf; + + $link = 'http://ja.wapedia.org/' . rawurlencode($word); + if ($_conf['through_ime']) { + $link = P2Util::throughIme($link); + } + + return "<a href=\"{$link}\">{$word}</a>"; + } + + // }}} + // {{{ quoteRes() + + /** + * ���p�ϊ��i�P�Ɓj + * + * @param string $full >>1-100 + * @param string $qsign >> + * @param string $appointed_num 1-100 + * @return string + */ + public function quoteRes($full, $qsign, $appointed_num) + { + global $_conf, $STYLE; + + if ($appointed_num == '-') { + return $full; + } + + $appointed_num = mb_convert_kana($appointed_num, 'n'); // �S�p�����𔼊p�����ɕϊ� + if (preg_match('/\\D/', $appointed_num)) { + $appointed_num = preg_replace('/\\D+/', '-', $appointed_num); + return $this->quoteResRange($full, $qsign, $appointed_num); + } + if (preg_match('/^0/', $appointed_num)) { + return $full; + } + $qnum = intval($appointed_num); + if ($qnum < 1 || $qnum > $this->thread->rescount) { + return $full; + } + + $read_url = "{$_conf['read_php']}?host={$this->thread->host}&bbs={$this->thread->bbs}&key={$this->thread->key}&offline=1&ls={$appointed_num}"; + return "<a href=\"{$read_url}{$_conf['k_at_a']}\"{$this->respopup_at}{$this->target_at}>" + . (in_array($qnum, $this->_aborn_nums) ? "<s><font color=\"{$STYLE['mobile_read_ngword_color']}\">{$full}</font></s>" : + (in_array($qnum, $this->_ng_nums) ? "<s>{$full}</s>" : "{$full}")) . "</a>"; + } + + // }}} + // {{{ quoteResRange() + + /** + * ���p�ϊ��i�͈́j + * + * @param string $full >>1-100 + * @param string $qsign >> + * @param string $appointed_num 1-100 + * @return string + */ + public function quoteResRange($full, $qsign, $appointed_num) + { + global $_conf; + + if ($appointed_num == '-') { + return $full; + } + + list($from, $to) = explode('-', $appointed_num); + if (!$from) { + $from = 1; + } elseif ($from < 1 || $from > $this->thread->rescount) { + return $full; + } + // read.php�ŕ\���͈͂𔻒肷��̂ŏ璷�ł͂��� + if (!$to) { + $to = min($from + $_conf['mobile.rnum_range'] - 1, $this->thread->rescount); + } else { + $to = min($to, $from + $_conf['mobile.rnum_range'] - 1, $this->thread->rescount); + } + + $read_url = "{$_conf['read_php']}?host={$this->thread->host}&bbs={$this->thread->bbs}&key={$this->thread->key}&offline=1&ls={$from}-{$to}"; + + return "<a href=\"{$read_url}{$_conf['k_at_a']}\"{$this->target_at}>{$full}</a>"; + } + + // }}} + // {{{ ktaiExtUrl() + + /** + * �g�їp�O��URL�ϊ� + * + * @param string $full + * @param string $url + * @param string $str + * @return string + */ + public function ktaiExtUrl($full, $url, $str) + { + global $_conf; + + // �ʋ΃u���E�U + $tsukin_link = ''; + if ($_conf['mobile.use_tsukin']) { + $tsukin_url = 'http://www.sjk.co.jp/c/w.exe?y=' . rawurlencode($url); + if ($_conf['through_ime']) { + $tsukin_url = P2Util::throughIme($tsukin_url); + } + $tsukin_link = '<a href="' . $tsukin_url . '">��</a>'; + } + + // jig�u���E�UWEB http://bwXXXX.jig.jp/fweb/?_jig_= + $jig_link = ''; + /* + $jig_url = 'http://bwXXXX.jig.jp/fweb/?_jig_=' . rawurlencode($url); + if ($_conf['through_ime']) { + $jig_url = P2Util::throughIme($jig_url); + } + $jig_link = '<a href="'.$jig_url.'">j</a>'; + */ + + if ($tsukin_link || $jig_link) { + $ext_pre = '(' . $tsukin_link . (($tsukin_link && $jig_link) ? '|' : '') . $jig_link . ')'; + } else { + $ext_pre = ''; + } + + if ($_conf['through_ime']) { + $url = P2Util::throughIme($url); + } + return $ext_pre . '<a href="' . $url . '">' . $str . '</a>'; + } + + // }}} + // {{{ ktaiExtUrlCallback() + + /** + * �g�їp�O��URL�ϊ� + * + * @param array $s ���K�\���Ƀ}�b�`�����v�f�̔z�� + * @return string + */ + public function ktaiExtUrlCallback(array $s) + { + return $this->ktaiExtUrl($s[0], $s[1], $s[2]); + } + + // }}} + // {{{ transLinkDo()����Ăяo�����URL�����������\�b�h + /** + * �����̃��\�b�h�͈����������Ώۃp�^�[���ɍ��v���Ȃ���false��Ԃ��A + * transLinkDo()��false���Ԃ��Ă����$_url_handlers�ɓo�^����Ă��鎟�̊֐�/���\�b�h�ɏ��������悤�Ƃ���B + */ + // {{{ plugin_linkURL() + + /** + * URL�����N + */ + public function plugin_linkURL($url, $purl, $str) + { + global $_conf; + + if (isset($purl['scheme'])) { + // �g�їp�O��URL�ϊ� + if ($_conf['mobile.use_tsukin']) { + return $this->ktaiExtUrl('', $purl[0], $str); + } + // ime + if ($_conf['through_ime']) { + $link_url = P2Util::throughIme($purl[0]); + } else { + $link_url = $url; + } + return "<a href=\"{$link_url}\">{$str}</a>"; + } + return false; + } + + // }}} + // {{{ plugin_link2chSubject() + + /** + * 2ch bbspink �ƒ����N + */ + public function plugin_link2chSubject($url, $purl, $str) + { + global $_conf; + + if (preg_match('{^http://(\\w+\\.(?:2ch\\.net|bbspink\\.com))/(\\w+)/$}', $purl[0], $m)) { + $subject_url = "{$_conf['subject_php']}?host={$m[1]}&bbs={$m[2]}"; + return "<a href=\"{$url}\">{$str}</a> [<a href=\"{$subject_url}{$_conf['k_at_a']}\">�‚�p2�ŊJ��</a>]"; + } + return false; + } + + // }}} + // {{{ plugin_linkThread() + + /** + * �X���b�h�����N + */ + public function plugin_linkThread($url, $purl, $str) + { + global $_conf; + + list($nama_url, $host, $bbs, $key, $ls) = P2Util::detectThread($purl[0]); + if ($host && $bbs && $key) { + $read_url = "{$_conf['read_php']}?host={$host}&bbs={$bbs}&key={$key}&ls={$ls}"; + return "<a href=\"{$read_url}{$_conf['k_at_a']}\">{$str}</a>"; + } + + return false; + } + + // }}} + // {{{ plugin_linkYouTube() + + /** + * YouTube�����N�ϊ��v���O�C�� + * + * Zend_Gdata_Youtube���g���΃T���l�C�����̑��̏����ȒP�Ɏ擾�ł��邪... + * + * @param string $url + * @param array $purl + * @param string $str + * @return string|false + */ + public function plugin_linkYouTube($url, $purl, $str) + { + global $_conf; + + // http://www.youtube.com/watch?v=Mn8tiFnAUAI + if (preg_match('{^http://(www|jp)\\.youtube\\.com/watch\\?v=([0-9A-Za-z_\\-]+)}', $purl[0], $m)) { + $subd = $m[1]; + $id = $m[2]; + + if ($_conf['mobile.link_youtube'] == 2) { + $link = $str; + } else { + $link = $this->plugin_linkURL($url, $purl, $str); + if ($link === false) { + // plugin_linkURL()�������Ƌ@�\���Ă�����肱���ɂ͗��Ȃ� + if ($_conf['through_ime']) { + $link_url = P2Util::throughIme($purl[0]); + } else { + $link_url = $url; + } + $link = "<a href=\"{$link_url}\">{$str}</a>"; + } + } + + return <<<EOP +{$link}<br><img src="http://img.youtube.com/vi/{$id}/default.jpg" alt="YouTube {$id}"> +EOP; + } + return false; + } + + // }}} + // {{{ plugin_viewImage() + + /** + * �摜�����N�ϊ� + */ + public function plugin_viewImage($url, $purl, $str) + { + global $_conf; + + if (P2Util::isUrlWikipediaJa($url)) { + return false; + } + + if (preg_match('{^https?://.+?\\.(jpe?g|gif|png)$}i', $url) && empty($purl['query'])) { + $picto_url = 'http://pic.to/'.$purl['host'].$purl['path']; + $picto_tag = '<a href="'.$picto_url.'">(��)</a> '; + if ($_conf['through_ime']) { + $link_url = P2Util::throughIme($purl[0]); + $picto_url = P2Util::throughIme($picto_url); + } else { + $link_url = $url; + } + return "{$picto_tag}<a href=\"{$link_url}\">{$str}</a>"; + } + + return false; + } + + // }}} + // {{{ plugin_imageCache2() + + /** + * �摜URL��ImageCache2�ϊ� + */ + public function plugin_imageCache2($url, $purl, $str) + { + global $_conf; + global $pre_thumb_unlimited, $pre_thumb_ignore_limit, $pre_thumb_limit_k; + + if (P2Util::isUrlWikipediaJa($url)) { + return false; + } + + if (preg_match('{^https?://.+?\\.(jpe?g|gif|png)$}i', $purl[0]) && empty($purl['query'])) { + // �C�����C���v���r���[�̗L������ + if ($pre_thumb_unlimited || $pre_thumb_ignore_limit || $pre_thumb_limit_k > 0) { + $inline_preview_flag = true; + $inline_preview_done = false; + } else { + $inline_preview_flag = false; + $inline_preview_done = false; + } + + $url_ht = $url; + $url = $purl[0]; + $url_en = rawurlencode($url); + $img_str = null; + $img_id = null; + + $icdb = new ImageCache2_DataObject_Images(); + + // r=0:�����N;r=1:���_�C���N�g;r=2:PHP�ŕ\�� + // t=0:�I���W�i��;t=1:PC�p�T���l�C��;t=2:�g�їp�T���l�C��;t=3:���ԃC���[�W + $img_url = 'ic2.php?r=0&t=2&uri=' . $url_en; + $img_url2 = 'ic2.php?r=0&t=2&id='; + $src_url = 'ic2.php?r=1&t=0&uri=' . $url_en; + $src_url2 = 'ic2.php?r=1&t=0&id='; + $src_exists = false; + + // ���C�ɃX�������摜�����N + $rank = null; + if ($_conf['expack.ic2.fav_auto_rank']) { + $rank = $this->getAutoFavRank(); + } + + // DB�ɉ摜��񂪓o�^����Ă����Ƃ� + if ($icdb->get($url)) { + $img_id = $icdb->id; + + // �E�B���X�Ɋ������Ă����t�@�C���̂Ƃ� + if ($icdb->mime == 'clamscan/infected') { + return '[IC2:�E�B���X�x��]'; + } + // ���ځ[��摜�̂Ƃ� + if ($icdb->rank < 0) { + return '[IC2:���ځ[��摜]'; + } + + // �I���W�i���̗L�����m�F + $_src_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime); + if (file_exists($_src_url)) { + $src_exists = true; + $img_url = $img_url2 . $icdb->id; + $src_url = $_src_url; + } else { + $img_url = $this->thumbnailer->thumbUrl($icdb->size, $icdb->md5, $icdb->mime); + $src_url = $src_url2 . $icdb->id; + } + + // �C�����C���v���r���[���L���̂Ƃ� + $prv_url = null; + if ($this->thumbnailer->ini['General']['inline'] == 1) { + // PC��read_new_k.php�ɃA�N�Z�X�����Ƃ��� + if (!isset($this->inline_prvw) || !is_object($this->inline_prvw)) { + $this->inline_prvw = $this->thumbnailer; + } + $prv_url = $this->inline_prvw->thumbUrl($icdb->size, $icdb->md5, $icdb->mime); + + // �T���l�C���\���������ȓ��̂Ƃ� + if ($inline_preview_flag) { + // �v���r���[�摜������Ă��邩�ǂ�����img�v�f�̑��������� + if (file_exists($prv_url)) { + $prv_size = explode('x', $this->inline_prvw->calc($icdb->width, $icdb->height)); + $img_str = "<img src=\"{$prv_url}\" width=\"{$prv_size[0]}\" height=\"{$prv_size[1]}\">"; + } else { + $r_type = ($this->thumbnailer->ini['General']['redirect'] == 1) ? 1 : 2; + if ($src_exists) { + $prv_url = "ic2.php?r={$r_type}&t=1&id={$icdb->id}"; + } else { + $prv_url = "ic2.php?r={$r_type}&t=1&uri={$url_en}"; + } + $prv_url .= $this->img_dpr_query; + if ($this->img_dpr === 1.5 || $this->img_dpr === 2.0) { + $prv_onload = sprintf(' onload="autoAdjustImgSize(this, %f);"', $this->img_dpr); + } else { + $prv_onload = ''; + } + $img_str = "<img src=\"{$prv_url}\"{$prv_onload} width=\"{$prv_size[0]}\" height=\"{$prv_size[1]}\">"; + } + $inline_preview_done = true; + } else { + $img_str = '[p2:�����摜(�ݸ:' . $icdb->rank . ')]'; + } + } + + // �����X���^�C�����@�\��ON�ŃX���^�C���L�^����Ă��Ȃ��Ƃ���DB���X�V + if (!is_null($this->img_memo) && strpos($icdb->memo, $this->img_memo) === false) { + $update = new ImageCache2_DataObject_Images(); + if (!is_null($icdb->memo) && strlen($icdb->memo) > 0) { + $update->memo = $this->img_memo . ' ' . $icdb->memo; + } else { + $update->memo = $this->img_memo; + } + $update->whereAddQuoted('uri', '=', $url); + } + + // expack.ic2.fav_auto_rank_override �̐ݒ�ƃ����N������OK�Ȃ� + // ���C�ɃX�������摜�����N���㏑���X�V + if ($rank !== null && self::isAutoFavRankOverride($icdb->rank, $rank)) { + if ($update === null) { + $update = new ImageCache2_DataObject_Images(); + $update->whereAddQuoted('uri', '=', $url); + } + $update->rank = $rank; + } + + if ($update !== null) { + $update->update(); + } + + // �摜���L���b�V������Ă��Ȃ��Ƃ� + // �����X���^�C�����@�\��ON�Ȃ�N�G����UTF-8�G���R�[�h�����X���^�C���܂߂� + } else { + // �摜���u���b�N���X�gor�G���[���O�ɂ��邩�m�F + if (false !== ($errcode = $icdb->ic2_isError($url))) { + return "<s>[IC2:�װ({$errcode})]</s>"; + } + + // �C�����C���v���r���[���L���ŁA�T���l�C���\���������ȓ��Ȃ� + if ($this->thumbnailer->ini['General']['inline'] == 1 && $inline_preview_flag) { + $rank_str = ($rank !== null) ? '&rank=' . $rank : ''; + $img_str = "<img src=\"ic2.php?r=2&t=1&uri={$url_en}{$this->img_memo_query}{$rank_str}\" width=\"{$prvw_size[0]}\" height=\"{$prvw_size[1]}\">"; + $inline_preview_done = true; + } else { + $img_url .= $this->img_memo_query; + } + } + + // �\�����������f�N�������g + if ($inline_preview_flag && $inline_preview_done) { + $pre_thumb_limit_k--; + } + + if (!empty($_SERVER['REQUEST_URI'])) { + $backto = '&from=' . rawurlencode($_SERVER['REQUEST_URI']); + } else { + $backto = ''; + } + + if (is_null($img_str)) { + return sprintf('<a href="%s%s">[IC2:%s:%s]</a>', + $img_url, + $backto, + p2h($purl['host']), + p2h(basename($purl['path'])) + ); + } + + $img_title = p2h($purl['host']) + . ' ' + . p2h(basename($purl['path'])); + return "<a class=\"limelight\" href=\"{$src_url}\" title=\"{$img_title}\" target=\"_blank\">{$img_str}</a>" + //. ' <img class="ic2-show-info" src="img/s2a.png" width="16" height="16" onclick="ic2info.show(' + . ' <input type="button" class="ic2-show-info" value="i" onclick="ic2info.show(' + . (($img_id) ? $img_id : "'{$url_ht}'") . ', event)">'; + } + + return false; + } + + // }}} + // {{{ plugin_replaceImageUrl() + + public function plugin_replaceImageUrl($url, $purl, $str) + { + global $_conf; + global $pre_thumb_unlimited, $pre_thumb_ignore_limit, $pre_thumb_limit_k; + + if (P2Util::isUrlWikipediaJa($url)) { + return false; + } + + // if (preg_match('{^https?://.+?\\.(jpe?g|gif|png)$}i', $url) && empty($purl['query'])) { + // +Wiki + global $replaceImageUrlCtl; + + $url = $purl[0]; + $replaced = $replaceImageUrlCtl->replaceImageUrl($url); + if (!$replaced[0]) { + return false; + } + + foreach ($replaced as $v) { + // �C�����C���v���r���[�̗L������ + if ($pre_thumb_unlimited || $pre_thumb_ignore_limit || $pre_thumb_limit_k > 0) { + $inline_preview_flag = true; + $inline_preview_done = false; + } else { + $inline_preview_flag = false; + $inline_preview_done = false; + } + + // +Wiki + // $url_en = rawurlencode($url); + $url_ht = $url; + $url_en = rawurlencode($v['url']); + $ref_en = $v['referer'] ? '&ref=' . rawurlencode($v['referer']) : ''; + $img_str = null; + $img_id = null; + + $icdb = new ImageCache2_DataObject_Images(); + + // r=0:�����N;r=1:���_�C���N�g;r=2:PHP�ŕ\�� + // t=0:�I���W�i��;t=1:PC�p�T���l�C��;t=2:�g�їp�T���l�C��;t=3:���ԃC���[�W + $img_url = 'ic2.php?r=0&t=2&uri=' . $url_en . $ref_en; + $img_url2 = 'ic2.php?r=0&t=2&id='; + $src_url = 'ic2.php?r=1&t=0&uri=' . $url_en . $ref_en; + $src_url2 = 'ic2.php?r=1&t=0&id='; + $src_exists = false; + + // ���C�ɃX�������摜�����N + $rank = null; + if ($_conf['expack.ic2.fav_auto_rank']) { + $rank = $this->getAutoFavRank(); + } + + // DB�ɉ摜��񂪓o�^����Ă����Ƃ� + if ($icdb->get($v['url'])) { + $img_id = $icdb->id; + + // �E�B���X�Ɋ������Ă����t�@�C���̂Ƃ� + if ($icdb->mime == 'clamscan/infected') { + return '[IC2:�E�B���X�x��]'; + } + // ���ځ[��摜�̂Ƃ� + if ($icdb->rank < 0) { + return '[IC2:���ځ[��摜]'; + } + + // �I���W�i���̗L�����m�F + $_src_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime); + if (file_exists($_src_url)) { + $src_exists = true; + $img_url = $img_url2 . $icdb->id; + $src_url = $_src_url; + } else { + $img_url = $this->thumbnailer->thumbUrl($icdb->size, $icdb->md5, $icdb->mime); + $src_url = $src_url2 . $icdb->id; + } + + // �C�����C���v���r���[���L���̂Ƃ� + $prv_url = null; + if ($this->thumbnailer->ini['General']['inline'] == 1) { + // PC��read_new_k.php�ɃA�N�Z�X�����Ƃ��� + if (!isset($this->inline_prvw) || !is_object($this->inline_prvw)) { + $this->inline_prvw = $this->thumbnailer; + } + $prv_url = $this->inline_prvw->thumbUrl($icdb->size, $icdb->md5, $icdb->mime); + + // �T���l�C���\���������ȓ��̂Ƃ� + if ($inline_preview_flag) { + // �v���r���[�摜������Ă��邩�ǂ�����img�v�f�̑��������� + if (file_exists($prv_url)) { + $prvw_size = explode('x', $this->inline_prvw->calc($icdb->width, $icdb->height)); + $img_str = "<img src=\"{$prv_url}\" width=\"{$prvw_size[0]}\" height=\"{$prvw_size[1]}\">"; + } else { + $r_type = ($this->thumbnailer->ini['General']['redirect'] == 1) ? 1 : 2; + if ($src_exists) { + $prv_url = "ic2.php?r={$r_type}&t=1&id={$icdb->id}"; + } else { + $prv_url = "ic2.php?r={$r_type}&t=1&uri={$url_en}"; + } + $prv_url .= $this->img_dpr_query; + if ($this->img_dpr === 1.5 || $this->img_dpr === 2.0) { + $prv_onload = sprintf(' onload="autoAdjustImgSize(this, %f);"', $this->img_dpr); + } else { + $prv_onload = ''; + } + $img_str = "<img src=\"{$prv_url}\"{$prv_onload} width=\"{$prvw_size[0]}\" height=\"{$prvw_size[1]}\">"; + } + $inline_preview_done = true; + } else { + $img_str = '[p2:�����摜(�ݸ:' . $icdb->rank . ')]'; + } + } + + // �����X���^�C�����@�\��ON�ŃX���^�C���L�^����Ă��Ȃ��Ƃ���DB���X�V + if (!is_null($this->img_memo) && strpos($icdb->memo, $this->img_memo) === false){ + $update = new ImageCache2_DataObject_Images(); + if (!is_null($icdb->memo) && strlen($icdb->memo) > 0) { + $update->memo = $this->img_memo . ' ' . $icdb->memo; + } else { + $update->memo = $this->img_memo; + } + $update->whereAddQuoted('uri', '=', $v['url']); + } + + // expack.ic2.fav_auto_rank_override �̐ݒ�ƃ����N������OK�Ȃ� + // ���C�ɃX�������摜�����N���㏑���X�V + if ($rank !== null && + self::isAutoFavRankOverride($icdb->rank, $rank)) { + if ($update === null) { + $update = new ImageCache2_DataObject_Images(); + $update->whereAddQuoted('uri', '=', $v['url']); + } + $update->rank = $rank; + + } + if ($update !== null) { + $update->update(); + } + + // �摜���L���b�V������Ă��Ȃ��Ƃ� + // �����X���^�C�����@�\��ON�Ȃ�N�G����UTF-8�G���R�[�h�����X���^�C���܂߂� + } else { + // �摜���u���b�N���X�gor�G���[���O�ɂ��邩�m�F + if (false !== ($errcode = $icdb->ic2_isError($v['url']))) { + return "<s>[IC2:�װ({$errcode})]</s>"; + } + + // �C�����C���v���r���[���L���ŁA�T���l�C���\���������ȓ��Ȃ� + if ($this->thumbnailer->ini['General']['inline'] == 1 && $inline_preview_flag) { + $rank_str = ($rank !== null) ? '&rank=' . $rank : ''; + $img_str = "<img src=\"ic2.php?r=2&t=1&uri={$url_en}{$this->img_memo_query}{$rank_str}{$ref_en}\" width=\"{$prvw_size[0]}\" height=\"{$prvw_size[1]}\">"; + $inline_preview_done = true; + } else { + $img_url .= $this->img_memo_query; + } + } + + // �\�����������f�N�������g + if ($inline_preview_flag && $inline_preview_done) { + $pre_thumb_limit_k--; + } + + if (!empty($_SERVER['REQUEST_URI'])) { + $backto = '&from=' . rawurlencode($_SERVER['REQUEST_URI']); + } else { + $backto = ''; + } + + if (is_null($img_str)) { + $result .= sprintf('<a href="%s%s">[IC2:%s:%s]</a>', + $img_url, + $backto, + p2h($purl['host']), + p2h(basename($purl['path'])) + ); + } + + $img_title = p2h($purl['host']) + . ' ' + . p2h(basename($purl['path'])); + $result .= "<a class=\"limelight\" href=\"{$src_url}\" title=\"{$img_title}\" target=\"_blank\">{$img_str}</a>" + //. ' <img class="ic2-show-info" src="img/s2a.png" width="16" height="16" onclick="ic2info.show(' + . ' <input type="button" class="ic2-show-info" value="i" onclick="ic2info.show(' + . (($img_id) ? $img_id : "'{$v['url']}'") . ', event)">'; + } + + $linkUrlResult = $this->plugin_linkURL($url, $purl, $str); + if ($linkUrlResult !== false) { + $result .= $linkUrlResult; + } + + return $result; + } + + // }}} + // }}} + // {{{ _quotebackHorizontalListHtml() + + protected function _quotebackHorizontalListHtml($anchors, $resnum) + { + global $_conf; + + if ($_GET['showbl']) { + return ''; + } + $anchors = array_diff($anchors, array($resnum)); + if (!$anchors) { + return ''; + } + $ret = ''; + + $plus = array(); + foreach ($anchors as $num) { + $plus = array_merge($plus, $this->_getQuotebackCount($num)); + } + $plus = array_unique($plus); + $plus_cnt = count(array_diff($plus, $anchors)); + $plus_str = count($plus) > 0 ? '+' . ($plus_cnt > 0 ? $plus_cnt : '') : ''; + + $url = $_conf['read_php'] . '?' . http_build_query(array( + 'host' => $this->thread->host, + 'bbs' => $this->thread->bbs, + 'key' => $this->thread->key, + 'ls' => $resnum, + 'offline' => '1', + 'showbl' => '1', + ), '', '&') . $_conf['k_at_a']; + + $suppress = false; + $n = 0; + $reslist = array(); + foreach($anchors as $anchor) { + if ($anchor == $resnum) continue; + $n++; + if ($_conf['mobile.backlink_list.suppress'] > 0 + && $n > $_conf['mobile.backlink_list.suppress']) { + $suppress = true; + break; + } + $reslist[] = $this->quoteRes('>>'.$anchor, '>>', $anchor); + } + + $res_navi = ''; + if ($_conf['mobile.backlink_list.openres_navi'] == 1 + || ($_conf['mobile.backlink_list.openres_navi'] == 2 + && $suppress === true)) { + if (count($anchors) > 1 || $plus_str) { + $res_navi = "(<a href=\"{$url}\"{$this->target_at}>" + . (count($anchors) > 1 ? count($anchors) : '') + . $plus_str . '</a>)'; + } + } + + $res_count = count($reslist); + if ($res_count === 1 && $suppress === true && $_conf['mobile.backlink_list.suppress'] == 1) { + $ret .= sprintf('<div>�y�Q��ڽ %s�z</div>', $res_navi); + } elseif ($res_count === 1 && $suppress === false) { + $ret .= sprintf('<div>�y�Q��ڽ %s%s�z</div>', $reslist[0], $res_navi); + } else { + for ($n = 0; $n < $res_count; $n++) { + $ret .= '<div>�y�Q��ڽ ' . $reslist[$n] . '�z</div>'; + } + $ret .= '<div>' . ($suppress ? '��' : '') . $res_navi . '</div>'; + } + + return '<div class="reslist">' . $ret . '</div>'; + } + + // }}} + // {{{ _getQuotebackCount() + + protected function _getQuotebackCount($num, $checked = null) + { + $ret = array(); + if ($checked === null) { + $checked = array(); + } + $checked[] = $num; + $quotes = $this->getQuoteFrom(); + if ($quotes[$num]) { + $ret = $quotes[$num]; + foreach ($quotes[$num] as $quote_num) { + if ($quote_num != $num && !in_array($quote_num, $checked)) { + $ret = array_merge($ret, $this->_getQuotebackCount($quote_num, array_merge($ret, $checked))); + } + } + } + return $ret; + } + + // }}} +} + +// }}} + +/* + * Local Variables: + * mode: php + * coding: cp932 + * tab-width: 4 + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ +// vim: set syn=php fenc=cp932 ai et ts=4 sw=4 sts=4 fdm=marker: diff --git a/lib/ShowThreadK.php b/lib/ShowThreadK.php index 549c8517a..27f7a107a 100644 --- a/lib/ShowThreadK.php +++ b/lib/ShowThreadK.php @@ -46,12 +46,6 @@ public function __construct(ThreadRead $aThread, $matome = false) global $_conf, $STYLE; - if ($_conf['iphone']) { - $this->respopup_at = ' onclick="return iResPopUp(this, event);"'; - $this->target_at = ' target="_blank"'; - $this->check_st = 'check'; - } - $this->_url_handlers = array( 'plugin_linkThread', 'plugin_link2chSubject', @@ -274,15 +268,10 @@ public function transRes($ares, $i, $pattern = null) // NG���b�Z�[�W�ϊ� if ($ng_type != self::NG_NONE && count($ng_info)) { $ng_info = implode(', ', $ng_info); - if ($ng_type == self::NG_AA && $_conf['iphone']) { - $msg = <<<EOMSG -<a class="button" href="{$_conf['read_php']}?host={$this->thread->host}&bbs={$this->thread->bbs}&key={$this->thread->key}&ls={$i}&k_continue=1&nong=1{$_conf['k_at_a']}"{$this->respopup_at}{$this->target_at}>{$ng_info}</a> -EOMSG; - } else { - $msg = <<<EOMSG + + $msg = <<<EOMSG <s><font color="{$STYLE['mobile_read_ngword_color']}">{$ng_info}</font></s> <a class="button" href="{$_conf['read_php']}?host={$this->thread->host}&bbs={$this->thread->bbs}&key={$this->thread->key}&ls={$i}&k_continue=1&nong=1{$_conf['k_at_a']}"{$this->respopup_at}{$this->target_at}>{$this->check_st}</a> EOMSG; - } // AAS if (($ng_type & self::NG_AA) && P2_AAS_AVAILABLE) { @@ -292,15 +281,10 @@ public function transRes($ares, $i, $pattern = null) } else { $aas_txt = "AAS"; } - if ($_conf['iphone']) { - //$img_title = p2h($this->thread->getMotoThread(true, $i)); - //$img_title = "{$this->thread->bbs}/{$this->thread->key}/{$i}"; - //$img_title = "{$this->thread->ttitle_hd} >>{$i}"; - $msg .= " <a class=\"aas limelight\" href=\"{$aas_url}&b=pc\" title=\">>{$i}\"{$this->target_at}>{$aas_txt}</a>"; - } else { - $msg .= " <a class=\"aas\" href=\"{$aas_url}{$_conf['k_at_a']}\"{$this->target_at}>{$aas_txt}</a>"; - $msg .= " <a class=\"button\" href=\"{$aas_url}{$_conf['k_at_a']}&rotate=1\"{$this->target_at}>{$this->aas_rotate}</a>"; - } + + $msg .= " <a class=\"aas\" href=\"{$aas_url}{$_conf['k_at_a']}\"{$this->target_at}>{$aas_txt}</a>"; + $msg .= " <a class=\"button\" href=\"{$aas_url}{$_conf['k_at_a']}&rotate=1\"{$this->target_at}>{$this->aas_rotate}</a>"; + } } @@ -341,80 +325,41 @@ public function transRes($ares, $i, $pattern = null) } */ - if ($_conf['iphone']) { - $tores .= "<div id=\"{$res_id}\" class=\"res\"><div class=\"res-header\">"; - - $no_class = 'no'; - $no_onclick = ''; - - // �I���U�t���C�� - if ($this->thread->onthefly) { - $GLOBALS['newres_to_show_flag'] = true; - $no_class .= ' onthefly'; - // �V�����X�� - } elseif ($i > $this->thread->readnum) { - $GLOBALS['newres_to_show_flag'] = true; - $no_class .= ' newres'; - } - - // SPM - if ($_conf['expack.spm.enabled']) { - $no_onclick = " onclick=\"{$this->spmObjName}.show({$i},'{$res_id}',event)\""; - } - - // �ԍ� - $tores .= "<span class=\"{$no_class}\"{$no_onclick}>{$i}</span>"; - // ���O - $tores .= " <span class=\"name\">{$name}</span>"; - // ���[�� - $tores .= " <span class=\"mail\">{$mail}</span>"; - // ���t��ID - $tores .= " <span class=\"date-id\">{$date_id}</span></div>\n"; - // ���e - $tores .= "<div class=\"message\">{$msg}</div>"; - // �탌�X���X�g - if ($_conf['mobile.backlink_list'] == 1) { - $linkstr = $this->_quotebackListHtml($i, 2); - if (strlen($linkstr)) { - $tores .= '<br>' . $linkstr; - } - } - $tores .= "</div>\n"; // ���e��‚��� - } else { - // �ԍ��i�I���U�t���C���j - if ($this->thread->onthefly) { - $GLOBALS['newres_to_show_flag'] = true; - $tores .= "<div id=\"{$res_id}\" name=\"{$res_id}\">[<font color=\"{$STYLE['mobile_read_onthefly_color']}'\">{$i}</font>]"; + // �ԍ��i�I���U�t���C���j + if ($this->thread->onthefly) { + $GLOBALS['newres_to_show_flag'] = true; + $tores .= "<div id=\"{$res_id}\" name=\"{$res_id}\">[<font color=\"{$STYLE['mobile_read_onthefly_color']}'\">{$i}</font>]"; // �ԍ��i�V�����X���j - } elseif ($i > $this->thread->readnum) { - $GLOBALS['newres_to_show_flag'] = true; - $tores .= "<div id=\"{$res_id}\" name=\"{$res_id}\">[<font color=\"{$STYLE['mobile_read_newres_color']}\">{$i}</font>]"; + } elseif ($i > $this->thread->readnum) { + $GLOBALS['newres_to_show_flag'] = true; + $tores .= "<div id=\"{$res_id}\" name=\"{$res_id}\">[<font color=\"{$STYLE['mobile_read_newres_color']}\">{$i}</font>]"; // �ԍ� - } else { - $tores .= "<div id=\"{$res_id}\" name=\"{$res_id}\">[{$i}]"; - } - - // ���O - if ($name) { - $tores .= "{$name}: "; } - // ���[�� - if ($mail) { - $tores .= "{$mail}: "; - } - // ���t��ID - $tores .= "{$date_id}<br>\n"; - // ���e - $tores .= "{$msg}</div>\n"; - // �탌�X���X�g - if ($_conf['mobile.backlink_list'] == 1) { - $linkstr = $this->_quotebackListHtml($i, 2); - if (strlen($linkstr)) { - $tores .= '<br>' . $linkstr; - } - } - $tores .= "<hr>\n"; + } else { + $tores .= "<div id=\"{$res_id}\" name=\"{$res_id}\">[{$i}]"; } + // ���O + if ($name) { + $tores .= "{$name}: "; + } + + // ���[�� + if ($mail) { + $tores .= "{$mail}: "; + } + // ���t��ID + $tores .= "{$date_id}<br>\n"; + // ���e + $tores .= "{$msg}</div>\n"; + // �탌�X���X�g + if ($_conf['mobile.backlink_list'] == 1) { + $linkstr = $this->_quotebackListHtml($i, 2); + if (strlen($linkstr)) { + $tores .= '<br>' . $linkstr; + } + } + $tores .= "<hr>\n"; + // �܂Ƃ߂ăt�B���^�F���� if ($pattern) { if (is_string($_conf['k_filter_marker'])) { @@ -564,92 +509,6 @@ protected function _abornedRes($res_id) EOP; } - // }}} - // {{{ getSpmObjJs() - - /** - * �X�}�[�g�|�b�v�A�b�v���j���[�ɕK�v�ȃX���b�h�����i�[����JavaScript�R�[�h���擾 - */ - public function getSpmObjJs($retry = false) - { - global $_conf; - - if (isset(self::$_spm_objects[$this->spmObjName])) { - return $retry ? self::$_spm_objects[$this->spmObjName] : ''; - } - - $ttitle_en = UrlSafeBase64::encode($this->thread->ttitle); - - $motothre_url = $this->thread->getMotoThread(); - $motothre_url = substr($motothre_url, 0, strlen($this->thread->ls) * -1); - - // �G�X�P�[�v - $_spm_title = StrCtl::toJavaScript($this->thread->ttitle_hc); - $_spm_url = addslashes($motothre_url); - $_spm_host = addslashes($this->thread->host); - $_spm_bbs = addslashes($this->thread->bbs); - $_spm_key = addslashes($this->thread->key); - $_spm_ls = addslashes($this->thread->ls); - $_spm_b = ($_conf['view_forced_by_query']) ? "&b={$_conf['b']}" : ''; - - $code = <<<EOJS -<script type="text/javascript"> -//<![CDATA[ -var {$this->spmObjName} = { - 'objName':'{$this->spmObjName}', - 'query':'&host={$_spm_host}&bbs={$_spm_bbs}&key={$_spm_key}&rescount={$this->thread->rescount}&ttitle_en={$ttitle_en}{$_spm_b}', - 'rc':'{$this->thread->rescount}', - 'title':'{$_spm_title}', - 'ttitle_en':'{$ttitle_en}', - 'url':'{$_spm_url}', - 'host':'{$_spm_host}', - 'bbs':'{$_spm_bbs}', - 'key':'{$_spm_key}', - 'ls':'{$_spm_ls}', - 'client':['{$_conf['b']}','{$_conf['client_type']}'] -}; -{$this->spmObjName}.show = (function(no,id,evt){SPM.show({$this->spmObjName},no,id,evt);}); -{$this->spmObjName}.hide = SPM.hide; // (function(evt){SPM.hide(evt);}); -//]]> -</script>\n -EOJS; - - self::$_spm_objects[$this->spmObjName] = $code; - - return $code; - } - - // }}} - // {{{ getSpmElementHtml() - - /** - * �X�}�[�g�|�b�v�A�b�v���j���[�p��HTML�𐶐����� - */ - static public function getSpmElementHtml() - { - global $_conf; - - return <<<EOP -<div id="spm"> -<div id="spm-reply"> - <span id="spm-reply-quote" onclick="SPM.replyTo(true)">>><span id="spm-num">???</span>�Ƀ��X</span> - <span id="spm-reply-noquote" onclick="SPM.replyTo(false)">[���p�Ȃ�]</span> -</div> -<div id="spm-action"><select id="spm-select-target"> - <option value="name">���O</option> - <option value="mail">���[��</option> - <option value="id" selected>ID</option> - <option value="msg">�{��</option> -</select>��<select id="spm-select-action"> - <option value="aborn" selected>���ځ[��</option> - <option value="ng">NG</option> -<!-- <option value="search">����</option> --> -</select><input type="button" onclick="SPM.doAction()" value="OK"></div> -<img id="spm-closer" src="img/iphone/close.png" width="24" height="26" onclick="SPM.hide(event)"> -</div> -EOP; - } - // }}} // {{{ idFilter() @@ -1164,17 +1023,7 @@ public function plugin_imageCache2($url, $purl, $str) ); } - if ($_conf['iphone']) { - $img_title = p2h($purl['host']) - . ' ' - . p2h(basename($purl['path'])); - return "<a class=\"limelight\" href=\"{$src_url}\" title=\"{$img_title}\" target=\"_blank\">{$img_str}</a>" - //. ' <img class="ic2-show-info" src="img/s2a.png" width="16" height="16" onclick="ic2info.show(' - . ' <input type="button" class="ic2-show-info" value="i" onclick="ic2info.show(' - . (($img_id) ? $img_id : "'{$url_ht}'") . ', event)">'; - } else { - return "<a href=\"{$img_url}{$backto}\">{$img_str}</a>"; - } + return "<a href=\"{$img_url}{$backto}\">{$img_str}</a>"; } return false; @@ -1360,17 +1209,7 @@ public function plugin_replaceImageUrl($url, $purl, $str) ); } - if ($_conf['iphone']) { - $img_title = p2h($purl['host']) - . ' ' - . p2h(basename($purl['path'])); - $result .= "<a class=\"limelight\" href=\"{$src_url}\" title=\"{$img_title}\" target=\"_blank\">{$img_str}</a>" - //. ' <img class="ic2-show-info" src="img/s2a.png" width="16" height="16" onclick="ic2info.show(' - . ' <input type="button" class="ic2-show-info" value="i" onclick="ic2info.show(' - . (($img_id) ? $img_id : "'{$v['url']}'") . ', event)">'; - } else { - $result .= "<a href=\"{$img_url}{$backto}\">{$img_str}</a>"; - } + $result .= "<a href=\"{$img_url}{$backto}\">{$img_str}</a>"; } $linkUrlResult = $this->plugin_linkURL($url, $purl, $str); diff --git a/lib/startup.funcs.php b/lib/startup.funcs.php index 7edaa0dc0..2a183390b 100644 --- a/lib/startup.funcs.php +++ b/lib/startup.funcs.php @@ -33,7 +33,7 @@ function p2_load_class($name) Session | SettingTxt | ShowBrdMenu(?:K|Pc) | - ShowThread(?:K|Pc)? | + ShowThread(?:K|I|Pc)? | StrCtl | StrSjis | SubjectTxt | diff --git a/rep2/read.php b/rep2/read.php index 2d9b277fb..2b4195ba2 100644 --- a/rep2/read.php +++ b/rep2/read.php @@ -197,7 +197,7 @@ if (!$aThread->ls) { // +live ���X�\�����ؑ� if ($_GET['live']) { - $aThread->ls = l .$_conf['live.before_respointer']; + $aThread->ls = 'l' .$_conf['live.before_respointer']; } else { $aThread->ls = $_conf['get_new_res_l']; } @@ -224,7 +224,11 @@ $GLOBALS['filter_hits'] = null; } - $aShowThread = new ShowThreadK($aThread); + if ($_conf['iphone']) { + $aShowThread = new ShowThreadI($aThread); + } else { + $aShowThread = new ShowThreadK($aThread); + } if ($is_ajax) { $response = trim(mb_convert_encoding($aShowThread->getDatToHtml(true), 'UTF-8', 'CP932')); From e5c2321bcb0e1664971c4c2778a307447509e277 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 9 Apr 2015 11:31:43 +0900 Subject: [PATCH 123/339] =?UTF-8?q?=E3=83=8A=E3=83=93=E3=82=B2=E3=83=BC?= =?UTF-8?q?=E3=82=B7=E3=83=A7=E3=83=B3=E3=81=8B=E3=82=89=E3=83=A9=E3=83=99?= =?UTF-8?q?=E3=83=AB=E3=82=92=E6=B6=88=E5=8E=BB=E3=81=A8=E5=88=A5=E3=81=AE?= =?UTF-8?q?=E3=82=AF=E3=83=A9=E3=82=B9=E3=82=92=E5=89=B2=E3=82=8A=E5=BD=93?= =?UTF-8?q?=E3=81=A6=E3=82=8B=E6=BA=96=E5=82=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/read_footer_i.inc.php | 25 +++++++++++-------------- lib/sb_footer_i.inc.php | 29 +++++++++++++---------------- lib/toolbar_i.inc.php | 2 +- 3 files changed, 25 insertions(+), 31 deletions(-) diff --git a/lib/read_footer_i.inc.php b/lib/read_footer_i.inc.php index 6213a3586..137789eb8 100644 --- a/lib/read_footer_i.inc.php +++ b/lib/read_footer_i.inc.php @@ -26,37 +26,34 @@ // �O�̃y�[�W echo '<td>'; if ($read_navi_previous_url) { - echo toolbar_i_standard_button('img/gp3-prev.png', '�O', $read_navi_previous_url); + echo toolbar_i_standard_button('img/gp3-prev.png', null, $read_navi_previous_url); } else { - echo toolbar_i_disabled_button('img/gp3-prev.png', '�O'); + echo toolbar_i_disabled_button('img/gp3-prev.png', null); } echo '</td>'; +// �y�[�W�ԍ��𒼐ڎw�� +echo '<td colspan="2">'; +echo get_read_jump($aThread, '', true); +echo '</td>'; + // ���̃y�[�W echo '<td>'; if ($read_navi_next_url) { - echo toolbar_i_standard_button('img/gp4-next.png', '��', $read_navi_next_url); + echo toolbar_i_standard_button('img/gp4-next.png', null, $read_navi_next_url); } else { - echo toolbar_i_disabled_button('img/gp4-next.png', '��'); -} -echo '</td>'; - -// �y�[�W�ԍ��𒼐ڎw�� -echo '<td colspan="2">'; -echo get_read_jump($aThread, '', true); -if (empty($_conf['expack.iphone.toolbars.no_label'])) { - echo "<br>{$rescount_st}"; + echo toolbar_i_disabled_button('img/gp4-next.png', null); } echo '</td>'; // ��� echo '<td>'; -echo toolbar_i_standard_button('img/gp1-up.png', '��', '#header'); +echo toolbar_i_standard_button('img/gp1-up.png', null, '#header'); echo '</td>'; // }}} -echo '</tr><tr>'; +echo '</tr><tr></tbody></div><div class="ntoolbar"></table><table><tbody>'; // {{{ ���̑��{�^���� diff --git a/lib/sb_footer_i.inc.php b/lib/sb_footer_i.inc.php index 6e81edcf4..d683536f6 100644 --- a/lib/sb_footer_i.inc.php +++ b/lib/sb_footer_i.inc.php @@ -156,38 +156,35 @@ echo '<td>'; if ($disp_navi['from'] > 1) { $escaped_url = "{$_conf['subject_php']}?{$paging_q}&from={$disp_navi['mae_from']}{$_conf['k_at_a']}"; - echo toolbar_i_standard_button('img/gp3-prev.png', '�O', $escaped_url); + echo toolbar_i_standard_button('img/gp3-prev.png', null, $escaped_url); } else { - echo toolbar_i_disabled_button('img/gp3-prev.png', '�O'); + echo toolbar_i_disabled_button('img/gp3-prev.png', null); } echo '</td>'; +// �y�[�W�ԍ��𒼐ڎw�� +echo '<td colspan="2">'; +echo "{$k_sb_navi_ht}<span class=\"large\">/{$sb_all_pages}</span>"; +echo '</td>'; + // ���̃y�[�W echo '<td>'; if ($disp_navi['tugi_from'] <= $sb_disp_all_num) { $escaped_url = "{$_conf['subject_php']}?{$paging_q}&from={$disp_navi['tugi_from']}{$_conf['k_at_a']}"; - echo toolbar_i_standard_button('img/gp4-next.png', '��', $escaped_url); + echo toolbar_i_standard_button('img/gp4-next.png', null, $escaped_url); } else { - echo toolbar_i_disabled_button('img/gp4-next.png', '��'); -} -echo '</td>'; - -// �y�[�W�ԍ��𒼐ڎw�� -echo '<td colspan="2">'; -echo "{$k_sb_navi_ht}<span class=\"large\">/{$sb_all_pages}</span>"; -if (empty($_conf['expack.iphone.toolbars.no_label'])) { - echo '<br>�y�[�W'; + echo toolbar_i_disabled_button('img/gp4-next.png', null); } echo '</td>'; // ��� echo '<td>'; -echo toolbar_i_standard_button('img/gp1-up.png', '��', '#header'); +echo toolbar_i_standard_button('img/gp1-up.png', null, '#header'); echo '</td>'; // }}} -echo '</tr><tr>'; +echo '</tr><tr></tbody></div><div class="ntoolbar"></table><table><tbody>'; // {{{ ���̑��{�^���� @@ -195,12 +192,12 @@ echo '<td>'; if ($ta_num) { $escaped_url = "{$_conf['subject_php']}?{$host_bbs_q}{$norefresh_q}&spmode=taborn{$_conf['k_at_a']}"; - echo toolbar_i_badged_button('img/glyphish/icons2/128-bone.png', '���ځ[��', $escaped_url, $ta_num); + echo toolbar_i_badged_button('img/glyphish/icons2/128-bone.png', '���ځ[���', $escaped_url, $ta_num); } elseif ($aThreadList->spmode == 'taborn') { $escaped_url = "{$_conf['subject_php']}?{$host_bbs_q}{$_conf['k_at_a']}"; echo toolbar_i_standard_button('img/glyphish/icons2/63-runner.png', '�‚ɖ߂�', $escaped_url); } else { - echo toolbar_i_disabled_button('img/glyphish/icons2/128-bone.png', '���ځ[��'); + echo toolbar_i_disabled_button('img/glyphish/icons2/128-bone.png', '���ځ[���'); } echo '</td>'; diff --git a/lib/toolbar_i.inc.php b/lib/toolbar_i.inc.php index f1407a4fe..d7e93ce62 100644 --- a/lib/toolbar_i.inc.php +++ b/lib/toolbar_i.inc.php @@ -54,7 +54,7 @@ function _toolbar_i_button($icon, $label, $uri, $attrs = '') $attrs = str_replace('class="', 'class="hoverable ', $attrs); } - if (empty($_conf['expack.iphone.toolbars.no_label'])) { + if (empty($_conf['expack.iphone.toolbars.no_label']) && !empty($label) ) { $label = '<br>' . $label; } else { $label = ''; From c64a2ebb6d7489eefa7e0a9e4fc281f9f35990ad Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 9 Apr 2015 13:06:30 +0900 Subject: [PATCH 124/339] =?UTF-8?q?ThreadRead.php=E3=81=AB=E3=82=A8?= =?UTF-8?q?=E3=83=A9=E3=83=BC=E3=81=8C=E3=81=82=E3=81=A3=E3=81=9F=E3=81=AE?= =?UTF-8?q?=E3=81=A7=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index a54169200..d095e14b3 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -415,7 +415,7 @@ protected function _downloadDat2ch($from_bytes) { // echo "���ځ[�񌟏o"; $this->onbytes = 0; $this->modified = null; - return $this->_downloadDat2chAPI ($sid, 0); // ���ځ[�񌟏o�B�S����蒼���B + return $this->_downloadDat2ch (0); // ���ځ[�񌟏o�B�S����蒼���B } $body = substr ($body, 1); } @@ -435,7 +435,7 @@ protected function _downloadDat2ch($from_bytes) { $this->modified = null; P2Util::pushInfoHtml ("<p>rep2 info: {$this->onbytes}/{$this->length} �t�@�C���T�C�Y���ςȂ̂ŁAdat���Ď擾</p>"); // $GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection("dat_size_check"); - return $this->_downloadDat2chAPI ($sid, 0); // dat�T�C�Y�͕s���B�S����蒼���B + return $this->_downloadDat2ch (0); // dat�T�C�Y�͕s���B�S����蒼���B } } @@ -447,7 +447,7 @@ protected function _downloadDat2ch($from_bytes) { if ($new_host != $this->host) { $this->old_host = $this->host; $this->host = $new_host; - return $this->_downloadDat2chAPI ($sid, $from_bytes); + return $this->_downloadDat2ch ($from_bytes); } else { return $this->_downloadDat2chNotFound ($code); } @@ -458,7 +458,7 @@ protected function _downloadDat2ch($from_bytes) { // echo "���ځ[�񌟏o"; $this->onbytes = 0; $this->modified = null; - return $this->_downloadDat2chAPI ($sid, 0); // ���ځ[�񌟏o�B�S����蒼���B + return $this->_downloadDat2ch (0); // ���ځ[�񌟏o�B�S����蒼���B } else { return $this->_downloadDat2chNotFound ($code); } @@ -534,7 +534,7 @@ protected function _downloadDat2chMaru($uaMona, $SID2ch, $shirokuma = false) { $this->modified = $response->getHeader ('Last-Modified'); - if (FileCtl::file_write_contents ($this->keydat, $body, $file_append) === false) { + if (FileCtl::file_write_contents ($this->keydat, $body, 0) === false) { p2die ('cannot write file. downloadDat2chMaru()'); } @@ -620,7 +620,7 @@ protected function _downloadDat2chKako($uri, $ext) { $this->modified = $response->getHeader ('Last-Modified'); - if (FileCtl::file_write_contents ($this->keydat, $body, $file_append) === false) { + if (FileCtl::file_write_contents ($this->keydat, $body, 0) === false) { p2die ('cannot write file. downloadDat2chMaru()'); } @@ -751,7 +751,7 @@ public function get2chDatError($code = null) { if ($reason === 'datochi' || preg_match ($kakosoko_match, $read_response_html, $matches) || preg_match ($kakosoko_match2, $read_response_html, $matches)) { $dat_response_status = "���̃X���b�h�͉ߋ����O�q�ɂɊi�[����Ă��܂��B"; $marutori_ht = $this->_generateMarutoriLink (); - $plugin_ht = $this->_generateWikiDatLink (); + $plugin_ht = $this->_generateWikiDatLink ($read_url); $moritori_ht = $this->_generateMoritapoDatLink (); $dat_response_msg = "<p>2ch info - ���̃X���b�h�͉ߋ����O�q�ɂɊi�[����Ă��܂��B{$marutori_ht}{$moritori_ht}{$plugin_ht}</p>"; @@ -1503,9 +1503,11 @@ private function setDatochiResiduums() { * void * @return string */ - protected function _generateWikiDatLink() { + protected function _generateWikiDatLink($read_url) { global $_conf; + $plugin_ht = ''; + // +Wiki if ($_GET['plugin']) { $datPlugin = new DatPluginCtl (); @@ -1555,6 +1557,8 @@ protected function _generateWikiDatLink() { * @return string HTML */ protected function _generateMarutoriLink($retry = false) { + global $_conf; + if ($retry) { $retry_q = "&relogin2ch=true"; $atext = "��ID�ōĎ擾����"; From 19fed41b1eece31bc60bc96a456e437b0680b2dd Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 9 Apr 2015 19:46:06 +0900 Subject: [PATCH 125/339] =?UTF-8?q?=E3=82=B9=E3=83=9E=E3=83=9B=E5=90=91?= =?UTF-8?q?=E3=81=91SPM=E7=AD=89=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ShowThread.php | 6 +++--- lib/read_footer_i.inc.php | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/ShowThread.php b/lib/ShowThread.php index a4fc233a2..f54573e67 100644 --- a/lib/ShowThread.php +++ b/lib/ShowThread.php @@ -1602,7 +1602,7 @@ protected function _makeQuotes() // NG���ځ[��`�F�b�N if (($id = $this->thread->ids[$num + 1]) !== null) { - $date_id = str_replace($this->thread->idp[$i] . $id, 'ID:' . $id, $date_id); + $date_id = str_replace($this->thread->idp[$num] . $id, 'ID:' . $id, $date_id); } $ng_type = $this->_ngAbornCheck($num + 1, strip_tags($name), $mail, $date_id, $id, $msg); if ($ng_type == self::ABORN) { @@ -1742,7 +1742,7 @@ public function getQuoteTo() protected function _quotebackListHtml($resnum, $type, $popup=true) { $quote_from = $this->getQuoteFrom(); - if (!array_key_exists($resnum, $quote_from)) return $ret; + if (!array_key_exists($resnum, $quote_from)) return ''; $anchors = $quote_from[$resnum]; sort($anchors); @@ -1952,7 +1952,7 @@ static public function getAnchorRegex($pattern, $unicode = false) // �卷�͂Ȃ��� compileMobile2chUriCallBack() �̂悤�� preg_relplace_callback()���Ă����������B } if ($unicode) { - return StrSjis::toUnicodePattern($_anchorRegexes[$pattern]); + return StrSjis::toUnicodePattern(self::$_anchorRegexes[$pattern]); } return self::$_anchorRegexes[$pattern]; } diff --git a/lib/read_footer_i.inc.php b/lib/read_footer_i.inc.php index 137789eb8..97037decb 100644 --- a/lib/read_footer_i.inc.php +++ b/lib/read_footer_i.inc.php @@ -119,7 +119,7 @@ // SPM if ($_conf['expack.spm.enabled']) { - echo ShowThreadK::getSpmElementHtml(); + echo ShowThreadI::getSpmElementHtml(); } // �ŏI���X�ԍ����X�V From cffb61a9b29054a0a5d963368e42fbc539c90a65 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 9 Apr 2015 23:34:26 +0900 Subject: [PATCH 126/339] =?UTF-8?q?ShowThreadK=E3=81=A8ShowThreadI?= =?UTF-8?q?=E3=81=AE=E5=88=86=E9=9B=A2=E3=81=A7=E7=99=BA=E7=94=9F=E3=81=97?= =?UTF-8?q?=E3=81=A6=E3=81=84=E3=81=9F=E4=B8=8D=E5=85=B7=E5=90=88=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 6 +++++- rep2/read_new_k.php | 13 +++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index d095e14b3..8447c7743 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -849,7 +849,11 @@ public function previewOne() { } if ($_conf['ktai']) { - $aShowThread = new ShowThreadK ($this); + if ($_conf['iphone']) { + $aShowThread = new ShowThreadI($this); + } else { + $aShowThread = new ShowThreadK($this); + } $aShowThread->am_autong = false; } else { $aShowThread = new ShowThreadPc ($this); diff --git a/rep2/read_new_k.php b/rep2/read_new_k.php index d0d428d0d..6f8e80059 100644 --- a/rep2/read_new_k.php +++ b/rep2/read_new_k.php @@ -484,10 +484,15 @@ function readNew($aThread) $GLOBALS['newres_to_show_flag'] = false; $read_cont_ht = ''; if ($aThread->rescount) { - $aShowThread = new ShowThreadK($aThread, true); - if ($_conf['iphone'] && $_conf['expack.spm.enabled']) { - $read_cont_ht .= $aShowThread->getSpmObjJs(); + if ($_conf['iphone']) { + $aShowThread = new ShowThreadI($aThread); + if ($_conf['expack.spm.enabled']) { + $read_cont_ht .= $aShowThread->getSpmObjJs(); + } + + } else { + $aShowThread = new ShowThreadK($aThread); } $read_cont_ht .= $aShowThread->getDatToHtml(); @@ -688,7 +693,7 @@ function readNew($aThread) } // SPM if ($_conf['expack.spm.enabled']) { - echo ShowThreadK::getSpmElementHtml(); + echo ShowThreadI::getSpmElementHtml(); } } From 0fa760da8063f8aeb35c65d4acb2631bc45e4b7a Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Fri, 10 Apr 2015 17:43:34 +0900 Subject: [PATCH 127/339] =?UTF-8?q?=E3=82=B5=E3=83=A0=E3=83=8D=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E8=A1=A8=E7=A4=BA=E3=81=AB=E3=81=A6=20URL=20=E3=81=A7?= =?UTF-8?q?=E5=8F=82=E7=85=A7=E3=81=97=E3=81=A6=E3=81=84=E3=81=9F=E3=81=AE?= =?UTF-8?q?=E3=81=A7=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=83=91=E3=82=B9?= =?UTF-8?q?=E3=81=A7=E5=8F=82=E7=85=A7=E3=81=99=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ShowThreadPc.php | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/ShowThreadPc.php b/lib/ShowThreadPc.php index 5b635c3eb..41468a1ec 100644 --- a/lib/ShowThreadPc.php +++ b/lib/ShowThreadPc.php @@ -1544,18 +1544,16 @@ public function plugin_imageCache2($url, $purl, $str, } // �I���W�i�����L���b�V������Ă���Ƃ��͉摜�𒼐ړǂݍ��� - $_img_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime); - if (file_exists($_img_url)) { - $img_url = $_img_url; + if (file_exists($this->thumbnailer->srcPath($icdb->size, $icdb->md5, $icdb->mime))) { + $img_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime); $cached = true; } else { $cached = false; } // �T���l�C�����쐬����Ă��Ă���Ƃ��͉摜�𒼐ړǂݍ��� - $_thumb_url = $this->thumbnailer->thumbUrl($icdb->size, $icdb->md5, $icdb->mime); - if (file_exists($_thumb_url)) { - $thumb_url = $_thumb_url; + if (file_exists($this->thumbnailer->thumbPath($icdb->size, $icdb->md5, $icdb->mime))) { + $thumb_url = $this->thumbnailer->thumbUrl($icdb->size, $icdb->md5, $icdb->mime); // �����X���^�C�����@�\��ON�ŃX���^�C���L�^����Ă��Ȃ��Ƃ���DB���X�V if (!is_null($this->img_memo) && strpos($icdb->memo, $this->img_memo) === false){ $update = new ImageCache2_DataObject_Images(); From b56aeabc548b33a8811f75b6e7323d7327c43cb5 Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Fri, 10 Apr 2015 17:45:00 +0900 Subject: [PATCH 128/339] =?UTF-8?q?=E6=9D=BF=E7=B5=9E=E8=BE=BC=E3=81=A7?= =?UTF-8?q?=E3=82=AF=E3=82=A8=E3=83=AA=E3=81=8C=E7=A9=BA=E7=99=BD=E3=81=A0?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E5=A0=B4=E5=90=88=E3=81=AF=E9=81=B7=E7=A7=BB?= =?UTF-8?q?=E3=81=97=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB=E3=81=97?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/expack/tgrep/view.inc.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/expack/tgrep/view.inc.php b/lib/expack/tgrep/view.inc.php index 9c93c96a0..8b239f9ed 100644 --- a/lib/expack/tgrep/view.inc.php +++ b/lib/expack/tgrep/view.inc.php @@ -49,6 +49,12 @@ function setWinTitle() { function sf() { <?php if (strlen($htm['query']) == 0) { echo 'document.getElementById("Q").focus();'; } ?> } + function moveSubject(href, serachWord, query) { + if(query == ""){ + return ; + } + location.href = href + '?word=' + serachWord + query; + } //]]> </script> </head> @@ -113,7 +119,7 @@ function sf() { <?php foreach ($profile['categories'] as $c) { ?><option value="&C=<?php echo $c->id; ?>"<?php if ($c->id == $htm['category']) { echo ' selected="selected"'; } ?>><?php echo p2h($c->name); ?> (<?php echo $c->hits; ?>)</option><?php } ?> </select> | �‚ōi�荞��: -<select onchange="location.href=document.getElementById('h_subject_php').value+'?word='+document.getElementById('h_query_en').value+this.options[this.selectedIndex].value"> +<select onchange="moveSubject(document.getElementById('h_subject_php').value, document.getElementById('h_query_en').value, this.options[this.selectedIndex].value);"> <option value="">-</option> <?php $m = ($htm['category'] && isset($profile['categories'][$htm['category']])) ? $profile['categories'][$htm['category']]->member : null; ?> <?php foreach ($profile['boards'] as $n => $b) { if (!$m || in_array($n, $m)) { ?><option value="<?php printf('&host=%s&bbs=%s&itaj_en=%s', $b->host, $b->bbs, UrlSafeBase64::encode($b->name)); ?>"><?php echo p2h($b->name); ?> (<?php echo $b->hits; ?>)</option><?php } } ?> From ea93171e78e2a7318e344b23e86239a41caa4c95 Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Fri, 10 Apr 2015 17:45:40 +0900 Subject: [PATCH 129/339] =?UTF-8?q?=E3=82=AB=E3=83=86=E3=82=B4=E3=83=AA?= =?UTF-8?q?=E3=81=8C=E3=81=AA=E3=81=84=E5=A0=B4=E5=90=88=E3=83=AB=E3=83=BC?= =?UTF-8?q?=E3=83=97=E3=82=92=E5=AE=9F=E8=A1=8C=E3=81=97=E3=81=AA=E3=81=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/expack/tgrep/view.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/expack/tgrep/view.inc.php b/lib/expack/tgrep/view.inc.php index 8b239f9ed..352026687 100644 --- a/lib/expack/tgrep/view.inc.php +++ b/lib/expack/tgrep/view.inc.php @@ -116,7 +116,7 @@ function moveSubject(href, serachWord, query) { | �J�e�S���ōi�荞��: <select onchange="location.href=document.getElementById('h_php_self').value+'?Q='+document.getElementById('h_query_en').value+this.options[this.selectedIndex].value"> <option value="">-</option> -<?php foreach ($profile['categories'] as $c) { ?><option value="&C=<?php echo $c->id; ?>"<?php if ($c->id == $htm['category']) { echo ' selected="selected"'; } ?>><?php echo p2h($c->name); ?> (<?php echo $c->hits; ?>)</option><?php } ?> +<?php if(isset($profile['categories'])){ foreach ($profile['categories'] as $c) { ?><option value="&C=<?php echo $c->id; ?>"<?php if ($c->id == $htm['category']) { echo ' selected="selected"'; } ?>><?php echo p2h($c->name); ?> (<?php echo $c->hits; ?>)</option><?php } } ?> </select> | �‚ōi�荞��: <select onchange="moveSubject(document.getElementById('h_subject_php').value, document.getElementById('h_query_en').value, this.options[this.selectedIndex].value);"> From db7752163557121fa57459b4e775befb193b5535 Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Fri, 10 Apr 2015 17:47:02 +0900 Subject: [PATCH 130/339] VersionUP v150410.1746 --- conf/conf.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 926142da6..14c65d2f9 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150408.1234', // rep2�̃o�[�W���� + 'p2version' => '150410.1746', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; From 3106d7c9177f9a28d8afb5730958d6ea321c24ca Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sat, 11 Apr 2015 03:00:51 +0900 Subject: [PATCH 131/339] =?UTF-8?q?=E3=82=B9=E3=83=9E=E3=83=9B=E5=90=91?= =?UTF-8?q?=E3=81=91read=E3=81=AE=E3=83=87=E3=82=B6=E3=82=A4=E3=83=B3?= =?UTF-8?q?=E3=82=92=E6=9C=AC=E5=AE=B6=E9=A2=A8=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ShowThreadI.php | 6 +--- lib/read_header_i.inc.php | 42 +++++++++++-------------- lib/sb_print.inc.php | 8 ++--- lib/toolbar_i.inc.php | 24 +++++++++++++- rep2/css/iphone.css | 66 +++++++++++++++++++++++++++++++++------ 5 files changed, 103 insertions(+), 43 deletions(-) diff --git a/lib/ShowThreadI.php b/lib/ShowThreadI.php index d85e0310d..c52b20ff1 100644 --- a/lib/ShowThreadI.php +++ b/lib/ShowThreadI.php @@ -361,7 +361,7 @@ public function transRes($ares, $i, $pattern = null) if ($_conf['mobile.backlink_list'] == 1) { $linkstr = $this->_quotebackListHtml($i, 2); if (strlen($linkstr)) { - $tores .= '<br>' . $linkstr; + $tores .= $linkstr; } } $tores .= "</div>\n"; // ���e��‚��� @@ -821,10 +821,6 @@ public function plugin_linkURL($url, $purl, $str) global $_conf; if (isset($purl['scheme'])) { - // �g�їp�O��URL�ϊ� - if ($_conf['mobile.use_tsukin']) { - return $this->ktaiExtUrl('', $purl[0], $str); - } // ime if ($_conf['through_ime']) { $link_url = P2Util::throughIme($purl[0]); diff --git a/lib/read_header_i.inc.php b/lib/read_header_i.inc.php index e87c9142d..f81779b9d 100644 --- a/lib/read_header_i.inc.php +++ b/lib/read_header_i.inc.php @@ -122,44 +122,34 @@ </head> <body class="nopad"> <div class="ntoolbar" id="header"> -<h1 class="ptitle hoverable">{$aThread->ttitle_hd}</h1> + EOP; // {{{ �e��{�^���� - -echo '<table><tbody><tr>'; - // �‚ɖ߂� -echo '<td>'; $escaped_url = "{$_conf['subject_php']}?{$host_bbs_key_q}{$_conf['k_at_a']}"; -echo toolbar_i_standard_button('img/glyphish/icons2/104-index-cards.png', $itaj_hd, $escaped_url); -echo '</td>'; +echo toolbar_i_back_button($itaj_hd, $escaped_url); + +echo '<div id="read_toolbar_header">'; // ���X���� -echo '<td>'; -echo toolbar_i_showhide_button('img/glyphish/icons2/06-magnifying-glass.png', '����', 'read_toolbar_filter'); -echo '</td>'; +echo toolbar_i_showhide_button('img/glyphish/icons2/06-magnifying-glass.png', null, 'read_toolbar_filter'); + // ���C�ɃX�� -echo '<td>'; if ($thread_info) { - echo toolbar_i_fav_button('img/glyphish/icons2/28-star.png', '���C�ɃX��', $thread_info); + echo toolbar_i_fav_button('img/glyphish/icons2/28-star.png', null, $thread_info); } else { - echo toolbar_i_disabled_button('img/glyphish/icons2/28-star.png', '���C�ɃX��'); + echo toolbar_i_disabled_button('img/glyphish/icons2/28-star.png', null); } -echo '</td>'; // ���̑� -echo '<td>'; -echo toolbar_i_showhide_button('img/gp0-more.png', '���̑�', 'read_toolbar_extra'); -echo '</td>'; +echo toolbar_i_showhide_button('img/gp0-more.png', null, 'read_toolbar_extra'); // ���� -echo '<td>'; -echo toolbar_i_standard_button('img/gp2-down.png', '��', '#footer'); -echo '</td>'; +echo toolbar_i_standard_button('img/gp2-down.png', null, '#footer'); -echo '</tr></tbody></table>'; +echo '</div>'; // }}} // {{{ ���̑��̃c�[�� @@ -327,7 +317,7 @@ if ($do_filtering) { $htm['rf_field_names'] = array( ResFilter::FIELD_NUMBER => '���X�ԍ�', - ResFilter::FIELD_HOLE => '�S��', + ResFilter::FIELD_HOLE => '�S��', ResFilter::FIELD_MESSAGE => '�{��', ResFilter::FIELD_NAME => '���O', ResFilter::FIELD_MAIL => '���[��', @@ -352,7 +342,13 @@ echo '<div class="hits">' . p2h($aThread->resrange['start']) . '�ւ�ڽ</div>'; } -echo '</div>'; // end toolbar +echo <<<EOP +</div> + +<h4 class="thread_title hoverable">{$aThread->ttitle_hd}</h4> + +EOP; +// end toolbar // }}} diff --git a/lib/sb_print.inc.php b/lib/sb_print.inc.php index 6a668b804..bb6fe6da7 100644 --- a/lib/sb_print.inc.php +++ b/lib/sb_print.inc.php @@ -118,7 +118,7 @@ function sb_print($aThreadList) $sortq_ita = "&bbs={$aThreadList->bbs}"; } - $sortq_common = $sortq_spmode . $sortq_host . $sortq_ita; + $sortq_common = $sortq_spmode . $sortq_host . $sortq_ita . $_conf['k_at_a']; if (!empty($_REQUEST['find_cont']) && strlen($GLOBALS['word_fm']) > 0) { $word_q = '&word=' . rawurlencode($GLOBALS['word']) . '&method=' . rawurlencode($GLOBALS['sb_filter']['method']); @@ -226,7 +226,7 @@ function sb_print($aThreadList) $midoku_ari = false; $anum_ht = ''; // #r1 - $host_bbs_key_q = "host={$aThread->host}&bbs={$aThread->bbs}&key={$aThread->key}"; + $host_bbs_key_q = "host={$aThread->host}&bbs={$aThread->bbs}&key={$aThread->key}{$_conf['k_at_a']}"; if ($aThreadList->spmode != 'taborn') { if (!$aThread->torder) { $aThread->torder = $i; } @@ -285,7 +285,7 @@ function sb_print($aThreadList) if ($ita_name_bool) { $ita_name_ht = p2h($aThread->itaj ? $aThread->itaj : $aThread->bbs); $td['ita'] = <<<EOP -<td{$class_t}><a href="{$_conf['subject_php']}?host={$aThread->host}&bbs={$aThread->bbs}" target="_self">{$ita_name_ht}</a></td>\n +<td{$class_t}><a href="{$_conf['subject_php']}?host={$aThread->host}&bbs={$aThread->bbs}{$_conf['k_at_a']}" target="_self">{$ita_name_ht}</a></td>\n EOP; } @@ -371,7 +371,7 @@ function sb_print($aThreadList) $offline_q = '&offline=true'; $anum_ht = ''; } - $thre_url = "{$_conf['read_php']}?{$host_bbs_key_q}{$rescount_q}{$offline_q}{$word_q}{$anum_ht}"; + $thre_url = "{$_conf['read_php']}?{$host_bbs_key_q}{$rescount_q}{$offline_q}{$word_q}{$anum_ht}{$_conf['k_at_a']}"; // +live �����N�\���ؑ� if($_conf['live.livelink_subject']==2||$livebbs_bool) diff --git a/lib/toolbar_i.inc.php b/lib/toolbar_i.inc.php index d7e93ce62..9d6c7b076 100644 --- a/lib/toolbar_i.inc.php +++ b/lib/toolbar_i.inc.php @@ -234,8 +234,12 @@ function toolbar_i_fav_button($icon, $label, $info, $setnum = 0) 'setnum' => $setnum, 'setfav' => 2, ), '', '&'); + if(isset($label)) // null��������label�����ɂ��邽�� + { + $label = $fav['title']; + } - return _toolbar_i_button($icon, $fav['title'], $uri, $attrs); + return _toolbar_i_button($icon, $label, $uri, $attrs); } // }}} @@ -378,6 +382,24 @@ function toolbar_i_action_thread_button($icon, $label, Thread $aThread) } // }}} +// {{{ toolbar_i_action_thread_button() + +/** + * ����̃o�b�N�{�^�� + * + * @param string $label + * @return string + */ +function toolbar_i_back_button($label, $uri) +{ + global $_conf; + + + return <<<EOS +<a href="{$uri}" id="backButton">{$label}</a> +EOS; +} + // {{{ _toolbar_i_client_type() /** diff --git a/rep2/css/iphone.css b/rep2/css/iphone.css index 3d4d105b1..ccdb4b2f2 100644 --- a/rep2/css/iphone.css +++ b/rep2/css/iphone.css @@ -40,6 +40,32 @@ a:link { color: #0000ff; } +/* �����TOP�{�^�� */ +a#backButton { + position: absolute; + overflow: hidden; + top: 8px; + margin: 0; + left: 6px; right: auto; + height: 30px; + padding-right: 0px; padding-left: 0px; + width: auto; max-width: 100px; + font-family: Helvetica; + line-height: 30px; + font-size: 12px; + font-weight: bold; + text-shadow: rgba(0, 0, 0, 0.6) 0px -1px 0; + text-overflow: ellipsis; + text-decoration: none; + white-space: nowrap; + color: #FFFFFF; + border-width: 0 8px 0 14px; + /* background: #333; border-radius: 5px; min-width:46px; text-align:center */ + background: none; + -webkit-border-image: url(../iui/backButton.png?14011419) 0 8 0 14; +} + + a:visited { color: #0080ff; } @@ -154,7 +180,7 @@ div#spm { left: 10px; z-index: 1000; margin: 5px 0 0 5px; - padding 0; + padding: 0; color: #ffffff; background-color: rgba(0, 0, 0, 0.8); -webkit-box-shadow: rgba(0, 0, 0, 0.7) 0 2px 5px; @@ -208,6 +234,16 @@ div#spm > img#spm-closer { /* }}} */ /* {{{ Read */ +div#read_toolbar_header { + text-align:right; + padding: 8px 0; +} + +h4.thread_title { + margin: 8px 4px; + color: #f40; +} + h3 > font[color], div > font[color] > b { color: #252525; } @@ -222,12 +258,13 @@ div:not(.res-header) > span.onthefly { div.res:not(.aborned) { margin: 0; padding: 0; - border-top: #808080 solid 1px; - background-color: #ffffff; + /*border-top: #fff solid 1px;*/ + border-top: #dcdcdc solid 1px; + /*background-color: #FAFAFA;*/ } div.thread > div.res:not(:first-child) { - border-top-width: 4px; +/* border-top-width: 4px;*/ } div.res.aborned { @@ -239,20 +276,29 @@ div.res.aborned { div.res > div.message { margin: 0; - padding: 10px; + padding: 5px 10px; + line-height: 140%; + word-break: break-all; +} + +div.res > div.reslist { + margin: 0; + padding: 5px 10px; line-height: 140%; word-break: break-all; } div.res > div.res-header { margin: 0; - padding: 8px 10px; + padding: 5px; line-height: 120%; - border-bottom: #808080 solid 1px; + color: #1144AA; + display: inline-block; + /*border-bottom: #808080 solid 1px;*/ } div.thread > div.res > div.res-header { - background-color: #fafafa; + /*background-color: #fafafa;*/ } div.res-header > span.no { @@ -461,7 +507,7 @@ div.popup-dialog { left: 10px; z-index: 1001; margin: 5px 0 0 5px; - padding 0; + padding: 0; max-width: 300px; color: #ffffff; background-color: rgba(0, 0, 0, 0.8); @@ -625,7 +671,7 @@ div.ntoolbar > h1.ptitle { } div.ntoolbar > h1.ptitle > span.thin { - font-weight: noraml; + font-weight: normal; font-size: 14px; } From be25e8c1d0b323ba90ab7bdbf3f1f6a20c320c32 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sat, 11 Apr 2015 14:31:32 +0900 Subject: [PATCH 132/339] =?UTF-8?q?DAT=E5=8F=96=E5=BE=97=E3=83=97=E3=83=A9?= =?UTF-8?q?=E3=82=B0=E3=82=A4=E3=83=B3=E3=81=8C=E5=8B=95=E4=BD=9C=E3=81=97?= =?UTF-8?q?=E3=81=AA=E3=81=84=E4=B8=8D=E5=85=B7=E5=90=88=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=20=E3=82=B9=E3=83=9E=E3=83=9B=E5=90=91=E3=81=91?= =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B8=E4=B8=8B=E9=83=A8=E3=81=AE=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E3=83=A3=E3=81=AE=E3=83=87=E3=82=B6=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E3=82=92=E5=A4=89=E6=9B=B4=20CSS=E3=82=92=E5=BE=AE?= =?UTF-8?q?=E8=AA=BF=E6=95=B4=20read=5Fnew=5Fk.php=E3=81=AE=E4=BD=9C?= =?UTF-8?q?=E6=A5=AD=E3=82=92=E9=96=8B=E5=A7=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 2 +- lib/read_footer_i.inc.php | 6 ++++-- lib/read_header_i.inc.php | 2 +- lib/sb_footer_i.inc.php | 6 ++++-- lib/wiki/DatPluginCtl.php | 3 +-- lib/wiki/P2UtilWiki.php | 1 + rep2/css/iphone.css | 27 +++++++++++++++++++-------- rep2/read_new_k.php | 19 ++++++------------- 8 files changed, 37 insertions(+), 29 deletions(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 8447c7743..d0b076ea0 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -692,7 +692,7 @@ public function get2chDatError($code = null) { } } - $read_url = "http://{$this->host}/test/read.cgi/{$this->bbs}/{$this->key}/1"; + $read_url = "http://{$this->host}/test/read.cgi/{$this->bbs}/{$this->key}/"; // {{{ read.cgi ����HTML���擾 diff --git a/lib/read_footer_i.inc.php b/lib/read_footer_i.inc.php index 97037decb..42ba6efc3 100644 --- a/lib/read_footer_i.inc.php +++ b/lib/read_footer_i.inc.php @@ -18,7 +18,7 @@ // }}} // {{{ �c�[���o�[��\�� -echo '<div class="ntoolbar" id="footer">'; +echo '<div class="ntoolbar" id="footer"><div class="ntoolbar" id="pager">'; echo '<table><tbody><tr>'; // {{{ �y�[�W�� @@ -53,10 +53,12 @@ // }}} -echo '</tr><tr></tbody></div><div class="ntoolbar"></table><table><tbody>'; +echo '</tr></tbody></table></div>'; // {{{ ���̑��{�^���� +echo '<table><tbody><tr>'; + // �V�� echo '<td>'; if (!$aThread->diedat) { diff --git a/lib/read_header_i.inc.php b/lib/read_header_i.inc.php index f81779b9d..0d3f955fb 100644 --- a/lib/read_header_i.inc.php +++ b/lib/read_header_i.inc.php @@ -130,7 +130,7 @@ $escaped_url = "{$_conf['subject_php']}?{$host_bbs_key_q}{$_conf['k_at_a']}"; echo toolbar_i_back_button($itaj_hd, $escaped_url); -echo '<div id="read_toolbar_header">'; +echo '<div id="toolbar_header">'; // ���X���� echo toolbar_i_showhide_button('img/glyphish/icons2/06-magnifying-glass.png', null, 'read_toolbar_filter'); diff --git a/lib/sb_footer_i.inc.php b/lib/sb_footer_i.inc.php index d683536f6..7ee7bdbdb 100644 --- a/lib/sb_footer_i.inc.php +++ b/lib/sb_footer_i.inc.php @@ -147,7 +147,7 @@ // }}} // {{{ �c�[���o�[��\�� -echo '<div class="ntoolbar" id="footer">'; +echo '<div class="ntoolbar" id="footer"><div class="ntoolbar" id="pager">'; echo '<table><tbody><tr>'; // {{{ �y�[�W�� @@ -184,10 +184,12 @@ // }}} -echo '</tr><tr></tbody></div><div class="ntoolbar"></table><table><tbody>'; +echo '</tr></tbody></table></div>'; // {{{ ���̑��{�^���� +echo '<table><tbody><tr>'; + // ���ځ[�񒆂̃X���b�h�ꗗ���J�� echo '<td>'; if ($ta_num) { diff --git a/lib/wiki/DatPluginCtl.php b/lib/wiki/DatPluginCtl.php index 16db5598b..ace65f379 100644 --- a/lib/wiki/DatPluginCtl.php +++ b/lib/wiki/DatPluginCtl.php @@ -26,9 +26,8 @@ public function load() { global $_conf; - $lines = array(); $path = $_conf['pref_dir'].'/'.$this->filename; - if ($lines = @file($path)) { + if ($lines = FileCtl::file_read_lines($path)) { foreach ($lines as $l) { $lar = explode("\t", trim($l)); if (strlen($lar[0]) == 0) { diff --git a/lib/wiki/P2UtilWiki.php b/lib/wiki/P2UtilWiki.php index d79c6316c..de75dd1f7 100644 --- a/lib/wiki/P2UtilWiki.php +++ b/lib/wiki/P2UtilWiki.php @@ -41,6 +41,7 @@ public static function getResponseCode($url) { try { $req = P2Util::getHTTPRequest2 ($url, HTTP_Request2::METHOD_HEAD); + $response = $req->send(); return $response->getStatus(); } catch (Exception $e) { diff --git a/rep2/css/iphone.css b/rep2/css/iphone.css index ccdb4b2f2..3767537b5 100644 --- a/rep2/css/iphone.css +++ b/rep2/css/iphone.css @@ -65,6 +65,12 @@ a#backButton { -webkit-border-image: url(../iui/backButton.png?14011419) 0 8 0 14; } +div#toolbar_header { + text-align:right; + padding: 6px; + height: 45px; + -webkit-box-sizing: border-box; +} a:visited { color: #0080ff; @@ -234,11 +240,6 @@ div#spm > img#spm-closer { /* }}} */ /* {{{ Read */ -div#read_toolbar_header { - text-align:right; - padding: 8px 0; -} - h4.thread_title { margin: 8px 4px; color: #f40; @@ -652,13 +653,18 @@ div.ntoolbar { color: #fff; } +div.ntoolbar#pager { + background-color: #808080; + color: #fff; +} + div.ntoolbar#header { } div.ntoolbar#footer { } -div.ntoolbar > h1.ptitle { +h1.ptitle { margin: 0; padding: 10px; white-space: nowrap; @@ -670,7 +676,7 @@ div.ntoolbar > h1.ptitle { line-height: 16px; } -div.ntoolbar > h1.ptitle > span.thin { +h1.ptitle > span.thin { font-weight: normal; font-size: 14px; } @@ -715,7 +721,7 @@ div.ntoolbar td { width: 20%; min-width: 64px; margin: 0; - padding: 8px 0; + padding: 4px 0; text-align: center; vertical-align: middle; border-top: #808080 solid 1px; @@ -723,6 +729,11 @@ div.ntoolbar td { line-height: 11px; } +div.ntoolbar#pager td { + padding: 3px 0; + border-top: none; +} + div.ntoolbar td[colspan='2'] { width: 40%; } diff --git a/rep2/read_new_k.php b/rep2/read_new_k.php index 6f8e80059..35aed920e 100644 --- a/rep2/read_new_k.php +++ b/rep2/read_new_k.php @@ -187,24 +187,17 @@ echo <<<EOP <body class="nopad"> <div class="ntoolbar" id="header"> -<h1 class="ptitle hoverable">{$sb_ht} <span class="thin">(�V�܂Ƃ�)</span></h1> -<table><tbody><tr> EOP; // �‚ɖ߂� - echo '<td colspan="2">'; - echo toolbar_i_standard_button('img/glyphish/icons2/104-index-cards.png', $ptitle_hd, $ita_url); - echo '</td>'; - - // �\��x2 - echo '<td> </td><td> </td>'; + echo toolbar_i_back_button( $ptitle_hd, $ita_url); - // ���� - echo '<td>'; - echo toolbar_i_standard_button('img/gp2-down.png', '��', '#footer'); - echo '</td>'; + echo '<div id="toolbar_header">'; + echo <<<EOP +<h1 class="ptitle hoverable">�V���܂Ƃߓǂ�</span></h1> +</div> +EOP; - echo '</tr></tbody></table>'; $info_ht = P2Util::getInfoHtml(); if (strlen($info_ht)) { From 28746a12e1a4271ed189991dc5392328c78ce92f Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sun, 12 Apr 2015 00:04:13 +0900 Subject: [PATCH 133/339] =?UTF-8?q?=E3=82=B9=E3=83=9E=E3=83=9B=E5=90=91?= =?UTF-8?q?=E3=81=91read=E3=81=AB=E6=9B=B8=E3=81=8D=E8=BE=BC=E3=81=BF?= =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=BC=E3=83=A0=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=20=E6=88=BB=E3=82=8B=E3=83=9C=E3=82=BF=E3=83=B3=E3=81=AE?= =?UTF-8?q?=E8=89=B2=E3=82=92=E7=99=BD=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/read_footer_i.inc.php | 39 ++++++++++++++++++++++++++++++++++++-- lib/read_header.inc.php | 10 +++++----- lib/read_header_i.inc.php | 8 ++++++++ rep2/css/iphone.css | 9 +++++++++ rep2/iui/backButton.png | Bin 541 -> 472 bytes rep2/js/iphone.js | 6 ++++++ 6 files changed, 65 insertions(+), 7 deletions(-) diff --git a/lib/read_footer_i.inc.php b/lib/read_footer_i.inc.php index 42ba6efc3..229cb6a60 100644 --- a/lib/read_footer_i.inc.php +++ b/lib/read_footer_i.inc.php @@ -55,6 +55,37 @@ echo '</tr></tbody></table></div>'; +// {{{�������݃t�H�[�� +if ($_conf['bottom_res_form']) { + $bbs = $aThread->bbs; + $key = $aThread->key; + $host = $aThread->host; + $rescount = $aThread->rescount; + $ttitle_en = UrlSafeBase64::encode($aThread->ttitle); + + $submit_value = '��������'; + + $key_idx = $aThread->keyidx; + + // �t�H�[���̃I�v�V�����ǂݍ��� + require_once P2_LIB_DIR . '/post_form_options.inc.php'; + + $htm['resform_ttitle'] = <<<EOP +<p><b class="thre_title">{$aThread->ttitle_hd}</b></p> +EOP; + + require_once P2_LIB_DIR . '/post_form.inc.php'; + + echo <<<EOP +<div id="kakiko" class="extra"> +{$htm['dpreview']} +{$htm['post_form']} +{$htm['dpreview2']} +</div>\n +EOP; +} +// }}} + // {{{ ���̑��{�^���� echo '<table><tbody><tr>'; @@ -89,8 +120,12 @@ echo '<td>'; if (!$aThread->diedat) { if (empty($_conf['disable_res'])) { - $escaped_url = "post_form.php?{$host_bbs_key_q}&rescount={$aThread->rescount}{$ttitle_en_q}{$_conf['k_at_a']}"; - echo toolbar_i_standard_button('img/glyphish/icons2/08-chat.png', '����', $escaped_url); + if ($_conf['bottom_res_form']) { + echo toolbar_i_showhide_button('img/glyphish/icons2/08-chat.png', '����', 'kakiko'); + } else { + $escaped_url = "post_form.php?{$host_bbs_key_q}&rescount={$aThread->rescount}{$ttitle_en_q}{$_conf['k_at_a']}"; + echo toolbar_i_standard_button('img/glyphish/icons2/08-chat.png', '����', $escaped_url); + } } else { echo toolbar_i_opentab_button('img/glyphish/icons2/08-chat.png', '���X��', $motothre_url); } diff --git a/lib/read_header.inc.php b/lib/read_header.inc.php index 104d781b9..248f8fd50 100755 --- a/lib/read_header.inc.php +++ b/lib/read_header.inc.php @@ -305,11 +305,6 @@ <script type="text/javascript" src="js/ic2_getcount.js?{$_conf['p2_version_id']}"></script> EOP; } -if ($_conf['expack.editor.savedraft'] != '0') { - echo <<<EOP - <script type="text/javascript" src="js/post_draft.js?{$_conf['p2_version_id']}"></script> -EOP; -} if ($_conf['wiki.idsearch.spm.mimizun.enabled'] || $_conf['wiki.idsearch.spm.hissi.enabled'] || $_conf['wiki.idsearch.spm.stalker.enabled']) { @@ -325,6 +320,11 @@ if ($_conf['expack.editor.dpreview']) { echo "\t<link rel=\"stylesheet\" type=\"text/css\" href=\"css.php?css=prvw&skin={$skin_en}\">\n"; } + if ($_conf['expack.editor.savedraft'] != '0') { + echo <<<EOP + <script type="text/javascript" src="js/post_draft.js?{$_conf['p2_version_id']}"></script> +EOP; + } echo "\t<script type=\"text/javascript\" src=\"js/post_form.js?{$_conf['p2_version_id']}\"></script>\n"; $onload_script .= 'checkSage();'; } diff --git a/lib/read_header_i.inc.php b/lib/read_header_i.inc.php index 0d3f955fb..1a9b0f309 100644 --- a/lib/read_header_i.inc.php +++ b/lib/read_header_i.inc.php @@ -106,6 +106,14 @@ EOS; } +if ($_conf['bottom_res_form']) { + $_conf['extra_headers_ht'] .= "\t<script type=\"text/javascript\" src=\"js/post_form.js?{$_conf['p2_version_id']}\"></script>\n"; + if ($_conf['expack.editor.savedraft'] != '0') { + $_conf['extra_headers_ht'] .= <<<EOP + <script type="text/javascript" src="js/post_draft.js?{$_conf['p2_version_id']}"></script> +EOP; + } +} // }}} // }}} // {{{ HTML�v�����g diff --git a/rep2/css/iphone.css b/rep2/css/iphone.css index 3767537b5..b403ce2c3 100644 --- a/rep2/css/iphone.css +++ b/rep2/css/iphone.css @@ -107,6 +107,15 @@ p.empty { color: #333;; } +/* }}} * +/* {{{ Res */ +textarea#MESSAGE { + padding: 6px; + line-height: 132%; + width: 100%; + box-sizing: border-box; + -webkit-box-sizing: border-box; +} /* }}} * /* {{{ Forms */ diff --git a/rep2/iui/backButton.png b/rep2/iui/backButton.png index 70b416f99d29f521d2ab54a57aec9b3165c0b587..224da72080a65b64b9ba9c42d3175005e9d17141 100644 GIT binary patch delta 429 zcmV;e0aE^*1lR+RB#|@}e*ua~L_t(oh1HnBQNlnJhCgTkI?xWV1L=TtV4UF&-rf;z z@1|5>>>zX?9cTyIfp*}*9|%L(#6z;{ciKOb!#A1t-fng<pU?R(4FB@7yBF@BcjVGY zYgtL&0jsWLnrJ2K?l-`*;#YS%VH#!KeGHU}-$2%>QGhmIwgj%Uf6mS9qdT22L0NZy z0&W#IW>$vY@0yFU?w$b)#hsZg`%$_~t*jcVP>foqRnBD9Pz5m3qs+{rO@JzOU$y`y zTCdIQwKtmvPGsGE3Ct9?X140xD8ND1-KW5#;wO+t@Ch;maQADDgC7#A(<=KfTXJlu z2Qzz%<P)T>!KQsnf3#&UoAEnO0cP3|l4A&<{k|$#sE(83PzIW(YsC?#4VMHbHLJP0 zRh;M`lMHnYmILovFEoFX;7nHYHRsrHWh(Vsd+O4h-5&{)so#s|Su-nujbak@8~jty zfqSR8h&_MX{DW0DjHvUsQC1B%Rg7A{t?mufaQBMi?sUSmBfgPQ!@UskMrQDzF6Mp! XO0jRlU5e=@00000NkvXXu0mjf;Ly@O delta 496 zcmV<M0T2Gz1DynrBn<>}LP=Bz2nYy#2xN$nAs2rD9CSrkbW?9;ba!ELWdK2BZ(?O2 zMrm?ocW-iQb09-gHF34$HUIztmq|oHR9J=8n88)TKomtUHUJ%H2Veze^Vebp#tOs^ zpaP`=V+F$cFT@V81MNU6hzni_977TpVaB_fmy^XillOoAOfS!K{tIV+dD+Y|GfO-2 z(nx=6vod)LOuI7EL@TpqHUgd{zq_+jPor5g8vqN*4KVK1Q4MW&b^)Agox1yHcXsNj zHEU*1z?J0O-4}K5cTMkD>oT)3@GAN4?#Zc49iwt*RZy8^(46k`%d8421NwS2cK2W% zV4td;&48iSGk0H|%uNFanKiQs@F=--_b7ipf5C2N%`Blb`URu`{M6FR^Bgm~0M?W_ zy>$0=I9t^eJG-DX`Vga0s4lSN)F#?em>sk2rvTUbAw<Wn8>qnE^n3%1Le2qI>|&sP zI+N^EPFm4$kXd)10!zuE2AOE6DzFsz(E48Sh=R(gOM}dcZ5*P>Z{^gbK0A?&Ccjum zhi`Y!fVpH8`8_&(7ns?K^0aUh^0d(A47UHn$TUX;q0y`c??f_aep}resNn7-2i@7J mr}d4D3hsq~H!_U{785_-{e;>XvgXwQ0000<MNUMnLSTa2x8<P# diff --git a/rep2/js/iphone.js b/rep2/js/iphone.js index 6108d42ee..94f341e88 100644 --- a/rep2/js/iphone.js +++ b/rep2/js/iphone.js @@ -778,6 +778,12 @@ iutil.toolbarShowHide = function(element, event) { } } } + + // �������݃t�H�[���Ȃ��ʂ��X�N���[��(�{�Ƃ��) + if(id=='kakiko') { + var to = parseInt(target.offsetTop); + document.body.scrollTop = to - 60; + } } } } From 72d72f873e4f4847bc5a9fc9e203ff06c081568b Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Sun, 12 Apr 2015 11:27:19 +0900 Subject: [PATCH 134/339] =?UTF-8?q?pull=20request=20=E3=81=A7=E3=81=AE?= =?UTF-8?q?=E6=9A=AB=E5=AE=9A=E7=9A=84=E3=83=90=E3=83=BC=E3=82=B8=E3=83=A7?= =?UTF-8?q?=E3=83=B3=E3=82=A2=E3=83=83=E3=83=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 14c65d2f9..0a81f59a6 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150410.1746', // rep2�̃o�[�W���� + 'p2version' => '150408.0001', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; From e6d596a96134ed65695190b1bf629d597f1f8c27 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Tue, 14 Apr 2015 09:30:28 +0900 Subject: [PATCH 135/339] =?UTF-8?q?=E3=82=B9=E3=83=9E=E3=83=9B=E7=94=A8sub?= =?UTF-8?q?ject=E3=81=A8read=5Fnew=E3=82=92=E6=9C=AC=E5=AE=B6=E9=A2=A8UI?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4=20=E3=82=B9=E3=83=9E=E3=83=9B?= =?UTF-8?q?=E7=94=A8read=E3=82=92subject=E3=81=AB=E5=90=88=E3=82=8F?= =?UTF-8?q?=E3=81=9B=E3=81=9FUI=E3=81=AB=E5=A4=89=E6=9B=B4=20README.md?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=20=E3=82=B9=E3=83=9E=E3=83=9B=E7=94=A8read?= =?UTF-8?q?=E3=81=8B=E3=82=89=E6=9B=B8=E3=81=8D=E8=BE=BC=E3=82=80=E6=99=82?= =?UTF-8?q?=E3=81=AB=E6=9B=B8=E3=81=8D=E8=BE=BC=E3=81=BF=E6=AC=84=E3=81=AB?= =?UTF-8?q?=E8=87=AA=E5=8B=95=E7=9A=84=E3=81=AB=E3=83=95=E3=82=A9=E3=83=BC?= =?UTF-8?q?=E3=82=AB=E3=82=B9=E3=81=8C=E7=A7=BB=E5=8B=95=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 + lib/read_header_i.inc.php | 20 +++++-- lib/sb_footer_i.inc.php | 12 +--- lib/sb_header_i.inc.php | 77 +++++++++++++------------ lib/toolbar_i.inc.php | 70 +++++++++++++++++++---- rep2/css/iphone.css | 115 ++++++++++++++++++++++++++++---------- rep2/js/iphone.js | 7 ++- 7 files changed, 208 insertions(+), 95 deletions(-) diff --git a/README.md b/README.md index 802803e29..a41092fe4 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,8 @@ Webブラウザから変更できない項目は [conf/conf_admin.inc.php](https * **thermon** https://github.com/thermon/p2-php/ * **part32の892** *(+live)* https://github.com/pluslive/p2-php/ * **orzisun** https://github.com/orzisun/p2-php +* **2ch774** https://github.com/2ch774/p2-php +* **killer4989** https://github.com/killer4989/p2-php * **2ch p2/rep2スレの>>1-1000** diff --git a/lib/read_header_i.inc.php b/lib/read_header_i.inc.php index 1a9b0f309..ca8a833fe 100644 --- a/lib/read_header_i.inc.php +++ b/lib/read_header_i.inc.php @@ -147,15 +147,11 @@ // ���C�ɃX�� if ($thread_info) { echo toolbar_i_fav_button('img/glyphish/icons2/28-star.png', null, $thread_info); -} else { - echo toolbar_i_disabled_button('img/glyphish/icons2/28-star.png', null); } // ���̑� echo toolbar_i_showhide_button('img/gp0-more.png', null, 'read_toolbar_extra'); -// ���� -echo toolbar_i_standard_button('img/gp2-down.png', null, '#footer'); echo '</div>'; @@ -299,6 +295,20 @@ {$_conf['detect_hint_input_ht']}{$_conf['k_input_ht']} </form> </div> +<div class="ntoolbar" id="pager"> +<table><tbody><tr> +<td colspan="4" id="thread_title"><div> +{$aThread->ttitle_hd} +</div></td> +<td> +EOP; + +// ���� +echo toolbar_i_standard_button('img/gp2-down.png', null, '#footer'); + +echo <<<EOP +</td> +</tr></tbody></table></div> EOP; // }}} @@ -353,8 +363,6 @@ echo <<<EOP </div> -<h4 class="thread_title hoverable">{$aThread->ttitle_hd}</h4> - EOP; // end toolbar diff --git a/lib/sb_footer_i.inc.php b/lib/sb_footer_i.inc.php index 7ee7bdbdb..5175abfb3 100644 --- a/lib/sb_footer_i.inc.php +++ b/lib/sb_footer_i.inc.php @@ -7,9 +7,7 @@ //================================================= //�t�b�^�v�����g //================================================= -$bbs_q = '&bbs=' . $aThreadList->bbs; -$host_bbs_q = 'host=' . $aThreadList->host . $bbs_q; -$paging_q = $host_bbs_q . '&spmode=' . $aThreadList->spmode . $norefresh_q; + if (!empty($GLOBALS['wakati_words'])) { $paging_q .= '&method=similar&word=' . rawurlencode($GLOBALS['wakati_word']); @@ -195,10 +193,7 @@ if ($ta_num) { $escaped_url = "{$_conf['subject_php']}?{$host_bbs_q}{$norefresh_q}&spmode=taborn{$_conf['k_at_a']}"; echo toolbar_i_badged_button('img/glyphish/icons2/128-bone.png', '���ځ[���', $escaped_url, $ta_num); -} elseif ($aThreadList->spmode == 'taborn') { - $escaped_url = "{$_conf['subject_php']}?{$host_bbs_q}{$_conf['k_at_a']}"; - echo toolbar_i_standard_button('img/glyphish/icons2/63-runner.png', '�‚ɖ߂�', $escaped_url); -} else { +} else { echo toolbar_i_disabled_button('img/glyphish/icons2/128-bone.png', '���ځ[���'); } echo '</td>'; @@ -208,9 +203,6 @@ if (!$aThreadList->spmode || $aThreadList->spmode == 'taborn') { $escaped_url = "{$_conf['subject_php']}?{$host_bbs_q}{$norefresh_q}&spmode=soko{$_conf['k_at_a']}"; echo toolbar_i_standard_button('img/glyphish/icons2/33-cabinet.png', 'dat�q��', $escaped_url); -} elseif ($aThreadList->spmode == 'soko') { - $escaped_url = "{$_conf['subject_php']}?{$host_bbs_q}{$_conf['k_at_a']}"; - echo toolbar_i_standard_button('img/glyphish/icons2/63-runner.png', '�‚ɖ߂�', $escaped_url); } else { echo toolbar_i_disabled_button('img/glyphish/icons2/33-cabinet.png', 'dat�q��'); } diff --git a/lib/sb_header_i.inc.php b/lib/sb_header_i.inc.php index 6e1b7ca03..6c83f424d 100644 --- a/lib/sb_header_i.inc.php +++ b/lib/sb_header_i.inc.php @@ -9,6 +9,9 @@ //=============================================================== $newtime = date('gis'); $norefresh_q = '&norefresh=1'; +$bbs_q = '&bbs=' . $aThreadList->bbs; +$host_bbs_q = 'host=' . $aThreadList->host . $bbs_q; +$paging_q = $host_bbs_q . '&spmode=' . $aThreadList->spmode . $norefresh_q; // {{{ �y�[�W�^�C�g������URL�ݒ� @@ -103,16 +106,21 @@ </head> <body class="nopad"> <div class="ntoolbar" id="header"> -<h1 class="ptitle hoverable">{$ptitle_ht}</h1> EOP; // {{{ �e��{�^���� -echo '<table><tbody><tr>'; - +// �߂� +if ($aThreadList->spmode == 'taborn' || $aThreadList->spmode == 'soko') { + $escaped_url = "{$_conf['subject_php']}?{$host_bbs_q}{$_conf['k_at_a']}"; + echo toolbar_i_back_button('�‚ɖ߂�', $escaped_url); +} else { + echo toolbar_i_back_button('TOP', "index.php{$_conf['k_at_q']}"); +} +echo '<div id="toolbar_header">'; // �V���܂Ƃߓǂ� $shinchaku_norefresh_ht = ''; -echo '<td>'; + if ($aThreadList->spmode != 'soko') { $shinchaku_matome_url = "{$_conf['read_new_k_php']}?host={$aThreadList->host}&bbs={$aThreadList->bbs}&spmode={$aThreadList->spmode}&nt={$newtime}{$_conf['k_at_a']}"; @@ -122,45 +130,25 @@ if ($shinchaku_attayo) { $shinchaku_norefresh_ht = '<input type="hidden" name="norefresh" value="1">'; - echo toolbar_i_badged_button('img/glyphish/icons2/104-index-cards.png', '�V�܂Ƃ�', + echo toolbar_i_badged_button('img/glyphish/icons2/104-index-cards.png', null, $shinchaku_matome_url . $norefresh_q, $shinchaku_num); } else { - echo toolbar_i_standard_button('img/glyphish/icons2/104-index-cards.png', '�V�܂Ƃ�', $shinchaku_matome_url); + echo toolbar_i_standard_button('img/glyphish/icons2/104-index-cards.png', null, $shinchaku_matome_url); } -} else { - echo toolbar_i_disabled_button('img/glyphish/icons2/104-index-cards.png', '�V�܂Ƃ�'); } -echo '</td>'; // �X������ -echo '<td>'; -if (!$spmode_without_palace_or_favita) { - echo toolbar_i_showhide_button('img/glyphish/icons2/06-magnifying-glass.png', '����', 'sb_toolbar_filter'); -} else { - echo toolbar_i_disabled_button('img/glyphish/icons2/06-magnifying-glass.png', '����'); -} -echo '</td>'; +echo toolbar_i_showhide_button('img/glyphish/icons2/06-magnifying-glass.png', null, 'sb_toolbar_filter'); // ���C�ɔ� -echo '<td>'; if ($board_info) { - echo toolbar_i_favita_button('img/glyphish/icons2/28-star.png', '���C�ɔ�', $board_info); -} else { - echo toolbar_i_disabled_button('img/glyphish/icons2/28-star.png', '���C�ɔ�'); + echo toolbar_i_favita_button('img/glyphish/icons2/28-star.png', null, $board_info); } -echo '</td>'; // ���̑� -echo '<td>'; -echo toolbar_i_showhide_button('img/gp0-more.png', '���̑�', 'sb_toolbar_extra'); -echo '</td>'; - -// ���� -echo '<td>'; -echo toolbar_i_standard_button('img/gp2-down.png', '��', '#footer'); -echo '</td>'; +echo toolbar_i_showhide_button('img/gp0-more.png', null, 'sb_toolbar_extra'); -echo '</tr></tbody></table>'; +echo '</div>'; // }}} // {{{ ���̑��̃c�[�� @@ -265,15 +253,13 @@ // }}} // {{{ �X�������t�H�[�� +if (array_key_exists('method', $sb_filter) && $sb_filter['method'] == 'or') { + $hd['method_checked_at'] = ' checked'; +} else { + $hd['method_checked_at'] = ''; +} -if (!$spmode_without_palace_or_favita) { - if (array_key_exists('method', $sb_filter) && $sb_filter['method'] == 'or') { - $hd['method_checked_at'] = ' checked'; - } else { - $hd['method_checked_at'] = ''; - } - - echo <<<EOP +echo <<<EOP <div id="sb_toolbar_filter" class="extra"> <form id="sb_filter" method="get" action="{$_conf['subject_php']}" accept-charset="{$_conf['accept_charset']}"> {$sb_form_hidden_ht}<input type="text" id="sb_filter_word" name="word" value="{$hd['word']}" size="15" autocorrect="off" autocapitalize="off"> @@ -281,8 +267,21 @@ <input type="submit" name="submit_kensaku" value="����"> </form> </div> +<div class="ntoolbar" id="pager"> +<table><tbody><tr> +<td colspan="4" id="thread_title"><div> +{$ptitle_hd} +</div></td> +<td> +EOP; + +// ���� +echo toolbar_i_standard_button('img/gp2-down.png', null, '#footer'); + +echo <<<EOP +</td> +</tr></tbody></table></div> EOP; -} // }}} // {{{ �e��ʒm diff --git a/lib/toolbar_i.inc.php b/lib/toolbar_i.inc.php index 9d6c7b076..4454a0e16 100644 --- a/lib/toolbar_i.inc.php +++ b/lib/toolbar_i.inc.php @@ -54,16 +54,10 @@ function _toolbar_i_button($icon, $label, $uri, $attrs = '') $attrs = str_replace('class="', 'class="hoverable ', $attrs); } - if (empty($_conf['expack.iphone.toolbars.no_label']) && !empty($label) ) { - $label = '<br>' . $label; - } else { - $label = ''; - } - $icon = _toolbar_i_icon($icon); return <<<EOS -<a href="{$uri}"{$attrs}><img src="{$icon}" width="48" height="32" alt="">{$label}</a> +<span class="available"><a href="{$uri}"{$attrs}><img src="{$icon}" width="48" height="32" alt="">{$label}</a></span> EOS; } @@ -85,6 +79,12 @@ function toolbar_i_standard_button($icon, $label, $uri) } else { $attrs = ''; } + + if (empty($_conf['expack.iphone.toolbars.no_label']) && !empty($label) ) { + $label = '<br>' . $label; + } else { + $label = ''; + } return _toolbar_i_button($icon, $label, $uri, $attrs); } @@ -102,8 +102,13 @@ function toolbar_i_standard_button($icon, $label, $uri) */ function toolbar_i_badged_button($icon, $label, $uri, $badge) { + if (empty($_conf['expack.iphone.toolbars.no_label']) && !empty($label) ) { + $label = '<br>' . $label; + } else { + $label = ''; + } $label .= sprintf('<span class="badge l%d">%s</span>', min(strlen($badge), 4), $badge); - return _toolbar_i_button($icon, $label, $uri); + return '<div id="matome">'._toolbar_i_button($icon, $label, $uri).'</div>'; } // }}} @@ -119,6 +124,11 @@ function toolbar_i_badged_button($icon, $label, $uri, $badge) */ function toolbar_i_opentab_button($icon, $label, $uri) { + if (empty($_conf['expack.iphone.toolbars.no_label']) && !empty($label) ) { + $label = '<br>' . $label; + } else { + $label = ''; + } return _toolbar_i_button($icon, $label, $uri, ' target="_blank"'); } @@ -137,7 +147,7 @@ function toolbar_i_disabled_button($icon, $label) { global $_conf; - if (empty($_conf['expack.iphone.toolbars.no_label'])) { + if (empty($_conf['expack.iphone.toolbars.no_label']) && !empty($label)) { $label = '<br>' . $label; } else { $label = ''; @@ -164,6 +174,11 @@ function toolbar_i_disabled_button($icon, $label) function toolbar_i_showhide_button($icon, $label, $id) { $attrs = ' onclick="return iutil.toolbarShowHide(this, event);"'; + if (empty($_conf['expack.iphone.toolbars.no_label']) && !empty($label) ) { + $label = '<br>' . $label; + } else { + $label = ''; + } return _toolbar_i_button($icon, $label, "#{$id}", $attrs); } @@ -199,7 +214,17 @@ function toolbar_i_favita_button($icon, $label, $info, $setnum = 0) 'setfavita' => 2, ), '', '&'); - return _toolbar_i_button($icon, $fav['title'], $uri, $attrs); + if(isset($label)) // null��������label�����ɂ��邽�� + { + $label = $fav['title']; + } + + if (empty($_conf['expack.iphone.toolbars.no_label']) && !empty($label) ) { + $label = '<br>' . $label; + } else { + $label = ''; + } + return _toolbar_i_button($icon, $label, $uri, $attrs); } // }}} @@ -238,6 +263,11 @@ function toolbar_i_fav_button($icon, $label, $info, $setnum = 0) { $label = $fav['title']; } + if (empty($_conf['expack.iphone.toolbars.no_label']) && !empty($label) ) { + $label = '<br>' . $label; + } else { + $label = ''; + } return _toolbar_i_button($icon, $label, $uri, $attrs); } @@ -267,6 +297,11 @@ function toolbar_i_palace_button($icon, $label, $info) 'ttitle_en' => UrlSafeBase64::encode($info->ttitle), 'setpal' => 2, ), '', '&'); + if (empty($_conf['expack.iphone.toolbars.no_label']) && !empty($label) ) { + $label = '<br>' . $label; + } else { + $label = ''; + } return _toolbar_i_button($icon, $label, $uri, $attrs); } @@ -296,6 +331,11 @@ function toolbar_i_aborn_button($icon, $label, $info) 'ttitle_en' => UrlSafeBase64::encode($info->ttitle), 'taborn' => 2, ), '', '&'); + if (empty($_conf['expack.iphone.toolbars.no_label']) && !empty($label) ) { + $label = '<br>' . $label; + } else { + $label = ''; + } return _toolbar_i_button($icon, $label, $uri, $attrs); } @@ -336,6 +376,11 @@ function toolbar_i_action_board_button($icon, $label, ThreadList $aThreadList) if ($title !== '') { $label = p2h($title, false); } + if (empty($_conf['expack.iphone.toolbars.no_label']) && !empty($label) ) { + $label = '<br>' . $label; + } else { + $label = ''; + } return _toolbar_i_button($icon, $label, $uri); } @@ -377,6 +422,11 @@ function toolbar_i_action_thread_button($icon, $label, Thread $aThread) if ($title !== '') { $label = p2h($title, false); } + if (empty($_conf['expack.iphone.toolbars.no_label']) && !empty($label) ) { + $label = '<br>' . $label; + } else { + $label = ''; + } return _toolbar_i_button($icon, $label, $uri); } diff --git a/rep2/css/iphone.css b/rep2/css/iphone.css index b403ce2c3..d354ae31a 100644 --- a/rep2/css/iphone.css +++ b/rep2/css/iphone.css @@ -8,7 +8,7 @@ body { font-family: sans-serif; font-size: medium; line-height: 140%; - color: #000000; + color: #000; background-color: #fafafa; -webkit-text-size-adjust: none; } @@ -249,9 +249,46 @@ div#spm > img#spm-closer { /* }}} */ /* {{{ Read */ -h4.thread_title { - margin: 8px 4px; - color: #f40; +span.thread_title { + text-align: left; + font-weight: bold; + font-size: 16px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + width: 100%; + box-sizing: border-box; + display: inline-block; +} + +td#thread_title { + text-align: left; + font-weight: bold; + font-size: 14px; + line-height: 14px; +} + +td#thread_title > div { + padding: 0 0 0 8px; + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +span.link_right_button { + position: absolute; + text-align: right; + right: 0; + top: 0; + padding: 3px 0; + display: inline-block; +} + +div.thread_title { + background-color: #808080; + position: relative; + padding: 4px 0px 4px 4px; } h3 > font[color], div > font[color] > b { @@ -444,17 +481,14 @@ ul.subject > li > a:visited { } ul.subject > li > a:active { - color: #ffffff; - background-color: #194fdb; - -webkit-tap-highlight-color: transparent; } ul.subject > li > a:link > span.new { - color: #ff0000; + color: #8C99B4; } ul.subject > li > a:visited > span.new { - color: #fa5825; + color: #8090B0; } ul.subject > li > a:active > span.new { @@ -467,14 +501,21 @@ ul.subject > li > a > span.info { ul.subject > li > a > span.title { word-break: break-all; - font-size: large; + font-size: 15px; + line-height: 127%; font-weight: bold; } ul.subject > li > a > span.ita { + white-space: nowrap; + color: #666; + font-size: 12px; } ul.subject > li > a > span.num { + white-space: nowrap; + color: #999999; + font-size: 14px; } ul.subject > li > a > span.unread { @@ -487,13 +528,16 @@ ul.subject > li > a > span.unread { ul.subject > li > a > span.unread.new { font-weight: bold; - background-color: #ff0000; + background-color: #8C99B4; } ul.subject > li > a > span.unread.offline { } ul.subject > li > a > span.count { + white-space: nowrap; + color: #999; + font-size: 14px; } ul.subject > li > a > span.count:before { @@ -505,6 +549,9 @@ ul.subject > li > a > span.count:after { } ul.subject > li > a > span.score { + white-space: nowrap; + color: #666; + font-size: 12px; } /* }}} */ @@ -571,7 +618,7 @@ div.popup-dialog > div.popup-dialog-buttons > input[type="button"] { ul.subject > li.info-pop { margin: 0; padding: 10px 5px; - background-color: #333333; + background-color: #333; color: #ffffff; font-size: 16px !important; font-weight: bold; @@ -723,6 +770,7 @@ div.ntoolbar table { padding: 0; border-collapse: collapse; empty-cells: show; + table-layout: fixed; } div.ntoolbar td { @@ -739,7 +787,7 @@ div.ntoolbar td { } div.ntoolbar#pager td { - padding: 3px 0; + padding: 0; border-top: none; } @@ -788,9 +836,12 @@ div.ntoolbar a:visited { div.ntoolbar a.inactive { color: #fff; } - +div.ntoolbar span.available { + display: inline-block; +} div.ntoolbar span.unavailable { color: #555; + display: inline-block; } div.ntoolbar a.hover, @@ -800,7 +851,14 @@ div.ntoolbar a:active { color: #b4b4b4; } -div.ntoolbar td > a > span.badge { +/* �o�b�W�̈ʒu���߂̂��߂��� */ +div#matome { + display: inline-block; + position: relative; +} + + +a > span.badge { display: inline-block; position: absolute; top: 0; @@ -811,34 +869,33 @@ div.ntoolbar td > a > span.badge { padding: 2px 5px; -webkit-border-radius: 8px; border-radius: 8px; - background-color: #f00; - background-color: rgba(255, 0, 0, 0.95); + background-color: #8C99B4; color: #fff; font-weight: bold; font-size: 12px; line-height: 12px; } -div.ntoolbar td > a > span.badge.l2 { +a > span.badge.l2 { right: 5px; } -div.ntoolbar td > a > span.badge.l3 { +a > span.badge.l3 { right: 3px; } -div.ntoolbar td > a > span.badge.l4 { +a > span.badge.l4 { right: 0px; } -div.ntoolbar td > a > span.badge.l0 { +a > span.badge.l0 { display: none; } -div.ntoolbar td > a.hover > span.badge, -div.ntoolbar td > a.active > span.badge, -div.ntoolbar td > a:hover > span.badge, -div.ntoolbar td > a:active > span.badge { +a.hover > span.badge, +a.active > span.badge, +a:hover > span.badge, +a:active > span.badge { background-color: #36f; } @@ -882,7 +939,7 @@ div.mtoolbar { min-width: 320px; margin: 0; padding: 0; - background-color: #333; + background-color: #808080; color: #fff; } @@ -966,7 +1023,7 @@ div.mtoolbar > .ttitle > span.btitle { div.ntoolbar td > a { width: 68px; } - div.ntoolbar td > a > span.badge { + a > span.badge { right: 8px !important; } } @@ -975,7 +1032,7 @@ div.mtoolbar > .ttitle > span.btitle { div.ntoolbar td > a { width: 76px; } - div.ntoolbar td > a > span.badge { + a > span.badge { right: 16px !important; } } @@ -984,7 +1041,7 @@ div.mtoolbar > .ttitle > span.btitle { div.ntoolbar td > a { width: 92px; } - div.ntoolbar td > a > span.badge { + a > span.badge { right: 24px !important; } } diff --git a/rep2/js/iphone.js b/rep2/js/iphone.js index 94f341e88..9df463121 100644 --- a/rep2/js/iphone.js +++ b/rep2/js/iphone.js @@ -780,9 +780,14 @@ iutil.toolbarShowHide = function(element, event) { } // �������݃t�H�[���Ȃ��ʂ��X�N���[��(�{�Ƃ��) - if(id=='kakiko') { + if (id=='kakiko') { var to = parseInt(target.offsetTop); document.body.scrollTop = to - 60; + // �������݃t�H�[���ɃL�����b�g���ڂ� + var textbox = document.getElementById('MESSAGE'); + var len = textbox.value.length; + textbox.focus(); + textbox.setSelectionRange(len, len); } } } From 21c8e2fb60d54b1e7a89748712396ecd2aec0803 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Tue, 14 Apr 2015 09:40:58 +0900 Subject: [PATCH 136/339] =?UTF-8?q?=E3=81=93=E3=81=AE=E3=81=BE=E3=81=BE?= =?UTF-8?q?=E3=81=A0=E3=81=A8=E3=83=90=E3=83=BC=E3=82=B8=E3=83=A7=E3=83=B3?= =?UTF-8?q?=E3=81=8C=E5=B7=BB=E6=88=BB=E3=82=8B=E3=81=AE=E3=81=A7=E3=83=90?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E3=83=A7=E3=83=B3=E7=95=AA=E5=8F=B7=E3=82=92?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=20=E4=B8=8B2=E6=A1=81=E3=81=8C61=EF=BD=9E99?= =?UTF-8?q?=E3=81=AF=E9=96=8B=E7=99=BA=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- doc/README-774.txt | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 0a81f59a6..9bc514236 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150408.0001', // rep2�̃o�[�W���� + 'p2version' => '150414.0061', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/doc/README-774.txt b/doc/README-774.txt index 8ff07bb3a..579e96579 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -38,6 +38,12 @@ rep2-expack test https://github.com/orzisun/p2-php �{��p2�Ɠ������AX11���C�Z���X�ł��B ��ChangeLog +150414.???? +* �X�}�z�pread�ɏ������݃t�H�[����lj� +* �X�}�z�p��ʂ̃f�U�C����ύX +* DAT�擾�v���O�C�������삵�Ȃ��s����C�� +* ���̑����X + 150408.1234 * NG���ځ[��̑ΏۂɂȂ������X��ID�������I��NG���ځ[�񂷂�@�\��lj� * HTTP�ʐM�̃w�b�_�������� From 18a5132527ff2271c299aaf3093d00f646351d18 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Tue, 14 Apr 2015 23:34:33 +0900 Subject: [PATCH 137/339] v150414.2333 --- conf/conf.inc.php | 2 +- doc/README-774.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 9bc514236..6171b6acb 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150414.0061', // rep2�̃o�[�W���� + 'p2version' => '150414.2333', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/doc/README-774.txt b/doc/README-774.txt index 579e96579..dd84329c7 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -38,7 +38,7 @@ rep2-expack test https://github.com/orzisun/p2-php �{��p2�Ɠ������AX11���C�Z���X�ł��B ��ChangeLog -150414.???? +150414.2333 * �X�}�z�pread�ɏ������݃t�H�[����lj� * �X�}�z�p��ʂ̃f�U�C����ύX * DAT�擾�v���O�C�������삵�Ȃ��s����C�� From 6f4d4601d66fe4c5d390da3d2163f5674d807d48 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Tue, 14 Apr 2015 23:44:04 +0900 Subject: [PATCH 138/339] =?UTF-8?q?=E3=82=B9=E3=83=9E=E3=83=9B=E3=81=AErea?= =?UTF-8?q?d=E3=81=A7=E3=83=9D=E3=83=83=E3=83=97=E3=82=A2=E3=83=83?= =?UTF-8?q?=E3=83=97=E4=BB=A5=E5=A4=96=E3=82=92=E3=82=BF=E3=83=83=E3=83=97?= =?UTF-8?q?=E3=81=97=E3=81=9F=E3=81=A8=E3=81=8D=E3=81=AB=E3=83=9D=E3=83=83?= =?UTF-8?q?=E3=83=97=E3=82=A2=E3=83=83=E3=83=97=E3=82=92=E9=9D=9E=E8=A1=A8?= =?UTF-8?q?=E7=A4=BA=E3=81=AB=E3=81=99=E3=82=8B=E3=82=B3=E3=83=BC=E3=83=89?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0=20=E3=83=AC=E3=82=B9=E3=83=9D?= =?UTF-8?q?=E3=83=83=E3=83=97=E3=82=A2=E3=83=83=E3=83=97=E3=80=81SPM?= =?UTF-8?q?=E3=80=81IC2=E3=81=AB=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/read_header_i.inc.php | 3 +- rep2/iv2.php | 4 +++ rep2/js/ic2_iphone.js | 6 +++- rep2/js/jquery.skOuterClick.js | 50 ++++++++++++++++++++++++++++++++++ rep2/js/respopup_iphone.js | 46 ++++++++++++++++--------------- rep2/js/spm_iphone.js | 17 ++++++++---- rep2/read_new_k.php | 3 +- 7 files changed, 98 insertions(+), 31 deletions(-) create mode 100644 rep2/js/jquery.skOuterClick.js diff --git a/lib/read_header_i.inc.php b/lib/read_header_i.inc.php index ca8a833fe..41175a0ea 100644 --- a/lib/read_header_i.inc.php +++ b/lib/read_header_i.inc.php @@ -68,6 +68,8 @@ // {{{ �w�b�_�v�f $_conf['extra_headers_ht'] .= <<<EOS +<script type="text/javascript" src="js/jquery-{$_conf['jquery_version']}.min.js"></script> +<script type="text/javascript" src="js/jquery.skOuterClick.js"></script> <script type="text/javascript" src="js/respopup_iphone.js?{$_conf['p2_version_id']}"></script> EOS; // ImageCache2 @@ -88,7 +90,6 @@ if ($_conf['expack.aas.enabled'] || $_conf['expack.ic2.enabled']) { $_conf['extra_headers_ht'] .= <<<EOS <link rel="stylesheet" type="text/css" href="css/limelight.css?{$_conf['p2_version_id']}"> -<script type="text/javascript" src="js/jquery-{$_conf['jquery_version']}.min.js"></script> <script type="text/javascript" src="js/limelight.js?{$_conf['p2_version_id']}"></script> <script type="text/javascript"> // <![CDATA[ diff --git a/rep2/iv2.php b/rep2/iv2.php index 553180c6f..46a8380e8 100644 --- a/rep2/iv2.php +++ b/rep2/iv2.php @@ -30,6 +30,8 @@ $_conf['extra_headers_ht'] .= <<<EOP \n<link rel="stylesheet" type="text/css" href="css/ic2_iphone.css?{$_conf['p2_version_id']}"> <link rel="stylesheet" type="text/css" href="css/iv2_iphone.css?{$_conf['p2_version_id']}"> +<script type="text/javascript" src="js/jquery-{$_conf['jquery_version']}.min.js"></script> +<script type="text/javascript" src="js/jquery.skOuterClick.js"></script> <script type="text/javascript" src="js/json2.js?{$_conf['p2_version_id']}"></script> <script type="text/javascript" src="js/ic2_iphone.js?{$_conf['p2_version_id']}"></script> <script type="text/javascript" src="js/iv2_iphone.js?{$_conf['p2_version_id']}"></script>\n @@ -37,6 +39,8 @@ $_conf['extra_headers_xht'] .= <<<EOP \n<link rel="stylesheet" type="text/css" href="css/ic2_iphone.css?{$_conf['p2_version_id']}" /> <link rel="stylesheet" type="text/css" href="css/iv2_iphone.css?{$_conf['p2_version_id']}" /> +<script type="text/javascript" src="js/jquery-{$_conf['jquery_version']}.min.js"></script> +<script type="text/javascript" src="js/jquery.skOuterClick.js"></script> <script type="text/javascript" src="js/json2.js?{$_conf['p2_version_id']}"></script> <script type="text/javascript" src="js/ic2_iphone.js?{$_conf['p2_version_id']}"></script> <script type="text/javascript" src="js/iv2_iphone.js?{$_conf['p2_version_id']}"></script>\n diff --git a/rep2/js/ic2_iphone.js b/rep2/js/ic2_iphone.js index 5bab24f4e..9164ce1d6 100644 --- a/rep2/js/ic2_iphone.js +++ b/rep2/js/ic2_iphone.js @@ -49,6 +49,9 @@ document.addEventListener('DOMContentLoaded', function(event) { * �摜����\������ */ ic2info.show = function(key, evt) { + // skOuterClick���������Ȃ��悤�ɂ��� + evt.stopPropagation(); + var info = ic2info.get(key); while (_messageContainer.childNodes.length) { @@ -189,7 +192,8 @@ document.addEventListener('DOMContentLoaded', function(event) { // }}} - document.getElementById('ic2-info-closer').onclick = ic2info.hide; + $('#ic2-info-closer').click(ic2info.hide); + $('#ic2-info-body').skOuterClick(ic2info.hide); for (var i = 0; i < _ranks.length; i++) { _ranks[i].onclick = (function(n){ diff --git a/rep2/js/jquery.skOuterClick.js b/rep2/js/jquery.skOuterClick.js new file mode 100644 index 000000000..e052375e5 --- /dev/null +++ b/rep2/js/jquery.skOuterClick.js @@ -0,0 +1,50 @@ +/* + + skOuterClick - A simple event-binder-plugin to handle click events of outside elements. + Copyright (c) 2014 SUKOBUTO All rights reserved. + Licensed under the MIT license. + https://github.com/sukobuto/jquery.skOuterClick/blob/master/LICENSE + +*/ + +// touch�Ή������ς� +// http://tmpla.info/javascript/jquery/jquery%25e3%2581%25a7%25e6%258c%2587%25e5%25ae%259a%25e8%25a6%2581%25e7%25b4%25a0%25e4%25bb%25a5%25e5%25a4%2596%25e3%2581%25ae%25e3%2581%25a8%25e3%2581%2593%25e3%2582%258d%25e3%2582%2592%25e3%2582%25bf%25e3%2583%2583%25e3%2583%2597%25e3%2581%2595%25e3%2582%258c%25e3%2581%259f%25e3%2582%25a4%25e3%2583%2599%25e3%2583%25b3/ + +(function($){ + + $.fn.skOuterClick = function(method) { + var methods = { + init : function (handler) { + var inners = new Array(); + if (arguments.length > 1) for (i = 1; i < arguments.length; i++) { + inners.push(arguments[i]); + } + return this.each(function() { + var self = $(this); + var _this = this; + var isInner = false; + // Bind click event to suppress + function onInnerClick(e){ + isInner = true; + }; + self.on('click touchend', onInnerClick); + for (var i = 0; i < inners.length; i++) { + inners[i].on('click touchend',onInnerClick); + } + // Bind click elsewhere + $(document).on('click touchend', function(e){ + if (!isInner) handler.call(_this, e); + else isInner = false; + }); + }); + } + }; + if (methods[method]) { + return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); + } else if (typeof method === 'function') { + return methods.init.apply(this, arguments); + } else { + $.error('Method "' + method + '" does not exist in skOuterClick plugin!'); + } + }; +})(jQuery); diff --git a/rep2/js/respopup_iphone.js b/rep2/js/respopup_iphone.js index 6f3fb6c03..79e0fdc11 100644 --- a/rep2/js/respopup_iphone.js +++ b/rep2/js/respopup_iphone.js @@ -2,6 +2,7 @@ * rep2expack - iPhone�p���X�|�b�v�A�b�v * * iphone.js�̌�ɓǂݍ��� + * jQuery �K�{�ɂȂ�܂��� by 2ch774 */ // {{{ globals @@ -27,7 +28,7 @@ var ipoputil = {}; * @param {Element} obj * @return {String} */ -ipoputil.getZ = function(obj) { +ipoputil.getZ = function() { return (10 + _IRESPOPG.serial).toString(); }; @@ -57,11 +58,12 @@ ipoputil.getActivator = function(obj) { * @param {String} key * @return void */ -ipoputil.getDeactivator = function(obj, key) { +ipoputil.getDeactivator = function($obj, key) { return (function(){ delete _IRESPOPG.hash[key]; - obj.parentNode.removeChild(obj); - delete obj; + //obj.parentNode.removeChild(obj); + $obj.remove(); + delete $obj; }); }; @@ -79,36 +81,36 @@ ipoputil.getDeactivator = function(obj, key) { * @todo use asynchronous request */ ipoputil.callback = function(req, url, popid, yOffset) { - var container = document.createElement('div'); - var closer = document.createElement('img'); + var $container = $("<div/>"); + var $closer = $("<img/>"); + + $container.attr("id",popid); + $container.addClass("respop"); + $container.html(req.responseText); - container.id = popid; - container.className = 'respop'; - container.innerHTML = req.responseText; /* var rx = req.responseXML; while (rx.hasChildNodes()) { container.appendChild(document.importNode(rx.removeChild(rx.firstChild), true)); } */ - container.style.top = yOffset.toString() + 'px'; - container.style.zIndex = ipoputil.getZ(); - //container.onclick = ipoputil.getActivator(container); + $container.css('top',yOffset.toString() + 'px'); + $container.css('z-index',ipoputil.getZ()); + $container.skOuterClick(ipoputil.getDeactivator($container, url)); - closer.className = 'close-button'; - closer.setAttribute('src', 'img/iphone/close.png'); - closer.onclick = ipoputil.getDeactivator(container, url); + $closer.addClass('close-button'); + $closer.attr('src', 'img/iphone/close.png'); + $closer.click(ipoputil.getDeactivator($container, url)); - container.appendChild(closer); - document.body.appendChild(container); + $container.append($closer); + $(document.body).append($container); - //iutil.modifyInternalLink(container); - iutil.modifyExternalLink(container); + iutil.modifyExternalLink($container[0]); - _IRESPOPG.hash[url] = container; + _IRESPOPG.hash[url] = $container[0]; var lastres = document.evaluate('./div[@class="res" and position() = last()]', - container, + $container[0], null, XPathResult.ANY_UNORDERED_NODE_TYPE, null @@ -131,7 +133,7 @@ ipoputil.callback = function(req, url, popid, yOffset) { var i; for (i = 0; i < _IRESPOPG.callbacks.length; i++) { - _IRESPOPG.callbacks[i](container); + _IRESPOPG.callbacks[i]($container[0]); } }; diff --git a/rep2/js/spm_iphone.js b/rep2/js/spm_iphone.js index d2de17fea..f4543f1a8 100644 --- a/rep2/js/spm_iphone.js +++ b/rep2/js/spm_iphone.js @@ -23,6 +23,9 @@ var SPM = { */ SPM.show = (function(thread, no, id, evt) { + // skOuterClick���������Ȃ��悤�ɂ��� + evt.stopPropagation(); + var spm = document.getElementById('spm'); if (!spm) { return; @@ -45,8 +48,14 @@ SPM.show = (function(thread, no, id, evt) } } - spm.style.display = 'block'; + //spm.style.display = 'block'; spm.style.top = (iutil.getPageY(evt) + 10) + 'px'; + $(spm).show(); + $(spm).skOuterClick(function(event){ + if (!$(spm).is(':hidden')) { + SPM.hide(event); + } + }); //document.body.addEventListener('touchmove', this.hide, true); }); @@ -64,12 +73,8 @@ SPM.hide = (function(evt) { //document.body.removeEventListener('touchmove', this.hide, true); - var spm = document.getElementById('spm'); - if (!spm) { - return; - } + $('#spm').hide(); - spm.style.display = 'none'; }); // }}} diff --git a/rep2/read_new_k.php b/rep2/read_new_k.php index 35aed920e..d14a4cf71 100644 --- a/rep2/read_new_k.php +++ b/rep2/read_new_k.php @@ -130,6 +130,8 @@ // iPhone if ($_conf['iphone']) { $_conf['extra_headers_ht'] .= <<<EOS +<script type="text/javascript" src="js/jquery-{$_conf['jquery_version']}.min.js"></script> +<script type="text/javascript" src="js/jquery.skOuterClick.js"></script> <script type="text/javascript" src="js/respopup_iphone.js?{$_conf['p2_version_id']}"></script> EOS; // ImageCache2 @@ -150,7 +152,6 @@ if ($_conf['expack.aas.enabled'] || $_conf['expack.ic2.enabled']) { $_conf['extra_headers_ht'] .= <<<EOS <link rel="stylesheet" type="text/css" href="css/limelight.css?{$_conf['p2_version_id']}"> -<script type="text/javascript" src="js/jquery-{$_conf['jquery_version']}.min.js"></script> <script type="text/javascript" src="js/limelight.js?{$_conf['p2_version_id']}"></script> <script type="text/javascript"> // <![CDATA[ From 30282ec015ba749dfde9c2bbc4074fa3f49861d9 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Wed, 15 Apr 2015 00:00:52 +0900 Subject: [PATCH 139/339] =?UTF-8?q?=E9=81=A9=E7=94=A8=E3=80=80http://anago?= =?UTF-8?q?.2ch.net/test/read.cgi/software/1426940268/711=20=E3=82=B9?= =?UTF-8?q?=E3=83=9E=E3=83=9B=E5=90=91=E3=81=91ic2=E3=81=AE=E3=83=9D?= =?UTF-8?q?=E3=83=83=E3=83=97=E3=82=A2=E3=83=83=E3=83=97=E3=81=AB=E8=A1=A8?= =?UTF-8?q?=E7=A4=BA=E3=81=95=E3=82=8C=E3=82=8BURL=E3=82=92=E3=83=AA?= =?UTF-8?q?=E3=83=B3=E3=82=AF=E3=81=AB=E5=A4=89=E6=9B=B4=20=E3=82=B9?= =?UTF-8?q?=E3=83=9E=E3=83=9B=E5=90=91=E3=81=91ic2=E3=81=A7=E7=94=BB?= =?UTF-8?q?=E5=83=8F=E8=A1=A8=E7=A4=BA=E3=82=92=E3=83=80=E3=83=96=E3=83=AB?= =?UTF-8?q?=E3=82=BF=E3=83=83=E3=83=97=E3=81=99=E3=82=8B=E3=81=A8=E9=96=89?= =?UTF-8?q?=E3=81=98=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/js/ic2_iphone.js | 6 +++++- rep2/js/limelight.js | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/rep2/js/ic2_iphone.js b/rep2/js/ic2_iphone.js index 9164ce1d6..cc9c15c17 100644 --- a/rep2/js/ic2_iphone.js +++ b/rep2/js/ic2_iphone.js @@ -80,7 +80,11 @@ document.addEventListener('DOMContentLoaded', function(event) { _previewContainer.appendChild(edit).appendChild(thumb); } - _messageContainer.appendChild(document.createTextNode(info.uri)); + var aTag = document.createElement('a'); + aTag.appendChild(document.createTextNode(info.uri)); + aTag.href = info.uri; + aTag.target = '_blank'; + _messageContainer.appendChild(aTag); _messageContainer.appendChild(document.createElement('br')); _messageContainer.appendChild(document.createTextNode( info.width + 'x' + info.height + ' (' + _number_format(info.size) + ' bytes)' diff --git a/rep2/js/limelight.js b/rep2/js/limelight.js index f47063fdc..3576042d2 100644 --- a/rep2/js/limelight.js +++ b/rep2/js/limelight.js @@ -1156,7 +1156,7 @@ Limelight.prototype.init = function(options) { if (flags.title) { this.initTitlebar(); } - this.initTitlebar = null; + this.initTitlebar = null; if (flags.indicator) { this.initIndicator(); @@ -2203,7 +2203,7 @@ Limelight.prototype.onTouchEnd = function(event) { } else { this.focus(); if (now - this.endTime < this.doubleTapDuration) { - toolbar.peekaboo(); + this.deactivate(); } if (!this.locked) { this.setLastClicked(null); From a14f9cb9bd674415f16ea54f84d6390e0f5fc80c Mon Sep 17 00:00:00 2001 From: dgg712 <admin@alice3.do-gugan.com> Date: Wed, 15 Apr 2015 15:06:01 +0900 Subject: [PATCH 140/339] =?UTF-8?q?=E3=82=B9=E3=83=9E=E3=83=95=E3=82=A9?= =?UTF-8?q?=E7=94=A8=E3=82=A2=E3=82=A4=E3=82=B3=E3=83=B3=E7=94=BB=E5=83=8F?= =?UTF-8?q?=E3=81=AE@2x,@3x=E7=89=88=E3=82=92=E4=BD=9C=E6=88=90=E3=81=97?= =?UTF-8?q?=E3=80=81img=E3=82=BF=E3=82=B0=E3=81=AEsrcset=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=A6=E9=AB=98=E8=A7=A3?= =?UTF-8?q?=E5=83=8F=E5=BA=A6=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=8C?= =?UTF-8?q?=E5=AD=98=E5=9C=A8=E3=81=99=E3=82=8B=E5=A0=B4=E5=90=88=E3=81=AF?= =?UTF-8?q?=E8=AA=AD=E3=81=BF=E8=BE=BC=E3=82=80=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E3=81=97=E3=81=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/toolbar_i.inc.php | 28 +- rep2/img/glyphish/icons2/01-refresh@2x.png | Bin 0 -> 899 bytes rep2/img/glyphish/icons2/01-refresh@3x.png | Bin 0 -> 2761 bytes .../icons2/06-magnifying-glass@2x.png | Bin 0 -> 947 bytes .../icons2/06-magnifying-glass@3x.png | Bin 0 -> 2964 bytes rep2/img/glyphish/icons2/08-chat@2x.png | Bin 0 -> 535 bytes rep2/img/glyphish/icons2/08-chat@3x.png | Bin 0 -> 1382 bytes .../glyphish/icons2/104-index-cards@2x.png | Bin 0 -> 547 bytes .../glyphish/icons2/104-index-cards@3x.png | Bin 0 -> 1812 bytes rep2/img/glyphish/icons2/108-badge.ai | 1582 +++++++++++++++++ rep2/img/glyphish/icons2/108-badge@2x.png | Bin 0 -> 791 bytes rep2/img/glyphish/icons2/108-badge@3x.png | Bin 0 -> 2427 bytes rep2/img/glyphish/icons2/12-eye@2x.png | Bin 0 -> 751 bytes rep2/img/glyphish/icons2/12-eye@3x.png | Bin 0 -> 2502 bytes rep2/img/glyphish/icons2/128-bone@2x.png | Bin 0 -> 687 bytes rep2/img/glyphish/icons2/128-bone@3x.png | Bin 0 -> 1838 bytes rep2/img/glyphish/icons2/28-star@2x.png | Bin 0 -> 792 bytes rep2/img/glyphish/icons2/28-star@3x.png | Bin 0 -> 2214 bytes rep2/img/glyphish/icons2/33-cabinet@2x.png | Bin 0 -> 456 bytes rep2/img/glyphish/icons2/33-cabinet@3x.png | Bin 0 -> 1420 bytes rep2/img/glyphish/icons2/53-house@2x.png | Bin 0 -> 549 bytes rep2/img/glyphish/icons2/53-house@3x.png | Bin 0 -> 2086 bytes rep2/img/glyphish/icons2/63-runner@2x.png | Bin 0 -> 905 bytes rep2/img/glyphish/icons2/63-runner@3x.png | Bin 0 -> 2242 bytes rep2/img/glyphish/icons2/64-zap@2x.png | Bin 0 -> 671 bytes rep2/img/glyphish/icons2/64-zap@3x.png | Bin 0 -> 1851 bytes rep2/img/gp0-more@2x.png | Bin 0 -> 428 bytes rep2/img/gp0-more@3x.png | Bin 0 -> 1306 bytes rep2/img/gp1-up@2x.png | Bin 0 -> 516 bytes rep2/img/gp1-up@3x.png | Bin 0 -> 950 bytes rep2/img/gp2-down@2x.png | Bin 0 -> 513 bytes rep2/img/gp2-down@3x.png | Bin 0 -> 1231 bytes rep2/img/gp3-prev@2x.png | Bin 0 -> 502 bytes rep2/img/gp3-prev@3x.png | Bin 0 -> 1206 bytes rep2/img/gp4-next@2x.png | Bin 0 -> 473 bytes rep2/img/gp4-next@3x.png | Bin 0 -> 1230 bytes rep2/img/gp5-info@2x.png | Bin 0 -> 837 bytes rep2/img/gp5-info@3x.png | Bin 0 -> 2449 bytes 38 files changed, 1608 insertions(+), 2 deletions(-) create mode 100644 rep2/img/glyphish/icons2/01-refresh@2x.png create mode 100644 rep2/img/glyphish/icons2/01-refresh@3x.png create mode 100644 rep2/img/glyphish/icons2/06-magnifying-glass@2x.png create mode 100644 rep2/img/glyphish/icons2/06-magnifying-glass@3x.png create mode 100644 rep2/img/glyphish/icons2/08-chat@2x.png create mode 100644 rep2/img/glyphish/icons2/08-chat@3x.png create mode 100644 rep2/img/glyphish/icons2/104-index-cards@2x.png create mode 100644 rep2/img/glyphish/icons2/104-index-cards@3x.png create mode 100644 rep2/img/glyphish/icons2/108-badge.ai create mode 100644 rep2/img/glyphish/icons2/108-badge@2x.png create mode 100644 rep2/img/glyphish/icons2/108-badge@3x.png create mode 100644 rep2/img/glyphish/icons2/12-eye@2x.png create mode 100644 rep2/img/glyphish/icons2/12-eye@3x.png create mode 100644 rep2/img/glyphish/icons2/128-bone@2x.png create mode 100644 rep2/img/glyphish/icons2/128-bone@3x.png create mode 100644 rep2/img/glyphish/icons2/28-star@2x.png create mode 100644 rep2/img/glyphish/icons2/28-star@3x.png create mode 100644 rep2/img/glyphish/icons2/33-cabinet@2x.png create mode 100644 rep2/img/glyphish/icons2/33-cabinet@3x.png create mode 100644 rep2/img/glyphish/icons2/53-house@2x.png create mode 100644 rep2/img/glyphish/icons2/53-house@3x.png create mode 100644 rep2/img/glyphish/icons2/63-runner@2x.png create mode 100644 rep2/img/glyphish/icons2/63-runner@3x.png create mode 100644 rep2/img/glyphish/icons2/64-zap@2x.png create mode 100644 rep2/img/glyphish/icons2/64-zap@3x.png create mode 100644 rep2/img/gp0-more@2x.png create mode 100644 rep2/img/gp0-more@3x.png create mode 100644 rep2/img/gp1-up@2x.png create mode 100644 rep2/img/gp1-up@3x.png create mode 100644 rep2/img/gp2-down@2x.png create mode 100644 rep2/img/gp2-down@3x.png create mode 100644 rep2/img/gp3-prev@2x.png create mode 100644 rep2/img/gp3-prev@3x.png create mode 100644 rep2/img/gp4-next@2x.png create mode 100644 rep2/img/gp4-next@3x.png create mode 100644 rep2/img/gp5-info@2x.png create mode 100644 rep2/img/gp5-info@3x.png diff --git a/lib/toolbar_i.inc.php b/lib/toolbar_i.inc.php index 4454a0e16..a1fae5177 100644 --- a/lib/toolbar_i.inc.php +++ b/lib/toolbar_i.inc.php @@ -31,6 +31,28 @@ function _toolbar_i_icon($icon) return $icon; } +/** + * img�^�O�ɉ𑜓x���̑�փp�X���w�肷��srcset�����𐶐� + * + * @param string $icon + * @return string + */ +function _toolbar_i_srcset($icon) +{ + + $srcset = "{$icon} 1x"; + $ratios = array(2,3); //�w�肷��pixel ratio��� + foreach($ratios as $ratio) { + //hoge.png�ɑ΂��Ahoge@?x.png�����݂��鎞����(?�͔{��) + if (file_exists(str_replace(".png", "@{$ratio}x.png", $icon))==TRUE) { + $srcset .= ", ".str_replace(".png", "@{$ratio}x.png", $icon)." {$ratio}x"; + } + } + return $srcset; +} + + + /** * �c�[���o�[�{�^�� (�����N) * @@ -55,9 +77,10 @@ function _toolbar_i_button($icon, $label, $uri, $attrs = '') } $icon = _toolbar_i_icon($icon); + $srcset = _toolbar_i_srcset($icon); return <<<EOS -<span class="available"><a href="{$uri}"{$attrs}><img src="{$icon}" width="48" height="32" alt="">{$label}</a></span> +<span class="available"><a href="{$uri}"{$attrs}><img src="{$icon}" srcset="{$srcset}" width="48" height="32" alt="">{$label}</a></span> EOS; } @@ -154,9 +177,10 @@ function toolbar_i_disabled_button($icon, $label) } $icon = _toolbar_i_icon($icon); + $srcset = _toolbar_i_srcset($icon); return <<<EOS -<span class="unavailable"><img src="{$icon}" width="48" height="32" alt="">{$label}</span> +<span class="unavailable"><img src="{$icon}" srcset="{$srcset}" width="48" height="32" alt="">{$label}</span> EOS; } diff --git a/rep2/img/glyphish/icons2/01-refresh@2x.png b/rep2/img/glyphish/icons2/01-refresh@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..48a508741addf525b26b8866af51e4df698bc7b0 GIT binary patch literal 899 zcmV-}1AP36P)<h;3K|Lk000e1NJLTq003YB002M;1^@s6<uq~*0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#B}qg<RCwC#T<wjUKoDIb|35mgI|v=b z9mE}k5|Ro+3Ah7XL7WN>ci^iarUPFE&g|WsWS!WB#V|7q^Q4s}+wvXn&DRdIB)8km zDERP2DNq4a0EG&m0w`1f6+oc^1mXIQoeIE*Cs=<#gd?m}1>nPXSeF>RVNN;V!yBrY zydjCD7X+kk;Ki=(-P^w%UvFULX`0q5z+<FavU4PTJ>VzyunG|3sse-&Z%Ho(k{*>e zh!OykXgLz`_jtA8OQI*Ngb;6&W`)(v*f_!3Nex3Q0pw>${?`et-p2n@auQw%Aiu^E zvTr;;<MLHOCye_St%4pWzd;YFJ`)PRaf{LF**ySbei!+nWJY845<*ZH`5}ojI;&?D z0Ia|0NVo?eGoQ27v*iG6C;an#<yWkhJQUQ;xT3@I7ezj)2Xt8f3y`0g1%lE8eh&Oh z1sDmrC-l@Rz_j6K>nS@+vtUqpz}6G{&nf_)07tWMPzjKEcEpPYNg3MGG<yStpF}-C z!HN}u^}FJK!+r7Cm2C@;SE}NGq8aDvXiAvfvE)Cuynpf(4snGbk0m`B1#b=zFu|5B zMSv!7f50t3JvRZ)LIrUB{ma}0a9I@FG&2qbte4^et_xZ-j+DDv;0@(1P7(pI5^4g8 zn9}+;@bbg)F=>B_vI=swoxkBQt`YFRbbS`J0F`+kA!)s6v`Px=w_>|yQ2$a-Sda;T zGd`tfQ#ScIFHF2X3oqur5i32pz|IQQQ;E=H6!O4vbBI&`^a5YfokRp|2>Qr>HB5s6 z<gEx0!B!dj4iQE>@raXn&&J<-Vmm*;IURjA-Dd)9SF#u~H4$*kiFF!}Q-F^N={^TD zUa*Qf`l=KRH9K5=jyZ+Qq0UQy0V3ST>(9wDHQ^_0_CP-SKp6WWJrtqz>`ceTTfznM zD<c46PDx_Yt<1DHYHTRWCCws<xhap;k=+d+CbD{)Y%^(tU{ViiZ?J;dJ?Ie)hPO)U zF;(%;ionohSJpGpo-nZ=V;Fl(Vta5awiMcS%9j|ADkb{lTus6%fI<aO0Te30BJp2< Z0RSbiShrT&*TVn+002ovPDHLkV1ln)hQt5> literal 0 HcmV?d00001 diff --git a/rep2/img/glyphish/icons2/01-refresh@3x.png b/rep2/img/glyphish/icons2/01-refresh@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..610888280094f57228e5883d3332a46ab3a0320a GIT binary patch literal 2761 zcmV;)3O4nLP)<h;3K|Lk000e1NJLTq0058x003YJ1^@s6^3?mG0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU+Ye_^wRCwC#oqvoRWf{lk_Q&jx7AU2* zN9oZBQo(Div{)#qQpM8L1fszRBxqtQ7W#+8h|y9lX^CjesRU7=C@Qr4QJR=o1^Xjd zn<5p9P@t$+TIr9YSNRdHce{JHKe~RNb`F<jZ|B{;Yj57!=SiOIyLU4?@4WA4zR&Z{ z%sbOkE|(oOwMH$XO`xU#sVP8e3Xqxtq^70-sVP8e3Xqxtq^70-sVP8e!L^t+L3JA# z7?{xC-@k-nXDXF?!gXD36jdN|E0@cKW5<rQ^SL^k&35GT`GmHL0#p}6cndxbUz*G1 zp6Ti7nU6AQ%P2r~K_r$!iDuzz0jUFs;@UI{P$TvMQ6qAr?WoZ;szwUXkk-=DlHsFR z<zJ#kv++kgHEQbYx<&6ud~ehx-U>J=zD^*4o<ZAumGb2^R?D*dE__8Ik=TMOKurY8 z1$6vXe4UBU0GRQ3lD|c~(;I1gEbdDMZFrdV)-c>(4nze7D1=7d;xH8dARWC3P(FiC zq<j|t8iOZCU=yN7FW{?yXj8MOQRo5k)Mg?3c`MLdLI<DgDa)xDww23WY-25I^gSTT zD?k>5gW}u>G)r*_SLdC^&5IiSH4=&ZBp#1Hl}si>3s5Yi;LHM=W%yh=auR;JtC5y4 zSu7Tx1)`_ItU$4_!Nbt{+o<Ydpt)!iz!?l<@1i`*P@X>mkfQ+EktAP;-$QYMmmH4< zI1b9Q$#vaT>2&%z;0gVREEWQAoI;^+JstNQx!lk)O0vWDvw*V#)maZX`@^n0p#Vri z765$-aPEeisl#DM)WaK4yoqP{t!{6`Hq}6NHZtP+A*!<jaQdAlvY5^AknadQ_t4Q( zh5^k>_%?>!&!Qk*0uNpw5s$Eq6#`}r)yYV>0-h(L(dd7gMRlwPNWzw<JPpCadT-MC zzXF=AB)f<B(_sL3rxE~0PzevFA#)wT`4Ot~OtYzu^#GMhrJEXohjk9p@ecsbp8@Ap zpgCGYH3XnY71ilOb-wSZ&faEJ9jgH%tjt9nme&K1rx+c8vo02k?ZWf*c6^2Ebf7xh zSYPkuuni#KNt5?{lg|8zX~K+Jy$CoRK(hhWIa)`eJ$Of=fYS>&KR|ibsp?n?keBz! zNx}uDLv`SJl412-0JO7#5n7yWrGRG#@T}xFo(7z}B4a5)gsu7B8RnEBJP!enB)R(< z8Qud<3B~#`@VtY1?N-&PZdP1OMR{aM{X6P<?O<5(f#+f1Sq40BH+pUeV56*CB4jBg zwkr^wc^iuGDU;CUg{_stf#-O`#9}4I!`}k0%P7wzp!hN{oM8aZbHKA4c)CXGLaG83 zFe?-aH^_}(2E*)b5?#5R@S?(_01c{70#&)rM16ql5t80NDLe|$dzR1V=K;pW2BB*g zq3dxH-kf%+Cei<=I}-Uk9}|5-mjgVj30<A4KB_>K;cGmjubDs*_X%CQWKI^#6|_4Q zpvv%d8E~|ks1Hi@x^|@k^gcsTuH@q!AAsIMeV*4#3<^*+fG%}T%nq#u(02R{?M4OY z<nT3?{AWt7q}U5zn;Cg^Yd0!DCnwNT$$!T9s85dYwYwQ+J}5x-hp#q1{I0rp0nt(I zLItRrjmQ0-yCb<zR=ZFEs%C9|3A6`LpLU@FRLx{Qmf!PHWC~8NcH!t+P%mZ3qvibW zbd&tY>hnJg6rzkcr;+o0jIY(E2FVS7MMj$Y;_>(^3Q!$+bTb^irBW&0*VlI)Bgwm+ z>T}Q{GTL-qceMgE@(Lu0c5;X#*A`0w&-u7q?;AJ7>54N^sIxT(s?QGKez#^wqJ5_2 zA|&;n?6b_f_<jYbKI=A67I|iK%5s2?KM~ev85wE5rU2Dvy-xLKG*?=Ckfq%y(K}K9 zc7t%9QGn_&;{HD!pL0Ak{&+?(t&C)B9f8R;zgB~Tpx0{;1<2GGaU3DBJn93GJl>_f zSS(ukq<E<}^`Gu{7p2U>r#=3w0M%j1WHKL%#a=J_%zC8p=h47ZYy^mUPxkJ4s-?tb z+ToD2hXPc87~AQbI9XT=pidSGg=w~hF{v;0{xJ2Q<FjZF?XWe_2SR`W+Te}GY60YC zGMP`8N~JM20YrV1)O()6!$6PF4qFtU#`2&}Wd4BPa?xn?i{um2ZBZeqC-rTo-k&oF zb4O^0e=9(Z<v}t(eH%w$#z%#wax`DVQEkOJA*m<zy_R}k?4!Ur_J2F=P*i{#KU&xE zamYZ0ZsDlDBIr*V@ziGy^<8AJ_yLyxb>IgBL9QG}piCB&i-;v36>7_7v$yp3_fH6N zC<C5xsL$8DJ1%Pq70bNJ{=cRG4Z~8YltA>5JUGEXg>C|(C3I3CLzz77jPSLHdfs5L z>|yr%7qb5f&@hb#-^|hYH;DiSN#{4{q=i8XWm2D9F85gg|E|d+j#y>~`@O}nzyc3Y zg$f<?Tb71DhfcbK&bl%v5K)g7sSkb!P@HYBd>8w>+6MKp0w7O?HUY=)DHaTtokM5+ z6rVHN5P8aTygt<H3WHS&?B^dubsbC03V`HjOe7NbQ~ZY^aI>Y;NUE=vs{x|~PfWJ& z!86-%wdWbO-)oEdSObs;QD;0J|2ZA=wjo596VBGqi8qp1pLM#_NVX%}W4n^nuQi27 z=J~UK_XE%#$0D=p*|j9ek0J5DaSU&!r}J9r$j5qmdhX<N8l4n9#qdOBJ8W+`pO3Qr zNrtOR=vu@6t#vFj>)x44$4Dowp?EzWH(ig>*`9PdeHTahb~^UpNIr~8+K}IG%jff- zAY`rN_dis}>T)n_KzSD9Jqpn2foL-RTZ&gZb<E)K-gmJTkUCt~{TF|d`;Ph=fyw(V zdHeGuz_~<5fBe=}4gA*AfO9i`*s;*8eQPrS&BgDdcxfY@kMGAH0j7<>BsXly9gs3r zT3*Cbs06`-MZ%xV0+AWBV}WKO(8y~S77gQNcP|6ZxA2XQrDpYOzX=x$1_lOJQJm>C zI7P|Z|GoI%@s|MQ4HEYKjQZXhT!w9oWm_`+<|4jM$3Ko=IE*kTmu6mI8+Wp;&5p%p z{d?o-*j76DVT$t||LM^6K=uBH8o8WFa-OZgvlMvtI+mODZxEpqy6KFYDL(Fu&|G<e z<zycrllrZrzF!FgJfTpa3MG<R4$CMmVV~Lpc5oa6Lb(+4puC({?sW=_g$AIC<ocud zy%aCQ&j>)3M0Iuo&F%QhPRJ~D0C^Be;(I&A+t|PJWYjbY)sWKzax>fmsLp+1Qk~EP zQ~^=~kiJfFG5dM0r%0#r$sf{~y?`U<bbbjqKLealzgsob09E8ia^B_(6mMmJ<t(vW ztxS$ko+S4v$vplX;K+5X2VK`)Pm-K*n!uU@pp!z|G>QV#LR_wo$;{Tc=K@r82$hnC zDtW-jjqY-?QPiaqe-dAh;_L})s8WEc1Lfkg0AU7SXW=qW>jM1zDvQe$qkYba$F1z9 z-ChBfzXW~OgaV`%Xwz2_t0_Qg3Xqxtq^1C=sVP8e3Xqxtq}CkvKLG{+m&qwANrLA; P00000NkvXXu0mjfTjx9= literal 0 HcmV?d00001 diff --git a/rep2/img/glyphish/icons2/06-magnifying-glass@2x.png b/rep2/img/glyphish/icons2/06-magnifying-glass@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2cabce9102652cf665d0302c615e5529c643d233 GIT binary patch literal 947 zcmV;k15EshP)<h;3K|Lk000e1NJLTq003YB002M;1^@s6<uq~*0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#RY^oaRCwC#oXc_BFc3g#rvS49DYx9D z4kT4z-Es`wfjTf<L6{269Fns-2vtBP^wBq|11b$DyEDtNk{Nu+5Wteyox$Khi6Hl3 z7r<h{o6F^rh=h|H0U!VbfQSGP03rfF0C19~Y35KZsr)NPD0P~qwE!4a>1(JmC|J)d z{&I#=LD>V0QULT<{1&RhQt2u=K`8-5E&#f@8SJ^M0dI>SG5}GH0l;lQ<)f>q2UdPU zR`dhzUx)>$mA`}Pvxla>LfL^eG-3g7%FjJ1ALSFdII(~$xAWYg_o5%Kpa&nX?vc_g zshu(1+1v~6kwpyv6t^UWniTegGa_5JK~M{e`#x}-s`><g1MWielNXx3)IIK<lB>Bl ztQnTq))dVcK)uwY{B_@zEm{kdEx9d~poQd7S^xkzY8F|o@|%I$DrxXl$$L&#aO<h} z&opi!8+e+yBdEITQMsV4=2|gyK#gGPl$^x|;9k@Fovc<V3~^A61r+p~J^;gumX24b zI=JgtEMTd*ws+Yuz}@$Ju1Nt%4Q|4<9J)T&)BvbV{p9KWRMX8>EC9MHW~}Xu4uFU! z0HIw#Xcx#9K)W63TISqclWPEVsJS=+p7nUHXaKkl31mH=%d0q#h8iNF8yD*V+8@An zRhu+yBBDNKLAn)b?x@Y3M)`-R!qJI7CbObV`XPHijxCRxpOl=Yp}sa`@TGN|B!leN zLOUO!`Ud5lYWfN7%sBz@wGcD)@@Lw(`5)zDfbF|R`7T`^Zvf<TpDZBkX#nl2d{pc& z!~6V<IxB({RavZp&*Y~I-C#+eG8%Agl6rq*+uTyxeFH$HA%unHUtVa=ehs2c%v$t# z1cbZh1i^c5XomzXSHcQHsN~$PmM~ceLBi3r7mRM?i=!r94cF27Dze7-0JIRG-~hTw zh6@j$X-)9~>oGuJb4HBT0a?;-ui!*0?!PiEEVHqLx+8X{Bq@xH$z1IT$%R7Ub@G<J zUK_x&g%HI#Va^buIjGGQLR2T^IYNl;Qw7{0MER|V4iKE5sEIN!h@zr4>x6u=3$c+v zm<xcg5E=mx7D6Ea{6WB&RGZF@^~OgEy?ik%um}JFAOJ)Q0zd$W2mk>f5<vb4FaZ6h Vs@S)73)TPt002ovPDHLkV1nBasD}Um literal 0 HcmV?d00001 diff --git a/rep2/img/glyphish/icons2/06-magnifying-glass@3x.png b/rep2/img/glyphish/icons2/06-magnifying-glass@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..ed0dfb336f391de2a62914d8a4d9d149b6108df3 GIT binary patch literal 2964 zcmZ8jXE+-Q7fui(f?TUrs%ecHMeWgCf*{n2JzATfN~t{)il`N<YDZc{U8&J>ZEbB8 zRa&c|HR{?kHvQax-*bPQ^PcBC&pGe=>zp^q)L4%Vd<6^u0NC_VNV5whT!a%d<3-*X zJ1M;YzCazDKyyEjz!2vEcYvmwpNl(8|DiL+-OSzDEzG~)9S#7nD(NFNEkdW(iXsRC zmOP0O9vDo>e$JC_cnTqvMOfM+2R``pax7Fx<SF`A5|J^<=}?<lJk#uMm`(pLj!b6V zDy{2wx=Ai(q(kBuAiw51v>F-5lKBLV1#nJK^P=`X8J`-zYAiH}-z%D2&)b-J{My)P z*w<usI;#DgI!Zm5Nh^eheK9ka{6-3A9^-~7f>1_4Gjr_Ne`^ydC5zy<EiDm$Kb*dn zhP>f=cq|=xV+MQhljqR>Q1kSWQbCkz1`2L(Y5BDbUr4>-9L4)>bkuxgdO8Bs`DuRj z-u`0+hs8n#Qfm&STmXxwH|yC}j~-9%__VWmMD@T<ai#a>JikrPpuqdt5Vm!9;!V|- z?)kkqYYwM+l9qTwSoW~g*RNmsO<yT<7ZHF+t{~a1@7;5d$jilB#LK{ChLQr{vLHgO z6aW%{-E3?s=pL?-c~KbIv+HtIX9|FN02HqRfH(wLACcYtK_`!X0tzZ!s_AF-qu+Al z&np2SX2JX_D_*}Y{=s`ix4Z)xek(!GxUI2~>?V-V=*~H<)^9SjIhFHE_zk_(4M77a z2n-|F^~|l>7N(!b8t9)o?2zvGgZeN7@^p(~_-+%30{U50@cs#NanB;-aF`fgL>;l( zHBLl^u!BUNf*1t*!>npU-DS5_It4to{ne+LH-NFz(j-yUl$@5*=Ll*7n!^1IGrx<i ztYs#yY?qBSCDz$}BqQ6cVNAuFHGhAX*qTXOvsWshT9}*f&WFOI@fvOYvs0215^@;2 zxS;N;!`Vmr6!C+z?2cPkQYm8G!UL+nmyM?TqM(XGeI2<lBefz2J;3b!zRly~<7myT zc1K&=qZ^$9GOxVmCXf@xTreZOqW11!JMj0e`U>h0b}s}}0bkh_jBV`qGBb=j2TObb z!#hYvp+V4qeDeY1eQ5@gPQ}O${z!MRX-ap+UudQrkkh`LDM{|O+IU}{w6X>$^dqTF zo3cjS{-IhO_Mqlr1Te_HdtZ;At_X?SAUbG3gb?lP91M_AmBU@|lO-j}UUjXFkLgd< zAR-B!ydL~n_$)=vm)P2-i}4gT)8lHzW;timS!mJv-Q@179L__2deIk8v#h1PXIz3H zUW%`#XTOULaJ+5thNE_4iJQpDw`HgkrS3vfXZR%sJd*}SO+5(RfvJf@OLY&>Ceu!5 zb{7A<zWtgY10*&5oyTEK%Q#I%kQs_Ka>2!LF}VdzesnGq#L|<u#<3a@=5ud31&Q<c z1I9(0L^<r-UY%O3kn9h?vqdf!yu*flfQXmYjOT{Qq{hK>>%UsApiAc8y?e(&qFZ;j zFi7_B(Kv_F`Y%_Q%HPzhr(1Yvx?r38;1V0<c&K7nn#Cn=wE#5NL6_J+^nulsB*_ii z%ztA*`F!9{aP@8CSlLy<t?p^JE&3`OO>ROqD!<nHNr4F=L*opT1!u+~YktjXYhPNw z`SpThpK^!ZdpodY9r2Ly2i!0}vQPf4IC3R}cU1~?$DCR@8gqD<s41wB$>mO>TSzsk z4-k@|OhsnAJx@L@AH)FKo^Hz8yvyfW6ae+{-x&{R3PTap=C%*f9SV+NVW#=;f1Ya! z3cql<DUO)2X<LjwP&FcaiM~S+-lH2?9UC&@E4y}px){w8=&SDinQY~&lDhc`SKced zRu@2pbHh0PqBvdU`<%PCy`5sC-FM1J=od=bWz&>QbiZni9dKiUEZlEyIHsu^d;s{W z{*t{|6)`<<AyX+UgOf!=&@jx&yD8l|>(_zezbszn;rC;OKl<q&(2lB-{YA4fj_^Hv zfs$w}T%qa1N&pabY@m#(pY$#PDhxEN^U`D8MBi$I3Cg+e$pBU8(0jd;6@=~!uF6rv zxTx$}uakcjzJBfPsG}3lf~fcG5j`p6(~d&&Xdv1skL?@l>UP-nN3F2%no#%*2oXV5 z!}Oz===RaycDvUEu<(RmtFFF7xsdG)bwk9<+-*T6*Yxe5YC!@<J&Fhg{hkLoe1gjf zawW%~WG5P3$3hBtZtMynVgjU>sQI=23a*YKu#bb^BlUk5>yV!Mu9DPG(349%Fuz^m zxJp4;M8zt-`8RvymbwFZ<Xxxa$Dn7X>31Q<DZ)nMj$6i{zG*nB*yqh6wq-{0=U?gc zpTCgF<jS%HR6fN*f@T{~(k-g}v|`pbdY50)?bo2cb79#X)vA(uNU>z?Od!mT4S6XC ze1oaD3SGjJ9YcO^Vy58O;oiY6i74~xLB_W;L3O#pxw-~%o>!rY5k(e*`{GLmKWw#| zve;tk?R(zD`@f2qH70jX9t#7*$K)ckV!$^ty>XtetfBthJkBR2uO_|ATDKD}f%J_N zqyT|k;L@Y;Xrh~(YKHvT_`>B&JVa=VY0U}qga^!!O?TY7$zsX7DycaV80xF&(_n0w z801c>vacLob!O-rr-I#Dd2m@QkZ*M8)KX3(p+0`o7nMoKIW*;b-KSTYQ5Y>p^y<Ql zB4;|4)GhmhD;fcBuW^XLFD|Pr-`yE1wJj|?+KAi?KB|_tpELn@@q@SEvyPc9otQWT z5op(B31@*8_~-fT9%~I!sy+(B+N&EHf~)oltgr+0Bh0XHY_l|;Tb7NfWAzz-_M!a6 z<C0N1a1qwre6)k`Z@M1F-r3ip>~?xw#;q7}+vAM*oxZdFGQOCZABoGmc?EALAd-KF zKvXk7Hz*MZ+ll#p{JZ62&zuoS!NHJ6=ub8Qd@+OziOa7P#Cr^!J{dczGaF`7KtYo@ zqd@p#Fe?%lj*+mo-tj1WLq9B(No3scNkxi2(m8OF$jP5?6wJ}q!tG>N07aS;n;n-D zoj(LXSkXwmB;HbF3~MtdXg|uC@^w;b?6+vFa+%?e3BcBq)^37i<56Uq*pEi0qxD>@ zr#<01c#oeIL<&@+YCW#W9^4#c`7y!yp<ek)s=AfAdHof@%*xu@DPxe06$8?dy^b?} zuBeh7Rl@XAhO?`m!M{~c$6eLogk_)ohwZiW-VmC`tQO8?L1|F@_deZqwXS_KJ*hm7 z8C@|mwT4x=Mj(q2<hUk|=!Y^2=Xb%;DF6*76^#L=o3jG=4Kb}G2GT0dGvYH0ycjVL z5}s~wPx*Eew`@iy@xqq>YA!Bjb1c{H*yX^40P~||P#((J?Q;m+%)8f0t=5oV?9S|W zlQr1mT$ExUHNZ5v4X_kIR_h0^=A42~1HmT)0%Msni+TpW(gR&=az<4Dw80MGtLo?M zTkJ?ltf$u>su_qqLsJ;|PsE}e4&N27+8dI$doJsWH*Jd#3JStu#a@^0_bikJ(`d9R z+>!$^bowwQ4LOq>@TZ})qCB%QKM(N>;;rsXwhaI|kHc_5hr|wQL_ig%&@x=bI}|=z zUs{nm3>8O+#NrD*EdPKi0!M_R6Hq{jjBXcM94Z@?a4U!#IMN;c<f12qR2s7F;N$_1 z@CJ~?!2~6Yj;7n9M@`!`o~M!sFj^g{t6fyqf=_{H#;aEVDrwqdcFaht4MmnqVhHau zD2;B!plQ-GZzxL2HZYg&WpFcRwQf8EDf_PczK6mUYBiv;h#hUBtsMv9wb?ZWfBfwh z%edSb{Mp+2*%kHQ3K+!Ox)(2mlE2)l4Uj3$I7D6IYC1Z6d>)-UyHag3ALSwEjFHPL z)G`m^a_s$)h|e%&+vQ$y6-RiN$_?TE>plP9llra4&_MtyC%@VxTmKZlu-O289b+U} H%PIDMF~M~5 literal 0 HcmV?d00001 diff --git a/rep2/img/glyphish/icons2/08-chat@2x.png b/rep2/img/glyphish/icons2/08-chat@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3f8ea8ad955d7ad3af6afa9bf3a533c30ef0a617 GIT binary patch literal 535 zcmV+y0_gpTP)<h;3K|Lk000e1NJLTq003YB002M;1^@s6<uq~*0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzxk*GpRCwC#+tE>jKoG`pumP`wU<Fb_ zIxrm=JFtY5Knawf6-YY33XC0K1-Lif1CzJ-uy?!n-<cbpGLY{F3t=|xx~>hCuUY^A z0DuAj015yAC;$MUDg#)SrI*cKR?yzHtSN*rR|z1&pJa2Cwaa`Ge#;sK;#37dI^#!K zkA-!E&v-&;UlFPRDf~&+eW5M+C$>XP1T_E&Klb=b!QpQaIzd=8c6O)u#Rdc6H|ZD$ zS66_X{he&Sj6ESf$W?Ihas|8^d_-3{W-Wl;Ab`p-YqcPgKewd?wVrOm6aWBF002M% z000F502BZK06+u)0H9E3gV~%t0n7#gW={a4K>(Fw)|`rXlg*Qn@ZUoS2X6q3rQ`%i z2n=TB1lS<NcC;%j{5T_ea6OuM)sEuW$FV77I9Jx7)poK2Tw&~+zwz{Kb+VrSbMw6M z@iC64PdUGTk$=!gC?7X|>_x&f_qgljRfNg#y#SaE-vfZ@@T~)w58pC?i}0-ixC!4P zfUEGW0k{j_5`fF_tpK<U-vWT^@MD$wE-1dT?!AX!EI>^K0001x0ssI|002M%P+$ED ZFaVD{&h&tm%?SVi002ovPDHLkV1g@y*0TTr literal 0 HcmV?d00001 diff --git a/rep2/img/glyphish/icons2/08-chat@3x.png b/rep2/img/glyphish/icons2/08-chat@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..68be0d973ef1da90910d9330939af6ea51a5ed17 GIT binary patch literal 1382 zcmV-s1)2JZP)<h;3K|Lk000e1NJLTq0058x003YJ1^@s6^3?mG0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU%2uVaiRCwC#olA%uRTxI=(a(7}5(&6S zoG2~?<3?1BB7*K*h(d_26^%|zz=a?xg2cx{S8h}!x)s5dN+6m^m_;_CNJJtUB_>MH zpg0qq?&|8U^7}J2BpqB-6+KdqbKuf7vzWQ}>r?-|Rb6w(jpNt>$csk=fIxsifIxsi z00;yK1PBBO1b{$*K!8AiKmZ5?6Q)t6!Swt6O+gS`?Yi!$sC|s%*l)F3zjeFaKdO+q zTjuA1dcEGYgTdfF33Hde+^(_As1^RCP=AMNf9vpD^>;}^9h6W%A<+LP&dp&MzM#I} zqIQM8HC@tbI#l~dGOeh6*=#oVOQf$5Xye3jB+hf{^P^D|%`0@jD$}pV6nUO^N@IFo zBE2k;5NN{kY}NYaHTCy?g*;o;MXAPjUgP_?-EKcCiOwL<WaQZ*dEV9Gy=u)GT-=0e zi<0QEqDxeGfo$56JRj(Ar<(872fLE|ND@6%<mt>Sfjlqi@WGnN<0RvKK;z$UIUrD; zQ*bo8O%?KC9k!f$($e^MSq=!4qxuYo!zZ+$yw0gHHh$%>P}C|^Sb=ob-Keu~hf}e; z<vD05huf9MO$e0j%-f}xc?XR7Bo72iJAH*=c&9?^;?9MWsbhH*aT+V6K$`P6scdgX zor_o=mJ0%<JL9(MrGqwOw3A#AC<WK3P2tQKmd7>(N{3Y+A7{p}Jh}*!a>`E{jAs%d z5L5~T0t5mC0t5mC0ze=@AV45MAOHjc1OfyC1Oh0LK=$m5%iA-C>lE-AsiF$B;;j9B zI9$Z?SVo|9*oFc<oEgLN_!)sx5XZ3v)yJ7J0_AcVfl|<Jx6gZ?cNS+Zd83qv<$^#d zXti2SqtQ65Gj0WS);688JS-OkN=Xz&AL`|I^tr&fBo742P=!vbY#-C%pzc>+mV@#* zg+STXL5}bHZ>W5qsk1#A|1Zknb;|>RGSX}|zj0mnErr;xsXT#=UpX8vY99-~M`92J zwp+)W>gPh0w)IUR&&cHIcDs9vT73#%f!3!oh4`YvJP?<8Tm5YE#I|3wjl0P5l%fJ% zQi<kNiJn(~A5pkhRal-sHNN*G&nuGWucG(2R6ErV1_Nhxb@lN?qFbG6Jxvg4Twf%W z=bfTgo>B_5z9t$Dhu5pwzdN`?-?B|Ow<!2BRvUZyRqaQ+RBtpI2h>iMMV?X$beTxD zi`hMDJ9NBFLd`jAJK3)fDw0@s`}PL4D<}Bt&nma?oqUg1nCW(JXIZk?XMT3CYf;DN z$|O$d1^O?c!Z4gm_ElWp24y5RORTqbeD{Q^#tGl|Use0W$+v&Cr=QW&rTKChg}I!{ zY@us!hMGMuGxp4k7T!T$Ok#>Nc~m(Tv_?590UW5oBdvPV+mje)BF~<wsVU^ClRy)a z@Vi8wBglh5Sud@>wrLA_D!vBVfT|N|p?pwlr)N5y&I#l}piJ_p>KxKy`Duys1Boz& zWs*l#=a8nXeaM4AdF1(QdU_gpn8Gs4V~<Z9mOM{Mo|7bkK$+#4nVH#RpGA=fQ&?7c z7Lf;m^2&2W(-!hDh2@s#N!C16pgi&%MIHpo!$@rjc@QX<JgPoRS}^bCJ`VzA9cPR@ zETZ$uWB+^o`0VWLZe4954+5n}i)H&5{d39lDe`PUzBTz<Jzxz42m}ZOfIxsifIxsi ofIt8U1PBBO1PBC>iGKwc0H9nRVz#xZ<NyEw07*qoM6N<$f<LB&{{R30 literal 0 HcmV?d00001 diff --git a/rep2/img/glyphish/icons2/104-index-cards@2x.png b/rep2/img/glyphish/icons2/104-index-cards@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f0183371bde8795467877ba70fd394030b4d065c GIT binary patch literal 547 zcmV+;0^I$HP)<h;3K|Lk000e1NJLTq003YB002M;1^@s6<uq~*0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz#Ysd#RCwC#oH0toKoo{IVzXV2U?JEj zcmRvFQnc_2qNPm^AWF2cRIpX_0G5i|39(nuLueNp+xRO9E{nl6aWa|A_rqf#yYooi zmpA`}4I5-x)<gC*MF{`^00aO4AOHXW0RR99002M$003%6)20%qY5Jg{uXu5!7Eu_6 zkDUP^E#~8#BLHR;odQs3*@5DxHtzmU1*U$G(Gv8PSQi$s(%bET0?2#r2`=bOF=(PI zn%o8Tx!)~zKp~bSo&)^ufDuo))v)47ordb%)y{N)iXS;t{GQ2kWeLIq@PM}HNby>6 z?m)3IcI;g7R59OzV#_xGiHz>1qNmLMaQLc5zBL~KT<gNyoDUDc1I%i@#*%TWVQ1{{ zzVaPZ%(tf@rUU2zr#&E6zPRlG=m0w4?;fB#dsoBZFJHq05FUUBAOLu~1YIibD6u5~ z+JS8TQ>rt?bIE7(ifzO5y)of3T?poV$#!vRf&$i^@4W{k#Y<izg^TiINtO9|j!EZt zrUOoT7T&$&IpEt9BFfD+6ac6N0JIz(YZy9ICu8Rt@P9!pK>$Di0006201yBGfB*mh l1ONaa00001p!50=U;w<qhcEXL?S23N002ovPDHLkV1iWZ;qU+e literal 0 HcmV?d00001 diff --git a/rep2/img/glyphish/icons2/104-index-cards@3x.png b/rep2/img/glyphish/icons2/104-index-cards@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..1e892454286c643299542bfc205e62143f497a85 GIT binary patch literal 1812 zcmV+v2kZEWP)<h;3K|Lk000e1NJLTq0058x003YJ1^@s6^3?mG0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU&wn;=mRCwC#om*%eRUF1=XJ<FNv$0K5 zsA#lEu{8CLU|*^ftcED{@*<*dh1M$32StqNL(rfPULNX`Ew$o96@-d-!AtQ%y-<-B ztYXwgEVZR3niOMpW_D+1*6)x>Nw(R|&d!|8?9TVWVbAVn&)GTWcm9`|vy()*TvjNm zQK=jPiU3grh$27~0iq}ZL=hm008s>pq6iR0fG7e)5g>{pKokL@2oObpD2f141c)L) zR0~Us!j~`%qt|hq5%1{?N+M?SAdWXtE|<SerBeH|*(?F_0nh4UvA7r2TfCQ?m@ejo z>$-O)lgUohcN3sG1<Rx3Vg0=CqABr}2`hAnF3i7d@9|#@;2xCIsHfs&eQ?Yc+}9Df zuTcWjpfHFtx~{(oGd>!#I7l3;qpE5Vg+X)xfXbStnE<H3{DuHE3emYGXj#_HwrxL@ zNF=&qK2JxnsD`4LokccaHBGapP$&!msQ$RGa*V-Eh>t{E_zD54Q>9W#$H1+D^_d$) zC9XGuz;XY8hl6xsexk}*aBOb?&%%5^3p4(E4Eb?UPGCGn2~guJ(1Z#92mt-cur*q0 zm7GzWC&_WTXn{fzg6j(qBR!7lh8WM?2~|~JfNTGU0QrMQM~3zcEYcvJrsJHP!KLQ_ z&>#WwA=|e50M8u=D&q`~muDnyWDMkg)VdVzV>-8<2#|j{UTRChjS(P<Sy*J2W4Szu z@}n}lt1%g3(-vIk29&-k{fhDns-kp+Y;C*I@20sk@&rg8JPI<Bmyp^XK)n>Qb+t>S z()Gn+aRd{2Rb{{Fbo$*?Dm8+-NU6iz$K;~FEZQ9~4CCb}Ley3k2$S5C%jJ&C7-+P) zqEIMwRJJXiyRNH>v*ajw8ON2+=WnA6lb@X_un-TRdI=_SJoL!jajr%m>#BfzD<=7E zSfSs-?iX-&1Kh1q-DuWU76^m9(zfmUP^3Xx<@GE8yImAX$HgGJ+3`@b;E6)N1SmXn zKh@FE@fKXzX$kSwMp(AH7n@K4j;3i}z=a)@a7=3~%X*M5tO-^plgaE7`-Wt!TErpO zAjVpUwy&)07vOw~es=)eladZ^9Q_YR(HgbYi9}3hQsS<~M2+!ED&d}Ys_ZwiKXGcS zEDWpk5mYaf<ic(cCleRz7p`p!z<nK-=rc(!Y&%_8bF#2*xS5@@g4r5bm;h`uK-w&$ zUuI#;V2zgJ^HI;32+-2z{!BWZ{unN7ve7mi$GHO5WQ*eCnwGG5=<_gK*w+${>0-F% z`{}}(kcA<Ie^q2*K?Yl7TX04DE3bLg>K7^eAzjzE1ES*+j!PWOI9&6i%);cmuCpNw zve;`>^4ae+%8aCAa<L%BqdMkom4zW&8N`ZR1&i=^fNX1{GJCt3y8DI2+M3Vj_rZOB zAi;&LH4Ni1ST_RHge+`5O#Lw2kd$nz)@K0T06-d$u`r?vPg`bTjR4Tf{W1nxcpsqn z%>V%koMni;7uk6hkq{A}`h~z#oU{2-Y(qu)1ocTyOY3OaW1vhXW8z^5*~T9zyAel7 zO<6sQcM9b{rS=6-v7vn>zE7{uadObd89Yuc(Y`ocAZ{>vX)FIoG7>>FAQA&U+yr+i zwqCrCY;7N&PAIjnau-o9avbMjl)7(ng^cNYlowGITRYNA0NRD`bT2Z;ZLJ!B$Lf~4 z0wBQijjrn-*83U5Fg77Y@2_`9BHAC#X0z|q3xs7^J@^~}k`$jM=hXv`u(-rwn&u7> zZ^07%scG6Vytd$`Rj@WI;7YGUbrmeb+CrglPra8$ye%dD`216_s-yVaNm!#J=lL$z z?G-01(bsAKx--h>d0G}AOtSci%*?#Fr4&ZHn5;g4u?rw6ot>ReW1^p5;J1p!%Q2~Y z#V;@#*-C-G7jQf`Jv}X4^Lx2m?ykze5f^Lm{u=_ER)!}MSy(l}LQG-;U&Cr0L;V2i ze}&cd92kpTzrt%a-kb2=58D1zmG{jc?b8C)7g&pjJ+^I+!BTvO!Oklb0rCqG%IBOW zx-g0WMd~~Aat8rwSRxkU4W=Rzg0$R;M5MhxBcT2Ysr_Y2fZt1bzuZ{t_*J|Y_#QuA z`_;}wCquaNzF0&*5g`A8wMf06Kz3#Wq-z@<eb*JK_NnveQPr7LDs>cXmx2N$&PrEF z<0sI^;eZ?E$ME?lmwP@EasB@j6tggj08s>pB0v;HfG7e)5g>{HQ4|592oObpC;~)L z1c)L)6ak_L5JeFniU3grh$27~MSv&*L@l5G7hnJjS)QEWW`&3V0000<MNUMnLSTX_ CQcS=A literal 0 HcmV?d00001 diff --git a/rep2/img/glyphish/icons2/108-badge.ai b/rep2/img/glyphish/icons2/108-badge.ai new file mode 100644 index 000000000..39c258115 --- /dev/null +++ b/rep2/img/glyphish/icons2/108-badge.ai @@ -0,0 +1,1582 @@ +%PDF-1.5 %���� +1 0 obj <</Metadata 2 0 R/OCProperties<</D<</ON[5 0 R 32 0 R 52 0 R]/Order 53 0 R/RBGroups[]>>/OCGs[5 0 R 32 0 R 52 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <</Length 37726/Subtype/XML/Type/Metadata>>stream +<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> +<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27 "> + <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <rdf:Description rdf:about="" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + <dc:format>application/pdf</dc:format> + <dc:title> + <rdf:Alt> + <rdf:li xml:lang="x-default">Print</rdf:li> + </rdf:Alt> + </dc:title> + </rdf:Description> + <rdf:Description rdf:about="" + xmlns:xmp="http://ns.adobe.com/xap/1.0/" + xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/"> + <xmp:MetadataDate>2015-04-15T13:57:29+09:00</xmp:MetadataDate> + <xmp:ModifyDate>2015-04-15T13:57:29+09:00</xmp:ModifyDate> + <xmp:CreateDate>2015-04-15T13:45:56+09:00</xmp:CreateDate> + <xmp:CreatorTool>Adobe Illustrator CS6 (Macintosh)</xmp:CreatorTool> + <xmp:Thumbnails> + <rdf:Alt> + <rdf:li rdf:parseType="Resource"> + <xmpGImg:width>256</xmpGImg:width> + <xmpGImg:height>172</xmpGImg:height> + <xmpGImg:format>JPEG</xmpGImg:format> + <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgArAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FVGb7f0YqsxQ7FV8P2/oxS6b7f0YqsxQ7FV8P2/oxS6b7f0YqsxQ7FV8P2/oxSr Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVGb7f0YqsxQ7FV8P2/oxS6b7f0Y qsxQ7FV8P2/oxS6b7f0YqsxQ7FV8P2/oxSrYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FVGb7f0YqsxQ7FV8P2/oxS6b7f0YqsxQ7FV8P2/oxS6b7f0YqsxQ7FV8P2/oxSrYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVGb7f0YqsxQ7FV8P2/oxS6b7f0YqsxQ7F V8P2/oxS6b7f0YqsxQ7FV8P2/oxSrYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FVGb7f0YqsxQ7FV8P2/oxS6b7f0Yqhb2X0rZ2HUii/M4odZS+rbIx6gUb5jFUVD9v6MUum+39GK rMUOxVfD9v6MUq2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVRm+39GKrMUOx VfD9v6MUum+39GKpRq8tWSIdvib5npih2kS0Z4j3+JfmOuKpvD9v6MUum+39GKrMUOxVfD9v6MUq 2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVRm+39GKrMUOxVfD9v6MUum+19G KscuJfVneTsTt8u2KHW8vpTpJ2B3+XfFWRw/a+jFLpvt/RiqzFDsVXw/b+jFKtirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVaZA3Xr44qoMjL16eOKGsVXw/b+jFKH1WX04GI6sOI +n+zFUgxQ7FU/wBKl9SBSeqjifo/sxSiJvt/RiqzFDaozdOnjiquqBenXxxS3irsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdiqlNdW8JAlcITuK4qpnUrEf7uH4nFWjqdh/v0fcf6Yqovq Gn9Vl+ji39MVaTVLJWqX/wCFP9MVQOq3kdw6CI1RRuaU3OKoHFDsVR2lXkdu7iU0RhsaV3GKUc+q WTNUP/wp/piraahp/Vpfo4t/TFVYanYf79H3H+mKtjUrE/7uH4jFVSK6t5iRE4cjrTFVXFXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqsmgimjKSLyU/h8sVSK+0yW2Jdfjh/m7j54qgsUO xV2KuxV2KuxV2KuxV2KuxVG2OmS3JDt8EP8AN3PyxSnsMEUMYSNeKj8fniq/FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXEAih3BxVKb/R61kthQ9TF/wA04qlBBBIIoRsQcUOxV2Ku xV2KuxV2KuAJIAFSdgBiqb2Gj0pJcip6iL/mrFKbAACg2AxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxVCX2mxXI5D4Jezjv8APFUgngkglMcgowxQsxV2KuxV2Kr4IJJ5 RHGKscVT+x02G2HI/HL3c9vlilF4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYqxi8m9a5kk7FtvkNhihRxV2KuxV2Kq1nN6NzHJ0Abf5HY4qyfFLsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqHv5vRtJX70ovzO2KsaxQ7FW1VnYKo LMegG5xVzKyMVYFWHUHY4q1irsVZLYTetaRP3pRvmNsUojFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYqlWuzfDHCO/xt9GwxVJ8UIi0sZ7lqIKIPtOegxSntpYwWy/A KuernrirruxguV+MUcdHHXFUiu7Ge2ajiqH7LjocVQ+KE40Kb4ZIT2+Nfp2OKU1xV2KuxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ksc1KUzXslNwp4KPlt+vFUVY6MzUkuf hXtH3Pz8MVThEVFCoAqjoB0xVvFXYq06K6lXAZT1B6Yqk99ozLWS2+Je8fcfLxxVC6bKYb2OuwY8 GHz2/XirI8VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVablxPH7VPh r0riqFs9Oht/jPxzHq5/hiqLxV2KuxV2KuxV2KoS806G4+MfBMOjj+OKopeXEcvtU+KnSuKt4q7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq//9k=</xmpGImg:image> + </rdf:li> + </rdf:Alt> + </xmp:Thumbnails> + </rdf:Description> + <rdf:Description rdf:about="" + xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" + xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" + xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" + xmlns:stMfs="http://ns.adobe.com/xap/1.0/sType/ManifestItem#"> + <xmpMM:InstanceID>uuid:ec32ecb0-f02c-2a4c-b7eb-05a6aa4b7a7a</xmpMM:InstanceID> + <xmpMM:DocumentID>xmp.did:0680117407206811822AD3757CE76CAE</xmpMM:DocumentID> + <xmpMM:OriginalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</xmpMM:OriginalDocumentID> + <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass> + <xmpMM:DerivedFrom rdf:parseType="Resource"> + <stRef:instanceID>xmp.iid:0580117407206811822AD3757CE76CAE</stRef:instanceID> + <stRef:documentID>xmp.did:0580117407206811822AD3757CE76CAE</stRef:documentID> + <stRef:originalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</stRef:originalDocumentID> + <stRef:renditionClass>proof:pdf</stRef:renditionClass> + </xmpMM:DerivedFrom> + <xmpMM:History> + <rdf:Seq> + <rdf:li rdf:parseType="Resource"> + <stEvt:action>saved</stEvt:action> + <stEvt:instanceID>xmp.iid:0580117407206811822AD3757CE76CAE</stEvt:instanceID> + <stEvt:when>2015-04-15T13:44:37+09:00</stEvt:when> + <stEvt:softwareAgent>Adobe Illustrator CS6 (Macintosh)</stEvt:softwareAgent> + <stEvt:changed>/</stEvt:changed> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <stEvt:action>saved</stEvt:action> + <stEvt:instanceID>xmp.iid:0680117407206811822AD3757CE76CAE</stEvt:instanceID> + <stEvt:when>2015-04-15T13:45:56+09:00</stEvt:when> + <stEvt:softwareAgent>Adobe Illustrator CS6 (Macintosh)</stEvt:softwareAgent> + <stEvt:changed>/</stEvt:changed> + </rdf:li> + </rdf:Seq> + </xmpMM:History> + <xmpMM:Manifest> + <rdf:Seq> + <rdf:li rdf:parseType="Resource"> + <stMfs:linkForm>EmbedByReference</stMfs:linkForm> + <stMfs:reference rdf:parseType="Resource"> + <stRef:filePath>/Volumes/home/rep2img/108-badge.png</stRef:filePath> + </stMfs:reference> + </rdf:li> + </rdf:Seq> + </xmpMM:Manifest> + </rdf:Description> + <rdf:Description rdf:about="" + xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/"> + <illustrator:Type>Document</illustrator:Type> + <illustrator:StartupProfile>Print</illustrator:StartupProfile> + </rdf:Description> + <rdf:Description rdf:about="" + xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/" + xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#" + xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/"> + <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint> + <xmpTPg:HasVisibleTransparency>False</xmpTPg:HasVisibleTransparency> + <xmpTPg:NPages>1</xmpTPg:NPages> + <xmpTPg:MaxPageSize rdf:parseType="Resource"> + <stDim:w>480.000000</stDim:w> + <stDim:h>320.000000</stDim:h> + <stDim:unit>Pixels</stDim:unit> + </xmpTPg:MaxPageSize> + <xmpTPg:PlateNames> + <rdf:Seq> + <rdf:li>Cyan</rdf:li> + <rdf:li>Magenta</rdf:li> + <rdf:li>Yellow</rdf:li> + <rdf:li>Black</rdf:li> + </rdf:Seq> + </xmpTPg:PlateNames> + <xmpTPg:SwatchGroups> + <rdf:Seq> + <rdf:li rdf:parseType="Resource"> + <xmpG:groupName>初期設定のスウォッチグループ</xmpG:groupName> + <xmpG:groupType>0</xmpG:groupType> + <xmpG:Colorants> + <rdf:Seq> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>ホワイト</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>255</xmpG:red> + <xmpG:green>255</xmpG:green> + <xmpG:blue>255</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>ブラック</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>35</xmpG:red> + <xmpG:green>24</xmpG:green> + <xmpG:blue>21</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>CMYK レッド</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>230</xmpG:red> + <xmpG:green>0</xmpG:green> + <xmpG:blue>18</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>CMYK イエロー</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>255</xmpG:red> + <xmpG:green>241</xmpG:green> + <xmpG:blue>0</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>CMYK グリーン</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>0</xmpG:red> + <xmpG:green>153</xmpG:green> + <xmpG:blue>68</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>CMYK シアン</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>0</xmpG:red> + <xmpG:green>160</xmpG:green> + <xmpG:blue>233</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>CMYK ブルー</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>29</xmpG:red> + <xmpG:green>32</xmpG:green> + <xmpG:blue>136</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>CMYK マゼンタ</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>228</xmpG:red> + <xmpG:green>0</xmpG:green> + <xmpG:blue>127</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=15 M=100 Y=90 K=10</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>195</xmpG:red> + <xmpG:green>13</xmpG:green> + <xmpG:blue>35</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=90 Y=85 K=0</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>232</xmpG:red> + <xmpG:green>56</xmpG:green> + <xmpG:blue>40</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=80 Y=95 K=0</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>234</xmpG:red> + <xmpG:green>85</xmpG:green> + <xmpG:blue>20</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=50 Y=100 K=0</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>243</xmpG:red> + <xmpG:green>152</xmpG:green> + <xmpG:blue>0</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=35 Y=85 K=0</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>248</xmpG:red> + <xmpG:green>182</xmpG:green> + <xmpG:blue>45</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=5 M=0 Y=90 K=0</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>250</xmpG:red> + <xmpG:green>238</xmpG:green> + <xmpG:blue>0</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=20 M=0 Y=100 K=0</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>218</xmpG:red> + <xmpG:green>224</xmpG:green> + <xmpG:blue>0</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=50 M=0 Y=100 K=0</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>143</xmpG:red> + <xmpG:green>195</xmpG:green> + <xmpG:blue>31</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=75 M=0 Y=100 K=0</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>34</xmpG:red> + <xmpG:green>172</xmpG:green> + <xmpG:blue>56</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=85 M=10 Y=100 K=10</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>0</xmpG:red> + <xmpG:green>145</xmpG:green> + <xmpG:blue>58</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=90 M=30 Y=95 K=30</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>0</xmpG:red> + <xmpG:green>105</xmpG:green> + <xmpG:blue>52</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=75 M=0 Y=75 K=0</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>19</xmpG:red> + <xmpG:green>174</xmpG:green> + <xmpG:blue>103</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=80 M=10 Y=45 K=0</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>0</xmpG:red> + <xmpG:green>162</xmpG:green> + <xmpG:blue>154</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=70 M=15 Y=0 K=0</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>46</xmpG:red> + <xmpG:green>167</xmpG:green> + <xmpG:blue>224</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=85 M=50 Y=0 K=0</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>3</xmpG:red> + <xmpG:green>110</xmpG:green> + <xmpG:blue>184</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=100 M=95 Y=5 K=0</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>23</xmpG:red> + <xmpG:green>42</xmpG:green> + <xmpG:blue>136</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=100 M=100 Y=25 K=25</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>23</xmpG:red> + <xmpG:green>28</xmpG:green> + <xmpG:blue>97</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=75 M=100 Y=0 K=0</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>96</xmpG:red> + <xmpG:green>25</xmpG:green> + <xmpG:blue>134</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=50 M=100 Y=0 K=0</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>146</xmpG:red> + <xmpG:green>7</xmpG:green> + <xmpG:blue>131</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=35 M=100 Y=35 K=10</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>164</xmpG:red> + <xmpG:green>11</xmpG:green> + <xmpG:blue>93</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=10 M=100 Y=50 K=0</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>215</xmpG:red> + <xmpG:green>0</xmpG:green> + <xmpG:blue>81</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=95 Y=20 K=0</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>230</xmpG:red> + <xmpG:green>22</xmpG:green> + <xmpG:blue>115</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=25 M=25 Y=40 K=0</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>201</xmpG:red> + <xmpG:green>188</xmpG:green> + <xmpG:blue>156</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=40 M=45 Y=50 K=5</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>164</xmpG:red> + <xmpG:green>139</xmpG:green> + <xmpG:blue>120</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=50 M=50 Y=60 K=25</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>122</xmpG:red> + <xmpG:green>106</xmpG:green> + <xmpG:blue>86</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=55 M=60 Y=65 K=40</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>96</xmpG:red> + <xmpG:green>76</xmpG:green> + <xmpG:blue>63</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=25 M=40 Y=65 K=0</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>201</xmpG:red> + <xmpG:green>160</xmpG:green> + <xmpG:blue>99</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=30 M=50 Y=75 K=10</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>178</xmpG:red> + <xmpG:green>130</xmpG:green> + <xmpG:blue>71</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=35 M=60 Y=80 K=25</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>149</xmpG:red> + <xmpG:green>97</xmpG:green> + <xmpG:blue>52</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=40 M=65 Y=90 K=35</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>127</xmpG:red> + <xmpG:green>79</xmpG:green> + <xmpG:blue>33</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=40 M=70 Y=100 K=50</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>106</xmpG:red> + <xmpG:green>57</xmpG:green> + <xmpG:blue>6</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=50 M=70 Y=80 K=70</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>64</xmpG:red> + <xmpG:green>34</xmpG:green> + <xmpG:blue>15</xmpG:blue> + </rdf:li> + </rdf:Seq> + </xmpG:Colorants> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:groupName>グレー</xmpG:groupName> + <xmpG:groupType>1</xmpG:groupType> + <xmpG:Colorants> + <rdf:Seq> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=100</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>35</xmpG:red> + <xmpG:green>24</xmpG:green> + <xmpG:blue>21</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=90</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>62</xmpG:red> + <xmpG:green>58</xmpG:green> + <xmpG:blue>57</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=80</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>89</xmpG:red> + <xmpG:green>87</xmpG:green> + <xmpG:blue>87</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=70</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>114</xmpG:red> + <xmpG:green>113</xmpG:green> + <xmpG:blue>113</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=60</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>137</xmpG:red> + <xmpG:green>137</xmpG:green> + <xmpG:blue>137</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=50</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>159</xmpG:red> + <xmpG:green>160</xmpG:green> + <xmpG:blue>160</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=40</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>181</xmpG:red> + <xmpG:green>181</xmpG:green> + <xmpG:blue>182</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=30</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>201</xmpG:red> + <xmpG:green>202</xmpG:green> + <xmpG:blue>202</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=20</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>220</xmpG:red> + <xmpG:green>221</xmpG:green> + <xmpG:blue>221</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=10</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>239</xmpG:red> + <xmpG:green>239</xmpG:green> + <xmpG:blue>239</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=5</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>247</xmpG:red> + <xmpG:green>248</xmpG:green> + <xmpG:blue>248</xmpG:blue> + </rdf:li> + </rdf:Seq> + </xmpG:Colorants> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:groupName>輝き</xmpG:groupName> + <xmpG:groupType>1</xmpG:groupType> + <xmpG:Colorants> + <rdf:Seq> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=100 Y=100 K=0</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>230</xmpG:red> + <xmpG:green>0</xmpG:green> + <xmpG:blue>18</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=75 Y=100 K=0</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>235</xmpG:red> + <xmpG:green>97</xmpG:green> + <xmpG:blue>0</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=10 Y=95 K=0</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>255</xmpG:red> + <xmpG:green>226</xmpG:green> + <xmpG:blue>0</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=85 M=10 Y=100 K=0</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>0</xmpG:red> + <xmpG:green>154</xmpG:green> + <xmpG:blue>62</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=100 M=90 Y=0 K=0</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>11</xmpG:red> + <xmpG:green>49</xmpG:green> + <xmpG:blue>143</xmpG:blue> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=60 M=90 Y=0 K=0</xmpG:swatchName> + <xmpG:mode>RGB</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:red>126</xmpG:red> + <xmpG:green>49</xmpG:green> + <xmpG:blue>142</xmpG:blue> + </rdf:li> + </rdf:Seq> + </xmpG:Colorants> + </rdf:li> + </rdf:Seq> + </xmpTPg:SwatchGroups> + </rdf:Description> + <rdf:Description rdf:about="" + xmlns:pdf="http://ns.adobe.com/pdf/1.3/"> + <pdf:Producer>Adobe PDF library 10.01</pdf:Producer> + </rdf:Description> + </rdf:RDF> +</x:xmpmeta> + + + + + + + + + + + + + + + + + + + + + +<?xpacket end="w"?> endstream endobj 3 0 obj <</Count 1/Kids[7 0 R]/Type/Pages>> endobj 7 0 obj <</ArtBox[148.953 48.9473 348.055 298.143]/BleedBox[0.0 0.0 497.008 337.008]/Contents 54 0 R/Group 9 0 R/LastModified(D:20150415135729+09'00')/MediaBox[0.0 0.0 497.008 337.008]/Parent 3 0 R/PieceInfo<</Illustrator 55 0 R>>/Resources<</ColorSpace<</CS0 56 0 R>>/ExtGState<</GS0 57 0 R>>/Properties<</MC0 52 0 R>>>>/Thumb 58 0 R/TrimBox[8.50389 8.50391 488.504 328.504]/Type/Page>> endobj 54 0 obj <</Filter/FlateDecode/Length 256>>stream +H�lQ[N1 ��)|�xc;���U�hU�R�`]UE��hl�L&���n ps;�����k��f�*,Ӈ�����y9�|pýM�-� �&A��@Z�TJ0�\k���� +�`H� @R��!����W��3��S���_[9�5pQ=�rn>7.�gm��T����K�[]3�,ł�ۚ��Y∉|���dkE�0 +Ĕ���l�ѐD�� )E뚇��P���־�}�H��$�Jȯ^:+��v�ݿ �ge endstream endobj 9 0 obj <</CS 15 0 R/I false/K false/S/Transparency>> endobj 58 0 obj <</BitsPerComponent 8/ColorSpace 59 0 R/Filter[/ASCII85Decode/FlateDecode]/Height 42/Length 171/Width 62>>stream +8;Z\s5n8Df$j?V1(N)?imheG!L,EZM`!^@Lk[C#W#V#/b8eA=d*6#!gs(AL9,P_pT +G`jq_<SJLBhLUs[a_Yc7-p8>dA%mP#Ct1M$rF;\Ipss*=$idSWPrlRhc'/ANZj3Z; +^%#77Cj+-"j15E(.e;E>If6RVG<X2)!*%`aSH~> endstream endobj 59 0 obj [/Indexed/DeviceRGB 255 60 0 R] endobj 60 0 obj <</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1 +VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH< +PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 52 0 obj <</Intent 61 0 R/Name(��0�0�0�0�� �1)/Type/OCG/Usage 62 0 R>> endobj 61 0 obj [/View/Design] endobj 62 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 57 0 obj <</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>> endobj 56 0 obj [/ICCBased 63 0 R] endobj 63 0 obj <</Filter/FlateDecode/Length 2574/N 3>>stream +H���yTSw�oɞ����c [���5la�QIBH�ADED���2�mtFOE�.�c��}���0��8�׎�8G�Ng�����9�w���߽�����'����0 ��֠�J��b� � + �2y�.-;!���K�Z� ���^�i�"L��0���-�� �@8(��r�;q��7�L��y��&�Q��q�4�j���|�9�� +�V��)g�B�0�i�W��8#�8wթ��8_�٥ʨQ����Q�j@�&�A)/��g�>'K����t�;\�� ӥ$պF�ZUn����(4T�%)뫔�0C&�����Z��i���8��bx��E���B�;�����P���ӓ̹�A� om?�W= +�x������-������[����0����}��y)7ta�����>j���T�7���@���tܛ�`q�2��ʀ��&���6�Z�L�Ą?�_��yxg)˔z���çL�U���*�u�Sk�Se�O4?׸�c����.��� ����R� ߁��-��2�5������ ��S�>ӣV����d�`r��n~��Y�&�+`��;�A4�� ���A9��=�-�t��l�`;��~p���� �Gp| ��[`L��`<� "A � YA�+��Cb(��R�,��*�T�2B-� +�ꇆ��n���Q�t�}MA�0�al������S�x ��k�&�^���>�0|>_�'��,�G!"F$H:R��!z��F�Qd?r 9�\A&�G� ��rQ ��h������E��]�a�4z�Bg�����E#H �*B=��0H�I��p�p�0MxJ$�D1��D, V���ĭ����KĻ�Y�dE�"E��I2���E�B�G��t�4MzN�����r!YK� ���?%_&�#���(��0J:EAi��Q�(�()ӔWT6U@���P+���!�~��m���D �e�Դ�!��h�Ӧh/��']B/����ҏӿ�?a0n�hF!��X���8����܌k�c&5S�����6�l��Ia�2c�K�M�A�!�E�#��ƒ�d�V��(�k��e���l ����}�}�C�q�9 +N'��)�].�u�J�r� +�� w�G� xR^���[�oƜch�g�`>b���$���*~� �:����E���b��~���,m,�-��ݖ,�Y��¬�*�6X�[ݱF�=�3�뭷Y��~dó ���t���i �z�f�6�~`{�v���.�Ng����#{�}�}��������j������c1X6���fm���;'_9 �r�:�8�q�:��˜�O:ϸ8������u��Jq���nv=���M����m����R 4 � +n�3ܣ�k�Gݯz=��[=��=�<�=G</z�^�^j��^�� ޡ�Z�Q�B�0FX'�+������t���<�u�-���{���_�_�ߘ�-G�,�}���/���Hh 8�m�W�2p[����AiA��N�#8$X�?�A�KHI�{!7�<q��W�y(!46�-���a�a���a�W�� ��@�@�`l���YĎ��H,�$����(�(Y�h�7��ъ���b<b*b��<�����~�L&Y&9��%�u�M�s�s��NpJP%�M�I JlN<�DHJIڐtCj'�KwKg�C��%�N��d� �|�ꙪO=��%�mL���u�v�x:H��oL��!Ȩ��C&13#s$�/Y����������=�Osbs�rn��sO�1��v�=ˏ��ϟ\�h٢���#��¼����oZ<]T�Ut}�`IÒsK��V-���Y,+>TB(�/�S�,]6*�-���W:#��7�*���e��^YDY�}U�j��AyT�`�#�D=���"�b{ų���+�ʯ:�!kJ4G�m��t�}uC�%���K7YV��fF���Y �.�=b��?S��ƕƩ�Ⱥ����y��� چ ���k�5%4��m�7�lqlio�Z�lG+�Z�z�͹��mzy��]�����?u�u�w|�"űN���wW&���e֥ﺱ*|����j��5k��yݭ���ǯg��^y�kEk�����l�D_p߶������7Dm����o꿻1m��l�{��Mś� n�L�l�<9��O��[����$�����h�՛B��������d�Ҟ@��������i�ءG���&����v��V�ǥ8��������n��R�ĩ7�������u��\�ЭD���-��������u��`�ֲK�³8���%�������y��h��Y�ѹJ�º;���.���!������ +�����z���p���g���_���X���Q���K���F���Aǿ�=ȼ�:ɹ�8ʷ�6˶�5̵�5͵�6ζ�7ϸ�9к�<Ѿ�?���D���I���N���U���\���d���l���v��ۀ�܊�ݖ�ޢ�)߯�6��D���S���c���s���� ����2��F���[���p������(��@���X���r������4���P���m��������8���W���w����)���K���m�� ����� endstream endobj 55 0 obj <</LastModified(D:20150415135729+09'00')/Private 64 0 R>> endobj 64 0 obj <</AIMetaData 65 0 R/AIPrivateData1 66 0 R/AIPrivateData2 67 0 R/AIPrivateData3 68 0 R/AIPrivateData4 69 0 R/AIPrivateData5 70 0 R/ContainerVersion 11/CreatorVersion 16/NumBlock 5/RoundtripStreamType 1/RoundtripVersion 16>> endobj 65 0 obj <</Length 1037>>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.4 %%For: (\614\703\623c \610\752\613`) () %%Title: (108-badge.ai) %%CreationDate: 2015/04/15 13:57 %%Canvassize: 16383 %%BoundingBox: -1 -320 480 0 %%HiResBoundingBox: -0.001953 -319.998 479.998 -0.001465 %%DocumentProcessColors: Cyan Magenta Yellow Black %%DocumentFiles:/Volumes/home/rep2img/108-badge.png %AI5_FileFormat 12.0 %AI12_BuildNumber: 691 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([レジストレーション]) %AI3_Cropmarks: 0 -320 480 0 %AI3_TemplateBox: 240.5 -160.5 240.5 -160.5 %AI3_TileBox: -163 -439.5 620 119.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: -217 18 3.66 3349 1293 18 0 0 46 134 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 7 %%PageOrigin:0 0 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 66 0 obj <</Length 4983>>stream +%%BoundingBox: -1 -320 480 0 %%HiResBoundingBox: -0.001953 -319.998 479.998 -0.001465 %AI7_Thumbnail: 128 88 8 %%BeginData: 4834 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FDFCFFFDFCFFFDFCFFFDFCFFFDBCFFA8FFFFFFA8FFFFFFA8FD07FF %A8FFFFFFA8FFFFFFA8FD07FFA8FFFFFFA8FFFFFFA8FDD5FFA8FFAFFFA8FF %AFFFA8FFAFFFA8FFFFFFA8FFAFFFA8FFAFFFA8FFAFFFA8FFFFFFA8FFAFFF %A8FFAFFFA8FFAFFFA8FDD3FFA8FFFFFFA8FFFFFFA8FD07FFA8FFFFFFA8FF %FFFFA8FD07FFA8FFFFFFA8FFFFFFA8FDD7FFAFFFA8FFAFFFA8FFAFFFA8FD %05FFAFFFA8FFAFFFA8FFAFFFA8FD05FFAFFFA8FFAFFFA8FFAFFFA8FDD7FF %A8FFFFFFA8FFFFFFA8FD07FFA8FFFFFFA8FFFFFFA8FD07FFA8FFFFFFA8FF %FFFFA8FDD5FFA8FFAFFFA8FFAFFFA8FFAFFFA8FFFFFFA8FFAFFFA8FFAFFF %A8FFAFFFA8FFFFFFA8FFAFFFA8FFAFFFA8FFAFFFA8FDD3FFA8FFFFFFA8FF %FFFFA8FD07FFA8FFFFFFA8FFFFFFA8FD07FFA8FFFFFFA8FFFFFFA8FDD7FF %AFFFA8FFAFFFA8FFAFFFA8FD05FFAFFFA8FFAFFFA8FFAFFFA8FD05FFAFFF %A8FFAFFFA8FFAFFFA8FDD7FFA8FFFFFFA8FFFFFFA8FD07FFA8FFFFFFA8FF %FFFFA8FD07FFA8FFFFFFA8FFFFFFA8FD6AFFA8FD6AFFA8FFAFFFA8FFAFFF %A8FFAFFFA8FFFFFFA8FFAFFFA8A8A8FFA8FFAFFFA8FFFFFFA8FFAFFFA8FF %AFFFA8FFAFFFA8FD68FFA8FFA8FD68FFA8FFFFFFA8FFFFFFA8FD07FFA8FF %FFFFA8FFA8FFA8FD07FFA8FFFFFFA8FFFFFFA8FD6CFFA8FFA8FD68FFA8FF %A8FFAFFFA8FFAFFFA8FD05FFA8FFA8FFFD05A8FFA8FD05FFA8FFA8FFAFFF %A8FFAFFFA8FD68FFA8FFA8FFA8FD6AFFA8FFFFFFA8FFFFFFA8FD07FFA8FF %A8A8A8FFA8FFA8FD07FFA8FFFFFFA8FFFFFFA8FD68FFA8FFA8FFA8FD68FF %A8FFAFFFA8FFAFFFA8FFAFFFA8FFFFFFA8FFFD07A8FFFFFFA8FFFFFFA8FF %AFFFA8FFAFFFA8FFAFFFA8FD66FFA8FFA8FFA8FFA8FD66FFA8FFFFFFA8FF %FFFFA8FD07FFAFFFA8A8A8FFA8A8A8FFA8FD05FFA8FFFFFFA8FFFFFFA8FD %68FFA8FFA8FFA8FFA8FFA8FD68FFA8FFA8FFA8FFAFFFA8FD05FFFD0BA8FD %05FFA8FFA8FFAFFFA8FD6AFFA8FFA8FFA8FFA8FFA8FD6CFFA8FFFFFFA8FD %05FFA8A8A8FFA8A8A8FFA8A8A8FD07FFA8FD6EFFA8FFA8FFA8FFA8FFA8FF %A8FD6CFFA8FFA8FFA8FFFFFFFD0DA8FFFFFFA8FFA8FFA8FD58FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD4CFFA8FFA8A8A8FFA8A8A8FF %A8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8 %A8FFA8A8A8FFFD05A8FD50FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD %52FFFD2DA8FD54FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD58FFA8AFA8A8A8FFA8A8 %A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FF %A8FD5AFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FD5CFFFD23A8FD60FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD62FFA8FFA8A8A8FF %A8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FD64FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD68FFFD19A8FD68FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD6CFFA8A8A8FFA8A8 %A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8FD6AFFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FD6AFFFD17A8FD6AFFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FD68FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FF %A8A8A8FFA8A8A8FD68FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FD68FFFD19A8FD66FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FD67FFA8A8FFA8A8A8FFA8A8A8AFA8FFFFFFA8A8A8 %FFA8A8A8FFA8A8A8FD66FFA8FFA8FFA8FFA8FFA8FFA8FD05FFA8FFA8FFA8 %FFA8FFA8FFA8FD64FFFD09A8FFAFFD07FFFD0AA8FD65FFA8FFA8FFA8FFA8 %FD0BFFA8FFA8FFA8FFA8FFA8FD64FFA8FFA8A8A8AFA8FD0DFFA8FFA8A8A8 %FFA8A8A8FD62FFA8FFA8FFA8FFA8FD11FFA8FFA8FFA8FD62FFA8AFFD05A8 %FD13FFFD05A8FD62FFA8FFA8FD17FFA8FFA8FD62FFA8A8A8FD19FFA8FFA8 %FD62FFA8FD1DFFA8FD60FFA8FD1DFFA8FFA8FDFCFFFDFCFFFDFCFFFDFCFF %FDFCFFFDFCFFFD46FFFF %%EndData endstream endobj 67 0 obj <</Length 65536>>stream +%AI12_CompressedDatax��K�%ɕ&� �?� ������(�����8 ����FsTJfEs:+�����6��M�B A�6A�H# �YhF��\H?C���1ss�7Y ���22� w�;�;�?��~�٧�/^����p9^ ��77�޾~� R/~���߼}��~�Ʌ˗�������˛7߼x����e�?^����*���i ��><��o㯦����_|r�O�_�x��F�t��鯟}������;�.���ʟ������}�.\�A�p��W�}��7/�� �� ���o_}��՗�������O�/�<^�v��?��f}�x9��� �rY�|'�_�s������ͫ�?{����7�^�|��\~����O�})yv�7/_��ˋ��g���;���˛o~��_�~)_���o^u��77_�_}��剿~�� o3}����}����xǻ9����/���o������\��s��#ח[�� O���+�|v���<��$��?���.D�����w��������������������?��o��'v�7����ٛ�@W�׉?��櫯_���e�8^&y���_�Xy4�,�;�"d��ɛ�c�}��7���?z��F������t�cG�����/o���o�3HE_�O^q�R�o�_�|�7�斟z�/����������s����?�� ���~��ͫ_��%��S� 7_�˜/B�E��Pp��e��vQ��Ծ���������O߼��ū��M���͋/�Q��Ŭ?��s���z���o�޼�[��t�I7;�˟|&W�z����Wx��`�ȥeƼ|�����ο���~�w���(��͋W�s�#�e��g/��?����o��ѫ?=|O�/o� �����⧿�'�E�����ď_ya��� _�D��_�����Q�lg ����;/$����B�(g�k�����7.�p9]����������ujw�����/��?�,����oo^�����٫/.�ѳ7_�;?{��ճ7���^����[]��ڻo��/~+y&C��{�i���O�!�����O�г��~z��oV��m7U�C��a����ϞcѼ�ؿ����\�����-����e�g��𒿼�&�c��n�u+?� �~�J��� ��k���ۂ���w'���ĝ��w�ծ�З�������_�y��o^<����]Ϸ�Ջ�ŏ�w�K���}���/_|����~�Ϣ�Ү�������_�|��o��|���{q�� ��n�w��_>{��7?~��7�޼����a���ū/��|�틷7� +"�| ����<������7�<��a�\ā~����;$��������ͳ/^��!���z��+��4҅�d8G�u��b���?��^��P���d-I�lA���#��z%�Ȇ��ٱ�}���IZ�'iQZ�楹��w�Ү��z�n�+�fi[��vq��yin7��kiW��v({6�/������<q��8P���K*������j>��y���0��M�ӕ<�~*�<MS���i����y�K��S���1]��<�.�iJ)�䓋��J^�>�8�)���.\����](a +y1�����Q^���~��G�W\��;����q��9χrr�|џѥ��d?���ϼ������x��W��S^������~k�������<�(�%/ �X۵�o��a<�v�ڵ�4�6$ך�Z�֖Onm�6�V�����o�����NJ_��(��� s%�,�f�ٳ�9t��t���Q޹� �Y&�,�n'S�0e^ϣ�4/�2r7y�d�Y"{��G����E-�זdVO2��,�������kY*Nf���d-L��������� �Z���e�'Y��,�"kq/k�(+�ZV��uQW���\�WX���q}����3W� �`�j��� �[z�[��"\G�L���?�s�vu�>\ǣ�����c�HGy�GyQǙ�`w�‘p��x%��j���� -rx�_MW��0��|�6(�� qM}ؙ��e�Y�S�� �;�*�u�y � �팵�.'w���q<\�@�ţ�[�z9�t��[/'��(�1� +W�����ig��q^.�g�x���M�d�I�Tٱ��5� �O��T)N�^�� +�4^��R�NF��~�h����{��gt!K��N�8Q���(떝F��<� W]���������#��{���]�4�Sf_�=��������3>Sח�������?�� ]��2J�K�j��/�+��̼"�o]��M}dGr7�c�d�@�Pe<+��+)����?e蹵�Ӫ�M�~������u��wݮ6��imC���7m�ieӦM�چ�K��k ��7m\���j�_����F m�ʦM�6�Ҳ�d�⦅M����0���Z�2"�A@�����-��PX���"��(�y�#r7�s^a[��(����Δ�&�򑒝p%ix��� �Ã���*v��{�B����C�ki��c�S�Qz�up>U��T"�B ���8�x +E�Y6�L)e���Ub+;R�<@�qr��ǣ�p�����7����+ +�G��إ!H{���!tꚊ=C]2�!�^�dW��NQ���3 �M.L�:q���͋6�#Α�[� +������-;�H��� z��:�K +x�Y{��Z:���ݾȴ�l �xn���vqUi��d�0T_����@Y�MK���P/Q��[�@eDՐ�ڇ��U��T'��Y�W��:O�XD��'�Ѵ ��2�0� �ߕ);�:� ��W>r�9�T��C�[�s +����T�4��@u�L�����s�q�� 8=trdN�@�9�����(�+_�q�TqyD�o�q]�]���6-nZڴ�m��\M�6oZٴݦ�� ����7m��^��d���vC���6-nZ�6�_��M�6oZٴ����r�ߴæ7����UM�<q�*+PW�����x���&P�KTc��@��2#��@�fOt�H���0R�q�u�H-S�Rp�X:�e0��W[��ҫ.Uy��S`,u0%�Wc�"SU�^���L��T��J�@��j5;-�֘b�Rm|[7�z3���)>ش�ӷN�:묫��N�:YꜨc�#-����O8(2"{y-�9�eq�S"%6�6EFk/��(�}��Iv� ;\��k�)a7۫�#�DM�*VR%����H�u~G�>R��LګB����ӿU�N���k�О��k��Z�i�{N�+ӊU#�ԙN�'��t`�#'��i��|�\��,��đ�9�{���tSZ!��`[������u3T�8R�8P�Pq���s'��j�5W�}�q݇׻p݃�� �X�|0W�ca�*o�|Ƽ���l4����5!e�W]��8���kTW��S]��V�mӸnk��V����C���I�w���p[뇞r!>�E;-�� j��F;p���Ѯ���<u�0p�+�tf�Q��Vˇ��d� �Q+֖V���v�;�m����zh;��D�4���MNu:Ҷ[^Qf=Rn=���R(�ΔcѲ�BI�ʎ��d�#�i������3�:+D}V��rP R���6��kw�޷om�{��6�x+ĩ��p^~;�#�}Q�KJ )�@)d���P����|�D�*�3^F�l��X< ��X��D����+NSh�# 3�j7 +�� }lG���8�F)�2x��vU�1���S� O��"B���!B�,"?��"$���B �a��cNvRInR�"��DRe�E"�G�IT(�(�,2IC_�TR咝�%&�@6���ސMD�͘�7���� ��!薐 =̺1 ��D'��!���F���8p��D8x.�{Gmj`�+4��>e@�A-j�� ��Ƿ�k�_�6�9��R�9r����&�D�<i2��cZ�������1趭�������Y�tU{�b�� �^w���Sp�ș�O��kJ�#璣�[�Fgx�"�q�l�u���vY�/MN�[;6��X�ҡ�͋�؉`0'��7����Y������2^���Bv���� 6��k��cjc�?�� ��*�[m8����6 E���$@w�e/Z��S��R+ H�K/���搫$��[�U��~�ثox��?t�s`���ݞ���o5Q�=R�ݙ��)�"m ζ`l �N�����Ɨ�le gS�M�mS��"nf�ظ�s�3������2���ܠ�pe�����@�D!��Fv +�� +6+�<�|e�=����^́�4*=S>�-wma}�/n[UT��r�Q���lj�F�(r��)�s7P�W�t"Ћ���iL�bi'��l��� 8 �Y?F� ����s���~%�ŷd�y2q�d�/kG��l�=�Y&��bu���Pt��7J��V6m>Ӧ�S�-�e���b�(���CT��bpg�͡�6� �6���qm�w5]����9�|8�Y��s�� +�a�5��BY������[���ƳϷ-�x�6`�%�S] ݜ�P��B�=zs��tΰq���8�6�`9dž:Ct���`xa1hg�#��k�s|X ½�= ��4l�Y��d�[�����J��s�M�]$]E�T� +��<q�Bq^��*���5�� ��sM+��,�Rn6��-tVl�i��F*�U��Sd�2�c4A��p�j� �<� C� Y�+�L��vx�g�&7���dr�d~Re�ӌ�C����Ͻ��Q�5��Y�����8�g?����v�Ҿ�ު�Y����[e�QG~3q�^��v��t�n5�᪨��r����r5u�+'B�5��0xV�U��3R�ui�2��|b�����7�~u�~EAPx�@q��2%Z5V�,�В�Oc��xeP� -e#���b�%̡y/VQe2,35��Y«D�7Id6|(��3��6fW�N��ڿ��^l���l�Wf���H���9U�7W����od%Cl���ʷ +�$�3��V��7B�"@l�Ρ� k�ՍӪ�� ��\���{�B��9�^ۦ����tVv�ye�Y̎[��Y� �3��>��h敥���-ֻłwU�ac���Umi�Y�'�j?�K8���U���G�Uy���������1D[�1F[��SS��$U� ����nbd������h��G{��v�:��0�`^���� ��ȎF��2�6�S�h 6.�3��Ì4ԭj{���>���窝�SQCqEW�1�ؕ�텁�x�޶���T����z�r���f��K$gD>\��2T����׋��Ld���/؊Gn�k���;���>tJcu�8Q1��.�{e��iv�#�� �ŋ�.�8j��c:T�΃��&W����^���A$8�"������2O@��֗K����|��xoe��O��#���l�>�e@�A�dwY������-����Jq���/�1�8�e�j��_�8�qӟ\���������|?�� ~�eYN�����CT��e邇 !SI�I� �kB�*�G�"�����8e��%#�y�dV;�Z1U�oڰ� +V��!���ʷ���f"\��ŕÛ�=n\��zp�N6�Z����}�� o�½Mx��q��v�Z�;m��6�LU���0��.���w8*y�!�|��-m�t�qi8�^��m��ni�C<q��� =��q�U�q����W�^�@y授޵Ika%�̞��m�TLX�/�k����z/�x�P�^4t.Up��`V,c�X���D�5u�P���B"��g��W�}��6��Z���_����g���楶3��X��67��JQU�*�ZC� �6%��;m���Ic(�#@�V-nZ>i�O[����ir�����������c�g�ɇ����^e��}HA2��0���R�6^ � h.NղW-��n�ݸ��0@�J��Qѳ������������S���(�AR��N�7��B��-�O�]��`�u87�2w���>�7��. +��݀ϡu�tZ������B��hC#/11���r�_ꃯ[�pi��nn�P�*|gAs�u�B�Ԟ:|� �J~������D�u"E\."T'��H�G�@^fٱ<�G��Zi(�#��@���a��b�؃b�@s��E*ְ �0|g�a ��`����x�лo�̕��U$҂ǬИ�68fAc�5� J��)��P�{a �� ��|_���!.�ij>5���h�v[<`�jqO�pO` xҶ�l����ۘ :w��x߼�ˏ��vX����Ϣ�F�)W"$D��#�ʁ����%0\튼���6X��F�U��М�����y1% ���+���\�����H���1��jt���,dIs3�LGf<�`e���YTy��\p�hq�~�.[D�a&��4�CC�+ڼ Υ��L���Z��8�d��u,f�έ`�*��$�+\ [lj�Jϵ�=m�X����amx�d�h�C�{������ۗo���F�^C��^^;����bs�Z���kov���߰� 䚃�U3��Y�0�]� �&�3FV3���A�>��9 +���Вe3���=X=C�+�-�����wb\�A]�p�5<qش���[��~��3�Ѧ�6����Էa���[J|����Nhv�њc�Ôi +HAr9˦�p7��&���.V���ϐ��ҷ��=Jw�o�'�d��Y%��z��4m�X��3��gMj�SH�SH�SH�SH�SH�SH�SH�SH�SH�SHʭͧ������������������!)��h���U���l��8l҅�wݚ=����C>�sK���.}�K�����.w�p�!.����o���5gaή�!�9�{��4����j��4TZѾ�������!����a��:���o~ ��-��‘�p��Ie��I��� [����i��=ij��ؕu;�f���(��Q��%�����a}�+�P�L�S��kK*��P5�`�<2`t[Y����p�Β\k�� �?[�:<t�a�N?sO=���X�����`L <)4�'u�� x��4��H�ب/}��{�7���{D-��\�6�m�m]��,�n�"�Mx{�s���1)�t�%��.�%�:��G�:�m�&ێ�9�Twu���Gu��7ϋy�1�w1F[�6ElU��Eɾ9ܛ��%��q�|�!� k!��8 �B�,��◬��_�ӥ�>�8�K�3�|\�(s#iVv��l�g����.M�.=BOg_)g�+�N��t�'9ɭm]�|���[3��f&�픧f��T���֏�q���|kX�Z� +����Č�vFg�r.ţ;��gP�x���0�S��!'�y��������5�~��<d��ab����];tI#ͦ0��3W� �9����t���T �Bu�zJ�Q��n��qy� �X�xY{�&re�4-w��L�e�o� k� V�إ��2@c� pc��L�}d�Tͻ[��#_�4�f��h����7V��k˼]@�哭Y��xA�fW��[�|u���"��������W7��k��6׋�ܼê���r��r��+f����G"s&�f��s��m�]/��������j�[�-�;=��j�k]Q���QS�j��o�����V{h肖j�R1�q�q_�ī��L7�-�x �xG�e:[��Ʒ�5^g5��ƛ272c�������zD�T��6iԭP4����.���> ��F�A�4�7q�Oc�k��Z�������ct�Q��?[WλU����Ő��V-zͦg�L��čQ�y� ��bۋIJ���hkD�KnX����tW'�f[_��h��lX���z��=ʶnd�.c�"v�[�y_�����y���Пiwy�7�k�U�V���j�=��Z��M�,T8�W�H|n��� �ɐ���x��M-�B��r����@���Z�C)m��ئ���a0/�NW�BՐ��{�g��u�����@=�j����FXD�����]P�.�>�bjv�}��&$��wG�;9��v+���&Ҧ������*<������GW,L�T﬊�-e ���V�U�:V�p �R�,����~9&K� e�E�b�ճ��<��!bqh�TU�+��v���k����(����\0�pP-U�����u�w\�X�����.�i�зE�Z+R�Y�֟��6lT��ڹ�ᕪ5�տnk��=@�vK�_̭��;�5� U���B�˟U�5˓Q�����DK+�Y���Z�̥>fhF҄�B�+�Y�g`�x�T�T�4 �3�=4oA��i0Qj��j\�Y�k3}��OT��u[lCW-mQ)C�E&u-�Z��G⺝s���њl?��������p��\�:)��r[�Rzw��(�$WK���$š˙P�:o�Z�:ɟ�-�F�O*� ���ZZ����TȻ��,Ж�LŪzWl֟Z �f<���j��>�LK���^��ڴ�ZL�u�_��ՏϴS%z{�1�u��]��9��D�V�mc�t\�C�����h�6m�ٝ~NW>9�p�}n�N�謅sm�_�=���C���:����\<m�v�.�{��{1�j���܄��R4IJ��(G�Ci���l'j��^�m��ꡭ����,s-|�o��!ZhߌiSgF�C��-i^5�V\�w�h���y�)�q��K� �қ�_D��y,%GZ$B�Z�ġH +�<Z.W.��oV +.E���b�y���FpfFs�(��Z���V��EH�G� +j�����}��> +� ��#T鸙b�e������w���ٽ���JT�,���Z*�f�;ݬ�<}�Dz��h"�S���� '�� vZ�`�.�u�u��;�����r�#[� ��RQ,��V�����erʘ]=��yL�3i�p��R��8-N]��VҮY�1K7��GM�Ճ�ʒ��H��qZ�(-���8�*���)b���C�8�� WU�@>h��Ӹ���{�]����k��1OG��=Z�/ `Y�)�X�h�3uh�l�,�-���D���1MW�d-�)�(��J��8��s�t0�!#�,������"r�(�`?�����D5�T,4l��j��7�D -��� ��ԎY�u��j������{.��� +�}`L�����E��u�[J0���K0�ê +��%���ዲ���9�p9�Y��k|�k�-��t?t�-� [r]L�q~_:���B��{c�s�T��[ � #�'^��h��2㰉YLj�����ˇ�f�������U�>ܠƦ�|�V2�m ��x��}}�Ny֎'��^9��rZ�ʓdⳫ��^������^i5�^y�ysh|wq�l��֝��ޖ >��@��Ow�%~T�����dN��x~�r�K ���0Oc��uo��;�s��C�W�^�ϟ����n>b�<G}X������~E�����evy��Y�U��?�e���ϭ܏���֬?�f=Գ�����GE�I��m!j�Ħ�x����?U{��k{o����m��t��鯴�U/k;/��P�3�<M�k���U��p� 9^�'o��6�c�}荇�������焔��r*��;٤�L�"�P.Y<~��㟤����ک�b��X,�wY�-��Rux?]K��?���\��im�چ��mV)��ʱ�b����u��M1�%A�o�1�f��lK��Z�~�ڟԵ_�jcMO��/� A�O��XF�7��S��q�m���G��l�A1�X +�UL^�W��W���s�_���Y�o�c��;��^� �&k�3���ҍ�E�' �w�R~����d���|^O4Ňl�hE��ƒ�����Q��Y/=�y�W��)_�S���|5O�j���<�y�W��)_�S���|5O�j���<�y�W��)_�S���|5O�j���դ|9E��#������o<cM:�;���MzS5쮶-9�N�bm�_�(g�Y���Z^��S�A�t^#~�]�#_P�h1���g2608 �[�b�ȍ���}�bՇwd���_�(šӉ������'�m�S�^�>Ŷo� �:sob�j����S�Y+��,�*����vR�l[������U܃�\t'�BuC-a��K�{T�K`��`;t�^�O��yٖ�ٻ���R *N�n�DI�)R��' c��<f��g-�@�L��ZCXUX���X�@�:R����?5NC�e^�?�s�� ���e��]��R}u[\�b�Z�oo�pMҤ�ڣ�R�XY�|���*_���}���V�����bml�.+.���b��*Xۯ��[�rZ���ůGy�W]���`��d�!x-��x�u��e�+PӅ�����A���]w +�@��ӊZ/��9�� �m��5 '��i�����u�Gc"��X�vM���q�� 5t"�������2�� Mn��4������x?���8�c�H~�1)�>ҧݖjn eޙ��]#} +�iDo7գW>���i�݃���:{�p�Y��΀�ȏ�j��~��o������o+�wO���/����õ��|h>�K�F��r��#<v���3�[ɛ չ �r��"���6��9�u\i]��n�+=���}Q�r.3J�r�;���(��zy�� �5x�Uᴟ)\��a�������p�� �4�{��SufX�2�D��U�i�$7j̰�1����b:��D�n�b&B}����fX�95f���UP]G�����4��ĘSUf?P������Z�!�x�v;t)�h�}���*:y�à�s�[՜{T�o��Ң������(�;Y���oL�l- +��D��Dޙ�So>�I�sh\&аQqʉ��+95R4�� ����3��Y`M(��gOsv<�=v*0�L���f�Ct��X[��N��\:��L��>��N�}u9���9�g�yK=?��`?,����IV�`�s+�$n�^7�����k���T����i�5XxQ~4dX�G8u�� ���S5�=��C� ��:����66<u��e���' ]@�9���Z�=:�4|��tVAZ��Ã���N�y%6�h�k�̦!ݣ yؾ�9;��:ҩ}�T�C'E߭'��C9�� [C����M�@r^U���`x��|�1q^G>i.�5�z�?�$��"W���9��IpX\]����VY�:u�;R���������[%z�e�ܫ?�(�6zll�=O�@�t~l���!(���<a���N������}��ÆN��[�>o�=�C�fڵ'�!�����y�X +�1�.A�I��������y���z�x�����)߭��R�����z�U`~ݺ[�^�ϯ[<i���P8�Ӫ��~��g��9�ڰI]x�����lm����|�=���ㇻO:�M�l���������9�?�u��!�����w��5/Q�p��c8G��E0{�z5|y׀ ]s��Z.�%zS�׵�v&��#n�_e����L��Eoݵ��j��n��}.�d(�m�����o2wقs�7�O \�2(��U��ҷ�V9vme��Fz���s���=O����ͧ�j������m�)�k�$�hý�� �� z���F! +��5;X25�����b���:����H<0�ahI�v�Vn���O0;+�Xs8���-�Vh��h"OGX��&���ã�|�i�Tϳ%y޷�"��Q�,��zDG� [37�|�5E3��,���y 5 +p�]>7������,i���� ��XV�������)ZQ3���`����I�6m>�Zb�a�'wg;��t� ;���x?<Z�;��ɬ�mʖm8�ᤝ� ��4����I���^�e��y�d����twگ�[8׆��;�6�ͦ ����û�HІ���ÿEn��}H��u��) j"����m2W�-�AYh'��p+�^����m�.g�CJ6��]KծZ�k>�ۥ`k��]�xת|��W��X]_����ͪ�W��3�Rͫ��p��׹�^l}%��vZ����_�ْ`) vK�=�Bb�vo屧��e�a�I����UWX�/\9Y�G"賬��UYˬ���*kCWf k� ,�2k�V���Z�Rkj��=�:+��A�ҽ�j '�!ӌ(,���,��% .�B���l �ZG~ ���́�B�,��,� v0g�e1t�. �Ջ��ݒ���s -!�?��aU�m)�׷㦝���*���;۝<���"��M(d7=n�;��b��9�&jN�������99�8�,{1������ߊj��G>cz��4ƌ%X]@���V����_��9����z"���y�X�?I��� ?^_�3�o�h�O�&q���q�p֞V��?�.�v��F�*� +w �i�Ŭ���u�z B�$�eҘ�2v`yH�+Z�d�n�E�4��zo��:i竤=0w�0YE��d�-��kU�j���H��a�6�3��6���� m-3hc��KB +K�<"�A��'�_ֲ4N�@��VV�$�ٙ}?����Ź�F٨�Yx�:l�{����0Ӣ�^8�Qz���������w����������?��������~��{��?��믽�s����фk�z�\ ����lCK�hMӵX)�;*v��u�U�u�ɫ�dJL�)Pn�2�0��ҳn��;�����u����ge�q��4l}X4��Iڞ{"��gN��t+��=���>���@�n��:���4�5ShMҽ�s�6t�`fKS��,րdI��%�ʼ�7.�Z�͒�E��,9Ąk�D;7y�It���f'W�0��~��^��=����%�۔��r�w�;9��sOީa��A�ؙDtw�ۦ�Fb��vl]�f�'z�pQS���*N������K�w�q� 0�]+�"|j���g�|M��_V!Ĉ-W�����0K�r���s~���Ǹ�Kܰ�;�;\u�k����98�<d�o`��^� y�� ���$P�5[��/��|ﳾ� k��ソ������6�!0u)��c�眧� �ۆG�����r�܁>��o_Pf&a�����b0j��%�v(��58����8��11��BԘ��b-$b:3�6RZ[��|^�);�q�ި��{]"��`I����Z��7Ll9i[s�y���&�3m��B��M��sh�����nS���r�O�-NծZ������VK *�nY��5��E�%�&t}�i~eu���P�`Ϛ2{� ��rj4W�}�\&WK�l��J�{�~��\��s �Eh���5����2�Ho�}���P�ht��BLVb5uP����:8U���R(�(�YyQ�Y�‹����(w�6���p����cȗs +}u����J^��� Ζ�S��X��n�|R��ϗ�\V%/?�#�Q4Y��b�K��&�ZJ|�*��V��W�&�k���{�G߿��������w���w�����ݿz��������������+���~��rOA�\T�c��E*d���'� ü�NX�t��ۣ�8~��x0���n.j?�����E���sQ�R�b��E�.���u�o+N�q�^��|t��! `*�����o���<AIg����A��ݿ|����ؑ5����_X*w�uU��jkU>�h�U���x�U�*����P�8F���[Z%ۖë�e���l7���a����i�==M�u�T���T�~��U��Q�73Z�T�- �n���h�yDv�d�2�8{0���~^���5y�oބգ�z�}퐪�l�l�h,��Tm��Ue9�j,�^UW�x�X�QϛQ?Z��e�-�pRƸ��ߏ�o�~q���lKN�>#��gt�=��R����g��4��Jyx����|��V�� �A��*}�E���>§:�2�c�eQׂȫ�d�*S������8 �m2��<\'E�o��p��C��Lr�}'�����o)90����怭���Z���>�+��0�s�>�phe���f���B-���;��Ud��ٜ-wp^����fV ��'n;W2 ��a�i� $h�Lu ���D���C9ʔrL�=a��Vw�c�������������gêZe���_S�lU���� k�/�n�����]�,�+��p����L��j'�>�m򶊽LM�!u��E��q���9���u���Ã-`��t����U����yx��ݏã�������^�(���">vd�&���D�a,��\�������3�F���RF��k�-�ݣ���#jY?X��������~���������������,�%�*& $Ƃ��>Ej���k�/��5J5u�vpQ;Xg�^|+*�9���?�/��[?��\?���FN����W?{���������n@�? �5��/?{���͛W��{���h�D��WB +'� �f�� "�\�\�E�(�EH#)�};���������&���_����O����/~r�g�x��BO���׮R���J�'W��qOmw�㾇��U����wo�_<����go~w���}���ˋ��~d/��/^�}������!/��_�xy���o�����?���g����ʑq����ShA1����}^�.���b�^��?y&=�q��vvQ�e�d}e� ��A�Ȗ/��}!!��G��xγ�\�� �/S)�"�"o"]8�.��� ���2 +7r!\��zb�#J"�/G����t%ʼn6�!�"7��IoIIq���Fb��IU;"������ ��y�\GV��q�GN�~��e\�1]���E�3�cyڋP�D�R�ѐu�| %PV���,� �j���qE߼K�.˜�"��,�.ͨm�7 *�J���ȖCœ�@HS��L������D�#��'R��W�U�zI =/]B[��~��e���'� �k/Ø���g��3�#�)s�^d�a:�*����P��"z���>1�(�r9%���MA/X�0�%w�����U +MSB�r 6kHt��Bu������B ���x�R0a���D�����E���f=3L-P�ۙ^fK5�G�C�xDn�͊�Yz� ��h;�R3fSHx� �!Yoc�y�aQ3��Xy�Ӥ��G�9�w�VR�r>�X�����p3�X�Y)��f[�� �y��@���/S�G�-�J�N���gR&��|m���Sؿp�1%N��0 +�����y"L:�*�]�5�78)�0�����#[)<sn0�*U�C f�d�Fe�c�r{ύ}�X]��)�QN*�i.JXq]������`��d�(�y��O�<ˢM#�3�M�MA!����d!�:+����LZ�� -McУf�r�d$8EN�� ؙ""���[��E�uR���c�P�.3d��)�p��q��J(AF���'��B�uF�ɹ� +��w9�gʼn�f�"����25C�ͧ�Á�/ ��.sb2�,L���� -l[�P<��}�2�Ҩ]};E�� `��z�u�� ����t 6Т�Ƚ{XZ�$��+�q��� �@ A��L�/<�\����= �4�A#~!A�\�d�g�A��2�(S�����˫Aj)a�t���]Nf%�,� �H-G�0:�鲥��p�9d"�l���z�A6"  �d �F��C����� m�"�n�B(������4ʚ�Ӓ�,�ȝ�j���5flhE>�ؼ� DM���K��E�)/F�6RF0B�!{2Q�e�����ta�E1�Z�^R z5yN��r��U ���.�����e4�M��X��I� /�Y6z�� O��H��D =*�1�4ܲ��<����T���p�d"��if�^���/��qO2���g�Fdb�90���2fF��I�U�'aH�E�9+�B �@#� ��a��(/Lbb�&�y!�!��iF��8 +7���}; +���D���f�<��e���@��F��`��WP �Y��xZ���w �^�0<�� +���ބ����c{�iB��%G�C�,�X��܇�0���L����e=A'H ���G�Q.��B�d���S;k�Ή� ���u��d��CRu�f��8t$x���S�1� +*/��\�璈I�y�Ț�p!�4Y� +,2�:��t8Y�␵f2���A�@"j������"s0Q����*��i�qE�<͸k��1�}0Rh�zZ�-��Ʉ᰻���.[�F.Dܠ����I`"�t��8�j(�]d'!o�w0����桼W�<�U�GY�$�M�}\N�@���MQ�n��jy�s�Ln6�� Š\����F}0�d� �l:I�̜�ly���~��%X� +OtIe��QFs�AɂX#kTRq:�X8LD���i�d, �6l��Q6��r�F�CЗ��np �m!��"ഷI�<j�� ST�9���+���F�i��P�iG��i�`sGH�}=��1'�-�\N��/�.攳VB}��r�pD�����B!@D���Ju�@䄀� �&����-� +��6v2سȳ �E��A� ��c?�4Y�SD|!&D�'A�����AO��1���.g2B��sG���J���0�E��yNބ�G��J�i[���X�؇E8�k�<.Jz#NP.�D�y�=�P&k\X�0�J�cMi�!�S=�n�� ;%���F���+�o��0��A��[ z��G�X "�(�ĝ�Pt�D�K�LQ�4H% d��!�s�����^O��m�Է#���(���!�S��x���Ξ,��� N���Rg%����Ut����F��8T>�D�f��`��>��M� �$������D�(!P`u�g�;�������Gc#8d��?���N���*Y)cu� ��("�^`wLVdy�Î�vT�U%ʋ�����]I�����i���s���JhMs*J$��~�-� ;�����Q,,}Ε�d��=ϝ�N�H��F��2b?��P-��U݈��l���B"2 ��"kTw+hˡ +S�� n���/K�P4�\T��W= ]�<ؑ#wKLg��[Jw(��s;�~QX�C�" +��Z�M���J@@���l F ���ir��"'������3.7�h���U�K 1╃�)J'���{�d�ɪ��I"��n NT������E��m��B���Y�h��}r�8A�vD�G��d��i���4NzZ����䕐1�1�9VuHV~L䩔 "v��⮣ +��z��-���4�Id�*$l.f���Re#�ܑ�U�3��e!���E�� ���v�]� � �Z�Rz&&y���L�q�N����f��]�g�k�J6g�PT��3��3���֟�a���\R��x� �P,�� ��31/�41=�!t�6�P#x�WJ �u�I z��J�3\��3*ZƮ�y"��@�l��:���8B蛸��3<�rh ��t&4� ����X<l%�/������!O��wUuFB�혌��Q�F�J/ʛ���Q�?hKS�$�U4@�Ьv�F���HZ7*�$On�Y���"ڻ�I�:���_ܯ�}QA�|B8�h7���7ɾ¤��D�%R*�*���vP@�\��1��1f���<LG�'�Sd�p��Ji%�,3܎��I � �F�WSQ�F�~_Z����쁫B�u�^)� v���[�V�j���V�d�G� !�%���PoIi!���@R��Lv*�661��W3��a�&e�:s�@���z�v��i[�4N+8;(3!�� �Y��������[�F$��7Hx�L(�Q�S)�� J��9��R�� �*'��.�(ύ��y �q2*���cN��5nb���:��rT#�,�!��)&�:�i?*�����vԵ��#��A��=Nݞ�%�N@�I�A��R �Ė +q�z���ɤjPd�gEԡ$��6=�C��v&6b쉰�Ѹ%�V֎�����J�1� +��7��[ �軕�����DD� 0�Yu;TtOd<)��q�l��[�mA�P� +lL�� |¢ � 4=1��y<Nl��.�i�Fp!�+EQƨ�h��z˽�Vt�Q�ZY��J�m�>KZ�hs���X�L\Ueyed��oP&�@!�&BM�U�$�� O� }�? %+j�ZA�� +m�b&��pr�и}Z�:��r�;��ǁ����en���P�^e>C�쎓����p�l:�ƛ�P�I��F���� �U���%؟�P��7JV � ������5�F�B�i.������R�v� <.��^�H�_`�\(���Q�2kiӦ�M��p�G�nX0�� �IaV�F2�-5o���)�s'�F��!gSr#g�Z尪����a'Ě�j�ɉ�[�M�F�Dg��,U$a%���#J 2���(�"����J_l�v8 �F�c�!�TV�<x�U��Q�7ݼ��� b\����C��ᎽC5B��T����ԉ�8�� +]4@A�R�"P`ڠ[A4�d���!w����ڠ��ѐ�C�̊y}q�-��B�䉔6N'� mR3q9�@�c_�?���AG�F"=1( �}��,Y���v�����[�`�f"�����, +��a����D��4xbd1�q��/��Pk�wY!xeZ��O�pA-��A��Y������5�O�0�tu4"� ��j �D�~�c�Rm4%8��y�ؖ +�0��������0Q�:����9�$��&2�8�]�cza�!�;̈́�<� �;V�+��h���@tt�L�|��6<�����a)&�?+:頲�TѪY�P'�O(�}R�" �����@�I�<�tN"�(ja�1�Rh�g��޸�`�Ps�vMB:D��sBM��UpJ2�2�17W��P�;"�Ͼ"��o��뾁3'@�2IJ�h̀��UV8���`{B�D8gu�*p��G��0�4>̘PDN*�)`: �s�e��/+@��oyܨ� ��`�/:{I �����Ϝ]El� +[�x(�N@� +FJ���O�@�$~�Q��5p�:hӽ���悥J\:����'L=-K���Ӏ��)��W����)�����>�'�(�������͋W_^|o��=��W?���]9F�㌚ +���'����M��2�rx?4��F �a�j��d���ǩ�h�A(�,Z�@�A�J�S+\6l��zp�˰�EG� ߫�)q_�dih����;$D0V�q"#���J��~��C�mH�N�C�pv�Uc�"\C��&P�a��c� ��BX,��&vE|�ߋ^���"�.z�3/�) �o�7��C� fi5�l�������B��n_UيPgu,)j�qൠ�&LU (&� +��yH�� +��+� +߄T��Å{����A1-*�@��� ٥\]����w�Ơ�x��B"�sF��X� P�k TH�t�)���D�b�$(ԫۙ +V�*�� +�^��/�q��iq5���;�CB}��� h�W�4��X}�|V��U����^��I��!�u�<7��b��m�p���5���/.�@��UU�)���8�ݞ��4);&d�� +mJ&(ٜ�D͞yk�\0�H'Ȥ�\5lz.h�/(��Q��͂b�y����&sI��|qE��ȩ�B��� �����di*�a�h���!�}+"�S�?ׄ��<ydtȷY�����$��h�iTU��7�����.UB�uF���H�M�3�:Z���0HL +؊S,@:]w��DBB��j2֍��`7A�_�)tjjA���h���F�� 1���u,��/,er<�K|p�1�u� 2���a�V�4Tt�LO�G(��Յ�j�v8H�� 0S��`�A�N����T}"��lp[��#��({���N�' �17�iV<�n�Ց�b���=^�(N�G���~�8� ?��l2�=f�ZL@P�ƨ^. �P��>A�G���9�-�CO����~�?E� b/D��<��p��,@���U5���$��p�'Ÿ�`%��c�-ExM��% *F��7����L�=��9�C�HT�����f�$�� ���JN}���q����%���C�,�jdӣ��7�ޢ�� +ܠhY��Z��,}<�!�G�BLd�f��J����75cƄ��,��r�f3^��B�)��dBLn�hA��1������8�,�'�ޜz�����4���Q��;m\�� +��^pI�5`�aF�l���V�h���DN ��v+�h.� >��v�����Հ]�� T�h����3pU�u��/�����J�- ot(�Q�y0�X`�,�&�Fh9�e�2��!�c�AGgց�?U�S���ܦ�*�ģr3����!D�)��tX{C�O��'�蛟��AY��k4�.��&�7�'�!H�� �M*�釖��c+���K-°�`2@G��,�^�%|0�}dB!35�P}&ݱ � �f�X �6us�X�a�8A1�\��2$�RC�7l2?�ڀ��4�z�pE��,Ҡ �v^�HC��gs�-���d/� K�!�0���� 3���^@�������B� Ln�QD�f�S�!O���]Ojt{�O����� ̴=Y6\!�<`ށ����қ'���-z]�p������'� �1��d$!P��T�UoN%x���4�Ip���C� �#�`*e$������R3MPE����|�E#`J�_�l ��G��e�d���&�u�XU�wiJ��u4h�9Y��,��ɼ�p����1y�G�tF�ڭ�)pM�� q����2QQ�N�1�|�G�ΠX1� �Ho��9��_Q:�Ҷ����RU��p%J(��C����,� ³ڰV���ߚ�v�`��X�^�I��HO*ڹ&݋y�h*�X�Jɕ�ꃥ��*�R��NJ���Ph����G�؀�B�ݒ�((�H'ś�5�`['#G>�*��7̻��^�+��fV5o&�"�P,%�P���\�@T�_�a���p< XZ$�@k�|S G�^Q�Ձ��R�A �!���;>$x -D��5ȉA��<aL92fU�~��}F]� +<x�:��4X���O����>�ussTP���j����e �[.sQa���؛�T���0.�H�¸���=W�U���(����Յ +n���gڇ�H�6jW��ڪ48 �3��@��O�_8�d�R!8 +c�HI} *�ZH������RL +p�[�fu�����}r%fAdJ H�n��|�Hy���M�@f�$Q������0a-���S5�����3:;ò����1���'���K�l�T��!#|�� $3Zț��b��R1��"�$�f��� YeF�bV���'lES5gh®/�&�<c�r"�n�]���Fx���Db[�L +.�h��*)ภDZ@���#�Vb�����񦕷� +վ`�����d�'�� x� r��ad�b:���!�P��! :ګ�R�9Y�͢ ����J +_t����M՛B��,��U���� +X5�����_�p��Ѽb�p��C�Q�0�=�@<+�iü�fU/��o���2��3*!U��%�aةhW��Qhb���y�+QV%� ���� ]Q��l�(���4g��t\��� �b|<�K�&d� �lɜw���Gvd8��u�LƼB�z^�N��{�gVx2i�$��($��Y�K�a��#f�zLfB�f�,����Kf�tK���D�E'Ԩq��:��8 ف�쌂��YܘG`��6�M�`P(f�L¤cP󲞙4^��L�t�X���m��2�ޠ֞Q�����fIJ�Z���jv--B;���p m'�s�J�y���;�Sd�`�Um��+�U�2ZQW�7��ShT�Z��NH�F����ؚ�i����`3������+n"��%��g�� �ME]���L����ŋ����5|(�REcQ�4'�����@��.u�#�:~&ZցQ�S�����&�P�Ӝ!�p ���Y���~f�F?�ʩ�|�m4�1�^IA]�>a�Aϱ��%��Å��0=�C�(�O����8�� +Q������ ��A��"�6�$O�Vg:F�ML?�44���)�󡚭�I9���$˓�M8X|$ �B���IaH�D�~�\t��R5��L&�lЦ�l�<��k�.v+�v��3�9l��KT�5܄��̀���~4Y���̈�y�? �-�"��$�8:�>�;RN +-҇8+h�\=}����!^0��B4c +�@V�^f�T ���BD�ͦ?C��6&�HDQ�� ]�e�|Te� ~L���A��Q�t�8l�_1��&]�Z���+��©Tu�v�)��:V�A�u���Ta��ޒj�k�~�Zվ�8�H�3�0�0�h8�{��yDCR��D��ұ,)Ξ�X +B�B1U Ag���DNL�z�C���r����2EY�ħ��y�5�_D|���ꖔ��}���i��{����u�l<��W�y$2H�8��;c,�a ��b*����Юu��L(�_��M𩝈c蜇#��Gș��_�T��!�~o�(*3TC�!�D��U�3�$���*6X0SFC�\��$�7!��cB�dA��8�k�6\��I�<k���6�I�U4`Z," �� x0�8�Eq�8fT��o�7j�j&s��#<�d�����,U"D��A��F  #�f˿�́������L9��V@=��7߈0G0|I&�@�g, +�<�<�߬�.�X[�`a����dK��b�b$I���h��TF�W���A � P'뚚�4V=�ᯡ�'�����^Rp��NR��"u������NԎ �P9� +�Q�[dc5����S_+sh#G�.t�9��d�9�|����y<�������7�M`+�q���e��‚�z��(h�-������Y��z�B�E�)@f���H���A(��,du:��� +\~E�d@&��DsUlYCf���,ؑi��7 x�RT$ݡ�ɏ2�A@�!2X�=!`��S�h2F(т1�tq��t��Rg��@ �vҔnx�*��x2h�G�4Tj�ƨ �Sf-u�UF�q��< @qT�&K+P���h�p�TEJ`�h��@���:P\l�t�-�T�f1r� E�ߢ�E�b��)�F��%��x��B�Y��*ɬ:��z񨾍 ��NJKp���� |1�V%Ι��GR�M1g��z]�<��5j�<��E����j� �����+G#9��E[(�jU��P�8Ϙ}�XF�!C�{��ܔω��r\�R��ٓ�4����֨�^͇b�8�vre�lf U +=���T�� ��S�Y(x߅�T1�l>+Us}0�tRk��W_� +\p�NfP���>��W��Ub�¸N�>T"�.�:�x� �m����e9p$R�LR��Qb�+�9u��:500���߆�0k"��`'��V2K�"gc����a��D&Z�J�4�0j�A���8"�P��/�T�/�Y�tG�4F�X̑�T��!�����/ZK�-Tz� �#�p�kQ��&h�)[�D��{j�ʪz)2(��3�}Zi���N��cn�0�d�j��� ^��"�� }M��=�X(PhO�A�� 58M�ɤ�<3Z�n�Յ���8s)z�����0y��hf�fp���>r̬|o uu� � �NVC�r^Rs@ &� �Ɂ��>�8O�o +"�}�h�����+�h���B��M��QPa ���Z�1�M?���5�^���,���DaH H��gSY(�c�J���<��K��xXs�� %�rV͝���!���V��[���f.��s��j���PH:�� �ٰx��s�-h�G�- ��{#2���pD�Q��5ݏ�y���6}Ґ�N��4�?Y������F��:Z�z��>a���N�k����W:q]����\���aDž�Co����J�C���̃� T��)����T�HS��d�tYl0�- rqfK�H�9�~ �1?VӺ��kN�w��O5t�T �xj߅�U҅��F�g6��gt<�ܭ�8!һ���,�`��8D�����Z(tl~T�� NK:�.fN�$��3�D��y����8��9�<z +v��J��l�晋|hI����wK'�Fѻu +�.Ǎ5a9k��H#2����s��4k�fo#&�Pi�ΖN���l�썎3�tyE��t�1�7j��i��r���w�h�$On3��۰�b�za�T+�J�,�w���`�Q,�U�lTĻЫP�*0�S(��V4�W��b��l��b6o��R�@����`k�!���m06U}Ho�0 �Y�8)����;���z65ʬH�sۗ�ʀ�d�!��E^�gE!�������z.�S����p2��3B�-�M�B���ķ�;k6DD0q�`w���Eՠޘ-�O�lA�$ M�X)+NШ̲�D�yA�+����&���LoT��e͐���4 ^��5`ۃT�d$����U���bV)5ì_)�5at�pS�����,��E��*��T�5���Ɏ˕2U�\)suh�,[��2�E��a �>HP? K�[O�Dxd8=�� +��@*�e_&������?k�hp�z�[4�(�Q1����԰�'ML� +Et=Y��iJ�j���F�2P}EQ�Q�V�l�jc�j���kc�'F�"�NB.��-��7k�p̜����`��^(pΨ��JU7R�~F�Ã$��ܙD���f�ӑ��q��]�ZD.s��{s�d/H^j�b.� 2F���c��ӕa\��H�8�D���K*��#�z�2���2���bJ+p@��X�du�Y*��lɡILzT��CWi�m`��:r�� �4p�����[F�E�*6���o�@��\� W)�Wq;���a�>�5V�l�֪�U5�4 f=x�&�*,e�b�P�}q.��FT<��9�f,��\�����vސ�u�j���&>joq������� W J �v`Qd��� ֌�&�}.�6�z3C)�V}����C�)������O+-A����.��f��8�0z��)�W��r��0�&���;D��R�>ZNq#"��1`v�De^#�� ��+�?"��+�x+��Q =cU+��J�{�k�͆Jĕ��M���G��L�C@��b��m�j#���i��������x���<�(Θ���������&K�� ����6�i��6��CǜkP�"�36�jOj"��$���̨���)�I>��+�tu��6"}#a;7O��nɞ*Eb �|��FEMS�hZ�,�*�-��ף欜{ ��1��=D��h��A-��&0A���Zv�Y�t�b�e��P$*�L#MQ����.-�;3l8�wߧN"1��r����阕S[#�i�μf�lG��V�����HC�u+�nF@�$˗�@���k���N5������if9"�E��1�tH"�]�D\�jn��(8��ŭ�R��GCO�Ġ�-t�a~K'«���?�����X `�9i-�8 �ts��;hx{4Tv&Co C�5%�S���HT�h<� +iLa5�UBRI�b�J�-������9��W=�+�]�5e�"�@��H7>;� e}[e��~l]1p�t3�4�B�Ʌ`��p��s4���(�������m#���Hy� D��P�կ*���u��3݆ԣ 0 jK�6Ds[MѐZ85c�W�tX��c�XH ���G�R@ ������O�6�8�N�tō�޿���� +M۪DD�0w�Z�NW��܈�_��!�Œ�e�?>��P���` �U,Ҝya�<5�?�S��1Qh� ��6􁝡��O��d� J���}r�'��������o>����7���|񹜠�:�O��x����׿�������߼����͕v'�M�SXl�%z*��U�1e=-Dd�M�Θgz�1�u�<$�b�Ќ�j��K�1����Bc8+#j�1Rb K�1=@�Rh�����(( �TE6���4�s��Ҙ��0�Z����3桱�&�̘��nS+3�i�"�ڕ�L�7�K�1����Rf Irfb�}�1P�K�K�1P��]�1PҔ�u�1R�4/u�H��\Vg�}E��:c�9�,v�����3�b0�&��:c����13�ܲ��(]Y��juƐ|H��T�< �]�1WP��uT�טٗUsʔ֥�Hu~^J�������(2�n]j T�����@m�,��@�-=�+���i2j�1$� +$�j�����X#�2cx��W��a��d��u�1MH�rd�Q�@?j�����F�Jc��l-Zd�Zd�y]i �+|����B��u�1�,�Jc���Jc�dG�F�J��:Y1Ꙡ�1�Ԙ�)�.5��,���sDuS\J������4��������˴�8��8���!1��UA^�o��N�n�.�*(DY֕���X�4<uK�4��s*}�1�bqK�1R��Jc��ġ�+����L�bY9@�.���(��k_j,xV���Rc�ӿhZJ��T����.50�c.K���(��Rc!0���J���˼�#%�`f��@A��u�1P�4��(�b�Rl KY cH�P�f���@�Rk�t(6�~���U�1��J+6ƣ0V������6�+r�Zm �Q��VmL6�6�QB-.�Ƽ:#.u�<s���Rm�ýN_�(,�Vṃ��I_m D�c�6F¨�Ũm�@�~Z�Qt7�ʍ��ʹ�#!`غJ�e����ʍy�s�Z�1O�iA�rc�D\+7��9�5���rc ��c�Z<e��<�����IvӴ�<�9�rc a)7�hVn����Y�7����Z_o�3�t��� A�bPO�=���<c�Lx�ɭ���0�U�1�HS+7���8V��BWn�k�1t>GY����4a�~Un�#�P��z= +�5��Zn��rc�Xˍy&Q����H���7� �F�zc���w�:�#������b -�y�zc���%�F����V�7�c�� �zca��qp�zc F���b� K�7��xN��c �cq�� �ﴂc$��}���ih`�瀭��Zo�����,�<�+8eL>��cpّ�9��cH���4� +��H�� Zo"��c�)�]�/8F�1F-t���<��c�X˔�zcД]K�7�\nַzc0��Ҫ��d��I��p�/�4QST�]��]����צVpLUr���s~Uo��Q��b�k�� +��b#��Z�1<�\ԥW7�u���c��k�Zp �� ��Bb F0h��c�e쏋LV�� ����7���r�Vo��g�g�:b�OL�}_o�Ee=��v|�Zj��F��5b�7��)!�VI,0�kY� �Qo 1��cl���/7���X�6Z��*�����V��7��5��Q,z�� ���II��W��HL ��΋Zo,0�\�V��@ ��[�1䯡� tZs~Uo �}��k�qj��tN䲪7����Ў��C+8���D ����(�\Z)1\>�<� +�a�d���(@��vc�5B_p�k���� Y����?�9�*�a�)�����"ΓVk���c�X+����ZK 5�e����c��XqLs�8�it�����8���bӰZB���ʴNԒ� �c�Vp �2�[�1=b���c�)c`�_{0}�8PK�!� ���R/��>��f�#X�-����B�zc�VR�Z�1\ Q���c�,�Zp �q� +�1�N)�cJ S�9Ƴ&�F*��_n+]�1�$������b^,�p!t5��� ԃ �ΤcX���Ϲ�2��D�K�&����$͸�8��/�%�Zb:�+�Q?b9 +���!Ԋc��Z֕X+�8���*�Vt~Uq,��� ��X`�\M��|A���U�1]���DB�K��.�|E� ��X�F�Vr rb �驖#�Ͼ�S���ZrL 1�J��d�n%�H�xXK���bY��ׁNs+9B�5B�|���}�1�=`t��G:$�TK�A�)����c^s+.5�@�d�l5Ǩ�D���j���&��X�1%�s�9��0���c�c���g�0�[�1@�r�eUs ���|+9�YPy��X#�%����{#@�J�y����c��o}^*�y8�����cr;�8���@�n +K�1Pd�tK�1�`�ni�AMir����j�11��XWq�3S=���gF~ˌ�������e�MrnG��۩�~0����Y�9h�o�r�(�� ���Z��r�d^���%�I��C�A�I��R ��,6{�c��;9ƙ#��� ���1}�9�u� ��Qn��V�:���~�pŲ«��ر��E�CԨ��u +p��ǎ�� *=�XV����bWT�� +�t�cG��c���L�kJ��$�| u�t�cR~�e>�1)�[ㅏIe ��1���C� o��TV��G%X�L}�J|l���(�LJ�|l |���jL��Կ G�o�ĦZ��j,n +��l�n� � �H:|�8�G��[o၏��cE�T�)��r� �:��>&�ww�C!�s�Ǥ����1��ꁏq�TD���~��� �� ;� ;j���(M!�*�-/|�&Z~�a��i=�K��5(S�N��C�4 +�BJ邏qÑ>�ǩ@o��ˬ�Wz�cR�,�Js����R~�c�<0�˘�co�n�R~�o}�c�h~��Dz�id��=v){���݄>�SL����l^챌�h��qʆ��6{,k�N +�f�eIZ:{L� ˸{L1��oW�XƑq�CˆK�*��伾����EK�q*dV�m��.墏5�c�Q>�����>F�7�cR���CI�]�1T.Z��x-Ƨ���-����������� +6|�R|� >�I�������v��2뺏R����D��x�cR��>ܱl���p�X]f��;v)w��ˊ��� *����Dh�NZ@�Ή�,���cG��cG ���=��) ��vsǔ��Yp�=M�1/~wy~�c����������j�c +����~�c2�mŋ��H]6�ݙV;J�#Y�P�Z���cǶrcǶ��1�4�8v �b}�;F�cW��kgՓX��n����q��K�X�&��b� +��3��)漱c�*P_�XQo���̩c��v�A�e'�P�P�NvL��a�;&%�m�?�Z�`Ǥ�U�Ǝ,�J}�c�{r9б�3`@�j���MS�.��v�`���`\��8?^옢���ϰc��i��17�=�1����c�8l:�C�k �¿�c��jl����B�K����R`M�1+�i�����<'ASp�Rb��c�+�ys��'��1�/�NU��� +��Q_�:��T)�c|��wL���Y/wLj�8 �cR~[�t�c8�����1�kڕo�J��Ꭱ���cR������'�޳���)|���Ǝ�[�ށg��}�S�#O�Ǝ�dH��j4���/uLѰ�9�P�d�M�HP�4:�l{�c��qM.AS�,)��PǤR��cz��נ��Sy�cRYfm���'�:��b�;F�Bp0��!�j.�c:ъ5n��o��y�c�R��vLCb�{Q�l���c �5��s������Y���tL#� (gU٥{�5�cex�I�x+�c�g��d� �:���0�cel��&DvS�Gu�u�O46�D +v��?�1 ��:�4T���1 �� +��1�{]����7^Ce�NCȩ>�1����m�²w�!�Ӧ�ӎـ�oE�;V̱�o��?ڿ���B+��*���1�6�v���;&Ŧ�;�ʲ4�c(�v���c��1Vø(vL$u浱c +`֜��ꕀ�Ǝi��[8��S��溺/vL��/v���0��8��u,[ν�o��1)%��b�T��6����� #ǎ)�K���S!y��S8��DZc{fm�o�B�N �X&/�/�1�����.ο�o��Nvn�#p��|�c���qX@g#��ˠOj�c�-�*<&�bnC���&�I������QV)A�WrV�&����N���t�ȿz�8à�B�)�S�7z� "5����T�Ƚ�c:��� �����p�����M�M��3�u�c��Ҝ<��İ0�E�Jo�A +��<V��1���Q�/yL��ċ;�c��/�XV�����"��d��l��%}����-�7x �Ќ��j�<&�6"�=���}}���r9�,[�Im9��1}RR7=���j���$�ɩY���p=� n���zL *?�<��17y ��P��c(o򘄮p�M���y��4uyL)��N+���i��2\&�2,u��Т:��lR@<RލH*BlM1P#�),S�!�6yLb�'t�X��w� CXy=�1������1 S���!����)|��# ��&��S��=�MӰG�y��T:�[@�MS��o/�n���<��S�x�0,�c��Z}�cl�lͭ2���)�6}��(���ǔ3!�1Rk�e�%�Z�DՍ#51>2�,��[�����d����Y�6V��)@Y��A�d����� S����� �|?JY�Lg1l�L�Ҩ��k�g(ڭ<�2��r�!�#�e;��4���2D=g ��V�2��o�^�,��n +Y&��B��I끐1�j#� *;� !�u~�손i+z�BF�����tSk��d�(��� ��%�A��Hi�� Ӥ��!dJ�r?�L�߬��Q��*(d:���B������ +�>�����<%0dQ�<_2ms����$e�U�!0d9�g�9d��� A%�!�x��p�$~s��!�g\ڋ�L���b��F)�w�C��I���6h�����9d,0yi�%�ak�2�a�I�2v�s�L��LOpȴs� +���!C��{G�'��ol�V�7�,��=7�Ls�̄�P�8I����eZ�n +MJ _�L��N!�:n*.�D�n>2�b~�67�,Sj�Ɔ�B���!d�-66�LW��<d������ 2" ��3�2���b�ԺdY"�b���g����`��'B�1���wC�4�0�mI6 aBf+a-�n�*�B�u��o�ζ|l@��x[�Q@�2�U$�.��c�)�0Ȳ�d=2D⦁ C!�2)���dR{�� �2��k��ZJzd�?��� #߿� +s[]�߿|zd�ԅ�LJ!�� 2 �_�> 2�-�̒N�� �$ k@�dZW�1� �b�H$i=2�@yd: GC�)��02���J��A��x�W=2��c[>����->2ef�ZE6����J� S)�s��x&����)�`�qf �؎�����8i8�Lv:�n +�JU��A!#�C�:(d8 ���B&� ��n�P��x��!�U:Z�!���|d\D� � C��mY!�I�1ȔK��Ncg�(�-� 2���A��ĪȃAF�̛A� �k� 2�iq�`��ms~d�L��f�����$� +��k�dJi��A�3-� �"���V.Y��7�y�k[n+d��Zx� 2���7�̄zdvZ/� 5���Ii�'�@&��� d����!��d�:2=��Z7��:�+/'��)�8'�����7��6D+:3���1hV��r=eI/�F����@���\�T��X�ؔ�+;d9�]�@V���1�̹�cz2x �-��?��X��I������8K{ d4W����R̫ +c� S���f�A��o̾d��ʼd+�s3�h��:�dJ�ͦ��� ô��_@���7� !���BȔ˳n���)�j^Bf�گ�2�j�q|��B����Cz!dT�����V�>Ɓ��aY,�2K��q d(Z6��3��!dr���> d�+02J��P������h.�b�,EB�T�ocw9&�3��Y!NG���r����J��y d�5ڪBF6�y즐 Qm +��7l� +��:���BF����P��)���P��|`?�M!+�Q�:2]i���BF�~�7�����:2)� +��L�M!��[ܧ��юd�N���L<t. Ikb��!��l�CF�F������"��`u"S6�4�C"3|2&2N"�K�ᮃ������)���| ���f��$2z��L�a[� G_��`��0ӸadJ�V�G�o+��������Ƒ遘* Y���s��4l7:"�P��T�o82Ո���&u�27�LEC�(hd�a��t�F��Ƨ�z�Ȕwm���F�#��n�V�4@�,���h�42J2\4��u��e���Yx)hd� +�B킑)uĊ2`d�T��,�?"��d8��EF�@q��f�Q ��*��<s�"C�~♰�eV����t3r�9�L��u���$��E�P7h��� ��gB�%m�"��"�е�Yd���r� �t�L�.���E� ��D�������}�20 +�n�V�]U�#S% �:`dz�)þid�����id�t�YY �V�w��)U��ͦ���F��h4�ydr�� �Ln��s�X��U��42��������idG��XGL����� ���[�id*I�1j�R�^�Ȱ~V�������pB��b���o�DlFGVe��5q�Ȫ���,����id���F�id��F�Š��7]������P� #��]ݷ!ʕ��Ơ�m��!��l�K ��<9��F���� F&�{7� q��"�o-ƜE���T.Z�EA�@�I��a{��t�PN,2�ZdX�3�A?� #ӔL�Q�� +h�vM�3��F�J9`�ȤX=C���;��9�E##�%K��F�ɉ׼id +�� 3%���|JN�b�d�)��N#�4�N�L���FF\�RS���5i�9uhdD�j422�J��me����M#�=E hd��8�f9@C�R�7� 1Ì�HB3fC���?02eH�q�rul ��ǃ"S��)nG���� +�Qd�b��o +���q�����,�Qd�/(2)��Ӎ"C��(Pd�0iv YfM���"S�$Wb�#+��|��}�����я[nh�&؊7Q�ȴ ����P�� +Y� 9�#��f�f��7�z&Xd�?���Bik�,2��XT�]��Ui_�E����&�,���g�E� +�:�,��9d[�D=��H�.ƨc�֋BVH��u� ��Bf�� d[ _���`�iĴV��A����� C�l<dR��� 2vk9�c�P�ۆ�aj������Lq�Bv)W��QB��l����Jg��n����q ���!;� !;j@�(2� +Y��(��B�3��+(dи5�#Q�K!S|0���L�Y3 ���,� �Y*�C��ky��d$��Yd���#�b�؀�I��FF��8A��P�R ���G��q�t8xd +�Z�&xd����䬬�N�<2Ug��8��0��G�^-<��Tk ��O7�,����ő��༖��o��GƋc�x��,���eZ� Y��@��#�F����)�����,�N����Q�Bn<xd(�9c�㭪%��G��|P�G���������<2ʹ�=�d�I��ᓨ�Qn ��� Y�E�pܘ*e-`��d�(��G�lk�����Ъ(o"n��pɂPW�L�'$o �6$�G���$3�?<������k�#S����޻m�V���ȴ�������Ƒ]���rW���eF�q�����s�����(:���!R�42���I�k�4�L�S5A#��5K942)�ӽidĝ�%pvp�cw���m�4��y59{���bX�7hd�r1�.�id��s�1Uͭ��K#���+�qr +����m�f�m1Pdz�Z.����k~Id�2�k� +^��A";�M"3UY� ���au��N�������T�=�b�{A��pzlnl�{.�z�9�Qd8;j'�Qd�����QdR[I�Ȥ��p��8�|r/Y6 k;,2j��򘆅��G�Yd��`�*�Y ��"���Ev����J�[ �ޱӅu�����X�C>��s����n��6 �9!`d�-�xad�X�C��i�� �#�� FvԀ�eB z�w�-�u5���$�h��]vus�L�{�&׋G�DŽ�� $ë����iv�W��d�����qK-J���(�`����e�ĩ"�u��S�D2s҃D2'���<2e��&�摙��{,��j����ȴ*�u�> �8��#S��깾<2Sk�u�qn�n����ȴb�hm��P��� Ŋ.. �h�H&a�\�L ��ݘ7�L�+�Q@����4{��-���ɤZ�3�dR:��$c{���$�A�v�@�= +m�آw��y���d꿆,f@2��?��H����h$�b������j��J�L �"��]@2Jz��<���l��G&C�ʊ�G&��A�ȰmVU���*��k�J�/pd����#tiov+J�LI3�'G�j�^-��qd�� ����x��$��qd����#�4��?$/솑{�Uع�0��y�u7A܎��x�qd��,�@�a�����Ȋ"���1��4�Ǒm�Ƒm1pd��� ��i��G�J��>J�H����m�&�ёd +] �ՃIV"�p1�В���2y[�3ɴ����b�Ic� (��=���\��$�+�|�L�1Vl��'S.��}3��a�I�>,�d[��d[ &��|��$+T|��0�TYD�g�u]+�d +T���f�)l��`�y��zo�B��d&���d�sj�L���K���0�$�׃3Ɋ�C�`��`7�L� �$CP�8�d��Y��f��Ô͙d�қ�6�l �lk�$#c�p��N+��H�=����(큺YVR߰���d[�f��#��k�6�a�S�}1ɸ��u�%?�9W�w�r�L�J� �үl���$㬉�a�!fG�Q���5��LٟJ��d� JFsw�Jv���d&�zlY 5��qc���W��d*���:C�46�����%��U��%����J� d*�����-QR@ɈT��"xcT(��঒)r�\����|�c�UN�pSɎ�T2�aT�T2�m�JF�|~sC�$�o�ی#�wA�u��J��h� *�.���d +W9O���!��Jv��JvD��Bd_߼1ŝ�>d���U� �d��,�$~�dz-L�K����� q_P�ЂIV��ȷ1jn�@��l�J�����0��u:mw1�d��i4mڰ���$���XI�rj,IF�J�n$�"c���d�������C'�d��19jLE<K��H�ؤ�[� �[�Ut �"�QI���Y�9�L}��$�C�}�*o P�lI�g��� D��� +I6�F�D2U1i� Mv��9$φ��_8��U!�F6��i�Ȗ�=,2A��1� ��c�qd^q۫:�Jm ��M!c�;� !�è��A&#�Ly���P��� ���� k݊�AV�(�!���^9�2 i���Eu�?�(K!%��1���Z{L5���=&1�r�cZ<�����ܱ�эSvJ�/'��c�ㆎi�����c�ְ9���o�� S��:1U ��ƴ��ͳ���٨15��Ƥ�_ys�@��y0cœ�<^�X�6�n�Xݐ1� ��yc� �6bL���A��B�m1c�Y��!����UHj��;`����F�}�,E{�I� �N��`�T����8b�l�F,;zSĊ�.o�X1t�A� V�X1�� ��j��r�� V�u�=�0B���C�yIu���A��-��bM���g�M������-%�J_}�a�r0��0R�+� �NZ���d�����~+���N.���'���a�\�y�a$����ݮ��a�V!��a�O}����0ҢVe��0�h����)���� C�pJ͇&�_��I�-e��I�����Q�SI{^�0e���onX�ا����W��ZĒ���a���q���ʭ%����a����9.����F�k�a څ K���"���)T�V�Дۦ�ܙa4\ȓ�B�ɻL�.�ax�i+��0y ���”-Ո�0����9,�Ša.���e��0��� RX �A)y�j�0�xT��+�����m�3W,�U���/=ښ nD�OżB�g����>|����҆����������h0��=䴛�}� ֽQ4�W�mO� �^=�7�7��A���<> +����`�L;EmZ��5��\@0u���44��k�8������00�"S��,0�-����(>os��Z,�<`{L�ƀ)��Vm�?�)S;���a�Y�ƀ�W����G�iN5���$c�� &�_4<�$��1` ���P����0=�AC�K~9h&���o �� "���c���KE$��€)9X� z%�*e2�\��O6c��+)�UW`������0 ~p߹0`�}C�8I�p@�xY̼. +�6�i�����6�f��0�<Ր{C�2��cm.��}m���9J} `�ye�0����)`� �K�ߥ� �;��0}��ޢo�>�lp���.���]�T�wý�^���R�-��8e��zQ�T/���xS�tXU47(`0a����=xh�vS��fedC�e�t]�����Š�a[R�܀�d������%���}�2Wʲl 7숎��bm�Wb�����d�;v$:3g�=O�����{. `�����$\�J~ `�晀�I���sC�$�~��@�pu�sl�`�_���^� +�U3�N<�f��у�,_�V ��޽�^��{%� f[g�m�f�m1`p X��"k��ZL�5��}�~T`���n����݋����)%�ŷ^b�P����3 �[�kM��߽��ꆀI��M�K!=B�A4��S�!`v��7L��Z��o&Ǟ�J�|/��P�~S�0���j���N�$&���FN぀� �LB�B�!`X��y`����`�4T�� 0^�I�b�iiLb����UK0��p1�� ��^��v �=A׿��|�8- �}-Aye� ���O�0=����0��% �|S���(������f���m�y�C +�|��`S�L�o<0 +��� +X���\�Yn'��c=0��N����+馀a���c�}�� +�j��� `Hclk ��rZ�M�S�ZY����X�;�K����-��a�j-�2���+;���b_}���8]c��t�u3��/Guc��wF�K�yn���J@�{�!�_:G��M�� ��&=�E����F� �5��;p_����W�}þB۬�7v���}�.֗~x�-����mZ��%�������ڔ�/��ta6�+Q�����[*U���¢�����8"�m�D�B���Y_�bu�#��E]I�/�K����%��AA�R�����Z���*�eӓ�/^�h�M�����I_k�m��K�t~��.,�jz�^8��C��(� ԰���k���J�ȝ=��>���az�Z�͢�8]�T��:����Tgz%+!����$��� U����R�<�K +��Ӌ���`zY��o�^(��>L/�,a��u�B'A�J�w��0��غ��a�gzm�az5�^���"x�.O{�u���XIu�0`q���c�v8(��,B@A1�!�gzm�az՘^�dL/����~�^���� ���� �������gz���\��e>bz�o��Ƶ�z9L/�QK͇�u���u�`z�Q(�V�*���M�>B�%�C��o�W(��QC%I@��3�~`^�i���q�nSWئy�<����yI�]�ӼP�󽈘pf��K���C�B|kӼp4ZA� +��>��c��$���u)��A󒿕MeA�Z�ZT��v��h!���U�����&�|��ԞK�1@^#���K#)q0^8�_����as�N~�Bx�F���e��p��.ej���.��V�F�h�P���5�]���i���;d=�.�\� wA����2�7�� ?�>���.�҅�: �#h�ь٥���8p\�Z�K�Ϭ ����v �>�.Y���]T�~��s�� `�.^��5=��p��lͮ��i����)�� Ӧu�u5h]�i*MA��}ŔuӺH� +Z��<8?n\n����� �z>�.���/߸.;hUܸ.5���%��]X.��9��������rú��.Zf4A8� _}��EG�J֥~=�*��#�a�����M+�֕�����8N�� ���T����oД�. �<l�֥����E�B����h�o�X�����q�z`]R����֗� �ҽ���Dð�Ӻ������Rd���2�*5֓�ٰ.��0i`]��Z,�`] +�ܰ.E!��<�.�VI�.�N��S�$�oXjP,�`8���B|�au�OeV�Ս��Y]Y������,���.E~��nX����Ӂua��i����;�VW&����R������o��� ��e��������.)��6� �o�7���~� �B)_9�.r�7�K*A� ��Ec��tylqyúgɵi]0 +Vش.�)���K��<��� ������\�W�u�2�E?ץ�˘57�Ks��Qmh�gn��຤�au����6�ˌ-��⺰��E;p](��q\J/��l,��u�CP\��D���֥&ĥʲM뢲�[ג0a�`��l����Ѵ�|x]��1��s�. ���u�v�^�y]<mښ�+�_�p]9�j�%��E��gHv.�V��.����%A����H��<p]�U ��ˊgl��q]����<$���u%\�r}p]��č�=��=p]ZB߸.j�Fٴ.�^�fк8K���֥e +V_A�҇fu̥?~���w������.y�2���B]� u)��|q���WoN��^��tQ4�K����c@�4qO�����ʍ�R�h�q]�[b�쀮N��z�\؈�z�\z��#�(U�N��su���p.��7����r���է�\6�K[1����⣦��%���2ס\r�ɣm(��b|�ʅ�5둀r%2��n�Ң������[��EX� Y@��p���\D��W��J�|�/��<��)!��\֜�%łf�B�cr��Ed5�\(+�`r� 9Dk3��9�U $����@r,P��ArQ��|�\��)�u$�-�� Ʌk6#N0��s���L.���d�H. +s�k����5����q����8�U�4h\�ײ���qiV-x(9�K�e"6�K �W��5���k��a��Tj���r�V�Tå�k]��E1�z\dþ�\\|��%%�7�kze�F��4�[���yVq�����9\�Fo�n��XGo�$LK���%Mk��o��Le���R���h7vK�z^���i��U=<�G��6�J�[��Tsn�-�fV�pK%�*,�.�x �0���� ܴ-U��1�3ֶ�nؖ��<|���V%�lԖZ��u �-H���A["�i3������-�Ie�sA���Ɠ�![۬< [4��m�dΕ~� Ɩ·��c��c}� ����K����76a�l�g~[��hs� �F�.�&-����R�h�M�� $��k�^l����@Q9 ���d-����Z�P�ӹZ�|� ���7�B�T-�V4Tk3� �����R�QQ��4/�T%b;�MC7O�|U��iq��0-9Jjt�YZ� H�Қ��(-y�7�Vn��.��8������2*�|0Zb3� ���Q& �+u������Z9Z����Z3[]�M��T)�ZJb�@���7~y��7>K'Y���Y��c�M�Rߡ~��g5+�tV���EΪQM�� X7��'��Y�Z�?�Y���1$�5]2\]�,E���b��iG�۩�2��U�h۸,q� ��ȼaY�D�U��E�h�U�Y�e1'K㦖��ҴP�\�)YҨ0v�L� ̗7#�L[�ވ,�l���%i�'A����B��QD'�Y�-)j|,%7{.<�Jh>\����i�]l,3���X���K�˦��Z���c����c�.^mp���C�� �ӡX8e�N��l.�$��on"�e�����糛|�ȅ"�*�B��e���� �6 FMr<��a�Qf@y�B���+QfD���a�:��a�BX) +�"*�� b�0)�����/"K�R�!b%�}W9D,)��1�&bi��-o�Ȗ/���ݕ"�}?D,T��ĒPH)8K��;]@,Q���\lm��� 묹�XZvAĒb1��b#ҀV��B�-'b�/��Qs�K����w���Z.'b��K%�D,�+)�CIJ<�N�RY����D���C�BqD '���$b�8, ��8,�iq���`�m��E����jW���/�T�/mV�,�D$����aI�rj���%�r�!�a!�����ۨo�6e�o���k�yX���}<,R�S� >i›��t�uxX8&�F���#+�����V��ÂoBt"xX�V �yX��ro�<�z><,=�� o���n��������lа���Òȴ��X��v�Xvb�/ U+�M�“��@����z�X�f��<�X�ʆJt:6���EM#cY����CIJn�Z^"c+�2"e�ӱ\^ӂ�t��Xh� "ֽ� :���~����&B-RA�J��D��!����QP֣m&�ϩQ&�X��-o(j��X�E���ͺ�X���˒�+  +!���H��'�X +�P�@,�sZA�@,�Fϲ�X4�L��@,���B� �@�m�r�ټ�X��y^n �f�����r�� YB<7ˈ�m �r-R������ Ģ���zĢ�J��b�aY(�@,Kh�|�X�+J���8s�1�����Ģ�]Q��bQ֬g�b%Xң � �P6K����տ��$x@,�"���C�K�Òv�ʟ��6���#�7K�-j 6�T㈹�X���c�<,���� �>�{���Ĕ��7+30�zxX��V+f<,ڎ�{��aY �3�0+�b����:��vgfE���4�s��<+��/[6��0Q��aY�J��P9�а�����Ev���ð�k$�p�� �[m�5�ݍ���0,}����e�g�mV�E�A��m����E��8�a)���(`XX�2\ +�����R2V�ށ��gU<PX$,�[s���~s���"T��G��4Z7��Jʑm�s�������ۛ��-q�]�4�r`��E������be?�Fa%�6����X�Ӎ�(��љf)Gai��0p���.�8�(��r������� ���.�����?�ߣ`�w�N��,���ҡ�e�as +���,Mo�,݆Y��`Q�2Wy(Xx�k�,�Y��eG��P�x-m��%�8xP�my=���_S��1 ��[re7K�>+��`�/l��VVT��,��8�K5\��`��V��M��lCeMN���D���&�����ͳ��K�8A��u�z X�D ++g/y +�U&L�׃�‘J��>�����u� �tD�`�C���!�p{6K�$��}�����p6 }xO��p ���%���`��C VV����0U�qs�2�p�nV�ܷ��`��/�����ޤ�AXr'�p��p_[�%8�����s�C ��������,7 w-$��%�u7 QM�B�F�ˠ��i-L�BSER�����V8HX>�;n�n�����En3W��U%<�h� +���6c�`�W7�|9X��Wp��X�@p��=��Y���"�EX��`����,mE ��i�ڣ��ۛ�1X�M2�1X�Œ��`I�P�a�fR�� +' �],Kæ�1X�kw�1X���< ���T`�@�b����WJwڍ�BԿ �,�">�'Vo�3z��Es���A�"R���Dm��p8 K��?N���7��?y[(�h� Ki�e�N��8~ܱM�|=������﷝5��!���Es����e�ai\�q��d4x@X����E�g��VfmH�< ,Tl��%�$�aI��h�fM$,6�4� +��r~IXl��\ +���Wk3b�7 +-�al���*^Z��:�MúTO���N�48W�>�k�xX�|�S�R!g�L��2�� �u� b�h�"V� ;������D,j���%�>�M�b�FX>�N��M:>,L�E�Y�]D�̃�=`!�na�Mĺ����A��[�nؤ+]�^����Q�w�v�n�Q��E�0سE�i����/pXV[��4,Y���Һ.�6l=����Â6�=9E�N�J캼�fӰ��RC4,�_�;y�!Lو�A�BL �^8°�’b V7 ���ìȫ��_���/������4K!U�鞩 ֟�?9;רM�9X5v"����"[Q0ћ��H����`�f����Ң�y�F`�⣲�Z:����`57��W$Г�zEB�D�~gH��f_ᠤ�0�WjH��5�W��覺�W��� +�8+��͗'�J��q���E�;�Wz�e/��Wz��ڸ��YuӮ�pî�A])�u�q�F"7�J�4 +��BY�E�I?�e��7�J=��CV�lL/9z��j+�W��� �#�(���y���+���. ��tۦoE�_͇nE���LЭ�rӭ.��VkF��C�Gi���V���[T�9��A���{y�V���J�2�?*RĠ_�9W����zP�Ԝ�p��Z)DAV�fZ���:�j�Ȓ;���S:h��s˹;�J.�v��-\��#:�J�i3uK��z�6�e��#���$�-�$�-�J�B��˝���~K?~�P�ڢdu�dej2�Z�[m����*@X���X �E�أ_?(V}�<^+��Vx��|V�f�)��>P�T��{�JG� �E��~ڛ��Gt���R#+?�M�j���V��as��pa����D����V�T�f��Y����|�j���D�ꑠ���W�8�T��R��~Ъ�bɪ�7��2�n׃��jr�T���8U���y���$�C!���4|��ԁ��|�J{O%��7� +��7tJ�E�������A]U���ͦ:��h5�TzXp 4�����FS��M�M� ~6� +�l[Z]p*��q����]���?|��*t&"n������zZ/���j~�p۔�2B�Qh��PN�R������BS����T�#������6��MţA?c��h��`Sa�e>1�*�1�aSI������V]� +[;�=M�(v/�����J8��q4��A��éh�>;��~��SI�=Z���réL��MߖT��� +� |�.86�K�N��7mkөWU�pө$��:�������s� .<�D����Mۊ�Sq���M��7D ��S%�cө�/�A��T�W :FފX��E�n:"ӭө8M��-����,�4i�t*�)t�����,tzө�Q�N���R �-��~ө4!g+ıcT!iF4#�E��t�-�J+ "$���W?�N�ǃ.�>g���T����ښ��Kks�R��/.Z�T*[��T*��.�J`�vB'��� +![oզR�y4�Je�c �7�E,�Ju�}��7�� +*�Vn*��Je/�J��Y�� ���NŖ!��S9�JQc۴�P*XT�cJE�t�Y�rC�L,eC�(�Բ7�TIZ�R�䄧A4���4�Q�<3�J�P*�4J�L*��dL*���]`3���u_�P�V�=�����Ť�Z0�,����pZie��Og�M�FA��T���A�Q{�}1�� 3��|��n��UV}1������G�����j0,�<L*#.�����bp)ke�ID8/&bv�����wߙT����aR��i�/'�L���Ť2�^6�Dl�j�-��>L*���Q�iPgR@���V0�fRa.�N�`RY;wΛI�0 х�I���Rp&�•7l�!��H*�����Q@Q�=�T�n$�IEM��AIŻ-�H�;�;ԠL* ���t�]L*�~�T���@R��I�k��Y���zG�@R�BRёT*˙�� ؔ��`��io� +���$��Y��H*Dm2n$�^k� �bŧ�k��p!��L*mmX�N݆Z�{�=?Vv��#�9(�J�{��A�1��gC�hSP�*�T��W�+�TZ����FR-��Z�D����7�Jc�6��^r��߂м)/��NJE���V'Q���T\�O��������{J�8ٝ�|�d��?B��d����S�Sܩ�y��h�<%�ҟ�J1_ �M�Roy�e�~ �"R � �n���g����П��S�j��?�Y5&(2���: d���8��<KK��R�3]��w~I U�^�#�Q�wȁEU��(ͩj�<�AQU��(9T5��|eyu�ժM/jp�L�M�**~�rZ Y��?��`U����ʻSP�H�@_Hp$U��I�ŤJ�U��iP�d�)N�Jf����9&^-�Ib�=)��Pg<��o�qG�D�=��Kb���9���t����]��B�L +oE�L|�~�TbS���� +��+e�^*���R%y{"ҁ�|��R�:��J)�jQ�\U*U4R��Ia�)юS����{m�>�p���X}������.V�V�Ţ*Z}orV�v�ɓ;G�b֛��q +_}��[޷p� !~�l��j5E��&�#��fX ����d/^@2� +��R���TH��������?�k=W�x$� ���"�R�L���"-*�2���…B2���s�4s���p��V���yb�|]mh��@�tT=^ ���q���~j���1iZRUPB+qc7ת�j�����˫I�3w��n4�+�9i�r��Z��K^' +�R�K�\�:�["�H1�(%��5'��0?^�C�VL٪q�)���q`<���XÚJC%~[U��[��O�R���5�� +6:]g���J�z%��csP�$� ��LJ +;{����� w֪���ޠZV���8vQ<5���C���:��~�C��h}�˭l9lza�b)4o��ֿ�DkU����O��]KG��P$����K��6+�`���ף֧�;n�V�JY�\��V����8 ������$Ѻ�'+siv|��٠���2��=t��6�lpm�U�K3+ + �Rv=����nˆU�u_ +� �K�G�N%�^U�4�ch��h�q㥌C�:��J|U�fz�*�4�l�޳���u\�'D�Š{wr����H�𕴹K^hWٚv���+[��Tj(ŏ�݌3��4����F���u�K�����~�i��C�E��%�l��[���?}+9B֥.+q�;Pٜ)zQ9.[��Rl�����9.f���#���e]j3^V�!�������j�-���I��0�@�G�r_��9���U����>a����܌�D���5 �G}��gI�29%�|�bV���mU�M,�~�YR�/1�񠔎7���n�W9X�q�d�ŕ`�a4�J�w cD��nCRi'�:k�р�-G�84 �1Y6�З�J6H��� ]n�������4L��]l��&K��Q�l7�#��Lb���M��ȍ�B���� g�8��NϳF���k��b�CA*o"����j��Hv�^_jZ�b�6:�H�sM�J��/A֒ڌu�R(�O^ց��_��B���i�%C�a]�F��TY +��߹�D��@����@�D1��� +}YcI�;,4��(̞��_(��z�p&Sp��SI4f����jj���Ȗ��C�3*;���VY���kw��y+�g��y�S��� �y�����:� -4��n`�F� �2J�n�3�}k��8���cJi�U����Q����i۫���Qťq���P��b�p��z��n*r�9��9�r?j�� +�K��W)̴R6w�az�5tv���E�G)i�k���>�5��N�b�iS��+�>=��,j ����sK�j�8J1�\�GU�6�-9�PO��>%�[�L5������������.�2\?jq�f�p��K¦Re��������]�T�T���4,�����N�t?ʃX��*��T76�ҷ��#e�� �j��y���â�,���v��%��:&<��b�����e5b��Ҷct�i����Z�)�[ʞ�|��%���bOt���q�}4�{�]��o���U��h�4:�O�zK+J�)���"P*���,{q�,&��&tI�R�ac��:���+�Gҥi��.`$M��0Ҽsu+j5Nץ&�5mlԩ���fT3nta��*�G��3ō\�%%\�A`����{� R��_���,��bx�x(���8��jE �n1�Oo����:΁� �@���QU\_R�e� +���M���nk��A�j2cU� +��XV�׺�c��+qӺ�]U���E�Q᱑�7i�J@���B4�^��`S��-�\�RCq�|��VdErU���>W��R�+�WjINR�A��mm��Qf`����=��oNc ���-Γ�!p�F�2Ы~V��m�����,����^�%�X��R��D9-;Ǚ��T�V;U�-�V2]��)��Y�X�*l]�t?�/mi��֝b�e����Q�Vp�2ਪ����-"��YG�L�eɔ�{����"mv&�,ڱix�N/��+_?�/��)q�t�B� +����qfXI�@�^/qX7?�F>�#t��׎/T�"K-��x��SQ=]^n���tV ��;���Tծ�X�0�R(��b����|�]���K���8�q�F��#���o���[�QK[�|>�W/v��u�� �V骻����&j ��������¹�9Q=����2��E�ھ���gĬ������P�8��:�PZ�����n���Q��֊����%#��?G �t��P18P���kJ�̈́-�P��I�6>�DQbH +�/\$Te/���C*}X Ɏv����C��-�}�l1�η����V�����w��i�T���{<9Y>+�[��L1��4mO)�p�P�S�Ϭ���!Sڪ�2�Bb+� +�Q�Qc�S ��~Ra i.\�|�"�*�/�qtb��SJ!q�h����1nd���p�R�g�^e�7�x�ޛ��h���G��b+s�<�[�Q����(do>{ +��o���oX�:?��w+tv�2���ٷKK��P�:�Ǭ�D]s��X? &�:�B�q����'���.p��S�J��������d +1)�jlh_�K��G��U���� ��/��̏�*7H�t�"E�Gy"��n��*GJMv���?�0�a{B�k[����ܞJ^�#Ì8��F!�K�T#�;,wW��B7���W�V��`�Uh/�F��X&��ύ�go*�܊�E��v�Z�W��G��R�ʝj�PvVM9e�)��-�`$�5�"�b�<�.�aE�'R��[E��3��4DI����`%a�:"�!o�|�a�n}|�k��m�#&�>,�y��+^�*�Y�+�:��+�^�⩟����6*�F�V�?=������Jq�����:�:阣�%���$��A]���m%�mx��8MĤ��2P�Qb�I"TV*�A��8 9�r��4��`��{���XV���k �l�1���< S��MNV��_w� UR0�E�}��\��"n�V�T��n����p��i�K1跢�#�G�yW��j��D�~�Mj�P^  o�f�n�~[�*LLJ�3������>RI�BL�E�XQJ�ewp�8E¥P�"�Z��;P]��B�I�V�a���f���ONMq��P�4X5�P���*��D��F[w��`�.&�N$0� !���qr�`�1Zu�S� qM�&���`Ez�/���A� ��U���)7�����j䰦�DN��'V���)&��`�mQ^-�: �v�a �Y�q�|�9Lf��`� ⦓���� +"/$曁�$�F�� +Y�D��SriiH}������� +h�Z��-ꚗd����"6�L� �J|R�3e���n�^��Z"6��K~[�k�;��1�G�)�T��#��<��}l�ä"��1p��H{J)� ���y����1O*����D' +����$:!e�är���x��z�u��-�U|=��k���},������f�5�ǚe��/=pX�JU0�Jv�c�ǭ�m��D�}BP�I#b���g�����)�tFIҁ�-78LaYh~?��/+܆�u����0��� ��A��E8L��1tf�äښ���� �R{m1�#C�v����$p�'}�@�TO������R��!���l��4�C�mفh ��a6P6Sm��`�m�O���a8F�fY ���z�0�e�(��I#7��t�U�"*k�o�� c)�KFä����e����=�(��\nn��@q!�R !�A&��^U�(�J4�:�[n���uBC9;ԇII)��)�yJ��y �\3� /��A\O$ʶ���q +���X#,KBy�8 ����`�����Ψ �V�$�ϟ�_������o,^,�6S��X�˯�r +����~����d@�� �*�B��4 +,GI!1�k������e/kAg�W���E���k���'��1:J�)f� �K��N������|��bR�bK�V�T���C��.GOKو1��D�l�W� N�m���S�eLU(�j��/��AG��P����{��j�^�R=�\�ʜV���K��Vw_�[���g�R< _I�s��W��0Xl��Ic�^M�l�eILTtyŧ���Z+���w��t�h���F��t�� +cT��ƈm(���׭t;���҇��¶ڕ� _Iq��b�A{�h��h��@�iӖٵz��.�x#�!4�h�q�T�OD�F +���VY�-i��t�Nl��Я3KN�{ +���=����AZk3�rG����y�� �4Gm�X @�#{=�pJ��f���8��Clޘn0 +:�`$���`���;��u�c�$�b�9l�#��/�qQ��O�b��by�Z�tI#���Ҍ����J�����Ѯ�*&X���΋A}PK�L�S����z�c��'gk���y�����,�T�� �u���MB��pOh+��U��F��Z_R�L�˲p�N錢Ri�A�w�I,��R,i�,��Ӵ=*�NR���ɾ-��۹msO���lix՟/g`�z��]�� �7�L*1���d���M�d(���F���T�W�������#HQ)J8 *��vh�� +yA�_�k�S����7�L�!��t<2=�֚�^EШ���ϯv� +j��6��vE�!G+}�UU�d�*nj�F"<�Y�Q�j�Ӑ�X%�~�6�L�"i����Y�n�-�.�d�.�1�+~�e��V�E*������~T��9|����> �S~�J�0��l3E9k�è�sp���QՋ��D�RW��)���f������D7�Ζ�����Vي�Zƽ1r �i������7)�/���r��Ry 5FA�E2d3��9��ʹ�a+*�-y%$��.50qb�"�R��8S�խ�K/�7���4���16���Pi�l�����L5����Y-g&�+����$v�0��%U�j���*t�b�jR�J۝�]^gM�qkQ��;.l�t��L0��w���}V�R����Z��(G���w�r5���)� ly�q��I��Ɩ�:xԢKd�E(0�/��P�V��ov榡I�&���U}���F��d���ə��](��W*�|>��s~!�YyX��&��N�ׯ��.T3ud�S4�,�x�[v��d�Zݪ�v;� i��s&M*[���IR�*998CJ1`F�`i$���qi��q���A�v�A��LJ�T�4�:�b�`�����(���V��d��uKs?*�W�<P� &њY��� +��o\!� %��2��g��GMn�Z1��m$5�'���05�*�㔆�j�|>��1 k�c����lY��0�kU �R���l5��!�i6b>�\O� �W#`k4g��f9�R�����;ȴ\�����T��d���hKJ�7����vQK���f�tUO�)=��G1�)�kT��S*L�Z#� �E�V)dH����O� m�:�B�Q�/\���h +���bZQi@d�U K�a � +[���qU��@ϖ���ks��@З'�<;�o��VU�)�W�kWW�U;��CFD�r�%]�,�n0���|I�%���䃔~b̖��>��Jے`����y���LK�l�E0՚*����p���CF�Y�1�䄞9թ*!�"�œ�^�@w�򗅋T�8Q�ƃÉL�a�5��� lq!�Y�K�O,��3 +�T���&+ +* )��g$!�A�6e��T�Z�2*ժ�E!�^@C8F��rI ��T*nP�v���kY4,,���rR�|�TM=�z2-y�çS�i��V4��U��n+�_n�HA�~�: +�Z% ��w:�VgV�S_��:�/��CU���Z�?���fј F���n�Y�rQ�[�j5�Z��~w�>F�i*p�[�r8�B�j������8�5���S�'� +v�)�b�v٪q5P�)V0<� ec�PY�P�C/`�� ��\)�JQ)�U��y�� ��; N��FW �Z�b��-��c�TX �DTK +��d^X5�;�����B��Q�(�Lբ-�j���:2@ÎW|�P� �2j�Vc��Y=6[��hbA̼��UYF/؍?�<�횮,����@�e��E�t�l�*�b�.�=,,��a�r�-��h׃ +��s�#R���Z �Z)1gu��x�9 ��b�2m��,^��O��Pw�59�Yӥ�w�$Rk��Y���,��(����?�;��D| ֔Z���E� +��2�q,T�M ��VP ��C��ݩ�(�ccM��A��T-kT��3�9v�z��Yk�V�ɕ�Q��_5� +C��Zwp&�)�;��_�/~7 M`u�J�Q�@`�Z��J0��ВW&�N=��O���Lޓ>J�w�����h��;� +�1k- +���$�u۲�\�G��������)�eA�ح^�����5h��| v��� +�(MF�W�#�&ukQ�' y�hM�n�F�M�e]k�����Z_��؃���sf�B +� +w���(1�u�R��A��(��K���ϗ6�Fo�e)0˵M��!Nc�̤����X�=�48�B�U�*�'��Ƭ5\���N�G��Zee�F������Y35�q��t�V�4�M��͖��������~1 k�T�J$-�6� Y�k�i�V¼�WJ\S���{L?*fq�5l[uӗq�զ��*��>�%�ԈϺ^�6�O�*�G �w�K��NPU�X6�c��7`k�u2�5m��][�=M�qkZ�����!�H��q`"�H7�p�i�7%F+a���� +J��C2^�h�2a~Z1,�3��.�&.�Z�Pz�e#^�*� �Z��P���K%R1e� )�h���'���{ 6J�2iO 6Jt�o�J� k��< g"���\�ģ��ryݤ62SH@�v��<p!�&9�Ĉa2�}n]M�L�dx�R�f���s� !&;��X�0��|����e���h5,SF�tݰ��� +��jP�H�{�Q {X5n �V ��hW�l�������.��c����;<8*d��Ѕ6]�S�)n�0� �;b��Q���4)2P�rdk�y�d���N�^RF�G�}��� +g����>��Ĵom��GIv���S.��(���ˆV���m9 ?j8P��o-�u�����:��C�~6V�o.��V Rv*G�}�j.�mxb�S,�91ʊ�v3��BD�$�]*ɤ{p PI���قBM}�G`�У�Z��My?����[�u��5��9���Aۚ Bj�l��q�sX~IHO���=�<�< ���`lp꘶�0���u��'��Qc������w��*S +M��Xo�o����>c[�{Z����j�M�Jʈ��`�}��:G�hM�g�Xs�#a8���c�����[�AU3ڟ��:���nDؚ۱l�[%�_-�Ǵm7Nvb��� �z��2q�Φ��2�^�u�z�.Y���@�I%���YcU��Eԙ�\�J��:�M�Ў�3�NjNƙ�V�d +:���d%�-/�(��IKO��p �*K)Y�E�E3��'���UiX7%r,���QY� �m �0(�S��O�UKpR�Z�4 ��jK%��h��c���a���ڢux���D���)���q��-"��%^�"C ��꜈����\�>���X�V�u����@�i7�}'^��n�ftO�mU�5������I;�PJm�*�a��R��aX�F�V�*��[�L7��^jY<6�q��pJ�L�d"����D��E�ط������v��4p���YRE�V �����~�n��8%P�)?��]�U^����˴z��Ɍ�iB3ïS�w�a��|)+��3h����2���1�ZM�T�'- +� +� |4S�l7����jF,Ԁ pc�H��E���wx>�B-��;}�Q�ڐ��d�rF-ٵ-g;�R�7��i�|�Ǡ���UTGH���.uE���aP�/ �03�n:��ֲ��[��b�Q�%KZ2=44�澒���Fx� +�nć�s�݈��E-3�s��*��F��K:��G� +�r}y��NL��t�7G�٪�A�ܨH�sDJaU��l��J��֚�tQ��ߟ��?9g+��m���Mu��)4��+jn�QS ��n^R6�M��PJ�)SK(� +)!���!��#3��:��h���_�`�(��r�}^UV�ݡ�s6�v���EA�@w�>3�d�[u����5Qё�B�]еÁ����3�V���^q�:Q�D��1�{�4�"U �{S�O���1��A�t��h��PTӻCSI\�/faqN;��J�[l���T9Q[?F�p�5����]���Z��[�㵾��xrb¦�j� +$1��n��P�Oiv�c�Д�m���X��S�R�4m�luB5KVS|��)�T{*�z�pC��Jv9��䨟�j �W��:n=����bV�K�'[��)���)n e+�� +U�5z�(��}�y��Vm�F��0�*W=5ɝv+�TF���� +��XN�e�I�������'@b?s� p����Z�Q�y���|�g��Kɇ u�݂u����+�+DyU�������s��ʉ��9 +!�]�*εd���Ξ���k�J�8��T�\i�kVӼ&�ݹ���o�k��Q��+F�C��o��اM�=�}��`l��[⋊��T�;�"U|�+�N���U��җTҁ�I5�j�����l���J9�\���ũ�s��԰��.-@�m�@��l(��X���l�j2F���KI�wԊS�^��-�V+��<�78�ϱ�Ꜫ �� �B��z��.{�ގ^ÉW +���[�[W��>�LG���X��7��D��9�� +��Ð;*-�!�S�vqYX��]�h�:�[(di��� +�.oDp���L�Ժ�0�����-��^;�G0�{{�'2�f�q�3��5u��#��������*����%gL����-i+W"t��4ƍ�&6K�l��r�.�K�-���5��N\Ć��r�=*j��d�™`əZ��u�q=�� eF���ͬ糴6ύlA���t`rd�)�V�H�È�H S��9Xx<z&�ŽX䰗�����{����U�݅�fI�.�n��Jݎ[ e��IdS̻�dZ���E����?��\:e�3��d�7����WܝBb�ӎ��&��L� �?R��ǀo�Q�Aə��� ���*d­P>F+�b#���Y��g�d ˊ_2��noy�m��To��L�-��GƖC�>��c��W���zZ�,��d�q�)v��M�u�@�[.n����NE]�Ν�"pR6ZN��6;�3��T��[� f��� ����L팶_'��gM��S�1���5 ��}�~K��TXB}6�[�.:�]�"h��vnýK����Q��U(���Q�L��E䰒����9�] �*���0],=F��H��yY��(�(m�ۢ`E�,QvnB�����������q�����[PuHX��B ��=��"�f);���Ǹw_L�ϒK*�����9T�`����0�J�S���V�4�{>T�3H� �/다�&�uL_U�d �P �Z�N�X괽$�5��S�b�ó�k���[���+nDy�KR�� �O���ؿ�FH�NɒTs�P',�z�)�q�I�3p�JlpA���Ԃ®R���Lg~��It�-��.[1g��&��g�V���I�/�間��'�j��;{��U�o�Zώ���Z��n��S�aq�1Y)��4v�Y�'M�}G�i����4�+j�D�}�v�N�Q�eX��T5��\��P��.w����R�����@��N%T�����qV�8{o���R��ult�@]��e�2J�[�nŦ�l��縰sW��a��[��W70u��j���ԣC��!yR9{��-A�kt�(+������p��Z�s�2NL���}����ڭl+�^ݥ~��Cu���{����y�u��g��.K�����n�(�*A�s�R�{ִl)l��� �u���g�F9 H�Є�-�e����R�`��K�䢡I��W�3����8�T�Ԝ������p�gF ��^�L�D��ZjRޤh +n͡@��Q���m+��jT!m����4�H* �a�E�Ѧ�kذ�N�)yߢ�q H��'d��i�yv�F �|F�?+ya� +_Hj��9k�s��B�DU��Om�4�(Q`;��Q����]=Eݳb���T����JJ-��:e��r8�.ոo�]���~�}�o��,����;���{�`�Q�ac����?�?����NUY��(��;j��TJ ����e\���`��$��_�`��ᚌ;�Ϻ��9u��;ř?,r�{�RW9�;;FQ�ý����|'e�Y�Η���i������I\��}�-��Nj��Q�[��i��M�cS�2�5B�� �1��;&�C�c�E^��I� ��P�X�za�hem��;�<��ޡ*αw�V����1{%�R�e�ej�`���{��g~e3!8���;�MY�T�S��o>�hC)c7tq�X?a�����I�|�ԗ�G{�w�)�C�C)��ߏ�^�Ti����k������ �Y5�Z�;�{ν;…��bP����l?4;̓��e�Իl5_t<�^�p�ݥܿ�V |GI�=����o�[�|�d�U�iL��&��ޡ���;�\�ߥ Ҷ��;��T;c��7�k����"+��;��zE1�n�V�N�K _�L�!_jѭy��wt����1R�%��3[������7�M+�*�Ծ���������ߑ�_ym�7�9�n�Z]���������/�����.���Y���ȫ*���3r�*s~��8�;��>O�n�Y௯C���g� +�2� {�|���<�;�� ^���~���烙��þ��f�a�Q�T�z�w�H�=@ɻ���A���S��j2�%��}'�~i���Z�N�o^m/���%vD���Dj������8� .�l���l���N+J{Ro�10���qJ��~���4�����ڇ ������1b��^�����/�]&�1�ߡ�~'������w���6�Ne����x�w�.���u�w��S�1u)��A��l0��9Վ�@��C��`���q�b�~�wG��w�h�;������}�����a��j=�;����ș|�'�u�a����C��P�8{�w�vmN��"/�z�wG��w���;�ì�f�N˺ߤp)v˪����8y�`?�~w��~w�N�SUFK5܂��|Z�<��Lg�A���-��d↧�_����)����}�tV��غʋ�#[�y߁Y�i��p�p�����Jz�wR��� E�oi���`p=�˿�:�������;,/��LΤ���Ӑ4�5��ps�*u�����)�Z[����߳<�N6N����爐F��; �~s���a� ��ߡ��j�p:3�y�w����6�N�u�w���>u>�;%�{o����Og=�;\O�,gpb��`J^�;����ÿ� :�;���C�|Dq�-j�����_J�N_}./c��l�Nɇw��w���)1�깃k����o����o*V;�)�]�;���H/�N�թ� ��e- +6�&7d�H9k|�ǩ����������g�R���l}�K��%_��RUb��"�9o��5�w�������v�A����(qe{��u|F�����������;��1yf��`/�Nj�3����?�����f�/�������u���+}��;�7�o��i�����.�"_5������N���>_��n����8�#No��[��wG � �y7؎5y��.���8�<u�Mڮ?o��Q���Ro�E@�1���7]o�`����� �x�w�%Jb�n�8��;)�9��8�)�ٿy�wR�Gx��wv��N!�ZZ:�;�?��.���Ɏ��鍿Ó����l?������]��� + ���No�&ї��R:�;)�����NZ�o<S�8<N��g�ȋ�Ǻx���c �4���s�Qnޥ:��c�'������Zo?H�G��K��&�Jd� ���j�����w��V�^�౏��>NF�L-�;�3 l5�x�c�����5M��Q���&�xf�.`�R�+m�כ�GT�%�����ʁ���K�^���Ӝ��!��a*n�<�<C�kb�<Sj(���`.k�À�}F���%U��<jEV5R����RrzC���$S�_7�C�  +r���,G��[�Y����1'�Q�mZ-1�<jE5��3�3� h���׃�� ��zxj7�=���34� ��}M��2<']� �]�E�;j�2~�Ŀ����/�O7��{��i�2d�ɹ��/��I�͉���pb�3�^�%� �����F��<�Q9��#�� �GMJ�u��lݭ�-�� +��� �����C�����T�f�����ZZ?<�9o/NH�&��+0�O�8�e7�(7����o��:v�7#�ٷ�q%�b:ʍ�;j��%Ɲ���R��@_�q\ƙ �R.�Q���+�Gg��}����C�9��ߘ� OJ��,<2C���³\�� �빼YxRm�,<�� '�.Sϳ.�}���qr���7��w���w�`��;��|�!�����C̩��0�P�����m/okEB�� ����YxG�YxG5��W�%��2�$���£��+���0�q?%fm�,<��lq�a�zXxfzGW������U��£n�T �Z��Vn�Q���g�hrِ;=?�d=,<��׼)Cs�Q ��b�d�o���N��(��.w�ң�8U<�tPx<�m��'����A�4��[��L)�(<{��:(<)��?�[+py���G�3���c�� +�(7 +度“��F����ޡ ���w���8�㯹6 +OSu��p��z"�Qx���(m�b��߮<(���FZ`x�6���.��~}ax3�6��0���0�K�`xG �"������[�����#K��<,<|]�oJ���b�rт�g �e��ǷlΗ�,<V�}��£Ē�S��.����,�Lb��p{�����ϭ�>JN�O�<��n �Ԕ1�<��N�`�Xwf���w)度���u�n7�α��6�h�KZS�6����7əeǺ�rG +��]�4A��}5��|�S�� �$��)@������V�8�^ +ik������O�Q׾(1xz֘�N �����6ɊY�� +�5�M�c�)��<��Fo +��4�I��<�(��;��u�Zfzi7m�q��Eղ)x[9)x[u +�W��I����ouR�h6} �z���A;K����Ԏp�J�k���o +^�r�����q��'�^����c8�w�F��V����'�vA�PY7�1�M��R�����\km +�����)x���o +���6O0��D <�������`���<Y6���cÉ�ּ)x�D7{9��)�Ct3)x��v�(xRWy���a��f0�PQ7� +'U����}�J(Ӻ� ^_<�Z�%�*gI^Ӯ���98x�9� ��S��G��b�'N��m�9xj�����i���ਖ਼��������<]�ߪd�<���Y`��� ec��O�1xD�gO J{���C�����I��m -�#�L�7__��<��N +H���v +�诿���<���<�fOWVc��S,�>���� �Y��^�� x�)V��(=�/����I��%!x��KA݄��aJi7�V[�CQp%!x(�t�<�$z���/aŁA�kt�<�M�S[���8�:�����Ǹ����8y0�J{����� ��?������� <=M� �3�� �`�����̈��x�YO�Ϝ�A�Jw%!x� �;���x,�vB�Q�h����[�� ����e_+!x� %�I�kC��`u�<� '�<��5��J-���QN7��<���k��:�o�?t�g +i1kXy��ϖ��l�����?��#]��'O*�MR�X� +�V�'U�֤�P <>���I�c�l��V��u%`N-���i�E�7)x��^ԙ<= �[�o +��[A��h9��zB{�� ��X��J���@��'����<��Ɠ�)x���V�)xxeb�{b��# �<��������S�I;(xع�� ^%y��c���N f�o�6��(;���f��1x�^�k�)��ߍ�S���~r��k��6O +����P�{���%����AFY��>��u �Î������� ���\���G��:0HxD��vO2Ѓ����7O��7��GH�M� «�nֵAx<�����ƴ0�«�\����@V� <�qտD���}rgOMդM�������Tʖ�G�I�!�U�|���Z��8x�����ZN��g�ϛ$<�\��3��V&�����oji� ���I���$��9+���A£�L%�I£LoN��(�#�r��P;E=£�0R���Q�q��0"}j� <�&����{F�4;��꿲Axi  <��V�7�j��"���C��k��(Ng� <�At+8�jjт���4r��������L�58x(�[o�f�Byʓ�˖���SҌM����⑹��h�����Bi�� �2����k�T�(<�Ω�=Yx�C�w�Zl��c�� Y���GnO���ᑫs& O�CK}�4<�X_��z��9��g���Oĩg&xx�_@T�yx +u��W���ѲS{I�b��W}n�U�YF6yx:�����sg��k�fC����mU*3U}�����l,���ss��S�x�6/4g.[m��k��֟ �W����t0�!��jjy���<�x\+r����:-od�'��j���`�il��ģ��W�)��TYo$1P>?�x�(s#��]���D�A�ð,�xJ���H<2o<�'�b�����L+�(��T��stB�p���V/�I*մڠ�T<��€�Z#ӵ��xTv�eO,*{���P�X<)��9�xTw_�X<B�lu�'���]��$v��ъMo`�J�Qx�l+X<���� ,��ˍ�X<� _:���`�,Sb��H �X<T6u�œR�&H,�V�Ϧ�oS�$�sT<S� ��< +��W��j��G+ؘ��Q�D�ѡx�v����W�~7O�G��h��֖�:�̠��\�=MO&���Y�G3�tH$��M�!'����E $^ť��sL�Z��~"�9��ۙx,���&+<�%8�x������Gڏ0�x��fiw0�X�Q�L< U� Y�ģ�`F��� +�*_�L�J���'���*/>��'�xՋ�.""!� �� "�M�'�%n�ƿ3� +�=��@��73�L"���ޛ7&2�a)1H<�o޷�H<T= +�ē���8O��� �$.|< ��w7O�EO"�V+��S�x��S[Z�|s�?��Y���V��i�f�Mijm�r A����,�n"��?�x��h� "�e*|i�����I�k`�����<�H<����p�PK�P���L���/=�'OA� �5�xĒ�?O(^��3��'�M�Z�c��Iy% �l���1�$2���H�+�x(�;/$!��J"� ��f�@�yZ��H< +!�|7�� %��ģ.���W�P{�H<<�bO$�'����)q�@�4Rh&�x��*t!�p�~���xfi�΍�ӻ���`�a[�F�釓hK$�g��ēȴD<���i}�@<��'ҹ�%�B" ēҿ���x͜����b?��@<���Y'�B�/�0=׷��:�x��+x�S�@<Z>��Y�P�իO��A�����o�-��G0�����Q7|�j�%��'ܟ��Ǹ��ފ�M�(A����L2[�ix����'�L��'�L>�xt���n ��׻�x(���^J���S�n$��Z��ލ�#�ɪ�D�Y��w�a�U^����L�7��=�xxx��n&��@��L<�W}���S������L��J��g���L<�3�m3��,�&���ᅯ��G�����&��s3����~:�x�ls3�,����L<�\~L2�S�� �x�*НL<��yKN&^�U���ģ��`�)���&�y&3�x���u&�E��� +����|g0��eqx� Hvkn��xJ�6�PJ��ig���)�j���G=�����[�Uۆ�)�7�����5�om(�.6��ţ)�,� ų���;<oT�U���x�������`U�o���<;�z���|�昤�S'X<K�}cc��W����x�ፐup�H��,"�xJ֒���x��& �`<}�y0;O_�����Z�\X�f�����a��ƣ[������5+�$�a�lΎ��air���� G����C�͡���7n�t<�,N���a|���.a��X��( �r�I��|�� ��&d�����Ż�8�O��'� �|������p<�4��b1�Ο����1<\p<���ϴ@G,��p<z�׼�xJk��L6���h�����d���†�ȻD�Q���C���%G�!|~��i����xzD�yt4�C�r&UB +d�Et:�x(�X�"�v��.v�>�y��F������Ҭ?'�x N��V�b�M'�il&�x��4K��#�x͹��j6�/6�V o���x���kl<�VX~��(�����xԿ��P�>���k��C%�p<����|N<��B���hOq���u��p�n5~���Y̹�x�r�ضp<�}���AqxG��xd=��G�<� ��I����C$ep<�1ۆ�Ia�p��Ʀ�u�~��:�����x���@�����M8�N8ޡ��-I���x����x �ޜ�,���3�x[�nG��3LB��Au��%�8��n�&^�,(q��P����5#��s4���6���P�y'O�C��ӳD�D��t�'���d�i���*U4��~̯���Jn��ط8����sZ���l�K��c���H�� &�p<&^��^p<s�jc��P��N8g*�u��� 8�TU�&���G����Y��� �Sp�P�p�J}]k7O���w����;����S���Ce� +8����B�g�O6=R���.�n���H���Jfb�'��d<�[j��;���i!/K��I�SIĢ"$�x;�xR��cU��$�K�(�xR�x�D�i�V�{_����o]}0�|e���x48���G�.�T�����T���C]Qv I��_���'��ƣC��A������2lEk�h<8���O�ڗG�id]'���:�F㩔���>�x�yU� �q�����O;� �c��e�3�ߘx[t$?�)�� ��]f'�Q���-��'ž���c�X���7 ���H&�fy0�/�k�o���ւʪ`��Q&��`��O�~��t��e +&����q�Ҁ�'�x[8�x��4*,�;64��Eϊ�߶�x��x4�fq6�J(������D$�<'�����yUR��ީxl��e��Ljd- �$� S�{G�_��5#�c��G��D��P�"ώy�?L�p� ��: +<��#�?9kkB~m�<�xZ���t<�Y�ߦ���n_��*���W��o��G� ����g�5>8kMƉ������p�0O<�� ��x<��� <^A6ˍ�3;0�M��)���^7�ZcZUN<�h��C���#-`�b��DW��A <�pp��_V�z��p�y|Ѓ��[BT��R��x�ξ�xd͉������n>JDp� +<<OAakl?y�I<�n&!Cu`?�xZɒҼ�x��!���]A��g�{��BK:U5�*��Gg���V��5��t<B���o+'o�A��;[רS�lf�p�� d���8Zz��:uT�� �Cl�8���I������7���I��&�xR,�|��p�ͧg�!�-%Px�����㩈������bx���x�r ���x������;�-ձ]p<:��ѿ���c�&c)�h�������:�wz���� �#_AGG'�:�g����3U�����nLK����+B[� �S�;��}\s���Q�6��8�R1������:7��)��d<�)���:��N��sJ>�x���c���b�3@xn�f7�D���eխRS�h�C9�x[54�>��m��*.�O��x|��f��!���� �a�лu��L��f�05�~e�7�� �b����7o+'o��ƫ��gs��ج��=� ���<��,� :X*����ׄR����OK�Yp����'�]��m�v�RS�\��m� BM>��,3X @�y ���<�hj��Q�T7K��n���3S(w��{gi����,c�����]�K;O-S�f��x<S{�}�qn�oy +�/��i�LE]��P��u +��X���#���\̥� ��ǝx<�T�ǣc��`�F��d���kf�R6O�;�D�vy�B���%!�Rh�����3�r��5;!O#�v�ǣ�~z?����M�x;�xR�&�P>��^ �;�� ���a��[��ǣʨ�ͭ#Ո�ZӨ� ������I�v>����m������﫤4�h�A��3wF��q W����OC&>�x���|�/��=n�t<�f#t<�������'u�v���q����ΓO��\��7�Cf���.�����o{���qA�k�qe��V�t<��fm�Ǩ�� ��������ՠ�i=B�&�w?�9n<&"\�<� Jw( o�A�S�k�D������X��f]�ś���z�ku �$2B&#�k3�) T��D�>���@�YZ]��`�i�g��'#/F�}������� �ʉ��j ���Rj�<�83/Bq4cB; �B�k%"Oao��"2��@���D>7M���<S�e2�x�zT�|��#�E��ȣ1��@�5���8���Y���K��Zy(����<�|��#y���~�<]F{������b"�<�X7����o/D�M��w�����E)�H�D䥚=T +K=����ZcI�<�~�J�����!:�6nD��Y��g�l���lj"/Dj ���>jJF��oF�y�j~�y��+��.F����4�]b�&�����z(vU��:SM l������NF�r OF�y T��Zny(8R����qy#�X��0 �;*���8!y���D���[rOw+ +K���C�(���6 y�M:1F����6#O�y#�.Ó���U H����,0� y�Z�c +H�Qt%$�PHޡ:$O�O��j:�����G�}\󲆠��G��O'%������� >)y,8���0�.\����}K�t�Ճ��M �XHW��V��1��g�::/mZ5y�4�4#�=�[���G�a� �i��:� �ў��+, yZ��9�&���K7��c.�&�<��l�s�*������* +��0����x[9y[ B^}�]� y4��: y�\U�t���)c��]������ y���f��|��V��!R��|&�t*�����ia�����ӹ̻����N-ϰ�8U� �5���:(�^��Ov�X��}E�N��e����>�{?�Z������ u�bj�n��Hx����?�ݙ�a������O̝6G�=��;��(� �܇�wڌ�*: w�lp'a���v���{��z.b�n'���<�:Yy���l� G� ��H�]F-�����`m\���ߠv���|�I���*�%y�1����7&-/�4���\0;�n+T6w��v�ɲS{~{��߲i�S�d��ul8�n �.� ���=; ��f�vq��Ȓ.;�ͯ{�+�� b��R�>nyt��^K�'�N�+q�WW���c�V��z���b�T礊 �kn�~q�Uf%��ho����Z/J��E�o�c;�n6o�<u�������D]N���%cҲ��җ�,/>]Q�=.r��+Z9�ړOW�J���ӕ��&��k����[��tE�-���O'�b�|:) ��ɧ+c:.�tE������fN�X�4�tE�+�w>]����'�t�n�y�����Ɵ�oNdž�L�O'���-O'巈r� ��^_���XQw�poN2_���U�������[�zx%�/>������t��o�� +!�z��$�E�x:)��� +<]�;�{��JZ7��P��7t���7�ө���ea�V�Dӽ���L��ev��p���Gp��.���J�4�FɄ�i�0g�L: �]H:�0Ȥ8�t�[vH�z����Ɂ��5�8:�DJ)���F�b�覷�'bNo=��'�N�8�R�u����K���m�(t��ˍ��W���Y���Y�|�$D�= x�}v��D�D�,5�������>8���pς�ϩ4�<�!��‰�ۢ�紟d@�9��wp�D5�0'D��h��\ +'tn�ΜST�B �d��� �[�aKޜ�՚�7��Zl��ꅸM��/jd"���R��!���/�+�+J�j����f�0Q;hsR�6&}��i�)<� i {$lN"�` �C�� +��'m���hVEJ�P�߃�z���=�� �S��'mNoG��y��T�S妖�9 m��6'�%\��pYz�ڴ9���.ڜ�>6k��Ӄ5�gk%���,��� �#V� endstream endobj 68 0 obj <</Length 65536>>stream +ts����o�9��q +��/�l �|���.�e��5g[g�6�Rp�9`s������к���?�}�5֜}�9�����Û�nR9Xs[ ֜6����fȉX5q�8Ys�o��q�7>���i��2�`s����6l�qeC�l��� ��]\Y˹���p}6��6�Հ���ڷ)r��sߛ6Wf�޽}��#� �6���6�ՠ� �T�NT�a���=�rqe���Hv0Dw��6��X-_��Py�5��8���U���k��5'�a��9PVë +��I��);&����z��A�_|l�F�!g����\�9�������pO��X�����jĿ��~��ulHS���υ�+�M<�q2�� �Qs�r����Bc��X�'��u������ǩE� ����5��@�郸҉�Sܴ.��jNj��qמ�6jΌ��6k+��mF��Ԛv�͚c���ngOTkN�z�;kΎ��Ś�����9E�WQSh@�4�R���"�����܄�m������Wݬ9��Y˼Ys|��y7k�&�yc��I�9�D͙�:Ps�7�� ��m_�@͑�cr Ԝ^lt5��5w������x�u�G�b��9nȫg�E�f��5��9� 6����s�=�K���ȩ[�>��ͱ)#���5u���as[��T6WTZ3�w�� +Q�Z'l���YA�+�;ހ=@�<�.as���aÖf�B�Ñ��+��&�Q*�!E��5,�v���fh��_b�Z�XКC��̱H�E�1s��=)s"@�dn%y�s��1�䍘���壝0'�(C{���j'yTO��/�j�ncy�Y���b�u���e��D�!<&��isN��V$8�WN3*���� ��hsR�>_�'UN�'�������K1�r�J)�D��$`�)�G,P"��S��-�r��~���2�@�I5�k �X�Z ���)'���@�I`� �G�1]� +���HZ�����#�b*��D�–xl��V� �+���� �Cm�qvu����2�|6�(W�ո��km��Z7Dn���+LYJ +��i�͓W�k�y���(��"F�‰�K1�q��s���(ZM*�t\Q���V�v�.M��F�ʁ��j�㊕߾�����5t*��@�IiO�'����+a��8��*��CQh�B�I��r���e-�H�B�K�:����8��( t�VNt�Vg��8ԂiW]�<0E��;�{=��8�m�xo(L�7���oηot�VNt�V W�[.�: �����8��S�O�.6)�㸕Q����P��8��sP�RJ��Ѷu��J�r�Я\]D�_���ʉ��j���N4� W��(_�8�^oUD�:78.���q�8�I57� N�޴❃�� *�S l���)F���'���2#G4�3�3oh���|�]J��4N�xNh�����и�tI���m��m5�qE�Ҙm n���{1�.��e��Y^�(S�/��`���-�꼸�ɝ��iऎ���AxY�� �Slz#��<���'�v-�R�{�'n &.Š�);��\P�U�rA�_.�mF��(��������!�u�Ľ�L>�s��v+J:��~��O�k � ����4�QԷw���2�1��!��l��� ���]d8ٔ�gn0��V��\�-X�� +����v�E ����B�1�}� /��J(�VN(�V +����ɖC�O5g� +� a���)�dv�A�S㷬�7N���uS�t���T8��h�L*�6��y�?)S�����f{��0A�(\�X�8n+'n�΄����������t2��|��Э�V��}� �w�9���)�=_y�̈́+8�Ϲ�p�V�L8)4�\P����I��C��u�C�t� �yB�P{�L86�c�̈́�}��� ǽ\�o&�`��#~��?�pz�~s�I*�$�P�A����L8�!��̈́#��A�(����?{3a�)2C2�pX��:�p��xj2�8�s� +���fSp2�P���J�R6�8,l� GJ����pV������ӷ�7o$�A'(��5n۴��g�8O&��U7�2��T=���h׍��E���@���"�L8��T�r1��.�� �p� 4D$�\-?'�� �`¡��m&��%V��pX���9��᱘h�7�9�d�)el(vt�_��I����P8E|�( ���yka����‘ծ.�p$x�Y9N����T8EQW}�M��sI���I% +�T8�j�� +G=k�� +G)�멠�eQAR�P�yC�Hf�f *��5t�#1�B���X*�K(\���� �+0��qS�l���Ѵ���p��1��sX8�"<���i4ò%�peE&7�p�uS��T8)3� +��#=�i�gzZP�P��H~�C�&(m�u +ۃJ*���1�T8���z *��HA��POM�E�c��K����!>�p(,N*\������#,��@�8� +� +�5 fl ���g�P��o����E����H8'p�G�R[��|��$j��88 o[�G���7 N�c���ӌ��Qp����9Ip�GQ�؀ɬe-T�5�1p2��D*(p����m�����o8��i�p��Ϸ p��j7��� ��7 V��Fz���7���Q�7*��H�[Q� /ٓ��к-T��VȚ����7-����d��n3 �� &�`�5_�ð�P�v�� +Tio>����K/7���=��~�b͡�~C���~�h-��~CY� ��}�����/O7�o�^lÃ�F0ar�[�穛�F���a'��H�\�7�gH�@��v��L��Z�ل��7�$k��7=lԜ����}Snsfw��j^�7n�ד���A�p���Hc�M�b���&� +����|E��7��>�qo+�F{ӿ���"۱.�i��$���9 �TԖ��}�| ̛J�ђ����?9�;sEqd �`^�1›�sԧ�{��x��9�n$˛��Q +ӽ����u�Q$ܭ��b��#�zvu_�$� ����v�˳J��n�?���ECDdӍ�&S���l u{�4�nxϾ�n��O������6�M�Wd6�F+�� IH�ܦ�&�MYYeSN���7v��rS�)F1�rS՛�;v�^9 _U9�M�߯9,��)؝�?�Mc � ��6%ȍѧ|6J�[��� r#C6�uq�� ���0n +9}uCܴOy^K��v+��Iq5(��3nZ[� ��^g�%'�Mm(��8�m�#�m�{m͒� oS��!# +�?�ONt��� ���6�v��QV6�;� �e3ׅm3�� �K�i�g���@#��ȶ�S:Il��,'�A +)��N`���Z�4s2���2�tgF��s�����X��u��2�3���i�j�����<�ǰ^�g�_��ek'�M����ӦL�=�iS��i#���Mi�yV�6����iS�&�2m�� B[_a��m=+m���W��6�+�p����f���Q����2��AfS��S���c�\��tU5\vvtL��$����U����q1��aa�H6�i�U��9�e�O[�F��T���X��T���06�V��#���Ql��%�Ebk��$6=�<GbC(vD��t�q�aS���]`ب����i-�1 l���oG���Dž`%2jش�]Ne��ͪ.��c��Y,��mZO�Z��\�5��j�^��wN̘���$���Lj��kE�����|��]H�&�� ��3ư����w�ܵ&P�]Ӫ�2�'v�`�e�t?^�صB�� v���*� �3r�]+Qiu��P��x ��j�� +5��5�%xM�ۚa�xM ���Pl�J�:w!�k%��F�Y�޽��+��'x u��]��Hr8wM f'w�`���殑�cl��ܝൂ��W7xM���<s�5�Q�� �i1�= �^S�W3� ^� g���)�N�O��TGu�^S:����Y6@�Z��T�l���V�U���k(Nb���1o�D<_��&a��5�I4梮Q`G |P�����Ԋ^�5��e���8^�A!"�Z�N�ԇa1�k\B���"�4-�b�J��vM�3+��Z۽!0�4�Os�a%T�^ecר)��Įb�um���'v��x[����(K�$vM|,����<��9�k�ko��3=���"����I]+ʷ�r�5��j<{7�Q-$= 'v�Ph���GLJ�f'�z��PY�xM�P@"�kR�]�5]���F�׊&�IM�ݥ�?��Q�iI_�-�?�Z�� ^����1�Q��9���l� +/xM���xM��WE:xMug6��5�&j?K�Z�6����F�y����<�kzQ?�7�^��B?�b���zMB=�k���n�50�(��f�U6w ����������Q����6�k� Yq��5��ms�h�8ӹkʖ} +�^�5 "k-�����5�k�Д�n�k��=��T�L���]��CA���f��6w��(��ܵ + �yo����>��h^��5�����%�Z��5��os�8s�1�]�ՄpRp�(ۧS#�k�l��5 ���1P�<��&�y�(��͕M��*��VHS�Scr��E,�ܵʲ�[��FBY+���x�]�e`�|MQ�� �Fe���Ʈ�K��b`�-��_�5�qv �r�[��#F� �f�^�F�2�(N)�S�'Oq���lQ�)�|n���y�$v ŗ2I]#m]��} +٭oC�h��X.l�~6V�\��@�A0ה +%�~"� &� zi�8 + ��ٜ��/�0p1�L}츄�)6GMlB���� ]�k��� ]�2���\�=�76�k�-6.�Z�uwm�7��� � ���$��u�=�kZ�ٺ$�k�����Y}t�*A-��5M���q"�T_D� �kƻ���V�v�oÑkʿ�� ���kZ [+e� +�u�‚�F������}ݫ�#=c��5~�qk�z$K�5E X�m����?��[#�Z���5��~��l���0��=��/]6k ,e�����-��e"Rj#t�5��f�Lo*ɺg�-�=� 4R,P�5)$�.�Z!W:י��E%=ɣ!���E[��2O�����'G�3�i��'mM�{�;m�(?hk�E� U���R��5�J^Gr�Q�w�'�[C��-`k(�5(�U�볺 i�^qy4�i�z WR���w��hkx��X�ql(�U�X�V��V���U}�6�r�i�����ճqT�à�aLM����!��� +�cA[#�D��I[#����ʼz�(hkR��� �����B�f�׾��#�p��խQ����%8j�yOt���L���Ƒ�Ƞ�m��m�|�����#,!t��Xb�. ��pB'n ��ୡ�N`��������hEX\�u;�|��&Mޚ�&�����H�69j�Zʟ�������ôؠu;pk�$R�u��P_G��[����6n����9��w���)�~�� +��f�7�l�,��5f]z�O����6m A����q��mM*̠�D��۴5����5����ⴵ�x�'ik�� �y���A%j��hL37_&�J�#x��PYEm �;��bNO��Oܚ3ar��vD��F��-R�cK�$���B+�k����ϋrtt����B*Ͻ�1i�83����'p�D�/�k�PS�\�q����� {��� ���D��⭱�k'�Mcf�^�kù2��t��5Tܲ��&� _�֤�`��k���7��]M� \���]o����V!����5=�� q��͗ρk���s��\�� ];T��J�:�����O��kX��~�ب4;.î�����v�3 +���%xM���h��5�6�����6xM�}���>��@`�*��4�x �Qs-<�k�������Z^�^$x�P�"��xM�� Tc�Qn����(\��5��N�ڡz���n�Z�8�yo�N�򱠮����˥��k|���V0g�v� �*@lƈ]S(���]#@L]y@���-or�W���Z7s ��5 D��V��]�5"�_��5�$�#�r��6x������Q���(��i�{Y�[�=XҎ[O��6��ꂭ������@�΍ZӺ���IZ��i��t���Y��xR������52 +ac ���b�/7z��hVԝ�5���N���/Bp�����4b���<�f�f�V'[m, �'[Mm92�j +�I����mB�B��j�s�4װ7Xڌ���}A +3Ia��C�$�ײ>��C/�����'JMqSB3'I-m B|��G�u�Г�Zr�T�2�1j�?CE���^7DM�&+>��VN��V���h�t6��{���BN�8�Hqd���Ei� P#����O����b�Ͻ�.z���t< �j� �� +��%>�iD��Jr���I�i�榩�������02�[88I[tf���D�)���IL����q�����N`Z� L��f1Ah�����n��M�Z�S8���T.^���o^��'�'MN7Ԡ��4��)�nm��4�MG�d��ZX�&�aU_���{�����& X�p�&�W�[NI�f�{@Ҡ�΍HS�k��C��>ܻ�� 7`IQ9����mᠣ�hp�I�F�r���V�`4�N|^��G�K' �뛊6��8�h��Ro&޴��H�n���ſOZhC#���n�q��R0�sw�B�+J���%�3v`��~憠A��6S�{"������jF�f����v��@+�v"��X�8�VI@3� �?��&F +���V���=h�U�v +��'�����kE�y��˅%�3��_oY7��j�~�[�[��e��Eዛp% �o��z���FZ�.E'�I��&�&�i��T��N��Z,4����Lng�s ФZ�3hR^<�Ǝ������ �A@���щ4��tNEf�5 �:M1�g�� 4�N�i�@��V-h�r0�L�RSߞt�# l�N5?V�0��P���b� `2~�^�4�޽�4 �� k�� �|�IA�J�^@�$X�I@�8� }B�0Z!-4%Ҭ�2 h��1�� A�j�vA�� �M�EN*�Ҁ�q&t������xr��49 Z�����B�������V��J�n��7�(�n�Bv��9�ʧG4)���Հ�i_F%�f����Q���a�XT�8m -���)�4�Ɵ�L�3IJ�g�{�t�ϴ�u���I4P����k� ��z����� +��`�>˦�iC����>�z�>^^𳭜�������3�I/���� *T+����ջ�g��Z�5�gP�>�]�VN��� +���P�f�>+j����d�I5��`�I�%��)z<+v�Ϥ2j� ���U��H�����W�1��t�϶r��RL�i����#͊�i2c��g6���ǩ��u��9�!��T��H��'�;�ޭM����3�:�Ay��̏'�|+���v��$�27� �9��r3γ�ʁ>C��5��ax`9�gR��\�3}3?S�3Zŕ �Y +���~Z�bp@� p���~��T�aa�<Nε4y������gxƖj�d+�Bn��>�o��}�㨶������Ot:��3�Ҙ��8�/���E('��P�|F� կA>�o.G��3f<���3lW�� � +-x'� �=�g|�S�ϲ��"���`Qlo�F�� ��A>;T'�сG�d��[�}>|�J��� �ajΪ�$��Rq��h:���I�U�[������+�l��>S� �4^U���w����M��d���퉜�j��p��$�7ښ���>+O���L +�J�LKo�]N��Z'�Lͮ�ѩ >S�.���}Q�@��3� {&�V�d!��v�����:#�ᐳ�6x�8��Q�gj_�nB�h�R�|��B��d�r����_�����������'؟�� �?�Gеl�T*�R�����[�I����,�P)|�̻����8~ό��]�2���0����<���"T,�"�!)����'��-?�����f�ޠNe��^���g�H��Ji n="-���E��ǏV��G�T�����]E�k��at�$�V��\K�>� F��u*��JA�8��Ӽ�XQ;n�Ѽm��hƊ����x�bx��G+�ؑ‴bF:R�+¨z-��}�����6�.��d��ߜ%���ӽ2�x��!�oS��*�����Χ����2W�K��J0Uej�(�u^>�?�k6]��ŊH��{�����yW�����1J��J��G*�H)LF=���`���4KԿR��9�����FMKe�����K��SI�&w\��V��`*va��n�8ڣ����)\7$ĩ�Š�*NG��N���*���l4�����&���z�"�TC-&�B�rG +=/�yρ�D�!*I*ՊT�5 +��+h�љ�{+?��P_/� ���1=ߠ�5w6��^��L�?^f�5iw�=:�U����R�cP�K���7&M����C����j�)�!��'���!�����}��0���~Ҵ�ԡ?�O��o�����y�W�KBU%� +?ۻ�ډH�عN ��^g,���U��<]����zui��C���}X'ӥ��ֶnc ��] E%"4�] �G;rQ$&�W�/�lal��D��T����� +���r�x�f�����?�2�Y����:�>��7�_~���6��n��D&3�x�� ��\K��UU<�V�h]���,@������ SFYV���� ����y5�+���A���@}�P8��-d�� ��) ZFn�a��B��*�H��[$Ŭy�;]�7�}�my� �Z)̬($פd}W������ +��f&!x�����jdl��(Ha=��y���G*M���[;��2p]8 z��v�L�a@3M*�7��|�C]=Zt�'r�+�&~���\*����__����Z��T2{(͏���3��\|W����Ү'� + +�����eҙ�n�H���p ��S��޽��6~m�rZ־F�2m��bZ�a�������Ug�4���;�olۡV��u�޺�RZ����q�+�����.�j�y>�5�ɒ1Ql�d� +��!��Rk�ZՃ�U��$Ylz�K�M* 4���쪽�.$�g�Ԭ�D��-�R-g<)/���3�RT�(6��&_>��F ��P�d)�/]�̂���Q���+X� +�5T�d90�^��O�P��ʃ܀����swm%����Zh���TV��z�G�1P4� V6���IbC���� g�8�?!���[7�mD_Oc����[�Cee?���0> ����OXM:�|�bh��2���"Xl���T�(�FQ} +m���GN_�c/-�g�����?�.p)�b�O��;e0~K,�M����R� +n�������!�vE�{w��!��T8��8�{ܔ��:�VM����,6�i�^LJL�4X����F���T��� ��q=f\o�u(���!V�M�j�g~�[�k� �[� �S�L5��m��)Q�ν+ +���V���}<��"�5J�s��Uh�#��EU�jfU>�mK�q;�ڄ�X� ��ey�fZ) c�j�$R��*�� O�B�������#�w#p͓f��ic��Z{X� +�ά�]�Ê���Q���9�ny��V)�AM_�n�T8S_�y���6�O3��:��S푗�_PݎV", Y�+��J<����>qj[��d�V�P��=�!�'Z�ROX(�M�uE����م����<d�H�黒�%� ���AR��o$���i�c�^۶L*N1zI��Zn�z֎��K3�Ѽn �i~%��XZ�-��~�bo�75�-��Xr��ʷYl[^4���@> �OZ5����b��.Ie�S$�e/fZ���$6I���ߪ��s���>پR�$6MK��]�V�z��n�U�SQ�C�ض���׃�:kf�՜�\��an�~T�BXLh�2Z�`���rPx��؝����"��>a(�ɇ�����P������� �RՂ��5 ֧n��m!���$�)���C��fyZ˹¬��:�+z����ƒh��U���ILK��z��#� +��(̲Z�{B�'�!b��"�]���)=gH��C�~��Ph +��E��w�v��c����Ǩ�Q�w�)��@e� M�:]�@��^�jS���k�bO���?^u�p�{n��NG�6D”E>�f9vh����`6�x�J����Z��)�ejc�l�.F�V4�V���“�Ta�V��ƳiKC ��zpv'��X������b����H��v�a������ç��(�,�fgbT�K��ՖNV$ �6���Ղ��,wW��c]=I:3���R�f�W8�Q���v�:�k-'�0��DR�v,�:��MEA��};�T���6���1��a,��P�����?}T@�P�I'�s&w_[���i�/`P�㣨�c�g��HA�!�NQ��+�d�=�KR��a�Y)��뱸z�Rq���BO�o��D�gh��ZS�7����8v��[�'�(� Џ�]�% n�l`�V�a�e�3�_��1>��y��4TUHe�*E�1�L*&Q"I@H�#���_�Đ��H�H������I�V��������`���=n>P��TN*I��R�e��lU˅��g�Xݚ���b�T������Yq�B�lֱ��&{J��ҷC�O"��9y�T��m���J�� l۪ +��S��d��P��4���I�$��v�a(�J)$���-����;�ѣ.KS* .�\�M� lӐG�&m�mtm�����V��.ũj#I9�� ũY��[���z(��+���8����<�����#���B�$9:��eέt�n�l�o%�:r�y�jӔ��G���S�̩'���!��R�q�f )�m��]���W�s��v貍Y�ʵ�m�n~�4c��@���?,�J�9?�PUI���Ovھ���k(NŮ�WF��T"�R��dU�)��>��9��#��-w�æC����u����%�o�y8�M���>__h4R�4��v���ږ���k3R�)ġ.�Z�X}Z���wm�OJM� q^��X��"y� +�'��c���5�/g&�g1D��΢ޏ���̍u���Z�m��[_�L��2�L�����F��w1p_V��V�vkO9�{ͮS�o��� ��r�]٩���y6�G��%'��r�z*�T'�k��1`�VM�� �B[1��4[��I4��f��}�4�M:0�Tr�I"ThZZ��8q2m��o��H���M��BU�k�e#���}�<�vc�a�3�%BgZ&N~�vS|���^o,c����j\�Ր�b7�����d�ۈV ��3g+��ic�x���"i��@+�N�;�{8[�VQ<��|9��w8;��)ݍ}��"��Ј�����m,7��8E¥P�ң%wz��81�Nk��|���.?95]Ĥ��B(����*�ߩN}�F���N��H`5OF>KA��s�b�L�!"��":����8�V���>h��"�6z���0z-�� -~ 4���n�A7{;5��Q�����mQ^-�p�WN��ԥ�TY>s��$h'.�� IwC}\TU�����p�p�k�H���P5��Q� r=��u2αS=�,�F���Ue�M��KEl�����M_�3�S�{��Y/���\���*�~�6����k��/"����/�c�ݤ"�<0iR�S +A((���u��p"t�N�\��G��z�ig���p7�v��' ���֙C��j�U�)�n�C~����-�ˋ�dže��ԔF$rzO��v�ؙ�xvw�_]�W&d��l�H�Ẹ�g�OҒ?���E:P�2�n��i�X\�n��[H�ݤR�B(Q����<�(���[�b}�ݤ����%E�)��P^;1�dG�rG�%xq�� EͅԠ(1p��[��ㆵ�μ���$�5dO�5d��l���*������"} �1��sp7�J�(+r���'�Ql��������{Qc{��bk�ڒ�������������e����=�(�액�lA6�ͅ�j�1p�2�d�TJ�����S�T�c� wӰNh�q��Ҥ�k�1�z��Yߐ��T���s����3V�jG��"z�8"���$�<N����^�� �ug�lV�U��g,+���_���B|ti��px�F���20�+Y%�q�+�JOњ ���n� �H-@)�Qs���� �ˋ�vĽ5��mN0���t��n)PFJ��շfQ�[��vU{얪�8&e�P�D�H} R��0^d)�{C��T#^.+�`tQu�Vf�o�TUB��`.�ܣ�,\a���}��4��C��h��"�9$��Z�Ɉg�?<�_Xv<���d��xJ,���m�TI��׍9U�wy3�/�B�6��֚=��X�z�����(DŁ� [�D�� |\��s;���Ր���pX�3})�c���}-�O�o�7}���?l���E�O_o<�nƆ�Q��Q�B�Q�qچ�d��K���a�]����˴㴂E�ٹs��y�$����W���zՋ�a�>�I�[g�BXcyAh�^���xND���H��0��T�ICi]���7w���W 3�o�&�,� {�����D=죠a?8'��L��v�vZ���m�nD�2fY���#��@ +0��������t�1(y���m��G�r�V�U��% ��/<��~� �j�e%s�� ���=�e�ʩ�4<SŇ7����F�aT�u�����`��>������6/�h��>ۤ��D=eӲ�W�O�%��*����rK�<�k�a�?�f4�H�P5M$N��� ��7�O;5hR@NKa��J��U@`���/`�!� +��n�CM�fd5��%���k������J��f�i4����|ţ���*a^���^������z]= cܝղI��MN�gJ13��Ft��8�&�31��h��@�%qd�����=Z�oS�+�3m?�ݝ]���{W��VM�n��]���0B�;��zT��$c�R�œ����0�8�s��&>�0T9 tb���1��)��8���B������x�i�J$[�Z�:�\��妖����7)�/�Ҁu��Ry!՟���dxq�`��(��+V@9mO�qDZ�XS�+;2����Y+���̃�F�\�6�T�qn�MV�B彪��ē�S�D�?Y��S�G�sQP��7W�c:=�L,T`5�}�v���=j'��O���7�s{��9���M��3 �t��L�}��fа�##�`�O����ni8�0רf�%W�=r.F9���h܆$��-.K�}S +t�]"E����}֕B-���|ms�����5�U��� ���@�'gf�|i{��cp�_E��^L՟ҝ$fL����/��n�3u,��)��3Y�����S4|RN�w�Lc�iޢ@WSAB�ژQ��I^m�)}���(��\9&u H�W$5{Ȫ��P���r:�4U�`�����beni�����r6�"��C��*�� ?��&��Y�D'�07y�#ց@��c�-\�����9��dVpj�ЊAO�c�dm�nA�������iT���IX��P��^�-"��]���|�ۼ�e�վYs�Y�RxE�a�j��ќɂ��\ݰ9�o� o!�GXz]8���Qf@jxz����肺Ul9Ɉڿ�is�~���7� E�GT���FRh�i���=ދ�Y +)үl� ��=�Bb*�U�٧ž� +ڜ�bzQ�@d�U��( <]U����!�ɰd���������[�Xf��U�yw$� �MY%��>�B�O?�g�~hP��[�dxd�-Ohiu��~�<�#��|�ifN>����. z6���9���ô<e���R���;[Eg��J�;3���G�N��f3�*��-[�'�D{?�B�Ƞ�17��d�lېH��N�'`g��/�@)��%��^ +����SSQI�.�Y�аM�.=hsR��A^�,'��+h��H�� %psR��h�b��;��Y+�>�oF=) �eE,uX�C �_�;��.��E�V�4��5�� R�B�T�� �\' ��d���[�~C�3lcic�V���� ����â1 7�����ٸ9m��Ԓ8-�$[��G��S�tR��uڲR��rw���������O�/�<�ȸ|�WD�Xe�';1qs��q(��p��DJo�';�����30���Z�4���8����R$#�MT��\cg��vF��Y[���H�戧S7�ꅆ3��2U����i`��e�i�À�0�-��S�9�9�]�(��^ ��[�oj˪?�󇑇�]Ky $/cQ��?B�K���͡�]��H�e� �(����L(�� +��q�$2x� ���R|��U�Q�<�ޫ�CZ� �Ϧ�Y�^ß�Њ)'��j]�J���H�]����#<�Ζ��fC:��+��lN�Erf�)V�X` �R�Wj�@‰����Q�����! .vϔvzl{�S87l�Ry�A��iF��� +|�����,���i�%���Ю,��P3m���l��؜�h�Y��mV�+ c:RY:���U6� �� �h�P��Ë�Y&N��'Fb���T�%��ی��kT/αas�"�dT��լۖU�<"��t��F@�P5v���1]� ��j��� [�(�'�T!e�|�lI� ��O�+����ݮ������#~�����l������5�f�B�-�x�d�G]��(T��Y��g*��V����M��H�c�Z̒m����3E�S|� �� lV�D�#TA|ZVj���ݰ�Ѣ*\;MZ�@�D��2��( �m��L-v\��H�.4s��:;8�{F���^��@�)U�RI�-�hsڐ���R��+Ѽ�X�\KS�;�cݝrif���@V����Z�3G[Li�Z(nQ��u��m�R��UJ�0]W���6Ivm��Jh�0E�o�����͊�{K���m�EN�ĩ�c� �y�i��tG�,�NVǦ�� nl�l�na V�f��ae���L"�.�����WYU�mN ,�PhS��"���2��N����?�����=�_M�5 <�Z s��ڍ��O�9���2{�J�����Rbd�8�|����B(ZE��C�e9�Î�옌��y���l���$�'u--��p8�Z?7(V�»������ɛ����Cő� +���=^�>+<��9�Xw#?7�>_��X2�u��kxpˢN,�J8��vSܗ�o��Ũ��E)��ӥ�@I�����M0s����z��X�^�1+� +gF5�>���g��z�S38�:|,���}���iS�� ����4�����[�cB��f��I$;������ �/ ��V R2�#�~P1SС*O�+�j� +~4'F]��]��u:�b(��o�~�V�[�GeV��� ��}���� n�m�����_%�I�O���q;���� �@,XX�x�q��t-��w��a9嘾��͡Fәe�������!xyqO�"�j�L�|�rG���B�6���SYū��|`�aHF��)�<h� j�7��8�y_�� ���T���0,�P c��:3w�gPՌ����ߜT��`sD؆��$l��E��cڶ�Rz�f��p�4vO +!���2_?k���]��7)I��J����jH�(*J.@J��,��[�C�S-T:�;��t�^ߤ�i�A�����;E�e�IM��$hs��Y��5�K�G�s�O�?HU��>hs4EY,~<�o +S. 41�%�Z�7Ƥaf~ݍru먓��f��|`��/Kڜ*  ���s�n�Ed�0T���m��PG(FK(Z1�6\�?���J�!�q<p����{�w�N�Ç�x�ν���DPB�@�������y+1]6���K�C�d7+`��~�1@JZN4w����n���q +��kԧc����c5JQ�{&)^J�\;�׼�������.�>K�j�j��Nx�m�m��V�W"`�@�v�mx~7lN;�i��<.�ɦHM�Z�]���n���(�׊�s�[D����ch���/���XrZC����#l�}"MiZ�S�N��4Aa����۬���;=a��ǃ�MO=��6�P�gT��G����k�é�C��;��'�������Kψt��pUN���0|�|�6g�Y���!n���KU�����is�G��%�CG�U;����y�T�����hs�3`Zf�眏U`i�< ��[A��#v���8�d�鲼��Z8w&%B`G��HҜb֔`)uK�[k�����䜭��jC1nsԜ�f�14���_& +IX/��b�T�nf�&J(��@��-gvo��:�(�3sd^n,�^�A�����k��:�z� �ת���)���F��B�i�b~_����Y�J�է�i�,S�B�" ��S@P�P��Q��{4�0,c׉�| 2��3# ����?��9�_(#��Vh��Ig+�1�J�[���r"���b��o�K�#��c��PR ma[���^7����[�`THNL���EI�� �?�^ �b�A�f��\����$�m�</��$�صS\U�����xJ3�v#�v5/ ���2E��AP�*]��U�]���s��l�و]W<��q%xe���*�0���FӡRw���R��h�Ȑ!F�"p<7�N�ܛ���:I�W��A!��� �Dg��&����r���gY.�O�9y�V�Wvﱟ��հ|��}���Ͳ���`��;���a[���b_V�~�u��<"[�V���1�� �(��֑����s`��y���(/P��T�ܼ:S�{m�k|+͕�?� ��8*;"T�Nv���� ���6,���݄�}�4GW��Q�������cւ:j��a5��ݎ�}�?��Ub�/�N�g�{p�Ա@c��j��⶙�]��qќ*�d����O[�[��dž���(= +a�]@;_�;�Dz�s�������� +]Z���Y�Z����%]� J����j?�z�~�Y�21�bIB"�UU�h�W���ەC��F��QX�`������������U_�h_ԗ7"8�N��r&; �Y��j�Y(^�g�� x��ю{������2� RU���󣚍�*EȒ� ��7��L���Ø�� +��+W7d�r�9�E��|��s�.�K+���5�筸�*")���{�V�'܌U8T;S��j�~�� � ��3�B���� wT.��x���#����*D�fіwZ����n����}��W�h�5��4�7j��˱�H��uoz��:�-{*��D6eDbY"�����#�Y䟊���i�k ���C���3�� �(�L��P�g�ܰ���ǀq�Vʆڙ��� ��� +�p�eK�jv�߆�QZd�=�!�u,+~�}�n���MB��z�^�nR|��>2����};�J�BJ>�e�t��������@e,�u�� �9A�G',�5��(��U!�ݿ�V����cOC�v� AS����V�܍jǙ�°�O Ͻ&���q�N����b��JS�m�Q,���a����o��Kxo���M�{�K��Rb�KD�BQ�l�-f�����P�G�Y�)�C� <C��< {��B�F����b�8dF���Ԗ(��`��������יf�c� �D�L:$�������K(����7<������5�[�b�\�g���jmǖ ��1H�aj����^Z�C�c���Jb�?0���6�ӵ�A� �T����fR�<8�����|�N�%Ì��Ly�kl�-S*a�Q^�K�N %՟�����E�.���d��7�Șn�� p�'�2p�J$����1 m���z�Lg>��h;�K��h)v\�5qd�� +E��8��(�����f�8fm����+�C�֓�ݠ�����ݡF|�y�K+[�Wpc�N��ܑ{��T~R<�A��c��gD�]1��p�6�۪�[n�a�� �j}-/a�K�`�һm�+��TU�����'�Hx��,ǖ +u���K�5rU��Y�w�d;k=]�8���b8 CZ����M�À����.H=V��k��ŏ�IC� ��8��������p�` +�l��6�n�К�q �ܮ�j���6�n������ڒN�bM`�l���5#*������t�yk%Gn^��5��C�m��!Ark�W�?�v�V�\>�(z޴%��`*k���� K�1 �bI.�۾;���}���g��z��0�vR�3��Ng&�ӓ�,5IKk�Ʈ9�:�n��aX�`��'[L�Ew�V��#y�d3�x�p4�:� ���{X���3"U JH��4 :ڎ6�δ��$��k�A�P+pJ�h�s���2PIA^�;Qo���x;fMڍGB���]ݺԝP"Pj!�P�5���EV!��=aw!�f�F�*M�{����d��gUݼ ��3g|��uǭ�ɨ��Ͻ��{�ۗ�T�\�;����P+Eގh"�W�M~ڟ�{'��o�U6���z�"u�� ���S͆3�wU=�y��/S�l�1x�&��O�38�wR���Q�� m���;��c�5^�irUEޣ�X�:o�/_±wbb����$���A����w ��2-_*u��n�\a� +'�N�o��6��m�cs奈9�ͽC����;c�9���굜�;��ŭX� +[^2%0�@�?��9�w�}��� ��ݡ�����|Ԑ�M�c��k7�2���q�5y�Y�B�+���Ӫ����T��y���]Zz. P�f1�D�,rL$/*����/p�j�o���"���6��$�A2F��N��{�_���n�]���F>��&�X*.�����{��뎤j�2���A�+x�7˧$��h���m� Q�v��\�;42}A�C�ݜpIY-<N�K��t��q�?��(R\�Yfȝ�…�^LT1ũ4Z�]R�'���|��Z~ϕ�; �� +�#�����;)�KV7����7�M+�j0�KH'��UjO�&ߵJu�J�]Öu��|��W��;���M�kQ�u���j><l}'�Gy��c����;qqo׷�w�R�47���Q3��o}��x^+ �ߴc� +�]k�=�?'��]^W�XCj��f��`5���r9�wRKW+� \,�7̺•nT��?����c� (y��W����v��V��ouS5~+��I�OY~�q_o~׈��q�烙��M��� ݤ��5Y��/M���[���VKyP�O�M��w77���8�� u���w+쑹�wR���� ؝ƌ*3��T�������Ս��� ��;�V׍��j�x��t��(��s��j#�8/�]��_k�� X��n��VN�ݡz&�����±v���?�N��[�<��ۛye����w��U���U�a-6��N��o�J��h���n����:9�� +0�����;�[�dP������N���p�7��P��V���u,Rk�e�oR8{d�X��q�V}O7C3Z�r����wUa���-��D�0��w���J��We���y�(�]���U��p���DUÕ:+�WW�I���U &�w��Re_�` �����ֺY}M��v��y`�~y:�^%��<�߳���Ia�� +�H�Ek%g����U|Hhp����e̙�I��w��������"��.� �#���w�FL�P���Gl�k��Y�&��4����}�ǧ;9/�wz��z����z޺�w��7��N��� �#f���'v���N���� nGd�6�vY<\�o�1������[�2��<��ާXwD���s���f2�uK3��Ƹr��<�"��PD���њm~7�ϘR�<NHI����9�7����h����2��������ɿ��\����T�˓������T���M�ms������5�"��P[�8���TN��V'�o��k�ƺ��\�W�-�w��MA�t�,�>�O��;T��ߡ<Q�HG���Iw������,|��@��e,=�UR��+vL:*����A�+w�� kM��w���wbj �o��4�~6��k~(��P=p/�����Zd�������\���/�s��o��q�M�ग़��F'�;6�,z��]< �����J߿����E��j��Av��l�x�o>�7O���O����&�� Ҽ�x��2x�R�}� �c�N'ێl���o��"��1߼�x�����l��Bݫh�`;��e?�w����<�~k�w(�n���c�f��<�I5���<�/S��l"�-xX'��o <Su���ljӁ���p�Z�t"�c0����/h�N�d�m5x���q� �DҮ�@�qC�w���������M����e��^d,�l��b�쓀�>���G�}m�V�a �$�5U�R6�A5-�&�5��77�a����Y��������R�?ӄ_���M����.��|7���hF���Y-T3��x�~!*ā�?��3�������Ú�0`@�0SނR���%��Q����(���~�P�t��ߍ~/^$��F�U�]پ����ZD�N^%��yۋ(�WZ� <�ig���'uL�j��g��mg:xU��>�f�UM�/�3�v����w����}MU�>x�S�6�P�V�W)�"���ub4���,-���W_��@B9���D��7Oj-�m���+Y6�Ғ���x/u�Y��'�5x1��'M�*v}�9�NEB�{� +Ќ�o^e=�F�Ia���5�<T�����Yk"��pB�'���5x����e������ՠ�U�7��߮*>A����Um����q�>�b�����j��*���!wU ���.�u�e�ʆ����j��*�ť$ ��S�w��P�Z6 O�oL��'�s�N^]>R& �{� �Cy1�9`xRY`' O_�pRB�*�<������!{�L��� ��j���/�}�}xy���b.��5�Es���d{yY�(j�V��B�\ ��m��m�`xM�h�z�S��7Q��'��� O��1��W�a�0<�6� �[}��8��>���Ueg��q��E�m\��r��RM�މ��%)wu�or��lB^�q��HU6��ʆᥖ+%Cۏ�!wg#�v��x�H��q�x��f�)����f�I����Yx(��x�5pf)�f᡾��,�J�Q/��'�71������g: �*_�h�s^* o���W�ͬ�;���E����S������q�-����WU������'���«=2J��S��w���«�q.k���Gh뱠�U���7 ��i��}\UX �+��m�����r-}n^e�}� �G���7`xR��� �Cau��Pk�1�4"����+������zg�0<���M$ �P6 � �WI,�Iĝb���$5�u%'у���{�N�T��O�������߻9x�\����ON�l7�fl?������-kS�ۧ6p��K���m58x�{m��7/�������)�gѹ��)fS10x +����zc��{�;7O'�����}�oz7O;�Ѽ���_8:����nJ�>T���ec�rb��<+�]�� ��v}� �G��K�/�sdx? H8��v���S ^���~c���_�<�S<<1xRl�<(xM���F?���e�z����Z�(x�, +����oc�l������q7�Z�'���&��������CTۆ�)�R���0-,��e���<�ݩ;��.�5o e��r��Sȇ�fb��x����Y�� ��g�}���J�n� +U����}�J(���/����g���$O�ߪ�� <Cm����n\;��������������U��(;V�=@x�L��7}Ud%�_�������us�0q��!8x�ޯl�%�~s���iϞ<��|��g����<��?Zg��g�n��R���v)uc����n��)����ߍ�S$�7<1x`?J�u�n�_yR�H�>�� +i#�O�$I�����쪳n +h%/ +�T�_��G��ߦ�Q٠��E��"A����Yu��IP�P^�% I���<} ��GƏz��'^��M;��?�ϲ&˕��z�3�L5H)�O�G0�M(���� t��T��*AIS�U��!C�<�#^ +3�� ��{m�~N���U�.�r"ݳ3����p߾�� ��X�FpҽS�l�L<N����{; k��|<KMc��a*����A��P�X<�;-�# +��S +,��6���<Z�b���4�������_Q�8��Ӫ�-�wґ�|e]0�����(x�� + +�~�"%�0ӳ:j��q�������\����GK-��Z�VJ 6KzSf��ۿ��5���\�����j�����7'O(����g0�l/��1x�r� =`�+������G+�Va�ha��0x<ט�����l5��F�̳<߁�C̳��w �[�{�W9S��0x(�y�i�1x��x+0x,��]ǂBs����X���<~W_a�`i�v �Q� e. �m�Z]��lL9w�J�� ^e�����V9ˎ�C0�Lp�*���q��l�������U�9x ��d {�?�g�v^e��R�b{,B�������}�ƒ������R�s'��zL��8�i�[ ���� �����\(<�1����c � �WY��Px 7�(Z(�����@ +����Hxxόg�zL�!`k��L«�ݬ�K��8&:=u#�!�1-N�HxU�D�C� +xE«��E C�<�Hx�l��,^E����y"��Jj��"�1�t���W��� �:.u �}�K?�sC�Uf��(<�]�٫���ثeG��J-�#�����v����vE{��N��*���Z(� +B_3R; qH/�x�Hx�v�N$���}�&=��2X��Ix��Su���2��j���F«D�_�O% �������*^��(w���r�Y�j�B��yG)�e�8�p�]��`=y�«T��VCCI;Z��g�ϾҪ�l8���,V��t*-�%� <D} +�S�ÚE_7@xȚq���0�?Hx��}��Hx(�{60�KF�!gb.�:�l�X�&^�6����a.:��C��Z/��4<NW�pC��*����r`��3hx�42����Ǻ�5SR^�b�s ��s �����cq��_@<�2�!��;^� �c�N�%�x�>��\@<x��{�ნd��Ylvo��p6�𧱫��\fXqi��]� A��J� ģ�鹿x����m��p�gf�_6*^5B���ܠWxW��R���0�r�P<��L� +�WɃ/eA�*YMgۡx�f�����܄��a�3.��x ��ź"�*^ sa[�{췕�mL<�+tA����1K0�n��<w(�.*�9��: +Q��R�*&2�`��-*^�^KX<LΖ,JX<�n����sxk�������q�he%��x��b�ָ�b���Ń��.#�ِ�{q�`���(o��?k���+ܶV��Yvo�a޸xz"v~��� +w��a�x�/K�o\��-�\���>� V�� ��q�h�N\<X*��Ń����ū�}w#�|�9�,�*T<~�ei��Ud�X�%*{�8f*z��m�N�A�+LZ,�x�]{�Ѵ��/;rD�������z��b��F�u&��V�L�J8<A2�ī��� �c�AV��x,:��FP�����A�*���� �òĵ1�x���r/(���gߡx���K((<wK�g(^���j<Xʎ�+��U��4��xf�n�O�x &^�� �G#�Y!�h�oWbE+Te'ðS�Ѻ�(�RY~$�ھ�<7�T$�WM��;9�·��XL<8Ϟ��L<Z1��KC +FL<�'�7&^�� y2J� w ���3�R�� ��G�<�7�wِx��@��C*�&lG�歱�#!���6x(x&���x�dE��C���'�x��pH1��Q�}_׵#��:+��\����<ſ�x$XK�'*^#��L�������L�ca!�kE�c0 ���5�q�k������}Q��L^J�� ,ye(�\����Md�EL<Z +�/&^c�.��Cz�l�v&^#��,���J�9�b�Ujd�c1�X��jf�U&�P���OZ��x�-ε�L�V��g���^G�f����Ѡ���H���b�ᓖ���oh���kH1�L<�p˴����I61��$�B♡/"�}�ϝ�Gk��u ��nm�`��RlD�fR\e��A`ҽ�xxE�\����O "��dc����ډx��d]��؃p9��J� m��m"�a`�U�0�XDPD<�ل��x��^D��� �5�ہx�w.�[�m�;��_���M2[�qx���\<<X7�\@<X�l�N�c��}�Eij�=�j+d$� �Q=��Ǽ�b�1���@f�Y���øˈ����C*�:���L<�x2k*(��@�P<vU�� (}�A�C���ݽ� �g���P<4���x��ڱ+6�J١x���K((��Ɯ �ǫ����x� lsA�6Q�������Q�����W�*uA�X�η$C�H�8Y䨾 +T���C���+ W�'����5F �P����w(.� π�5�mw_P<f���e*BW��ע�QbjŖX�`&-S�X��wQ�p�]ۢ�!�`�<S�H0a��x��2Ѩx�J��g��Y�[u��8-�d>��x<����T� +���;=�>g+����-j��1�N�q�,�v��c�lX��4!���o�:�a����![˜�F�3�7�t���S ��x�� +2Ϭ�e��!X H����;�튬��d<�[����l�0���i��x���w����R�Ax<���_����R\,%�9'��a?���װ���V�㡨�����a�����x(���i)w��P��ɉ��X�����xH��A�tF4cl���)�.R��*51ɋ��ON���ۃ������D�cs6�[i-���c����xo�ٟ3Z��Pm;$�l<V6p��ʟ͗��x~���k�G-��x�/c{��������� +JA����5hi�p +�Ƴc�^�ʸY�l$ی��-Sb��2f��`�5�s��6D�7���٪�2��0{�������^]�L��}*���^��B8��1���[���PI�6in��8�M`t<� g�Y#�}I�!��he��x��i=kǹ0�l|<�D���]�㑉�^�zǹ��e��Q� �bǝŴ�ͭ��d[�:�l�~�&%C�8v��L��$�? + g,C�R�[v���Ȕ��x���S.���!��[�MX5fl���5��uĊ�g���ɮֳ!��Ut<�Y�|���ma� �G����e��m��%K~a�8 �Rթ�tJt<:�l�v8�q:�G���w��c����lb��X�B������x�8F ����Xb�D����?ꝩ�2�|�J��� ++�=��dž̫���G+J!��g�"/b�f��������1�F��Lǫ�,uKr�F��a���q�eb��17�۹�x�W[t<~����+C���1��r۠�e��L�c��R5��U:�׽�x��hL�d:DE�5-�@:��(�":��mԻ���Z�i�2PB��=N� i����!�Ä����Pح��(4�|zuKdb)G� ��xx�j ���I�����yYkuIh�ʔ *B���qxځƃ����x���B�1��F ��`�����C��r���tq%�T�l��p<�y-C�0e�N�����(Vx��x�R^Lp<X� 8,�!nl<�賝@l<n{��C��F�yϝ������j���Ee��x�����ӹ)!� ����d��;q�d }k�'0R+��#�+'*�m&[�I�̩xfx�[Fg��ǰuQL<̥�f��x��_XL<ZXK/&,v��-b��,����D���&���x�/�0�}�6g����x˒�D�աx�ʳg�]�^�C���AG�vrI �� �����`���{�0��|q���������w �&��2�QJ���[�!v�I�m L�}��1Bl@{��q�w{c�!����sg��Z�s��`����x��V��p<�q��� �g�c��!|�)�*>��&�#>�ۙ�s���m[�h��=��l2u<^-T��}l����x�Z[��x��ͬ � �� �G�&g�d����4 ��_��dz2�2����(����A������.�����!�ܽ���剰e�� +�P�ǣe:��i��)&¸jt�?��x��N��J��������J���I��<<�6}�d gY2 Ϭ�/@ʅ�&��� [�t�X�������Ap�Pbi�홐G5����LȰ:�'@Jh,��yK�!��ӛ8�3���xa�U5�� �� +&ox<���s���`�V��x˒�x�*<���mԱw���L <��9�+�Z�V�uT��t<Y�):-&���r�s����&�,:^��Mk���=�L�c��:Nǣ�S@b�� 9�N�C �5݋���a�g��%1��Ut<������;�ެc�t<����?��.�Xp�eHl�0 +�����8x�u����0*�+�CG2� D�[�L�3+v�"� +��v��+�A72�ܯ���W����xT�<]�8�R��I� G�QƳ׹�x��e�<��`=)�+4,.-�h<��� �W�|.6�� 3C=��ml<�tT� +k�8Ë��,����d��L ��8ء��x����xMD�����G ��2Ϭ׽�x��!8���2w8^�R0U ��5���p8޲d8^�:�2ހ���N�� [w2�I�b�� -CcXx<�N�����ׄ�xȣ@-[��� +agπ<�"��=�qJ\Y�[�m2��y-`��D�3�r)!�4���<�^���x��‡�T�\���;KS�;Ω��q�܅xi��!Up��w>�Y��}�q��oy +Z.Y������\���ҏs�haH�1N���`��� +�?�pA��㡔�����aGW��36JÓ���%XȃeP�Q�<��J�<�;��Z����N|~�Ts�T��h:"-�X|�����-��aCdM�<Xl(@^�$@�Y��wD��Q}�� �UF�^|�F �a!L�~Bՙ{�����9��ݦ/�M�~� %`��Rx<X��3:�ǰ4��(P�L��x�ڱ�3�x���㦁ǃ�:��ǃ�#�x<X,���x���^x<~�u��ɳK�3|2�Jd���%�`b]R��:Nx��5��B�Q���ۅ�k��S�ԏA) ��[���[V��d�&�wT~(���x���{��n�d@��dI��e"�y�b�5e(2#����7kS-�U.F���P͌<m�$���`N���������=#�QZ����!@�� �3uV�����,����b���=yؓ?��3�Pee��Z���������'3#�dc���Ǡ-K�c����3k�#����#����zn#V��pF,��8���Y��ȃ��g���y�����ó���y��|����,����b�1�φ&���8��fF�-�Ǖ�C��pyQg�!3�U�JXwʑ:���8�Pg��������_\�2#ֻ8� +٪wv���b��y�V�XsQ�7 ����2$��$�}��@:$o2$Ϭ�`6�]�0mS;�k��]=M�5�T0���c7��3$�"�� $���:���PZ5�\@�p�y8$��PJ��~��+v`dJ��Я�Ёp����-K��-�(y,�駧UY†-jWs�z^�I�Xm1i(+H-�e� y�򮉒�s�b� +�[�����A�cy�U�Ѳ�˒(y�*J� �.�;J�n���f�t\�����QI�ӆɣ�%��:J� �G�����.C��Q�<��� �[�6Q�AR�(٭�7��c"�,w꼴eAV!��8 p�6(����@���E���C��L���<��eDbs��B���];!b�r!�8[�|����p� �C��1�8 �'��t@޲dB޲ +��f!�"m��\l�<�\U�t��h^]�B� ]���Dޟ �7]�d#��]Ɣ�٬�:�x��A=y������c�]"�C~Fp<�{"\�����B�=�xd�;����w��{y+�t^ �G�I��(,�ڡx�4bj0�0Ͳ�E����c��1�Տ�b�g�%5��cj��v"�� ���.F<<xǨ��px�4�霆��a�����g�uG��Xg[$<���\ <����9x�=���/d0B�$?�>3�=>wg��N�^2oM���½�v�����w�"Y�\ +�ȼc��;���;�{���wȠ �Q�/�A�{ �A�m�Tژw��^g]�;�/�y.�]2�ny��E;2�n�f��c��L\�c������;�]�1���+���u� ����kWMCa���̃j׌��1�qeҮY�d�u��n�� +����^��V�eq��1_�A.㸽��av �y˙P���Pv��s���̒ZܬΪ���G�Av]��� �]��}� �BM�yf�]���@v�\�Z ��z��w�]a�s) dK�>\��`iG�;Ȯ��} +�]AD���@v� +��k�H�Yɽ�� +�$N=ٕq�ff��8�@v���8v0�yl;X�,�,��_�����cWЅq��'3d�bK�\ ����5��Y`�Av������qW����q����������8�X����=v�]!�/c�J�~��� 0��)v��; ss#��в ��m�l;���2E�� ���nX�憯cY�9�� n��O��uhu����uHAZk���P��HT�Aݑ�8���WX�d�0dj�2z��?e)�E7��!놈2"N ;g�eX��e3\~��e����Fl�:�Y� ��5�Q�%gP��TC�� o�N��\fL�8�^�R7\% uːua��N�vD�Cf7j�a}>{[F�ͱ)Ix�0d:�2:�� �Wb�Ai���LǪ�ӊ�xG���[�A��1���+HA>&����ҕ:=ԗ�t��u +,]Ad�M3�ҕ�s���j��R�+MLa� +��-<T:�5T:Z�ƋJG  KW��hVm�#�1������2�汄���ǯea�PT����J�Ͷc�*��j[X:�1�^X:�6]��X:Zǂ��s�� +JW�ֶQ��-���[lW�Y�1^A��X P:|�$�yP�ƚ�J� �lF��X�؇�f�O��r�.�t��%�t4������a= ���?[{�\�p�G���څe�P�e���������$7(]aKD��Qv�'*]a� ���J��:B�A�#�K�hsDfO���JG�q�/�V܍�'�t˒�ta *ueZ�n����رteV��[ǁPқb�W�d,ݲ +KW�u�QT�N�#��tgGq%;��D�褾:�Z�am���t�b�0i9^��V��?w��DU�tT�=���P:X�'eDŽ�����t�Ҿ�-����X�e�ҕ��R:���iK=�dI0�d�89����cS���9�tV��A�}���Τ[�̤ k0� +H`k���:}N��|�8��B1&]��1�UL:���Xs��W�3�� ѳ�M?ζ�t&@4� JGɡ��H�����&�OF�Ö*B�� : ��c���c��A��|����t_� � +��A� +�3��%U�|��WT�dIT�e��2G[�_9k�;��—IP:XN����v��Ig�V�����tŤ���� ���QL:,��� &ݲd&ݲ�IW���+�1x�6�ܠt| ��3RF�ˠ�t��b�l��Qv��X?=:��}\�6Wi��3���2���8��j�J�,�D kP� +Jp�c,*]!k��;����6>A�+�u���*��ީtp� +�y���<��1�r /��Q<G��.���Cf(mS�gn��J��^��dpѮ�:o�]X'xt0���qt��X�#��w�B�:)��Xt숺�B��[� F�%�kD�Y_:d�� +��^����g�3�4A��1�� tӕT@�uԲ�s�+cl�9։�*��9,��}n|.�bϡ؇�t�� +� 8�{C���`��߄=9{��n�kc�v�k��`aM[�� +���9d�aem��s0p�{�G�g�\AT��:��s�p٬`ϕb�� =#v?A����}��Jq���<Gk���]�''�tN�����9����"���bα�=���{q� +�,�\�W +I�;f��a��8�Y�" +�sab3ֹ;��,���1WP�p�&��[��[0�%1�U��be�#s�1�ub�ъm{0�`iG��1 �cV�{����/s� ��$�����1��e�'�q��0W����� xwx�(s˒s�*Ɯ}�HD9���1� +�햏C|���N��]�:�d�s oN� g�-Kf�-�1� +ZL�ss��֙�s�^|pb��2���,^�1�`��B�9Z��^�9~�b{Wb̕� +��s���)cnY2c.����;� +wv\).'�1�ly��[o��aN/��[� E},�^:4���\�Íy�8���s������r�r�]���ys����;]��1����€\��`�x������N�+Hǵ~-�\X6�ܲ�.W��sa5Q���7 .�p�5�m�p����n�����@����妒;��A��d�ea�UPT꣌Ŋ�8=9^ )qw�pa�<E-� C��-�����89���Q6��˜a�C��q�Œ���PF��ț$���yH 9�~;�-8r�[!Q`�����?�]˰ r�f 9�e�>����@7�0]�0a�!r���� 9�w�{G�A��s�0U6�9@N��F����/��/X +��g`5fzeaLl��������a&�&���8�Sm�J�8d�,�&zBK�� |��[9w|f����q����y��!������A��l���)�{{���^�0��:�jJx��[� �[V�DZC�,a@�s�<�6x;1Y� x\%b�Yឩ +� =+(���8���fo�Be�9<��!j�8X����� +�ٓ�pN��Nv�_��8�|Φ=��^<��1h W�+�ع���Y�w_�8X��<���;<C蹙���6�E�CX��� �C��ʂ�Ah�����Uh�A��q�7{3 �Cd�QȀ�!������j<��]�g�>*���~��8Z�N!;�ץ,v, 1o�8�$J�;�J��v\Ū��Ǝ#̂ ��q���J��� +�g��*����q諞���W���ΎC�5K���_���qxn3�=<VN����À�Q~���c@ �4�q���-x-H�o�8Xo x���;<��>��C�����Ǒ�1�˝^*�F�C?&_�Ǒ��j��po9�6|�^����U) + �I�ɻ W���'|bcT���q�2 +�8�I�� }� +����т�H��hs��1��)2�q���=��"�L�+бD]�� ++�[Y�8̉ �l�8�){��q6��.~��yXS����Y�(;?��]ď+�2����Ó~ ��  �����+=i�ËG C�������6|���=ߋD�mD>s�Ɋ���+b�>�������TϚ� ��: ��饰1��?���RW�S(V�9E�����$=��d�����h[��p������Q�����w��qP��T�vAA)�79EJ�Ufp�tVō�a�{a�X�4�N��{L)3A㰢_�3�r��dd�?���=,l������΋����pq�ӴA��H�n�8) +XN~\ ���r��7.�({5n�ʼn����S�EZ$ q�~b�rH���� q���S H\aڜR(����D����e#�c;���1 �p��C(�^jGH\!ڻ� +B �/��cd⾮���ѵ���R_1�zA�G�]/1��Du F.��]uD���B�1���ӆ�C,��P��c��B�t���r!��9�>�����V3q� �.<#�(<Y�"�a<t�" ���?��X^Ͳe��a�b��pl��o8��Fa+g�A��y ���?���pa����ݥ0�K�y�\�[N���o&$D��7&7LG $o��H ���� ���}��%g ��i�s����I7� ޱne��<�@���&�L���te���>����=n,��8�"ō~r[�����pĴ�()p�]���pLb�� +�P �:*����w����oC�h���*#h���"��5������tf� x0���q̠��$@�S����'���,�mV� �F��C�0�q+�7ԝ���C�P�Fjub�!�an��o��R��o�LpM�7�-�O �V�Z�>-L��}�Uw��!և'�Sd'+ ��m����6M� ho�Q=��l�۸m繱�ޛ�Z�7��i��P��x�zC +��⼡~�o`�8j���m�v5i;����Fb +��<��ˈ���-Ì���t���^S��Vc����7$# �P�g��Ul�h7�*X��h7fa�md��U\�F��1��xC׎uàƛT7�^Ip-3�8��ܠn��m�t��Q �k�{߉n@iM��nHŚ��nH�b��xn���qn�� ��|$�7��t�"`n�U�ʭ�v9�ܺ��ȭ�V���.q���� q�a�QL���_;� �*׼��t� �nЎE�l�u������� n%e<2� bvjg����Y_��(XOy�5�k��y�>�m�86g�� F��v���I��]��n�6��qd��m9���r��6|�5[�!�Ų%�ڐk���qmD����im�I���Ym� +�Ymq�eB�F���� ��f����c�b�t�]�ⴁ���)md�#8(H����`�]���3���yJ��� v�"� +��]B.cAhc�S�� m���;��(�s���5[�:���YK��φW�Z��g+,��J��lf�}����F1��Zm�6Z9]��F �X�`�lc&��:Z�����n��Ko��Ʉ6��M B���� Kx�� m�"�'@ Y�``�Y����$�mL��\���X�Fh+�Ϻ�"����$O�'��u�邩'�!�c���P�� T�ml�׽mH���'m��N�eB�1,@ B�����VX�}���V(j��"����6�6��9w>��� ����l��� φ +Un���h �Q�g+�%�+��`e���l�ZX^�� ,\)6<����g�-�R�Sѧi���g+�m5�φ���VH��#��X���a�Xu��l,*`�2�� +���^|6|�J �g+l�*��g+� ��φ>:��g+܏a7��l����� ��d��l�=\DƳ������[2K|�B<��g���v�����Eh����h��"B,'Ah+�m��’�{,B[��=Y�4�^z��2��U���x'{E��Vx�p3�� ��sB��/��y� E��Fh�$��'�aֱ�m(<�)?ڸ5a��mE}2Ah+T%���Ɖ�˹mxQ/��icwu�3��֑m0�Dh��ֻ��m���ϲ�m�b����*6@J�g'���ʷY�B�ژ7d�=�,@~�hc���O:� � �� �F%If&hs��6���l�6$��� ���׾�m��2ȔmF +>�hc�;D�jq&�hc)9�B�؛3f]�6^-}� h�z�h��&���6�TZǽ�m�ۿ���m,��K�m�RˬT�j�� ��{�$���w +ІTKh�ٗ�hÅ0���J�����e�^�φ�K"�φn[��gC���6>K�Y�->.�z��gCہ=��g�Ľ��� �ڊ����-F�2������F͈J!�R� �z�{��Z�:�gc��;��F��2�gcޚ��³Yz�Zt6vnt��l��s���}����!�Hf�u�E0�fÉX�p6\�M�f����lH��(6�l�}���ض�j�LgCv�ޒ�l�6]��Uild6���~����B�a���hC��u`)z����_"4f��{�笶 + +͆RPNV�f�Rϊ�͆#� ��V���\������ X2n�f+� ��S"���^J�� +����#4%�HMd��ۜ`��<�$.Y�ܹló4�eC�X%a��D�?g������ikAec��Ǻ�,�[�T6�p��l�. ʆ�Y�A *Z���hk����1t,*-T��͎��U�όRTĜh`�@��l�0�Q�ЬV�탈)&jv� S��e,��7�e���(��.g�u&,|��� �&���e�$@�\����d��Q�XX2��Ō,.J��l����S�hi�^T6���;� ��sR��Ћ��V�e;��FQ1 �u7' ˶,���އDM{ +%;p���`.3���y>F:�X�a`٨`]�ذl42�!,-�) ,,&a��l�R�$�l��� ��u�W\6Hn[W��l���E\�dH\�e� ���(��8~�v�f����l�g�d`ْ%?�� +�f�����Y�JX6�؋'.d����\6Z�<����6B@�ᛴf���s��Ș��[d6X'�� ��E f�sd�6�k�P��f0�����ap6�* .{�r�\6Z�3��e��.B\���\X���!6J�d.�T�.[)�X .W]��Ϋ3��²�@1ta��A8�� VF0�ecu��ec����Ơ#�X�eC��#�l��`�sòATÔR�ecg�H�e+���V +q +�FKw|�Ŝ��3� ����fc�9�"�1w��nS�u +&7�d6<s�Df{�,���쩵�$2:L��d6�d6Z�pmd6X�J��1�0P]�]�fC��{���3נ"eF��ɷe���޽ؗ�9v�j:��V�e � 3|f�T�$�"��ا�R}�ٸ�-�-2[5�ﺓ��֖�l��;$�Df�h�ZV"��R���l(���Q�-Y�mY�g���C��qZ��r�a�;$��ł֭i|63�W��d���(6��ІY՚�2��V�yEh���"��b�� m�'2K$�Xe+SFh�D�i�%B[��;�"�a�o� ږ%q$���d�y ��-���F� +��(��.���m2�-Y�F�"�9���m�;� d>�l ܝw�]��%<b��W� bSFt:B�t�7:�׸����ۻ��,Ǵ�}�p6Kb��`�`��`aLac�1�{Յf�� n �G��l\e��l�����lo'�Ϲlw�ef.[ﶽ .��O.�l��\mT6�*؇((��1� ~�� ��fe8c�޾����n86f�K 3 �U��5j�^g[�=�-�ר�+�Of�/����t�c���9��v��,�y[�= l����6K,��yX�6�ka��5�B��m��-��M�?x���37!l}yh� q���tM�0���\'Xj��0G��k�[ �8��Q��!��\ ��k�xa�N�5Ldo�=: {]�5�M� �ڲd�ڲ��v_�t��ӑ�j~#� +#U��\�53QZ!��`d��@k0�ea�(:9����P���� .� Y�\�q�5F�����[7����p��ƀk����@c�(/C*�Qp5��MK֙i�8Y9��j���h�=|�P)kY-�"�!x�(7�n �4������b����V[� V+�>��'�=`Z@�xظj8I����AU��$���6,�#�5�k]D��P�[p��:� ʶ&T�85Q[�ij����RCi���R/{HI�t�0b�ƹY�0d��2���i�N� j��Q+3�pwY��Rל�``�R��x��O�����4��Rwx�i�\�n�AN�ߙ�6��1��;5�BZ�R۹'w�ZU Ӧˢ1mV��yi�s�҈"?�AC�O�Yi��a�VԌ��8Xi˒_�e+�� G�Y�k}*̈́����41ZW�`i������L������h�w_��hF�.�dKC��=ʽ����d�ӏs v��2e�T��*\K��/T�f=FF�1-}�3Pi0<�ĽPi����JC] ��`�aU�I��(wf�:����:�J�ePdP�4�����(:�r�@�m�~�T+�Pi�2Lp���v���\��!&~L����݉=4��`���`iɒ`if�RSߞt�#�FӱK�4��XYB��!ZoO��s��s��[�����kNK�Btw8��0�7� '\��i- �i��NK�!��̴4*�0-�$�Xe�4����hi�a�!�i�u����V����h��4~�,�L��R�\>'n�EKC��5ͫ��^3-m'ZZ�V�Hh���fs�� +��,�c�?���-K��-�hiؗ1�4*aцʂn��qn�e�J[��J �Hi9�{qҊR��FcY��ҽZ�4�{و�)i0rf$�ƵEI����S�pz{�EI�U2��3l� Aΐ�5C�a���2QҖ%SҖU�4��3 i�s&� i(J�JQY@e9�C����^��!�k� +AҊ4.c��,�fV8���&�]#���b�Y� i��N�C�`�E�q�ː4Xm�pF ��#�<�s"ix��i# w��t0Җ%1ҖQ�4����#�Y�?Q�53�l�����C�q���<k2dFZ�*b��)�Ƃ�aV6�iuL�q(6=<���7���n�4� "���3���s�7F�U�3?��ao�i�X�'3�pe�I0��+�t�3Җ!3��ڳ�+C �| �#i���i�<�+��(��IC S�i��f�ip9��@�4���i8Ϊ-���h�- ��O�tȈ4������{��8sɒi�*D nP��4~��L��c�]��H��$I�H��Z�#�֑i<U+}!Ң�kC�!�۱� Dk��Z"-Y"mY�HC��5���g�6���.��Ê�;K ���zM"�V�CdDZ� � @�L&�EH[��H[V1� +�%)��ͣЀ7m�h��A�6 ,$�,WjO��*He{�S���&������j�&=�`���f [F�A].p��؜��4h��#@ڥ*d�Ϡ�I�K�q*=�Q�3u2�;3Ѹ��,"<�к�6ڗ���q��de���&T�9���9h�����������D���g��_��W_��s���{�����O����}�������g��׿���~��u�7��Ϟ��O��o�����W����������gG������o;�_}�o~��* �������W������O���_���׿�ݺ��� ����o���Y��7�g^=�����'�~��~� ?����׿��o�������������?��������6��NN�&ғ庳y�w99v������+�S�]�G���������X_�����/����΃���Lϛ���V]�_�|Ը}�7��������?���[m��_�ݛRCA�v-T�N@�y �<@�m���c���`"���r�?�n�A� �J���&d�M,��D�����1��!���&��F�PD}�E�ܲ���.�r!>��Q�gq�9���qͅ+ �@}�WW��>�"{�(-Va��qȅ�&:2�<�sa�7�P􄥣��b��@�Bs����1� ��ņI��=D�����޳��3�8-p�sqi�v��8�n��N<�>�q���+ӧmIQ�� �}�z7A� d���ϴ�3DMg1���s�?M�B�KqX�����Y�B`~'4 N/�;wb+��CT�ù<�X�z��L!:��_:�� ���ɻѭ����|��2�x�ح�nj��i�KS�Bd��rz���b IJ�[C[���Б�������Q +� {d-o��U��d��d�N&�;��c$�&O�ZH�t�C�I��[2���~ cF����,|����x?!�{c��O#<5v��r������ �v�uI�afV$<!���`��&�/�6�&}DQJX�wJ�dbt�b߈����5t\�m ��M��*^k�M�$"?� w����3h ++�-��f��_� ���׿�����/^~�۟��W���x��򎰨��CM6���)LP}����\�{��+s��_>�~W�1//������}���>�1��p:o�0�ú=���1F�=.?rk�ʼ{�¿q�9ų'D��0��b��W�� +���� >71�?r�����>^���.�9���S8L�+9���W_}|9�q������7�{V�o~���Q����1����Ǜ����_~��'����W���������g���7���~�7<��������_9��\]���'��/�߇�?����+�#��T%�p=��s`'dž�c��ۘ�@�q�]PD�����c�ȧS c�����'�tC����8 +:d+ �Lź����$M�R��1��o�p��k��;��W���]�����}����=-�6X�U��l�c���n�X��<1��V�< "�p�m_�U(eb �e �1\g�{��`����\M�� ��@n4,��� +�©Xi*u��m����Q�\�@����l�ѽ�P<O� D�3@L A��m��7h�����[����< + +K��ˑ��n�n�.R[���a� ;fP\���E h �VC{��~�p����`���Û1pZBNd�m���_G]�S�Kp�{���1�y,96<��ݽp��v���3Ї�B��:�ÀX�j<ˆ�"IJ�����3�E��^�&�P!:�"��J�����$��7��P{��fh�k��\�*>�,�[��a�ah�� � �=���Y��t�9�C�y(����{��ͥ����AP?c��1�G)���A�6R/ִp�(��A9�z�� ��r ���v�I��F*�"'���d��>5M���W�:%�GZ�{�x�B?����_��U� c��w��$�h1◡������޼�,C����jw����$���C7�Y��g໚���Rc &���y;��!xp�ձ���֟��Y��Cx� s���x0�ҭ9޾l����qt�!�7�f�GS3�+�c�aw,wCRw�d���}�ˎ�~��5m��J:�@��'.�h�~�X�^��>�K\>��r�g�����F]� ��v������?�WO����+;��Ν(����{�afc��{���F~<��x�!�g����L-v��`�|�3wiȜ�-���1����w��fHև��7���0�^$?�Q~�O�l�&��G��w��Y K~�x��z��g�Oo&N�������cj�h l|���ٞ�<U� �G��"��"Sc��ige�ƚ�Ƚn�� р�__Lo�cܣns�i�.S%4�O�l"�Ϣ��۳��&�Sn��ml����s��D�X��mjv�k��=�ݭ�Sk�����ƾ}�mI�c����['�J�[�†L1����(3E�W�� ��ھ��!/�aԒ ���/-�x=����d�/���#&B6��T��#���J����XsG��Fe��cN�ڨ�ۼ�s:�UN�%|B��� ��E�q����A:�<:FY8�d��~b;+������y���%/��T �/��X���*��%r�K{�c!�8j�gLm`j�%�:�ϩk8�ǜG 7Q�Ɔ��#Er � ���R5���3D�m_�:��|�oX�؞K���&8#}��ԟ�9�v*��Ub/s��� �xX��P��E�سQ�c�`}������ c���Dc���V1���~Z�uĞ�1B6<h[x2�������}�V�˝9��2YVY�d��N�Z� U�7u�Y�`�>�W��b���`Ϝ� +Z<e��h,;���������=��}c�E���=�o��`2G�%�Fe��zm�K��1��13̎lg�}xhJ�U�[]g����FH�!�a�2�r#���02`;�����Lī� RwDQúa���c�ƶ��;���)���#b�N)���'I]#�ϭ� 8�1*�Xz� +�y�R �B5[T!k�4�ŽzP��a;�5��F���j1����;�����e0�A�pb��^4DS�5�|Y��xey��d�٨(sm�x� ��“ �D�VL#�HgP� *.X�����U�Y 9|�%���0'7Xٟ��0�b�$�%bܚK�%�d[� e�9�y�-�>s��+AL��Zߧ��j23c���|��x���qT��5�N��2q��Z���Emr�q�n��{������jI 4�ϱ���[����g�4cy.�i�FZ�xX>����~����� 4�e�����Y��Dz�?���A�ݡSXh��!O�U�HX��Z��GDT�&�Z13ٛ��0Z�?�`w��(RW�dn�Z��R��I9����� N��b"�:Y� �ʿM�!����ny��j�("��R�t�{ �%u9�,��5�>�L�䊳/4�p@�[�=�Ba�c,ǿ�n+/V�j|AMvm!�;���FT��e��n�x]�ڰ@�i�/�} u�������Ab�2�#�Q�5?���v P'�bG�*#f�ocJ�]��|wg��������+�}"O�*��M"�G���p����������c��,3Z��e��탩�}*�-��766�X��gҮ��#����9:|Y��w�(6�k�E�uc `Q�`C��+������B":�9�^)|E)���wz�#�[��kY�w.k\��.���y�;��͈O�/���۪P�n����D�i{��Z�[q��z5t< +�a��M�k�bPG\.���#"|�E0޴�nod���]QG�Wl2�+���b95�D(4O;+`��)b�1�E�u��"B3�b��3#лͬ�8"�>GGXy��#����Z"�+�����X�~��{�<�+E�cI�����E�>����2��m���@,ˑ9��{Y���r��o!��WY��>"/�1Krd����HĄK���u���:N��p�V�(�k�E�KI���"�y��� +/2�Z�iF�+���! �5�h��F�m�#%�r$�›^ɽ�uG0�����\���G�Q��HJƆA��m_ ��([�H�n;�H�j� ��E^6�"y�����,���^-�ű�����}�v�v��0�"#�;��so;�H���u�̵�]��� XZ�k:s�̫ણ5�Z�y�=�R@ )v���dyj?����DO������ST�s���=p0��S`��ټ~P��q�� Ή�:�ؘt���n�� H�g��:J��u&[�7*(�a�2o�/P���I�R��[�PѺe9��n�"Oq�����CX�0�Z�[���%��O�d���^E:�_��>^�r��HR��^�r� +�Q�p^�*�儡F˘�9Ӻf���>GY���Fa��:�z��Q�A�z��:�i��<(�D�i}�,6Nu]q\\;��BR����e@����'E�SI��r�vk�X�DW��7��b �=jXR%�',�}�����3�� PvY~��]��nϤ+�q��u�׿�×����P�����N��ջ݇g����C�dx4��(�m��+e7�&�GU�C�C�q�O�<�_���yh]W׮9��O�2/|b^�yٞ��������mb���\׫Ya�/�:��P���$�G����{kBLB�:/����̡��S�<�~ۗ���������A ��Z�8�r'�`�$�r2r0���̸�C��X����Iqlj`&�U�V���>��^*��B�PR0������'u%���tPJ���Y� ��I][$Tw)�w[�&��-�|+0O��7�VJ��.��b(����_#�:-��c��8�Sy�����(P\� 1��S3�~�+a=M�A���)c�_8� +�����!��y��G���o��#���/�E\D>L�0��a��K��H<Ys���%7^'��>ӏ�����>]{ĥ#kz!s?1�p֭��Խ��n��ۊ$fu�����te�x@���LbF�«z޷#1א8�'Y5r��)���tW +gd�� ��@E���1��K�A>��i�bl_/��)^2]�^���� �[�^jݦ��绹& ��5��ɬ gۣ�Ĥ'�&/��uyԬ�P���|�zV��� �c�,o'�okZA��?/�}H�� b hך7K�N����㳯��bD�Ӽ'�=R "]BT܎� �o8��+�k(o����c��u����Od�Ȋ��C��A%���Ox�=�@��ݏ���q��2����I]z�F'v�0��`^���2N���^MnYK�)Q@y3�9ՠ�^G��'4ˠ5���U�5��!h�d�$A���P�b��r�*(�h���z!��Cb0�ZYz�k=]�����El�De/��o��|�>��P��r��x�ϴ�0�}��'�@Sr|3A���q��f���yJҜ���*'����%�(6�ᐊ�|>u@3?���m(�^C�-l���_�o�~�˳|�}��g����|��o���z�>66��n�_�CJ�i�y%���Y���� ��&����z-�ƚ�'�t!u$��,8]����}�� � 1[މeȰa���y{�1N����\I�Po���O�%�'A��lu5?0��K�,����P��v�Jbo~�� m�( +�$�z�:��o�Ss�_}����0$_-ҪK����KM����݈+�YD5���ME,3]q��yL%({<��ob2S &tY���q��;���x��V�0:eh|���g�����A�2�{Ǎ��q��^3�;���魸�����ߌn� �!�z�H�_����ӠX���ٿSCl]���~���wƨ��#?�Y�!�ޮ7I� �k��^�� +����2o�b�l[!�j��$�u�+l�T�ecJ J +��J��Z5����$�C ����g%�ڔ���� �lJ�<W�P�p7MLW�,BvDB��4���� �%t��i��!P�����?d����L��T\��&+���'Թ��<{�J������z*Q�e�p��� �>�x��(��f� �8�C�Z���|�������6����P`� +�x��;k�?��N�3� ��2��Ѓ9k'���Pp��)��q�����Di-^e:�(�e��'.�@A����~��]��G�3d��? �O��^�<��Y)�����R�2�a٥���0�!K��jwT�*5� eM\�Uw,�Ȫ<,��%Ty(EA�Ȭ�S�*Z�R�ys����;j@��˃�����/��C��< +m�<�8X<ty*��W��A����P�����a�9���A}��y&]>��t�e�o���!0o�p6��Eڇ��z��SD��Ty0���*�)A�<�Z��Uy(�}$U�B^+K���ؘ�7U|? +�B����T�(��G���f�*�N�ۊ������������l�f�P�t��6zH�Ue��!Ȉ�(!.��V"$�5�J�9$���"  ���� + �l���9$P��EH�j16�)����+��I���6���>i����_��ര�^! #d�@!u�h+$��3��GH�����!��(��6$`�������+_ExLACû�Y[\ʧ����qQ���vLU�ML�[.` ��`g�|!�A�?GD���Na�J �\J�{3�8Y�m��L�V��X����Sm�XX�S#'!�p<s�g��P�RVw�m�x���K�1����[�hjR�L��Vne%Ͷ,5�2.l����jkW�,�$���Z�loW�-6�ܢ�YΦykq|�Z}q���� �d}Pp��a0����b�(S�<7sm�V���WJ��V3vYQ�� �d��ۡ1��j��U��{WuL�j�.d�<��ڳ ��׭�'g$A�ޘع$���V��g��רWVk9����U�9���ܢ���g����(���ur?�2�߅�n�������w�;����|�/c@�}_��$@��� +�WsV͂�����@�iG�K�h�@�x� ,��V�.��Gf�$��-8j�]O �`����\��W`�3o@y��^�����H��](�6��g5 �2����^i& $J_�A�,]�I�*�����L�0�IX�ג���CA) ��D�SZ�]�̊��% �m�R {``�~��!��P!85���П����Fl�-I؛C�� �EA�+ �0�A蓩���c���Q�`;���w�͌�VH���Vb,h��k�%[8�y���O�T�������U���cE0N2�Jb���'JB4� +X�u��H�*�r6aȢ7a��g�� +flR �ÿ��J�b���y��}��q%P5�D����*����Õ�a�ԧX\*���8Ju��A�:�b{J��^�x����勇�e � 빊q��y�*X�~�]}���k�r�\�P؆�?�����V�e@̗msz]��MXk�T�v�S�y�"e磿����o�X��T����M-����c�%0}cam.��i��'�]��nF���Va*a�� HOJb�.� ��M�����U~W,��q�|.�#b�F([�<An�5�|��,�n!��|�P՟�~��ן\�;D��B���X�j�6�m�#2z �1�bɔa[We��+ V�X��gE�k[�QK��rp'8+��;; 2�K��Ak��@�P�kR��\�(��/�4�;�vG�v ����\<���n��w�y�w���]m�o�q�ܼr���7?V�"\M�#�Ky:Y^��-q1ν�]�?��Eu�B�_�*������P��C4ǁg�!�L��̙�3�J��G�����[C��6�Ŕ�����㙾�ô1����q�73�q���A7��B"�=Kxy���C�T鳬�k���p�]�{��c�*���a���fn�A(��v� ���.u�8��1�qʏ������'Gva�f���v��{z3�Z�ͪ8c((Q��P��i���y�KL:j�:��Z���p���ѷd��u��g�MKG?Z�nqk6 �K�ǟX���Cؚ��AE�^<Iu����b\Ds���?�ko3�!݈�Ѱ��xkk����Q��j��f���*z-��E;���[˦�����_�����W��9"�H5�,��iv��!|�w�j�R_�洭�U�zd5/F�>s����h��98�v5Ooݽ�̣ 8��h^�B�'��#��c}���X���X���945CDz���cq���X?��:�٭G;V�t�/���,�/<Y�\�A2������-��DW�����eU��ܟh�'ik�_*��ۊ�}wɶ�m� �.���۴m�G��@x���M8�2p�4��g���׆f�y�KT�]�]{�����"�pp|z07} �ȍ�w�7] � ���6 ҧ�E���m��]ľ$�0b���f�.'�5� + m�6��P���6\!�۲M$6o! ��$Fb�)�h��%�� Q��rn�'�1 ���w��Jlp7����&Kl�%��M�%�ݡ���҉Y��'�������G +6 �(��" � +���a�kS�c]�!�~�*�t;QYwLa���Ft&���7�))̳?ME��SW�h� ŕ���S�3ŧ�HTk��v�Ȏ�X ���m�H���M�\�l���濫y��U�����s��j�X�E�&��SN*5/E(3���xn\Fc�ة&ʈ�n�i�ac֍P�O������� �a-?޴l"� �bћ�M������v,a��V���zQ��f*ؾ���ɯ5أ�k��a[�e�5_��(���3p��3����%�,�*�F���(Q��Iʧ��rY.W�f6�L�p���Y>�RA�/�����TZ~e$�����pR#��Y�tm�n���+��Y��+����H��):9��������鏌`l "q��"���HA�>$2��v%���(���H���Q�Nc����aEvۇE�6�k��Ն.��۶o�͡�DZ}�$�ˌ\tlFW�Z�Օ���Z����Pmy\w�C�d�;��ѕ��g��� �`�ю�"xÍa޷�lt��=g}�]{����۲� ��&�l�v)\��Wh��C�#vQ�DS�,8� �?�y"���:6qQ +��k�26�-r�n�;�f��Ϻ� +ōW)�O6�cTDj=i���V:� �t�B���&d%��\��l �,�|唗�#� �+����5%EQ9{׾��u��Z�SI�b}eV�X����Km�ͯ�2&>�XQ\1p�YFןY{S�Y4Ϭc��( N� KҔYVi�`�h�ץO�Νul�����痾N��~�2>6� ���f�Ӛ�����!=G��"ر���Wo&�)t;��l�)�l]Lq���t���җ�2Z~I2�Ek&{�˾��� �&�0Jsf!{]�& Y��#G�[�N�oeҒ � Τ��\�5�$�4U�(��8ϫ�ex5�������}��m����V�Y�������,<��l�~I�$�yx��5L��,��8$D��R}�����;7x��˫� � >i��Rj�]/�Y��Y�;�c�8 ��,ޞEd`�`��f�g�0���Y�V�_����sc �߉ +}�� �̀B\?�)v]�g6�����@ھA� �'�n->p���2w��*6R܌��\8�(�3���1.���C"���UJε\ vn�$ ���8��E�f �ua�*Y/=��#�f� ��vIAe�Ԭ���C�,�I�%dw��-�5$$��N��!&͙�R�����kbH�A�q�x9�o��(��߳�n��ۯ��6nB��q�b�nhLq�c2�G�9g{�15œ��+FC\�6jb:���f�|5�~�����a���_�k���QN�����K6�l�+1�x3�+�z"�k>窒� +��)a� ������f�$Q``{6+���@�R�@�ʧ�$���<��;�����kIO +pT�5�k��q�n�������� +Τ�+G$�(��:!�&�����nU���u����]V��[������7��]J�r�:�� �f�uaRKX/E����ºRhXw�D���jV{Xw_�� I9b=Ȭ0��:N�b�K�g�Naqi1��c�n?SC:�F���c�vlw6ޢx�=�Sz�:j����X�H簭�.ueZ w���? �!u��E����|�Pk+����"6(���O�������k���ɲ!u5���ҺB��2J� +�'�������3��������>P&���CH1i]��(V �+�ER10�� )���u��;�{C� +ޏA��v����� �+w^WR�b� �қ������< Ԃ�A�ǥ��+��7ZW��le~V�,u��}y�ӟ/��D��@�tW�z-t��/Gh�?#��?���y�� �}6��O����~������q(~�/�O��/?�꫟|��o��o~�s��������ټ�4lB��Y��m�����6\�V�( + l�v�E�6��A��EMy&�>�y�r�g&Z*3x͘dk����!^������E$N��(�i�!�+���%"�#�r2�)7=�j���\?�֔.6����JA�(bE�I���͉�\�y�\h��745"=�C�Gf���f�v��"4�Mq*��5�rq�F<��q��R�)A��7�6;�t܏�s3@����G�0to��!����5��(j�WuX.�� hP�.�Ŗ���y���*��P �gR`k*4��l��i�q��ϊ|tThA��@E{ד7�#�z�$�|�������?.�UL�M(��^����L`eZ릫�ZH�g|."τ��'q&�l���D��vٺL���Q:#�Lw������ʮr-TO�񖀬�> *P� �OS�}Ё2ڧ#��!�@�@Nf�>E#�T�i�9�ւzya��� �d�*-P�/% ��\��NRj����W���~�=���Ȇ���ZG �1�A� Ӕ}�aP|��� ��<�Nr�T� G�?(�Գ���P��_18�d��8�`M"^5c�'���)r�f5xA����x;P'�V��,P]a�m�+�د���r, �HP�b� +��<c�Q�8��a����{��+^Ѐ�5�BW�0N*�XX�esH�ոN���k����w���X)<�n�U�T� o�h��'$V�F|��q �W���t9�L�����!����r�����3UyӋ!��}[#_P�}�]�~�z���4��Y��I� ������E��}��~�U)�+ ��%�� +��bo�`����sp>/6���I� /$5��� 冭&�!���l�{/"%1?2�7�Њ�EM?3�� 4� ����\��r�"�U0��8��>#��<=�7E�䙦.U�I,q �������~<��[6��;'�etM4��D9�wJe����ڜ����<N*_P���0v�a=+�y���� �3-��!�����-����E� +���0���/��i�v���� ��� +�� +K��eյ�5�?`��~��f܏���>6�ׅ���_(Z=�@�n�1ж�C"0���M7�Xw�0�w�A��a����oH0��=Z\a�?��� S�7w���v/�q�Y�Ţ'kFY��<�,�f�l�,`�m� �t̊BD�ĹH�y~ �t��BR�T��mJ�uL����!`ٱ�؝u�v�6�ގU���gt���X���-���3�ᱨc|[|�E�5:p屌/K^�UnA ��u���ar=<Q�?bH>M��>ܣ��onT@��qχK���u �}�x�������t�qm�#�O���;��<���� ,7=�py�'�(�<�ʵ��q�Qp��]c��:�������ئ�Βw�O��������ۃ���bё^eUt�ht��U�F�G��"k˂)�a������O|��?�������I�u�^ +�g�}�=���Ig��2�<�'����-h�����^��������q��<�����u�VJl��)~b�u�],# |��鞧�IƎؾ� CnJa�pa;z" ��2 +�\��ux�;*�Jc��GX����l�:����q�� +��ʼn�1�V�m��+���w�A4��:b��5 +c�G]%��+1˰}4W�������6�:$?�����>�^�uc$�suCjP|�uS���vi��~B�@R�j��S٦�� D�񶭛�o��B�n.�*�n��:�Z9��9u��L�z����N���%�kl�eH��C��k��g٣�t�ǎ��K���Q�FG�G6>9Fz:�1NoX�� ��]�Vj~�:�]g]Q9��M +X.���z�����㢫\<M�o�&��މ����+�E(ރ��#�U��\�P�r��7�������;Xo�����1��+͜�q9���4��A;�Es0��р���SwUS:��+�i��赯�cy�'g˃�"|ޓ_h�QMOi-H���f �. t~R���E:�A\Ă h��lE�2� jG��IA �z}�h�(�a��wv�\s-�a�� /��u�� �lSY�a���]tx��ߗ��,rg:���P���87/P�Qg�;d����w +C����u<B�׆�zޅ�]��<<ny�����S�h +CF��+�Qv�ّ�����8��"'JNl���X9��b��x�(��cCO�_��3�MZ*�^.�&��k~8�|��U�g��V.}�ac�:(r��ұ5���O���� ��o5:���ٴ�Hp�ն��V\�>�~�ó��[�����7r��^��S[���%�m��螿������{��&HH���6?��+v�8�U���4�za@icɳ�'�����XlT1�=Ӛ�3����[��Ѧ�?6Ɗ +ps���E�������Kl��YM�I�:7�F��ڴw�%l���@#����t��{e����pB�ܻ0��#Ow��X;߲�b��-����-#>�@����N��\��"��Z����צ�Ϻ~��_��R܉�0�f)��RVō�`V<�ym�0Bc�Q+|�!�l�����bxE�.�`����!��&�a����刐c�C��k���.F�3����[���폰j�z��$B�ی�ܘ�"��W���Y.��1*�f�Ӭ��{#��s���i<B�1�+�+B�c�x����D�>V��� <�+���Z�"[�-}�U�%22��F�b[n#��r$;b�^���/�\�W�[�4��UD�&��H�|Ē�du'�H�E�is�"-��S�*ܰ������§�DY�}�P���H����s�5#��]�H�����po#m�y��^ o9R��Q�Te��#�zd=É�����G56�hվA��mwY[߃(���H�n{�HǞ'ɱ/�����t�"u��Xd��[$�cg����ER}�%��|3���oFۗF�?���"@{�U9���C�d�g�Ep�Ѿ�݉��p*P��t�q��^{���%b�=��^�Zʊ p��\���f��ټ�L�q������2!InL���X)���2� o��u�*�\ +���Tp��vi +⬟�`���SZ�C��u�r|i�^š�D�*Ui����zꊎ��+�W~i��Do�����c�� ���#� x(|�x��O���t�Q +��: +p>�@��q%�^�>䱺���vu(�� �M���8n]�m���2>�M˽$\��6H;�z�>�;�`��<����2xwR9��֙��_�A�Z'Ԛ��I�cGP�A�8��H��7���^���׹^��_F�GG[�W��9�B9�^�*����+�h���Q~U��!��d��T^���Mdx��e�:��0���<��JG� � ���2/|b^�u��)�z3ޕ͗�����$��C�i!�o�:� �}�4T/H���o������:7��w��쑎��z��L +��v����t^��JVn{'scT��(Tc�(���R���g��l/�- ���(B� +j�,��\�烞Sa�Zȓ@� +�H?�n�����BP �M;��8� x����O�nq\X{��h�!��� �A�؀�V�q�����M��rS���f�~<F&|�d����U`P3��=��T�uܿ�>� +�P��иrd`��/����q#N<>���NE��힞�:ƺ��.=��(��=G�QS�Olǎא�5,)��C��U�h��LiGd��7�Ź���J����W���E�8$.�\�Y��>g� j1�����P�}�t_�k�ĸ��L�����b5=I�ʵ�3h: �mcb�v��A�BIp�ԟ��db6�VX����†�T���t:·}:�^��+�%� []����[�[��lݮ5仺f +��5�� �Yg۱���|�_�"��Y��G��7s뇏�㟳�~��v���V�i��9P������K��w���匧G��!� +�R�a�(Ƙ'��χ�$,����l�� K�L n��0��70�(�:��m�*M��������~c�b)����DZa�ΰX�m2��|������ H��Nd��Ȱ�v'�G��7Þ+��*J�x*00�}��Ag�>����$Ԁ�V��sh�,�%=�lg�ߥ�=䓮Nnܰ�;|�i��X�HLc�ž�zV�!���)6�#ZG)����+�"��f�9Uh����2_���?��8�o�=y&r�4��w�,1��e�ӎ���p8�Ɯ�Y�99���j�mqkW�c�V!-w?��#���X��~AER�Ɣ%��Al������Y�&r L +}�G|�st�ODQ�/�'��[���'���ٿ��_�u�� w��#,�J�����ó!�A "���X#�U���vW��P�/���4) :���~v��!$�.�l��L����'�T��›: +�}�!�p�����tءߨS�z�}.s�� u��յ?3�y�J�o��4���^`�a!�np����� +v;���?���:�r� +��7�ƹ���t�N�AІ�.��n���僡�f����o8�[�����jP�uk����\��O`x`l=�1�,\gv;��y�A�Τ���ٺ2 �u��ۯ��w#�~ܱ���;��%=����Sz�Z*B���i�4���!.4g ���8�)�0�.{�b�5f���a]db3���1���߰��DqN#����1Z+��� v�X�0�+��� i����;����`��ψ��;��=��Q�����eP��z�KC!�i�t+p��Y�����L�<W:���� ��x��D��]ɳa+�m5��0�txTmZ��=T�Oz�,��-w_@���`�Nz����3+�`�^��e^�AI�G�/e���c�����BJ�;K��o����,�]����Y�q~���, ��0��<� h�1���\��3��1�W����Ѭ3�P�v�0dY�vX"0{�v��"C8������Ր�5M;� 6��=iߙ�w����r��Ĵ��M +yڹ=����*(Y���ڧ�<�J|�A� +�f�uXB��<��#H6�X�qh��u�>��=�$w�_�<��L=}w���j��� �|�p��O}����� ��������6��Q�n��|3����4&��W�2ie���x ��݃� �֬�] �w�-%6�ݸCtUT�w6?ߦ��?@t�+p}�3��O���Vi�>�Ԗ�D4N��\�����,�z��>s�%F�tz�,��M��g/�,&ztX�0�ҬK�y}1$q�vs �֧�'N�d/4���F6��=�n�V�?&��j;���`�h� �$�p"l��ܦ�!Y�s7\��@���ڥ��S�:�1w�U�YUn��쥰8�����5�"��|Q鶜��<W +���F��si�,�q>~��n=�U�A� <,� �XgE����v��G�p��Ū�����9o0d� �wl ++��D<��g������_�q0�<�IT7�3��'������������eٙ�����*Ad�=������dVV�u �F��`fR��`d*�O����?�<���F[��� C�nXo��z �oM��{o/##��2�JUA.����^���0@Ɂ��"��47 ������<0�!�*TD,@C�iE�<�I �98��1r�>�� 5G��רt����4�� <��YGBEr0P�Se��Ǡ�h�@i\���Qᛱ*�`�`������TZ��Q�M�8�H�h�Yb���� Y�Hf�j�Bc%�OL ��偫O��2�.q͔�E��1Q+)�4��8�fZ���Q��R���~��J��b��E�t� h��tr�u�� ���%��K}Udي7�!�V -�0�a �E$7i)!\0<����"ܭ����!���U<��/��.b\\Q/bD��,j1Ų���1^�ʐvSä%�= PML��r +�- 87WG�naj��8��q1������ X!�0p�(�ev �#A��5 ������5�'xj��0`jlJv p����5�c���5 ��T&�0����[�aa��\��?����d/���5 �T���*i�9�5�2P�ҕkxy�ߊ��.�/�M��k��L�<d��.h$��'�p��7��Nn�[`���B;�ț��������s�ۗk�֕�G�?;������^hM`�F�����yOڃ�a�0%K��nz �๲�]‘����%� 'h1�K8�N@�`��#*�24�\��&d���% %<$���%Lى��g�p�0R h*]��c�K8R<AdL.a$� �]‘J�:�/a�[��sz#ٌ��&�q��z#Ǔ{7�����oaJ�!��_��%،�k�����sbg�{�!�8�{�����2����-���aJ����{��)dG�a�4Y�{vF�{�gT���a�� rrc�ٛ��0��P;î��u�k�L76��!�L��Ț!�<��g�!��gLTC���f�#�|��e��Qܑ�13D��3%ʐتf8�e*���?�/������K�f88pJ�`*3áG#V��p�� +���ph�� gf8lɀ�ff8 +�������!jM3�� �b�c(�ab� ����;1��s��j�C�h��[���O�v�h�;Xi��TE���)�i�mm �yb [j���3�� $�w�`�{E�ʸ �A�����>\����tA��g���D��>��$fu}V#�g�,=W���,�E6:�gQ-�bg�,jQ��n�{j�΢�-��-�`I�u�Ѓ#|����@Q��Ͳ���GN ��g�,^"~g�,5A��Y�Ņ=Sga�'�AUgQ�2M�%L�O�:;yL�����'���`�,�JE$L��*"Up�H�EՏ���(��Y�}��@���)�T�\t�gQ����T��"S��&�gQ�#���c�, +xx���>�����z�.A|#z�qi�㋃�&v�� �sB���!ab�����Q���"���N�$���Qܜ^������s����sC�1„����P���rt\����,��e8I ����T?���s���F��L�)����u~p���QŠ�(�PR�`c�b�p�0� ���]dCŠ�u�QS~��Ⱖ���G�["��BN��aG��c%P@�$���y�TS �%�/jj�H�$6�S5 ��›�3jW��n>�," ��%iZ�2���+�o2�$��Tg{d{ "T�D��Y�ـe�P聡��6����j��l[��CRJ�SI���/��gR`�.�E_�0 ��$��t����p����sA�FAb�\O��U�|�-#�2�(��O������א5�Q��@F�:�a��O"&2R-[����9kdv��Z]�8�5n���ų��H"��ՎCD[��@��0�B��UG� @�K�J��Tu�� ��t�sP�e��e 3��?��2c6���T�A�\�Єا�T�*@� +���4�Փ����݂���_��3�|���5^�8XT��Q!YɌF ����R��;�#(� ܙ�.P;�BkZ� �dcR/z +��5��5��q��S��<~CӁ]� �C�O�5�{�.#��A*����� +������p���@�@��j���%��O }��7+g�Q[��)+��`L(��]��h�Ca1Qc\7~&](;#,�k��J��P� +�W�2x߳@�e�p�d �`��M���&U��J��6b���pĢ. +$��m�Vذ�h�jB8��I8�1�Ὄ�xf�xz�heڨ� i�?Ctg�;�d8�l��},U���-e�A�Z�`0IJY���Ś����l&"��i��l�ƹp�lR����Z'?����0Y�ŅL�C�����Z����`\�;j`���`��m����V7Jp��$u2 ���&���'������ �<Bєv�`i�\�١�~�l��%��\S?�h�� 0gȺ����/��Mvp�)�x'Sˌ�xJI�d�<ʏb�6>��HE��>� 1���|�w����S��*B��S1��ʮ �z�n�$Pc�AE� 6d�]$<�Qds�p�T��2�����#�N.�@�G��h�sJ�_�Xa. ��%2B���^��B��{12y���<Qo�N�^�FUy�f��sa"{CJ��Ȧ���E�67��XA��3F5�q��5&QL�8ԹEy.����H{Fe1���g&����]�k�e��B�0�31'��a�&-��N��(�b&���Y]�ŗh6T�oH��0 u� �&4S�1jř`�]G��L�*映5�� �0 � �S��>`�܀lP�����L̀C 8����� @�Xpx�b<�lpx�x�D�DD���ĜJ�T��D),Ѹ�8�Z?H'�A��Lu�R�t���G���M ��Or�L]�ϩZ����U�L�\�3�<�0�*K������?K�I�b�m`�X��������`�~�YW�`Hi^��������$����j�hc��g�I��/� ��?��^'��&6�{�!��̿J��0s0p[���8az����_.<�>�x= ϸ-�T�y�r�Y�+{^�92EHmLn+I�l�f���1~:�j�e�0: +r�l��cE�5 +����˃��ؼ�^r���f��k��rh�}�r6D=v��E�{�uO�+�������>� �Fo{��L\��d�X�j�&�]J��ur��R|����P�fn,�߰3�� �Gà��턢��ұ#LHi�5���[4�:G���Y�k�E >���V�Ÿ���8G%|�3�� ��j`�r=\�6㌸(i��h1�ϩ3Z������ �?:Ӧ�H�`��#̂`��#��>잠 ��M�O +��++`�]���o�,� �~CZT�el� B� +�v_�t��R�eE�&�z �T�h7�8��nq�Hc���7 +� "L�SyI��-�)ph�:�0p�kqRɃvt��TU1�j��x��ґU@B�%��<���)rb�LF~jB�S� {��OUR`�E�)P1ARq�v�&՚X �2ɽ&x���7�4���%�!�B� W'�.ޤ-�����Ł⣇q�dg|�c��A��Q�(�G����6iG��J��ǣ�i*�S"x�#%B���k�(Y`?M�@a��)%A�즼 q���G��i���J�"D�TZN�%�U�A�^��f�!ҙ�F������Q��KL�Br���p�<bAr��AQ0��(�kT2- ~�*�ئM�/�]��uIcW{�� �j�h�`�$��Mae��D��l���\� �fG*�(J;��)GR�{*��RO�##��t��5C]i�ՠ���'U�xL|�b�@�=Ո��>zf°��9���b4 �&[NM+���^z3J�}M��)5��Ih>> �y�O���S�ƪ>�j��ˣ���2���/��lG��m�q�&g�K�v�;7ݩf��l�B��fR�� 3=�2�2�b��Y;�КE��Ng����&�k��L�3�c&]�Lf�5�e��)�3+��B�4�4�􌯪��دٶ�E� |���T�߬��RP��]GS�]2fķˈ +���߮,sصf.���g��&��ЯR�R̮\�f��l����dz�w���c1��|13��|6*�t��2e*�L�"��+�$#u8�(�Ku�\W&���k&��+L���.��{զbbw��8i:�8͏7L���p�X$[����]TA�{ U��ʉ���*�w���������C5u����2�?v�Y���s������"��Ī�t_�*E��<U��gZ�,�^�f^f�pS��\U��Y����9U%��^���͟�����k� P�GLU���2S/��Q���-��T��T�(���#Y�1��U��RB�M��A0�e��"S�YpEQyU52(�W5F��C;u�-�#�0 U�T�F$Yʕ@P��c������Tz[jt��T���ojı!���\�6R� ��P��M�Լ��V�P}��T��ij��멦���j[�.�7w�����F�n�<������(h�e2���2�QA�/8�R�$ ڟC�݊���6% T��ڟ�,q��s�0�o*�w�t�뽯l�[�nS�D�%+;�n 0v.���PL ��^o.H�x�T԰�Sd�i�P��OE�aj �^g���6�b�8�tU���Ӿ[SKc<�m���p�$�My$RL����s 3��@�Ďl�Ӄ� �yZ�r���ءǵIծ�V���0�ޖ2���)C�}��z���-�s�Vo=�� 5�rF�?E#h\ ���f��0��y�)9�����<��#�"�Dc����A��8Jyu�*��iSKc�q�E�h���� M�"ۨ��½ �]L��Tҷ�6�q��R�� ���b�ɗԚU�a&~���4�� ; I"n��?@�dvR� +������ +�_@$�o���lR�&�G{�@�0.@^��y�]FF{��x3�0�'�~���!>����g��bр�^rm���֚�����x�A�zAX�CP���R���}��0)6��)^���,9:�YE�X����'�+�+MV��J�nJ���(�G��։��i�m��t�A������JQ���s�V�ڋ��'��V�D + +��ü;z?�T���`Ҥ �) � �Z<�T�WbzO�!&s^�������&ꀎf��E'+*����horb�m xڼ���F�j��"L���[v��7e����1��֔��'�,Y��Y��T�Fi��f�N�N�1�ټð�7�bkd�g��Ƥl͍�پ�N����E�g˼s�Ǟ���o�;�����~An��D�R�AC���{���������,e���,e���z��4��R�-��R�-��R�gyn�2nyn�2>�s��q�s[�R��,���-���-���g�n�0n�n�0n�n�1>�u�qKt��qKa���Y��e�O�Sd>Mu���Y��e�[��e�[��e��R�,e���i�xOuӜ�Y����[����[�����R�,e�R�4e\3ݖ�h�Č��a �%V5'�;��Z\wW�zN&W6� +��#\)Njؖ\�SԜztؘ&j ��kj�0�a�� jV�� � �*CPs��9�ڦC�/2���i]:����Bm�K��� +�F�4��")�� ���n�Ps����洴�a�)��T5� ��;�*���������P� ��:�QCL�O~y�� ���2��"�A�-�����.��LrDM!̆��� �ځ�v�hF;���~�� B��� �ذ�.B����S�5<����*���݀L�o��ᄦ<��I)O�`Rʓ LjƓ L�x��IK0�C20)cH&� �cIM��I)C20)cH&5cH&e��I G�hRS��Ѥ�#u4)�HMjʑ:��r��&����IM9RǓR���#u@�)G�Rʑ:��r��=�-9�= +qdbHy��'�!5�2Ǔ�T"hN%,5 hR��9���hOѤ���%E8Pč�_��z��H*9�F���p�Ō��>C�10����`�MG���h: +����$���t,Vp +��P�LG��;��B���tJ���(�~�Q(�9��B�w0�h�� +��P�s0���`: +�?�I � LǠ� LǠ� MǠ�gh:�oh:��oh:�u\���K�.|�e ���04 +H?G�@{��%���������'T�k�oO�`P��!�ܷ��[C����7��y��>>jYpj�tG�-pD2����*Vȇ�L�x���-������t�WI�� 0ְj2�0q4��q�1(!��z�֙�$a{�AW����$q��� ���d��G�R;�=��t��cY�-!��2�g_$��z��+�͐��e��0FH;Q��<�W(���5Uhg��. +���F��ǾD�I�S���9$BF��p�P�~�&����]����d������`&B�R�a�l��K)�6c�R8�g6F.pd3K�)�S�]#oR��TOf�Q7���=f�š��3���2�mD�m��(mc�l���d2�z�l��i�%Z:�jT�Uu^�y������'j�� +����M�(��A 5��p2� � r��šYPJ�k��i�a��R���X +[�(�r� s0�@O�����$r��䓑�<G��xsL���X၀S$���p��͑���7��S$o;�A2�~�of$�6D��$�pd��g͋b ��B���'��-Hr�)"�H�f�S ^{;&A��s`C�׎ �F��[^�7(�U� 7�11��Վb娒 ,���� +��^��G\ ��u2^�qJ�fqߏ��ҹ~zW�ۉK8f��6�,^Ƒ+� g} I�lCdmP�3yg���HXޤ�#A�s�1p$�S�#'V1�젔@�P��)�������b6}�v:,��H��T����Y�푢���4% |�j�g'-t�j��:��/t��+��pb��=D���R<��j_<g��\7����V�@ub�-.W�� 4f��'0�G���P� ���Pdt I� +�z��AN�L*�&�H<���G�S>m��Ҡ%�����Z��M(_�P 4>�6� +R �z���� +�%]z�/J� t�8��a��Cj +��gNģ��#3�mB�_(O7�������l`%r2�+q��G[��Q89H)d�E�/�>��Q)��~BAy$�\�ʩj��"��NɅoM��͡��Z�a�W%+\[�ؑ����� Z��|s €��9,�ӝ�p��$�W�m'`ΰ7�S�3�}F�����h��r�D��8��橵��X���O�0z� <;H�,;)0L�T�� lp�c�ENZ��18�'q`���.q5K$�bz�H`�$�����7�,�BB� �u�,-@/ğ(�����Ж��O�9�p�1�����H�?<4� + +��Z����%��Ķ&`�E5���j3'eH�?�IY6A�%�΅*3�"���f%��@���d�Xb��P=�tG�t��(D?�I���d�07����(H]����|y�R�Жf�@F�:C$�W�\� �Z:�)j� �W�E�dA���vdߢ�̡`��R� +!J�7��i c剥7����2M�\���er�5!�ec������k�'�f6F��w�ɔ�ʂ gJH��a]��U;��s�R��%��&qz�fTI^����AB�-�̾iT��+e�[�#����j�L/Jx�)�-n�����^�h�lv]%�嶚�&���l�cdk�m��3��� ���>C�R��P8s�gk�G�����1��/`;;#���Qr�8�@�is�ң��١D0�vv����=�x�A�ŦL�xi@N7^�|�0�&0 ���t(���ΛHUq�y�nLs��R��B��B f �ّ3��%��Xo��e���z�㜇WPN�T��A�x^o �G�j�n$�RY ���u)k$�h��(u���� +��,�z�#��۱m�!T7�A���g7��w����W�Qf7�QM�@�t���T1 g��\j9Z�r� +�T|1��9@ #�m���Ly�3���A��� 1�&~!uTb|����Z2iI��j&�!��fz&�4~�I�^�-����j��I����� +!�ƭr-�R�F>G�]P�� �/b��i&n�4�B9 +;!u��iB�J�(.M���rO�����'�L� �ER������H� +r�s�%�B6��*0��xdH "X�R�B��Q!�۬q!'D�D-+����[QpwU��D��L ��XS�!疪��R!h��� �*�˘^ +�BZRU]�X�̙���ZC/;��]��J�@�A�Ô��.��D���!����)W'�0 bs���AB�a�'.J.��y_��qN�Z=�R������=m@���2˨o�#Q� ��������Fe-�r A���v�c��:�65����Q ��*�Q���)g�M���}9E��9D�wp(�d*�ƭ+A�tX�S�,���T��L��c�\���c�D�#`���t����䪻 Y��н��&���x @���e@<j�����c� + +W���C Y-� i��-�?�HP�F���6 d�h�uĀ�����v�g<��5��]iS-|8��HJ̅2(k���!Ɛv��9�䏒|�ܐ�Q�k��S6 T�sն�G���_px�;G�l��S�«��(��U����`�� ��(�a�[���M�0�cΓ{ +}���ۆ�H� �Sr�!n3%���j���� JCrRցn�H��Q[oc����H���9��1� 0�@ύy.0JH�*LL"sD��d�bU6��f)M�H��&�n�s9�‹���� s�+lR���� ��7��oB( ��"��"*ة�{z��lK���F$_g�"�ʗk&��C �q_d�Py���J�D۶<Ú�� ��!���� ��Uᙀ$p3��M�&`3�����%�9� J"��w�� +�M���r�P3U"p5{E� � � ��Gl? �G�8���w��2��%`�Btً�Z�����P�l�RT�œ�#�DC3��G�4<��6�U�e�ݦ�Q;�,��*z!���� ��-�3�˪a#�,4UD)|�G��"'�[�uZ!�֩H������cD�:č���^�[o�v��@���cH��X5w��넪~)"��n@�/e�t +�qw�l� �; �8`1�>a ��6;FNm�-�̾iT��Wz��3�Xk�\�AǦK�>�YU�P�}�!�R[�|%�&�W\�V}W�}k�y��7����>T��|��������l�ov@��g��L�z��p8=�j]�gV �v��N9;�f�4&a6O�#f�q5�O2+��-��Θ�Ym��e׸�Y�'�����o͖l,�l�3�m�i��f�����vSM���FQ���<_�������R��af���tfҷ������T���nU/B�����oi%�.s%ڝ�~�.��c.?�����KYA��,�����o���~������������e���h�>�.����Ky�ϚK����R���L�4�LW� ���¬8�f"���L26�����O8�͝h���MZ7��L�7�����T����3œ��h�[�4���Қ^��\�|��;S��/lj�y�U�2�L3?�)m�6��|�3��?':���M�4�L�4W�����Zkw�O�[`�3�*���|TO&�K1զ=�&ߕn��qH���țg����N�*T�T�|���c��,�1��Z�,��jS@f2����c?p���'�u�݀�6W3��9�1�����Tb�S���Wjv�W� �� Ո�'B�<}¦֠>�j4��7��-���dki&���j�Z��'w�����&pX�:����sn{gt�-�bo�z۞���� +!�������ُ또�2'�ͷj 8 +��XK�� T�@?�ެ�/{����[�nK�" ���vZ��H�N Tݹ�@���(�!�c�c��{KF�j�T��FDBF8Ȉ���Lo���U���W�Q�����Fx�� �v@6(�h��$2ڽ�,j��=�Ԑ+gzD�<Gx�JD +����B�L�g�9�5#�ž5�?�!�� [׎���!�����X1��cH� �L(�����c| {C�|�t�w���.��oǛRZ)����� 𑱋�s6kka|;>���QS��@��;�B��5���)4�2�;�2��Xk���"�r$���pM8���諦Eqj!�A��–�C���q���&���"�+03������i��oF�*�����~p�8� D�X *[����*:����"d�;6���?��$��r�t?�f����3@=S����DZ. & +)���"�t!f���gӊ3i2���& �T ~a!����r�v'St����l�� ��c�C=1�>�]H��P E� �Y[H&XH�&d��q%�7F��݇�,�F9Um�lP>�<d�`���ڬ��U�{7`x$眭0�)LW��n�M]q2�"����c]�l�Cj�E�b�֠(ۆH��@ ۮT�*i��n���n�ޖ��7� i���Y��D�i'�&�N�M�q�����0�bK��g��ƞt���ٞ�>���qD�c�\s������o,��� +�~A�Id���L��l� +�V�����*�U2���G����AA�>���Bi�� �T�����LDžS<y~�o��-���%�b@ 4��ËE[�z`�$)Q���4�#�����a�B����S��¸�&[Q +N-��}z�ׁ<B*^���!��N)�)�.�+uT�_���0K8��7f{�:a 災�d9Et��ޱːȹ#]$_��4!� jb�)Bu�f��59l~��x\v��*k;�#d +���&47#�&EJ��#b�Gʰq7x�e��@9���Sm�:�"�t�V�B,r����q�*�M#{ڤ�"*$!�ui�&+L>j�yd�n;� +�l��"��`���3l��a�{�o�� �~B\�l����-��kߗ��^�j;Iy�6���t������ R�ZZ���t�'�z��qeG�!&�7 �0���%}FB�M\� ��q�yb�� �`�P%�`?r&hqN�{)�t�3�U�AI�$ػ9{���O�?�^b2|FT��*�C����=%�5�i�-$�%)� �8aR&�]\����CS��n���E8Z��� + �\�_���}�aEy�a!������:$���Q����(�������)�q�S�Ǵ���2 �R‚6��bR��̀����F��~"#����8��y�/��62;�7nN��^�J\d�*2�.�.G��d���?� r���E��c��ck �<9�;����n治�X�jC9����hU�_�������pfC�+֧>q���,��ٛ�i(�Eks��qr��������r�\᫺��L���M��Q�w�@�j�GP+]�6�v��0y:����)$��S["�tjy���"�<w1@M�|����c�)zK�y�_�=f�mh���:��j� ��6_�|L��Α�?k�FKgRe�W�n��]__4���_��ޞ�\=���'�:{vvr{�jƑ:��+ڃ���b��F������ɇ/n�������'����,�`��Oo��������i��?k<r��_ޜ}q~�哣����d��l�7�M�����>���ۿ�~�����On���|�G痭��Ϟ?��ξZ�ۿ����] �}z�� d�9�)�v�������2�����9���o�zv&�^�0F�˳��vc�a��u�s�I�J����_��wv������“_=�&�{��O>�������m�L���6!�?�}� �/ݼx������Ͼܗ_����ް�a����{���i����������܏�?��g�|��'�wP*%8�.��U�`\Nɥ"��v�c�� .S��ǫ[<޻�N�bt�d0�3�P���Jh +��6��H�&��AP�v��[�>�f����P��H��|<'�A(��2�����Bt�§���)Ȱ2[l}5�7��Q��K�d��'QE/7�o��W����/��)U �T��7�v����t�{z@^�!���Mie�:/ȉ���IT�M� K#ǫۖQ�kl;p��uD�6!�5��G�۞���^��ݓ��]:�@��1N� endstream endobj 69 0 obj <</Length 65536>>stream +�1�j�w�JW�Kd�MLkd�h�L�G�Ȏ��x�Ε ��/�G'�z��H"&JDe*zj�=^¡�yLTZ��~�}?r�8��lL�"��)*��D�*ڈ' i����ϐ� W�| B��u<�W�rӓTp������D&M���}ҏ�b�La�n �E�;�B��L�?���7�H�g�458�D +:����ԃ��'i�%��pos"��q!��;��E~����d{��T��x\ֈR�T�FS�<� {����Hk�D��,�~"%Y�!#A��h&Rh#F.�"O�BO^O�F#��칸��w��z�� ���[H���`t�4�#ӆ�t�eb,�~�R=�~�� +�v����򐛉H�Fˆ�h"E��.��#2���2�D��Ul����9O���z�Ԓ(�� ���g�!m#�A���"���(���F�E�A�l.�� &��h�{C,�=c[ǒ���;^���a��ge�e�a]�,'eE���}��%>�kO(D�ҫ�%R�e�:™���,��r��e�H\�h�;H=H<�~`��:��L2�g��N��en’� *(�D_��rN���ʇ=��[O�u�:Y�ƚ0%k��B�z�|09��e>��<3$f"܀pW�o����?ՎA��e�1�q�A��+��"WF��F� +�$|X�!��Z�� 3����߶{�d�&T�$�u�8�������%<u�H�JiR���R�* +�u���ە�� b'7�����8�z�VP����-�@�����&�i�1r����ӏ.�����g��i�Hah���Km��,�\ ��g� Gy5y���壸�E��~tB����n��J����m�G�̹���N��N���G'��G��V�<��<��<k}���+�ӏ.�=����K�ܝg|��>�$� E& �i� ���%���R����h���c(� $���Pz_!0��L$�.R���J�8DC����;���MT�*�K#l���׏�_� �!-�*dX��� +��fq����OG �n�[)}1��ȭ#�7S�B�U�>Ä ��1�� -S����p2�~,ֽTr�^��D!S9!�<����r�mP+�+ӄ�����g �^ +���M�( ��IE�\����3r��9��+qT"�!�� �S����o#b�U�Y�_Aڼ�KY���t�qX-E +��_s�n�UD�T:Q�-�gr��:r�z(����ʳȺ�f}��zGaULn�C&��f~�2�Q\ٯ#�p�0K:I0Q_ +9P��Ts�X�9�)sM���I c� ˹�n_� +VD=�%�>�G����m�x��e�%ȉ&!Z��^�O�6E�.ð �б��b����F�W�6�1� +�\u��]Kc���q�^���mB6�^�ٕ=82�����?��)����'J�i�J�nU�}施�� ����kڍ<9��y]S`m(9�ȍ@�L2��"��d_ ��AN|;�������p�OJ���D��ʎ�/|P{��ɚ�Dȱ>]��lf!Fm�!��s�t�)�S7Q�^{��m�ˠ|zF]hC�N�c�|����2Ճ1X%�L*���nCG0�>�6u"�����Ȼf?,qTD`I�&bȑ4P�b�%���&�K/�����ଁ�G��ԤU��r�6�+���R'�Ms)����\��B�����뺆gu߅Rt��� ���ٚn���?]�W�����uH"Z@F��Q�#i��� ԡ��;������H���Wv����F�b߅��`������v���#�X�0>3��7��Z��A �ԥF�ՙ�r|�E�� P)�~ɨiԯ� +}6J/h�X�ڋdLk�ڵġa� �R����[c��ɘ��I��2(� �2e�)Ua���܌g�J�TWbUNm�F7(��] � �3�hSƩ��=�F��4TYO��!OY�1$=HK�;�kW���ru�����X�I{�����J-��C(�x^"{��ݶ֕�~&�jLA�8k��a���L0��[BXU~����&�{y6�% |e����6,0ct\���υ�����R'���gM�SQH�n�L��c�_��Y%|-m"gYO�= ^Dr����8*q�2���£=%/?Y��brz��� ���#'�S"��c�N�Tu"CU��.!ڸ��܉�G4�"K�tvC�c�0�K/�b� P+��/�jI\z!�a�[�zY`r,I�P L�Ed>蚦/U��U��#�� W5�H\ف#��v]h�P�m�ݮâ۴� C,�ws,J }ʚ��C���D��k?���5g��3Yȇ��P�����ع���&�thjOyͱLF&/��MԳ>��ڡC��B�y v,G�1�x7�+���f=�"���� /Da���YL�j.z�8�����1�����w��5�D� �",?�f +��:F�C]���O1n��&�nh41��E䰀��G�j��4��� ���l.�b�"��Μ��X�(�Hd=U׀/L$�˕k��N�:��ƥ��w�4�c}�&���R�Xv�@�tDL�t Y6��k� 1���h�e&M�i��$߻5ı�����!�#�/�2ku�����UM� I�,.�Qd���2�&�(r*i11:��Fׁ8�j���r��`��66?���l.U=�����N@�x��5���/�S��U\�:;�:XU7 �K��=Xk��\��n����[�h���Vc��fo��:����:T[�b�I-��n�XC�Z����1M�E[5Q�N�����9]��&J�� �E�ͣ�W�=Z,��ݔW��ןE��SX�*� �j��m�*����+��Ď#rJG����ق�LL�9�B������@>h׳F��渕�� 2��Z�j r�D�mc�j� RP�Rb�3��`���>�<�[������v]�D)�֘lh�^��J��M0kaHMO$�����5K������h�f�'�3�И��,� S;���N5��ήZ2��6=D��<���\�<] =)� +-rG� Y�4o��Yщ��3��G��)���xgN�V�nD.5 +f�6x�߀ԗPPB�X�!f�� ��xu#�z�6���F'�r��K������L$!w�P����v��Ɍ��e�K%�y�c�& 2���s�n[ծ|y���;� .D.樤�9&v��1-�/�&��}��_��f�N���ĔM��쳲_�a�:�ExF<ܥ�������T�6���XT0�tT�DN$ab� �MmL ����ޏ�K��P�ud\��#S�h�3A7�O�� �x,�Aē� ��D�����jW> �VvJ,��F�b+,� 90^#�i,����+��\٬|џ]S�cPO9a�01j�$�b&�lUn��t��>ۍ,?��A?w�8��ȡs�Ug�e����2�z����T�#m�L��&�H�\��47q2��rȦ�F>I 5�)����V>��|ol1�f� W�kg��l �8�ǜȋ�A���!���(��G�w��8-�!@,�Q �8F%��ZBG�¨ + ���Q'�a��3`HE5�Qf�}Q�n���iW�`�����~$ �T��� ��9�CmU��2���0u�!02��h�B���P`�]����&�rE��*|T��R�b��sA�:%$?�}��B�:N����F��W⛢1��n���ʱ��> k���TrqaBV�ʪ�)�Z�G�@��j��bFF5]ك#[�.�������C����X�Zs�������ͨ5�:�6M=�m.|���Y�HS���k�Մ��v�0e����%�P@����5*� �}V�1p��rzג�8�v-vv�NO(�QSt�����wy�&H#.Ъ˯?�E��ʂW�����F:�����_ +9H���I@t�%/��DJ ej[�hbB+Z�͹�*�%.7HOg�yHJfv�lv�T Y��jp�i�� ݬ�f�L(��i������~�4���e��p��ѱ5�Qu13�k?XGޫm����s��⦆{�6Ij��$:������! 9{�F#c�0��Ϥ�����Q�G��"j�' � ��q����v�X����B.�^~��n�dq/φdD +�g"'63�K��[,s#lX{�w,�:R���Ԡ�u�G��(�9�� +�HM��3�����J�D�, ^��M�ʃ�Գ�$�]�#��+������]�!Z#`9�b��|��̀0�0�--�>�+��Q���~LV�/���XȔ�%'�9 }LW�.d�X�vK �� .�ï�(A �4AD�� [�|3���'��o����$��$-��{��0�Hb�r$��ɣ�FP2kJTM�i��:]�0V�s��VpQ>F���D��J���@�� E� U����Du:6�h��Dӛxj�d>%D��†8&������g������B8 �)|d +�����,�/�n��PА�F���#�7�69�#P%'۸ +k&�#c�Iρ�=$Nj� +~�" e�D��&F����h�����h����O���M�1����&"Ǣ�R�`y���`&�����\�� (����t�9����ӏI�d#+/�9��FТS��A�X��FdW�q�e"��U�E而 +Y�������MIB��v�҄�N%5�2y0����D�,Ի��v �I֪���^�ˊ ً�N�M�qTc^o� ��!�7i�4l+��[.r���?�[��J4�Ϣ�r��l$�1f{?��u�Qo�ʲ��e��f�GӼzY�\��4nN�60:N���H ����(5�+�hYl��P7�$���b� ��wW��D&��t�5. ��TRVfE ����lEė3o��dIa�L��`z����%��^���i� :��`<,��3�t7y28]�$��'��N{]��I������G2��0D�+�,z�Px�<��Tf�8c�y��i�@�f�-z���D�#�1$�W#��G�em���H(��*�@��dO}0�~fW���Ϝ�F��}@5��� P$����բjE�f����~Ϣ4�1>���<(�ʕ1�(JM�n�l +� ����K� �!e�!Z��z��A ���������e�2L�@�D�vG���e���~R�0����5eƠTU*��V d' 9Y0L�jc.�~EYg��)Ր��bDĐ�n/���Vuf����;1V��7��&{���+���l��V�+�d���L�d�f�F�v��EK�Jvѹ�j��ߺ����g���lPi/�D���Z�s@xX8��BN"%m�l6��Y<��`�0C- +Y�MYM�d����Dl��h3��!�Y�W?aV��h.���Zu��b��JL1�In;5!��i� W��:*��.����c����.D�7�X��!�F!{/'���� �N���=I>�g�/}Q� &D$��ab�ȩ�b��vB)v��MX�9�(�)�:��U�����' +��j�}T.���Q� lm $'�.{�\˂�>��,D���(Z!6�^T`Q}Q�n[P��z��W�X�j�j6����A��5,V��<x�䅘T�.�|����I��@��*%��1��_�^���}�E����iŧR̫��F���wBTɍk���YgoD�m�>]�����d�+���ȭz�׏EU+(�Iͭ�- O�/#0-4B,�y��!��6J|"���+6�=8Ң�Y�hզ �!ZɫH�L>&��ĕ��o�Rz�wv��lQ�)��]���E�@&���?BD'QS�m0L�,ݢ�m Ztq +q0��3C@���哒��/$�GS�PH��'�jv�s(� �,҄�x�8�G���� #�+��ED�t�P����)8���g�ˎGd��H9 �Ϊez%9,U�&f�ĜG�nձ3�&��{_��$s��S"�W;�F�r-�P��$�0�LC�Z�%��O(��P�٘.���׮�a�E�2�� ����6P-w�TrA:@��|^���)iz����aի��`2q�J���S��>ev +�\�2rL3����2�� @c�L�Q|�e�E��ED����z�NF� ��ƠLg�7t�K�RX�C(�LJ��:2��Q^�OZ*�E�dQ���-�:�n��i�k�0!i U�d��}4h�-y�4T��^v� �v�Hv��03op���)hdM&�{Tuk ���x�T) +\IU�$@$X�a���*(�c#�YՑ8� ~�qH-�?�M�'�s4o�/�$�1�Wm� + ���a����5�|��D��(��F��c!Ǭ9+��d"�Jp�_�hښ�ԥX�;Ii�L�F���*���Fhj=� �\��(�9��j~L�<zLmT�(���t��sI�D��[@^���Fv�^?J��h��8x��x��07�Ս�-ĨYh���w��hdo�f���m�E��>���T�v���K�U4ўڵt�<&��%�K�+� kQK1��Da�L�F ���܌Q��b�0���m �Ɋ�1��z��Ֆґ9����5T�� ��.y�j&�;k����}�䨁C�L!|�kޞ���IKvb�Sׇ��P���3S�;��2�b��3�~9 !(��1r��l{�(�j��8�u��[�J��M�~,�y�k�a��6�z"y�^��,��mQ��Ԡ�!$�i@� +�l���Ht�*� YV$h��1qܸh9�L�pL�*��6��9=��!�[�wF-G&���X~VY��<��ꍙ����M�Q�8�]F%�!�J5�A=*��M��_i��8�Ҧaad����i|�gaS�6�Q�9̡!�:�T� ���h����}ɰ&z��T�Ϣfˇ�>�g��VR����t v���լ��#�b��6���Q��f��M��+��΅h��fJOa��5��n \,�fKFV�3e֛� b�T�t�ˑ��$�&;�Q,�V�v�lV��m�n�o��j��+D x����u �ޫ1�  av㔕 ���Y�/�z-d�"�� 8������5��鉨*2�ZU��FdW4���D� ig��YjB�c7sv���Ԟ�-�P�qT*���N쬡hC�>�d��fR5ނ����9�Ɇ����M� F.^Aq��VF��2�uUrT�����e��$is4�e��/[�T0 &�lZZM�TM�� #��.��b",&W#,\.�<����y \�]9ʜ%o�, +�d'zg�S�"�4;IՆ���e�Iϑ<�)���� �|$n/վu�����m=���A����{2:Z��{K�����<�)���`r��8aWz�VL΄Dx*�g�^!8d�UQ��7���^��s��[3F������\��`5ڀl� ?ע��9�uR�޵Āձ�D�Aa�\2��������� �9҂�-�A㱃a@�)��Y�qLL� @�A��&�Bsׄ��b�I0�(U�ң��d/H��?r7�h(��� ��!'I������8N�����-����1��2=�S�I�=���2Tk�w#Gm ��,9��9����$���{.�GЂ�4\-���AN�q����L��f� 8S��9����骷/jO}r��B�[Y%\�р]^��PL'��{��ުQ �W�Z�uB����X���Y]O �M�=���z|B��dϙ�L�����$)���"B4(� i��H�<_�v yr�St7�'�)"��D2�*qEjL���H��joj;01dAD&n��W�'��:� ��A.s��ab�%9�ɖ�F~_%�� +�I�A��0����l�\u�0����5��4Egn H �?��,~T�S��YSG"NK\��&��jw$2��� �}D���+@��1J���6�f��~4f��*%9{�4=N��qz3s=�%pBy���/q*�����ؤ*������Y`[�+REV�x��W�t���x:#��i�U�"�b�3 ���J}ڄ��^mՄ2a�'�FL�X���o=��4���lMt�|5�8(_��#�Ze� +��iSu(�1��|UdS���j��,� 0���c����Iq +>!���:�h͏�Y�{��=B�.݊��� |�NV�L�T��� �Q�fJ���F��WiB`�uT�X�D�cy���ڵa�"�ĉP��榗 _��[��[�BtU�ct$~�xi�����H��bg���I�B��U7�FC�!�ű�5D,p>����&@q�y�� ����{�0��ڞ�N +��{�B� "�q��M��� �Pn��ӄG��������I�V&飃W���f"�Ȉ�;���y�dXЂ]"�ѳ�H�xbMk��R0<��8U�%������h�QW�X��u�[�u�mg���� h�CD�Z�۷�G�B�=#;����j�,�3ʮ���el�ɢN_bO��0lA5��9�̕MX��+�9pj�Y�4p��L�p��' h�[�% +���Qxc��'3d a-�0D1����L��h�"ώvh5��U��i"/�����;9. :;E� +�cF���p�N��PXa(�}*����QK��(Fd�GKR'U�Tpt'�NѸ<ᕫWReZ%Dos����<��B���蠚X!_���m%��Ƴ��Fߒ,/?k$@I���X4r�[�� l��v������2��p�o-�L�<3"D�Ӳ���,���ԛ��h[Q7�ĩ 9 ���R�$׀L����Ι�����M�@YK���\��{`QP�h�4�N�#ט��(M�q��V���m�df����iT"��o� +E��9�؃fe*��i(��ֈ�R^��Ĭ9.t�)�R&R|R�g�`W[�`u^�2�$d +�SΪ3^� Z,e�}M����� �u�3.s2��r(�X�Aln��s4�"qQ�+�w8���ıwJ\c�z9���fT���2/�U�-B����I�no&��������o��ŭ��w�Ӽ��u�A��,Ÿ������gg�܉=Q��`"Rf��X�Y�N�-j J؈n�Hq�z�l*6@B�8�y���� ^����Xp�f�-����+��Z�"�᪦��7^����}Q0[�=N���h'tJ8���q'^?�G?��)=�6���,P P�*kD���,�q e���2�7iT�$�M���”��� =�r�41��@ +�6���m@B +T=��6WCR��8%�Ŋ�I�KS���U�d�4M#�li�+���B4O����hܼIC�U�r�O���3��<Xh-y ��A��9P �F�Z0 i�z�r*?�߂�۵� ��:�!����b'������<9A��$��,���֦lZ�Y��� +]���h�8Y�^̣Z8)�Z�t5��̥�U��0�t�8pH�W�JK;rJzeI/I����#����!=��Ia�[~V�� �A_�SP"�/(���^NϖdjT�1`��Q����!/J�~��F�����dI���:�g1$XrD+(�ӓ�G�L�Ui0�P�� t I���%� �G-n�J?���h>�\Si0 <�{k�Y�o�E8��Kf��U��X����^��k�I�rDF�VaC +ʩ���F|��ћ I�w2�%gZ2��iI�Z���Oj�rIO����`f��A߈�M� I�`B��C�h��7��H����y#��� I���#*)D���2sv���mM���Î�����t�JB� +ׂ`�`�V�� #Q��1���� ��40�H�π3�AS�"dx���c65L�ٞ�!�>��&;b�ʛ�":O�D��lAn8#��hG���{� �n-Ć*?`H�n �I�P3�c���~�c�ͤ4�Ƌ��D� Ov�T����=���U]� �@��t�LG��IX�;����@��ݔw P�b +c&��>I@ba6��gwe��WA1 +�Yu d�� ��f��ର�uME��4��1�>$�Up��.��:��!3+���].>� �ْ;�\ �*q�04T��&Ώ� {)���rp +ꐽ^*8���i�MM�!�#i����ۈi� +�,+�6��(��8E�z�{2F��`w**��a ɡ�����h4��-�`���D��4����jP Rfh7/@�B��0�����m�F؇��8�]������p�Q}~��.�j1 Q 牨�&Zn!&�>I��U]cQa��Ҵꈂ��l�sim`�J���bnW�^��d��D��'�|d�@��Ld�PF�6R`t9�Q���r�����i�c6�K���|-"j� e��.�_C +�yӉh���z0��4����LD�ۜ�QDmӯ��&멓>��bY@��&W�JP����TEh�}�8\\*^ �$T~�L������h)�e�H�8��R]���� �_k�e��S�$p�b�5�����$�̢h8���/Di�?�8Z�i�|5L�H�A�"�����XY�1�|�T�����Kr��B��t�^ݱ�N��c1T�� �6J��~��VΒ$}�a5���yN�w Y�R��d�΋R4D�fjH����v +��I��K��ą�븼��v�(����q.�Ē�΃���0Yr1Y PLG���}o��o�h[-�܂dA-�n b��~�*���4G�X5��Lh³�8@�䰅�������O������b��u��;u����i{�� 6S�k$�Uӛc*"�GSh���L� �K�����98�;���>h���V3��Q���7�&��d�K��èy)�W�H�wL�QQ"۹Ѩ'�)#X12㉆]O�N�I��8��N d��%���Ս�BUêP�K;���5�m�Ql�D,��ky{�Q��de&�h�q(�l��Drv����h��`V\jJ���h�>�NA� +��"�I1��m��|�������m҉ f���6ʂ�� j�#�Cg��p�B�S�]���]�j�+]�z�����XG��` +7�jeˍ(%�i5��F.=x�VM�2:D���HJH݄Փ�}�<GL�A�*�X���T{I�������ޝT�aIC`'�GБ�Z֡Es�X�F4�ЀG�/{(�3),��"D��L�U��T��=��rE/�\��ԩ�5ޫxt��r��edm&Z�����V[�I[���V̽�x�}k�5�[Gf�ѢFW~K�ǽ�;��\s�dI�*��q�dsW��?��l��(���MT��h��z��qTSp���C6�u�R��R�xu�x �t䤛K!��r�<)&�����Ԥ���q��4���ڗ{p�P��[V�'�~#�Y��W�w�B��RQ'6�#�gG� ܘ�J;�xNF.�s<mb%�7pվ��=X����y��`��$�À���u���@�<��݇M��6�?��LK��9��*���K�h#�����0�)�x��mj��@a�t�-��u���2�ke�,rF~�h��R恒Hp��kq)C�I��/���/���'K�' {�H�R|~�J�oF�-p����H���Η� ��Q;���"7 ���z�E7o�g=��������p:;Y/��TN�$,Rtmf'��^����{�h�6gC�~y2= �1��g}�n��8����=��jZ��+q��{�f�ŷ<�tJ�t��R�H0P_wDnwx`rDQ� 9�d�֤f�K=��g�������SR�b�: �K �A��1�)�+�����eE@w�<k��wf��z��+�B�6�i�k� +�}�G{L�k�OʔO�ټ����CA�R��d�����D.p�a�`�g�.��cm���z*�␸�4]H����5�D +7�gGe#O,,�x����N3ii�Cš�Wq:� +gF�q6��{��|HX B� �@�C�%Z�<���tP+���|�4�@|����/oίnϯ>;8`2 �?�}� q����ӟ�_�f�~h?������㏯������ޞ__��|��?|���?���j:hݺ9����������?��9Yx����7gW�����Ϯn���?�_=;�߾��Ϟ�������˿��'/��ۗ_�ۗ_��'��?����i{���[W��_�������=���Ix�u +����ߔ9Y{��o�����t���Lfc��:��1�׌a����z�ӓϟ��\}t��fݾ��w�:�v�?:�t���:K�}>Kk~w�vgi�o�0|oݭ��������3���o�>?;���۵�����1�?�?[{0����j�q|�����O�No?�~q��u���;f}�q�Go��=��;�|��l��W/�������/���������}q�ɋ���ӳug�_]s��;0�u�ss�����S�c����������T,�ӿ9�8[�`��y�#������/NoO���Ȧ���K�pH�퓓�g?�9�/ڙ\��Xx����߬�N��즰�__��9=���ɳ��O׾�W9ί6��_�qg��0��f�������������;<GחϮ�������4��&��w��N|��{����� �_�?��;]��u������kۛv��Nܩ�;Up� +��{ +����7���7��˯�����`F��ų�O ���P��g׶����r��ȟ�/�>}���Y����! N�a��Ԯ?����-N����{��7fq�~A#} �{.�7_�{o�Zԟ��|v��>��nT��Y��;U����������;p����3��goC� k+�;#�V� ���wF�M���bY ;#���;#��_�;#����dg�*#H��p?��W�������R�[-��������˯�o�B�˗���˯������9����F1[���,�����w�aߥ���~����������~Zg���>��>N��r�~\#?���sr���Wk���ַ'7�����%Y{PO������|z���՝sӅzvvr��{�l��;ߚWx�}�c��C\x�����󫵗��������˵������8Y?��������n���� ����������|qq�~`��ҡN��/���M�kw�� ���[�� ^0Rg��|kj5;/Ʒ[� goh��e�<�{�Y-�xqW�^��d�l +_X������?}�ӳ�@�� aKY{ w y:���#<:��%,l;��{j �~��ܜ�~~yv��T��7����}�J����FK��E�A?v��/z狾��^�N?>_4�Vx�����N�����?��ϯ����ϳ�m���瓵m�;������?���;������?�>�n����z��;�l_�]\\���.����~pz}q���k��_{z��/��]_5-�j}N��޻W��f�/n>m���6����f�~�VylW�=��\\�r[<>_|vsvv�A;�g�_==����/ί/�n?�9{������]��mng���.����m�m�>R��@�3�� t;�1�qm��ɟ�_����=���[^{Lg�{�&o<���G�� �;����)�rm�X_�vvڸ�͏��Y�g�0f,���������&��� +�C ~���]jK�Rz6#�eS���3�醍9b�!��Θ�3��9��q�svƜ�1gg��svƜ�h�yF���6�2�kѿ��4��+ŏ2��qbul���;a[ ձ>�†Cu�?� ��Xsdձ��P�}��7.p�o�Ǎ�qq~�˓��h�+t��6� +ݡ]��� a_�~{��J��A7�ݡ\=*��{/��� ��}x4W����=F�5%���c�����f��&T���������f5���"W;d��HýC?{��$�l7���K��5��Ȯ&�C�����U�|k��7>�e+3wއĝy��|��=�{��~u�~���p���%��a3B^6��6e��ߺ��k�ş?�b��1� ���,�=�$����|<� |l���.ptkv�s�n��nSu�]�����"^vA��N�����y�]�w_�ۣG�ߒ��C^6eQ�����Y�]�ކG! �. +�#ږ(����X"�ޯ����?�������xr������n_�|����j}~u�e��<��[�����o�oO︫��^<���{ ���y�#��Ջ�_�ޞ|q��M_y�7�ᰶ[����g?�9�/ڙ\��Xx����߬�N6Qù��t;�� ��6��������SwJ�N ��J����cT?�9i�������������݌p���S��N �i�;-p���o�3�G��cDۢ�Ǣ�g$;Mps4����?����}Ve<�i��"-l��m ��5bq9v��,b�2,�����4�ma��k�FlO�V,�O/��� +z�''���>�������~��0�m�½ʣmˡ�נ��L�q��������G;����=~ ���'O��<z�,�}��}s?���;�|�� Vjk į�r!�{Å-��·�����㞵����o ��im�e�>�����̃��C��>Qk�*������b��UWrU� Yw'n� �Y��7��-��v��q�m2�M�ۻH��l�����Wg}x� G^] ���>��yu���l�{�WwW�f;�7� +݁��� a_�~{��J��Aw7�vܠ�c��6��d1��; �ǰ$�]?�o[<V��GX9}]d�틕{��N��l���w ���Ikjm�m��n�����(��~Z����[pl�������C��Y�����p�#�s�ܻ�Gy��ݐ"k�K��)r�h@Eމ�����>5������q�[�y�[n��1�3~ +��o�X�#��l��l:���i�<�m������F; |wᄑ#��O�n~r~� V�MY�ۓO�_�m�y����4�?��Qs������:���1�G������~l�����o7��0��8P��!�*�������뗺؜��&Ϧ qo�ز��<�݄lCd��d�@�����,ͦLɛ��]���a��h�W�4���������9N �w��-��[{�7'O�_�/���"�l��vvs'�yK��Cq��g�__\�vXŽ��������������ێ�m {s���%�G�#�>��҆���슏�������������}����q0[%=�xڧ�'�%o�1��eA�����Md�wۀ���i�Ӿ�h�MЎ�mT�ӆ�p=���O�Y�n N��#ږ#���Z�#�;l�O���$y��8kg�l"ΰ���q6��m�ʹ��>k�����4eU��=��6?��������]D�fb�x$wdKMxG��\]�]������>���߽�hm�ޛr����~t������������O�mߝ����:���ҏn�㺣�ȹ{0�M���6�m�%����E�j��{,Ǧ����m9*�t~��\�ؔ�����ٟ�m������y���,�ګz{���t�ɇ�ӛ���W�~���B�ļw��=�<���.�<�j�15~{rs/��Ͽ�ӳ����c�Ͼ�)�Q��?�ޯ9�����H/ί�N֮izrq�����>'/��ݜ�R���=}z~{��=V�^x�o����:=}q�������&�<�frru~y�.G��� �v0��f6L�;}ta3�h[L"���W�2c +����ӿ �ٺ���[Ijx���6��m�ݴ́3kK��8�>^K�8s��g��.pf8� ���j��3�} ����� ��ά?�m�ķ:p�˱�Ge8�M�3�/׶����"ڞ�{,�}y�-�`o�b�# m�ۋW�=k����a��h�"?�ٓ��������n�����%`I� �'=����~W�m����o;���o����_����?�����������6����v�}�ݷ �{�9�7g��w�,mW�pX־�6< �Gp�pwy����z~�����;k�N�������1���>l��j������s��y��{��[q�:�>�����Q١M� �kҷ��5�7� ���'?�zj�X�(O>���ekⶵrp����2����Ϩ����W��\_�}������7�������7��������7��˯�ח��-��~�7�����/�^�������~��!����j��a��O��}7��|����a�)��՞�n�q�`8����i�|��8��oJi����N�𧜼R_=Xn��eD}������{�#-5��3}�������z=�� ����/b;����9r~����=n`ܾ������G�;��J͉?7n<k������r���V�����G��W]<�ٗ�>��e[���?$w�+!�)W~g<l?����a�#�r���C􇹎c��}��} �#�g�p(���l�pX��]���5��v��oO���޿]7�;�k��;X5�!��S�ӳ�w��s��e8 n�>�Km�yܺ_�-tc�/�M���쥶�t�K����;���ö�w�m������틽�{�����A�?�;Y��\��!經S���N��/�v�m��=���¾��t�O�OG{�<X|�`�'�:r����H��~����&��ro�Ь8X��ho��.c;�G{ g��U�/ub��N�q4�q[�����o����5m�<�����������p��_���Pc��p�FW�<��Ú|m��5\(x�e�a�w������������U wqN��d��;���ɛ ��w���ɛM���\�J�� + 4mпm�����T��=�����E{�g.���xg7W?�:����/Ο����'��N��g�7��M�{O���d�� ����J}�o��|�W/��_fz��Wh,q��xXG�D�p8T7�u�Oc:�rl�����#Ξ����߼��4����=�V;PC�t��<���a �:�>p鰸v3��J��|;���=R�O���ݡ���\M�LO� �e�eh?�z��Xpy�a�� � �-�!�&����&�'��r��B�P,�4�Q�R��yB mk1��M.l �v�a���ZO�����/�䨱0�[w�J.��Z�c��6Q��ƭ\9,ؾ��6��G{���F�fn��9�”0��F\1.3s�i'�ymR���m�Hn�������п�SH�� ���C�:��zʩqƥ�cL폥�6-�a��/��]�]Zl0Y,r�)V�bWs[����p��6@�b�6��b�c�6af��.�h@� �<q�Zbv�?{o���q݇}���7�R����Q��$%�CE�i��,gĊ�T� P�;����N$�%/'���r���r�ÌI9�"��;��������]�8s���ݧO��>GfP�@2�yȹ@"�!o�R +>S��f�E��D�E��-��D��0�(�U�Ћˊ%����)�oJ�ܵ�Ή�OJ��zU�d���0���b�1%?x�d)(����/S2��c-B2y��B�X]B���H�^�^�Yy�_ � +PLT1���U#�s��.��ʋ���L��Hs������n���*\V�<B���f����s!ڠ�P'�!��b�\���,o�����E(�E� G�O����&=�>A���f���8�����ɓ5&=�eJx���O'�Gȳ���ȁ���?՚��r�\!�͢��x93�W�^΋����;W<�����C�`i2kJI'_���3'�;�:,hU+�S+�5ˑ&�c �^��SPL��� �:!_#X���M��SCm)� U��ɥ���&Gpy�9��ɱ;Yܷ����b�d�AR�%�M���D�V���B��㝑��T�_0�r%Õe�) � �Ji��C�K���d +�S^� ��Ѩ�/�}B�)S��2�Tt��ԟ�pd���+�(M�>�J�S"N@,7[d�"��,ͤ�S�NS��s���hO�*���`g��+r�� ����m�PS�v䘉���{�\���ϛݸ��U3�H.��cY'#�D ���H<�P����-v��;!]��_�i����H�2=S��!@%X�<�������&&��y��4�V$��+3�}���Ɠ��ᴚ�R�p{��)6h&[�����9O�[�^�䋕�ƾs 3pS�*���Z�5������ef���"�/� �X)r�!��Թ}� +�`n� O$�W��S��i����5����+ȐR���A0 +&҇��;=r�in�� N��挼�-}Mw��^Q�xt���Ht㨞��ݪUG_��t�S*3DR�yrF��8LUN�$��QȄ�c� +�� ����� ��"�~y��2�-Z&��F���l���5��=��_����[#<-���M!E��M�m�fsA��D� +�� J�pR��RH��a�)I�i���N���^��3�_Qo�D�T�M'[��ya=�=N@6T�p�`kA�m� .��DMeI�I`�s���E�Dl%�Qƙg�jEeU�xtf��֋2^ �x>r�7�y��c"�n�Iv{��� �+�Dm��Q!��x�G(�d�x���י��"�їC�������\C�n�t��j��6�ܬb�NP��-w4}� +pH�m&�@}<8�dȆ?�)�#Q{��J� ,E`���@� 9fJ�t ��vZEσyO"����f�"ec�[�����T��1�/\���Є�"�5�P�P�kP�6J�L$��S��:� ) ���e���2����gՅ��8�4�&R'(�!�ؠb Y'��i��jdhЋD0Ϸ�����(��ډ�V��DI�e&m{�I�Q��,w+٭u�� �8-k�iV9Y}��/�ݴ�0��e�X���=���H� +|�=�gK�E'�J���)d급� ���¢�(���F<�,��xC +�1��OkL=#E�_G�IIZ�2T���+���k�|����u��':t`#��BAE��z��ѝC����* �aA��yN���MA��� ����Ns�JxJʎ*����‹`�mZʍEIT1$h�ę�L����kG�p �3Yx�d���>[�rO�~H,G��j���:-��= +B�V΍|���  �G�}� +pȉ��B����TS�b�����DS]b�� '0p5��E�kM�r|�]�*����/OP����U>�Ș�P��Hh�$�&��Y_��"$��-����k扖߱Vps��s*!�=�t��� �����2�D���l� cfXԉ�3��j���;4����Uf]i4o���N6ڴ��p +����t�߃M�����6�F\��.��P+�! N�l5�@�y��$�\S� T���3i�;w&\l�����ozOjp|�}z[�9lGMg��)���zDԼr�-����\h�t� ���D[�eg��� ��)jD��Q4�7�a��?W����~ +�`O=˩jSԥ�T�^P�NT}�&${�֎=G�ے�cH�U�G2?�A�IҐ�p>��eD��n������;���i?�;m"�!W/��*(?�~�d穽MP�t��X̛]7��'���z`��z@r�<Lf�f&������Rq��� +�W�n9�P@�D��wB���7��Z/Nv��al�Ջ�#�}Leu�8iD�JaO���3�O�y�!Hh�&�x��ѕ?�����|�O�����r�Bt&|UY���S�-�J��S�|>� +I��޸*�+� �!@4���w�3�N�@'���D�U��D[ஞ�8 -aGZ̝X��q"]-���}Xb��7�{j +�0,��ԞU-�9���W���=s����>��C��Jl���Y��y�� � Y0@�8��۫g�c��;ܼp���ݘ�Ǣ�������:����e� �R}2����SB�B +� +�Kj�Э�n�B�て<\�dP�P5m���ı@`��lz����*������x��+#)+�f��&��Y�94Z�00'h�X�,�N�66.ጟ2���,�`R?�Ϩ����NG`���d�5<���P_e(��wJщw�Iճ�m�0bn�bQ� ȫ�%<$����� +�u��La.�^N"��ϔ�B���'��z�y|'�� }�(N�܄��IH�=q�裴��@`����:�Hߘ7�����BHI��>,4 �+2u�� ˁdR:2ԕ��8sb;}g���� �m#}�h�#�u����>�c��m�hI�ś.h�*ٖ��%��e�O�(�6�����*�ET1�����^I�� � [r<?J�[\}pr,����z�����Ф���F�`sCoa|+T�%Ӌ���/��;��Y��&����Ѱ�>t��R^�>k�Px�/e|*@ʧ#���g +2��`9=�=�,���@O50��!�̤��B�SO��8Ԝ%�[ʲ@�.ʘ�6j���nB�׎� �1����h�3�5�f,����>w7:d�9�f�33i�*���A��Aw~������U�a4]����N���ys +S���Y�9�j�6����k�pJdbΖ�|���J�#�h ~|�A/@x�U7��T�g��!�h)A�]U=̹f�QK�)�i>����n͌7o1�����@�9�F2Fg�7��T|�}�yjɵQ5���SK��#�#��l����8���}�Aq�5P̓��,���'�$@����1)��3�gR�D?�)�L�ی�'���t�q�<MŠ~3B��I���.�8;�t�IM�K��B� :oE�p�C*c�haf�y{owASs�7"�!u�!۴dB�6 I�s�؄J�[���pr$�� +���I���J� k ����K��|�X�.h~|P�: ���i\���������$u�C�k��S\ҿn�J���S��ڑݚ6�!�Vȩg&Ё/PK�ᗋj�I5�]���ɑ܈]��6���+�ʤJJ���Ҵ�j� ��D��8 �l`��v�|��ɑ �]�6���d��φ8�3���n�I#�)d����#)G�8��׎��l#�� ���� ���&?a��p,ӡ��!0_���zIHQua�׫�S�fV~� �'r�-��NG�L�mOz�/��\�����@Mm�1-�3����/�=2wWv�rw��) cc8:��b�"�^4�D�����l�bRaR���G݊�0���(=�Ţ.}��*��������n�/N�f�l3evy*`6��|�MR�2D��х��Qa +�0;�B��;B��<���&x�'JЙ�IU�����kTL!��0�Su��Mǰ�]5�S�ٚ^�9+��"�s���L�Q0��!�*_`�npHď��X��J䤤G�� R���L@�)<��y�$�^%�}�ʹ�%P��a r �r�L�30���5M�I � �E��"���ʟ�[�ۼ�k���� ����[����g �hF��^BTY����Y���r~6yA:��I*=��':Il��N�ȉv�N?D-�0+)"12��͔�B*F��pE�d=1.�q�nW�pg@� +ؑ���-��jMx׎�fU�Vy8��"0nǜ"u�o���m�YH�$�M���M��.�g��s���db���>�^<�o,�6Ĭ�k�� �G*�T9��R+x[5��!qMn��� � �@��2�����$ �� +�ғѶ�� �б��]F�&惓m��.�f�K�7'h��HˤR#��;d���"QQ1���`��D?F�S M�q���`0{fȬl�a�[7rb�X��Z%�q��N1����wc�� ~�K4M6;��� 1(-s�i���)a�+��.M"�$}���6[�lBG�P:E�����c�mQ_Ee�qP.��.��i����&�$��,� ]���5�Umr�v�Q�*�=�U/����ő>�H�t��v��*�B(0���NP��2�} +�#�SLX@#�q@Y�G�q�C�nT@���:�3�{B���V����N�ɥ��p�1��EJu?:�F��ְ]�z��啥��OǶ�g����}.9vz��Ӎ;`.�Ҷ���dv�r����i���pH��-���"�U�͘��!q��/5!A����HD�yLf�5��ܥ�g|�b���~֧�TI%�e���Ѷ9k���=k�Yc@ޒu�YU��/�|���'���,��'�QID���Q�!͏�h|v�z&ƴ˘ZH��6��qMpT���"sE��eu���� ��Y5�݌/N��j��5j�SÖY��kMDIRPE 3�m���w�f� 4�#�I���d���<�h� �}��l,�Y�ɣrM�\56��J +3�ssA�8�f� .�hq��sB��b��� �u��˱��Mf�6qq��x!�� �W)���j��.���X��6�pL6��KG���g!�0y����c⩡@�w�wɏay��}��$ғ4[��Bg">3�nu8��m�8�f?n�#�ɓ��<K�骚�41�"�� ��\h�5�NL����KTdB�:�q��I��>�ƫ&8����ACf4�hf�e�]��%� Z��ȩ� � $F _�nܳ�ۦ� *���&(�H��[�&�����!t�d��J���6����3�p��-z.�T*�-�[F�DM�W€�U�� ±��0�$<~p�ˈ\�Kn�)���l �`) C'3ko#�B���L��[��H:�6ce�ҲK{��k�U���!��z�Y���q9���d���(c�do@�l2<�) G�D�& �z"C�53q:�w������z>2�0ϐ�U�U�s4���I�ʇ ��''L�>��Z]!T�/q��·��;� �u�ۉ�2��#9��d?��Iܥ �� +/�����`n�hq��,�j�ȅ�v�^�t�M�3x��Y���AbC�4�#��~�L 3��{ �tj�u���w�iK���c�O�R��iT�V��f��i�7LԱ(��0�m�u_��i�s9����+%%����at/1+3I ���M�'�R4탮\��5]�M;T~z�[���>���]j�y�<]Ghh���8G�=또�)�;�O��ݤ��①�c���}xf��Ezv����_#����8G� �������}�h_����,�0S��gh�v�r��~m��G�kO#_R���`�@`�x2�r�_�+��G����7.�#N��S��k����U.:D� +�7�2�V��Ka�t��hmm}�mw���dk��:9j�o�;�x�W� �R�H���I�6����ƀ��]��\�Z�d�Bk�mk�m-�7k�ec�l4� �� w��ҡ%QF�Qmu]֏�h�[my�*RAX]��^�9vh{Ih{�huˈ �T� �����HU(����--�֏.����CA��D�Gu){��P;���X�(�U�o���6q����?3�t�Z�(ð3cu�����<Fb�:���1=5X.af��ڭ�b�*���<���l=%A��IwNo� @C� 8g���yvi�oB�����s�^�PҤA%��^�H��DD�� �'=�.�u��3 ��ȑ��i�6T�Sdu��ڛ�C W4�idM:�gz�0��4�kҘE+�å�����)~�B 9m&��7��`j,�۶ OF�l�c� T� �։� �=݂K����SL1]pN��zK�Q"<��*8&���z�&�L��Dv(�r�ޮ�m ��7�% ���0�D_�hux� �N�Lm��$��%����9�����т�2�PA��ւ���Xh$�����L�J�8� +�� �d�R�:��W N���6���͊4�Y����jN(2�5:���� +1꼣��~�����,� ��[�O:.y��h��C��c�J,�i\�k:�~���M�A ٨�6���͚�V/��3P��� +����N։cH��|y e=�w�B�����Ë�����#c�x�9��iW]�eB���{ޟ"�F� -�d�qy�=����X�)�r�@XE٫�X�"���c^=��A@^hn�=ߏ��a2:���܄9k���Da�t)Ӟ�˰�l�{�aT�����\���؜�o'����Ս�L��N m�|x�/�>�1����Ro��j{��p~d�s͇O�t#"/:M����8s`��y �Re�s�����ջ�9�|?�M%���ep*��t��JE +��L�G�6� �Ë�)�`i;�MCKU6/ sB�y�jiO9�Y!��FP45z��>�>���@ Hݢz����+h9���S��r���K�+]>�{���������c�5��cL�gG�]�7v�<Ռ`�~��& +Cά��k���T6Šx��-��Cdv�N�8͕<_���U�ȹv�f+�j����X��Ȱ��>�`g��fV��9�π�U9 +�^�u�/o�gB?�۱t|�Ux��%�p��{ή��/�yK�����;� (5n�^�O��S��V�CjP��я�~7����W��գ��z��h�����ꪔ�{b)�]�i:�LU����s���:?���<t���Y�wfNJ=Y��+ڽ���*�� �z�wѺ��ϸ�������绯����~|r����ޡW+\�1L�Q��,?�J�1����cR疥���秝ș��h�>��FZ����T�(�uBU'G�(�)�O=os�:��Y�\� ����e.p�1�#���Ԇ輥i�X�z*���,�Ji=>~�S�y��[53�A����G���m.������n�c��(��~�(�!����bz�I$��[H6,$;�����}��f�G̠��r���>���0pY��g�06C��~��3��3Xt��>h�{�{ F}b�Ȓ0�1x��]_~��>�+�������4�i�"h���ԣ�:����ڗQ������UI��}�P�ll\Q�X��0�����z��?޲�����VҜ�4>UF�Op�?��sz�M_���p��vM�&zY8=,�@^�%F AQKh"�#ثoT o��ۛ��Z�-��A�bb4p�"���l�w�,ڛ�_8[oc�Ci�y�{�����^���[�Yh�Ce�h�;zA@-LPV��˛ 4/hY�4�t�QDŽS[!�P@�U�h�����X��ZB���Y�j{���<�p +��aYûX���U������s�}����@U��[�<�8��el�QX ��en=��=13�^e�mM�����r�}���pX |�ִ}�;Y�U7$��q�uڛ���z%�H�[і��"��۫h���5$�֨��A3���s{3����}�6��jR� -�}��U��9<Ϻ�!�xX!�Q���.� �4��,�ږ&Re<k����1���QJ�x�P�-H��N� "X�v٦H��Y������9�:�״,O�!.�^B���]$SPv��vBlo6�]���z��ۘ�v�ׅ �l��v <�Q_u��i`�ZyІ���K���<�צ�ή���y92�1���~����-A3��Q�#)��%�-KO"g��j�p8�h�;@����n@5�N�L,�k ��v�Ac;�s��� ��'Iq�1B��5rB�� q�����;�fơ +��S>.̚�+���5-���c�O�Lt� �όʹ<1ˉ�[���{7�4=�4^�(]9~l�l�[w��sz�K4V�����c�OF�e@�-�]�1��HS���~N�}d�%�k6d�H�(��ԣ2�:3 ���Đ�/Gl��G���Tj� +K��sb�U� $͝�u�orU��4��,�[��� +X �4&HP�9�\��A��@��v{���W��}ox�b +T�5m�ʚ�X��.�^QP���VJ9���Z �Fw����U���T�^Q|��Bg߼�E`���}KK�sM),�F\�j�ʼ�ի�����e�9W��(,���Xˆk +u׾�sj�aH����t���ݵ��-v���+Ts��] $�w^5�� ��e��� �o0gt��" @� �¼��&Zt�L��. 8�^1�Z�[AіK����UV�y����%X�LWP��ԴC�m��r�MAM�F������a�a7�;�d{��l�kԃ�I@Ed\N��Z����6`#;|m�+�Ġ�mh�i�G��=���s�&�a8a��N�������>��TG����7ehNmY�0h�q�� �3M��'! ��� exsX��.����x���W��=���y0R���j����GJ]������""���(I:�q3��T�&��1KM�aй �A�ĵ�QbB��+� +D� +��O�(�#��6/�u>�} smԃ� a+-"�A;��L�Tl���^Λ�($���`Y��� �B�@�L�iQs銙�`����66��ˋQ?��^�� ^O�t��ۣn׀ +b><@�i�� N� �� C���d��:p����c��ՠ���W�&�7��^�� ��@�N��\�{?>� ���ۋ��3�L2�8�Y6�k����.���lk���͵Fy�_���3-�5l`�J14�������e���=o@�Ҝ �M*��� PcI�\�J�����87�,N@��5h�� ��M� (�&Z�q���bO�Q�Q�h�S���̼�.6(!�V� ![`���zO��Ƨ��[�s�'.�1`�u��6鰀�,��<O�� +��[�lsB� S�g��L������L�WR�7u�6��6 u ����n��>=d�Lq���#��T� +%#h�:�s���/nD�wh�?��4 u��� +���paCP��^��5��|�>�wwVê=MzZ�� �m{5�rAN`�]�؂�>�}nm��aAo���iX�HM��=��.|l#�L����I���YC��Tx��Mb�Q�?�6a�xq�c��z�1��M|�9��דo��<��p}�(̢f����=j�VA=j�D7�B���E���J�K$ZN Ԅ"+x����ܚ���6���X����MO���9A=x6�c�o:���N��D�Z4@��E�b�bf.�yA���(�ׅ?=ـ�ZS���#h�ڤX��������2ϛ�!�Т����@�����h������L6�%��͢C��Z3����Z��w܃�x��<���^sCy ���V�UĿl��9M���J,���14�U�lP���D���:�1��bh�:��BØDeBhɺ� ���,~I��ƒz:������h��A��p@~�݂N�EТ���i���T���Ea S;�j��{܃���E�� �Т����v��ꄟ��9�a񵹛����h�ms�4ذQ��h���Y��M-D���[�4�sSӾ��i�=�M��Т�p�q ����b��*@>G&脗��\ �c遱dfN�#�-���X]�_3�Q�0�j�I���V#_�l �A@K��AK+���Z2��Gw��U�8�i��\��Yhl�cM���E^kRPg�Zz��hZ|5��S��vjb�Zh��Z�ZMĸjR�Ht �(�=z���Ѳ�\uSY��Ag�KT�-�3сũ+�</�. ��3c�2��y�r�M{���g3i;����퓳7��i����.�f�7��o\ݵK0Q�8���ه�1��7����M5z�-��1I�y#��֗��5�݀ +J�1�d#�B�b�p��j^U�7��y �;=�[�ǟY1��#=��oԝ��v@s{��jw0�&��*�3u޳�z����.��O�j�`�8��N���-��e�`O�����T�e@�ei=�XW>/׸��q sk��A�7m˾��`�,�j��R��[��Zd��Ѣ=Ak�d!���K�W#�=�Z6��>�Z&�J,�f�5f�<g�Ưi+�X�xO�J�29�o��-A����ڛ�)]#R�]�}�ce ��G��O���l��{��� �F�-�3�����򔉮�3g[�HǸ����鸟 +͹X�(k5�>R�}0V/������v4M}���#�Z��AƀO�5�κz�!���5Q?M~u�p!ݭTd��́j:�͇�� 3��\�n�i����e%�ἕ��6)�>��y�,�1�сݥ�|Z>�i�+�ϴi� :��6��h������̫$ �A5�δ +�J����p�A�Į� -��R:�u����#>nJ5���}I列�M�?NeB}��;D�����^���^���c��;i�E�C�Ʀ��2���AA��|+�T���$4~v�$� +�^@�4��Vu[�u}�*��SV/����c��jNe9$,�Sn�� +ua��-��h.�~�5��vΙ�ʊ�9� ׈a��.�E�� ��S����i�ʖ�sXBk �U�S�7 ��g�b���8�f�! �CF6߀Mmķ�Bʒ��u��d L��K ��RP�SZV��yѽр=\ƴz�2i5���p*C �^�{� �Z�F��:��ؚ����6Ty��td���Nܸ��;�Y��6��WoJ(�����Zȫ4!��rW�+�d�Y�Q��☬�1���dI���jg��W�����j4�|M�5,>:FW�Soאm �Iikm�4FsWXIgZ~��t�e�@���H���ܷ�}����.���I�:���5�q���׀���5;ȍD1j�R��\X�<���:�����T�����f褻����>�̪����(�2����� �;� 0�5�7p��*mF�u^���Z��ɱ�T�3�Ҹ�ZI}ŎHg�H�~��2�+q%0���@�*�&S:��3����&ȒE�q����Z,j����L�4�dT+ �O�(��]BX����A `O�&����D�A��k�����z�k]�|�s~��ۣ;k ��= �r�7���ƃ���8F��,���ҁ-^2|l�v��L�l��69���%��#n$_W���\W�y��7C�34N��N�L9Xjް��J����k�?�$$7�4�-�}�ao������0��au�]���lI��8䅺-�~�$�9�Ij/�Y#�w�<�s�N��s �^-����,��rd��_)�j�n_6�]+��[��Zotu����aFQ�PK���d��Vé&�W�>�������\lK�X@)#����P�nT��"��sز��66,�A�@mhIz:� ���Vt�}�M��@�M�V�b5=��Y�7���V��p���-�~fMo�N�����~��4�W;ۗ��H]��V��B�X浡�{�T�Wj�ӛ:�-S[�FT��y���q2;#ok�\�a�[�/����]�M�iX�H�.�(D~������[��TQ�Y�1[zf�Gbn�yE�����$,���r��-���� �����’[|�'���Kn�i���ӑ����->�[|:�ܲ~njs['��t$�ŧ]r�O����$���Mn�i��⭃Y{��~�ޒV|�%��t$�ŧ]r�O��o���V�O���v�->InY=� ���fW�Mr�O���v�->In�i����.�ŧ#�->�[|�%��t$�e��5SM����$���Kn�i�������->n�[|<����.���]rK5'ͼ~�%���Kn���pKn�q����.���#�-����Dڊ����->�[|�%�4P'�\7�irKwJ.�D��->�[|�&��x$���]r������2��->�[����Ϯ���w�->�[|<����.�Ň]r�G�[V�i<��]r�j�-���]r�����$���Mn�i���ӑ��v�->�[|:����.�ŧ]r�OG�[|�%���Kn��hr�V��G��<]�c��b��� m�w�Xy ��U X}lk��x�xpc����{���\𧻓�x_ ���f*joSnF����7�< ��+�7�}؛f��vP��������lF㽹�V��X����>���Z�>�w���N���x�ig���3�������;O��xo��5R�����'�w�6�9����e��w.vm���27����f�����Ö5�}��f�7�`��hŒwp���yP��-��e3�i#ig�o�A�}�Z5�W8Y@;�8^�܉��ެ����پ���!(5�W���� ����5އa�!��m��.��|���3��-��}�5އ]������P;�i�[��xo��x/~�(����ű��hl�ኊKZ4e��h�O§��n�I▚$C�ш~!��ǜ� ȁȑ6Uly�#��Ѝy�����"xYU�0��ɸ� ͖G?_J��(��2�7�9�zN���)q�.�h��6l +ݖO�u�O�ܢ� ���0���V�l������m�f�h�|:�2�. A�4/(Z�f�c�V�5sNKø0��-�Ķڱٕ���n�� � �ff��걬��B���Y������͔�Ζ�My�l�S>Y�2P۾h�Ѕnʧ3+�S>ٵU��N1��0�L��n%����a��9���!T0d�x�G��s㚡��n;of�w�,��,���6S>�=A�K^������#�&z�<s�W�ݹ(��_�R�����n�#��穛��ʺq���L����Of�`S;���p7�]�����T�͖O�[�8��QM�.�N��>2<פR��ә�l��-�l�}7�=U��L��M��Ly|˰k�<F�y�֭���DÇ>���+ f<��f u3>�'���?�(�+��y݊OVRĹn��va� V|nGx|�m��5��9�V����`�Y�t�# :�!5�+�C��9,p�̊�M� ����t7+>���:�b� J��e����t.t+>Yy%���S�:�\�V|�$d���++>Z��\C ڻ��5���a��g�c��4�ű�.6–�*�m��n,'6�u�u-2k"��E� +��em'��ZdZ�խk�ٝ�Y�8��4��.�^��5}���6�lbc(G�� +�Dq]�8�R�L������o,GƖ�J�c}c�P]pn�i��+.&���؛ h���Ahi\��a���g.��L� ��ؒ���Yv�͞So�XU��TV�گЭk(�q��e�c��"���.��H�X�I����8T�� ������n��ί� ]�K��p��d`���+w�lT���َ�m��ܺ(Y�%CQ2?�����:�X�,�j��Bb��ԍ���4���6 ����kZ>ӭ˒u%f�����X���"��զt�X��#nS�*�=�+}?L;˒�X�%k��Sˍ@���4�T.�׬��@�_rN)l>wB��B}��3�x�\C�l#�\���\C��ӝ:Q^�f� ��4�.���5\�����J,ͫ#�aX)k�>Rȣ [.�$�8o�qZ�� +XL�-نNE�"�Z� 6�ݳ �a�6\@c�]�lC����Ӿㇵ`�L�I˞m8����Y�\�q=)==��dz�rx�ޜ���ʁ�su3���VZ�����W��*3�dC���=^�-�:Ђ��?�@�n�1�+|�yE�P��b��k� �\��cK��� �ɵ`����Dz+��:�-��:�-���Ί� � +���Lބ�VS�7�1���QCX�M��[� �ԙA)q�i*]y�[�+ gj�`�ȩ�ӫ�<�Lj����Cg���� ��� �VC� ޞ�_�&���a���ü���펦�[)����6ʯ�])��r�V����F�X��ss�����0��Y�#�7�p<���9�O~��r��Ǽ��쇯&��'sm�z�1׹)�eޢ���"|�hg*nh7�IPK��o�Ālo��f.�j����L�W����j�JЀ�����{�F���n���������kX�_kS� +ΐiOPze��p�`�h}Pvy��5����U��ŀbA##�0�|lAos܆F}�5�o�SwpX�+��Gz�*���#'[ ��(r*f�+�ˬߎ^��(��^��5󜬮;��PZk���KbFk|nA�ͯ�/�Z�'�� �CT6;q3BhN��vh�Ǡcu�‚6�c��v�O��Ms7)�b�4X�%8&�s��bۻ���F���ͧ>\�������Z��Ԣ���Y�)˿��̹�&���;z�:�� ti�~ i;������rQ/k7�I{q+��瞾i�5p@X�ڂ�j͚���v�٧2+�������@fK�T�u���_�m@��z���z� 6�p֟��0��� k��Ԝ ��`D��N�#��-����m��I�7�´,�B�����@M�'a5`;JI�/�RHI��h�]���'��\�3��5&�:h\~.�&J6�n�:�)*�"<o`�v���j�L3���a6���N��-%I����`Wж@뢽���8#��r]�;�uU�VK�ɵ��sp�w�~��dXA#R;PS��k������iﰓ���ˎïl;���6�h�����BK�ߵT��lC ׎� \є��"*����@��/�� P]m(Z;����T�x>nL2� ۧ�+� +�2�0.(� o/�aPok���jij�B�N��0Z�Y��ҙ�(��V�%E�e�m�ּ1h!��_Na.���8�H��naژ���;�huVy�� �a��X�]���*�9d~ƍ� +��.���E`� ����>� � �~]�&��x,g�틚݀b�Kg!�ib'���MS��%r]�v�"��\F��%�I�!��N;�� +ۨ礱���aK�Z�*sl�J�ON ��xw���.�\��㠌oW���5��SLk� +�t�o��Zӱ���?<���N�Uo������|�@�z����_���ǥ��[��ª;��5�à�1�!W#�܎�n7Zk��t(r�"'����d�~Zy�9�)�����-��G�O�{�����8M��?���0����a7�<~M���e�z8�m�~Ѽ�e�t暴��"-���M�+�Z�<B������?/����C��\ƫ��a7���9��V�˾?Ws��FP_V��I�F'�6���L�ȟ���վ�Oք����֔�&�Nxl$�5= ����5�����:ea�yY�@c+P���� T���5�t��q#׻<���2�d���<�ɯ��>7��9!�g����0>u��y��E^-��{��/�O���QR ��6�'HAyx>4�Z��4�~�����1��K�՚\]~�,�+x�F]H�'�/��LYQļ��<̻�F��ѿ��F�LFGz���a5BF�X��o�5f����vT�|u�_1���t�=Vv[��z��h .�v��H�{Z�P����"4��� +�T���=��N�j�M������P���7]QȞ�64�����6Gj��=�l�kO+�\��ykd/����o����w;Dlwhal;��͓��k���śo޽s��������koܽ{����_q�͛�y�����^^<|�G��w�֗�\�ޭ�\����?���ᵯ�yȇÛ�>����߿����������ޥ>�梮Tdn���9��7.�������o��<����֭��o]\�u������_mC�a��i��o������v�_��{w�?\�����|x��÷�ۓ$N�|�� ].��!k�c�W����㿾z�d���?���������We/_���Ó�O,T����>�G��#?�����w���N�x�'�r$يY��i�6A`��ܑ@��� ��е�: WW���������n�k'�x +g��2�¯�Կ:�.������N�}��� �~���������7�ܹ~�������߸y)��^%��'d:L��o|�~��q�^&����A,1aNA�T'y*�Lߺ=���oӓ_�����ëH�*�?�o�O���)~�;a�����"�>�<��|���):�LbmH�y㍗T��T� �v�i����^��ɨ[�P����W_R��Sa�3�x�8�_����5�H��".M�t��l�a����ζ��6�����I��[s�Q��q��c�J4T��&�\���i;��nF%���_�� %{<Հ+���Q��<�݀ ���O9�Ϊ: y���g%#�I��L��I�ga�e���U��=�t�֍��Q�b�e��q���Nƛ}�_\�5�>��b;���9��wm���H!$�YO���g�>�.>����:�6.�=��A��bD���ۑn����o�78��E��8|�d9*Կ��n�dS���W����=C_�o���������Y^>_��s����w� '��G�gn���a����GC���~����G�le�0?Y�����?�����q4~� h=����q�I���)Y9��n�v���[��kp�� L�����j +�@�޵؎vM�G� ���=���=��<��F������4�E� �C���X�)�3�r�Qa�ǧ<���3��ʼz��po5���k5���(�����zw];AK�`<a�"�,�W&��1�� ��w���/�T� ) �3�i��Ψ�g@�^ʸ����E萾�\��Q��P���KeVw�O���f2Ok>���{Ĥ��Y�E�j���L�M|ʪ�Rؗ�ZMAϬW� Q��� �! ����Ҭ�82{��8����Z�h;��"k�V�$m����V��&|K/P8�*)8��<��i�J��HZ3�'���u���� ��=\��nS�R��=�=�(e[�V��)�e�l�)��#.#���f>����̡�2[�r���0B;[J�*Ӆ�^�l#"ha���-]�½'{�m�e��dJ��ܱ��,hZW����0g��v���z� �A�^��P���,V��P��k'���B��,����-�t e�ɚ �m�O�.��ފ���B����h��TgF�1��GcnQ#S=�1�으�����q�S�p� [.���gԨx�� ��5��`.��$˨T��W�� j�^A T_��ixv_â���%^B9�Eqf��2d�����N-�W&0m٫d��pcTqI�#_��p�P�(zC$!�Q�+��D ��V�O)#+�y�|Gob&hg_ռk��F�En���^��e����#�A�q\����ls�<���w�lY �dW���*�9�KA #�� WSK+b���4�w�r��)|Io�e�\��rjFf�����d����ޛ�B��+AI*l3Y��� +ZD�ac���2F�}�z�xtP�G�D槐������|fK���ʊr>{��O��,J���B{�Sa�ZF��к�� p�Ȯ��n � �����ly��:�2��J�/�� + US٢��݄�+��SbT���u`� � �l0���¡�W�+��B�@Jew�I)x����rl�L&tq�X���c��bKJv��� 9���\�T���^��E�\���#) 0�Q"���ʬ�"��`L + �1����l�cx.H�����q(Y�t��^����*ڻ��/U�ʼne��J�dc�BFA'����ႎ���VM�����{�T�����^BxG��0a,^��´p�ɂ��!��4�+�20 (�Ep|t(�6`�-(@�7�K���B�Jyt"�[0$o�]X �!9D���o��P;��Q%I!i˚���<�E}4���L����;(j%x���RU>�2ϯp��>\Xo]��h��yC +ā�p��҂oD #Ŭ=��y5�q���@3%Ɔq@�Pg JH��>����P�zc�Y� QD3�^�%�w�aO� �GެM��~�Dm�����ț���{۝���9�P���� �0Y�5�(,�)�7�F-&3_�ZYYG�T�zU�LK#?4t�oF��BTe)�����r�jYm�dOC�4��<�0t5E#�d8�Y;i㉒��F�V�@���r�йq�2Q0Vr@�+GvS4ʼnZ� }!+�TX-f5�������F�I�FD���J��#���ɣ���+��գ��X/کiY���fm?êP�v�Y�:� *�f�f���@ԍ3Fo2�P&��&�:O5�xk�IT��Yk&�I+��U�Qh�0�(�[^��+���۳�#�ں7� +��T�s(1U��^�B j��+(W85᳕�օ'�r<o������S�����$���̠�S���V�L��Fw������#�~ �0iI��a>������P�f����o�3׊.(0SX����VM�Da�zU�*���uo�e���+�~َ�q߇6�UA�`p��S�~"�[/m�b�����Wb^4P��+�RU���rB��z0x��$�P:N� +��I��4�.�™b���\�� +)��K�)�e�QM���l>�lz�'�x[I"�aOm���+ˠ��I�-�x�Z�v��! G��[����.�K���S�-�wV$��� ȭdgѤ�0�R+S���,��P[a�v��جfõ�q�O��V�S�����!םh����E�-����*=�p*3��yr�:M��ٚ��Y��@�7jq�'Q�I�0����Z����m5��7�fZ=�{]���T��2o�ކ +�MEG�����P(�*cT% �=XD+™T�]!� �g�>(h��Fd-��J;��&�5]��NB�뢓�?�#Asu�V��h��N�- ) ��z����e9uR�*^���<�k��71�P���5u�0�t8V�T}��0�*E$K!T����/��u�ga+9�A<}(;K?`��� 54�fk�����:�����Z��64�[=c���Tl�p�막�-�*g�Ŝ��LQ�Y�r� h���������G�k��L{�t��2U]Nj�h�=O�Q; V�re8�ڂ#��0%����O|���?Wٕ�#]�N"��YE�l� ����U+���SW�dc��� ��?j[)�ݚԦ��N�(��HT��­�. �.-U\�T -9� �Z�xL +���r8��x-#&J:Z +���Y�����MQ��1�W���u#� +�jJ��~�&-x�ʥ��R�fQ� ;�0��oJКR����k����&rV��JZ�Q��ތq����q���?�f�LR1�W[��|] ҈-6k/6�%'V衫 +�"�p�q8�j�Ot��}�t6OO�ּ- G��n�yh�,����E�,��p)�Sɩ'Ժ)�(���i������p6ނ�����N 2��^m��6�P;q#N�*cٕ�A���]�A�J��&�h�p����Έ�G23�Z��tDF V� �G�ސ9�� z�����,��'KkB���7[�����sU���YA!P��^�yN֍=�8����3�xu�i�e�����͸I��>բq��Oռ�`T0��֩��ΐ'H}�3ot��O���Z�N��̞�_���G��M�v���4�G�D0[-]-v�L��쨲�V�Ki 4V��)�y�}��-hP��A�x�(|Z���(���[����d�.�#�k�D�n6�DT�ܜ ux�����\7����1�ͭp}�;�c��B��p�����\T��0�C� C��}��`��'�)�:�8�=s9� ܁m�؍�������t��Z�z����s�p�Z�j�a��-(������VK�V��7KMٔ +V��UW������F�f�����K�_�3[5�'�O��E�@��L���!CGwڼ��Ϸ���Ӏ���j��Y�i��k�*��V�D5�r��Ȍ��}reQw0#l�*r�ZRq�z~��C/sa��V��ʉ�a˜+�˃k)~�^@U��� )x� ^� -���|�sڌMϩ�7jV��j׋��A�)�.�Vp%'S$�� h �bp� ��:��:�ϊ�YC� �%�J�vT��W�p�ۀ��&�R+�F[(�D��I�ˉ�g�g����JCёZ���(C�<�mr�'|�V�wFeU��-Y-��Qϸ TQ^n)ge�.gD�D�'�F�Z�B@+��'S�A)�!��?{�eS���¿2��Cǀ8�v!,H�"��Z��  +*0� q�Ƶ��eҼ�v�PK���~�E�T����g�¸g�n� �D�b�T[���?D�C��~�a��5�� �h�����L�s�aL]�b=� +(�NT�(���e��*�̷T�����gR�Bj�S�C�j�̬�΂�(OKg�Y8�۱$�0@V)/r����+��� �,���z�Ȫ��#K�Ճ%��S�Q�H6+@�4&Ĕ�;�����^�f��y��S��z�6�a�<z�ag�P�/t+���) ��pzgl3��h��J� �.���UIj����>�*f� �G�Wv~�P�����t���{'ˆ�� �E"�*,ID�����v�VfN ��~P�G�CM ����‡�y���)����&!k�([)��GW�s���HNuЙd8�eoBR!�#�����P�D��h�@E���`M$�58���.�bbĚy,!�;۫����PX\Z2iؕ(oD��G�8���SႰ������?'���|���D;�H�Ծ�p+E���TЙp�(Lڪ^����"_�A:��b�t��Q�'MH,��Sů�`F���a���:7a"��!b�BNP�qH٪;�G�)�Y�.Xɢ�@ A�wt�q̤�uhֵzd�T�|.�+���=-�; �`��A����'����BtÁ�c���w���h,��R��^�d��58E:WM�z��[{����"���'{�8��"j��K�>x��+aZ�^� Tm��21�1.����lBC��V�ԓ��߆��Az�4F�vx��=�U��z�nX�z�_>G/�/l��$=?��XJIpKd�z0M!�\RF/v�%���(�^�Yy�c������-6ټ�p�R e͖�4<[2�#��X��� ��-5�Q/��Pg=�d&jd3-�,Tf��a�7f�y2��vP�,h �'�V�케����/@a�a+5d� ~Q��������J65���` j��c�_g��'�yOu��QMW5�h奩�GM=H�j[�,�u��%�%V��@����K-�ȴz�����Q��o�<d���@�3[s�G �\U�`D�4�hn�U�i^1�X���g�dD��F�t[&����ɻ�=�9�g��� �\c��E��Щ:S�}7������a�˒�1k���i +�㮁�"�T��g��g�j-�v�n�xK`H��U�H'�������4�2���N"�g��c�'�C`�o�4^Mdmf ���|��t��I�M,� �_�3�d +�)�}F3\�T6v��']��Q\U^i0 8r����}f��5��p�%uO#r)���1�mh���v�k���aY�-z:\ܽ}���wn�w������cJ� �(��͜'5�Y��ݷ�Dd�.S��\���������]����|�߯�-�k�Cz�ޭ�%6�S��i��/�K{FZmb���D��i��{YU� �O���>T�̘������nt������9: �1KX�^{�W%300�I˩�ɜ)ZÔq�B<Q�P�M�� ���Le��t8V*t(�`��ʉ��ƾf%\R�a�Ԫg*O�2ٙ�XӒ��3�P \9H ���yH�@��5��LBz&�y�$��ȓjE�=&(��HV(/��n���[, �Y�:j����4�X�����S�'� E<[[=9�j���62AL�u2k $��L�9��Gs�g�������)���F6 ��[D�Yt;�8yp���k����[r��|���o�~q���o�}H����O��ƭ�;7�쾷�W^???��0���~����޽ߞ}�C?��/�A}�4��� �y!���-懌��"��AAU�3�� +G/���$1��@1# ��iVT�2� ��1�E��F�yЁ"C�C>8�h����#�W��Z�bb�V�ʌ�\���y L ��'<�Y�#h����'�8�[�.��mi������؝�c��S.��r�k�4��V����<�k���IRF�� �k�����uU<��a�H�C���S��2�}! 3Y��z�>�) +<!Pd��r�����M3�QY�h/�6���� ��kz-]$��V��ST��v��� h4�y�Y�,X��[��!� �Ăѐۢ�E���4xf��pL��[,�4{�Qμu�`�+�#*0��Q�Ȝ]C$1΁Q?an���,�������]��D�dAJ31I�`�Q�����T�1������5���?| u������7RK&�(�2Br�T 4z�;nB ���M<���a,�6���,g�n� z�2ha�|�̈b�$U����vF�R� �� +�5y����pu��X�����V0 +8%�o4/D!���u�f���'2;Cjшʨ��H=��HQ�1�Yt�D�,��������)A; +vdZ�g�* |-�2!�7���~��S҇' ��stpeY�ص*~���#�;j"�`�$N)/�ZthMG��H��6�Hz�'�\ጟ���(�bĬAK�i������eĈ#���R�ç���K�;���KR��+�G@^0�GLfm�E������>���u'�`�X&�Z�P�|0�2�8#�_�t+ש�^�,�h�:g5��'����H����̰�ē�R���8D[�b�A�Y#n^�v�2qJ�˘��b��ڭ�6�D���%Ǿ_���F�ފ㣁��ݪ[�����)"8wtbD��B\���F^�Aα�.�%uV8o�`�I�{g�5)�i�x&D;z�a�ō��Ȝ�J��:q`oa��"X��'zVr�dLqekG"�I+�7�$dO +��?�� ��W�pD�'�+I�>� #3� ��H�/�Z2����%2� .���IS!T�2�Ӿ @&|g���`�n ���mQ3y�l�~P�;��'�� r���PZd� ��(r�)�ZX�ۛ`Op�+)�Iͩ��iM��֕(�{�k�A�C��b�)�-0��_��Ɋ +E-mа��N0D ���i��Ձ!稙B !i��c=h6̈́��FUgR8���^�m_b��C�����=�0��<E?N�������yHr�����gp� +��W�QUr��O����&�'<�.�%)� a^� oЌ�9g�>�� �d���Dn����m����2��*F gm ��HAv�6��Aîh��e����xѩ�����DQ�#e����?���ř�-�*$�:s�ҽ�'�Y�Bxm�� l���1`�F�R��x.��J +g�*���XK� �d!���!�_�(ZZN$�N�� �� ��C��}�D({��6� 4�Z�j-��y�ʾv�rFT�i--����oH� +٢́2J/ch;t�y=?T +I�p�ҙ��6K��2�;p�.��4ޙ)����Y�+EL��${��Z!� L V�S�SBF�����T�c��i +�)&�㞨j�cޠH�N�2E�0�`�}����̱� �g��L�o����g���(��&��J�I 'xs����YBq>E��l Qh�SjN��$�E�Y۝h��<i=�V�X�tҼ���nF`N��M���ˀ/�|��B�fPT4"G@��trFvdGZD�������*�JhQE�lk�dy9�B������`�R{� �� X��01��ڲWR��!`d�@��[�lF+�j +�2N �y�� �M��������WO(��i�2�w?@��YE>eL����Yۧ�R8���;���+*K�d��L�T��8 <��/��z�"E ���ژN��*3���/�"��)A4� N�׊Ѣ���~�n���~� +�����5�vR���3���k�Xu������3���&b +);�%m��Q��_'�k�g_J� �ѧl�;�tĩZ*��ak�#1��$5���6.MP����s���~�b��+���lN �g0�;k�&[�� �%�D85͓ǜi�'�Ÿ��� +Lh�����9ZЪRb��z�x�l�Y��L��vγ*�p�4a�Z�X�42����~��I�B^���F2�`m5��{�8եD��>���f��Z{���b›�,tnh�]0d ���׃I���4�&���z� ��~ +l+�A� +)t +oj,M`�%Ն̍�ݯY�Ggv���z�C�� xv?����a1�����|�:U#b3��%=kb���X������*�&z�D��TPK��X|�ڥ��y�2"�+vS��pj��Y��nj���ҟ�/fw��L��1� j��̀��u�*�يP(��0 ��|z�u��k��>����iHM�d�]�M�E2$}���Ȏ�Zi��̣������6YP[�ƈ:�!Z�])H>�MA����A���p�kj�����>0�A������$0��5�Y/uc�[��9�t�殧U��8����k>P��=��q��,�$�8�����r6�0y֒)p�c�x���^�0�擇ٟT��(�Ý���������>������O�o�����P(yW����>*����;�}�Λ2��2��S3�7�����/U������_���]^<<y��w�wyx����;|����߿������'����v�֭�߿��{7/��߹{��k�t���������e�?��G��w��_۽������7���������o���(��$?����Fz��9��|C�+�;b[�P���|�]��~@���d�<_�����ǂ�IF(q�م�g_>d�e ����>����&�۫7��{A��~�y +������s�ݧ0�p�gY�� ��ù�WgJ�rLV4�)��:^E��Ϯ?�z�'��t�,ԉ�$�- �T�|x�+�q�惇�.���������[�dz�w߿C��x���H�|�J�<�������;N(E�i�/�'M��8�/��?���Т��by��N�2>��wk1�Z���9 ����q`+K<?�aD�z1�iF�h�B������������?��x��ʲ�����vh�ũ��v��1�!�wa���l�+jRz��� /����X�����O����?���Ax��O���'���'�YI^�y��aS��_�fl����~�?�~����~jK�����q��s��u����yҺ?]"��/�ko=�ѭ�'�}�����/����(}�-$��k�����e��k�,w��7o�Z�����߼s����_�G��h���}�������_x����|�/�q��͋aw��x��çy�7N��y���#_%��.�~�������|qTm�w~���h�7�G}��x�44�;���:_Z�:�+k���Û����ۉ��$�����a�}�T틗�~�prxe����8p҇/Ͼ���24}��w\>|�����m������������K�K�׼h��BC +���=Ŀ� ��=�����O��-�^p�s���?�^��;n"g�[F_���ޭ�?�__���N���M���ocoE2b�M��.o��V����'�:?�,](�x%�m�e}�>d�ϕ`A �.z�7\~��;_�q��! }�^-�Dtu���:���e�Y}|Ar��gN#�j�ρF~ev�MO���;��EK��"Z>#>����X'��/��������w�i|Z��W_�{��|�v���~��6�8���6E�x���K���A�T����|r��_c=�הH��SG��ɝ�~��%=��WPC|r��_[����ʯ����W�����t��/�����~wP�ߺy�ޭ�@놭�?ן�U�c�wJ�ěw~����!��2��޿�; ���ϕm�}�O}?�7����_8���z��v��߽wx��7����V��`�M�= ��n�}���c��/ ���r�������9sy!�{������3w�]��,M r����\���߼\`<����%β�.n��v��>�����������ޭ�ﯖ����7�:��s��]�һ(�p���߻.RF�޾����>s��3Ph�����գ�A���/��獍?q /$~��Un�[�j@�ʱr� �c��m�eE_~��?���k������)�z���� �[�����iE��R����|�Ŋ:���ޓѢ�'��{�׷>�9���� O�oݼ ,�.p�}��$����yx�W�&L��g�'���ᯟ�_�����A���E��o��ß79�y��)y��|��'����N�w�����q���� ^� x�ͅA�KԤ16:A��� K�WT˜P��c�#+󙌼���-��˫G���������?�w���[/y������g�B�����<x����O���cO�iH���*�wO��w�<l߷,��R=����[�o�����G�/߽%Fַ��� o^޿��r�O�q���/^~���V� ��߻y�ͻ7����~k�����O�����/ݾ�&���� ���~������ܸ{��/w����3�,�=�y粡�k����kw�ݼ�0��ׂW�����/����z��^���3��e��?��H'.�OZ�n� �C�� ��)0�,��F��'/��%Q|�����/��L���Q�R^���U���D�2ԩ�f���K���9���/���\�w~Ifx�n�_ci�J՞q�ÄfR��J�(mX���s}^�/��K���…�F�����k9��RTw������%Sy�T>�L��]�π�ĕ��7 L%����T��w(��J?� �?ZJ�{���iF<�q���_���LF��=?�c��� B:��k!�Nш�m�.Dt�ͱ����ς��M����Մ��h��t��������}�L�����z�/���~v��~��u���������Z�`��kw�߹���ɖ}�U��=��e�z����N�Ӻ�w_>����x�{N�bo[�����Zۧ��X��Kwn,�Z?���b�>|x�mxS̡�ٳ�=$Ό���<9��+3���jP����z���Gw������߳��_=����u��'��ɛ{ +x����r��o��S}�Yo#�'�)֏_=����R ����y�=�b�ǩL�Շׯ}��_=p�����}`*ͪ�l#��r��-E���X_yx_��/X0���uJ�\�?��D�3:a%g�,���?~�߱e�߳e�"'M�5�@�����-c&n�o���G�>�'�s(>�fހ��~��4��)�M�F��1kY��8_&�9 sf+�̎��Hw� �Q0|��z��\=�O����PA����C�� 1�2�ä���������k_���_���W�Ƕ_sș3"��*���[�1/�?�)�l����U|��_����k��6!G�XQ�׹b��0MV�'�@/�d7|�r��/f,���D��!F+��k�&��=|*�SX���� ��"���T��R��m�ӂ��;�N^ٮw.�����j��=]"� �S��z�S؍��K>����E�9)�z�e\�=�a�K~�O�י�4�9�$FF%S��\d�u4�hM��&w����ӈ�<a�`}E���~��0F2�Œ�~Q��s�㌮3vD��\G�<~M?R���W: ��n>��&/0X& �hZʃ%ԗy��޾6s7;��a�e��{5;")���K��{�4|�����QJ�d��?w���β�� �;�E�X�s:���� ăp߽��.�-����HS�ˌ"]�]%J��s���gfw����b�ߣo��8;�3������=mv�]����a5�,�0�B�_�\85S��<�ZXp]~��j����"rl $]�v;�7���"�:qX�M�š��;�I�����I^�[�A����W�)r��L��y� +-�� ��E�‚세;�:]�HL���s�b?핰FA.��XQ+��,��eG���,kٝ��"ʉ; 9d�dN�/vB��x�� ���B��y��̑`%�z$�/V�H�yxV;��n���B[���%��"AA`�,�wf�-E4���W���)C-�U-h�$�w���W��r��v��� w�"U�ǁ�x��R[����A�H���< ���6Po�K|B��T=`Ѭ��!��Ӧ�H:;ڴ�6D=@<��N+)mHA �9P�K+}ǵ�v N'D� ՆR'��iu�R���,OY�8�|�hp �p�m'Ԃ!"�e3�hK��js���=�?V�/4��N0)���lf;��.Q��i!�;����;N�s���zB��A�6�Ӎ��������m'�݊P��8�%��',���հ�@Ͱp��@�Cc�Qc=]� +k��-tbpة}�z 6'$��1� � +�����{��BH���y޵���X\f� ��Z\Hc�C +%x�R�(m �V�Fa��d�F����o|ch�4ӂ�F�]Z?����_А��z���=��w���������o~�������*Tv{�4 �\�r���t�}�?��?��7�,Lr}"�@����e��Z����8�z��d��p�h��/���JB�S ��b�嬡��X��U�W�H6Y(am�����Kt��V�[\��Lh��a�a}u'�A��RdE����%X׉=�V7�����h?���~�T#���6B*�/��/�p�'��lhp6�!�4W��Z�b�_.:λ�ÌTH�-��!b���ͤ�Kʤ��w�Uj:��`�:`�v��Uq8��.B�����C�wޖ`�jB& +(�v"���S�Z�_.�4t3�.�X7;-���$��B�C_���y +�,'�I�<���r�Jdj�_��g%�|�bÝ�B��_ʰ9Y����8�����~���'���A�?ku,3�Æ��0n'tE7e���y�s�/a+�p���� Pp��!�E��a���?�p9Hϋ��I��$��A� ���f��Aj�' �L�i3L�v����7��民���� %�� ���b��{�\��ԙ����+S��?��]��;zj/�Л�f� �+�=���8�f +��w��g�����/����/����ߓ��;.؀��o���FSx�}� �ݬt��[h"���V�_ж������֠Ǡ��"� ����M�a\%��?UrIc��q5^b�CVu�~��� G:�M�^Ew�mx7�'n� �����?p�v��O��: 6��(6���< #^w{��k�����_���r�+��`�DKjd!�<yi���FNӿD�]���+�M��|����>Oqm�p��� �+�>�Q/��21�4��f?��CO-ԘĿb&^�j +%$.Y�:��n��A B��J ����n�V��|Ob���l���iSwyn�;�i\���y)����ԣA�f~Q�Xo�����2�m�[����f�?�_� �,B�h�~������~�:.i��k`�>��0� 9h �9����w���0��@��`��,.^X@* �G�Ma��Zd�ݘ\;��t ޖf���6� �j����B���ZR<�����+'<��W܍���w�����K|4?����@Ҭ����������_��?�����%�! '�R�ۗ��Į�Z#臗3sZ�a�p.��~v"ED/�1 ��<l�7 +��У�;� ������c:~)n�I����+���L��j�� `Z���x�/��/���Z g��hGQ�a�S�q8W��������Vo����������<��'* G�g������;���$$��:�譟D���q�Y� �>�%�,�,�>7�哖��ٛg/j]�}��!��+���=߉fu��WL�pz����Y�j%�/�=�>�i�~ :Ē�/�/*��گ�P�������~�w�_1���?tY MVR�����#xW���%�j����6���Y����L��8���� %*Y�צ��(.��O�X%���� f:?���s�t��1��6�O�+���.��5���ȫl���8#��"��a�e�פŖ��V}>iBG�d� 6f�������q���y�������"ާcbfw��?x+��$�;E���Wl���?d����(�[�>Iz�_9� ��z��ij���擛��ݲ?�[���5��%z��ֹ���~{}s��̲eJ�_�h6��|E��]���_�V�C�?����qȨ�:1Gk ��2�ap#iD���j��3x�eh� 7�n���B���f�_����r:ر����x�ߎ�Iur7����B?��n�Xn6;��KF�s�����js<,����a�=�Rm���G��"�N�Kꀉ,g�����;��f7�q�N�LX��Qz�� ��߁U�q�?w��]�͊�l x�~�G�8�i|5��� Tx���B�Ѳ1�g|-�ӯ�H�BEd��x���~s�a �B���t�i���c����U����dYx4��'�<3�P��9����"_DB�W�8�%a�U��RW�O/i�A#���0�/���y�v��!=��jqB ���\�f�n�24��zJͅ��b7���?�����p| :D9 8?�������� �����m~q�l����?����*�$��a,�-�'����r�x��mm���=O�w�����Ⱈ����{�N4gw!�/��Pͼ4�ts<aU��)�N<���l/�P4���ߍ�„A����*#� +ib,��k;�_����|7F����|?���� �����+\V����Np� +ЩU4��Ar�6z��P&��N0E �.l"0q�6"x���^���'����>uʜ��.+��f=�q�N}^,��i�mBm�D6� +��b�6ߍw[��V�X/ ����p�B�ٍ�@>So����K�8�*ab@��<?�0�s��� +@2|7����M��u]�4��瀶J���s/����^���| �x&�7�tgo�j�O�芧� +�H �~����P<.�Inr`�) ����^��|��{�B7-�]��� ��C)����C��X��q�m�2�1�y{��g���'��#�@'>�et��F���}i㸝܆o}�v�{V�=׍��f��V��k��+���'�{�5ϲ1�Vh �tq#��[λ�r�����W^�q��(���%��,�Mo���ᵗp����K���ߜS��cB���]h�Y��;�� �J��/���k9B��=�F�?���CNaNoӘ�G��q����߳�@{�p3�z#%�K3_��%�����0�}=bu�PL���m��C�G+,Fnl���r�.D u�����/LS�b�g��/�`v8��ք��p͕ֆ9�S3z�4�9{���UݼP������� �&�N,l��w���m�VBp�-f3q���ܶXm�_����-/�P:�u�"��$ }&���v�࡙FI���P+�M �׮B���|��''#]�DM�@wS��3#t=��jZ`iǷa��/Vģ 6��3�8�m�b�ٌmDqx#�����lv���Ȭ��?\��j�(6�ϩL���q �z�_OY��h��/�­���v���`*P�f�1��~ ��n9�,�'���L�`���Rn�� +]ꠄ���f�^O6/gG�U�p��(8h8�1������4���64���, �F�?���yg;Z��˵�AmG���ϧ7��~�ݑ��{�m��Iw���c�����=xZ�C��.�VH2.��-2��f$�rw�f� �%�H��T�?!.Q#r��� +~��_�����_����@�k����~��%�Ӳ��a��c5� � +�����x?��i ��p�!lBQCt�$�]?�V��hq�X��Y/w�����p�����6�[�� ‡�wZ8[�F��ޒ��b7���w���H2O�-��*D �שQ���6�]��حP� +��v� �q?�.�?��*��p�"b���LZ�*�����5��x � �};]-��5<����S��^�\Ԝ��g�� �������-�aS ���ŔE����+m����J�(́.p�t��(� �Sh �;�-���w�h@�6�/����wW$7j���{�pD4>а|���p����`-���f��l.���f���M+�z��DOGp�<�7�P+X��q=��Ϸ�4��'xہ�g- ki"�95n1��g}�������a �vB'4f+'���~kd�V��j�V�+����r�n�ӎ��!5\�ynGD��\��h�C!� ���f;�0��^`�Q�ё2��$ͳ��6�Q�gn��&��P�@�6��Oɕ���_���'� Z���0\Ѵ&u����I'�L|��ն +M��R#Ahw�O��P����V3���0�f5Z&�D��a!BLӛ��'���8���&N{;L�H�����X�?^�;X��&�+_T�*��_��[��u ^�������`�����������n�D�j���]���#(��qj����۔ʳ0E攏#\���.{l �>�0,~t3�� +�1S!��&���?R��e9���v S�R吧:��|�GW�u�%������0�G ô*)��3R��e�� ?���`�Ю�6�/��Y ;;�%��(��+ ��h<�|n�;_�E�B?��t�������? D�����ϰ�d݂/j)�� ����M�?�ERe ��w-l$-'�W+���oǣ�}����cƲa���i":�}��5���|��>�p�#��`�~��������y":��t�9�����K��1l��Zk�d(��_{E"�Z��՝�@�y�MT)E,{�v�2�B�.,�f�Xښ������n.���r+߅��|�Zo�8f��f���Z�~�%��W����]��=���jdR�g]�� ���Te��ϋ9�VꁫS�'��y�ND-�R%貶_��d��V�GAe$n���x���WW ,�q妩MFڎ���3҇�Z����P �� \��G��Wx���D��pd���ܟ�����9�:u�\��a��?�hZd��.p�9I �3�pEZG���A�p��cl�:�o�D$�y�\���͹z7�X��{��T!>���p�%�����E ��{,=J�$��2��F�v���4�'��n�6��di)z�m•#6�E�I2l�t��jv����ж�"�|����Z��h�GL�10�d0�(��a�� ��.�a���SJ��Fۑb���������Ѻ�$Ǫ;�,�޸� �R�k�.���iSbReǃ���WLn� 0����_��Wy�$�.�1M����Y�ӕ�L_��1C;�� f����*�0��9Ƭ���k̮�e0�^�Ŝ��s��V̝��0O �b����W6�X �)`�����f�hcX�]���ʝK�BXJ�mc��V�e �0��+z�kP���JG+ �s���۰ެa��kn�q�矁^�͚떖m�j�c�z����[96r� h�B�������m +�$�5l|a�%%����T���ʈL)UϚ5�.ĥ���C���^�՜_IR��'#u���R�gݖT}�4�k}I��rE��fm�t'���ک��0�ۤ�ei-��Ui p��Tګ`=�`z�x����dێt[t�A/U�!�Vvr����4�ACf�8R2���ٕV�̵��e��D*��b���,U��\c��%����7�Z2�J�qo��~��������Ӓ��(d�rt&�+�S����U��T��&grܛ��۱�J�n�����Gcf�<e �y]�./��~y��I�ۦzQ�����|v&_|���!iT`ޣ_�P(��9��j+̯���q��We@�'ErV�)�Y�FQqC����Tt��/��s�P|�>���d�Rb��M�Z�JJ�r�UڜR��S4�+C�Z�P&��2�\��U�ޯ|+%�>>�)�c��rk�G���R��alj�l��Q�-y۪HvcS� ����U��z��gy���ҩV�tOuX��@��~Lm���j���Q�?]u<�m��@*���R�n���Qf�S/#�C}�d�Ud<Ԙ���ƙ�4��ިI~����q1�43ц�c�e5�@���Z��ZE�K�5*�eZG'�� �l m�*kK�M_�ڌ������.�w�a�{�i4ӎ����tޔt��}�ݫ>��5�͝�/�+t�y�Qw����^ݓE��D�U�3l���}b�/ �2}�S��ָ~5X4 �uua0(:��c¯_ Cv9�������n� cyf8N�p�.�7:���14ۂ^�ٺ�a��|rc?[K����$�X}&C�<0�F2�)zLuM��jz�e�&@�v�W�;�����d <h�'�̡(���X��v| �5+��Da6�jLfE33��x�\�8-�9�1�SźE�5[,~���ė�l�۲4�ƤN�WN��jb���a�|X������d��<d��M]6i��K6�!���}N�-��ImM��`��{��*��u ���n8��d4���L�}h���/����j#A����r$"���Z����z��r��Nm��p�5��ϒ�l�YX��n�u�Gpo�._*�ue���-�}uͳ�O����-�l�Qַ�R|�s���]>�G;o�<��2+���Ƴ�g^��$ +�<��xm�d�����j�������>\-��B�Ϲ�8�}}W[����}� �V�Ў4���l����Y�6c����.�� :�׬6������2h0D���,ls�`?��w۾;d*$M��Ӫ +U� +,4Z-�a��Y����y8>jMÍic�T�g�o�q���Hv��"�HR��:�"j|�Z�aK.���d������(�,��c����4f���#_����y<��j�6�ϵ�VB���'���;�:^���a��<�npu�i�+�%�Q ��/�f����h*V�-R�Y<�Zi�Ӵ�� ���g��>��?��]Fs��fc�.S��:�Y}Ȫ �����[��� ����S�v���g�H��*�����y����H4_��-�ψ{�9��װ#��ڰ�^_W�v�`�'��X�ޥG}�+�P-�������ޡ{(a�ɱ�Jl���[��(J�CSV��x9h�t��.S��z�e*���VI�ʃJ���V1i[WuU��jѣ.T��ɠ��e��{�S{��J�]ջ�ۻ~s=? ��e����TlE#<��o.�����MG���,����t��trg+֩ Z�w�� ��'o�Y.�V�{6o��&�n���Y��>�m������[�=�:XǨ�(:�WϠS+Ur�Mu����Y���M�s���3�j�^Zmv��͙�CcK?�k���~���A� ���P��?�����\,�zq���C��.Q +{��p�M�G��sT�Ѫ���2�}\��E�˨�<�����B�y�,&!��j������7�;6����YѴ�ϖ��nnkk��R��>_�����(ӟ��n����� �r9Z�ca�b���/}�k�:��+isX�|�ժkId�*�[������Є�7z��ɤ���l�m-xA�-Vzۍ�H_�������Kw��8ޅ�����u&�����NN[6���f2;ț�EE��� 4���R��Et��muo,�L�m,�/m n�~�j���7�1�Sx�SR7�=;>(���G�A.��w��qy�o��03VA�F� �w���Wy�M}ƪ,"�]r5�L�X&��ժ�o���T�!�j�@���ڪ|hw:qKޥ0�l2��>cS=.y�Fmȧ��C���$Q��9lG5�"�T)���`A�1�Q5��*7j�������|Kb����͠&Xn�{���1���ϥ�!Q�&xf� L�tO���{;\������y:!�"� y�ƕ.�W��h"Q d%>z�cl�i8����L"�Ct�|33�� ͹��hg0�}�;�n�7��ް���)W �51�ft�(ܟj�0>���љ����V�.���f[-��zF6�J��u�InF�l�M}�n.��̻�Qd�� ;]��U�_p���73v��[���j���&`��� �c>A�2�:@�S5v6���3���`}�y�ڠG��⊘A+�E�>Y#�wہ�K�;dgt����w�e � ���L(������;���)Yh�4�n���1SߧL`����t�D��Ҵ }�>��ͣ���Ҳ��6q] �[b�����������.Z�Ӏ�B�N�E2�t�0��e�hlC�c�X��6Ǜ�s��>u��)���U�cP+�R�^ \� �|�W-V����o��;��x�#x<���Z�vg`��q�����M*��'����2o�X!Y���̺z���$B�ݬf��A�B.�|������"w��J���x��D,,t6���NĖ���{�G�p��&���j�p�D%k%ix�����ߪ@�}�a6��e�8�Vn5љ���>ml���q��yO!�qBF.�ë�|���Ԭ1��t� �'�U�ZeÅn$��N2.ܜ��Ѫ��'�$#K��q��8�����1H`�B,�P�AW%r��Ocs9Zv�!��?$�ҁۭ��^Y���It��;��4�-Y:u��w�Q��'�5���:�-Cu:m9fO9m���•�L�4����*�W�i�^M�qW�)Q�tx�}B�6�߼ZJ�� ���_J�� �>!����~U���j��J�*��<���Ve t����BU���}U͌-C��Mª.c('= 6C��2w=,e�����/; �m-�D����:�,����r]�ﰢ��p^��a�I5�ͦ _ܮAO�\��5Ѽ�)"� n�k�N�ϥɥ���c�i/K[xV�.���(����4>�!<�nȟ@�E�2�:��� +�s�s�㵀���>�������"�o����� �Eȧ��4���{������K��s�s����Nύ栗���^�����6M๊w�,aƞ����Yo� +�Z�Z��/g��-<Sܗ�z��n魆m�nf�:\�xp���N��ǭ�XI[�Q3�n��nV���߽;��ϕDa�����1�� �K�L����E��3���"�k >Hÿ�����T��Y-Ȃ�+4��\x.�?DZ!���|�� ̢�f-�����յhʑ<�0��x�}5� �k�{��2�Zʢ1l3xfi(,� +N��8�ıy��BouT&i�Ќ����b�܆q�c_���һY_�R��g��*�V�>tcw��xv�-���r�^�˓il��-���^Y�g׉�ټH*�=0 +��A��ǒ—��ڐ/b�x���D�AN�4���2 r`G�Z"Ŋ�@��h��� �lġ[��Wuz�r��u!� =�-atH�rm2�3n�Ol�l��F�%����J-\9�Wq]Τf>]&BnŖR�ʚ���#}��.D#���b h�pcΔ&���a�v�3�Xf�����Ş���F�YM�H� ��u� ��Ɠ�eֽ�4/��K� s:k�q66)�+�y�PV�+J�+V��]X�d��d/��B�� �.$b��^t��0y'+��Z3�I���,�6pp���B��eG���|�L�8�f�<� b���(�̡=�S��Ԡ �����Tљ�5�~�VL<1t� {cB�8� �S��S� _9��I� �O)S:� Q[L-�g���=��^��Q0��؈w,�rN�9����-K�-a�6R��3���Gu�Q�Mj�$>$b�(Np ���zu�M��O���+g�������Ţp�\h�}z�����2�R1��Z��ұ��^+�DL3���}�ĝ��������lc�m6�_p��B��1�.���(��� +��E^T���̳h�v# �;?8R�g�Z�Hͯ��~���3!�Y}S��5�t�z���� y�-)P�gv!\I�>���w�P s�W��>Z�`��M�G�����]B����}��5Bޚ�Hs2X�K�wr,~���~ t�Y�v� +F�2��3a����L@�2���Q����Ľt`�� uK���=��i�kq����m\�ʽ�@$ +��� Mq�M��o]���^Ba%��;s/�+#�ތ�h�3�GtXڢ�ib%]+�� ۯ�<fjzC>Uc�l����ܓ�K���m����%�*� ���)�o���}\�uLh;֙� )9�/W����{'��4�i&4P�~��c��-G +���݄lw�j`��`�޼��C�C�����,�l5/=w�/sU���Ы��;�I56�^������aq�a�K�gg�X���:���z�� A6tX�C�C;��.�M`��̻� X󆖮�ۑ�(&� +J���yg&v���� +,��a���Vǰk��ͩ����EvU�_��z�֠G��A.m9�8��pȯ��r�O��,�O��n�f�u��t�J����M<����ɛ!���T��u,�-�7G�.� ���_ +�%I;����"�����ib�p���� ���}ȓP�AG3}�փH;�(h4��c�a��5,�����0�yॄ:̹S�ā���EF/�ux���$6�ulN����\K�'��&� $�w�F��A�����-S�&��*�DO���������a�|8\�<��ړ�Y��ժcK0}�#�|�,r�Ƞ~�y$4�D4�Jb(�L��U���B�ֽǫa��<u�>"+0���n}h*i k}������J +.B���Y�q%�qd�:d"�����m*Q3%�<��#ᨍ��r�~�G|C�;Ghw� +;�k���}�1��ׄ�U<��-�֩?�:��Vn=�'S#S)_XL��›���Ʃ'�/�q���36qg���v�p�>v�Dx��"w�:%���k�Ԏe�>��YJC"n���pYJ-hC $���'�C�������Z�E �M���,ތ�lZ=�WR98[�~�5_�Vo&l� �p[��X?�]4�V�ZC�Ϊ�K��C +@ɗ2қP�Wa���*KĊ�JB����OC�ț�̋���,tvVd�0�?���^`#e:�ڠQ�z)�d��M����A +3Y�^��V�0����K%�h&UNfUfM�lx3+h���*F��9���z ����t� jk�,�4����{�ְg��b��k��X�JZb�J�-Q$Ɏ ���Hk~�%:�:Br���g@�P>f,�|4�8���V�w�%ɦ��Fh��r�c��Np825:�0]AK«�r��Mh��IB�M��$�(�Ԗ�K a*�터&-�4���>ivP(�%����^V_��-��ʱf��n�Xz5߃M-���p�t$>� +7��P�����('�&J�p�7�a|�IX�(��ܲ�lt����4��)�8]7 �6�J�i��,P ���+�n&=��)�P�ӯ4��S5��v�#�v8�bGMVj����2��Y �ң�H��Z���Li�/^�WHq��i��S��q鷤���� ���%mow���Lי�O�'}\ԗa���]� +Ҙ�tT�F'$�8B�_� 0���`�hC�Mjsq`%�e���+e �dO��"�-�&*}���z�ʆJv)��j!���=��Ԗ�C�Cr�q,���E5=5�� ��r �e1y}e\Ļ������VX�Z�Μ��I��F���Ǘٝ@��/m&6��1��4d)*�z���Ӷ}�^m�)l��Y����#D�v����G?CF��h)�!9�j���: ȕ�C�n��FU'np8�`��J ��t�D'��q�☡�k����"���� ogx� �84 ��yx���M�U ��N���=J/ w�� �%�JV{�,�dʷ���l�Յ�ˍ�Y��*�i���� +��\M����py����$�&�{^��d2�8�YXR����9jő Q �� D�!!s�J� P��@�g�f@p�C�h)�|#��@O��]��g��F�oo��+�� ۑ�EJa�#bۯNgu;bE?�v�U��ʋ��7l�Ol +W���6 7����Npz�Id� +o��'�����u� �,| !o�p���o�2�g��g�J� +鸝�=�+XS?�zrl���N�s`����Ғ�3ྈՊ��Ɏw'���*ʙG����:�ˁ.$�UL�l̫-8� H��p0�E��1h[w#b.�e:�-'�i��9�E���>S���\u���ו��d�J�q�0 >��|� )��޶i&����d��8b��f��|�{�x^�봑O���#��5uF�=*�ce� �ZS�\�%�\Q~�f�����������?��_����qO +W�}1��Uw��JTT�;E���;�^�����9� ����~���7����[?}����������_����ş�k���/����� +�9}�?}�C��7~N���_�㟾�� ��o��������� (��-���[)@�?�����`;�������A����~���GFi�o���������#�����O�~��o�c��������?}�����7���Q3�S����a�{b>?�g��/���_������������_�����^+j ��������6�� 5&��� [�\��)m^�i�?�s������z�����M/S$�����@mO�?���μg��R��B#����D ��\�'�i��?4�x����F�d�R$V9�ף�eoB-�����x} �G�$)n��!��]��"���Uޜ&`�s�:����t>��ﭜ����f��v��8��ٚ(��Nuᗨ:���:�l�[�q}S��i}O���� �d%4��|-�)jU��m?�*���&w��`�/s`yX"�^�3��Aq��z4���z���,�*��k����8#O��m`P�Ѯj$����Nj OD��8ߕ.l�ڠ��u]b����9��M�h�k���X((��quv\ ���r/���\��� +1��g����TBe=�v!Z`�L �����L�G�,�t�u�i�AVR��U�ϋa�,��W�k��l0\ĉn[ 6�]1�/3��~����=�W܋']vM!^ I� ��e��P�P���5�̩[9�&@v��f�@��X�qq����p��'��]��%n�4��m�Ԡ)%+<�m�C��Ø2n��-s4 ����%�E��|=�d>oW�a�E:�r0�ud�;R���K�;��Q��0�I��zD�-A ��l�E����=#�3 B�/��D���é �&ܤ�t��� +�Yl���zzP:}C��`��M��EJV��c�8=���e� �`>3f�6\��}:0�Iy�4�|�|L����`�|3��7�*j0��ʬ �h v,�)Q��F�Q��$��…n����m��D���v�}ӽ�3�.���#܈*�:fpp8�*f��l���R�z)��6}~����a0��"�N�?�7[���S�qT��cU̢ +Hc�FF�ޕ�e�.��\�#e+F� �˻���KW��)�� ��hZC%��f^K��Cd�:Qm�h͹��@S���}�ܩmS���:��:�Y��S0W��a��nq�-�Ӯ���iJ��޸;�a�{Y�UD�£9�\K~U�}�pu��m>�N�3�<h�su*Q�v�VO��<'����C�,k^�:��F��S�LQ��èS@c��ZxR�V��4i��c���Ͼ�촨R�;�(ЪZ���uKr}U[��%� +;�\������Gu�S�悐����>�[ԩ}Y��:��JE����бV9��NA/��}�c�+"%�潵���'U�UN厫���ìШ���.s����O����������z�Y_��)�$��[a{���:��y��Se�0N�u:Ɠ%��c\~m����^�:��N��d�Boˠfuj�ZT�D���"�������K���S���_N[$h��ϭ&c�N]�xw��z��N�xaY�pw�U�e��͎��J��du�z!��%mYO��6���hx:=*�仓��:~���ku�j��u���]U��Ӝ[UWc��s��ۆ�����V{e|���7�����kz,Q|bC��s���4���³Tex:m�n7l;w���O�tҭ�w�N?�M5o��VWk��ԇaP�'� ح�i +��N�� A��/�(<��u�Ӆ[�����\�P�`�W��.F�����lqة��S�&Ea�/�NC{�L�[���Ա�D����m���0D ��k ة�R*0�X�l�NG� �� �Ӡ9k����VZ�T a �r9z����DC�)~1Ӻ��ٌ���� ����.��v���������a���T�o��]��yQ��}��Fz�i�BȅR�����+s�j����t�1��ǖSާ@&�mr#�ۅ���i��v <��#g�]>��7޷w���Ԓ�K�Xs~QO�_��O�G�s����Om5�S��Fj�������Y� �O�j[�1�����m���OmuC_�cf�qR�;�������� _/�s�r���>Ŕ���z�۱����c���,xlE�M<ݲ,0(f�'[S����H���=�r䤏}d�'� ���hĔi�d�L%�U�.�<�o�b�tPE�vbt�������ʕ����,�4���`�!�vR��_4��th3 Ȭ*d�"� +��Yܚ� +���#�D yM|g}��-��3o������!�vN��S�Jj��eu +Tۭ��Sh��v +��YK.�s�az����֩�h��:)�2z����z�YI�����\���4�N�����S��Ӹ�ʚ+��?x:m�:M�\��V����H �}�N��}���k�P�`��>՟�HuI�7�hh�h��"Z�ZOXD;�j�����(iyɺ*���[&�N6�UOC�X�~��>��}D ���X/AM�*/������j��"��+1�-�q�3�9�`�׊��G-�����n �STn�F������ ��تGURc�ä1.h ��"��%��4�i6�)���-]S�3x���rU�@:�������7��J�σ��̬�������a��҃�x���G�;[�\�ʽ�k~�3�+�X?�T��A�l�>%Ҫa:<I�*��%z��\Ɵ��-������(���ɝI�s��O���3]Q\yAY^�M��{oGQ��'Q�;/�%�+�b��x;�e��8[��f^ ���h�w ���=�QI(e\\��tZ`<�� +�����;5�qK�ɲĶ0W�8���7M��Z3 #� zJyaT�����'�R�'�'�Jr�9�=ގ�NR��jQ������Ć :W2�2���Ej}� Fh����H�5u©� ,����%Q���/M�|��w�\w���(����̣G�D�dї����4%Ƃ*��9�/h#�� m���f:�������-��4�6:���X]� t��)2�$yM 'z�.6J������$�3^���u�ږ�L�u}��Ǜ��Ӊ���&�r�YZ���?���� ��sE�#�$������m�$�JG�Wt~� +�Š� �W'�6Z�ǁ]Qx$73�9I� / ���Ę��>�1r[& Mi�NS�HՏߤ��z:���4G’���r˱C�&�h +67WNS�=��<�7��<�c%#�фf�ߎ�Xユ[�������H7�b��3]���k�rҔ��bm���B�� 'W8���'۰/=$9��r]�b�X.nFlOP���F��O�t���@:�g�F㚏A:�/)א�O��Аn��.X� +W�e��sP+o����g ֫y��InA��ʎ��g�4y���ѡ�s�OT_MR������D�%b�e�Y��7Y������t7g�g'�J�ܽ=^���{�V&��zH�| V�G- �K��C�ak�܎�.�U��D4ԥ /zj6���D!��Xe����� @G��iR�5!���׌&w1a/�L�p���_�b&�� > ������Ϣ��i`�ҦKUz�e��4�K"�i�k:�����.�x�]B���<%ՙ"��ҭ!���q~�f�{�=t�)��0�_���žw9!�u'��Ӧw�����S˜�ݝ�q�E����xt���Fwm�Ѵ���V1�7J����N��.� +P���(X&�TT�~��#� +�+�?<,���'R�U���g|"�0 I��a��C8�r X�g(t�F87�{��� +�yBx�&z:� ���1��eR¿�9G�׋8G�Ű�����rm��g|����E��R? �g�� �V�\J4�[$\M��S<^��B*���� ���&������5�f� �S����� ��w��<A�A(O8{Ep��q�RB����g��`B4���RG!0���ʇFw��7�����֖ː�I3��ɖ�t�Mb�?.e Y�51 �]1E��Ծ��a�F�"��O�\�sM��B���C � �����:��U�2�i�����gx���ݧ�_�Yjz��A����H9&f7䈧M���B`��٧�� ����������� ���{6�>��A8 ��/N�����^H�0�GvC���p� i�4G�f�۱�B�^I�� 4��.�3.:* �|�XDA�a��K���LC��t����WAH�21&F�=�� +ZD��(>:=s�`p]_ �c��Iϔ|���F�`�- �\ے�?�wc�ͼ�W䚰�?� 8o`.���zZ�-��qvs^��No 0s6��`/ʟ�s2����t���Gŀ�����h�ڠАDR��;2��$[���9�- F��s�>q���J�t��⻮��ʠ�(��C'�A'Q<'�N8���?!�N8���)9t:� :by<�N8�e >!��SzG��]9t�tĝ*���qvzʠ���Gs�3�P�r��!�7�xN�pM��C� +H��0�oY���x�L��!)vH�^0���Y/cx�|���I���^Ɛn���ػ�ȥ�8�T8#�n�ӆ�e�i�߈K���;Q�g|���a]��I��9'z~L���F���>���3�x��Ĕ5�����Dʚx;�cFߕ@%6���|�&-����&����25^՝us-��ރ%���'�ul�e%]Kv�=�RZ��"7�!;��F`�,��M?q���2Eɬ�X�jJW��~�+���SZߗ�Fq�3�,�Y6��Kw��9Θ�Cۥ�~�ڱ���O�����NN�XI�_ 5��uKߕc�y|��/�t�"RӘ��bR �<� ��W</���[ȯ����"H�=��9��R�䵜P'��� ߂pӸ���`f�-�X��cc9XØ�Q�͓������;w&���dr��e��53 �:�����Η�|���3�M3���ݑ�\؈��5�R�=�;"R�B��%p5�D�\�+�rw���C`/�'�Ti����]����0��Ȟ�GD�s{��\��x�<9Ŏ��+=�v�Iu�Ί�\�<���ɽ�2�ٵ| r<R�7#*������:���6�ߩ{zy�t�{�' �X�S=O����aW�%��<2�.�Q:�M�!��,v�����?-�1��<2�!����� �#�y�GF���=�G����GFrCz�9���#sa�UO��aFw�OC.|�R�����H�/?O�GF �"�.1דs2�����p*�AO��R�a*v-n\�� t9����$f�d8{�ه�:�������������� +]��>FS���Չ��P�yuW���1.@ ����W��;NQ�,2TO}��6+"6:f�;o�ȃ�p�-�Έ{v>ܽ��ݖ���|��#TE�É�P}B>ys��(��{#�S��8��(xb>����·��Y�ܻ�ɇceq�B����c���DY7ߟ/�����9&RX�Y)��뛇��a�~�{X�@Px#�ş�p���b�cΣ9� +� �c�G<��:�;��1��"�[�K6���C1!�*���ʚu�˳ذ�{� ��eú���+�8���l�p=;N�^8b��^ 8�H����!�s�#N�'��� +Y ��5�8��)^�+�4�A��Hm=a!�Rv���f��$Rq�f��Ӆ�H�K��WW�J�{NFj�I���d�6���� 4-��/��hF��-AFDԍ��h��U����*�l��T8�����y(��.�g�¡���|(�v��T��;�~�p�^���� ����g�_�������K�t����=�" +O��5�E��0Q��$�s�"�_�\��f2�<vޫ��f֐�P��Y��pV�`�8Nr&׀�>� �R�׻q��v1C� �L~oe��G� �L+G�,�閟T�2�����ۛ��yp.�d7���qs���J�d7��N/� ;��2-�E#KV�.����ބ��} +g�M^+��*͙ސ��o.������Jv���g��.����N3e��k d���3������!��W�.o�]K0�no��4����v +�������:ͩx;��k��S�a�a����Xձ��}#B}�Ĵ�WkzL/OK��o�B��H�#�N�r��������+ G�*I"Bn�,��{�ڵ�bS{���������m����S �%ˏn�>������.����]�$w�.&>DR8�E��\q}Bu�x����pw���7Ó�w�ր�T��R� ��w�x��c� wee�r�ҡ�ħf�=��M�e0�p�Ȧ�ʥ���l:.� �<�Mw^���X��cl����th���3���Bnʦ�Q|j6�9 ��� �t\�t'#f�q�Y.�{8����NzH��Mǥ��<�Oʦ�ʥ�}0��k3"��3����a��Mǵ~��9Oʦ�Z?�h����@]�)|k6��n��l�[1v_6ƞ�M���nȦ㲰�9V�g�q%Z�r���M�����l:�������r�8������.k>>�MǕKǵ�<�MDž �o��l:�\:����鸌+���(�pP�� @Kg?0���L�xu�5ƴ��N��gvN����x��'׫��]�ē�׉��/l<]W,D��LD���Aq�(]]��X����pP�4��xb3� #����-Vd�v1�E�?�-"�Tu-̚� Ʋ+� �ݘ�vY���+�*�me�% Y������W2�D%�]�����-s�8��{�̝X��ce�: _�;��J�e��ob��BY����{��fz�F�y�`�)"�UD�R����iDЧ�z"�@�8��f�x�Ǯ�G����D�, +�b2`�d�e�o "�I���?J�Za �e��"����$�����{`z�%� �$W4Tq��h(��y�Pŕ�h(��~�߽~S棆��{{2�����"��q0s���2+ڱ�@����.LL�vVb���<�Y}⭀�أ��i�U�Œ�w�r���D� ݐP"T�˘�x���[b�����Pf +��L�k��o�ć�����3d�F޿�������� E(��8O�%��y�Z5����� +�)p^��'�*�� +���G�-��+�1� +5��dCV����V��pwE�>���Y�0�|��*�ݝOĪ��8rV���K�r[�;�^�p'�Vs��Tq��Մ,��Z��k�j� endstream endobj 70 0 obj <</Length 7105>>stream +D!Bѡ�5��;�� ��f����~�=W�M�,�;"�g�sP�u[�*�c *�er�Hc�����sq4�� {�K6{��Ū���{� C ���Q�v1�4&��0f;u��5��{ �ŕ��(7��$&���,��d]Lm�pSSp���^8(��D)��H�e8+�T/���{����K0��.n�qm�-�H�^(#l!l�9�9c�KDZ��r���}�r��[��|**P)��r���xR�+� SYς9�g��������LS´Y���I0����{�*����[�����츩�p����c��.13��\�p(��a3�t�2���*�fK��u��yy�W推8G���4�.���8 +<�:d���cu +y�L�� +��%1;���uꔝ�'�r�g�;5M �U +��2S�t�e����$ �`m����k ��Mq�N�D'U��`/ +�-L�_�}�2w���)���n?��x;��2G��z������.���5 h��U�8ծ s�Cr��RZ�c" �>8� ��b\ԋ^���� e��N(l��\�^�A,���(&��Z[��t=d�?%)$&���?��Q�W����='� +�3���+"QG.b7-_e��JtڵD9�͓�g�鄇$�����;���Z�7�!�׆d��/���EiID���O|#��ijܱ�,q�ү����c���'�Zz��h�>��sn�C�Ɵ���2H��v�)O�ΛhY9��-�轍0?�m7�q�u�v�2W�(�|�Z���bW��?JK���5{yW\Bl��U ӗ6y/��FN<|�M5� w�1s�ӄ�.�J^��v�ID�z�.Fɫ�.���[�f����I$C4��V>P����{r�n*���ę����9�M��6�+N��T@�ɯ��N\�[V�ۓ��#����Ufn�v���Ev�����#���søz�'b�Z=��06���L퐁�����j�D��{�����J��Hj}wfr�g 3B��,@�9�4��Y�lQǗ�˳BwW�;c�,@6>��g���,@Aۏu*z��� ���)�wsE����]f��2���y�[�O"Bh<^���c�ܢ|���_jQ>/ܓ��]�����|�ԯ��(3/ ��+a���h��sU�{��P�U��gr=�n���]N�^���hۋ�~��)�^׏�*iU���^�O�+$t7�-u��+�_v���n��'�ʠS�Cu��B,���u�Dfr=� wU?��r]?�q�.��Ǖu�?^�U�OxBp{F]?�e���ƺ~Œ+p4;�^��BO����u��7:�Jz���r�]���8�� ��(� u������~O���xλȺ~"��=X�O'XՏuS��u��g�3Ro��ǫj��~qw���N좪���!y K�s�Y����~|�4:��ۃu���/2R��'\Տ~?��y5�]�'����O��'\���z|���qY��ἇ�eU���9�u�8�κ�p����~š<�}��� YL��P�OX�G5 �P�O���+����~\i�g&|��� �����L������~¶���.���.�w)a��Ǖlq�Ԡg =R׏A^U���J����Rs/��u���x��3�� W�����Y��z|w��c@�0���wc.������@2<��'�����'��~Wn9]�O���{���p��O鎺~�f;��'�^8Q9O�U���-����ݮ���߅ dT�{4z���'Ldt��u��Cƍ:��N�e������J�꼫��u��3��ݢ��_��r%{�x!`<�ɮ�'�+"�ST]?�́�)��%�������gu�{���W +'��t�� �v��3�L9F�����P,lU�S 1!�Ihh�f�^ܜ�yAs�R.�<���Vْ�z��n�D�NK�)�N��� L���0����y���.�߅t��L��_�V<ᎇ�D��“�ch}9g�Ͻ� �vo�+^�����9�u�z��s�/�����Fp�;�E��M��6��mY������ՠ����n�Q�wG��}/�F&�њs����p��|-��8�}ո(��U��ΔPZl�W�G��V3C���(�%�ء;%�R�v���)?���0�̀���D�(��e��s�==�T3_�1��Vb����$m����3x����0&��?���\�3�y�6�6 ��j#�'e��n�j�P&�)9��� ����I��?�\v��� �*c�����'���u������3�K<H��o�� +��Y ����V��Ż�n�|�Y%���!Z��j�ۇ��FW�+� u*��媝�i޳�][&�Lȡ��#��@�E{{�H kO�N��D�x��sRZ�'،���5�O��5�.^o�$ +8��5X�F��Ɍ�6u"n��!g5���݇~ț�v���� �����1z��2K���md��+�ψA��7%�����ڨ�K6NF��}y�O=H���]���Adi����Qٌ~Z�5숛��3�����z�D xcAe� � pFa�L<̀�A��5Vk��W���j�WV�vU� �|2�T:0�pS+g8u�A��p�x3�L}��3]�j _��I;�U��9�,��B�s���rn0�uT"���n�-��4FA�d\%�+����XzD&��Y5��T-煷h�=Y|��r�&}�1j�}���M.٠`�(��:��g̈́ld𭉛��|{7۷iе�i X�A�J}����c�2�h@���4�o/�q�[�Lm�g��h#+�A�����)ȹ,VR��F\V�w��L�3G�Y�d.�����]�b⺒~��I��ؖ $�NB���iHH��l@X�������*�sa��Ȩ$ٖ�BB�>M۲]�J�R��d�0}#}-��C�3V�IMv^��Le��=2*�t���}���;����囼s�1'7���ܳn"['���������R��!�U3������ �a�V�y�q���N1+U���Q���w��՛^�G� a�Ҋ8���Í�0@�횮���L�����y6C}`g'���� ��`/�,�`��-� ��y�m�!� N���Ԙ�-Kl�l�Eh,ؘYV������ ˖�j'Hؾ-��P�չ#��2B%��{*��n�`�4�j��8oZ�|D��{g��)._} �F7s����#Mko���)RG����y��P)R@ �a���K�Kp\��zM�Ga������j� �BW�����s8 +{��CQ���p�ܬe� ��&i��‰-���Y�����8�4�#.�$i��:�q{9������H4S?������ �z��qEE�MŤUK�Z�~W��3���u��ꩰ�����A�����\��dǣyX�J=}H��g��6 ��v�� R u��p�`��_��]HM7�"�I@F�f��� + ��R� �<]�`��"s�w������(�� yf�<�56��K}T���n�䃗�h�6����� l�uW�?���=�J0W 3�P��*!7��4�`zw樠��;t^C z�"`Jh��<*H�� +�K}n��ݱW)!�����3ұ��RS�z��az�z#>j���+S�6E���N��[<��[�],6$,�4�LY��+�m�q�>�Ks�To � +��2'�,S�A1��a�.�V�~m��XϦɸ�#�� ^ĺ� ��tM +4�-F*�ڷEg��jbE�U�Eb�t0X�]=:+������K�e �\g����I�+ǽ��6�{����}�����|��\M|��xM|��R#uZ�+�j��LĜ�r�� ��ml�ڐ��hl-���Eh/&-k��ֆ��ƢN��/���%��H��;��b�չ�/�eY��e�k�<��#�vs?/�m<�DYp����ȵY�]~3�U����&��U~�[W����Pp�*���+,"�e�̝6'�#�T�Nd�) +�}�*�s= ?��o_�(��Eb��/�$�|�3)L����u(�FG|u� �h!:��0������Q���Q�n>��%��)��d�G�0;��^��EIb���XU�b��@���a ���UML��G���TK����G �8b���\� ��]���sI����KV���Hg1Ab���!`�D�ľ}��bx-�[5N��S�L� 38�X���^������q��UK+��"��� �/UpR�t�F�b�ѧu�I۲��^&��_��3���3� +���΂�����^*��0���تꊍV�����C��u<<�>��p<�]�E:��l���� ���~��9 ��l��2��?s=jo�PH+�*Hx�i����k��~��J~�o���kU��p��H�q���U��],��Ҩ��K=�n� �)ˣ��J_�wxʝ���6��]N��#��a������IO'i����3��6�Ko�?��?�N�j��f� %��}�;���*mr����c���;kR�~�3ko� +9l5�,�c���E�g�t��ܔ���A��A'��4�&B�����������%���4|'=�bKnP�d�D��JHYg&Ҏ}�8@��up�!������J��`�n���S�@�3��K3~ � T����U[��Đh�RA��3�3=��ii;���*qa�(��׏=�������7�Su$*�ӷ��l��{�aaOP�U��Aa��^w�5� �����DL���U�\����Ӡ�ɲ���p���=���q��L�W��Z�qy���R��Y�rwx�� �~) ~�E���/��|��8 �u��PXsf� ��Ll<�#�e���I�6w\�]��� ��.��m�{�Vƽ}�t�8�5 +7Wie��Q8�K�s �P +Lv|����(�7�~o�e;S|a)���#_�b��w +R�ȡ��Oj%_����OJ� +��@����K~9@����&O� ��*iI��Ƀw�sY�l������TV��`SB����$4ՠ��|�nBH�%2�(�?MHb7�&�� !�E��$ g(�?MH�1OI�iB�e%�� I��p��&$q8�������/�,La!��/5X =���m�'�6�oNdIt<��R�0�%��/~�/�{f�|F\:��,�. PV������@��e��� 1o a2�-�����}MR��-�r� PI$�<�&2 4�É���-������ڇ U�k�V�ǚ� ��UB*b�J�<,y���3�>Y7����agi�B>2� S�d���X2ی��67y���iL�v�Ĩ��-ӡ�.f�A:x����S�x�|�Ǝ��y�1X����Mq���h?r±��x]����>f;��f�(��T��0Z�5{l��R���< �В�����;�>R���!}{��,19W�.�E��Y��3���0��hKP$�ė����\��{ė���j�(��QB�W�� +� +pn��˽Ɔ�(е P0]ۮ�"��K���J�P���,��}����)����Txw�*mĥc?$p��i�s"�Vh�<���PD"ެY9�6��m#�+F5�|���o���$��M��:4#�il]M�MV��� +���P�_��� ���*Qd�����V�� 9[���H���,f>$vg��w�����ܶ���9���U ����V�h��Mml�w`3S��[[D%��@x�^kY�&����H���uE+[�7����|���}��В��@>���6p��i�_���9LlVծV%�_V�)|�m��!ZA�o�6J�K�<�� +�z�1�����ǖ�>� +�=��\���-7��<��?���m+��E<EdW�����'�ED� ���<�{˧T9ş�����E�� T�DtN��͸�<�T辖����l�(��M�Ϥm����VF�w�p +�Z�sS�e)O�.>��;x��F����m����pܔw�#D����iQ�m̓0ugjw#2?�~��8cw�3uw-z����� ��-�lϹ43+��S�/����KO����ᰥ0��C*�ǰR�H{0�S�F�ά`Wnh�� 6N��`C��ɀ�:؈��.j�5Q<����D��(Y���1�8�#������_f��^����We�綾�z�����&� +�kH\$OX"�r�R��|�[l6b�ë��s��9Z����5���MҶt�4<�e.e9�rKas-w�7t�؆�e?6a|z�l(�P +@=��ΑA����Ӱ%A������}QCu�8k���õ6t�B�uۆ$_L�Œ�H�*m�T��ʟ�%ܰ՛���ж�Lķ�W�����8~}G:�6�O��|`69�#���g@�ADZ��\n��\(& +��������j�1%��j4(o� ~?�h����5h�����4�M`P�����@S������~�r՝L�p�y��������ݑ�D�G��׊�H���i�R+�B�����?��?����"��J_��+��I��i�<�G� H��T�團=���G���Λz��wH���#Q� op�p+��5�&"ɘx�<~~|��1{u����}X��*⿵�p�[����>���{�����p��qˊ5D쓈7UM֐c��"YG���:25H�?���*R-|�CB5 �G��� k���w�Qw�=��p��"��N�+�= G��r��m��Bnk<#��W(+Ȣz +��I��R%L����L�9�c����� W8X�E�@�GcQ͂K3��{Pk *3,�o|r�^p�_"R�񮩊xۥ���liQ�B��Q��⻀LS�,����)�&��.QWe=�B����4GbE������5ӓ7ѕ�k�osӸ�.��I� ��!"%��&r%�.�¼��Y��e�0.12q�wK�.���1��<j�q�� ��$��x�9բ:6!K�ȿQK�6g����g��氉��o�[D}XQ�t��6�8ɑ��P!�QM6���ڊ�Í�j�1�L��a�N���� +}��Ge���&i�d�2�ޛpCG1��yq�PeÈk���c�(�CO!V�X%�4p��"8��{��Q�������+�����=���7�'�QW��)��v��� +��x�� endstream endobj 15 0 obj [/ICCBased 63 0 R] endobj 5 0 obj <</Intent 22 0 R/Name(��0�0�0�0�� �1)/Type/OCG/Usage 23 0 R>> endobj 32 0 obj <</Intent 41 0 R/Name(��0�0�0�0�� �1)/Type/OCG/Usage 42 0 R>> endobj 41 0 obj [/View/Design] endobj 42 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 22 0 obj [/View/Design] endobj 23 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 53 0 obj [52 0 R] endobj 71 0 obj <</CreationDate(D:20150415134556+09'00')/Creator(Adobe Illustrator CS6 \(Macintosh\))/ModDate(D:20150415135729+09'00')/Producer(Adobe PDF library 10.01)/Title(Print)>> endobj xref 0 72 0000000004 65535 f +0000000016 00000 n +0000000173 00000 n +0000037976 00000 n +0000000006 00000 f +0000253062 00000 n +0000000008 00000 f +0000038027 00000 n +0000000010 00000 f +0000038747 00000 n +0000000011 00000 f +0000000012 00000 f +0000000013 00000 f +0000000014 00000 f +0000000016 00000 f +0000253027 00000 n +0000000017 00000 f +0000000018 00000 f +0000000019 00000 f +0000000020 00000 f +0000000021 00000 f +0000000024 00000 f +0000253333 00000 n +0000253364 00000 n +0000000025 00000 f +0000000026 00000 f +0000000027 00000 f +0000000028 00000 f +0000000029 00000 f +0000000030 00000 f +0000000031 00000 f +0000000000 00000 f +0000253139 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000253217 00000 n +0000253248 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000039681 00000 n +0000253449 00000 n +0000038422 00000 n +0000042671 00000 n +0000039988 00000 n +0000039875 00000 n +0000038808 00000 n +0000039120 00000 n +0000039168 00000 n +0000039759 00000 n +0000039790 00000 n +0000040023 00000 n +0000042745 00000 n +0000042985 00000 n +0000044073 00000 n +0000049107 00000 n +0000114695 00000 n +0000180283 00000 n +0000245871 00000 n +0000253474 00000 n +trailer <</Size 72/Root 1 0 R/Info 71 0 R/ID[<4D5503399FCC4B1CB18AE82F78BC534D><AD2CFCAD0D354BF89BFC5387F57EAFEA>]>> startxref 253658 %%EOF \ No newline at end of file diff --git a/rep2/img/glyphish/icons2/108-badge@2x.png b/rep2/img/glyphish/icons2/108-badge@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e294296846fd89981892d7197a92166c5c3f3960 GIT binary patch literal 791 zcmeAS@N?(olHy`uVBq!ia0vp^2|(<?!3HFsniTN?DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg3`{#cT^vIyZoP?d^g9$F@YdY-RTGPk4a2&aTgnf3Pw}4O zydwR8bBgo}-Vbb5%#pi-zN=kpVO4RMo0;Y~OKItqf10)WKY#jWE}vgH*Zlu^^%)j@ zvIpe)9xw?oFfo9zbwRFOjoJL?vzlb9=dFBH<-(xC!N91%fQB9Pr=3o{<iNn8!LxlG z^YguLrdrJJ?=|db(ApTa)~Mgnq4m?`QXVF)Y4cT>UhG(Bzka1EW8|dZaLHAwjNM0- zu3HLx@c$&7zUOVtx;~?n*$o%%PL@wUe@f=?L4krdmDjJt2L0aRz+nG5=-7oAP9=7m z;OEaPh0Ra;GfF;6|M@9rwZW{CVzc?*S4anEFZb}8w)65!lY7&0Vy~A*t-ZGFKI`8A zZWD{RR3WkBB`a-3r_QinmpD7t_uO_N#y}C<j>-S!W*9ENaxSwb@1kK*ZO5&qclC?E zO?^DA-*36FoE2m2#F^Zw#)mjh3k!a@*dgQKawoWa>5-qxMSG^+oN!geM}_5z?UKoP ztq+#SO!|DhcP?w>6cz1Bi_4^<HmXEUmf3napzwr4%0qkA^aV$Mz7k6k;@tP7b(3nQ zQq})eFMqFE-PYAy;rb_HQRKF(m!H*46`at;Hmz&7?b$mM9>3pO=l=FL<3u6pUR8yF zq{Wp&E}t$he79SrSY5?gP$|Lu%amJLJdBM&(FzH?^ZoX{^$`e2Fx<A*VS0|X)z59l zx08ffp1AB-I_JXkA|~~)%sp{0@->rN6cYX~nVF-VHnsn0%=Mca=B_jq%wEH~QTV>` zy<ds<MAxoa&@O3ImbUv(Ogo2%`Wf+SKVwgE7OmC)zRK^I6lcWruIQq)^(UfFfB&#I z$Jv;1l}bkL*XXR57NL*AwrX7yV{G)%^wyPKKXr%utwjeO)H@5Jq?q2r>lv6CVhha; T=f*_7X8;0ES3j3^P6<r_P8d+8 literal 0 HcmV?d00001 diff --git a/rep2/img/glyphish/icons2/108-badge@3x.png b/rep2/img/glyphish/icons2/108-badge@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..5df5b584f78e77e64b3c6b1ff78fc9ab50544c8c GIT binary patch literal 2427 zcmV->3552EP)<h;3K|Lk000e1NJLTq0058x003YJ1^@s6^3?mG0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU*9Z5t%RCwC#omp%f)f&fVb-av2sO>lo z+ys}lAP^w-BFY1TN|#-%LP#v-0mP<)3Pm8n0|=_J+?%2++N-PEvOT~9<$=Di3YAJw zp(4=&MIe<bkXF==lh~d(&MfBtnK5#!G+t`Eneq3Rj>copobSvzzkJ_!W}IWOR4NH9 zR<n}03s?*giveOWKr9A`#bSV13=oR}Vs(WSw>I1`jFon&v<@$a8a=mED(zGiWvwjB zdri~4$h54NL{U7WiF)>;j<u+3r)62E8>UJ1EN|j+ev?G;X;oD}Vt_iNk|6Y80AqL= zYhvIRRb9J^{YaDb9HR3ped*L2YvOWdN}|}qA*|yJ33ij`+BNo%M?ED5h{Z`Xi^Tx3 z7$6n{#A1M0ECz_h0I?V#76Zg$F+eN^h{XW07$6pl0jeoc6uA=^pyt4_ZCjX~oh@$} zBnGHqfDFSBve|4IA_j;7YFGr0uIpuxSPW1@-p8^m!8A?!-g6lsdd*&l0je7y@;+1~ zNh$+Gg#luK8VX+oO$8v@XE8u^c^?W_1Wje}Ee>N0P{ZM?I%HL5WIP*VfEo&4a{<I+ zfEo&46>%72fa(IMSS<cM`#P+nuut#P=L`@7bW~Nm%v`E?Cl&)VZ}_SQF!n+&2M8I8 zADg~b0yHx-GiUfZGK|r2Ee5F1xgG|nQ&MGl7Y6aIR>4y%e9aZcS_KhZ2d?KE2B?z_ zm!$owqCAhze-JaIACDEF%HxW9^Q2Zh+CaO1qW05u(Dk@+99+A=lmk&3oxjm8mG)Sc zwF(1rZ>witM+;+gysE0l0__$>QMO2;_+>4d3{ZO^A~(7N1M!1ln!9Y<eyGvq>MHkm z=m~s1gGt8`M08%GUWk^(gN^?H{CBa<xV`^f4^S0I6Bv}&;f=n>0N;y&y1UL31q0rs z(dl_5j0FOLM!e3O@H(3T`*t^b9Zv#O<&CyufOf+heG6}Ne=To>b1Z}-yPoh>ZHM5Y z^Mav}Rj1e41i;@W(7n{>o&u<9fG2x=zSl4{{(^ENc%{39zZSr(45%r~@)W(cElU9i zp?bqtbr_q$d33%c%L3IWS(bTNNE5{jV165)ZN|I1z1Y{T0Vto(FM*ecV1O*4_JWj@ zoX8k7&9d!Z;EBisoQZM*4J!aj=(>J8Uhgvv<8lC$Xf&jhlj&k{ATvIGhoY)+P??0y zgaZ&vl%@a~+5K6TqzD>(A>O67*GihGeX{EFWx|^F%R(O)(JenXH#$1HJg@7|A%{2_ zyLt_XXw_4iA`Q|OgPO%a_EB-J8Dnb|09Fz2X(&xEv5PupQF2rVJWT+$WNI7Uo1_9; zy_7Pc9B{VtkxFodOv@Sz1%uBH4-I|A0JTWDTrQXzA75q6&aS~gC7ZbiQ+=)NcocE0 z_0#zPd%voxuSTQMExqBe&H%MGjL~C+%W}H@7(&mDUYW@_o=iX}{2&|(jrjfk?V6^! zqTQk!e={|g&nMEU)Z=jV_fZJ)06aRp>VIRg*el3;4!WuBqFaA-7v4xprPKEzv3>%b zzu1jW$DNS1&!?&{M`N-70Upb3*C4w2SDPuMO&1E+OixcgY8b|qZVG7>vXJY18Vm+E z1pWSPS~%>=F%Z4*v)>45NrbdD2x)f#qOc3#$-`^DiIDXwyw0y~?t9TIzZ(y4BqF3e zFl!iVWJy|(A*~#;Y<r(iQT~OH^*Z2jedl`yAjcC42xr$83WX;T(pD^_kmiJ}9f3e# zeJ~K%7ItaK@-#qI-sp6Aqo+;Nya^D67Q!q`QIxIGXmlOC&R#F|wI=~`APNAY)qv;$ zKs0n5;TctAc@y%T5lzzyUh8Mi0#pfU>2&&LgtI3A(Z!w2i>O}#&rX%5=#j|#UI|%U z1yBVdJ)b|TSS&t?1pE3<%+l!Dm`_zd?CI%QAJVklVNLUF|9T#vs*vVKNLy=J)`Rdw z@iuy%KV(JO7>h*KBV^5Zy<fZL|H5c6dwY9dgLn9@&EDs`UQHY626(y(Ajdmgh)uH1 zW|qRvrQOn}T?3G_;@G7KUyIwC6Nq9Gxz^>~vXV#F05mZ%5y)n<=OBre+uEU$BxG~B zC1j5Q^3sJ$(s?LLJ7jAa%J~eCm!_MdcyR~vpNi-klgk+(kH|0#AIjMn)L@5T4Uj$L zLOuq_1IlDFOQv$UGduNgRT4$YgU*26r3{b<B+K&o%{&jobbJ=&0BxJdgZ=@#7cfBX z4_~w-%W_c=`Wu92LQ#~r0)GD^*uFvg4VvyJyIx<>Oz}EE<C)9}Q`zh?Ku|9@RQAh~ zv>_Ua&>dxZ46^l5D)pmfS*z(jPdyK1%hP$-#j$+@@%SWrAoot+FF{Gx2~QrNedhD| zZi~m`Bb9%xp>4dse*@mX6`y}f$JJ^36td4D%%!5$#Naiqz{^u>9c$b60eFj%Xf%55 z@X*jVq0r&qL!*7Xzbl5%aooS@_&S=f81}EMwdxrIv_O>}ANS>I%)a1FW{~Xe^r`A9 zgqmlxP-xzVpa7{jFfj0}s;c+kyszo}`NA04Pp8v92FRV^>pXailjrd|DM1uB!>g<u z9v=SqNUw8Lh=M`kl;Pn|=sfKHzg*8z1p6m>`L49rbD$N%9Cx3c<z0S4KJ&<6JpK^C z$u(0s&dU!D3_MKrP<>SI9EXwp%Xk*%G9mX+;2G%gg?0oyv@XzR@E)rH!0*RuCkU^V z429m)r>A!uJa}*e>c4_!Ue%mYJE%Q?%w!Mb5~Wh9Wtc`MtMVU<ZVF=iR3eeMxfSpn z5!S{A6Ny`>e%Ki!dw);obGcz^4~H;!<v%Ovo{i&mbnJhQ@=px%M#^E@p&;r-{hP>+ zEJ-xo*PT3wKwiNBxhH&4f_yGsF2W$Dv0c~S-+$HOWO7e1*xu)<R6p!|4|`W*_eID4 zB5Dt{ive;+_&RYan>|fcl;7~ze*?V23-CG}9X)_#!|sc)e;ua$qtu>5XqVUe+LQm4 zkxr*qPE1aoebV6II~d46j(2;e3x)o%v9UY*`ug@DdH<LJVzIoQM6(zm76Zg$fLJUB th{XW07$6n{#9}c(ECz_RK=h{o0|3)$n3U0yQ>Op`002ovPDHLkV1fk$d^7+6 literal 0 HcmV?d00001 diff --git a/rep2/img/glyphish/icons2/12-eye@2x.png b/rep2/img/glyphish/icons2/12-eye@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f1220ea2565f69785a353f5b8859560137422216 GIT binary patch literal 751 zcmV<L0ucR)P)<h;3K|Lk000e1NJLTq003YB002M;1^@s6<uq~*0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!kx4{BRCwC#oZ)eTKoEt|$$v=&(t&mm zQbFuMtRSX>Xa{tlc7PQGJJ1fW1FXR8CHq4i4q1@n!1rcu%qSf2zPsH$VA4CE&kod_ z`mg{1000620Du4h03ZMW00;m800IC2fB*mhp!)UFwi8a%bW9%}weihQduoa6y8AX= zPp=IRWXN=%J_2eJYJ)qQpQuID)&wI4fNI7o(-+i+CA&DP{RzYx0OTWnUBUP)5P^*| z!YTk{yvxRa)O3g~gGd1&JGn*=9QAp#VPZ?NwgLdh`jyZ`6;6_i?^M`&6ZA2&AvZJ* zfXr7WObc$l<D?qrgs?fcL4p1@)K~Dd0EFg$ky&BEemxFnBikV~20&=OI9%{-h;4_^ zZ-M#CGO?N~9iJCw_cY~m>i!H6ntvoCJ%b6}_)IVgphUHk8G0^~t<PVnP!sCvd)ht` zl($B!BVzz~b^9aS?e*5woY;O)K(ZjvJ}P;C3Xc13YSr8~WWLK)i9`p@h@NW_>xh5L zlGMzI&$%;6I4W3|UvblX@8|5}3;WV(P-4KerwW411DF&n2d^s065%8k_NCK_&$$}_ zIF?H<Xrzh5AtziXBMFBk!dB*hF?Gk(SP0^(Vpd}2=oVN@=l|Z&j{o*^Oq0N$nS5@5 zg;>K2G2=;?FK|<E^C20ys964nwwm8q6(of4&7-)C`LSd9ZRy6!P$7gB89Eo3?>Q~F z6WT})sF)M*K&B=Ll0^BJoE<!pd^m)sd?;_ttq3+mLD<%K7}fXKrq>toVio}0%?%3& zuO?bCBLW96=UM^7<6M#TditJBPug@nJ^a5QR6zg$0RR9%0000G0000400001002M$ h000mGbY8y#3;-*eMB~xpp{xJ^002ovPDHLkV1mHmKI;Gg literal 0 HcmV?d00001 diff --git a/rep2/img/glyphish/icons2/12-eye@3x.png b/rep2/img/glyphish/icons2/12-eye@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..475868725e4a3ffa745b22cf982ef47bcac24a2e GIT binary patch literal 2502 zcmZveXEfUj8^He|R#6&i#7>Q(Xz5idh~BhTiyBpX#Fh|3rPqq;h}yMEL(!{TBOS!v zlvYU)GZdv(YO9wT*Xz7J{q}x%e$SWRr{|pKoL`)UnIZ2f=qUgIc#VyamM1&qWL!Df zPq;O7P;jzDL$2Qqu?qAG33Chf1PnX^-94p^F>c<TmY!}N_k%up!U2HG#~5i~jc2Un z-bV|D3U==<RZrLp@(l%_pOx60x#%42ir8!xKs^X6gme;w-31%Ze&Bp+J7i?-erTA; z0oqLJVpVZ2>8#9?R?6pIt)>@6NlKt>>Kl&ws#ee~YCns<to1f#@9IUi?CK~?jf@DT z89B<y2pEA=kbv?3Aj@I|Bm4pcBzp$&3vs|RPU&CxE&jF#>6S7AXh%5B)T45|Z4*D~ z@9%F~L|=YvtweFo{8`f(e$d{YnVESPhuhX91dB+86|LMF4>;Q28Lo2-(1^O?1Nr0; z>;y~oncdAuH$U&<-jG#VS{hYRUM`4e;?HSD;N(-pxh{mV^A=?eddIrWZXV~3w%zep z6zx$%P{eD6w!WZRtLkgohRT4gHf^G}o*4G=cCifMy-ol3;3k{HJ@%ALY?C2jNyQa{ zm<ONs)Jk1|w2n(DIM|$BXSaD?xvE?^=<b@sX0$Uenc5>M-6}dXHl`J~2!~?-v!d9v zbRZtd?dRvW1}<D@v$*_<ss*EhVaeBXt<9%dt1)uWCd141!o-CP)MX`80^p6XvZ4<Y za4a)J80JA+*JsdjHj~MGL0B>bSu<{XU%0(!GNT=WQu*f==WQOM^Ev339FroUOw(sh zn!rH)Q_srrID!Tj_8u1#ZIbDdWpyF?QXpR;nnp=8XswccvAqt1_9=1@dsw7r{-G$v zduvNAqD6rmwe#k4V|<D&9~cMWBb|)!m74q^$k%;VW*ags&8Y$CfA<(C1r&<)SKa|I z3_pJkd%Mw1@!~nb;sVjaku0q($<oZ4pS4wmg@tDjS9LT;7>xSF#rxr`gCa>{$x{^) z(mg>_aC=|+t4Wji%ZS#>mwdFKpeKKQ$dizk1n1RhZLL!Cmw9BROIcnIAY0=|;Z^Zb z0SDS4F04o?&iuS5i}%)|6HLumfIfmotPf5&)!W8)=BJv`WH)t^7D5hseGd5s7??*? zA%Ptpcn6lz3v68eTJC^lTp&qmacs&kX_0+1e|dumOYcjr7b3x5$Fm;()U?I-+G#C= zNPp<?;59{3mp<%7E!11ZEdNwJ7Ty-09Q6rTjW1^@5j)3sBQGxPG!A2eTZ^~06H-(! zfNn_<18#Jy3lmrB@XZsLNi*OPA8kQoS1BQ)RvCVnb&QzOh;Q`1UL#T|QMlV5^pf&k zTn74QC_Y0sQ1H<5%o)7WC1waI_-2Y3oK#6%+P<Nl-5V~hqD&u`a^l!{_hyH!ApFw6 zyuyq!__p#@p@Gh0PTdYC>Gv@%dAs&{&T&*PkRXqwsf7Y+C{ARw?tA9;=*jP7fusYc z(mu~uBc`<xA>jSTT?~cniuuE$L(G{oUaF&a)7GH`I)PkVt`rQ)!woJqq#V2*Pu4KG z&tDB=*+}SkZWY@)$NED%>28kNK47H(!-*Z47AGsw<W(umu@zS4%p~~8^B?7K<X@<t z3JeIKVx6Um7lPo<pLAVf^u!`m##0ZUQDd;J=Sy?N9G@us%i6C_rZiTr>(VstnzKRT zLo#x;{_vc}P5R!807YsFZejBEGVzUXboK9PSsRCpzM>_0!C`G?GOYsV-W{cvyt~SW zU?n0HzE<V1m{ly)3asw2_^AX(h+lKp6VaI@>aug^&we#_Fa>u=h;;2l5TXkFKFxzr zV9y%ZxejuAD%<IUScr)~pN{xUP46H}31<PDRqQ|#FHT5?|7_20ImHIuJlL(T7pN+6 zC&@Rq(~GY%9#FdG(>CU_7eQKk6ncx)Z$HEDZ+CX0?)hdiZ6d$25iYxj@mq=bB?fu; zE>AujnBwA+H2qj32Qpg-vTW+(P#P?7xjm(ZecmU<P!&{=gRHwJi}k6pl;DZbk9K64 zkSh<t{T9!r%^Yz5Sod7zdI?H+&9ZTMJm};uluVCxfouP6=Z?3n6v)=cKS*<)ZwZ8& zIY_V|8*ml%@Ore!EEg&C%D(;8nC`iQaILi<on}IF)S(FEEz=%FOD1QT4jamSN%g@! z#*9d+q{N79Go*9ls^t^z^je5-8GGl(jcEJWDD2<iujmS<I!CpW4351cj#;Ml9ZM8) zO4Sp|spMRu9$bZ_FA$lW5o{hJyTJN2L5XxVHk`8jih9dV{J;W(S@mdj%v#rqzJLbm z%f;GCn}(O7Ml-(&Lb<os!;){xYw%eZYPF|PwCSxHMMK@~FpYv<sl=D2X4v4A0eopJ zcWGIfuprceH>J`V`%<8GS_jScq(j%fDguh9vghfWeo;%!rn+@iJ-TmgpjLM+8O5G@ z(_FqCJ$-9q4EyolC6V=0e6-!CEx;!2{GObpKo6RFu`Ab|uJ0t%Zh!*$oT8Ff+3`#w z+-l%mG3whTylU~&isYx}uq#Ew3p^9x5L@D*{1N^I>;e4>x2WWcWqji~_?sI+?vd%X zo;=&Oo(ZSlD$NN!o7I*n?-7}O)1##<4d1!F{pZl=Bi`=&qX!N(wPfywX&2$@+OqHM zC8x^ZG_mW*1|lvw^r3fii)y*vQ$6Bgk2R@=wL&u1hxEP2I%n7AZ~AgW(5#N*A{}P? zdTsvA&0Kz0Pv+b=I33t)C}FgaM!F_Q%iCy3CQ9IVow8}Z?>`rvOySF6RPnIV<?D83 zn8P5d3;}0Cpln8m+!cEn_kQ&=CM?MqNsPx*sRrcv4iA*OX6!&=Y^XD1O*~X)g}TYR zNCV}KGjd=32!<&e?j5iuDzzQOIPdOq*ykU`n27xyW9>^PEY(8B3(#yEaMPi8ilX}I zX%(L%lRGsIbs>i6c3nu;7^mJ0yi^zRDqD;f26gJiNwOise@MeW_t&J9Xv8y38meyS zw#h>iXYADEV2M9!TECMc3tOsl?G(et7;l58v5i;OtfM(?7<K7xhrU=Ne=54&fweyZ zk<G0Y=vTbI#o=o@qg~d~pkAFwQA15#{Al0Vpk7|SvO!KTjPc5t${5gbV{%-4vOQ3$ z`J(%9cj7O!Xrk!()3S*YQzIyDc8vQ`JfhMv@O$c^`AJ^{e2a9`wz~lsUlVNFviw~s vC%y8!Qb4k)zbgfJ_Wzsa#12Yr0gC{x*z{rUZj9|om;uJu&5-14t`GhT?_i*^ literal 0 HcmV?d00001 diff --git a/rep2/img/glyphish/icons2/128-bone@2x.png b/rep2/img/glyphish/icons2/128-bone@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fe4f179c64ab31c46b4911d7d5f0e01f765f8195 GIT binary patch literal 687 zcmeAS@N?(olHy`uVBq!ia0vp^2|(<?!3HFsniTN?DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg3`~KZE{-7;x8BTp8+gb;ppE%){W-24Q3-8>xgMMmjhc-@ z3z)49N*Y8t%n}Oz^jGg#e8RxFX#2@^PioWijC?F^+)jU=_da>U-8^9re`cVi3=Kf6 z0K^<X%!I;Ka0?B6`g{J|;-#hS6VCR@MTVDkGe2PS+0nxnm%qZNcA;A+o9z4C-S(fV z4x5QDV+>HPd2(jOojE^VaZfcg&B#3R^WM8p9tUJLTTkbaGh~o)OyzyP{n`wN-N98l z*%tqg=WVi_{OkY1gy=4|bN)Yew>I(xm=ydwm)B&r@dop%Hr|`PYejthEPur_uUdEV z%@rU12RZ2?0i`7~G)vc9_`mN_<>4~|Q#7ykhWdzDdo#=_bFSJe@Hp|w&h&k|r+O@2 z%J4&@?)}8ixxR<yoIYR8l8{!axQ**f+rP;<dPjDM|JeE9@tnEx6L)RfC*-$-ea~FO z2LH*C7w!p!nBD37(H|9%e_r=ngD3x-_oeO!&9>cOcKX&-HNP!MQEXjy(}u3U6S)<W zlP+yy&pHuuxLL%4)mDyq_3}9-GiESv5MRQxAY_&FUCt@5y3R8iRy$6QIzCB|-6)CO z^H#NE@mb@<c`o9Np+}$ToZYKXe^uGEKqLOU+mZQiIW%|QzQKL#N=aSb!#siaFZ;7^ z?e*KY{&L4n+nj}lH#;Am*nfJ>9nPfP^DQdGVsGEQb=76wgHKPs-?_@~zx2qXrOlm{ z_ur}BzU!5L^l3~gBQQc4_J9Z=%K=CU05J<Pch2^GED{Vqt3Aw|t&J}NWf(kN{an^L HB{Ts5S_B}q literal 0 HcmV?d00001 diff --git a/rep2/img/glyphish/icons2/128-bone@3x.png b/rep2/img/glyphish/icons2/128-bone@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..160f3771701e363a33399533b1c38956c15e4620 GIT binary patch literal 1838 zcmai#X*Ao38pi)&F!rUf?@PzlsjXw|Vr!&KkYG%$5kXs9A{P})x`|z^t&&=*kye{b zqYSm)u>>iqszh51mz-X)YwcW}JNKOX;hu9pyzhIS^FH66bDm$8Cmbp+q9g(UfH=(6 z8F6~arxWt6;OX9cdr)(F6!9*8cw}riJ`sh(01jcXp%@KVG%5mvz@WmeV+S!d03i4p z=Ir2|G|i(#XL|dn^slwAyyEeq${FRMSqhQVNU+=+lE#3CjB~7(j-OwNqBGe!QsH7D zqE5@J8lffUmr5&8yb{j1DiG>leyy`?mB)U?do{f_J5yVIA#tr^!S=u=&LR<S8$TMK z#;rVQ-Qk&FzwmzXC=z^f8z}mQtV7fR=?H7UWFSR<Nf-d*bNy5P`}0-)ml1&d#|Q$q zCMPGiUw&qOzR)#*%?d{p;b{y;Y`UA9TZC!33NFv-W5>wIh#~D@B1Hwx>^CS(pdub4 z?5gA;L^FC2!$@cN@4rePju|6{R`cGvSW)2h=~}bCdf;XW0kT*nolbWN7<q`yI~#iz zlS;f=w}5|v-rY3U=n!@-)f6J<SwI@Uy(Nc}95=3854K;PMO$a2x*vlzRO6&|)GIjw zb~#4KLFjx=qC{~1#?HaUq7P*HO{Vl?O+eA6^b$sVHdRtE_ps|^q-(OHdn@j_--kbB zoV$w+N-ymc+K;dXxqRH<6wBUG#z=VMwb~3l95E%yH-1k_-;8Y9!sXv?*~@h%3{VuV z6S)bSO+@2lVqc}svs|Uxfi`2Ot%qTfV&Dh%G!LEccD{U}3)C4dNJx&i2n;n6xqA-X zXyz_f|9D1a@dzp+^>EZjq3IsmAyJyjSbo{owpI(ezaS<>2~nV+K<n;e)h!#lZG2Tm zSQ(9EmX=tB)W8R~T;hiBOr1r69scGgd<KDE3>H4m4&VaJDbftKqDw`5X{mTH>q0m9 zTIRieJ4+>kIR%wO>|4@bgL8r3Y5LpwUN`8#K2$SDJ=;X}_C+LVng6`m9rf{{#Z85J zV6)0N!bvaDl!Gx57*IpGOKQ@Gyc;IuCPOtuE6-?_RA@g!i+C1Ko|ITdJ`!xLZA-el zp-EG2Ov_rxi=SmhCrF~PPy?tJNskZ{>zZervp1u*nAjU98*bvM;I?W<eGab&Y8?rK zPc(rG4<P$7h;yV-(d!s2r~zqIHLCtM5e<Xw@7?y!JeBJ2t&t9WYL&)ghnYrHX5XNZ zqn)PUPiT2PdBTb-KRSQL6bg>D2E^F*ETfvRnd0}|(=tZatc5+1NTf9f$4LK~0&a&F zm;Djn2O}POMV{fXgHA@Q^es5dBiP|b*-u*4(#k`ACgR%F%|}LtyB5CD_K_Tk;l*>_ zGaB!56NaKZ@1!?I$Oc(>P)W5>V2cSdOUkPNGI4dH+1O@aQ8WlRxLMb=t$hU+AHQYY z3t8oRJ2r+DMNXQZH}a_vqTh1IY+d&E@516l(A&>fR2shVh-3!ldA!$K(}67FuHRVk z@v<gOKG-D~+Re_XK++g3J)$TN^0uU`Ojhq3TIV@tB5FHZcsn0kbIu|3@Zd<Zo#nQ` z60?fR4|&NGgB-sbrb^9O-u6<LvFVSoCUy8xYq;}2+0Eg$@Ke&exG6;<dBq=o2Y4;d ziAum)QC72+Ax)Q~5swh9`jN!;W7Vv?#Uu&O5{DPI7Gh}nApcmTQO0Kaphhl~l|>$k z)`NV$cSCV-`X;!)lcE%-miRTD4*B1keTR<9pK4P9&N6AuG4sbWz4m9n##)7BAVEFo z#WY7C)qo06swIL2Y_%4k{^##nFM%Q6G{?RKLCaFq@nDKwmpxq<KL^!Sozwp3m}<!L zz>?ogm{!gz7p8sL+Mu%EI8{n$ef}zm^&i-)iTstF)28LGe04#!p@ac*LFsM25r-iH zCFrn09z8Y(eatd^TW^~=CS)JPHw4!OF>e(xIXts~&L3Qp^4}1uBClNGDDUu7dB=}g zF`Hc4WQd$%bM1RFygoPwuarM+Y%L{|Sr*sYr`+A_>mJj?!`$oqSgO5BgO=_`QG=Fg zvxT6f&;q`93(M#cb?i?4X$2xq%S3iI7TW1<JBlhQqkK0@8Z^x5n-`+1F@G^AU7B3} z3|&XReAYk84<DA`go%8(t!^Yy?qq%<SXgde%s#l*H0@4bsZ@Dy7zUr>cO;ZyGf=In zw`LaBCS^tLFxk+fech&MyN$C+IPKOWEh^;&N|!tZj$lMxN>BslQnKYMKwNf4Uz|L< zB8sp_LYcKxIw~zzOoR(v<r`kDNqF5NS=2FpzXxhPv7%HY!1|K5EOc=`kT^cR?m|3n x;Qv3J|G(gHijGrk{KbktDH8aP{XilJP)_;z(`&TIucrV6U@mZHx?{-Ae*xf6P}cwe literal 0 HcmV?d00001 diff --git a/rep2/img/glyphish/icons2/28-star@2x.png b/rep2/img/glyphish/icons2/28-star@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0e395bf1b8c238b8dd1ecd25c2562bc11aed8e73 GIT binary patch literal 792 zcmV+z1LypSP)<h;3K|Lk000e1NJLTq003YB002M;1^@s6<uq~*0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!x=BPqRCwC#ob6G<KoEw3@jvN+Sb=n4 z=-^5S6{sDA3d9bu1MC1h&<YG4gbHwXW*HgAgbO5>UGnbCO;Eyx?3;ad??Z?C{eA%J z&PH$n1b_fA2mk?K5C8(eAV4iEiek#m@;%%ce}ED>ejx(7u~eE_8(N);AoRp^_>mv) zqbSM|0b$LRyoLY)@$=tnASf_?29_~oH3FRH?;t<`{Fug&IRus9$1H{{Mu5BUJqXYu ze#~OX6oSs+$0UZVMSyGQ90<??eoSJ>41zrIV-7=>BEYqDE(GYa0Ied3u#pY^7EP|T z$C~GVHgw$$;Vd(o14x7=9i9d@?TwuOY(5E-2#kakwXqS$@3@*G=dW+33L+6AI;<~1 zNoZqqIdXn+Q%RU_h#KdEg<|I~_&bJjerMwV*-FCEFj3<8tvvO?cUN>$hRThy2p<ZZ z&);F%h4WR6gee-h%E&rM(41&9a{RLQQxSqBu96-CUGiJ1oX$6NsTc{1BRE072e=$x zBhlb|H4zYK%n+=$H!XmO5c3p3gH_U2p88zdy{es#CJ~ATqhLqQk2K!rNU8H(!w4En zpAf*)oRK~u00hvFAJrJr7y*gVzHdf=I#20Nnpq5~5<sRTd~1K6x1UP$U4EQs`=dT> z5s-SGcbK=&r7>C-4PT>w12K9!^D_~!mFa{{$>$T9#;ELrJ|80j>f`4yZ@(!!LEbyJ z&Y%iInh=y$B-%MS*K3_tmOeSz&MOjh3IY5|M4q>2*01VzCZ9>954Gi}mIWDR^69?M z#`fft>`hX!e^g5ZxD({en%od2ea%jgq+(2<MS%3EwvVe4?G++$pYhR{K}8<Wuqc1P z&r7HUa@h#*ssTe91mJ{NgkGbSQZ#BK+RP5b`e^u%Sr7mMz#sqwfI$EV0PDbh1sDLg WFb}|Jz*9E>0000<MNUMnLSTZhxLBkB literal 0 HcmV?d00001 diff --git a/rep2/img/glyphish/icons2/28-star@3x.png b/rep2/img/glyphish/icons2/28-star@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..b4d3a7d5c99eb04b0d78a1387ada7a6dad47c1bd GIT binary patch literal 2214 zcmV;X2wC@uP)<h;3K|Lk000e1NJLTq0058x003YJ1^@s6^3?mG0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU)NJ&INRCwC#omp&DRT#%RYdf7z+d$c* zEhx3Eg|<_}R#2e<G%*N7QKJb$L{Y<oia<1|4<ZjjgqX;ZxJGe_fcoNti24X|BWi-6 z(Wr4nuteM0I_>!T@HXC*F0<J7-aFryoSb{_oO91N=lt&Xzh~wyu2d>jpr)3sxwQ+_ z6d*MPNKFA!Q-IXe6d*MPNKFA!Q-IXe6d*MPNKFB<rN!g%lJ@rYO3Af16rhYPl}c6h z^z>X!Uah^M0A*}0m#da+4SAjRh60qSd=*5a(XhwknJc-ht0_R4$k!xNm_;9Xv#e{c zC_tIWS0h=Au^MK*Nqa>BN?X2SvDjRosWf1!WW7~oOaV$)z9umHlIY_xHhEYNvwfoW zjsld9e2H8&_u1Uc_GaxJ1!z!9BoZQDt-w;<2dXNSF$HKyL#oD$T$$vnz${~=3EE2v z&|vZ<G8G=+<0h3c1!$<**9G!rf~%S`^HjzZpuyy;r62j~D`Vrew-lg(<ZGxO3`NGm z+FJ_H1@a~GG?09mXJeF`uQH|p^_8y*WA^18qNvx9v2ogK3Xs`a(vYuSlmE#s*Dh0l z%+fTAEZqyoswh80drbj4Z;3>rgwzNW-ZWwJQoe;0Qh?M7y1ToZNYgW{6P9`kkXo;N z)n-_&hI+FVAeAqXuUWuQm?3n9QcvnDKzVG*WU>({%Ig0ukud5vDM0z$0dBX*P)(NA zYp6d*0m@(b3X*0cM@3nlJN3#~Pyx!%*;iez5+wCyKl$2+UaL3~i^W_F#3Cd?{t1tb zK$B4h{}$S-$>|7myQi_ARncfv`Z6#Aeix-uscxd*`+-0pr2zdm5Ge+sl+JmW&Kbj| z&f!)tQgycSWgbufx{b7uW&bey9Hf8#q_4IW7Z+RN0pFGZ$nW>dImMAkBvMW!dWcSH zuuB*>fFCp5?ez5YeCzReo(7&HKA+DT-`#3Ys_*LRl5-Qec>NwaY!!o(?-ND2%}65j z{=&k-JpgpnD)3kmAQMOvIy*bp;NKP?3gt089en?7!C>%3!1>K`(bvlF%8+OTL@S9z z_j3f!%QtxV-beY~yMX6_m7<Pq05VBh*pRe!`5<YAWIcmq?M1SVTNNH#0AvEGj1%nJ zfoMGtO>;0j-|_u+6Lp>koO70+K-lSZPZEuQXbBN%Ge_uR2TIlvBF+wGS%<A0b!-bz zFGR^?vLTU3h@`FMXbspM9L6BZ0r8yQ@89e7dQaE|9$Nxr0x3W=y48qAwRVMvgWwyY z&UT{CD}WQVoBu95zp>DWMvI9?_c9Pm?R0`|oG8CT)Om`i^PZiej$;5afmBU2x(kTz zHhvYhIy~*bvyZ5=4{(08bKkq1^3GJ_1bY>dwt>O1?46@P{yCDh6L?;-Yt(ThK)n!= z<|1nk0Mbe;Nt*OC;2c7(o+KTW|Nfj{E+@XV8HmOajn*5pv`P!W^D|NLS)$G!qRwe2 z^|i~Xul+V8?FJ&zgACrxQIxDth&)dK&p{_hR^9+)lC%~iZ3_c=4Vy;t4vG%IeHXdf z1~|u^2#=VfFKLxQ<H(o6dzAwvHj-`AUYvGcGun4-A3Oe<Xrhm#D_E=;;ikvZ?v>KM zlg;q}#pCfZWUO(dXJpczv@7i^Kz2UKbGa6g>PM;VI?`eV$fm{&OlCn>u{c^&`N_1u zK>SdEY-q7qOl};!bhLg@ly+&qM*L8K>?vO}NBiP4Y2SGIhXQ0n`C3?z{!_<>%c}9C z&8afxSb&g?V&tQBv@bZ58yCe7@kar&mwd@Hf2LZ*mnlw_F-HPq$X6SSQ*zwZ*;Fd^ z5&4-M_fzFm8FM5+$b}!-n3KzW?|}2Q+wFeT=kqNge?-=Eh(H1HNBmNN>>*zbq={LA zBNw=T;PrY}2LgdTB_$<)k?-?(Jga59e4eFG6G_t*AbZ#X(j{5I^DBeA2VkxXg+j-A z{{)r1w6ydX+vU3J-BK<KpTwVq3XsK(a}7VKmBrFbssY6*;Mfoh1~&psq`yLP*8~x1 z6Xous{7I>oK^vvw7s;mpS=ge{sN6GFpYE^EfN&0JdJ~CS0UWOnb?F7tRzSHoq&)Qw zN&Pe>On#NF$G_<ckhRZ$7Nk3UXYhZb>{g`dMkMN_z>$tgIm(}+-c8hhO!kweZ}LE^ zHU-GK^5tVN<tZLzLx2+}dK@RMC7SHa_JS{|NBv#0AJS*C-yy1$QN~d+<|u%Whq`z? zUN@M0F@R_Jd_U1+QCV5p;dG<UV9`kSBl}~&FU$T1lQI0OjYJ~#3XnDBOMZQxG%!1< zANYJTC(3saJ=*`zw&h70?DtOgzlnCfm-Ytm@ggU^BEc~LAqzstd=|&|Lrw&V`H-~C zcx=kB_+Uud3(}6XN4xz!D0H0oDgG)z7BXa^0(rP#_QhbGVcXu~;^O5<%@@Ocfx97T zU((((`Av!T|LAWvCjKfw){?K~B=b``x>)~;NU)Bmu#ti77)gI<uakD=$szJowG-lx z$yd3^ZG{44E%}n!SMPgF|7QJd<f@Hm@K&xT$~i`(^L~gw;+OGJg;QkA5da|vW4gM! z8Vvb5&EPy93WaWF0DrfFfB11){K2oS;-7KH#%1_DRsphxd|gj=F}eJ`u#~~t&Y)T9 zmRs=$zjm;Atw<~RRKsrt$O1Nlqx&FIF}u9H{NvG*taKy||31afIrw{^;NQ1D+xy^k z!oBew9UYU4ii*xKKykbHoJ=PDu~@8v6YXCVAho<Ted(^60;Hw@sVP8e3Xqzb0;Hw@ osVP8e3Xqzb0;D#)_KyGq026NH{WqNcNdN!<07*qoM6N<$f*I~Sng9R* literal 0 HcmV?d00001 diff --git a/rep2/img/glyphish/icons2/33-cabinet@2x.png b/rep2/img/glyphish/icons2/33-cabinet@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..80322c8a5dd93c70c15ee616562ba0c3d3eb376d GIT binary patch literal 456 zcmeAS@N?(olHy`uVBq!ia0vp^2|(<?!3HFsniTN?DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg42)TxE{-7;x8BS?DA;5mz;N)PzW@Ab4(v{<QB89%G?gW= z2Qjh!SimCp@8g_K)(H&dhP#a=?G1XibM8FN`_sf%^2J7F77hmn1qQ|i&I><YD3tO3 zDVg%7_sGMzX-`#`iWZoP{LxRJDRNweWyj5W(;sF#mTqENbM~LS`b?QpuIdBMZsw1F zHA~y=N!gPgW1l12GiPx}%O-{GN9G?(zU1L{CHJerD+Vq@76v8(2F(=5eUY9A_D<~) zV`OYu(lY7WCMJ>B?P_iR!(4>^ocjE=xq<b=+Bvr+SSGM40^P%L{Nfr0t;E+q|2&&& z{+A)nv4H_-&WWa+6jjFWm-sna>lzqeu)koRU)P}Yg_(hoqoH(x{DeztZ|wXx&71or zsJf?K^8oAp8heG=-&y&q8D<**ec8Zp>4NBlDF*x=)!DBj!*z~dwEOCOp6kL|`4{Xu tCcj_z)HP_q4LiUE4w;4qlb;+03_>&Fe6Ls}O#(&@gQu&X%Q~loCIErEu>1f3 literal 0 HcmV?d00001 diff --git a/rep2/img/glyphish/icons2/33-cabinet@3x.png b/rep2/img/glyphish/icons2/33-cabinet@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..aafb7a6770769c843773b77fc54cf7f82239a349 GIT binary patch literal 1420 zcmV;71#|j|P)<h;3K|Lk000e1NJLTq0058x003YJ1^@s6^3?mG0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU%E=fc|RCwC#olS@wMHq&=tE+2fdv-S= zg!Ly9bwk1m9uf!=MMWjSlR@yLmp!Nl^`HdQ2!evQpeF@EuLkj|2SH*^!Gn14BziJ} z5(qA<>+Z~S^`GxIX+bX@>}r{*dLQ_ho*ceSS3O<z^-uN0P18h#{8tp4fKVVpfd~a6 z6o?QCL?{rUKqLtCBL1hx<MBCb?Tc|7FZt3DP1Ag1jCm@{vfn6Bzw+$M^ZaqhbJ(Y= z=-8JB5Km+C9Zq5WHncSIao?r_91zPzQ9OnNWR(K-H~Orik<X&BSA47|aB$p*c%1_E zIQk$?_*#(Sz({d`oY~vkJ4%7vk3MT?+)Xs{YUD9EK#n6`VG-?^s;XkdTS}?@^0h;% z5^+1?rgq!O;L-k{t|6`?k`4lC#MOlvH5cVfrmpLxOUL}Zj}WFkcwFy%(MlP2l(EKv zQcxh`Jqs~~N&Qon<$I`q?h2)2aA5zSwSGR!vg;J6`}CEf{@H*)cLyX;jA_j9EX+}R zw)I6w6g|{v;hx453PdOnAry#EAVPtN7wFJ-xM`YC5tp#(`jL=Io{&U5itSSr$WM8q z;c)n6nx^mLYw9|EQ54J5>GWnuM1g!2NGX+Tt>uPi={kQ^RSJKjfIytWe6RbgwabW? z(AoDm5c6we%-hH%k95Q#HD+)Ep_9vYv}hpEgZO^Nfj~oyY8MbT>h`P>1)6htqCC$J zpjH_`phK9>8b^7h{y9{ZrS<iBZ3@&11aY24N1v8e5csEKj#8gQ-isKCYUEv~Kz?%s zoqWV`&I5>hLn@yCQBV>>fd~a6tbuv~#c5L4^;$?Z2KISP_L~AZU^pCZ8Dr$4-@$+c z+EPkw&Hb4zm-P_VK!j7+zmezpzN)I8!4!5|KvUQ+Ns@dx7z}==KpnBxt`tS_0tC7< zAc1~L)ASPx<f2fEW4T4J9g;vm_P1sYL|8-<LV*YcA{2;FAVL=GG~Ojm(|n7M?+`=B zspXX0wC^xlr$Bzn6QybTQIaI@;%nwOeFfw_)^CRNSZi<s8Dn-3vU<Y0&Tp;F5o4|k z^IM|XK9^-FD>F`G^9~1TuWGHoh;F<^HVLUcLtGa&Tel@kd&cAOd3?X$fs|K9qtRtZ zG-+!g3goFgB97EPO6nD*)Q*ek1_JF!K70<4Z$N=O76>)USy^0&ZFxj?!%^N1<b5N$ z@rI656v%Ih9+q&Nb{#pNivolf5(xz&6o{|}>JOaV$cvknL+TjWU)gU8<bX6y<?8Nd zA>AT?JU?o!_vZejgzLhH_ajhQmLmF~t=U2_e)gkt7;)u&jtvFs$Ye4ZS!<s}gWej2 zajQUTzH7#qk5^V!{-8iz563v(uatT%v~^+F-_Nl**8(ldX}pX&+kurA+lw&T@;VTq zK!gGj3PdOnAry%Gp9J?nnNsTKIF5hqBX|2U&|9#1kOFxKIycI)?7T7NVjuafwbAbG z?gdEtG6nJ!j1sGV$%O6H(KKE|nxcK=BnzoML;S6b8Pn<1ARcOOk97HorbHgSSXx@T zq_wU>YsU};n%&)oI3vWXh({dcyo@|w;d4TP{GY-!rmv)(zFc+q1o;f|Hldx_1|<;c z6nQk{Btm{!`EdJqNM|Guro$(&S>kUTr9d8o&fdhwrsK3HkoSWSYe`;6Bov5HAi^4` zcd9l*d8odkK<*0P3F1n74=WEqAX$O(z3lhg_YK#D5!OJ20uc&CC=ekOh)^Ixfk+Vi aDZl^}R0dCAYKtxa0000<MNUMnLSTYAE|^^a literal 0 HcmV?d00001 diff --git a/rep2/img/glyphish/icons2/53-house@2x.png b/rep2/img/glyphish/icons2/53-house@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2c0b152f52aeb36cf10793facc7312ef59f75670 GIT binary patch literal 549 zcmeAS@N?(olHy`uVBq!ia0vp^2|(<?!3HFsniTN?DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg42;J;T^vIyZoRp4(D$%`MBBq7rvy3s4={Lq2|Aa?Y}UXl z(VT6rF}G#T%cXZ0D5o?hC@(h(^^jh2>*wR|lXYA~me}8SUQjBKdV3qIr?@LC&;<+( z4M4jY6GCP!yO_r~VMWdFg=OAGO+s=1n&XoMr+oOdyTesO^)2hyDf{^ucAf9Nwu^J$ zvpcMIH$P{;YxqAk|IaP&y~03c^ZyEU2XN}w%g)KFsxy>kcr<1IKW@f`*VE;dbgBdx zIs)pZoA3U@$;2@6)ca4DK0oGY@Oawoydo`PpGHg8qo?bel)5dILX7p|S)5Eif6{l{ zak5DJ(6oB-m45^hOE={{{PZsUB>RE54b_LYbVvLXIJ9^6(eozt4D}1&S^qaH`svJ( zH_eK*>C~D(Clyz;Jk8&7t()cPf2R+|IYA)){#%dbJ5Sjw?U1~qvr-`B*i(O|hp*1J z{Po`R`1GE4KVP$+&su!!T<EWzJ_SD#`sH1ic@FppDePX`At?FvI(IPhJmv%b`?f_F zKbvy*anVhWopOZ?X7iuFo8oj}^MfVPf-DRS91IKsz<>k?CIbT#0|Qvha_N)(YDMhu hU<S%Kg#8ptV3_by)Rb4_5-1@sc)I$ztaD0e0sznQ=PdvL literal 0 HcmV?d00001 diff --git a/rep2/img/glyphish/icons2/53-house@3x.png b/rep2/img/glyphish/icons2/53-house@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f4aa348f21548c01eb166679f5263e430c540743 GIT binary patch literal 2086 zcmY+_c{J4h9tZH>EEvmJlCBw=#*DFLiKa!3$6(4bSxb>!CdtlB&FFcUhA={?lpBLl zj5Xr1=AqIvLWU@Nk!8@OiRdCcy0_<^bN~2$Kj(eEf4tB4d%owq*ba7<a4Dn|003}n zE0WXBOxs!BF!7yzsedDXXCSC2T&Sl*FH*1iL{I=TzffNa+B(?BpW;OE@neL)q7VQ; zqTQNgc7{IuuWYxV-OkGVri0hA#)8dIGM6#;m~1&Nuh)|8j@MbrlW&MivywiO^vE6B z5TFIVn@Mg3KO@tfE^sy6J@J>4Z~aNiwY?<cV9vuWEY^+;g>1%5m8sfYrI169AK#8K z%E~hF@9r`d9{KPsXDCZiSy`Ev$J@C3QX>y0e}bt6CMlqkFvQ&;?tfwu;0R6p5tnk; z*VhYaSFY&4h&tvL3&52)*2QN^6dsg6$^5Oh!&__!%9vmPJ*t1sd?cdB+mRcHGL`2O zVVZ8Uso-DtX&DeKD;s3UB(lwgH63KiVG>5coFt8RnWIKI+1uZ8;XD#2C|!=xenYv2 zMK`|OgC!m#D1t1jS$yp@TXdB4T3gVOsn~Yf7_QR$nr>;mXcuZ+;GlIzuJg)mfT6<4 z9*L;w-b8gqx0#JpJ<X54f+yo)n5me`mX>X{uLWd^JW{)tE4CEYRWSO_L*!RIbTf4_ zh)JnueO+;RK0A9ug9MPlfqS`IYM!k9s^Q9?ZRr}VWB3Q6R+fA6OW(lp^A%JY%|t~; zy!s3MDY7MZK(+<0kQ$mE@qIWxQ!t^>S^b<T1bY`>|GgpU>oFH@sCU4s?{*<;mIdmK z(3Y6C?MexfOfwx1cm>(H?&a19_}l|PkPznBSLMmxEC8oJ6jqV;Lov`EB^amasMK=8 zh|$E_p0NIB9%ICHHDWbVG#b60Oq1CNo&2V|gipNoVl^CCDGXtI7gu0I&sAX$fTv98 zC4Rirbb-xEoUw#JlgU*OQ4?_>-9zA%=rR@$Ij7X#gy@V4s)KMFRY_JKm^7At86ja_ z5wO2mkA-k1nLb6VBIA7o2Krd?_iePsFnjV=fNM!5;S{q&4pl|iC%i6%q6Z<$PQF>t zRCAHCe0k>gFlUpaTM+Gpg32YDTR3%9t-jp3aKv2r84Q)Q=KtZsp&L@9NbO$bXd7$e z=o{@ik#tl-(;7yOQ2u5v(aQ-*sLH>S6X_rE^v>kD#4@9JVE}b8ytTTGDSX&QnEe{k z`W6a%C!>UdaFIJNiE~^GsS1L&Z-~0if|h@!M%(}iWZMXmN{Z#pUUZqncS*R62*)jb zQ!~H2h6Dqos78n0nEpO))91y7Hc}weMl3zK`@Ce@)rqXY)<_%p+elH_{=?oV49S=M z&oItI<i}if;(J7i;H<?LGg02b4+G=Hd$l`H16*1JYK;sLj-6f1Y}Yy1c~FqdfTASt zr$>k3Ck)XgFW1gbo9xSu2{d-Yl&X%WZ&w@`HqsLWuo*pUkJ&EBV2ppwL@zq2L~Sb| zdt1Sszo&r%9-96wZ#M{ON}p=ci>#rE=hS*M=v5Iu@ug63jEc}Bd3oOp8jSQnnur%; z<Z2Qp{TVaU*M%lxJHM#0D&8{IszT^2)@xB;VXHxEU*>&kY?^LR0wIsnIT>n^sLthL zmgVTXXfb;#;jwe<EKj@_(JVK<=$W=|)eP$yY{h>5q}vV=oTV_J9QY*s7O2<!^{(K4 zwG1j_R(oX$N#d+m%BO5RWC?K)j$rD9!AhL#c(H*Jooeld<^A&csGUj0m&T~hs+0D7 z(Ki1Qz7eM?yKN?oe<JGA0R%#35lS>@bjQG%E<;vd40_^T*BW{r!<<H3ospDQ&$L7; z4Xj7VqJq8^RN3#ZJA}x2li2No>Y3AV)FwyTxw~rI4!HLWSe>4$&mr?y<(%rA>PR@b zG?wK_w{2Gx^EON6D6kv@z)hWhk%AI#5?WK|y1QT1t@7+uDq^mMhJKdq*POv6mhDRL z&wN6-`Ycv_>}LE}g6w@AMKwAc^*X0n|1qD7>T}4w_0ZF)#r@cPGcg3!z=ri~KI<!M z(i0Q>(b3VNF+lTIzirI`y^j<r8wxP}ld$>a`~A`@fo-AIkBMh8^kq^GSvHgl@${%^ z*%bbyUZToH^k&|@32k}BU<<;xf6Uh!=h$^Z;f}9!HVa3G1dpf-xNoj<Nc}|dZ1%|w zm6R)pz_1MXNldyIAkh9kgAp`+tnHZID9t`@(OeO4o`0VCh83k*X(~ax!!DolDS(r4 z3rqWlF&4}%OIVs9-?63CK~X8Mm-X**tbcGN$5l3yA7?fHsMcdtS5sc)H}-<6?w;ZN zsf%B<jG6sov`NqS%j#o%E6{;m;w}bq*qT%)i4OyPO}tk*(a&=hWs6knbN%I^0=*-p zR?J0s4-Wdss6`MKyXEWxOOsQAknXx@Ha0b3$JlYPdB5M6<f`))N=wR4opW~1PrS~K z4kp@#7xnk{ei@#wtvxsXCJ8Yy7^1PfQKNmj8=QwSty2MYDEN#lPjr-k9Ky}2DIU)a zy)N_(0O5t}$8BT{TTZD@Z&=q#{*NWV@o$#Eq@OJPP-+LPpGy7h*N?b!a%g60KH<iy z)*WnL(QXqriKU@}Fzhh&lFV)xw8Ay>?P2h3#3&IlGy+$Uc~4a>DjzgBy>O~<FW>L& z%4o(XM0eb|%X^*#az05L*y8OB#s9wy#QiUpKg)Ky?Pt9};y^gWKnR{xc)9~WV12@l JRAKJT`U|K{xX1ti literal 0 HcmV?d00001 diff --git a/rep2/img/glyphish/icons2/63-runner@2x.png b/rep2/img/glyphish/icons2/63-runner@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9398354912479465db79392c1d3ca2eb4dcdd482 GIT binary patch literal 905 zcmV;419tq0P)<h;3K|Lk000e1NJLTq003YB002M;1^@s6<uq~*0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#D@jB_RCwC#T)l47P#ATiP6$Ls7ND>o zB&7NcXrF+*0q)8GMLa-Li5b$N6N~c%G*3W~fQiA`*q~cSM}Sz6!uiClWNzc@>jZOu zI7j;A#J;xT@A&(@*V$Ms775`FJ*t2NkN|=NkN|=Nbb_)hGe`khD49YAzWlz8nA1=w zI>+W=&EcbdzrRlcx>NoTn}dd7yC7jo7t{?hi!shEAZ7w?T8v3a0JETIacVK9AOYPW zw-_@b0UZI^jbuS%!;nMQ8Bp{w01B2&Xb&>0?4GFfbI3x>KBw=mm@;06JcF`JU+>L( z0-*dy*c`8MiLa0wzLL=MT>0sm$`@RLykHu-n)3fvki6~deQtW}^CgYETG>5=8%Yi4 zNKidU0)wv>AW#0bR#fdYSc^&dpGbiH)1Pa~pF;+9L9}8mCY+G~JLOBNsrT<i`KFe^ zP$P^kXhr2q(ezT=y=SUcagMm9Cm|P$K3PDfeU}-lydhAZgkG)t8iXen(}jALRK?p+ z2=FNl%`18TsKH&yr22!J!*gX#pF<!ZxH(}ce=GUj$FF<(C2r)h0-~~S+>j|1u38l# z5+GJ`-{86iYFwKelWysb3le&PDSzLf{J9p$zqPouq_IvW=z9SvKV6ch>h(hP3BCvU zVR`wntNDS=fDFLo!;kcO0pCwS+Fg9S)pTK(Gh?Al$VkEUrslBpiBg{@U80ErHFzGX z@<Sp(($1eX$6l#cbdU%p4TX}WrF_RQM5^Bm*6@WE&<(0B<&R6+4U(P~J}o_uIR<>k zlP-bzP}?un@oSJUQq4LN&?QvvzMEWJhA1uSsj3}FK*uCV4ljzHEU9kat7R=DpkoqB z)dPB}S`z2D1UdHE9YwV?5hO?(TVlgZJ2WH#|Bi$rF|45Q4bFN&DnPbb9=_dz1YG`) z;<zLM7nMIv>L*p2a5)x>b>)J#)=<9SLo5V1u>iP;6Ig+)+s|5_dJXap=RYO^>ywZt zcCQgd4ZbBw0!RQs0!RQs0!Tn?IDbi7x})B%qK^F!o21v2H@x6M0_cJW5<mh75<mh7 f67av_mjD9*&aoB;;R6bG00000NkvXXu0mjfZPJvr literal 0 HcmV?d00001 diff --git a/rep2/img/glyphish/icons2/63-runner@3x.png b/rep2/img/glyphish/icons2/63-runner@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a28eda6a569e3e94776f8cdc86da3f11857a8192 GIT binary patch literal 2242 zcmV;z2tD_SP)<h;3K|Lk000e1NJLTq0058x003YJ1^@s6^3?mG0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU)WJyFpRCwC#oqLQ_<r&7$nVs92SzU>O z7YvFLD@JRz8l@@;UXpqzN?UK}AB}BA#2XqBFBq?Af<!|>W4vpWqzPctHnq}(v|b>o zHYT;D@d6SNi=wbQ*WI1|UL6CBv+~XCtnr-lJjt7#Ju~N=ne+YjdEfV(@67tOTFsNB zc9qZ}kOYt<fFuDV2_Q)lK#~BG1dtR9C3OfouWGg0)7#rSBauj)%dZC#1H{|4T5WkI zlX*S}f-j=-S$&;}?wl%>idQHUe&zfA-5l3Ei?Vi%>rWd*C1NwrKafhL7Ugm|0VHjQ zr?0PXmchfX-Me_XInexcI(={0AyN(0Ie4Z!!ei>;4|gUpT}8Cy0m200LPvPMvVPy+ zms;t3Ql0>kyu*pfZIllai4z5oG?vJ>vEF`!0Fu0}VXT)CKvH5D>m>z{^w}`hdq)6C zYuf>V0(w2MLIA0af0J0+;yT52I{o`xF4rr7Vy;XkQx1Y)@xZ{q(iQ;vBR>`;65$>K z0n`EczV89hCSo=aJ^O8!hwM3C^H?gCnuYsp3H@i+wXlw+GJ|7GwOXBAC=@ONEIY?D zy8iTsJpVV`>cwm}`zp@!zp%TH02)CVNF3X}z3rDbwp!N(G#jG;POJf{R4QHNa`|Q) z;?xmxqPK9GJ1LSkNBvkPV+fB|EEeYu4i3)d*WE^FH<NIn0wB!+Bmoo^;W}QaRGJDr zSK&Upjo_|Qz;iSZ**>;K`IyG43j>@phy}p2*LU>CnUDH0jg145x_(654m{(Vbx$s} zptb83j@q5DBKl(i6n=QdQTNQleU51afHd>hAP62xrBVaC+79h`fiyUkZOnAotrb7H zs2|&84B+Vjp4))ubOt`r0MEa&+3Y-Gl}l@lOO2<7I?~aFN>Q(WB3}d5JFXePb0LGC zZh&Va;M{@x{M`kf{{H?^Y|C2zlN@(%@TiRsIXu4xo@*KOT!WMJ0?)m`vmAI_QkUJX zb3WVpSqn8#zr77PP)OT#;5nNCx1xD;lWy$sWHR|A@RS|9x8rc2o7h%Q3va{sw%-#b zfWjow)3L-|cIQJA7@o~!GV>{#o$3?783T}41KYu#6n%h5H%Bt)_c7o<Yy#HGbUJ-Y zE|>ervF@?dbph+0-9qY$l_FIGQTJG(I~$idxk<bJ26fN%)IIB5;IX=gZJo?|*R!o| zp%McJV$df7&+(1$u<RY+nTzwh<$5I?aQ4H2u47x{Ty{<L380XR!5-x`++qVfHg$9X z@T_!ALx7V6#>;_iio?t86!r!$;%A)WQUlqS7NqK}y19r4JoABPDeySWTdB9~X9Cf0 zJcl#M?B^BY5gw*h1BF}+<iBy8hk1A?DeK*?uC8?ev;rsD+Cm3+2=Ls<I{P^6?^C+D z1?*>QsZ_ctj)iul0HQtLoJ=MkVqkNC^I5Ai{{Sbzfv#Y^Ne=MT*w=Fu<tu@9iaA~b zKxKaaQ~-tP!z7ayb`7f3MgeYJ*Hj$nV&B0^0A>~YGWRK4&1B_PLp^o`%NMat*Y{#y z)A179TMhgIC~RV|4<l~CeMURL^C9ruNBUY<Uu3mX<J_MEfN_SMOKKqnpJL~!h?Od$ z!v)V?^}6RMhnH7?=Wz=2Kbzy#WpjTrLv)6%#3bTMbzvb=z3aLdfX;JyJ@w8jfb$r! zW6DZ(@GbQSpm4d*(Zo!bIntz<59+CFL&Ne{0qf1LXEwGQY~v$-E>RI39(e3*^Bhvw z1P6G&0G@?(U8{CTU0)aP|IFv}Gl1}nVV;Kg2SxNU0Td2+EOlK%p?jvw`5PcvM&0u? z13Xms_c{+>kK1vKZ3?SYDr11?r@#|9)IDoSTMq)y7EcmD_3r3UVsDqahqij2r77Ve zfOeEkC@VU=t{2eON9lfc0n`EEEdM3eIXKnfq`Q0i`ufhXi?fmd`cl+1y`-hrJcnCv zfM_!H(r=5!;+%51JXRnHAOpyzdaTBUHZ+>k5D<;6R;%Vj3+di|EQnMCSsJqoRn>;Y z@3Z`O#QRMk@~DNT;YN=F(Jz1~CxG<%{RXJk<4(7b-mam2U(@WKc|fwW*G~b_t)#T^ zadsoM7T<KGJgF_4%jH&NGMQg?b#=YKvO*JxGIp<6J*Ax#SBL~q6NYe}gq?BD=ksp^ z(q%lp1Bl)oBBh-JNY4P#<v`RUfTW#7Dysm|{eUtHuvQO|(hdNkCH4&<wERDalN$*j zH;BxQ{y=J*&f}+TE_4%!5_D<TY}>YNF=_2AAlgR&NjpK*-QB%52!hLSqucHJShJKy zx|;$#FOkwNje`>jp!VEo5pHxPAiazmRhxl?8=Y1vmG%@s(ok;n7iy!Q1JPn2+Sml5 zJst0A6+j`DxkqgnAbpM-**AAAsh^bGQJ)a+MgET|jBna%3u+L%joGH5`fWnMCI<KS zhIvP+xe;~IYrP1^*`wi)Gbw<+hw#wloJfr^jR8BbK2YrdRI%?5vTIxo%WJJ}5BJH& zHl2s<4Ht{WiT(ZkPtfg57@=LHyw2Wbp&ID>BphS9owyspU07<|Luf>|h_<g$DUaax zKPNQzIjSj))b$(=bOLq9PwMY~IR9?Q*0tL#?6zc^T>pu6RKyyg5mA7$*{oegm_-qN z93a`i4-R8<wyw?TIfxiXSN115s--sBOp0(D4@8@Y6&gO(K#~BG1dt>NAV~m80!R`- zk|cm60Tg!m0!VVzH|7xezTZy_3LwcvJ567$)oP`5I=v<cf-M3_+I6n-{nd#?VlF@b zLu}&lLVn&Bi_hNdPD@FW14#l%5<rpwk|Y5n2_Q)TNdicc1d!A*{a=6q06LZ&4i@W~ QHUIzs07*qoM6N<$g1)pZmjD0& literal 0 HcmV?d00001 diff --git a/rep2/img/glyphish/icons2/64-zap@2x.png b/rep2/img/glyphish/icons2/64-zap@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e615076ff35a7f834ea8bc87345af2e982f116bd GIT binary patch literal 671 zcmV;Q0$}}#P)<h;3K|Lk000e1NJLTq003YB002M;1^@s6<uq~*0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!K}keGRCwC#TisE@Ko|@e-%SUm149Ku z2Pq+TfE5TGKnGZXT7g=DT7gi3u>$;V<bel%hWo;>d+yFKnPDb3WcR+mz0g~&R+(@< z^dx`;kN|=NkN|=NkN|=N*on4npX^dNmKYU9@gV`?$gk}3?pR`J<d=xgmXkzk<Gg>Y z6y%G5)-IQkxBu9uv<PSw0deHl4)O!$sN}PxpxSx=R9#T~?hjqhw_}M1+x-o)0D0oO ze~upBDGTssyZ=>#SbX{kefyVViCYsu5pbs6zhodET>ww<q#z$Q1$AIO>_Z>P6Ur0Z z{rfOOGvrVsU}2Z5j+b59r$U>G;RIM)5058UdWhJTBBr4F1ZzH{&IE`Nu<PKZj7&?= zZYa}<SlGcgsSRYQpNIuJVxU3Hk5OdmY0w`GJ^~z;^u%`mSOWM32qfMgdE2LvU&)F% z-%!>^d<BKB1{nEG1o<--^5G*OqV<Hd8z=>cY(0kzr(i58=-AftnT>qd2#7e2gti;@ z;R5t`9Xmh;tD*XPfi7E^5DP_sF9JNTB2v|Z9FY8`1M(*<^#IY14n6#}V+nWz4px8; z4&&*HG2LI34%7#_Ie<!l1I{Rg`^hdq$n7ued7otx-iB&N-mf!KunACZ`EI~C0jClH zcTCoE3N>J}0}AF_osom-wUo^ch|c#<Aq8!wpE?EdSp}fa`>ZKwy0#hWEFmyOK&Syt zmKdmta4LD9whc`Y5<mh-0I?teB!D0RB!D0R{vUn?7y#xCJNmY^+{pj{002ovPDHLk FV1j~gAMOAE literal 0 HcmV?d00001 diff --git a/rep2/img/glyphish/icons2/64-zap@3x.png b/rep2/img/glyphish/icons2/64-zap@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..26b66fd323ead45c7aab1e4b0b16530d076d3f99 GIT binary patch literal 1851 zcmV-B2gLY^P)<h;3K|Lk000e1NJLTq0058x003YJ1^@s6^3?mG0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU&-AP12RCwC#om*^FRTPHLTsoIiiU<l7 zP!IzIG)hs_P|~Og61=@=c+)rIix2wbn+Yarydg+}7Z433q68H%fRP8(Xb^~2QIu#5 zsE8?o+<F=2>bGS~2x&W0dXBYc{eQA@rlss@_xa{uYn`)aPpnd@c#?FXiU}Y|07(K! z5<rpwk|Y5n2_Q)TNdicc1dt?vBmwllR4$jBe&)=X)>tf-<;zmQ!>5_sgQ-+%dp4Wx zj_MpHjlY2IEtkuW0Z=T2vEz*W7O^?X6KED7+-Ed#6YPu(V|?7_WICO0_kBOo79Th4 zKJz%qv%?ykvA^K3CLD7UKtt_5E^guEjt>c*BJQ&j_vwoIT$%)k6Fh;qI;_8+vG;IT z8+G?F3lJx^jYCUF@OZe-S9D$nEX<`jfN0xY`f3BBOF{zZ2M%w?<ME0BilAt#r*M*I zIwK0heKMKMF5G9AmH9LW5YBTahdCh){~P0P!F>t>D5B|$xS@LGIgIqRkJx5uPE7$s z`kF&r7ZN<~!r@j@SeF2bZu+{N!;FvsYG?d+NMD`+ilFGcE+&25$VpCx08a_``55;( zVy&h$0}!dJg$T=i_5$W6YwlwPAXhvW3WYm3$&<rq-Ep7Kai8xzgE9e7sZ?sleP;2n zA%x+7!Fje4MFAAu;@MsInHJLUn;3taXH=1259HEUKA&F@)}438UC8*8aJl|ojBat+ z!G?y0r%83c3!q`7VzGFIOJAJmL`Y9DmGP$nP``B&@T^KElPBds!!1Y0<MTOO^B<(i z{s7v=@39zwI#mM=zx3tqyk9g_zXR|b!+l;RbsbU>J^a#FOIWuq>TU6XXQS`??<Nun zPXG<S^mQAD=|c$6e%$YQ;OUI)97pvJBXx}|6bkb=ftewK=L9v+E9rE4zuNd=DB!u7 z&S>^ftV?#O3wU;ry4FNBby?`bW>f$80Ce1))85WA|K?%@k23)SbddD91bB`|y~~X( zKyGagF0c<k`nttXA<Z@8RFCpA*9HjBX$t3+JpX5&0Yw%d;Mwb<zn{UO?gF5(0lUv0 zoac3(+X6p!-<b+H864<7+^0D}cn;w{OH-*-hn0CW3sA9GoJ+I?2u~T;Sx@1-)r$L= z1qk<X0L`b+og5%Qy8&kf>8oUEE=>XiJkx>bRxhCUh5^rC?wSwj>t}0oX>NO$s{7o7 z`^*ZkV1F;0&2F@my39Hd0F5D9U8f(!cyx060cTkhmud*0-u~ctd_J95Ye2)DByGJ$ zm|PES4j@uj6Yg_&P#Y`YKA++|Yb~ZOlK=tFTz7*tpu+iAz*$Zl^$aU%2p;D^3rJy? z2QXY7aNeYF-fr1_OgRt$O(WWZXx&L&I~_pQ;V}ac&g0%2wustiW&o+{aJB0?;7MlQ znL5s0I1FN2mqa45!T0^mbY7yz3P9973xQ|Q7Y<2XUjxo++@~aTi~vOX8sYAH@o@AY zhx!wEULd{^Hio*ed_M15_twGgoI&lgo%Hn~$417CRqwucM}5hvX@IK5vrAutZr$Cw zA!@0I-9AJAW;ERBa5|kn4os&2=@WqJum(`1Kdq;$t7{4;eLe1TeHi1rxpTqzJF?mA zL%{TtYM=<Y4@K_-ILD08UVUfZ@$n_#JYo@^NCSlPxV!G|#;G6HbKpK5q^`xpUe!QR z%gwRaqA=YDcsfa4OMTz}!16VrNCHIqN>Mzwags;zWj&u3=-waZD5!S>&I+#cK6TGZ z>lYLw3lKnjL|x*RnC9yFF97HEkaoM+*Ia1E&$To565u)J8J9kEw<_B6`+ItNUafVz zgZVl_>Ut3O*_=wH%+H%{Cwu>F!s)_oLRAYMSNFWAdtnB;umN^#31W1OjTkDxvk~W6 zC3pnT`5oI>VnPk~Y0qRbOGsNsHDdzkd|g2__XE#S+~)}(Yu8k%2I@_2gM~4Dz;haS zo}=#Bq|_w`>PuJl;XozeSqD5T1djmfRpoNo#YC@{i->M}Uh1A@z|$#I1W>Qa<#O>p zI<P-*pQrf#_rgQ~)#|{;pXWTCeD7IO*A`tY6hO5!i5Pco-2*(X?pdw6M*!8MOTBZ} zOH&W+&StaAf#;N_MgY~LtBA|0sjGv!=Sd!Zt7)lErmq9J4h(4A=ZK{_c9FWCQQaee z2GoHOqi`L!Bw<}+W8)jDdz8Wk(t(X5CgMat;yf<_&j}$RfCi!#@9b*C$5r=S;ET}m zg0h~To<&5wsi|oL?o$*F0%$<$?(QC$OeXUb%{ieUfFuDV2_Q)TNs<7P1dt?vBmpEz p0!R`-k^qtfkR%BpDKPylzyOKJ7YOM4FWdkC002ovPDHLkV1gxTXsrMM literal 0 HcmV?d00001 diff --git a/rep2/img/gp0-more@2x.png b/rep2/img/gp0-more@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..27793f7ccaf1919833af56a99a007701ad543ca2 GIT binary patch literal 428 zcmeAS@N?(olHy`uVBq!ia0vp^2|(<?!3HFsniTN?DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg42*uBE{-7;x8B@(=zGXPrme8BDenPCPlEXY-YD|~7PkYu zr`UEeDnDS`<v4di+~i3=justS`t-whmFbf{JoCN%{MH}Oh?3ay_Mbb-xj7UVSOgfD zI2agN8W@-y7#I~A7z7*`P=zOKY}l4-o><#*m3Q_3J$_e$&tEOp>(=}~M_O+UXZx$^ z>&smOuS~RUFNjckQOVnWb*XKn4ddZ;tK5`A&zyT*{^rD4`)@X`-`42a&Yu(K_}XRW zuTw@hIU>|f*|?;fa<T1Sw!rv)MQ7E%JkJBwF3)t8K1)utRI!@>SC{jKOUf)4+uNMR zl^h((vG$+dx+&>9KMV0MUi92D<y-LAl&{ta68}#n-qNhMd3Jk$+#7?eYu7JL?q&GX nui1g=5hVYCy_xnnx`B})_TfzJyVdvO8Gyjk)z4*}Q$iB}`fQ@D literal 0 HcmV?d00001 diff --git a/rep2/img/gp0-more@3x.png b/rep2/img/gp0-more@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..06904834260a74c2707633dd6bc380c9cb4cb135 GIT binary patch literal 1306 zcmeAS@N?(olHy`uVBq!ia0vp^6M#5@gAGW2y7GG=kdiEMjVKAuPb(=;EJ|f?Ovz75 zRq)JBOiv9;O-!jQJeg|4z`(M{)5S5Q;?|qF{uwf%G7X#SC*PgnqRqyg)EU~HF)=JU z`lYL@?X~WJjXN_PKTKN0UM=7+7a~yoVF5>zh^xT=g#x19UZ$O5h7pc|$sO06MYsCi zDB0|J?fpp>uL&vl*0jg|u&dzNZM^^I+24Ef@4wr_sd7EXY`4p%N!wW#IY6KimkI>p z6j<ayw3@l@8-w*q3JW)8XJ)=U6{A;fuAjeX>g3qxnUl|^6>kYzsk3?i)0iimKg|l) zRZot&dNt<BOpWQM<wd)XKK;Kq{-Hgqj*iZglcoIn-!HIDiWR?6-eog?!uvT)TQ&UG zhFNdew8_Y4q4PxZwU#NflKS=a_3dxpzHL4AeER$dOZO9{_Cm5gMZD`IKV*KJt1;DU z{iS0P52ihtIe-5Cofk7~+}7>gv$gc>KjT&>#V@aUx8*Aa-R|{WclUp|o6>pZnCHPF zl?8i~1#_AlWmkr+78bENeP*)ybw#!}o<+HF`42MhE1efi+xz{*%+PtUCyGTLe$TnE z{=UUC$zNZcc6(m=#&q`VSzCvR@k<(}FPr0N_x}C+`U#G6J5M_IeF)t&|HpJQp|6V? z|FSi<Wd?8DEVFan^TQvd{@$8vblvh-$%^&s-}~0PET3P?rg`V#mQR0fFRc0Zt!i&w zgX1a}t}QbqUo716NoD7@c8R3L`;Nc3tQzz9AV`3%LwcbaGuITMt{QRI+d`&GKPk`J z@mu1?!V^1cPrje9&g0{^OWR!AcqeAp=jdf^oVxGsLWh^^U;WIcr*_=-+pT5v#_iTq z$)enaZ##H)&nk0noAhPUYcp1_^QDsSMOI6uyf|OcdzEKn?UtannAYxTA|e{B;!z#F zvCB{HYM63bVE2_%N7gvJ{Hgb6+Bt#m>Th#W&cr`_XLY(aX_9{1h98lqCunzk-_Eo& zUi;^Sv+pGzsone|BWdjSTh)2p`%HD^!)cu}PX$ccAY`}7K~r=3>Et{6=Jm;35cpoV zFknV+r}k8@$y@r9_a}8qE_Lm6pP#mS_wM_BvCYcwvVVP>$+WaZ>AK*<O0K`oN7lZx zwzajD7r5Rd@}g#AL{00DmmM+3J1xa_3!UA1b;q&mo$}p368?DHDZaAAyYUfQ*_7z( z$2GrQaWm#WzUQ=hiAv3(%}<=#3U4Kz`+T)(GxP6RGRCJi`d>~n(hK}^YO9^pxy=`S zju<Yt_{XvJ$CkI#qO2bNKX(1~*A0L6ufLeVv-z&8;d;-!=EJflYbx|amzCYKk6IaW zZrdjV(@LRw?MgYd`+nyvr`)k>k12j))oY@jp+EVvk2Zg>pt8-S9Zkh{j_2+^*<}_f z#L;}|!Qc5aO8u118E%W;a{J9?L#DMta%+rMEWEJ&!zT5aj{g_%CwCZM?y~r=D)i`` z!gas6b#`8yJNuN+<xFE=A>Fa1H|F8RV+osB0{#EZd3?G|WVtfyq;H4!dx)?KL13T) o1PbC5U=<>uW>VjCc}6yduPuMeTTTfc02X!(p00i_>zopr04Y^iCjbBd literal 0 HcmV?d00001 diff --git a/rep2/img/gp1-up@2x.png b/rep2/img/gp1-up@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d5263ae67faca39cad79d211d383a63887975cf1 GIT binary patch literal 516 zcmeAS@N?(olHy`uVBq!ia0vp^2|(<?!3HFsniTN?DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg42;V>T^vIyZoQdvvA4-VpzYv~cV!CUjd83u8p97wb>N(m zz_~4n_0qvY*#y=*Ih**uKag5%VC}unex^>KbHTp9&%={+ju+|#Sgp-qWMF6j+RDPf zpa7(RJPx3HfGj2k1_6*%LHJ>VH?>dy$X%P6zhLuoh0+6zzjptRo;Ei`wr_LD%*W@0 zmOS*E7MCR~x63p1+)hUJ7c2f=|Dz<c-NHe$B6X+RyniC%B^C*BbK`3G7=&5#|2|N) zo3LNP(dwY|<@HzWraPQF$@o_I?Dtz<rWOwR70JH@#J^Z1{CiOQMR%s)5`jID?3-Q+ ziZpHKF8(VzlRxD(U&g(RI<dx_YmA$IYe&|pS<Suau<cF5=8MI;@(vv5s}2SKa<DUK zDrqv8I$_kNC1X(k!Hqfc!8VZL?_Y}9P5Wk{;2V+0mArjTcw5>3D?n#l3{sda;b_dZ z{-?vXM-6Tpe=cLP+{x_pq3me!_g~`TC&Xk5ye`xjH|{ap@cZwd{VKayp08J2%I)<} nze9ix9#E)Z*nNFI12e<Cu6g?Jx*UOF$-v<0>gTe~DWM4f$&bg; literal 0 HcmV?d00001 diff --git a/rep2/img/gp1-up@3x.png b/rep2/img/gp1-up@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..bf651377ca7b434de56ff2b22c65cf2c59acee97 GIT binary patch literal 950 zcmeAS@N?(olHy`uVBq!ia0vp^ML_Js!3HEZu6?`!NJ*BsMwA5Sr<If^7Ns&crsOB3 zDtP85rl$s_CZ<#to=ml2U|^2$ba4!+xb<f4Z9m~ak+$2mA}p2~9c(Vm$5v!?BpEDH zlT%W9xZqv|qsP?d6%#Xf!hhM>b)A2pEU}(*irB4R>yJnaUvj#wS#5rQ{+l;G)|;=- z`}*~Mr152^O%Xb30Y8eCFihY8!v+^HWKm&)LIpuEWb9-BK~4`AkM&beKdmx1H*ddE z&R~=v+I_VBX3n?vUxf~AtM=~QTjw~Zdr^i<ZPab%1|FZ?yLWfKef#$L&zd@=nLcV) z`m?Kpymb_uCmrBD-KgDkBk%UL?CQYv@oXs;tbJQ6pWj*g-|yPa-9=fu1Y=)HUFr2d zTl;%Xyx02u7k~FNysU4$tbV<A!tZnMst=vxeeqZH?R8#{{oHfJpPex3o4e8J#5eXO z^YivB+qUG;vL{FP-?Lx%ciL4w#!JrTTs~3W&tEk9-Pvi)wl^^5rPPUDf0opD0?)6k z`5XUw2YbU8_D7yuO?STev(PW@_wB+m8->3b1!-p{iq>%~EBSN!!t{vi40$qJ4!N@W z_^Td&ZBhI=dMkH>jaA3Bu&pllR%>yd>urtu!NMEVxqtn(gjVmV&XEs4d%a~-c>VsE z-q!voDfVo`dB=9nI{*B-X_~ge>m5sO$;y14{H<e^n?mlLNbQ=O8i#9+J7eC(n6mnD z&Pab#<ns7C<0ihmD?&fwJmtHSYkI9$eVp!GoLZo;`R1D$U6U$R_o%8(cw2Vdy>K0~ zk=jYkxvfr#u_yb!&N|N}fAr_7inR?riJo_F-P*+TJaR499HZ9rJ&(?|Z92ln9ONCl z{%&L7B>$_*_x2xpKKao+wv@NiLVnk+s-5_%%=WR?y^cqEtq)EqIJ|rFCg!55<E}f* zk0l(+G~P8mif2jrnrEXHo};nS*<CQcuwC^3?q?TSPH0UF5tRwvB{QRM_W{k|A3hm! z{ke7xYaC|!EOYn#vnb`8{8Jl|`|nh8Gwfm;)~q=Y87h?j%RpXxi^+V~_}G^=WsfIJ zyHf6zuv}eXx9R-zv!+kyUohLIG&yB{o$C7?zwYllb9z<8*>vB}zr|by75EE2-e1)6 z*Jo+a{w*&r^PA4%ZapM_R{!F)YtKT@P5Prg@0dWnGyXIk==oPPfnodSM_&^I-*5mk OB7>)^pUXO@geCw8Sh>sq literal 0 HcmV?d00001 diff --git a/rep2/img/gp2-down@2x.png b/rep2/img/gp2-down@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2051d553d62aa36db22b4bc4dc75e3d033a2e73b GIT binary patch literal 513 zcmeAS@N?(olHy`uVBq!ia0vp^2|(<?!3HFsniTN?DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg42+9CT^vIyZoQd(HusQ&Kx^R<TRlbD7QRVAF^8rx$hHW* zP<g4K+QMfhYO(o}T#bUDM%;Ou&$cITNgqD<-2A-#h2F<I9P6qUumbI4Vqg$pU}ylc zSQr=-fD|JG0|(GeKvvfBwdo({6z6*vy*n6v|NG6=70>?$-BZ|e`_rS4e}`xNuX?YX zvE%YBLxvlYKT=O0T=-?-HMN%0GTR>SN!VMw_GD;4sUzpXzfG!>(?7IvCAK@1@!vb~ zozXjH65m8K8Lo!8Gv{xUxh}US(fz`cXKPGeZgl+cZqb>48~T;9nxlFaiLCvpD0@L; zf-`G=2D=H@6Oq!%iHv6?P8|Ogsd&}(U;7!J#y`2ogOA)?Z_xCN<B7=5pATgX3Y{bs z&u4SSNwWVjcA0$Wm<q#<nK62v{y?Fff+fic?fh{^1xrpVzg}{wMw2~8@`TVq?UxPO zhfP=Jy73*5Z>$O8jC(2g#aqFfb^R}nT_Pu{k3KtXmGG$LQB%&@`zzli?!I_U;osk_ pvK!bwzRo}iEkr<WX{ck7V3;Y_mYAlr_!UqQgQu&X%Q~loCIC-<&;bAd literal 0 HcmV?d00001 diff --git a/rep2/img/gp2-down@3x.png b/rep2/img/gp2-down@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..857ab9b12e77e7ddc62c4e3bfc6f4cbfcd579745 GIT binary patch literal 1231 zcmeAS@N?(olHy`uVBq!ia0vp^6M#5@gAGW2y7GG=kdiEMjVKAuPb(=;EJ|f?Ovz75 zRq)JBOiv9;O-!jQJeg|4z`#=I>EaktaqG>T+kV1<B5f}NZZU<&{nWGT^?$guylSDi zTe6K(1=A5{hTen970F3V875gujKa-Ij#^qpSud~DtKQ}g6tUc5TwPzk>GC9=&DYob zOj}!j>+Z>r)mPbC%vN`ZC@?rNv@mcm3P33)1u&0EfyDtR2&Nif6oVpz6Gwvph+=4g zQZ->_XAkP@>zl7#x9;7k6r(bkLMi<RSzDt{rfr_j-RdOSkhP|0XN=}luiuL`ZY{PC z531n!Y0<~ddeM&2g>}`|sHmtU)&H4GgKn<Yx-x6q57FP(mn~b?TqaYoz-q<DjT;wk z-MTee_kr6jxhbh1wcgboy`O)a(cx=zhUeAi6Z}q8oMMm)zQZn3Z+Z6T_eXj@{~k__ zI+!|l%6rYM*mRNa65Bs|8Wi2kX<qm2vX$ZaV5SQlk8JY`nFESeUD)Dxf^+VinJtGu z2Nuc&?{Ss?^p4k|%=GkxZ?8%fR<_-ee7<|vYpD+le^szv@ONHYr~(x0+5E^_r{dJU zCwF$QH!9kBr#O9uxDeZU^P^Xn{fPTLCI3CcrfUmU|M9uRv-MHsq8(N>nX&hno~)W6 z8M<5h_Y{GOG*SQdN3*`_UXNo+3E$cCs&ud2n(YhAj#WB*yz^=8uL|x7%^88ZhgV%l znaemUK*nA4d{ckrw<_BSKChK~wX3361#@)I+V7ow<+{voz6p}Af(vD?KV`|fmp<$N znxl*kFI!)%z2&|;>g05(?dujjGp$goJ(thHFmvI)g<b{wr+v=acRTG#?K(S0h9^8< z=N$9gI_0}*R;=)>_dC`fv$SZ4QI#@sj%Ie=t5INOdcA<7l9y9qwM%-atXtWRUp=#) zf7)Bh%03}G_3^jP4}Owa>2rAJl`ni^qR}vC;k&5^Wp61yu5tgpU(D+(C!a!iYnRo* zYp0fN+ga+Hx&OJd!8u3fCkmTbV{LhFe@{NL>D%?C9~HL5uyIb<DzRE@mDKG`Pn>^C zZrf_7xOLqE#-h*{tv08RuGO>I+?sT&f9pDP#b<^QKzsHroBThc``FKUlAi@u`(I$N z?6AwYp?>A^?3~!kX(vq6oX;kH=r7;+e$AD-UFL}^&RUd5v2t0~A7q|#`so^>*dWu& zkMpmlhy1^u_n+S(L@|2%<&A;PYu`T0t?s?P@Ht;YjHr>ajO)b*ZIi@Yw;kK5|K%04 z!+xn(o{SgQT?_d$z3^Ju^DTdQBAFL#U3<oE;l5wybz6MP*NQJ^45*5_>18+neaKYF z_~pO$TrrE43f;u&P#>Z;xiZJz>&oq;rpIp9mET`y=roPt#rn3W&=u|nc-9)8<2O9V zu;rqbiDtqZM&9CezeIqUCfbAhC_~2U?O$t~PG|+Lxz646N^R!P*vOy_?{fccTIF~D z&!0be2TOz>@A2E}cl&W+_R64@Q(~i{PMMpVPiG03*~1`kh#5JT5|hC-7=I}qV7MLF WS<icP{$XGV#o+1c=d#Wzp$PyT?<u1I literal 0 HcmV?d00001 diff --git a/rep2/img/gp3-prev@2x.png b/rep2/img/gp3-prev@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..577c2fe52aee0a03fac95f9277008d9baa34a74a GIT binary patch literal 502 zcmeAS@N?(olHy`uVBq!ia0vp^2|(<?!3HFsniTN?DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg42&~8T^vIyZoQdvFp$Ynz?FUVdmpwO4hcpH#<m8*2EiR^ z4U!3Jvl!D7II>x?{jUZbJ-GSu-OqJb*FU}S$NcwpE-A6kHtJXW%3XjKDgZGf0|N)p z9Y7Wn1A_nqLjw?X%vzSY!Kk}L;*aOttI_Wo{`1yfIqkZ4v&r-lff~z~>0eJhsu8mI zk$v}#&UsD7X8pf)YvQ8jhc~tUkMRF{>hu{Ql^+Yg{W*5~%_AG2qCFM0{EsYZ%1ecr z8lLYe<W+FGyMuMX!}ni}s@6-FGno7+ef!gwOUqEIW}W)K2~FNSZTr_RubXK#L4wP! z=I$R=Z+Z9Ww<LqojhGdl|5>QV5O>v{A%i_>P5B{fhFgv^t~^crv)~_-!|f<7{^!qE zY<=>`I<d8&E6O`>-<19+?|0jj7G0fmd+QX9txu}-Uo4yU?&^G?_D75Ey*jO)zf~m5 z*iUgzw(efW1-ZJid#?oDxEr9qRiw`HdX=tj)vv?LX7_f5yys)s!nBZKA7jIhUI}mz jF|Z(op6tu;21bSnhfCFYD&9>4h9rZhtDnm{r-UW|j6BQ` literal 0 HcmV?d00001 diff --git a/rep2/img/gp3-prev@3x.png b/rep2/img/gp3-prev@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..5036d8550d5a9db52b19fee6686896a2d7a57fdb GIT binary patch literal 1206 zcmZXUYfuw+6vh7u3F0E<A(XP#vV>R}wAfOp5D^m_CA?w)H?bhfra(+gP)a}%shC1V z8QVa|BJWp-W-;kVAX=E#vDQ!oQ;aNXASi=?h=3y0L91<Mu%9}=x%bTZaPPNsPV%@B zP7n+M0GuK@?0B0hZIj|)Z`*VIuNrLPCEvD7o^T*tehB+24X{!V2-A>A874}LPs37k zGrQBm0HExOWV3c2wmh-+>|cqw8%JW)vH)4)lny!X$fCqesuc>3tA|EN9J$i&4-I=j z8SY8cXU;r!X2YW>Pk(b!dC?5i=oi5D9OiA5RH?gF70+JN6`MrrizU6YMcB9UGqZUi z6ET6ZkN$ivEG&$zUV{MI5)|eVg`ju|7vQ=C8TpT`fW5?<gsA3tsazgphq%3GdiwO~ zjndLm$Bqo`k1x<`18<In{Jc9u9gx>$G`>6a#A3)_#{Av6wnO?^-cYtRpr<u`syMgy z1%C@{=dvguCi}*)5wS=06;UnzGRqI(DgBMT1!2+U5vQ&TJ0HXZqvtB^>TirhN|@mn z9_zXL#*L%5E^i_6s5m#gZnjUV-#d-R9)ug`-;jdBL!MJ63M>Q-tq~K$I<T{W^hK75 ze)ZnEkWz^N;7sCHwVq#mgd%EqplbZ}Lom1e9M7)}GKJp^ji!j87BX_>U}aHyxrI1_ z*5t-jX90J&9RcN2{kbRl+FBmdcX@zC#b}7>XnTv6!SB-ncM7+}OG)S$X!f|xKJ@&) zIj4P_=+lYyD8YKC;BRy_TD8cC=}cT3@`De__B~N9y|XauY$q0gxstWIoc4wx9iP3J zkP4{9`01;+)n7JQi1e%C^jD;Zmy%=eV7LhmUqRuygo)c*2*v^b`^gta!JHtw*Y3%8 zqw+I@Xr<O(`BP{_O1dNW1dt^V6|7FOa@HLxIvieif8SuvhG~f~9&M@S(1i;N3p=Qf z$|iE}-`xYKQ8JmfDyn(r@m(z>|0CO)C;g=0H|DA4+moxhQ(GgHTnBTs0cK(@`EkJv zUrru%5|TMFF`vz@stg|nE(xkHkCtw>oph*Kc~wY_n@S|zQb6`KCtCz)(``kn{d9?9 z-phVuWp`KT3i|4At_w5!GON3q<26ZL<et_tWj&dy<!nStd#|PD!>xOnWG05>-#Oa9 zS0E7CPxmP1PogB=SxJx|XR|^cqx`_p?6=OYKIL;P_GX>I5LIkiek+SlWn%v39V~`M zpZos9vYCNly+43<pN3(0Pvz_YWm1Vaou@hJ0|6A~ofcRzIA+K(3=M?w?U^i}F=D`k z2WCTNl=ad9al5S5z`qby3pd%@U3DTZV?ThsRY{7r-q!V5m;Q>{&<SWPpHR5%m2_~1 z7u*rR@dj+Npvh=79>TXLQN?wL)l=mSXc%JkP>o6Uzur2ZxM7pck2gKXw@;6CwmSpb zaax!f&gTbPeA(kZhGmK%mG>H4Y$XMei1QlFWGPbdPfg~Y;^9YQ_+r_Bd6lqyt>3sn zr@wdM42K@5*(q^g(&rkA-sTgy{x6>n1#cm_cpdwC`NzO|eJJ=W(6Ver1R}R_*}APM GihluI<OSjY literal 0 HcmV?d00001 diff --git a/rep2/img/gp4-next@2x.png b/rep2/img/gp4-next@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..216258b693c8fa96a47c42956cd8f625ab2b081b GIT binary patch literal 473 zcmeAS@N?(olHy`uVBq!ia0vp^2|(<?!3HFsniTN?DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg42;#DE{-7;x8B@&=*#3NaJ0~%uH1Tp&<h9a349A!tOTql zaM@^2;A`Pqz_g%waZ|D0%?Kvz{Ad3s{oFS*{@v4W9e(YJGbWT(Ca?l6XJBXmTFc15 zz{J47!oa}6z#zcDup|7}zWIz7%;qYV+*H^Tdg0Qu3=V0ATTf3uyDOk)ww__j>CI=? zE51>>KIu^Oh3F?yL6y9`(cW3#8w$2AsS^CXUUfE;!{Mk^0^AI@u3hR^d?T8zd1?Cs z@!6ZBbY1^QsE2w7?r%GFCFslfi|?{EPrqkO*6p3XLzE#mK6-za?pel+=|RU`<%D(r zrES(+T2o~eBG!;Ud#mpL?`0caFf8BoWAAllH`ank^GJp}*L+JFoMZn4zPupFkXQO~ z?xTlS-!n$fp84w2)cFi2cXcu-#G1bnRf#uW<?k?KS0M9_Ye(NJ#b4bUcA@>O&96_k zc8tk)*W`Sh?m5Y4@1NsqK5oD5(_PL!!SqkB1UMuV5J9Bi|Bpq2VO{^!$J%9qZooie N@O1TaS?83{1OVm8zc2s* literal 0 HcmV?d00001 diff --git a/rep2/img/gp4-next@3x.png b/rep2/img/gp4-next@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..87cf56b99e92cf02204938a4c7d802d4876bce25 GIT binary patch literal 1230 zcmYM!e^Al~6aerqgg;`TVvx(Zi_%I>Tsqu5&4~mG)rib=;f7hD#zb%f@kb%*taM5( zwHr!;#%yZh@<30AX>F%@P7}Xsr2~I#ilWXREIC`|*xarA+<Wit-TUj^y;ne^Mj+s> zZ~y=h6f!Z=T5nk6oV~3zuMYiHWi7k;q)+àt>{1+@BjLALE!caKziL6LgJToJ; zhjj!1U_1&jEGm6;;n%Ux-B@m2EB(o7iD@53b4mHtjM-vNz#xN&)wtXupf_#9NF*&1 z#YG{B_niu(NJSb>q$4uYYxw*rl;4^-5>{(>B-)9cpX|_gAXpSJr7@>85fVEbwF^q& z^Y!H{gE08HXKzzL7r)|JOQ-$gEpJ11Z*j+Lxd3BsDH8t=dE;LLBx!4F>+xMKF75SD zlkaV+u}dnIhJYX_#A2}-LL1aA&%$y{Tb>urKRCGJXxpb`D4b%5`x@T{53~StwEE%9 zujU`e>MM4XE(>2;=EJ@5Z3P8<1UQ=}GU$_Vk|=NVQkyuJz36{HC-Lc3*$u|OzNln0 zW(OZWJfUxS1b3(J>|Pnhw{_@KuHV;*ispyL-c!)XXw0-`EimHsrEE2Lp#wdFP=-w; z-x*P{I7Xv>X!PkH*Jb!BO|t{pg7xvy_Tw^3LHbc=s^T2E_pWCC8IwDid9u8wB&Ep) z1+VSFjaJG>I@QHNS^FtBL4q@F7DtaL3xU=2;mZ{>4Cr9S-tC^K!9EQA3DMPdDCv$a zJ(dWC=SN*w1O_rC8=FIP4Lzi1wGT;iQXZ0qTbjof_cFTE-)$IX8)ep=eAM7qoC4^u z_u7X>i5>3Fv_PfzJQagTT^K)hySRz^=OGV>z;O=l6w>K2O8l-JQoV8SL45$EK|69q ztVWVsAQyA#@7U>Xici=pUp>F`V~)BE98CZg6E7Pa?^@@4|LNLEi9Z2Boi89x8__fL zoir|+vkgqzCcg3z_u$oDW-R^yYLJTIOsbn}qw9-vlIoH{GQRz)dKb|#Z#H^)VcTF< z*|F&pXV)U2FE?v+U9Z$5Y>n^7H-D!90vHp1u(v7n+ao0x%PS`|xa<TEh2gG#jxWhg zh-+u;IW(qY;6rxssMFmUYa#2YuPy!}Uk}A_W8J0OHvKT(TJB7`G?a!KFio9R)Jbv< zZaR+SiJUnElj-=f8&h5q%1=|piMWskH!36MD&Fi}CeV&oMx$sJfgq>A+~Y4>5ncY} z3|>FEzEAQS#bhE)$d-&20zRH6N-()4ES@*XRwgqc=zI{`*L_c`GN2`5!m>=MGE}R= z#qS$~_bIA*qWGyxKxHC`d+}B+3>6h4hZv_lD2Dqg7%JCT?^$S2su)1OcIle9@X>ls ztr?kKS*3a)G}(XeDeDlMy?AMU0!ix=Bu%G&Xh!f>Lr;nrfl#<KDAd~Lt>e-~=<8yF ziCx%h6q~DfFjQpB_^Fsi?9($d92c6d*6e=Tc-dFZ{-7dp!!-`F5wqHeRY8p>e~?YR z*k03LD%h{6ZUxH0RJT1g{nvPza?fmgt&dbLkLzV4930YqcE^1A&BE@Y{|@wqAJl(K kIDSjln>&}5O>-f(z|+tA&g5082CNSXppd9U72#a&-=;G>od5s; literal 0 HcmV?d00001 diff --git a/rep2/img/gp5-info@2x.png b/rep2/img/gp5-info@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8402e3d31e44af41fe77c72a9a02ddc2232a296c GIT binary patch literal 837 zcmV-L1G@Z)P)<h;3K|Lk000e1NJLTq003YB002M;1^@s6<uq~*0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!=Sf6CRCwC#o9%JhKoEux#{WeJC>2B< zSgydNf{+eK1yL$6uE0_Ur~_O<pn^aJkt!g&GpiXa+dqUB-HLm6W=D9&+B@FoZts)H z>2z{1e>Q~#0000m0000O0000C000060000R&hExi(W<Hz^hn54@|b+y`j;d5fqYB8 zo6TmMF?_Fy<;^$}orTWGS^TKu>oqw;$Oy&(04@{$yHd!)Du}5;@mHKe6vcNEYbUYM z13nRcMvt8Q@ybP&<V)%e6#%>yp9jyc0~NXF!Q29bX@KH8DQhcb2R{bnO5#6@*Bv0_ zL8l-Y6rU7AeQW0Z6qDBqe>%MTlipni2SBEpy9?&`?~DYTv|?8s;&P8kd`(e(rl3qi z{Ij0ad`>&YjifH&^Z;r7f0e_&%Jcrh_rLh)1yhf$U)%0`i0^#$0$%_Y&YmrT03f@X zk#g8tAx0#1yZIiFDChkL%H6!6DvZ_5EPzxg&TrD4w-dJV_r_4&Oaq7&V*FsiWznUX z!{ZPD%oW7v1su2hwK9Nt2mtzu??n7ap4S@K2eG@6)t7Vh`9V!C&!row4Zael)~Z$D zo(AAVwv_*A)vvv;bc-qIs1#>?h1P!@S_~fm4oY#FY3Isd-An`6D#R%GI8mmdb7OTg z4`64s^=sA5_8=?+ahC&=cX^sxf2<IvZMAG^1hEd-^nI7KU!IB2n{lPbI*krM*5lp$ zY)#OJpDN_<EEoWC@^s1WC8wVzPjedL`#p(xpTqqk)HC6_N1Di_<#Q@}>681N$1`DX z0Hnor{o;oYfc)y)5PV+R^?o&x22&RCu|sR+6)<nUX<X(iNqn!zqZR=8xSHskk^7<E zx1&XXR0Ii1d=mg#5Xu3HE3JrcA_aYrl2%Uf)?9nG<MSS<*&fj94QrX#7m8syR$@(j zlRco-8)Ana>6w9npQ*wE7y|$R1^@s60{{Sk0RRBN0001B0C3CpUw{DsD69|aFI%TE P00000NkvXXu0mjfwwHT_ literal 0 HcmV?d00001 diff --git a/rep2/img/gp5-info@3x.png b/rep2/img/gp5-info@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..195270c132fc684f25282c8253d8a54119cca315 GIT binary patch literal 2449 zcmb7G_dnYS1O7^`wxZUFk*Ha_RjvpPVs(%j)zsdtl_FlDh*>p));c@J^~4J0Z0bry z^sIAYgiy3m)Lzljx1ak9-uH)R{PH|MKA$HAWo6FC4dDg=fX~tbY4by~e!z{B{Ri*; z^R@hkh+|D3U~Mrz*l_m{Z@|b4<KYdn40QMPw()lNiU_89!vTOx%Mxj1hnw3h@edHT z7moD}r+fR7Kp?)$&tv(cfO{3y@N}*{lZombo^b*H^vr>2=sOOj-8iy^$7L=-sKq$+ z?`pRwfdr$*M;=Ji2@Amij?{RMuCBn(4U6S%RQ9hX^p3WkW~Q8?Ru_G=$9L-&X0d)K zlYu1JaogE-s#qFaQ0C4`1yxl5BqfCM|Ku;*=f;2@K75F5PC+gk8)ld%SISOgkDq(v z=hC-~@Cdxw8`a!fd}pVJ{$?si-{h5pEo$R@B**_!6HU_^|8o=CZ;ft&h+MXD{^sBH zO@Hp$ryJpT#cV2gjs3`#tx77F-PV-NtFIt!WSVW{XQKG<w6>sRXNu<*N0qbWeiBx% zM<JV<BTU4_*(TTX08Beb2kkyOXIBCiZ7!~{Oejt3GEdb;fUNxeH&lroLQ>Y17lZ9} zn1|tr(@W8i%og<q*gH|!l6cM-Q_OQwvQM|XZQY1<)AoE$lUEEpVRT`LpR6U4+003Q zwQK*1->w!wLYE17O9UMXRpK2tERKV$#a|>k>Gu1<AE);;sD!*MH?o-su~#n1*vM`P zeM^?GR(n_#bMxMtB;X)K5|;X|<k2p?PpggGAG(?<53MZC<lMBuT&U*9Nx!8<L6@#1 zJWBj0Khjm@@EF~V&zWE_43h@i)6B#_!@dQWED8io@F?wbw<roMn4U?n+D$`=3@&Gr z_IL-6epNan$7NyTpmghZu|HJSa8+09>g($>^yb05q%G;Z@6l;a)ft}K(*mCiu?trH zqb-5Sa=q7gZoB^+L~dvpEmvDBt*NPDvc4pg7US3PDKj7ZmG(tpPTzSU+mHq~G3SDw zzP;#c1>eLT1hgJ&LWiFevu3nx*+RrRYc4_!qngvYDMO^SHFXGHxQHq!HznJ|RA{=* z76L2YtPMU3$=Cf*0f(Hl(`Yn$VNsFdy;j^CB8fzzt=`P8Py#)DmFirGq#qkjt@0cy z1pnuXF#0qeb@az(HX;)!4V}<5Monj<#uOI)rh>W+wzaZr!)(I4#ti%y2av;MxPdUm z%5a89{tO3VLpyPH*AO%gFItH>2b;#J;ohll7Hv;T`H_Lk0qM)i1}bZj?T;np<d0rp z2sW_+b~**!sUy`e#<ffO<omIkiR91iEKe!l(U(P=W)2l9C*Aar=WtPdjXnAFh-~Bv z&7^aT(sifQn-~=qc6jT+z%a;!{&?PO{qhRob?fkjf80GZs8|=a)UDy-KA$WToX+3g zcxB%HHd~TilWKZQa=67q_K2*5lbN6?0nw6l6AnFqsVVJduUF!NvbEj6uL}<mYC<U$ zFE8y<fdlMFTt%+C5hV>z`{~IXmxOi2G}s38!0OVY;m9~Jmzt1d;zV7O16wM}s*x+J zFJU?&K8h)0I10+MXGNX6bgVdu_O7yj!g93w5PAxc=CeI~stez*?!Zf_UU@^~4~S?# z#>0B;N=dx1b>guuWdb~(^KYGBfMgD83OV#L|GTu#4qS%cdIYmb)W3TI0U?+#gdzel z^2v=AzpV_X;kUsQNm#^dA!#H#A<zu}%ZCk+`G@zdJt7-%b$u6w6V~!He2(j`;pFPR z$W=vKIJiW*S^`CzC*n>vY^nDPRi(m}+?=B99`NkIL1PyuqoF*ANy%p#MMw7oIO!5t zUY|B~AV*eljvIl$y_aq!lUVX)oc142GDx_5=wzi>Hr7xkG4LuiRCGJEw;*;ncQw6- z8<qHa>;j_X1JA<am&}wtt&ygB-G38NY3H8-A{e`IGkX<1Xt)yRwKWi&5qQS4P!5>V z8_Sw?*NDY;6UpqeirA@&Yl#Dg5qe51WDz1~Qk9PNjagsu(o5z3JPhA5F4xIe-<o~1 zKdm-Lt{?<c?+hbXf+`67=%1=zgtXdZB$BW9kV9FgHz=h?0sv;u`;s#GS<9t|>j@bh zg@M`(v*DBZgWkcGmX<r)No_ZeAo?Q2YEy<er3WwapnXK+IOax7!u;14t7xAypj0d4 zw8&Mjj4<12)@aRmvse$HxjnD%Kp?vgJdD7n3fU~Xw_+)wknK<zfKMrbsW{x5y;#<C zc<t4U{1NMVXhAqxCp3QXqw?AH<!3_MG(gk5n}^<1@o}fhhD3if<1kB`16gdo?G2Ce z<KG5ePRHm{YrUmEak34ADT>#^(pa~abVoMdUsrE?=H8yy{m5NCzpH=Hk>rs%^KsID z#0BKljWQs#qeq`235q<wN7)}u#TdSCQG+)3r0mfqWF3DDEwm3j`?Co8t#n5;YTMcI zgj2xbu>{{~owy9n!@6ILZyJVi#Kv&QL2U=sR!x)T%GHIr-?KVLX_L719a#pZW9Fly zBToNMVL}HRPA*3zk{hK{bk?dG#f4&%xvP*{*tbo-XH`<a1*c#H^&6Sa8kKQmz|uNN z=ne0-W~o_wU6)uwtWl6G27zth(-9uiDO?#HR9TowVDW$VZ;J-Es_us!MUs6V=cZiY z^3I%CdX1edSh(<9{cEmIhB1}oHClGtnO8dd>NKvG(zx=AE4}Y)!TJdA;q=hzLhoNf z3kAoh#jiVt8Z5YHv}&H7Qo`B<!>NFYf6gn~#qs1mt9RaLo;LjJ*w)`f%$pp=je7NT zFx=(%ZRf3;eod#5t%bZYheNr5FX=+?raeT72aTu5MOD<hspE<f1=QK&qGr4y8tKIU zYVz~lPM2SyFluTNzsF(#1cTFvl!^#$lHP8&a8NxMmnhHo^kf#25~Skylj{m@6<C8u zi#mO3m|QyUU)Y=d_NhM0KRGT9?JW{s`)PgfGo8=>-p~@ZBILa>n5kWR<2Z9^e8eaB z)8Ol{m9*R^Rw~@YN@MyB$kWogyo8HBu0H))Xy&9@SEq;?CcPCh^8PPrL?{rQd8VC6 zk_vWJbYWYEygCQu3|e=MC<bx`MZO337$orp!npu;o-;=V24%Zr`<qcEKtd|~zxQLn c>|D?d==nmSqSxiSe|#*!($ossVC)wEUsi9OU;qFB literal 0 HcmV?d00001 From 40aed5a83cad71d477a11d9b10c7ab015588c958 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 16 Apr 2015 01:37:28 +0900 Subject: [PATCH 141/339] =?UTF-8?q?headline.2ch.net=E3=82=92=E6=9C=80?= =?UTF-8?q?=E8=BF=91=E8=AA=AD=E3=82=93=E3=81=A0=E3=82=B9=E3=83=AC=E3=81=AB?= =?UTF-8?q?=E8=BF=BD=E8=A8=98=E3=81=97=E3=81=AA=E3=81=84=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4=20Firefox=E3=81=A7=E3=82=B9?= =?UTF-8?q?=E3=83=9E=E3=83=9B=E5=90=91=E3=81=91=E8=A1=A8=E7=A4=BA=E3=81=8C?= =?UTF-8?q?=E5=B4=A9=E3=82=8C=E3=82=8B=E4=B8=8D=E5=85=B7=E5=90=88=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=20=E3=82=B9=E3=83=9E=E3=83=9B=E7=94=A8IC2?= =?UTF-8?q?=E3=81=AE=E3=83=9D=E3=83=83=E3=83=97=E3=82=A2=E3=83=83=E3=83=97?= =?UTF-8?q?=E3=81=A7=E6=97=A2=E3=81=AB=E8=A8=AD=E5=AE=9A=E6=B8=88=E3=81=BF?= =?UTF-8?q?=E3=81=AE=E6=98=9F=E3=82=92=E3=82=BF=E3=83=83=E3=83=97=E3=81=97?= =?UTF-8?q?=E3=81=9F=E9=9A=9B=E3=81=AB=E3=82=A8=E3=83=A9=E3=83=BC=E3=82=92?= =?UTF-8?q?=E5=87=BA=E3=81=95=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=20=E3=82=B9=E3=83=9E=E3=83=9B=E7=94=A8?= =?UTF-8?q?=E3=83=AC=E3=82=B9=E3=83=9D=E3=83=83=E3=83=97=E3=82=A2=E3=83=83?= =?UTF-8?q?=E3=83=97=E3=81=8B=E3=82=89=E9=96=8B=E3=81=84=E3=81=9FSPM?= =?UTF-8?q?=E3=81=A8ic2=E3=83=9D=E3=83=83=E3=83=97=E3=82=A2=E3=83=83?= =?UTF-8?q?=E3=83=97=E3=82=92=E3=82=BF=E3=83=83=E3=83=97=E3=81=97=E3=81=9F?= =?UTF-8?q?=E9=9A=9B=E3=81=AB=E5=85=83=E3=81=AE=E3=83=9D=E3=83=83=E3=83=97?= =?UTF-8?q?=E3=82=A2=E3=83=83=E3=83=97=E3=81=8C=E6=B6=88=E3=81=88=E3=81=AA?= =?UTF-8?q?=E3=81=84=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4=20?= =?UTF-8?q?=E6=96=B0=E7=9D=80=E3=81=8C=E6=8C=87=E5=AE=9A=E3=81=97=E3=81=9F?= =?UTF-8?q?=E4=BB=B6=E6=95=B0=E4=BB=A5=E4=B8=8B=E3=81=AE=E3=82=B9=E3=83=AC?= =?UTF-8?q?=E3=81=A0=E3=81=91=E7=BA=8F=E3=82=81=E8=AA=AD=E3=81=BF=E3=81=99?= =?UTF-8?q?=E3=82=8B=E6=A9=9F=E8=83=BD=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/sb_toolbar.inc.php | 4 ++- rep2/css/iphone.css | 1 + rep2/js/ic2_iphone.js | 2 -- rep2/js/respopup_iphone.js | 3 ++- rep2/read.php | 3 ++- rep2/read_new.php | 54 +++++++++++++++++++++++++++++--------- rep2/read_new_k.php | 17 ++++++------ 7 files changed, 58 insertions(+), 26 deletions(-) diff --git a/lib/sb_toolbar.inc.php b/lib/sb_toolbar.inc.php index ff3cb3dd1..1ad1ffa59 100644 --- a/lib/sb_toolbar.inc.php +++ b/lib/sb_toolbar.inc.php @@ -24,8 +24,10 @@ } else { $shinchaku_num_ht = ''; } + $shinchaku_matome_url = "{$_conf['read_new_php']}?host={$aThreadList->host}&bbs={$aThreadList->bbs}&spmode={$aThreadList->spmode}{$norefresh_q}&nt={$newtime}"; $shinchaku_matome_ht =<<<EOP -<a id="smy{$new_matome_i}" class="matome" href="{$_conf['read_new_php']}?host={$aThreadList->host}&bbs={$aThreadList->bbs}&spmode={$aThreadList->spmode}{$norefresh_q}&nt={$newtime}" onclick="rep2.subject.changeNewAllColor();">�V���܂Ƃߓǂ�{$shinchaku_num_ht}</a> +<a id="smy{$new_matome_i}" class="matome" href="{$shinchaku_matome_url}" onclick="rep2.subject.changeNewAllColor();">�V���܂Ƃߓǂ�{$shinchaku_num_ht} [�S��]</a> +<a class="matome" href="javascript:var unum_limit = window.prompt('�V�����w�肵�������ȉ��̃X�������܂Ƃߓǂ݂��܂��B','100');if(unum_limit){window.location = '{$shinchaku_matome_url}&unum_limit='+unum_limit;}">[�ꕔ]</a> EOP; } else { $shinchaku_matome_ht = ''; diff --git a/rep2/css/iphone.css b/rep2/css/iphone.css index d354ae31a..67980ddc1 100644 --- a/rep2/css/iphone.css +++ b/rep2/css/iphone.css @@ -69,6 +69,7 @@ div#toolbar_header { text-align:right; padding: 6px; height: 45px; + box-sizing: border-box; -webkit-box-sizing: border-box; } diff --git a/rep2/js/ic2_iphone.js b/rep2/js/ic2_iphone.js index cc9c15c17..1f6d82d9d 100644 --- a/rep2/js/ic2_iphone.js +++ b/rep2/js/ic2_iphone.js @@ -183,8 +183,6 @@ document.addEventListener('DOMContentLoaded', function(event) { if (req.status == 200) { if (req.responseText == '1') { ic2info.setRank(rank); - } else { - window.alert('Internal error'); } } else { window.alert('HTTP error ' + req.statusText); diff --git a/rep2/js/respopup_iphone.js b/rep2/js/respopup_iphone.js index 79e0fdc11..9bf7ad3c5 100644 --- a/rep2/js/respopup_iphone.js +++ b/rep2/js/respopup_iphone.js @@ -96,7 +96,8 @@ ipoputil.callback = function(req, url, popid, yOffset) { */ $container.css('top',yOffset.toString() + 'px'); $container.css('z-index',ipoputil.getZ()); - $container.skOuterClick(ipoputil.getDeactivator($container, url)); + //respop���̓�����������ɂ��Ă��� + $container.skOuterClick(ipoputil.getDeactivator($container, url),$("[id^=_respop]"),$('#ic2-info-body'),$('#ic2-info-closer'),$('#spm'),$('#spm-closer')); $closer.addClass('close-button'); $closer.attr('src', 'img/iphone/close.png'); diff --git a/rep2/read.php b/rep2/read.php index 2b4195ba2..ba2957f0a 100644 --- a/rep2/read.php +++ b/rep2/read.php @@ -448,8 +448,9 @@ //=========================================================== // �������L�^ +// ����headline�͍ŋߓǂ񂾃X���ɋL�^���Ȃ��悤�ɂ��Ă݂� //=========================================================== -if ($aThread->rescount && !$is_ajax) { +if ($aThread->rescount && !$is_ajax && $aThread->host != 'headline.2ch.net') { recRecent(implode('<>', array($aThread->ttitle, $aThread->key, $idx_data[2], '', '', $aThread->readnum, $idx_data[6], $idx_data[7], $idx_data[8], $newline, $aThread->host, $aThread->bbs))); diff --git a/rep2/read_new.php b/rep2/read_new.php index ae3c948e3..abb6a4c60 100755 --- a/rep2/read_new.php +++ b/rep2/read_new.php @@ -27,17 +27,35 @@ //================================================= // �‚̎w�� //================================================= -if (isset($_GET['host'])) { $host = $_GET['host']; } -if (isset($_POST['host'])) { $host = $_POST['host']; } -if (isset($_GET['bbs'])) { $bbs = $_GET['bbs']; } -if (isset($_POST['bbs'])) { $bbs = $_POST['bbs']; } -if (isset($_GET['spmode'])) { $spmode = $_GET['spmode']; } -if (isset($_POST['spmode'])) { $spmode = $_POST['spmode']; } - -if ((!isset($host) || !isset($bbs)) && !isset($spmode)) { +if (isset($_GET['host'])) { + $host = $_GET['host']; +} elseif (isset($_POST['host'])) { + $host = $_POST['host']; +} +if (isset($_GET['bbs'])) { + $bbs = $_GET['bbs']; +} elseif (isset($_POST['bbs'])) { + $bbs = $_POST['bbs']; +} +if (isset($_GET['spmode'])) { + $spmode = $_GET['spmode']; +} elseif (isset($_POST['spmode'])) { + $spmode = $_POST['spmode']; +} + +if (!(isset($host) && isset($bbs)) && !isset($spmode)) { p2die('�K�v�Ȉ������w�肳��Ă��܂���'); } +// ���ǐ����� +if (ctype_digit($_GET['unum_limit'])) { + $unum_limit = (int)$_GET['unum_limit']; +} elseif (ctype_digit($_POST['unum_limit'])) { + $unum_limit = (int)$_POST['unum_limit']; +} else { + $unum_limit = 0; +} + //================================================= // ���ځ[��&NG���[�h�ݒ�ǂݍ��� //================================================= @@ -343,9 +361,7 @@ function pageLoaded() $subject_id = $aThread->host . '/' . $aThread->bbs; $aThread->setThreadPathInfo($aThread->host, $aThread->bbs, $aThread->key); - - // �����X���b�h�f�[�^��idx����擾 - $aThread->getThreadInfoFromIdx(); + $aThread->getThreadInfoFromIdx(); // �����X���b�h�f�[�^��idx����擾 // �V���̂�(for subject) ========================================= if (!$aThreadList->spmode && $sb_view == 'shinchaku' && empty($_GET['word'])) { @@ -392,6 +408,12 @@ function pageLoaded() } } + // ���ǐ����� + if ($unum_limit > 0 && $aThread->unum >= $unum_limit) { + unset($aThread); + continue; + } + if ($aThread->isonline) { $online_num++; } // ������set P2Util::printInfoHtml(); @@ -515,7 +537,7 @@ function readNew($aThread) } //if (!$aThread->ls) { - $aThread->ls = "$from_num-"; + $aThread->ls = "{$from_num}-"; //} } @@ -779,7 +801,13 @@ function readNew($aThread) echo "<hr>"; } -$shinchaku_matome_url = "{$_conf['read_new_php']}?host={$aThreadList->host}&bbs={$aThreadList->bbs}&spmode={$aThreadList->spmode}&nt={$newtime}"; +if ($unum_limit > 0) { + $unum_limit_at_a = "&unum_limit={$unum_limit}"; +} else { + $unum_limit_at_a = ''; +} + +$shinchaku_matome_url = "{$_conf['read_new_php']}?host={$aThreadList->host}&bbs={$aThreadList->bbs}&spmode={$aThreadList->spmode}&nt={$newtime}{$unum_limit_at_a}"; if ($aThreadList->spmode == 'merge_favita') { $shinchaku_matome_url .= $_conf['m_favita_set_at_a']; diff --git a/rep2/read_new_k.php b/rep2/read_new_k.php index d14a4cf71..b831c7cd3 100644 --- a/rep2/read_new_k.php +++ b/rep2/read_new_k.php @@ -23,8 +23,8 @@ $sb_view = 'shinchaku'; $newtime = date('gis'); -$newthre_num = 0; $online_num = 0; +$newthre_num = 0; //================================================= // �‚̎w�� @@ -50,9 +50,9 @@ } // ���ǐ����� -if (isset($_GET['unum_limit'])) { +if (ctype_digit($_GET['unum_limit'])) { $unum_limit = (int)$_GET['unum_limit']; -} elseif (isset($_POST['unum_limit'])) { +} elseif (ctype_digit($_POST['unum_limit'])) { $unum_limit = (int)$_POST['unum_limit']; } else { $unum_limit = 0; @@ -72,7 +72,7 @@ // �‚ƃ��[�h�̃Z�b�g =================================== $ta_keys = array(); if ($spmode) { - if ($spmode == "taborn" or $spmode == "soko") { + if ($spmode == 'taborn' or $spmode == 'soko') { $aThreadList->setIta($host, $bbs, P2Util::getItaName($host, $bbs)); } $aThreadList->setSpMode($spmode); @@ -234,6 +234,7 @@ $aThread->torder = $x + 1; // �f�[�^�ǂݍ��� + // spmode�Ȃ� if ($aThreadList->spmode) { switch ($aThreadList->spmode) { case "recent": // ���� @@ -250,7 +251,7 @@ $aThread->host = $aThreadList->host; $aThread->bbs = $aThreadList->bbs; break; - case "palace": // �a������ + case "palace": // �X���̓a�� $aThread->getThreadInfoFromExtIdxLine($l); break; case "merge_favita": // ���C�ɔ‚��}�[�W @@ -266,7 +267,7 @@ } break; } - // subject (not spmode) + // subject (not spmode)�̏ꍇ } else { $aThread->getThreadInfoFromSubjectTxtLine($l); $aThread->host = $aThreadList->host; @@ -293,7 +294,7 @@ } // �X���b�h���ځ[��`�F�b�N ===================================== - if ($aThreadList->spmode != "taborn" && !empty($ta_keys[$aThread->key])) { + if ($aThreadList->spmode != 'taborn' && !empty($ta_keys[$aThread->key])) { unset($ta_keys[$aThread->key]); continue; // ���ځ[��X���̓X�L�b�v } @@ -321,7 +322,7 @@ } // �V���̂�(for spmode) =============================== - if ($sb_view == "shinchaku" && empty($_GET['word'])) { + if ($sb_view == 'shinchaku' && empty($_GET['word'])) { if ($aThread->unum < 1) { unset($aThread); continue; From a286e811addfa000a04f56af7f105f61dc454dae Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 16 Apr 2015 18:50:49 +0900 Subject: [PATCH 142/339] =?UTF-8?q?rep2=E3=81=AB=E7=99=BB=E9=8C=B2?= =?UTF-8?q?=E3=81=95=E3=82=8C=E3=81=9F=E5=A4=96=E9=83=A8=E6=9D=BF=E3=81=B8?= =?UTF-8?q?=E3=83=AA=E3=83=B3=E3=82=AF=E3=81=99=E3=82=8B=E6=A9=9F=E8=83=BD?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0=20=E5=8F=8D=E6=98=A0=E3=81=AB?= =?UTF-8?q?=E3=81=AFdata/cache/host=5Fbbs=5Fmap.txt=E3=81=AE=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E3=81=8C=E5=BF=85=E8=A6=81=E3=81=AA=E3=81=9F=E3=82=81?= =?UTF-8?q?=E3=81=99=E3=81=90=E3=81=AB=E8=A9=A6=E3=81=99=E5=A0=B4=E5=90=88?= =?UTF-8?q?=E3=81=AF=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/BbsMap.php | 49 ++++++++++++++++++++++++++++++++++++- lib/P2Util.php | 53 ++++++++++++++++++++++------------------- lib/ShowBrdMenuPc.php | 2 +- lib/ShowThreadI.php | 9 ++++--- lib/ShowThreadK.php | 9 ++++--- lib/ShowThreadPc.php | 15 +++++++----- lib/ThreadRead.php | 2 +- lib/read_header.inc.php | 9 +++---- 8 files changed, 104 insertions(+), 44 deletions(-) diff --git a/lib/BbsMap.php b/lib/BbsMap.php index a1d3a57ee..16fe7767e 100644 --- a/lib/BbsMap.php +++ b/lib/BbsMap.php @@ -5,6 +5,7 @@ /** * BbsMap�N���X * ��-�z�X�g�̑Ή��\���쐬���A����Ɋ�Â��ăz�X�g�̓������s�� + * �O���‚�rep2�ɓo�^����Ă��邩�ǂ����̔�������˂� * * @static */ @@ -87,6 +88,52 @@ static public function getBbsName($host, $bbs) return $itaj; } + // }}} + // {{{ isRegisteredBbs() + + /** + * �‚�rep2�ɓo�^����Ă��邩�ǂ��� + * + * @param string $host �z�X�g�� + * @param string $bbs �–� + * @return bool rep2�ɒlj�����Ă���‚Ȃ�true + */ + static public function isRegisteredBbs($host, $bbs) + { + global $_conf; + + $type = self::_detectHostType($host); + + // �o�^�����ł�rep2�ň�����‚̓`�F�b�N������true + if($host != $type) { + return true; + } + + // �}�b�s���O�ǂݍ��� + $map = self::_getMapping(); + if (!$map) { + return false; + } + + // �`�F�b�N + if (isset($map[$type]) && isset($map[$type][$bbs])) { + return true; + } + + // �������‚���Ȃ���΂��C�ɔ‚̓��e���m�F(�O���‚��o�^�”\�ɂȂ��Ă��邽��) + if ($lines = FileCtl::file_read_lines($_conf['favita_brd'], FILE_IGNORE_NEW_LINES)) { + foreach ($lines as $l) { + if (preg_match("/^\t?(.+)\t(.+)\t(.+)\$/", $l, $matches)) { + if ($host == $matches[1]) + { + return true; + } + } + } + } + return false; + } + // }}} // {{{ syncBrd() @@ -289,7 +336,7 @@ static private function _getMapping() // }}} // {{{ ���j���[���_�E�����[�h - $brd_menus_online = BrdCtl::read_brd_online(); + $brd_menus_online = BrdCtl::read_brds(); $map = array(); foreach ($brd_menus_online as $a_brd_menu) { diff --git a/lib/P2Util.php b/lib/P2Util.php index 7f8ad804d..cac9eff38 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -1879,28 +1879,13 @@ static public function detectThread($url = null) // �X��URL�̒��ڎw�� if ($nama_url) { - // 2ch or pink - http://choco.2ch.net/test/read.cgi/event/1027770702/ - if (preg_match('<^http://(\\w+\\.(?:2ch\\.net|bbspink\\.com|vip2ch\\.com))/test/read\\.(?:cgi|html) - /(\\w+)/([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) - { - $host = $matches[1]; - $bbs = $matches[2]; - $key = $matches[3]; - $ls = (isset($matches[4]) && strlen($matches[4])) ? $matches[4] : ''; - - // 2ch or pink �ߋ����Ohtml - http://pc.2ch.net/mac/kako/1015/10153/1015358199.html - } elseif (preg_match('<^(http://(\\w+\\.(?:2ch\\.net|bbspink\\.com|vip2ch\\.com))(?:/[^/]+)?/(\\w+) - /kako/\\d+(?:/\\d+)?/(\\d+)).html>x', $nama_url, $matches)) - { - $host = $matches[2]; - $bbs = $matches[3]; - $key = $matches[4]; - $ls = ''; - $kakolog_url = $matches[1]; - $_GET['kakolog'] = $kakolog_url; + $host = null; + $bbs = null; + $key = null; + $ls = null; // �܂�BBS - http://kanto.machi.to/bbs/read.cgi/kanto/1241815559/ - } elseif (preg_match('<^http://(\\w+\\.machi(?:bbs\\.com|\\.to))/bbs/read\\.cgi + if (preg_match('<^http://(\\w+\\.machi(?:bbs\\.com|\\.to))/bbs/read\\.cgi /(\\w+)/([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) { $host = $matches[1]; @@ -1930,11 +1915,29 @@ static public function detectThread($url = null) $host = $matches[1]; list($bbs, $key, $ls) = self::parseMachiQuery($matches[4]); - } else { - $host = null; - $bbs = null; - $key = null; - $ls = null; + // 2ch or pink - http://choco.2ch.net/test/read.cgi/event/1027770702/ + } elseif (preg_match('<^https?://(.+)/test/read\\.(?:cgi|html|so) + /(\\w+)/([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) + { + if(BbsMap::isRegisteredBbs($matches[1] ,$matches[2])) { + $host = $matches[1]; + $bbs = $matches[2]; + $key = $matches[3]; + $ls = (isset($matches[4]) && strlen($matches[4])) ? $matches[4] : ''; + } + + // 2ch or pink �ߋ����Ohtml - http://pc.2ch.net/mac/kako/1015/10153/1015358199.html + } elseif (preg_match('<^(https?://(.+)(?:/[^/]+)?/(\\w+) + /kako/\\d+(?:/\\d+)?/(\\d+)).html>x', $nama_url, $matches)) + { + if(BbsMap::isRegisteredBbs($matches[2] ,$matches[3])) { + $host = $matches[2]; + $bbs = $matches[3]; + $key = $matches[4]; + $ls = ''; + $kakolog_url = $matches[1]; + $_GET['kakolog'] = $kakolog_url; + } } // �␳ diff --git a/lib/ShowBrdMenuPc.php b/lib/ShowBrdMenuPc.php index 06fb6f628..583bf4ce8 100644 --- a/lib/ShowBrdMenuPc.php +++ b/lib/ShowBrdMenuPc.php @@ -86,7 +86,7 @@ public function printFavIta() if ($_conf['merge_favita']) { echo <<<EOP - �@ <a href="{$_conf['subject_php']}?spmode=merge_favita{$_conf['m_favita_set_at_a']}">{$favset_title} (�܂Ƃ�)</a><br>\n + <a href="{$_conf['subject_php']}?spmode=merge_favita{$_conf['m_favita_set_at_a']}">{$favset_title} (�܂Ƃ�)</a><br>\n EOP; } diff --git a/lib/ShowThreadI.php b/lib/ShowThreadI.php index c52b20ff1..50ec003e2 100644 --- a/lib/ShowThreadI.php +++ b/lib/ShowThreadI.php @@ -842,9 +842,12 @@ public function plugin_link2chSubject($url, $purl, $str) { global $_conf; - if (preg_match('{^http://(\\w+\\.(?:2ch\\.net|bbspink\\.com))/(\\w+)/$}', $purl[0], $m)) { - $subject_url = "{$_conf['subject_php']}?host={$m[1]}&bbs={$m[2]}"; - return "<a href=\"{$url}\">{$str}</a> [<a href=\"{$subject_url}{$_conf['k_at_a']}\">�‚�p2�ŊJ��</a>]"; + if (preg_match('{^https?://(.+)/(.+)/$}', $purl[0], $m)) { + //rep2�ɓo�^����Ă���‚Ȃ�΃����N���� + if (BbsMap::isRegisteredBbs($m[1],$m[2])) { + $subject_url = "{$_conf['subject_php']}?host={$m[1]}&bbs={$m[2]}"; + return "<a href=\"{$url}\">{$str}</a> [<a href=\"{$subject_url}{$_conf['k_at_a']}\">�‚�p2�ŊJ��</a>]"; + } } return false; } diff --git a/lib/ShowThreadK.php b/lib/ShowThreadK.php index 27f7a107a..dfda8ead8 100644 --- a/lib/ShowThreadK.php +++ b/lib/ShowThreadK.php @@ -754,9 +754,12 @@ public function plugin_link2chSubject($url, $purl, $str) { global $_conf; - if (preg_match('{^http://(\\w+\\.(?:2ch\\.net|bbspink\\.com))/(\\w+)/$}', $purl[0], $m)) { - $subject_url = "{$_conf['subject_php']}?host={$m[1]}&bbs={$m[2]}"; - return "<a href=\"{$url}\">{$str}</a> [<a href=\"{$subject_url}{$_conf['k_at_a']}\">�‚�p2�ŊJ��</a>]"; + if (preg_match('{^https?://(.+)/(.+)/$}', $purl[0], $m)) { + //rep2�ɓo�^����Ă���‚Ȃ�΃����N���� + if (BbsMap::isRegisteredBbs($m[1],$m[2])) { + $subject_url = "{$_conf['subject_php']}?host={$m[1]}&bbs={$m[2]}"; + return "<a href=\"{$url}\">{$str}</a> [<a href=\"{$subject_url}{$_conf['k_at_a']}\">�‚�p2�ŊJ��</a>]"; + } } return false; } diff --git a/lib/ShowThreadPc.php b/lib/ShowThreadPc.php index 41468a1ec..188602a8b 100644 --- a/lib/ShowThreadPc.php +++ b/lib/ShowThreadPc.php @@ -154,7 +154,7 @@ public function transRes($ares, $i, $pattern = null) $idstr = null; } - // +live (live.bbs_noname) �p + // +live (live.bbs_noname) �p if (!empty($this->BBS_NONAME_NAME) and $this->BBS_NONAME_NAME == $name) { $name = ''; } @@ -1274,9 +1274,12 @@ public function plugin_link2chSubject($url, $purl, $str) { global $_conf; - if (preg_match('{^http://(\\w+\\.(?:2ch\\.net|bbspink\\.com))/(\\w+)/$}', $purl[0], $m)) { - $subject_url = "{$_conf['subject_php']}?host={$m[1]}&bbs={$m[2]}"; - return "<a href=\"{$url}\" target=\"subject\">{$str}</a> [<a href=\"{$subject_url}\" target=\"subject\">�‚�p2�ŊJ��</a>]"; + if (preg_match('{^https?://(.+)/(.+)/$}', $purl[0], $m)) { + //rep2�ɓo�^����Ă���‚Ȃ�΃����N���� + if (BbsMap::isRegisteredBbs($m[1],$m[2])) { + $subject_url = "{$_conf['subject_php']}?host={$m[1]}&bbs={$m[2]}"; + return "<a href=\"{$url}\" target=\"subject\">{$str}</a> [<a href=\"{$subject_url}{$_conf['k_at_a']}\" target=\"subject\">�‚�p2�ŊJ��</a>]"; + } } return false; } @@ -1298,7 +1301,7 @@ public function plugin_linkThread($url, $purl, $str) list($nama_url, $host, $bbs, $key, $ls) = P2Util::detectThread($purl[0]); if ($host && $bbs && $key) { - $read_url = "{$_conf['read_php']}?host={$host}&bbs={$bbs}&key={$key}&ls={$ls}"; + $read_url = "{$_conf['read_php']}?host={$host}&bbs={$bbs}&key={$key}&ls={$ls}{$_conf['k_at_a']}"; if ($_conf['iframe_popup']) { if ($ls && preg_match('/^[0-9\\-n]+$/', $ls)) { $pop_url = $read_url; @@ -1340,7 +1343,7 @@ public function plugin_linkYouTube($url, $purl, $str) // http://www.youtube.com/watch?v=Mn8tiFnAUAI // http://m.youtube.com/watch?v=OhcX0xJsDK8&client=mv-google&gl=JP&hl=ja&guid=ON&warned=True if (preg_match('{^https?://(youtu\\.be/|(www|jp|m)\\.youtube\\.com/watch\\?(?:.+&)?v=)([0-9a-zA-Z_\\-]+)}', $url, $m)) { - $url = preg_replace('{^http:}', 'https:', $url); + $url = preg_replace('{^http:}', 'https:', $url); // ime if ($_conf['through_ime']) { $link_url = P2Util::throughIme($url); diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index d0b076ea0..609a1df6d 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -699,7 +699,7 @@ public function get2chDatError($code = null) { $read_response_html = ''; if (! $reason) { try { - $req = P2Util::getHTTPRequest2 ($read_url, HTTP_Request2::METHOD_GET); + $req = P2Util::getHTTPRequest2 ($read_url + '1/', HTTP_Request2::METHOD_GET); // �w�b�_ $req->setHeader ('User-Agent', P2Util::getP2UA(false,P2Util::isHost2chs($this->host))); // �����́A"Monazilla/" ���‚����NG diff --git a/lib/read_header.inc.php b/lib/read_header.inc.php index 248f8fd50..c1aef7b33 100755 --- a/lib/read_header.inc.php +++ b/lib/read_header.inc.php @@ -417,14 +417,15 @@ function filterCount(n) } else { $diedat_msg = $aThread->getDefaultGetDatErrorMessageHTML(); } + $motothre_url_t = P2Util::throughIme ($motothre_url); - $motothre_popup = " onmouseover=\"showHtmlPopUp('{$motothre_url}',event,{$_conf['iframe_popup_delay']})\" onmouseout=\"offHtmlPopUp()\""; + $motothre_popup = " onmouseover=\"showHtmlPopUp('{$motothre_url_t}',event,{$_conf['iframe_popup_delay']})\" onmouseout=\"offHtmlPopUp()\""; if ($_conf['iframe_popup'] == 1) { - $motothre_ht = "<a href=\"{$motothre_url}\"{$_conf['bbs_win_target_at']}{$motothre_popup}>{$motothre_url}</a>"; + $motothre_ht = "<a href=\"{$motothre_url_t}\"{$_conf['bbs_win_target_at']}{$motothre_popup}>{$motothre_url}</a>"; } elseif ($_conf['iframe_popup'] == 2) { - $motothre_ht = "(<a href=\"{$motothre_url}\"{$_conf['bbs_win_target_at']}{$motothre_popup}>p</a>)<a href=\"{$motothre_url}\"{$_conf['bbs_win_target_at']}>{$motothre_url}</a>"; + $motothre_ht = "(<a href=\"{$motothre_url_t}\"{$_conf['bbs_win_target_at']}{$motothre_popup}>p</a>)<a href=\"{$motothre_url_t}\"{$_conf['bbs_win_target_at']}>{$motothre_url}</a>"; } else { - $motothre_ht = "<a href=\"{$motothre_url}\"{$_conf['bbs_win_target_at']}>{$motothre_url}</a>"; + $motothre_ht = "<a href=\"{$motothre_url_t}\"{$_conf['bbs_win_target_at']}>{$motothre_url}</a>"; } echo $diedat_msg; From 7090f0467e5220959e695ba8021709e9bb34591a Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 17 Apr 2015 00:32:37 +0900 Subject: [PATCH 143/339] =?UTF-8?q?ai=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E3=81=8C=E6=AE=8B=E3=81=A3=E3=81=A6=E3=81=84=E3=81=9F=E3=81=AE?= =?UTF-8?q?=E3=81=A7=E9=99=A4=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + rep2/img/glyphish/icons2/108-badge.ai | 1582 ------------------------- 2 files changed, 1 insertion(+), 1582 deletions(-) delete mode 100644 rep2/img/glyphish/icons2/108-badge.ai diff --git a/README.md b/README.md index a41092fe4..75029eea2 100644 --- a/README.md +++ b/README.md @@ -106,6 +106,7 @@ Webブラウザから変更できない項目は [conf/conf_admin.inc.php](https * **orzisun** https://github.com/orzisun/p2-php * **2ch774** https://github.com/2ch774/p2-php * **killer4989** https://github.com/killer4989/p2-php +* **dgg712** https://github.com/dgg712/p2-php * **2ch p2/rep2スレの>>1-1000** diff --git a/rep2/img/glyphish/icons2/108-badge.ai b/rep2/img/glyphish/icons2/108-badge.ai deleted file mode 100644 index 39c258115..000000000 --- a/rep2/img/glyphish/icons2/108-badge.ai +++ /dev/null @@ -1,1582 +0,0 @@ -%PDF-1.5 %���� -1 0 obj <</Metadata 2 0 R/OCProperties<</D<</ON[5 0 R 32 0 R 52 0 R]/Order 53 0 R/RBGroups[]>>/OCGs[5 0 R 32 0 R 52 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <</Length 37726/Subtype/XML/Type/Metadata>>stream -<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> -<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27 "> - <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> - <rdf:Description rdf:about="" - xmlns:dc="http://purl.org/dc/elements/1.1/"> - <dc:format>application/pdf</dc:format> - <dc:title> - <rdf:Alt> - <rdf:li xml:lang="x-default">Print</rdf:li> - </rdf:Alt> - </dc:title> - </rdf:Description> - <rdf:Description rdf:about="" - xmlns:xmp="http://ns.adobe.com/xap/1.0/" - xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/"> - <xmp:MetadataDate>2015-04-15T13:57:29+09:00</xmp:MetadataDate> - <xmp:ModifyDate>2015-04-15T13:57:29+09:00</xmp:ModifyDate> - <xmp:CreateDate>2015-04-15T13:45:56+09:00</xmp:CreateDate> - <xmp:CreatorTool>Adobe Illustrator CS6 (Macintosh)</xmp:CreatorTool> - <xmp:Thumbnails> - <rdf:Alt> - <rdf:li rdf:parseType="Resource"> - <xmpGImg:width>256</xmpGImg:width> - <xmpGImg:height>172</xmpGImg:height> - <xmpGImg:format>JPEG</xmpGImg:format> - <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgArAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FVGb7f0YqsxQ7FV8P2/oxS6b7f0YqsxQ7FV8P2/oxS6b7f0YqsxQ7FV8P2/oxSr Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVGb7f0YqsxQ7FV8P2/oxS6b7f0Y qsxQ7FV8P2/oxS6b7f0YqsxQ7FV8P2/oxSrYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FVGb7f0YqsxQ7FV8P2/oxS6b7f0YqsxQ7FV8P2/oxS6b7f0YqsxQ7FV8P2/oxSrYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVGb7f0YqsxQ7FV8P2/oxS6b7f0YqsxQ7F V8P2/oxS6b7f0YqsxQ7FV8P2/oxSrYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FVGb7f0YqsxQ7FV8P2/oxS6b7f0Yqhb2X0rZ2HUii/M4odZS+rbIx6gUb5jFUVD9v6MUum+39GK rMUOxVfD9v6MUq2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVRm+39GKrMUOx VfD9v6MUum+39GKpRq8tWSIdvib5npih2kS0Z4j3+JfmOuKpvD9v6MUum+39GKrMUOxVfD9v6MUq 2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVRm+39GKrMUOxVfD9v6MUum+19G KscuJfVneTsTt8u2KHW8vpTpJ2B3+XfFWRw/a+jFLpvt/RiqzFDsVXw/b+jFKtirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVaZA3Xr44qoMjL16eOKGsVXw/b+jFKH1WX04GI6sOI +n+zFUgxQ7FU/wBKl9SBSeqjifo/sxSiJvt/RiqzFDaozdOnjiquqBenXxxS3irsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdiqlNdW8JAlcITuK4qpnUrEf7uH4nFWjqdh/v0fcf6Yqovq Gn9Vl+ji39MVaTVLJWqX/wCFP9MVQOq3kdw6CI1RRuaU3OKoHFDsVR2lXkdu7iU0RhsaV3GKUc+q WTNUP/wp/piraahp/Vpfo4t/TFVYanYf79H3H+mKtjUrE/7uH4jFVSK6t5iRE4cjrTFVXFXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqsmgimjKSLyU/h8sVSK+0yW2Jdfjh/m7j54qgsUO xV2KuxV2KuxV2KuxV2KuxVG2OmS3JDt8EP8AN3PyxSnsMEUMYSNeKj8fniq/FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXEAih3BxVKb/R61kthQ9TF/wA04qlBBBIIoRsQcUOxV2Ku xV2KuxV2KuAJIAFSdgBiqb2Gj0pJcip6iL/mrFKbAACg2AxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxVCX2mxXI5D4Jezjv8APFUgngkglMcgowxQsxV2KuxV2Kr4IJJ5 RHGKscVT+x02G2HI/HL3c9vlilF4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYqxi8m9a5kk7FtvkNhihRxV2KuxV2Kq1nN6NzHJ0Abf5HY4qyfFLsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqHv5vRtJX70ovzO2KsaxQ7FW1VnYKo LMegG5xVzKyMVYFWHUHY4q1irsVZLYTetaRP3pRvmNsUojFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYqlWuzfDHCO/xt9GwxVJ8UIi0sZ7lqIKIPtOegxSntpYwWy/A KuernrirruxguV+MUcdHHXFUiu7Ge2ajiqH7LjocVQ+KE40Kb4ZIT2+Nfp2OKU1xV2KuxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ksc1KUzXslNwp4KPlt+vFUVY6MzUkuf hXtH3Pz8MVThEVFCoAqjoB0xVvFXYq06K6lXAZT1B6Yqk99ozLWS2+Je8fcfLxxVC6bKYb2OuwY8 GHz2/XirI8VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVablxPH7VPh r0riqFs9Oht/jPxzHq5/hiqLxV2KuxV2KuxV2KoS806G4+MfBMOjj+OKopeXEcvtU+KnSuKt4q7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq//9k=</xmpGImg:image> - </rdf:li> - </rdf:Alt> - </xmp:Thumbnails> - </rdf:Description> - <rdf:Description rdf:about="" - xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" - xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" - xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" - xmlns:stMfs="http://ns.adobe.com/xap/1.0/sType/ManifestItem#"> - <xmpMM:InstanceID>uuid:ec32ecb0-f02c-2a4c-b7eb-05a6aa4b7a7a</xmpMM:InstanceID> - <xmpMM:DocumentID>xmp.did:0680117407206811822AD3757CE76CAE</xmpMM:DocumentID> - <xmpMM:OriginalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</xmpMM:OriginalDocumentID> - <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass> - <xmpMM:DerivedFrom rdf:parseType="Resource"> - <stRef:instanceID>xmp.iid:0580117407206811822AD3757CE76CAE</stRef:instanceID> - <stRef:documentID>xmp.did:0580117407206811822AD3757CE76CAE</stRef:documentID> - <stRef:originalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</stRef:originalDocumentID> - <stRef:renditionClass>proof:pdf</stRef:renditionClass> - </xmpMM:DerivedFrom> - <xmpMM:History> - <rdf:Seq> - <rdf:li rdf:parseType="Resource"> - <stEvt:action>saved</stEvt:action> - <stEvt:instanceID>xmp.iid:0580117407206811822AD3757CE76CAE</stEvt:instanceID> - <stEvt:when>2015-04-15T13:44:37+09:00</stEvt:when> - <stEvt:softwareAgent>Adobe Illustrator CS6 (Macintosh)</stEvt:softwareAgent> - <stEvt:changed>/</stEvt:changed> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <stEvt:action>saved</stEvt:action> - <stEvt:instanceID>xmp.iid:0680117407206811822AD3757CE76CAE</stEvt:instanceID> - <stEvt:when>2015-04-15T13:45:56+09:00</stEvt:when> - <stEvt:softwareAgent>Adobe Illustrator CS6 (Macintosh)</stEvt:softwareAgent> - <stEvt:changed>/</stEvt:changed> - </rdf:li> - </rdf:Seq> - </xmpMM:History> - <xmpMM:Manifest> - <rdf:Seq> - <rdf:li rdf:parseType="Resource"> - <stMfs:linkForm>EmbedByReference</stMfs:linkForm> - <stMfs:reference rdf:parseType="Resource"> - <stRef:filePath>/Volumes/home/rep2img/108-badge.png</stRef:filePath> - </stMfs:reference> - </rdf:li> - </rdf:Seq> - </xmpMM:Manifest> - </rdf:Description> - <rdf:Description rdf:about="" - xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/"> - <illustrator:Type>Document</illustrator:Type> - <illustrator:StartupProfile>Print</illustrator:StartupProfile> - </rdf:Description> - <rdf:Description rdf:about="" - xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/" - xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#" - xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/"> - <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint> - <xmpTPg:HasVisibleTransparency>False</xmpTPg:HasVisibleTransparency> - <xmpTPg:NPages>1</xmpTPg:NPages> - <xmpTPg:MaxPageSize rdf:parseType="Resource"> - <stDim:w>480.000000</stDim:w> - <stDim:h>320.000000</stDim:h> - <stDim:unit>Pixels</stDim:unit> - </xmpTPg:MaxPageSize> - <xmpTPg:PlateNames> - <rdf:Seq> - <rdf:li>Cyan</rdf:li> - <rdf:li>Magenta</rdf:li> - <rdf:li>Yellow</rdf:li> - <rdf:li>Black</rdf:li> - </rdf:Seq> - </xmpTPg:PlateNames> - <xmpTPg:SwatchGroups> - <rdf:Seq> - <rdf:li rdf:parseType="Resource"> - <xmpG:groupName>初期設定のスウォッチグループ</xmpG:groupName> - <xmpG:groupType>0</xmpG:groupType> - <xmpG:Colorants> - <rdf:Seq> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>ホワイト</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>255</xmpG:red> - <xmpG:green>255</xmpG:green> - <xmpG:blue>255</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>ブラック</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>35</xmpG:red> - <xmpG:green>24</xmpG:green> - <xmpG:blue>21</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>CMYK レッド</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>230</xmpG:red> - <xmpG:green>0</xmpG:green> - <xmpG:blue>18</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>CMYK イエロー</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>255</xmpG:red> - <xmpG:green>241</xmpG:green> - <xmpG:blue>0</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>CMYK グリーン</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>0</xmpG:red> - <xmpG:green>153</xmpG:green> - <xmpG:blue>68</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>CMYK シアン</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>0</xmpG:red> - <xmpG:green>160</xmpG:green> - <xmpG:blue>233</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>CMYK ブルー</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>29</xmpG:red> - <xmpG:green>32</xmpG:green> - <xmpG:blue>136</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>CMYK マゼンタ</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>228</xmpG:red> - <xmpG:green>0</xmpG:green> - <xmpG:blue>127</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=15 M=100 Y=90 K=10</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>195</xmpG:red> - <xmpG:green>13</xmpG:green> - <xmpG:blue>35</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=0 M=90 Y=85 K=0</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>232</xmpG:red> - <xmpG:green>56</xmpG:green> - <xmpG:blue>40</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=0 M=80 Y=95 K=0</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>234</xmpG:red> - <xmpG:green>85</xmpG:green> - <xmpG:blue>20</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=0 M=50 Y=100 K=0</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>243</xmpG:red> - <xmpG:green>152</xmpG:green> - <xmpG:blue>0</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=0 M=35 Y=85 K=0</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>248</xmpG:red> - <xmpG:green>182</xmpG:green> - <xmpG:blue>45</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=5 M=0 Y=90 K=0</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>250</xmpG:red> - <xmpG:green>238</xmpG:green> - <xmpG:blue>0</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=20 M=0 Y=100 K=0</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>218</xmpG:red> - <xmpG:green>224</xmpG:green> - <xmpG:blue>0</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=50 M=0 Y=100 K=0</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>143</xmpG:red> - <xmpG:green>195</xmpG:green> - <xmpG:blue>31</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=75 M=0 Y=100 K=0</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>34</xmpG:red> - <xmpG:green>172</xmpG:green> - <xmpG:blue>56</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=85 M=10 Y=100 K=10</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>0</xmpG:red> - <xmpG:green>145</xmpG:green> - <xmpG:blue>58</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=90 M=30 Y=95 K=30</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>0</xmpG:red> - <xmpG:green>105</xmpG:green> - <xmpG:blue>52</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=75 M=0 Y=75 K=0</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>19</xmpG:red> - <xmpG:green>174</xmpG:green> - <xmpG:blue>103</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=80 M=10 Y=45 K=0</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>0</xmpG:red> - <xmpG:green>162</xmpG:green> - <xmpG:blue>154</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=70 M=15 Y=0 K=0</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>46</xmpG:red> - <xmpG:green>167</xmpG:green> - <xmpG:blue>224</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=85 M=50 Y=0 K=0</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>3</xmpG:red> - <xmpG:green>110</xmpG:green> - <xmpG:blue>184</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=100 M=95 Y=5 K=0</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>23</xmpG:red> - <xmpG:green>42</xmpG:green> - <xmpG:blue>136</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=100 M=100 Y=25 K=25</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>23</xmpG:red> - <xmpG:green>28</xmpG:green> - <xmpG:blue>97</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=75 M=100 Y=0 K=0</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>96</xmpG:red> - <xmpG:green>25</xmpG:green> - <xmpG:blue>134</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=50 M=100 Y=0 K=0</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>146</xmpG:red> - <xmpG:green>7</xmpG:green> - <xmpG:blue>131</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=35 M=100 Y=35 K=10</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>164</xmpG:red> - <xmpG:green>11</xmpG:green> - <xmpG:blue>93</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=10 M=100 Y=50 K=0</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>215</xmpG:red> - <xmpG:green>0</xmpG:green> - <xmpG:blue>81</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=0 M=95 Y=20 K=0</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>230</xmpG:red> - <xmpG:green>22</xmpG:green> - <xmpG:blue>115</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=25 M=25 Y=40 K=0</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>201</xmpG:red> - <xmpG:green>188</xmpG:green> - <xmpG:blue>156</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=40 M=45 Y=50 K=5</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>164</xmpG:red> - <xmpG:green>139</xmpG:green> - <xmpG:blue>120</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=50 M=50 Y=60 K=25</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>122</xmpG:red> - <xmpG:green>106</xmpG:green> - <xmpG:blue>86</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=55 M=60 Y=65 K=40</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>96</xmpG:red> - <xmpG:green>76</xmpG:green> - <xmpG:blue>63</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=25 M=40 Y=65 K=0</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>201</xmpG:red> - <xmpG:green>160</xmpG:green> - <xmpG:blue>99</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=30 M=50 Y=75 K=10</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>178</xmpG:red> - <xmpG:green>130</xmpG:green> - <xmpG:blue>71</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=35 M=60 Y=80 K=25</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>149</xmpG:red> - <xmpG:green>97</xmpG:green> - <xmpG:blue>52</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=40 M=65 Y=90 K=35</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>127</xmpG:red> - <xmpG:green>79</xmpG:green> - <xmpG:blue>33</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=40 M=70 Y=100 K=50</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>106</xmpG:red> - <xmpG:green>57</xmpG:green> - <xmpG:blue>6</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=50 M=70 Y=80 K=70</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>64</xmpG:red> - <xmpG:green>34</xmpG:green> - <xmpG:blue>15</xmpG:blue> - </rdf:li> - </rdf:Seq> - </xmpG:Colorants> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:groupName>グレー</xmpG:groupName> - <xmpG:groupType>1</xmpG:groupType> - <xmpG:Colorants> - <rdf:Seq> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=0 M=0 Y=0 K=100</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>35</xmpG:red> - <xmpG:green>24</xmpG:green> - <xmpG:blue>21</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=0 M=0 Y=0 K=90</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>62</xmpG:red> - <xmpG:green>58</xmpG:green> - <xmpG:blue>57</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=0 M=0 Y=0 K=80</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>89</xmpG:red> - <xmpG:green>87</xmpG:green> - <xmpG:blue>87</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=0 M=0 Y=0 K=70</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>114</xmpG:red> - <xmpG:green>113</xmpG:green> - <xmpG:blue>113</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=0 M=0 Y=0 K=60</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>137</xmpG:red> - <xmpG:green>137</xmpG:green> - <xmpG:blue>137</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=0 M=0 Y=0 K=50</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>159</xmpG:red> - <xmpG:green>160</xmpG:green> - <xmpG:blue>160</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=0 M=0 Y=0 K=40</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>181</xmpG:red> - <xmpG:green>181</xmpG:green> - <xmpG:blue>182</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=0 M=0 Y=0 K=30</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>201</xmpG:red> - <xmpG:green>202</xmpG:green> - <xmpG:blue>202</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=0 M=0 Y=0 K=20</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>220</xmpG:red> - <xmpG:green>221</xmpG:green> - <xmpG:blue>221</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=0 M=0 Y=0 K=10</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>239</xmpG:red> - <xmpG:green>239</xmpG:green> - <xmpG:blue>239</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=0 M=0 Y=0 K=5</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>247</xmpG:red> - <xmpG:green>248</xmpG:green> - <xmpG:blue>248</xmpG:blue> - </rdf:li> - </rdf:Seq> - </xmpG:Colorants> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:groupName>輝き</xmpG:groupName> - <xmpG:groupType>1</xmpG:groupType> - <xmpG:Colorants> - <rdf:Seq> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=0 M=100 Y=100 K=0</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>230</xmpG:red> - <xmpG:green>0</xmpG:green> - <xmpG:blue>18</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=0 M=75 Y=100 K=0</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>235</xmpG:red> - <xmpG:green>97</xmpG:green> - <xmpG:blue>0</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=0 M=10 Y=95 K=0</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>255</xmpG:red> - <xmpG:green>226</xmpG:green> - <xmpG:blue>0</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=85 M=10 Y=100 K=0</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>0</xmpG:red> - <xmpG:green>154</xmpG:green> - <xmpG:blue>62</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=100 M=90 Y=0 K=0</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>11</xmpG:red> - <xmpG:green>49</xmpG:green> - <xmpG:blue>143</xmpG:blue> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <xmpG:swatchName>C=60 M=90 Y=0 K=0</xmpG:swatchName> - <xmpG:mode>RGB</xmpG:mode> - <xmpG:type>PROCESS</xmpG:type> - <xmpG:red>126</xmpG:red> - <xmpG:green>49</xmpG:green> - <xmpG:blue>142</xmpG:blue> - </rdf:li> - </rdf:Seq> - </xmpG:Colorants> - </rdf:li> - </rdf:Seq> - </xmpTPg:SwatchGroups> - </rdf:Description> - <rdf:Description rdf:about="" - xmlns:pdf="http://ns.adobe.com/pdf/1.3/"> - <pdf:Producer>Adobe PDF library 10.01</pdf:Producer> - </rdf:Description> - </rdf:RDF> -</x:xmpmeta> - - - - - - - - - - - - - - - - - - - - - -<?xpacket end="w"?> endstream endobj 3 0 obj <</Count 1/Kids[7 0 R]/Type/Pages>> endobj 7 0 obj <</ArtBox[148.953 48.9473 348.055 298.143]/BleedBox[0.0 0.0 497.008 337.008]/Contents 54 0 R/Group 9 0 R/LastModified(D:20150415135729+09'00')/MediaBox[0.0 0.0 497.008 337.008]/Parent 3 0 R/PieceInfo<</Illustrator 55 0 R>>/Resources<</ColorSpace<</CS0 56 0 R>>/ExtGState<</GS0 57 0 R>>/Properties<</MC0 52 0 R>>>>/Thumb 58 0 R/TrimBox[8.50389 8.50391 488.504 328.504]/Type/Page>> endobj 54 0 obj <</Filter/FlateDecode/Length 256>>stream -H�lQ[N1 ��)|�xc;���U�hU�R�`]UE��hl�L&���n ps;�����k��f�*,Ӈ�����y9�|pýM�-� �&A��@Z�TJ0�\k���� -�`H� @R��!����W��3��S���_[9�5pQ=�rn>7.�gm��T����K�[]3�,ł�ۚ��Y∉|���dkE�0 -Ĕ���l�ѐD�� )E뚇��P���־�}�H��$�Jȯ^:+��v�ݿ �ge endstream endobj 9 0 obj <</CS 15 0 R/I false/K false/S/Transparency>> endobj 58 0 obj <</BitsPerComponent 8/ColorSpace 59 0 R/Filter[/ASCII85Decode/FlateDecode]/Height 42/Length 171/Width 62>>stream -8;Z\s5n8Df$j?V1(N)?imheG!L,EZM`!^@Lk[C#W#V#/b8eA=d*6#!gs(AL9,P_pT -G`jq_<SJLBhLUs[a_Yc7-p8>dA%mP#Ct1M$rF;\Ipss*=$idSWPrlRhc'/ANZj3Z; -^%#77Cj+-"j15E(.e;E>If6RVG<X2)!*%`aSH~> endstream endobj 59 0 obj [/Indexed/DeviceRGB 255 60 0 R] endobj 60 0 obj <</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream -8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 -b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` -E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn -6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1 -VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH< -PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O( -l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 52 0 obj <</Intent 61 0 R/Name(��0�0�0�0�� �1)/Type/OCG/Usage 62 0 R>> endobj 61 0 obj [/View/Design] endobj 62 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 57 0 obj <</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>> endobj 56 0 obj [/ICCBased 63 0 R] endobj 63 0 obj <</Filter/FlateDecode/Length 2574/N 3>>stream -H���yTSw�oɞ����c [���5la�QIBH�ADED���2�mtFOE�.�c��}���0��8�׎�8G�Ng�����9�w���߽�����'����0 ��֠�J��b� � - �2y�.-;!���K�Z� ���^�i�"L��0���-�� �@8(��r�;q��7�L��y��&�Q��q�4�j���|�9�� -�V��)g�B�0�i�W��8#�8wթ��8_�٥ʨQ����Q�j@�&�A)/��g�>'K����t�;\�� ӥ$պF�ZUn����(4T�%)뫔�0C&�����Z��i���8��bx��E���B�;�����P���ӓ̹�A� om?�W= -�x������-������[����0����}��y)7ta�����>j���T�7���@���tܛ�`q�2��ʀ��&���6�Z�L�Ą?�_��yxg)˔z���çL�U���*�u�Sk�Se�O4?׸�c����.��� ����R� ߁��-��2�5������ ��S�>ӣV����d�`r��n~��Y�&�+`��;�A4�� ���A9��=�-�t��l�`;��~p���� �Gp| ��[`L��`<� "A � YA�+��Cb(��R�,��*�T�2B-� -�ꇆ��n���Q�t�}MA�0�al������S�x ��k�&�^���>�0|>_�'��,�G!"F$H:R��!z��F�Qd?r 9�\A&�G� ��rQ ��h������E��]�a�4z�Bg�����E#H �*B=��0H�I��p�p�0MxJ$�D1��D, V���ĭ����KĻ�Y�dE�"E��I2���E�B�G��t�4MzN�����r!YK� ���?%_&�#���(��0J:EAi��Q�(�()ӔWT6U@���P+���!�~��m���D �e�Դ�!��h�Ӧh/��']B/����ҏӿ�?a0n�hF!��X���8����܌k�c&5S�����6�l��Ia�2c�K�M�A�!�E�#��ƒ�d�V��(�k��e���l ����}�}�C�q�9 -N'��)�].�u�J�r� -�� w�G� xR^���[�oƜch�g�`>b���$���*~� �:����E���b��~���,m,�-��ݖ,�Y��¬�*�6X�[ݱF�=�3�뭷Y��~dó ���t���i �z�f�6�~`{�v���.�Ng����#{�}�}��������j������c1X6���fm���;'_9 �r�:�8�q�:��˜�O:ϸ8������u��Jq���nv=���M����m����R 4 � -n�3ܣ�k�Gݯz=��[=��=�<�=G</z�^�^j��^�� ޡ�Z�Q�B�0FX'�+������t���<�u�-���{���_�_�ߘ�-G�,�}���/���Hh 8�m�W�2p[����AiA��N�#8$X�?�A�KHI�{!7�<q��W�y(!46�-���a�a���a�W�� ��@�@�`l���YĎ��H,�$����(�(Y�h�7��ъ���b<b*b��<�����~�L&Y&9��%�u�M�s�s��NpJP%�M�I JlN<�DHJIڐtCj'�KwKg�C��%�N��d� �|�ꙪO=��%�mL���u�v�x:H��oL��!Ȩ��C&13#s$�/Y����������=�Osbs�rn��sO�1��v�=ˏ��ϟ\�h٢���#��¼����oZ<]T�Ut}�`IÒsK��V-���Y,+>TB(�/�S�,]6*�-���W:#��7�*���e��^YDY�}U�j��AyT�`�#�D=���"�b{ų���+�ʯ:�!kJ4G�m��t�}uC�%���K7YV��fF���Y �.�=b��?S��ƕƩ�Ⱥ����y��� چ ���k�5%4��m�7�lqlio�Z�lG+�Z�z�͹��mzy��]�����?u�u�w|�"űN���wW&���e֥ﺱ*|����j��5k��yݭ���ǯg��^y�kEk�����l�D_p߶������7Dm����o꿻1m��l�{��Mś� n�L�l�<9��O��[����$�����h�՛B��������d�Ҟ@��������i�ءG���&����v��V�ǥ8��������n��R�ĩ7�������u��\�ЭD���-��������u��`�ֲK�³8���%�������y��h��Y�ѹJ�º;���.���!������ -�����z���p���g���_���X���Q���K���F���Aǿ�=ȼ�:ɹ�8ʷ�6˶�5̵�5͵�6ζ�7ϸ�9к�<Ѿ�?���D���I���N���U���\���d���l���v��ۀ�܊�ݖ�ޢ�)߯�6��D���S���c���s���� ����2��F���[���p������(��@���X���r������4���P���m��������8���W���w����)���K���m�� ����� endstream endobj 55 0 obj <</LastModified(D:20150415135729+09'00')/Private 64 0 R>> endobj 64 0 obj <</AIMetaData 65 0 R/AIPrivateData1 66 0 R/AIPrivateData2 67 0 R/AIPrivateData3 68 0 R/AIPrivateData4 69 0 R/AIPrivateData5 70 0 R/ContainerVersion 11/CreatorVersion 16/NumBlock 5/RoundtripStreamType 1/RoundtripVersion 16>> endobj 65 0 obj <</Length 1037>>stream -%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.4 %%For: (\614\703\623c \610\752\613`) () %%Title: (108-badge.ai) %%CreationDate: 2015/04/15 13:57 %%Canvassize: 16383 %%BoundingBox: -1 -320 480 0 %%HiResBoundingBox: -0.001953 -319.998 479.998 -0.001465 %%DocumentProcessColors: Cyan Magenta Yellow Black %%DocumentFiles:/Volumes/home/rep2img/108-badge.png %AI5_FileFormat 12.0 %AI12_BuildNumber: 691 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([レジストレーション]) %AI3_Cropmarks: 0 -320 480 0 %AI3_TemplateBox: 240.5 -160.5 240.5 -160.5 %AI3_TileBox: -163 -439.5 620 119.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: -217 18 3.66 3349 1293 18 0 0 46 134 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 7 %%PageOrigin:0 0 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 66 0 obj <</Length 4983>>stream -%%BoundingBox: -1 -320 480 0 %%HiResBoundingBox: -0.001953 -319.998 479.998 -0.001465 %AI7_Thumbnail: 128 88 8 %%BeginData: 4834 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FDFCFFFDFCFFFDFCFFFDFCFFFDBCFFA8FFFFFFA8FFFFFFA8FD07FF %A8FFFFFFA8FFFFFFA8FD07FFA8FFFFFFA8FFFFFFA8FDD5FFA8FFAFFFA8FF %AFFFA8FFAFFFA8FFFFFFA8FFAFFFA8FFAFFFA8FFAFFFA8FFFFFFA8FFAFFF %A8FFAFFFA8FFAFFFA8FDD3FFA8FFFFFFA8FFFFFFA8FD07FFA8FFFFFFA8FF %FFFFA8FD07FFA8FFFFFFA8FFFFFFA8FDD7FFAFFFA8FFAFFFA8FFAFFFA8FD %05FFAFFFA8FFAFFFA8FFAFFFA8FD05FFAFFFA8FFAFFFA8FFAFFFA8FDD7FF %A8FFFFFFA8FFFFFFA8FD07FFA8FFFFFFA8FFFFFFA8FD07FFA8FFFFFFA8FF %FFFFA8FDD5FFA8FFAFFFA8FFAFFFA8FFAFFFA8FFFFFFA8FFAFFFA8FFAFFF %A8FFAFFFA8FFFFFFA8FFAFFFA8FFAFFFA8FFAFFFA8FDD3FFA8FFFFFFA8FF %FFFFA8FD07FFA8FFFFFFA8FFFFFFA8FD07FFA8FFFFFFA8FFFFFFA8FDD7FF %AFFFA8FFAFFFA8FFAFFFA8FD05FFAFFFA8FFAFFFA8FFAFFFA8FD05FFAFFF %A8FFAFFFA8FFAFFFA8FDD7FFA8FFFFFFA8FFFFFFA8FD07FFA8FFFFFFA8FF %FFFFA8FD07FFA8FFFFFFA8FFFFFFA8FD6AFFA8FD6AFFA8FFAFFFA8FFAFFF %A8FFAFFFA8FFFFFFA8FFAFFFA8A8A8FFA8FFAFFFA8FFFFFFA8FFAFFFA8FF %AFFFA8FFAFFFA8FD68FFA8FFA8FD68FFA8FFFFFFA8FFFFFFA8FD07FFA8FF %FFFFA8FFA8FFA8FD07FFA8FFFFFFA8FFFFFFA8FD6CFFA8FFA8FD68FFA8FF %A8FFAFFFA8FFAFFFA8FD05FFA8FFA8FFFD05A8FFA8FD05FFA8FFA8FFAFFF %A8FFAFFFA8FD68FFA8FFA8FFA8FD6AFFA8FFFFFFA8FFFFFFA8FD07FFA8FF %A8A8A8FFA8FFA8FD07FFA8FFFFFFA8FFFFFFA8FD68FFA8FFA8FFA8FD68FF %A8FFAFFFA8FFAFFFA8FFAFFFA8FFFFFFA8FFFD07A8FFFFFFA8FFFFFFA8FF %AFFFA8FFAFFFA8FFAFFFA8FD66FFA8FFA8FFA8FFA8FD66FFA8FFFFFFA8FF %FFFFA8FD07FFAFFFA8A8A8FFA8A8A8FFA8FD05FFA8FFFFFFA8FFFFFFA8FD %68FFA8FFA8FFA8FFA8FFA8FD68FFA8FFA8FFA8FFAFFFA8FD05FFFD0BA8FD %05FFA8FFA8FFAFFFA8FD6AFFA8FFA8FFA8FFA8FFA8FD6CFFA8FFFFFFA8FD %05FFA8A8A8FFA8A8A8FFA8A8A8FD07FFA8FD6EFFA8FFA8FFA8FFA8FFA8FF %A8FD6CFFA8FFA8FFA8FFFFFFFD0DA8FFFFFFA8FFA8FFA8FD58FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD4CFFA8FFA8A8A8FFA8A8A8FF %A8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8 %A8FFA8A8A8FFFD05A8FD50FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD %52FFFD2DA8FD54FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD58FFA8AFA8A8A8FFA8A8 %A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FF %A8FD5AFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FD5CFFFD23A8FD60FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD62FFA8FFA8A8A8FF %A8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FD64FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD68FFFD19A8FD68FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD6CFFA8A8A8FFA8A8 %A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8FD6AFFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FD6AFFFD17A8FD6AFFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FD68FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FF %A8A8A8FFA8A8A8FD68FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FD68FFFD19A8FD66FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FD67FFA8A8FFA8A8A8FFA8A8A8AFA8FFFFFFA8A8A8 %FFA8A8A8FFA8A8A8FD66FFA8FFA8FFA8FFA8FFA8FFA8FD05FFA8FFA8FFA8 %FFA8FFA8FFA8FD64FFFD09A8FFAFFD07FFFD0AA8FD65FFA8FFA8FFA8FFA8 %FD0BFFA8FFA8FFA8FFA8FFA8FD64FFA8FFA8A8A8AFA8FD0DFFA8FFA8A8A8 %FFA8A8A8FD62FFA8FFA8FFA8FFA8FD11FFA8FFA8FFA8FD62FFA8AFFD05A8 %FD13FFFD05A8FD62FFA8FFA8FD17FFA8FFA8FD62FFA8A8A8FD19FFA8FFA8 %FD62FFA8FD1DFFA8FD60FFA8FD1DFFA8FFA8FDFCFFFDFCFFFDFCFFFDFCFF %FDFCFFFDFCFFFD46FFFF %%EndData endstream endobj 67 0 obj <</Length 65536>>stream -%AI12_CompressedDatax��K�%ɕ&� �?� ������(�����8 ����FsTJfEs:+�����6��M�B A�6A�H# �YhF��\H?C���1ss�7Y ���22� w�;�;�?��~�٧�/^����p9^ ��77�޾~� R/~���߼}��~�Ʌ˗�������˛7߼x����e�?^����*���i ��><��o㯦����_|r�O�_�x��F�t��鯟}������;�.���ʟ������}�.\�A�p��W�}��7/�� �� ���o_}��՗�������O�/�<^�v��?��f}�x9��� �rY�|'�_�s������ͫ�?{����7�^�|��\~����O�})yv�7/_��ˋ��g���;���˛o~��_�~)_���o^u��77_�_}��剿~�� o3}����}����xǻ9����/���o������\��s��#ח[�� O���+�|v���<��$��?���.D�����w��������������������?��o��'v�7����ٛ�@W�׉?��櫯_���e�8^&y���_�Xy4�,�;�"d��ɛ�c�}��7���?z��F������t�cG�����/o���o�3HE_�O^q�R�o�_�|�7�斟z�/����������s����?�� ���~��ͫ_��%��S� 7_�˜/B�E��Pp��e��vQ��Ծ���������O߼��ū��M���͋/�Q��Ŭ?��s���z���o�޼�[��t�I7;�˟|&W�z����Wx��`�ȥeƼ|�����ο���~�w���(��͋W�s�#�e��g/��?����o��ѫ?=|O�/o� �����⧿�'�E�����ď_ya��� _�D��_�����Q�lg ����;/$����B�(g�k�����7.�p9]����������ujw�����/��?�,����oo^�����٫/.�ѳ7_�;?{��ճ7���^����[]��ڻo��/~+y&C��{�i���O�!�����O�г��~z��oV��m7U�C��a����ϞcѼ�ؿ����\�����-����e�g��𒿼�&�c��n�u+?� �~�J��� ��k���ۂ���w'���ĝ��w�ծ�З�������_�y��o^<����]Ϸ�Ջ�ŏ�w�K���}���/_|����~�Ϣ�Ү�������_�|��o��|���{q�� ��n�w��_>{��7?~��7�޼����a���ū/��|�틷7� -"�| ����<������7�<��a�\ā~����;$��������ͳ/^��!���z��+��4҅�d8G�u��b���?��^��P���d-I�lA���#��z%�Ȇ��ٱ�}���IZ�'iQZ�楹��w�Ү��z�n�+�fi[��vq��yin7��kiW��v({6�/������<q��8P���K*������j>��y���0��M�ӕ<�~*�<MS���i����y�K��S���1]��<�.�iJ)�䓋��J^�>�8�)���.\����](a -y1�����Q^���~��G�W\��;����q��9χrr�|џѥ��d?���ϼ������x��W��S^������~k�������<�(�%/ �X۵�o��a<�v�ڵ�4�6$ך�Z�֖Onm�6�V�����o�����NJ_��(��� s%�,�f�ٳ�9t��t���Q޹� �Y&�,�n'S�0e^ϣ�4/�2r7y�d�Y"{��G����E-�זdVO2��,�������kY*Nf���d-L��������� �Z���e�'Y��,�"kq/k�(+�ZV��uQW���\�WX���q}����3W� �`�j��� �[z�[��"\G�L���?�s�vu�>\ǣ�����c�HGy�GyQǙ�`w�‘p��x%��j���� -rx�_MW��0��|�6(�� qM}ؙ��e�Y�S�� �;�*�u�y � �팵�.'w���q<\�@�ţ�[�z9�t��[/'��(�1� -W�����ig��q^.�g�x���M�d�I�Tٱ��5� �O��T)N�^�� -�4^��R�NF��~�h����{��gt!K��N�8Q���(떝F��<� W]���������#��{���]�4�Sf_�=��������3>Sח�������?�� ]��2J�K�j��/�+��̼"�o]��M}dGr7�c�d�@�Pe<+��+)����?e蹵�Ӫ�M�~������u��wݮ6��imC���7m�ieӦM�چ�K��k ��7m\���j�_����F m�ʦM�6�Ҳ�d�⦅M����0���Z�2"�A@�����-��PX���"��(�y�#r7�s^a[��(����Δ�&�򑒝p%ix��� �Ã���*v��{�B����C�ki��c�S�Qz�up>U��T"�B ���8�x -E�Y6�L)e���Ub+;R�<@�qr��ǣ�p�����7����+ -�G��إ!H{���!tꚊ=C]2�!�^�dW��NQ���3 �M.L�:q���͋6�#Α�[� -������-;�H��� z��:�K -x�Y{��Z:���ݾȴ�l �xn���vqUi��d�0T_����@Y�MK���P/Q��[�@eDՐ�ڇ��U��T'��Y�W��:O�XD��'�Ѵ ��2�0� �ߕ);�:� ��W>r�9�T��C�[�s -����T�4��@u�L�����s�q�� 8=trdN�@�9�����(�+_�q�TqyD�o�q]�]���6-nZڴ�m��\M�6oZٴݦ�� ����7m��^��d���vC���6-nZ�6�_��M�6oZٴ����r�ߴæ7����UM�<q�*+PW�����x���&P�KTc��@��2#��@�fOt�H���0R�q�u�H-S�Rp�X:�e0��W[��ҫ.Uy��S`,u0%�Wc�"SU�^���L��T��J�@��j5;-�֘b�Rm|[7�z3���)>ش�ӷN�:묫��N�:YꜨc�#-����O8(2"{y-�9�eq�S"%6�6EFk/��(�}��Iv� ;\��k�)a7۫�#�DM�*VR%����H�u~G�>R��LګB����ӿU�N���k�О��k��Z�i�{N�+ӊU#�ԙN�'��t`�#'��i��|�\��,��đ�9�{���tSZ!��`[������u3T�8R�8P�Pq���s'��j�5W�}�q݇׻p݃�� �X�|0W�ca�*o�|Ƽ���l4����5!e�W]��8���kTW��S]��V�mӸnk��V����C���I�w���p[뇞r!>�E;-�� j��F;p���Ѯ���<u�0p�+�tf�Q��Vˇ��d� �Q+֖V���v�;�m����zh;��D�4���MNu:Ҷ[^Qf=Rn=���R(�ΔcѲ�BI�ʎ��d�#�i������3�:+D}V��rP R���6��kw�޷om�{��6�x+ĩ��p^~;�#�}Q�KJ )�@)d���P����|�D�*�3^F�l��X< ��X��D����+NSh�# 3�j7 -�� }lG���8�F)�2x��vU�1���S� O��"B���!B�,"?��"$���B �a��cNvRInR�"��DRe�E"�G�IT(�(�,2IC_�TR咝�%&�@6���ސMD�͘�7���� ��!薐 =̺1 ��D'��!���F���8p��D8x.�{Gmj`�+4��>e@�A-j�� ��Ƿ�k�_�6�9��R�9r����&�D�<i2��cZ�������1趭�������Y�tU{�b�� �^w���Sp�ș�O��kJ�#璣�[�Fgx�"�q�l�u���vY�/MN�[;6��X�ҡ�͋�؉`0'��7����Y������2^���Bv���� 6��k��cjc�?�� ��*�[m8����6 E���$@w�e/Z��S��R+ H�K/���搫$��[�U��~�ثox��?t�s`���ݞ���o5Q�=R�ݙ��)�"m ζ`l �N�����Ɨ�le gS�M�mS��"nf�ظ�s�3������2���ܠ�pe�����@�D!��Fv -�� -6+�<�|e�=����^́�4*=S>�-wma}�/n[UT��r�Q���lj�F�(r��)�s7P�W�t"Ћ���iL�bi'��l��� 8 �Y?F� ����s���~%�ŷd�y2q�d�/kG��l�=�Y&��bu���Pt��7J��V6m>Ӧ�S�-�e���b�(���CT��bpg�͡�6� �6���qm�w5]����9�|8�Y��s�� -�a�5��BY������[���ƳϷ-�x�6`�%�S] ݜ�P��B�=zs��tΰq���8�6�`9dž:Ct���`xa1hg�#��k�s|X ½�= ��4l�Y��d�[�����J��s�M�]$]E�T� -��<q�Bq^��*���5�� ��sM+��,�Rn6��-tVl�i��F*�U��Sd�2�c4A��p�j� �<� C� Y�+�L��vx�g�&7���dr�d~Re�ӌ�C����Ͻ��Q�5��Y�����8�g?����v�Ҿ�ު�Y����[e�QG~3q�^��v��t�n5�᪨��r����r5u�+'B�5��0xV�U��3R�ui�2��|b�����7�~u�~EAPx�@q��2%Z5V�,�В�Oc��xeP� -e#���b�%̡y/VQe2,35��Y«D�7Id6|(��3��6fW�N��ڿ��^l���l�Wf���H���9U�7W����od%Cl���ʷ -�$�3��V��7B�"@l�Ρ� k�ՍӪ�� ��\���{�B��9�^ۦ����tVv�ye�Y̎[��Y� �3��>��h敥���-ֻłwU�ac���Umi�Y�'�j?�K8���U���G�Uy���������1D[�1F[��SS��$U� ����nbd������h��G{��v�:��0�`^���� ��ȎF��2�6�S�h 6.�3��Ì4ԭj{���>���窝�SQCqEW�1�ؕ�텁�x�޶���T����z�r���f��K$gD>\��2T����׋��Ld���/؊Gn�k���;���>tJcu�8Q1��.�{e��iv�#�� �ŋ�.�8j��c:T�΃��&W����^���A$8�"������2O@��֗K����|��xoe��O��#���l�>�e@�A�dwY������-����Jq���/�1�8�e�j��_�8�qӟ\���������|?�� ~�eYN�����CT��e邇 !SI�I� �kB�*�G�"�����8e��%#�y�dV;�Z1U�oڰ� -V��!���ʷ���f"\��ŕÛ�=n\��zp�N6�Z����}�� o�½Mx��q��v�Z�;m��6�LU���0��.���w8*y�!�|��-m�t�qi8�^��m��ni�C<q��� =��q�U�q����W�^�@y授޵Ika%�̞��m�TLX�/�k����z/�x�P�^4t.Up��`V,c�X���D�5u�P���B"��g��W�}��6��Z���_����g���楶3��X��67��JQU�*�ZC� �6%��;m���Ic(�#@�V-nZ>i�O[����ir�����������c�g�ɇ����^e��}HA2��0���R�6^ � h.NղW-��n�ݸ��0@�J��Qѳ������������S���(�AR��N�7��B��-�O�]��`�u87�2w���>�7��. -��݀ϡu�tZ������B��hC#/11���r�_ꃯ[�pi��nn�P�*|gAs�u�B�Ԟ:|� �J~������D�u"E\."T'��H�G�@^fٱ<�G��Zi(�#��@���a��b�؃b�@s��E*ְ �0|g�a ��`����x�лo�̕��U$҂ǬИ�68fAc�5� J��)��P�{a �� ��|_���!.�ij>5���h�v[<`�jqO�pO` xҶ�l����ۘ :w��x߼�ˏ��vX����Ϣ�F�)W"$D��#�ʁ����%0\튼���6X��F�U��М�����y1% ���+���\�����H���1��jt���,dIs3�LGf<�`e���YTy��\p�hq�~�.[D�a&��4�CC�+ڼ Υ��L���Z��8�d��u,f�έ`�*��$�+\ [lj�Jϵ�=m�X����amx�d�h�C�{������ۗo���F�^C��^^;����bs�Z���kov���߰� 䚃�U3��Y�0�]� �&�3FV3���A�>��9 -���Вe3���=X=C�+�-�����wb\�A]�p�5<qش���[��~��3�Ѧ�6����Էa���[J|����Nhv�њc�Ôi -HAr9˦�p7��&���.V���ϐ��ҷ��=Jw�o�'�d��Y%��z��4m�X��3��gMj�SH�SH�SH�SH�SH�SH�SH�SH�SH�SHʭͧ������������������!)��h���U���l��8l҅�wݚ=����C>�sK���.}�K�����.w�p�!.����o���5gaή�!�9�{��4����j��4TZѾ�������!����a��:���o~ ��-��‘�p��Ie��I��� [����i��=ij��ؕu;�f���(��Q��%�����a}�+�P�L�S��kK*��P5�`�<2`t[Y����p�Β\k�� �?[�:<t�a�N?sO=���X�����`L <)4�'u�� x��4��H�ب/}��{�7���{D-��\�6�m�m]��,�n�"�Mx{�s���1)�t�%��.�%�:��G�:�m�&ێ�9�Twu���Gu��7ϋy�1�w1F[�6ElU��Eɾ9ܛ��%��q�|�!� k!��8 �B�,��◬��_�ӥ�>�8�K�3�|\�(s#iVv��l�g����.M�.=BOg_)g�+�N��t�'9ɭm]�|���[3��f&�픧f��T���֏�q���|kX�Z� -����Č�vFg�r.ţ;��gP�x���0�S��!'�y��������5�~��<d��ab����];tI#ͦ0��3W� �9����t���T �Bu�zJ�Q��n��qy� �X�xY{�&re�4-w��L�e�o� k� V�إ��2@c� pc��L�}d�Tͻ[��#_�4�f��h����7V��k˼]@�哭Y��xA�fW��[�|u���"��������W7��k��6׋�ܼê���r��r��+f����G"s&�f��s��m�]/��������j�[�-�;=��j�k]Q���QS�j��o�����V{h肖j�R1�q�q_�ī��L7�-�x �xG�e:[��Ʒ�5^g5��ƛ272c�������zD�T��6iԭP4����.���> ��F�A�4�7q�Oc�k��Z�������ct�Q��?[WλU����Ő��V-zͦg�L��čQ�y� ��bۋIJ���hkD�KnX����tW'�f[_��h��lX���z��=ʶnd�.c�"v�[�y_�����y���Пiwy�7�k�U�V���j�=��Z��M�,T8�W�H|n��� �ɐ���x��M-�B��r����@���Z�C)m��ئ���a0/�NW�BՐ��{�g��u�����@=�j����FXD�����]P�.�>�bjv�}��&$��wG�;9��v+���&Ҧ������*<������GW,L�T﬊�-e ���V�U�:V�p �R�,����~9&K� e�E�b�ճ��<��!bqh�TU�+��v���k����(����\0�pP-U�����u�w\�X�����.�i�зE�Z+R�Y�֟��6lT��ڹ�ᕪ5�տnk��=@�vK�_̭��;�5� U���B�˟U�5˓Q�����DK+�Y���Z�̥>fhF҄�B�+�Y�g`�x�T�T�4 �3�=4oA��i0Qj��j\�Y�k3}��OT��u[lCW-mQ)C�E&u-�Z��G⺝s���њl?��������p��\�:)��r[�Rzw��(�$WK���$š˙P�:o�Z�:ɟ�-�F�O*� ���ZZ����TȻ��,Ж�LŪzWl֟Z �f<���j��>�LK���^��ڴ�ZL�u�_��ՏϴS%z{�1�u��]��9��D�V�mc�t\�C�����h�6m�ٝ~NW>9�p�}n�N�謅sm�_�=���C���:����\<m�v�.�{��{1�j���܄��R4IJ��(G�Ci���l'j��^�m��ꡭ����,s-|�o��!ZhߌiSgF�C��-i^5�V\�w�h���y�)�q��K� �қ�_D��y,%GZ$B�Z�ġH -�<Z.W.��oV -.E���b�y���FpfFs�(��Z���V��EH�G� -j�����}��> -� ��#T鸙b�e������w���ٽ���JT�,���Z*�f�;ݬ�<}�Dz��h"�S���� '�� vZ�`�.�u�u��;�����r�#[� ��RQ,��V�����erʘ]=��yL�3i�p��R��8-N]��VҮY�1K7��GM�Ճ�ʒ��H��qZ�(-���8�*���)b���C�8�� WU�@>h��Ӹ���{�]����k��1OG��=Z�/ `Y�)�X�h�3uh�l�,�-���D���1MW�d-�)�(��J��8��s�t0�!#�,������"r�(�`?�����D5�T,4l��j��7�D -��� ��ԎY�u��j������{.��� -�}`L�����E��u�[J0���K0�ê -��%���ዲ���9�p9�Y��k|�k�-��t?t�-� [r]L�q~_:���B��{c�s�T��[ � #�'^��h��2㰉YLj�����ˇ�f�������U�>ܠƦ�|�V2�m ��x��}}�Ny֎'��^9��rZ�ʓdⳫ��^������^i5�^y�ysh|wq�l��֝��ޖ >��@��Ow�%~T�����dN��x~�r�K ���0Oc��uo��;�s��C�W�^�ϟ����n>b�<G}X������~E�����evy��Y�U��?�e���ϭ܏���֬?�f=Գ�����GE�I��m!j�Ħ�x����?U{��k{o����m��t��鯴�U/k;/��P�3�<M�k���U��p� 9^�'o��6�c�}荇�������焔��r*��;٤�L�"�P.Y<~��㟤����ک�b��X,�wY�-��Rux?]K��?���\��im�چ��mV)��ʱ�b����u��M1�%A�o�1�f��lK��Z�~�ڟԵ_�jcMO��/� A�O��XF�7��S��q�m���G��l�A1�X -�UL^�W��W���s�_���Y�o�c��;��^� �&k�3���ҍ�E�' �w�R~����d���|^O4Ňl�hE��ƒ�����Q��Y/=�y�W��)_�S���|5O�j���<�y�W��)_�S���|5O�j���<�y�W��)_�S���|5O�j���դ|9E��#������o<cM:�;���MzS5쮶-9�N�bm�_�(g�Y���Z^��S�A�t^#~�]�#_P�h1���g2608 �[�b�ȍ���}�bՇwd���_�(šӉ������'�m�S�^�>Ŷo� �:sob�j����S�Y+��,�*����vR�l[������U܃�\t'�BuC-a��K�{T�K`��`;t�^�O��yٖ�ٻ���R *N�n�DI�)R��' c��<f��g-�@�L��ZCXUX���X�@�:R����?5NC�e^�?�s�� ���e��]��R}u[\�b�Z�oo�pMҤ�ڣ�R�XY�|���*_���}���V�����bml�.+.���b��*Xۯ��[�rZ���ůGy�W]���`��d�!x-��x�u��e�+PӅ�����A���]w -�@��ӊZ/��9�� �m��5 '��i�����u�Gc"��X�vM���q�� 5t"�������2�� Mn��4������x?���8�c�H~�1)�>ҧݖjn eޙ��]#} -�iDo7գW>���i�݃���:{�p�Y��΀�ȏ�j��~��o������o+�wO���/����õ��|h>�K�F��r��#<v���3�[ɛ չ �r��"���6��9�u\i]��n�+=���}Q�r.3J�r�;���(��zy�� �5x�Uᴟ)\��a�������p�� �4�{��SufX�2�D��U�i�$7j̰�1����b:��D�n�b&B}����fX�95f���UP]G�����4��ĘSUf?P������Z�!�x�v;t)�h�}���*:y�à�s�[՜{T�o��Ң������(�;Y���oL�l- -��D��Dޙ�So>�I�sh\&аQqʉ��+95R4�� ����3��Y`M(��gOsv<�=v*0�L���f�Ct��X[��N��\:��L��>��N�}u9���9�g�yK=?��`?,����IV�`�s+�$n�^7�����k���T����i�5XxQ~4dX�G8u�� ���S5�=��C� ��:����66<u��e���' ]@�9���Z�=:�4|��tVAZ��Ã���N�y%6�h�k�̦!ݣ yؾ�9;��:ҩ}�T�C'E߭'��C9�� [C����M�@r^U���`x��|�1q^G>i.�5�z�?�$��"W���9��IpX\]����VY�:u�;R���������[%z�e�ܫ?�(�6zll�=O�@�t~l���!(���<a���N������}��ÆN��[�>o�=�C�fڵ'�!�����y�X -�1�.A�I��������y���z�x�����)߭��R�����z�U`~ݺ[�^�ϯ[<i���P8�Ӫ��~��g��9�ڰI]x�����lm����|�=���ㇻO:�M�l���������9�?�u��!�����w��5/Q�p��c8G��E0{�z5|y׀ ]s��Z.�%zS�׵�v&��#n�_e����L��Eoݵ��j��n��}.�d(�m�����o2wقs�7�O \�2(��U��ҷ�V9vme��Fz���s���=O����ͧ�j������m�)�k�$�hý�� �� z���F! -��5;X25�����b���:����H<0�ahI�v�Vn���O0;+�Xs8���-�Vh��h"OGX��&���ã�|�i�Tϳ%y޷�"��Q�,��zDG� [37�|�5E3��,���y 5 -p�]>7������,i���� ��XV�������)ZQ3���`����I�6m>�Zb�a�'wg;��t� ;���x?<Z�;��ɬ�mʖm8�ᤝ� ��4����I���^�e��y�d����twگ�[8׆��;�6�ͦ ����û�HІ���ÿEn��}H��u��) j"����m2W�-�AYh'��p+�^����m�.g�CJ6��]KծZ�k>�ۥ`k��]�xת|��W��X]_����ͪ�W��3�Rͫ��p��׹�^l}%��vZ����_�ْ`) vK�=�Bb�vo屧��e�a�I����UWX�/\9Y�G"賬��UYˬ���*kCWf k� ,�2k�V���Z�Rkj��=�:+��A�ҽ�j '�!ӌ(,���,��% .�B���l �ZG~ ���́�B�,��,� v0g�e1t�. �Ջ��ݒ���s -!�?��aU�m)�׷㦝���*���;۝<���"��M(d7=n�;��b��9�&jN�������99�8�,{1������ߊj��G>cz��4ƌ%X]@���V����_��9����z"���y�X�?I��� ?^_�3�o�h�O�&q���q�p֞V��?�.�v��F�*� -w �i�Ŭ���u�z B�$�eҘ�2v`yH�+Z�d�n�E�4��zo��:i竤=0w�0YE��d�-��kU�j���H��a�6�3��6���� m-3hc��KB -K�<"�A��'�_ֲ4N�@��VV�$�ٙ}?����Ź�F٨�Yx�:l�{����0Ӣ�^8�Qz���������w����������?��������~��{��?��믽�s����фk�z�\ ����lCK�hMӵX)�;*v��u�U�u�ɫ�dJL�)Pn�2�0��ҳn��;�����u����ge�q��4l}X4��Iڞ{"��gN��t+��=���>���@�n��:���4�5ShMҽ�s�6t�`fKS��,րdI��%�ʼ�7.�Z�͒�E��,9Ąk�D;7y�It���f'W�0��~��^��=����%�۔��r�w�;9��sOީa��A�ؙDtw�ۦ�Fb��vl]�f�'z�pQS���*N������K�w�q� 0�]+�"|j���g�|M��_V!Ĉ-W�����0K�r���s~���Ǹ�Kܰ�;�;\u�k����98�<d�o`��^� y�� ���$P�5[��/��|ﳾ� k��ソ������6�!0u)��c�眧� �ۆG�����r�܁>��o_Pf&a�����b0j��%�v(��58����8��11��BԘ��b-$b:3�6RZ[��|^�);�q�ި��{]"��`I����Z��7Ll9i[s�y���&�3m��B��M��sh�����nS���r�O�-NծZ������VK *�nY��5��E�%�&t}�i~eu���P�`Ϛ2{� ��rj4W�}�\&WK�l��J�{�~��\��s �Eh���5����2�Ho�}���P�ht��BLVb5uP����:8U���R(�(�YyQ�Y�‹����(w�6���p����cȗs -}u����J^��� Ζ�S��X��n�|R��ϗ�\V%/?�#�Q4Y��b�K��&�ZJ|�*��V��W�&�k���{�G߿��������w���w�����ݿz��������������+���~��rOA�\T�c��E*d���'� ü�NX�t��ۣ�8~��x0���n.j?�����E���sQ�R�b��E�.���u�o+N�q�^��|t��! `*�����o���<AIg����A��ݿ|����ؑ5����_X*w�uU��jkU>�h�U���x�U�*����P�8F���[Z%ۖë�e���l7���a����i�==M�u�T���T�~��U��Q�73Z�T�- �n���h�yDv�d�2�8{0���~^���5y�oބգ�z�}퐪�l�l�h,��Tm��Ue9�j,�^UW�x�X�QϛQ?Z��e�-�pRƸ��ߏ�o�~q���lKN�>#��gt�=��R����g��4��Jyx����|��V�� �A��*}�E���>§:�2�c�eQׂȫ�d�*S������8 �m2��<\'E�o��p��C��Lr�}'�����o)90����怭���Z���>�+��0�s�>�phe���f���B-���;��Ud��ٜ-wp^����fV ��'n;W2 ��a�i� $h�Lu ���D���C9ʔrL�=a��Vw�c�������������gêZe���_S�lU���� k�/�n�����]�,�+��p����L��j'�>�m򶊽LM�!u��E��q���9���u���Ã-`��t����U����yx��ݏã�������^�(���">vd�&���D�a,��\�������3�F���RF��k�-�ݣ���#jY?X��������~���������������,�%�*& $Ƃ��>Ej���k�/��5J5u�vpQ;Xg�^|+*�9���?�/��[?��\?���FN����W?{���������n@�? �5��/?{���͛W��{���h�D��WB -'� �f�� "�\�\�E�(�EH#)�};���������&���_����O����/~r�g�x��BO���׮R���J�'W��qOmw�㾇��U����wo�_<����go~w���}���ˋ��~d/��/^�}������!/��_�xy���o�����?���g����ʑq����ShA1����}^�.���b�^��?y&=�q��vvQ�e�d}e� ��A�Ȗ/��}!!��G��xγ�\�� �/S)�"�"o"]8�.��� ���2 -7r!\��zb�#J"�/G����t%ʼn6�!�"7��IoIIq���Fb��IU;"������ ��y�\GV��q�GN�~��e\�1]���E�3�cyڋP�D�R�ѐu�| %PV���,� �j���qE߼K�.˜�"��,�.ͨm�7 *�J���ȖCœ�@HS��L������D�#��'R��W�U�zI =/]B[��~��e���'� �k/Ø���g��3�#�)s�^d�a:�*����P��"z���>1�(�r9%���MA/X�0�%w�����U -MSB�r 6kHt��Bu������B ���x�R0a���D�����E���f=3L-P�ۙ^fK5�G�C�xDn�͊�Yz� ��h;�R3fSHx� �!Yoc�y�aQ3��Xy�Ӥ��G�9�w�VR�r>�X�����p3�X�Y)��f[�� �y��@���/S�G�-�J�N���gR&��|m���Sؿp�1%N��0 -�����y"L:�*�]�5�78)�0�����#[)<sn0�*U�C f�d�Fe�c�r{ύ}�X]��)�QN*�i.JXq]������`��d�(�y��O�<ˢM#�3�M�MA!����d!�:+����LZ�� -McУf�r�d$8EN�� ؙ""���[��E�uR���c�P�.3d��)�p��q��J(AF���'��B�uF�ɹ� -��w9�gʼn�f�"����25C�ͧ�Á�/ ��.sb2�,L���� -l[�P<��}�2�Ҩ]};E�� `��z�u�� ����t 6Т�Ƚ{XZ�$��+�q��� �@ A��L�/<�\����= �4�A#~!A�\�d�g�A��2�(S�����˫Aj)a�t���]Nf%�,� �H-G�0:�鲥��p�9d"�l���z�A6"  �d �F��C����� m�"�n�B(������4ʚ�Ӓ�,�ȝ�j���5flhE>�ؼ� DM���K��E�)/F�6RF0B�!{2Q�e�����ta�E1�Z�^R z5yN��r��U ���.�����e4�M��X��I� /�Y6z�� O��H��D =*�1�4ܲ��<����T���p�d"��if�^���/��qO2���g�Fdb�90���2fF��I�U�'aH�E�9+�B �@#� ��a��(/Lbb�&�y!�!��iF��8 -7���}; -���D���f�<��e���@��F��`��WP �Y��xZ���w �^�0<�� -���ބ����c{�iB��%G�C�,�X��܇�0���L����e=A'H ���G�Q.��B�d���S;k�Ή� ���u��d��CRu�f��8t$x���S�1� +*/��\�璈I�y�Ț�p!�4Y� -,2�:��t8Y�␵f2���A�@"j������"s0Q����*��i�qE�<͸k��1�}0Rh�zZ�-��Ʉ᰻���.[�F.Dܠ����I`"�t��8�j(�]d'!o�w0����桼W�<�U�GY�$�M�}\N�@���MQ�n��jy�s�Ln6�� Š\����F}0�d� �l:I�̜�ly���~��%X� -OtIe��QFs�AɂX#kTRq:�X8LD���i�d, �6l��Q6��r�F�CЗ��np �m!��"ഷI�<j�� ST�9���+���F�i��P�iG��i�`sGH�}=��1'�-�\N��/�.攳VB}��r�pD�����B!@D���Ju�@䄀� �&����-� -��6v2سȳ �E��A� ��c?�4Y�SD|!&D�'A�����AO��1���.g2B��sG���J���0�E��yNބ�G��J�i[���X�؇E8�k�<.Jz#NP.�D�y�=�P&k\X�0�J�cMi�!�S=�n�� ;%���F���+�o��0��A��[ z��G�X "�(�ĝ�Pt�D�K�LQ�4H% d��!�s�����^O��m�Է#���(���!�S��x���Ξ,��� N���Rg%����Ut����F��8T>�D�f��`��>��M� �$������D�(!P`u�g�;�������Gc#8d��?���N���*Y)cu� ��("�^`wLVdy�Î�vT�U%ʋ�����]I�����i���s���JhMs*J$��~�-� ;�����Q,,}Ε�d��=ϝ�N�H��F��2b?��P-��U݈��l���B"2 ��"kTw+hˡ -S�� n���/K�P4�\T��W= ]�<ؑ#wKLg��[Jw(��s;�~QX�C�" -��Z�M���J@@���l F ���ir��"'������3.7�h���U�K 1╃�)J'���{�d�ɪ��I"��n NT������E��m��B���Y�h��}r�8A�vD�G��d��i���4NzZ����䕐1�1�9VuHV~L䩔 "v��⮣ -��z��-���4�Id�*$l.f���Re#�ܑ�U�3��e!���E�� ���v�]� � �Z�Rz&&y���L�q�N����f��]�g�k�J6g�PT��3��3���֟�a���\R��x� �P,�� ��31/�41=�!t�6�P#x�WJ �u�I z��J�3\��3*ZƮ�y"��@�l��:���8B蛸��3<�rh ��t&4� ����X<l%�/������!O��wUuFB�혌��Q�F�J/ʛ���Q�?hKS�$�U4@�Ьv�F���HZ7*�$On�Y���"ڻ�I�:���_ܯ�}QA�|B8�h7���7ɾ¤��D�%R*�*���vP@�\��1��1f���<LG�'�Sd�p��Ji%�,3܎��I � �F�WSQ�F�~_Z����쁫B�u�^)� v���[�V�j���V�d�G� !�%���PoIi!���@R��Lv*�661��W3��a�&e�:s�@���z�v��i[�4N+8;(3!�� �Y��������[�F$��7Hx�L(�Q�S)�� J��9��R�� �*'��.�(ύ��y �q2*���cN��5nb���:��rT#�,�!��)&�:�i?*�����vԵ��#��A��=Nݞ�%�N@�I�A��R �Ė -q�z���ɤjPd�gEԡ$��6=�C��v&6b쉰�Ѹ%�V֎�����J�1� -��7��[ �軕�����DD� 0�Yu;TtOd<)��q�l��[�mA�P� -lL�� |¢ � 4=1��y<Nl��.�i�Fp!�+EQƨ�h��z˽�Vt�Q�ZY��J�m�>KZ�hs���X�L\Ueyed��oP&�@!�&BM�U�$�� O� }�? %+j�ZA�� -m�b&��pr�и}Z�:��r�;��ǁ����en���P�^e>C�쎓����p�l:�ƛ�P�I��F���� �U���%؟�P��7JV � ������5�F�B�i.������R�v� <.��^�H�_`�\(���Q�2kiӦ�M��p�G�nX0�� �IaV�F2�-5o���)�s'�F��!gSr#g�Z尪����a'Ě�j�ɉ�[�M�F�Dg��,U$a%���#J 2���(�"����J_l�v8 �F�c�!�TV�<x�U��Q�7ݼ��� b\����C��ᎽC5B��T����ԉ�8�� -]4@A�R�"P`ڠ[A4�d���!w����ڠ��ѐ�C�̊y}q�-��B�䉔6N'� mR3q9�@�c_�?���AG�F"=1( �}��,Y���v�����[�`�f"�����, -��a����D��4xbd1�q��/��Pk�wY!xeZ��O�pA-��A��Y������5�O�0�tu4"� ��j �D�~�c�Rm4%8��y�ؖ -�0��������0Q�:����9�$��&2�8�]�cza�!�;̈́�<� �;V�+��h���@tt�L�|��6<�����a)&�?+:頲�TѪY�P'�O(�}R�" �����@�I�<�tN"�(ja�1�Rh�g��޸�`�Ps�vMB:D��sBM��UpJ2�2�17W��P�;"�Ͼ"��o��뾁3'@�2IJ�h̀��UV8���`{B�D8gu�*p��G��0�4>̘PDN*�)`: �s�e��/+@��oyܨ� ��`�/:{I �����Ϝ]El� -[�x(�N@� -FJ���O�@�$~�Q��5p�:hӽ���悥J\:����'L=-K���Ӏ��)��W����)�����>�'�(�������͋W_^|o��=��W?���]9F�㌚ -���'����M��2�rx?4��F �a�j��d���ǩ�h�A(�,Z�@�A�J�S+\6l��zp�˰�EG� ߫�)q_�dih����;$D0V�q"#���J��~��C�mH�N�C�pv�Uc�"\C��&P�a��c� ��BX,��&vE|�ߋ^���"�.z�3/�) �o�7��C� fi5�l�������B��n_UيPgu,)j�qൠ�&LU (&� -��yH�� -��+� -߄T��Å{����A1-*�@��� ٥\]����w�Ơ�x��B"�sF��X� P�k TH�t�)���D�b�$(ԫۙ -V�*�� -�^��/�q��iq5���;�CB}��� h�W�4��X}�|V��U����^��I��!�u�<7��b��m�p���5���/.�@��UU�)���8�ݞ��4);&d�� -mJ&(ٜ�D͞yk�\0�H'Ȥ�\5lz.h�/(��Q��͂b�y����&sI��|qE��ȩ�B��� �����di*�a�h���!�}+"�S�?ׄ��<ydtȷY�����$��h�iTU��7�����.UB�uF���H�M�3�:Z���0HL -؊S,@:]w��DBB��j2֍��`7A�_�)tjjA���h���F�� 1���u,��/,er<�K|p�1�u� 2���a�V�4Tt�LO�G(��Յ�j�v8H�� 0S��`�A�N����T}"��lp[��#��({���N�' �17�iV<�n�Ց�b���=^�(N�G���~�8� ?��l2�=f�ZL@P�ƨ^. �P��>A�G���9�-�CO����~�?E� b/D��<��p��,@���U5���$��p�'Ÿ�`%��c�-ExM��% *F��7����L�=��9�C�HT�����f�$�� ���JN}���q����%���C�,�jdӣ��7�ޢ�� -ܠhY��Z��,}<�!�G�BLd�f��J����75cƄ��,��r�f3^��B�)��dBLn�hA��1������8�,�'�ޜz�����4���Q��;m\�� -��^pI�5`�aF�l���V�h���DN ��v+�h.� >��v�����Հ]�� T�h����3pU�u��/�����J�- ot(�Q�y0�X`�,�&�Fh9�e�2��!�c�AGgց�?U�S���ܦ�*�ģr3����!D�)��tX{C�O��'�蛟��AY��k4�.��&�7�'�!H�� �M*�釖��c+���K-°�`2@G��,�^�%|0�}dB!35�P}&ݱ � �f�X �6us�X�a�8A1�\��2$�RC�7l2?�ڀ��4�z�pE��,Ҡ �v^�HC��gs�-���d/� K�!�0���� 3���^@�������B� Ln�QD�f�S�!O���]Ojt{�O����� ̴=Y6\!�<`ށ����қ'���-z]�p������'� �1��d$!P��T�UoN%x���4�Ip���C� �#�`*e$������R3MPE����|�E#`J�_�l ��G��e�d���&�u�XU�wiJ��u4h�9Y��,��ɼ�p����1y�G�tF�ڭ�)pM�� q����2QQ�N�1�|�G�ΠX1� �Ho��9��_Q:�Ҷ����RU��p%J(��C����,� ³ڰV���ߚ�v�`��X�^�I��HO*ڹ&݋y�h*�X�Jɕ�ꃥ��*�R��NJ���Ph����G�؀�B�ݒ�((�H'ś�5�`['#G>�*��7̻��^�+��fV5o&�"�P,%�P���\�@T�_�a���p< XZ$�@k�|S G�^Q�Ձ��R�A �!���;>$x -D��5ȉA��<aL92fU�~��}F]� -<x�:��4X���O����>�ussTP���j����e �[.sQa���؛�T���0.�H�¸���=W�U���(����Յ -n���gڇ�H�6jW��ڪ48 �3��@��O�_8�d�R!8 -c�HI} *�ZH������RL -p�[�fu�����}r%fAdJ H�n��|�Hy���M�@f�$Q������0a-���S5�����3:;ò����1���'���K�l�T��!#|�� $3Zț��b��R1��"�$�f��� YeF�bV���'lES5gh®/�&�<c�r"�n�]���Fx���Db[�L -.�h��*)ภDZ@���#�Vb�����񦕷� -վ`�����d�'�� x� r��ad�b:���!�P��! :ګ�R�9Y�͢ ����J -_t����M՛B��,��U���� -X5�����_�p��Ѽb�p��C�Q�0�=�@<+�iü�fU/��o���2��3*!U��%�aةhW��Qhb���y�+QV%� ���� ]Q��l�(���4g��t\��� �b|<�K�&d� �lɜw���Gvd8��u�LƼB�z^�N��{�gVx2i�$��($��Y�K�a��#f�zLfB�f�,����Kf�tK���D�E'Ԩq��:��8 ف�쌂��YܘG`��6�M�`P(f�L¤cP󲞙4^��L�t�X���m��2�ޠ֞Q�����fIJ�Z���jv--B;���p m'�s�J�y���;�Sd�`�Um��+�U�2ZQW�7��ShT�Z��NH�F����ؚ�i����`3������+n"��%��g�� �ME]���L����ŋ����5|(�REcQ�4'�����@��.u�#�:~&ZցQ�S�����&�P�Ӝ!�p ���Y���~f�F?�ʩ�|�m4�1�^IA]�>a�Aϱ��%��Å��0=�C�(�O����8�� -Q������ ��A��"�6�$O�Vg:F�ML?�44���)�󡚭�I9���$˓�M8X|$ �B���IaH�D�~�\t��R5��L&�lЦ�l�<��k�.v+�v��3�9l��KT�5܄��̀���~4Y���̈�y�? �-�"��$�8:�>�;RN --҇8+h�\=}����!^0��B4c -�@V�^f�T ���BD�ͦ?C��6&�HDQ�� ]�e�|Te� ~L���A��Q�t�8l�_1��&]�Z���+��©Tu�v�)��:V�A�u���Ta��ޒj�k�~�Zվ�8�H�3�0�0�h8�{��yDCR��D��ұ,)Ξ�X -B�B1U Ag���DNL�z�C���r����2EY�ħ��y�5�_D|���ꖔ��}���i��{����u�l<��W�y$2H�8��;c,�a ��b*����Юu��L(�_��M𩝈c蜇#��Gș��_�T��!�~o�(*3TC�!�D��U�3�$���*6X0SFC�\��$�7!��cB�dA��8�k�6\��I�<k���6�I�U4`Z," �� x0�8�Eq�8fT��o�7j�j&s��#<�d�����,U"D��A��F  #�f˿�́������L9��V@=��7߈0G0|I&�@�g, -�<�<�߬�.�X[�`a����dK��b�b$I���h��TF�W���A � P'뚚�4V=�ᯡ�'�����^Rp��NR��"u������NԎ �P9� -�Q�[dc5����S_+sh#G�.t�9��d�9�|����y<�������7�M`+�q���e��‚�z��(h�-������Y��z�B�E�)@f���H���A(��,du:��� -\~E�d@&��DsUlYCf���,ؑi��7 x�RT$ݡ�ɏ2�A@�!2X�=!`��S�h2F(т1�tq��t��Rg��@ �vҔnx�*��x2h�G�4Tj�ƨ �Sf-u�UF�q��< @qT�&K+P���h�p�TEJ`�h��@���:P\l�t�-�T�f1r� E�ߢ�E�b��)�F��%��x��B�Y��*ɬ:��z񨾍 ��NJKp���� |1�V%Ι��GR�M1g��z]�<��5j�<��E����j� �����+G#9��E[(�jU��P�8Ϙ}�XF�!C�{��ܔω��r\�R��ٓ�4����֨�^͇b�8�vre�lf U -=���T�� ��S�Y(x߅�T1�l>+Us}0�tRk��W_� -\p�NfP���>��W��Ub�¸N�>T"�.�:�x� �m����e9p$R�LR��Qb�+�9u��:500���߆�0k"��`'��V2K�"gc����a��D&Z�J�4�0j�A���8"�P��/�T�/�Y�tG�4F�X̑�T��!�����/ZK�-Tz� �#�p�kQ��&h�)[�D��{j�ʪz)2(��3�}Zi���N��cn�0�d�j��� ^��"�� }M��=�X(PhO�A�� 58M�ɤ�<3Z�n�Յ���8s)z�����0y��hf�fp���>r̬|o uu� � �NVC�r^Rs@ &� �Ɂ��>�8O�o -"�}�h�����+�h���B��M��QPa ���Z�1�M?���5�^���,���DaH H��gSY(�c�J���<��K��xXs�� %�rV͝���!���V��[���f.��s��j���PH:�� �ٰx��s�-h�G�- ��{#2���pD�Q��5ݏ�y���6}Ґ�N��4�?Y������F��:Z�z��>a���N�k����W:q]����\���aDž�Co����J�C���̃� T��)����T�HS��d�tYl0�- rqfK�H�9�~ �1?VӺ��kN�w��O5t�T �xj߅�U҅��F�g6��gt<�ܭ�8!һ���,�`��8D�����Z(tl~T�� NK:�.fN�$��3�D��y����8��9�<z -v��J��l�晋|hI����wK'�Fѻu -�.Ǎ5a9k��H#2����s��4k�fo#&�Pi�ΖN���l�썎3�tyE��t�1�7j��i��r���w�h�$On3��۰�b�za�T+�J�,�w���`�Q,�U�lTĻЫP�*0�S(��V4�W��b��l��b6o��R�@����`k�!���m06U}Ho�0 �Y�8)����;���z65ʬH�sۗ�ʀ�d�!��E^�gE!�������z.�S����p2��3B�-�M�B���ķ�;k6DD0q�`w���Eՠޘ-�O�lA�$ M�X)+NШ̲�D�yA�+����&���LoT��e͐���4 ^��5`ۃT�d$����U���bV)5ì_)�5at�pS�����,��E��*��T�5���Ɏ˕2U�\)suh�,[��2�E��a �>HP? K�[O�Dxd8=�� -��@*�e_&������?k�hp�z�[4�(�Q1����԰�'ML� -Et=Y��iJ�j���F�2P}EQ�Q�V�l�jc�j���kc�'F�"�NB.��-��7k�p̜����`��^(pΨ��JU7R�~F�Ã$��ܙD���f�ӑ��q��]�ZD.s��{s�d/H^j�b.� 2F���c��ӕa\��H�8�D���K*��#�z�2���2���bJ+p@��X�du�Y*��lɡILzT��CWi�m`��:r�� �4p�����[F�E�*6���o�@��\� W)�Wq;���a�>�5V�l�֪�U5�4 f=x�&�*,e�b�P�}q.��FT<��9�f,��\�����vސ�u�j���&>joq������� W J �v`Qd��� ֌�&�}.�6�z3C)�V}����C�)������O+-A����.��f��8�0z��)�W��r��0�&���;D��R�>ZNq#"��1`v�De^#�� ��+�?"��+�x+��Q =cU+��J�{�k�͆Jĕ��M���G��L�C@��b��m�j#���i��������x���<�(Θ���������&K�� ����6�i��6��CǜkP�"�36�jOj"��$���̨���)�I>��+�tu��6"}#a;7O��nɞ*Eb �|��FEMS�hZ�,�*�-��ף欜{ ��1��=D��h��A-��&0A���Zv�Y�t�b�e��P$*�L#MQ����.-�;3l8�wߧN"1��r����阕S[#�i�μf�lG��V�����HC�u+�nF@�$˗�@���k���N5������if9"�E��1�tH"�]�D\�jn��(8��ŭ�R��GCO�Ġ�-t�a~K'«���?�����X `�9i-�8 �ts��;hx{4Tv&Co C�5%�S���HT�h<� -iLa5�UBRI�b�J�-������9��W=�+�]�5e�"�@��H7>;� e}[e��~l]1p�t3�4�B�Ʌ`��p��s4���(�������m#���Hy� D��P�կ*���u��3݆ԣ 0 jK�6Ds[MѐZ85c�W�tX��c�XH ���G�R@ ������O�6�8�N�tō�޿���� -M۪DD�0w�Z�NW��܈�_��!�Œ�e�?>��P���` �U,Ҝya�<5�?�S��1Qh� ��6􁝡��O��d� J���}r�'��������o>����7���|񹜠�:�O��x����׿�������߼����͕v'�M�SXl�%z*��U�1e=-Dd�M�Θgz�1�u�<$�b�Ќ�j��K�1����Bc8+#j�1Rb K�1=@�Rh�����(( �TE6���4�s��Ҙ��0�Z����3桱�&�̘��nS+3�i�"�ڕ�L�7�K�1����Rf Irfb�}�1P�K�K�1P��]�1PҔ�u�1R�4/u�H��\Vg�}E��:c�9�,v�����3�b0�&��:c����13�ܲ��(]Y��juƐ|H��T�< �]�1WP��uT�טٗUsʔ֥�Hu~^J�������(2�n]j T�����@m�,��@�-=�+���i2j�1$� -$�j�����X#�2cx��W��a��d��u�1MH�rd�Q�@?j�����F�Jc��l-Zd�Zd�y]i �+|����B��u�1�,�Jc���Jc�dG�F�J��:Y1Ꙡ�1�Ԙ�)�.5��,���sDuS\J������4��������˴�8��8���!1��UA^�o��N�n�.�*(DY֕���X�4<uK�4��s*}�1�bqK�1R��Jc��ġ�+����L�bY9@�.���(��k_j,xV���Rc�ӿhZJ��T����.50�c.K���(��Rc!0���J���˼�#%�`f��@A��u�1P�4��(�b�Rl KY cH�P�f���@�Rk�t(6�~���U�1��J+6ƣ0V������6�+r�Zm �Q��VmL6�6�QB-.�Ƽ:#.u�<s���Rm�ýN_�(,�Vṃ��I_m D�c�6F¨�Ũm�@�~Z�Qt7�ʍ��ʹ�#!`غJ�e����ʍy�s�Z�1O�iA�rc�D\+7��9�5���rc ��c�Z<e��<�����IvӴ�<�9�rc a)7�hVn����Y�7����Z_o�3�t��� A�bPO�=���<c�Lx�ɭ���0�U�1�HS+7���8V��BWn�k�1t>GY����4a�~Un�#�P��z= -�5��Zn��rc�Xˍy&Q����H���7� �F�zc���w�:�#������b -�y�zc���%�F����V�7�c�� �zca��qp�zc F���b� K�7��xN��c �cq�� �ﴂc$��}���ih`�瀭��Zo�����,�<�+8eL>��cpّ�9��cH���4� -��H�� Zo"��c�)�]�/8F�1F-t���<��c�X˔�zcД]K�7�\nַzc0��Ҫ��d��I��p�/�4QST�]��]����צVpLUr���s~Uo��Q��b�k�� -��b#��Z�1<�\ԥW7�u���c��k�Zp �� ��Bb F0h��c�e쏋LV�� ����7���r�Vo��g�g�:b�OL�}_o�Ee=��v|�Zj��F��5b�7��)!�VI,0�kY� �Qo 1��cl���/7���X�6Z��*�����V��7��5��Q,z�� ���II��W��HL ��΋Zo,0�\�V��@ ��[�1䯡� tZs~Uo �}��k�qj��tN䲪7����Ў��C+8���D ����(�\Z)1\>�<� -�a�d���(@��vc�5B_p�k���� Y����?�9�*�a�)�����"ΓVk���c�X+����ZK 5�e����c��XqLs�8�it�����8���bӰZB���ʴNԒ� �c�Vp �2�[�1=b���c�)c`�_{0}�8PK�!� ���R/��>��f�#X�-����B�zc�VR�Z�1\ Q���c�,�Zp �q� -�1�N)�cJ S�9Ƴ&�F*��_n+]�1�$������b^,�p!t5��� ԃ �ΤcX���Ϲ�2��D�K�&����$͸�8��/�%�Zb:�+�Q?b9 -���!Ԋc��Z֕X+�8���*�Vt~Uq,��� ��X`�\M��|A���U�1]���DB�K��.�|E� ��X�F�Vr rb �驖#�Ͼ�S���ZrL 1�J��d�n%�H�xXK���bY��ׁNs+9B�5B�|���}�1�=`t��G:$�TK�A�)����c^s+.5�@�d�l5Ǩ�D���j���&��X�1%�s�9��0���c�c���g�0�[�1@�r�eUs ���|+9�YPy��X#�%����{#@�J�y����c��o}^*�y8�����cr;�8���@�n -K�1Pd�tK�1�`�ni�AMir����j�11��XWq�3S=���gF~ˌ�������e�MrnG��۩�~0����Y�9h�o�r�(�� ���Z��r�d^���%�I��C�A�I��R ��,6{�c��;9ƙ#��� ���1}�9�u� ��Qn��V�:���~�pŲ«��ر��E�CԨ��u -p��ǎ�� *=�XV����bWT�� -�t�cG��c���L�kJ��$�| u�t�cR~�e>�1)�[ㅏIe ��1���C� o��TV��G%X�L}�J|l���(�LJ�|l |���jL��Կ G�o�ĦZ��j,n -��l�n� � �H:|�8�G��[o၏��cE�T�)��r� �:��>&�ww�C!�s�Ǥ����1��ꁏq�TD���~��� �� ;� ;j���(M!�*�-/|�&Z~�a��i=�K��5(S�N��C�4 -�BJ邏qÑ>�ǩ@o��ˬ�Wz�cR�,�Js����R~�c�<0�˘�co�n�R~�o}�c�h~��Dz�id��=v){���݄>�SL����l^챌�h��qʆ��6{,k�N -�f�eIZ:{L� ˸{L1��oW�XƑq�CˆK�*��伾����EK�q*dV�m��.墏5�c�Q>�����>F�7�cR���CI�]�1T.Z��x-Ƨ���-����������� -6|�R|� >�I�������v��2뺏R����D��x�cR��>ܱl���p�X]f��;v)w��ˊ��� *����Dh�NZ@�Ή�,���cG��cG ���=��) ��vsǔ��Yp�=M�1/~wy~�c����������j�c -����~�c2�mŋ��H]6�ݙV;J�#Y�P�Z���cǶrcǶ��1�4�8v �b}�;F�cW��kgՓX��n����q��K�X�&��b� -��3��)漱c�*P_�XQo���̩c��v�A�e'�P�P�NvL��a�;&%�m�?�Z�`Ǥ�U�Ǝ,�J}�c�{r9б�3`@�j���MS�.��v�`���`\��8?^옢���ϰc��i��17�=�1����c�8l:�C�k �¿�c��jl����B�K����R`M�1+�i�����<'ASp�Rb��c�+�ys��'��1�/�NU��� -��Q_�:��T)�c|��wL���Y/wLj�8 �cR~[�t�c8�����1�kڕo�J��Ꭱ���cR������'�޳���)|���Ǝ�[�ށg��}�S�#O�Ǝ�dH��j4���/uLѰ�9�P�d�M�HP�4:�l{�c��qM.AS�,)��PǤR��cz��נ��Sy�cRYfm���'�:��b�;F�Bp0��!�j.�c:ъ5n��o��y�c�R��vLCb�{Q�l���c �5��s������Y���tL#� (gU٥{�5�cex�I�x+�c�g��d� �:���0�cel��&DvS�Gu�u�O46�D -v��?�1 ��:�4T���1 �� -��1�{]����7^Ce�NCȩ>�1����m�²w�!�Ӧ�ӎـ�oE�;V̱�o��?ڿ���B+��*���1�6�v���;&Ŧ�;�ʲ4�c(�v���c��1Vø(vL$u浱c -`֜��ꕀ�Ǝi��[8��S��溺/vL��/v���0��8��u,[ν�o��1)%��b�T��6����� #ǎ)�K���S!y��S8��DZc{fm�o�B�N �X&/�/�1�����.ο�o��Nvn�#p��|�c���qX@g#��ˠOj�c�-�*<&�bnC���&�I������QV)A�WrV�&����N���t�ȿz�8à�B�)�S�7z� "5����T�Ƚ�c:��� �����p�����M�M��3�u�c��Ҝ<��İ0�E�Jo�A -��<V��1���Q�/yL��ċ;�c��/�XV�����"��d��l��%}����-�7x �Ќ��j�<&�6"�=���}}���r9�,[�Im9��1}RR7=���j���$�ɩY���p=� n���zL *?�<��17y ��P��c(o򘄮p�M���y��4uyL)��N+���i��2\&�2,u��Т:��lR@<RލH*BlM1P#�),S�!�6yLb�'t�X��w� CXy=�1������1 S���!����)|��# ��&��S��=�MӰG�y��T:�[@�MS��o/�n���<��S�x�0,�c��Z}�cl�lͭ2���)�6}��(���ǔ3!�1Rk�e�%�Z�DՍ#51>2�,��[�����d����Y�6V��)@Y��A�d����� S����� �|?JY�Lg1l�L�Ҩ��k�g(ڭ<�2��r�!�#�e;��4���2D=g ��V�2��o�^�,��n -Y&��B��I끐1�j#� *;� !�u~�손i+z�BF�����tSk��d�(��� ��%�A��Hi�� Ӥ��!dJ�r?�L�߬��Q��*(d:���B������ -�>�����<%0dQ�<_2ms����$e�U�!0d9�g�9d��� A%�!�x��p�$~s��!�g\ڋ�L���b��F)�w�C��I���6h�����9d,0yi�%�ak�2�a�I�2v�s�L��LOpȴs� -���!C��{G�'��ol�V�7�,��=7�Ls�̄�P�8I����eZ�n -MJ _�L��N!�:n*.�D�n>2�b~�67�,Sj�Ɔ�B���!d�-66�LW��<d������ 2" ��3�2���b�ԺdY"�b���g����`��'B�1���wC�4�0�mI6 aBf+a-�n�*�B�u��o�ζ|l@��x[�Q@�2�U$�.��c�)�0Ȳ�d=2D⦁ C!�2)���dR{�� �2��k��ZJzd�?��� #߿� -s[]�߿|zd�ԅ�LJ!�� 2 �_�> 2�-�̒N�� �$ k@�dZW�1� �b�H$i=2�@yd: GC�)��02���J��A��x�W=2��c[>����->2ef�ZE6����J� S)�s��x&����)�`�qf �؎�����8i8�Lv:�n -�JU��A!#�C�:(d8 ���B&� ��n�P��x��!�U:Z�!���|d\D� � C��mY!�I�1ȔK��Ncg�(�-� 2���A��ĪȃAF�̛A� �k� 2�iq�`��ms~d�L��f�����$� +��k�dJi��A�3-� �"���V.Y��7�y�k[n+d��Zx� 2���7�̄zdvZ/� 5���Ii�'�@&��� d����!��d�:2=��Z7��:�+/'��)�8'�����7��6D+:3���1hV��r=eI/�F����@���\�T��X�ؔ�+;d9�]�@V���1�̹�cz2x �-��?��X��I������8K{ d4W����R̫ -c� S���f�A��o̾d��ʼd+�s3�h��:�dJ�ͦ��� ô��_@���7� !���BȔ˳n���)�j^Bf�گ�2�j�q|��B����Cz!dT�����V�>Ɓ��aY,�2K��q d(Z6��3��!dr���> d�+02J��P������h.�b�,EB�T�ocw9&�3��Y!NG���r����J��y d�5ڪBF6�y즐 Qm -��7l� -��:���BF����P��)���P��|`?�M!+�Q�:2]i���BF�~�7�����:2)� -��L�M!��[ܧ��юd�N���L<t. Ikb��!��l�CF�F������"��`u"S6�4�C"3|2&2N"�K�ᮃ������)���| ���f��$2z��L�a[� G_��`��0ӸadJ�V�G�o+��������Ƒ遘* Y���s��4l7:"�P��T�o82Ո���&u�27�LEC�(hd�a��t�F��Ƨ�z�Ȕwm���F�#��n�V�4@�,���h�42J2\4��u��e���Yx)hd� -�B킑)uĊ2`d�T��,�?"��d8��EF�@q��f�Q ��*��<s�"C�~♰�eV����t3r�9�L��u���$��E�P7h��� ��gB�%m�"��"�е�Yd���r� �t�L�.���E� ��D�������}�20 -�n�V�]U�#S% �:`dz�)þid�����id�t�YY �V�w��)U��ͦ���F��h4�ydr�� �Ln��s�X��U��42��������idG��XGL����� ���[�id*I�1j�R�^�Ȱ~V�������pB��b���o�DlFGVe��5q�Ȫ���,����id���F�id��F�Š��7]������P� #��]ݷ!ʕ��Ơ�m��!��l�K ��<9��F���� F&�{7� q��"�o-ƜE���T.Z�EA�@�I��a{��t�PN,2�ZdX�3�A?� #ӔL�Q�� -h�vM�3��F�J9`�ȤX=C���;��9�E##�%K��F�ɉ׼id -�� 3%���|JN�b�d�)��N#�4�N�L���FF\�RS���5i�9uhdD�j422�J��me����M#�=E hd��8�f9@C�R�7� 1Ì�HB3fC���?02eH�q�rul ��ǃ"S��)nG���� -�Qd�b��o -���q�����,�Qd�/(2)��Ӎ"C��(Pd�0iv YfM���"S�$Wb�#+��|��}�����я[nh�&؊7Q�ȴ ����P�� -Y� 9�#��f�f��7�z&Xd�?���Bik�,2��XT�]��Ui_�E����&�,���g�E� -�:�,��9d[�D=��H�.ƨc�֋BVH��u� ��Bf�� d[ _���`�iĴV��A����� C�l<dR��� 2vk9�c�P�ۆ�aj������Lq�Bv)W��QB��l����Jg��n����q ���!;� !;j@�(2� -Y��(��B�3��+(dи5�#Q�K!S|0���L�Y3 ���,� �Y*�C��ky��d$��Yd���#�b�؀�I��FF��8A��P�R ���G��q�t8xd -�Z�&xd����䬬�N�<2Ug��8��0��G�^-<��Tk ��O7�,����ő��༖��o��GƋc�x��,���eZ� Y��@��#�F����)�����,�N����Q�Bn<xd(�9c�㭪%��G��|P�G���������<2ʹ�=�d�I��ᓨ�Qn ��� Y�E�pܘ*e-`��d�(��G�lk�����Ъ(o"n��pɂPW�L�'$o �6$�G���$3�?<������k�#S����޻m�V���ȴ�������Ƒ]���rW���eF�q�����s�����(:���!R�42���I�k�4�L�S5A#��5K942)�ӽidĝ�%pvp�cw���m�4��y59{���bX�7hd�r1�.�id��s�1Uͭ��K#���+�qr -����m�f�m1Pdz�Z.����k~Id�2�k� -^��A";�M"3UY� ���au��N�������T�=�b�{A��pzlnl�{.�z�9�Qd8;j'�Qd�����QdR[I�Ȥ��p��8�|r/Y6 k;,2j��򘆅��G�Yd��`�*�Y ��"���Ev����J�[ �ޱӅu�����X�C>��s����n��6 �9!`d�-�xad�X�C��i�� �#�� FvԀ�eB z�w�-�u5���$�h��]vus�L�{�&׋G�DŽ�� $ë����iv�W��d�����qK-J���(�`����e�ĩ"�u��S�D2s҃D2'���<2e��&�摙��{,��j����ȴ*�u�> �8��#S��깾<2Sk�u�qn�n����ȴb�hm��P��� Ŋ.. �h�H&a�\�L ��ݘ7�L�+�Q@����4{��-���ɤZ�3�dR:��$c{���$�A�v�@�= -m�آw��y���d꿆,f@2��?��H����h$�b������j��J�L �"��]@2Jz��<���l��G&C�ʊ�G&��A�ȰmVU���*��k�J�/pd����#tiov+J�LI3�'G�j�^-��qd�� ����x��$��qd����#�4��?$/솑{�Uع�0��y�u7A܎��x�qd��,�@�a�����Ȋ"���1��4�Ǒm�Ƒm1pd��� ��i��G�J��>J�H����m�&�ёd -] �ՃIV"�p1�В���2y[�3ɴ����b�Ic� (��=���\��$�+�|�L�1Vl��'S.��}3��a�I�>,�d[��d[ &��|��$+T|��0�TYD�g�u]+�d -T���f�)l��`�y��zo�B��d&���d�sj�L���K���0�$�׃3Ɋ�C�`��`7�L� �$CP�8�d��Y��f��Ô͙d�қ�6�l �lk�$#c�p��N+��H�=����(큺YVR߰���d[�f��#��k�6�a�S�}1ɸ��u�%?�9W�w�r�L�J� �үl���$㬉�a�!fG�Q���5��LٟJ��d� JFsw�Jv���d&�zlY 5��qc���W��d*���:C�46�����%��U��%����J� d*�����-QR@ɈT��"xcT(��঒)r�\����|�c�UN�pSɎ�T2�aT�T2�m�JF�|~sC�$�o�ی#�wA�u��J��h� *�.���d -W9O���!��Jv��JvD��Bd_߼1ŝ�>d���U� �d��,�$~�dz-L�K����� q_P�ЂIV��ȷ1jn�@��l�J�����0��u:mw1�d��i4mڰ���$���XI�rj,IF�J�n$�"c���d�������C'�d��19jLE<K��H�ؤ�[� �[�Ut �"�QI���Y�9�L}��$�C�}�*o P�lI�g��� D��� -I6�F�D2U1i� Mv��9$φ��_8��U!�F6��i�Ȗ�=,2A��1� ��c�qd^q۫:�Jm ��M!c�;� !�è��A&#�Ly���P��� ���� k݊�AV�(�!���^9�2 i���Eu�?�(K!%��1���Z{L5���=&1�r�cZ<�����ܱ�эSvJ�/'��c�ㆎi�����c�ְ9���o�� S��:1U ��ƴ��ͳ���٨15��Ƥ�_ys�@��y0cœ�<^�X�6�n�Xݐ1� ��yc� �6bL���A��B�m1c�Y��!����UHj��;`����F�}�,E{�I� �N��`�T����8b�l�F,;zSĊ�.o�X1t�A� V�X1�� ��j��r�� V�u�=�0B���C�yIu���A��-��bM���g�M������-%�J_}�a�r0��0R�+� �NZ���d�����~+���N.���'���a�\�y�a$����ݮ��a�V!��a�O}����0ҢVe��0�h����)���� C�pJ͇&�_��I�-e��I�����Q�SI{^�0e���onX�ا����W��ZĒ���a���q���ʭ%����a����9.����F�k�a څ K���"���)T�V�Дۦ�ܙa4\ȓ�B�ɻL�.�ax�i+��0y ���”-Ո�0����9,�Ša.���e��0��� RX �A)y�j�0�xT��+�����m�3W,�U���/=ښ nD�OżB�g����>|����҆����������h0��=䴛�}� ֽQ4�W�mO� �^=�7�7��A���<> -����`�L;EmZ��5��\@0u���44��k�8������00�"S��,0�-����(>os��Z,�<`{L�ƀ)��Vm�?�)S;���a�Y�ƀ�W����G�iN5���$c�� &�_4<�$��1` ���P����0=�AC�K~9h&���o �� "���c���KE$��€)9X� z%�*e2�\��O6c��+)�UW`������0 ~p߹0`�}C�8I�p@�xY̼. -�6�i�����6�f��0�<Ր{C�2��cm.��}m���9J} `�ye�0����)`� �K�ߥ� �;��0}��ޢo�>�lp���.���]�T�wý�^���R�-��8e��zQ�T/���xS�tXU47(`0a����=xh�vS��fedC�e�t]�����Š�a[R�܀�d������%���}�2Wʲl 7숎��bm�Wb�����d�;v$:3g�=O�����{. `�����$\�J~ `�晀�I���sC�$�~��@�pu�sl�`�_���^� -�U3�N<�f��у�,_�V ��޽�^��{%� f[g�m�f�m1`p X��"k��ZL�5��}�~T`���n����݋����)%�ŷ^b�P����3 �[�kM��߽��ꆀI��M�K!=B�A4��S�!`v��7L��Z��o&Ǟ�J�|/��P�~S�0���j���N�$&���FN぀� �LB�B�!`X��y`����`�4T�� 0^�I�b�iiLb����UK0��p1�� ��^��v �=A׿��|�8- �}-Aye� ���O�0=����0��% �|S���(������f���m�y�C -�|��`S�L�o<0 -��� -X���\�Yn'��c=0��N����+馀a���c�}�� -�j��� `Hclk ��rZ�M�S�ZY����X�;�K����-��a�j-�2���+;���b_}���8]c��t�u3��/Guc��wF�K�yn���J@�{�!�_:G��M�� ��&=�E����F� �5��;p_����W�}þB۬�7v���}�.֗~x�-����mZ��%�������ڔ�/��ta6�+Q�����[*U���¢�����8"�m�D�B���Y_�bu�#��E]I�/�K����%��AA�R�����Z���*�eӓ�/^�h�M�����I_k�m��K�t~��.,�jz�^8��C��(� ԰���k���J�ȝ=��>���az�Z�͢�8]�T��:����Tgz%+!����$��� U����R�<�K -��Ӌ���`zY��o�^(��>L/�,a��u�B'A�J�w��0��غ��a�gzm�az5�^���"x�.O{�u���XIu�0`q���c�v8(��,B@A1�!�gzm�az՘^�dL/����~�^���� ���� �������gz���\��e>bz�o��Ƶ�z9L/�QK͇�u���u�`z�Q(�V�*���M�>B�%�C��o�W(��QC%I@��3�~`^�i���q�nSWئy�<����yI�]�ӼP�󽈘pf��K���C�B|kӼp4ZA� -��>��c��$���u)��A󒿕MeA�Z�ZT��v��h!���U�����&�|��ԞK�1@^#���K#)q0^8�_����as�N~�Bx�F���e��p��.ej���.��V�F�h�P���5�]���i���;d=�.�\� wA����2�7�� ?�>���.�҅�: �#h�ь٥���8p\�Z�K�Ϭ ����v �>�.Y���]T�~��s�� `�.^��5=��p��lͮ��i����)�� Ӧu�u5h]�i*MA��}ŔuӺH� -Z��<8?n\n����� �z>�.���/߸.;hUܸ.5���%��]X.��9��������rú��.Zf4A8� _}��EG�J֥~=�*��#�a�����M+�֕�����8N�� ���T����oД�. �<l�֥����E�B����h�o�X�����q�z`]R����֗� �ҽ���Dð�Ӻ������Rd���2�*5֓�ٰ.��0i`]��Z,�`] -�ܰ.E!��<�.�VI�.�N��S�$�oXjP,�`8���B|�au�OeV�Ս��Y]Y������,���.E~��nX����Ӂua��i����;�VW&����R������o��� ��e��������.)��6� �o�7���~� �B)_9�.r�7�K*A� ��Ec��tylqyúgɵi]0 -Vش.�)���K��<��� ������\�W�u�2�E?ץ�˘57�Ks��Qmh�gn��຤�au����6�ˌ-��⺰��E;p](��q\J/��l,��u�CP\��D���֥&ĥʲM뢲�[ג0a�`��l����Ѵ�|x]��1��s�. ���u�v�^�y]<mښ�+�_�p]9�j�%��E��gHv.�V��.����%A����H��<p]�U ��ˊgl��q]����<$���u%\�r}p]��č�=��=p]ZB߸.j�Fٴ.�^�fк8K���֥e -V_A�҇fu̥?~���w������.y�2���B]� u)��|q���WoN��^��tQ4�K����c@�4qO�����ʍ�R�h�q]�[b�쀮N��z�\؈�z�\z��#�(U�N��su���p.��7����r���է�\6�K[1����⣦��%���2ס\r�ɣm(��b|�ʅ�5둀r%2��n�Ң������[��EX� Y@��p���\D��W��J�|�/��<��)!��\֜�%łf�B�cr��Ed5�\(+�`r� 9Dk3��9�U $����@r,P��ArQ��|�\��)�u$�-�� Ʌk6#N0��s���L.���d�H. -s�k����5����q����8�U�4h\�ײ���qiV-x(9�K�e"6�K �W��5���k��a��Tj���r�V�Tå�k]��E1�z\dþ�\\|��%%�7�kze�F��4�[���yVq�����9\�Fo�n��XGo�$LK���%Mk��o��Le���R���h7vK�z^���i��U=<�G��6�J�[��Tsn�-�fV�pK%�*,�.�x �0���� ܴ-U��1�3ֶ�nؖ��<|���V%�lԖZ��u �-H���A["�i3������-�Ie�sA���Ɠ�![۬< [4��m�dΕ~� Ɩ·��c��c}� ����K����76a�l�g~[��hs� �F�.�&-����R�h�M�� $��k�^l����@Q9 ���d-����Z�P�ӹZ�|� ���7�B�T-�V4Tk3� �����R�QQ��4/�T%b;�MC7O�|U��iq��0-9Jjt�YZ� H�Қ��(-y�7�Vn��.��8������2*�|0Zb3� ���Q& �+u������Z9Z����Z3[]�M��T)�ZJb�@���7~y��7>K'Y���Y��c�M�Rߡ~��g5+�tV���EΪQM�� X7��'��Y�Z�?�Y���1$�5]2\]�,E���b��iG�۩�2��U�h۸,q� ��ȼaY�D�U��E�h�U�Y�e1'K㦖��ҴP�\�)YҨ0v�L� ̗7#�L[�ވ,�l���%i�'A����B��QD'�Y�-)j|,%7{.<�Jh>\����i�]l,3���X���K�˦��Z���c����c�.^mp���C�� �ӡX8e�N��l.�$��on"�e�����糛|�ȅ"�*�B��e���� �6 FMr<��a�Qf@y�B���+QfD���a�:��a�BX) -�"*�� b�0)�����/"K�R�!b%�}W9D,)��1�&bi��-o�Ȗ/���ݕ"�}?D,T��ĒPH)8K��;]@,Q���\lm��� 묹�XZvAĒb1��b#ҀV��B�-'b�/��Qs�K����w���Z.'b��K%�D,�+)�CIJ<�N�RY����D���C�BqD '���$b�8, ��8,�iq���`�m��E����jW���/�T�/mV�,�D$����aI�rj���%�r�!�a!�����ۨo�6e�o���k�yX���}<,R�S� >i›��t�uxX8&�F���#+�����V��ÂoBt"xX�V �yX��ro�<�z><,=�� o���n��������lа���Òȴ��X��v�Xvb�/ U+�M�“��@����z�X�f��<�X�ʆJt:6���EM#cY����CIJn�Z^"c+�2"e�ӱ\^ӂ�t��Xh� "ֽ� :���~����&B-RA�J��D��!����QP֣m&�ϩQ&�X��-o(j��X�E���ͺ�X���˒�+  -!���H��'�X -�P�@,�sZA�@,�Fϲ�X4�L��@,���B� �@�m�r�ټ�X��y^n �f�����r�� YB<7ˈ�m �r-R������ Ģ���zĢ�J��b�aY(�@,Kh�|�X�+J���8s�1�����Ģ�]Q��bQ֬g�b%Xң � �P6K����տ��$x@,�"���C�K�Òv�ʟ��6���#�7K�-j 6�T㈹�X���c�<,���� �>�{���Ĕ��7+30�zxX��V+f<,ڎ�{��aY �3�0+�b����:��vgfE���4�s��<+��/[6��0Q��aY�J��P9�а�����Ev���ð�k$�p�� �[m�5�ݍ���0,}����e�g�mV�E�A��m����E��8�a)���(`XX�2\ +�����R2V�ށ��gU<PX$,�[s���~s���"T��G��4Z7��Jʑm�s�������ۛ��-q�]�4�r`��E������be?�Fa%�6����X�Ӎ�(��љf)Gai��0p���.�8�(��r������� ���.�����?�ߣ`�w�N��,���ҡ�e�as -���,Mo�,݆Y��`Q�2Wy(Xx�k�,�Y��eG��P�x-m��%�8xP�my=���_S��1 ��[re7K�>+��`�/l��VVT��,��8�K5\��`��V��M��lCeMN���D���&�����ͳ��K�8A��u�z X�D -+g/y -�U&L�׃�‘J��>�����u� �tD�`�C���!�p{6K�$��}�����p6 }xO��p ���%���`��C VV����0U�qs�2�p�nV�ܷ��`��/�����ޤ�AXr'�p��p_[�%8�����s�C ��������,7 w-$��%�u7 QM�B�F�ˠ��i-L�BSER�����V8HX>�;n�n�����En3W��U%<�h� -���6c�`�W7�|9X��Wp��X�@p��=��Y���"�EX��`����,mE ��i�ڣ��ۛ�1X�M2�1X�Œ��`I�P�a�fR�� -' �],Kæ�1X�kw�1X���< ���T`�@�b����WJwڍ�BԿ �,�">�'Vo�3z��Es���A�"R���Dm��p8 K��?N���7��?y[(�h� Ki�e�N��8~ܱM�|=������﷝5��!���Es����e�ai\�q��d4x@X����E�g��VfmH�< ,Tl��%�$�aI��h�fM$,6�4� +��r~IXl��\ -���Wk3b�7 +-�al���*^Z��:�MúTO���N�48W�>�k�xX�|�S�R!g�L��2�� �u� b�h�"V� ;������D,j���%�>�M�b�FX>�N��M:>,L�E�Y�]D�̃�=`!�na�Mĺ����A��[�nؤ+]�^����Q�w�v�n�Q��E�0سE�i����/pXV[��4,Y���Һ.�6l=����Â6�=9E�N�J캼�fӰ��RC4,�_�;y�!Lو�A�BL �^8°�’b V7 ���ìȫ��_���/������4K!U�鞩 ֟�?9;רM�9X5v"����"[Q0ћ��H����`�f����Ң�y�F`�⣲�Z:����`57��W$Г�zEB�D�~gH��f_ᠤ�0�WjH��5�W��覺�W��� -�8+��͗'�J��q���E�;�Wz�e/��Wz��ڸ��YuӮ�pî�A])�u�q�F"7�J�4 -��BY�E�I?�e��7�J=��CV�lL/9z��j+�W��� �#�(���y���+���. ��tۦoE�_͇nE���LЭ�rӭ.��VkF��C�Gi���V���[T�9��A���{y�V���J�2�?*RĠ_�9W����zP�Ԝ�p��Z)DAV�fZ���:�j�Ȓ;���S:h��s˹;�J.�v��-\��#:�J�i3uK��z�6�e��#���$�-�$�-�J�B��˝���~K?~�P�ڢdu�dej2�Z�[m����*@X���X �E�أ_?(V}�<^+��Vx��|V�f�)��>P�T��{�JG� �E��~ڛ��Gt���R#+?�M�j���V��as��pa����D����V�T�f��Y����|�j���D�ꑠ���W�8�T��R��~Ъ�bɪ�7��2�n׃��jr�T���8U���y���$�C!���4|��ԁ��|�J{O%��7� -��7tJ�E�������A]U���ͦ:��h5�TzXp 4�����FS��M�M� ~6� -�l[Z]p*��q����]���?|��*t&"n������zZ/���j~�p۔�2B�Qh��PN�R������BS����T�#������6��MţA?c��h��`Sa�e>1�*�1�aSI������V]� -[;�=M�(v/�����J8��q4��A��éh�>;��~��SI�=Z���réL��MߖT��� -� |�.86�K�N��7mkөWU�pө$��:�������s� .<�D����Mۊ�Sq���M��7D ��S%�cө�/�A��T�W :FފX��E�n:"ӭө8M��-����,�4i�t*�)t�����,tzө�Q�N���R �-��~ө4!g+ıcT!iF4#�E��t�-�J+ "$���W?�N�ǃ.�>g���T����ښ��Kks�R��/.Z�T*[��T*��.�J`�vB'��� -![oզR�y4�Je�c �7�E,�Ju�}��7�� -*�Vn*��Je/�J��Y�� ���NŖ!��S9�JQc۴�P*XT�cJE�t�Y�rC�L,eC�(�Բ7�TIZ�R�䄧A4���4�Q�<3�J�P*�4J�L*��dL*���]`3���u_�P�V�=�����Ť�Z0�,����pZie��Og�M�FA��T���A�Q{�}1�� 3��|��n��UV}1������G�����j0,�<L*#.�����bp)ke�ID8/&bv�����wߙT����aR��i�/'�L���Ť2�^6�Dl�j�-��>L*���Q�iPgR@���V0�fRa.�N�`RY;wΛI�0 х�I���Rp&�•7l�!��H*�����Q@Q�=�T�n$�IEM��AIŻ-�H�;�;ԠL* ���t�]L*�~�T���@R��I�k��Y���zG�@R�BRёT*˙�� ؔ��`��io� -���$��Y��H*Dm2n$�^k� �bŧ�k��p!��L*mmX�N݆Z�{�=?Vv��#�9(�J�{��A�1��gC�hSP�*�T��W�+�TZ����FR-��Z�D����7�Jc�6��^r��߂м)/��NJE���V'Q���T\�O��������{J�8ٝ�|�d��?B��d����S�Sܩ�y��h�<%�ҟ�J1_ �M�Roy�e�~ �"R � �n���g����П��S�j��?�Y5&(2���: d���8��<KK��R�3]��w~I U�^�#�Q�wȁEU��(ͩj�<�AQU��(9T5��|eyu�ժM/jp�L�M�**~�rZ Y��?��`U����ʻSP�H�@_Hp$U��I�ŤJ�U��iP�d�)N�Jf����9&^-�Ib�=)��Pg<��o�qG�D�=��Kb���9���t����]��B�L -oE�L|�~�TbS���� -��+e�^*���R%y{"ҁ�|��R�:��J)�jQ�\U*U4R��Ia�)юS����{m�>�p���X}������.V�V�Ţ*Z}orV�v�ɓ;G�b֛��q -_}��[޷p� !~�l��j5E��&�#��fX ����d/^@2� -��R���TH��������?�k=W�x$� ���"�R�L���"-*�2���…B2���s�4s���p��V���yb�|]mh��@�tT=^ ���q���~j���1iZRUPB+qc7ת�j�����˫I�3w��n4�+�9i�r��Z��K^' -�R�K�\�:�["�H1�(%��5'��0?^�C�VL٪q�)���q`<���XÚJC%~[U��[��O�R���5�� -6:]g���J�z%��csP�$� ��LJ -;{����� w֪���ޠZV���8vQ<5���C���:��~�C��h}�˭l9lza�b)4o��ֿ�DkU����O��]KG��P$����K��6+�`���ף֧�;n�V�JY�\��V����8 ������$Ѻ�'+siv|��٠���2��=t��6�lpm�U�K3+ - �Rv=����nˆU�u_ +� �K�G�N%�^U�4�ch��h�q㥌C�:��J|U�fz�*�4�l�޳���u\�'D�Š{wr����H�𕴹K^hWٚv���+[��Tj(ŏ�݌3��4����F���u�K�����~�i��C�E��%�l��[���?}+9B֥.+q�;Pٜ)zQ9.[��Rl�����9.f���#���e]j3^V�!�������j�-���I��0�@�G�r_��9���U����>a����܌�D���5 �G}��gI�29%�|�bV���mU�M,�~�YR�/1�񠔎7���n�W9X�q�d�ŕ`�a4�J�w cD��nCRi'�:k�р�-G�84 �1Y6�З�J6H��� ]n�������4L��]l��&K��Q�l7�#��Lb���M��ȍ�B���� g�8��NϳF���k��b�CA*o"����j��Hv�^_jZ�b�6:�H�sM�J��/A֒ڌu�R(�O^ց��_��B���i�%C�a]�F��TY -��߹�D��@����@�D1��� -}YcI�;,4��(̞��_(��z�p&Sp��SI4f����jj���Ȗ��C�3*;���VY���kw��y+�g��y�S��� �y�����:� -4��n`�F� �2J�n�3�}k��8���cJi�U����Q����i۫���Qťq���P��b�p��z��n*r�9��9�r?j�� -�K��W)̴R6w�az�5tv���E�G)i�k���>�5��N�b�iS��+�>=��,j ����sK�j�8J1�\�GU�6�-9�PO��>%�[�L5������������.�2\?jq�f�p��K¦Re��������]�T�T���4,�����N�t?ʃX��*��T76�ҷ��#e�� �j��y���â�,���v��%��:&<��b�����e5b��Ҷct�i����Z�)�[ʞ�|��%���bOt���q�}4�{�]��o���U��h�4:�O�zK+J�)���"P*���,{q�,&��&tI�R�ac��:���+�Gҥi��.`$M��0Ҽsu+j5Nץ&�5mlԩ���fT3nta��*�G��3ō\�%%\�A`����{� R��_���,��bx�x(���8��jE �n1�Oo����:΁� �@���QU\_R�e� -���M���nk��A�j2cU� -��XV�׺�c��+qӺ�]U���E�Q᱑�7i�J@���B4�^��`S��-�\�RCq�|��VdErU���>W��R�+�WjINR�A��mm��Qf`����=��oNc ���-Γ�!p�F�2Ы~V��m�����,����^�%�X��R��D9-;Ǚ��T�V;U�-�V2]��)��Y�X�*l]�t?�/mi��֝b�e����Q�Vp�2ਪ����-"��YG�L�eɔ�{����"mv&�,ڱix�N/��+_?�/��)q�t�B� -����qfXI�@�^/qX7?�F>�#t��׎/T�"K-��x��SQ=]^n���tV ��;���Tծ�X�0�R(��b����|�]���K���8�q�F��#���o���[�QK[�|>�W/v��u�� �V骻����&j ��������¹�9Q=����2��E�ھ���gĬ������P�8��:�PZ�����n���Q��֊����%#��?G �t��P18P���kJ�̈́-�P��I�6>�DQbH -�/\$Te/���C*}X Ɏv����C��-�}�l1�η����V�����w��i�T���{<9Y>+�[��L1��4mO)�p�P�S�Ϭ���!Sڪ�2�Bb+� -�Q�Qc�S ��~Ra i.\�|�"�*�/�qtb��SJ!q�h����1nd���p�R�g�^e�7�x�ޛ��h���G��b+s�<�[�Q����(do>{ -��o���oX�:?��w+tv�2���ٷKK��P�:�Ǭ�D]s��X? &�:�B�q����'���.p��S�J��������d -1)�jlh_�K��G��U���� ��/��̏�*7H�t�"E�Gy"��n��*GJMv���?�0�a{B�k[����ܞJ^�#Ì8��F!�K�T#�;,wW��B7���W�V��`�Uh/�F��X&��ύ�go*�܊�E��v�Z�W��G��R�ʝj�PvVM9e�)��-�`$�5�"�b�<�.�aE�'R��[E��3��4DI����`%a�:"�!o�|�a�n}|�k��m�#&�>,�y��+^�*�Y�+�:��+�^�⩟����6*�F�V�?=������Jq�����:�:阣�%���$��A]���m%�mx��8MĤ��2P�Qb�I"TV*�A��8 9�r��4��`��{���XV���k �l�1���< S��MNV��_w� UR0�E�}��\��"n�V�T��n����p��i�K1跢�#�G�yW��j��D�~�Mj�P^  o�f�n�~[�*LLJ�3������>RI�BL�E�XQJ�ewp�8E¥P�"�Z��;P]��B�I�V�a���f���ONMq��P�4X5�P���*��D��F[w��`�.&�N$0� !���qr�`�1Zu�S� qM�&���`Ez�/���A� ��U���)7�����j䰦�DN��'V���)&��`�mQ^-�: �v�a �Y�q�|�9Lf��`� ⦓���� -"/$曁�$�F�� -Y�D��SriiH}������� -h�Z��-ꚗd����"6�L� �J|R�3e���n�^��Z"6��K~[�k�;��1�G�)�T��#��<��}l�ä"��1p��H{J)� ���y����1O*����D' -����$:!e�är���x��z�u��-�U|=��k���},������f�5�ǚe��/=pX�JU0�Jv�c�ǭ�m��D�}BP�I#b���g�����)�tFIҁ�-78LaYh~?��/+܆�u����0��� ��A��E8L��1tf�äښ���� �R{m1�#C�v����$p�'}�@�TO������R��!���l��4�C�mفh ��a6P6Sm��`�m�O���a8F�fY ���z�0�e�(��I#7��t�U�"*k�o�� c)�KFä����e����=�(��\nn��@q!�R !�A&��^U�(�J4�:�[n���uBC9;ԇII)��)�yJ��y �\3� /��A\O$ʶ���q -���X#,KBy�8 ����`�����Ψ �V�$�ϟ�_������o,^,�6S��X�˯�r -����~����d@�� �*�B��4 -,GI!1�k������e/kAg�W���E���k���'��1:J�)f� �K��N������|��bR�bK�V�T���C��.GOKو1��D�l�W� N�m���S�eLU(�j��/��AG��P����{��j�^�R=�\�ʜV���K��Vw_�[���g�R< _I�s��W��0Xl��Ic�^M�l�eILTtyŧ���Z+���w��t�h���F��t�� -cT��ƈm(���׭t;���҇��¶ڕ� _Iq��b�A{�h��h��@�iӖٵz��.�x#�!4�h�q�T�OD�F -���VY�-i��t�Nl��Я3KN�{ -���=����AZk3�rG����y�� �4Gm�X @�#{=�pJ��f���8��Clޘn0 -:�`$���`���;��u�c�$�b�9l�#��/�qQ��O�b��by�Z�tI#���Ҍ����J�����Ѯ�*&X���΋A}PK�L�S����z�c��'gk���y�����,�T�� �u���MB��pOh+��U��F��Z_R�L�˲p�N錢Ri�A�w�I,��R,i�,��Ӵ=*�NR���ɾ-��۹msO���lix՟/g`�z��]�� �7�L*1���d���M�d(���F���T�W�������#HQ)J8 *��vh�� -yA�_�k�S����7�L�!��t<2=�֚�^EШ���ϯv� -j��6��vE�!G+}�UU�d�*nj�F"<�Y�Q�j�Ӑ�X%�~�6�L�"i����Y�n�-�.�d�.�1�+~�e��V�E*������~T��9|����> �S~�J�0��l3E9k�è�sp���QՋ��D�RW��)���f������D7�Ζ�����Vي�Zƽ1r �i������7)�/���r��Ry 5FA�E2d3��9��ʹ�a+*�-y%$��.50qb�"�R��8S�խ�K/�7���4���16���Pi�l�����L5����Y-g&�+����$v�0��%U�j���*t�b�jR�J۝�]^gM�qkQ��;.l�t��L0��w���}V�R����Z��(G���w�r5���)� ly�q��I��Ɩ�:xԢKd�E(0�/��P�V��ov榡I�&���U}���F��d���ə��](��W*�|>��s~!�YyX��&��N�ׯ��.T3ud�S4�,�x�[v��d�Zݪ�v;� i��s&M*[���IR�*998CJ1`F�`i$���qi��q���A�v�A��LJ�T�4�:�b�`�����(���V��d��uKs?*�W�<P� &њY��� -��o\!� %��2��g��GMn�Z1��m$5�'���05�*�㔆�j�|>��1 k�c����lY��0�kU �R���l5��!�i6b>�\O� �W#`k4g��f9�R�����;ȴ\�����T��d���hKJ�7����vQK���f�tUO�)=��G1�)�kT��S*L�Z#� �E�V)dH����O� m�:�B�Q�/\���h -���bZQi@d�U K�a � -[���qU��@ϖ���ks��@З'�<;�o��VU�)�W�kWW�U;��CFD�r�%]�,�n0���|I�%���䃔~b̖��>��Jے`����y���LK�l�E0՚*����p���CF�Y�1�䄞9թ*!�"�œ�^�@w�򗅋T�8Q�ƃÉL�a�5��� lq!�Y�K�O,��3 -�T���&+ -* )��g$!�A�6e��T�Z�2*ժ�E!�^@C8F��rI ��T*nP�v���kY4,,���rR�|�TM=�z2-y�çS�i��V4��U��n+�_n�HA�~�: -�Z% ��w:�VgV�S_��:�/��CU���Z�?���fј F���n�Y�rQ�[�j5�Z��~w�>F�i*p�[�r8�B�j������8�5���S�'� -v�)�b�v٪q5P�)V0<� ec�PY�P�C/`�� ��\)�JQ)�U��y�� ��; N��FW �Z�b��-��c�TX �DTK +��d^X5�;�����B��Q�(�Lբ-�j���:2@ÎW|�P� �2j�Vc��Y=6[��hbA̼��UYF/؍?�<�횮,����@�e��E�t�l�*�b�.�=,,��a�r�-��h׃ -��s�#R���Z �Z)1gu��x�9 ��b�2m��,^��O��Pw�59�Yӥ�w�$Rk��Y���,��(����?�;��D| ֔Z���E� -��2�q,T�M ��VP ��C��ݩ�(�ccM��A��T-kT��3�9v�z��Yk�V�ɕ�Q��_5� -C��Zwp&�)�;��_�/~7 M`u�J�Q�@`�Z��J0��ВW&�N=��O���Lޓ>J�w�����h��;� -�1k- -���$�u۲�\�G��������)�eA�ح^�����5h��| v��� -�(MF�W�#�&ukQ�' y�hM�n�F�M�e]k�����Z_��؃���sf�B -� -w���(1�u�R��A��(��K���ϗ6�Fo�e)0˵M��!Nc�̤����X�=�48�B�U�*�'��Ƭ5\���N�G��Zee�F������Y35�q��t�V�4�M��͖��������~1 k�T�J$-�6� Y�k�i�V¼�WJ\S���{L?*fq�5l[uӗq�զ��*��>�%�ԈϺ^�6�O�*�G �w�K��NPU�X6�c��7`k�u2�5m��][�=M�qkZ�����!�H��q`"�H7�p�i�7%F+a���� -J��C2^�h�2a~Z1,�3��.�&.�Z�Pz�e#^�*� �Z��P���K%R1e� )�h���'���{ 6J�2iO 6Jt�o�J� k��< g"���\�ģ��ryݤ62SH@�v��<p!�&9�Ĉa2�}n]M�L�dx�R�f���s� !&;��X�0��|����e���h5,SF�tݰ��� -��jP�H�{�Q {X5n �V ��hW�l�������.��c����;<8*d��Ѕ6]�S�)n�0� �;b��Q���4)2P�rdk�y�d���N�^RF�G�}��� -g����>��Ĵom��GIv���S.��(���ˆV���m9 ?j8P��o-�u�����:��C�~6V�o.��V Rv*G�}�j.�mxb�S,�91ʊ�v3��BD�$�]*ɤ{p PI���قBM}�G`�У�Z��My?����[�u��5��9���Aۚ Bj�l��q�sX~IHO���=�<�< ���`lp꘶�0���u��'��Qc������w��*S -M��Xo�o����>c[�{Z����j�M�Jʈ��`�}��:G�hM�g�Xs�#a8���c�����[�AU3ڟ��:���nDؚ۱l�[%�_-�Ǵm7Nvb��� �z��2q�Φ��2�^�u�z�.Y���@�I%���YcU��Eԙ�\�J��:�M�Ў�3�NjNƙ�V�d -:���d%�-/�(��IKO��p �*K)Y�E�E3��'���UiX7%r,���QY� �m �0(�S��O�UKpR�Z�4 ��jK%��h��c���a���ڢux���D���)���q��-"��%^�"C ��꜈����\�>���X�V�u����@�i7�}'^��n�ftO�mU�5������I;�PJm�*�a��R��aX�F�V�*��[�L7��^jY<6�q��pJ�L�d"����D��E�ط������v��4p���YRE�V �����~�n��8%P�)?��]�U^����˴z��Ɍ�iB3ïS�w�a��|)+��3h����2���1�ZM�T�'- -� -� |4S�l7����jF,Ԁ pc�H��E���wx>�B-��;}�Q�ڐ��d�rF-ٵ-g;�R�7��i�|�Ǡ���UTGH���.uE���aP�/ �03�n:��ֲ��[��b�Q�%KZ2=44�澒���Fx� +�nć�s�݈��E-3�s��*��F��K:��G� -�r}y��NL��t�7G�٪�A�ܨH�sDJaU��l��J��֚�tQ��ߟ��?9g+��m���Mu��)4��+jn�QS ��n^R6�M��PJ�)SK(� -)!���!��#3��:��h���_�`�(��r�}^UV�ݡ�s6�v���EA�@w�>3�d�[u����5Qё�B�]еÁ����3�V���^q�:Q�D��1�{�4�"U �{S�O���1��A�t��h��PTӻCSI\�/faqN;��J�[l���T9Q[?F�p�5����]���Z��[�㵾��xrb¦�j� -$1��n��P�Oiv�c�Д�m���X��S�R�4m�luB5KVS|��)�T{*�z�pC��Jv9��䨟�j �W��:n=����bV�K�'[��)���)n e+�� -U�5z�(��}�y��Vm�F��0�*W=5ɝv+�TF���� -��XN�e�I�������'@b?s� p����Z�Q�y���|�g��Kɇ u�݂u����+�+DyU�������s��ʉ��9 -!�]�*εd���Ξ���k�J�8��T�\i�kVӼ&�ݹ���o�k��Q��+F�C��o��اM�=�}��`l��[⋊��T�;�"U|�+�N���U��җTҁ�I5�j�����l���J9�\���ũ�s��԰��.-@�m�@��l(��X���l�j2F���KI�wԊS�^��-�V+��<�78�ϱ�Ꜫ �� �B��z��.{�ގ^ÉW -���[�[W��>�LG���X��7��D��9�� -��Ð;*-�!�S�vqYX��]�h�:�[(di��� -�.oDp���L�Ժ�0�����-��^;�G0�{{�'2�f�q�3��5u��#��������*����%gL����-i+W"t��4ƍ�&6K�l��r�.�K�-���5��N\Ć��r�=*j��d�™`əZ��u�q=�� eF���ͬ糴6ύlA���t`rd�)�V�H�È�H S��9Xx<z&�ŽX䰗�����{����U�݅�fI�.�n��Jݎ[ e��IdS̻�dZ���E����?��\:e�3��d�7����WܝBb�ӎ��&��L� �?R��ǀo�Q�Aə��� ���*d­P>F+�b#���Y��g�d ˊ_2��noy�m��To��L�-��GƖC�>��c��W���zZ�,��d�q�)v��M�u�@�[.n����NE]�Ν�"pR6ZN��6;�3��T��[� f��� ����L팶_'��gM��S�1���5 ��}�~K��TXB}6�[�.:�]�"h��vnýK����Q��U(���Q�L��E䰒����9�] �*���0],=F��H��yY��(�(m�ۢ`E�,QvnB�����������q�����[PuHX��B ��=��"�f);���Ǹw_L�ϒK*�����9T�`����0�J�S���V�4�{>T�3H� �/다�&�uL_U�d �P �Z�N�X괽$�5��S�b�ó�k���[���+nDy�KR�� �O���ؿ�FH�NɒTs�P',�z�)�q�I�3p�JlpA���Ԃ®R���Lg~��It�-��.[1g��&��g�V���I�/�間��'�j��;{��U�o�Zώ���Z��n��S�aq�1Y)��4v�Y�'M�}G�i����4�+j�D�}�v�N�Q�eX��T5��\��P��.w����R�����@��N%T�����qV�8{o���R��ult�@]��e�2J�[�nŦ�l��縰sW��a��[��W70u��j���ԣC��!yR9{��-A�kt�(+������p��Z�s�2NL���}����ڭl+�^ݥ~��Cu���{����y�u��g��.K�����n�(�*A�s�R�{ִl)l��� �u���g�F9 H�Є�-�e����R�`��K�䢡I��W�3����8�T�Ԝ������p�gF ��^�L�D��ZjRޤh -n͡@��Q���m+��jT!m����4�H* �a�E�Ѧ�kذ�N�)yߢ�q H��'d��i�yv�F �|F�?+ya� -_Hj��9k�s��B�DU��Om�4�(Q`;��Q����]=Eݳb���T����JJ-��:e��r8�.ոo�]���~�}�o��,����;���{�`�Q�ac����?�?����NUY��(��;j��TJ ����e\���`��$��_�`��ᚌ;�Ϻ��9u��;ř?,r�{�RW9�;;FQ�ý����|'e�Y�Η���i������I\��}�-��Nj��Q�[��i��M�cS�2�5B�� �1��;&�C�c�E^��I� ��P�X�za�hem��;�<��ޡ*αw�V����1{%�R�e�ej�`���{��g~e3!8���;�MY�T�S��o>�hC)c7tq�X?a�����I�|�ԗ�G{�w�)�C�C)��ߏ�^�Ti����k������ �Y5�Z�;�{ν;…��bP����l?4;̓��e�Իl5_t<�^�p�ݥܿ�V |GI�=����o�[�|�d�U�iL��&��ޡ���;�\�ߥ Ҷ��;��T;c��7�k����"+��;��zE1�n�V�N�K _�L�!_jѭy��wt����1R�%��3[������7�M+�*�Ծ���������ߑ�_ym�7�9�n�Z]���������/�����.���Y���ȫ*���3r�*s~��8�;��>O�n�Y௯C���g� -�2� {�|���<�;�� ^���~���烙��þ��f�a�Q�T�z�w�H�=@ɻ���A���S��j2�%��}'�~i���Z�N�o^m/���%vD���Dj������8� .�l���l���N+J{Ro�10���qJ��~���4�����ڇ ������1b��^�����/�]&�1�ߡ�~'������w���6�Ne����x�w�.���u�w��S�1u)��A��l0��9Վ�@��C��`���q�b�~�wG��w�h�;������}�����a��j=�;����ș|�'�u�a����C��P�8{�w�vmN��"/�z�wG��w���;�ì�f�N˺ߤp)v˪����8y�`?�~w��~w�N�SUFK5܂��|Z�<��Lg�A���-��d↧�_����)����}�tV��غʋ�#[�y߁Y�i��p�p�����Jz�wR��� E�oi���`p=�˿�:�������;,/��LΤ���Ӑ4�5��ps�*u�����)�Z[����߳<�N6N����爐F��; �~s���a� ��ߡ��j�p:3�y�w����6�N�u�w���>u>�;%�{o����Og=�;\O�,gpb��`J^�;����ÿ� :�;���C�|Dq�-j�����_J�N_}./c��l�Nɇw��w���)1�깃k����o����o*V;�)�]�;���H/�N�թ� ��e- -6�&7d�H9k|�ǩ����������g�R���l}�K��%_��RUb��"�9o��5�w�������v�A����(qe{��u|F�����������;��1yf��`/�Nj�3����?�����f�/�������u���+}��;�7�o��i�����.�"_5������N���>_��n����8�#No��[��wG � �y7؎5y��.���8�<u�Mڮ?o��Q���Ro�E@�1���7]o�`����� �x�w�%Jb�n�8��;)�9��8�)�ٿy�wR�Gx��wv��N!�ZZ:�;�?��.���Ɏ��鍿Ó����l?������]��� - ���No�&ї��R:�;)�����NZ�o<S�8<N��g�ȋ�Ǻx���c �4���s�Qnޥ:��c�'������Zo?H�G��K��&�Jd� ���j�����w��V�^�౏��>NF�L-�;�3 l5�x�c�����5M��Q���&�xf�.`�R�+m�כ�GT�%�����ʁ���K�^���Ӝ��!��a*n�<�<C�kb�<Sj(���`.k�À�}F���%U��<jEV5R����RrzC���$S�_7�C�  -r���,G��[�Y����1'�Q�mZ-1�<jE5��3�3� h���׃�� ��zxj7�=���34� ��}M��2<']� �]�E�;j�2~�Ŀ����/�O7��{��i�2d�ɹ��/��I�͉���pb�3�^�%� �����F��<�Q9��#�� �GMJ�u��lݭ�-�� -��� �����C�����T�f�����ZZ?<�9o/NH�&��+0�O�8�e7�(7����o��:v�7#�ٷ�q%�b:ʍ�;j��%Ɲ���R��@_�q\ƙ �R.�Q���+�Gg��}����C�9��ߘ� OJ��,<2C���³\�� �빼YxRm�,<�� '�.Sϳ.�}���qr���7��w���w�`��;��|�!�����C̩��0�P�����m/okEB�� ����YxG�YxG5��W�%��2�$���£��+���0�q?%fm�,<��lq�a�zXxfzGW������U��£n�T �Z��Vn�Q���g�hrِ;=?�d=,<��׼)Cs�Q ��b�d�o���N��(��.w�ң�8U<�tPx<�m��'����A�4��[��L)�(<{��:(<)��?�[+py���G�3���c�� -�(7 -度“��F����ޡ ���w���8�㯹6 -OSu��p��z"�Qx���(m�b��߮<(���FZ`x�6���.��~}ax3�6��0���0�K�`xG �"������[�����#K��<,<|]�oJ���b�rт�g �e��ǷlΗ�,<V�}��£Ē�S��.����,�Lb��p{�����ϭ�>JN�O�<��n �Ԕ1�<��N�`�Xwf���w)度���u�n7�α��6�h�KZS�6����7əeǺ�rG +��]�4A��}5��|�S�� �$��)@������V�8�^ -ik������O�Q׾(1xz֘�N �����6ɊY�� -�5�M�c�)��<��Fo -��4�I��<�(��;��u�Zfzi7m�q��Eղ)x[9)x[u -�W��I����ouR�h6} �z���A;K����Ԏp�J�k���o -^�r�����q��'�^����c8�w�F��V����'�vA�PY7�1�M��R�����\km -�����)x���o -���6O0��D <�������`���<Y6���cÉ�ּ)x�D7{9��)�Ct3)x��v�(xRWy���a��f0�PQ7� -'U����}�J(Ӻ� ^_<�Z�%�*gI^Ӯ���98x�9� ��S��G��b�'N��m�9xj�����i���ਖ਼��������<]�ߪd�<���Y`��� ec��O�1xD�gO J{���C�����I��m -�#�L�7__��<��N -H���v -�诿���<���<�fOWVc��S,�>���� �Y��^�� x�)V��(=�/����I��%!x��KA݄��aJi7�V[�CQp%!x(�t�<�$z���/aŁA�kt�<�M�S[���8�:�����Ǹ����8y0�J{����� ��?������� <=M� �3�� �`�����̈��x�YO�Ϝ�A�Jw%!x� �;���x,�vB�Q�h����[�� ����e_+!x� %�I�kC��`u�<� '�<��5��J-���QN7��<���k��:�o�?t�g +i1kXy��ϖ��l�����?��#]��'O*�MR�X� -�V�'U�֤�P <>���I�c�l��V��u%`N-���i�E�7)x��^ԙ<= �[�o -��[A��h9��zB{�� ��X��J���@��'����<��Ɠ�)x���V�)xxeb�{b��# �<��������S�I;(xع�� ^%y��c���N f�o�6��(;���f��1x�^�k�)��ߍ�S���~r��k��6O -����P�{���%����AFY��>��u �Î������� ���\���G��:0HxD��vO2Ѓ����7O��7��GH�M� «�nֵAx<�����ƴ0�«�\����@V� <�qտD���}rgOMդM�������Tʖ�G�I�!�U�|���Z��8x�����ZN��g�ϛ$<�\��3��V&�����oji� ���I���$��9+���A£�L%�I£LoN��(�#�r��P;E=£�0R���Q�q��0"}j� <�&����{F�4;��꿲Axi  <��V�7�j��"���C��k��(Ng� <�At+8�jjт���4r��������L�58x(�[o�f�Byʓ�˖���SҌM����⑹��h�����Bi�� �2����k�T�(<�Ω�=Yx�C�w�Zl��c�� Y���GnO���ᑫs& O�CK}�4<�X_��z��9��g���Oĩg&xx�_@T�yx -u��W���ѲS{I�b��W}n�U�YF6yx:�����sg��k�fC����mU*3U}�����l,���ss��S�x�6/4g.[m��k��֟ �W����t0�!��jjy���<�x\+r����:-od�'��j���`�il��ģ��W�)��TYo$1P>?�x�(s#��]���D�A�ð,�xJ���H<2o<�'�b�����L+�(��T��stB�p���V/�I*մڠ�T<��€�Z#ӵ��xTv�eO,*{���P�X<)��9�xTw_�X<B�lu�'���]��$v��ъMo`�J�Qx�l+X<���� ,��ˍ�X<� _:���`�,Sb��H �X<T6u�œR�&H,�V�Ϧ�oS�$�sT<S� ��< -��W��j��G+ؘ��Q�D�ѡx�v����W�~7O�G��h��֖�:�̠��\�=MO&���Y�G3�tH$��M�!'����E $^ť��sL�Z��~"�9��ۙx,���&+<�%8�x������Gڏ0�x��fiw0�X�Q�L< U� Y�ģ�`F��� -�*_�L�J���'���*/>��'�xՋ�.""!� �� "�M�'�%n�ƿ3� -�=��@��73�L"���ޛ7&2�a)1H<�o޷�H<T= -�ē���8O��� �$.|< ��w7O�EO"�V+��S�x��S[Z�|s�?��Y���V��i�f�Mijm�r A����,�n"��?�x��h� "�e*|i�����I�k`�����<�H<����p�PK�P���L���/=�'OA� �5�xĒ�?O(^��3��'�M�Z�c��Iy% �l���1�$2���H�+�x(�;/$!��J"� ��f�@�yZ��H< -!�|7�� %��ģ.���W�P{�H<<�bO$�'����)q�@�4Rh&�x��*t!�p�~���xfi�΍�ӻ���`�a[�F�釓hK$�g��ēȴD<���i}�@<��'ҹ�%�B" ēҿ���x͜����b?��@<���Y'�B�/�0=׷��:�x��+x�S�@<Z>��Y�P�իO��A�����o�-��G0�����Q7|�j�%��'ܟ��Ǹ��ފ�M�(A����L2[�ix����'�L��'�L>�xt���n ��׻�x(���^J���S�n$��Z��ލ�#�ɪ�D�Y��w�a�U^����L�7��=�xxx��n&��@��L<�W}���S������L��J��g���L<�3�m3��,�&���ᅯ��G�����&��s3����~:�x�ls3�,����L<�\~L2�S�� �x�*НL<��yKN&^�U���ģ��`�)���&�y&3�x���u&�E��� -����|g0��eqx� Hvkn��xJ�6�PJ��ig���)�j���G=�����[�Uۆ�)�7�����5�om(�.6��ţ)�,� ų���;<oT�U���x�������`U�o���<;�z���|�昤�S'X<K�}cc��W����x�ፐup�H��,"�xJ֒���x��& �`<}�y0;O_�����Z�\X�f�����a��ƣ[������5+�$�a�lΎ��air���� G����C�͡���7n�t<�,N���a|���.a��X��( �r�I��|�� ��&d�����Ż�8�O��'� �|������p<�4��b1�Ο����1<\p<���ϴ@G,��p<z�׼�xJk��L6���h�����d���†�ȻD�Q���C���%G�!|~��i����xzD�yt4�C�r&UB -d�Et:�x(�X�"�v��.v�>�y��F������Ҭ?'�x N��V�b�M'�il&�x��4K��#�x͹��j6�/6�V o���x���kl<�VX~��(�����xԿ��P�>���k��C%�p<����|N<��B���hOq���u��p�n5~���Y̹�x�r�ضp<�}���AqxG��xd=��G�<� ��I����C$ep<�1ۆ�Ia�p��Ʀ�u�~��:�����x���@�����M8�N8ޡ��-I���x����x �ޜ�,���3�x[�nG��3LB��Au��%�8��n�&^�,(q��P����5#��s4���6���P�y'O�C��ӳD�D��t�'���d�i���*U4��~̯���Jn��ط8����sZ���l�K��c���H�� &�p<&^��^p<s�jc��P��N8g*�u��� 8�TU�&���G����Y��� �Sp�P�p�J}]k7O���w����;����S���Ce� -8����B�g�O6=R���.�n���H���Jfb�'��d<�[j��;���i!/K��I�SIĢ"$�x;�xR��cU��$�K�(�xR�x�D�i�V�{_����o]}0�|e���x48���G�.�T�����T���C]Qv I��_���'��ƣC��A������2lEk�h<8���O�ڗG�id]'���:�F㩔���>�x�yU� �q�����O;� �c��e�3�ߘx[t$?�)�� ��]f'�Q���-��'ž���c�X���7 ���H&�fy0�/�k�o���ւʪ`��Q&��`��O�~��t��e -&����q�Ҁ�'�x[8�x��4*,�;64��Eϊ�߶�x��x4�fq6�J(������D$�<'�����yUR��ީxl��e��Ljd- �$� S�{G�_��5#�c��G��D��P�"ώy�?L�p� ��: -<��#�?9kkB~m�<�xZ���t<�Y�ߦ���n_��*���W��o��G� ����g�5>8kMƉ������p�0O<�� ��x<��� <^A6ˍ�3;0�M��)���^7�ZcZUN<�h��C���#-`�b��DW��A <�pp��_V�z��p�y|Ѓ��[BT��R��x�ξ�xd͉������n>JDp� -<<OAakl?y�I<�n&!Cu`?�xZɒҼ�x��!���]A��g�{��BK:U5�*��Gg���V��5��t<B���o+'o�A��;[רS�lf�p�� d���8Zz��:uT�� �Cl�8���I������7���I��&�xR,�|��p�ͧg�!�-%Px�����㩈������bx���x�r ���x������;�-ձ]p<:��ѿ���c�&c)�h�������:�wz���� �#_AGG'�:�g����3U�����nLK����+B[� �S�;��}\s���Q�6��8�R1������:7��)��d<�)���:��N��sJ>�x���c���b�3@xn�f7�D���eխRS�h�C9�x[54�>��m��*.�O��x|��f��!���� �a�лu��L��f�05�~e�7�� �b����7o+'o��ƫ��gs��ج��=� ���<��,� :X*����ׄR����OK�Yp����'�]��m�v�RS�\��m� BM>��,3X @�y ���<�hj��Q�T7K��n���3S(w��{gi����,c�����]�K;O-S�f��x<S{�}�qn�oy -�/��i�LE]��P��u -��X���#���\̥� ��ǝx<�T�ǣc��`�F��d���kf�R6O�;�D�vy�B���%!�Rh�����3�r��5;!O#�v�ǣ�~z?����M�x;�xR�&�P>��^ �;�� ���a��[��ǣʨ�ͭ#Ո�ZӨ� ������I�v>����m������﫤4�h�A��3wF��q W����OC&>�x���|�/��=n�t<�f#t<�������'u�v���q����ΓO��\��7�Cf���.�����o{���qA�k�qe��V�t<��fm�Ǩ�� ��������ՠ�i=B�&�w?�9n<&"\�<� Jw( o�A�S�k�D������X��f]�ś���z�ku �$2B&#�k3�) T��D�>���@�YZ]��`�i�g��'#/F�}������� �ʉ��j ���Rj�<�83/Bq4cB; �B�k%"Oao��"2��@���D>7M���<S�e2�x�zT�|��#�E��ȣ1��@�5���8���Y���K��Zy(����<�|��#y���~�<]F{������b"�<�X7����o/D�M��w�����E)�H�D䥚=T -K=����ZcI�<�~�J�����!:�6nD��Y��g�l���lj"/Dj ���>jJF��oF�y�j~�y��+��.F����4�]b�&�����z(vU��:SM l������NF�r OF�y T��Zny(8R����qy#�X��0 �;*���8!y���D���[rOw+ -K���C�(���6 y�M:1F����6#O�y#�.Ó���U H����,0� y�Z�c -H�Qt%$�PHޡ:$O�O��j:�����G�}\󲆠��G��O'%������� >)y,8���0�.\����}K�t�Ճ��M �XHW��V��1��g�::/mZ5y�4�4#�=�[���G�a� �i��:� �ў��+, yZ��9�&���K7��c.�&�<��l�s�*������* -��0����x[9y[ B^}�]� y4��: y�\U�t���)c��]������ y���f��|��V��!R��|&�t*�����ia�����ӹ̻����N-ϰ�8U� �5���:(�^��Ov�X��}E�N��e����>�{?�Z������ u�bj�n��Hx����?�ݙ�a������O̝6G�=��;��(� �܇�wڌ�*: w�lp'a���v���{��z.b�n'���<�:Yy���l� G� ��H�]F-�����`m\���ߠv���|�I���*�%y�1����7&-/�4���\0;�n+T6w��v�ɲS{~{��߲i�S�d��ul8�n �.� ���=; ��f�vq��Ȓ.;�ͯ{�+�� b��R�>nyt��^K�'�N�+q�WW���c�V��z���b�T礊 �kn�~q�Uf%��ho����Z/J��E�o�c;�n6o�<u�������D]N���%cҲ��җ�,/>]Q�=.r��+Z9�ړOW�J���ӕ��&��k����[��tE�-���O'�b�|:) ��ɧ+c:.�tE������fN�X�4�tE�+�w>]����'�t�n�y�����Ɵ�oNdž�L�O'���-O'巈r� ��^_���XQw�poN2_���U�������[�zx%�/>������t��o�� -!�z��$�E�x:)��� -<]�;�{��JZ7��P��7t���7�ө���ea�V�Dӽ���L��ev��p���Gp��.���J�4�FɄ�i�0g�L: �]H:�0Ȥ8�t�[vH�z����Ɂ��5�8:�DJ)���F�b�覷�'bNo=��'�N�8�R�u����K���m�(t��ˍ��W���Y���Y�|�$D�= x�}v��D�D�,5�������>8���pς�ϩ4�<�!��‰�ۢ�紟d@�9��wp�D5�0'D��h��\ -'tn�ΜST�B �d��� �[�aKޜ�՚�7��Zl��ꅸM��/jd"���R��!���/�+�+J�j����f�0Q;hsR�6&}��i�)<� i {$lN"�` �C�� -��'m���hVEJ�P�߃�z���=�� �S��'mNoG��y��T�S妖�9 m��6'�%\��pYz�ڴ9���.ڜ�>6k��Ӄ5�gk%���,��� �#V� endstream endobj 68 0 obj <</Length 65536>>stream -ts����o�9��q -��/�l �|���.�e��5g[g�6�Rp�9`s������к���?�}�5֜}�9�����Û�nR9Xs[ ֜6����fȉX5q�8Ys�o��q�7>���i��2�`s����6l�qeC�l��� ��]\Y˹���p}6��6�Հ���ڷ)r��sߛ6Wf�޽}��#� �6���6�ՠ� �T�NT�a���=�rqe���Hv0Dw��6��X-_��Py�5��8���U���k��5'�a��9PVë -��I��);&����z��A�_|l�F�!g����\�9�������pO��X�����jĿ��~��ulHS���υ�+�M<�q2�� �Qs�r����Bc��X�'��u������ǩE� ����5��@�郸҉�Sܴ.��jNj��qמ�6jΌ��6k+��mF��Ԛv�͚c���ngOTkN�z�;kΎ��Ś�����9E�WQSh@�4�R���"�����܄�m������Wݬ9��Y˼Ys|��y7k�&�yc��I�9�D͙�:Ps�7�� ��m_�@͑�cr Ԝ^lt5��5w������x�u�G�b��9nȫg�E�f��5��9� 6����s�=�K���ȩ[�>��ͱ)#���5u���as[��T6WTZ3�w�� -Q�Z'l���YA�+�;ހ=@�<�.as���aÖf�B�Ñ��+��&�Q*�!E��5,�v���fh��_b�Z�XКC��̱H�E�1s��=)s"@�dn%y�s��1�䍘���壝0'�(C{���j'yTO��/�j�ncy�Y���b�u���e��D�!<&��isN��V$8�WN3*���� ��hsR�>_�'UN�'�������K1�r�J)�D��$`�)�G,P"��S��-�r��~���2�@�I5�k �X�Z ���)'���@�I`� �G�1]� -���HZ�����#�b*��D�–xl��V� �+���� �Cm�qvu����2�|6�(W�ո��km��Z7Dn���+LYJ -��i�͓W�k�y���(��"F�‰�K1�q��s���(ZM*�t\Q���V�v�.M��F�ʁ��j�㊕߾�����5t*��@�IiO�'����+a��8��*��CQh�B�I��r���e-�H�B�K�:����8��( t�VNt�Vg��8ԂiW]�<0E��;�{=��8�m�xo(L�7���oηot�VNt�V W�[.�: �����8��S�O�.6)�㸕Q����P��8��sP�RJ��Ѷu��J�r�Я\]D�_���ʉ��j���N4� W��(_�8�^oUD�:78.���q�8�I57� N�޴❃�� *�S l���)F���'���2#G4�3�3oh���|�]J��4N�xNh�����и�tI���m��m5�qE�Ҙm n���{1�.��e��Y^�(S�/��`���-�꼸�ɝ��iऎ���AxY�� �Slz#��<���'�v-�R�{�'n &.Š�);��\P�U�rA�_.�mF��(��������!�u�Ľ�L>�s��v+J:��~��O�k � ����4�QԷw���2�1��!��l��� ���]d8ٔ�gn0��V��\�-X�� -����v�E ����B�1�}� /��J(�VN(�V -����ɖC�O5g� -� a���)�dv�A�S㷬�7N���uS�t���T8��h�L*�6��y�?)S�����f{��0A�(\�X�8n+'n�΄����������t2��|��Э�V��}� �w�9���)�=_y�̈́+8�Ϲ�p�V�L8)4�\P����I��C��u�C�t� �yB�P{�L86�c�̈́�}��� ǽ\�o&�`��#~��?�pz�~s�I*�$�P�A����L8�!��̈́#��A�(����?{3a�)2C2�pX��:�p��xj2�8�s� -���fSp2�P���J�R6�8,l� GJ����pV������ӷ�7o$�A'(��5n۴��g�8O&��U7�2��T=���h׍��E���@���"�L8��T�r1��.�� �p� 4D$�\-?'�� �`¡��m&��%V��pX���9��᱘h�7�9�d�)el(vt�_��I����P8E|�( ���yka����‘ծ.�p$x�Y9N����T8EQW}�M��sI���I% -�T8�j�� -G=k�� -G)�멠�eQAR�P�yC�Hf�f *��5t�#1�B���X*�K(\���� �+0��qS�l���Ѵ���p��1��sX8�"<���i4ò%�peE&7�p�uS��T8)3� -��#=�i�gzZP�P��H~�C�&(m�u -ۃJ*���1�T8���z *��HA��POM�E�c��K����!>�p(,N*\������#,��@�8� -� -�5 fl ���g�P��o����E����H8'p�G�R[��|��$j��88 o[�G���7 N�c���ӌ��Qp����9Ip�GQ�؀ɬe-T�5�1p2��D*(p����m�����o8��i�p��Ϸ p��j7��� ��7 V��Fz���7���Q�7*��H�[Q� /ٓ��к-T��VȚ����7-����d��n3 �� &�`�5_�ð�P�v�� -Tio>����K/7���=��~�b͡�~C���~�h-��~CY� ��}�����/O7�o�^lÃ�F0ar�[�穛�F���a'��H�\�7�gH�@��v��L��Z�ل��7�$k��7=lԜ����}Snsfw��j^�7n�ד���A�p���Hc�M�b���&� -����|E��7��>�qo+�F{ӿ���"۱.�i��$���9 �TԖ��}�| ̛J�ђ����?9�;sEqd �`^�1›�sԧ�{��x��9�n$˛��Q -ӽ����u�Q$ܭ��b��#�zvu_�$� ����v�˳J��n�?���ECDdӍ�&S���l u{�4�nxϾ�n��O������6�M�Wd6�F+�� IH�ܦ�&�MYYeSN���7v��rS�)F1�rS՛�;v�^9 _U9�M�߯9,��)؝�?�Mc � ��6%ȍѧ|6J�[��� r#C6�uq�� ���0n -9}uCܴOy^K��v+��Iq5(��3nZ[� ��^g�%'�Mm(��8�m�#�m�{m͒� oS��!# -�?�ONt��� ���6�v��QV6�;� �e3ׅm3�� �K�i�g���@#��ȶ�S:Il��,'�A -)��N`���Z�4s2���2�tgF��s�����X��u��2�3���i�j�����<�ǰ^�g�_��ek'�M����ӦL�=�iS��i#���Mi�yV�6����iS�&�2m�� B[_a��m=+m���W��6�+�p����f���Q����2��AfS��S���c�\��tU5\vvtL��$����U����q1��aa�H6�i�U��9�e�O[�F��T���X��T���06�V��#���Ql��%�Ebk��$6=�<GbC(vD��t�q�aS���]`ب����i-�1 l���oG���Dž`%2jش�]Ne��ͪ.��c��Y,��mZO�Z��\�5��j�^��wN̘���$���Lj��kE�����|��]H�&�� ��3ư����w�ܵ&P�]Ӫ�2�'v�`�e�t?^�صB�� v���*� �3r�]+Qiu��P��x ��j�� -5��5�%xM�ۚa�xM ���Pl�J�:w!�k%��F�Y�޽��+��'x u��]��Hr8wM f'w�`���殑�cl��ܝൂ��W7xM���<s�5�Q�� �i1�= �^S�W3� ^� g���)�N�O��TGu�^S:����Y6@�Z��T�l���V�U���k(Nb���1o�D<_��&a��5�I4梮Q`G |P�����Ԋ^�5��e���8^�A!"�Z�N�ԇa1�k\B���"�4-�b�J��vM�3+��Z۽!0�4�Os�a%T�^ecר)��Įb�um���'v��x[����(K�$vM|,����<��9�k�ko��3=���"����I]+ʷ�r�5��j<{7�Q-$= 'v�Ph���GLJ�f'�z��PY�xM�P@"�kR�]�5]���F�׊&�IM�ݥ�?��Q�iI_�-�?�Z�� ^����1�Q��9���l� -/xM���xM��WE:xMug6��5�&j?K�Z�6����F�y����<�kzQ?�7�^��B?�b���zMB=�k���n�50�(��f�U6w ����������Q����6�k� Yq��5��ms�h�8ӹkʖ} -�^�5 "k-�����5�k�Д�n�k��=��T�L���]��CA���f��6w��(��ܵ - �yo����>��h^��5�����%�Z��5��os�8s�1�]�ՄpRp�(ۧS#�k�l��5 ���1P�<��&�y�(��͕M��*��VHS�Scr��E,�ܵʲ�[��FBY+���x�]�e`�|MQ�� �Fe���Ʈ�K��b`�-��_�5�qv �r�[��#F� �f�^�F�2�(N)�S�'Oq���lQ�)�|n���y�$v ŗ2I]#m]��} -٭oC�h��X.l�~6V�\��@�A0ה -%�~"� &� zi�8 - ��ٜ��/�0p1�L}츄�)6GMlB���� ]�k��� ]�2���\�=�76�k�-6.�Z�uwm�7��� � ���$��u�=�kZ�ٺ$�k�����Y}t�*A-��5M���q"�T_D� �kƻ���V�v�oÑkʿ�� ���kZ [+e� -�u�‚�F������}ݫ�#=c��5~�qk�z$K�5E X�m����?��[#�Z���5��~��l���0��=��/]6k ,e�����-��e"Rj#t�5��f�Lo*ɺg�-�=� 4R,P�5)$�.�Z!W:י��E%=ɣ!���E[��2O�����'G�3�i��'mM�{�;m�(?hk�E� U���R��5�J^Gr�Q�w�'�[C��-`k(�5(�U�볺 i�^qy4�i�z WR���w��hkx��X�ql(�U�X�V��V���U}�6�r�i�����ճqT�à�aLM����!��� -�cA[#�D��I[#����ʼz�(hkR��� �����B�f�׾��#�p��խQ����%8j�yOt���L���Ƒ�Ƞ�m��m�|�����#,!t��Xb�. ��pB'n ��ୡ�N`��������hEX\�u;�|��&Mޚ�&�����H�69j�Zʟ�������ôؠu;pk�$R�u��P_G��[����6n����9��w���)�~�� -��f�7�l�,��5f]z�O����6m A����q��mM*̠�D��۴5����5����ⴵ�x�'ik�� �y���A%j��hL37_&�J�#x��PYEm �;��bNO��Oܚ3ar��vD��F��-R�cK�$���B+�k����ϋrtt����B*Ͻ�1i�83����'p�D�/�k�PS�\�q����� {��� ���D��⭱�k'�Mcf�^�kù2��t��5Tܲ��&� _�֤�`��k���7��]M� \���]o����V!����5=�� q��͗ρk���s��\�� ];T��J�:�����O��kX��~�ب4;.î�����v�3 -���%xM���h��5�6�����6xM�}���>��@`�*��4�x �Qs-<�k�������Z^�^$x�P�"��xM�� Tc�Qn����(\��5��N�ڡz���n�Z�8�yo�N�򱠮����˥��k|���V0g�v� �*@lƈ]S(���]#@L]y@���-or�W���Z7s ��5 D��V��]�5"�_��5�$�#�r��6x������Q���(��i�{Y�[�=XҎ[O��6��ꂭ������@�΍ZӺ���IZ��i��t���Y��xR������52 -ac ���b�/7z��hVԝ�5���N���/Bp�����4b���<�f�f�V'[m, �'[Mm92�j -�I����mB�B��j�s�4װ7Xڌ���}A -3Ia��C�$�ײ>��C/�����'JMqSB3'I-m B|��G�u�Г�Zr�T�2�1j�?CE���^7DM�&+>��VN��V���h�t6��{���BN�8�Hqd���Ei� P#����O����b�Ͻ�.z���t< �j� �� -��%>�iD��Jr���I�i�榩�������02�[88I[tf���D�)���IL����q�����N`Z� L��f1Ah�����n��M�Z�S8���T.^���o^��'�'MN7Ԡ��4��)�nm��4�MG�d��ZX�&�aU_���{�����& X�p�&�W�[NI�f�{@Ҡ�΍HS�k��C��>ܻ�� 7`IQ9����mᠣ�hp�I�F�r���V�`4�N|^��G�K' �뛊6��8�h��Ro&޴��H�n���ſOZhC#���n�q��R0�sw�B�+J���%�3v`��~憠A��6S�{"������jF�f����v��@+�v"��X�8�VI@3� �?��&F -���V���=h�U�v -��'�����kE�y��˅%�3��_oY7��j�~�[�[��e��Eዛp% �o��z���FZ�.E'�I��&�&�i��T��N��Z,4����Lng�s ФZ�3hR^<�Ǝ������ �A@���щ4��tNEf�5 �:M1�g�� 4�N�i�@��V-h�r0�L�RSߞt�# l�N5?V�0��P���b� `2~�^�4�޽�4 �� k�� �|�IA�J�^@�$X�I@�8� }B�0Z!-4%Ҭ�2 h��1�� A�j�vA�� �M�EN*�Ҁ�q&t������xr��49 Z�����B�������V��J�n��7�(�n�Bv��9�ʧG4)���Հ�i_F%�f����Q���a�XT�8m -���)�4�Ɵ�L�3IJ�g�{�t�ϴ�u���I4P����k� ��z����� -��`�>˦�iC����>�z�>^^𳭜�������3�I/���� *T+����ջ�g��Z�5�gP�>�]�VN��� -���P�f�>+j����d�I5��`�I�%��)z<+v�Ϥ2j� ���U��H�����W�1��t�϶r��RL�i����#͊�i2c��g6���ǩ��u��9�!��T��H��'�;�ޭM����3�:�Ay��̏'�|+���v��$�27� �9��r3γ�ʁ>C��5��ax`9�gR��\�3}3?S�3Zŕ �Y -���~Z�bp@� p���~��T�aa�<Nε4y������gxƖj�d+�Bn��>�o��}�㨶������Ot:��3�Ҙ��8�/���E('��P�|F� կA>�o.G��3f<���3lW�� � --x'� �=�g|�S�ϲ��"���`Qlo�F�� ��A>;T'�сG�d��[�}>|�J��� �ajΪ�$��Rq��h:���I�U�[������+�l��>S� �4^U���w����M��d���퉜�j��p��$�7ښ���>+O���L -�J�LKo�]N��Z'�Lͮ�ѩ >S�.���}Q�@��3� {&�V�d!��v�����:#�ᐳ�6x�8��Q�gj_�nB�h�R�|��B��d�r����_�����������'؟�� �?�Gеl�T*�R�����[�I����,�P)|�̻����8~ό��]�2���0����<���"T,�"�!)����'��-?�����f�ޠNe��^���g�H��Ji n="-���E��ǏV��G�T�����]E�k��at�$�V��\K�>� F��u*��JA�8��Ӽ�XQ;n�Ѽm��hƊ����x�bx��G+�ؑ‴bF:R�+¨z-��}�����6�.��d��ߜ%���ӽ2�x��!�oS��*�����Χ����2W�K��J0Uej�(�u^>�?�k6]��ŊH��{�����yW�����1J��J��G*�H)LF=���`���4KԿR��9�����FMKe�����K��SI�&w\��V��`*va��n�8ڣ����)\7$ĩ�Š�*NG��N���*���l4�����&���z�"�TC-&�B�rG -=/�yρ�D�!*I*ՊT�5 -��+h�љ�{+?��P_/� ���1=ߠ�5w6��^��L�?^f�5iw�=:�U����R�cP�K���7&M����C����j�)�!��'���!�����}��0���~Ҵ�ԡ?�O��o�����y�W�KBU%� -?ۻ�ډH�عN ��^g,���U��<]����zui��C���}X'ӥ��ֶnc ��] E%"4�] �G;rQ$&�W�/�lal��D��T����� -���r�x�f�����?�2�Y����:�>��7�_~���6��n��D&3�x�� ��\K��UU<�V�h]���,@������ SFYV���� ����y5�+���A���@}�P8��-d�� ��) ZFn�a��B��*�H��[$Ŭy�;]�7�}�my� �Z)̬($פd}W������ -��f&!x�����jdl��(Ha=��y���G*M���[;��2p]8 z��v�L�a@3M*�7��|�C]=Zt�'r�+�&~���\*����__����Z��T2{(͏���3��\|W����Ү'� - -�����eҙ�n�H���p ��S��޽��6~m�rZ־F�2m��bZ�a�������Ug�4���;�olۡV��u�޺�RZ����q�+�����.�j�y>�5�ɒ1Ql�d� -��!��Rk�ZՃ�U��$Ylz�K�M* 4���쪽�.$�g�Ԭ�D��-�R-g<)/���3�RT�(6��&_>��F ��P�d)�/]�̂���Q���+X� -�5T�d90�^��O�P��ʃ܀����swm%����Zh���TV��z�G�1P4� V6���IbC���� g�8�?!���[7�mD_Oc����[�Cee?���0> ����OXM:�|�bh��2���"Xl���T�(�FQ} -m���GN_�c/-�g�����?�.p)�b�O��;e0~K,�M����R� -n�������!�vE�{w��!��T8��8�{ܔ��:�VM����,6�i�^LJL�4X����F���T��� ��q=f\o�u(���!V�M�j�g~�[�k� �[� �S�L5��m��)Q�ν+ -���V���}<��"�5J�s��Uh�#��EU�jfU>�mK�q;�ڄ�X� ��ey�fZ) c�j�$R��*�� O�B�������#�w#p͓f��ic��Z{X� -�ά�]�Ê���Q���9�ny��V)�AM_�n�T8S_�y���6�O3��:��S푗�_PݎV", Y�+��J<����>qj[��d�V�P��=�!�'Z�ROX(�M�uE����م����<d�H�黒�%� ���AR��o$���i�c�^۶L*N1zI��Zn�z֎��K3�Ѽn �i~%��XZ�-��~�bo�75�-��Xr��ʷYl[^4���@> �OZ5����b��.Ie�S$�e/fZ���$6I���ߪ��s���>پR�$6MK��]�V�z��n�U�SQ�C�ض���׃�:kf�՜�\��an�~T�BXLh�2Z�`���rPx��؝����"��>a(�ɇ�����P������� �RՂ��5 ֧n��m!���$�)���C��fyZ˹¬��:�+z����ƒh��U���ILK��z��#� -��(̲Z�{B�'�!b��"�]���)=gH��C�~��Ph -��E��w�v��c����Ǩ�Q�w�)��@e� M�:]�@��^�jS���k�bO���?^u�p�{n��NG�6D”E>�f9vh����`6�x�J����Z��)�ejc�l�.F�V4�V���“�Ta�V��ƳiKC ��zpv'��X������b����H��v�a������ç��(�,�fgbT�K��ՖNV$ �6���Ղ��,wW��c]=I:3���R�f�W8�Q���v�:�k-'�0��DR�v,�:��MEA��};�T���6���1��a,��P�����?}T@�P�I'�s&w_[���i�/`P�㣨�c�g��HA�!�NQ��+�d�=�KR��a�Y)��뱸z�Rq���BO�o��D�gh��ZS�7����8v��[�'�(� Џ�]�% n�l`�V�a�e�3�_��1>��y��4TUHe�*E�1�L*&Q"I@H�#���_�Đ��H�H������I�V��������`���=n>P��TN*I��R�e��lU˅��g�Xݚ���b�T������Yq�B�lֱ��&{J��ҷC�O"��9y�T��m���J�� l۪ -��S��d��P��4���I�$��v�a(�J)$���-����;�ѣ.KS* .�\�M� lӐG�&m�mtm�����V��.ũj#I9�� ũY��[���z(��+���8����<�����#���B�$9:��eέt�n�l�o%�:r�y�jӔ��G���S�̩'���!��R�q�f )�m��]���W�s��v貍Y�ʵ�m�n~�4c��@���?,�J�9?�PUI���Ovھ���k(NŮ�WF��T"�R��dU�)��>��9��#��-w�æC����u����%�o�y8�M���>__h4R�4��v���ږ���k3R�)ġ.�Z�X}Z���wm�OJM� q^��X��"y� -�'��c���5�/g&�g1D��΢ޏ���̍u���Z�m��[_�L��2�L�����F��w1p_V��V�vkO9�{ͮS�o��� ��r�]٩���y6�G��%'��r�z*�T'�k��1`�VM�� �B[1��4[��I4��f��}�4�M:0�Tr�I"ThZZ��8q2m��o��H���M��BU�k�e#���}�<�vc�a�3�%BgZ&N~�vS|���^o,c����j\�Ր�b7�����d�ۈV ��3g+��ic�x���"i��@+�N�;�{8[�VQ<��|9��w8;��)ݍ}��"��Ј�����m,7��8E¥P�ң%wz��81�Nk��|���.?95]Ĥ��B(����*�ߩN}�F���N��H`5OF>KA��s�b�L�!"��":����8�V���>h��"�6z���0z-�� -~ 4���n�A7{;5��Q�����mQ^-�p�WN��ԥ�TY>s��$h'.�� IwC}\TU�����p�p�k�H���P5��Q� r=��u2αS=�,�F���Ue�M��KEl�����M_�3�S�{��Y/���\���*�~�6����k��/"����/�c�ݤ"�<0iR�S -A((���u��p"t�N�\��G��z�ig���p7�v��' ���֙C��j�U�)�n�C~����-�ˋ�dže��ԔF$rzO��v�ؙ�xvw�_]�W&d��l�H�Ẹ�g�OҒ?���E:P�2�n��i�X\�n��[H�ݤR�B(Q����<�(���[�b}�ݤ����%E�)��P^;1�dG�rG�%xq�� EͅԠ(1p��[��ㆵ�μ���$�5dO�5d��l���*������"} �1��sp7�J�(+r���'�Ql��������{Qc{��bk�ڒ�������������e����=�(�액�lA6�ͅ�j�1p�2�d�TJ�����S�T�c� wӰNh�q��Ҥ�k�1�z��Yߐ��T���s����3V�jG��"z�8"���$�<N����^�� �ug�lV�U��g,+���_���B|ti��px�F���20�+Y%�q�+�JOњ ���n� �H-@)�Qs���� �ˋ�vĽ5��mN0���t��n)PFJ��շfQ�[��vU{얪�8&e�P�D�H} R��0^d)�{C��T#^.+�`tQu�Vf�o�TUB��`.�ܣ�,\a���}��4��C��h��"�9$��Z�Ɉg�?<�_Xv<���d��xJ,���m�TI��׍9U�wy3�/�B�6��֚=��X�z�����(DŁ� [�D�� |\��s;���Ր���pX�3})�c���}-�O�o�7}���?l���E�O_o<�nƆ�Q��Q�B�Q�qچ�d��K���a�]����˴㴂E�ٹs��y�$����W���zՋ�a�>�I�[g�BXcyAh�^���xND���H��0��T�ICi]���7w���W 3�o�&�,� {�����D=죠a?8'��L��v�vZ���m�nD�2fY���#��@ -0��������t�1(y���m��G�r�V�U��% ��/<��~� �j�e%s�� ���=�e�ʩ�4<SŇ7����F�aT�u�����`��>������6/�h��>ۤ��D=eӲ�W�O�%��*����rK�<�k�a�?�f4�H�P5M$N��� ��7�O;5hR@NKa��J��U@`���/`�!� -��n�CM�fd5��%���k������J��f�i4����|ţ���*a^���^������z]= cܝղI��MN�gJ13��Ft��8�&�31��h��@�%qd�����=Z�oS�+�3m?�ݝ]���{W��VM�n��]���0B�;��zT��$c�R�œ����0�8�s��&>�0T9 tb���1��)��8���B������x�i�J$[�Z�:�\��妖����7)�/�Ҁu��Ry!՟���dxq�`��(��+V@9mO�qDZ�XS�+;2����Y+���̃�F�\�6�T�qn�MV�B彪��ē�S�D�?Y��S�G�sQP��7W�c:=�L,T`5�}�v���=j'��O���7�s{��9���M��3 �t��L�}��fа�##�`�O����ni8�0רf�%W�=r.F9���h܆$��-.K�}S -t�]"E����}֕B-���|ms�����5�U��� ���@�'gf�|i{��cp�_E��^L՟ҝ$fL����/��n�3u,��)��3Y�����S4|RN�w�Lc�iޢ@WSAB�ژQ��I^m�)}���(��\9&u H�W$5{Ȫ��P���r:�4U�`�����beni�����r6�"��C��*�� ?��&��Y�D'�07y�#ց@��c�-\�����9��dVpj�ЊAO�c�dm�nA�������iT���IX��P��^�-"��]���|�ۼ�e�վYs�Y�RxE�a�j��ќɂ��\ݰ9�o� o!�GXz]8���Qf@jxz����肺Ul9Ɉڿ�is�~���7� E�GT���FRh�i���=ދ�Y -)үl� ��=�Bb*�U�٧ž� -ڜ�bzQ�@d�U��( <]U����!�ɰd���������[�Xf��U�yw$� �MY%��>�B�O?�g�~hP��[�dxd�-Ohiu��~�<�#��|�ifN>����. z6���9���ô<e���R���;[Eg��J�;3���G�N��f3�*��-[�'�D{?�B�Ƞ�17��d�lېH��N�'`g��/�@)��%��^ -����SSQI�.�Y�аM�.=hsR��A^�,'��+h��H�� %psR��h�b��;��Y+�>�oF=) �eE,uX�C �_�;��.��E�V�4��5�� R�B�T�� �\' ��d���[�~C�3lcic�V���� ����â1 7�����ٸ9m��Ԓ8-�$[��G��S�tR��uڲR��rw���������O�/�<�ȸ|�WD�Xe�';1qs��q(��p��DJo�';�����30���Z�4���8����R$#�MT��\cg��vF��Y[���H�戧S7�ꅆ3��2U����i`��e�i�À�0�-��S�9�9�]�(��^ ��[�oj˪?�󇑇�]Ky $/cQ��?B�K���͡�]��H�e� �(����L(�� -��q�$2x� ���R|��U�Q�<�ޫ�CZ� �Ϧ�Y�^ß�Њ)'��j]�J���H�]����#<�Ζ��fC:��+��lN�Erf�)V�X` �R�Wj�@‰����Q�����! .vϔvzl{�S87l�Ry�A��iF��� -|�����,���i�%���Ю,��P3m���l��؜�h�Y��mV�+ c:RY:���U6� �� �h�P��Ë�Y&N��'Fb���T�%��ی��kT/αas�"�dT��լۖU�<"��t��F@�P5v���1]� ��j��� [�(�'�T!e�|�lI� ��O�+����ݮ������#~�����l������5�f�B�-�x�d�G]��(T��Y��g*��V����M��H�c�Z̒m����3E�S|� �� lV�D�#TA|ZVj���ݰ�Ѣ*\;MZ�@�D��2��( �m��L-v\��H�.4s��:;8�{F���^��@�)U�RI�-�hsڐ���R��+Ѽ�X�\KS�;�cݝrif���@V����Z�3G[Li�Z(nQ��u��m�R��UJ�0]W���6Ivm��Jh�0E�o�����͊�{K���m�EN�ĩ�c� �y�i��tG�,�NVǦ�� nl�l�na V�f��ae���L"�.�����WYU�mN ,�PhS��"���2��N����?�����=�_M�5 <�Z s��ڍ��O�9���2{�J�����Rbd�8�|����B(ZE��C�e9�Î�옌��y���l���$�'u--��p8�Z?7(V�»������ɛ����Cő� -���=^�>+<��9�Xw#?7�>_��X2�u��kxpˢN,�J8��vSܗ�o��Ũ��E)��ӥ�@I�����M0s����z��X�^�1+� -gF5�>���g��z�S38�:|,���}���iS�� ����4�����[�cB��f��I$;������ �/ ��V R2�#�~P1SС*O�+�j� -~4'F]��]��u:�b(��o�~�V�[�GeV��� ��}���� n�m�����_%�I�O���q;���� �@,XX�x�q��t-��w��a9嘾��͡Fәe�������!xyqO�"�j�L�|�rG���B�6���SYū��|`�aHF��)�<h� j�7��8�y_�� ���T���0,�P c��:3w�gPՌ����ߜT��`sD؆��$l��E��cڶ�Rz�f��p�4vO -!���2_?k���]��7)I��J����jH�(*J.@J��,��[�C�S-T:�;��t�^ߤ�i�A�����;E�e�IM��$hs��Y��5�K�G�s�O�?HU��>hs4EY,~<�o -S. 41�%�Z�7Ƥaf~ݍru먓��f��|`��/Kڜ*  ���s�n�Ed�0T���m��PG(FK(Z1�6\�?���J�!�q<p����{�w�N�Ç�x�ν���DPB�@�������y+1]6���K�C�d7+`��~�1@JZN4w����n���q -��kԧc����c5JQ�{&)^J�\;�׼�������.�>K�j�j��Nx�m�m��V�W"`�@�v�mx~7lN;�i��<.�ɦHM�Z�]���n���(�׊�s�[D����ch���/���XrZC����#l�}"MiZ�S�N��4Aa����۬���;=a��ǃ�MO=��6�P�gT��G����k�é�C��;��'�������Kψt��pUN���0|�|�6g�Y���!n���KU�����is�G��%�CG�U;����y�T�����hs�3`Zf�眏U`i�< ��[A��#v���8�d�鲼��Z8w&%B`G��HҜb֔`)uK�[k�����䜭��jC1nsԜ�f�14���_& -IX/��b�T�nf�&J(��@��-gvo��:�(�3sd^n,�^�A�����k��:�z� �ת���)���F��B�i�b~_����Y�J�է�i�,S�B�" ��S@P�P��Q��{4�0,c׉�| 2��3# ����?��9�_(#��Vh��Ig+�1�J�[���r"���b��o�K�#��c��PR ma[���^7����[�`THNL���EI�� �?�^ �b�A�f��\����$�m�</��$�صS\U�����xJ3�v#�v5/ ���2E��AP�*]��U�]���s��l�و]W<��q%xe���*�0���FӡRw���R��h�Ȑ!F�"p<7�N�ܛ���:I�W��A!��� �Dg��&����r���gY.�O�9y�V�Wvﱟ��հ|��}���Ͳ���`��;���a[���b_V�~�u��<"[�V���1�� �(��֑����s`��y���(/P��T�ܼ:S�{m�k|+͕�?� ��8*;"T�Nv���� ���6,���݄�}�4GW��Q�������cւ:j��a5��ݎ�}�?��Ub�/�N�g�{p�Ա@c��j��⶙�]��qќ*�d����O[�[��dž���(= -a�]@;_�;�Dz�s�������� -]Z���Y�Z����%]� J����j?�z�~�Y�21�bIB"�UU�h�W���ەC��F��QX�`������������U_�h_ԗ7"8�N��r&; �Y��j�Y(^�g�� x��ю{������2� RU���󣚍�*EȒ� ��7��L���Ø�� -��+W7d�r�9�E��|��s�.�K+���5�筸�*")���{�V�'܌U8T;S��j�~�� � ��3�B���� wT.��x���#����*D�fіwZ����n����}��W�h�5��4�7j��˱�H��uoz��:�-{*��D6eDbY"�����#�Y䟊���i�k ���C���3�� �(�L��P�g�ܰ���ǀq�Vʆڙ��� ��� -�p�eK�jv�߆�QZd�=�!�u,+~�}�n���MB��z�^�nR|��>2����};�J�BJ>�e�t��������@e,�u�� �9A�G',�5��(��U!�ݿ�V����cOC�v� AS����V�܍jǙ�°�O Ͻ&���q�N����b��JS�m�Q,���a����o��Kxo���M�{�K��Rb�KD�BQ�l�-f�����P�G�Y�)�C� <C��< {��B�F����b�8dF���Ԗ(��`��������יf�c� �D�L:$�������K(����7<������5�[�b�\�g���jmǖ ��1H�aj����^Z�C�c���Jb�?0���6�ӵ�A� �T����fR�<8�����|�N�%Ì��Ly�kl�-S*a�Q^�K�N %՟�����E�.���d��7�Șn�� p�'�2p�J$����1 m���z�Lg>��h;�K��h)v\�5qd�� -E��8��(�����f�8fm����+�C�֓�ݠ�����ݡF|�y�K+[�Wpc�N��ܑ{��T~R<�A��c��gD�]1��p�6�۪�[n�a�� �j}-/a�K�`�һm�+��TU�����'�Hx��,ǖ -u���K�5rU��Y�w�d;k=]�8���b8 CZ����M�À����.H=V��k��ŏ�IC� ��8��������p�` -�l��6�n�К�q �ܮ�j���6�n������ڒN�bM`�l���5#*������t�yk%Gn^��5��C�m��!Ark�W�?�v�V�\>�(z޴%��`*k���� K�1 �bI.�۾;���}���g��z��0�vR�3��Ng&�ӓ�,5IKk�Ʈ9�:�n��aX�`��'[L�Ew�V��#y�d3�x�p4�:� ���{X���3"U JH��4 :ڎ6�δ��$��k�A�P+pJ�h�s���2PIA^�;Qo���x;fMڍGB���]ݺԝP"Pj!�P�5���EV!��=aw!�f�F�*M�{����d��gUݼ ��3g|��uǭ�ɨ��Ͻ��{�ۗ�T�\�;����P+Eގh"�W�M~ڟ�{'��o�U6���z�"u�� ���S͆3�wU=�y��/S�l�1x�&��O�38�wR���Q�� m���;��c�5^�irUEޣ�X�:o�/_±wbb����$���A����w ��2-_*u��n�\a� -'�N�o��6��m�cs奈9�ͽC����;c�9���굜�;��ŭX� -[^2%0�@�?��9�w�}��� ��ݡ�����|Ԑ�M�c��k7�2���q�5y�Y�B�+���Ӫ����T��y���]Zz. P�f1�D�,rL$/*����/p�j�o���"���6��$�A2F��N��{�_���n�]���F>��&�X*.�����{��뎤j�2���A�+x�7˧$��h���m� Q�v��\�;42}A�C�ݜpIY-<N�K��t��q�?��(R\�Yfȝ�…�^LT1ũ4Z�]R�'���|��Z~ϕ�; �� -�#�����;)�KV7����7�M+�j0�KH'��UjO�&ߵJu�J�]Öu��|��W��;���M�kQ�u���j><l}'�Gy��c����;qqo׷�w�R�47���Q3��o}��x^+ �ߴc� -�]k�=�?'��]^W�XCj��f��`5���r9�wRKW+� \,�7̺•nT��?����c� (y��W����v��V��ouS5~+��I�OY~�q_o~׈��q�烙��M��� ݤ��5Y��/M���[���VKyP�O�M��w77���8�� u���w+쑹�wR���� ؝ƌ*3��T�������Ս��� ��;�V׍��j�x��t��(��s��j#�8/�]��_k�� X��n��VN�ݡz&�����±v���?�N��[�<��ۛye����w��U���U�a-6��N��o�J��h���n����:9�� -0�����;�[�dP������N���p�7��P��V���u,Rk�e�oR8{d�X��q�V}O7C3Z�r����wUa���-��D�0��w���J��We���y�(�]���U��p���DUÕ:+�WW�I���U &�w��Re_�` �����ֺY}M��v��y`�~y:�^%��<�߳���Ia�� -�H�Ek%g����U|Hhp����e̙�I��w��������"��.� �#���w�FL�P���Gl�k��Y�&��4����}�ǧ;9/�wz��z����z޺�w��7��N��� �#f���'v���N���� nGd�6�vY<\�o�1������[�2��<��ާXwD���s���f2�uK3��Ƹr��<�"��PD���њm~7�ϘR�<NHI����9�7����h����2��������ɿ��\����T�˓������T���M�ms������5�"��P[�8���TN��V'�o��k�ƺ��\�W�-�w��MA�t�,�>�O��;T��ߡ<Q�HG���Iw������,|��@��e,=�UR��+vL:*����A�+w�� kM��w���wbj �o��4�~6��k~(��P=p/�����Zd�������\���/�s��o��q�M�ग़��F'�;6�,z��]< �����J߿����E��j��Av��l�x�o>�7O���O����&�� Ҽ�x��2x�R�}� �c�N'ێl���o��"��1߼�x�����l��Bݫh�`;��e?�w����<�~k�w(�n���c�f��<�I5���<�/S��l"�-xX'��o <Su���ljӁ���p�Z�t"�c0����/h�N�d�m5x���q� �DҮ�@�qC�w���������M����e��^d,�l��b�쓀�>���G�}m�V�a �$�5U�R6�A5-�&�5��77�a����Y��������R�?ӄ_���M����.��|7���hF���Y-T3��x�~!*ā�?��3�������Ú�0`@�0SނR���%��Q����(���~�P�t��ߍ~/^$��F�U�]پ����ZD�N^%��yۋ(�WZ� <�ig���'uL�j��g��mg:xU��>�f�UM�/�3�v����w����}MU�>x�S�6�P�V�W)�"���ub4���,-���W_��@B9���D��7Oj-�m���+Y6�Ғ���x/u�Y��'�5x1��'M�*v}�9�NEB�{� -Ќ�o^e=�F�Ia���5�<T�����Yk"��pB�'���5x����e������ՠ�U�7��߮*>A����Um����q�>�b�����j��*���!wU ���.�u�e�ʆ����j��*�ť$ ��S�w��P�Z6 O�oL��'�s�N^]>R& �{� �Cy1�9`xRY`' O_�pRB�*�<������!{�L��� ��j���/�}�}xy���b.��5�Es���d{yY�(j�V��B�\ ��m��m�`xM�h�z�S��7Q��'��� O��1��W�a�0<�6� �[}��8��>���Ueg��q��E�m\��r��RM�މ��%)wu�or��lB^�q��HU6��ʆᥖ+%Cۏ�!wg#�v��x�H��q�x��f�)����f�I����Yx(��x�5pf)�f᡾��,�J�Q/��'�71������g: �*_�h�s^* o���W�ͬ�;���E����S������q�-����WU������'���«=2J��S��w���«�q.k���Gh뱠�U���7 ��i��}\UX �+��m�����r-}n^e�}� �G���7`xR��� �Cau��Pk�1�4"����+������zg�0<���M$ �P6 � �WI,�Iĝb���$5�u%'у���{�N�T��O�������߻9x�\����ON�l7�fl?������-kS�ۧ6p��K���m58x�{m��7/�������)�gѹ��)fS10x -����zc��{�;7O'�����}�oz7O;�Ѽ���_8:����nJ�>T���ec�rb��<+�]�� ��v}� �G��K�/�sdx? H8��v���S ^���~c���_�<�S<<1xRl�<(xM���F?���e�z����Z�(x�, -����oc�l������q7�Z�'���&��������CTۆ�)�R���0-,��e���<�ݩ;��.�5o e��r��Sȇ�fb��x����Y�� ��g�}���J�n� -U����}�J(���/����g���$O�ߪ�� <Cm����n\;��������������U��(;V�=@x�L��7}Ud%�_�������us�0q��!8x�ޯl�%�~s���iϞ<��|��g����<��?Zg��g�n��R���v)uc����n��)����ߍ�S$�7<1x`?J�u�n�_yR�H�>�� -i#�O�$I�����쪳n -h%/ -�T�_��G��ߦ�Q٠��E��"A����Yu��IP�P^�% I���<} ��GƏz��'^��M;��?�ϲ&˕��z�3�L5H)�O�G0�M(���� t��T��*AIS�U��!C�<�#^ -3�� ��{m�~N���U�.�r"ݳ3����p߾�� ��X�FpҽS�l�L<N����{; k��|<KMc��a*����A��P�X<�;-�# -��S -,��6���<Z�b���4�������_Q�8��Ӫ�-�wґ�|e]0�����(x�� - -�~�"%�0ӳ:j��q�������\����GK-��Z�VJ 6KzSf��ۿ��5���\�����j�����7'O(����g0�l/��1x�r� =`�+������G+�Va�ha��0x<ט�����l5��F�̳<߁�C̳��w �[�{�W9S��0x(�y�i�1x��x+0x,��]ǂBs����X���<~W_a�`i�v �Q� e. �m�Z]��lL9w�J�� ^e�����V9ˎ�C0�Lp�*���q��l�������U�9x ��d {�?�g�v^e��R�b{,B�������}�ƒ������R�s'��zL��8�i�[ ���� �����\(<�1����c � �WY��Px 7�(Z(�����@ -����Hxxόg�zL�!`k��L«�ݬ�K��8&:=u#�!�1-N�HxU�D�C� -xE«��E C�<�Hx�l��,^E����y"��Jj��"�1�t���W��� �:.u �}�K?�sC�Uf��(<�]�٫���ثeG��J-�#�����v����vE{��N��*���Z(� -B_3R; qH/�x�Hx�v�N$���}�&=��2X��Ix��Su���2��j���F«D�_�O% �������*^��(w���r�Y�j�B��yG)�e�8�p�]��`=y�«T��VCCI;Z��g�ϾҪ�l8���,V��t*-�%� <D} -�S�ÚE_7@xȚq���0�?Hx��}��Hx(�{60�KF�!gb.�:�l�X�&^�6����a.:��C��Z/��4<NW�pC��*����r`��3hx�42����Ǻ�5SR^�b�s ��s �����cq��_@<�2�!��;^� �c�N�%�x�>��\@<x��{�ნd��Ylvo��p6�𧱫��\fXqi��]� A��J� ģ�鹿x����m��p�gf�_6*^5B���ܠWxW��R���0�r�P<��L� -�WɃ/eA�*YMgۡx�f�����܄��a�3.��x ��ź"�*^ sa[�{췕�mL<�+tA����1K0�n��<w(�.*�9��: -Q��R�*&2�`��-*^�^KX<LΖ,JX<�n����sxk�������q�he%��x��b�ָ�b���Ń��.#�ِ�{q�`���(o��?k���+ܶV��Yvo�a޸xz"v~��� -w��a�x�/K�o\��-�\���>� V�� ��q�h�N\<X*��Ń����ū�}w#�|�9�,�*T<~�ei��Ud�X�%*{�8f*z��m�N�A�+LZ,�x�]{�Ѵ��/;rD�������z��b��F�u&��V�L�J8<A2�ī��� �c�AV��x,:��FP�����A�*���� �òĵ1�x���r/(���gߡx���K((<wK�g(^���j<Xʎ�+��U��4��xf�n�O�x &^�� �G#�Y!�h�oWbE+Te'ðS�Ѻ�(�RY~$�ھ�<7�T$�WM��;9�·��XL<8Ϟ��L<Z1��KC -FL<�'�7&^�� y2J� w ���3�R�� ��G�<�7�wِx��@��C*�&lG�歱�#!���6x(x&���x�dE��C���'�x��pH1��Q�}_׵#��:+��\����<ſ�x$XK�'*^#��L�������L�ca!�kE�c0 ���5�q�k������}Q��L^J�� ,ye(�\����Md�EL<Z -�/&^c�.��Cz�l�v&^#��,���J�9�b�Ujd�c1�X��jf�U&�P���OZ��x�-ε�L�V��g���^G�f����Ѡ���H���b�ᓖ���oh���kH1�L<�p˴����I61��$�B♡/"�}�ϝ�Gk��u ��nm�`��RlD�fR\e��A`ҽ�xxE�\����O "��dc����ډx��d]��؃p9��J� m��m"�a`�U�0�XDPD<�ل��x��^D��� �5�ہx�w.�[�m�;��_���M2[�qx���\<<X7�\@<X�l�N�c��}�Eij�=�j+d$� �Q=��Ǽ�b�1���@f�Y���øˈ����C*�:���L<�x2k*(��@�P<vU�� (}�A�C���ݽ� �g���P<4���x��ڱ+6�J١x���K((��Ɯ �ǫ����x� lsA�6Q�������Q�����W�*uA�X�η$C�H�8Y䨾 -T���C���+ W�'����5F �P����w(.� π�5�mw_P<f���e*BW��ע�QbjŖX�`&-S�X��wQ�p�]ۢ�!�`�<S�H0a��x��2Ѩx�J��g��Y�[u��8-�d>��x<����T� -���;=�>g+����-j��1�N�q�,�v��c�lX��4!���o�:�a����![˜�F�3�7�t���S ��x�� -2Ϭ�e��!X H����;�튬��d<�[����l�0���i��x���w����R�Ax<���_����R\,%�9'��a?���װ���V�㡨�����a�����x(���i)w��P��ɉ��X�����xH��A�tF4cl���)�.R��*51ɋ��ON���ۃ������D�cs6�[i-���c����xo�ٟ3Z��Pm;$�l<V6p��ʟ͗��x~���k�G-��x�/c{��������� -JA����5hi�p -�Ƴc�^�ʸY�l$ی��-Sb��2f��`�5�s��6D�7���٪�2��0{�������^]�L��}*���^��B8��1���[���PI�6in��8�M`t<� g�Y#�}I�!��he��x��i=kǹ0�l|<�D���]�㑉�^�zǹ��e��Q� �bǝŴ�ͭ��d[�:�l�~�&%C�8v��L��$�? - g,C�R�[v���Ȕ��x���S.���!��[�MX5fl���5��uĊ�g���ɮֳ!��Ut<�Y�|���ma� �G����e��m��%K~a�8 �Rթ�tJt<:�l�v8�q:�G���w��c����lb��X�B������x�8F ����Xb�D����?ꝩ�2�|�J��� -+�=��dž̫���G+J!��g�"/b�f��������1�F��Lǫ�,uKr�F��a���q�eb��17�۹�x�W[t<~����+C���1��r۠�e��L�c��R5��U:�׽�x��hL�d:DE�5-�@:��(�":��mԻ���Z�i�2PB��=N� i����!�Ä����Pح��(4�|zuKdb)G� ��xx�j ���I�����yYkuIh�ʔ *B���qxځƃ����x���B�1��F ��`�����C��r���tq%�T�l��p<�y-C�0e�N�����(Vx��x�R^Lp<X� 8,�!nl<�賝@l<n{��C��F�yϝ������j���Ee��x�����ӹ)!� ����d��;q�d }k�'0R+��#�+'*�m&[�I�̩xfx�[Fg��ǰuQL<̥�f��x��_XL<ZXK/&,v��-b��,����D���&���x�/�0�}�6g����x˒�D�աx�ʳg�]�^�C���AG�vrI �� �����`���{�0��|q���������w �&��2�QJ���[�!v�I�m L�}��1Bl@{��q�w{c�!����sg��Z�s��`����x��V��p<�q��� �g�c��!|�)�*>��&�#>�ۙ�s���m[�h��=��l2u<^-T��}l����x�Z[��x��ͬ � �� �G�&g�d����4 ��_��dz2�2����(����A������.�����!�ܽ���剰e�� -�P�ǣe:��i��)&¸jt�?��x��N��J��������J���I��<<�6}�d gY2 Ϭ�/@ʅ�&��� [�t�X�������Ap�Pbi�홐G5����LȰ:�'@Jh,��yK�!��ӛ8�3���xa�U5�� �� -&ox<���s���`�V��x˒�x�*<���mԱw���L <��9�+�Z�V�uT��t<Y�):-&���r�s����&�,:^��Mk���=�L�c��:Nǣ�S@b�� 9�N�C �5݋���a�g��%1��Ut<������;�ެc�t<����?��.�Xp�eHl�0 -�����8x�u����0*�+�CG2� D�[�L�3+v�"� -��v��+�A72�ܯ���W����xT�<]�8�R��I� G�QƳ׹�x��e�<��`=)�+4,.-�h<��� �W�|.6�� 3C=��ml<�tT� +k�8Ë��,����d��L ��8ء��x����xMD�����G ��2Ϭ׽�x��!8���2w8^�R0U ��5���p8޲d8^�:�2ހ���N�� [w2�I�b�� -CcXx<�N�����ׄ�xȣ@-[��� -agπ<�"��=�qJ\Y�[�m2��y-`��D�3�r)!�4���<�^���x��‡�T�\���;KS�;Ω��q�܅xi��!Up��w>�Y��}�q��oy -Z.Y������\���ҏs�haH�1N���`��� -�?�pA��㡔�����aGW��36JÓ���%XȃeP�Q�<��J�<�;��Z����N|~�Ts�T��h:"-�X|�����-��aCdM�<Xl(@^�$@�Y��wD��Q}�� �UF�^|�F �a!L�~Bՙ{�����9��ݦ/�M�~� %`��Rx<X��3:�ǰ4��(P�L��x�ڱ�3�x���㦁ǃ�:��ǃ�#�x<X,���x���^x<~�u��ɳK�3|2�Jd���%�`b]R��:Nx��5��B�Q���ۅ�k��S�ԏA) ��[���[V��d�&�wT~(���x���{��n�d@��dI��e"�y�b�5e(2#����7kS-�U.F���P͌<m�$���`N���������=#�QZ����!@�� �3uV�����,����b���=yؓ?��3�Pee��Z���������'3#�dc���Ǡ-K�c����3k�#����#����zn#V��pF,��8���Y��ȃ��g���y�����ó���y��|����,����b�1�φ&���8��fF�-�Ǖ�C��pyQg�!3�U�JXwʑ:���8�Pg��������_\�2#ֻ8� -٪wv���b��y�V�XsQ�7 ����2$��$�}��@:$o2$Ϭ�`6�]�0mS;�k��]=M�5�T0���c7��3$�"�� $���:���PZ5�\@�p�y8$��PJ��~��+v`dJ��Я�Ёp����-K��-�(y,�駧UY†-jWs�z^�I�Xm1i(+H-�e� y�򮉒�s�b� -�[�����A�cy�U�Ѳ�˒(y�*J� �.�;J�n���f�t\�����QI�ӆɣ�%��:J� �G�����.C��Q�<��� �[�6Q�AR�(٭�7��c"�,w꼴eAV!��8 p�6(����@���E���C��L���<��eDbs��B���];!b�r!�8[�|����p� �C��1�8 �'��t@޲dB޲ -��f!�"m��\l�<�\U�t��h^]�B� ]���Dޟ �7]�d#��]Ɣ�٬�:�x��A=y������c�]"�C~Fp<�{"\�����B�=�xd�;����w��{y+�t^ �G�I��(,�ڡx�4bj0�0Ͳ�E����c��1�Տ�b�g�%5��cj��v"�� ���.F<<xǨ��px�4�霆��a�����g�uG��Xg[$<���\ <����9x�=���/d0B�$?�>3�=>wg��N�^2oM���½�v�����w�"Y�\ -�ȼc��;���;�{���wȠ �Q�/�A�{ �A�m�Tژw��^g]�;�/�y.�]2�ny��E;2�n�f��c��L\�c������;�]�1���+���u� ����kWMCa���̃j׌��1�qeҮY�d�u��n�� -����^��V�eq��1_�A.㸽��av �y˙P���Pv��s���̒ZܬΪ���G�Av]��� �]��}� �BM�yf�]���@v�\�Z ��z��w�]a�s) dK�>\��`iG�;Ȯ��} -�]AD���@v� -��k�H�Yɽ�� -�$N=ٕq�ff��8�@v���8v0�yl;X�,�,��_�����cWЅq��'3d�bK�\ ����5��Y`�Av������qW����q����������8�X����=v�]!�/c�J�~��� 0��)v��; ss#��в ��m�l;���2E�� ���nX�憯cY�9�� n��O��uhu����uHAZk���P��HT�Aݑ�8���WX�d�0dj�2z��?e)�E7��!놈2"N ;g�eX��e3\~��e����Fl�:�Y� ��5�Q�%gP��TC�� o�N��\fL�8�^�R7\% uːua��N�vD�Cf7j�a}>{[F�ͱ)Ix�0d:�2:�� �Wb�Ai���LǪ�ӊ�xG���[�A��1���+HA>&����ҕ:=ԗ�t��u -,]Ad�M3�ҕ�s���j��R�+MLa� -��-<T:�5T:Z�ƋJG  KW��hVm�#�1������2�汄���ǯea�PT����J�Ͷc�*��j[X:�1�^X:�6]��X:Zǂ��s�� -JW�ֶQ��-���[lW�Y�1^A��X P:|�$�yP�ƚ�J� �lF��X�؇�f�O��r�.�t��%�t4������a= ���?[{�\�p�G���څe�P�e���������$7(]aKD��Qv�'*]a� ���J��:B�A�#�K�hsDfO���JG�q�/�V܍�'�t˒�ta *ueZ�n����رteV��[ǁPқb�W�d,ݲ -KW�u�QT�N�#��tgGq%;��D�褾:�Z�am���t�b�0i9^��V��?w��DU�tT�=���P:X�'eDŽ�����t�Ҿ�-����X�e�ҕ��R:���iK=�dI0�d�89����cS���9�tV��A�}���Τ[�̤ k0� -H`k���:}N��|�8��B1&]��1�UL:���Xs��W�3�� ѳ�M?ζ�t&@4� JGɡ��H�����&�OF�Ö*B�� : ��c���c��A��|����t_� � -��A� -�3��%U�|��WT�dIT�e��2G[�_9k�;��—IP:XN����v��Ig�V�����tŤ���� ���QL:,��� &ݲd&ݲ�IW���+�1x�6�ܠt| ��3RF�ˠ�t��b�l��Qv��X?=:��}\�6Wi��3���2���8��j�J�,�D kP� -Jp�c,*]!k��;����6>A�+�u���*��ީtp� -�y���<��1�r /��Q<G��.���Cf(mS�gn��J��^��dpѮ�:o�]X'xt0���qt��X�#��w�B�:)��Xt숺�B��[� F�%�kD�Y_:d�� -��^����g�3�4A��1�� tӕT@�uԲ�s�+cl�9։�*��9,��}n|.�bϡ؇�t�� -� 8�{C���`��߄=9{��n�kc�v�k��`aM[�� -���9d�aem��s0p�{�G�g�\AT��:��s�p٬`ϕb�� =#v?A����}��Jq���<Gk���]�''�tN�����9����"���bα�=���{q� -�,�\�W -I�;f��a��8�Y�" -�sab3ֹ;��,���1WP�p�&��[��[0�%1�U��be�#s�1�ub�ъm{0�`iG��1 �cV�{����/s� ��$�����1��e�'�q��0W����� xwx�(s˒s�*Ɯ}�HD9���1� -�햏C|���N��]�:�d�s oN� g�-Kf�-�1� -ZL�ss��֙�s�^|pb��2���,^�1�`��B�9Z��^�9~�b{Wb̕� -��s���)cnY2c.����;� -wv\).'�1�ly��[o��aN/��[� E},�^:4���\�Íy�8���s������r�r�]���ys����;]��1����€\��`�x������N�+Hǵ~-�\X6�ܲ�.W��sa5Q���7 .�p�5�m�p����n�����@����妒;��A��d�ea�UPT꣌Ŋ�8=9^ )qw�pa�<E-� C��-�����89���Q6��˜a�C��q�Œ���PF��ț$���yH 9�~;�-8r�[!Q`�����?�]˰ r�f 9�e�>����@7�0]�0a�!r���� 9�w�{G�A��s�0U6�9@N��F����/��/X -��g`5fzeaLl��������a&�&���8�Sm�J�8d�,�&zBK�� |��[9w|f����q����y��!������A��l���)�{{���^�0��:�jJx��[� �[V�DZC�,a@�s�<�6x;1Y� x\%b�Yឩ -� =+(���8���fo�Be�9<��!j�8X����� -�ٓ�pN��Nv�_��8�|Φ=��^<��1h W�+�ع���Y�w_�8X��<���;<C蹙���6�E�CX��� �C��ʂ�Ah�����Uh�A��q�7{3 �Cd�QȀ�!������j<��]�g�>*���~��8Z�N!;�ץ,v, 1o�8�$J�;�J��v\Ū��Ǝ#̂ ��q���J��� -�g��*����q諞���W���ΎC�5K���_���qxn3�=<VN����À�Q~���c@ �4�q���-x-H�o�8Xo x���;<��>��C�����Ǒ�1�˝^*�F�C?&_�Ǒ��j��po9�6|�^����U) - �I�ɻ W���'|bcT���q�2 -�8�I�� }� +����т�H��hs��1��)2�q���=��"�L�+бD]�� -+�[Y�8̉ �l�8�){��q6��.~��yXS����Y�(;?��]ď+�2����Ó~ ��  �����+=i�ËG C�������6|���=ߋD�mD>s�Ɋ���+b�>�������TϚ� ��: ��饰1��?���RW�S(V�9E�����$=��d�����h[��p������Q�����w��qP��T�vAA)�79EJ�Ufp�tVō�a�{a�X�4�N��{L)3A㰢_�3�r��dd�?���=,l������΋����pq�ӴA��H�n�8) -XN~\ ���r��7.�({5n�ʼn����S�EZ$ q�~b�rH���� q���S H\aڜR(����D����e#�c;���1 �p��C(�^jGH\!ڻ� -B �/��cd⾮���ѵ���R_1�zA�G�]/1��Du F.��]uD���B�1���ӆ�C,��P��c��B�t���r!��9�>�����V3q� �.<#�(<Y�"�a<t�" ���?��X^Ͳe��a�b��pl��o8��Fa+g�A��y ���?���pa����ݥ0�K�y�\�[N���o&$D��7&7LG $o��H ���� ���}��%g ��i�s����I7� ޱne��<�@���&�L���te���>����=n,��8�"ō~r[�����pĴ�()p�]���pLb�� -�P �:*����w����oC�h���*#h���"��5������tf� x0���q̠��$@�S����'���,�mV� �F��C�0�q+�7ԝ���C�P�Fjub�!�an��o��R��o�LpM�7�-�O �V�Z�>-L��}�Uw��!և'�Sd'+ ��m����6M� ho�Q=��l�۸m繱�ޛ�Z�7��i��P��x�zC -��⼡~�o`�8j���m�v5i;����Fb -��<��ˈ���-Ì���t���^S��Vc����7$# �P�g��Ul�h7�*X��h7fa�md��U\�F��1��xC׎uàƛT7�^Ip-3�8��ܠn��m�t��Q �k�{߉n@iM��nHŚ��nH�b��xn���qn�� ��|$�7��t�"`n�U�ʭ�v9�ܺ��ȭ�V���.q���� q�a�QL���_;� �*׼��t� �nЎE�l�u������� n%e<2� bvjg����Y_��(XOy�5�k��y�>�m�86g�� F��v���I��]��n�6��qd��m9���r��6|�5[�!�Ų%�ڐk���qmD����im�I���Ym� -�Ymq�eB�F���� ��f����c�b�t�]�ⴁ���)md�#8(H����`�]���3���yJ��� v�"� -��]B.cAhc�S�� m���;��(�s���5[�:���YK��φW�Z��g+,��J��lf�}����F1��Zm�6Z9]��F �X�`�lc&��:Z�����n��Ko��Ʉ6��M B���� Kx�� m�"�'@ Y�``�Y����$�mL��\���X�Fh+�Ϻ�"����$O�'��u�邩'�!�c���P�� T�ml�׽mH���'m��N�eB�1,@ B�����VX�}���V(j��"����6�6��9w>��� ����l��� φ -Un���h �Q�g+�%�+��`e���l�ZX^�� ,\)6<����g�-�R�Sѧi���g+�m5�φ���VH��#��X���a�Xu��l,*`�2�� -���^|6|�J �g+l�*��g+� ��φ>:��g+܏a7��l����� ��d��l�=\DƳ������[2K|�B<��g���v�����Eh����h��"B,'Ah+�m��’�{,B[��=Y�4�^z��2��U���x'{E��Vx�p3�� ��sB��/��y� E��Fh�$��'�aֱ�m(<�)?ڸ5a��mE}2Ah+T%���Ɖ�˹mxQ/��icwu�3��֑m0�Dh��ֻ��m���ϲ�m�b����*6@J�g'���ʷY�B�ژ7d�=�,@~�hc���O:� � �� �F%If&hs��6���l�6$��� ���׾�m��2ȔmF ->�hc�;D�jq&�hc)9�B�؛3f]�6^-}� h�z�h��&���6�TZǽ�m�ۿ���m,��K�m�RˬT�j�� ��{�$���w -ІTKh�ٗ�hÅ0���J�����e�^�φ�K"�φn[��gC���6>K�Y�->.�z��gCہ=��g�Ľ��� �ڊ����-F�2������F͈J!�R� �z�{��Z�:�gc��;��F��2�gcޚ��³Yz�Zt6vnt��l��s���}����!�Hf�u�E0�fÉX�p6\�M�f����lH��(6�l�}���ض�j�LgCv�ޒ�l�6]��Uild6���~����B�a���hC��u`)z����_"4f��{�笶 - -͆RPNV�f�Rϊ�͆#� ��V���\������ X2n�f+� ��S"���^J�� -����#4%�HMd��ۜ`��<�$.Y�ܹló4�eC�X%a��D�?g������ikAec��Ǻ�,�[�T6�p��l�. ʆ�Y�A *Z���hk����1t,*-T��͎��U�όRTĜh`�@��l�0�Q�ЬV�탈)&jv� S��e,��7�e���(��.g�u&,|��� �&���e�$@�\����d��Q�XX2��Ō,.J��l����S�hi�^T6���;� ��sR��Ћ��V�e;��FQ1 �u7' ˶,���އDM{ -%;p���`.3���y>F:�X�a`٨`]�ذl42�!,-�) ,,&a��l�R�$�l��� ��u�W\6Hn[W��l���E\�dH\�e� ���(��8~�v�f����l�g�d`ْ%?�� -�f�����Y�JX6�؋'.d����\6Z�<����6B@�ᛴf���s��Ș��[d6X'�� ��E f�sd�6�k�P��f0�����ap6�* .{�r�\6Z�3��e��.B\���\X���!6J�d.�T�.[)�X .W]��Ϋ3��²�@1ta��A8�� VF0�ecu��ec����Ơ#�X�eC��#�l��`�sòATÔR�ecg�H�e+���V -q -�FKw|�Ŝ��3� ����fc�9�"�1w��nS�u -&7�d6<s�Df{�,���쩵�$2:L��d6�d6Z�pmd6X�J��1�0P]�]�fC��{���3נ"eF��ɷe���޽ؗ�9v�j:��V�e � 3|f�T�$�"��ا�R}�ٸ�-�-2[5�ﺓ��֖�l��;$�Df�h�ZV"��R���l(���Q�-Y�mY�g���C��qZ��r�a�;$��ł֭i|63�W��d���(6��ІY՚�2��V�yEh���"��b�� m�'2K$�Xe+SFh�D�i�%B[��;�"�a�o� ږ%q$���d�y ��-���F� -��(��.���m2�-Y�F�"�9���m�;� d>�l ܝw�]��%<b��W� bSFt:B�t�7:�׸����ۻ��,Ǵ�}�p6Kb��`�`��`aLac�1�{Յf�� n �G��l\e��l�����lo'�Ϲlw�ef.[ﶽ .��O.�l��\mT6�*؇((��1� ~�� ��fe8c�޾����n86f�K 3 �U��5j�^g[�=�-�ר�+�Of�/����t�c���9��v��,�y[�= l����6K,��yX�6�ka��5�B��m��-��M�?x���37!l}yh� q���tM�0���\'Xj��0G��k�[ �8��Q��!��\ ��k�xa�N�5Ldo�=: {]�5�M� �ڲd�ڲ��v_�t��ӑ�j~#� -#U��\�53QZ!��`d��@k0�ea�(:9����P���� .� Y�\�q�5F�����[7����p��ƀk����@c�(/C*�Qp5��MK֙i�8Y9��j���h�=|�P)kY-�"�!x�(7�n �4������b����V[� V+�>��'�=`Z@�xظj8I����AU��$���6,�#�5�k]D��P�[p��:� ʶ&T�85Q[�ij����RCi���R/{HI�t�0b�ƹY�0d��2���i�N� j��Q+3�pwY��Rל�``�R��x��O�����4��Rwx�i�\�n�AN�ߙ�6��1��;5�BZ�R۹'w�ZU Ӧˢ1mV��yi�s�҈"?�AC�O�Yi��a�VԌ��8Xi˒_�e+�� G�Y�k}*̈́����41ZW�`i������L������h�w_��hF�.�dKC��=ʽ����d�ӏs v��2e�T��*\K��/T�f=FF�1-}�3Pi0<�ĽPi����JC] ��`�aU�I��(wf�:����:�J�ePdP�4�����(:�r�@�m�~�T+�Pi�2Lp���v���\��!&~L����݉=4��`���`iɒ`if�RSߞt�#�FӱK�4��XYB��!ZoO��s��s��[�����kNK�Btw8��0�7� '\��i- �i��NK�!��̴4*�0-�$�Xe�4����hi�a�!�i�u����V����h��4~�,�L��R�\>'n�EKC��5ͫ��^3-m'ZZ�V�Hh���fs�� -��,�c�?���-K��-�hiؗ1�4*aцʂn��qn�e�J[��J �Hi9�{qҊR��FcY��ҽZ�4�{و�)i0rf$�ƵEI����S�pz{�EI�U2��3l� Aΐ�5C�a���2QҖ%SҖU�4��3 i�s&� i(J�JQY@e9�C����^��!�k� -AҊ4.c��,�fV8���&�]#���b�Y� i��N�C�`�E�q�ː4Xm�pF ��#�<�s"ix��i# w��t0Җ%1ҖQ�4����#�Y�?Q�53�l�����C�q���<k2dFZ�*b��)�Ƃ�aV6�iuL�q(6=<���7���n�4� "���3���s�7F�U�3?��ao�i�X�'3�pe�I0��+�t�3Җ!3��ڳ�+C �| �#i���i�<�+��(��IC S�i��f�ip9��@�4���i8Ϊ-���h�- ��O�tȈ4������{��8sɒi�*D nP��4~��L��c�]��H��$I�H��Z�#�֑i<U+}!Ң�kC�!�۱� Dk��Z"-Y"mY�HC��5���g�6���.��Ê�;K ���zM"�V�CdDZ� � @�L&�EH[��H[V1� -�%)��ͣЀ7m�h��A�6 ,$�,WjO��*He{�S���&������j�&=�`���f [F�A].p��؜��4h��#@ڥ*d�Ϡ�I�K�q*=�Q�3u2�;3Ѹ��,"<�к�6ڗ���q��de���&T�9���9h�����������D���g��_��W_��s���{�����O����}�������g��׿���~��u�7��Ϟ��O��o�����W����������gG������o;�_}�o~��* �������W������O���_���׿�ݺ��� ����o���Y��7�g^=�����'�~��~� ?����׿��o�������������?��������6��NN�&ғ庳y�w99v������+�S�]�G���������X_�����/����΃���Lϛ���V]�_�|Ը}�7��������?���[m��_�ݛRCA�v-T�N@�y �<@�m���c���`"���r�?�n�A� �J���&d�M,��D�����1��!���&��F�PD}�E�ܲ���.�r!>��Q�gq�9���qͅ+ �@}�WW��>�"{�(-Va��qȅ�&:2�<�sa�7�P􄥣��b��@�Bs����1� ��ņI��=D�����޳��3�8-p�sqi�v��8�n��N<�>�q���+ӧmIQ�� �}�z7A� d���ϴ�3DMg1���s�?M�B�KqX�����Y�B`~'4 N/�;wb+��CT�ù<�X�z��L!:��_:�� ���ɻѭ����|��2�x�ح�nj��i�KS�Bd��rz���b IJ�[C[���Б�������Q -� {d-o��U��d��d�N&�;��c$�&O�ZH�t�C�I��[2���~ cF����,|����x?!�{c��O#<5v��r������ �v�uI�afV$<!���`��&�/�6�&}DQJX�wJ�dbt�b߈����5t\�m ��M��*^k�M�$"?� w����3h -+�-��f��_� ���׿�����/^~�۟��W���x��򎰨��CM6���)LP}����\�{��+s��_>�~W�1//������}���>�1��p:o�0�ú=���1F�=.?rk�ʼ{�¿q�9ų'D��0��b��W�� -���� >71�?r�����>^���.�9���S8L�+9���W_}|9�q������7�{V�o~���Q����1����Ǜ����_~��'����W���������g���7���~�7<��������_9��\]���'��/�߇�?����+�#��T%�p=��s`'dž�c��ۘ�@�q�]PD�����c�ȧS c�����'�tC����8 -:d+ �Lź����$M�R��1��o�p��k��;��W���]�����}����=-�6X�U��l�c���n�X��<1��V�< "�p�m_�U(eb �e �1\g�{��`����\M�� ��@n4,��� -�©Xi*u��m����Q�\�@����l�ѽ�P<O� D�3@L A��m��7h�����[����< - -K��ˑ��n�n�.R[���a� ;fP\���E h �VC{��~�p����`���Û1pZBNd�m���_G]�S�Kp�{���1�y,96<��ݽp��v���3Ї�B��:�ÀX�j<ˆ�"IJ�����3�E��^�&�P!:�"��J�����$��7��P{��fh�k��\�*>�,�[��a�ah�� � �=���Y��t�9�C�y(����{��ͥ����AP?c��1�G)���A�6R/ִp�(��A9�z�� ��r ���v�I��F*�"'���d��>5M���W�:%�GZ�{�x�B?����_��U� c��w��$�h1◡������޼�,C����jw����$���C7�Y��g໚���Rc &���y;��!xp�ձ���֟��Y��Cx� s���x0�ҭ9޾l����qt�!�7�f�GS3�+�c�aw,wCRw�d���}�ˎ�~��5m��J:�@��'.�h�~�X�^��>�K\>��r�g�����F]� ��v������?�WO����+;��Ν(����{�afc��{���F~<��x�!�g����L-v��`�|�3wiȜ�-���1����w��fHև��7���0�^$?�Q~�O�l�&��G��w��Y K~�x��z��g�Oo&N�������cj�h l|���ٞ�<U� �G��"��"Sc��ige�ƚ�Ƚn�� р�__Lo�cܣns�i�.S%4�O�l"�Ϣ��۳��&�Sn��ml����s��D�X��mjv�k��=�ݭ�Sk�����ƾ}�mI�c����['�J�[�†L1����(3E�W�� ��ھ��!/�aԒ ���/-�x=����d�/���#&B6��T��#���J����XsG��Fe��cN�ڨ�ۼ�s:�UN�%|B��� ��E�q����A:�<:FY8�d��~b;+������y���%/��T �/��X���*��%r�K{�c!�8j�gLm`j�%�:�ϩk8�ǜG 7Q�Ɔ��#Er � ���R5���3D�m_�:��|�oX�؞K���&8#}��ԟ�9�v*��Ub/s��� �xX��P��E�سQ�c�`}������ c���Dc���V1���~Z�uĞ�1B6<h[x2�������}�V�˝9��2YVY�d��N�Z� U�7u�Y�`�>�W��b���`Ϝ� -Z<e��h,;���������=��}c�E���=�o��`2G�%�Fe��zm�K��1��13̎lg�}xhJ�U�[]g����FH�!�a�2�r#���02`;�����Lī� RwDQúa���c�ƶ��;���)���#b�N)���'I]#�ϭ� 8�1*�Xz� -�y�R �B5[T!k�4�ŽzP��a;�5��F���j1����;�����e0�A�pb��^4DS�5�|Y��xey��d�٨(sm�x� ��“ �D�VL#�HgP� *.X�����U�Y 9|�%���0'7Xٟ��0�b�$�%bܚK�%�d[� e�9�y�-�>s��+AL��Zߧ��j23c���|��x���qT��5�N��2q��Z���Emr�q�n��{������jI 4�ϱ���[����g�4cy.�i�FZ�xX>����~����� 4�e�����Y��Dz�?���A�ݡSXh��!O�U�HX��Z��GDT�&�Z13ٛ��0Z�?�`w��(RW�dn�Z��R��I9����� N��b"�:Y� �ʿM�!����ny��j�("��R�t�{ �%u9�,��5�>�L�䊳/4�p@�[�=�Ba�c,ǿ�n+/V�j|AMvm!�;���FT��e��n�x]�ڰ@�i�/�} u�������Ab�2�#�Q�5?���v P'�bG�*#f�ocJ�]��|wg��������+�}"O�*��M"�G���p����������c��,3Z��e��탩�}*�-��766�X��gҮ��#����9:|Y��w�(6�k�E�uc `Q�`C��+������B":�9�^)|E)���wz�#�[��kY�w.k\��.���y�;��͈O�/���۪P�n����D�i{��Z�[q��z5t< -�a��M�k�bPG\.���#"|�E0޴�nod���]QG�Wl2�+���b95�D(4O;+`��)b�1�E�u��"B3�b��3#лͬ�8"�>GGXy��#����Z"�+�����X�~��{�<�+E�cI�����E�>����2��m���@,ˑ9��{Y���r��o!��WY��>"/�1Krd����HĄK���u���:N��p�V�(�k�E�KI���"�y��� -/2�Z�iF�+���! �5�h��F�m�#%�r$�›^ɽ�uG0�����\���G�Q��HJƆA��m_ ��([�H�n;�H�j� ��E^6�"y�����,���^-�ű�����}�v�v��0�"#�;��so;�H���u�̵�]��� XZ�k:s�̫ણ5�Z�y�=�R@ )v���dyj?����DO������ST�s���=p0��S`��ټ~P��q�� Ή�:�ؘt���n�� H�g��:J��u&[�7*(�a�2o�/P���I�R��[�PѺe9��n�"Oq�����CX�0�Z�[���%��O�d���^E:�_��>^�r��HR��^�r� -�Q�p^�*�儡F˘�9Ӻf���>GY���Fa��:�z��Q�A�z��:�i��<(�D�i}�,6Nu]q\\;��BR����e@����'E�SI��r�vk�X�DW��7��b �=jXR%�',�}�����3�� PvY~��]��nϤ+�q��u�׿�×����P�����N��ջ݇g����C�dx4��(�m��+e7�&�GU�C�C�q�O�<�_���yh]W׮9��O�2/|b^�yٞ��������mb���\׫Ya�/�:��P���$�G����{kBLB�:/����̡��S�<�~ۗ���������A ��Z�8�r'�`�$�r2r0���̸�C��X����Iqlj`&�U�V���>��^*��B�PR0������'u%���tPJ���Y� ��I][$Tw)�w[�&��-�|+0O��7�VJ��.��b(����_#�:-��c��8�Sy�����(P\� 1��S3�~�+a=M�A���)c�_8� -�����!��y��G���o��#���/�E\D>L�0��a��K��H<Ys���%7^'��>ӏ�����>]{ĥ#kz!s?1�p֭��Խ��n��ۊ$fu�����te�x@���LbF�«z޷#1א8�'Y5r��)���tW -gd�� ��@E���1��K�A>��i�bl_/��)^2]�^���� �[�^jݦ��绹& ��5��ɬ gۣ�Ĥ'�&/��uyԬ�P���|�zV��� �c�,o'�okZA��?/�}H�� b hך7K�N����㳯��bD�Ӽ'�=R "]BT܎� �o8��+�k(o����c��u����Od�Ȋ��C��A%���Ox�=�@��ݏ���q��2����I]z�F'v�0��`^���2N���^MnYK�)Q@y3�9ՠ�^G��'4ˠ5���U�5��!h�d�$A���P�b��r�*(�h���z!��Cb0�ZYz�k=]�����El�De/��o��|�>��P��r��x�ϴ�0�}��'�@Sr|3A���q��f���yJҜ���*'����%�(6�ᐊ�|>u@3?���m(�^C�-l���_�o�~�˳|�}��g����|��o���z�>66��n�_�CJ�i�y%���Y���� ��&����z-�ƚ�'�t!u$��,8]����}�� � 1[މeȰa���y{�1N����\I�Po���O�%�'A��lu5?0��K�,����P��v�Jbo~�� m�( -�$�z�:��o�Ss�_}����0$_-ҪK����KM����݈+�YD5���ME,3]q��yL%({<��ob2S &tY���q��;���x��V�0:eh|���g�����A�2�{Ǎ��q��^3�;���魸�����ߌn� �!�z�H�_����ӠX���ٿSCl]���~���wƨ��#?�Y�!�ޮ7I� �k��^�� -����2o�b�l[!�j��$�u�+l�T�ecJ J -��J��Z5����$�C ����g%�ڔ���� �lJ�<W�P�p7MLW�,BvDB��4���� �%t��i��!P�����?d����L��T\��&+���'Թ��<{�J������z*Q�e�p��� �>�x��(��f� �8�C�Z���|�������6����P`� -�x��;k�?��N�3� ��2��Ѓ9k'���Pp��)��q�����Di-^e:�(�e��'.�@A����~��]��G�3d��? �O��^�<��Y)�����R�2�a٥���0�!K��jwT�*5� eM\�Uw,�Ȫ<,��%Ty(EA�Ȭ�S�*Z�R�ys����;j@��˃�����/��C��< -m�<�8X<ty*��W��A����P�����a�9���A}��y&]>��t�e�o���!0o�p6��Eڇ��z��SD��Ty0���*�)A�<�Z��Uy(�}$U�B^+K���ؘ�7U|? -�B����T�(��G���f�*�N�ۊ������������l�f�P�t��6zH�Ue��!Ȉ�(!.��V"$�5�J�9$���"  ���� - �l���9$P��EH�j16�)����+��I���6���>i����_��ര�^! #d�@!u�h+$��3��GH�����!��(��6$`�������+_ExLACû�Y[\ʧ����qQ���vLU�ML�[.` ��`g�|!�A�?GD���Na�J �\J�{3�8Y�m��L�V��X����Sm�XX�S#'!�p<s�g��P�RVw�m�x���K�1����[�hjR�L��Vne%Ͷ,5�2.l����jkW�,�$���Z�loW�-6�ܢ�YΦykq|�Z}q���� �d}Pp��a0����b�(S�<7sm�V���WJ��V3vYQ�� �d��ۡ1��j��U��{WuL�j�.d�<��ڳ ��׭�'g$A�ޘع$���V��g��רWVk9����U�9���ܢ���g����(���ur?�2�߅�n�������w�;����|�/c@�}_��$@��� -�WsV͂�����@�iG�K�h�@�x� ,��V�.��Gf�$��-8j�]O �`����\��W`�3o@y��^�����H��](�6��g5 �2����^i& $J_�A�,]�I�*�����L�0�IX�ג���CA) ��D�SZ�]�̊��% �m�R {``�~��!��P!85���П����Fl�-I؛C�� �EA�+ �0�A蓩���c���Q�`;���w�͌�VH���Vb,h��k�%[8�y���O�T�������U���cE0N2�Jb���'JB4� -X�u��H�*�r6aȢ7a��g�� -flR �ÿ��J�b���y��}��q%P5�D����*����Õ�a�ԧX\*���8Ju��A�:�b{J��^�x����勇�e � 빊q��y�*X�~�]}���k�r�\�P؆�?�����V�e@̗msz]��MXk�T�v�S�y�"e磿����o�X��T����M-����c�%0}cam.��i��'�]��nF���Va*a�� HOJb�.� ��M�����U~W,��q�|.�#b�F([�<An�5�|��,�n!��|�P՟�~��ן\�;D��B���X�j�6�m�#2z �1�bɔa[We��+ V�X��gE�k[�QK��rp'8+��;; 2�K��Ak��@�P�kR��\�(��/�4�;�vG�v ����\<���n��w�y�w���]m�o�q�ܼr���7?V�"\M�#�Ky:Y^��-q1ν�]�?��Eu�B�_�*������P��C4ǁg�!�L��̙�3�J��G�����[C��6�Ŕ�����㙾�ô1����q�73�q���A7��B"�=Kxy���C�T鳬�k���p�]�{��c�*���a���fn�A(��v� ���.u�8��1�qʏ������'Gva�f���v��{z3�Z�ͪ8c((Q��P��i���y�KL:j�:��Z���p���ѷd��u��g�MKG?Z�nqk6 �K�ǟX���Cؚ��AE�^<Iu����b\Ds���?�ko3�!݈�Ѱ��xkk����Q��j��f���*z-��E;���[˦�����_�����W��9"�H5�,��iv��!|�w�j�R_�洭�U�zd5/F�>s����h��98�v5Ooݽ�̣ 8��h^�B�'��#��c}���X���X���945CDz���cq���X?��:�٭G;V�t�/���,�/<Y�\�A2������-��DW�����eU��ܟh�'ik�_*��ۊ�}wɶ�m� �.���۴m�G��@x���M8�2p�4��g���׆f�y�KT�]�]{�����"�pp|z07} �ȍ�w�7] � ���6 ҧ�E���m��]ľ$�0b���f�.'�5� - m�6��P���6\!�۲M$6o! ��$Fb�)�h��%�� Q��rn�'�1 ���w��Jlp7����&Kl�%��M�%�ݡ���҉Y��'�������G -6 �(��" � -���a�kS�c]�!�~�*�t;QYwLa���Ft&���7�))̳?ME��SW�h� ŕ���S�3ŧ�HTk��v�Ȏ�X ���m�H���M�\�l���濫y��U�����s��j�X�E�&��SN*5/E(3���xn\Fc�ة&ʈ�n�i�ac֍P�O������� �a-?޴l"� �bћ�M������v,a��V���zQ��f*ؾ���ɯ5أ�k��a[�e�5_��(���3p��3����%�,�*�F���(Q��Iʧ��rY.W�f6�L�p���Y>�RA�/�����TZ~e$�����pR#��Y�tm�n���+��Y��+����H��):9��������鏌`l "q��"���HA�>$2��v%���(���H���Q�Nc����aEvۇE�6�k��Ն.��۶o�͡�DZ}�$�ˌ\tlFW�Z�Օ���Z����Pmy\w�C�d�;��ѕ��g��� �`�ю�"xÍa޷�lt��=g}�]{����۲� ��&�l�v)\��Wh��C�#vQ�DS�,8� �?�y"���:6qQ -��k�26�-r�n�;�f��Ϻ� -ōW)�O6�cTDj=i���V:� �t�B���&d%��\��l �,�|唗�#� �+����5%EQ9{׾��u��Z�SI�b}eV�X����Km�ͯ�2&>�XQ\1p�YFןY{S�Y4Ϭc��( N� KҔYVi�`�h�ץO�Νul�����痾N��~�2>6� ���f�Ӛ�����!=G��"ر���Wo&�)t;��l�)�l]Lq���t���җ�2Z~I2�Ek&{�˾��� �&�0Jsf!{]�& Y��#G�[�N�oeҒ � Τ��\�5�$�4U�(��8ϫ�ex5�������}��m����V�Y�������,<��l�~I�$�yx��5L��,��8$D��R}�����;7x��˫� � >i��Rj�]/�Y��Y�;�c�8 ��,ޞEd`�`��f�g�0���Y�V�_����sc �߉ -}�� �̀B\?�)v]�g6�����@ھA� �'�n->p���2w��*6R܌��\8�(�3���1.���C"���UJε\ vn�$ ���8��E�f �ua�*Y/=��#�f� ��vIAe�Ԭ���C�,�I�%dw��-�5$$��N��!&͙�R�����kbH�A�q�x9�o��(��߳�n��ۯ��6nB��q�b�nhLq�c2�G�9g{�15œ��+FC\�6jb:���f�|5�~�����a���_�k���QN�����K6�l�+1�x3�+�z"�k>窒� -��)a� ������f�$Q``{6+���@�R�@�ʧ�$���<��;�����kIO -pT�5�k��q�n�������� +Τ�+G$�(��:!�&�����nU���u����]V��[������7��]J�r�:�� �f�uaRKX/E����ºRhXw�D���jV{Xw_�� I9b=Ȭ0��:N�b�K�g�Naqi1��c�n?SC:�F���c�vlw6ޢx�=�Sz�:j����X�H簭�.ueZ w���? �!u��E����|�Pk+����"6(���O�������k���ɲ!u5���ҺB��2J� -�'�������3��������>P&���CH1i]��(V �+�ER10�� )���u��;�{C� -ޏA��v����� �+w^WR�b� �қ������< Ԃ�A�ǥ��+��7ZW��le~V�,u��}y�ӟ/��D��@�tW�z-t��/Gh�?#��?���y�� �}6��O����~������q(~�/�O��/?�꫟|��o��o~�s��������ټ�4lB��Y��m�����6\�V�( - l�v�E�6��A��EMy&�>�y�r�g&Z*3x͘dk����!^������E$N��(�i�!�+���%"�#�r2�)7=�j���\?�֔.6����JA�(bE�I���͉�\�y�\h��745"=�C�Gf���f�v��"4�Mq*��5�rq�F<��q��R�)A��7�6;�t܏�s3@����G�0to��!����5��(j�WuX.�� hP�.�Ŗ���y���*��P �gR`k*4��l��i�q��ϊ|tThA��@E{ד7�#�z�$�|�������?.�UL�M(��^����L`eZ릫�ZH�g|."τ��'q&�l���D��vٺL���Q:#�Lw������ʮr-TO�񖀬�> *P� �OS�}Ё2ڧ#��!�@�@Nf�>E#�T�i�9�ւzya��� �d�*-P�/% ��\��NRj����W���~�=���Ȇ���ZG �1�A� Ӕ}�aP|��� ��<�Nr�T� G�?(�Գ���P��_18�d��8�`M"^5c�'���)r�f5xA����x;P'�V��,P]a�m�+�د���r, �HP�b� +��<c�Q�8��a����{��+^Ѐ�5�BW�0N*�XX�esH�ոN���k����w���X)<�n�U�T� o�h��'$V�F|��q �W���t9�L�����!����r�����3UyӋ!��}[#_P�}�]�~�z���4��Y��I� ������E��}��~�U)�+ ��%�� -��bo�`����sp>/6���I� /$5��� 冭&�!���l�{/"%1?2�7�Њ�EM?3�� 4� ����\��r�"�U0��8��>#��<=�7E�䙦.U�I,q �������~<��[6��;'�etM4��D9�wJe����ڜ����<N*_P���0v�a=+�y���� �3-��!�����-����E� -���0���/��i�v���� ��� -�� -K��eյ�5�?`��~��f܏���>6�ׅ���_(Z=�@�n�1ж�C"0���M7�Xw�0�w�A��a����oH0��=Z\a�?��� S�7w���v/�q�Y�Ţ'kFY��<�,�f�l�,`�m� �t̊BD�ĹH�y~ �t��BR�T��mJ�uL����!`ٱ�؝u�v�6�ގU���gt���X���-���3�ᱨc|[|�E�5:p屌/K^�UnA ��u���ar=<Q�?bH>M��>ܣ��onT@��qχK���u �}�x�������t�qm�#�O���;��<���� ,7=�py�'�(�<�ʵ��q�Qp��]c��:�������ئ�Βw�O��������ۃ���bё^eUt�ht��U�F�G��"k˂)�a������O|��?�������I�u�^ -�g�}�=���Ig��2�<�'����-h�����^��������q��<�����u�VJl��)~b�u�],# |��鞧�IƎؾ� CnJa�pa;z" ��2 -�\��ux�;*�Jc��GX����l�:����q�� -��ʼn�1�V�m��+���w�A4��:b��5 -c�G]%��+1˰}4W�������6�:$?�����>�^�uc$�suCjP|�uS���vi��~B�@R�j��S٦�� D�񶭛�o��B�n.�*�n��:�Z9��9u��L�z����N���%�kl�eH��C��k��g٣�t�ǎ��K���Q�FG�G6>9Fz:�1NoX�� ��]�Vj~�:�]g]Q9��M -X.���z�����㢫\<M�o�&��މ����+�E(ރ��#�U��\�P�r��7�������;Xo�����1��+͜�q9���4��A;�Es0��р���SwUS:��+�i��赯�cy�'g˃�"|ޓ_h�QMOi-H���f �. t~R���E:�A\Ă h��lE�2� jG��IA �z}�h�(�a��wv�\s-�a�� /��u�� �lSY�a���]tx��ߗ��,rg:���P���87/P�Qg�;d����w -C����u<B�׆�zޅ�]��<<ny�����S�h -CF��+�Qv�ّ�����8��"'JNl���X9��b��x�(��cCO�_��3�MZ*�^.�&��k~8�|��U�g��V.}�ac�:(r��ұ5���O���� ��o5:���ٴ�Hp�ն��V\�>�~�ó��[�����7r��^��S[���%�m��螿������{��&HH���6?��+v�8�U���4�za@icɳ�'�����XlT1�=Ӛ�3����[��Ѧ�?6Ɗ -ps���E�������Kl��YM�I�:7�F��ڴw�%l���@#����t��{e����pB�ܻ0��#Ow��X;߲�b��-����-#>�@����N��\��"��Z����צ�Ϻ~��_��R܉�0�f)��RVō�`V<�ym�0Bc�Q+|�!�l�����bxE�.�`����!��&�a����刐c�C��k���.F�3����[���폰j�z��$B�ی�ܘ�"��W���Y.��1*�f�Ӭ��{#��s���i<B�1�+�+B�c�x����D�>V��� <�+���Z�"[�-}�U�%22��F�b[n#��r$;b�^���/�\�W�[�4��UD�&��H�|Ē�du'�H�E�is�"-��S�*ܰ������§�DY�}�P���H����s�5#��]�H�����po#m�y��^ o9R��Q�Te��#�zd=É�����G56�hվA��mwY[߃(���H�n{�HǞ'ɱ/�����t�"u��Xd��[$�cg����ER}�%��|3���oFۗF�?���"@{�U9���C�d�g�Ep�Ѿ�݉��p*P��t�q��^{���%b�=��^�Zʊ p��\���f��ټ�L�q������2!InL���X)���2� o��u�*�\ -���Tp��vi -⬟�`���SZ�C��u�r|i�^š�D�*Ui����zꊎ��+�W~i��Do�����c�� ���#� x(|�x��O���t�Q -��: -p>�@��q%�^�>䱺���vu(�� �M���8n]�m���2>�M˽$\��6H;�z�>�;�`��<����2xwR9��֙��_�A�Z'Ԛ��I�cGP�A�8��H��7���^���׹^��_F�GG[�W��9�B9�^�*����+�h���Q~U��!��d��T^���Mdx��e�:��0���<��JG� � ���2/|b^�u��)�z3ޕ͗�����$��C�i!�o�:� �}�4T/H���o������:7��w��쑎��z��L -��v����t^��JVn{'scT��(Tc�(���R���g��l/�- ���(B� -j�,��\�烞Sa�Zȓ@� -�H?�n�����BP �M;��8� x����O�nq\X{��h�!��� �A�؀�V�q�����M��rS���f�~<F&|�d����U`P3��=��T�uܿ�>� -�P��иrd`��/����q#N<>���NE��힞�:ƺ��.=��(��=G�QS�Olǎא�5,)��C��U�h��LiGd��7�Ź���J����W���E�8$.�\�Y��>g� j1�����P�}�t_�k�ĸ��L�����b5=I�ʵ�3h: �mcb�v��A�BIp�ԟ��db6�VX����†�T���t:·}:�^��+�%� []����[�[��lݮ5仺f -��5�� �Yg۱���|�_�"��Y��G��7s뇏�㟳�~��v���V�i��9P������K��w���匧G��!� -�R�a�(Ƙ'��χ�$,����l�� K�L n��0��70�(�:��m�*M��������~c�b)����DZa�ΰX�m2��|������ H��Nd��Ȱ�v'�G��7Þ+��*J�x*00�}��Ag�>����$Ԁ�V��sh�,�%=�lg�ߥ�=䓮Nnܰ�;|�i��X�HLc�ž�zV�!���)6�#ZG)����+�"��f�9Uh����2_���?��8�o�=y&r�4��w�,1��e�ӎ���p8�Ɯ�Y�99���j�mqkW�c�V!-w?��#���X��~AER�Ɣ%��Al������Y�&r L -}�G|�st�ODQ�/�'��[���'���ٿ��_�u�� w��#,�J�����ó!�A "���X#�U���vW��P�/���4) :���~v��!$�.�l��L����'�T��›: -�}�!�p�����tءߨS�z�}.s�� u��յ?3�y�J�o��4���^`�a!�np����� -v;���?���:�r� -��7�ƹ���t�N�AІ�.��n���僡�f����o8�[�����jP�uk����\��O`x`l=�1�,\gv;��y�A�Τ���ٺ2 �u��ۯ��w#�~ܱ���;��%=����Sz�Z*B���i�4���!.4g ���8�)�0�.{�b�5f���a]db3���1���߰��DqN#����1Z+��� v�X�0�+��� i����;����`��ψ��;��=��Q�����eP��z�KC!�i�t+p��Y�����L�<W:���� ��x��D��]ɳa+�m5��0�txTmZ��=T�Oz�,��-w_@���`�Nz����3+�`�^��e^�AI�G�/e���c�����BJ�;K��o����,�]����Y�q~���, ��0��<� h�1���\��3��1�W����Ѭ3�P�v�0dY�vX"0{�v��"C8������Ր�5M;� 6��=iߙ�w����r��Ĵ��M -yڹ=����*(Y���ڧ�<�J|�A� -�f�uXB��<��#H6�X�qh��u�>��=�$w�_�<��L=}w���j��� �|�p��O}����� ��������6��Q�n��|3����4&��W�2ie���x ��݃� �֬�] �w�-%6�ݸCtUT�w6?ߦ��?@t�+p}�3��O���Vi�>�Ԗ�D4N��\�����,�z��>s�%F�tz�,��M��g/�,&ztX�0�ҬK�y}1$q�vs �֧�'N�d/4���F6��=�n�V�?&��j;���`�h� �$�p"l��ܦ�!Y�s7\��@���ڥ��S�:�1w�U�YUn��쥰8�����5�"��|Q鶜��<W -���F��si�,�q>~��n=�U�A� <,� �XgE����v��G�p��Ū�����9o0d� �wl -+��D<��g������_�q0�<�IT7�3��'������������eٙ�����*Ad�=������dVV�u �F��`fR��`d*�O����?�<���F[��� C�nXo��z �oM��{o/##��2�JUA.����^���0@Ɂ��"��47 ������<0�!�*TD,@C�iE�<�I �98��1r�>�� 5G��רt����4�� <��YGBEr0P�Se��Ǡ�h�@i\���Qᛱ*�`�`������TZ��Q�M�8�H�h�Yb���� Y�Hf�j�Bc%�OL ��偫O��2�.q͔�E��1Q+)�4��8�fZ���Q��R���~��J��b��E�t� h��tr�u�� ���%��K}Udي7�!�V -�0�a �E$7i)!\0<����"ܭ����!���U<��/��.b\\Q/bD��,j1Ų���1^�ʐvSä%�= PML��r -�- 87WG�naj��8��q1������ X!�0p�(�ev �#A��5 ������5�'xj��0`jlJv p����5�c���5 ��T&�0����[�aa��\��?����d/���5 �T���*i�9�5�2P�ҕkxy�ߊ��.�/�M��k��L�<d��.h$��'�p��7��Nn�[`���B;�ț��������s�ۗk�֕�G�?;������^hM`�F�����yOڃ�a�0%K��nz �๲�]‘����%� 'h1�K8�N@�`��#*�24�\��&d���% %<$���%Lى��g�p�0R h*]��c�K8R<AdL.a$� �]‘J�:�/a�[��sz#ٌ��&�q��z#Ǔ{7�����oaJ�!��_��%،�k�����sbg�{�!�8�{�����2����-���aJ����{��)dG�a�4Y�{vF�{�gT���a�� rrc�ٛ��0��P;î��u�k�L76��!�L��Ț!�<��g�!��gLTC���f�#�|��e��Qܑ�13D��3%ʐتf8�e*���?�/������K�f88pJ�`*3áG#V��p�� -���ph�� gf8lɀ�ff8 -�������!jM3�� �b�c(�ab� ����;1��s��j�C�h��[���O�v�h�;Xi��TE���)�i�mm �yb [j���3�� $�w�`�{E�ʸ �A�����>\����tA��g���D��>��$fu}V#�g�,=W���,�E6:�gQ-�bg�,jQ��n�{j�΢�-��-�`I�u�Ѓ#|����@Q��Ͳ���GN ��g�,^"~g�,5A��Y�Ņ=Sga�'�AUgQ�2M�%L�O�:;yL�����'���`�,�JE$L��*"Up�H�EՏ���(��Y�}��@���)�T�\t�gQ����T��"S��&�gQ�#���c�, -xx���>�����z�.A|#z�qi�㋃�&v�� �sB���!ab�����Q���"���N�$���Qܜ^������s����sC�1„����P���rt\����,��e8I ����T?���s���F��L�)����u~p���QŠ�(�PR�`c�b�p�0� ���]dCŠ�u�QS~��Ⱖ���G�["��BN��aG��c%P@�$���y�TS �%�/jj�H�$6�S5 ��›�3jW��n>�," ��%iZ�2���+�o2�$��Tg{d{ "T�D��Y�ـe�P聡��6����j��l[��CRJ�SI���/��gR`�.�E_�0 ��$��t����p����sA�FAb�\O��U�|�-#�2�(��O������א5�Q��@F�:�a��O"&2R-[����9kdv��Z]�8�5n���ų��H"��ՎCD[��@��0�B��UG� @�K�J��Tu�� ��t�sP�e��e 3��?��2c6���T�A�\�Єا�T�*@� -���4�Փ����݂���_��3�|���5^�8XT��Q!YɌF ����R��;�#(� ܙ�.P;�BkZ� �dcR/z -��5��5��q��S��<~CӁ]� �C�O�5�{�.#��A*����� -������p���@�@��j���%��O }��7+g�Q[��)+��`L(��]��h�Ca1Qc\7~&](;#,�k��J��P� -�W�2x߳@�e�p�d �`��M���&U��J��6b���pĢ. -$��m�Vذ�h�jB8��I8�1�Ὄ�xf�xz�heڨ� i�?Ctg�;�d8�l��},U���-e�A�Z�`0IJY���Ś����l&"��i��l�ƹp�lR����Z'?����0Y�ŅL�C�����Z����`\�;j`���`��m����V7Jp��$u2 ���&���'������ �<Bєv�`i�\�١�~�l��%��\S?�h�� 0gȺ����/��Mvp�)�x'Sˌ�xJI�d�<ʏb�6>��HE��>� 1���|�w����S��*B��S1��ʮ �z�n�$Pc�AE� 6d�]$<�Qds�p�T��2�����#�N.�@�G��h�sJ�_�Xa. ��%2B���^��B��{12y���<Qo�N�^�FUy�f��sa"{CJ��Ȧ���E�67��XA��3F5�q��5&QL�8ԹEy.����H{Fe1���g&����]�k�e��B�0�31'��a�&-��N��(�b&���Y]�ŗh6T�oH��0 u� �&4S�1jř`�]G��L�*映5�� �0 � �S��>`�܀lP�����L̀C 8����� @�Xpx�b<�lpx�x�D�DD���ĜJ�T��D),Ѹ�8�Z?H'�A��Lu�R�t���G���M ��Or�L]�ϩZ����U�L�\�3�<�0�*K������?K�I�b�m`�X��������`�~�YW�`Hi^��������$����j�hc��g�I��/� ��?��^'��&6�{�!��̿J��0s0p[���8az����_.<�>�x= ϸ-�T�y�r�Y�+{^�92EHmLn+I�l�f���1~:�j�e�0: -r�l��cE�5 -����˃��ؼ�^r���f��k��rh�}�r6D=v��E�{�uO�+�������>� �Fo{��L\��d�X�j�&�]J��ur��R|����P�fn,�߰3�� �Gà��턢��ұ#LHi�5���[4�:G���Y�k�E >���V�Ÿ���8G%|�3�� ��j`�r=\�6㌸(i��h1�ϩ3Z������ �?:Ӧ�H�`��#̂`��#��>잠 ��M�O -��++`�]���o�,� �~CZT�el� B� -�v_�t��R�eE�&�z �T�h7�8��nq�Hc���7 -� "L�SyI��-�)ph�:�0p�kqRɃvt��TU1�j��x��ґU@B�%��<���)rb�LF~jB�S� {��OUR`�E�)P1ARq�v�&՚X �2ɽ&x���7�4���%�!�B� W'�.ޤ-�����Ł⣇q�dg|�c��A��Q�(�G����6iG��J��ǣ�i*�S"x�#%B���k�(Y`?M�@a��)%A�즼 q���G��i���J�"D�TZN�%�U�A�^��f�!ҙ�F������Q��KL�Br���p�<bAr��AQ0��(�kT2- ~�*�ئM�/�]��uIcW{�� �j�h�`�$��Mae��D��l���\� �fG*�(J;��)GR�{*��RO�##��t��5C]i�ՠ���'U�xL|�b�@�=Ո��>zf°��9���b4 �&[NM+���^z3J�}M��)5��Ih>> �y�O���S�ƪ>�j��ˣ���2���/��lG��m�q�&g�K�v�;7ݩf��l�B��fR�� 3=�2�2�b��Y;�КE��Ng����&�k��L�3�c&]�Lf�5�e��)�3+��B�4�4�􌯪��دٶ�E� |���T�߬��RP��]GS�]2fķˈ -���߮,sصf.���g��&��ЯR�R̮\�f��l����dz�w���c1��|13��|6*�t��2e*�L�"��+�$#u8�(�Ku�\W&���k&��+L���.��{զbbw��8i:�8͏7L���p�X$[����]TA�{ U��ʉ���*�w���������C5u����2�?v�Y���s������"��Ī�t_�*E��<U��gZ�,�^�f^f�pS��\U��Y����9U%��^���͟�����k� P�GLU���2S/��Q���-��T��T�(���#Y�1��U��RB�M��A0�e��"S�YpEQyU52(�W5F��C;u�-�#�0 U�T�F$Yʕ@P��c������Tz[jt��T���ojı!���\�6R� ��P��M�Լ��V�P}��T��ij��멦���j[�.�7w�����F�n�<������(h�e2���2�QA�/8�R�$ ڟC�݊���6% T��ڟ�,q��s�0�o*�w�t�뽯l�[�nS�D�%+;�n 0v.���PL ��^o.H�x�T԰�Sd�i�P��OE�aj �^g���6�b�8�tU���Ӿ[SKc<�m���p�$�My$RL����s 3��@�Ďl�Ӄ� �yZ�r���ءǵIծ�V���0�ޖ2���)C�}��z���-�s�Vo=�� 5�rF�?E#h\ ���f��0��y�)9�����<��#�"�Dc����A��8Jyu�*��iSKc�q�E�h���� M�"ۨ��½ �]L��Tҷ�6�q��R�� ���b�ɗԚU�a&~���4�� ; I"n��?@�dvR� -������ -�_@$�o���lR�&�G{�@�0.@^��y�]FF{��x3�0�'�~���!>����g��bр�^rm���֚�����x�A�zAX�CP���R���}��0)6��)^���,9:�YE�X����'�+�+MV��J�nJ���(�G��։��i�m��t�A������JQ���s�V�ڋ��'��V�D - -��ü;z?�T���`Ҥ �) � �Z<�T�WbzO�!&s^�������&ꀎf��E'+*����horb�m xڼ���F�j��"L���[v��7e����1��֔��'�,Y��Y��T�Fi��f�N�N�1�ټð�7�bkd�g��Ƥl͍�پ�N����E�g˼s�Ǟ���o�;�����~An��D�R�AC���{���������,e���,e���z��4��R�-��R�-��R�gyn�2nyn�2>�s��q�s[�R��,���-���-���g�n�0n�n�0n�n�1>�u�qKt��qKa���Y��e�O�Sd>Mu���Y��e�[��e�[��e��R�,e���i�xOuӜ�Y����[����[�����R�,e�R�4e\3ݖ�h�Č��a �%V5'�;��Z\wW�zN&W6� -��#\)Njؖ\�SԜztؘ&j ��kj�0�a�� jV�� � �*CPs��9�ڦC�/2���i]:����Bm�K��� -�F�4��")�� ���n�Ps����洴�a�)��T5� ��;�*���������P� ��:�QCL�O~y�� ���2��"�A�-�����.��LrDM!̆��� �ځ�v�hF;���~�� B��� �ذ�.B����S�5<����*���݀L�o��ᄦ<��I)O�`Rʓ LjƓ L�x��IK0�C20)cH&� �cIM��I)C20)cH&5cH&e��I G�hRS��Ѥ�#u4)�HMjʑ:��r��&����IM9RǓR���#u@�)G�Rʑ:��r��=�-9�= -qdbHy��'�!5�2Ǔ�T"hN%,5 hR��9���hOѤ���%E8Pč�_��z��H*9�F���p�Ō��>C�10����`�MG���h: -����$���t,Vp -��P�LG��;��B���tJ���(�~�Q(�9��B�w0�h�� -��P�s0���`: -�?�I � LǠ� LǠ� MǠ�gh:�oh:��oh:�u\���K�.|�e ���04 -H?G�@{��%���������'T�k�oO�`P��!�ܷ��[C����7��y��>>jYpj�tG�-pD2����*Vȇ�L�x���-������t�WI�� 0ְj2�0q4��q�1(!��z�֙�$a{�AW����$q��� ���d��G�R;�=��t��cY�-!��2�g_$��z��+�͐��e��0FH;Q��<�W(���5Uhg��. -���F��ǾD�I�S���9$BF��p�P�~�&����]����d������`&B�R�a�l��K)�6c�R8�g6F.pd3K�)�S�]#oR��TOf�Q7���=f�š��3���2�mD�m��(mc�l���d2�z�l��i�%Z:�jT�Uu^�y������'j�� -����M�(��A 5��p2� � r��šYPJ�k��i�a��R���X -[�(�r� s0�@O�����$r��䓑�<G��xsL���X၀S$���p��͑���7��S$o;�A2�~�of$�6D��$�pd��g͋b ��B���'��-Hr�)"�H�f�S ^{;&A��s`C�׎ �F��[^�7(�U� 7�11��Վb娒 ,���� -��^��G\ ��u2^�qJ�fqߏ��ҹ~zW�ۉK8f��6�,^Ƒ+� g} I�lCdmP�3yg���HXޤ�#A�s�1p$�S�#'V1�젔@�P��)�������b6}�v:,��H��T����Y�푢���4% |�j�g'-t�j��:��/t��+��pb��=D���R<��j_<g��\7����V�@ub�-.W�� 4f��'0�G���P� ���Pdt I� -�z��AN�L*�&�H<���G�S>m��Ҡ%�����Z��M(_�P 4>�6� -R �z���� -�%]z�/J� t�8��a��Cj -��gNģ��#3�mB�_(O7�������l`%r2�+q��G[��Q89H)d�E�/�>��Q)��~BAy$�\�ʩj��"��NɅoM��͡��Z�a�W%+\[�ؑ����� Z��|s €��9,�ӝ�p��$�W�m'`ΰ7�S�3�}F�����h��r�D��8��橵��X���O�0z� <;H�,;)0L�T�� lp�c�ENZ��18�'q`���.q5K$�bz�H`�$�����7�,�BB� �u�,-@/ğ(�����Ж��O�9�p�1�����H�?<4� - -��Z����%��Ķ&`�E5���j3'eH�?�IY6A�%�΅*3�"���f%��@���d�Xb��P=�tG�t��(D?�I���d�07����(H]����|y�R�Жf�@F�:C$�W�\� �Z:�)j� �W�E�dA���vdߢ�̡`��R� -!J�7��i c剥7����2M�\���er�5!�ec������k�'�f6F��w�ɔ�ʂ gJH��a]��U;��s�R��%��&qz�fTI^����AB�-�̾iT��+e�[�#����j�L/Jx�)�-n�����^�h�lv]%�嶚�&���l�cdk�m��3��� ���>C�R��P8s�gk�G�����1��/`;;#���Qr�8�@�is�ң��١D0�vv����=�x�A�ŦL�xi@N7^�|�0�&0 ���t(���ΛHUq�y�nLs��R��B��B f �ّ3��%��Xo��e���z�㜇WPN�T��A�x^o �G�j�n$�RY ���u)k$�h��(u���� -��,�z�#��۱m�!T7�A���g7��w����W�Qf7�QM�@�t���T1 g��\j9Z�r� -�T|1��9@ #�m���Ly�3���A��� 1�&~!uTb|����Z2iI��j&�!��fz&�4~�I�^�-����j��I����� -!�ƭr-�R�F>G�]P�� �/b��i&n�4�B9 -;!u��iB�J�(.M���rO�����'�L� �ER������H� -r�s�%�B6��*0��xdH "X�R�B��Q!�۬q!'D�D-+����[QpwU��D��L ��XS�!疪��R!h��� �*�˘^ -�BZRU]�X�̙���ZC/;��]��J�@�A�Ô��.��D���!����)W'�0 bs���AB�a�'.J.��y_��qN�Z=�R������=m@���2˨o�#Q� ��������Fe-�r A���v�c��:�65����Q ��*�Q���)g�M���}9E��9D�wp(�d*�ƭ+A�tX�S�,���T��L��c�\���c�D�#`���t����䪻 Y��н��&���x @���e@<j�����c� - -W���C Y-� i��-�?�HP�F���6 d�h�uĀ�����v�g<��5��]iS-|8��HJ̅2(k���!Ɛv��9�䏒|�ܐ�Q�k��S6 T�sն�G���_px�;G�l��S�«��(��U����`�� ��(�a�[���M�0�cΓ{ -}���ۆ�H� �Sr�!n3%���j���� JCrRցn�H��Q[oc����H���9��1� 0�@ύy.0JH�*LL"sD��d�bU6��f)M�H��&�n�s9�‹���� s�+lR���� ��7��oB( ��"��"*ة�{z��lK���F$_g�"�ʗk&��C �q_d�Py���J�D۶<Ú�� ��!���� ��Uᙀ$p3��M�&`3�����%�9� J"��w�� -�M���r�P3U"p5{E� � � ��Gl? �G�8���w��2��%`�Btً�Z�����P�l�RT�œ�#�DC3��G�4<��6�U�e�ݦ�Q;�,��*z!���� ��-�3�˪a#�,4UD)|�G��"'�[�uZ!�֩H������cD�:č���^�[o�v��@���cH��X5w��넪~)"��n@�/e�t -�qw�l� �; �8`1�>a ��6;FNm�-�̾iT��Wz��3�Xk�\�AǦK�>�YU�P�}�!�R[�|%�&�W\�V}W�}k�y��7����>T��|��������l�ov@��g��L�z��p8=�j]�gV �v��N9;�f�4&a6O�#f�q5�O2+��-��Θ�Ym��e׸�Y�'�����o͖l,�l�3�m�i��f�����vSM���FQ���<_�������R��af���tfҷ������T���nU/B�����oi%�.s%ڝ�~�.��c.?�����KYA��,�����o���~������������e���h�>�.����Ky�ϚK����R���L�4�LW� ���¬8�f"���L26�����O8�͝h���MZ7��L�7�����T����3œ��h�[�4���Қ^��\�|��;S��/lj�y�U�2�L3?�)m�6��|�3��?':���M�4�L�4W�����Zkw�O�[`�3�*���|TO&�K1զ=�&ߕn��qH���țg����N�*T�T�|���c��,�1��Z�,��jS@f2����c?p���'�u�݀�6W3��9�1�����Tb�S���Wjv�W� �� Ո�'B�<}¦֠>�j4��7��-���dki&���j�Z��'w�����&pX�:����sn{gt�-�bo�z۞���� -!�������ُ또�2'�ͷj 8 -��XK�� T�@?�ެ�/{����[�nK�" ���vZ��H�N Tݹ�@���(�!�c�c��{KF�j�T��FDBF8Ȉ���Lo���U���W�Q�����Fx�� �v@6(�h��$2ڽ�,j��=�Ԑ+gzD�<Gx�JD -����B�L�g�9�5#�ž5�?�!�� [׎���!�����X1��cH� �L(�����c| {C�|�t�w���.��oǛRZ)����� 𑱋�s6kka|;>���QS��@��;�B��5���)4�2�;�2��Xk���"�r$���pM8���諦Eqj!�A��–�C���q���&���"�+03������i��oF�*�����~p�8� D�X *[����*:����"d�;6���?��$��r�t?�f����3@=S����DZ. & -)���"�t!f���gӊ3i2���& �T ~a!����r�v'St����l�� ��c�C=1�>�]H��P E� �Y[H&XH�&d��q%�7F��݇�,�F9Um�lP>�<d�`���ڬ��U�{7`x$眭0�)LW��n�M]q2�"����c]�l�Cj�E�b�֠(ۆH��@ ۮT�*i��n���n�ޖ��7� i���Y��D�i'�&�N�M�q�����0�bK��g��ƞt���ٞ�>���qD�c�\s������o,��� -�~A�Id���L��l� -�V�����*�U2���G����AA�>���Bi�� �T�����LDžS<y~�o��-���%�b@ 4��ËE[�z`�$)Q���4�#�����a�B����S��¸�&[Q -N-��}z�ׁ<B*^���!��N)�)�.�+uT�_���0K8��7f{�:a 災�d9Et��ޱːȹ#]$_��4!� jb�)Bu�f��59l~��x\v��*k;�#d -���&47#�&EJ��#b�Gʰq7x�e��@9���Sm�:�"�t�V�B,r����q�*�M#{ڤ�"*$!�ui�&+L>j�yd�n;� -�l��"��`���3l��a�{�o�� �~B\�l����-��kߗ��^�j;Iy�6���t������ R�ZZ���t�'�z��qeG�!&�7 �0���%}FB�M\� ��q�yb�� �`�P%�`?r&hqN�{)�t�3�U�AI�$ػ9{���O�?�^b2|FT��*�C����=%�5�i�-$�%)� �8aR&�]\����CS��n���E8Z��� - �\�_���}�aEy�a!������:$���Q����(�������)�q�S�Ǵ���2 �R‚6��bR��̀����F��~"#����8��y�/��62;�7nN��^�J\d�*2�.�.G��d���?� r���E��c��ck �<9�;����n治�X�jC9����hU�_�������pfC�+֧>q���,��ٛ�i(�Eks��qr��������r�\᫺��L���M��Q�w�@�j�GP+]�6�v��0y:����)$��S["�tjy���"�<w1@M�|����c�)zK�y�_�=f�mh���:��j� ��6_�|L��Α�?k�FKgRe�W�n��]__4���_��ޞ�\=���'�:{vvr{�jƑ:��+ڃ���b��F������ɇ/n�������'����,�`��Oo��������i��?k<r��_ޜ}q~�哣����d��l�7�M�����>���ۿ�~�����On���|�G痭��Ϟ?��ξZ�ۿ����] �}z�� d�9�)�v�������2�����9���o�zv&�^�0F�˳��vc�a��u�s�I�J����_��wv������“_=�&�{��O>�������m�L���6!�?�}� �/ݼx������Ͼܗ_����ް�a����{���i����������܏�?��g�|��'�wP*%8�.��U�`\Nɥ"��v�c�� .S��ǫ[<޻�N�bt�d0�3�P���Jh -��6��H�&��AP�v��[�>�f����P��H��|<'�A(��2�����Bt�§���)Ȱ2[l}5�7��Q��K�d��'QE/7�o��W����/��)U �T��7�v����t�{z@^�!���Mie�:/ȉ���IT�M� K#ǫۖQ�kl;p��uD�6!�5��G�۞���^��ݓ��]:�@��1N� endstream endobj 69 0 obj <</Length 65536>>stream -�1�j�w�JW�Kd�MLkd�h�L�G�Ȏ��x�Ε ��/�G'�z��H"&JDe*zj�=^¡�yLTZ��~�}?r�8��lL�"��)*��D�*ڈ' i����ϐ� W�| B��u<�W�rӓTp������D&M���}ҏ�b�La�n �E�;�B��L�?���7�H�g�458�D -:����ԃ��'i�%��pos"��q!��;��E~����d{��T��x\ֈR�T�FS�<� {����Hk�D��,�~"%Y�!#A��h&Rh#F.�"O�BO^O�F#��칸��w��z�� ���[H���`t�4�#ӆ�t�eb,�~�R=�~�� -�v����򐛉H�Fˆ�h"E��.��#2���2�D��Ul����9O���z�Ԓ(�� ���g�!m#�A���"���(���F�E�A�l.�� &��h�{C,�=c[ǒ���;^���a��ge�e�a]�,'eE���}��%>�kO(D�ҫ�%R�e�:™���,��r��e�H\�h�;H=H<�~`��:��L2�g��N��en’� *(�D_��rN���ʇ=��[O�u�:Y�ƚ0%k��B�z�|09��e>��<3$f"܀pW�o����?ՎA��e�1�q�A��+��"WF��F� -�$|X�!��Z�� 3����߶{�d�&T�$�u�8�������%<u�H�JiR���R�* -�u���ە�� b'7�����8�z�VP����-�@�����&�i�1r����ӏ.�����g��i�Hah���Km��,�\ ��g� Gy5y���壸�E��~tB����n��J����m�G�̹���N��N���G'��G��V�<��<��<k}���+�ӏ.�=����K�ܝg|��>�$� E& �i� ���%���R����h���c(� $���Pz_!0��L$�.R���J�8DC����;���MT�*�K#l���׏�_� �!-�*dX��� -��fq����OG �n�[)}1��ȭ#�7S�B�U�>Ä ��1�� -S����p2�~,ֽTr�^��D!S9!�<����r�mP+�+ӄ�����g �^ -���M�( ��IE�\����3r��9��+qT"�!�� �S����o#b�U�Y�_Aڼ�KY���t�qX-E -��_s�n�UD�T:Q�-�gr��:r�z(����ʳȺ�f}��zGaULn�C&��f~�2�Q\ٯ#�p�0K:I0Q_ -9P��Ts�X�9�)sM���I c� ˹�n_� -VD=�%�>�G����m�x��e�%ȉ&!Z��^�O�6E�.ð �б��b����F�W�6�1� -�\u��]Kc���q�^���mB6�^�ٕ=82�����?��)����'J�i�J�nU�}施�� ����kڍ<9��y]S`m(9�ȍ@�L2��"��d_ ��AN|;�������p�OJ���D��ʎ�/|P{��ɚ�Dȱ>]��lf!Fm�!��s�t�)�S7Q�^{��m�ˠ|zF]hC�N�c�|����2Ճ1X%�L*���nCG0�>�6u"�����Ȼf?,qTD`I�&bȑ4P�b�%���&�K/�����ଁ�G��ԤU��r�6�+���R'�Ms)����\��B�����뺆gu߅Rt��� ���ٚn���?]�W�����uH"Z@F��Q�#i��� ԡ��;������H���Wv����F�b߅��`������v���#�X�0>3��7��Z��A �ԥF�ՙ�r|�E�� P)�~ɨiԯ� -}6J/h�X�ڋdLk�ڵġa� �R����[c��ɘ��I��2(� �2e�)Ua���܌g�J�TWbUNm�F7(��] � �3�hSƩ��=�F��4TYO��!OY�1$=HK�;�kW���ru�����X�I{�����J-��C(�x^"{��ݶ֕�~&�jLA�8k��a���L0��[BXU~����&�{y6�% |e����6,0ct\���υ�����R'���gM�SQH�n�L��c�_��Y%|-m"gYO�= ^Dr����8*q�2���£=%/?Y��brz��� ���#'�S"��c�N�Tu"CU��.!ڸ��܉�G4�"K�tvC�c�0�K/�b� P+��/�jI\z!�a�[�zY`r,I�P L�Ed>蚦/U��U��#�� W5�H\ف#��v]h�P�m�ݮâ۴� C,�ws,J }ʚ��C���D��k?���5g��3Yȇ��P�����ع���&�thjOyͱLF&/��MԳ>��ڡC��B�y v,G�1�x7�+���f=�"���� /Da���YL�j.z�8�����1�����w��5�D� �",?�f -��:F�C]���O1n��&�nh41��E䰀��G�j��4��� ���l.�b�"��Μ��X�(�Hd=U׀/L$�˕k��N�:��ƥ��w�4�c}�&���R�Xv�@�tDL�t Y6��k� 1���h�e&M�i��$߻5ı�����!�#�/�2ku�����UM� I�,.�Qd���2�&�(r*i11:��Fׁ8�j���r��`��66?���l.U=�����N@�x��5���/�S��U\�:;�:XU7 �K��=Xk��\��n����[�h���Vc��fo��:����:T[�b�I-��n�XC�Z����1M�E[5Q�N�����9]��&J�� �E�ͣ�W�=Z,��ݔW��ןE��SX�*� �j��m�*����+��Ď#rJG����ق�LL�9�B������@>h׳F��渕�� 2��Z�j r�D�mc�j� RP�Rb�3��`���>�<�[������v]�D)�֘lh�^��J��M0kaHMO$�����5K������h�f�'�3�И��,� S;���N5��ήZ2��6=D��<���\�<] =)� --rG� Y�4o��Yщ��3��G��)���xgN�V�nD.5 -f�6x�߀ԗPPB�X�!f�� ��xu#�z�6���F'�r��K������L$!w�P����v��Ɍ��e�K%�y�c�& 2���s�n[ծ|y���;� .D.樤�9&v��1-�/�&��}��_��f�N���ĔM��쳲_�a�:�ExF<ܥ�������T�6���XT0�tT�DN$ab� �MmL ����ޏ�K��P�ud\��#S�h�3A7�O�� �x,�Aē� ��D�����jW> �VvJ,��F�b+,� 90^#�i,����+��\٬|џ]S�cPO9a�01j�$�b&�lUn��t��>ۍ,?��A?w�8��ȡs�Ug�e����2�z����T�#m�L��&�H�\��47q2��rȦ�F>I 5�)����V>��|ol1�f� W�kg��l �8�ǜȋ�A���!���(��G�w��8-�!@,�Q �8F%��ZBG�¨ - ���Q'�a��3`HE5�Qf�}Q�n���iW�`�����~$ �T��� ��9�CmU��2���0u�!02��h�B���P`�]����&�rE��*|T��R�b��sA�:%$?�}��B�:N����F��W⛢1��n���ʱ��> k���TrqaBV�ʪ�)�Z�G�@��j��bFF5]ك#[�.�������C����X�Zs�������ͨ5�:�6M=�m.|���Y�HS���k�Մ��v�0e����%�P@����5*� �}V�1p��rzג�8�v-vv�NO(�QSt�����wy�&H#.Ъ˯?�E��ʂW�����F:�����_ -9H���I@t�%/��DJ ej[�hbB+Z�͹�*�%.7HOg�yHJfv�lv�T Y��jp�i�� ݬ�f�L(��i������~�4���e��p��ѱ5�Qu13�k?XGޫm����s��⦆{�6Ij��$:������! 9{�F#c�0��Ϥ�����Q�G��"j�' � ��q����v�X����B.�^~��n�dq/φdD -�g"'63�K��[,s#lX{�w,�:R���Ԡ�u�G��(�9�� -�HM��3�����J�D�, ^��M�ʃ�Գ�$�]�#��+������]�!Z#`9�b��|��̀0�0�--�>�+��Q���~LV�/���XȔ�%'�9 }LW�.d�X�vK �� .�ï�(A �4AD�� [�|3���'��o����$��$-��{��0�Hb�r$��ɣ�FP2kJTM�i��:]�0V�s��VpQ>F���D��J���@�� E� U����Du:6�h��Dӛxj�d>%D��†8&������g������B8 �)|d -�����,�/�n��PА�F���#�7�69�#P%'۸ -k&�#c�Iρ�=$Nj� -~�" e�D��&F����h�����h����O���M�1����&"Ǣ�R�`y���`&�����\�� (����t�9����ӏI�d#+/�9��FТS��A�X��FdW�q�e"��U�E而 -Y�������MIB��v�҄�N%5�2y0����D�,Ի��v �I֪���^�ˊ ً�N�M�qTc^o� ��!�7i�4l+��[.r���?�[��J4�Ϣ�r��l$�1f{?��u�Qo�ʲ��e��f�GӼzY�\��4nN�60:N���H ����(5�+�hYl��P7�$���b� ��wW��D&��t�5. ��TRVfE ����lEė3o��dIa�L��`z����%��^���i� :��`<,��3�t7y28]�$��'��N{]��I������G2��0D�+�,z�Px�<��Tf�8c�y��i�@�f�-z���D�#�1$�W#��G�em���H(��*�@��dO}0�~fW���Ϝ�F��}@5��� P$����բjE�f����~Ϣ4�1>���<(�ʕ1�(JM�n�l -� ����K� �!e�!Z��z��A ���������e�2L�@�D�vG���e���~R�0����5eƠTU*��V d' 9Y0L�jc.�~EYg��)Ր��bDĐ�n/���Vuf����;1V��7��&{���+���l��V�+�d���L�d�f�F�v��EK�Jvѹ�j��ߺ����g���lPi/�D���Z�s@xX8��BN"%m�l6��Y<��`�0C- -Y�MYM�d����Dl��h3��!�Y�W?aV��h.���Zu��b��JL1�In;5!��i� W��:*��.����c����.D�7�X��!�F!{/'���� �N���=I>�g�/}Q� &D$��ab�ȩ�b��vB)v��MX�9�(�)�:��U�����' -��j�}T.���Q� lm $'�.{�\˂�>��,D���(Z!6�^T`Q}Q�n[P��z��W�X�j�j6����A��5,V��<x�䅘T�.�|����I��@��*%��1��_�^���}�E����iŧR̫��F���wBTɍk���YgoD�m�>]�����d�+���ȭz�׏EU+(�Iͭ�- O�/#0-4B,�y��!��6J|"���+6�=8Ң�Y�hզ �!ZɫH�L>&��ĕ��o�Rz�wv��lQ�)��]���E�@&���?BD'QS�m0L�,ݢ�m Ztq -q0��3C@���哒��/$�GS�PH��'�jv�s(� �,҄�x�8�G���� #�+��ED�t�P����)8���g�ˎGd��H9 �Ϊez%9,U�&f�ĜG�nձ3�&��{_��$s��S"�W;�F�r-�P��$�0�LC�Z�%��O(��P�٘.���׮�a�E�2�� ����6P-w�TrA:@��|^���)iz����aի��`2q�J���S��>ev -�\�2rL3����2�� @c�L�Q|�e�E��ED����z�NF� ��ƠLg�7t�K�RX�C(�LJ��:2��Q^�OZ*�E�dQ���-�:�n��i�k�0!i U�d��}4h�-y�4T��^v� �v�Hv��03op���)hdM&�{Tuk ���x�T) -\IU�$@$X�a���*(�c#�YՑ8� ~�qH-�?�M�'�s4o�/�$�1�Wm� - ���a����5�|��D��(��F��c!Ǭ9+��d"�Jp�_�hښ�ԥX�;Ii�L�F���*���Fhj=� �\��(�9��j~L�<zLmT�(���t��sI�D��[@^���Fv�^?J��h��8x��x��07�Ս�-ĨYh���w��hdo�f���m�E��>���T�v���K�U4ўڵt�<&��%�K�+� kQK1��Da�L�F ���܌Q��b�0���m �Ɋ�1��z��Ֆґ9����5T�� ��.y�j&�;k����}�䨁C�L!|�kޞ���IKvb�Sׇ��P���3S�;��2�b��3�~9 !(��1r��l{�(�j��8�u��[�J��M�~,�y�k�a��6�z"y�^��,��mQ��Ԡ�!$�i@� -�l���Ht�*� YV$h��1qܸh9�L�pL�*��6��9=��!�[�wF-G&���X~VY��<��ꍙ����M�Q�8�]F%�!�J5�A=*��M��_i��8�Ҧaad����i|�gaS�6�Q�9̡!�:�T� ���h����}ɰ&z��T�Ϣfˇ�>�g��VR����t v���լ��#�b��6���Q��f��M��+��΅h��fJOa��5��n \,�fKFV�3e֛� b�T�t�ˑ��$�&;�Q,�V�v�lV��m�n�o��j��+D x����u �ޫ1�  av㔕 ���Y�/�z-d�"�� 8������5��鉨*2�ZU��FdW4���D� ig��YjB�c7sv���Ԟ�-�P�qT*���N쬡hC�>�d��fR5ނ����9�Ɇ����M� F.^Aq��VF��2�uUrT�����e��$is4�e��/[�T0 &�lZZM�TM�� #��.��b",&W#,\.�<����y \�]9ʜ%o�, -�d'zg�S�"�4;IՆ���e�Iϑ<�)���� �|$n/վu�����m=���A����{2:Z��{K�����<�)���`r��8aWz�VL΄Dx*�g�^!8d�UQ��7���^��s��[3F������\��`5ڀl� ?ע��9�uR�޵Āձ�D�Aa�\2��������� �9҂�-�A㱃a@�)��Y�qLL� @�A��&�Bsׄ��b�I0�(U�ң��d/H��?r7�h(��� ��!'I������8N�����-����1��2=�S�I�=���2Tk�w#Gm ��,9��9����$���{.�GЂ�4\-���AN�q����L��f� 8S��9����骷/jO}r��B�[Y%\�р]^��PL'��{��ުQ �W�Z�uB����X���Y]O �M�=���z|B��dϙ�L�����$)���"B4(� i��H�<_�v yr�St7�'�)"��D2�*qEjL���H��joj;01dAD&n��W�'��:� ��A.s��ab�%9�ɖ�F~_%�� -�I�A��0����l�\u�0����5��4Egn H �?��,~T�S��YSG"NK\��&��jw$2��� �}D���+@��1J���6�f��~4f��*%9{�4=N��qz3s=�%pBy���/q*�����ؤ*������Y`[�+REV�x��W�t���x:#��i�U�"�b�3 ���J}ڄ��^mՄ2a�'�FL�X���o=��4���lMt�|5�8(_��#�Ze� -��iSu(�1��|UdS���j��,� 0���c����Iq ->!���:�h͏�Y�{��=B�.݊��� |�NV�L�T��� �Q�fJ���F��WiB`�uT�X�D�cy���ڵa�"�ĉP��榗 _��[��[�BtU�ct$~�xi�����H��bg���I�B��U7�FC�!�ű�5D,p>����&@q�y�� ����{�0��ڞ�N -��{�B� "�q��M��� �Pn��ӄG��������I�V&飃W���f"�Ȉ�;���y�dXЂ]"�ѳ�H�xbMk��R0<��8U�%������h�QW�X��u�[�u�mg���� h�CD�Z�۷�G�B�=#;����j�,�3ʮ���el�ɢN_bO��0lA5��9�̕MX��+�9pj�Y�4p��L�p��' h�[�% -���Qxc��'3d a-�0D1����L��h�"ώvh5��U��i"/�����;9. :;E� -�cF���p�N��PXa(�}*����QK��(Fd�GKR'U�Tpt'�NѸ<ᕫWReZ%Dos����<��B���蠚X!_���m%��Ƴ��Fߒ,/?k$@I���X4r�[�� l��v������2��p�o-�L�<3"D�Ӳ���,���ԛ��h[Q7�ĩ 9 ���R�$׀L����Ι�����M�@YK���\��{`QP�h�4�N�#ט��(M�q��V���m�df����iT"��o� -E��9�؃fe*��i(��ֈ�R^��Ĭ9.t�)�R&R|R�g�`W[�`u^�2�$d -�SΪ3^� Z,e�}M����� �u�3.s2��r(�X�Aln��s4�"qQ�+�w8���ıwJ\c�z9���fT���2/�U�-B����I�no&��������o��ŭ��w�Ӽ��u�A��,Ÿ������gg�܉=Q��`"Rf��X�Y�N�-j J؈n�Hq�z�l*6@B�8�y���� ^����Xp�f�-����+��Z�"�᪦��7^����}Q0[�=N���h'tJ8���q'^?�G?��)=�6���,P P�*kD���,�q e���2�7iT�$�M���”��� =�r�41��@ -�6���m@B -T=��6WCR��8%�Ŋ�I�KS���U�d�4M#�li�+���B4O����hܼIC�U�r�O���3��<Xh-y ��A��9P �F�Z0 i�z�r*?�߂�۵� ��:�!����b'������<9A��$��,���֦lZ�Y��� -]���h�8Y�^̣Z8)�Z�t5��̥�U��0�t�8pH�W�JK;rJzeI/I����#����!=��Ia�[~V�� �A_�SP"�/(���^NϖdjT�1`��Q����!/J�~��F�����dI���:�g1$XrD+(�ӓ�G�L�Ui0�P�� t I���%� �G-n�J?���h>�\Si0 <�{k�Y�o�E8��Kf��U��X����^��k�I�rDF�VaC -ʩ���F|��ћ I�w2�%gZ2��iI�Z���Oj�rIO����`f��A߈�M� I�`B��C�h��7��H����y#��� I���#*)D���2sv���mM���Î�����t�JB� -ׂ`�`�V�� #Q��1���� ��40�H�π3�AS�"dx���c65L�ٞ�!�>��&;b�ʛ�":O�D��lAn8#��hG���{� �n-Ć*?`H�n �I�P3�c���~�c�ͤ4�Ƌ��D� Ov�T����=���U]� �@��t�LG��IX�;����@��ݔw P�b -c&��>I@ba6��gwe��WA1 -�Yu d�� ��f��ର�uME��4��1�>$�Up��.��:��!3+���].>� �ْ;�\ �*q�04T��&Ώ� {)���rp -ꐽ^*8���i�MM�!�#i����ۈi� -�,+�6��(��8E�z�{2F��`w**��a ɡ�����h4��-�`���D��4����jP Rfh7/@�B��0�����m�F؇��8�]������p�Q}~��.�j1 Q 牨�&Zn!&�>I��U]cQa��Ҵꈂ��l�sim`�J���bnW�^��d��D��'�|d�@��Ld�PF�6R`t9�Q���r�����i�c6�K���|-"j� e��.�_C -�yӉh���z0��4����LD�ۜ�QDmӯ��&멓>��bY@��&W�JP����TEh�}�8\\*^ �$T~�L������h)�e�H�8��R]���� �_k�e��S�$p�b�5�����$�̢h8���/Di�?�8Z�i�|5L�H�A�"�����XY�1�|�T�����Kr��B��t�^ݱ�N��c1T�� �6J��~��VΒ$}�a5���yN�w Y�R��d�΋R4D�fjH����v -��I��K��ą�븼��v�(����q.�Ē�΃���0Yr1Y PLG���}o��o�h[-�܂dA-�n b��~�*���4G�X5��Lh³�8@�䰅�������O������b��u��;u����i{�� 6S�k$�Uӛc*"�GSh���L� �K�����98�;���>h���V3��Q���7�&��d�K��èy)�W�H�wL�QQ"۹Ѩ'�)#X12㉆]O�N�I��8��N d��%���Ս�BUêP�K;���5�m�Ql�D,��ky{�Q��de&�h�q(�l��Drv����h��`V\jJ���h�>�NA� -��"�I1��m��|�������m҉ f���6ʂ�� j�#�Cg��p�B�S�]���]�j�+]�z�����XG��` -7�jeˍ(%�i5��F.=x�VM�2:D���HJH݄Փ�}�<GL�A�*�X���T{I�������ޝT�aIC`'�GБ�Z֡Es�X�F4�ЀG�/{(�3),��"D��L�U��T��=��rE/�\��ԩ�5ޫxt��r��edm&Z�����V[�I[���V̽�x�}k�5�[Gf�ѢFW~K�ǽ�;��\s�dI�*��q�dsW��?��l��(���MT��h��z��qTSp���C6�u�R��R�xu�x �t䤛K!��r�<)&�����Ԥ���q��4���ڗ{p�P��[V�'�~#�Y��W�w�B��RQ'6�#�gG� ܘ�J;�xNF.�s<mb%�7pվ��=X����y��`��$�À���u���@�<��݇M��6�?��LK��9��*���K�h#�����0�)�x��mj��@a�t�-��u���2�ke�,rF~�h��R恒Hp��kq)C�I��/���/���'K�' {�H�R|~�J�oF�-p����H���Η� ��Q;���"7 ���z�E7o�g=��������p:;Y/��TN�$,Rtmf'��^����{�h�6gC�~y2= �1��g}�n��8����=��jZ��+q��{�f�ŷ<�tJ�t��R�H0P_wDnwx`rDQ� 9�d�֤f�K=��g�������SR�b�: �K �A��1�)�+�����eE@w�<k��wf��z��+�B�6�i�k� -�}�G{L�k�OʔO�ټ����CA�R��d�����D.p�a�`�g�.��cm���z*�␸�4]H����5�D -7�gGe#O,,�x����N3ii�Cš�Wq:� -gF�q6��{��|HX B� �@�C�%Z�<���tP+���|�4�@|����/oίnϯ>;8`2 �?�}� q����ӟ�_�f�~h?������㏯������ޞ__��|��?|���?���j:hݺ9����������?��9Yx����7gW�����Ϯn���?�_=;�߾��Ϟ�������˿��'/��ۗ_�ۗ_��'��?����i{���[W��_�������=���Ix�u -����ߔ9Y{��o�����t���Lfc��:��1�׌a����z�ӓϟ��\}t��fݾ��w�:�v�?:�t���:K�}>Kk~w�vgi�o�0|oݭ��������3���o�>?;���۵�����1�?�?[{0����j�q|�����O�No?�~q��u���;f}�q�Go��=��;�|��l��W/�������/���������}q�ɋ���ӳug�_]s��;0�u�ss�����S�c����������T,�ӿ9�8[�`��y�#������/NoO���Ȧ���K�pH�퓓�g?�9�/ڙ\��Xx����߬�N��즰�__��9=���ɳ��O׾�W9ί6��_�qg��0��f�������������;<GחϮ�������4��&��w��N|��{����� �_�?��;]��u������kۛv��Nܩ�;Up� -��{ -����7���7��˯�����`F��ų�O ���P��g׶����r��ȟ�/�>}���Y����! N�a��Ԯ?����-N����{��7fq�~A#} �{.�7_�{o�Zԟ��|v��>��nT��Y��;U����������;p����3��goC� k+�;#�V� ���wF�M���bY ;#���;#��_�;#����dg�*#H��p?��W�������R�[-��������˯�o�B�˗���˯������9����F1[���,�����w�aߥ���~����������~Zg���>��>N��r�~\#?���sr���Wk���ַ'7�����%Y{PO������|z���՝sӅzvvr��{�l��;ߚWx�}�c��C\x�����󫵗��������˵������8Y?��������n���� ����������|qq�~`��ҡN��/���M�kw�� ���[�� ^0Rg��|kj5;/Ʒ[� goh��e�<�{�Y-�xqW�^��d�l -_X������?}�ӳ�@�� aKY{ w y:���#<:��%,l;��{j �~��ܜ�~~yv��T��7����}�J����FK��E�A?v��/z狾��^�N?>_4�Vx�����N�����?��ϯ����ϳ�m���瓵m�;������?���;������?�>�n����z��;�l_�]\\���.����~pz}q���k��_{z��/��]_5-�j}N��޻W��f�/n>m���6����f�~�VylW�=��\\�r[<>_|vsvv�A;�g�_==����/ί/�n?�9{������]��mng���.����m�m�>R��@�3�� t;�1�qm��ɟ�_����=���[^{Lg�{�&o<���G�� �;����)�rm�X_�vvڸ�͏��Y�g�0f,���������&��� -�C ~���]jK�Rz6#�eS���3�醍9b�!��Θ�3��9��q�svƜ�1gg��svƜ�h�yF���6�2�kѿ��4��+ŏ2��qbul���;a[ ձ>�†Cu�?� ��Xsdձ��P�}��7.p�o�Ǎ�qq~�˓��h�+t��6� -ݡ]��� a_�~{��J��A7�ݡ\=*��{/��� ��}x4W����=F�5%���c�����f��&T���������f5���"W;d��HýC?{��$�l7���K��5��Ȯ&�C�����U�|k��7>�e+3wއĝy��|��=�{��~u�~���p���%��a3B^6��6e��ߺ��k�ş?�b��1� ���,�=�$����|<� |l���.ptkv�s�n��nSu�]�����"^vA��N�����y�]�w_�ۣG�ߒ��C^6eQ�����Y�]�ކG! �. -�#ږ(����X"�ޯ����?�������xr������n_�|����j}~u�e��<��[�����o�oO︫��^<���{ ���y�#��Ջ�_�ޞ|q��M_y�7�ᰶ[����g?�9�/ڙ\��Xx����߬�N6Qù��t;�� ��6��������SwJ�N ��J����cT?�9i�������������݌p���S��N �i�;-p���o�3�G��cDۢ�Ǣ�g$;Mps4����?����}Ve<�i��"-l��m ��5bq9v��,b�2,�����4�ma��k�FlO�V,�O/��� -z�''���>�������~��0�m�½ʣmˡ�נ��L�q��������G;����=~ ���'O��<z�,�}��}s?���;�|�� Vjk į�r!�{Å-��·�����㞵����o ��im�e�>�����̃��C��>Qk�*������b��UWrU� Yw'n� �Y��7��-��v��q�m2�M�ۻH��l�����Wg}x� G^] ���>��yu���l�{�WwW�f;�7� -݁��� a_�~{��J��Aw7�vܠ�c��6��d1��; �ǰ$�]?�o[<V��GX9}]d�틕{��N��l���w ���Ikjm�m��n�����(��~Z����[pl�������C��Y�����p�#�s�ܻ�Gy��ݐ"k�K��)r�h@Eމ�����>5������q�[�y�[n��1�3~ -��o�X�#��l��l:���i�<�m������F; |wᄑ#��O�n~r~� V�MY�ۓO�_�m�y����4�?��Qs������:���1�G������~l�����o7��0��8P��!�*�������뗺؜��&Ϧ qo�ز��<�݄lCd��d�@�����,ͦLɛ��]���a��h�W�4���������9N �w��-��[{�7'O�_�/���"�l��vvs'�yK��Cq��g�__\�vXŽ��������������ێ�m {s���%�G�#�>��҆���슏�������������}����q0[%=�xڧ�'�%o�1��eA�����Md�wۀ���i�Ӿ�h�MЎ�mT�ӆ�p=���O�Y�n N��#ږ#���Z�#�;l�O���$y��8kg�l"ΰ���q6��m�ʹ��>k�����4eU��=��6?��������]D�fb�x$wdKMxG��\]�]������>���߽�hm�ޛr����~t������������O�mߝ����:���ҏn�㺣�ȹ{0�M���6�m�%����E�j��{,Ǧ����m9*�t~��\�ؔ�����ٟ�m������y���,�ګz{���t�ɇ�ӛ���W�~���B�ļw��=�<���.�<�j�15~{rs/��Ͽ�ӳ����c�Ͼ�)�Q��?�ޯ9�����H/ί�N֮izrq�����>'/��ݜ�R���=}z~{��=V�^x�o����:=}q�������&�<�frru~y�.G��� �v0��f6L�;}ta3�h[L"���W�2c -����ӿ �ٺ���[Ijx���6��m�ݴ́3kK��8�>^K�8s��g��.pf8� ���j��3�} ����� ��ά?�m�ķ:p�˱�Ge8�M�3�/׶����"ڞ�{,�}y�-�`o�b�# m�ۋW�=k����a��h�"?�ٓ��������n�����%`I� �'=����~W�m����o;���o����_����?�����������6����v�}�ݷ �{�9�7g��w�,mW�pX־�6< �Gp�pwy����z~�����;k�N�������1���>l��j������s��y��{��[q�:�>�����Q١M� �kҷ��5�7� ���'?�zj�X�(O>���ekⶵrp����2����Ϩ����W��\_�}������7�������7��������7��˯�ח��-��~�7�����/�^�������~��!����j��a��O��}7��|����a�)��՞�n�q�`8����i�|��8��oJi����N�𧜼R_=Xn��eD}������{�#-5��3}�������z=�� ����/b;����9r~����=n`ܾ������G�;��J͉?7n<k������r���V�����G��W]<�ٗ�>��e[���?$w�+!�)W~g<l?����a�#�r���C􇹎c��}��} �#�g�p(���l�pX��]���5��v��oO���޿]7�;�k��;X5�!��S�ӳ�w��s��e8 n�>�Km�yܺ_�-tc�/�M���쥶�t�K����;���ö�w�m������틽�{�����A�?�;Y��\��!經S���N��/�v�m��=���¾��t�O�OG{�<X|�`�'�:r����H��~����&��ro�Ь8X��ho��.c;�G{ g��U�/ub��N�q4�q[�����o����5m�<�����������p��_���Pc��p�FW�<��Ú|m��5\(x�e�a�w������������U wqN��d��;���ɛ ��w���ɛM���\�J�� - 4mпm�����T��=�����E{�g.���xg7W?�:����/Ο����'��N��g�7��M�{O���d�� ����J}�o��|�W/��_fz��Wh,q��xXG�D�p8T7�u�Oc:�rl�����#Ξ����߼��4����=�V;PC�t��<���a �:�>p鰸v3��J��|;���=R�O���ݡ���\M�LO� �e�eh?�z��Xpy�a�� � �-�!�&����&�'��r��B�P,�4�Q�R��yB mk1��M.l �v�a���ZO�����/�䨱0�[w�J.��Z�c��6Q��ƭ\9,ؾ��6��G{���F�fn��9�”0��F\1.3s�i'�ymR���m�Hn�������п�SH�� ���C�:��zʩqƥ�cL폥�6-�a��/��]�]Zl0Y,r�)V�bWs[����p��6@�b�6��b�c�6af��.�h@� �<q�Zbv�?{o���q݇}���7�R����Q��$%�CE�i��,gĊ�T� P�;����N$�%/'���r���r�ÌI9�"��;��������]�8s���ݧO��>GfP�@2�yȹ@"�!o�R ->S��f�E��D�E��-��D��0�(�U�Ћˊ%����)�oJ�ܵ�Ή�OJ��zU�d���0���b�1%?x�d)(����/S2��c-B2y��B�X]B���H�^�^�Yy�_ � -PLT1���U#�s��.��ʋ���L��Hs������n���*\V�<B���f����s!ڠ�P'�!��b�\���,o�����E(�E� G�O����&=�>A���f���8�����ɓ5&=�eJx���O'�Gȳ���ȁ���?՚��r�\!�͢��x93�W�^΋����;W<�����C�`i2kJI'_���3'�;�:,hU+�S+�5ˑ&�c �^��SPL��� �:!_#X���M��SCm)� U��ɥ���&Gpy�9��ɱ;Yܷ����b�d�AR�%�M���D�V���B��㝑��T�_0�r%Õe�) � �Ji��C�K���d -�S^� ��Ѩ�/�}B�)S��2�Tt��ԟ�pd���+�(M�>�J�S"N@,7[d�"��,ͤ�S�NS��s���hO�*���`g��+r�� ����m�PS�v䘉���{�\���ϛݸ��U3�H.��cY'#�D ���H<�P����-v��;!]��_�i����H�2=S��!@%X�<�������&&��y��4�V$��+3�}���Ɠ��ᴚ�R�p{��)6h&[�����9O�[�^�䋕�ƾs 3pS�*���Z�5������ef���"�/� �X)r�!��Թ}� -�`n� O$�W��S��i����5����+ȐR���A0 -&҇��;=r�in�� N��挼�-}Mw��^Q�xt���Ht㨞��ݪUG_��t�S*3DR�yrF��8LUN�$��QȄ�c� -�� ����� ��"�~y��2�-Z&��F���l���5��=��_����[#<-���M!E��M�m�fsA��D� -�� J�pR��RH��a�)I�i���N���^��3�_Qo�D�T�M'[��ya=�=N@6T�p�`kA�m� .��DMeI�I`�s���E�Dl%�Qƙg�jEeU�xtf��֋2^ �x>r�7�y��c"�n�Iv{��� �+�Dm��Q!��x�G(�d�x���י��"�їC�������\C�n�t��j��6�ܬb�NP��-w4}� -pH�m&�@}<8�dȆ?�)�#Q{��J� ,E`���@� 9fJ�t ��vZEσyO"����f�"ec�[�����T��1�/\���Є�"�5�P�P�kP�6J�L$��S��:� ) ���e���2����gՅ��8�4�&R'(�!�ؠb Y'��i��jdhЋD0Ϸ�����(��ډ�V��DI�e&m{�I�Q��,w+٭u�� �8-k�iV9Y}��/�ݴ�0��e�X���=���H� -|�=�gK�E'�J���)d급� ���¢�(���F<�,��xC -�1��OkL=#E�_G�IIZ�2T���+���k�|����u��':t`#��BAE��z��ѝC����* �aA��yN���MA��� ����Ns�JxJʎ*����‹`�mZʍEIT1$h�ę�L����kG�p �3Yx�d���>[�rO�~H,G��j���:-��= -B�V΍|���  �G�}� -pȉ��B����TS�b�����DS]b�� '0p5��E�kM�r|�]�*����/OP����U>�Ș�P��Hh�$�&��Y_��"$��-����k扖߱Vps��s*!�=�t��� �����2�D���l� cfXԉ�3��j���;4����Uf]i4o���N6ڴ��p -����t�߃M�����6�F\��.��P+�! N�l5�@�y��$�\S� T���3i�;w&\l�����ozOjp|�}z[�9lGMg��)���zDԼr�-����\h�t� ���D[�eg��� ��)jD��Q4�7�a��?W����~ -�`O=˩jSԥ�T�^P�NT}�&${�֎=G�ے�cH�U�G2?�A�IҐ�p>��eD��n������;���i?�;m"�!W/��*(?�~�d穽MP�t��X̛]7��'���z`��z@r�<Lf�f&������Rq��� -�W�n9�P@�D��wB���7��Z/Nv��al�Ջ�#�}Leu�8iD�JaO���3�O�y�!Hh�&�x��ѕ?�����|�O�����r�Bt&|UY���S�-�J��S�|>� -I��޸*�+� �!@4���w�3�N�@'���D�U��D[ஞ�8 -aGZ̝X��q"]-���}Xb��7�{j -�0,��ԞU-�9���W���=s����>��C��Jl���Y��y�� � Y0@�8��۫g�c��;ܼp���ݘ�Ǣ�������:����e� �R}2����SB�B -� -�Kj�Э�n�B�て<\�dP�P5m���ı@`��lz����*������x��+#)+�f��&��Y�94Z�00'h�X�,�N�66.ጟ2���,�`R?�Ϩ����NG`���d�5<���P_e(��wJщw�Iճ�m�0bn�bQ� ȫ�%<$����� -�u��La.�^N"��ϔ�B���'��z�y|'�� }�(N�܄��IH�=q�裴��@`����:�Hߘ7�����BHI��>,4 �+2u�� ˁdR:2ԕ��8sb;}g���� �m#}�h�#�u����>�c��m�hI�ś.h�*ٖ��%��e�O�(�6�����*�ET1�����^I�� � [r<?J�[\}pr,����z�����Ф���F�`sCoa|+T�%Ӌ���/��;��Y��&����Ѱ�>t��R^�>k�Px�/e|*@ʧ#���g -2��`9=�=�,���@O50��!�̤��B�SO��8Ԝ%�[ʲ@�.ʘ�6j���nB�׎� �1����h�3�5�f,����>w7:d�9�f�33i�*���A��Aw~������U�a4]����N���ys -S���Y�9�j�6����k�pJdbΖ�|���J�#�h ~|�A/@x�U7��T�g��!�h)A�]U=̹f�QK�)�i>����n͌7o1�����@�9�F2Fg�7��T|�}�yjɵQ5���SK��#�#��l����8���}�Aq�5P̓��,���'�$@����1)��3�gR�D?�)�L�ی�'���t�q�<MŠ~3B��I���.�8;�t�IM�K��B� :oE�p�C*c�haf�y{owASs�7"�!u�!۴dB�6 I�s�؄J�[���pr$�� -���I���J� k ����K��|�X�.h~|P�: ���i\���������$u�C�k��S\ҿn�J���S��ڑݚ6�!�Vȩg&Ё/PK�ᗋj�I5�]���ɑ܈]��6���+�ʤJJ���Ҵ�j� ��D��8 �l`��v�|��ɑ �]�6���d��φ8�3���n�I#�)d����#)G�8��׎��l#�� ���� ���&?a��p,ӡ��!0_���zIHQua�׫�S�fV~� �'r�-��NG�L�mOz�/��\�����@Mm�1-�3����/�=2wWv�rw��) cc8:��b�"�^4�D�����l�bRaR���G݊�0���(=�Ţ.}��*��������n�/N�f�l3evy*`6��|�MR�2D��х��Qa -�0;�B��;B��<���&x�'JЙ�IU�����kTL!��0�Su��Mǰ�]5�S�ٚ^�9+��"�s���L�Q0��!�*_`�npHď��X��J䤤G�� R���L@�)<��y�$�^%�}�ʹ�%P��a r �r�L�30���5M�I � �E��"���ʟ�[�ۼ�k���� ����[����g �hF��^BTY����Y���r~6yA:��I*=��':Il��N�ȉv�N?D-�0+)"12��͔�B*F��pE�d=1.�q�nW�pg@� -ؑ���-��jMx׎�fU�Vy8��"0nǜ"u�o���m�YH�$�M���M��.�g��s���db���>�^<�o,�6Ĭ�k�� �G*�T9��R+x[5��!qMn��� � �@��2�����$ �� -�ғѶ�� �б��]F�&惓m��.�f�K�7'h��HˤR#��;d���"QQ1���`��D?F�S M�q���`0{fȬl�a�[7rb�X��Z%�q��N1����wc�� ~�K4M6;��� 1(-s�i���)a�+��.M"�$}���6[�lBG�P:E�����c�mQ_Ee�qP.��.��i����&�$��,� ]���5�Umr�v�Q�*�=�U/����ő>�H�t��v��*�B(0���NP��2�} -�#�SLX@#�q@Y�G�q�C�nT@���:�3�{B���V����N�ɥ��p�1��EJu?:�F��ְ]�z��啥��OǶ�g����}.9vz��Ӎ;`.�Ҷ���dv�r����i���pH��-���"�U�͘��!q��/5!A����HD�yLf�5��ܥ�g|�b���~֧�TI%�e���Ѷ9k���=k�Yc@ޒu�YU��/�|���'���,��'�QID���Q�!͏�h|v�z&ƴ˘ZH��6��qMpT���"sE��eu���� ��Y5�݌/N��j��5j�SÖY��kMDIRPE 3�m���w�f� 4�#�I���d���<�h� �}��l,�Y�ɣrM�\56��J -3�ssA�8�f� .�hq��sB��b��� �u��˱��Mf�6qq��x!�� �W)���j��.���X��6�pL6��KG���g!�0y����c⩡@�w�wɏay��}��$ғ4[��Bg">3�nu8��m�8�f?n�#�ɓ��<K�骚�41�"�� ��\h�5�NL����KTdB�:�q��I��>�ƫ&8����ACf4�hf�e�]��%� Z��ȩ� � $F _�nܳ�ۦ� *���&(�H��[�&�����!t�d��J���6����3�p��-z.�T*�-�[F�DM�W€�U�� ±��0�$<~p�ˈ\�Kn�)���l �`) C'3ko#�B���L��[��H:�6ce�ҲK{��k�U���!��z�Y���q9���d���(c�do@�l2<�) G�D�& �z"C�53q:�w������z>2�0ϐ�U�U�s4���I�ʇ ��''L�>��Z]!T�/q��·��;� �u�ۉ�2��#9��d?��Iܥ �� -/�����`n�hq��,�j�ȅ�v�^�t�M�3x��Y���AbC�4�#��~�L 3��{ �tj�u���w�iK���c�O�R��iT�V��f��i�7LԱ(��0�m�u_��i�s9����+%%����at/1+3I ���M�'�R4탮\��5]�M;T~z�[���>���]j�y�<]Ghh���8G�=또�)�;�O��ݤ��①�c���}xf��Ezv����_#����8G� �������}�h_����,�0S��gh�v�r��~m��G�kO#_R���`�@`�x2�r�_�+��G����7.�#N��S��k����U.:D� -�7�2�V��Ka�t��hmm}�mw���dk��:9j�o�;�x�W� �R�H���I�6����ƀ��]��\�Z�d�Bk�mk�m-�7k�ec�l4� �� w��ҡ%QF�Qmu]֏�h�[my�*RAX]��^�9vh{Ih{�huˈ �T� �����HU(����--�֏.����CA��D�Gu){��P;���X�(�U�o���6q����?3�t�Z�(ð3cu�����<Fb�:���1=5X.af��ڭ�b�*���<���l=%A��IwNo� @C� 8g���yvi�oB�����s�^�PҤA%��^�H��DD�� �'=�.�u��3 ��ȑ��i�6T�Sdu��ڛ�C W4�idM:�gz�0��4�kҘE+�å�����)~�B 9m&��7��`j,�۶ OF�l�c� T� �։� �=݂K����SL1]pN��zK�Q"<��*8&���z�&�L��Dv(�r�ޮ�m ��7�% ���0�D_�hux� �N�Lm��$��%����9�����т�2�PA��ւ���Xh$�����L�J�8� -�� �d�R�:��W N���6���͊4�Y����jN(2�5:���� -1꼣��~�����,� ��[�O:.y��h��C��c�J,�i\�k:�~���M�A ٨�6���͚�V/��3P��� -����N։cH��|y e=�w�B�����Ë�����#c�x�9��iW]�eB���{ޟ"�F� -�d�qy�=����X�)�r�@XE٫�X�"���c^=��A@^hn�=ߏ��a2:���܄9k���Da�t)Ӟ�˰�l�{�aT�����\���؜�o'����Ս�L��N m�|x�/�>�1����Ro��j{��p~d�s͇O�t#"/:M����8s`��y �Re�s�����ջ�9�|?�M%���ep*��t��JE -��L�G�6� �Ë�)�`i;�MCKU6/ sB�y�jiO9�Y!��FP45z��>�>���@ Hݢz����+h9���S��r���K�+]>�{���������c�5��cL�gG�]�7v�<Ռ`�~��& -Cά��k���T6Šx��-��Cdv�N�8͕<_���U�ȹv�f+�j����X��Ȱ��>�`g��fV��9�π�U9 -�^�u�/o�gB?�۱t|�Ux��%�p��{ή��/�yK�����;� (5n�^�O��S��V�CjP��я�~7����W��գ��z��h�����ꪔ�{b)�]�i:�LU����s���:?���<t���Y�wfNJ=Y��+ڽ���*�� �z�wѺ��ϸ�������绯����~|r����ޡW+\�1L�Q��,?�J�1����cR疥���秝ș��h�>��FZ����T�(�uBU'G�(�)�O=os�:��Y�\� ����e.p�1�#���Ԇ輥i�X�z*���,�Ji=>~�S�y��[53�A����G���m.������n�c��(��~�(�!����bz�I$��[H6,$;�����}��f�G̠��r���>���0pY��g�06C��~��3��3Xt��>h�{�{ F}b�Ȓ0�1x��]_~��>�+�������4�i�"h���ԣ�:����ڗQ������UI��}�P�ll\Q�X��0�����z��?޲�����VҜ�4>UF�Op�?��sz�M_���p��vM�&zY8=,�@^�%F AQKh"�#ثoT o��ۛ��Z�-��A�bb4p�"���l�w�,ڛ�_8[oc�Ci�y�{�����^���[�Yh�Ce�h�;zA@-LPV��˛ 4/hY�4�t�QDŽS[!�P@�U�h�����X��ZB���Y�j{���<�p -��aYûX���U������s�}����@U��[�<�8��el�QX ��en=��=13�^e�mM�����r�}���pX |�ִ}�;Y�U7$��q�uڛ���z%�H�[і��"��۫h���5$�֨��A3���s{3����}�6��jR� -�}��U��9<Ϻ�!�xX!�Q���.� �4��,�ږ&Re<k����1���QJ�x�P�-H��N� "X�v٦H��Y������9�:�״,O�!.�^B���]$SPv��vBlo6�]���z��ۘ�v�ׅ �l��v <�Q_u��i`�ZyІ���K���<�צ�ή���y92�1���~����-A3��Q�#)��%�-KO"g��j�p8�h�;@����n@5�N�L,�k ��v�Ac;�s��� ��'Iq�1B��5rB�� q�����;�fơ -��S>.̚�+���5-���c�O�Lt� �όʹ<1ˉ�[���{7�4=�4^�(]9~l�l�[w��sz�K4V�����c�OF�e@�-�]�1��HS���~N�}d�%�k6d�H�(��ԣ2�:3 ���Đ�/Gl��G���Tj� -K��sb�U� $͝�u�orU��4��,�[��� -X �4&HP�9�\��A��@��v{���W��}ox�b -T�5m�ʚ�X��.�^QP���VJ9���Z �Fw����U���T�^Q|��Bg߼�E`���}KK�sM),�F\�j�ʼ�ի�����e�9W��(,���Xˆk -u׾�sj�aH����t���ݵ��-v���+Ts��] $�w^5�� ��e��� �o0gt��" @� �¼��&Zt�L��. 8�^1�Z�[AіK����UV�y����%X�LWP��ԴC�m��r�MAM�F������a�a7�;�d{��l�kԃ�I@Ed\N��Z����6`#;|m�+�Ġ�mh�i�G��=���s�&�a8a��N�������>��TG����7ehNmY�0h�q�� �3M��'! ��� exsX��.����x���W��=���y0R���j����GJ]������""���(I:�q3��T�&��1KM�aй �A�ĵ�QbB��+� -D� -��O�(�#��6/�u>�} smԃ� a+-"�A;��L�Tl���^Λ�($���`Y��� �B�@�L�iQs銙�`����66��ˋQ?��^�� ^O�t��ۣn׀ -b><@�i�� N� �� C���d��:p����c��ՠ���W�&�7��^�� ��@�N��\�{?>� ���ۋ��3�L2�8�Y6�k����.���lk���͵Fy�_���3-�5l`�J14�������e���=o@�Ҝ �M*��� PcI�\�J�����87�,N@��5h�� ��M� (�&Z�q���bO�Q�Q�h�S���̼�.6(!�V� ![`���zO��Ƨ��[�s�'.�1`�u��6鰀�,��<O�� -��[�lsB� S�g��L������L�WR�7u�6��6 u ����n��>=d�Lq���#��T� -%#h�:�s���/nD�wh�?��4 u��� -���paCP��^��5��|�>�wwVê=MzZ�� �m{5�rAN`�]�؂�>�}nm��aAo���iX�HM��=��.|l#�L����I���YC��Tx��Mb�Q�?�6a�xq�c��z�1��M|�9��דo��<��p}�(̢f����=j�VA=j�D7�B���E���J�K$ZN Ԅ"+x����ܚ���6���X����MO���9A=x6�c�o:���N��D�Z4@��E�b�bf.�yA���(�ׅ?=ـ�ZS���#h�ڤX��������2ϛ�!�Т����@�����h������L6�%��͢C��Z3����Z��w܃�x��<���^sCy ���V�UĿl��9M���J,���14�U�lP���D���:�1��bh�:��BØDeBhɺ� ���,~I��ƒz:������h��A��p@~�݂N�EТ���i���T���Ea S;�j��{܃���E�� �Т����v��ꄟ��9�a񵹛����h�ms�4ذQ��h���Y��M-D���[�4�sSӾ��i�=�M��Т�p�q ����b��*@>G&脗��\ �c遱dfN�#�-���X]�_3�Q�0�j�I���V#_�l �A@K��AK+���Z2��Gw��U�8�i��\��Yhl�cM���E^kRPg�Zz��hZ|5��S��vjb�Zh��Z�ZMĸjR�Ht �(�=z���Ѳ�\uSY��Ag�KT�-�3сũ+�</�. ��3c�2��y�r�M{���g3i;����퓳7��i����.�f�7��o\ݵK0Q�8���ه�1��7����M5z�-��1I�y#��֗��5�݀ -J�1�d#�B�b�p��j^U�7��y �;=�[�ǟY1��#=��oԝ��v@s{��jw0�&��*�3u޳�z����.��O�j�`�8��N���-��e�`O�����T�e@�ei=�XW>/׸��q sk��A�7m˾��`�,�j��R��[��Zd��Ѣ=Ak�d!���K�W#�=�Z6��>�Z&�J,�f�5f�<g�Ưi+�X�xO�J�29�o��-A����ڛ�)]#R�]�}�ce ��G��O���l��{��� �F�-�3�����򔉮�3g[�HǸ����鸟 -͹X�(k5�>R�}0V/������v4M}���#�Z��AƀO�5�κz�!���5Q?M~u�p!ݭTd��́j:�͇�� 3��\�n�i����e%�ἕ��6)�>��y�,�1�сݥ�|Z>�i�+�ϴi� :��6��h������̫$ �A5�δ -�J����p�A�Į� -��R:�u����#>nJ5���}I列�M�?NeB}��;D�����^���^���c��;i�E�C�Ʀ��2���AA��|+�T���$4~v�$� -�^@�4��Vu[�u}�*��SV/����c��jNe9$,�Sn�� -ua��-��h.�~�5��vΙ�ʊ�9� ׈a��.�E�� ��S����i�ʖ�sXBk �U�S�7 ��g�b���8�f�! �CF6߀Mmķ�Bʒ��u��d L��K ��RP�SZV��yѽр=\ƴz�2i5���p*C �^�{� �Z�F��:��ؚ����6Ty��td���Nܸ��;�Y��6��WoJ(�����Zȫ4!��rW�+�d�Y�Q��☬�1���dI���jg��W�����j4�|M�5,>:FW�Soאm �Iikm�4FsWXIgZ~��t�e�@���H���ܷ�}����.���I�:���5�q���׀���5;ȍD1j�R��\X�<���:�����T�����f褻����>�̪����(�2����� �;� 0�5�7p��*mF�u^���Z��ɱ�T�3�Ҹ�ZI}ŎHg�H�~��2�+q%0���@�*�&S:��3����&ȒE�q����Z,j����L�4�dT+ �O�(��]BX����A `O�&����D�A��k�����z�k]�|�s~��ۣ;k ��= �r�7���ƃ���8F��,���ҁ-^2|l�v��L�l��69���%��#n$_W���\W�y��7C�34N��N�L9Xjް��J����k�?�$$7�4�-�}�ao������0��au�]���lI��8䅺-�~�$�9�Ij/�Y#�w�<�s�N��s �^-����,��rd��_)�j�n_6�]+��[��Zotu����aFQ�PK���d��Vé&�W�>�������\lK�X@)#����P�nT��"��sز��66,�A�@mhIz:� ���Vt�}�M��@�M�V�b5=��Y�7���V��p���-�~fMo�N�����~��4�W;ۗ��H]��V��B�X浡�{�T�Wj�ӛ:�-S[�FT��y���q2;#ok�\�a�[�/����]�M�iX�H�.�(D~������[��TQ�Y�1[zf�Gbn�yE�����$,���r��-���� �����’[|�'���Kn�i���ӑ����->�[|:�ܲ~njs['��t$�ŧ]r�O����$���Mn�i��⭃Y{��~�ޒV|�%��t$�ŧ]r�O��o���V�O���v�->InY=� ���fW�Mr�O���v�->In�i����.�ŧ#�->�[|�%��t$�e��5SM����$���Kn�i�������->n�[|<����.���]rK5'ͼ~�%���Kn���pKn�q����.���#�-����Dڊ����->�[|�%�4P'�\7�irKwJ.�D��->�[|�&��x$���]r������2��->�[����Ϯ���w�->�[|<����.�Ň]r�G�[V�i<��]r�j�-���]r�����$���Mn�i���ӑ��v�->�[|:����.�ŧ]r�OG�[|�%���Kn��hr�V��G��<]�c��b��� m�w�Xy ��U X}lk��x�xpc����{���\𧻓�x_ ���f*joSnF����7�< ��+�7�}؛f��vP��������lF㽹�V��X����>���Z�>�w���N���x�ig���3�������;O��xo��5R�����'�w�6�9����e��w.vm���27����f�����Ö5�}��f�7�`��hŒwp���yP��-��e3�i#ig�o�A�}�Z5�W8Y@;�8^�܉��ެ����پ���!(5�W���� ����5އa�!��m��.��|���3��-��}�5އ]������P;�i�[��xo��x/~�(����ű��hl�ኊKZ4e��h�O§��n�I▚$C�ш~!��ǜ� ȁȑ6Uly�#��Ѝy�����"xYU�0��ɸ� ͖G?_J��(��2�7�9�zN���)q�.�h��6l -ݖO�u�O�ܢ� ���0���V�l������m�f�h�|:�2�. A�4/(Z�f�c�V�5sNKø0��-�Ķڱٕ���n�� � �ff��걬��B���Y������͔�Ζ�My�l�S>Y�2P۾h�Ѕnʧ3+�S>ٵU��N1��0�L��n%����a��9���!T0d�x�G��s㚡��n;of�w�,��,���6S>�=A�K^������#�&z�<s�W�ݹ(��_�R�����n�#��穛��ʺq���L����Of�`S;���p7�]�����T�͖O�[�8��QM�.�N��>2<פR��ә�l��-�l�}7�=U��L��M��Ly|˰k�<F�y�֭���DÇ>���+ f<��f u3>�'���?�(�+��y݊OVRĹn��va� V|nGx|�m��5��9�V����`�Y�t�# :�!5�+�C��9,p�̊�M� ����t7+>���:�b� J��e����t.t+>Yy%���S�:�\�V|�$d���++>Z��\C ڻ��5���a��g�c��4�ű�.6–�*�m��n,'6�u�u-2k"��E� -��em'��ZdZ�խk�ٝ�Y�8��4��.�^��5}���6�lbc(G�� +�Dq]�8�R�L������o,GƖ�J�c}c�P]pn�i��+.&���؛ h���Ahi\��a���g.��L� ��ؒ���Yv�͞So�XU��TV�گЭk(�q��e�c��"���.��H�X�I����8T�� ������n��ί� ]�K��p��d`���+w�lT���َ�m��ܺ(Y�%CQ2?�����:�X�,�j��Bb��ԍ���4���6 ����kZ>ӭ˒u%f�����X���"��զt�X��#nS�*�=�+}?L;˒�X�%k��Sˍ@���4�T.�׬��@�_rN)l>wB��B}��3�x�\C�l#�\���\C��ӝ:Q^�f� ��4�.���5\�����J,ͫ#�aX)k�>Rȣ [.�$�8o�qZ�� -XL�-نNE�"�Z� 6�ݳ �a�6\@c�]�lC����Ӿㇵ`�L�I˞m8����Y�\�q=)==��dz�rx�ޜ���ʁ�su3���VZ�����W��*3�dC���=^�-�:Ђ��?�@�n�1�+|�yE�P��b��k� �\��cK��� �ɵ`����Dz+��:�-��:�-���Ί� � -���Lބ�VS�7�1���QCX�M��[� �ԙA)q�i*]y�[�+ gj�`�ȩ�ӫ�<�Lj����Cg���� ��� �VC� ޞ�_�&���a���ü���펦�[)����6ʯ�])��r�V����F�X��ss�����0��Y�#�7�p<���9�O~��r��Ǽ��쇯&��'sm�z�1׹)�eޢ���"|�hg*nh7�IPK��o�Ālo��f.�j����L�W����j�JЀ�����{�F���n���������kX�_kS� -ΐiOPze��p�`�h}Pvy��5����U��ŀbA##�0�|lAos܆F}�5�o�SwpX�+��Gz�*���#'[ ��(r*f�+�ˬߎ^��(��^��5󜬮;��PZk���KbFk|nA�ͯ�/�Z�'�� �CT6;q3BhN��vh�Ǡcu�‚6�c��v�O��Ms7)�b�4X�%8&�s��bۻ���F���ͧ>\�������Z��Ԣ���Y�)˿��̹�&���;z�:�� ti�~ i;������rQ/k7�I{q+��瞾i�5p@X�ڂ�j͚���v�٧2+�������@fK�T�u���_�m@��z���z� 6�p֟��0��� k��Ԝ ��`D��N�#��-����m��I�7�´,�B�����@M�'a5`;JI�/�RHI��h�]���'��\�3��5&�:h\~.�&J6�n�:�)*�"<o`�v���j�L3���a6���N��-%I����`Wж@뢽���8#��r]�;�uU�VK�ɵ��sp�w�~��dXA#R;PS��k������iﰓ���ˎïl;���6�h�����BK�ߵT��lC ׎� \є��"*����@��/�� P]m(Z;����T�x>nL2� ۧ�+� -�2�0.(� o/�aPok���jij�B�N��0Z�Y��ҙ�(��V�%E�e�m�ּ1h!��_Na.���8�H��naژ���;�huVy�� �a��X�]���*�9d~ƍ� -��.���E`� ����>� � �~]�&��x,g�틚݀b�Kg!�ib'���MS��%r]�v�"��\F��%�I�!��N;�� -ۨ礱���aK�Z�*sl�J�ON ��xw���.�\��㠌oW���5��SLk� -�t�o��Zӱ���?<���N�Uo������|�@�z����_���ǥ��[��ª;��5�à�1�!W#�܎�n7Zk��t(r�"'����d�~Zy�9�)�����-��G�O�{�����8M��?���0����a7�<~M���e�z8�m�~Ѽ�e�t暴��"-���M�+�Z�<B������?/����C��\ƫ��a7���9��V�˾?Ws��FP_V��I�F'�6���L�ȟ���վ�Oք����֔�&�Nxl$�5= ����5�����:ea�yY�@c+P���� T���5�t��q#׻<���2�d���<�ɯ��>7��9!�g����0>u��y��E^-��{��/�O���QR ��6�'HAyx>4�Z��4�~�����1��K�՚\]~�,�+x�F]H�'�/��LYQļ��<̻�F��ѿ��F�LFGz���a5BF�X��o�5f����vT�|u�_1���t�=Vv[��z��h .�v��H�{Z�P����"4��� -�T���=��N�j�M������P���7]QȞ�64�����6Gj��=�l�kO+�\��ykd/����o����w;Dlwhal;��͓��k���śo޽s��������koܽ{����_q�͛�y�����^^<|�G��w�֗�\�ޭ�\����?���ᵯ�yȇÛ�>����߿����������ޥ>�梮Tdn���9��7.�������o��<����֭��o]\�u������_mC�a��i��o������v�_��{w�?\�����|x��÷�ۓ$N�|�� ].��!k�c�W����㿾z�d���?���������We/_���Ó�O,T����>�G��#?�����w���N�x�'�r$يY��i�6A`��ܑ@��� ��е�: WW���������n�k'�x -g��2�¯�Կ:�.������N�}��� �~���������7�ܹ~�������߸y)��^%��'d:L��o|�~��q�^&����A,1aNA�T'y*�Lߺ=���oӓ_�����ëH�*�?�o�O���)~�;a�����"�>�<��|���):�LbmH�y㍗T��T� �v�i����^��ɨ[�P����W_R��Sa�3�x�8�_����5�H��".M�t��l�a����ζ��6�����I��[s�Q��q��c�J4T��&�\���i;��nF%���_�� %{<Հ+���Q��<�݀ ���O9�Ϊ: y���g%#�I��L��I�ga�e���U��=�t�֍��Q�b�e��q���Nƛ}�_\�5�>��b;���9��wm���H!$�YO���g�>�.>����:�6.�=��A��bD���ۑn����o�78��E��8|�d9*Կ��n�dS���W����=C_�o���������Y^>_��s����w� '��G�gn���a����GC���~����G�le�0?Y�����?�����q4~� h=����q�I���)Y9��n�v���[��kp�� L�����j -�@�޵؎vM�G� ���=���=��<��F������4�E� �C���X�)�3�r�Qa�ǧ<���3��ʼz��po5���k5���(�����zw];AK�`<a�"�,�W&��1�� ��w���/�T� ) �3�i��Ψ�g@�^ʸ����E萾�\��Q��P���KeVw�O���f2Ok>���{Ĥ��Y�E�j���L�M|ʪ�Rؗ�ZMAϬW� Q��� �! ����Ҭ�82{��8����Z�h;��"k�V�$m����V��&|K/P8�*)8��<��i�J��HZ3�'���u���� ��=\��nS�R��=�=�(e[�V��)�e�l�)��#.#���f>����̡�2[�r���0B;[J�*Ӆ�^�l#"ha���-]�½'{�m�e��dJ��ܱ��,hZW����0g��v���z� �A�^��P���,V��P��k'���B��,����-�t e�ɚ �m�O�.��ފ���B����h��TgF�1��GcnQ#S=�1�으�����q�S�p� [.���gԨx�� ��5��`.��$˨T��W�� j�^A T_��ixv_â���%^B9�Eqf��2d�����N-�W&0m٫d��pcTqI�#_��p�P�(zC$!�Q�+��D ��V�O)#+�y�|Gob&hg_ռk��F�En���^��e����#�A�q\����ls�<���w�lY �dW���*�9�KA #�� WSK+b���4�w�r��)|Io�e�\��rjFf�����d����ޛ�B��+AI*l3Y��� -ZD�ac���2F�}�z�xtP�G�D槐������|fK���ʊr>{��O��,J���B{�Sa�ZF��к�� p�Ȯ��n � �����ly��:�2��J�/�� - US٢��݄�+��SbT���u`� � �l0���¡�W�+��B�@Jew�I)x����rl�L&tq�X���c��bKJv��� 9���\�T���^��E�\���#) 0�Q"���ʬ�"��`L - �1����l�cx.H�����q(Y�t��^����*ڻ��/U�ʼne��J�dc�BFA'����ႎ���VM�����{�T�����^BxG��0a,^��´p�ɂ��!��4�+�20 (�Ep|t(�6`�-(@�7�K���B�Jyt"�[0$o�]X �!9D���o��P;��Q%I!i˚���<�E}4���L����;(j%x���RU>�2ϯp��>\Xo]��h��yC -ā�p��҂oD #Ŭ=��y5�q���@3%Ɔq@�Pg JH��>����P�zc�Y� QD3�^�%�w�aO� �GެM��~�Dm�����ț���{۝���9�P���� �0Y�5�(,�)�7�F-&3_�ZYYG�T�zU�LK#?4t�oF��BTe)�����r�jYm�dOC�4��<�0t5E#�d8�Y;i㉒��F�V�@���r�йq�2Q0Vr@�+GvS4ʼnZ� }!+�TX-f5�������F�I�FD���J��#���ɣ���+��գ��X/کiY���fm?êP�v�Y�:� *�f�f���@ԍ3Fo2�P&��&�:O5�xk�IT��Yk&�I+��U�Qh�0�(�[^��+���۳�#�ں7� -��T�s(1U��^�B j��+(W85᳕�օ'�r<o������S�����$���̠�S���V�L��Fw������#�~ �0iI��a>������P�f����o�3׊.(0SX����VM�Da�zU�*���uo�e���+�~َ�q߇6�UA�`p��S�~"�[/m�b�����Wb^4P��+�RU���rB��z0x��$�P:N� -��I��4�.�™b���\�� -)��K�)�e�QM���l>�lz�'�x[I"�aOm���+ˠ��I�-�x�Z�v��! G��[����.�K���S�-�wV$��� ȭdgѤ�0�R+S���,��P[a�v��جfõ�q�O��V�S�����!םh����E�-����*=�p*3��yr�:M��ٚ��Y��@�7jq�'Q�I�0����Z����m5��7�fZ=�{]���T��2o�ކ -�MEG�����P(�*cT% �=XD+™T�]!� �g�>(h��Fd-��J;��&�5]��NB�뢓�?�#Asu�V��h��N�- ) ��z����e9uR�*^���<�k��71�P���5u�0�t8V�T}��0�*E$K!T����/��u�ga+9�A<}(;K?`��� 54�fk�����:�����Z��64�[=c���Tl�p�막�-�*g�Ŝ��LQ�Y�r� h���������G�k��L{�t��2U]Nj�h�=O�Q; V�re8�ڂ#��0%����O|���?Wٕ�#]�N"��YE�l� ����U+���SW�dc��� ��?j[)�ݚԦ��N�(��HT��­�. �.-U\�T -9� �Z�xL -���r8��x-#&J:Z -���Y�����MQ��1�W���u#� -�jJ��~�&-x�ʥ��R�fQ� ;�0��oJКR����k����&rV��JZ�Q��ތq����q���?�f�LR1�W[��|] ҈-6k/6�%'V衫 -�"�p�q8�j�Ot��}�t6OO�ּ- G��n�yh�,����E�,��p)�Sɩ'Ժ)�(���i������p6ނ�����N 2��^m��6�P;q#N�*cٕ�A���]�A�J��&�h�p����Έ�G23�Z��tDF V� �G�ސ9�� z�����,��'KkB���7[�����sU���YA!P��^�yN֍=�8����3�xu�i�e�����͸I��>բq��Oռ�`T0��֩��ΐ'H}�3ot��O���Z�N��̞�_���G��M�v���4�G�D0[-]-v�L��쨲�V�Ki 4V��)�y�}��-hP��A�x�(|Z���(���[����d�.�#�k�D�n6�DT�ܜ ux�����\7����1�ͭp}�;�c��B��p�����\T��0�C� C��}��`��'�)�:�8�=s9� ܁m�؍�������t��Z�z����s�p�Z�j�a��-(������VK�V��7KMٔ -V��UW������F�f�����K�_�3[5�'�O��E�@��L���!CGwڼ��Ϸ���Ӏ���j��Y�i��k�*��V�D5�r��Ȍ��}reQw0#l�*r�ZRq�z~��C/sa��V��ʉ�a˜+�˃k)~�^@U��� )x� ^� -���|�sڌMϩ�7jV��j׋��A�)�.�Vp%'S$�� h �bp� ��:��:�ϊ�YC� �%�J�vT��W�p�ۀ��&�R+�F[(�D��I�ˉ�g�g����JCёZ���(C�<�mr�'|�V�wFeU��-Y-��Qϸ TQ^n)ge�.gD�D�'�F�Z�B@+��'S�A)�!��?{�eS���¿2��Cǀ8�v!,H�"��Z��  -*0� q�Ƶ��eҼ�v�PK���~�E�T����g�¸g�n� �D�b�T[���?D�C��~�a��5�� �h�����L�s�aL]�b=� -(�NT�(���e��*�̷T�����gR�Bj�S�C�j�̬�΂�(OKg�Y8�۱$�0@V)/r����+��� �,���z�Ȫ��#K�Ճ%��S�Q�H6+@�4&Ĕ�;�����^�f��y��S��z�6�a�<z�ag�P�/t+���) ��pzgl3��h��J� �.���UIj����>�*f� �G�Wv~�P�����t���{'ˆ�� �E"�*,ID�����v�VfN ��~P�G�CM ����‡�y���)����&!k�([)��GW�s���HNuЙd8�eoBR!�#�����P�D��h�@E���`M$�58���.�bbĚy,!�;۫����PX\Z2iؕ(oD��G�8���SႰ������?'���|���D;�H�Ծ�p+E���TЙp�(Lڪ^����"_�A:��b�t��Q�'MH,��Sů�`F���a���:7a"��!b�BNP�qH٪;�G�)�Y�.Xɢ�@ A�wt�q̤�uhֵzd�T�|.�+���=-�; �`��A����'����BtÁ�c���w���h,��R��^�d��58E:WM�z��[{����"���'{�8��"j��K�>x��+aZ�^� Tm��21�1.����lBC��V�ԓ��߆��Az�4F�vx��=�U��z�nX�z�_>G/�/l��$=?��XJIpKd�z0M!�\RF/v�%���(�^�Yy�c������-6ټ�p�R e͖�4<[2�#��X��� ��-5�Q/��Pg=�d&jd3-�,Tf��a�7f�y2��vP�,h �'�V�케����/@a�a+5d� ~Q��������J65���` j��c�_g��'�yOu��QMW5�h奩�GM=H�j[�,�u��%�%V��@����K-�ȴz�����Q��o�<d���@�3[s�G �\U�`D�4�hn�U�i^1�X���g�dD��F�t[&����ɻ�=�9�g��� �\c��E��Щ:S�}7������a�˒�1k���i -�㮁�"�T��g��g�j-�v�n�xK`H��U�H'�������4�2���N"�g��c�'�C`�o�4^Mdmf ���|��t��I�M,� �_�3�d -�)�}F3\�T6v��']��Q\U^i0 8r����}f��5��p�%uO#r)���1�mh���v�k���aY�-z:\ܽ}���wn�w������cJ� �(��͜'5�Y��ݷ�Dd�.S��\���������]����|�߯�-�k�Cz�ޭ�%6�S��i��/�K{FZmb���D��i��{YU� �O���>T�̘������nt������9: �1KX�^{�W%300�I˩�ɜ)ZÔq�B<Q�P�M�� ���Le��t8V*t(�`��ʉ��ƾf%\R�a�Ԫg*O�2ٙ�XӒ��3�P \9H ���yH�@��5��LBz&�y�$��ȓjE�=&(��HV(/��n���[, �Y�:j����4�X�����S�'� E<[[=9�j���62AL�u2k $��L�9��Gs�g�������)���F6 ��[D�Yt;�8yp���k����[r��|���o�~q���o�}H����O��ƭ�;7�쾷�W^???��0���~����޽ߞ}�C?��/�A}�4��� �y!���-懌��"��AAU�3�� -G/���$1��@1# ��iVT�2� ��1�E��F�yЁ"C�C>8�h����#�W��Z�bb�V�ʌ�\���y L ��'<�Y�#h����'�8�[�.��mi������؝�c��S.��r�k�4��V����<�k���IRF�� �k�����uU<��a�H�C���S��2�}! 3Y��z�>�) -<!Pd��r�����M3�QY�h/�6���� ��kz-]$��V��ST��v��� h4�y�Y�,X��[��!� �Ăѐۢ�E���4xf��pL��[,�4{�Qμu�`�+�#*0��Q�Ȝ]C$1΁Q?an���,�������]��D�dAJ31I�`�Q�����T�1������5���?| u������7RK&�(�2Br�T 4z�;nB ���M<���a,�6���,g�n� z�2ha�|�̈b�$U����vF�R� �� -�5y����pu��X�����V0 -8%�o4/D!���u�f���'2;Cjшʨ��H=��HQ�1�Yt�D�,��������)A; -vdZ�g�* |-�2!�7���~��S҇' ��stpeY�ص*~���#�;j"�`�$N)/�ZthMG��H��6�Hz�'�\ጟ���(�bĬAK�i������eĈ#���R�ç���K�;���KR��+�G@^0�GLfm�E������>���u'�`�X&�Z�P�|0�2�8#�_�t+ש�^�,�h�:g5��'����H����̰�ē�R���8D[�b�A�Y#n^�v�2qJ�˘��b��ڭ�6�D���%Ǿ_���F�ފ㣁��ݪ[�����)"8wtbD��B\���F^�Aα�.�%uV8o�`�I�{g�5)�i�x&D;z�a�ō��Ȝ�J��:q`oa��"X��'zVr�dLqekG"�I+�7�$dO -��?�� ��W�pD�'�+I�>� #3� ��H�/�Z2����%2� .���IS!T�2�Ӿ @&|g���`�n ���mQ3y�l�~P�;��'�� r���PZd� ��(r�)�ZX�ۛ`Op�+)�Iͩ��iM��֕(�{�k�A�C��b�)�-0��_��Ɋ -E-mа��N0D ���i��Ձ!稙B !i��c=h6̈́��FUgR8���^�m_b��C�����=�0��<E?N�������yHr�����gp� -��W�QUr��O����&�'<�.�%)� a^� oЌ�9g�>�� �d���Dn����m����2��*F gm ��HAv�6��Aîh��e����xѩ�����DQ�#e����?���ř�-�*$�:s�ҽ�'�Y�Bxm�� l���1`�F�R��x.��J -g�*���XK� �d!���!�_�(ZZN$�N�� �� ��C��}�D({��6� 4�Z�j-��y�ʾv�rFT�i--����oH� -٢́2J/ch;t�y=?T -I�p�ҙ��6K��2�;p�.��4ޙ)����Y�+EL��${��Z!� L V�S�SBF�����T�c��i -�)&�㞨j�cޠH�N�2E�0�`�}����̱� �g��L�o����g���(��&��J�I 'xs����YBq>E��l Qh�SjN��$�E�Y۝h��<i=�V�X�tҼ���nF`N��M���ˀ/�|��B�fPT4"G@��trFvdGZD�������*�JhQE�lk�dy9�B������`�R{� �� X��01��ڲWR��!`d�@��[�lF+�j -�2N �y�� �M��������WO(��i�2�w?@��YE>eL����Yۧ�R8���;���+*K�d��L�T��8 <��/��z�"E ���ژN��*3���/�"��)A4� N�׊Ѣ���~�n���~� -�����5�vR���3���k�Xu������3���&b -);�%m��Q��_'�k�g_J� �ѧl�;�tĩZ*��ak�#1��$5���6.MP����s���~�b��+���lN �g0�;k�&[�� �%�D85͓ǜi�'�Ÿ��� -Lh�����9ZЪRb��z�x�l�Y��L��vγ*�p�4a�Z�X�42����~��I�B^���F2�`m5��{�8եD��>���f��Z{���b›�,tnh�]0d ���׃I���4�&���z� ��~ -l+�A� -)t -oj,M`�%Ն̍�ݯY�Ggv���z�C�� xv?����a1�����|�:U#b3��%=kb���X������*�&z�D��TPK��X|�ڥ��y�2"�+vS��pj��Y��nj���ҟ�/fw��L��1� j��̀��u�*�يP(��0 ��|z�u��k��>����iHM�d�]�M�E2$}���Ȏ�Zi��̣������6YP[�ƈ:�!Z�])H>�MA����A���p�kj�����>0�A������$0��5�Y/uc�[��9�t�殧U��8����k>P��=��q��,�$�8�����r6�0y֒)p�c�x���^�0�擇ٟT��(�Ý���������>������O�o�����P(yW����>*����;�}�Λ2��2��S3�7�����/U������_���]^<<y��w�wyx����;|����߿������'����v�֭�߿��{7/��߹{��k�t���������e�?��G��w��_۽������7���������o���(��$?����Fz��9��|C�+�;b[�P���|�]��~@���d�<_�����ǂ�IF(q�م�g_>d�e ����>����&�۫7��{A��~�y -������s�ݧ0�p�gY�� ��ù�WgJ�rLV4�)��:^E��Ϯ?�z�'��t�,ԉ�$�- �T�|x�+�q�惇�.���������[�dz�w߿C��x���H�|�J�<�������;N(E�i�/�'M��8�/��?���Т��by��N�2>��wk1�Z���9 ����q`+K<?�aD�z1�iF�h�B������������?��x��ʲ�����vh�ũ��v��1�!�wa���l�+jRz��� /����X�����O����?���Ax��O���'���'�YI^�y��aS��_�fl����~�?�~����~jK�����q��s��u����yҺ?]"��/�ko=�ѭ�'�}�����/����(}�-$��k�����e��k�,w��7o�Z�����߼s����_�G��h���}�������_x����|�/�q��͋aw��x��çy�7N��y���#_%��.�~�������|qTm�w~���h�7�G}��x�44�;���:_Z�:�+k���Û����ۉ��$�����a�}�T틗�~�prxe����8p҇/Ͼ���24}��w\>|�����m������������K�K�׼h��BC -���=Ŀ� ��=�����O��-�^p�s���?�^��;n"g�[F_���ޭ�?�__���N���M���ocoE2b�M��.o��V����'�:?�,](�x%�m�e}�>d�ϕ`A �.z�7\~��;_�q��! }�^-�Dtu���:���e�Y}|Ar��gN#�j�ρF~ev�MO���;��EK��"Z>#>����X'��/��������w�i|Z��W_�{��|�v���~��6�8���6E�x���K���A�T����|r��_c=�הH��SG��ɝ�~��%=��WPC|r��_[����ʯ����W�����t��/�����~wP�ߺy�ޭ�@놭�?ן�U�c�wJ�ěw~����!��2��޿�; ���ϕm�}�O}?�7����_8���z��v��߽wx��7����V��`�M�= ��n�}���c��/ ���r�������9sy!�{������3w�]��,M r����\���߼\`<����%β�.n��v��>�����������ޭ�ﯖ����7�:��s��]�һ(�p���߻.RF�޾����>s��3Ph�����գ�A���/��獍?q /$~��Un�[�j@�ʱr� �c��m�eE_~��?���k������)�z���� �[�����iE��R����|�Ŋ:���ޓѢ�'��{�׷>�9���� O�oݼ ,�.p�}��$����yx�W�&L��g�'���ᯟ�_�����A���E��o��ß79�y��)y��|��'����N�w�����q���� ^� x�ͅA�KԤ16:A��� K�WT˜P��c�#+󙌼���-��˫G���������?�w���[/y������g�B�����<x����O���cO�iH���*�wO��w�<l߷,��R=����[�o�����G�/߽%Fַ��� o^޿��r�O�q���/^~���V� ��߻y�ͻ7����~k�����O�����/ݾ�&���� ���~������ܸ{��/w����3�,�=�y粡�k����kw�ݼ�0��ׂW�����/����z��^���3��e��?��H'.�OZ�n� �C�� ��)0�,��F��'/��%Q|�����/��L���Q�R^���U���D�2ԩ�f���K���9���/���\�w~Ifx�n�_ci�J՞q�ÄfR��J�(mX���s}^�/��K���…�F�����k9��RTw������%Sy�T>�L��]�π�ĕ��7 L%����T��w(��J?� �?ZJ�{���iF<�q���_���LF��=?�c��� B:��k!�Nш�m�.Dt�ͱ����ς��M����Մ��h��t��������}�L�����z�/���~v��~��u���������Z�`��kw�߹���ɖ}�U��=��e�z����N�Ӻ�w_>����x�{N�bo[�����Zۧ��X��Kwn,�Z?���b�>|x�mxS̡�ٳ�=$Ό���<9��+3���jP����z���Gw������߳��_=����u��'��ɛ{ -x����r��o��S}�Yo#�'�)֏_=����R ����y�=�b�ǩL�Շׯ}��_=p�����}`*ͪ�l#��r��-E���X_yx_��/X0���uJ�\�?��D�3:a%g�,���?~�߱e�߳e�"'M�5�@�����-c&n�o���G�>�'�s(>�fހ��~��4��)�M�F��1kY��8_&�9 sf+�̎��Hw� �Q0|��z��\=�O����PA����C�� 1�2�ä���������k_���_���W�Ƕ_sș3"��*���[�1/�?�)�l����U|��_����k��6!G�XQ�׹b��0MV�'�@/�d7|�r��/f,���D��!F+��k�&��=|*�SX���� ��"���T��R��m�ӂ��;�N^ٮw.�����j��=]"� �S��z�S؍��K>����E�9)�z�e\�=�a�K~�O�י�4�9�$FF%S��\d�u4�hM��&w����ӈ�<a�`}E���~��0F2�Œ�~Q��s�㌮3vD��\G�<~M?R���W: ��n>��&/0X& �hZʃ%ԗy��޾6s7;��a�e��{5;")���K��{�4|�����QJ�d��?w���β�� �;�E�X�s:���� ăp߽��.�-����HS�ˌ"]�]%J��s���gfw����b�ߣo��8;�3������=mv�]����a5�,�0�B�_�\85S��<�ZXp]~��j����"rl $]�v;�7���"�:qX�M�š��;�I�����I^�[�A����W�)r��L��y� --�� ��E�‚세;�:]�HL���s�b?핰FA.��XQ+��,��eG���,kٝ��"ʉ; 9d�dN�/vB��x�� ���B��y��̑`%�z$�/V�H�yxV;��n���B[���%��"AA`�,�wf�-E4���W���)C-�U-h�$�w���W��r��v��� w�"U�ǁ�x��R[����A�H���< ���6Po�K|B��T=`Ѭ��!��Ӧ�H:;ڴ�6D=@<��N+)mHA �9P�K+}ǵ�v N'D� ՆR'��iu�R���,OY�8�|�hp �p�m'Ԃ!"�e3�hK��js���=�?V�/4��N0)���lf;��.Q��i!�;����;N�s���zB��A�6�Ӎ��������m'�݊P��8�%��',���հ�@Ͱp��@�Cc�Qc=]� -k��-tbpة}�z 6'$��1� � -�����{��BH���y޵���X\f� ��Z\Hc�C -%x�R�(m �V�Fa��d�F����o|ch�4ӂ�F�]Z?����_А��z���=��w���������o~�������*Tv{�4 �\�r���t�}�?��?��7�,Lr}"�@����e��Z����8�z��d��p�h��/���JB�S ��b�嬡��X��U�W�H6Y(am�����Kt��V�[\��Lh��a�a}u'�A��RdE����%X׉=�V7�����h?���~�T#���6B*�/��/�p�'��lhp6�!�4W��Z�b�_.:λ�ÌTH�-��!b���ͤ�Kʤ��w�Uj:��`�:`�v��Uq8��.B�����C�wޖ`�jB& -(�v"���S�Z�_.�4t3�.�X7;-���$��B�C_���y -�,'�I�<���r�Jdj�_��g%�|�bÝ�B��_ʰ9Y����8�����~���'���A�?ku,3�Æ��0n'tE7e���y�s�/a+�p���� Pp��!�E��a���?�p9Hϋ��I��$��A� ���f��Aj�' �L�i3L�v����7��民���� %�� ���b��{�\��ԙ����+S��?��]��;zj/�Л�f� �+�=���8�f -��w��g�����/����/����ߓ��;.؀��o���FSx�}� �ݬt��[h"���V�_ж������֠Ǡ��"� ����M�a\%��?UrIc��q5^b�CVu�~��� G:�M�^Ew�mx7�'n� �����?p�v��O��: 6��(6���< #^w{��k�����_���r�+��`�DKjd!�<yi���FNӿD�]���+�M��|����>Oqm�p��� �+�>�Q/��21�4��f?��CO-ԘĿb&^�j -%$.Y�:��n��A B��J ����n�V��|Ob���l���iSwyn�;�i\���y)����ԣA�f~Q�Xo�����2�m�[����f�?�_� �,B�h�~������~�:.i��k`�>��0� 9h �9����w���0��@��`��,.^X@* �G�Ma��Zd�ݘ\;��t ޖf���6� �j����B���ZR<�����+'<��W܍���w�����K|4?����@Ҭ����������_��?�����%�! '�R�ۗ��Į�Z#臗3sZ�a�p.��~v"ED/�1 ��<l�7 -��У�;� ������c:~)n�I����+���L��j�� `Z���x�/��/���Z g��hGQ�a�S�q8W��������Vo����������<��'* G�g������;���$$��:�譟D���q�Y� �>�%�,�,�>7�哖��ٛg/j]�}��!��+���=߉fu��WL�pz����Y�j%�/�=�>�i�~ :Ē�/�/*��گ�P�������~�w�_1���?tY MVR�����#xW���%�j����6���Y����L��8���� %*Y�צ��(.��O�X%���� f:?���s�t��1��6�O�+���.��5���ȫl���8#��"��a�e�פŖ��V}>iBG�d� 6f�������q���y�������"ާcbfw��?x+��$�;E���Wl���?d����(�[�>Iz�_9� ��z��ij���擛��ݲ?�[���5��%z��ֹ���~{}s��̲eJ�_�h6��|E��]���_�V�C�?����qȨ�:1Gk ��2�ap#iD���j��3x�eh� 7�n���B���f�_����r:ر����x�ߎ�Iur7����B?��n�Xn6;��KF�s�����js<,����a�=�Rm���G��"�N�Kꀉ,g�����;��f7�q�N�LX��Qz�� ��߁U�q�?w��]�͊�l x�~�G�8�i|5��� Tx���B�Ѳ1�g|-�ӯ�H�BEd��x���~s�a �B���t�i���c����U����dYx4��'�<3�P��9����"_DB�W�8�%a�U��RW�O/i�A#���0�/���y�v��!=��jqB ���\�f�n�24��zJͅ��b7���?�����p| :D9 8?�������� �����m~q�l����?����*�$��a,�-�'����r�x��mm���=O�w�����Ⱈ����{�N4gw!�/��Pͼ4�ts<aU��)�N<���l/�P4���ߍ�„A����*#� -ib,��k;�_����|7F����|?���� �����+\V����Np� -ЩU4��Ar�6z��P&��N0E �.l"0q�6"x���^���'����>uʜ��.+��f=�q�N}^,��i�mBm�D6� -��b�6ߍw[��V�X/ ����p�B�ٍ�@>So����K�8�*ab@��<?�0�s��� -@2|7����M��u]�4��瀶J���s/����^���| �x&�7�tgo�j�O�芧� -�H �~����P<.�Inr`�) ����^��|��{�B7-�]��� ��C)����C��X��q�m�2�1�y{��g���'��#�@'>�et��F���}i㸝܆o}�v�{V�=׍��f��V��k��+���'�{�5ϲ1�Vh �tq#��[λ�r�����W^�q��(���%��,�Mo���ᵗp����K���ߜS��cB���]h�Y��;�� �J��/���k9B��=�F�?���CNaNoӘ�G��q����߳�@{�p3�z#%�K3_��%�����0�}=bu�PL���m��C�G+,Fnl���r�.D u�����/LS�b�g��/�`v8��ք��p͕ֆ9�S3z�4�9{���UݼP������� �&�N,l��w���m�VBp�-f3q���ܶXm�_����-/�P:�u�"��$ }&���v�࡙FI���P+�M �׮B���|��''#]�DM�@wS��3#t=��jZ`iǷa��/Vģ 6��3�8�m�b�ٌmDqx#�����lv���Ȭ��?\��j�(6�ϩL���q �z�_OY��h��/�­���v���`*P�f�1��~ ��n9�,�'���L�`���Rn�� -]ꠄ���f�^O6/gG�U�p��(8h8�1������4���64���, �F�?���yg;Z��˵�AmG���ϧ7��~�ݑ��{�m��Iw���c�����=xZ�C��.�VH2.��-2��f$�rw�f� �%�H��T�?!.Q#r��� -~��_�����_����@�k����~��%�Ӳ��a��c5� � -�����x?��i ��p�!lBQCt�$�]?�V��hq�X��Y/w�����p�����6�[�� ‡�wZ8[�F��ޒ��b7���w���H2O�-��*D �שQ���6�]��حP� -��v� �q?�.�?��*��p�"b���LZ�*�����5��x � �};]-��5<����S��^�\Ԝ��g�� �������-�aS ���ŔE����+m����J�(́.p�t��(� �Sh �;�-���w�h@�6�/����wW$7j���{�pD4>а|���p����`-���f��l.���f���M+�z��DOGp�<�7�P+X��q=��Ϸ�4��'xہ�g- ki"�95n1��g}�������a �vB'4f+'���~kd�V��j�V�+����r�n�ӎ��!5\�ynGD��\��h�C!� ���f;�0��^`�Q�ё2��$ͳ��6�Q�gn��&��P�@�6��Oɕ���_���'� Z���0\Ѵ&u����I'�L|��ն -M��R#Ahw�O��P����V3���0�f5Z&�D��a!BLӛ��'���8���&N{;L�H�����X�?^�;X��&�+_T�*��_��[��u ^�������`�����������n�D�j���]���#(��qj����۔ʳ0E攏#\���.{l �>�0,~t3�� -�1S!��&���?R��e9���v S�R吧:��|�GW�u�%������0�G ô*)��3R��e�� ?���`�Ю�6�/��Y ;;�%��(��+ ��h<�|n�;_�E�B?��t�������? D�����ϰ�d݂/j)�� ����M�?�ERe ��w-l$-'�W+���oǣ�}����cƲa���i":�}��5���|��>�p�#��`�~��������y":��t�9�����K��1l��Zk�d(��_{E"�Z��՝�@�y�MT)E,{�v�2�B�.,�f�Xښ������n.���r+߅��|�Zo�8f��f���Z�~�%��W����]��=���jdR�g]�� ���Te��ϋ9�VꁫS�'��y�ND-�R%貶_��d��V�GAe$n���x���WW ,�q妩MFڎ���3҇�Z����P �� \��G��Wx���D��pd���ܟ�����9�:u�\��a��?�hZd��.p�9I �3�pEZG���A�p��cl�:�o�D$�y�\���͹z7�X��{��T!>���p�%�����E ��{,=J�$��2��F�v���4�'��n�6��di)z�m•#6�E�I2l�t��jv����ж�"�|����Z��h�GL�10�d0�(��a�� ��.�a���SJ��Fۑb���������Ѻ�$Ǫ;�,�޸� �R�k�.���iSbReǃ���WLn� 0����_��Wy�$�.�1M����Y�ӕ�L_��1C;�� f����*�0��9Ƭ���k̮�e0�^�Ŝ��s��V̝��0O �b����W6�X �)`�����f�hcX�]���ʝK�BXJ�mc��V�e �0��+z�kP���JG+ �s���۰ެa��kn�q�矁^�͚떖m�j�c�z����[96r� h�B�������m -�$�5l|a�%%����T���ʈL)UϚ5�.ĥ���C���^�՜_IR��'#u���R�gݖT}�4�k}I��rE��fm�t'���ک��0�ۤ�ei-��Ui p��Tګ`=�`z�x����dێt[t�A/U�!�Vvr����4�ACf�8R2���ٕV�̵��e��D*��b���,U��\c��%����7�Z2�J�qo��~��������Ӓ��(d�rt&�+�S����U��T��&grܛ��۱�J�n�����Gcf�<e �y]�./��~y��I�ۦzQ�����|v&_|���!iT`ޣ_�P(��9��j+̯���q��We@�'ErV�)�Y�FQqC����Tt��/��s�P|�>���d�Rb��M�Z�JJ�r�UڜR��S4�+C�Z�P&��2�\��U�ޯ|+%�>>�)�c��rk�G���R��alj�l��Q�-y۪HvcS� ����U��z��gy���ҩV�tOuX��@��~Lm���j���Q�?]u<�m��@*���R�n���Qf�S/#�C}�d�Ud<Ԙ���ƙ�4��ިI~����q1�43ц�c�e5�@���Z��ZE�K�5*�eZG'�� �l m�*kK�M_�ڌ������.�w�a�{�i4ӎ����tޔt��}�ݫ>��5�͝�/�+t�y�Qw����^ݓE��D�U�3l���}b�/ �2}�S��ָ~5X4 �uua0(:��c¯_ Cv9�������n� cyf8N�p�.�7:���14ۂ^�ٺ�a��|rc?[K����$�X}&C�<0�F2�)zLuM��jz�e�&@�v�W�;�����d <h�'�̡(���X��v| �5+��Da6�jLfE33��x�\�8-�9�1�SźE�5[,~���ė�l�۲4�ƤN�WN��jb���a�|X������d��<d��M]6i��K6�!���}N�-��ImM��`��{��*��u ���n8��d4���L�}h���/����j#A����r$"���Z����z��r��Nm��p�5��ϒ�l�YX��n�u�Gpo�._*�ue���-�}uͳ�O����-�l�Qַ�R|�s���]>�G;o�<��2+���Ƴ�g^��$ -�<��xm�d�����j�������>\-��B�Ϲ�8�}}W[����}� �V�Ў4���l����Y�6c����.�� :�׬6������2h0D���,ls�`?��w۾;d*$M��Ӫ -U� -,4Z-�a��Y����y8>jMÍic�T�g�o�q���Hv��"�HR��:�"j|�Z�aK.���d������(�,��c����4f���#_����y<��j�6�ϵ�VB���'���;�:^���a��<�npu�i�+�%�Q ��/�f����h*V�-R�Y<�Zi�Ӵ�� ���g��>��?��]Fs��fc�.S��:�Y}Ȫ �����[��� ����S�v���g�H��*�����y����H4_��-�ψ{�9��װ#��ڰ�^_W�v�`�'��X�ޥG}�+�P-�������ޡ{(a�ɱ�Jl���[��(J�CSV��x9h�t��.S��z�e*���VI�ʃJ���V1i[WuU��jѣ.T��ɠ��e��{�S{��J�]ջ�ۻ~s=? ��e����TlE#<��o.�����MG���,����t��trg+֩ Z�w�� ��'o�Y.�V�{6o��&�n���Y��>�m������[�=�:XǨ�(:�WϠS+Ur�Mu����Y���M�s���3�j�^Zmv��͙�CcK?�k���~���A� ���P��?�����\,�zq���C��.Q +{��p�M�G��sT�Ѫ���2�}\��E�˨�<�����B�y�,&!��j������7�;6����YѴ�ϖ��nnkk��R��>_�����(ӟ��n����� �r9Z�ca�b���/}�k�:��+isX�|�ժkId�*�[������Є�7z��ɤ���l�m-xA�-Vzۍ�H_�������Kw��8ޅ�����u&�����NN[6���f2;ț�EE��� 4���R��Et��muo,�L�m,�/m n�~�j���7�1�Sx�SR7�=;>(���G�A.��w��qy�o��03VA�F� �w���Wy�M}ƪ,"�]r5�L�X&��ժ�o���T�!�j�@���ڪ|hw:qKޥ0�l2��>cS=.y�Fmȧ��C���$Q��9lG5�"�T)���`A�1�Q5��*7j�������|Kb����͠&Xn�{���1���ϥ�!Q�&xf� L�tO���{;\������y:!�"� y�ƕ.�W��h"Q d%>z�cl�i8����L"�Ct�|33�� ͹��hg0�}�;�n�7��ް���)W �51�ft�(ܟj�0>���љ����V�.���f[-��zF6�J��u�InF�l�M}�n.��̻�Qd�� ;]��U�_p���73v��[���j���&`��� �c>A�2�:@�S5v6���3���`}�y�ڠG��⊘A+�E�>Y#�wہ�K�;dgt����w�e � ���L(������;���)Yh�4�n���1SߧL`����t�D��Ҵ }�>��ͣ���Ҳ��6q] �[b�����������.Z�Ӏ�B�N�E2�t�0��e�hlC�c�X��6Ǜ�s��>u��)���U�cP+�R�^ \� �|�W-V����o��;��x�#x<���Z�vg`��q�����M*��'����2o�X!Y���̺z���$B�ݬf��A�B.�|������"w��J���x��D,,t6���NĖ���{�G�p��&���j�p�D%k%ix�����ߪ@�}�a6��e�8�Vn5љ���>ml���q��yO!�qBF.�ë�|���Ԭ1��t� �'�U�ZeÅn$��N2.ܜ��Ѫ��'�$#K��q��8�����1H`�B,�P�AW%r��Ocs9Zv�!��?$�ҁۭ��^Y���It��;��4�-Y:u��w�Q��'�5���:�-Cu:m9fO9m���•�L�4����*�W�i�^M�qW�)Q�tx�}B�6�߼ZJ�� ���_J�� �>!����~U���j��J�*��<���Ve t����BU���}U͌-C��Mª.c('= 6C��2w=,e�����/; �m-�D����:�,����r]�ﰢ��p^��a�I5�ͦ _ܮAO�\��5Ѽ�)"� n�k�N�ϥɥ���c�i/K[xV�.���(����4>�!<�nȟ@�E�2�:��� -�s�s�㵀���>�������"�o����� �Eȧ��4���{������K��s�s����Nύ栗���^�����6M๊w�,aƞ����Yo� -�Z�Z��/g��-<Sܗ�z��n魆m�nf�:\�xp���N��ǭ�XI[�Q3�n��nV���߽;��ϕDa�����1�� �K�L����E��3���"�k >Hÿ�����T��Y-Ȃ�+4��\x.�?DZ!���|�� ̢�f-�����յhʑ<�0��x�}5� �k�{��2�Zʢ1l3xfi(,� -N��8�ıy��BouT&i�Ќ����b�܆q�c_���һY_�R��g��*�V�>tcw��xv�-���r�^�˓il��-���^Y�g׉�ټH*�=0 -��A��ǒ—��ڐ/b�x���D�AN�4���2 r`G�Z"Ŋ�@��h��� �lġ[��Wuz�r��u!� =�-atH�rm2�3n�Ol�l��F�%����J-\9�Wq]Τf>]&BnŖR�ʚ���#}��.D#���b h�pcΔ&���a�v�3�Xf�����Ş���F�YM�H� ��u� ��Ɠ�eֽ�4/��K� s:k�q66)�+�y�PV�+J�+V��]X�d��d/��B�� �.$b��^t��0y'+��Z3�I���,�6pp���B��eG���|�L�8�f�<� b���(�̡=�S��Ԡ �����Tљ�5�~�VL<1t� {cB�8� �S��S� _9��I� �O)S:� Q[L-�g���=��^��Q0��؈w,�rN�9����-K�-a�6R��3���Gu�Q�Mj�$>$b�(Np ���zu�M��O���+g�������Ţp�\h�}z�����2�R1��Z��ұ��^+�DL3���}�ĝ��������lc�m6�_p��B��1�.���(��� -��E^T���̳h�v# �;?8R�g�Z�Hͯ��~���3!�Y}S��5�t�z���� y�-)P�gv!\I�>���w�P s�W��>Z�`��M�G�����]B����}��5Bޚ�Hs2X�K�wr,~���~ t�Y�v� -F�2��3a����L@�2���Q����Ľt`�� uK���=��i�kq����m\�ʽ�@$ -��� Mq�M��o]���^Ba%��;s/�+#�ތ�h�3�GtXڢ�ib%]+�� ۯ�<fjzC>Uc�l����ܓ�K���m����%�*� ���)�o���}\�uLh;֙� )9�/W����{'��4�i&4P�~��c��-G -���݄lw�j`��`�޼��C�C�����,�l5/=w�/sU���Ы��;�I56�^������aq�a�K�gg�X���:���z�� A6tX�C�C;��.�M`��̻� X󆖮�ۑ�(&� -J���yg&v���� -,��a���Vǰk��ͩ����EvU�_��z�֠G��A.m9�8��pȯ��r�O��,�O��n�f�u��t�J����M<����ɛ!���T��u,�-�7G�.� ���_ -�%I;����"�����ib�p���� ���}ȓP�AG3}�փH;�(h4��c�a��5,�����0�yॄ:̹S�ā���EF/�ux���$6�ulN����\K�'��&� $�w�F��A�����-S�&��*�DO���������a�|8\�<��ړ�Y��ժcK0}�#�|�,r�Ƞ~�y$4�D4�Jb(�L��U���B�ֽǫa��<u�>"+0���n}h*i k}������J -.B���Y�q%�qd�:d"�����m*Q3%�<��#ᨍ��r�~�G|C�;Ghw� -;�k���}�1��ׄ�U<��-�֩?�:��Vn=�'S#S)_XL��›���Ʃ'�/�q���36qg���v�p�>v�Dx��"w�:%���k�Ԏe�>��YJC"n���pYJ-hC $���'�C�������Z�E �M���,ތ�lZ=�WR98[�~�5_�Vo&l� �p[��X?�]4�V�ZC�Ϊ�K��C -@ɗ2қP�Wa���*KĊ�JB����OC�ț�̋���,tvVd�0�?���^`#e:�ڠQ�z)�d��M����A -3Y�^��V�0����K%�h&UNfUfM�lx3+h���*F��9���z ����t� jk�,�4����{�ְg��b��k��X�JZb�J�-Q$Ɏ ���Hk~�%:�:Br���g@�P>f,�|4�8���V�w�%ɦ��Fh��r�c��Np825:�0]AK«�r��Mh��IB�M��$�(�Ԗ�K a*�터&-�4���>ivP(�%����^V_��-��ʱf��n�Xz5߃M-���p�t$>� -7��P�����('�&J�p�7�a|�IX�(��ܲ�lt����4��)�8]7 �6�J�i��,P ���+�n&=��)�P�ӯ4��S5��v�#�v8�bGMVj����2��Y �ң�H��Z���Li�/^�WHq��i��S��q鷤���� ���%mow���Lי�O�'}\ԗa���]� -Ҙ�tT�F'$�8B�_� 0���`�hC�Mjsq`%�e���+e �dO��"�-�&*}���z�ʆJv)��j!���=��Ԗ�C�Cr�q,���E5=5�� ��r �e1y}e\Ļ������VX�Z�Μ��I��F���Ǘٝ@��/m&6��1��4d)*�z���Ӷ}�^m�)l��Y����#D�v����G?CF��h)�!9�j���: ȕ�C�n��FU'np8�`��J ��t�D'��q�☡�k����"���� ogx� �84 ��yx���M�U ��N���=J/ w�� �%�JV{�,�dʷ���l�Յ�ˍ�Y��*�i���� -��\M����py����$�&�{^��d2�8�YXR����9jő Q �� D�!!s�J� P��@�g�f@p�C�h)�|#��@O��]��g��F�oo��+�� ۑ�EJa�#bۯNgu;bE?�v�U��ʋ��7l�Ol -W���6 7����Npz�Id� -o��'�����u� �,| !o�p���o�2�g��g�J� -鸝�=�+XS?�zrl���N�s`����Ғ�3ྈՊ��Ɏw'���*ʙG����:�ˁ.$�UL�l̫-8� H��p0�E��1h[w#b.�e:�-'�i��9�E���>S���\u���ו��d�J�q�0 >��|� )��޶i&����d��8b��f��|�{�x^�봑O���#��5uF�=*�ce� �ZS�\�%�\Q~�f�����������?��_����qO -W�}1��Uw��JTT�;E���;�^�����9� ����~���7����[?}����������_����ş�k���/����� -�9}�?}�C��7~N���_�㟾�� ��o��������� (��-���[)@�?�����`;�������A����~���GFi�o���������#�����O�~��o�c��������?}�����7���Q3�S����a�{b>?�g��/���_������������_�����^+j ��������6�� 5&��� [�\��)m^�i�?�s������z�����M/S$�����@mO�?���μg��R��B#����D ��\�'�i��?4�x����F�d�R$V9�ף�eoB-�����x} �G�$)n��!��]��"���Uޜ&`�s�:����t>��ﭜ����f��v��8��ٚ(��Nuᗨ:���:�l�[�q}S��i}O���� �d%4��|-�)jU��m?�*���&w��`�/s`yX"�^�3��Aq��z4���z���,�*��k����8#O��m`P�Ѯj$����Nj OD��8ߕ.l�ڠ��u]b����9��M�h�k���X((��quv\ ���r/���\��� -1��g����TBe=�v!Z`�L �����L�G�,�t�u�i�AVR��U�ϋa�,��W�k��l0\ĉn[ 6�]1�/3��~����=�W܋']vM!^ I� ��e��P�P���5�̩[9�&@v��f�@��X�qq����p��'��]��%n�4��m�Ԡ)%+<�m�C��Ø2n��-s4 ����%�E��|=�d>oW�a�E:�r0�ud�;R���K�;��Q��0�I��zD�-A ��l�E����=#�3 B�/��D���é �&ܤ�t��� -�Yl���zzP:}C��`��M��EJV��c�8=���e� �`>3f�6\��}:0�Iy�4�|�|L����`�|3��7�*j0��ʬ �h v,�)Q��F�Q��$��…n����m��D���v�}ӽ�3�.���#܈*�:fpp8�*f��l���R�z)��6}~����a0��"�N�?�7[���S�qT��cU̢ -Hc�FF�ޕ�e�.��\�#e+F� �˻���KW��)�� ��hZC%��f^K��Cd�:Qm�h͹��@S���}�ܩmS���:��:�Y��S0W��a��nq�-�Ӯ���iJ��޸;�a�{Y�UD�£9�\K~U�}�pu��m>�N�3�<h�su*Q�v�VO��<'����C�,k^�:��F��S�LQ��èS@c��ZxR�V��4i��c���Ͼ�촨R�;�(ЪZ���uKr}U[��%� -;�\������Gu�S�悐����>�[ԩ}Y��:��JE����бV9��NA/��}�c�+"%�潵���'U�UN厫���ìШ���.s����O����������z�Y_��)�$��[a{���:��y��Se�0N�u:Ɠ%��c\~m����^�:��N��d�Boˠfuj�ZT�D���"�������K���S���_N[$h��ϭ&c�N]�xw��z��N�xaY�pw�U�e��͎��J��du�z!��%mYO��6���hx:=*�仓��:~���ku�j��u���]U��Ӝ[UWc��s��ۆ�����V{e|���7�����kz,Q|bC��s���4���³Tex:m�n7l;w���O�tҭ�w�N?�M5o��VWk��ԇaP�'� ح�i -��N�� A��/�(<��u�Ӆ[�����\�P�`�W��.F�����lqة��S�&Ea�/�NC{�L�[���Ա�D����m���0D ��k ة�R*0�X�l�NG� �� �Ӡ9k����VZ�T a �r9z����DC�)~1Ӻ��ٌ���� ����.��v���������a���T�o��]��yQ��}��Fz�i�BȅR�����+s�j����t�1��ǖSާ@&�mr#�ۅ���i��v <��#g�]>��7޷w���Ԓ�K�Xs~QO�_��O�G�s����Om5�S��Fj�������Y� �O�j[�1�����m���OmuC_�cf�qR�;�������� _/�s�r���>Ŕ���z�۱����c���,xlE�M<ݲ,0(f�'[S����H���=�r䤏}d�'� ���hĔi�d�L%�U�.�<�o�b�tPE�vbt�������ʕ����,�4���`�!�vR��_4��th3 Ȭ*d�"� -��Yܚ� -���#�D yM|g}��-��3o������!�vN��S�Jj��eu -Tۭ��Sh��v -��YK.�s�az����֩�h��:)�2z����z�YI�����\���4�N�����S��Ӹ�ʚ+��?x:m�:M�\��V����H �}�N��}���k�P�`��>՟�HuI�7�hh�h��"Z�ZOXD;�j�����(iyɺ*���[&�N6�UOC�X�~��>��}D ���X/AM�*/������j��"��+1�-�q�3�9�`�׊��G-�����n �STn�F������ ��تGURc�ä1.h ��"��%��4�i6�)���-]S�3x���rU�@:�������7��J�σ��̬�������a��҃�x���G�;[�\�ʽ�k~�3�+�X?�T��A�l�>%Ҫa:<I�*��%z��\Ɵ��-������(���ɝI�s��O���3]Q\yAY^�M��{oGQ��'Q�;/�%�+�b��x;�e��8[��f^ ���h�w ���=�QI(e\\��tZ`<�� -�����;5�qK�ɲĶ0W�8���7M��Z3 #� zJyaT�����'�R�'�'�Jr�9�=ގ�NR��jQ������Ć :W2�2���Ej}� Fh����H�5u©� ,����%Q���/M�|��w�\w���(����̣G�D�dї����4%Ƃ*��9�/h#�� m���f:�������-��4�6:���X]� t��)2�$yM 'z�.6J������$�3^���u�ږ�L�u}��Ǜ��Ӊ���&�r�YZ���?���� ��sE�#�$������m�$�JG�Wt~� -�Š� �W'�6Z�ǁ]Qx$73�9I� / ���Ę��>�1r[& Mi�NS�HՏߤ��z:���4G’���r˱C�&�h -67WNS�=��<�7��<�c%#�фf�ߎ�Xユ[�������H7�b��3]���k�rҔ��bm���B�� 'W8���'۰/=$9��r]�b�X.nFlOP���F��O�t���@:�g�F㚏A:�/)א�O��Аn��.X� -W�e��sP+o����g ֫y��InA��ʎ��g�4y���ѡ�s�OT_MR������D�%b�e�Y��7Y������t7g�g'�J�ܽ=^���{�V&��zH�| V�G- �K��C�ak�܎�.�U��D4ԥ /zj6���D!��Xe����� @G��iR�5!���׌&w1a/�L�p���_�b&�� > ������Ϣ��i`�ҦKUz�e��4�K"�i�k:�����.�x�]B���<%ՙ"��ҭ!���q~�f�{�=t�)��0�_���žw9!�u'��Ӧw�����S˜�ݝ�q�E����xt���Fwm�Ѵ���V1�7J����N��.� -P���(X&�TT�~��#� -�+�?<,���'R�U���g|"�0 I��a��C8�r X�g(t�F87�{��� -�yBx�&z:� ���1��eR¿�9G�׋8G�Ű�����rm��g|����E��R? �g�� �V�\J4�[$\M��S<^��B*���� ���&������5�f� �S����� ��w��<A�A(O8{Ep��q�RB����g��`B4���RG!0���ʇFw��7�����֖ː�I3��ɖ�t�Mb�?.e Y�51 �]1E��Ծ��a�F�"��O�\�sM��B���C � �����:��U�2�i�����gx���ݧ�_�Yjz��A����H9&f7䈧M���B`��٧�� ����������� ���{6�>��A8 ��/N�����^H�0�GvC���p� i�4G�f�۱�B�^I�� 4��.�3.:* �|�XDA�a��K���LC��t����WAH�21&F�=�� -ZD��(>:=s�`p]_ �c��Iϔ|���F�`�- �\ے�?�wc�ͼ�W䚰�?� 8o`.���zZ�-��qvs^��No 0s6��`/ʟ�s2����t���Gŀ�����h�ڠАDR��;2��$[���9�- F��s�>q���J�t��⻮��ʠ�(��C'�A'Q<'�N8���?!�N8���)9t:� :by<�N8�e >!��SzG��]9t�tĝ*���qvzʠ���Gs�3�P�r��!�7�xN�pM��C� -H��0�oY���x�L��!)vH�^0���Y/cx�|���I���^Ɛn���ػ�ȥ�8�T8#�n�ӆ�e�i�߈K���;Q�g|���a]��I��9'z~L���F���>���3�x��Ĕ5�����Dʚx;�cFߕ@%6���|�&-����&����25^՝us-��ރ%���'�ul�e%]Kv�=�RZ��"7�!;��F`�,��M?q���2Eɬ�X�jJW��~�+���SZߗ�Fq�3�,�Y6��Kw��9Θ�Cۥ�~�ڱ���O�����NN�XI�_ 5��uKߕc�y|��/�t�"RӘ��bR �<� ��W</���[ȯ����"H�=��9��R�䵜P'��� ߂pӸ���`f�-�X��cc9XØ�Q�͓������;w&���dr��e��53 �:�����Η�|���3�M3���ݑ�\؈��5�R�=�;"R�B��%p5�D�\�+�rw���C`/�'�Ti����]����0��Ȟ�GD�s{��\��x�<9Ŏ��+=�v�Iu�Ί�\�<���ɽ�2�ٵ| r<R�7#*������:���6�ߩ{zy�t�{�' �X�S=O����aW�%��<2�.�Q:�M�!��,v�����?-�1��<2�!����� �#�y�GF���=�G����GFrCz�9���#sa�UO��aFw�OC.|�R�����H�/?O�GF �"�.1דs2�����p*�AO��R�a*v-n\�� t9����$f�d8{�ه�:�������������� -]��>FS���Չ��P�yuW���1.@ ����W��;NQ�,2TO}��6+"6:f�;o�ȃ�p�-�Έ{v>ܽ��ݖ���|��#TE�É�P}B>ys��(��{#�S��8��(xb>����·��Y�ܻ�ɇceq�B����c���DY7ߟ/�����9&RX�Y)��뛇��a�~�{X�@Px#�ş�p���b�cΣ9� -� �c�G<��:�;��1��"�[�K6���C1!�*���ʚu�˳ذ�{� ��eú���+�8���l�p=;N�^8b��^ 8�H����!�s�#N�'��� -Y ��5�8��)^�+�4�A��Hm=a!�Rv���f��$Rq�f��Ӆ�H�K��WW�J�{NFj�I���d�6���� 4-��/��hF��-AFDԍ��h��U����*�l��T8�����y(��.�g�¡���|(�v��T��;�~�p�^���� ����g�_�������K�t����=�" -O��5�E��0Q��$�s�"�_�\��f2�<vޫ��f֐�P��Y��pV�`�8Nr&׀�>� �R�׻q��v1C� �L~oe��G� �L+G�,�閟T�2�����ۛ��yp.�d7���qs���J�d7��N/� ;��2-�E#KV�.����ބ��} -g�M^+��*͙ސ��o.������Jv���g��.����N3e��k d���3������!��W�.o�]K0�no��4����v -�������:ͩx;��k��S�a�a����Xձ��}#B}�Ĵ�WkzL/OK��o�B��H�#�N�r��������+ G�*I"Bn�,��{�ڵ�bS{���������m����S �%ˏn�>������.����]�$w�.&>DR8�E��\q}Bu�x����pw���7Ó�w�ր�T��R� ��w�x��c� wee�r�ҡ�ħf�=��M�e0�p�Ȧ�ʥ���l:.� �<�Mw^���X��cl����th���3���Bnʦ�Q|j6�9 ��� �t\�t'#f�q�Y.�{8����NzH��Mǥ��<�Oʦ�ʥ�}0��k3"��3����a��Mǵ~��9Oʦ�Z?�h����@]�)|k6��n��l�[1v_6ƞ�M���nȦ㲰�9V�g�q%Z�r���M�����l:�������r�8������.k>>�MǕKǵ�<�MDž �o��l:�\:����鸌+���(�pP�� @Kg?0���L�xu�5ƴ��N��gvN����x��'׫��]�ē�׉��/l<]W,D��LD���Aq�(]]��X����pP�4��xb3� #����-Vd�v1�E�?�-"�Tu-̚� Ʋ+� �ݘ�vY���+�*�me�% Y������W2�D%�]�����-s�8��{�̝X��ce�: _�;��J�e��ob��BY����{��fz�F�y�`�)"�UD�R����iDЧ�z"�@�8��f�x�Ǯ�G����D�, -�b2`�d�e�o "�I���?J�Za �e��"����$�����{`z�%� �$W4Tq��h(��y�Pŕ�h(��~�߽~S棆��{{2�����"��q0s���2+ڱ�@����.LL�vVb���<�Y}⭀�أ��i�U�Œ�w�r���D� ݐP"T�˘�x���[b�����Pf -��L�k��o�ć�����3d�F޿�������� E(��8O�%��y�Z5����� -�)p^��'�*�� -���G�-��+�1� -5��dCV����V��pwE�>���Y�0�|��*�ݝOĪ��8rV���K�r[�;�^�p'�Vs��Tq��Մ,��Z��k�j� endstream endobj 70 0 obj <</Length 7105>>stream -D!Bѡ�5��;�� ��f����~�=W�M�,�;"�g�sP�u[�*�c *�er�Hc�����sq4�� {�K6{��Ū���{� C ���Q�v1�4&��0f;u��5��{ �ŕ��(7��$&���,��d]Lm�pSSp���^8(��D)��H�e8+�T/���{����K0��.n�qm�-�H�^(#l!l�9�9c�KDZ��r���}�r��[��|**P)��r���xR�+� SYς9�g��������LS´Y���I0����{�*����[�����츩�p����c��.13��\�p(��a3�t�2���*�fK��u��yy�W推8G���4�.���8 -<�:d���cu -y�L�� -��%1;���uꔝ�'�r�g�;5M �U -��2S�t�e����$ �`m����k ��Mq�N�D'U��`/ -�-L�_�}�2w���)���n?��x;��2G��z������.���5 h��U�8ծ s�Cr��RZ�c" �>8� ��b\ԋ^���� e��N(l��\�^�A,���(&��Z[��t=d�?%)$&���?��Q�W����='� -�3���+"QG.b7-_e��JtڵD9�͓�g�鄇$�����;���Z�7�!�׆d��/���EiID���O|#��ijܱ�,q�ү����c���'�Zz��h�>��sn�C�Ɵ���2H��v�)O�ΛhY9��-�轍0?�m7�q�u�v�2W�(�|�Z���bW��?JK���5{yW\Bl��U ӗ6y/��FN<|�M5� w�1s�ӄ�.�J^��v�ID�z�.Fɫ�.���[�f����I$C4��V>P����{r�n*���ę����9�M��6�+N��T@�ɯ��N\�[V�ۓ��#����Ufn�v���Ev�����#���søz�'b�Z=��06���L퐁�����j�D��{�����J��Hj}wfr�g 3B��,@�9�4��Y�lQǗ�˳BwW�;c�,@6>��g���,@Aۏu*z��� ���)�wsE����]f��2���y�[�O"Bh<^���c�ܢ|���_jQ>/ܓ��]�����|�ԯ��(3/ ��+a���h��sU�{��P�U��gr=�n���]N�^���hۋ�~��)�^׏�*iU���^�O�+$t7�-u��+�_v���n��'�ʠS�Cu��B,���u�Dfr=� wU?��r]?�q�.��Ǖu�?^�U�OxBp{F]?�e���ƺ~Œ+p4;�^��BO����u��7:�Jz���r�]���8�� ��(� u������~O���xλȺ~"��=X�O'XՏuS��u��g�3Ro��ǫj��~qw���N좪���!y K�s�Y����~|�4:��ۃu���/2R��'\Տ~?��y5�]�'����O��'\���z|���qY��ἇ�eU���9�u�8�κ�p����~š<�}��� YL��P�OX�G5 �P�O���+����~\i�g&|��� �����L������~¶���.���.�w)a��Ǖlq�Ԡg =R׏A^U���J����Rs/��u���x��3�� W�����Y��z|w��c@�0���wc.������@2<��'�����'��~Wn9]�O���{���p��O鎺~�f;��'�^8Q9O�U���-����ݮ���߅ dT�{4z���'Ldt��u��Cƍ:��N�e������J�꼫��u��3��ݢ��_��r%{�x!`<�ɮ�'�+"�ST]?�́�)��%�������gu�{���W -'��t�� �v��3�L9F�����P,lU�S 1!�Ihh�f�^ܜ�yAs�R.�<���Vْ�z��n�D�NK�)�N��� L���0����y���.�߅t��L��_�V<ᎇ�D��“�ch}9g�Ͻ� �vo�+^�����9�u�z��s�/�����Fp�;�E��M��6��mY������ՠ����n�Q�wG��}/�F&�њs����p��|-��8�}ո(��U��ΔPZl�W�G��V3C���(�%�ء;%�R�v���)?���0�̀���D�(��e��s�==�T3_�1��Vb����$m����3x����0&��?���\�3�y�6�6 ��j#�'e��n�j�P&�)9��� ����I��?�\v��� �*c�����'���u������3�K<H��o�� -��Y ����V��Ż�n�|�Y%���!Z��j�ۇ��FW�+� u*��媝�i޳�][&�Lȡ��#��@�E{{�H kO�N��D�x��sRZ�'،���5�O��5�.^o�$ -8��5X�F��Ɍ�6u"n��!g5���݇~ț�v���� �����1z��2K���md��+�ψA��7%�����ڨ�K6NF��}y�O=H���]���Adi����Qٌ~Z�5숛��3�����z�D xcAe� � pFa�L<̀�A��5Vk��W���j�WV�vU� �|2�T:0�pS+g8u�A��p�x3�L}��3]�j _��I;�U��9�,��B�s���rn0�uT"���n�-��4FA�d\%�+����XzD&��Y5��T-煷h�=Y|��r�&}�1j�}���M.٠`�(��:��g̈́ld𭉛��|{7۷iе�i X�A�J}����c�2�h@���4�o/�q�[�Lm�g��h#+�A�����)ȹ,VR��F\V�w��L�3G�Y�d.�����]�b⺒~��I��ؖ $�NB���iHH��l@X�������*�sa��Ȩ$ٖ�BB�>M۲]�J�R��d�0}#}-��C�3V�IMv^��Le��=2*�t���}���;����囼s�1'7���ܳn"['���������R��!�U3������ �a�V�y�q���N1+U���Q���w��՛^�G� a�Ҋ8���Í�0@�횮���L�����y6C}`g'���� ��`/�,�`��-� ��y�m�!� N���Ԙ�-Kl�l�Eh,ؘYV������ ˖�j'Hؾ-��P�չ#��2B%��{*��n�`�4�j��8oZ�|D��{g��)._} �F7s����#Mko���)RG����y��P)R@ �a���K�Kp\��zM�Ga������j� �BW�����s8 -{��CQ���p�ܬe� ��&i��‰-���Y�����8�4�#.�$i��:�q{9������H4S?������ �z��qEE�MŤUK�Z�~W��3���u��ꩰ�����A�����\��dǣyX�J=}H��g��6 ��v�� R u��p�`��_��]HM7�"�I@F�f��� - ��R� �<]�`��"s�w������(�� yf�<�56��K}T���n�䃗�h�6����� l�uW�?���=�J0W 3�P��*!7��4�`zw樠��;t^C z�"`Jh��<*H�� -�K}n��ݱW)!�����3ұ��RS�z��az�z#>j���+S�6E���N��[<��[�],6$,�4�LY��+�m�q�>�Ks�To � -��2'�,S�A1��a�.�V�~m��XϦɸ�#�� ^ĺ� ��tM -4�-F*�ڷEg��jbE�U�Eb�t0X�]=:+������K�e �\g����I�+ǽ��6�{����}�����|��\M|��xM|��R#uZ�+�j��LĜ�r�� ��ml�ڐ��hl-���Eh/&-k��ֆ��ƢN��/���%��H��;��b�չ�/�eY��e�k�<��#�vs?/�m<�DYp����ȵY�]~3�U����&��U~�[W����Pp�*���+,"�e�̝6'�#�T�Nd�) -�}�*�s= ?��o_�(��Eb��/�$�|�3)L����u(�FG|u� �h!:��0������Q���Q�n>��%��)��d�G�0;��^��EIb���XU�b��@���a ���UML��G���TK����G �8b���\� ��]���sI����KV���Hg1Ab���!`�D�ľ}��bx-�[5N��S�L� 38�X���^������q��UK+��"��� �/UpR�t�F�b�ѧu�I۲��^&��_��3���3� -���΂�����^*��0���تꊍV�����C��u<<�>��p<�]�E:��l���� ���~��9 ��l��2��?s=jo�PH+�*Hx�i����k��~��J~�o���kU��p��H�q���U��],��Ҩ��K=�n� �)ˣ��J_�wxʝ���6��]N��#��a������IO'i����3��6�Ko�?��?�N�j��f� %��}�;���*mr����c���;kR�~�3ko� -9l5�,�c���E�g�t��ܔ���A��A'��4�&B�����������%���4|'=�bKnP�d�D��JHYg&Ҏ}�8@��up�!������J��`�n���S�@�3��K3~ � T����U[��Đh�RA��3�3=��ii;���*qa�(��׏=�������7�Su$*�ӷ��l��{�aaOP�U��Aa��^w�5� �����DL���U�\����Ӡ�ɲ���p���=���q��L�W��Z�qy���R��Y�rwx�� �~) ~�E���/��|��8 �u��PXsf� ��Ll<�#�e���I�6w\�]��� ��.��m�{�Vƽ}�t�8�5 -7Wie��Q8�K�s �P -Lv|����(�7�~o�e;S|a)���#_�b��w -R�ȡ��Oj%_����OJ� -��@����K~9@����&O� ��*iI��Ƀw�sY�l������TV��`SB����$4ՠ��|�nBH�%2�(�?MHb7�&�� !�E��$ g(�?MH�1OI�iB�e%�� I��p��&$q8�������/�,La!��/5X =���m�'�6�oNdIt<��R�0�%��/~�/�{f�|F\:��,�. PV������@��e��� 1o a2�-�����}MR��-�r� PI$�<�&2 4�É���-������ڇ U�k�V�ǚ� ��UB*b�J�<,y���3�>Y7����agi�B>2� S�d���X2ی��67y���iL�v�Ĩ��-ӡ�.f�A:x����S�x�|�Ǝ��y�1X����Mq���h?r±��x]����>f;��f�(��T��0Z�5{l��R���< �В�����;�>R���!}{��,19W�.�E��Y��3���0��hKP$�ė����\��{ė���j�(��QB�W�� -� -pn��˽Ɔ�(е P0]ۮ�"��K���J�P���,��}����)����Txw�*mĥc?$p��i�s"�Vh�<���PD"ެY9�6��m#�+F5�|���o���$��M��:4#�il]M�MV��� -���P�_��� ���*Qd�����V�� 9[���H���,f>$vg��w�����ܶ���9���U ����V�h��Mml�w`3S��[[D%��@x�^kY�&����H���uE+[�7����|���}��В��@>���6p��i�_���9LlVծV%�_V�)|�m��!ZA�o�6J�K�<�� -�z�1�����ǖ�>� -�=��\���-7��<��?���m+��E<EdW�����'�ED� ���<�{˧T9ş�����E�� T�DtN��͸�<�T辖����l�(��M�Ϥm����VF�w�p -�Z�sS�e)O�.>��;x��F����m����pܔw�#D����iQ�m̓0ugjw#2?�~��8cw�3uw-z����� ��-�lϹ43+��S�/����KO����ᰥ0��C*�ǰR�H{0�S�F�ά`Wnh�� 6N��`C��ɀ�:؈��.j�5Q<����D��(Y���1�8�#������_f��^����We�綾�z�����&� -�kH\$OX"�r�R��|�[l6b�ë��s��9Z����5���MҶt�4<�e.e9�rKas-w�7t�؆�e?6a|z�l(�P -@=��ΑA����Ӱ%A������}QCu�8k���õ6t�B�uۆ$_L�Œ�H�*m�T��ʟ�%ܰ՛���ж�Lķ�W�����8~}G:�6�O��|`69�#���g@�ADZ��\n��\(& -��������j�1%��j4(o� ~?�h����5h�����4�M`P�����@S������~�r՝L�p�y��������ݑ�D�G��׊�H���i�R+�B�����?��?����"��J_��+��I��i�<�G� H��T�團=���G���Λz��wH���#Q� op�p+��5�&"ɘx�<~~|��1{u����}X��*⿵�p�[����>���{�����p��qˊ5D쓈7UM֐c��"YG���:25H�?���*R-|�CB5 �G��� k���w�Qw�=��p��"��N�+�= G��r��m��Bnk<#��W(+Ȣz -��I��R%L����L�9�c����� W8X�E�@�GcQ͂K3��{Pk *3,�o|r�^p�_"R�񮩊xۥ���liQ�B��Q��⻀LS�,����)�&��.QWe=�B����4GbE������5ӓ7ѕ�k�osӸ�.��I� ��!"%��&r%�.�¼��Y��e�0.12q�wK�.���1��<j�q�� ��$��x�9բ:6!K�ȿQK�6g����g��氉��o�[D}XQ�t��6�8ɑ��P!�QM6���ڊ�Í�j�1�L��a�N���� -}��Ge���&i�d�2�ޛpCG1��yq�PeÈk���c�(�CO!V�X%�4p��"8��{��Q�������+�����=���7�'�QW��)��v��� -��x�� endstream endobj 15 0 obj [/ICCBased 63 0 R] endobj 5 0 obj <</Intent 22 0 R/Name(��0�0�0�0�� �1)/Type/OCG/Usage 23 0 R>> endobj 32 0 obj <</Intent 41 0 R/Name(��0�0�0�0�� �1)/Type/OCG/Usage 42 0 R>> endobj 41 0 obj [/View/Design] endobj 42 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 22 0 obj [/View/Design] endobj 23 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 53 0 obj [52 0 R] endobj 71 0 obj <</CreationDate(D:20150415134556+09'00')/Creator(Adobe Illustrator CS6 \(Macintosh\))/ModDate(D:20150415135729+09'00')/Producer(Adobe PDF library 10.01)/Title(Print)>> endobj xref 0 72 0000000004 65535 f -0000000016 00000 n -0000000173 00000 n -0000037976 00000 n -0000000006 00000 f -0000253062 00000 n -0000000008 00000 f -0000038027 00000 n -0000000010 00000 f -0000038747 00000 n -0000000011 00000 f -0000000012 00000 f -0000000013 00000 f -0000000014 00000 f -0000000016 00000 f -0000253027 00000 n -0000000017 00000 f -0000000018 00000 f -0000000019 00000 f -0000000020 00000 f -0000000021 00000 f -0000000024 00000 f -0000253333 00000 n -0000253364 00000 n -0000000025 00000 f -0000000026 00000 f -0000000027 00000 f -0000000028 00000 f -0000000029 00000 f -0000000030 00000 f -0000000031 00000 f -0000000000 00000 f -0000253139 00000 n -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000253217 00000 n -0000253248 00000 n -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000039681 00000 n -0000253449 00000 n -0000038422 00000 n -0000042671 00000 n -0000039988 00000 n -0000039875 00000 n -0000038808 00000 n -0000039120 00000 n -0000039168 00000 n -0000039759 00000 n -0000039790 00000 n -0000040023 00000 n -0000042745 00000 n -0000042985 00000 n -0000044073 00000 n -0000049107 00000 n -0000114695 00000 n -0000180283 00000 n -0000245871 00000 n -0000253474 00000 n -trailer <</Size 72/Root 1 0 R/Info 71 0 R/ID[<4D5503399FCC4B1CB18AE82F78BC534D><AD2CFCAD0D354BF89BFC5387F57EAFEA>]>> startxref 253658 %%EOF \ No newline at end of file From 81346237ebbbcc3de8d11e4a8a019c75b37e09f4 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 17 Apr 2015 11:09:53 +0900 Subject: [PATCH 144/339] =?UTF-8?q?subject=E3=81=AE=E4=B8=80=E9=83=A8?= =?UTF-8?q?=E7=BA=8F=E3=82=81=E8=AA=AD=E3=81=BF=E3=82=923=E3=83=9A?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=81=AE=E6=99=82=E3=81=A8=E3=81=9D=E3=81=86?= =?UTF-8?q?=E3=81=A7=E7=84=A1=E3=81=84=E3=81=A8=E3=81=8D=E3=81=AE=E5=88=86?= =?UTF-8?q?=E5=B2=90=E3=82=92=E8=BF=BD=E5=8A=A0=20=E3=82=B9=E3=83=9E?= =?UTF-8?q?=E3=83=9B=E5=90=91=E3=81=91read=E3=81=A7Dropbox=E9=80=A3?= =?UTF-8?q?=E6=90=BA=E3=82=92=E4=BD=BF=E7=94=A8=E3=81=99=E3=82=8B=E3=81=A8?= =?UTF-8?q?jQuery=E3=81=8C=E5=A4=9A=E9=87=8D=E8=AA=AD=E8=BE=BC=E3=81=BF?= =?UTF-8?q?=E3=81=AB=E3=81=AA=E3=81=A3=E3=81=A6=E4=B8=8D=E5=85=B7=E5=90=88?= =?UTF-8?q?=E3=81=8C=E8=B5=B7=E3=81=93=E3=82=8B=E5=8F=AF=E8=83=BD=E6=80=A7?= =?UTF-8?q?=E3=81=8C=E3=81=82=E3=82=8B=E4=BB=B6=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- lib/post_form_options.inc.php | 1 - lib/read_header_i.inc.php | 4 ++-- lib/sb_toolbar.inc.php | 2 +- rep2/js/subject.js | 15 +++++++++++++++ rep2/post_form.php | 1 + 6 files changed, 20 insertions(+), 5 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 6171b6acb..16364152c 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -77,7 +77,7 @@ function p2_init() $_conf['favrank_url'] = 'http://akid.s17.xrea.com/favrank/favrank.php'; $_conf['expack.web_url'] = 'http://2ch774.github.io/p2-php/'; $_conf['expack.download_url'] = 'https://github.com/2ch774/p2-php/releases'; - $_conf['expack.history_url'] = 'https://github.com/2ch774/p2-php/blob/master/doc/ChangeLog.txt'; + $_conf['expack.history_url'] = 'https://github.com/2ch774/p2-php/blob/master/doc/README-774.txt'; $_conf['expack.tgrep_url'] = 'http://page2.xrea.jp/tgrep/search'; $_conf['test.dig2ch_url'] = 'http://dig.2ch.net/'; $_conf['expack.gate_php'] = 'http://2ch774.github.io/p2-php/gate.html'; diff --git a/lib/post_form_options.inc.php b/lib/post_form_options.inc.php index 8741a329f..ac30333db 100644 --- a/lib/post_form_options.inc.php +++ b/lib/post_form_options.inc.php @@ -362,7 +362,6 @@ function setHiddenValue(button) { $_SESSION['upload_token'] = $upload_token; $upload_form = <<<EOP <input id="fileupload" type="file" name="{$upload_name}" data-url="upload.php?mode={$upload_mode}&token={$upload_token}" {$upload_multiple}> -<script type="text/javascript" src="js/jquery-{$_conf['jquery_version']}.min.js"></script> <script src="js/jquery.ui.widget.js"></script> <script src="js/jquery.iframe-transport.js"></script> <script src="js/jquery.fileupload.js"></script> diff --git a/lib/read_header_i.inc.php b/lib/read_header_i.inc.php index 41175a0ea..212fa0ad2 100644 --- a/lib/read_header_i.inc.php +++ b/lib/read_header_i.inc.php @@ -106,9 +106,9 @@ </script> EOS; } - +// �������ݗ� if ($_conf['bottom_res_form']) { - $_conf['extra_headers_ht'] .= "\t<script type=\"text/javascript\" src=\"js/post_form.js?{$_conf['p2_version_id']}\"></script>\n"; + $_conf['extra_headers_ht'] .= "<script type=\"text/javascript\" src=\"js/post_form.js?{$_conf['p2_version_id']}\"></script>\n"; if ($_conf['expack.editor.savedraft'] != '0') { $_conf['extra_headers_ht'] .= <<<EOP <script type="text/javascript" src="js/post_draft.js?{$_conf['p2_version_id']}"></script> diff --git a/lib/sb_toolbar.inc.php b/lib/sb_toolbar.inc.php index 1ad1ffa59..467b959d3 100644 --- a/lib/sb_toolbar.inc.php +++ b/lib/sb_toolbar.inc.php @@ -27,7 +27,7 @@ $shinchaku_matome_url = "{$_conf['read_new_php']}?host={$aThreadList->host}&bbs={$aThreadList->bbs}&spmode={$aThreadList->spmode}{$norefresh_q}&nt={$newtime}"; $shinchaku_matome_ht =<<<EOP <a id="smy{$new_matome_i}" class="matome" href="{$shinchaku_matome_url}" onclick="rep2.subject.changeNewAllColor();">�V���܂Ƃߓǂ�{$shinchaku_num_ht} [�S��]</a> -<a class="matome" href="javascript:var unum_limit = window.prompt('�V�����w�肵�������ȉ��̃X�������܂Ƃߓǂ݂��܂��B','100');if(unum_limit){window.location = '{$shinchaku_matome_url}&unum_limit='+unum_limit;}">[�ꕔ]</a> +<a class="matome" target="_self" href="javascript:rep2.subject.jumpMatomeLimit('{$shinchaku_matome_url}');">[�ꕔ]</a> EOP; } else { $shinchaku_matome_ht = ''; diff --git a/rep2/js/subject.js b/rep2/js/subject.js index 0c9215e40..2c9f58328 100644 --- a/rep2/js/subject.js +++ b/rep2/js/subject.js @@ -21,6 +21,21 @@ rep2.subject.changeNewAllColor = function () { $('#smynum1, #smynum2, a.un_a').css('color', rep2.subject.properties.ttcolor); }; +// }}} +// {{{ rep2.subject.jumpMatomeLimit() + +rep2.subject.jumpMatomeLimit = function (matome_url) { + var unum_limit = window.prompt('�V�����w�肵�������ȉ��̃X�������܂Ƃߓǂ݂��܂��B','100'); + if (unum_limit) { + matome_url +='&unum_limit='+unum_limit; + if (top == self) { + window.location = matome_url; + } else { + parent.read.location.href = matome_url; + } + } +}; + // }}} // {{{ rep2.subject.changeUnReadColor() diff --git a/rep2/post_form.php b/rep2/post_form.php index f3230d454..af92727e7 100644 --- a/rep2/post_form.php +++ b/rep2/post_form.php @@ -114,6 +114,7 @@ if (!$_conf['ktai'] || $_conf['iphone']) { echo <<<EOP <link rel="shortcut icon" type="image/x-icon" href="favicon.ico"> + <script type="text/javascript" src="js/jquery-{$_conf['jquery_version']}.min.js"></script> <script type="text/javascript" src="js/basic.js?{$_conf['p2_version_id']}"></script> <script type="text/javascript" src="js/post_form.js?{$_conf['p2_version_id']}"></script>\n EOP; From d75c5ed527e93d2a6cef26e510cd00442b1c3103 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 17 Apr 2015 15:28:51 +0900 Subject: [PATCH 145/339] =?UTF-8?q?0=E3=81=A1=E3=82=83=E3=82=93=E3=81=AD?= =?UTF-8?q?=E3=82=8B=E3=82=B9=E3=82=AF=E3=83=AA=E3=83=97=E3=83=88=E3=82=92?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E3=81=97=E3=81=9F=E5=A4=96=E9=83=A8=E6=9D=BF?= =?UTF-8?q?=E3=81=AE=E9=81=8E=E5=8E=BB=E3=83=AD=E3=82=B0DAT=E3=82=92?= =?UTF-8?q?=E5=8F=96=E3=82=8A=E8=BE=BC=E3=81=BF=E5=8F=AF=E8=83=BD=E3=81=AB?= =?UTF-8?q?=E3=81=97=E3=81=9F=20fix=20typo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 609a1df6d..a6d690224 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -478,9 +478,7 @@ protected function _downloadDat2ch($from_bytes) { */ protected function _downloadDat2chNotFound($code = null) { // 2ch, bbspink �Ȃ�read.cgi�Ŋm�F - if (P2Util::isHost2chs ($this->host) || P2Util::isHostVip2ch ($this->host)) { - $this->getdat_error_msg_ht .= $this->get2chDatError ($code); - } + $this->getdat_error_msg_ht .= $this->get2chDatError ($code); $this->diedat = true; return false; } @@ -679,15 +677,17 @@ public function get2chDatError($code = null) { } $reason = null; - if ($code == '302') { - $body203 = $this->_get2ch203Body (); - if ($body203 !== false && preg_match ('/�ߋ����O ��/', $body203)) { - $this->getdat_error_body = $body203; - if (preg_match ('/���̃X���b�h�͉ߋ����O�q�ɂɊi.{1,2}����Ă��܂�/', $body203)) { - $reason = 'datochi'; - $this->setDatochiResiduums (); - } elseif (preg_match ('{http://[^/]+/[^/]+/kako/\\d+(/\\d+)?/(\\d+)\\.html}', $body203, $matches)) { - $reason = 'kakohtml'; + if (P2Util::isHost2chs ($this->host) || P2Util::isHostVip2ch ($this->host)) { + if ($code == '302') { + $body203 = $this->_get2ch203Body(); + if ($body203 !== false && preg_match('/�ߋ����O ��/', $body203)) { + $this->getdat_error_body = $body203; + if (preg_match('/���̃X���b�h�͉ߋ����O�q�ɂɊi.{1,2}����Ă��܂�/', $body203)) { + $reason = 'datochi'; + $this->setDatochiResiduums(); + } elseif (preg_match('{http://[^/]+/[^/]+/kako/\\d+(/\\d+)?/(\\d+)\\.html}', $body203, $matches)) { + $reason = 'kakohtml'; + } } } } @@ -699,7 +699,7 @@ public function get2chDatError($code = null) { $read_response_html = ''; if (! $reason) { try { - $req = P2Util::getHTTPRequest2 ($read_url + '1/', HTTP_Request2::METHOD_GET); + $req = P2Util::getHTTPRequest2 ($read_url.'1', HTTP_Request2::METHOD_GET); // �w�b�_ $req->setHeader ('User-Agent', P2Util::getP2UA(false,P2Util::isHost2chs($this->host))); // �����́A"Monazilla/" ���‚����NG @@ -738,6 +738,10 @@ public function get2chDatError($code = null) { $kakosoko_match2 = "/http:\/\/turing1000\.nttec\.com\/?(403|404|500)\.dat/"; $naidesu_match = "/<title>����Ȕ�or�X���b�h�Ȃ��ł��B<\/title>/"; + + // 0�����˂�X�N���v�g�ɔ�������悤�� + $soukoni_match = "/<title>�����I�ߋ����O�q�ɂ�<\/title>/"; + $error3939_match = "{<title>�Q�����˂� error 3939}"; // �ߋ����O�q�ɂ�html���̎��i���ɂ����邩���A�悭�m��Ȃ��j // @@ -756,7 +760,11 @@ public function get2chDatError($code = null) { $dat_response_msg = "

    2ch info - ���̃X���b�h�͉ߋ����O�q�ɂɊi�[����Ă��܂��B{$marutori_ht}{$moritori_ht}{$plugin_ht}

    "; // ������Ȕ�or�X���b�h�Ȃ��ł��Bor error 3939 - } elseif ($reason === 'kakohtml' or preg_match ($naidesu_match, $read_response_html, $matches) || preg_match ($error3939_match, $read_response_html, $matches) || preg_match ($vip2ch_kakosoko_match, $read_response_html, $matches)) { + } elseif ($reason === 'kakohtml' or + preg_match ($naidesu_match, $read_response_html, $matches) || + preg_match ($error3939_match, $read_response_html, $matches) || + preg_match ($vip2ch_kakosoko_match, $read_response_html, $matches) || + preg_match ($soukoni_match, $read_response_html, $matches)) { if ($reason === 'kakohtml' or preg_match ($kakohtml_match, $read_response_html, $matches)) { if ($reason === 'kakohtml') { From f6804e171013f68ea4682f76538a83c99abfac2e Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Sat, 18 Apr 2015 03:57:48 +0900 Subject: [PATCH 146/339] =?UTF-8?q?=E3=82=B5=E3=83=A0=E3=83=8D=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E8=A1=A8=E7=A4=BA=E3=81=AB=E3=81=A6=20URL=20=E3=81=A7?= =?UTF-8?q?=E5=8F=82=E7=85=A7=E3=81=97=E3=81=A6=E3=81=84=E3=81=9F=E3=81=AE?= =?UTF-8?q?=E3=81=A7=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=83=91=E3=82=B9?= =?UTF-8?q?=E3=81=A7=E5=8F=82=E7=85=A7=E3=81=99=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ShowThreadI.php | 14 ++++++-------- lib/ShowThreadK.php | 15 +++++++-------- lib/ShowThreadPc.php | 10 ++++------ 3 files changed, 17 insertions(+), 22 deletions(-) diff --git a/lib/ShowThreadI.php b/lib/ShowThreadI.php index 50ec003e2..c1f61dde2 100644 --- a/lib/ShowThreadI.php +++ b/lib/ShowThreadI.php @@ -1005,11 +1005,10 @@ public function plugin_imageCache2($url, $purl, $str) } // �I���W�i���̗L�����m�F - $_src_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime); - if (file_exists($_src_url)) { + if (file_exists($this->thumbnailer->srcPath($icdb->size, $icdb->md5, $icdb->mime))) { $src_exists = true; $img_url = $img_url2 . $icdb->id; - $src_url = $_src_url; + $src_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime); } else { $img_url = $this->thumbnailer->thumbUrl($icdb->size, $icdb->md5, $icdb->mime); $src_url = $src_url2 . $icdb->id; @@ -1027,7 +1026,7 @@ public function plugin_imageCache2($url, $purl, $str) // �T���l�C���\���������ȓ��̂Ƃ� if ($inline_preview_flag) { // �v���r���[�摜������Ă��邩�ǂ�����img�v�f�̑��������� - if (file_exists($prv_url)) { + if (file_exists($this->inline_prvw->thumbPath($icdb->size, $icdb->md5, $icdb->mime))) { $prv_size = explode('x', $this->inline_prvw->calc($icdb->width, $icdb->height)); $img_str = "<img src=\"{$prv_url}\" width=\"{$prv_size[0]}\" height=\"{$prv_size[1]}\">"; } else { @@ -1196,11 +1195,10 @@ public function plugin_replaceImageUrl($url, $purl, $str) } // �I���W�i���̗L�����m�F - $_src_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime); - if (file_exists($_src_url)) { + if (file_exists($this->thumbnailer->srcPath($icdb->size, $icdb->md5, $icdb->mime))) { $src_exists = true; $img_url = $img_url2 . $icdb->id; - $src_url = $_src_url; + $src_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime); } else { $img_url = $this->thumbnailer->thumbUrl($icdb->size, $icdb->md5, $icdb->mime); $src_url = $src_url2 . $icdb->id; @@ -1218,7 +1216,7 @@ public function plugin_replaceImageUrl($url, $purl, $str) // �T���l�C���\���������ȓ��̂Ƃ� if ($inline_preview_flag) { // �v���r���[�摜������Ă��邩�ǂ�����img�v�f�̑��������� - if (file_exists($prv_url)) { + if (file_exists($this->inline_prvw->thumbPath($icdb->size, $icdb->md5, $icdb->mime))) { $prvw_size = explode('x', $this->inline_prvw->calc($icdb->width, $icdb->height)); $img_str = "<img src=\"{$prv_url}\" width=\"{$prvw_size[0]}\" height=\"{$prvw_size[1]}\">"; } else { diff --git a/lib/ShowThreadK.php b/lib/ShowThreadK.php index dfda8ead8..6684d8e89 100644 --- a/lib/ShowThreadK.php +++ b/lib/ShowThreadK.php @@ -917,11 +917,10 @@ public function plugin_imageCache2($url, $purl, $str) } // �I���W�i���̗L�����m�F - $_src_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime); - if (file_exists($_src_url)) { + if (file_exists($this->thumbnailer->srcPath($icdb->size, $icdb->md5, $icdb->mime))) { $src_exists = true; $img_url = $img_url2 . $icdb->id; - $src_url = $_src_url; + $src_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime); } else { $img_url = $this->thumbnailer->thumbUrl($icdb->size, $icdb->md5, $icdb->mime); $src_url = $src_url2 . $icdb->id; @@ -939,7 +938,7 @@ public function plugin_imageCache2($url, $purl, $str) // �T���l�C���\���������ȓ��̂Ƃ� if ($inline_preview_flag) { // �v���r���[�摜������Ă��邩�ǂ�����img�v�f�̑��������� - if (file_exists($prv_url)) { + if (file_exists($this->inline_prvw->thumbPath($icdb->size, $icdb->md5, $icdb->mime))) { $prv_size = explode('x', $this->inline_prvw->calc($icdb->width, $icdb->height)); $img_str = "<img src=\"{$prv_url}\" width=\"{$prv_size[0]}\" height=\"{$prv_size[1]}\">"; } else { @@ -1102,11 +1101,11 @@ public function plugin_replaceImageUrl($url, $purl, $str) } // �I���W�i���̗L�����m�F - $_src_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime); - if (file_exists($_src_url)) { + $_src_url = ; + if (file_exists($this->thumbnailer->srcPath($icdb->size, $icdb->md5, $icdb->mime))) { $src_exists = true; $img_url = $img_url2 . $icdb->id; - $src_url = $_src_url; + $src_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime); } else { $img_url = $this->thumbnailer->thumbUrl($icdb->size, $icdb->md5, $icdb->mime); $src_url = $src_url2 . $icdb->id; @@ -1124,7 +1123,7 @@ public function plugin_replaceImageUrl($url, $purl, $str) // �T���l�C���\���������ȓ��̂Ƃ� if ($inline_preview_flag) { // �v���r���[�摜������Ă��邩�ǂ�����img�v�f�̑��������� - if (file_exists($prv_url)) { + if (file_exists($this->inline_prvw->thumbPath($icdb->size, $icdb->md5, $icdb->mime))) { $prvw_size = explode('x', $this->inline_prvw->calc($icdb->width, $icdb->height)); $img_str = "<img src=\"{$prv_url}\" width=\"{$prvw_size[0]}\" height=\"{$prvw_size[1]}\">"; } else { diff --git a/lib/ShowThreadPc.php b/lib/ShowThreadPc.php index 188602a8b..c912290d8 100644 --- a/lib/ShowThreadPc.php +++ b/lib/ShowThreadPc.php @@ -1718,18 +1718,16 @@ public function plugin_replaceImageUrl($url, $purl, $str) } // �I���W�i�����L���b�V������Ă���Ƃ��͉摜�𒼐ړǂݍ��� - $_img_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime); - if (file_exists($_img_url)) { - $img_url = $_img_url; + if (file_exists($this->thumbnailer->srcPath($icdb->size, $icdb->md5, $icdb->mime))) { + $img_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime); $cached = true; } else { $cached = false; } // �T���l�C�����쐬����Ă��Ă���Ƃ��͉摜�𒼐ړǂݍ��� - $_thumb_url = $this->thumbnailer->thumbUrl($icdb->size, $icdb->md5, $icdb->mime); - if (file_exists($_thumb_url)) { - $thumb_url = $_thumb_url; + if (file_exists($this->thumbnailer->thumbPath($icdb->size, $icdb->md5, $icdb->mime))) { + $thumb_url = $this->thumbnailer->thumbUrl($icdb->size, $icdb->md5, $icdb->mime); // �����X���^�C�����@�\��ON�ŃX���^�C���L�^����Ă��Ȃ��Ƃ���DB���X�V if (!is_null($this->img_memo) && strpos($icdb->memo, $this->img_memo) === false){ $update = new ImageCache2_DataObject_Images(); From b36f011203aab8ff18a2a9e3419fd4cafa0f6b83 Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Sat, 18 Apr 2015 03:58:26 +0900 Subject: [PATCH 147/339] =?UTF-8?q?board=20=E3=83=87=E3=82=A3=E3=83=AC?= =?UTF-8?q?=E3=82=AF=E3=83=88=E3=83=AA=E3=81=8C=E3=81=AA=E3=81=84=E5=A0=B4?= =?UTF-8?q?=E5=90=88=E3=81=AF=E8=87=AA=E5=8B=95=E7=94=9F=E6=88=90=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/BrdCtl.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/BrdCtl.php b/lib/BrdCtl.php index 51f8a1288..75cb87a1c 100644 --- a/lib/BrdCtl.php +++ b/lib/BrdCtl.php @@ -34,6 +34,16 @@ static public function read_brd_dir() $brd_menus = array(); $brd_dir = $_conf['data_dir'] . '/board'; + // �f�B���N�g�����Ȃ��ꍇ�͐V�K�ō쐬 + if (!file_exists($brd_dir)) { + FileCtl::mkdirRecursive($brd_dir); + if(!is_writable($brd_dir)){ + // �������݌����𓾂��Ȃ������ꍇ�̓p�[�~�b�V�����̒��ӊ��N������ + p2die("�e�f�B���N�g���̃p�[�~�b�V�������������ĉ������B"); + } + return $brd_menus; + } + if ($cdir = @dir($brd_dir)) { // �f�B���N�g������ while ($entry = $cdir->read()) { From 1706922203e6908c8fd40a348aa6f6ddf958d59a Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Sat, 18 Apr 2015 03:59:34 +0900 Subject: [PATCH 148/339] =?UTF-8?q?=E3=83=87=E3=82=A3=E3=83=AC=E3=82=AF?= =?UTF-8?q?=E3=83=88=E3=83=AA=E7=94=9F=E6=88=90=E3=82=92=20FileCtl::mkdirR?= =?UTF-8?q?ecursive=20=E3=81=A7=E8=A1=8C=E3=81=86=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 2 +- lib/expack/ImageCache2/Thumbnailer.php | 4 ++-- rep2/ic2.php | 2 +- rep2/ic2_setter.php | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/P2Util.php b/lib/P2Util.php index cac9eff38..7db67940d 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -320,7 +320,7 @@ static public function checkDirWritable($aDir) */ if (is_dir(dirname(realpath($aDir))) && is_writable(dirname(realpath($aDir)))) { //$info_msg_ht .= "�f�B���N�g���̎����쐬�����݂܂�...<br>"; - if (mkdir($aDir)) { + if (FileCtl::mkdirRecursive($aDir)) { //$info_msg_ht .= "�f�B���N�g���̎����쐬���������܂����B"; } else { //$info_msg_ht .= "�f�B���N�g���������쐬�ł��܂���ł����B<br>�蓮�Ńf�B���N�g�����쐬���A�p�[�~�b�V������ݒ肵�ĉ������B"; diff --git a/lib/expack/ImageCache2/Thumbnailer.php b/lib/expack/ImageCache2/Thumbnailer.php index 7d401482c..2e3ca186c 100644 --- a/lib/expack/ImageCache2/Thumbnailer.php +++ b/lib/expack/ImageCache2/Thumbnailer.php @@ -275,7 +275,7 @@ public function convert($size, $md5, $mime, $width, $height, return $thumbUrl; } $thumbDir = dirname($thumbPath); - if (!is_dir($thumbDir) && !mkdir($thumbDir)) { + if (!is_dir($thumbDir) && !FileCtl::mkdirRecursive($thumbDir)) { $error = PEAR::raiseError("�f�B���N�g�����쐬�ł��܂���ł����B({$thumbDir})"); return $error; } @@ -563,7 +563,7 @@ public function getSubDir($basedir, $size, $md5, $mime, $fullPath = false) $dirID = $this->dirID($size, $md5, $mime); if ($fullPath) { if (!is_dir($basedir)) { - if (!mkdir($basedir)) { + if (!FileCtl::mkdirRecursive($basedir)) { return false; } } diff --git a/rep2/ic2.php b/rep2/ic2.php index 0f0271c54..6335a1161 100644 --- a/rep2/ic2.php +++ b/rep2/ic2.php @@ -475,7 +475,7 @@ public function __destruct() $newfile = $thumbnailer->srcPath($size, $md5, $mime); $newurl = $thumbnailer->srcUrl($size, $md5, $mime); $newdir = dirname($newfile); -if (!is_dir($newdir) && !@mkdir($newdir)) { +if (!is_dir($newdir) && !FileCtl::mkdirRecursive($newdir)) { ic2_error('x02', "�f�B���N�g�����쐬�ł��܂���ł����B({$newdir})"); } if (($force || !file_exists($newfile)) && !@rename($tmpfile, $newfile)) { diff --git a/rep2/ic2_setter.php b/rep2/ic2_setter.php index 83f48a86f..e07d3baa8 100644 --- a/rep2/ic2_setter.php +++ b/rep2/ic2_setter.php @@ -353,7 +353,7 @@ function ic2_register_uploaded_file($file) // ���o�^�̉摜�������Ƃ� } else { $newdir = dirname($file['img_src']); - if (!is_dir($newdir) && !@mkdir($newdir)) { + if (!is_dir($newdir) && !FileCtl::mkdirRecursive($newdir)) { return sprintf($err_fmt['dir'], $file['path'], $newdir); } if (!@move_uploaded_file($file['tmp_name'], $file['img_src'])) { From 40b066cf13ba76e599c9c642fe82ea803c1b5528 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sat, 18 Apr 2015 11:42:09 +0900 Subject: [PATCH 149/339] v150418.1111 --- conf/conf.inc.php | 2 +- doc/README-774.txt | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 16364152c..a031aa320 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150414.2333', // rep2�̃o�[�W���� + 'p2version' => '150418.1111', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/doc/README-774.txt b/doc/README-774.txt index dd84329c7..78fcaeae8 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -10,15 +10,33 @@ rep2-expack test https://github.com/orzisun/p2-php ����ȋ@�\ +### �ݒ�̒lj� * �u���[�U�[�ݒ�ҏW�v����+live�����N�̕\���ݒ��ύX�”\ * �����‚̃X���ꗗ����X�����J�����Ƃ��Ɏ����I�Ɏ������[�h�ŃX�����J���ݒ��lj� * 3�y�C���\���̔z�u��ύX�ł���ݒ��lj� * �X���b�h�^�C�g�����璘�쌠�\�L���폜����ݒ��lj� -* ���[�J���ˆꗗ�p.brd�t�@�C���̒u���ꏊ��rep2/board����$_conf['data_dir']/brard�ɕύX + +### �V�@�\ * cron�Ƃ��ōŋߓǂ񂾃X���Ȃǂ�dat��DL�o����X�N���v�g�lj� -* �{�Ƃ���be�̃��O�C���������ڐA����BE2.0�ɑΉ� + - scripts/fetch-dat.php --mode ���[�h����Žw��(fav recent res_hist) * ���������ߌ��ɂȂ�‚ɖ������ŏ������ނƂ��Ɍx�����o���@�\��lj� * NG���ځ[��̑ΏۂɂȂ������X��ID�������I��NG���ځ[�񂷂�@�\��lj� + - NG���ځ[��̏������폜�����ꍇ�͎���NG���ځ[��̃f�[�^�������Ȃ��Ɣ��f����܂��� + - ����NG���ځ[��̃f�[�^�͎蓮NG���ځ[��ƓƗ����Ă���A����NG���ځ[��ON�̎������ǂݍ��܂�܂��B +* �u�ݒ�Ǘ��v����L���b�V���E�����̏����ł���@�\��lj� +* �{�Ƃ���be�̃��O�C���������ڐA����BE2.0�ɑΉ� +* rep2�ɓo�^���ꂽ�O���‚փ����N����@�\��lj� +* 0�����˂�X�N���v�g���g�p�����O���‚̉ߋ����ODAT����荞�ݑΉ� + +### �d�l�ύX +* ���[�J���ˆꗗ�p.brd�t�@�C���̒u���ꏊ��rep2/board����$_conf['data_dir']/brard�ɕύX + - openJane�Ɠ����`���ł��B +* �X�}�z�p��ʂ̃c�[���o�[�A�C�R�������𑜓x��ʂɑΉ�(thx https://github.com/dgg712/p2-php) +* �X�}�z�p���X�|�b�v�A�b�v�ASPM�AIC2�̊O�����^�b�v����ƕ‚���悤�ɕύX + - ���X�|�b�v�A�b�v����J�������X�|�b�v�A�b�v���^�b�v�����ۂɌ��̃��X�|�b�v�A�b�v��������͎̂d�l�Ƃ����Ă��������܂��B + - �X�N���[���͎w�̏I���_���|�b�v�A�b�v���ɂȂ�悤�ɂ���Ώ����܂���B +* headline.2ch.net���ŋߓǂ񂾃X���ɒNjL���Ȃ��悤�ɕύX + * ���̑������̃A���ɍ��킹���C����git�̃R�~�b�g���O���m�F���Ă��������B ���Ɛ� @@ -38,6 +56,17 @@ rep2-expack test https://github.com/orzisun/p2-php �{��p2�Ɠ������AX11���C�Z���X�ł��B ��ChangeLog +150418.1111 +* �X�}�z�p��ʂ̃c�[���o�[�A�C�R�������𑜓x��ʂɑΉ�(thx https://github.com/dgg712/p2-php) +* rep2�ɓo�^���ꂽ�O���‚փ����N����@�\��lj� +* 0�����˂�X�N���v�g���g�p�����O���‚̉ߋ����ODAT����荞�ݑΉ� +* headline.2ch.net���ŋߓǂ񂾃X���ɒNjL���Ȃ��悤�ɕύX +* Firefox�ŃX�}�z�p�\���������s����C�� +* �X�}�z�pIC2�̃|�b�v�A�b�v�Ŋ��ɐݒ�ς݂̐����^�b�v�����ۂɃG���[���o���Ȃ��悤�ɕύX +* �X�}�z�pIC2�̃|�b�v�A�b�v�ɕ\�������URL�������N�ɕύX(thx http://anago.2ch.net/test/read.cgi/software/1426940268/711) +* �X�}�z�pIC2�ʼn摜�\�����_�u���^�b�v����ƕ‚���悤�ɕύX(txh http://anago.2ch.net/test/read.cgi/software/1426940268/711) +* �X�}�z�p���X�|�b�v�A�b�v�ASPM�AIC2�̊O�����^�b�v����ƕ‚���悤�ɕύX + 150414.2333 * �X�}�z�pread�ɏ������݃t�H�[����lj� * �X�}�z�p��ʂ̃f�U�C����ύX From 8e278fde5652e274a23f90650d906f1152042c8f Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sat, 18 Apr 2015 23:11:21 +0900 Subject: [PATCH 150/339] =?UTF-8?q?=E5=B7=A6=E4=B8=8A=E6=88=BB=E3=82=8B?= =?UTF-8?q?=E3=83=9C=E3=82=BF=E3=83=B3=E3=82=92=E9=AB=98=E8=A7=A3=E5=83=8F?= =?UTF-8?q?=E5=BA=A6=E5=AF=BE=E5=BF=9C=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/css/iphone.css | 3 +++ rep2/iui/backButton.png | Bin 472 -> 289 bytes rep2/iui/backButton@2x.png | Bin 0 -> 434 bytes rep2/iui/backButton@3x.png | Bin 0 -> 553 bytes rep2/iui/iui.css | 3 +++ 5 files changed, 6 insertions(+) create mode 100644 rep2/iui/backButton@2x.png create mode 100644 rep2/iui/backButton@3x.png diff --git a/rep2/css/iphone.css b/rep2/css/iphone.css index 67980ddc1..9eb858acc 100644 --- a/rep2/css/iphone.css +++ b/rep2/css/iphone.css @@ -63,6 +63,9 @@ a#backButton { /* background: #333; border-radius: 5px; min-width:46px; text-align:center */ background: none; -webkit-border-image: url(../iui/backButton.png?14011419) 0 8 0 14; + border-image: url(../iui/backButton.png?14011419) 0 8 0 14 fill; + -webkit-border-image: -webkit-image-set(url(../iui/backButton.png?14011419) 1x,url(../iui/backButton@2x.png?14011419) 2x,url(../iui/backButton@3x.png?14011419) 3x) 0 8 0 14; + border-image: image-set(url(../iui/backButton.png?14011419) 1x,url(../iui/backButton@2x.png?14011419) 2x,url(../iui/backButton@3x.png?14011419) 3x) 0 8 0 14; } div#toolbar_header { diff --git a/rep2/iui/backButton.png b/rep2/iui/backButton.png index 224da72080a65b64b9ba9c42d3175005e9d17141..2a3ec6d8a6d1bc842847b2c3349c0b5135321394 100644 GIT binary patch delta 273 zcmcb?ypU;vWIZzj14EOE_!}T4S>hT|5}cn_Ql40p%HWuipOmWLnVXoN8kCxtQdxL1 z)dr|YJ-{c#_1(L7-@bkO^5x6VpFcl-{P_3p-wz)?{QLLs*RNmi-@pI;`}f<oZ~y=Q z|MN{|8c+*wNswPKkP8P4wl9?0fD+}NF7=Kf6}Prbv1Dpc;9;@cGyVVmaMq)fZXOB| z3HCXmw(tYjePgX4GjHpZ=L)$KVoicx<V;e#aa&b7>=@I{b4)j<t8U`&PLVzhLfYJ^ z`QI8g>Akjy*c(~@?98EA8>h-@PxiaER(92?l@iwT>vyPL>y^5$d4OTb1S`Rwjzz~9 R7`PZ1JYD@<);T3K0RVTlhuZ)E delta 457 zcmV;)0XF`j0@wqP8Gi-<006b>=iUGS010qNS#tmY3labT3lag+-G2N400D|gL_t(o zh1HnBQNlnJhCgTkI?xWV1L=TtV4UF&-rf;z@1|5>>>zX?9cTyIfp*}*9|%L(#6z;{ zciKOb!#A1t-fng<pU?R(4FB@7yBF@BcjVGYYgtL&0jsWLntx~|>+Uzev*K5GI$;`R z-F*y{ir+xisZoG7U$z9Uw9d`!qdT22L0NZy0&W#IW>$vY@0yFU?w$b)#hsZg`%$_~ zt*jcVP>foqRnBD9Pz5m3qs+{rO@JzOU$y`yTCdIQwKtmvPGsGE3Ct9?X140xD8ND1 z-KW5#;wO+t@P7$11aS9jj)NZ(s?#d_FI#eKs0TB9i{uleuEC~#OSEM#oAEnO0cP3| zl4A&<{k|$#sE(83PzIW(YsC?#4VMHbHLJP0Rh;M`lMHnYmILovFEoFX;7nHYHRsrH zWh(Vsd+O4h-5&{)so#s|Su-nujbak@8~jtyfqSR8h(bMo+x&x7H;kzBw^3FNH&u*U zzpd^K)NuET<L-3Aw7!v1!@UskMrQDzF6Mp!O0jRlU5e=@00000NkvXXu0mjf<TcsW diff --git a/rep2/iui/backButton@2x.png b/rep2/iui/backButton@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..80b0711f4dc5d469fe3759f1fd57447687cb6e5a GIT binary patch literal 434 zcmeAS@N?(olHy`uVBq!ia0vp^VL)ud!3-o%Ki~TkNJ*BsMwA5Sr<If^7Ns&crsOB3 zDtP85rl$s_CZ<#to=mj?Dl!Q0332`R@88FdAK$%u_x=0#_wV2T{{8#cuV3H3ef#w3 z)6btjzkK=f_wU~yKYo1p@Zs&-xBvhD54hj`2dGz|B*-rq$VCPW50qmifpUL5T^vIy zZe6+IDRf9d#5K@Eq(|xI|2$I@ui$g<yr=3s;OpbCpAoz1%*>l-ZyiXFtyw?y+^nZ3 zqO7v}vv>-wEq}$k&3D7cq#HSHz2OzjsW(LLZD)Bi$2DQO4zqQt<PF2>^n~^|YzM#H zWM{pdK3^nf`qPBlIvlrCJa4FZAFA7|@kaghp=&xk(VGo&PF~tz*?oAK4*%>;a_ymM zt{jWz`)oZJQqTTQPQFh{-7;%~WTw@zwNE6LSMu6k=@s8KJ?4eZdO@Fshclk5ES5c4 zeeA{>sZXx+Ri<9Qbo0>bmpKnhzr1#T7W=?Iv+etL<D>g+R;Ao)NO$EA`!cg(?Q{la ZhNGP7iz25^oeK;H22WQ%mvv4FO#qn2+rj_< literal 0 HcmV?d00001 diff --git a/rep2/iui/backButton@3x.png b/rep2/iui/backButton@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..ecf6af7706bcabb8ddb666cb48110eeab6ef19ae GIT binary patch literal 553 zcmV+^0@nSBP)<h;3K|Lk000e1NJLTq004mi003GD0{{R3sE5Ul0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUyEl^BUMgIQ&?(XjP_V)Yx`|<Jd`1ttn z@bLQj`t$Si_xJbx{r&Rt^6&5O?d|RV|Nj-2tDFD;01tFhPE-H?|NsC0|NsC0|NsC0 z0My)=p#T5@cS%G+RCwC#+S`tTFc?MQ3e2HudH=`N$f1C3#~b(B$>_B)U&0c~--eO? zgpc5F!8vx_nH2P=bpL#Dg75&O)MJ8S0;G--bTi<cm!T>6SpeTq2TKI$)I)+na1EM* zHG*I0j+7$^j6f4XOQ4CMArM7S7pNkr3S<#f1+oZg0$l_ZfiQxyKp8<<pp2j>kVa4v zXd@^H#1Rw(;s~Av>Ij|$@(7LseFR5=K7xY)h+r=uBG?I#2zCM_f~|mwU?YGc$O0;Y zETAG-1y}@&fQw)jfDz0BFoH=C!3ZY707l><;I9H-qQSqBzatskl?|Ru22W>xg<`Nu zGgzq_tk(HA7K67ogEv=$w|9PmVKBupm}D7D^Z1FT!Bp2^vTZQk=XW>^c6khTx(s&v z_#Mwp3KvR{Q;3vcO(9Xc|2c&#bOJ(_!b>M%A|=qI@Y;!}cc#$(=}4an8^;TMGHwi4 r`g9<FLh}9v`jjZOKKNgPn*aj<C<AX&)3u4P00000NkvXXu0mjf4jlcL literal 0 HcmV?d00001 diff --git a/rep2/iui/iui.css b/rep2/iui/iui.css index aab8d84f1..b5fd14da1 100644 --- a/rep2/iui/iui.css +++ b/rep2/iui/iui.css @@ -123,6 +123,9 @@ body[orient="landscape"] > .toolbar > h1 { font-family: Helvetica; border-width: 0 8px 0 14px; -webkit-border-image: url(backButton.png) 0 8 0 14; + border-image: url(backButton.png) 0 8 0 14 fill; + -webkit-border-image: -webkit-image-set(url(backButton.png) 1x,url(backButton@2x.png) 2x,url(backButton@3x.png) 3x) 0 8 0 14; + border-image: image-set(url(backButton.png) 1x,url(backButton@2x.png) 2x,url(backButton@3x.png) 3x) 0 8 0 14; } .whiteButton, From a54713afb2fc7a9666b9346fdc65314c9f0a6c70 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Mon, 20 Apr 2015 22:46:26 +0900 Subject: [PATCH 151/339] =?UTF-8?q?=E3=82=AC=E3=83=A9=E3=82=B1=E3=83=BC?= =?UTF-8?q?=E5=90=91=E3=81=91read=E3=81=AEsyntax=20error=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=20=E3=82=AD=E3=83=A3=E3=83=83=E3=82=B7=E3=83=A5=E5=89=8A?= =?UTF-8?q?=E9=99=A4=E3=81=AB=E6=9D=BF=E4=B8=80=E8=A6=A7=E3=81=AE=E5=89=8A?= =?UTF-8?q?=E9=99=A4=E6=A9=9F=E8=83=BD=E8=BF=BD=E5=8A=A0=20=E6=88=BB?= =?UTF-8?q?=E3=82=8B=E3=83=9C=E3=82=BF=E3=83=B3=E3=81=AE=E7=94=BB=E5=83=8F?= =?UTF-8?q?=E7=B8=AE=E5=B0=8F=E3=81=AB=E5=95=8F=E9=A1=8C=E3=81=8C=E3=81=82?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=81=AE=E3=81=A7=E4=BD=9C=E3=82=8A=E7=9B=B4?= =?UTF-8?q?=E3=81=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ShowThreadK.php | 2 +- rep2/editpref.php | 60 +++++++++++++++++++------------------ rep2/iui/backButton.png | Bin 289 -> 387 bytes rep2/iui/backButton@2x.png | Bin 434 -> 689 bytes rep2/iui/backButton@3x.png | Bin 553 -> 823 bytes rep2/js/editpref.js | 11 +++++++ 6 files changed, 43 insertions(+), 30 deletions(-) diff --git a/lib/ShowThreadK.php b/lib/ShowThreadK.php index 6684d8e89..0a414cc4b 100644 --- a/lib/ShowThreadK.php +++ b/lib/ShowThreadK.php @@ -1101,7 +1101,7 @@ public function plugin_replaceImageUrl($url, $purl, $str) } // �I���W�i���̗L�����m�F - $_src_url = ; + $_src_url = ''; if (file_exists($this->thumbnailer->srcPath($icdb->size, $icdb->md5, $icdb->mime))) { $src_exists = true; $img_url = $img_url2 . $icdb->id; diff --git a/rep2/editpref.php b/rep2/editpref.php index 20effc447..88ac7d8dd 100644 --- a/rep2/editpref.php +++ b/rep2/editpref.php @@ -7,6 +7,15 @@ $_login->authorize(); // ���[�U�F�� +$deltitles = array( + 'cookie' => 'Ccookie', + 'matome' => '�V���܂Ƃߓǂ�', + 'recent' => '�ŋߓǂ񂾃X��', + 'reshist' => '�������ݗ���', + 'autong' => '���� NG�E���ځ[��', + 'boardlist' => '�ˆꗗ (Online)', +); + // {{{ �z�X�g�̓����p�ݒ� $synctitles = array( @@ -117,15 +126,23 @@ $delflag = true; } break; + case boardlist: + $cachefile = P2Util::cacheFileForDL($_conf['brdfile_online']); + if(deleteFile($_conf['cache_dir'] . '/host_bbs_map.txt') && + deleteFile($cachefile) && + deleteFile($cachefile . '.p2.brd') ) { + $delflag = true; + } + break; default: $delflag = false; P2Util::pushInfoHtml("<p>p2 error: ���� {$_POST['delete']} ���s���ł��B "); break; } if ($delflag) { - P2Util::pushInfoHtml("<p>p2 info: {$_POST['submit']}���폜���܂����B"); + P2Util::pushInfoHtml("<p>p2 info: {$deltitles[$_POST['delete']]}���폜���܂����B"); } else { - P2Util::pushInfoHtml("<p>p2 error: {$_POST['submit']}�̍폜�Ɏ��s���܂����B"); + P2Util::pushInfoHtml("<p>p2 error: {$deltitles[$_POST['delete']]}�̍폜�Ɏ��s���܂����B"); } } @@ -174,7 +191,8 @@ echo <<<EOP <link rel="stylesheet" type="text/css" href="css.php?css=style&skin={$skin_en}"> <link rel="stylesheet" type="text/css" href="css.php?css=editpref&skin={$skin_en}"> - <link rel="shortcut icon" type="image/x-icon" href="favicon.ico">\n + <link rel="shortcut icon" type="image/x-icon" href="favicon.ico"> + <script type="text/javascript" src="js/jquery-{$_conf['jquery_version']}.min.js"></script> <script type="text/javascript" src="js/basic.js?{$_conf['p2_version_id']}"></script> <script type="text/javascript" src="js/changeskin.js?{$_conf['p2_version_id']}"></script> <script type="text/javascript" src="js/respopup.js?{$_conf['p2_version_id']}"></script> @@ -330,25 +348,8 @@ echo <<<EOP <fieldset> <legend>�����E�L���b�V���̍폜</legend>\n -<script type="text/javascript"> -//<![CDATA[ -function deleteCheck(submit){ - if(window.confirm(submit + '��S�č폜���Ă�낵���ł����H')){ - return true; - } - else{ - return false; // ���M�𒆎~ - } -} -//]]> -</script> - EOP; - echo getDeleteHistoryFormHt('cookie', 'Cookie'); - echo getDeleteHistoryFormHt('matome', '�܂Ƃߓǂ�'); - echo getDeleteHistoryFormHt('reshist', '��������'); - echo getDeleteHistoryFormHt('recent', '�{������'); - echo getDeleteHistoryFormHt('autong', '����NG��ް�'); + echo getDeleteHistoryFormHt(); echo <<<EOP </fieldset>\n EOP; @@ -678,21 +679,22 @@ function getSyncFavoritesFormHt($path_value, $submit_value) /** * �����폜�p�t�H�[����HTML���擾���� * - * @param string $path_value �폜����t�@�C���̎�� - * @param string $submit_value submit�{�^���̒l * @return string */ -function getDeleteHistoryFormHt($path_value, $submit_value) +function getDeleteHistoryFormHt() { - global $_conf; + global $_conf, $deltitles; $ht = <<<EOFORM -<form action="editpref.php" method="POST" target="_self" class="inline-form" onSubmit="return deleteCheck('{$submit_value}')"> +<form action="editpref.php" method="POST" target="_self" class="inline-form" onSubmit="return deleteCheck()"> {$_conf['k_input_ht']} - <input type="hidden" name="delete" value="{$path_value}"> - <input type="submit" name="submit" value="{$submit_value}"> -</form>\n + EOFORM; + $ht .= "<select name=\"delete\">"; + foreach ($deltitles as $delmode => $delname) { + $ht .= "<option value=\"{$delmode}\">{$delname}</option>"; + } + $ht .= "</select><input type=\"submit\" name=\"submit\" value=\"�폜\"></form>\n"; if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) { $ht = ' ' . preg_replace('/>\s+</', '><', $ht); diff --git a/rep2/iui/backButton.png b/rep2/iui/backButton.png index 2a3ec6d8a6d1bc842847b2c3349c0b5135321394..0385981c54fbad6f5d2ad0e682dbe77129e6615f 100644 GIT binary patch delta 336 zcmV-W0k8g{0)qpP83+ad006b>=iZSaCw~DYNkl<Zc-qvM!3qIU7=?#yrOd)Zu$l#V z0xw}9p)72qD8)*MEZDL24jw_2S$PSIQSt!e+&T+QMzfnUQ(yDnx{I&BGylC!%J+RM zDNn}pyr_E{U;y^EZExd{O-I~U1xBz4YH@WoifqAj6J)^?Oq6BUpu~CvZmP09P=9BA zAeN%6$?1%>%dT3Avca6T`IeLo=G0Y~vuX95{*#r<X_%~JPQzp+bNWkGHm5<^K3H;n z<z>ZEl}*fJWH(^Qb(z_f?(7a6S+|LF3`|z<tQWvhmVJN@c!NAALSFd;JA*N6haHxl z2D14L8(ot54U?73@4rJKnBSH92|f0m-zMm)AGhE6or8+9tjTW+yg&|2)h{v^UL#G1 iPjShnlJsNlBftP9CPXq~7uMGR0000<MNUMnLSTabPo3!i delta 237 zcmZo>UdS{-l7pFnfuYGn{LMr~^?C;N0G|-ockkYP`}Xb2moGnm{`~my<KMr3KYaM` z@87>)zka=c|Ni&y-*4Z({r~^}&o`NAK)t*rL4LtNE*vn}zEEldN|bxLIEGZ*+A_tG zsX>8<#d6Q||NFyPk50OIC`2UK=Y-nA4_x<+wSvsNty7*W<W7h+35t4=GfC~nZB^;8 zV@x;CG2NW5x{1F#Mfx-dX>+IMe{0yJ_u3+2Z)E+mGlynvoGPn5+3(s~*;S`jN?6aY i-=TV~SL(Xv0fr?LtOR>H799h+fx*+&&t;ucLK6THK6{}6 diff --git a/rep2/iui/backButton@2x.png b/rep2/iui/backButton@2x.png index 80b0711f4dc5d469fe3759f1fd57447687cb6e5a..04cf254d932aebf29f038b358f2aa703acde3350 100644 GIT binary patch delta 640 zcmV-`0)PFo1F;2=83+ad008_sP0NuXCw~G{Nkl<Zc-rioJt#$C9LCR;A{pGS7-STa zK`a&}gU!N(g~dmrd~~z;7$hI1gljNUl)Ev=XkjvuQ5N0XH7O<6bMjZW+k43Sp8ufp zJoOvy``(WFb?*N@=eV6%KA-oP@Drn0MX}jzHtgeefk99PjzBt*NJL6(slqWkz<(*I zl-GS=031e1Y)Qz+s{{K5QosL3chp8fNyuma7HBl=ol&fPW<alDJtcFNVlBU{77gpy zU_OeiAPlkfU{@MIVKQJG<S5oIo1nq4o|H4zqu9S^PU=)~4g`;4|DH~;5HMGhQNQxC z6<a5BwW4S}Cv!DJvElaB`6$m-SAVfT_0<%W+KFXfRS?U*sw9?uRY5HKs)AVdRRyu^ zs|sS-SCz!FuPTUTUsVvxzN#daeN{m$`>KLi_EiP3tzd_JHGHuXpvka5%ekt1uYj=> zyAAFP`|F^Mn(W2i$Si#=+K<cZt)?pbQE&;C4Da#J*j1`>o3U%)*zmq#fq!xM@|p$@ zhV@m>TQ{+fU<|w!tyjyujZ>R_-MaA1cengAc7@v9dh7-`F|3aWjHTFjFa_=ndn=r` zZdYDUGH=;$6)tJnZx!zqu-__)WxrJv%YLgQmi<;yEc>mZSoT{bvA^|O|5q}#6l<TL ze%s=G{WgJO9TL=U`@OG!P;FAILxTG4GH9n*`vmpdDzFD?DAqnf{kB=^8O1up7ifAe zf&XlnA&Rw+-)|?utzoZ&V%_o#M!`$L+6Op~nplme7+rxL`S_R1ct}T0EFWk_vHvTd a0t^5lJ&=j|7q3JB0000<MNUMnLSTY-W;;9p delta 383 zcmV-_0f7Fo1+oK>83+Ra007J9z4?(LCw~AiP)t-s{{H^)@$v5N?)Ufi@9*#X`}_L( z`u6tr^78We`T6wp^!@$)`1ttn@bK;J?f?J(P~VIE0000GbW%=J|NsC0|NsC0|NsC0 z|Ns90;3Hib0002|Nkl<Zc-qw1NfN>!6h%=;6pSL-|86xjN>k46OO-6(4vq*vn15Ze z%$eEE+Q4UBe6N+xn&rq^I%|(=3~<(`>J7F{u<>HpY=(_jc!Oow72dZ5?3_hlrz`_I zWf|BpduL#W>;}R1*#`yNXP*>om*rsFEC}0VN!TV!!hW+T>?g~@)+`KLvoLJQ(y%#; z!=@|`o3b8<Rc1v9qMuB)!Bl?-?ra_(jv6O9YOon;I>xQ!7^is+J=BdCx|dw&EUytv zp~GnBB%>Y4d&bzT8uCS-B$e0F*~07TY~gkE>qq8Y;7@6W_xCf!zdWjB-hgLC4_5S< dfUTDR0|3PdC!$%Em7M?p002ovPDHLkV1h~H&=UXv diff --git a/rep2/iui/backButton@3x.png b/rep2/iui/backButton@3x.png index ecf6af7706bcabb8ddb666cb48110eeab6ef19ae..689bc997072b389418674520bf3f17d1e366355e 100644 GIT binary patch delta 775 zcmZ3<vYl;$BnKM<1H=4C(>)Uv)$5sVdb&7<RNQ(q=YQrQ2Z^@Hml(OM8kDc_mNdO$ zJIhwuT*kE9@veh)qwGRy6XqZ7(l_2eU~*LH++S3F|N9;V!R&=k<o12vDWYdD!za0M zE_)s$Bhw_?u>4Op{GZt0l<l4vllH0Vll<DY!-+5N1%&=pS)W(J!NJmyzB4DAAw;vD zrA1Ugquqg_fct+rQ-jvyg9#r_3%x9BDrIJvxt?Q@DAP=)_eC?e)T~XZoN}#^!Qi9Z zg(>lcO@@983WO^7BevJ%zCSWy>BVUFT)79ECTKPYWVI|<%)TR?MSGg-LgA9H43)mD zO|@Sc{T8q^@ttSZ;-4XRok8HmN@kk_Ml2N#^&hQvTwz|ptSS)mn9*Uua=s4?rv)A` z9((;jOwK`8h3DW}8wQR`>!7NEinp={uy;BZ@bfb?eR;*ezk!EQE@2PfyO)et9GL{} z+-7c2=(Re)tmE9kF0sCOpG|{Rhe(s1Ed$4+wQw^y9s(7+2()}+Q0S;%4YyHY3()9B z#g2nOGiqcXFiumPp!uPV-GDRBs^UOXbXs<|2anT-yPsmqf4!I#y{x``!`la}uJLgP z-YNLVp7|@bLDRcl&F~^eWBm`~{GYPhTmO7IFVf*=C?Zhz<Wr-(L}^o1(g)@_3V*}| z?Kki-)-kaBVDzh>;QEl=!jWY%gFOS&9|jJP0w((doJzBSvH}m-9U9~xur&T*Q17S^ z0`nLc>l%c=ya4J^Lelf#98grng7X8j!j2>S*M2nK^Sp4C-_1`XlC9ORpizEDv%Xy+ z(_VoROQz$gH8o6J0xEIr>AxJ?O5`=#80;7Dt^36M%0Zna{U@V<#wuo@L;QX^-qy@G z$DgLtAH-q9vF@|Etb;<7;s?zqp=N(-4u8^UU+|25`M--H1tse)-E}<N_i*dB<O28S p({cov9UN9LGqD^g`o}84a7|UiWUV>xN??*_@O1TaS?83{1OWD!I4%GH delta 503 zcmV<T0SNxL2B`#)83+Ra005|m#g367Cw~AfP)t-s{{H^%?(X*X_WS$$@$vEa`1tVf z@cR1t^Yiof_xJt%{qpki@9*#J?d|{n{}q?3oB#j-4|GyaQ~&?}|NsC0|NsC0|Ns90 z)ZCb%0004ZNkl<Zc-rjR+m3=T7)9X<%%N&||HswHp@4128~57D=(RCl!V=2ghJTU% zgpc5F!8vx_nH2P=bpL#Dg75&O)MJ8S0;G--bTi<cm!T>6SpeTq2TKI$)I)+na1EM* zHG*I0j+7$^j6f4XOQ4CMArM7S7pNkr3S<#f1+oZg0$l_ZfiQxyKp8<<pp2j>kVa4v zXd@^H#1Rw(;s~Av>Ij|$@(7LseSZW;fj)wR0El2OAR^cakO+1HB!aDgiC`muBFF+N zf-ImSSOr)Fi-3z@7Jw1V0x*I}5Wxs0!2m|!BH*tAU!uXkk-sAu+?5TUOa@P9euZMN zN;6og8m!j&Hx`4pHiI`;gSU5nf?+VlF_>f-O!N4OromL#V6ts6-RE~W3}kkB40gH< zcKi4p&rJ#!N{~~ClweIEQM>;+g)4LdLYBfyCt)Hb(4_F%iKus`(EjO2p9&kt3w<(f t3|IPeAb&#g{ssD!D78NLUxJ$e0{|!kZ&K5>iLd|w002ovPDHLkV1mzY@)ZC8 diff --git a/rep2/js/editpref.js b/rep2/js/editpref.js index 58ffe5f09..03f3bccd2 100644 --- a/rep2/js/editpref.js +++ b/rep2/js/editpref.js @@ -73,6 +73,17 @@ function setCacheMetaDataPopUpHeight(popup) } } +function deleteCheck() +{ + + if(window.confirm($('[name=delete] option:selected').text() + '��S�č폜���Ă�낵���ł����H')){ + return true; + } + else{ + return false; // ���M�𒆎~ + } +} + // }}} /* From 707dbcffbe018cd965d26f74b46a9f42f639d993 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sun, 26 Apr 2015 10:44:49 +0900 Subject: [PATCH 152/339] =?UTF-8?q?302=E3=81=8C=E7=99=BA=E7=94=9F=E3=81=99?= =?UTF-8?q?=E3=82=8BURL=E3=81=A7RSS=E3=83=AA=E3=83=BC=E3=83=80=E6=AD=A3?= =?UTF-8?q?=E5=B8=B8=E5=8B=95=E4=BD=9C=E3=81=97=E3=81=AA=E3=81=84=E4=B8=8D?= =?UTF-8?q?=E5=85=B7=E5=90=88=E3=82=92=E4=BF=AE=E6=AD=A3=E3=80=80fixed=20#?= =?UTF-8?q?8=20RSS=E3=83=AA=E3=83=BC=E3=83=80=E3=81=8B=E3=82=89HTTP=5FRequ?= =?UTF-8?q?est2=E3=81=AB=E5=AD=98=E5=9C=A8=E3=81=97=E3=81=AA=E3=81=84?= =?UTF-8?q?=E9=96=A2=E6=95=B0=E3=82=92=E5=91=BC=E3=81=B3=E5=87=BA=E3=81=97?= =?UTF-8?q?=E3=81=A6=E3=81=84=E3=81=9F=E9=83=A8=E5=88=86=E3=82=92=E5=89=8A?= =?UTF-8?q?=E9=99=A4=20P2Util::fileDownload=E3=81=A7If-Modified-Since?= =?UTF-8?q?=E3=82=92=E9=80=81=E4=BF=A1=E3=81=97=E3=81=AA=E3=81=84=E4=B8=8D?= =?UTF-8?q?=E5=85=B7=E5=90=88=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/NgAbornCtl.php | 2 +- lib/P2Util.php | 12 ++++++------ lib/expack/rss/parser.inc.php | 4 ++-- lib/expack/tgrep/view_k.inc.php | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/NgAbornCtl.php b/lib/NgAbornCtl.php index cee8c5e03..804020c24 100644 --- a/lib/NgAbornCtl.php +++ b/lib/NgAbornCtl.php @@ -229,7 +229,7 @@ static public function ngAbornAdd($code, $word) { 'regex' => false, // �p�^�[���}�b�`�֐� 'ignorecase' => false, // �啶���������𖳎� ); - return; + return true; } // }}} // {{{ _readNgAbornFromFile() diff --git a/lib/P2Util.php b/lib/P2Util.php index 7db67940d..b574f6519 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -255,16 +255,16 @@ static public function fileDownload($url, $localfile, { global $_conf; - if (file_exists($localfile)) { - $modified = http_date(filemtime($localfile)); - } else { - $modified = false; - } - try { // DL $req = self::getHTTPRequest2($url, HTTP_Request2::METHOD_GET); + $req->setConfig(array('follow_redirects' => $trace_redirection)); + + if (file_exists($localfile)) { + $req->setHeader ('If-Modified-Since', http_date(filemtime($localfile)) ); + } + $response = $req->send(); $code = $response->getStatus(); diff --git a/lib/expack/rss/parser.inc.php b/lib/expack/rss/parser.inc.php index 3677416bf..ab8b88557 100644 --- a/lib/expack/rss/parser.inc.php +++ b/lib/expack/rss/parser.inc.php @@ -53,11 +53,11 @@ function p2GetRSS($remotefile, $atom = 0) if (!file_exists($localpath) || $refresh || filemtime($localpath) < (time() - $_conf['expack.rss.check_interval'] * 60) ) { - $dl = P2Util::fileDownload($remotefile, $localpath, true, 301); + $dl = P2Util::fileDownload($remotefile, $localpath, true, true); } // �L���b�V�����X�V����Ȃ��������A�_�E�����[�h�����Ȃ�RSS���p�[�X - if (file_exists($localpath) && (!isset($dl) || $dl->isSuccess())) { + if (file_exists($localpath) && (!isset($dl))) { if ($atom) { $atom = (isset($dl) && $dl->getStatus() == 200) ? 2 : 1; } diff --git a/lib/expack/tgrep/view_k.inc.php b/lib/expack/tgrep/view_k.inc.php index 7b30d0be6..4334c7d18 100644 --- a/lib/expack/tgrep/view_k.inc.php +++ b/lib/expack/tgrep/view_k.inc.php @@ -116,7 +116,7 @@ $itaj = $t->ita; } ?> -<p><?php echo $o; ?>.<a href="<?php echo $turl; ?>"><?php echo $ttitle; ?></a><br> +<p><?php echo $o+1; ?>.<a href=\"<?php echo $turl; ?>\"><?php echo $ttitle; ?></a><br> <small><?php echo date('y/m/d ', $t->tkey); ?><a href="<?php echo $burl; ?>"><?php echo $itaj; ?>(<?php echo $profile['boards'][$t->bid]->hits; ?>)</a></small></p> <?php } ?> <div><a href="#top" align="right" title="���"<?php echo $_conf['k_accesskey_at']['above']; ?>><?php echo $_conf['k_accesskey_st']['above']; ?>��</a></div> From cf384241cb2d2518ced955f6450bb52c08e258aa Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sun, 26 Apr 2015 10:48:04 +0900 Subject: [PATCH 153/339] v150426.1033 --- conf/conf.inc.php | 2 +- doc/README-774.txt | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index a031aa320..4db56df99 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150418.1111', // rep2�̃o�[�W���� + 'p2version' => '150426.1033', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/doc/README-774.txt b/doc/README-774.txt index 78fcaeae8..10ea4ed9b 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -30,14 +30,15 @@ rep2-expack test https://github.com/orzisun/p2-php ### �d�l�ύX * ���[�J���ˆꗗ�p.brd�t�@�C���̒u���ꏊ��rep2/board����$_conf['data_dir']/brard�ɕύX - - openJane�Ɠ����`���ł��B + - .brd��openJane�Ɠ����`���ł��B * �X�}�z�p��ʂ̃c�[���o�[�A�C�R�������𑜓x��ʂɑΉ�(thx https://github.com/dgg712/p2-php) * �X�}�z�p���X�|�b�v�A�b�v�ASPM�AIC2�̊O�����^�b�v����ƕ‚���悤�ɕύX - ���X�|�b�v�A�b�v����J�������X�|�b�v�A�b�v���^�b�v�����ۂɌ��̃��X�|�b�v�A�b�v��������͎̂d�l�Ƃ����Ă��������܂��B - �X�N���[���͎w�̏I���_���|�b�v�A�b�v���ɂȂ�悤�ɂ���Ώ����܂���B * headline.2ch.net���ŋߓǂ񂾃X���ɒNjL���Ȃ��悤�ɕύX -* ���̑������̃A���ɍ��킹���C����git�̃R�~�b�g���O���m�F���Ă��������B +���̑������̃A���ɍ��킹���C����git�̃R�~�b�g���O���m�F���Ă��������B + ���Ɛ� @@ -56,6 +57,14 @@ rep2-expack test https://github.com/orzisun/p2-php �{��p2�Ɠ������AX11���C�Z���X�ł��B ��ChangeLog +150426.1033 +* �K���P�[����read��syntax error�C�� +* 302����������URL��RSS���[�_���퓮�삵�Ȃ��s����C�� +* RSS���[�_����HTTP_Request2�ɑ��݂��Ȃ��֐����Ăяo���Ă����������폜 +* P2Util::fileDownload��If-Modified-Since�𑗐M���Ȃ��s����C�� +* �L���b�V���폜�ɔˆꗗ�̍폜�@�\�lj� +* ����߂�{�^�������𑜓x�Ή��ɕύX + 150418.1111 * �X�}�z�p��ʂ̃c�[���o�[�A�C�R�������𑜓x��ʂɑΉ�(thx https://github.com/dgg712/p2-php) * rep2�ɓo�^���ꂽ�O���‚փ����N����@�\��lj� From a3dcfac0c21cdc13d0678ddf7c056bbbc9308640 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 30 Apr 2015 12:28:11 +0900 Subject: [PATCH 154/339] =?UTF-8?q?=E3=83=AA=E3=83=B3=E3=82=AF=E3=83=97?= =?UTF-8?q?=E3=83=A9=E3=82=B0=E3=82=A4=E3=83=B3=E3=81=8B=E3=82=89show?= =?UTF-8?q?=E3=83=9C=E3=82=BF=E3=83=B3=E3=82=92=E4=BD=BF=E3=81=84=E3=82=84?= =?UTF-8?q?=E3=81=99=E3=81=8F=E3=81=97=E3=81=9F=E3=80=82=20Youtube+?= =?UTF-8?q?=E3=83=8B=E3=82=B3=E5=8B=95=E5=AF=BE=E5=BF=9C=E3=81=AE=E5=89=8A?= =?UTF-8?q?=E9=99=A4=E3=81=AB=E5=90=91=E3=81=91=E3=81=9F=E6=BA=96=E5=82=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/wiki/WIKI-774.txt | 18 ++++++++ lib/ShowThreadPc.php | 4 +- lib/read_header.inc.php | 11 ++--- rep2/js/preview_video.js | 86 +++++++++++++---------------------- rep2/js/preview_video_half.js | 76 ------------------------------- style/read_css.inc | 10 ++-- 6 files changed, 62 insertions(+), 143 deletions(-) create mode 100644 doc/wiki/WIKI-774.txt delete mode 100755 rep2/js/preview_video_half.js diff --git a/doc/wiki/WIKI-774.txt b/doc/wiki/WIKI-774.txt new file mode 100644 index 000000000..4754fe606 --- /dev/null +++ b/doc/wiki/WIKI-774.txt @@ -0,0 +1,18 @@ +�����N�v���O�C���Ŏg����774�Ǝ��@�\ + +�� show�{�^�� +jQuery�̗͂ɂ��A�N���b�N�����iframe�ɕϐg���܂��B + +��� +Match +^(?:https?://(?:www\.|m\.)?youtube\.(?:com|jp)/(?:watch\?(?:.*&)?(?:v|video_id)=|v/)|(?:https?://youtu\.be/|https://www\.youtube-nocookie\.com/v/))([\w\-_]+)(?:.*)?$ + +Replace +<img class="preview-video-switch" src="img/show.png" alt="show" data-video_url="https://www.youtube.com/embed/\1" data-video_width="640" data-video_height="360" data-video_harf="0" data-video_option='{"allowfullscreen":"1"}'> + +data-video_url(�K�{) iframe��src���� +data-video_width(�K�{) iframe��width���� +data-video_height(�K�{) iframe��height���� +data-video_style(�I�v�V����) iframe��style���� +data-video_harf(�I�v�V����) 1�ɂ����width��height�������ɂȂ�܂� +data-video_option(�I�v�V����) Javascript�̘A�z�z��`����iframe�̒lj��������w�肵�܂��B���O�ƒl�͕K���y�A�ł���K�v������܂��B diff --git a/lib/ShowThreadPc.php b/lib/ShowThreadPc.php index c912290d8..e3a1df5d8 100644 --- a/lib/ShowThreadPc.php +++ b/lib/ShowThreadPc.php @@ -1365,7 +1365,7 @@ public function plugin_linkYouTube($url, $purl, $str) if ($_conf['link_youtube'] == 2) { return <<<EOP -{$link} <img class="preview-video-switch" src="img/show.png" width="30" height="12" alt="show" onclick="preview_video_youtube('{$id}', this);"> +{$link} <img class="preview-video-switch" src="img/show.png" alt="show" data-video_url="https://www.youtube.com/embed/{$id}" data-video_width="425" data-video_height="350" data-video_harf="{$_conf['live.youtube_winsize']}" data-video_option='{"allowfullscreen":"1"}'> EOP; } else { return <<<EOP @@ -1416,7 +1416,7 @@ public function plugin_linkNicoNico($url, $purl, $str) if ($_conf['link_niconico'] == 2) { return <<<EOP -{$link} <img class="preview-video-switch" src="img/show.png" width="30" height="12" alt="show" onclick="preview_video_niconico('{$id}', this);"> +{$link} <img class="preview-video-switch" src="img/show.png" alt="show" data-video_url="http://ext.nicovideo.jp/thumb/{$id}" data-video_width="425" data-video_height="175" data-video_harf="0" data-video_option='{"scrolling":"auto"}'> EOP; } else { return <<<EOP diff --git a/lib/read_header.inc.php b/lib/read_header.inc.php index c1aef7b33..4f05203cb 100755 --- a/lib/read_header.inc.php +++ b/lib/read_header.inc.php @@ -232,23 +232,20 @@ <script type="text/javascript" src="./js/yui-ext/yui.js"></script> <script type="text/javascript" src="./js/yui-ext/yui-ext-nogrid.js"></script> <link rel="stylesheet" type="text/css" href="./js/yui-ext/resources/css/resizable.css"> - <script type="text/javascript" src="js/{$live_view_popup}htmlpopup_resizable.js?{$_conf['p2_version_id']}"></script> + <script type="text/javascript" src="js/{$live_view_popup}htmlpopup_resizable.js?{$_conf['p2_version_id']}"></script>\n EOP; } else { echo <<<EOP - <script type="text/javascript" src="js/{$live_view_popup}htmlpopup.js?{$_conf['p2_version_id']}"></script> + <script type="text/javascript" src="js/{$live_view_popup}htmlpopup.js?{$_conf['p2_version_id']}"></script>\n EOP; } if ($_conf['link_youtube'] == 2 || $_conf['link_niconico'] == 2) { - // +live YouTube�v���r���[�\���̃T�C�Y�w�� - if ($_conf['live.youtube_winsize'] == 1) { - echo "\t<script type=\"text/javascript\" src=\"js/preview_video_half.js?{$_conf['p2_version_id']}\"></script>\n"; - } else { echo <<<EOP + <script type="text/javascript" src="js/jquery-{$_conf['jquery_version']}.min.js"></script> <script type="text/javascript" src="js/preview_video.js?{$_conf['p2_version_id']}"></script>\n EOP; - } + } if ($_conf['expack.am.enabled']) { echo <<<EOP diff --git a/rep2/js/preview_video.js b/rep2/js/preview_video.js index bdf4361ac..a2ba1a897 100644 --- a/rep2/js/preview_video.js +++ b/rep2/js/preview_video.js @@ -5,62 +5,40 @@ // {{{ preview_video_youtube() /* - * YouTube�̃v���r���[��\������ + * �v���r���[��\������ * - * @param String id - * @param Element placeholder - * @return void */ -function preview_video_youtube(id, placeholder) -{ - var container = document.createElement('div'); - container.className = 'preview-video preview-video-youtube'; - - var preview = document.createElement('iframe'); - preview.setAttribute('width', '425'); - preview.setAttribute('height', '350'); - preview.setAttribute('src', 'https://www.youtube.com/embed/' + id); - preview.setAttribute('frameborder', '0'); - preview.setAttribute('allowfullscreen',''); - container.appendChild(preview); - - if (placeholder && placeholder.parentNode) { - placeholder.parentNode.replaceChild(container, placeholder); - } else { - document.body.appendChild(container); - } -} - -// }}} -// {{{ preview_video_niconico() - -/* - * �j�R�j�R����̃v���r���[��\������ - * - * @param String id - * @param Element placeholder - * @return void - */ -function preview_video_niconico(id, placeholder) -{ - var container = document.createElement('div'); - container.className = 'preview-video preview-video-niconico'; - - var preview = document.createElement('iframe'); - preview.setAttribute('src', 'http://ext.nicovideo.jp/thumb/' + id); - preview.setAttribute('width', '425'); - preview.setAttribute('height', '175'); - preview.setAttribute('frameborder', '0'); - preview.setAttribute('scrolling', 'auto'); - - container.appendChild(preview); - - if (placeholder && placeholder.parentNode) { - placeholder.parentNode.replaceChild(container, placeholder); - } else { - document.body.appendChild(container); - } -} +$(function() { + $("img.preview-video-switch").click(function (event) { + var $container = $("<div>").addClass('preview-video preview-video-youtube'); + var $preview = $("<iframe>").attr('src', $(this).data('video_url')).attr('frameborder', '0'); + + if($(this).data('video_harf') == "1") { + $preview.attr('width', $(this).data('video_width')/2); + $preview.attr('height', $(this).data('video_height')/2); + } else { + $preview.attr('width', $(this).data('video_width')); + $preview.attr('height', $(this).data('video_height')); + } + + if($(this).data('video_style')) { + $preview.attr('style', $(this).data('video_style')); + } + + var video_option = $(this).data('video_option'); + for (var key in video_option) { + $preview.attr(key, video_option [key]); + } + + $container.append($preview); + + if ($(this) && $(this).parent()) { + $(this).replaceWith($container); + } else { + $("body").append($container); + } + }); +}); // }}} diff --git a/rep2/js/preview_video_half.js b/rep2/js/preview_video_half.js deleted file mode 100755 index c372b36cd..000000000 --- a/rep2/js/preview_video_half.js +++ /dev/null @@ -1,76 +0,0 @@ -/* - * rep2expack - �l�b�g����̃v���r���[ - */ - -// {{{ preview_video_youtube() - -/* - * YouTube�̃v���r���[��\������ - * - * @param String id - * @param Element placeholder - * @return void - */ -function preview_video_youtube(id, placeholder) -{ - var container = document.createElement('div'); - container.className = 'preview-video preview-video-youtube'; - - var preview = document.createElement('iframe'); - preview.setAttribute('width', '212'); - preview.setAttribute('height', '175'); - preview.setAttribute('src', 'https://www.youtube.com/embed/' + id); - preview.setAttribute('frameborder', '0'); - preview.setAttribute('allowfullscreen',''); - container.appendChild(preview); - - if (placeholder && placeholder.parentNode) { - placeholder.parentNode.replaceChild(container, placeholder); - } else { - document.body.appendChild(container); - } -} - -// }}} -// {{{ preview_video_niconico() - -/* - * �j�R�j�R����̃v���r���[��\������ - * - * @param String id - * @param Element placeholder - * @return void - */ -function preview_video_niconico(id, placeholder) -{ - var container = document.createElement('div'); - container.className = 'preview-video preview-video-niconico'; - - var preview = document.createElement('iframe'); - preview.setAttribute('src', 'http://ext.nicovideo.jp/thumb/' + id); - preview.setAttribute('width', '425'); - preview.setAttribute('height', '175'); - preview.setAttribute('frameborder', '0'); - preview.setAttribute('scrolling', 'auto'); - - container.appendChild(preview); - - if (placeholder && placeholder.parentNode) { - placeholder.parentNode.replaceChild(container, placeholder); - } else { - document.body.appendChild(container); - } -} - -// }}} - -/* - * Local Variables: - * mode: javascript - * coding: cp932 - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ -/* vim: set syn=javascript fenc=cp932 ai noet ts=4 sw=4 sts=4 fdm=marker: */ diff --git a/style/read_css.inc b/style/read_css.inc index e29f3f1c8..811cc2cf2 100644 --- a/style/read_css.inc +++ b/style/read_css.inc @@ -374,6 +374,8 @@ div.respopup div.reslist { .preview-video-switch { cursor: pointer; + width: 32px; + height: 12px; } /* �c�[���o�[ */ @@ -385,20 +387,20 @@ table.toolbar { table.toolbar td.lblock { text-align: left; -} +} table.toolbar td.cblock { text-align: center; -} +} table.toolbar td.rblock { text-align: right; -} +} div.reslist_inner { position:relative; // margin:0 0 0 17px; - + } blockquote.folding_container{ From e6665a5c9689c9449b3a3c277aa105921d620829 Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Fri, 1 May 2015 15:19:43 +0900 Subject: [PATCH 155/339] =?UTF-8?q?=E6=9C=AA=E4=BD=BF=E7=94=A8=E3=81=AE?= =?UTF-8?q?=E5=A4=89=E6=95=B0=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit P.S. その節は大変ご迷惑おかけしました。 --- lib/ShowThreadK.php | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/ShowThreadK.php b/lib/ShowThreadK.php index 0a414cc4b..ce0bad8a3 100644 --- a/lib/ShowThreadK.php +++ b/lib/ShowThreadK.php @@ -1101,7 +1101,6 @@ public function plugin_replaceImageUrl($url, $purl, $str) } // �I���W�i���̗L�����m�F - $_src_url = ''; if (file_exists($this->thumbnailer->srcPath($icdb->size, $icdb->md5, $icdb->mime))) { $src_exists = true; $img_url = $img_url2 . $icdb->id; From fdd6e03d5e14ddbc85db6c1f256dc2d8099c4f95 Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Fri, 1 May 2015 15:29:07 +0900 Subject: [PATCH 156/339] =?UTF-8?q?=E6=9C=AC=E5=AE=B6=E3=81=A7=E3=81=AE?= =?UTF-8?q?=E3=81=8A=E6=B0=97=E3=81=AB=E3=82=B9=E3=83=AC=E5=85=B1=E6=9C=89?= =?UTF-8?q?=E3=81=8C=E5=BB=83=E6=AD=A2=E3=81=95=E3=82=8C=E3=81=9F=E3=81=AE?= =?UTF-8?q?=E3=81=A7=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=20(=E3=82=AF?= =?UTF-8?q?=E3=83=AD=E3=83=BC=E3=83=B3=E3=81=AE=E9=96=8B=E7=99=BA=E3=82=92?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=81=A8=E3=81=84=E3=81=86=E8=A9=B1=E3=82=82?= =?UTF-8?q?=E4=B8=80=E5=BF=9C=E3=81=82=E3=82=8B=E3=81=BF=E3=81=9F=E3=81=84?= =?UTF-8?q?=E3=81=AA=E3=81=AE=E3=81=A7=E5=AE=8C=E6=88=90=E3=81=97=E3=81=9F?= =?UTF-8?q?=E3=82=89=E5=A4=96=E3=81=97=E3=81=A6=E3=81=8F=E3=81=A0=E3=81=95?= =?UTF-8?q?=E3=81=84=EF=BD=A1=20=20http://anago.2ch.net/test/read.cgi/soft?= =?UTF-8?q?ware/1425420543/975=20)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- conf/conf_user_def.inc.php | 2 ++ lib/setfav.inc.php | 3 +++ rep2/edit_conf_user.php | 2 +- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 4db56df99..e850cfb69 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -74,7 +74,7 @@ function p2_init() $_conf['p2web_url'] = 'http://akid.s17.xrea.com/'; $_conf['p2ime_url'] = 'http://akid.s17.xrea.com/p2ime.php'; - $_conf['favrank_url'] = 'http://akid.s17.xrea.com/favrank/favrank.php'; +// $_conf['favrank_url'] = 'http://akid.s17.xrea.com/favrank/favrank.php'; $_conf['expack.web_url'] = 'http://2ch774.github.io/p2-php/'; $_conf['expack.download_url'] = 'https://github.com/2ch774/p2-php/releases'; $_conf['expack.history_url'] = 'https://github.com/2ch774/p2-php/blob/master/doc/README-774.txt'; diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index 970660c4c..ffa7a62cc 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -497,9 +497,11 @@ // �Q�[�g�Ŏ����]�����Ȃ��g���q�i�J���}��؂�ŁA�g���q�̑O�̃s���I�h�͕s�v�j $conf_user_def['ime_manual_ext'] = "exe,zip"; // ("exe,zip") +/* // ���C�ɃX�����L�ɎQ���i����:1, ���Ȃ�:0�j $conf_user_def['join_favrank'] = 0; // (0) $conf_user_rad['join_favrank'] = array('1' => '����', '0' => '���Ȃ�'); + */ // ���C�ɔ‚̃X���ꗗ���܂Ƃ߂ĕ\�� (����:1, ���Ȃ�:0, �����X���̂�:2) $conf_user_def['merge_favita'] = 0; // (0) diff --git a/lib/setfav.inc.php b/lib/setfav.inc.php index a9241bad1..aa6563dce 100644 --- a/lib/setfav.inc.php +++ b/lib/setfav.inc.php @@ -138,6 +138,7 @@ function setFav($host, $bbs, $key, $setfav, $ttitle = null, $setnum = null) p2die('cannot write file.'); } +/* //================================================ // ���C�ɃX�����L @@ -155,6 +156,8 @@ function setFav($host, $bbs, $key, $setfav, $ttitle = null, $setnum = null) postFavRank($post); } + */ + return true; } diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index 6eee5da17..5bb69ec9c 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -430,7 +430,7 @@ array('brocra_checker_url', '�u���N���`�F�b�JURL'), array('brocra_checker_query', '�u���N���`�F�b�J�̃N�G���[ (��̏ꍇ�APATH_INFO��URL��n��)'), '�ƒ��j���[�E���C�ɔ�', - array('join_favrank', '<a href="http://akid.s17.xrea.com/favrank/favrank.html" target="_blank">���C�ɃX�����L</a>�ɎQ��'), +// array('join_favrank', '<a href="http://akid.s17.xrea.com/favrank/favrank.html" target="_blank">���C�ɃX�����L</a>�ɎQ��'), array('merge_favita', '���C�ɔ‚̃X���ꗗ���܂Ƃ߂ĕ\�� (���C�ɔ‚̐��ɂ���Ă͏����Ɏ��Ԃ�������)'), array('favita_order_dnd', '�h���b�O���h���b�v�ł��C�ɔ‚���בւ���'), array('enable_menu_new', '�ƒ��j���[�ɐV������\��'), From 433cf36e3a0dfa12d9ec322325668d306c6783fc Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sun, 3 May 2015 12:08:22 +0900 Subject: [PATCH 157/339] =?UTF-8?q?=E3=82=88=E3=82=8A=E9=AB=98=E6=80=A7?= =?UTF-8?q?=E8=83=BD=E3=81=AA=E3=83=AA=E3=83=B3=E3=82=AF=E3=83=97=E3=83=A9?= =?UTF-8?q?=E3=82=B0=E3=82=A4=E3=83=B3=E3=81=8C=E5=87=BA=E3=81=9F=E3=81=AE?= =?UTF-8?q?=E3=81=A7=E5=86=85=E8=94=B5Youtube=E3=81=A8=E3=83=8B=E3=82=B3?= =?UTF-8?q?=E3=83=8B=E3=82=B3=E5=8B=95=E7=94=BB=E3=82=92=E5=89=8A=E9=99=A4?= =?UTF-8?q?=20=E3=82=B9=E3=83=9E=E3=83=9B=E5=90=91=E3=81=91read=E3=81=AB?= =?UTF-8?q?=E3=83=AA=E3=83=B3=E3=82=AF=E3=83=97=E3=83=A9=E3=82=B0=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E5=AE=9F=E8=A3=85=20=E6=AE=8B=E3=82=8A=E3=81=8B?= =?UTF-8?q?=E3=81=99=E3=81=AE=E6=8E=83=E9=99=A4=E3=81=AF=E3=81=93=E3=82=8C?= =?UTF-8?q?=E3=81=8B=E3=82=89=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ShowThreadI.php | 59 +++++---------------- lib/ShowThreadPc.php | 117 ------------------------------------------ lib/wiki/read.inc.php | 20 ++++---- 3 files changed, 21 insertions(+), 175 deletions(-) diff --git a/lib/ShowThreadI.php b/lib/ShowThreadI.php index c1f61dde2..0e89d6b6f 100644 --- a/lib/ShowThreadI.php +++ b/lib/ShowThreadI.php @@ -51,6 +51,9 @@ public function __construct(ThreadRead $aThread, $matome = false) 'plugin_link2chSubject', ); // +Wiki + if (isset($GLOBALS['linkPluginCtl'])) { + $this->_url_handlers[] = 'plugin_linkPlugin'; + } if (isset($GLOBALS['replaceImageUrlCtl'])) { $this->_url_handlers[] = 'plugin_replaceImageUrl'; } @@ -59,9 +62,6 @@ public function __construct(ThreadRead $aThread, $matome = false) } elseif ($_conf['mobile.use_picto']) { $this->_url_handlers[] = 'plugin_viewImage'; } - if ($_conf['mobile.link_youtube']) { - $this->_url_handlers[] = 'plugin_linkYouTube'; - } $this->_url_handlers[] = 'plugin_linkURL'; if (!$_conf['mobile.bbs_noname_name']) { @@ -871,50 +871,6 @@ public function plugin_linkThread($url, $purl, $str) return false; } - // }}} - // {{{ plugin_linkYouTube() - - /** - * YouTube�����N�ϊ��v���O�C�� - * - * Zend_Gdata_Youtube���g���΃T���l�C�����̑��̏����ȒP�Ɏ擾�ł��邪... - * - * @param string $url - * @param array $purl - * @param string $str - * @return string|false - */ - public function plugin_linkYouTube($url, $purl, $str) - { - global $_conf; - - // http://www.youtube.com/watch?v=Mn8tiFnAUAI - if (preg_match('{^http://(www|jp)\\.youtube\\.com/watch\\?v=([0-9A-Za-z_\\-]+)}', $purl[0], $m)) { - $subd = $m[1]; - $id = $m[2]; - - if ($_conf['mobile.link_youtube'] == 2) { - $link = $str; - } else { - $link = $this->plugin_linkURL($url, $purl, $str); - if ($link === false) { - // plugin_linkURL()�������Ƌ@�\���Ă�����肱���ɂ͗��Ȃ� - if ($_conf['through_ime']) { - $link_url = P2Util::throughIme($purl[0]); - } else { - $link_url = $url; - } - $link = "<a href=\"{$link_url}\">{$str}</a>"; - } - } - - return <<<EOP -{$link}<br><img src="http://img.youtube.com/vi/{$id}/default.jpg" alt="YouTube {$id}"> -EOP; - } - return false; - } - // }}} // {{{ plugin_viewImage() @@ -1322,6 +1278,15 @@ public function plugin_replaceImageUrl($url, $purl, $str) } // }}} + // {{{ plugin_linkPlugin() + + /** + * +Wiki:�����N�v���O�C�� + */ + public function plugin_linkPlugin($url, $purl, $str) + { + return $GLOBALS['linkPluginCtl']->replaceLinkToHTML($url, $str); + } // }}} // {{{ _quotebackHorizontalListHtml() diff --git a/lib/ShowThreadPc.php b/lib/ShowThreadPc.php index e3a1df5d8..7849659bc 100644 --- a/lib/ShowThreadPc.php +++ b/lib/ShowThreadPc.php @@ -72,12 +72,6 @@ public function __construct($aThread, $matome = false) } elseif ($_conf['preview_thumbnail']) { $this->_url_handlers[] = 'plugin_viewImage'; } - if ($_conf['link_youtube']) { - $this->_url_handlers[] = 'plugin_linkYouTube'; - } - if ($_conf['link_niconico']) { - $this->_url_handlers[] = 'plugin_linkNicoNico'; - } $this->_url_handlers[] = 'plugin_linkURL'; // imepita��URL�����H����ImageCache2������v���O�C����o�^ @@ -1316,117 +1310,6 @@ public function plugin_linkThread($url, $purl, $str) return false; } - // }}} - // {{{ plugin_linkYouTube() - - /** - * YouTube�����N�ϊ��v���O�C�� - * - * Zend_Gdata_Youtube���g���΃T���l�C�����̑��̏����ȒP�Ɏ擾�ł��邪... - * - * @param string $url - * @param array $purl - * @param string $str - * @return string|false - */ - public function plugin_linkYouTube($url, $purl, $str) - { - global $_conf; - - // +live YouTube�v���r���[�\���̃T�C�Y�w�� - if ($_conf['live.youtube_winsize'] == 1) { - $youtube_winsize = "width=\"212\" height=\"175\""; // �n�[�t - } else { - $youtube_winsize = "width=\"425\" height=\"350\""; // �m�[�}�� - } - - // http://www.youtube.com/watch?v=Mn8tiFnAUAI - // http://m.youtube.com/watch?v=OhcX0xJsDK8&client=mv-google&gl=JP&hl=ja&guid=ON&warned=True - if (preg_match('{^https?://(youtu\\.be/|(www|jp|m)\\.youtube\\.com/watch\\?(?:.+&)?v=)([0-9a-zA-Z_\\-]+)}', $url, $m)) { - $url = preg_replace('{^http:}', 'https:', $url); - // ime - if ($_conf['through_ime']) { - $link_url = P2Util::throughIme($url); - } else { - $link_url = $url; - } - - $link_url = $link_url . "&fmt=18"; // ���掿�p - - // HTML�|�b�v�A�b�v - if ($_conf['iframe_popup']) { - $link = $this->iframePopup($link_url, $str, $_conf['ext_win_target_at']); - } else { - $link = "<a href=\"{$link_url}\"{$_conf['ext_win_target_at']}>{$str}</a>"; - } - - $subd = $m[1]; - $id = $m[3]; - - if ($_conf['link_youtube'] == 2) { - return <<<EOP -{$link} <img class="preview-video-switch" src="img/show.png" alt="show" data-video_url="https://www.youtube.com/embed/{$id}" data-video_width="425" data-video_height="350" data-video_harf="{$_conf['live.youtube_winsize']}" data-video_option='{"allowfullscreen":"1"}'> -EOP; - } else { - return <<<EOP -{$link}<div class="preview-video preview-video-youtuve"> -<iframe {$youtube_winsize} src="https://www.youtube.com/embed/{$id}" frameborder="0" allowfullscreen></iframe> -</div> -EOP; - } - } - return false; - } - - // }}} - // {{{ plugin_linkNicoNico() - - /** - * �j�R�j�R����ϊ��v���O�C�� - * - * @param string $url - * @param array $purl - * @param string $str - * @return string|false - */ - public function plugin_linkNicoNico($url, $purl, $str) - { - global $_conf; - - // http://www.nicovideo.jp/watch?v=utbrYUJt9CSl0 - // http://www.nicovideo.jp/watch/utvWwAM30N0No - // http://m.nicovideo.jp/watch/sm7044684 - if (preg_match('{^http://(?:www|m)\\.nicovideo\\.jp/watch(?:/|(?:\\?v=))([0-9a-zA-Z_-]+)}', $url, $m) || - preg_match('{^http://nico\\.(?:ms|sc)/([0-9a-zA-Z_-]+)}', $url, $m)) { - // ime - if ($_conf['through_ime']) { - $link_url = P2Util::throughIme($purl[0]); - } else { - $link_url = $url; - } - - // HTML�|�b�v�A�b�v - if ($_conf['iframe_popup']) { - $link = $this->iframePopup($link_url, $str, $_conf['ext_win_target_at']); - } else { - $link = "<a href=\"{$link_url}\"{$_conf['ext_win_target_at']}>{$str}</a>"; - } - - $id = $m[1]; - - if ($_conf['link_niconico'] == 2) { - return <<<EOP -{$link} <img class="preview-video-switch" src="img/show.png" alt="show" data-video_url="http://ext.nicovideo.jp/thumb/{$id}" data-video_width="425" data-video_height="175" data-video_harf="0" data-video_option='{"scrolling":"auto"}'> -EOP; - } else { - return <<<EOP -{$link}<div class="preview-video preview-video-niconico"><iframe src="http://ext.nicovideo.jp/thumb/{$id}" width="425" height="175" scrolling="auto" frameborder="0"></iframe></div> -EOP; - } - } - return false; - } - // }}} // {{{ plugin_viewImage() diff --git a/lib/wiki/read.inc.php b/lib/wiki/read.inc.php index 5eadf5475..fffc4699b 100644 --- a/lib/wiki/read.inc.php +++ b/lib/wiki/read.inc.php @@ -3,22 +3,20 @@ p2 - �X���b�h�\����include�����t�@�C�� */ -if (!$_conf['ktai']) { - // �����N�v���O�C�� - require_once P2_LIB_DIR . '/wiki/LinkPluginCtl.php'; - $GLOBALS['linkPluginCtl'] = new LinkPluginCtl(); - // �u���摜URL(PC��ImageCache2���L���̏ꍇ) - if ($_conf['expack.ic2.enabled'] % 2 == 1) { - require_once P2_LIB_DIR . '/wiki/ReplaceImageUrlCtl.php'; - $GLOBALS['replaceImageUrlCtl'] = new ReplaceImageUrlCtl(); - } -} else { - // �u���摜URL(�g�т�ImageCache2���L���̏ꍇ) +// ImageCache2���L���̏ꍇ +if (in_array($_conf['expack.ic2.enabled'], array($_conf['ktai'] ? 1 : 2, 3))) { +// �u���摜URL if ($_conf['expack.ic2.enabled'] >= 2) { require_once P2_LIB_DIR . '/wiki/ReplaceImageUrlCtl.php'; $GLOBALS['replaceImageUrlCtl'] = new ReplaceImageUrlCtl(); } } +// �g�уr���[�ȊO�̏ꍇ +if (!$_conf['ktai'] || $_conf['iphone']) { +// �����N�v���O�C�� + require_once P2_LIB_DIR . '/wiki/LinkPluginCtl.php'; + $GLOBALS['linkPluginCtl'] = new LinkPluginCtl(); +} // �u�����[�h require_once P2_LIB_DIR . '/wiki/ReplaceWordCtl.php'; $GLOBALS['replaceWordCtl'] = new ReplaceWordCtl(); From 1879bc27d9b859da31ab4e0f16bbcb3378b934a0 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 8 May 2015 05:29:42 +0900 Subject: [PATCH 158/339] =?UTF-8?q?=E3=83=AA=E3=83=B3=E3=82=AF=E3=83=97?= =?UTF-8?q?=E3=83=A9=E3=82=B0=E3=82=A4=E3=83=B3=E3=81=AE=E3=81=9F=E3=82=81?= =?UTF-8?q?PC=E3=81=A8=E3=82=B9=E3=83=9E=E3=83=9B=E3=81=A7shpw=E3=83=9C?= =?UTF-8?q?=E3=82=BF=E3=83=B3=E3=81=AE=E3=82=B9=E3=82=AF=E3=83=AA=E3=83=97?= =?UTF-8?q?=E3=83=88=E3=82=92=E7=84=A1=E6=9D=A1=E4=BB=B6=E3=81=A7=E8=AA=AD?= =?UTF-8?q?=E3=81=BF=E8=BE=BC=E3=82=80=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ShowThreadPc.php | 2 +- lib/read_header.inc.php | 9 ++------- lib/read_header_i.inc.php | 1 + 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/lib/ShowThreadPc.php b/lib/ShowThreadPc.php index 7849659bc..9733ad6e5 100644 --- a/lib/ShowThreadPc.php +++ b/lib/ShowThreadPc.php @@ -1337,7 +1337,7 @@ public function plugin_viewImage($url, $purl, $str) if (preg_match('{^https?://.+?\\.(jpe?g|gif|png)$}i', $purl[0]) && empty($purl['query'])) { $pre_thumb_limit--; // �\�������J�E���^�������� - $img_tag = "<img class=\"thumbnail\" src=\"{$url}\" height=\"{$_conf['pre_thumb_height']}\" weight=\"{$_conf['pre_thumb_width']}\" hspace=\"4\" vspace=\"4\" align=\"middle\">"; + $img_tag = "<img class=\"thumbnail\" src=\"{$url}\" height=\"{$_conf['pre_thumb_height']}\" width=\"{$_conf['pre_thumb_width']}\" hspace=\"4\" vspace=\"4\" align=\"middle\">"; if ($_conf['iframe_popup']) { $view_img = $this->imageHtmlPopup($url, $img_tag, $str); diff --git a/lib/read_header.inc.php b/lib/read_header.inc.php index 4f05203cb..62f6485ff 100755 --- a/lib/read_header.inc.php +++ b/lib/read_header.inc.php @@ -214,11 +214,13 @@ {$_conf['extra_headers_ht']} <title>{$ptitle_ht} + + \n EOP; @@ -240,13 +242,6 @@ EOP; } -if ($_conf['link_youtube'] == 2 || $_conf['link_niconico'] == 2) { - echo << - \n -EOP; - -} if ($_conf['expack.am.enabled']) { echo <<\n diff --git a/lib/read_header_i.inc.php b/lib/read_header_i.inc.php index 212fa0ad2..2996994ad 100644 --- a/lib/read_header_i.inc.php +++ b/lib/read_header_i.inc.php @@ -71,6 +71,7 @@ + EOS; // ImageCache2 if ($_conf['expack.ic2.enabled']) { From d5437928d197a6f364a7a3b0c173fe070c53736a Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 8 May 2015 05:40:25 +0900 Subject: [PATCH 159/339] =?UTF-8?q?=E5=86=85=E8=94=B5=E3=83=AA=E3=83=B3?= =?UTF-8?q?=E3=82=AF=E3=83=97=E3=83=A9=E3=82=B0=E3=82=A4=E3=83=B3=E3=81=AB?= =?UTF-8?q?=E9=96=A2=E3=81=99=E3=82=8B=E8=A8=AD=E5=AE=9A=E9=A0=85=E7=9B=AE?= =?UTF-8?q?=E3=82=92=E9=99=A4=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- conf/conf_user_def.inc.php | 10 +--------- conf/conf_user_def_live.inc.php | 4 ---- rep2/edit_conf_user.php | 3 --- rep2/read_new.php | 12 ++---------- 5 files changed, 4 insertions(+), 27 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index e850cfb69..3181db496 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150426.1033', // rep2�̃o�[�W���� + 'p2version' => '150508.0061', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index ffa7a62cc..bad6d5d6f 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -170,14 +170,6 @@ $conf_user_def['pre_thumb_width'] = "32"; // ("32") //$conf_user_rules['pre_thumb_width'] = array('emptyToDef', 'notIntExceptMinusToDef'); -// YouTube�̃����N���v���r���[�\���i����:1, ���Ȃ�:0, �蓮�ł���:2�j -$conf_user_def['link_youtube'] = 1; // (1) -$conf_user_rad['link_youtube'] = array('1' => '����', '0' => '���Ȃ�', '2' => '�蓮�ł���'); - -// �j�R�j�R����̃����N���v���r���[�\���i����:1, ���Ȃ�:0, �蓮�ł���:2�j -$conf_user_def['link_niconico'] = 1; // (1) -$conf_user_rad['link_niconico'] = array('1' => '����', '0' => '���Ȃ�', '2' => '�蓮�ł���'); - // HTML�|�b�v�A�b�v�i����:1, ���Ȃ�:0, p�ł���:2, �摜�ł���:3�j $conf_user_def['iframe_popup'] = 2; // (2) $conf_user_sel['iframe_popup'] = array('1' => '����', '0' => '���Ȃ�', '2' => 'p�ł���', '3' => '�摜�ł���'); @@ -497,7 +489,7 @@ // �Q�[�g�Ŏ����]�����Ȃ��g���q�i�J���}��؂�ŁA�g���q�̑O�̃s���I�h�͕s�v�j $conf_user_def['ime_manual_ext'] = "exe,zip"; // ("exe,zip") -/* +/* // ���C�ɃX�����L�ɎQ���i����:1, ���Ȃ�:0�j $conf_user_def['join_favrank'] = 0; // (0) $conf_user_rad['join_favrank'] = array('1' => '����', '0' => '���Ȃ�'); diff --git a/conf/conf_user_def_live.inc.php b/conf/conf_user_def_live.inc.php index 9ef4c138d..27eec8ff5 100755 --- a/conf/conf_user_def_live.inc.php +++ b/conf/conf_user_def_live.inc.php @@ -31,10 +31,6 @@ $conf_user_def['live.highlight_chain'] = 0; // (0) $conf_user_rad['live.highlight_chain'] = array('1' => '����', '0' => '���Ȃ�'); -// YouTube�v���r���[�\���̃T�C�Y -$conf_user_def['live.youtube_winsize'] = 0; // (0) -$conf_user_sel['live.youtube_winsize'] = array('0' => '�m�[�}���T�C�Y', '1' => '�n�[�t�T�C�Y'); - // }}} // {{{ ���������ݒ� diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index 5bb69ec9c..b2e5b9368 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -310,8 +310,6 @@ array('pre_thumb_limit', '�摜URL�̐�ǂ݃T���l�C������x�ɕ\�����鐧���� (0�Ŗ�����)'), // array('pre_thumb_height', '�摜�T���l�C���̏c�̑傫�����w�� (�s�N�Z��)'), // array('pre_thumb_width', '�摜�T���l�C���̉��̑傫�����w�� (�s�N�Z��)'), - array('link_youtube', 'YouTube�̃����N���v���r���[�\��
    (�蓮�̏ꍇ��URL�̉���show���N���b�N���ĕ\��)'), - array('link_niconico', '�j�R�j�R����̃����N���v���r���[�\��
    (�蓮�̏ꍇ��URL�̉���show���N���b�N���ĕ\��)'), array('iframe_popup', 'HTML�|�b�v�A�b�v'), array('iframe_popup_event', 'HTML�|�b�v�A�b�v������ꍇ�̃C�x���g'), array('iframe_popup_type', 'HTML�|�b�v�A�b�v�̎��'), @@ -891,7 +889,6 @@ array('live.view_type', '���X�\���̎��'), array('live.id_b', 'ID������ O (�g��) P (����p2) Q (�t���u���E�U) i (iPhone)�𑾎���'), array('live.highlight_chain', '�A���n�C���C�g (�A���͈͂� ngaborn_chain_all �ɂĐݒ�)'), - array('live.youtube_winsize', 'YouTube�v���r���[�\���̃T�C�Y'), ); printEditConfGroupHtml($groupname, $conflist, $flags); } diff --git a/rep2/read_new.php b/rep2/read_new.php index abb6a4c60..9be0b2ac5 100755 --- a/rep2/read_new.php +++ b/rep2/read_new.php @@ -137,11 +137,13 @@ + + \n EOHEADER; @@ -163,16 +165,6 @@ EOP; } -if ($_conf['link_youtube'] == 2 || $_conf['link_niconico'] == 2) { - // +live YouTube�v���r���[�\���̃T�C�Y�w�� - if ($_conf['live.youtube_winsize'] == 1) { - echo "\t\n"; - } else { - echo <<\n -EOP; - } -} if ($_conf['expack.am.enabled']) { echo <<\n From 7881b1b7c0943b3f12ef51efecf5a54daa38ec45 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sun, 10 May 2015 11:42:57 +0900 Subject: [PATCH 160/339] v150510.1111 --- conf/conf.inc.php | 2 +- doc/README-774.txt | 12 ++++++++++++ lib/wiki/ReplaceImageUrlCtl.php | 3 +++ style/read_css.inc | 2 +- 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 3181db496..c731f87cf 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150508.0061', // rep2�̃o�[�W���� + 'p2version' => '150510.1111', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/doc/README-774.txt b/doc/README-774.txt index 10ea4ed9b..0866093cb 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -36,6 +36,8 @@ rep2-expack test https://github.com/orzisun/p2-php - ���X�|�b�v�A�b�v����J�������X�|�b�v�A�b�v���^�b�v�����ۂɌ��̃��X�|�b�v�A�b�v��������͎̂d�l�Ƃ����Ă��������܂��B - �X�N���[���͎w�̏I���_���|�b�v�A�b�v���ɂȂ�悤�ɂ���Ώ����܂���B * headline.2ch.net���ŋߓǂ񂾃X���ɒNjL���Ȃ��悤�ɕύX +* Youtube�ƃj�R�j�R�����\������@�\���폜 + - �����N�v���O�C�����g�p���Ă������� http://akid.s17.xrea.com/p2puki/index.phtml?%A5%EA%A5%F3%A5%AF%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3 ���̑������̃A���ɍ��킹���C����git�̃R�~�b�g���O���m�F���Ă��������B @@ -56,7 +58,17 @@ rep2-expack test https://github.com/orzisun/p2-php �{��p2�Ɠ������AX11���C�Z���X�ł��B + ��ChangeLog + +150510.1111 +* Youtube�ƃj�R���̓��������N�v���O�C�����폜 +* Youtube�֘A�̐ݒ��S�č폜 +* show�{�^���������N�v���O�C�����痘�p�o����悤�ɕύX +* �X�}�z����read��PC�̃����N�v���O�C�������f�����悤�ɂ��� +* �摜�u��URL��EXTRACT�̏d��URL�𖳎�����悤�ɕύX +* �T�[�r�X�I���ɔ����Ďg�p�ł��Ȃ��Ȃ����@�\�̐ݒ���ꕔ�폜 + 150426.1033 * �K���P�[����read��syntax error�C�� * 302����������URL��RSS���[�_���퓮�삵�Ȃ��s����C�� diff --git a/lib/wiki/ReplaceImageUrlCtl.php b/lib/wiki/ReplaceImageUrlCtl.php index 9dcc5d112..6c00a10ae 100644 --- a/lib/wiki/ReplaceImageUrlCtl.php +++ b/lib/wiki/ReplaceImageUrlCtl.php @@ -322,6 +322,9 @@ public function extractPage($url, $match, $replace, $referer, $source, $ident=nu $ret = self::_identByCacheData($ret, $this->cacheData[$url]['data'], $ident); } + // ���ʂ���d�����폜 + $ret = array_unique($ret); + // ���ʂ��i���L���b�V���ɕۑ� $this->storeCache($url, array('code' => $code, 'responseHeaders' => $req->getResponseHeader(), diff --git a/style/read_css.inc b/style/read_css.inc index 811cc2cf2..3788ee208 100644 --- a/style/read_css.inc +++ b/style/read_css.inc @@ -374,7 +374,7 @@ div.respopup div.reslist { .preview-video-switch { cursor: pointer; - width: 32px; + width: 30px; height: 12px; } From 4fa462c78b0b2df7284cb0defeedaacca38874a4 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 14 May 2015 00:10:27 +0900 Subject: [PATCH 161/339] =?UTF-8?q?=E3=83=AA=E3=83=B3=E3=82=AF=E3=83=97?= =?UTF-8?q?=E3=83=A9=E3=82=B0=E3=82=A4=E3=83=B3=E3=81=AB$atag=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=9F=20=E8=BB=A2=E9=80=81?= =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B8(github.io)=E3=81=8CSSL=E3=81=AB?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C=E3=81=97=E3=81=A6=E3=81=84=E3=82=8B=E3=81=AE?= =?UTF-8?q?=E3=81=A7rep2=E3=81=8CSSL=E3=81=AE=E6=99=82=E3=81=ABSSL?= =?UTF-8?q?=E3=82=92=E4=BD=BF=E3=81=86=E3=82=88=E3=81=86=E3=81=AB=E3=81=97?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit リンクプラグインの詳細はdoc/wiki/WIKI-774.txt --- conf/conf.inc.php | 2 +- doc/wiki/WIKI-774.txt | 13 +++++++++++++ lib/P2Ime.php | 4 ++-- lib/ShowThreadPc.php | 16 ++++++++-------- lib/wiki/LinkPluginCtl.php | 24 ++++++++++++++++++++++++ 5 files changed, 48 insertions(+), 11 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index c731f87cf..9a1af07b4 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -80,7 +80,7 @@ function p2_init() $_conf['expack.history_url'] = 'https://github.com/2ch774/p2-php/blob/master/doc/README-774.txt'; $_conf['expack.tgrep_url'] = 'http://page2.xrea.jp/tgrep/search'; $_conf['test.dig2ch_url'] = 'http://dig.2ch.net/'; - $_conf['expack.gate_php'] = 'http://2ch774.github.io/p2-php/gate.html'; + $_conf['expack.gate_php'] = '//2ch774.github.io/p2-php/gate.html'; $_conf['menu_php'] = 'menu.php'; $_conf['subject_php'] = 'subject.php'; $_conf['read_php'] = 'read.php'; diff --git a/doc/wiki/WIKI-774.txt b/doc/wiki/WIKI-774.txt index 4754fe606..0103620c0 100644 --- a/doc/wiki/WIKI-774.txt +++ b/doc/wiki/WIKI-774.txt @@ -16,3 +16,16 @@ data-video_height( data-video_style(�I�v�V����) iframe��style���� data-video_harf(�I�v�V����) 1�ɂ����width��height�������ɂȂ�܂� data-video_option(�I�v�V����) Javascript�̘A�z�z��`����iframe�̒lj��������w�肵�܂��B���O�ƒl�͕K���y�A�ł���K�v������܂��B + +�� �萔 +�����N�v���O�C������Replace�Ɉȉ��̍��ڂ��w�肷��ƁA���̓��e�ɕϊ����܂��B +�E$atag rep2�̐ݒ�Ɛڑ��[���ɉ��������e��a�^�O�ɕϊ����܂��B +$atag�̈�� +Match +^(?:https?://(?:www\.|m\.)?youtube\.(?:com|jp)/(?:watch\?(?:.*&)?(?:v|video_id)=|v/)|(?:https?://youtu\.be/|https://www\.youtube-nocookie\.com/v/))([\w\-_]+)(?:.*)?$ + +Replace +$atag
    + +iframe_popup=�up�ł���v�ɐݒ肵����Ԃł�PC����A�N�Z�X�����ꍇ��$atag�� +�u
    (p)$str�v�ɕϊ����܂��B \ No newline at end of file diff --git a/lib/P2Ime.php b/lib/P2Ime.php index 7514142b8..103c4e3ec 100644 --- a/lib/P2Ime.php +++ b/lib/P2Ime.php @@ -152,9 +152,9 @@ public function __construct($type = null, array $exceptions = null, $ignoreHttp case 'google': $this->_method = '_throughGoogleGateway'; if ($_conf['ktai'] && !$_conf['iphone']) { - $this->_gateUrl = 'http://www.google.co.jp/gwt/x?u='; + $this->_gateUrl = '//www.google.co.jp/gwt/x?u='; } else { - $this->_gateUrl = 'http://www.google.co.jp/url?q='; + $this->_gateUrl = '//www.google.co.jp/url?q='; } break; // }}} diff --git a/lib/ShowThreadPc.php b/lib/ShowThreadPc.php index 9733ad6e5..2f1911183 100644 --- a/lib/ShowThreadPc.php +++ b/lib/ShowThreadPc.php @@ -663,7 +663,7 @@ public function idFilter($idstr, $id) ), '', '&') . $_conf['k_at_a']; if ($_conf['iframe_popup']) { - return $this->iframePopup($filter_url, $idstr, $_conf['bbs_win_target_at']) . $num_ht; + return self::iframePopup($filter_url, $idstr, $_conf['bbs_win_target_at']) . $num_ht; } return "{$idstr}{$num_ht}"; } @@ -767,7 +767,7 @@ public function quoteResRange($full, $qsign, $appointed_num) if ($_conf['iframe_popup']) { $pop_url = $read_url . "&renzokupop=true"; - return $this->iframePopup(array($read_url, $pop_url), $full, $_conf['bbs_win_target_at'], 1); + return self::iframePopup(array($read_url, $pop_url), $full, $_conf['bbs_win_target_at'], 1); } // ���ʂɃ����N @@ -797,7 +797,7 @@ public function quoteResRange($full, $qsign, $appointed_num) * @param bool $marker * @return string */ - public function iframePopup($url, $str, $attr = '', $mode = null, $marker = false) + static public function iframePopup($url, $str, $attr = '', $mode = null, $marker = false) { global $_conf; @@ -888,7 +888,7 @@ public function iframePopup($url, $str, $attr = '', $mode = null, $marker = fals */ public function iframePopupCallback($s) { - return $this->iframePopup(p2h($s[1], false), p2h($s[3], false), $s[2]); + return self::iframePopup(p2h($s[1], false), p2h($s[3], false), $s[2]); } // }}} @@ -1047,7 +1047,7 @@ public function imageHtmlPopup($img_url, $img_tag, $link_str) } $pops = ($_conf['iframe_popup'] == 1) ? $img_tag . $link_str : array($link_str, $img_tag); - return $this->iframePopup(array($img_url, $popup_url), $pops, $_conf['ext_win_target_at'], null, true); + return self::iframePopup(array($img_url, $popup_url), $pops, $_conf['ext_win_target_at'], null, true); } // }}} @@ -1208,7 +1208,7 @@ public function plugin_linkURL($url, $purl, $str) } else { $pop_url = $link_url; } - $link = $this->iframePopup(array($link_url, $pop_url), $str, $_conf['ext_win_target_at']); + $link = self::iframePopup(array($link_url, $pop_url), $str, $_conf['ext_win_target_at']); } else { $link = "{$str}"; } @@ -1241,7 +1241,7 @@ public function plugin_linkURL($url, $purl, $str) $check_mark_prefix = ''; $check_mark_suffix = ''; } - $brocra_checker_link = $this->iframePopup(array($brocra_checker_url, $brocra_pop_url), $check_mark, $_conf['ext_win_target_at']); + $brocra_checker_link = self::iframePopup(array($brocra_checker_url, $brocra_pop_url), $check_mark, $_conf['ext_win_target_at']); } else { $brocra_checker_link = "{$check_mark}"; } @@ -1302,7 +1302,7 @@ public function plugin_linkThread($url, $purl, $str) } else { $pop_url = $read_url . '&one=true'; } - return $this->iframePopup(array($read_url, $pop_url), $str, $_conf['bbs_win_target_at']); + return self::iframePopup(array($read_url, $pop_url), $str, $_conf['bbs_win_target_at']); } return "{$str}"; } diff --git a/lib/wiki/LinkPluginCtl.php b/lib/wiki/LinkPluginCtl.php index 9fbd0e4bc..3bb3c8c9f 100644 --- a/lib/wiki/LinkPluginCtl.php +++ b/lib/wiki/LinkPluginCtl.php @@ -73,6 +73,8 @@ public function save($data) public function replaceLinkToHTML($url, $str) { + global $_conf; + $this->setup(); $src = false; @@ -85,6 +87,28 @@ public function replaceLinkToHTML($url, $str) if (strstr($v['replace'], '$str')) { $src = str_replace('$str', $str, $src); } + if (strstr($v['replace'], '$atag')) { + // ime + if ($_conf['through_ime']) { + $link_url = P2Util::throughIme($url); + } else { + $link_url = $url; + } + // HTML�|�b�v�A�b�v(PC�̎�����) + if ($_conf['iframe_popup'] && !$_conf['ktai']) { + // *pm �w��̏ꍇ�̂݁A���ʂɎ蓮�]���w���lj����� + if (substr($_conf['through_ime'], -2) == 'pm') { + $pop_url = P2Util::throughIme($url, -1); + } else { + $pop_url = $link_url; + } + $atag = ShowThreadPc::iframePopup(array($link_url, $pop_url), $str, $_conf['ext_win_target_at']); + } else { + $atag = "{$str}"; + } + + $src = str_replace('$atag', $atag, $src); + } break; } } From 66f93bc89e6dc7c6b80ee6feb6afd66e06302d42 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 14 May 2015 17:18:06 +0900 Subject: [PATCH 162/339] =?UTF-8?q?=E9=AB=98=E9=80=9F=E5=8C=96=E3=83=91?= =?UTF-8?q?=E3=83=83=E3=83=81=E3=82=92=E9=81=A9=E7=94=A8=20http://anago.2c?= =?UTF-8?q?h.net/test/read.cgi/software/1431258367/35-36?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ShowThread.php | 29 +++++++++++++++++++++++++---- lib/wiki/LinkPluginCtl.php | 20 ++++++++++++-------- 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/lib/ShowThread.php b/lib/ShowThread.php index f54573e67..03131f0a4 100644 --- a/lib/ShowThread.php +++ b/lib/ShowThread.php @@ -1106,6 +1106,27 @@ public function transLink($str) * @return string */ public function transLinkDo(array $s) + { + // ���ʂ̃L���b�V�� + static $cache = array(); + // sha1�ň͂񂾕������������Ȃ邪��m���ŏՓ˂��� + $key = sha1(serialize($s)); + // �L���b�V�����ĂȂ��ꍇ + if (!isset($cache[$key])) { + // ���ʂ��v�Z + $cache[$key] = self::_transLinkDo($s); + } + return $cache[$key]; + } + // {{{ _transLinkDo() + + /** + * transLinkDo�̎q�֐� + * + * @param array $s + * @return string + */ + private function _transLinkDo(array $s) { global $_conf; @@ -1132,13 +1153,13 @@ public function transLinkDo(array $s) return $s[3]; } - // ���p + // ���p } elseif ($s['quote']) { return preg_replace_callback( self::getAnchorRegex('/(%prefix%)?(%a_range%)/'), array($this, '_quoteResCallback'), $s['quote']); - // http or ftp ��URL + // http or ftp ��URL } elseif ($s['url']) { if ($_conf['ktai'] && $s[9] == 'ftp') { return $orig; @@ -1162,11 +1183,11 @@ public function transLinkDo(array $s) } } - // ID + // ID } elseif ($s['id'] && $_conf['flex_idpopup']) { // && $_conf['flex_idlink_k'] return $this->idFilter($s['id'], $s[12]); - // ���̑��i�\���j + // ���̑��i�\���j } else { return strip_tags($orig); } diff --git a/lib/wiki/LinkPluginCtl.php b/lib/wiki/LinkPluginCtl.php index 3bb3c8c9f..5accea500 100644 --- a/lib/wiki/LinkPluginCtl.php +++ b/lib/wiki/LinkPluginCtl.php @@ -79,13 +79,17 @@ public function replaceLinkToHTML($url, $str) $src = false; foreach ($this->data as $v) { - if (preg_match('{'.$v['match'].'}', $url)) { - $src = @preg_replace ('{'.$v['match'].'}', $v['replace'], $url); + // �u�������s + $temp = @preg_replace ('{'.$v['match'].'}', $v['replace'], $url, -1, $count); + // �u�����ꂽ�ꍇ + if ($count) { + $src = $temp; + $replace_pairs = array(); if (strstr($v['replace'], '$ime_url')) { - $src = str_replace('$ime_url', P2Util::throughIme($url), $src); + $replace_pairs['$ime_url'] = P2Util::throughIme($url); } if (strstr($v['replace'], '$str')) { - $src = str_replace('$str', $str, $src); + $replace_pairs['$str'] = $str; } if (strstr($v['replace'], '$atag')) { // ime @@ -102,13 +106,13 @@ public function replaceLinkToHTML($url, $str) } else { $pop_url = $link_url; } - $atag = ShowThreadPc::iframePopup(array($link_url, $pop_url), $str, $_conf['ext_win_target_at']); + $replace_pairs['$atag'] = ShowThreadPc::iframePopup(array($link_url, $pop_url), $str, $_conf['ext_win_target_at']); } else { - $atag = "{$str}"; + $replace_pairs['$atag'] = "{$str}"; } - - $src = str_replace('$atag', $atag, $src); } + // �ϐ���W�J + $src = strtr($src, $replace_pairs); break; } } From 3cf360f0967dba9a637a6da41d0a9c1ee8dc7295 Mon Sep 17 00:00:00 2001 From: killer4989 Date: Fri, 1 May 2015 17:39:06 +0900 Subject: [PATCH 163/339] =?UTF-8?q?=E6=9C=80=E8=BF=91=E8=AA=AD=E3=82=93?= =?UTF-8?q?=E3=81=A0=E3=82=B9=E3=83=AC=E5=B1=A5=E6=AD=B4=E3=82=92=E8=A8=98?= =?UTF-8?q?=E9=8C=B2=E3=81=99=E3=82=8B=E9=9A=9B=E3=81=AB=E9=87=8D=E8=A4=87?= =?UTF-8?q?=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF=E3=82=92=E6=9C=AC=E5=AE=B6?= =?UTF-8?q?=E9=A2=A8=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/read.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rep2/read.php b/rep2/read.php index ba2957f0a..6ee1cf5b0 100644 --- a/rep2/read.php +++ b/rep2/read.php @@ -510,8 +510,8 @@ function recRecent($data) foreach ($lines as $l) { $lar = explode('<>', $l); $data_ar = explode('<>', $data); - if ($lar[1] == $data_ar[1]) { continue; } // key�ŏd����� - if (!$lar[1]) { continue; } // key�̂Ȃ����͕̂s���f�[�^ + if (!$lar[1] || !strlen($lar[11])) { continue; } // �s���f�[�^���폜 + if ($lar[1] == $data_ar[1] && $lar[11] == $data_ar[11]) { continue; } // key, bbs�ŏd����� $neolines[] = $l; } } From 2ce759e490ea6e63bc1b5e75c2132fdbf4669d8e Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sun, 17 May 2015 11:58:44 +0900 Subject: [PATCH 164/339] =?UTF-8?q?=E9=AB=98=E9=80=9F=E5=8C=96=E3=83=91?= =?UTF-8?q?=E3=83=83=E3=83=81=E3=82=92=E6=9B=B4=E6=96=B0=20http://anago.2c?= =?UTF-8?q?h.net/test/read.cgi/software/1431258367/54-55=20PC=E7=94=A8?= =?UTF-8?q?=E4=B8=80=E9=83=A8=E7=BA=8F=E3=82=81=E8=AA=AD=E3=81=BF=E3=81=8C?= =?UTF-8?q?=E5=8B=95=E4=BD=9C=E3=81=97=E3=81=AA=E3=81=84=E4=BB=B6=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ShowThread.php | 29 ++++++++----- lib/wiki/ReplaceWordCtl.php | 82 ++++++++++++++++++++++++------------- rep2/js/subject.js | 2 +- 3 files changed, 73 insertions(+), 40 deletions(-) diff --git a/lib/ShowThread.php b/lib/ShowThread.php index 03131f0a4..decc97243 100644 --- a/lib/ShowThread.php +++ b/lib/ShowThread.php @@ -114,6 +114,13 @@ abstract class ShowThread */ static private $_anchorRegexParts = null; + /** + * transLinkDo() �̃L���b�V�� + * + * @var array + */ + static private $_link_cache = array(); + // }}} // {{{ properties @@ -1107,16 +1114,18 @@ public function transLink($str) */ public function transLinkDo(array $s) { - // ���ʂ̃L���b�V�� - static $cache = array(); - // sha1�ň͂񂾕������������Ȃ邪��m���ŏՓ˂��� - $key = sha1(serialize($s)); - // �L���b�V�����ĂȂ��ꍇ - if (!isset($cache[$key])) { - // ���ʂ��v�Z - $cache[$key] = self::_transLinkDo($s); - } - return $cache[$key]; + if ($s['url']) { + // sha1�ň͂񂾕������������Ȃ邪��m���ŏՓ˂��� + $key = sha1(serialize($s)); + // �L���b�V�����ĂȂ��ꍇ + if (!isset(self::$_link_cache[$key])) { + // ���ʂ��v�Z + self::$_link_cache[$key] = self::_transLinkDo($s); + } + return self::$_link_cache[$key]; + } else { + return self::_transLinkDo($s); + } } // {{{ _transLinkDo() diff --git a/lib/wiki/ReplaceWordCtl.php b/lib/wiki/ReplaceWordCtl.php index 7e75136e7..dae84732f 100644 --- a/lib/wiki/ReplaceWordCtl.php +++ b/lib/wiki/ReplaceWordCtl.php @@ -5,12 +5,12 @@ load() �f�[�^��ǂݍ���ŕԂ�(�����I�Ɏ��s�����) clear() �f�[�^���폜 */ - class ReplaceWordCtl { protected $isLoaded = false; protected $data = array(); - + protected $data_filtered = array(); + protected $data_nocache = array(); public function setup() { if (!$this->isLoaded) { @@ -53,7 +53,9 @@ public function loadFile($cont) $lines = array(); $path = $_conf['pref_dir'].'/'.$this->filename($cont); + $this->data_nocache[$cont] = false; if ($lines = @file($path)) { + $check_mode = $_conf['ktai'] ? 1 : 2; foreach ($lines as $l) { if (substr($l, 0, 1) === ';' || substr($l, 0, 1) === "'" || substr($l, 0, 1) === '#' || substr($l, 0, 2) === '//') { @@ -71,6 +73,13 @@ public function loadFile($cont) ); $this->data[$cont][] = $ar; + if ($lar[2] != $check_mode) { + $this->data_filtered[$cont][] = $ar; + // replace�Ƀ��X�ŗL�̕ϐ�$i($id, $id_base64)���܂܂��ꍇ + if (!$this->data_nocache[$cont] && strpos($lar[1], '$' !== FALSE)) { + $this->data_nocache[$cont] = true; + } + } } } return $this->data[$cont]; @@ -110,47 +119,66 @@ public function save($data) */ public function replace($cont, $aThread, $ares, $i) { - global $_conf; + // �L���b�V�� + /* + �L���b�V�����L���ɂȂ���� + �Ereplace��$i, $id, $id_base64���g���ĂȂ� + �������g���ƒu�����[�h�̌��ʂ͓����f�[�^�ł����X�ԍ����ƂɈقȂ錋�ʂɂȂ邽�߁A�L���b�V���ł��Ȃ��Ȃ�B + + �L���b�V���̓����₷���̓��[���������O�������{���������������������t���Ƃ������Ƃ���B + */ + static $cache = array('name' => array(), 'mail' => array(), 'date' => array(), 'msg' => array()); $this->setup(); $resar = $aThread->explodeDatLine($ares); - $name = $resar[0]; - $mail = $resar[1]; - $date_id = $resar[2]; - $msg = $resar[3]; switch ($cont) { case 'name': - $word = $name; + $word = $resar[0]; break; case 'mail': - $word = $mail; + $word = $resar[1]; break; case 'date': - $word = $date_id; + $word = $resar[2]; break; case 'msg': - $word = $msg; + $word = $resar[3]; break; // �G���[ default: // ���̂܂ܕԂ� return $word; } + // �u���ݒ肪�����ꍇ�͂��̂܂ܕԂ� - if (!isset($this->data[$cont])) { + if (!isset($this->data_filtered[$cont])) { return $word; } + // �L���b�V���”\�ȏꍇ + if (!$this->data_nocache[$cont]) { + // �L���b�V�� + // sha1���g���Ƒ����Ȃ邪��m���ŏՓ˂��� + // sha1�̌v�Z���ʎ��̂��L���b�V�����Ă������Ȃ�Ȃ����� + $cache_ = &$cache[$cont][sha1($word)]; + // �L���b�V��������΂����Ԃ� + if (isset($cache_)) { + return $cache_; + } + } - preg_match('|ID: ?([0-9A-Za-z/.+]{8,11})|',$date_id, $matches); - $id = $matches[1]; - foreach ($this->data[$cont] as $v) { - // �g�у��[�h�Ńf�[�^��PC�p�Ȃ��΂� - if ($_conf['ktai'] && $v['mode'] == 1) continue; - // PC���[�h�Ńf�[�^���g�їp�Ȃ��΂� - if (!$_conf['ktai'] && $v['mode'] == 2) continue; - + preg_match('|ID: ?([0-9A-Za-z/.+]{8,11})|',$resar[2], $matches); + $replace_pairs = array( + '$ttitle_hd' => $aThread->ttitle_hd, + '$host' => $aThread->host, + '$bbs' => $aThread->bbs, + '$key' => $aThread->key, + '$id' => $matches[1], + '$id_base64' => base64_encode($matches[1]), + '$i' => $i + ); + foreach ($this->data_filtered[$cont] as $v) { /* Match�p�̕ϐ��W�J(�p�r���v�������΂Ȃ��̂ŃR�����g�A�E�g) $v['match'] = str_replace ('$i', $i, $v['match']); $v['match'] = str_replace ('$ttitle', $aThread->ttitle, $v['match']); @@ -169,18 +197,14 @@ public function replace($cont, $aThread, $ares, $i) ���ꎩ�̂ɐ��K�\���������Ă�����ǂ����悤�B �����I�Ɏg���̂�$i, $host, $bbs, $key, $date_id���炢��������Ȃ����낤���ǁB */ - $v['replace'] = strtr($v['replace'], array( - '$ttitle_hd' => $aThread->ttitle_hd, - '$host' => $aThread->host, - '$bbs' => $aThread->bbs, - '$key' => $aThread->key, - '$id' => $id, - '$id_base64' => base64_encode($id), - '$i' => $i - )); + $v['replace'] = strtr($v['replace'], $replace_pairs); $word = @preg_replace ('{'.$v['match'].'}', $v['replace'], $word); } + // �L���b�V���”\�Ȃ�L���b�V������ + if (!$this->data_nocache[$cont]) { + $cache_ = $word; + } return $word; } } diff --git a/rep2/js/subject.js b/rep2/js/subject.js index 2c9f58328..fad98fbbf 100644 --- a/rep2/js/subject.js +++ b/rep2/js/subject.js @@ -27,7 +27,7 @@ rep2.subject.changeNewAllColor = function () { rep2.subject.jumpMatomeLimit = function (matome_url) { var unum_limit = window.prompt('�V�����w�肵�������ȉ��̃X�������܂Ƃߓǂ݂��܂��B','100'); if (unum_limit) { - matome_url +='&unum_limit='+unum_limit; + matome_url +='&unum_limit='+unum_limit; if (top == self) { window.location = matome_url; } else { From ec60c1f03c87680d1681d4444dce4ceca4569140 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Mon, 18 May 2015 11:22:45 +0900 Subject: [PATCH 165/339] =?UTF-8?q?=E3=82=BD=E3=83=BC=E3=82=B9=E6=95=B4?= =?UTF-8?q?=E5=BD=A2=E6=A9=9F=E8=83=BD=E3=82=92=E6=9B=B4=E6=96=B0=20http:/?= =?UTF-8?q?/anago.2ch.net/test/read.cgi/software/1431258367/59?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/editpref.php | 2 +- rep2/post.php | 36 +++++++++++++++++++----------------- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/rep2/editpref.php b/rep2/editpref.php index 88ac7d8dd..cea008990 100644 --- a/rep2/editpref.php +++ b/rep2/editpref.php @@ -8,7 +8,7 @@ $_login->authorize(); // ���[�U�F�� $deltitles = array( - 'cookie' => 'Ccookie', + 'cookie' => 'Cookie', 'matome' => '�V���܂Ƃߓǂ�', 'recent' => '�ŋߓǂ񂾃X��', 'reshist' => '�������ݗ���', diff --git a/rep2/post.php b/rep2/post.php index a35b337b8..b7b6fd104 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -64,28 +64,33 @@ // �^�u���X�y�[�X�� $MESSAGE = tab2space($MESSAGE); // ���ꕶ�������̎Q�Ƃ� - $MESSAGE = p2h($MESSAGE); + $MESSAGE = strtr(p2h($MESSAGE), array( + '"' => '"', // " + '&' => '&', // & + ''' => ''', // ' + '<' => '<', // < + '>' => '>', // > + )); // ����URL�����N��� $MESSAGE = str_replace('tp://', 'tp://', $MESSAGE); // �s���̃X�y�[�X�����̎Q�Ƃ� - $MESSAGE = preg_replace('/^ /m', ' ', $MESSAGE); + $MESSAGE = preg_replace('/^ /m', ' ', $MESSAGE); // ��‘����X�y�[�X�̈�–ڂ����̎Q�Ƃ� - $MESSAGE = preg_replace('/(? Date: Fri, 22 May 2015 13:08:15 +0900 Subject: [PATCH 166/339] =?UTF-8?q?plugin=5FimageCache2=E3=82=92=E5=89=8A?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 画像置換に一致しないURLの処理がplugin_replaceImageUrl→plugin_imageCache2となって二度手間なので全て一本化 --- lib/ShowThreadI.php | 184 ---------------------------- lib/ShowThreadK.php | 178 --------------------------- lib/ShowThreadPc.php | 206 -------------------------------- lib/wiki/ReplaceImageUrlCtl.php | 3 +- rep2/js/respopup_iphone.js | 2 +- 5 files changed, 2 insertions(+), 571 deletions(-) diff --git a/lib/ShowThreadI.php b/lib/ShowThreadI.php index 0e89d6b6f..2e3976293 100644 --- a/lib/ShowThreadI.php +++ b/lib/ShowThreadI.php @@ -56,9 +56,6 @@ public function __construct(ThreadRead $aThread, $matome = false) } if (isset($GLOBALS['replaceImageUrlCtl'])) { $this->_url_handlers[] = 'plugin_replaceImageUrl'; - } - if (P2_IMAGECACHE_AVAILABLE == 2) { - $this->_url_handlers[] = 'plugin_imageCache2'; } elseif ($_conf['mobile.use_picto']) { $this->_url_handlers[] = 'plugin_viewImage'; } @@ -900,187 +897,6 @@ public function plugin_viewImage($url, $purl, $str) return false; } - // }}} - // {{{ plugin_imageCache2() - - /** - * �摜URL��ImageCache2�ϊ� - */ - public function plugin_imageCache2($url, $purl, $str) - { - global $_conf; - global $pre_thumb_unlimited, $pre_thumb_ignore_limit, $pre_thumb_limit_k; - - if (P2Util::isUrlWikipediaJa($url)) { - return false; - } - - if (preg_match('{^https?://.+?\\.(jpe?g|gif|png)$}i', $purl[0]) && empty($purl['query'])) { - // �C�����C���v���r���[�̗L������ - if ($pre_thumb_unlimited || $pre_thumb_ignore_limit || $pre_thumb_limit_k > 0) { - $inline_preview_flag = true; - $inline_preview_done = false; - } else { - $inline_preview_flag = false; - $inline_preview_done = false; - } - - $url_ht = $url; - $url = $purl[0]; - $url_en = rawurlencode($url); - $img_str = null; - $img_id = null; - - $icdb = new ImageCache2_DataObject_Images(); - - // r=0:�����N;r=1:���_�C���N�g;r=2:PHP�ŕ\�� - // t=0:�I���W�i��;t=1:PC�p�T���l�C��;t=2:�g�їp�T���l�C��;t=3:���ԃC���[�W - $img_url = 'ic2.php?r=0&t=2&uri=' . $url_en; - $img_url2 = 'ic2.php?r=0&t=2&id='; - $src_url = 'ic2.php?r=1&t=0&uri=' . $url_en; - $src_url2 = 'ic2.php?r=1&t=0&id='; - $src_exists = false; - - // ���C�ɃX�������摜�����N - $rank = null; - if ($_conf['expack.ic2.fav_auto_rank']) { - $rank = $this->getAutoFavRank(); - } - - // DB�ɉ摜��񂪓o�^����Ă����Ƃ� - if ($icdb->get($url)) { - $img_id = $icdb->id; - - // �E�B���X�Ɋ������Ă����t�@�C���̂Ƃ� - if ($icdb->mime == 'clamscan/infected') { - return '[IC2:�E�B���X�x��]'; - } - // ���ځ[��摜�̂Ƃ� - if ($icdb->rank < 0) { - return '[IC2:���ځ[��摜]'; - } - - // �I���W�i���̗L�����m�F - if (file_exists($this->thumbnailer->srcPath($icdb->size, $icdb->md5, $icdb->mime))) { - $src_exists = true; - $img_url = $img_url2 . $icdb->id; - $src_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime); - } else { - $img_url = $this->thumbnailer->thumbUrl($icdb->size, $icdb->md5, $icdb->mime); - $src_url = $src_url2 . $icdb->id; - } - - // �C�����C���v���r���[���L���̂Ƃ� - $prv_url = null; - if ($this->thumbnailer->ini['General']['inline'] == 1) { - // PC��read_new_k.php�ɃA�N�Z�X�����Ƃ��� - if (!isset($this->inline_prvw) || !is_object($this->inline_prvw)) { - $this->inline_prvw = $this->thumbnailer; - } - $prv_url = $this->inline_prvw->thumbUrl($icdb->size, $icdb->md5, $icdb->mime); - - // �T���l�C���\���������ȓ��̂Ƃ� - if ($inline_preview_flag) { - // �v���r���[�摜������Ă��邩�ǂ�����img�v�f�̑��������� - if (file_exists($this->inline_prvw->thumbPath($icdb->size, $icdb->md5, $icdb->mime))) { - $prv_size = explode('x', $this->inline_prvw->calc($icdb->width, $icdb->height)); - $img_str = ""; - } else { - $r_type = ($this->thumbnailer->ini['General']['redirect'] == 1) ? 1 : 2; - if ($src_exists) { - $prv_url = "ic2.php?r={$r_type}&t=1&id={$icdb->id}"; - } else { - $prv_url = "ic2.php?r={$r_type}&t=1&uri={$url_en}"; - } - $prv_url .= $this->img_dpr_query; - if ($this->img_dpr === 1.5 || $this->img_dpr === 2.0) { - $prv_onload = sprintf(' onload="autoAdjustImgSize(this, %f);"', $this->img_dpr); - } else { - $prv_onload = ''; - } - $img_str = ""; - } - $inline_preview_done = true; - } else { - $img_str = '[p2:�����摜(�ݸ:' . $icdb->rank . ')]'; - } - } - - // �����X���^�C�����@�\��ON�ŃX���^�C���L�^����Ă��Ȃ��Ƃ���DB���X�V - if (!is_null($this->img_memo) && strpos($icdb->memo, $this->img_memo) === false) { - $update = new ImageCache2_DataObject_Images(); - if (!is_null($icdb->memo) && strlen($icdb->memo) > 0) { - $update->memo = $this->img_memo . ' ' . $icdb->memo; - } else { - $update->memo = $this->img_memo; - } - $update->whereAddQuoted('uri', '=', $url); - } - - // expack.ic2.fav_auto_rank_override �̐ݒ�ƃ����N������OK�Ȃ� - // ���C�ɃX�������摜�����N���㏑���X�V - if ($rank !== null && self::isAutoFavRankOverride($icdb->rank, $rank)) { - if ($update === null) { - $update = new ImageCache2_DataObject_Images(); - $update->whereAddQuoted('uri', '=', $url); - } - $update->rank = $rank; - } - - if ($update !== null) { - $update->update(); - } - - // �摜���L���b�V������Ă��Ȃ��Ƃ� - // �����X���^�C�����@�\��ON�Ȃ�N�G����UTF-8�G���R�[�h�����X���^�C���܂߂� - } else { - // �摜���u���b�N���X�gor�G���[���O�ɂ��邩�m�F - if (false !== ($errcode = $icdb->ic2_isError($url))) { - return "[IC2:�װ({$errcode})]"; - } - - // �C�����C���v���r���[���L���ŁA�T���l�C���\���������ȓ��Ȃ� - if ($this->thumbnailer->ini['General']['inline'] == 1 && $inline_preview_flag) { - $rank_str = ($rank !== null) ? '&rank=' . $rank : ''; - $img_str = "img_memo_query}{$rank_str}\" width=\"{$prvw_size[0]}\" height=\"{$prvw_size[1]}\">"; - $inline_preview_done = true; - } else { - $img_url .= $this->img_memo_query; - } - } - - // �\�����������f�N�������g - if ($inline_preview_flag && $inline_preview_done) { - $pre_thumb_limit_k--; - } - - if (!empty($_SERVER['REQUEST_URI'])) { - $backto = '&from=' . rawurlencode($_SERVER['REQUEST_URI']); - } else { - $backto = ''; - } - - if (is_null($img_str)) { - return sprintf('[IC2:%s:%s]', - $img_url, - $backto, - p2h($purl['host']), - p2h(basename($purl['path'])) - ); - } - - $img_title = p2h($purl['host']) - . ' ' - . p2h(basename($purl['path'])); - return "{$img_str}" - //. ' '; - } - - return false; - } - // }}} // {{{ plugin_replaceImageUrl() diff --git a/lib/ShowThreadK.php b/lib/ShowThreadK.php index ce0bad8a3..6343effd4 100644 --- a/lib/ShowThreadK.php +++ b/lib/ShowThreadK.php @@ -53,9 +53,6 @@ public function __construct(ThreadRead $aThread, $matome = false) // +Wiki if (isset($GLOBALS['replaceImageUrlCtl'])) { $this->_url_handlers[] = 'plugin_replaceImageUrl'; - } - if (P2_IMAGECACHE_AVAILABLE == 2) { - $this->_url_handlers[] = 'plugin_imageCache2'; } elseif ($_conf['mobile.use_picto']) { $this->_url_handlers[] = 'plugin_viewImage'; } @@ -856,181 +853,6 @@ public function plugin_viewImage($url, $purl, $str) return false; } - // }}} - // {{{ plugin_imageCache2() - - /** - * �摜URL��ImageCache2�ϊ� - */ - public function plugin_imageCache2($url, $purl, $str) - { - global $_conf; - global $pre_thumb_unlimited, $pre_thumb_ignore_limit, $pre_thumb_limit_k; - - if (P2Util::isUrlWikipediaJa($url)) { - return false; - } - - if (preg_match('{^https?://.+?\\.(jpe?g|gif|png)$}i', $purl[0]) && empty($purl['query'])) { - // �C�����C���v���r���[�̗L������ - if ($pre_thumb_unlimited || $pre_thumb_ignore_limit || $pre_thumb_limit_k > 0) { - $inline_preview_flag = true; - $inline_preview_done = false; - } else { - $inline_preview_flag = false; - $inline_preview_done = false; - } - - $url_ht = $url; - $url = $purl[0]; - $url_en = rawurlencode($url); - $img_str = null; - $img_id = null; - - $icdb = new ImageCache2_DataObject_Images(); - - // r=0:�����N;r=1:���_�C���N�g;r=2:PHP�ŕ\�� - // t=0:�I���W�i��;t=1:PC�p�T���l�C��;t=2:�g�їp�T���l�C��;t=3:���ԃC���[�W - $img_url = 'ic2.php?r=0&t=2&uri=' . $url_en; - $img_url2 = 'ic2.php?r=0&t=2&id='; - $src_url = 'ic2.php?r=1&t=0&uri=' . $url_en; - $src_url2 = 'ic2.php?r=1&t=0&id='; - $src_exists = false; - - // ���C�ɃX�������摜�����N - $rank = null; - if ($_conf['expack.ic2.fav_auto_rank']) { - $rank = $this->getAutoFavRank(); - } - - // DB�ɉ摜��񂪓o�^����Ă����Ƃ� - if ($icdb->get($url)) { - $img_id = $icdb->id; - - // �E�B���X�Ɋ������Ă����t�@�C���̂Ƃ� - if ($icdb->mime == 'clamscan/infected') { - return '[IC2:�E�B���X�x��]'; - } - // ���ځ[��摜�̂Ƃ� - if ($icdb->rank < 0) { - return '[IC2:���ځ[��摜]'; - } - - // �I���W�i���̗L�����m�F - if (file_exists($this->thumbnailer->srcPath($icdb->size, $icdb->md5, $icdb->mime))) { - $src_exists = true; - $img_url = $img_url2 . $icdb->id; - $src_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime); - } else { - $img_url = $this->thumbnailer->thumbUrl($icdb->size, $icdb->md5, $icdb->mime); - $src_url = $src_url2 . $icdb->id; - } - - // �C�����C���v���r���[���L���̂Ƃ� - $prv_url = null; - if ($this->thumbnailer->ini['General']['inline'] == 1) { - // PC��read_new_k.php�ɃA�N�Z�X�����Ƃ��� - if (!isset($this->inline_prvw) || !is_object($this->inline_prvw)) { - $this->inline_prvw = $this->thumbnailer; - } - $prv_url = $this->inline_prvw->thumbUrl($icdb->size, $icdb->md5, $icdb->mime); - - // �T���l�C���\���������ȓ��̂Ƃ� - if ($inline_preview_flag) { - // �v���r���[�摜������Ă��邩�ǂ�����img�v�f�̑��������� - if (file_exists($this->inline_prvw->thumbPath($icdb->size, $icdb->md5, $icdb->mime))) { - $prv_size = explode('x', $this->inline_prvw->calc($icdb->width, $icdb->height)); - $img_str = ""; - } else { - $r_type = ($this->thumbnailer->ini['General']['redirect'] == 1) ? 1 : 2; - if ($src_exists) { - $prv_url = "ic2.php?r={$r_type}&t=1&id={$icdb->id}"; - } else { - $prv_url = "ic2.php?r={$r_type}&t=1&uri={$url_en}"; - } - $prv_url .= $this->img_dpr_query; - if ($this->img_dpr === 1.5 || $this->img_dpr === 2.0) { - $prv_onload = sprintf(' onload="autoAdjustImgSize(this, %f);"', $this->img_dpr); - } else { - $prv_onload = ''; - } - $img_str = ""; - } - $inline_preview_done = true; - } else { - $img_str = '[p2:�����摜(�ݸ:' . $icdb->rank . ')]'; - } - } - - // �����X���^�C�����@�\��ON�ŃX���^�C���L�^����Ă��Ȃ��Ƃ���DB���X�V - if (!is_null($this->img_memo) && strpos($icdb->memo, $this->img_memo) === false) { - $update = new ImageCache2_DataObject_Images(); - if (!is_null($icdb->memo) && strlen($icdb->memo) > 0) { - $update->memo = $this->img_memo . ' ' . $icdb->memo; - } else { - $update->memo = $this->img_memo; - } - $update->whereAddQuoted('uri', '=', $url); - } - - // expack.ic2.fav_auto_rank_override �̐ݒ�ƃ����N������OK�Ȃ� - // ���C�ɃX�������摜�����N���㏑���X�V - if ($rank !== null && self::isAutoFavRankOverride($icdb->rank, $rank)) { - if ($update === null) { - $update = new ImageCache2_DataObject_Images(); - $update->whereAddQuoted('uri', '=', $url); - } - $update->rank = $rank; - } - - if ($update !== null) { - $update->update(); - } - - // �摜���L���b�V������Ă��Ȃ��Ƃ� - // �����X���^�C�����@�\��ON�Ȃ�N�G����UTF-8�G���R�[�h�����X���^�C���܂߂� - } else { - // �摜���u���b�N���X�gor�G���[���O�ɂ��邩�m�F - if (false !== ($errcode = $icdb->ic2_isError($url))) { - return "[IC2:�װ({$errcode})]"; - } - - // �C�����C���v���r���[���L���ŁA�T���l�C���\���������ȓ��Ȃ� - if ($this->thumbnailer->ini['General']['inline'] == 1 && $inline_preview_flag) { - $rank_str = ($rank !== null) ? '&rank=' . $rank : ''; - $img_str = "img_memo_query}{$rank_str}\" width=\"{$prvw_size[0]}\" height=\"{$prvw_size[1]}\">"; - $inline_preview_done = true; - } else { - $img_url .= $this->img_memo_query; - } - } - - // �\�����������f�N�������g - if ($inline_preview_flag && $inline_preview_done) { - $pre_thumb_limit_k--; - } - - if (!empty($_SERVER['REQUEST_URI'])) { - $backto = '&from=' . rawurlencode($_SERVER['REQUEST_URI']); - } else { - $backto = ''; - } - - if (is_null($img_str)) { - return sprintf('[IC2:%s:%s]', - $img_url, - $backto, - p2h($purl['host']), - p2h(basename($purl['path'])) - ); - } - - return "{$img_str}"; - } - - return false; - } - // }}} // {{{ plugin_replaceImageUrl() diff --git a/lib/ShowThreadPc.php b/lib/ShowThreadPc.php index 2f1911183..353ec8889 100644 --- a/lib/ShowThreadPc.php +++ b/lib/ShowThreadPc.php @@ -66,19 +66,11 @@ public function __construct($aThread, $matome = false) } if (isset($GLOBALS['replaceImageUrlCtl'])) { $this->_url_handlers[] = 'plugin_replaceImageUrl'; - } - if (P2_IMAGECACHE_AVAILABLE == 2) { - $this->_url_handlers[] = 'plugin_imageCache2'; } elseif ($_conf['preview_thumbnail']) { $this->_url_handlers[] = 'plugin_viewImage'; } $this->_url_handlers[] = 'plugin_linkURL'; - // imepita��URL�����H����ImageCache2������v���O�C����o�^ - if (P2_IMAGECACHE_AVAILABLE == 2) { - $this->addURLHandler(array($this, 'plugin_imepitaToImageCache2')); - } - // �T���l�C���\����������ݒ� if (!isset($GLOBALS['pre_thumb_unlimited']) || !isset($GLOBALS['pre_thumb_limit'])) { if (isset($_conf['pre_thumb_limit']) && $_conf['pre_thumb_limit'] > 0) { @@ -1366,180 +1358,6 @@ public function plugin_viewImage($url, $purl, $str) return false; } - // }}} - // {{{ plugin_imageCache2() - - /** - * ImageCache2�T���l�C���ϊ� - * - * @param string $url - * @param array $purl - * @param string $str - * @return string|false - */ - public function plugin_imageCache2($url, $purl, $str, - $force = false, - $referer = null) - { - static $serial = 0; - - global $_conf; - global $pre_thumb_unlimited, $pre_thumb_ignore_limit, $pre_thumb_limit; - - if (P2Util::isUrlWikipediaJa($url)) { - return false; - } - - if ((preg_match('{^https?://.+?\\.(jpe?g|gif|png)$}i', $purl[0]) && empty($purl['query'])) || $force) { - // ���� - $serial++; - $thumb_id = 'thumbs' . $serial . $this->thumb_id_suffix; - $tmp_thumb = './img/ic_load.png'; - $url_ht = $url; - $url = $purl[0]; - $url_en = rawurlencode($url) . - ($referer ? '&ref=' . rawurlencode($referer) : ''); - $img_id = null; - - $icdb = new ImageCache2_DataObject_Images(); - - // r=0:�����N;r=1:���_�C���N�g;r=2:PHP�ŕ\�� - // t=0:�I���W�i��;t=1:PC�p�T���l�C��;t=2:�g�їp�T���l�C��;t=3:���ԃC���[�W - $img_url = 'ic2.php?r=1&uri=' . $url_en; - $thumb_url = 'ic2.php?r=1&t=1&uri=' . $url_en; - // ���C�ɃX�������摜�����N - $rank = null; - if ($_conf['expack.ic2.fav_auto_rank']) { - $rank = $this->getAutoFavRank(); - if ($rank !== null) { - $thumb_url .= '&rank=' . $rank; - } - } - - // DB�ɉ摜��񂪓o�^����Ă����Ƃ� - if ($icdb->get($url)) { - $img_id = $icdb->id; - - // �E�B���X�Ɋ������Ă����t�@�C���̂Ƃ� - if ($icdb->mime == 'clamscan/infected') { - return " {$str}"; - } - // ���ځ[��摜�̂Ƃ� - if ($icdb->rank < 0) { - return " {$str}"; - } - - // �I���W�i�����L���b�V������Ă���Ƃ��͉摜�𒼐ړǂݍ��� - if (file_exists($this->thumbnailer->srcPath($icdb->size, $icdb->md5, $icdb->mime))) { - $img_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime); - $cached = true; - } else { - $cached = false; - } - - // �T���l�C�����쐬����Ă��Ă���Ƃ��͉摜�𒼐ړǂݍ��� - if (file_exists($this->thumbnailer->thumbPath($icdb->size, $icdb->md5, $icdb->mime))) { - $thumb_url = $this->thumbnailer->thumbUrl($icdb->size, $icdb->md5, $icdb->mime); - // �����X���^�C�����@�\��ON�ŃX���^�C���L�^����Ă��Ȃ��Ƃ���DB���X�V - if (!is_null($this->img_memo) && strpos($icdb->memo, $this->img_memo) === false){ - $update = new ImageCache2_DataObject_Images(); - if (!is_null($icdb->memo) && strlen($icdb->memo) > 0) { - $update->memo = $this->img_memo . ' ' . $icdb->memo; - } else { - $update->memo = $this->img_memo; - } - $update->whereAddQuoted('uri', '=', $url); - } - - // expack.ic2.fav_auto_rank_override �̐ݒ�ƃ����N������OK�Ȃ� - // ���C�ɃX�������摜�����N���㏑���X�V - if ($rank !== null && - self::isAutoFavRankOverride($icdb->rank, $rank)) { - if ($update === null) { - $update = new ImageCache2_DataObject_Images(); - $update->whereAddQuoted('uri', '=', $url); - } - $update->rank = $rank; - } - - if ($update !== null) { - $update->update(); - } - } - - // �T���l�C���̉摜�T�C�Y - $thumb_size = $this->thumbnailer->calc($icdb->width, $icdb->height); - $thumb_size = preg_replace('/(\d+)x(\d+)/', 'width="$1" height="$2"', $thumb_size); - $tmp_thumb = './img/ic_load1.png'; - - $orig_img_url = $img_url; - $orig_thumb_url = $thumb_url; - - // �摜���L���b�V������Ă��Ȃ��Ƃ� - // �����X���^�C�����@�\��ON�Ȃ�N�G����UTF-8�G���R�[�h�����X���^�C���܂߂� - } else { - // �摜���u���b�N���X�gor�G���[���O�ɂ��邩�m�F - if (false !== ($errcode = $icdb->ic2_isError($url))) { - return " {$str}"; - } - - $cached = false; - - $orig_img_url = $img_url; - $orig_thumb_url = $thumb_url; - $img_url .= $this->img_memo_query; - $thumb_url .= $this->img_memo_query; - $thumb_size = ''; - $tmp_thumb = './img/ic_load2.png'; - } - - // �L���b�V������Ă��炸�A�\�����������L���̂Ƃ� - if (!$cached && !$pre_thumb_unlimited && !$pre_thumb_ignore_limit) { - // �\�������𒴂��Ă�����A�\�����Ȃ� - // �\�������𒴂��Ă��Ȃ���΁A�\�������J�E���^�������� - if ($pre_thumb_limit <= 0) { - $show_thumb = false; - } else { - $show_thumb = true; - $pre_thumb_limit--; - } - } else { - $show_thumb = true; - } - - // �\�����[�h - if ($show_thumb) { - $img_tag = ""; - if ($_conf['iframe_popup']) { - $view_img = $this->imageHtmlPopup($img_url, $img_tag, $str); - } else { - $view_img = "{$img_tag}{$str}"; - } - } else { - $img_tag = ""; - $view_img = "{$img_tag}{$str}"; - } - - // �\�[�X�ւ̃����N��ime�t���ŕ\�� - if ($_conf['expack.ic2.enabled'] && $_conf['expack.ic2.through_ime']) { - $ime_url = P2Util::throughIme($url); - if ($_conf['iframe_popup'] == 3) { - $ime_mark = ''; - } else { - $ime_mark = '[ime]'; - } - $view_img .= " {$ime_mark}"; - } - - $view_img .= ''; - - return $view_img; - } - - return false; - } - // }}} // {{{ plugin_replaceImageUrl() @@ -1712,30 +1530,6 @@ public function plugin_linkPlugin($url, $purl, $str) return $GLOBALS['linkPluginCtl']->replaceLinkToHTML($url, $str); } - // }}} - // {{{ plugin_imepitaToImageCache2() - - /** - * imepita��URL�����H����ImageCache2������v���O�C�� - * - * @param string $url - * @param array $purl - * @param string $str - * @return string|false - */ - public function plugin_imepitaToImageCache2($url, $purl, $str) - { - if (preg_match('{^https?://imepita\.jp/(?:image/)?(\d{8}/\d{6})}i', - $purl[0], $m) && empty($purl['query'])) { - $_url = 'http://imepita.jp/image/' . $m[1]; - $_purl = @parse_url($_url); - $_purl[0] = $_url; - return $this->plugin_imageCache2($_url, $_purl, $str, true, $url); - } - return false; - } - - // }}} // }}} // {{{ getQuotebacksJson() diff --git a/lib/wiki/ReplaceImageUrlCtl.php b/lib/wiki/ReplaceImageUrlCtl.php index 6c00a10ae..b693b2ddf 100644 --- a/lib/wiki/ReplaceImageUrlCtl.php +++ b/lib/wiki/ReplaceImageUrlCtl.php @@ -222,7 +222,7 @@ public function replaceImageUrl($url) break; } } - /* plugin_imageCache2�ŏ��������邽�߃R�����g�A�E�g + /* plugin_imageCache2�ŏ��������邽�߃R�����g�A�E�g �� plugin_imageCache2���폜����ו��� by 2ch774*/ // �q�b�g���Ȃ������ꍇ if (!$return[0]) { // �摜���ۂ�URL�̏ꍇ @@ -231,7 +231,6 @@ public function replaceImageUrl($url) $return[0]['referer'] = ''; } } - */ return $this->_reply($url, $return); } diff --git a/rep2/js/respopup_iphone.js b/rep2/js/respopup_iphone.js index 9bf7ad3c5..04634850e 100644 --- a/rep2/js/respopup_iphone.js +++ b/rep2/js/respopup_iphone.js @@ -97,7 +97,7 @@ ipoputil.callback = function(req, url, popid, yOffset) { $container.css('top',yOffset.toString() + 'px'); $container.css('z-index',ipoputil.getZ()); //respop���̓�����������ɂ��Ă��� - $container.skOuterClick(ipoputil.getDeactivator($container, url),$("[id^=_respop]"),$('#ic2-info-body'),$('#ic2-info-closer'),$('#spm'),$('#spm-closer')); + $container.skOuterClick(ipoputil.getDeactivator($container, url),$("[id^=_respop]"),$('.close-button'),$('#ic2-info-body'),$('#ic2-info-closer'),$('#spm'),$('#spm-closer')); $closer.addClass('close-button'); $closer.attr('src', 'img/iphone/close.png'); From 45cf829f1829b42eca3d0d37861c8769b4069a02 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sun, 21 Jun 2015 23:54:44 +0900 Subject: [PATCH 167/339] =?UTF-8?q?=E9=AB=98=E9=80=9F=E5=8C=96=E3=83=91?= =?UTF-8?q?=E3=83=83=E3=83=81=E6=9B=B4=E6=96=B0=20http://anago.2ch.net/tes?= =?UTF-8?q?t/read.cgi/software/1431258367/120?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/NgAbornCtl.php | 93 +++++++++++++++++++++------------------------- 1 file changed, 43 insertions(+), 50 deletions(-) diff --git a/lib/NgAbornCtl.php b/lib/NgAbornCtl.php index 804020c24..d1162979e 100644 --- a/lib/NgAbornCtl.php +++ b/lib/NgAbornCtl.php @@ -244,9 +244,11 @@ static protected function _readNgAbornFromFile($filename) { $data = array(); if ($lines = FileCtl::file_read_lines($file)) { + // �O�ɏo���č����� + $replace_pairs = array('<' => '<', '>' => '>'); foreach ($lines as $l) { $lar = explode("\t", trim($l)); - if (strlen($lar[0]) == 0) { + if ($lar[0] === '') { continue; } $ar = array( @@ -264,64 +266,55 @@ static protected function _readNgAbornFromFile($filename) { $data[] = $ar; continue; } - - // �”��� - if (preg_match('!(.+?)!', $ar['word'], $matches)) { - $ar['bbs'] = explode(',', $matches[1]); - } - $ar['word'] = preg_replace('!(.*)!', '', $ar['word']); - - // �^�C�g������ - if (preg_match('!(.+?)!', $ar['word'], $matches)) { - $ar['title'] = $matches[1]; - } - $ar['word'] = preg_replace('!(.*)!', '', $ar['word']); - - // ���K�\�� - if (preg_match('/^<(mb_ereg|preg_match|regex)(:[imsxeADSUXu]+)?>(.+)$/', $ar['word'], $matches)) { - // �}�b�`���O�֐��ƃp�^�[����ݒ� - if ($matches[1] == 'regex') { - if (P2_MBREGEX_AVAILABLE) { - $ar['regex'] = 'mb_ereg'; - $ar['word'] = $matches[3]; - } else { - $ar['regex'] = 'preg_match'; - $ar['word'] = '/' . str_replace('/', '\\/', $matches[3]) . '/'; - } - } else { - $ar['regex'] = $matches[1]; - $ar['word'] = $matches[3]; + // ���e���(edit_aborn_word.php�ʂ�Ȃ�K�����̏��ԂɂȂ�) + if (preg_match('{^(?:<(regex|regexi|i)>)?(?:(.+?))?(?:(.+?))?(.+)$}s', $ar['word'], $matches)) { + switch ($matches[1]) { + // ���K�\�� + case "regex": + if (P2_MBREGEX_AVAILABLE) { + $ar['regex'] = 'mb_ereg'; + $ar['word'] = $matches[4]; + } else { + $ar['regex'] = 'preg_match'; + $ar['word'] = '/' . str_replace('/', '\\/', $matches[4]) . '/'; + } + break; + // ���K�\���E�啶���������𖳎� + case 'regexi': + if (P2_MBREGEX_AVAILABLE) { + $ar['regex'] = 'mb_eregi'; + $ar['word'] = $matches[4]; + } else { + $ar['regex'] = 'preg_match'; + $ar['word'] = '/' . str_replace('/', '\\/', $matches[4]) . '/i'; + } + break; + // �啶���������𖳎� + case 'i': + $ar['word'] = $matches[4]; + $ar['ignorecase'] = true; + default: + // �G�X�P�[�v����Ă��Ȃ����ꕶ�����G�X�P�[�v + // $ar['word'] = p2h($ar['word'], false); + // 2ch�̎d�l��A���͊��Ғʂ�̌��ʂ������Ȃ����Ƃ������̂ŁA<>�������̎Q�Ƃɂ��� + $ar['word'] = strtr($matches[4], $replace_pairs); + break; } - // �啶���������𖳎� - if ($matches[2] && strpos($matches[2], 'i') !== false) { - if ($ar['regex'] == 'mb_ereg') { - $ar['regex'] = 'mb_eregi'; - } else { - $ar['word'] .= 'i'; - } + // �”��� + if ($matches[2] !== '') { + $ar['bbs'] = explode(',', $matches[2]); + } + // �^�C�g������ + if ($matches[3] !== '') { + $ar['title'] = $matches[3]; } - // �啶���������𖳎� - } elseif (preg_match('/^(.+)$/', $ar['word'], $matches)) { - $ar['word'] = $matches[1]; - $ar['ignorecase'] = true; - } - - // ���K�\���łȂ��Ȃ�A�G�X�P�[�v����Ă��Ȃ����ꕶ�����G�X�P�[�v - /*if (!$ar['regex']) { - $ar['word'] = p2h($ar['word'], false); - }*/ - // 2ch�̎d�l��A���͊��Ғʂ�̌��ʂ������Ȃ����Ƃ������̂ŁA<>�������̎Q�Ƃɂ��� - if (!$ar['regex']) { - $ar['word'] = str_replace(array('<', '>'), array('<', '>'), $ar['word']); } - $data[] = $ar; } } return array('file' => $file, 'data' => $data); } - // }}} } From dceecdb4a6e9e438f336f16bac61cefd21d6b65b Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Mon, 22 Jun 2015 00:09:20 +0900 Subject: [PATCH 168/339] =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E9=A0=85=E7=9B=AE2ch?= =?UTF-8?q?api=5Frounin=E3=82=92=E5=89=8A=E9=99=A4=EF=BC=88=E5=BC=B7?= =?UTF-8?q?=E5=88=B6ON=E3=81=AB=E5=A4=89=E6=9B=B4=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- conf/conf_user_def.inc.php | 4 ---- lib/auth2chapi.inc.php | 2 +- rep2/edit_conf_user.php | 1 - 4 files changed, 2 insertions(+), 7 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 9a1af07b4..cc9f0a460 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150510.1111', // rep2�̃o�[�W���� + 'p2version' => '150621.0091', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index bad6d5d6f..5c2551ec6 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -390,10 +390,6 @@ $conf_user_def['2chapi_use'] = 0; // (0) $conf_user_rad['2chapi_use'] = array('1' => '����', '0' => '���Ȃ�'); -// 2ch API �F�؎��Ɂ�(�Q�l)ID�𑗐M���� -$conf_user_def['2chapi_rounin'] = 0; // (0) -$conf_user_rad['2chapi_rounin'] = array('1' => '����', '0' => '���Ȃ�'); - // 2ch API �F�؂���Ԋu(�P��:����) $conf_user_def['2chapi_interval'] = 1; // (1) $conf_user_rules['2chapi_interval'] = array('emptyToDef', 'notIntExceptMinusToDef'); diff --git a/lib/auth2chapi.inc.php b/lib/auth2chapi.inc.php index 8fe81d949..daae86591 100644 --- a/lib/auth2chapi.inc.php +++ b/lib/auth2chapi.inc.php @@ -37,7 +37,7 @@ function authenticate_2chapi() return ''; } - if ($_conf['2chapi_rounin'] == 1&& $array = P2Util::readIdPw2ch()) { + if ($array = P2Util::readIdPw2ch()) { list($login2chID, $login2chPW, $autoLogin2ch) = $array; } diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index b2e5b9368..a4f7e3305 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -375,7 +375,6 @@ } else { $conflist = array( array('2chapi_use','2ch API ���g�p����'), - array('2chapi_rounin','2ch API �F�؎��Ɂ�(�Q�l)ID�𑗐M����(�l���@�\)'), array('2chapi_interval','2ch API �F�؂���Ԋu(�P��:����)'), 'API�F�؏��(�S�ĕK�{)', array('2chapi_appkey','AppKey', P2_EDIT_CONF_USER_LONGTEXT), From cee80431f73889650ba0432720e16f48d3c79a46 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Mon, 22 Jun 2015 10:38:20 +0900 Subject: [PATCH 169/339] =?UTF-8?q?Merge=20#11=20=E5=85=AC=E5=BC=8F=20P2?= =?UTF-8?q?=20=E9=96=A2=E9=80=A3=E3=81=AE=E3=82=B3=E3=83=BC=E3=83=89?= =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4=20offlaw2(shiro=3Dkuma)=E3=82=92?= =?UTF-8?q?=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf_user_def.inc.php | 17 -- doc/README-killer.txt | 28 +++ lib/P2Util.php | 28 --- lib/ThreadRead.php | 310 ++++++++++++---------------------- lib/post_form_options.inc.php | 10 +- rep2/edit_conf_user.php | 7 +- rep2/post.php | 79 ++------- 7 files changed, 154 insertions(+), 325 deletions(-) create mode 100644 doc/README-killer.txt diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index 5c2551ec6..23e9dafb2 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -19,23 +19,6 @@ // be.2ch.net��MDMD(�蓮�ݒ肷��ꍇ�̂ݓ���) $conf_user_def['be_2ch_MDMD'] = ""; // ("") -// }}} -// {{{ p2.2ch.net�A�J�E���g - -// p2.2ch.net�̃T�[�o�[ -$conf_user_def['p2_2ch_host'] = "w1.p2.2ch.net"; // ("w1.p2.2ch.net") -$conf_user_rules['p2_2ch_host'] = array('/^(?:w\\d+\\.)?p2\\.2ch\\.net$/'); - -// p2.2ch.net�̓o�^���[���A�h���X -$conf_user_def['p2_2ch_mail'] = ""; // ("") - -// p2.2ch.net�̃��O�C���p�X���[�h -$conf_user_def['p2_2ch_pass'] = ""; // ("") - -// p2.2ch.net Cookie�F�؎���IP�A�h���X�̓��ꐫ���`�F�b�N -$conf_user_def['p2_2ch_ignore_cip'] = 0; // (0) -$conf_user_rad['p2_2ch_ignore_cip'] = array('0' => '�`�F�b�N����', '1' => '�`�F�b�N���Ȃ�'); - // }}} // {{{ PATH diff --git a/doc/README-killer.txt b/doc/README-killer.txt new file mode 100644 index 000000000..f83ab1cf9 --- /dev/null +++ b/doc/README-killer.txt @@ -0,0 +1,28 @@ +rep2 �@�\�g���p�b�N �S������(expack all in one) by killer + + +�����H + rep2-expack_allinone https://github.com/2ch774/p2-php + ��L��X���ɏグ��ꂽ�C������荞�݂‚‹C�ɂȂ����Ƃ�����S�j���S�j������o�[�W�����ł��B + + +���Ɛ� + + �{�\�t�g�E�F�A�̎g�p�ɂ�蒼�ڂ���ъԐړI�ɐ����������Ȃ鑹�Q���⏞�������܂���B + �g�p�͎��ȐӔC�ŁB + + +������ + + �ݒu�Җ{�l�����p����̂͂������A�F�؂�؂�Ȃǂ��� + ��O�҂Ɉ��p����Ă��d���Ȃ��‹��Ŏg���̂͂�߂Ă��������B + + +�����C�Z���X + + �{��p2�Ɠ������AX11���C�Z���X�ł��B + + +��ChangeLog + + https://github.com/killer4989/p2-php/commits/master �ɏ����Ă���R�~�b�g���O�łǂ���(�� diff --git a/lib/P2Util.php b/lib/P2Util.php index b574f6519..ec5295455 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -2062,34 +2062,6 @@ static public function getHostGroupName($host) } } - // }}} - // {{{ getP2Client() - - /** - * P2Client�N���X�̃C���X�^���X�𐶐����� - * - * @param void - * @return P2Client - */ - static public function getP2Client() - { - global $_conf; - - if (!is_dir($_conf['db_dir'])) { - FileCtl::mkdirRecursive($_conf['db_dir']); - } - - try { - return new P2Client("http://{$_conf['p2_2ch_host']}/p2/", - $_conf['p2_2ch_mail'], - $_conf['p2_2ch_pass'], - $_conf['db_dir'], - (bool)$_conf['p2_2ch_ignore_cip']); - } catch (P2Exception $e) { - p2die($e->getMessage()); - } - } - // }}} // {{{ rawurlencodeCallback() diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index a6d690224..9c6ce9ea5 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -78,13 +78,6 @@ public function downloadDat() { include $_conf['sid2ch_php']; return $this->_downloadDat2chMaru ($uaMona, $SID2ch); - // 2ch bbspink �����^�|�ǂ� - } elseif (P2Util::isHost2chs ($this->host) && ! empty ($_GET['moritapodat']) && $_conf['p2_2ch_mail'] && $_conf['p2_2ch_pass']) { - if (! array_key_exists ('csrfid', $_GET) || $this->_getCsrfIdForMoritapoDat () != $_GET['csrfid']) { - p2die ('�s���ȃ��N�G�X�g�ł�'); - } - return $this->_downloadDat2chMoritapo (); - // 2ch�̉ߋ����O�q�ɓǂ� } elseif (! empty ($_GET['kakolog']) && ! empty ($_GET['kakoget'])) { if ($_GET['kakoget'] == 1) { @@ -94,10 +87,6 @@ public function downloadDat() { } return $this->_downloadDat2chKako ($_GET['kakolog'], $ext); - // 2ch or 2ch�݊� - } elseif (P2Util::isHost2chs ($this->host) && ! empty ($_GET['shirokuma'])) { - return $this->_downloadDat2chMaru ($uaMona, $SID2ch, true); - // 2ch ��API�o�R�ŗ��Ƃ� } elseif (P2Util::isHost2chs ($this->host) && $_conf['2chapi_use'] && empty ($_GET['olddat'])) { @@ -264,6 +253,17 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { $body = substr ($body, 1); } + // 2�s�ڂ�؂�o�� + $lines = explode("\n", $body); + $secondmsg = $lines[1]; + + // 2�s�ڂ��ߋ����O�ł��邱�Ƃ������Ă���悤�ł���Ήߋ����O�����N��\�� + if (mb_strpos ($secondmsg, "�Q�����˂� ��<><>2015/05/31(��) 00:00:00.00 ID:????????<> ���̃X���b�h�͉ߋ����O�ł��B") === 0) { + return $this->_downloadDat2chNotFound ('302'); + } + unset ($secondmsg); + unset ($lines); + $file_append = ($zero_read) ? 0 : FILE_APPEND; if (FileCtl::file_write_contents ($this->keydat, $body, $file_append) === false) { @@ -498,29 +498,73 @@ protected function _downloadDat2chNotFound($code = null) { */ protected function _downloadDat2chMaru($uaMona, $SID2ch, $shirokuma = false) { global $_conf; + global $debug; - if (! ($this->host && $this->bbs && $this->key && $this->keydat)) { + if (! ($this->host && $this->bbs && $this->key)) { return false; } - // GET /test/offlaw.cgi?bbs=�–�&key=�X���b�h�ԍ�&sid=�Z�b�V����ID HTTP/1.1 - // $url = "http://{$this->host}/test/offlaw.cgi/{$this->bbs}/{$this->key}/?raw=0.0&sid="; - if (! $shirokuma) { - // �Q�l�Ή� - $rokkasystem = explode (".", $this->host, 2); - $url = "http://rokka.$rokkasystem[1]/$rokkasystem[0]/{$this->bbs}/{$this->key}/?raw=0.0&sid="; - $url .= rawurlencode ($SID2ch); + $AppKey = $_conf['2chapi_appkey']; + $AppName = $_conf['2chapi_appname']; + $HMKey = $_conf['2chapi_hmkey']; + $ReadUA = sprintf ($_conf['2chapi_ua.read'], $AppName); + + if ($SID2ch == '') { + return false; + } + + $from_bytes = intval ($from_bytes); + + if ($from_bytes == 0) { + $zero_read = true; } else { - $url = "http://{$this->host}/test/offlaw2.so?shiro=kuma&bbs={$this->bbs}&key={$this->key}&sid=ERROR"; + $zero_read = false; + $from_bytes = $from_bytes - 1; } + + $serverName = explode ('.', $this->host); + // $url = "http://{$this->host}/{$this->bbs}/dat/{$this->key}.dat"; + // $url="http://news2.2ch.net/test/read.cgi?bbs=newsplus&key=1038486598"; + + if($_conf['2chapi_ssl.read']) { + $url = 'https://api.2ch.net/v1/'; + } else { + $url = 'http://api.2ch.net/v1/'; + } + + $url .= $serverName[0] . '/' . $this->bbs . '/' . $this->key; + $message = '/v1/' . $serverName[0] . '/' . $this->bbs . '/' . $this->key . $SID2ch . $AppKey; + $HB = hash_hmac ("sha256", $message, $HMKey); + $purl = parse_url ($url); // URL���� try { - $req = P2Util::getHTTPRequest2 ($url, HTTP_Request2::METHOD_GET); + $req = P2Util::getHTTPRequest2 ($url, HTTP_Request2::METHOD_POST); + // �w�b�_ - $req->setHeader ('User-Agent', "{$uaMona} ({$_conf['p2ua']})"); + $req->setHeader ('User-Agent', $ReadUA); - // Request�̑��M + if (! $zero_read) { + $req->setHeader ('Range', sprintf ('bytes=%d-', $from_bytes) ); + } + + if ($this->modified) { + $req->setHeader ('If-Modified-Since', $this->modified); + } + + // Basic�F�ؗp�̃w�b�_ + if (isset ($purl['user']) && isset ($purl['pass'])) { + $req->setAuth ($purl['user'], $purl['pass'], HTTP_Request2::AUTH_BASIC); + } + + // POST������e + $req->addPostParameter (array ( + 'sid' => $SID2ch, + 'hobo' => $HB, + 'appkey' => $AppKey + )); + + // POST�f�[�^�̑��M $response = $req->send (); $code = $response->getStatus (); @@ -532,25 +576,48 @@ protected function _downloadDat2chMaru($uaMona, $SID2ch, $shirokuma = false) { $this->modified = $response->getHeader ('Last-Modified'); - if (FileCtl::file_write_contents ($this->keydat, $body, 0) === false) { - p2die ('cannot write file. downloadDat2chMaru()'); + // 1�s�ڂ�؂�o�� + $posLF = mb_strpos ($body, "\n"); + $firstmsg = mb_substr ($body, 0, $posLF === false ? mb_strlen ($body) : $posLF); + + // ng�Ŏn�܂��Ă���api�̃G���[�̉”\�� + if (preg_match ("/^ng \((.*)\)$/", $firstmsg)) { + $this->getdat_error_msg_ht .= "

    rep2 error: API�o�R�ł̘Q�l ID �̃X���b�h�擾�Ɏ��s���܂����B" . $firstmsg . "

    "; + $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&relogin2chapi=true\">API�ōĎ擾�����݂�]"; + $this->getdat_error_msg_ht .= $this->_generateMarutoriLink (true); + $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&olddat=true\">��dat�ōĎ擾�����݂�]"; + $this->diedat = true; + return false; } + unset ($firstmsg); - // �N���[�j���O ===== - if ($marudatlines = FileCtl::file_read_lines ($this->keydat)) { - if (! $shirokuma) { - $firstline = array_shift ($marudatlines); - // �`�����N�Ƃ� - if (strpos ($firstline, 'Success') === false) { // �Q�l(rokka)�Ή� - $secondline = array_shift ($marudatlines); - } - } - $cont = ''; - foreach ($marudatlines as $aline) { - $cont .= $aline; + // �����̉��s�ł��ځ[��`�F�b�N + if (! $zero_read) { + if (substr ($body, 0, 1) != "\n") { + // echo "���ځ[�񌟏o"; + $this->onbytes = 0; + $this->modified = null; + return $this->_downloadDat2chMaru($uaMona, $SID2ch, $shirokuma); // dat�T�C�Y�͕s���B�S����蒼���B } - if (FileCtl::file_write_contents ($this->keydat, $cont) === false) { - p2die ('cannot write file. downloadDat2chMaru()'); + $body = substr ($body, 1); + } + + $file_append = ($zero_read) ? 0 : FILE_APPEND; + + if (FileCtl::file_write_contents ($this->keydat, $body, $file_append) === false) { + p2die ('cannot write file.'); + } + + // $GLOBALS['debug'] && $GLOBALS['profiler']->enterSection("dat_size_check"); + // �擾��T�C�Y�`�F�b�N + if ($zero_read == false && $this->onbytes) { + $this->getDatBytesFromLocalDat (); // $aThread->length ��set + if ($this->onbytes != $this->length) { + $this->onbytes = 0; + $this->modified = null; + P2Util::pushInfoHtml ("

    rep2 info: {$this->onbytes}/{$this->length} �t�@�C���T�C�Y���ςȂ̂ŁAdat���Ď擾

    "); + // $GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection("dat_size_check"); + return $this->_downloadDat2chMaru($uaMona, $SID2ch, $shirokuma); // dat�T�C�Y�͕s���B�S����蒼���B } } @@ -583,7 +650,6 @@ protected function _downloadDat2chMaruNotFound() { return $this->downloadDat (); } else { $remarutori_ht = $this->_generateMarutoriLink (true); - $moritori_ht = $this->_generateMoritapoDatLink (); $this->getdat_error_msg_ht .= "

    rep2 info: ��ID�ł̃X���b�h�擾�Ɏ��s���܂����B{$remarutori_ht}{$moritori_ht}

    "; $this->diedat = true; return false; @@ -756,7 +822,6 @@ public function get2chDatError($code = null) { $dat_response_status = "���̃X���b�h�͉ߋ����O�q�ɂɊi�[����Ă��܂��B"; $marutori_ht = $this->_generateMarutoriLink (); $plugin_ht = $this->_generateWikiDatLink ($read_url); - $moritori_ht = $this->_generateMoritapoDatLink (); $dat_response_msg = "

    2ch info - ���̃X���b�h�͉ߋ����O�q�ɂɊi�[����Ă��܂��B{$marutori_ht}{$moritori_ht}{$plugin_ht}

    "; // ������Ȕ�or�X���b�h�Ȃ��ł��Bor error 3939 @@ -778,7 +843,6 @@ public function get2chDatError($code = null) { } elseif (preg_match ($waithtml_match, $read_response_html, $matches)) { $dat_response_status = "����! �X���b�h��html�������̂�҂��Ă���悤�ł��B"; $marutori_ht = $this->_generateMarutoriLink (); - $moritori_ht = $this->_generateMoritapoDatLink (); $dat_response_msg = "<p>2ch info - ����! �X���b�h��html�������̂�҂��Ă���悤�ł��B{$marutori_ht}{$moritori_ht}</p>"; } elseif (preg_match ($vip2ch_kakodat_match, $read_response_html, $matches)) { $dat_response_status = "����! �ߋ����O�q�ɂŁAdat�𔭌����܂����B"; @@ -1177,167 +1241,6 @@ public function getDefaultGetDatErrorMessageHTML() { return $diedat_msg; } - // }}} - // {{{ _generateMoritapoDatLink() - - /** - * ����p2��(dat�擾�������Ȃ��ꍇ�̓����^�|�������)dat���擾���邽�߂̃����N�𐶐�����B - * - * @param - * void - * @return string - */ - protected function _generateMoritapoDatLink() { - global $_conf; - - if ($_conf['p2_2ch_mail'] && $_conf['p2_2ch_pass']) { - $csrfid = $this->_getCsrfIdForMoritapoDat (); - $query = p2h ('host=' . rawurlencode ($this->host) . '&bbs=' . rawurlencode ($this->bbs) . '&key=' . rawurlencode ($this->key) . '&ls=' . rawurlencode ($this->ls) . '&moritapodat=true' . '&csrfid=' . rawurlencode ($csrfid)); - return " [<a href=\"{$_conf['read_php']}?{$query}{$_conf['k_at_a']}\">�����^�|��rep2�Ɏ�荞��</a>]"; - } else { - return ''; - } - } - - // }}} - // {{{ _downloadDat2chMoritapo() - - /** - * ����p2��(dat�擾�������Ȃ��ꍇ�̓����^�|�������)dat���擾���� - * - * @param - * void - * @return bool - */ - protected function _downloadDat2chMoritapo() { - global $_conf; - - // dat���_�E�����[�h - try { - $client = P2Util::getP2Client (); - $body = $client->downloadDat ($this->host, $this->bbs, $this->key, $response); - // DEBUG - /* - * $GLOBALS['_downloadDat2chMoritapo_response_dump'] = '<pre>' . p2h(print_r($response, true)) . '</pre>'; - * register_shutdown_function(create_function('', 'echo $GLOBALS[\'_downloadDat2chMoritapo_response_dump\'];')); - */ - } catch (P2Exception $e) { - p2die ($e->getMessage ()); - } - - // �f�[�^���؂���1 - if (! $body || (strpos ($body, '<>') === false && strpos ($body, ',') === false)) { - return $this->_downloadDat2chMoritapoNotFound (); - } - - // ���s�ʒu�����o - $posCR = strpos ($body, "\r"); - $posLF = strpos ($body, "\n"); - if ($posCR === false && $posLF === false) { - $pos = strlen ($body); - } elseif ($posCR === false) { - $pos = $posLF; - } elseif ($posLF === false) { - $pos = $posCR; - } else { - $pos = min ($posLF, $posCR); - } - - // 1�s�ڂ̎擾�ƃf�[�^���؂���2 - $firstLine = rtrim (substr ($body, 0, $pos)); - if (strpos ($firstLine, '<>') !== false) { - $this->dat_type = '2ch'; - } elseif (strpos ($firstLine, ',') !== false) { - $this->dat_type = '2ch_old'; - } else { - return $this->_downloadDat2chMoritapoNotFound (); - } - - // �f�[�^���؂���3 (�^�C�g�� = $ar[4]) - $ar = $this->explodeDatLine ($firstLine); - if (count ($ar) < 5) { - return $this->_downloadDat2chMoritapoNotFound (); - } - - // ���[�J��dat�ɏ������� - if (FileCtl::file_write_contents ($this->keydat, $body) === false) { - p2die ('cannot write file. downloadDat2chMoritapo()'); - } - - return true; - } - - // }}} - // {{{ _downloadDat2chMoritapoNotFound() - - /** - * �����^�|�ł̎擾���ł��Ȃ������Ƃ��ɌĂяo����� - * - * @param - * void - * @return bool - */ - protected function _downloadDat2chMoritapoNotFound() { - global $_conf; - - $csrfid = $this->_getCsrfIdForMoritapoDat (); - - $host_en = rawurlencode ($this->host); - $bbs_en = rawurlencode ($this->bbs); - $key_en = rawurlencode ($this->key); - $ls_en = rawurlencode ($this->ls); - - $host_ht = p2h ($this->host); - $bbs_ht = p2h ($this->bbs); - $key_ht = p2h ($this->key); - $ls_ht = p2h ($this->ls); - - $query_ht = p2h ("host={$host_en}&bbs={$bbs_en}&key={$key_en}&ls={$ls_en}&maru=true"); - $marutori_ht = $this->_generateMarutoriLink (); - - if ($hosts = $this->scanOriginalHosts ()) { - $hostlist_ht = '<br>dat���瑼�̃z�X�g�������o���܂����B'; - foreach ($hosts as $host) { - $hostlist_ht .= " [<a href=\"#\" onclick=\"this.parentNode.elements['host'].value='{$host}';return false;\">{$host}</a>]"; - } - } else { - $hostlist_ht = ''; - } - - $this->getdat_error_msg_ht .= <<<EOF -<p>rep2 info: �����^�|�ł̃X���b�h�擾�Ɏ��s���܂����B{$marutori_ht}</p> -<form action="{$_conf['read_php']}" method="get"> - �z�X�g�� - <input type="text" name="host" value="{$host_ht}" size="12"> - <input type="hidden" name="bbs" value="{$bbs_ht}"> - <input type="hidden" name="key" value="{$key_ht}"> - <input type="hidden" name="ls" value="{$ls_ht}"> - �ɕς��� - <input type="submit" name="moritapodat" value="�����^�|��rep2�Ɏ�荞��ł݂�"> - <input type="hidden" name="csrfid" value="{$csrfid}"> - {$hostlist_ht} - {$_conf['k_input_ht']} -</form>\n -EOF; - $this->diedat = true; - - return false; - } - - // }}} - // {{{ _getCsrfIdForMoritapoDat() - - /** - * ����p2����dat���擾����ۂɎg��CSRF�h�~�g�[�N���𐶐����� - * - * @param - * void - * @return string - */ - protected function _getCsrfIdForMoritapoDat() { - return P2Util::getCsrfId ('moritapodat' . $this->host . $this->bbs . $this->key); - } - // }}} // {{{ _pushInfoMessage() @@ -1578,7 +1481,6 @@ protected function _generateMarutoriLink($retry = false) { $atext = "��ID��rep2�Ɏ�荞��"; } $marutori_ht = " [<a href=\"{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&maru=true{$retry_q}{$_conf['k_at_a']}\">{$atext}</a>]"; - $marutori_ht .= " [<a href=\"{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&shirokuma=true{$_conf['k_at_a']}\">offlaw�o�R��rep2�Ɏ�荞��</a>]"; return $marutori_ht; } // }}} diff --git a/lib/post_form_options.inc.php b/lib/post_form_options.inc.php index ac30333db..563c03e11 100644 --- a/lib/post_form_options.inc.php +++ b/lib/post_form_options.inc.php @@ -165,7 +165,7 @@ function setHiddenValue(button) { } // }}} -// {{{ ��/Be/����p2 �������� �`�F�b�N�{�b�N�X +// {{{ ��/Be �������� �`�F�b�N�{�b�N�X // 2ch���������� if (P2Util::isHost2chs($host) and file_exists($_conf['sid2ch_php'])) { @@ -179,14 +179,6 @@ function setHiddenValue(button) { . '<label for="beres">Be�ŏ�������</label>'; } -// ����p2 -if ((P2Util::isHost2chs($host) || P2Util::isHostMachiBbs($host)) && - $_conf['p2_2ch_mail'] && $_conf['p2_2ch_pass']) -{ - $htm['p2res'] = '<input type="checkbox" id="p2res" name="p2res" value="1"'. $hd['p2res_checked'] . '>' - . '<label for="p2res">����p2�ŏ�������</label>'; -} - // }}} // {{{ �������݃u���b�N�p�`�F�b�N�{�b�N�X diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index a4f7e3305..f5059c8a7 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -220,7 +220,7 @@ // {{{ rep2��{�ݒ� // {{{ 'be/p2' -$groupname = 'be/p2'; +$groupname = 'be'; $groups[] = $groupname; $flags = getGroupShowFlags($groupname); if ($flags & P2_EDIT_CONF_USER_SKIPPED) { @@ -232,11 +232,6 @@ array('be_2ch_password', '<a href="http://be.2ch.net/" target="_blank">be.2ch.net</a>�̃p�X���[�h(�F�؃R�[�h�͎g���Ȃ��Ȃ�܂���)', P2_EDIT_CONF_USER_PASSWORD), array('be_2ch_DMDM', '<a href="http://be.2ch.net/" target="_blank">be.2ch.net</a>��DMDM(�蓮�ݒ肷��ꍇ�̂ݓ���)', P2_EDIT_CONF_USER_LONGTEXT), array('be_2ch_MDMD', '<a href="http://be.2ch.net/" target="_blank">be.2ch.net</a>��MDMD(�蓮�ݒ肷��ꍇ�̂ݓ���)', P2_EDIT_CONF_USER_LONGTEXT), - '����p2', - array('p2_2ch_host', '����p2 (<a href="http://p2.2ch.net/" target="_blank">p2.2ch.net</a>) �Ŋ��蓖�Ă��Ă���T�[�o�[', P2_EDIT_CONF_USER_LONGTEXT), - array('p2_2ch_mail', '����p2�̓o�^���[���A�h���X', P2_EDIT_CONF_USER_LONGTEXT), - array('p2_2ch_pass', '����p2�̃��O�C���p�X���[�h', P2_EDIT_CONF_USER_LONGTEXT | P2_EDIT_CONF_USER_PASSWORD), - array('p2_2ch_ignore_cip', ' p2.2ch.net Cookie�F�؎���IP�A�h���X�̓��ꐫ���`�F�b�N'), ); printEditConfGroupHtml($groupname, $conflist, $flags); } diff --git a/rep2/post.php b/rep2/post.php index b7b6fd104..bcd0d3c43 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -200,37 +200,31 @@ // �������݂��ꎞ�I�ɕۑ� PostDataStore::set($post_backup_key, $post_cache); -// �|�X�g���s -if (!empty($_POST['p2res']) && empty($_POST['newthread'])) { - // ����p2�ŏ������� - $posted = postIt2($host, $bbs, $key, $FROM, $mail, $MESSAGE); -} else { - // cookie �ǂݍ��� - $cookie_key = $_login->user_u . '/' . P2Util::normalizeHostName(P2Util::isHostBbsPink($host) ? 'www.bbspink.com' : P2Util::isHost2chs($host) ? 'www.2ch.net' : $host); // �E�@���Ή� - if ($p2cookies = CookieDataStore::get($cookie_key)) { - if (is_array($p2cookies)) { - if (array_key_exists('expires', $p2cookies)) { - // �����؂�Ȃ�j�� - if (time() > strtotime($p2cookies['expires'])) { - CookieDataStore::delete($cookie_key); - $p2cookies = null; - } +// cookie �ǂݍ��� +$cookie_key = $_login->user_u . '/' . P2Util::normalizeHostName(P2Util::isHostBbsPink($host) ? 'www.bbspink.com' : P2Util::isHost2chs($host) ? 'www.2ch.net' : $host); // �E�@���Ή� +if ($p2cookies = CookieDataStore::get($cookie_key)) { + if (is_array($p2cookies)) { + if (array_key_exists('expires', $p2cookies)) { + // �����؂�Ȃ�j�� + if (time() > strtotime($p2cookies['expires'])) { + CookieDataStore::delete($cookie_key); + $p2cookies = null; } - } else { - CookieDataStore::delete($cookie_key); - $p2cookies = null; } } else { + CookieDataStore::delete($cookie_key); $p2cookies = null; } +} else { + $p2cookies = null; +} - // ���ڏ������� - $posted = postIt($host, $bbs, $key, $post); +// ���ڏ������� +$posted = postIt($host, $bbs, $key, $post); - // cookie �ۑ� - if ($p2cookies) { - CookieDataStore::set($cookie_key, $p2cookies); - } +// cookie �ۑ� +if ($p2cookies) { + CookieDataStore::set($cookie_key, $p2cookies); } // ���e���s�L�^���폜 @@ -502,43 +496,6 @@ function postIt($host, $bbs, $key, $post) } } -// }}} -// {{{ postIt2() - -/** - * ����p2�Ń��X���������� - * - * @return boolean �������ݐ����Ȃ� true�A���s�Ȃ� false - */ -function postIt2($host, $bbs, $key, $FROM, $mail, $MESSAGE) -{ - if (P2Util::isHostBe2chNet($host) || !empty($_REQUEST['beres'])) { - $beRes = true; - } else { - $beRes = false; - } - - try { - $posted = P2Util::getP2Client()->post($host, $bbs, $key, - $FROM, $mail, $MESSAGE, - $beRes, $response); - } catch (P2Exception $e) { - p2die('����p2�|�X�g���s', $e->getMessage()); - } - - if ($posted) { - $reload = empty($_POST['from_read_new']); - showPostMsg(true, '�������݂��I���܂����B', $reload); - } else { - $result_msg = '����p2�|�X�g���s</p>' - . '<pre>' . p2h($response['body']) . '</pre>' - . '<p>-'; - showPostMsg(false, $result_msg, false); - } - - return $posted; -} - // }}} // {{{ showPostMsg() From 154de7ac52c6efaedabb643271954c666a808870 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Mon, 22 Jun 2015 10:41:44 +0900 Subject: [PATCH 170/339] =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E9=A0=85=E7=9B=AE?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=E3=81=AB=E4=BC=B4=E3=81=86=E3=83=90=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E3=83=A7=E3=83=B3=E7=95=AA=E5=8F=B7=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index cc9f0a460..dcff755ab 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150621.0091', // rep2�̃o�[�W���� + 'p2version' => '150621.0092', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; From f794ff98110738285f611b1c87f9d887a7db4a00 Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Mon, 22 Jun 2015 05:34:14 +0900 Subject: [PATCH 171/339] =?UTF-8?q?DAT=20=E3=81=AE2=E8=A1=8C=E7=9B=AE?= =?UTF-8?q?=E3=81=8C=E9=81=8E=E5=8E=BB=E3=83=AD=E3=82=B0=E3=81=A7=E3=81=82?= =?UTF-8?q?=E3=82=8B=E3=81=93=E3=81=A8=E3=82=92=E7=A4=BA=E3=81=97=E3=81=A6?= =?UTF-8?q?=E3=81=84=E3=82=8B=E3=82=88=E3=81=86=E3=81=A7=E3=81=82=E3=82=8C?= =?UTF-8?q?=E3=81=B0=E9=81=8E=E5=8E=BB=E3=83=AD=E3=82=B0=E6=89=B1=E3=81=84?= =?UTF-8?q?=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 9c6ce9ea5..a2132149a 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -420,6 +420,17 @@ protected function _downloadDat2ch($from_bytes) { $body = substr ($body, 1); } + // 2�s�ڂ�؂�o�� + $lines = explode("\n", $body); + $secondmsg = $lines[1]; + + // 2�s�ڂ��ߋ����O�ł��邱�Ƃ������Ă���悤�ł���Ήߋ����O�����N��\�� + if (mb_strpos ($secondmsg, "�Q�����˂� ��<><>2015/05/31(��) 00:00:00.00 ID:????????<> ���̃X���b�h�͉ߋ����O�ł��B") === 0) { + return $this->_downloadDat2chNotFound ('302'); + } + unset ($secondmsg); + unset ($lines); + $file_append = ($zero_read) ? 0 : FILE_APPEND; if (FileCtl::file_write_contents ($this->keydat, $body, $file_append) === false) { From dae14ed5daebff6061ac28b30dacbe80c1974565 Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Sat, 27 Jun 2015 23:54:48 +0900 Subject: [PATCH 172/339] =?UTF-8?q?=E3=82=AD=E3=83=A3=E3=83=83=E3=82=B7?= =?UTF-8?q?=E3=83=A5=E7=A2=BA=E8=AA=8D=E3=81=A730=E5=88=86=E3=81=8A?= =?UTF-8?q?=E3=81=8D=E3=81=AB=E6=9B=B4=E6=96=B0=E3=81=99=E3=82=8B=E3=81=AF?= =?UTF-8?q?=E3=81=9A=E3=81=8C30=E6=99=82=E9=96=93=E3=81=AB=E3=81=AA?= =?UTF-8?q?=E3=81=A3=E3=81=A6=E3=81=84=E3=81=9F=E3=81=AE=E3=81=A7=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/BbsMap.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/BbsMap.php b/lib/BbsMap.php index 16fe7767e..232a756e7 100644 --- a/lib/BbsMap.php +++ b/lib/BbsMap.php @@ -313,7 +313,7 @@ static private function _getMapping() // {{{ �ݒ� $map_cache_path = $_conf['cache_dir'] . '/host_bbs_map.txt'; - $map_cache_lifetime = 60 * 60 * 30; // 30�������ɍX�V�����邩�m�F���邪BrdCtl���ōŒ�1���Ԃ̓A�N�Z�X���Ȃ��B + $map_cache_lifetime = 60 * 30; // 30�������ɍX�V�����邩�m�F���邪BrdCtl���ōŒ�1���Ԃ̓A�N�Z�X���Ȃ��B // }}} // {{{ �L���b�V���m�F From eddd6f2a27ceac84960326bf24f72a472c017ef9 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 10 Jul 2015 14:04:48 +0900 Subject: [PATCH 173/339] =?UTF-8?q?v151710.1400=20=E4=B9=85=E3=80=85?= =?UTF-8?q?=E3=81=AE=E3=83=AA=E3=83=AA=E3=83=BC=E3=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- doc/README-774.txt | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index dcff755ab..fc03f2be8 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150621.0092', // rep2�̃o�[�W���� + 'p2version' => '151710.1400', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/doc/README-774.txt b/doc/README-774.txt index 0866093cb..570a66a61 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -60,6 +60,13 @@ rep2-expack test https://github.com/orzisun/p2-php ��ChangeLog +151710.1400 +* �L���b�V���m�F��30�������ɍX�V����͂���30���ԂɂȂ��Ă����̂ŏC�� +* DAT ��2�s�ڂ��ߋ����O�ł��邱�Ƃ������Ă���悤�ł���Ήߋ����O�����ɂ��� +* ���� P2 �֘A�̃R�[�h���폜 +* offlaw2(shiro=kuma)���폜 +* ��L�̕ύX�_��killer4989����̃p�b�`����荞�� +* �ݒ荀��2chapi_rounin���폜�i����ON�ɕύX�j 150510.1111 * Youtube�ƃj�R���̓��������N�v���O�C�����폜 From a277f07ffbc7e0087e3a6a923b64c04345e5f287 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sat, 11 Jul 2015 09:38:35 +0900 Subject: [PATCH 174/339] =?UTF-8?q?v150711.1000=20=E3=83=90=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E3=83=A7=E3=83=B3=E7=95=AA=E5=8F=B7=E3=83=9F=E3=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- doc/README-774.txt | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index fc03f2be8..329835dda 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '151710.1400', // rep2�̃o�[�W���� + 'p2version' => '150711.1000', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/doc/README-774.txt b/doc/README-774.txt index 570a66a61..c6d7a431c 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -60,6 +60,10 @@ rep2-expack test https://github.com/orzisun/p2-php ��ChangeLog +150711.1000 +�E�o�[�W�����ԍ��̐����~�X���Ă��̂� 151710.1400 ���ɂ��ĕt������ +�E�X�V���e�ɖ�薳���͂��Ȃ̂œ��e�� 151710.1400 �Ɠ���ł��B + 151710.1400 * �L���b�V���m�F��30�������ɍX�V����͂���30���ԂɂȂ��Ă����̂ŏC�� * DAT ��2�s�ڂ��ߋ����O�ł��邱�Ƃ������Ă���悤�ł���Ήߋ����O�����ɂ��� From fb4b9852ea25fc48f48d8d3c05854863a860ac8a Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Fri, 14 Aug 2015 14:41:42 +0900 Subject: [PATCH 175/339] =?UTF-8?q?=E3=81=BE=E3=81=A1BBS=E3=81=A7=E3=83=AA?= =?UTF-8?q?=E3=83=A2=E3=83=BC=E3=83=88=E3=83=9B=E3=82=B9=E3=83=88=E5=90=8D?= =?UTF-8?q?=E3=82=92=E8=A1=A8=E7=A4=BA=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf_user_def.inc.php | 4 ++++ lib/DownloadDatMachiBbs.php | 12 +++++++++++- rep2/edit_conf_user.php | 1 + 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index 23e9dafb2..cf3371020 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -326,6 +326,10 @@ $conf_user_def['coloredid.coloring.type'] = 0; $conf_user_rad['coloredid.coloring.type'] = array('0' => '�I���W�i��', '1' => 'thermon��'); +// �܂�BBS�Ń����[�g�z�X�g����\�� +$conf_user_def['machibbs.disphost.enable'] = 1; +$conf_user_rad['machibbs.disphost.enable'] = array('1' => '����', '0' => '���Ȃ�'); + // }}} // {{{ NG/���ځ[�� diff --git a/lib/DownloadDatMachiBbs.php b/lib/DownloadDatMachiBbs.php index f39357f80..2a4263223 100644 --- a/lib/DownloadDatMachiBbs.php +++ b/lib/DownloadDatMachiBbs.php @@ -53,7 +53,11 @@ static public function invoke(ThreadRead $thread) } // http://[SERVER]/bbs/offlaw.cgi/[BBS]/[KEY]/[OPTION]; - $url = "http://{$host}/bbs/offlaw.cgi/{$bbs}/{$key}/{$option}"; + if($_conf['machibbs.disphost.enable']){ + $url = "http://{$host}/bbs/offlaw.cgi/2/{$bbs}/{$key}/{$option}"; + } else { + $url = "http://{$host}/bbs/offlaw.cgi/{$bbs}/{$key}/{$option}"; + } $tempfile = $thread->keydat . '.tmp'; FileCtl::mkdirFor($tempfile); @@ -104,6 +108,12 @@ static public function invoke(ThreadRead $thread) fwrite($fp, $abn); $thread->gotnum++; } + + if($_conf['machibbs.disphost.enable']){ + $lar[2] .= sprintf(" [ %s ]", $lar[5]); + } + unset($lar[5]); + // �s���������� fwrite($fp, implode('<>', $lar) . "\n"); } else { diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index f5059c8a7..b0a8e583f 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -332,6 +332,7 @@ array('coloredid.click', 'ID�o�������N���b�N����ƒ��F���g�O��(�u���Ȃ��v�ɂ����Javascript�ł͂Ȃ�PHP�Œ��F)'), array('coloredid.marking.colors', 'ID�o�������_�u���N���b�N���ă}�[�L���O�̐F���X�g(�J���}��؂�)'), array('coloredid.coloring.type', '�J���[�����O�̃^�C�v�ithermon�ł�PHP�Œ��F(coloredid.click=���Ȃ�)�̏ꍇ�̂ݗL���j'), + array('machibbs.disphost.enable', '�܂�BBS�Ń����[�g�z�X�g����\��'), ); printEditConfGroupHtml($groupname, $conflist, $flags); } From e2ee4b3af250a2c154c6e1d5df10d1b3a13d3324 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Tue, 15 Sep 2015 10:59:05 +0900 Subject: [PATCH 176/339] v150815.1030 --- conf/conf.inc.php | 2 +- doc/README-774.txt | 8 ++++++-- rep2/subject.php | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 329835dda..24d87ee4b 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150711.1000', // rep2�̃o�[�W���� + 'p2version' => '150815.1030', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/doc/README-774.txt b/doc/README-774.txt index c6d7a431c..06d65e7fd 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -60,9 +60,13 @@ rep2-expack test https://github.com/orzisun/p2-php ��ChangeLog +150815.1030 +* �\�����X���̏����2000����65535�ɕύX +* �܂�BBS�̃z�X�g����\������ݒ��lj��ikiller4989����̃p�b�`����荞�݁j + 150711.1000 -�E�o�[�W�����ԍ��̐����~�X���Ă��̂� 151710.1400 ���ɂ��ĕt������ -�E�X�V���e�ɖ�薳���͂��Ȃ̂œ��e�� 151710.1400 �Ɠ���ł��B +* �o�[�W�����ԍ��̐����~�X���Ă��̂� 151710.1400 �����Ԃɂ��ĕt������ +* �X�V���e�ɖ�薳���͂��Ȃ̂œ��e�� 151710.1400 �Ɠ���ł��B 151710.1400 * �L���b�V���m�F��30�������ɍX�V����͂���30���ԂɂȂ��Ă����̂ŏC�� diff --git a/rep2/subject.php b/rep2/subject.php index c40690f74..3ca376bd0 100644 --- a/rep2/subject.php +++ b/rep2/subject.php @@ -117,7 +117,7 @@ // }}} // {{{ �\���X���b�h���ݒ� -$threads_num_max = 2000; +$threads_num_max = 65535; if (!$spmode || $spmode == 'merge_favita') { $threads_num = $p2_setting['viewnum']; From 67d0692204aa67ff336d6f54589268648f70a349 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 3 Mar 2016 13:26:30 +0900 Subject: [PATCH 177/339] =?UTF-8?q?2ch=20API=E3=81=AE=E7=8B=AC=E8=87=AA?= =?UTF-8?q?=E3=83=AC=E3=82=B9=E3=83=9D=E3=83=B3=E3=82=B9=E3=83=98=E3=83=83?= =?UTF-8?q?=E3=83=80=E3=82=92=E4=BD=BF=E7=94=A8=E3=81=97=E3=81=A6=E3=80=81?= =?UTF-8?q?DAT=E5=8F=96=E5=BE=97=E6=99=82=E3=81=AE=E3=80=81=E8=AA=8D?= =?UTF-8?q?=E8=A8=BC=E5=A4=B1=E6=95=97=E3=81=A8=E9=81=8E=E5=8E=BB=E3=83=AD?= =?UTF-8?q?=E3=82=B0=E5=8F=96=E5=BE=97=E5=A4=B1=E6=95=97=E3=81=AE=E5=88=A4?= =?UTF-8?q?=E5=AE=9A=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index a2132149a..12a5a82e8 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -200,8 +200,24 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { // POST�f�[�^�̑��M $response = $req->send (); + // 2ch API �̏�Ԃ��w�b�_�[�ɋL�ڂ���Ă���̂Ŏ擾����B + // User-Status: 0 (sessionID����) or 1 (sessionID�L��) or + // 2 (sessionID�L���^https://2chv.tora3.net/futen.cgi�Ŏ擾��������) + // 3 (sessionID�L���^API�F�؎���Ronin�A�J�E���g��t���Ď擾��������) + // �� User-Status: �� 2,3 �̎���dat����/�ߋ����O������ + $apiUserStatus = $response->getHeader('User-Status'); + + // Thread-Status: 0 (dat�擾�s��) or 1 (���s�X��) or 2 (dat����) or 3 (�ߋ����O) or + // 8 (dat�擾�s�^Ronin������dat����/�ߋ����O����낤�Ƃ����Ƃ�) + $apiThreadStatus = $response->getHeader('Thread-Status'); + $code = $response->getStatus (); + if($_conf['2chapi_debug_print']==1) + { + P2Util::pushInfoHtml('<p>p2 debug(ThreadRead::API): User-Status='.$apiUserStatus.' Thread-Status='.$apiThreadStatus.' HTTP-Status='.$code.'</p>'); + } + if ($code == '200' || $code == '206') { // Partial Content $body = $response->getBody (); @@ -303,6 +319,13 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { $this->onbytes = 0; $this->modified = null; return $this->_downloadDat2chAPI ($sid, 0); // ���ځ[�񌟏o�B�S����蒼���B + } elseif ($code == '401' && $apiUserStatus == '0') { // 401��API�F�؎��s(�ĔF�؂���) + if (empty ($_REQUEST['relogin2chapi'])) { + $_REQUEST['relogin2chapi'] = true; + return $this->downloadDat (); + } + } elseif ($code == '501' && $apiUserStatus == '1') { // �Q�l�����ŏ�����Range�t��DAT�����ɃA�N�Z�X�����ꍇ��501 + return $this->_downloadDat2chNotFound ('302'); } else { return $this->_downloadDat2chNotFound ($code); } From 1c70e516d85a58a7e5c636461fb45647ef115ff6 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 3 Mar 2016 13:52:11 +0900 Subject: [PATCH 178/339] =?UTF-8?q?DAT=E8=90=BD=E3=81=A1=E3=81=AE=E5=88=A4?= =?UTF-8?q?=E5=AE=9A=E3=81=ABThread-Status=E3=83=98=E3=83=83=E3=83=80?= =?UTF-8?q?=E3=82=92=E4=BD=BF=E7=94=A8=E3=81=99=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 12a5a82e8..7fe8b9b9b 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -218,6 +218,11 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { P2Util::pushInfoHtml('<p>p2 debug(ThreadRead::API): User-Status='.$apiUserStatus.' Thread-Status='.$apiThreadStatus.' HTTP-Status='.$code.'</p>'); } + // API�̕ԓ����ߋ����O(Ronin��)��������ߋ����O�����N��\�����ďI�� + if($apiThreadStatus == '8') { + return $this->_downloadDat2chNotFound ('302'); + } + if ($code == '200' || $code == '206') { // Partial Content $body = $response->getBody (); @@ -235,9 +240,11 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { $this->modified = $response->getHeader ('Last-Modified'); + // �s���ɕ��� + $lines = explode("\n", $body ,3); + // 1�s�ڂ�؂�o�� - $posLF = mb_strpos ($body, "\n"); - $firstmsg = mb_substr ($body, 0, $posLF === false ? mb_strlen ($body) : $posLF); + $firstmsg = $lines[0]; // ng�Ŏn�܂��Ă���api�̃G���[�̉”\�� if (preg_match ("/^ng \((.*)\)$/", $firstmsg)) { @@ -258,6 +265,18 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { } unset ($firstmsg); + // 2�s�ڂ�؂�o�� + $secondmsg = $lines[1]; + + // 2�s�ڂ��ߋ����O�ł��邱�Ƃ������Ă���悤�ł���Ήߋ����O�����N��\�� + // API�̃w�b�_�[�Ŕ��肵�Ă����܂ŗ��Ȃ��悤�ɕύX������DAT�j���h�~�̂��ߎc�� + if (mb_strpos ($secondmsg, "�Q�����˂� ��<><>2015/05/31(��) 00:00:00.00 ID:????????<> ���̃X���b�h�͉ߋ����O�ł��B") === 0) { + return $this->_downloadDat2chNotFound ('302'); + } + + unset ($secondmsg); + unset ($lines); + // �����̉��s�ł��ځ[��`�F�b�N if (! $zero_read) { if (substr ($body, 0, 1) != "\n") { @@ -269,17 +288,6 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { $body = substr ($body, 1); } - // 2�s�ڂ�؂�o�� - $lines = explode("\n", $body); - $secondmsg = $lines[1]; - - // 2�s�ڂ��ߋ����O�ł��邱�Ƃ������Ă���悤�ł���Ήߋ����O�����N��\�� - if (mb_strpos ($secondmsg, "�Q�����˂� ��<><>2015/05/31(��) 00:00:00.00 ID:????????<> ���̃X���b�h�͉ߋ����O�ł��B") === 0) { - return $this->_downloadDat2chNotFound ('302'); - } - unset ($secondmsg); - unset ($lines); - $file_append = ($zero_read) ? 0 : FILE_APPEND; if (FileCtl::file_write_contents ($this->keydat, $body, $file_append) === false) { From 9fb51e7af003ba2e1cd02602848cdba061e5fdfe Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 3 Mar 2016 13:59:03 +0900 Subject: [PATCH 179/339] =?UTF-8?q?=E4=B8=8D=E8=B6=B3=E3=81=97=E3=81=A6?= =?UTF-8?q?=E3=81=84=E3=81=9F=E9=AB=98=E8=A7=A3=E5=83=8F=E5=BA=A6=E3=82=A2?= =?UTF-8?q?=E3=82=A4=E3=82=B3=E3=83=B3=E3=82=92=E8=BF=BD=E5=8A=A0=20thx!?= =?UTF-8?q?=20http://potato.2ch.net/test/read.cgi/software/1431258367/767?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/img/glyphish/icons2/42-photos@2x.png | Bin 0 -> 467 bytes rep2/img/glyphish/icons2/42-photos@3x.png | Bin 0 -> 746 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 rep2/img/glyphish/icons2/42-photos@2x.png create mode 100644 rep2/img/glyphish/icons2/42-photos@3x.png diff --git a/rep2/img/glyphish/icons2/42-photos@2x.png b/rep2/img/glyphish/icons2/42-photos@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..847196cb6dd946b83078b0cbb747db383d99cbb1 GIT binary patch literal 467 zcmeAS@N?(olHy`uVBq!ia0vp^2|(<?!3HFsniTN?DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a!@$58=jq}YQo;CkmLp%2 zg8<9LA1wd=JKbAw%sHN?aqpQcYSD3Of=T+JCPxlz`#G_JMMZ&;)5C#DXhH)^nDU1g zRu3Lq*u_RFTmIg+UH13Ys(Inkcf<T07{B)D3yTzVF0XsM+U}9f!rxLhw{0~-avVGy zgtHyKe=IZ4`|=~_fX2#2f0tz*$hrPv-LV@Di;Szkq>CDOt;(=x6={_Hdo%ML<A3gV zyV%sH?_$5%AknalN#R3hDA0^xMu8tkv=meptYqM*NfH$hx)8#^Vz-ftgEK>mfoXmO zYYU5sC_|(F8YU;ESzHYV)WaAR8GTtD9tf{)n9!i6_TW29R}~lQM!VjlEOXYS9n=?P z@D6WaN?<D3!yCZh!_c>#aYIAq{hsKj_DokB%xfO`3g5rh@UGl;xnj*`fmMv=r=!w0 wGbLQ-f-2@};5_irj6p164|4dZY>;cz*N~UhEsYIZ42%K>Pgg&ebxsLQ0KIFZumAu6 literal 0 HcmV?d00001 diff --git a/rep2/img/glyphish/icons2/42-photos@3x.png b/rep2/img/glyphish/icons2/42-photos@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..21a710d12146a16713f0df0adbea2c8f097c1350 GIT binary patch literal 746 zcmeAS@N?(olHy`uVBq!ia0vp^6M#5@gAGW2y7GG=kYY)9^mSxl*x1kgCy^D%S4j2< z@?~JCQe$9fXklRZ1r%y{!N5>zz`*b-fq}tl1_Oh5!JJ)zHVh0*rJgR1Ar*{o?*#fC zcHnWnD7LZXU483aXU+OBm8Llpmu)NkF>At%ig&wxOtc=BeQsr7;!tS7NgVKD`hMzi zmEHXHr~byiefzOu%CmVhuZKTNx~^29;;=wj@VF)ui`T=Vj}sXh`&?v}a|md(o<8c% zbpLpMiN(JQde6$APq`)Pch}X;eT~D!V?Qla&;RV7RXok1c+;N~K2dgu?3`X5^0oi6 zV(*2QUxl<Ul$L4TXW?*ZR%Kc&ml#}bJ5|0lY{Am|_D5MB9S~w<(tQ~0qrj&lsBl5Z z?&#vO#QLL=mEywH?{;)=VLHmvdzpn}irX>;A%%b?iF4E(7MK{Z0^Oy=``Cn$Y3W4G z4i*lPOo`>30vf$OjzHIY9JcUnaL7#IQetFsl{%IQ^oeq?08sjpfuFEKfYi(;j|Hn8 zlK(jd^DKV6W2wXX>Dzl&pSTvZ;P>Bi3zXQlimc$U&fUW)(81=-!m*{r->}hQgG+;h z_YV=_4rX+r?KN91_c7ghy7lSGRgsO$)OKgavD{**dX>vzVtUi}v(g2%3&Hu$3s#=Y zn<d_8);O<9n#tF<?D8ItEu3Gj+!n~l+BEx_>jK{e%kQ;01W&$evVPk9*3_Fv&Y#<~ zb)CI>0;|>Y$8YReIKJ>JEI-dVrLN^?aPQ|2T64BCg?cP3<Y&o}iEF*a8KT&F%vNAU zVTEXvdO)j))OUvk#~y}e%ykeA%DBVaDAgXmuoO)Lt1X`70Zum#mQ40pf8}m1IxPMP Qm@*kWUHx3vIVCg!08W@4+W-In literal 0 HcmV?d00001 From 4b6d0f4da58576842dbd5f4d99ae65759fe4096a Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 3 Mar 2016 14:29:13 +0900 Subject: [PATCH 180/339] =?UTF-8?q?API+=E6=B5=AA=E4=BA=BA=E3=81=A7?= =?UTF-8?q?=E5=8F=96=E5=BE=97=E3=81=97=E3=81=9FDAT=E3=82=92=E9=81=8E?= =?UTF-8?q?=E5=8E=BB=E3=83=AD=E3=82=B0=E6=89=B1=E3=81=84=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 7fe8b9b9b..6f1613f62 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -307,7 +307,10 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { } } - $this->isonline = true; + if ($apiThreadStatus == '1') { + // ���s�X���̎������Z�b�g + $this->isonline = true; + } return true; } elseif ($code == '302') { // Found // �z�X�g�̈ړ]��ǐ� From 5cacc21cc052ac39799ed6d95329b0326e1d5dee Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 3 Mar 2016 14:39:42 +0900 Subject: [PATCH 181/339] =?UTF-8?q?=E2=97=8F=E3=81=A7DAT=E3=82=92=E3=83=80?= =?UTF-8?q?=E3=82=A6=E3=83=B3=E3=83=AD=E3=83=BC=E3=83=89=E3=81=99=E3=82=8B?= =?UTF-8?q?=E7=82=BA=E3=81=AE=E3=82=B3=E3=83=BC=E3=83=89=E3=82=92=E9=99=A4?= =?UTF-8?q?=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 193 +-------------------------------------------- 1 file changed, 1 insertion(+), 192 deletions(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 6f1613f62..6281f2f6a 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -61,25 +61,7 @@ public function downloadDat() { $this->getDatBytesFromLocalDat (); // $aThread->length ��set $pinktest = "/\w+\.bbspink.com/"; - // 2ch bbspink���ǂ� - if (P2Util::isHost2chs ($this->host) && ! empty ($_GET['maru'])) { - // ���O�C�����ĂȂ���� or ���O�C����A24���Ԉȏ�o�߂��Ă����玩���ă��O�C�� - if (! file_exists ($_conf['sid2ch_php']) || ! empty ($_REQUEST['relogin2ch']) || (filemtime ($_conf['sid2ch_php']) < time () - 60 * 60 * 24)) { - if (! function_exists ('login2ch')) { - include P2_LIB_DIR . '/login2ch.inc.php'; - } - if (! login2ch ()) { - $this->getdat_error_msg_ht .= $this->get2chDatError (); - $this->diedat = true; - return false; - } - } - - include $_conf['sid2ch_php']; - return $this->_downloadDat2chMaru ($uaMona, $SID2ch); - - // 2ch�̉ߋ����O�q�ɓǂ� - } elseif (! empty ($_GET['kakolog']) && ! empty ($_GET['kakoget'])) { + if (! empty ($_GET['kakolog']) && ! empty ($_GET['kakoget'])) { if ($_GET['kakoget'] == 1) { $ext = '.dat.gz'; } elseif ($_GET['kakoget'] == 2) { @@ -528,179 +510,6 @@ protected function _downloadDat2chNotFound($code = null) { return false; } - // }}} - // {{{ _downloadDat2chMaru() - - /** - * 2ch���p DAT���_�E�����[�h���� - * - * @param string $uaMona - * @param string $SID2ch - * @param bool $shirokuma - * true�Ȃ�offlaw2�Ŏ擾 - * @return bool - * @see lib/login2ch.inc.php - */ - protected function _downloadDat2chMaru($uaMona, $SID2ch, $shirokuma = false) { - global $_conf; - global $debug; - - if (! ($this->host && $this->bbs && $this->key)) { - return false; - } - - $AppKey = $_conf['2chapi_appkey']; - $AppName = $_conf['2chapi_appname']; - $HMKey = $_conf['2chapi_hmkey']; - $ReadUA = sprintf ($_conf['2chapi_ua.read'], $AppName); - - if ($SID2ch == '') { - return false; - } - - $from_bytes = intval ($from_bytes); - - if ($from_bytes == 0) { - $zero_read = true; - } else { - $zero_read = false; - $from_bytes = $from_bytes - 1; - } - - $serverName = explode ('.', $this->host); - // $url = "http://{$this->host}/{$this->bbs}/dat/{$this->key}.dat"; - // $url="http://news2.2ch.net/test/read.cgi?bbs=newsplus&key=1038486598"; - - if($_conf['2chapi_ssl.read']) { - $url = 'https://api.2ch.net/v1/'; - } else { - $url = 'http://api.2ch.net/v1/'; - } - - $url .= $serverName[0] . '/' . $this->bbs . '/' . $this->key; - $message = '/v1/' . $serverName[0] . '/' . $this->bbs . '/' . $this->key . $SID2ch . $AppKey; - $HB = hash_hmac ("sha256", $message, $HMKey); - - $purl = parse_url ($url); // URL���� - - try { - $req = P2Util::getHTTPRequest2 ($url, HTTP_Request2::METHOD_POST); - - // �w�b�_ - $req->setHeader ('User-Agent', $ReadUA); - - if (! $zero_read) { - $req->setHeader ('Range', sprintf ('bytes=%d-', $from_bytes) ); - } - - if ($this->modified) { - $req->setHeader ('If-Modified-Since', $this->modified); - } - - // Basic�F�ؗp�̃w�b�_ - if (isset ($purl['user']) && isset ($purl['pass'])) { - $req->setAuth ($purl['user'], $purl['pass'], HTTP_Request2::AUTH_BASIC); - } - - // POST������e - $req->addPostParameter (array ( - 'sid' => $SID2ch, - 'hobo' => $HB, - 'appkey' => $AppKey - )); - - // POST�f�[�^�̑��M - $response = $req->send (); - - $code = $response->getStatus (); - - if ($code == '200' || $code == '206') { // Partial Content - $body = $response->getBody (); - - $this->onbytes = intval ($response->getHeader ('Content-Length')); - - $this->modified = $response->getHeader ('Last-Modified'); - - // 1�s�ڂ�؂�o�� - $posLF = mb_strpos ($body, "\n"); - $firstmsg = mb_substr ($body, 0, $posLF === false ? mb_strlen ($body) : $posLF); - - // ng�Ŏn�܂��Ă���api�̃G���[�̉”\�� - if (preg_match ("/^ng \((.*)\)$/", $firstmsg)) { - $this->getdat_error_msg_ht .= "<p>rep2 error: API�o�R�ł̘Q�l ID �̃X���b�h�擾�Ɏ��s���܂����B" . $firstmsg . "</p>"; - $this->getdat_error_msg_ht .= " [<a href=\"{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&relogin2chapi=true\">API�ōĎ擾�����݂�</a>]"; - $this->getdat_error_msg_ht .= $this->_generateMarutoriLink (true); - $this->getdat_error_msg_ht .= " [<a href=\"{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&olddat=true\">��dat�ōĎ擾�����݂�</a>]"; - $this->diedat = true; - return false; - } - unset ($firstmsg); - - // �����̉��s�ł��ځ[��`�F�b�N - if (! $zero_read) { - if (substr ($body, 0, 1) != "\n") { - // echo "���ځ[�񌟏o"; - $this->onbytes = 0; - $this->modified = null; - return $this->_downloadDat2chMaru($uaMona, $SID2ch, $shirokuma); // dat�T�C�Y�͕s���B�S����蒼���B - } - $body = substr ($body, 1); - } - - $file_append = ($zero_read) ? 0 : FILE_APPEND; - - if (FileCtl::file_write_contents ($this->keydat, $body, $file_append) === false) { - p2die ('cannot write file.'); - } - - // $GLOBALS['debug'] && $GLOBALS['profiler']->enterSection("dat_size_check"); - // �擾��T�C�Y�`�F�b�N - if ($zero_read == false && $this->onbytes) { - $this->getDatBytesFromLocalDat (); // $aThread->length ��set - if ($this->onbytes != $this->length) { - $this->onbytes = 0; - $this->modified = null; - P2Util::pushInfoHtml ("<p>rep2 info: {$this->onbytes}/{$this->length} �t�@�C���T�C�Y���ςȂ̂ŁAdat���Ď擾</p>"); - // $GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection("dat_size_check"); - return $this->_downloadDat2chMaru($uaMona, $SID2ch, $shirokuma); // dat�T�C�Y�͕s���B�S����蒼���B - } - } - - return true; - } elseif ($code == '304') { - return '304 Not Modified'; - } else { - return $this->_downloadDat2chMaruNotFound ($code); - } - } catch (Exception $e) { - $this->getdat_error_msg_ht .= "<p>�T�[�o�ڑ��G���[: " . $e->getMessage (); - $this->getdat_error_msg_ht .= "<br>rep2 error: �ƒT�[�o�ւ̐ڑ��Ɏ��s���܂����B</p>"; - $this->diedat = true; - return false; - } - } - - // }}} - // {{{ _downloadDat2chMaruNotFound() - - /** - * ��ID�ł̎擾���ł��Ȃ������Ƃ��ɌĂяo����� - */ - protected function _downloadDat2chMaruNotFound() { - global $_conf; - - // �ă`�������W���܂��Ȃ�A�ă`�������W����BSID���ύX����Ă��܂��Ă���ꍇ�����鎞�̂��߂̎����`�������W�B - if (empty ($_REQUEST['relogin2ch']) && empty ($_REQUEST['shirokuma'])) { - $_REQUEST['relogin2ch'] = true; - return $this->downloadDat (); - } else { - $remarutori_ht = $this->_generateMarutoriLink (true); - $this->getdat_error_msg_ht .= "<p>rep2 info: ��ID�ł̃X���b�h�擾�Ɏ��s���܂����B{$remarutori_ht}{$moritori_ht}</p>"; - $this->diedat = true; - return false; - } - } - // }}} // {{{ _downloadDat2chKako() From ef772f869aaae70ac76e8db2843e9748274b4cfc Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 3 Mar 2016 14:50:43 +0900 Subject: [PATCH 182/339] =?UTF-8?q?=E2=97=8F=E3=81=A7DAT=E3=82=92=E5=8F=96?= =?UTF-8?q?=E5=BE=97=E3=81=99=E3=82=8B=E3=81=9F=E3=82=81=E3=81=AE=E3=83=AA?= =?UTF-8?q?=E3=83=B3=E3=82=AF=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 29 +++++------------------------ 1 file changed, 5 insertions(+), 24 deletions(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 6281f2f6a..c055835ef 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -674,9 +674,9 @@ public function get2chDatError($code = null) { // <title>�����̃X���b�h�͉ߋ����O�q�ɂ� if ($reason === 'datochi' || preg_match ($kakosoko_match, $read_response_html, $matches) || preg_match ($kakosoko_match2, $read_response_html, $matches)) { $dat_response_status = "���̃X���b�h�͉ߋ����O�q�ɂɊi�[����Ă��܂��B"; - $marutori_ht = $this->_generateMarutoriLink (); + //$marutori_ht = $this->_generateMarutoriLink (); $plugin_ht = $this->_generateWikiDatLink ($read_url); - $dat_response_msg = "<p>2ch info - ���̃X���b�h�͉ߋ����O�q�ɂɊi�[����Ă��܂��B{$marutori_ht}{$moritori_ht}{$plugin_ht}</p>"; + $dat_response_msg = "<p>2ch info - ���̃X���b�h�͉ߋ����O�q�ɂɊi�[����Ă��܂��B�Q�l���O�C������Ǝ擾�o���邩������܂���B{$plugin_ht}</p>"; // <title>������Ȕ�or�X���b�h�Ȃ��ł��Bor error 3939 } elseif ($reason === 'kakohtml' or @@ -696,8 +696,9 @@ public function get2chDatError($code = null) { $dat_response_msg = "<p>2ch info - ����! �ߋ����O�q�ɂŁA<a href=\"{$kakolog_uri}.html\"{$_conf['bbs_win_target_at']}>�X���b�h {$matches[3]}.html</a> �𔭌����܂����B [<a href=\"{$read_kako_url}\">rep2�Ɏ�荞��œǂ�</a>]</p>"; } elseif (preg_match ($waithtml_match, $read_response_html, $matches)) { $dat_response_status = "����! �X���b�h��html�������̂�҂��Ă���悤�ł��B"; - $marutori_ht = $this->_generateMarutoriLink (); - $dat_response_msg = "<p>2ch info - ����! �X���b�h��html�������̂�҂��Ă���悤�ł��B{$marutori_ht}{$moritori_ht}</p>"; + //$marutori_ht = $this->_generateMarutoriLink (); + $plugin_ht = $this->_generateWikiDatLink ($read_url); + $dat_response_msg = "<p>2ch info - ����! �X���b�h��html�������̂�҂��Ă���悤�ł��B�Q�l���O�C������Ǝ擾�o���邩������܂���B{$plugin_ht}</p>"; } elseif (preg_match ($vip2ch_kakodat_match, $read_response_html, $matches)) { $dat_response_status = "����! �ߋ����O�q�ɂŁAdat�𔭌����܂����B"; $kakolog_uri = "http://{$this->host}/{$matches[1]}"; @@ -1318,26 +1319,6 @@ protected function _generateWikiDatLink($read_url) { } // }}} - // {{{ _generateMarutoriHtml() - /** - * ����offlaw��dat���擾���邽�߂̃����N�𐶐�����B - * - * @param bool $retry - * @return string HTML - */ - protected function _generateMarutoriLink($retry = false) { - global $_conf; - - if ($retry) { - $retry_q = "&relogin2ch=true"; - $atext = "��ID�ōĎ擾����"; - } else { - $atext = "��ID��rep2�Ɏ�荞��"; - } - $marutori_ht = " [<a href=\"{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&maru=true{$retry_q}{$_conf['k_at_a']}\">{$atext}</a>]"; - return $marutori_ht; - } - // }}} } // }}} From 1977a61a7ffa8c85d093d82557106e8cfa379696 Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Mon, 22 Feb 2016 20:28:56 +0900 Subject: [PATCH 183/339] =?UTF-8?q?vip2ch.com=20=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lib/P2Util.php b/lib/P2Util.php index ec5295455..ae2681657 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -1915,6 +1915,22 @@ static public function detectThread($url = null) $host = $matches[1]; list($bbs, $key, $ls) = self::parseMachiQuery($matches[4]); + // vip2ch.com - http://ex14.vip2ch.com/test/read.cgi/news4ssnip/1450958506/ + } elseif (preg_match('<^https?://((\\w+)\\.vip2ch\\.com)/test/(?:read\\.(?:cgi|html|so)|mread\\.cgi)/(\\w+)/([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) + { + $host = $matches[1]; + $bbs = $matches[3]; + $key = $matches[4]; + $ls = (isset($matches[5]) && strlen($matches[5])) ? $matches[5] : ''; + + // vip2ch.com - http://ex14.vip2ch.com/i/responce.html?bbs=news4ssnip&dat=1450958506 + } elseif (preg_match('<^https?://((\\w+)\\.vip2ch\\.com)/i/responce\\.html\\?bbs=(\\w+)&dat=([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) + { + $host = $matches[1]; + $bbs = $matches[3]; + $key = $matches[4]; + $ls = (isset($matches[5]) && strlen($matches[5])) ? $matches[5] : ''; + // 2ch or pink - http://choco.2ch.net/test/read.cgi/event/1027770702/ } elseif (preg_match('<^https?://(.+)/test/read\\.(?:cgi|html|so) /(\\w+)/([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) From c31c72faf0a9a27ae9a6c70f89437b152fd9d04a Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Mon, 22 Feb 2016 20:31:25 +0900 Subject: [PATCH 184/339] =?UTF-8?q?=E3=81=B3=E3=82=93=E3=81=9F=E3=82=93?= =?UTF-8?q?=EF=BD=A5=E3=81=B9=E3=81=A3=E3=81=8B=E3=82=93=E3=81=93=E3=81=AE?= =?UTF-8?q?=20URL=20=E3=81=8C=E6=8C=87=E5=AE=9A=E3=81=95=E3=82=8C=E3=81=9F?= =?UTF-8?q?=E6=99=82=E3=81=AB=E6=AD=A3=E3=81=97=E3=81=8F=E3=82=B9=E3=83=AC?= =?UTF-8?q?=E3=81=8C=E8=A1=A8=E7=A4=BA=E3=81=95=E3=82=8C=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lib/P2Util.php b/lib/P2Util.php index ae2681657..2b3d6c10b 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -1942,6 +1942,15 @@ static public function detectThread($url = null) $ls = (isset($matches[4]) && strlen($matches[4])) ? $matches[4] : ''; } + // 2ch or pink by ula.cc(bintan / bekkanko) - http://choco.2ch.net/test/read.cgi/event/1027770702/ + } elseif (preg_match('<^http://(?:bintan|same)\\.ula\\.cc/test/(?:read\\.(?:cgi|html|so)|r\\.so) + /(.+)/(\\w+)/([0-9]+)(?:/([^/]*))>x', $nama_url, $matches)) + { + $host = $matches[1]; + $bbs = $matches[2]; + $key = $matches[3]; + $ls = (isset($matches[4]) && strlen($matches[4])) ? $matches[4] : ''; + // 2ch or pink �ߋ����Ohtml - http://pc.2ch.net/mac/kako/1015/10153/1015358199.html } elseif (preg_match('<^(https?://(.+)(?:/[^/]+)?/(\\w+) /kako/\\d+(?:/\\d+)?/(\\d+)).html>x', $nama_url, $matches)) From 9cf4df517116c1eb6986d13a39e163e6d3aa6256 Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Mon, 22 Feb 2016 20:33:21 +0900 Subject: [PATCH 185/339] =?UTF-8?q?=EF=BD=A2=E6=B5=AA=E4=BA=BA=E3=81=8A?= =?UTF-8?q?=E5=BD=B9=E7=AB=8B=E3=81=A1=E3=83=84=E3=83=BC=E3=83=AB=EF=BD=A3?= =?UTF-8?q?=E3=81=AE=E3=83=AA=E3=83=B3=E3=82=AF=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/login2ch.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/rep2/login2ch.php b/rep2/login2ch.php index 14790a8d1..24ac1ac7b 100644 --- a/rep2/login2ch.php +++ b/rep2/login2ch.php @@ -157,6 +157,9 @@ function checkPass2ch(){ $tora3_url = "http://2ch.tora3.net/"; $tora3_url_r = P2Util::throughIme($tora3_url); +$tool_url = "https://maraga.jp/1.1/RoninTool.php"; +$tool_url_r = P2Util::throughIme($tool_url); + if (!$_conf['ktai']) { $id_input_size_at = " size=\"30\""; $pass_input_size_at = " size=\"24\""; @@ -190,7 +193,10 @@ function checkPass2ch(){ //================================================================ echo <<<EOP -<p>2ch ID�ɂ‚��Ă̏ڍׂ͂����灨 <a href="{$tora3_url_r}" target="_blank">{$tora3_url}</a></p> +<p> +�Q�l���𗧂��c�[���͂����灨 <a href="{$tool_url_r}" target="_blank">{$tool_url}</a><br /> +�Q�����˂�Q�l�ɂ‚��Ă̏ڍׂ͂����灨 <a href="{$tora3_url_r}" target="_blank">{$tora3_url}</a> +</p> EOP; if ($_conf['ktai']) { From 0ac4a6a8f8a782232e56b1195981992f18e332cc Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Mon, 22 Feb 2016 20:40:30 +0900 Subject: [PATCH 186/339] =?UTF-8?q?=E3=82=B9=E3=83=AC=E3=83=83=E3=83=89?= =?UTF-8?q?=E4=BD=9C=E6=88=90=E6=97=A5=E6=99=82=E3=81=AE=E8=A1=A8=E7=A4=BA?= =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=BC=E3=83=9E=E3=83=83=E3=83=88=E3=82=92?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf_user_def.inc.php | 9 +++++++++ lib/sb_print.inc.php | 12 +++++++----- rep2/edit_conf_user.php | 1 + 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index cf3371020..0ff22006a 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -118,6 +118,15 @@ $conf_user_def['mobile.sb_ttitle_trim_pos'] = 1; // (1) $conf_user_rad['mobile.sb_ttitle_trim_pos'] = array('-1' => '�擪', '0' => '����', '1' => '����'); +// �X���b�h�쐬�����̕\���t�H�[�}�b�g +$conf_user_def['birth_format'] = 'y/m/d'; +$conf_user_sel['birth_format'] = array( + 'y/m/d' => 'YY/MM/DD', + 'y/m/d H:i:s' => 'YY/MM/DD HH:MM:SS', + 'Y/m/d' => 'YYYY/MM/DD', + 'Y/m/d H:i:s' => 'YYYY/MM/DD HH:MM:SS', + ); + // }}} // {{{ read diff --git a/lib/sb_print.inc.php b/lib/sb_print.inc.php index bb6fe6da7..d0d349be7 100644 --- a/lib/sb_print.inc.php +++ b/lib/sb_print.inc.php @@ -190,9 +190,9 @@ function sb_print($aThreadList) <th{$class_ti} id="sb_th_ikioi"><a{$class_sort_ikioi} href="{$_conf['subject_php']}?sort=ikioi{$sortq_common}{$rsortq_ikioi}{$norefresh_q}" target="_self">����</a></th>\n EOP; } - // Birthday + // Birth echo <<<EOP -<th{$class_t} id="sb_th_bd"><a{$class_sort_bd} href="{$_conf['subject_php']}?sort=bd{$sortq_common}{$rsortq_bd}{$norefresh_q}" target="_self">Birthday</a></th>\n +<th{$class_t} id="sb_th_bd"><a{$class_sort_bd} href="{$_conf['subject_php']}?sort=bd{$sortq_common}{$rsortq_bd}{$norefresh_q}" target="_self">since</a></th>\n EOP; // ���C�ɓ��� if ($_conf['sb_show_fav'] && $aThreadList->spmode != 'taborn') { @@ -448,9 +448,11 @@ function sb_print($aThreadList) $td['ikioi'] = "<td{$class_ti}>{$dayres_st}</td>\n"; } - // Birthday - $birthday = date('y/m/d', $aThread->key); // (y/m/d H:i) - $td['birth'] = "<td{$class_t}>{$birthday}</td>\n"; + // Birth + $birth_format = isset($_conf['birth_format']) ? $_conf['birth_format'] : 'y/m/d'; + $birth = date($birth_format, $aThread->key); // (y/m/d H:i) + $td['birth'] = "<td{$class_t}>{$birth}</td>\n"; + unset($birth_format); // +live �����{�^���̏��� // +live ������ic2�̃T���l�C���쐬��onoff diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index b0a8e583f..1dbb9d9d8 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -283,6 +283,7 @@ array('viewall_kitoku', '�����X���͕\�������Ɋւ�炸�\��'), array('delete_copyright', '�X���b�h�̃^�C�g�����璘�쌠�\�L���폜����'), array('delete_copyright.list', '�폜���钘�쌠�\�L�̕�����(�J���}��؂�)'), + array('birth_format', '�X���b�h�쐬�����̕\���t�H�[�}�b�g'), ); printEditConfGroupHtml($groupname, $conflist, $flags); } From 0b8242f4b4b49f37717a9a39d9770f94321a53a7 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 3 Mar 2016 15:08:30 +0900 Subject: [PATCH 187/339] =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E9=A0=85=E7=9B=AE?= =?UTF-8?q?=E3=81=AE=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=9F=E3=81=9F=E3=82=81?= =?UTF-8?q?=E3=83=90=E3=83=BC=E3=82=B8=E3=83=A7=E3=83=B3=E7=95=AA=E5=8F=B7?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=EF=BC=88=E4=BA=BA=E6=9F=B1=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 24d87ee4b..31dd32442 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '150815.1030', // rep2�̃o�[�W���� + 'p2version' => '160303.9001', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; From e7e3c599f8f65ac5a5d91b3d8454b879d1c8a4b8 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 3 Mar 2016 18:18:19 +0900 Subject: [PATCH 188/339] =?UTF-8?q?SOCKS5=E3=83=97=E3=83=AD=E3=82=AF?= =?UTF-8?q?=E3=82=B7=E7=B5=8C=E7=94=B1=E3=81=AE=E6=8E=A5=E7=B6=9A=E3=81=AB?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C(=E4=BA=BA=E6=9F=B1)=20tor(.onion=E3=83=89?= =?UTF-8?q?=E3=83=A1=E3=82=A4=E3=83=B3)=E3=82=92tor=E7=B5=8C=E7=94=B1?= =?UTF-8?q?=E3=81=A7=E9=96=B2=E8=A6=A7=E3=81=99=E3=82=8B=E6=A9=9F=E8=83=BD?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0(=E4=BA=BA=E6=9F=B1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- conf/conf_user_def.inc.php | 30 +++++++++++++++++ lib/P2Util.php | 67 +++++++++++++++++++++++++++++++++++--- lib/SettingTxt.php | 2 +- lib/SubjectTxt.php | 2 +- lib/ThreadRead.php | 10 +++--- lib/auth2chapi.inc.php | 2 +- lib/login2ch.inc.php | 2 +- lib/wiki/P2UtilWiki.php | 2 +- rep2/dig2ch.php | 2 +- rep2/edit_conf_user.php | 8 +++++ rep2/post.php | 2 +- 12 files changed, 113 insertions(+), 18 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 31dd32442..77b393e89 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '160303.9001', // rep2�̃o�[�W���� + 'p2version' => '160303.9002', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index 0ff22006a..73aecf57d 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -538,6 +538,36 @@ // �v���L�V�p�X���[�h (�g�p����ꍇ�̂�) $conf_user_def['proxy_password'] = ""; // ("") +// �v���L�V�̎�� +$conf_user_def['proxy_mode'] = "http"; // ("http") +$conf_user_sel['proxy_mode'] = array( + 'socks5' => 'SOCKS5 �v���L�V', + 'http' => 'HTTP �v���L�V', +); + +// Tor �f����(.onion �h���C��)�̃A�N�Z�X�� Tor ���g�p(����:1, ���Ȃ�:0) +$conf_user_def['tor_use'] = 0; // (0) +$conf_user_rad['tor_use'] = array('1' => '����', '0' => '���Ȃ�'); + +// Tor �v���L�V�z�X�g ex)"127.0.0.1", "www.p2proxy.com" +$conf_user_def['tor_proxy_host'] = ""; // ("") + +// Tor �v���L�V�|�[�g ex)"8080" +$conf_user_def['tor_proxy_port'] = ""; // ("") + +// Tor �v���L�V���[�U�[�� (�g�p����ꍇ�̂�) +$conf_user_def['tor_proxy_user'] = ""; // ("") + +// Tor �v���L�V�p�X���[�h (�g�p����ꍇ�̂�) +$conf_user_def['tor_proxy_password'] = ""; // ("") + +// Tor �v���L�V�̎�� +$conf_user_def['tor_proxy_mode'] = "socks5"; // ("socks5") +$conf_user_sel['tor_proxy_mode'] = array( + 'socks5' => 'SOCKS5 �v���L�V', + 'http' => 'HTTP �v���L�V', +); + // �t���[���� �ƒ��j���[ �̕\���� $conf_user_def['frame_menu_width'] = "158"; // ("158") diff --git a/lib/P2Util.php b/lib/P2Util.php index 2b3d6c10b..ad02f7a12 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -265,7 +265,7 @@ static public function fileDownload($url, $localfile, $req->setHeader ('If-Modified-Since', http_date(filemtime($localfile)) ); } - $response = $req->send(); + $response = self::getHTTPResponse($req); $code = $response->getStatus(); if (!($code == 200 || $code == 206 || $code == 304)) { @@ -441,7 +441,11 @@ static private function _p2DirOfHost($base_dir, $host, $dir_sep = true) // machibbs.com } elseif (self::isHostMachiBbs($host)) { $host_dir = $base_dir . DIRECTORY_SEPARATOR . 'machibbs.com'; - + // tor + } elseif (self::isHostTor($host)) { + $tor_host = preg_replace('/\.onion\.(\w+)$/', '.onion', $host); + $host_dir = $base_dir . DIRECTORY_SEPARATOR . $tor_host; + unset($tor_host); // jbbs.livedoor.jp (livedoor �����^���f����) } elseif (self::isHostJbbsShitaraba($host)) { if (DIRECTORY_SEPARATOR == '/') { @@ -904,6 +908,35 @@ static public function isHostBbsPink($host) return self::$_hostIsBbsPink[$host]; } + // }}} + // {{{ isHostTor() + + /** + * host �� tor �n�� �Ȃ� true ��Ԃ� + * + * @access public + * @param string $host + * @return boolean + */ + static function isHostTor($host, $isGatewayMode = 99) + { + switch($isGatewayMode){ + case 0: + $ret = (bool)preg_match('/\\.onion$/', $host); + break; + + case 1: + $ret = (bool)preg_match('/\\.(onion\\.cab|onion\\.city|onion\\.direct|onion\\.link|onion\\.nu|onion\\.to)$/', $host); + break; + + default: + $ret = (bool)preg_match('/\\.(onion\\.cab|onion\\.city|onion\\.direct|onion\\.link|onion\\.nu|onion\\.to|onion)$/', $host); + break; + } + + return $ret; + } + // }}} // {{{ isHostMachiBbs() @@ -1695,7 +1728,7 @@ static public function getWebPage($url, &$error_msg, $timeout = 15) $req = self::getHTTPRequest2($url, HTTP_Request2::METHOD_GET); //$req->addHeader("X-PHP-Version", phpversion()); - $response = $req->send(); + $response = self::getHTTPResponse($req); $code = $response->getStatus(); if ($code == 200 || $code == 206) { // || $code == 304) { @@ -2206,7 +2239,7 @@ static public function getBe2chCodeByMailPass($mail, $pass) $req->addPostParameter('pass', $pass); $req->addPostParameter('login', '���O�C������'); - $response = $req->send(); + $response = self::getHTTPResponse($req); $code = $response->getStatus(); // �����Ƃ݂Ȃ��R�[�h @@ -2279,13 +2312,26 @@ static public function getHTTPRequest2($url , $method = HTTP_Request2::METHOD_GE } // �v���L�V - if ($_conf['proxy_use']) { + if ($_conf['tor_use'] && P2Util::isHostTor($this->host, 0)) { // Tor(.onion)��Tor�p�̐ݒ���Z�b�g + $req->setConfig (array ( + 'proxy_host' => $_conf['tor_proxy_host'], + 'proxy_port' => $_conf['tor_proxy_port'], + 'proxy_user' => $_conf['tor_proxy_user'], + 'proxy_password' => $_conf['tor_proxy_password'] + )); + if($_conf['tor_proxy_mode'] == 'socks5'){ + $req->setConfig('proxy_type', $_conf['tor_proxy_mode']); + } + } elseif ($_conf['proxy_use']) { $req->setConfig (array ( 'proxy_host' => $_conf['proxy_host'], 'proxy_port' => $_conf['proxy_port'], 'proxy_user' => $_conf['proxy_user'], 'proxy_password' => $_conf['proxy_password'] )); + if($_conf['proxy_mode'] == 'socks5'){ + $req->setConfig('proxy_type', $_conf['proxy_mode']); + } } unset ($purl); @@ -2293,6 +2339,17 @@ static public function getHTTPRequest2($url , $method = HTTP_Request2::METHOD_GE return $req; } + static public function getHTTPResponse($req) { + if($req->getConfig('proxy_type') == 'socks5') { + $socks = HTTP_Request2_Adapter_Socket(); + $res = $socks->sendRequest($req); + unset($socks); + } else { + $res = $req->send (); + } + return $res; + } + // }}} // {{{ debug() /* diff --git a/lib/SettingTxt.php b/lib/SettingTxt.php index 4c4202378..23279f6fa 100644 --- a/lib/SettingTxt.php +++ b/lib/SettingTxt.php @@ -104,7 +104,7 @@ public function downloadSettingTxt() $req = P2Util::getHTTPRequest2($this->_url, HTTP_Request2::METHOD_GET); $modified && $req->setHeader("If-Modified-Since", $modified); - $response = $req->send(); + $response = P2Util::getHTTPResponse($req); $code = $response->getStatus(); if ($code == 302) { diff --git a/lib/SubjectTxt.php b/lib/SubjectTxt.php index 5519933aa..4a9e6b15a 100644 --- a/lib/SubjectTxt.php +++ b/lib/SubjectTxt.php @@ -99,7 +99,7 @@ public function downloadSubject() $req = P2Util::getHTTPRequest2($this->subject_url, HTTP_Request2::METHOD_GET); $modified && $req->setHeader("If-Modified-Since", $modified); - $response = $req->send(); + $response = P2Util::getHTTPResponse($req); $code = $response->getStatus(); if ($code == 302) { diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index c055835ef..e4bd34093 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -180,7 +180,7 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { )); // POST�f�[�^�̑��M - $response = $req->send (); + $response = P2Util::getHTTPResponse($req); // 2ch API �̏�Ԃ��w�b�_�[�ɋL�ڂ���Ă���̂Ŏ擾����B // User-Status: 0 (sessionID����) or 1 (sessionID�L��) or @@ -390,7 +390,7 @@ protected function _downloadDat2ch($from_bytes) { } // Request�̑��M - $response = $req->send (); + $response = P2Util::getHTTPResponse($req); $code = $response->getStatus (); @@ -527,7 +527,7 @@ protected function _downloadDat2chKako($uri, $ext) { $req = P2Util::getHTTPRequest2 ($url, HTTP_Request2::METHOD_GET); // Request�̑��M - $response = $req->send (); + $response = P2Util::getHTTPResponse($req); $code = $response->getStatus (); @@ -624,7 +624,7 @@ public function get2chDatError($code = null) { $req->setHeader ('User-Agent', P2Util::getP2UA(false,P2Util::isHost2chs($this->host))); // �����́A"Monazilla/" ���‚����NG // Request�̑��M - $response = $req->send (); + $response = P2Util::getHTTPResponse($req); $res_code = $response->getStatus (); @@ -1199,7 +1199,7 @@ private function _get2ch203Body() { $url = "http://{$this->host}/{$this->bbs}/dat/{$this->key}.dat"; $req = P2Util::getHTTPRequest2 ($url,HTTP_Request2::METHOD_GET); - $res = $req->send (); + $res = P2Util::getHTTPResponse($req); // ���X�|���X�R�[�h������ if ('203' == $res->getStatus ()) { diff --git a/lib/auth2chapi.inc.php b/lib/auth2chapi.inc.php index daae86591..6090930b6 100644 --- a/lib/auth2chapi.inc.php +++ b/lib/auth2chapi.inc.php @@ -54,7 +54,7 @@ function authenticate_2chapi() $req->addPostParameter('HB', $HB); // POST�f�[�^�̑��M - $res = $req->send(); + $res = P2Util::getHTTPResponse($req); $code = $res->getStatus(); if ($code =! 200) { diff --git a/lib/login2ch.inc.php b/lib/login2ch.inc.php index dbf04884a..3ab4083f6 100644 --- a/lib/login2ch.inc.php +++ b/lib/login2ch.inc.php @@ -54,7 +54,7 @@ function login2ch() $req->addPostParameter('PW', $login2chPW); // POST�f�[�^�̑��M - $res = $req->send(); + $res = P2Util::getHTTPResponse($req); $code = $res->getStatus(); if ($code =! 200) { diff --git a/lib/wiki/P2UtilWiki.php b/lib/wiki/P2UtilWiki.php index de75dd1f7..58f4e42c9 100644 --- a/lib/wiki/P2UtilWiki.php +++ b/lib/wiki/P2UtilWiki.php @@ -41,7 +41,7 @@ public static function getResponseCode($url) { try { $req = P2Util::getHTTPRequest2 ($url, HTTP_Request2::METHOD_HEAD); - $response = $req->send(); + $response = P2Util::getHTTPResponse($req); return $response->getStatus(); } catch (Exception $e) { diff --git a/rep2/dig2ch.php b/rep2/dig2ch.php index 063d88896..80050010a 100644 --- a/rep2/dig2ch.php +++ b/rep2/dig2ch.php @@ -18,7 +18,7 @@ function dig2chsearch($query) $req->setHeader('Cache-Control', 'no-cache'); $req->setHeader('Accept', 'application/json'); - $response = $req->send(); + $response = P2Util::getHTTPResponse($req); $code = $response->getStatus(); if ($code != 200) { diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index 1dbb9d9d8..1694fd748 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -436,6 +436,14 @@ array('proxy_port', '�v���L�V�|�[�g ex)"8080"'), array('proxy_user', '�v���L�V���[�U�[�� (�g�p����ꍇ�̂�)'), array('proxy_password', '�v���L�V�p�X���[�h (�g�p����ꍇ�̂�)'), + array('proxy_mode', '�v���L�V�̎��(�l��)'), + 'Tor �f����(�l��)', + array('tor_use', 'Tor �f����(.onion �h���C��)�̃A�N�Z�X�� Tor ���g�p'), + array('tor_proxy_host', 'Tor �v���L�V�z�X�g ex)"127.0.0.1", "p2proxy.example"'), + array('tor_proxy_port', 'Tor �v���L�V�|�[�g ex)"8080"'), + array('tor_proxy_user', 'Tor �v���L�V���[�U�[�� (�g�p����ꍇ�̂�)'), + array('tor_proxy_password', 'Tor �v���L�V�p�X���[�h (�g�p����ꍇ�̂�)'), + array('tor_proxy_mode', 'Tor �v���L�V�̎��'), 'SSL�ʐM�ݒ�', array('ssl_function', 'SSL�ʐM(�����O�C����)�Ɏg�p����֐�<br>(�֐��ɊY������g�����C���X�g�[������K�v������)'), array('ssl_capath', 'SSL�ʐM�Őڑ�������؂��邽�߂̏ؖ���������f�B���N�g�� ex)"/etc/ssl/certs"<br>�ݒ�Ȃ��ē����ꍇ�͐ݒ�s�v<br>ssl_function�ɑΉ������`���̏ؖ������K�v'), diff --git a/rep2/post.php b/rep2/post.php index bcd0d3c43..93a92b369 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -424,7 +424,7 @@ function postIt($host, $bbs, $key, $post) } // POST�f�[�^�̑��M - $response = $req->send(); + $response = P2Util::getHTTPResponse($req); // Cookie���擾 $cookies = $response->getCookies(); From 91e78803c6be7c23c1a3af65688d5f8028b64641 Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Mon, 22 Feb 2016 20:25:16 +0900 Subject: [PATCH 189/339] =?UTF-8?q?p2proxy=20=E5=AF=BE=E5=BF=9C(=E4=BB=AE)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/Login.php | 6 +++--- lib/bootstrap.php | 2 +- lib/login_first.inc.php | 14 +++++++------- lib/post_form_options.inc.php | 7 +------ rep2/login.php | 8 ++++---- rep2/post.php | 2 +- 6 files changed, 17 insertions(+), 22 deletions(-) diff --git a/lib/Login.php b/lib/Login.php index a012b63d2..03115f634 100644 --- a/lib/Login.php +++ b/lib/Login.php @@ -317,7 +317,7 @@ private function _authCheck() // {{{ �t�H�[�����烍�O�C�������� - if (!empty($_POST['submit_member'])) { + if (!empty($_POST['submit_userlogin'])) { // �t�H�[�����O�C�������Ȃ� if ($_POST['form_login_id'] == $this->user_u and sha1($_POST['form_login_pass']) == $this->pass_x) { @@ -463,8 +463,8 @@ public function registerCookie() { $r = true; - if (!empty($_REQUEST['ctl_keep_login'])) { - if (!empty($_REQUEST['keep_login'])) { + if (!empty($_REQUEST['ctl_register_cookie'])) { + if (!empty($_REQUEST['register_cookie'])) { $r = $this->setCookieCid($this->user_u, $this->pass_x); } else { // �N�b�L�[���N���A diff --git a/lib/bootstrap.php b/lib/bootstrap.php index 24e3b80f4..03518e137 100644 --- a/lib/bootstrap.php +++ b/lib/bootstrap.php @@ -99,7 +99,7 @@ // �G���R�[�f�B���O����p������̎擾 if (!empty($_POST)) { // �V�K���O�C���ƃ����o�[���O�C���̓����w��͂��肦�Ȃ��̂ŁA�G���[���o�� - if (isset($_POST['submit_new']) && isset($_POST['submit_member'])) { + if (isset($_POST['submit_new']) && isset($_POST['submit_member']) && isset($_POST['submit_userlogin'])) { p2die('�����ȃ��N�G�X�g�ł��B'); } diff --git a/lib/login_first.inc.php b/lib/login_first.inc.php index 17d8b3729..b6472c2e3 100644 --- a/lib/login_first.inc.php +++ b/lib/login_first.inc.php @@ -59,16 +59,16 @@ function printLoginFirst(Login $_login) //============================================== $mobile = Net_UserAgent_Mobile::singleton(); - $keep_login_checked = ' checked'; - if (isset($_POST['submit_new']) || isset($_POST['submit_member'])) { - if (!isset($_POST['keep_login']) || $_POST['keep_login'] !== '1') { - $keep_login_checked = ''; + $register_cookie_checked = ' checked'; + if (isset($_POST['submit_new']) || isset($_POST['submit_member']) || isset($_POST['submit_userlogin'])) { + if (!isset($_POST['register_cookie']) || $_POST['register_cookie'] !== '1') { + $register_cookie_checked = ''; } } $auth_sub_input_ht = <<<EOP <input type="hidden" name="device_pixel_ratio" id="device_pixel_ratio" value="1"> -<input type="hidden" name="ctl_keep_login" value="1"> -<input type="checkbox" id="keep_login" name="keep_login" value="1"{$keep_login_checked}><label for="keep_login">Cookie�Ƀ��O�C����Ԃ�ێ�</label><br> +<input type="hidden" name="ctl_register_cookie" value="1"> +<input type="checkbox" id="register_cookie" name="register_cookie" value="1"{$register_cookie_checked}><label for="register_cookie">Cookie�Ƀ��O�C����Ԃ�ێ�</label><br> EOP; // }}} @@ -114,7 +114,7 @@ function printLoginFirst(Login $_login) } if (file_exists($_conf['auth_user_file'])) { - $submit_ht = '<input type="submit" name="submit_member" value="���[�U���O�C��">'; + $submit_ht = '<input type="submit" name="submit_userlogin" value="���[�U���O�C��">'; } else { $submit_ht = '<input type="submit" name="submit_new" value="�V�K�o�^">'; } diff --git a/lib/post_form_options.inc.php b/lib/post_form_options.inc.php index 563c03e11..592e5dc5b 100644 --- a/lib/post_form_options.inc.php +++ b/lib/post_form_options.inc.php @@ -15,7 +15,6 @@ $hd['mail'] = ''; $hd['MESSAGE'] = ''; $hd['subject'] = ''; -$hd['beres_checked'] = ''; $hd['p2res_checked'] = ''; $htm['beres'] = ''; @@ -102,9 +101,6 @@ function setHiddenValue(button) { // beres/p2res if ($post_config = PostDataStore::get($post_config_key)) { - if ($post_config['beres']) { - $hd['beres_checked'] = ' checked'; - } if ($post_config['p2res']) { $hd['p2res_checked'] = ' checked'; } @@ -175,8 +171,7 @@ function setHiddenValue(button) { // Be if (P2Util::isHost2chs($host) and P2Util::isEnableBe2ch()) { - $htm['beres'] = '<input type="checkbox" id="beres" name="beres" value="1"'. $hd['beres_checked'] . '>' - . '<label for="beres">Be�ŏ�������</label>'; + $htm['beres'] = '<input type="submit" id="submit_beres" name="submit_beres" value="Be�ŏ�������" onclick="setHiddenValue(this);" tabindex="5">'; } // }}} diff --git a/rep2/login.php b/rep2/login.php index 61ac58990..389c216f9 100644 --- a/rep2/login.php +++ b/rep2/login.php @@ -197,14 +197,14 @@ // ���\�� P2Util::printInfoHtml(); -echo '<p id="login_status">'; +echo '<div id="login_status">'; echo <<<EOP -{$p_str['autho_user']}: {$_login->user_u}<br> -{$p_htm['auth_cookie']} +{$p_str['autho_user']}: {$_login->user_u} <font color="gray">(p2 ID: 9999999999)</font><br> +{$p_htm['auth_cookie']}�����^�|�c��: 99999 �i<a href="http://find.moritapo.jp/moritapo/amount.php" target="_blank">�����^�|�ʒ�</a>�j<br><br> <br> [<a href="./index.php?logout=1" target="_parent">{$p_str['logout']}����</a>] EOP; -echo '</p>'; +echo '</div>'; echo $login_form_ht; diff --git a/rep2/post.php b/rep2/post.php index 93a92b369..b8e5ae449 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -400,7 +400,7 @@ function postIt($host, $bbs, $key, $post) } // be.2ch.net �F�؃N�b�L�[ - if (P2Util::isHostBe2chNet($host) || !empty($_REQUEST['beres'])) { + if (P2Util::isHostBe2chNet($host) || !empty($_REQUEST['submit_beres'])) { if ($_conf['be_2ch_DMDM'] && $_conf['be_2ch_MDMD']) { $req->addCookie('DMDM', urlencode( rawurldecode( $_conf['be_2ch_DMDM']) ) ); $req->addCookie('MDMD', urlencode( rawurldecode( $_conf['be_2ch_MDMD']) ) ); From 83941138930c03de0f3d9da4b3af5078d26a9930 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 3 Mar 2016 22:35:06 +0900 Subject: [PATCH 190/339] =?UTF-8?q?91e78803c6be7c23c1a3af65688d5f8028b6464?= =?UTF-8?q?1=20=E3=81=A7p2proxy=E3=81=AE=E7=82=BA=E3=81=AB=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=E3=81=97=E3=81=9F=E9=83=A8=E5=88=86=E3=82=92=E9=9D=9E?= =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E3=81=AB=E3=81=97=E3=81=A6=E3=81=93=E3=82=8C?= =?UTF-8?q?=E3=81=BE=E3=81=A7=E9=80=9A=E3=82=8A=E3=81=AE=E8=A6=8B=E3=81=9F?= =?UTF-8?q?=E7=9B=AE=E3=81=AB=E6=88=BB=E3=81=97=E3=81=9F=E3=80=82=20?= =?UTF-8?q?=E3=81=82=E3=81=8F=E3=81=BE=E3=81=A7=E3=83=96=E3=83=A9=E3=82=A6?= =?UTF-8?q?=E3=82=B6=E5=84=AA=E5=85=88=E3=80=82p2proxy=E3=81=8C=E3=81=BE?= =?UTF-8?q?=E3=81=A8=E3=82=82=E3=81=AA=E5=AE=9F=E8=A3=85=E3=81=AA=E3=82=89?= =?UTF-8?q?=E3=81=B0display:=20none;=E3=81=A7=E3=82=82=E3=81=A1=E3=82=83?= =?UTF-8?q?=E3=82=93=E3=81=A8=E5=8B=95=E3=81=8F=E3=81=A0=E3=82=8D=E3=81=86?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/post_form_options.inc.php | 8 +++++++- rep2/login.php | 4 ++-- rep2/post.php | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/post_form_options.inc.php b/lib/post_form_options.inc.php index 592e5dc5b..d37209190 100644 --- a/lib/post_form_options.inc.php +++ b/lib/post_form_options.inc.php @@ -15,6 +15,7 @@ $hd['mail'] = ''; $hd['MESSAGE'] = ''; $hd['subject'] = ''; +$hd['beres_checked'] = ''; $hd['p2res_checked'] = ''; $htm['beres'] = ''; @@ -101,6 +102,9 @@ function setHiddenValue(button) { // beres/p2res if ($post_config = PostDataStore::get($post_config_key)) { + if ($post_config['beres']) { + $hd['beres_checked'] = ' checked'; + } if ($post_config['p2res']) { $hd['p2res_checked'] = ' checked'; } @@ -171,7 +175,9 @@ function setHiddenValue(button) { // Be if (P2Util::isHost2chs($host) and P2Util::isEnableBe2ch()) { - $htm['beres'] = '<input type="submit" id="submit_beres" name="submit_beres" value="Be�ŏ�������" onclick="setHiddenValue(this);" tabindex="5">'; + $htm['beres'] = '<input type="checkbox" id="beres" name="beres" value="1"'. $hd['beres_checked'] . '>' + . '<label for="beres">Be�ŏ�������</label>' + . '<input style="display: none;" type="submit" id="submit_beres" name="submit_beres" value="Be�ŏ�������" onclick="setHiddenValue(this);" tabindex="5">'; } // }}} diff --git a/rep2/login.php b/rep2/login.php index 389c216f9..7713a73f7 100644 --- a/rep2/login.php +++ b/rep2/login.php @@ -199,8 +199,8 @@ echo '<div id="login_status">'; echo <<<EOP -{$p_str['autho_user']}: {$_login->user_u} <font color="gray">(p2 ID: 9999999999)</font><br> -{$p_htm['auth_cookie']}�����^�|�c��: 99999 �i<a href="http://find.moritapo.jp/moritapo/amount.php" target="_blank">�����^�|�ʒ�</a>�j<br><br> +{$p_str['autho_user']}: {$_login->user_u} <font style="display: none;" color="gray">(p2 ID: 9999999999)</font><br> +{$p_htm['auth_cookie']}<span style="display: none;">�����^�|�c��: 99999 �i<a href="http://find.moritapo.jp/moritapo/amount.php" target="_blank">�����^�|�ʒ�</a>�j</span><br><br> <br> [<a href="./index.php?logout=1" target="_parent">{$p_str['logout']}����</a>] EOP; diff --git a/rep2/post.php b/rep2/post.php index b8e5ae449..bd536ab1f 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -400,7 +400,7 @@ function postIt($host, $bbs, $key, $post) } // be.2ch.net �F�؃N�b�L�[ - if (P2Util::isHostBe2chNet($host) || !empty($_REQUEST['submit_beres'])) { + if (P2Util::isHostBe2chNet($host) || !empty($_REQUEST['beres']) || !empty($_REQUEST['submit_beres'])) { if ($_conf['be_2ch_DMDM'] && $_conf['be_2ch_MDMD']) { $req->addCookie('DMDM', urlencode( rawurldecode( $_conf['be_2ch_DMDM']) ) ); $req->addCookie('MDMD', urlencode( rawurldecode( $_conf['be_2ch_MDMD']) ) ); From 7328e3aa57816e09ffaa3cddc4fe0793e40c9390 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 3 Mar 2016 23:08:12 +0900 Subject: [PATCH 191/339] =?UTF-8?q?Revert=20"p2proxy=20=E5=AF=BE=E5=BF=9C(?= =?UTF-8?q?=E4=BB=AE)"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 91e78803c6be7c23c1a3af65688d5f8028b64641. Conflicts: lib/post_form_options.inc.php rep2/login.php rep2/post.php p2proxyのPOST先がサーバー名/p2固定だからいろいろめんどくさすぎてrep2側で対応する価値無し。 --- lib/Login.php | 6 +++--- lib/bootstrap.php | 2 +- lib/login_first.inc.php | 14 +++++++------- lib/post_form_options.inc.php | 3 +-- rep2/login.php | 8 ++++---- rep2/post.php | 2 +- 6 files changed, 17 insertions(+), 18 deletions(-) diff --git a/lib/Login.php b/lib/Login.php index 03115f634..a012b63d2 100644 --- a/lib/Login.php +++ b/lib/Login.php @@ -317,7 +317,7 @@ private function _authCheck() // {{{ �t�H�[�����烍�O�C�������� - if (!empty($_POST['submit_userlogin'])) { + if (!empty($_POST['submit_member'])) { // �t�H�[�����O�C�������Ȃ� if ($_POST['form_login_id'] == $this->user_u and sha1($_POST['form_login_pass']) == $this->pass_x) { @@ -463,8 +463,8 @@ public function registerCookie() { $r = true; - if (!empty($_REQUEST['ctl_register_cookie'])) { - if (!empty($_REQUEST['register_cookie'])) { + if (!empty($_REQUEST['ctl_keep_login'])) { + if (!empty($_REQUEST['keep_login'])) { $r = $this->setCookieCid($this->user_u, $this->pass_x); } else { // �N�b�L�[���N���A diff --git a/lib/bootstrap.php b/lib/bootstrap.php index 03518e137..24e3b80f4 100644 --- a/lib/bootstrap.php +++ b/lib/bootstrap.php @@ -99,7 +99,7 @@ // �G���R�[�f�B���O����p������̎擾 if (!empty($_POST)) { // �V�K���O�C���ƃ����o�[���O�C���̓����w��͂��肦�Ȃ��̂ŁA�G���[���o�� - if (isset($_POST['submit_new']) && isset($_POST['submit_member']) && isset($_POST['submit_userlogin'])) { + if (isset($_POST['submit_new']) && isset($_POST['submit_member'])) { p2die('�����ȃ��N�G�X�g�ł��B'); } diff --git a/lib/login_first.inc.php b/lib/login_first.inc.php index b6472c2e3..17d8b3729 100644 --- a/lib/login_first.inc.php +++ b/lib/login_first.inc.php @@ -59,16 +59,16 @@ function printLoginFirst(Login $_login) //============================================== $mobile = Net_UserAgent_Mobile::singleton(); - $register_cookie_checked = ' checked'; - if (isset($_POST['submit_new']) || isset($_POST['submit_member']) || isset($_POST['submit_userlogin'])) { - if (!isset($_POST['register_cookie']) || $_POST['register_cookie'] !== '1') { - $register_cookie_checked = ''; + $keep_login_checked = ' checked'; + if (isset($_POST['submit_new']) || isset($_POST['submit_member'])) { + if (!isset($_POST['keep_login']) || $_POST['keep_login'] !== '1') { + $keep_login_checked = ''; } } $auth_sub_input_ht = <<<EOP <input type="hidden" name="device_pixel_ratio" id="device_pixel_ratio" value="1"> -<input type="hidden" name="ctl_register_cookie" value="1"> -<input type="checkbox" id="register_cookie" name="register_cookie" value="1"{$register_cookie_checked}><label for="register_cookie">Cookie�Ƀ��O�C����Ԃ�ێ�</label><br> +<input type="hidden" name="ctl_keep_login" value="1"> +<input type="checkbox" id="keep_login" name="keep_login" value="1"{$keep_login_checked}><label for="keep_login">Cookie�Ƀ��O�C����Ԃ�ێ�</label><br> EOP; // }}} @@ -114,7 +114,7 @@ function printLoginFirst(Login $_login) } if (file_exists($_conf['auth_user_file'])) { - $submit_ht = '<input type="submit" name="submit_userlogin" value="���[�U���O�C��">'; + $submit_ht = '<input type="submit" name="submit_member" value="���[�U���O�C��">'; } else { $submit_ht = '<input type="submit" name="submit_new" value="�V�K�o�^">'; } diff --git a/lib/post_form_options.inc.php b/lib/post_form_options.inc.php index d37209190..563c03e11 100644 --- a/lib/post_form_options.inc.php +++ b/lib/post_form_options.inc.php @@ -176,8 +176,7 @@ function setHiddenValue(button) { // Be if (P2Util::isHost2chs($host) and P2Util::isEnableBe2ch()) { $htm['beres'] = '<input type="checkbox" id="beres" name="beres" value="1"'. $hd['beres_checked'] . '>' - . '<label for="beres">Be�ŏ�������</label>' - . '<input style="display: none;" type="submit" id="submit_beres" name="submit_beres" value="Be�ŏ�������" onclick="setHiddenValue(this);" tabindex="5">'; + . '<label for="beres">Be�ŏ�������</label>'; } // }}} diff --git a/rep2/login.php b/rep2/login.php index 7713a73f7..61ac58990 100644 --- a/rep2/login.php +++ b/rep2/login.php @@ -197,14 +197,14 @@ // ���\�� P2Util::printInfoHtml(); -echo '<div id="login_status">'; +echo '<p id="login_status">'; echo <<<EOP -{$p_str['autho_user']}: {$_login->user_u} <font style="display: none;" color="gray">(p2 ID: 9999999999)</font><br> -{$p_htm['auth_cookie']}<span style="display: none;">�����^�|�c��: 99999 �i<a href="http://find.moritapo.jp/moritapo/amount.php" target="_blank">�����^�|�ʒ�</a>�j</span><br><br> +{$p_str['autho_user']}: {$_login->user_u}<br> +{$p_htm['auth_cookie']} <br> [<a href="./index.php?logout=1" target="_parent">{$p_str['logout']}����</a>] EOP; -echo '</div>'; +echo '</p>'; echo $login_form_ht; diff --git a/rep2/post.php b/rep2/post.php index bd536ab1f..93a92b369 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -400,7 +400,7 @@ function postIt($host, $bbs, $key, $post) } // be.2ch.net �F�؃N�b�L�[ - if (P2Util::isHostBe2chNet($host) || !empty($_REQUEST['beres']) || !empty($_REQUEST['submit_beres'])) { + if (P2Util::isHostBe2chNet($host) || !empty($_REQUEST['beres'])) { if ($_conf['be_2ch_DMDM'] && $_conf['be_2ch_MDMD']) { $req->addCookie('DMDM', urlencode( rawurldecode( $_conf['be_2ch_DMDM']) ) ); $req->addCookie('MDMD', urlencode( rawurldecode( $_conf['be_2ch_MDMD']) ) ); From ef74863e4473baa4c70164534758d37ce79b349d Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Thu, 3 Mar 2016 22:23:46 +0900 Subject: [PATCH 192/339] =?UTF-8?q?=E3=82=A8=E3=83=A9=E3=83=BC=E3=83=A1?= =?UTF-8?q?=E3=83=83=E3=82=BB=E3=83=BC=E3=82=B8=E3=81=AB=202ch=20API=20?= =?UTF-8?q?=E3=81=AB=E9=96=A2=E3=81=97=E3=81=A6=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/auth2chapi.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/auth2chapi.inc.php b/lib/auth2chapi.inc.php index 6090930b6..551258e2d 100644 --- a/lib/auth2chapi.inc.php +++ b/lib/auth2chapi.inc.php @@ -92,7 +92,7 @@ function authenticate_2chapi() } if($sid[0]!='SESSION-ID=Monazilla/1.00') { - P2Util::pushInfoHtml("<p>p2 Error: ���X�|���X����SessionID���擾�o���܂���ł����B</p>"); + P2Util::pushInfoHtml("<p>p2 Error: 2ch API �̃��X�|���X����SessionID���擾�o���܂���ł����B</p>"); return ''; } From 6266a3acdcaf258e05998fb184c3cf4edcf3702b Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 4 Mar 2016 01:45:52 +0900 Subject: [PATCH 193/339] =?UTF-8?q?IC2=E3=81=A8=E7=BD=AE=E6=8F=9B=E3=83=97?= =?UTF-8?q?=E3=83=A9=E3=82=B0=E3=82=A4=E3=83=B3=E3=81=AE=E9=80=9A=E4=BF=A1?= =?UTF-8?q?=E5=91=A8=E3=82=8A=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/wiki/ReplaceImageUrlCtl.php | 86 ++++++++++--------- rep2/ic2.php | 148 ++++++++++++++++---------------- 2 files changed, 119 insertions(+), 115 deletions(-) diff --git a/lib/wiki/ReplaceImageUrlCtl.php b/lib/wiki/ReplaceImageUrlCtl.php index b693b2ddf..8f334c5e8 100644 --- a/lib/wiki/ReplaceImageUrlCtl.php +++ b/lib/wiki/ReplaceImageUrlCtl.php @@ -254,27 +254,53 @@ public function extractPage($url, $match, $replace, $referer, $source, $ident=nu ? $this->cacheData[$url]['data'] : $ret; } - $params = array(); - $params['timeout'] = $_conf['http_conn_timeout']; - $params['readTimeout'] = array($_conf['http_read_timeout'], 0); - if ($_conf['proxy_use']) { - $params['proxy_host'] = $_conf['proxy_host']; - $params['proxy_port'] = $_conf['proxy_port']; - } - $req = new HTTP_Request($get_url, $params); - if ($this->cacheData[$url] && $this->cacheData[$url]['responseHeaders'] - && $this->cacheData[$url]['responseHeaders']['last-modified'] - && strlen($this->cacheData[$url]['responseHeaders']['last-modified'])) { - $req->addHeader("If-Modified-Since", - $this->cacheData[$url]['responseHeaders']['last-modified']); + try { + $req = P2Util::getHTTPRequest2 ($get_url, HTTP_Request2::METHOD_GET); + if ($this->cacheData[$url] && $this->cacheData[$url]['responseHeaders'] + && $this->cacheData[$url]['responseHeaders']['last-modified'] + && strlen($this->cacheData[$url]['responseHeaders']['last-modified'])) { + $req->setHeader("If-Modified-Since", + $this->cacheData[$url]['responseHeaders']['last-modified']); + } + + $req->setHeader('User-Agent', + (!empty($_conf['expack.user_agent'])) ? $_conf['expack.user_agent'] + : $_SERVER['HTTP_USER_AGENT']); + + $response = P2Util::getHTTPResponse($req); + + $code = $response->getStatus (); + + if ($code == 304 && $this->cacheData[$url]) { + return $this->cacheData[$url]['data']; + } + + $body = $response->getBody(); + preg_match_all('{' . $source . '}i', $body, $extracted, PREG_SET_ORDER); + foreach ($extracted as $i => $extract) { + $_url = $replace; $_referer = $referer; + foreach ($extract as $j => $part) { + if ($j < 1) continue; + $_url = str_replace('$EXTRACT'.$j, $part, $_url); + $_referer = str_replace('$EXTRACT'.$j, $part, $_referer); + } + if ($extract[1]) { + $_url = str_replace('$EXTRACT', $part, $_url); + $_referer = str_replace('$EXTRACT', $part, $_referer); + } + $ret[$i]['url'] = $_url; + $ret[$i]['referer'] = $_referer; + } + } catch (Exception $e) { + $errmsg = $e->getMessage (); } - $req->addHeader('User-Agent', - (!empty($_conf['expack.user_agent'])) ? $_conf['expack.user_agent'] - : $_SERVER['HTTP_USER_AGENT']); - $response = $req->sendRequest(); - $code = $req->getResponseCode(); - if (PEAR::isError($response) || ($code != 200 && $code != 206 && $code != 304)) { - $errmsg = PEAR::isError($response) ? $response->getMessage() : $code; + + // �擾�G���[�����������ꍇ + if (isset($errmsg) || ($code != 200 && $code != 206 && $code != 304)) { + if(!isset($errmsg)) + { + $errmsg = $code; + } // ���񃊃N�G�X�g�ł̃G���[���I�����C���L���b�V�� $this->extractErrors[$get_url] = $errmsg; // �T�[�o�G���[�ȊO�Ȃ�i���L���b�V���ɕۑ� @@ -291,26 +317,6 @@ public function extractPage($url, $match, $replace, $referer, $source, $ident=nu return ($this->cacheData[$url] && $this->cacheData[$url]['data']) ? $this->cacheData[$url]['data'] : $ret; } - if ($code == 304 && $this->cacheData[$url]) { - return $this->cacheData[$url]['data']; - } - - $body = $req->getResponseBody(); - preg_match_all('{' . $source . '}i', $body, $extracted, PREG_SET_ORDER); - foreach ($extracted as $i => $extract) { - $_url = $replace; $_referer = $referer; - foreach ($extract as $j => $part) { - if ($j < 1) continue; - $_url = str_replace('$EXTRACT'.$j, $part, $_url); - $_referer = str_replace('$EXTRACT'.$j, $part, $_referer); - } - if ($extract[1]) { - $_url = str_replace('$EXTRACT', $part, $_url); - $_referer = str_replace('$EXTRACT', $part, $_referer); - } - $ret[$i]['url'] = $_url; - $ret[$i]['referer'] = $_referer; - } // �y�[�W�������Ă���ꍇ if ($this->_checkLost($url, $ret)) { diff --git a/rep2/ic2.php b/rep2/ic2.php index 6335a1161..782037f61 100644 --- a/rep2/ic2.php +++ b/rep2/ic2.php @@ -45,6 +45,9 @@ /*if (!isset($uri) && false !== ($url = getenv('PATH_INFO'))) { $uri = 'http:/' . $url; }*/ + +error_log("IC2 Init Finish ".$uri, 0); + if (empty($id) && empty($uri) && empty($file)) { ic2_error('x06', 'URL�܂��̓t�@�C����������܂���B', false); } @@ -156,10 +159,12 @@ public function __destruct() // {{{ sleep if ($doDL) { + error_log("IC2 Dup prevention ".$uri, 0); // �����摜��URI�ɑ΂���N�G�����i�قځj�����ɔ��s���ꂽ�Ƃ��̏d��GET��h�� // sleep�������Ԃ̓v���Z�X�̎��s���ԂɊ܂܂�Ȃ��̂œƎ��Ƀ^�C�}�[��p�ӂ���i�������[�v����j $dl_lock_file = $_conf['tmp_dir'] . DIRECTORY_SEPARATOR . 'ic2_lck_' . md5($uri); if (file_exists($dl_lock_file)) { + error_log("IC2 dl_lock_file exists ".$uri, 0); $offtimer = ini_get('max_execution_time'); if ($offtimer == 0) { $offtimer = 30; @@ -303,101 +308,94 @@ public function __destruct() ? $_conf['expack.user_agent'] : $_SERVER['HTTP_USER_AGENT']; // �L���b�V������Ă��Ȃ���΁A�擾�����݂� -$client = new HTTP_Client(); -$client->setRequestParameter('timeout', $conn_timeout); -$client->setRequestParameter('readTimeout', array($read_timeout, 0)); -$client->setMaxRedirects(3); -$client->setDefaultHeader('User-Agent', $ic2_ua); -if ($mtime > 0) { - $client->setDefaultHeader('If-Modified-Since', http_date($mtime)); -} - -// �v���L�V�ݒ� -if ($ini['Proxy']['enabled'] && $ini['Proxy']['host'] && $ini['Proxy']['port']) { - $client->setRequestParameter('proxy_host', $ini['Proxy']['host']); - $client->setRequestParameter('proxy_port', $ini['Proxy']['port']); - if ($ini['Proxy']['user']) { - $client->setRequestParameter('proxy_user', $ini['Proxy']['user']); - $client->setRequestParameter('proxy_pass', $ini['Proxy']['pass']); - $proxy_auth_data = base64_encode($ini['Proxy']['user'] . ':' . $ini['Proxy']['pass']); - $client->setDefaultHeader('Proxy-Authorization', 'Basic ' . $proxy_auth_data); +try { + error_log("getHTTPRequest2 ".$uri, 0); + $req = P2Util::getHTTPRequest2($uri, HTTP_Request2::METHOD_GET); + $req->setConfig(array('follow_redirects' => true)); + $req->setHeader('User-Agent', $ic2_ua); + if ($mtime > 0) { + $req->setHeader('If-Modified-Since', http_date($mtime)); } -} // ���t�@���ݒ� -if (is_null($referer)) { - $send_referer = (boolean)$ini['Getter']['sendreferer']; - if ($send_referer) { - if ($ini['Getter']['norefhosts']) { - $pattern = preg_quote($ini['Getter']['norefhosts'], '/'); + if (is_null($referer)) { + $send_referer = (boolean)$ini['Getter']['sendreferer']; + if ($send_referer) { + if ($ini['Getter']['norefhosts']) { + $pattern = preg_quote($ini['Getter']['norefhosts'], '/'); + $pattern = str_replace(',', '|', $pattern); + $pattern = '/' . $pattern . '/i'; + if (preg_match($pattern, $pURL['host'])) { + $send_referer = false; + } + } + } elseif ($ini['Getter']['refhosts']) { + $pattern = preg_quote($ini['Getter']['refhosts'], '/'); $pattern = str_replace(',', '|', $pattern); $pattern = '/' . $pattern . '/i'; if (preg_match($pattern, $pURL['host'])) { - $send_referer = false; + $send_referer = true; } } - } elseif ($ini['Getter']['refhosts']) { - $pattern = preg_quote($ini['Getter']['refhosts'], '/'); - $pattern = str_replace(',', '|', $pattern); - $pattern = '/' . $pattern . '/i'; - if (preg_match($pattern, $pURL['host'])) { - $send_referer = true; + if ($send_referer) { + $referer = $uri . '.html'; } } - if ($send_referer) { - $referer = $uri . '.html'; - } -} -if (is_string($referer)) { - $client->setDefaultHeader('Referer', $referer); -} + if (is_string($referer)) { + $req->setHeader('Referer', $referer); + } // }}} // {{{ get // �_�E�����[�h -if ($ini['Getter']['retry_regex'] && - strlen(trim($ini['Getter']['retry_regex'])) > 0 && - intval($ini['Getter']['retry_max']) > 0 && - preg_match($ini['Getter']['retry_regex'], $uri)) -{ - $retryCount = 0; - do { - $code = $client->get($uri); - if ($code != 403) { - break; - } - $retryCount++; - sleep($ini['Getter']['retry_interval']); - } while ($retryCount < intval($ini['Getter']['retry_max'])); -} else { - $code = $client->get($uri); -} + if ($ini['Getter']['retry_regex'] && + strlen(trim($ini['Getter']['retry_regex'])) > 0 && + intval($ini['Getter']['retry_max']) > 0 && + preg_match($ini['Getter']['retry_regex'], $uri) + ) { + $retryCount = 0; + do { + error_log("Start Download ".$uri, 0); + $response = P2Util::getHTTPResponse($req); + $code = $response->getStatus(); + if ($code != 403) { + break; + } + $retryCount++; + sleep($ini['Getter']['retry_interval']); + } while ($retryCount < intval($ini['Getter']['retry_max'])); + } else { + error_log("Start Download ".$uri, 0); + $response = P2Util::getHTTPResponse($req); + $code = $response->getStatus(); + } -if (PEAR::isError($code)) { - ic2_error('x02', $code->getMessage()); -} elseif ($fileurl && $mtime > 0 && $code == 304) { - // 304 Not Modified �̂Ƃ� - ic2_finish($fileurl, $thumb, $params, false); -} elseif ($code != 200) { - ic2_error($code); -} + if ($fileurl && $mtime > 0 && $code == 304) { + // 304 Not Modified �̂Ƃ� + ic2_finish($fileurl, $thumb, $params, false); + } elseif ($code != 200) { + ic2_error($code); + } -$response = $client->currentResponse(); -if (isset($response['headers']['content-type'])) { - $serv_mime = $response['headers']['content-type']; -} + if ($response->getHeader('content-type')) { + $serv_mime = $response->getHeader('content-type'); + } + + // �ꎞ�t�@�C���ɕۑ� + $tmpfile = tempnam($_conf['tmp_dir'], 'ic2_get_'); + $tmpobj = new IC2TempFile($tmpfile); + $fp = fopen($tmpfile, 'wb'); + if (!$fp) { + ic2_error('x02', "fopen���s�B($tmpfile)"); + } + fwrite($fp, $response->getBody()); + fclose($fp); -// �ꎞ�t�@�C���ɕۑ� -$tmpfile = tempnam($_conf['tmp_dir'], 'ic2_get_'); -$tmpobj = new IC2TempFile($tmpfile); -$fp = fopen($tmpfile, 'wb'); -if (!$fp) { - ic2_error('x02', "fopen���s�B($tmpfile)"); +} catch (Exception $e) { + ic2_error('x02', $e->getMessage ()); } -fwrite($fp, $response['body']); -fclose($fp); // }}} // {{{ check From 5a864da0152cf16c9efe89d5625777456c06c7d2 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 4 Mar 2016 14:21:54 +0900 Subject: [PATCH 194/339] v160304.1333 --- composer.json | 2 -- conf/conf.inc.php | 2 +- doc/README-774.txt | 18 ++++++++++++++++++ rep2/ic2.php | 7 ------- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/composer.json b/composer.json index 6dff89b60..2bcd5148e 100644 --- a/composer.json +++ b/composer.json @@ -22,8 +22,6 @@ "pear-pear.php.net/file_util": "1.0.0", "pear-pear.php.net/html_common": "1.2.5", "pear-pear.php.net/html_quickform": "3.2.13", - "pear-pear.php.net/http_client": "1.2.1", - "pear-pear.php.net/http_request": "1.4.4", "pear-pear.php.net/http_request2": "2.2.1", "pear-pear.php.net/net_socket": "1.0.10", "pear-pear.php.net/net_url": "1.0.15", diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 77b393e89..22c80e9c2 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '160303.9002', // rep2�̃o�[�W���� + 'p2version' => '160304.1333', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/doc/README-774.txt b/doc/README-774.txt index 06d65e7fd..42a5c9827 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -15,6 +15,8 @@ rep2-expack test https://github.com/orzisun/p2-php * �����‚̃X���ꗗ����X�����J�����Ƃ��Ɏ����I�Ɏ������[�h�ŃX�����J���ݒ��lj� * 3�y�C���\���̔z�u��ύX�ł���ݒ��lj� * �X���b�h�^�C�g�����璘�쌠�\�L���폜����ݒ��lj� +* �X���b�h�쐬�����̕\���t�H�[�}�b�g���w��ł���悤�ɂ��� +* �܂�BBS�̃z�X�g����\������ݒ��lj� ### �V�@�\ * cron�Ƃ��ōŋߓǂ񂾃X���Ȃǂ�dat��DL�o����X�N���v�g�lj� @@ -27,6 +29,8 @@ rep2-expack test https://github.com/orzisun/p2-php * �{�Ƃ���be�̃��O�C���������ڐA����BE2.0�ɑΉ� * rep2�ɓo�^���ꂽ�O���‚փ����N����@�\��lj� * 0�����˂�X�N���v�g���g�p�����O���‚̉ߋ����ODAT����荞�ݑΉ� +* SOCKS5�v���N�V�o�R�̐ڑ��ɑΉ�(�l��) +* tor���̌f����(.onion�h���C��)��tor�o�R�ʼn{������@�\��lj�(�l��) ### �d�l�ύX * ���[�J���ˆꗗ�p.brd�t�@�C���̒u���ꏊ��rep2/board����$_conf['data_dir']/brard�ɕύX @@ -60,6 +64,20 @@ rep2-expack test https://github.com/orzisun/p2-php ��ChangeLog +160304.1333 +* �s�����Ă������𑜓x�A�C�R����lj� thx! http://potato.2ch.net/test/read.cgi/software/1431258367/767 +* ����DAT���_�E�����[�h����ׂ̃R�[�h�ƃ����N������ +* DAT�����̔����2ch API�̓Ǝ����X�|���X�w�b�_���g�p����悤�ɕύX +* API+�Q�l�Ŏ擾����DAT���ߋ����O��������悤�ɕύX +* SOCKS5�v���N�V�o�R�̐ڑ��ɑΉ�(�l��) +* tor���̌f����(.onion�h���C��)��tor�o�R�ʼn{������@�\��lj�(�l��) +* �ȉ��̕ύX�_��killer4989����̃p�b�`����荞�� +* vip2ch.com �Ή� +* �т񂽂�ׂ����񂱂� URL ���w�肳�ꂽ���ɐ������X�����\�������悤�ɂ��� +* ��Q�l���𗧂��c�[����̃����N��lj� +* �X���b�h�쐬�����̕\���t�H�[�}�b�g���w��ł���悤�ɂ��� +* ���̑����X + 150815.1030 * �\�����X���̏����2000����65535�ɕύX * �܂�BBS�̃z�X�g����\������ݒ��lj��ikiller4989����̃p�b�`����荞�݁j diff --git a/rep2/ic2.php b/rep2/ic2.php index 782037f61..28a4f84ba 100644 --- a/rep2/ic2.php +++ b/rep2/ic2.php @@ -46,8 +46,6 @@ $uri = 'http:/' . $url; }*/ -error_log("IC2 Init Finish ".$uri, 0); - if (empty($id) && empty($uri) && empty($file)) { ic2_error('x06', 'URL�܂��̓t�@�C����������܂���B', false); } @@ -159,12 +157,10 @@ public function __destruct() // {{{ sleep if ($doDL) { - error_log("IC2 Dup prevention ".$uri, 0); // �����摜��URI�ɑ΂���N�G�����i�قځj�����ɔ��s���ꂽ�Ƃ��̏d��GET��h�� // sleep�������Ԃ̓v���Z�X�̎��s���ԂɊ܂܂�Ȃ��̂œƎ��Ƀ^�C�}�[��p�ӂ���i�������[�v����j $dl_lock_file = $_conf['tmp_dir'] . DIRECTORY_SEPARATOR . 'ic2_lck_' . md5($uri); if (file_exists($dl_lock_file)) { - error_log("IC2 dl_lock_file exists ".$uri, 0); $offtimer = ini_get('max_execution_time'); if ($offtimer == 0) { $offtimer = 30; @@ -309,7 +305,6 @@ public function __destruct() // �L���b�V������Ă��Ȃ���΁A�擾�����݂� try { - error_log("getHTTPRequest2 ".$uri, 0); $req = P2Util::getHTTPRequest2($uri, HTTP_Request2::METHOD_GET); $req->setConfig(array('follow_redirects' => true)); $req->setHeader('User-Agent', $ic2_ua); @@ -357,7 +352,6 @@ public function __destruct() ) { $retryCount = 0; do { - error_log("Start Download ".$uri, 0); $response = P2Util::getHTTPResponse($req); $code = $response->getStatus(); if ($code != 403) { @@ -367,7 +361,6 @@ public function __destruct() sleep($ini['Getter']['retry_interval']); } while ($retryCount < intval($ini['Getter']['retry_max'])); } else { - error_log("Start Download ".$uri, 0); $response = P2Util::getHTTPResponse($req); $code = $response->getStatus(); } From ab4d4ebddaf0d1c8e71479dbe30f0b58768400fd Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Mon, 7 Mar 2016 19:47:51 +0900 Subject: [PATCH 195/339] =?UTF-8?q?fix=20tor=20=E5=AF=BE=E5=BF=9C(?= =?UTF-8?q?=E4=BB=AE)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/P2Util.php b/lib/P2Util.php index ad02f7a12..e65f0e453 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -2312,7 +2312,7 @@ static public function getHTTPRequest2($url , $method = HTTP_Request2::METHOD_GE } // �v���L�V - if ($_conf['tor_use'] && P2Util::isHostTor($this->host, 0)) { // Tor(.onion)��Tor�p�̐ݒ���Z�b�g + if ($_conf['tor_use'] && self::isHostTor($purl['host'], 0)) { // Tor(.onion)��Tor�p�̐ݒ���Z�b�g $req->setConfig (array ( 'proxy_host' => $_conf['tor_proxy_host'], 'proxy_port' => $_conf['tor_proxy_port'], @@ -2341,7 +2341,7 @@ static public function getHTTPRequest2($url , $method = HTTP_Request2::METHOD_GE static public function getHTTPResponse($req) { if($req->getConfig('proxy_type') == 'socks5') { - $socks = HTTP_Request2_Adapter_Socket(); + $socks = new HTTP_Request2_Adapter_Socket(); $res = $socks->sendRequest($req); unset($socks); } else { From 41eed7d2b7d9cacdcd97bf1b0d1b8cfeafb249cd Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Mon, 7 Mar 2016 19:47:10 +0900 Subject: [PATCH 196/339] =?UTF-8?q?=E3=81=97=E3=81=9F=E3=82=89=E3=81=B0?= =?UTF-8?q?=E6=8E=B2=E7=A4=BA=E6=9D=BF=E3=81=AE=E3=82=B9=E3=83=9E=E3=83=9B?= =?UTF-8?q?=E7=89=88=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/P2Util.php b/lib/P2Util.php index e65f0e453..c2158e37e 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -1927,7 +1927,7 @@ static public function detectThread($url = null) $ls = (isset($matches[4]) && strlen($matches[4])) ? $matches[4] : ''; // �������JBBS - http://jbbs.livedoor.com/bbs/read.cgi/computer/2999/1081177036/-100 - } elseif (preg_match('<^http://(jbbs\\.(?:livedoor\\.(?:jp|com)|shitaraba\\.(?:net|com)))/bbs/read\\.cgi + } elseif (preg_match('<^http://(jbbs\\.(?:livedoor\\.(?:jp|com)|shitaraba\\.(?:net|com)))/(?:bbs|bbs/lite)/read\\.cgi /(\\w+)/(\\d+)/(\\d+)/((?:\\d+)?-(?:\\d+)?)?[^"]*>x', $nama_url, $matches)) { $host = $matches[1] . '/' . $matches[2]; From 782629656e30a02a089fd4f285e08bf8d724b7af Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Wed, 9 Mar 2016 07:15:10 +0900 Subject: [PATCH 197/339] v160309.0710 --- conf/conf.inc.php | 2 +- doc/README-774.txt | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 22c80e9c2..e27aac339 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '160304.1333', // rep2�̃o�[�W���� + 'p2version' => '160309.0710', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/doc/README-774.txt b/doc/README-774.txt index 42a5c9827..5ef8915c0 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -64,6 +64,11 @@ rep2-expack test https://github.com/orzisun/p2-php ��ChangeLog +160309.0710 +* �ȉ��̕ύX�_��killer4989����̃p�b�`����荞�� +* SOCKS5�ڑ���tor�ڑ����@�\���Ă��Ȃ��s����C�� +* �X�}�z�ł�����΂�URL���J����悤�ɕύX + 160304.1333 * �s�����Ă������𑜓x�A�C�R����lj� thx! http://potato.2ch.net/test/read.cgi/software/1431258367/767 * ����DAT���_�E�����[�h����ׂ̃R�[�h�ƃ����N������ From 4a9d28663d3b1a364656f71bb0dd5b45f407f8c6 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 8 Apr 2016 23:19:28 +0900 Subject: [PATCH 198/339] =?UTF-8?q?NG=E3=82=B9=E3=83=AC=E3=83=83=E3=83=89?= =?UTF-8?q?=E6=A9=9F=E8=83=BD=E3=81=8C=E5=8B=95=E4=BD=9C=E3=81=97=E3=81=AA?= =?UTF-8?q?=E3=81=84=E4=B8=8D=E5=85=B7=E5=90=88=E3=82=92=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=20=E7=94=BB=E5=83=8F=E7=BD=AE=E6=8F=9BURL=E3=81=8C=E5=8B=95?= =?UTF-8?q?=E4=BD=9C=E3=81=97=E3=81=AA=E3=81=84=E4=B8=8D=E5=85=B7=E5=90=88?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=20composer.json=E6=9B=B4=E6=96=B0=20?= =?UTF-8?q?=E3=81=B3=E3=82=93=E3=81=9F=E3=82=93=E3=81=AEURL=E5=88=A4?= =?UTF-8?q?=E5=AE=9A=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.json | 2 +- lib/P2Util.php | 2 +- lib/wiki/ReplaceImageUrlCtl.php | 4 ++-- lib/wiki/read.inc.php | 22 ---------------------- lib/wiki/subject.inc.php | 5 ----- rep2/read.php | 24 ++++++++++++++++++++++-- rep2/subject.php | 13 +++++++++++++ 7 files changed, 39 insertions(+), 33 deletions(-) delete mode 100644 lib/wiki/read.inc.php delete mode 100644 lib/wiki/subject.inc.php diff --git a/composer.json b/composer.json index 2bcd5148e..3e731893b 100644 --- a/composer.json +++ b/composer.json @@ -5,7 +5,7 @@ "repositories": [ { "type": "pear", - "url": "http://pear.php.net" + "url": "https://pear.php.net" } ], "require": { diff --git a/lib/P2Util.php b/lib/P2Util.php index c2158e37e..928938c11 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -1976,7 +1976,7 @@ static public function detectThread($url = null) } // 2ch or pink by ula.cc(bintan / bekkanko) - http://choco.2ch.net/test/read.cgi/event/1027770702/ - } elseif (preg_match('<^http://(?:bintan|same)\\.ula\\.cc/test/(?:read\\.(?:cgi|html|so)|r\\.so) + } elseif (preg_match('<^https?://(?:(?:bintan|same)\\.ula\\.cc|ula\\.2ch\\.net)/test/(?:read\\.(?:cgi|html|so)|r\\.so) /(.+)/(\\w+)/([0-9]+)(?:/([^/]*))>x', $nama_url, $matches)) { $host = $matches[1]; diff --git a/lib/wiki/ReplaceImageUrlCtl.php b/lib/wiki/ReplaceImageUrlCtl.php index 8f334c5e8..eeee1d824 100644 --- a/lib/wiki/ReplaceImageUrlCtl.php +++ b/lib/wiki/ReplaceImageUrlCtl.php @@ -311,7 +311,7 @@ public function extractPage($url, $match, $replace, $referer, $source, $ident=nu } $this->storeCache($url, array('code' => $code, 'errmsg' => $errmsg, - 'responseHeaders' => $req->getResponseHeader(), + 'responseHeaders' => $response->getHeader(), 'data' => $ret)); } return ($this->cacheData[$url] && $this->cacheData[$url]['data']) @@ -332,7 +332,7 @@ public function extractPage($url, $match, $replace, $referer, $source, $ident=nu // ���ʂ��i���L���b�V���ɕۑ� $this->storeCache($url, array('code' => $code, - 'responseHeaders' => $req->getResponseHeader(), + 'responseHeaders' => $response->getHeader(), 'data' => $ret)); return $ret; diff --git a/lib/wiki/read.inc.php b/lib/wiki/read.inc.php deleted file mode 100644 index fffc4699b..000000000 --- a/lib/wiki/read.inc.php +++ /dev/null @@ -1,22 +0,0 @@ -<?php -/* - p2 - �X���b�h�\����include�����t�@�C�� -*/ - -// ImageCache2���L���̏ꍇ -if (in_array($_conf['expack.ic2.enabled'], array($_conf['ktai'] ? 1 : 2, 3))) { -// �u���摜URL - if ($_conf['expack.ic2.enabled'] >= 2) { - require_once P2_LIB_DIR . '/wiki/ReplaceImageUrlCtl.php'; - $GLOBALS['replaceImageUrlCtl'] = new ReplaceImageUrlCtl(); - } -} -// �g�уr���[�ȊO�̏ꍇ -if (!$_conf['ktai'] || $_conf['iphone']) { -// �����N�v���O�C�� - require_once P2_LIB_DIR . '/wiki/LinkPluginCtl.php'; - $GLOBALS['linkPluginCtl'] = new LinkPluginCtl(); -} -// �u�����[�h -require_once P2_LIB_DIR . '/wiki/ReplaceWordCtl.php'; -$GLOBALS['replaceWordCtl'] = new ReplaceWordCtl(); diff --git a/lib/wiki/subject.inc.php b/lib/wiki/subject.inc.php deleted file mode 100644 index 6469a806d..000000000 --- a/lib/wiki/subject.inc.php +++ /dev/null @@ -1,5 +0,0 @@ -<?php -if ($_conf['wiki.ng_thread']) { - require_once P2_LIB_DIR . '/wiki/NgThreadCtl.php'; - $GLOBALS['ngThreadCtl'] = new NgThreadCtl(); -} diff --git a/rep2/read.php b/rep2/read.php index 6ee1cf5b0..ab0c92732 100644 --- a/rep2/read.php +++ b/rep2/read.php @@ -9,8 +9,28 @@ $_login->authorize(); // ���[�U�F�� -// +Wiki -require_once P2_LIB_DIR . '/wiki/read.inc.php'; +// {{{ +Wiki�R���̋@�\�������� +// ImageCache2���L���̏ꍇ +if (in_array($_conf['expack.ic2.enabled'], array($_conf['ktai'] ? 1 : 2, 3))) { +// �u���摜URL + if ($_conf['expack.ic2.enabled'] >= 2) { + require_once P2_LIB_DIR . '/wiki/ReplaceImageUrlCtl.php'; + $GLOBALS['replaceImageUrlCtl'] = new ReplaceImageUrlCtl(); + } +} + +// �g�уr���[�ȊO�̏ꍇ +if (!$_conf['ktai'] || $_conf['iphone']) { +// �����N�v���O�C�� + require_once P2_LIB_DIR . '/wiki/LinkPluginCtl.php'; + $GLOBALS['linkPluginCtl'] = new LinkPluginCtl(); +} + +// �u�����[�h +require_once P2_LIB_DIR . '/wiki/ReplaceWordCtl.php'; +$GLOBALS['replaceWordCtl'] = new ReplaceWordCtl(); + +// }}} // iPhone if ($_conf['iphone']) { diff --git a/rep2/subject.php b/rep2/subject.php index 3ca376bd0..db1aeb9e5 100644 --- a/rep2/subject.php +++ b/rep2/subject.php @@ -8,6 +8,12 @@ require_once __DIR__ . '/../init.php'; +// +Wiki NG�X���b�h�@�\ +if ($_conf['wiki.ng_thread']) { + require_once P2_LIB_DIR . '/wiki/NgThreadCtl.php'; + $GLOBALS['ngThreadCtl'] = new NgThreadCtl(); +} + //$GLOBALS['debug'] && $GLOBALS['profiler']->enterSection('HEAD'); $_login->authorize(); // ���[�U�F�� @@ -532,6 +538,10 @@ continue; } + // {{{ ��+Wiki:NG�X���b�h�`�F�b�N + if (isset($ngaborns)) if ($ngaborns->check($aThread)) continue; + // }}} + // {{{ �� favlist�`�F�b�N //$GLOBALS['debug'] && $GLOBALS['profiler']->enterSection('favlist_check'); @@ -881,6 +891,9 @@ NgAbornCtl::saveAbornThreads($aborn_threads); } +// +Wiki:NG�X���b�h +if (isset($ngaborns)) $ngaborns->save(); + //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('FOOT'); // �����܂� From 714dd3467aa4d5a68658000d2ac2a24ecda5fbc1 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sat, 9 Apr 2016 10:05:29 +0900 Subject: [PATCH 199/339] v160409.1000 --- conf/conf.inc.php | 2 +- doc/README-774.txt | 6 ++++++ doc/README-API.txt | 4 ---- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index e27aac339..8e4c59b88 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '160309.0710', // rep2�̃o�[�W���� + 'p2version' => '160409.1000', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/doc/README-774.txt b/doc/README-774.txt index 5ef8915c0..063c12919 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -64,6 +64,12 @@ rep2-expack test https://github.com/orzisun/p2-php ��ChangeLog +160409.1000 +* NG�X���b�h�@�\�����삵�Ȃ��s����C�� +* �摜�u��URL�����삵�Ȃ��s��C�� +* �т񂽂��URL������X�V +* composer.json����URL���X�V���ĐV�K�C���X�g�[�����̕s��C�� + 160309.0710 * �ȉ��̕ύX�_��killer4989����̃p�b�`����荞�� * SOCKS5�ڑ���tor�ڑ����@�\���Ă��Ȃ��s����C�� diff --git a/doc/README-API.txt b/doc/README-API.txt index 74a835536..3002ba7ef 100644 --- a/doc/README-API.txt +++ b/doc/README-API.txt @@ -16,10 +16,6 @@ PHP dat�擾�ȊO��User-Agent��rep2�W������2chapi_appname���g�p�������ɕύX���܂��B �O���‚�User-Agent��dat�擾�͂�rep2�W���̂܂܂ł��B -2chapi_rounin -�u����v�ɐݒ肵���ꍇ��API �F�؎��Ɂ�(�Q�l)�𑗐M���܂��B -���M�����牽���N����̂�����Ȃ����ߐ؂�ւ��邱�Ƃ��o����悤�ɂȂ��Ă��܂��B - 2chapi_ssl.auth 2chapi_ssl.read ���̐ݒ��SSL�ʐM���G���[�ƂȂ�‹������̐ݒ�ł��B From 99a6b71ed2d1047d4b1c6d29c567ed19ba8e9af3 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sun, 10 Apr 2016 00:33:55 +0900 Subject: [PATCH 200/339] =?UTF-8?q?=E6=96=B0=E7=9D=80=E7=BA=8F=E3=82=81?= =?UTF-8?q?=E8=AA=AD=E3=81=BF=E3=81=A8=E5=AE=9F=E6=B3=81=E3=81=8C=E5=8B=95?= =?UTF-8?q?=E3=81=8B=E3=81=AA=E3=81=8F=E3=81=AA=E3=81=A3=E3=81=A6=E3=81=84?= =?UTF-8?q?=E3=81=9F=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/wiki/read.inc.php | 23 +++++++++++++++++++++++ rep2/live_read.php | 7 ++++--- rep2/read.php | 24 ++---------------------- 3 files changed, 29 insertions(+), 25 deletions(-) create mode 100644 lib/wiki/read.inc.php diff --git a/lib/wiki/read.inc.php b/lib/wiki/read.inc.php new file mode 100644 index 000000000..52df5997d --- /dev/null +++ b/lib/wiki/read.inc.php @@ -0,0 +1,23 @@ +<?php +/* + p2 - �X���b�h�\����include�����t�@�C�� + read�n���ʂŎg�p���Ă��邽�ߍ폜�s�� +*/ + +// ImageCache2���L���̏ꍇ +if (in_array($_conf['expack.ic2.enabled'], array($_conf['ktai'] ? 1 : 2, 3))) { +// �u���摜URL + if ($_conf['expack.ic2.enabled'] >= 2) { + require_once P2_LIB_DIR . '/wiki/ReplaceImageUrlCtl.php'; + $GLOBALS['replaceImageUrlCtl'] = new ReplaceImageUrlCtl(); + } +} +// �g�уr���[�ȊO�̏ꍇ +if (!$_conf['ktai'] || $_conf['iphone']) { +// �����N�v���O�C�� + require_once P2_LIB_DIR . '/wiki/LinkPluginCtl.php'; + $GLOBALS['linkPluginCtl'] = new LinkPluginCtl(); +} +// �u�����[�h +require_once P2_LIB_DIR . '/wiki/ReplaceWordCtl.php'; +$GLOBALS['replaceWordCtl'] = new ReplaceWordCtl(); diff --git a/rep2/live_read.php b/rep2/live_read.php index 3b7c485c7..ccc0b1cdb 100755 --- a/rep2/live_read.php +++ b/rep2/live_read.php @@ -340,8 +340,9 @@ //=========================================================== // �������L�^ +// ����headline�͍ŋߓǂ񂾃X���ɋL�^���Ȃ��悤�ɂ��Ă݂� //=========================================================== -if ($aThread->rescount && !$is_ajax) { +if ($aThread->rescount && !$is_ajax && $aThread->host != 'headline.2ch.net') { recRecent(implode('<>', array($aThread->ttitle, $aThread->key, $idx_data[2], '', '', $aThread->readnum, $idx_data[6], $idx_data[7], $idx_data[8], $newline, $aThread->host, $aThread->bbs))); @@ -401,8 +402,8 @@ function recRecent($data) foreach ($lines as $l) { $lar = explode('<>', $l); $data_ar = explode('<>', $data); - if ($lar[1] == $data_ar[1]) { continue; } // key�ŏd����� - if (!$lar[1]) { continue; } // key�̂Ȃ����͕̂s���f�[�^ + if (!$lar[1] || !strlen($lar[11])) { continue; } // �s���f�[�^���폜 + if ($lar[1] == $data_ar[1] && $lar[11] == $data_ar[11]) { continue; } // key, bbs�ŏd����� $neolines[] = $l; } } diff --git a/rep2/read.php b/rep2/read.php index ab0c92732..6ee1cf5b0 100644 --- a/rep2/read.php +++ b/rep2/read.php @@ -9,28 +9,8 @@ $_login->authorize(); // ���[�U�F�� -// {{{ +Wiki�R���̋@�\�������� -// ImageCache2���L���̏ꍇ -if (in_array($_conf['expack.ic2.enabled'], array($_conf['ktai'] ? 1 : 2, 3))) { -// �u���摜URL - if ($_conf['expack.ic2.enabled'] >= 2) { - require_once P2_LIB_DIR . '/wiki/ReplaceImageUrlCtl.php'; - $GLOBALS['replaceImageUrlCtl'] = new ReplaceImageUrlCtl(); - } -} - -// �g�уr���[�ȊO�̏ꍇ -if (!$_conf['ktai'] || $_conf['iphone']) { -// �����N�v���O�C�� - require_once P2_LIB_DIR . '/wiki/LinkPluginCtl.php'; - $GLOBALS['linkPluginCtl'] = new LinkPluginCtl(); -} - -// �u�����[�h -require_once P2_LIB_DIR . '/wiki/ReplaceWordCtl.php'; -$GLOBALS['replaceWordCtl'] = new ReplaceWordCtl(); - -// }}} +// +Wiki +require_once P2_LIB_DIR . '/wiki/read.inc.php'; // iPhone if ($_conf['iphone']) { From 931551b50e96d90a2d33a4c471251ff9b62774e7 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sun, 10 Apr 2016 01:18:29 +0900 Subject: [PATCH 201/339] =?UTF-8?q?NG=E3=82=B9=E3=83=AC=E3=83=83=E3=83=89?= =?UTF-8?q?=E6=A9=9F=E8=83=BD=E3=81=8C=E6=9C=AC=E4=BD=93=E3=81=A8+Wiki?= =?UTF-8?q?=E3=81=A7=E9=87=8D=E8=A4=87=E3=81=97=E3=81=A6=E5=AE=9F=E8=A3=85?= =?UTF-8?q?=E3=81=95=E3=82=8C=E3=81=A6=E3=81=84=E3=82=8B=E3=81=AE=E3=81=A7?= =?UTF-8?q?=E5=89=8A=E9=99=A4=20=E5=AE=9F=E6=B3=81=E3=83=AA=E3=83=B3?= =?UTF-8?q?=E3=82=AF=E3=81=AB&ls=E3=82=92=E4=BB=98=E5=8A=A0=E3=81=97?= =?UTF-8?q?=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/read_header.inc.php | 4 +- lib/sb_print.inc.php | 2 +- lib/wiki/NgThreadCtl.php | 182 -------------------------------- rep2/edit_conf_user.php | 3 + rep2/edit_ng_thread.php | 223 --------------------------------------- rep2/subject.php | 15 +-- 6 files changed, 7 insertions(+), 422 deletions(-) delete mode 100644 lib/wiki/NgThreadCtl.php delete mode 100644 rep2/edit_ng_thread.php diff --git a/lib/read_header.inc.php b/lib/read_header.inc.php index 62f6485ff..17ac2f8d0 100755 --- a/lib/read_header.inc.php +++ b/lib/read_header.inc.php @@ -198,7 +198,7 @@ if($_conf['live.livelink_thread']==2||$livebbs_bool) { $toolbar_right_ht .= <<<EOTOOLBAR - <a href="live_frame.php?{$host_bbs_key_q}{$ttitle_en_q}&ls={$aThread->rescount}-{$word_q}{$anum_ht}">����</a> + <a href="live_frame.php?{$host_bbs_key_q}{$ttitle_en_q}">����</a> EOTOOLBAR; } } @@ -475,7 +475,7 @@ function filterCount(n) <script type="text/javascript"> //<![CDATA[ if (top == self) { - document.writeln('<a href="live_frame.php?{$host_bbs_key_q}{$ttitle_en_q}&ls={$aThread->rescount}-{$word_q}{$anum_ht}">�����t���[�� 2�y�C���ŊJ��<' + '/a> |'); + document.writeln('<a href="live_frame.php?{$host_bbs_key_q}{$ttitle_en_q}">�����t���[�� 2�y�C���ŊJ��<' + '/a> |'); } //]]> </script>\n diff --git a/lib/sb_print.inc.php b/lib/sb_print.inc.php index d0d349be7..1cda94a63 100644 --- a/lib/sb_print.inc.php +++ b/lib/sb_print.inc.php @@ -377,7 +377,7 @@ function sb_print($aThreadList) if($_conf['live.livelink_subject']==2||$livebbs_bool) { // $ttitle_en_q �͐ߌ��ȗ� - $live_url = "live_frame.php?{$host_bbs_key_q}&live=1{$rescount_q}{$anum_ht}"; + $live_url = "live_frame.php?{$host_bbs_key_q}&live=1{$rescount_q}"; } // �I�����[>>1 diff --git a/lib/wiki/NgThreadCtl.php b/lib/wiki/NgThreadCtl.php deleted file mode 100644 index 9663c9b35..000000000 --- a/lib/wiki/NgThreadCtl.php +++ /dev/null @@ -1,182 +0,0 @@ -<?php -/* -replaceLinkToHTML(url, src) ���C���֐� -save(array) �f�[�^��ۑ� -load() �f�[�^��ǂݍ���ŕԂ�(�����I�Ɏ��s�����) -clear() �f�[�^���폜 - -��{�\�� -�f�[�^�̓o�^���@ -�E$this->data���X�V���鎖�ɂ��o�^ -�E�ꊇ�œo�^ -�E��s�����̓o�^ -�f�[�^�\�� -word ignorecase regex bbs lasttime hits -*/ - -require_once __DIR__ . '/WikiPluginCtlBase.php'; - -class NgThreadCtl -{ - const DATE_FORMAT = 'Y/m/d G:i'; - - protected $filename = 'p2_aborn_thread.txt'; - protected $data = array(); - public $hits = 0; - - /* - �f�[�^���N���A - */ - public function clear() - { - global $_conf; - - $path = $_conf['pref_dir'] . '/' . $this->filename; - - return @unlink($path); - } - - /* - �f�[�^��ǂݍ���ŕԂ� - */ - public function load() - { - global $_conf; - - $lines = array(); - $path = $_conf['pref_dir'] . '/' . $this->filename; - if ($lines = @file($path)) { - foreach ($lines as $l) { - $lar = explode("\t", trim($l)); - if (strlen($lar[0]) == 0) { - continue; - } - $ar = array( - 'word' => $lar[0], // �Ώە����� - 'ignorecase' => $lar[1], // �啶���������𖳎� - 'regex' => $lar[2], // ���K�\�� - 'bbs' => $lar[3], // �”��� - 'lasttime' => $lar[4] == '--' ? '' : $lar[4], // �Ō��HIT�������� - 'hits' => (int) $lar[5], // HIT�� - ); - - $this->data[] = $ar; - } - } - - return $this->data; - } - - /* - �ۑ� - �������w�肳��Ă�˂��̃f�[�^�ŕۑ� - $this->data���Ȃ��˕ۑ����Ȃ� - */ - public function save($data) - { - global $_conf; - - if ($data) { - $new_data = true; - $this->data = $data; - } elseif (!$this->isLoaded) { - return; - } else { - $new_data = false; - } - // HIT�������̂ݍX�V���� - if ($this->hits > 0 || $new_data) { - $cont = ''; - - foreach ($this->data as $v) { - if ($v['del']) { - continue; - } - - // �K�v�Ȃ炱���ŌÂ��f�[�^�̓X�L�b�v�i�폜�j���� - if (!empty($v['lasttime']) && $_conf['ngaborn_daylimit']) { - if (strtotime($v['lasttime']) < time() - 60 * 60 * 24 * $_conf['ngaborn_daylimit']) { - continue; - } - } - - $a['word'] = strtr(trim($v['word'], "\t\r\n"), "\t\r\n", " "); - $a['ignorecase'] = $v['ignorecase']; - $a['regex'] = $v['regex']; - $a['bbs'] = strtr(trim($v['bbs'], "\t\r\n"), "\t\r\n", " "); - $a['lasttime'] = $v['lasttime']; - $a['hits'] = $v['hits']; - - // lasttime���ݒ肳��Ă��Ȃ������猻�ݎ��Ԃ�ݒ�(�{���Ȃ�o�^���ɂ���ׂ�) - if (empty($v['lasttime'])) { - $v['lasttime'] = date(self::DATE_FORMAT); - } - - $cont .= implode("\t", $v) . "\n"; - } - - return FileCtl::file_write_contents($_conf['pref_dir'].'/'.$this->filename); - } - } - - /* - ���ځ[��`�F�b�N - ���ځ[��Ώہ�true - */ - public function check($aThread) - { - $this->setup(); - - if ($aThreadList->spmode != "taborn" && isset($this->data) && is_array($this->data)) { - foreach ($this->data as $k => $v) { - // �ƒ`�F�b�N - if (!in_array($aThread->bbs, explode(',', $v['bbs']))) { - continue; - } - // ���K�\�� - if (!empty($v['regex'])) { - if ($v['ignorecase']) { - $match = '{' . $v['word'] . '}i'; - } else { - $match = '{' . $v['word'] . '}'; - } - if (preg_match('{' . $v['word'] . '}i', $aThread->ttitle_hc)) { - $this->update($k); - return true; - } - // �啶���������𖳎� - } elseif (!empty($v['ignorecase'])) { - if(stristr($aThread->ttitle_hc,$v['word'])){ - $this->update($k); - return true; - } - // �P���ɕ����񂪊܂܂�邩�ǂ������`�F�b�N - } else { - if (strstr($aThread->ttitle_hc,$v['word'])) { - $this->update($k); - return true; - } - } - } - } - - return false; - } - - /* - ���̃f�[�^�̂��ځ[������X�V - */ - public function update($k) - { - $this->hits++; - if (isset($this->data[$k])) { - $this->data[$k]['lasttime'] = date(self::DATE_FORMAT); // HIT���Ԃ��X�V - if (empty($v['hits'])) { - $this->data[$k]['hits'] = 1; // ��HIT - } else { - $this->data[$k]['hits']++; // HIT�񐔂��X�V - } - } - } - -} diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index 1694fd748..73605bb67 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -849,6 +849,9 @@ $keep_old = true; } else { $conflist = array( + 'samba �^�C�}�[', + array('wiki.samba_timer', 'samba �^�C�}�[�𗘗p'), + array('wiki.samba_cache', 'samba �̃L���b�V������'), '�摜�u��URL', array('wiki.replaceimageurl.extract_cache', '�摜�u��URL��EXTRACT�L���b�V������'), '�X�}�[�g�|�b�v�A�b�v���j���[�O���c�[��', diff --git a/rep2/edit_ng_thread.php b/rep2/edit_ng_thread.php deleted file mode 100644 index 68065aec3..000000000 --- a/rep2/edit_ng_thread.php +++ /dev/null @@ -1,223 +0,0 @@ -<?php -/* - p2 - NG�X���b�h�C���^�t�F�[�X -*/ - -require_once __DIR__ . '/../init.php'; -require_once P2_LIB_DIR . '/wiki/NgThreadCtl.php'; - -$_login->authorize(); // ���[�U�F�� - -if (!empty($_POST['submit_save']) || !empty($_POST['submit_default'])) { - if (!isset($_POST['csrfid']) || $_POST['csrfid'] != P2Util::getCsrfId()) { - die('p2 error: �s���ȃ|�X�g�ł�'); - } -} - -$ngThreadCtl = new NgThreadCtl(); - -//===================================================================== -// �O���� -//===================================================================== - -// {{{ ���ۑ��{�^����������Ă�����A�ݒ��ۑ� - -if (!empty($_POST['submit_save'])) { - - if ($ngThreadCtl->save($POST['nga']) != false) { - $_info_msg_ht .= '<p>���ݒ���X�V�ۑ����܂���</p>'; - } else { - $_info_msg_ht .= '<p>�~�ݒ���X�V�ۑ��ł��܂���ł���</p>'; - } - -// }}} -// {{{ ���f�t�H���g�ɖ߂��{�^����������Ă����� - -} elseif (!empty($_POST['submit_default'])) { - if ($ngThreadCtl->clear()) { - $_info_msg_ht .= '<p>�����X�g����ɂ��܂���</p>'; - } else { - $_info_msg_ht .= '<p>�~���X�g����ɂł��܂���ł���</p>'; - } -} - -// }}} -// {{{ ���X�g�ǂݍ��� - -$formdata = $ngThreadCtl->load(); - -// }}} - -//===================================================================== -// �v�����g�ݒ� -//===================================================================== -$ptitle_top = 'NG�X���b�h�ҏW'; -$ptitle = strip_tags($ptitle_top); - -$csrfid = P2Util::getCsrfId(); - -//===================================================================== -// �v�����g -//===================================================================== -// �w�b�_HTML���v�����g -P2Util::header_nocache(); -echo $_conf['doctype']; -echo <<<EOP -<html lang="ja"> -<head> - {$_conf['meta_charset_ht']} - <meta name="ROBOTS" content="NOINDEX, NOFOLLOW"> - <meta http-equiv="Content-Style-Type" content="text/css"> - <meta http-equiv="Content-Script-Type" content="text/javascript"> - <title>{$ptitle}\n -EOP; - -if (!$_conf['ktai']) { - echo << - - - \n -EOP; -} - -$body_at = ($_conf['ktai']) ? $_conf['k_colors'] : ' onLoad="top.document.title=self.document.title;"'; -echo << -\n -EOP; - -// PC�p�\�� -if (!$_conf['ktai']) { - echo <<�ݒ�Ǘ� > {$ptitle_top}

    \n -EOP; -} else { - echo basename($path) . "
    "; -} - -// PC�p�\�� -if (!$_conf['ktai']) { - $htm['form_submit'] = << - - -
    - - \n -EOP; -// �g�їp�\�� -} else { - $htm['form_submit'] = <<
    \n -EOP; -} - -// ��񃁃b�Z�[�W�\�� -if (!empty($_info_msg_ht)) { - echo $_info_msg_ht; - $_info_msg_ht = ""; -} - -$usage = << -
  • �~: �폜
  • -
  • ���[�h: NG/���ځ[�񃏁[�h (��ɂ���Ɠo�^����)
  • -
  • i: �啶���������𖳎�
  • -
  • re: ���K�\��
  • -
  • ��: newsplus,software �� (���S��v, �J���}��؂�)
  • - -EOP; -if ($_conf['ktai']) { - $usage = mb_convert_kana($usage, 'k'); -} -echo << - {$_conf['k_input_ht']} - - - \n -EOP; - -// PC�p�\���itable�j -if (!$_conf['ktai']) { - echo << - - �~ - ���[�h - i - re - �� - �ŏI�q�b�g�����Ɖ� - - - �V�K�o�^ - \n -EOP; - $row_format = << - - - - - - - %6\$s - (%7\$d) - - \n -EOP; -// �g�їp�\�� -} else { - echo "�V�K�o�^
    \n"; - $row_format = <<
    -��: -i -re -�~
    - -(%6\$d)
    \n -EOP; -} - -printf($row_format, -1, '', '', '', '', '--', 0); - -echo $htm['form_submit']; -if (!empty($formdata)) { - foreach ($formdata as $k => $v) { - printf($row_format, - $k, - p2h($v['word']), - $v['ignorecase'], - $v['regex'], - p2h($v['bbs']), - p2h($v['lasttime']), - p2h($v['hits']) - ); - } - echo $htm['form_submit']; -} - -// PC�Ȃ� -if (!$_conf['ktai']) { - echo ''."\n"; -} - -echo ''."\n"; - -// �g�тȂ� -if ($_conf['ktai']) { - echo << -{$_conf['k_accesskey']['up']}.�ݒ�ҏW -{$_conf['k_to_index_ht']} -EOP; -} - -echo ''; - -// �����܂� -exit; diff --git a/rep2/subject.php b/rep2/subject.php index db1aeb9e5..c40690f74 100644 --- a/rep2/subject.php +++ b/rep2/subject.php @@ -8,12 +8,6 @@ require_once __DIR__ . '/../init.php'; -// +Wiki NG�X���b�h�@�\ -if ($_conf['wiki.ng_thread']) { - require_once P2_LIB_DIR . '/wiki/NgThreadCtl.php'; - $GLOBALS['ngThreadCtl'] = new NgThreadCtl(); -} - //$GLOBALS['debug'] && $GLOBALS['profiler']->enterSection('HEAD'); $_login->authorize(); // ���[�U�F�� @@ -123,7 +117,7 @@ // }}} // {{{ �\���X���b�h���ݒ� -$threads_num_max = 65535; +$threads_num_max = 2000; if (!$spmode || $spmode == 'merge_favita') { $threads_num = $p2_setting['viewnum']; @@ -538,10 +532,6 @@ continue; } - // {{{ ��+Wiki:NG�X���b�h�`�F�b�N - if (isset($ngaborns)) if ($ngaborns->check($aThread)) continue; - // }}} - // {{{ �� favlist�`�F�b�N //$GLOBALS['debug'] && $GLOBALS['profiler']->enterSection('favlist_check'); @@ -891,9 +881,6 @@ NgAbornCtl::saveAbornThreads($aborn_threads); } -// +Wiki:NG�X���b�h -if (isset($ngaborns)) $ngaborns->save(); - //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('FOOT'); // �����܂� From e5d1006fc2a8bda4dc79a9eb039763ad0e0a3967 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sun, 10 Apr 2016 01:44:15 +0900 Subject: [PATCH 202/339] =?UTF-8?q?v160410.0125=20=E6=9C=AA=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E3=81=AE=E8=A8=AD=E5=AE=9A=E9=A0=85=E7=9B=AE=E3=82=92?= =?UTF-8?q?=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- conf/conf_user_def_wiki.inc.php | 11 ----------- doc/README-774.txt | 6 ++++++ 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 8e4c59b88..2b837a02d 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '160409.1000', // rep2�̃o�[�W���� + 'p2version' => '160410.0125', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/conf/conf_user_def_wiki.inc.php b/conf/conf_user_def_wiki.inc.php index fcfcdc4c5..a480af3aa 100644 --- a/conf/conf_user_def_wiki.inc.php +++ b/conf/conf_user_def_wiki.inc.php @@ -44,14 +44,3 @@ $conf_user_rules['wiki.samba_cache'] = array('emptyToDef', 'notIntExceptMinusToDef'); // }}} - -// {{{ ��samba - -// NG�X���b�h��L���ɂ��� (����:1, ���Ȃ�:0) -$conf_user_def['wiki.ng_thread'] = 0; // (0) -$conf_user_rad['wiki.ng_thread'] = array('1' => '����', '0' => '���Ȃ�'); -// �g�щ{�����A���X�ԍ���SPM���‚��� (�‚���:1, �‚��Ȃ�:0) -$conf_user_def['wiki.spm.mobile'] = 0; // (0) -$conf_user_rad['wiki.spm.mobile'] = array('1' => '����', '0' => '���Ȃ�'); - -// }}} diff --git a/doc/README-774.txt b/doc/README-774.txt index 063c12919..7c0969fbb 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -64,6 +64,12 @@ rep2-expack test https://github.com/orzisun/p2-php ��ChangeLog +160410.0125 +* NG�X���b�h�@�\���{�̂�+Wiki�ŏd�����Ď�������Ă���̂ō폜 +* 160409.1000 �ɐV���Z�ߓǂ݂Ǝ����������삵�Ȃ��s�������̂ŏC�� +* ���������N��&ls��t�����Ȃ��悤�ɕύX +* ���[�U�[�ݒ�Ǘ���+Wiki��samba�^�C�}�[�Ɋւ���ݒ荀�ڂ�\������悤�ɕύX + 160409.1000 * NG�X���b�h�@�\�����삵�Ȃ��s����C�� * �摜�u��URL�����삵�Ȃ��s��C�� From 4e60d62166885611305c0bb2bf7242afdc74b19c Mon Sep 17 00:00:00 2001 From: killer4989 Date: Fri, 3 Jun 2016 19:53:02 +0900 Subject: [PATCH 203/339] =?UTF-8?q?ImageCache2=20=E3=81=A7=E3=81=AE?= =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=A0=E3=82=A2=E3=82=A6=E3=83=88=E8=A8=AD?= =?UTF-8?q?=E5=AE=9A=E5=80=A4=E3=82=92=20http=5Fconn=5Ftimeout=20/=20http?= =?UTF-8?q?=5Fread=5Ftimeout=20=E3=81=AB=E4=BE=9D=E5=AD=98=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf_ic2.inc.php | 4 ++-- rep2/ic2.php | 10 ++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/conf/conf_ic2.inc.php b/conf/conf_ic2.inc.php index 4bb5d6750..fdd89f165 100644 --- a/conf/conf_ic2.inc.php +++ b/conf/conf_ic2.inc.php @@ -138,10 +138,10 @@ // �y�[�W�^�C�g�� $_conf['expack.ic2.getter.title'] = "ImageCache2::Getter"; -// �T�[�o�ɐڑ�����ۂɃ^�C���A�E�g����܂ł̎��ԁi�b�j +// �T�[�o�ɐڑ�����ۂɃ^�C���A�E�g����܂ł̎��ԁi�b�j[0 => http_conn_timeout �Ɉˑ�] $_conf['expack.ic2.getter.conn_timeout'] = 5; -// �_�E�����[�h���^�C���A�E�g����܂ł̎��ԁi�b�j +// �_�E�����[�h���^�C���A�E�g����܂ł̎��ԁi�b�j[0 => http_read_timeout �Ɉˑ�] $_conf['expack.ic2.getter.read_timeout'] = 60; // �G���[���O�ɂ���摜�̓_�E�����[�h�����݂Ȃ� (no:0;yes:1) diff --git a/rep2/ic2.php b/rep2/ic2.php index 28a4f84ba..caf3f0877 100644 --- a/rep2/ic2.php +++ b/rep2/ic2.php @@ -297,9 +297,9 @@ public function __destruct() // �ݒ���m�F $conn_timeout = (isset($ini['Getter']['conn_timeout']) && $ini['Getter']['conn_timeout'] > 0) - ? (float) $ini['Getter']['conn_timeout'] : 60.0; + ? $ini['Getter']['conn_timeout'] : $_conf['http_conn_timeout']; $read_timeout = (isset($ini['Getter']['read_timeout']) && $ini['Getter']['read_timeout'] > 0) - ? (int) $ini['Getter']['read_timeout'] : 60; + ? $ini['Getter']['read_timeout'] : $_conf['http_read_timeout']; $ic2_ua = (!empty($_conf['expack.user_agent'])) ? $_conf['expack.user_agent'] : $_SERVER['HTTP_USER_AGENT']; @@ -312,6 +312,12 @@ public function __destruct() $req->setHeader('If-Modified-Since', http_date($mtime)); } + // �^�C���A�E�g�̐ݒ� + $req->setConfig (array ( + 'connect_timeout' => $conn_timeout, + 'timeout' => $read_timeout, + )); + // ���t�@���ݒ� if (is_null($referer)) { $send_referer = (boolean)$ini['Getter']['sendreferer']; From 4c1c1388ec966cd6397d422d85b3ea343571670f Mon Sep 17 00:00:00 2001 From: killer4989 Date: Fri, 3 Jun 2016 20:19:43 +0900 Subject: [PATCH 204/339] =?UTF-8?q?(=E4=BA=BA=E6=9F=B1=E6=A9=9F=E8=83=BD)c?= =?UTF-8?q?url=20=E3=82=92=E7=94=A8=E3=81=84=E3=81=9F=E4=B8=A6=E5=88=97?= =?UTF-8?q?=E3=83=80=E3=82=A6=E3=83=B3=E3=83=AD=E3=83=BC=E3=83=89=E6=A9=9F?= =?UTF-8?q?=E8=83=BD=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf_admin_ex.inc.php | 4 + lib/P2CurlMulti.php | 298 ++++++++++++++++++++++++++++++++++ lib/ShowBrdMenuPc.php | 5 +- lib/ThreadList.php | 5 +- lib/menu.inc.php | 20 ++- rep2/subject.php | 53 ++++-- scripts/fetch-subject-txt.php | 14 +- 7 files changed, 370 insertions(+), 29 deletions(-) create mode 100644 lib/P2CurlMulti.php diff --git a/conf/conf_admin_ex.inc.php b/conf/conf_admin_ex.inc.php index a266f80d7..4bb46be97 100644 --- a/conf/conf_admin_ex.inc.php +++ b/conf/conf_admin_ex.inc.php @@ -17,6 +17,10 @@ // Zend Framework (Zend Gdata�ł���) ��library�f�B���N�g���ւ̃p�X $_conf['expack.zf_path'] = ""; // ("") +// curl �ɂ�����_�E�����[�h��L���ɂ��� +// (off:0, on:1) +$_conf['expack.use_curl_multi'] = 0; // (1) + // pecl_http �����p�ł���ꍇ�AHttpRequestPool �ɂ�����_�E�����[�h��L���ɂ��� // (off:0, on:1, �R�}���h���C���Ŏ��s:2) $_conf['expack.use_pecl_http'] = 1; // (1) diff --git a/lib/P2CurlMulti.php b/lib/P2CurlMulti.php new file mode 100644 index 000000000..56c77823d --- /dev/null +++ b/lib/P2CurlMulti.php @@ -0,0 +1,298 @@ +mh = curl_multi_init(); + $this->ch = array(); + $this->file_update = array(); + } + + private function __destruct() { + foreach ($this->ch as $ch_array) { + curl_multi_remove_handle($this->mh, $ch_array); + curl_close($ch_array); + } + curl_multi_close($this->mh); + } + + + private function add($subjects, $force = false) { + global $_conf; + + if(empty($subjects)){ return; } + + $time = time() - $_conf['sb_dl_interval']; + $isOldFile = array(); + + foreach ($subjects as $key => $subject) { + list($host, $bbs) = explode("_", $key); + + $url = "http://{$host}/{$bbs}/subject.txt"; + $file = P2Util::datDirOfHostBbs($host, $bbs) . 'subject.txt'; + + $isOldFile[$key] = false; + if (!$force && file_exists($file) && $time <= filemtime($file)) { + $isOldFile[$key] = true; + continue; + } + + $this->ch[$key] = curl_init(); + + $this->file_update[$key] = file_exists($file) ? filemtime($file) : 0; + + // dat�擾�pheader���� + $header = array(); + $header["If-Modified-Since"] = gmdate('D, d M Y H:i:s T', $this->file_update[$key]); + $header["Connection"] = 'close'; + + curl_setopt($this->ch[$key], CURLOPT_URL, $url); + curl_setopt($this->ch[$key], CURLOPT_RETURNTRANSFER, true); + curl_setopt($this->ch[$key], CURLOPT_TIMEOUT, $_conf['http_read_timeout']); + curl_setopt($this->ch[$key], CURLOPT_CONNECTTIMEOUT, $_conf['http_conn_timeout']); + curl_setopt($this->ch[$key], CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($this->ch[$key], CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE); + curl_setopt($this->ch[$key], CURLOPT_FILETIME, true); + curl_setopt($this->ch[$key], CURLOPT_HTTPHEADER, $header); + curl_setopt($this->ch[$key], CURLINFO_HEADER_OUT, true); + curl_setopt($this->ch[$key], CURLOPT_HEADER, true); + curl_setopt($this->ch[$key], CURLOPT_MAXCONNECTS, self::MAX_REQUESTS_PER_HOST); + + // User-Agent + if(P2Util::isHost2chs($host) && !P2Util::isNotUse2chAPI($host) && $_conf['2chapi_use']){ + $user_agent = sprintf ($_conf['2chapi_ua.read'], $_conf['2chapi_appname']); + } else { + $user_agent = P2Util::getP2UA(true, P2Util::isHost2chs($purl['host'])); + } + curl_setopt($this->ch[$key], CURLOPT_USERAGENT, $user_agent); + + // �v���L�V + if ($_conf['tor_use'] && P2Util::isHostTor($purl['host'], 0)) { // Tor(.onion)��Tor�p�̐ݒ���Z�b�g + $tor_user_info = sprintf("%s%s@", $_conf['tor_proxy_user'], empty($_conf['tor_proxy_password']) ? "" : ":{$_conf['tor_proxy_password']}"); + $tor_address = "{$_conf['tor_proxy_host']}:{$_conf['tor_proxy_port']}"; + $address = sprintf("http://%s%s", strpos($tor_user_info, "@") === 0 ? "" : $tor_user_info, $tor_address); + + curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); + curl_setopt($ch, CURLOPT_PROXY, $address); + + if($_conf['tor_proxy_mode'] == 'socks5'){ + curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); + } + + } elseif ($_conf['proxy_use']) { + $proxy_user_info = sprintf("%s%s@", $_conf['proxy_user'], empty($_conf['proxy_password']) ? "" : ":{$_conf['proxy_password']}"); + $proxy_address = "{$_conf['proxy_host']}:{$_conf['proxy_port']}"; + $address = sprintf("http://%s%s", strpos($proxy_user_info, "@") === 0 ? "" : $proxy_user_info, $proxy_address); + + curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); + curl_setopt($ch, CURLOPT_PROXY, $address); + + if($_conf['proxy_mode'] == 'socks5'){ + curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); + } + } + + curl_multi_add_handle($this->mh, $this->ch[$key]); + } + } + + private function execute() { + global $_conf; + + if(is_null($this->mh) && is_null($this->ch)){ + return; + } + + // execute + do { + $stat = curl_multi_exec($this->mh, $running); + } while ($stat === CURLM_CALL_MULTI_PERFORM); + + // check + // �b��Ŏc��(not start Download �Ȃ�I���ł�?) +// if (!$running || $stat !== CURLM_OK) { +// // throw new RuntimeException("$running $stat"); +// error_log("not start download. please check. running:[$running], stat:[$stat]\n", 3, "D:/Apache/Apache2.4/logs/test.log"); +// } + + // wait + do { + switch (curl_multi_select($this->mh, self::TIMEOUT)) { + case -1: // select�Ɏ��s����P�[�X������炵�� https://bugs.php.net/bug.php?id=61141 + usleep(10); + do{ + $stat = curl_multi_exec($this->mh, $running); + } while ($stat === CURLM_CALL_MULTI_PERFORM); + continue 2; + + case 0: //timeout + continue 2; + + default: + //�����ω��������� + do{ + $stat = curl_multi_exec($this->mh, $running); + } while ($stat === CURLM_CALL_MULTI_PERFORM); + } + } while ($running); + } + + private function getResult() { + + $eucjp2sjis = null; + + foreach ($this->ch as $key => $ch_array) { + list($host, $bbs) = explode("_", $key); + + if ($isOldFile[$key]) { + continue; + } + + $file = P2Util::datDirOfHostBbs($host, $bbs) . 'subject.txt'; + + if(is_null($this->mh) && is_null($ch_array)){ + return; + } + + if(empty($ch)){ + continue; + } + + $tmp = curl_getinfo($ch_array); + $tmp += array("before_time" => $this->file_update[$key], "after_time" => empty($tmp['filetime']) ? time() : $tmp['filetime']); + // $result[$key] = $tmp; + + $data = curl_multi_getcontent($ch_array); + $header_size = $tmp['header_size']; + + if (P2Util::isHostJbbsShitaraba($host) || P2Util::isHostBe2chNet($host)) { + $data = mb_convert_encoding($data, 'CP932', 'CP51932'); + } + + // 304�����Ȃ������Ƃ��p + if($tmp['http_code'] != "304" && $tmp['before_time'] <= $tmp['after_time']){ + $body = substr($data, $header_size); + if (file_put_contents($file, $body) === false) { + error_log("cannot write file.[$file]\n", 3, "D:/Apache/Apache2.4/logs/test.log"); + } + } + } + } + + // {{{ fetchSubjectTxt() + + /** + * subject.txt���ꊇ�_�E�����[�h&�ۑ����� + * + * @param array|string $subjects + * @param bool $force + * @return void + */ + static public function fetchSubjectTxt($subjects, $force = false) + { + global $_conf; + + $makeIdFormat = "%s_%s"; + + // {{{ �_�E�����[�h�Ώۂ�ݒ� + + // ���C�ɔ“���.idx�`���̃t�@�C�����p�[�X + if (is_string($subjects)) { + $lines = FileCtl::file_read_lines($subjects, FILE_IGNORE_NEW_LINES); + if (!$lines) { + return; + } + + $subjects = array(); + + foreach ($lines as $l) { + $la = explode('<>', $l); + if (count($la) < 12) { + continue; + } + + $host = $la[10]; + $bbs = $la[11]; + if ($host === '' || $bbs === '') { + continue; + } + + $key = sprintf($makeIdFormat, $host, $bbs); + if (isset($subjects[$key])) { + continue; + } + + $subjects[$key] = array($host, $bbs); + } + + // [host, bbs] �̘A�z�z������� + } elseif (is_array($subjects)) { + $originals = $subjects; + $subjects = array(); + + foreach ($originals as $s) { + if (!is_array($s) || !isset($s['host']) || !isset($s['bbs'])) { + continue; + } + + $key = sprintf($makeIdFormat, $s['host'], $s['bbs']); + if (isset($subjects[$key])) { + continue; + } + + $subjects[$key] = array($s['host'], $s['bbs']); + } + + // ��L�ȊO + } else { + return; + } + + if (!count($subjects)) { + return; + } + + // }}} + // {{{ + + ksort($subjects); + + $self = new self; + + // �e subject.txt �ւ̃��N�G�X�g���L���[�ɒlj� + $self->add($subjects, $force); + + // �_�E�����[�h�X�^�[�g + $self->execute(); + + // �e subject.txt ��ۑ� + $self->getResult(); + + // }}} + + return ; + } + + // }}} +} + +// }}} +/* + * Local Variables: + * mode: php + * coding: cp932 + * tab-width: 4 + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ +// vim: set syn=php fenc=cp932 ai et ts=4 sw=4 sts=4 fdm=marker: diff --git a/lib/ShowBrdMenuPc.php b/lib/ShowBrdMenuPc.php index 583bf4ce8..1c90172d9 100644 --- a/lib/ShowBrdMenuPc.php +++ b/lib/ShowBrdMenuPc.php @@ -107,7 +107,10 @@ public function printFavIta() if ($favitas) { // �V������\������ꍇ�E�܂Ƃ߂ăv���t�F�b�` if ($_conf['enable_menu_new'] && !empty($_GET['new'])) { - if ($_conf['expack.use_pecl_http'] == 1) { + if ($_conf['expack.use_curl_multi'] == 1) { + P2CurlMulti::fetchSubjectTxt($favitas); + $GLOBALS['expack.subject.multi-threaded-download.done'] = true; + } elseif ($_conf['expack.use_pecl_http'] == 1) { P2HttpExt::activate(); P2HttpRequestPool::fetchSubjectTxt($favitas); $GLOBALS['expack.subject.multi-threaded-download.done'] = true; diff --git a/lib/ThreadList.php b/lib/ThreadList.php index 8a6c9cd6a..1856e1930 100644 --- a/lib/ThreadList.php +++ b/lib/ThreadList.php @@ -167,7 +167,10 @@ public function readList() } if (empty($_REQUEST['norefresh']) && !(empty($_REQUEST['refresh']) && isset($_REQUEST['word']))) { - if ($_conf['expack.use_pecl_http'] == 1) { + if ($_conf['expack.use_curl_multi'] == 1) { + P2CurlMulti::fetchSubjectTxt($favitas); + $GLOBALS['expack.subject.multi-threaded-download.done'] = true; + } elseif ($_conf['expack.use_pecl_http'] == 1) { P2HttpExt::activate(); P2HttpRequestPool::fetchSubjectTxt($favitas); $GLOBALS['expack.subject.multi-threaded-download.done'] = true; diff --git a/lib/menu.inc.php b/lib/menu.inc.php index 2419d9554..0878ac119 100644 --- a/lib/menu.inc.php +++ b/lib/menu.inc.php @@ -290,17 +290,19 @@ function chMenuColor(idnum){ // ���V������\������ꍇ if ($_conf['enable_menu_new'] == 1 && $_GET['new']) { // ����_�E�����[�h�̐ݒ� - if ($_conf['expack.use_pecl_http'] == 1) { - P2HttpExt::activate(); - $GLOBALS['expack.subject.multi-threaded-download.done'] = true; - } elseif ($_conf['expack.use_pecl_http'] == 2) { + if ($_conf['expack.use_curl_multi'] != 0 || $_conf['expack.use_pecl_http'] != 0) { + if ($_conf['expack.use_pecl_http'] == 1) { + P2HttpExt::activate(); + } $GLOBALS['expack.subject.multi-threaded-download.done'] = true; } // {{{ ���C�ɃX�� // �_�E�����[�h - if ($_conf['expack.use_pecl_http'] == 1) { + if ($_conf['expack.use_curl_multi'] == 1) { + P2CurlMulti::fetchSubjectTxt($_conf['favlist_idx']); + } elseif ($_conf['expack.use_pecl_http'] == 1) { P2HttpRequestPool::fetchSubjectTxt($_conf['favlist_idx']); } elseif ($_conf['expack.use_pecl_http'] == 2) { P2CommandRunner::fetchSubjectTxt('fav', $_conf); @@ -317,7 +319,9 @@ function chMenuColor(idnum){ // {{{ �ŋߓǂ񂾃X�� // �_�E�����[�h - if ($_conf['expack.use_pecl_http'] == 1) { + if ($_conf['expack.use_curl_multi'] == 1) { + P2CurlMulti::fetchSubjectTxt($_conf['recent_idx']); + } elseif ($_conf['expack.use_pecl_http'] == 1) { P2HttpRequestPool::fetchSubjectTxt($_conf['recent_idx']); } elseif ($_conf['expack.use_pecl_http'] == 2) { P2CommandRunner::fetchSubjectTxt('recent', $_conf); @@ -334,7 +338,9 @@ function chMenuColor(idnum){ // {{{ �������ݗ��� // �_�E�����[�h - if ($_conf['expack.use_pecl_http'] == 1) { + if ($_conf['expack.use_curl_multi'] == 1) { + P2CurlMulti::fetchSubjectTxt($_conf['res_hist_idx']); + } elseif ($_conf['expack.use_pecl_http'] == 1) { P2HttpRequestPool::fetchSubjectTxt($_conf['res_hist_idx']); } elseif ($_conf['expack.use_pecl_http'] == 2) { P2CommandRunner::fetchSubjectTxt('res_hist', $_conf); diff --git a/rep2/subject.php b/rep2/subject.php index c40690f74..bf25791d9 100644 --- a/rep2/subject.php +++ b/rep2/subject.php @@ -264,29 +264,46 @@ } //============================================================ -// �X�V����ꍇ�A�O�����Ĉꊇ������_�E�����[�h (�vpecl_http) +// �X�V����ꍇ�A�O�����Ĉꊇ������_�E�����[�h (�vpecl_http or curl) //============================================================ if (empty($_REQUEST['norefresh']) && !(empty($_REQUEST['refresh']) && isset($_REQUEST['word']))) { - if ($_conf['expack.use_pecl_http'] == 1) { + if ($_conf['expack.use_curl_multi'] == 1) { + switch ($spmode) { + case 'fav': + P2CurlMulti::fetchSubjectTxt($_conf['favlist_idx']); + break; + case 'recent': + P2CurlMulti::fetchSubjectTxt($_conf['recent_idx']); + break; + case 'res_hist': + P2CurlMulti::fetchSubjectTxt($_conf['res_hist_idx']); + break; + case 'merge_favita': + P2CurlMulti::fetchSubjectTxt($favitas); + break; + } + $GLOBALS['expack.subject.multi-threaded-download.done'] = true; + + } elseif ($_conf['expack.use_pecl_http'] == 1) { P2HttpExt::activate(); switch ($spmode) { - case 'fav': - P2HttpRequestPool::fetchSubjectTxt($_conf['favlist_idx']); - $GLOBALS['expack.subject.multi-threaded-download.done'] = true; - break; - case 'recent': - P2HttpRequestPool::fetchSubjectTxt($_conf['recent_idx']); - $GLOBALS['expack.subject.multi-threaded-download.done'] = true; - break; - case 'res_hist': - P2HttpRequestPool::fetchSubjectTxt($_conf['res_hist_idx']); - $GLOBALS['expack.subject.multi-threaded-download.done'] = true; - break; - case 'merge_favita': - P2HttpRequestPool::fetchSubjectTxt($favitas); - $GLOBALS['expack.subject.multi-threaded-download.done'] = true; - break; + case 'fav': + P2HttpRequestPool::fetchSubjectTxt($_conf['favlist_idx']); + $GLOBALS['expack.subject.multi-threaded-download.done'] = true; + break; + case 'recent': + P2HttpRequestPool::fetchSubjectTxt($_conf['recent_idx']); + $GLOBALS['expack.subject.multi-threaded-download.done'] = true; + break; + case 'res_hist': + P2HttpRequestPool::fetchSubjectTxt($_conf['res_hist_idx']); + $GLOBALS['expack.subject.multi-threaded-download.done'] = true; + break; + case 'merge_favita': + P2HttpRequestPool::fetchSubjectTxt($favitas); + $GLOBALS['expack.subject.multi-threaded-download.done'] = true; + break; } } elseif ($_conf['expack.use_pecl_http'] == 2) { if (P2CommandRunner::fetchSubjectTxt($spmode, $_conf)) { diff --git a/scripts/fetch-subject-txt.php b/scripts/fetch-subject-txt.php index c90cbf60e..527f4786f 100644 --- a/scripts/fetch-subject-txt.php +++ b/scripts/fetch-subject-txt.php @@ -136,9 +136,19 @@ $favitas[$_id] = array('host' => $_host, 'bbs' => $_bbs); } } - P2HttpRequestPool::fetchSubjectTxt($favitas); + + if($_conf['expack.use_curl_multi'] == 1) { + P2HttpExt::fetchSubjectTxt($favitas); + } elseif($_conf['expack.use_pecl_http'] == 1) { + P2HttpRequestPool::fetchSubjectTxt($favitas); + } + } else { - P2HttpRequestPool::fetchSubjectTxt($source); + if($_conf['expack.use_curl_multi'] == 1) { + P2CurlMulti::fetchSubjectTxt($source); + } elseif($_conf['expack.use_pecl_http'] == 1) { + P2HttpRequestPool::fetchSubjectTxt($source); + } } // }}} From 8ca37de4c3ed6b4a5c5651dcc6851b7e86f95630 Mon Sep 17 00:00:00 2001 From: killer4989 Date: Fri, 3 Jun 2016 20:26:54 +0900 Subject: [PATCH 205/339] =?UTF-8?q?error=204002=20=E3=81=AB=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index e4bd34093..2da1ec535 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -663,6 +663,7 @@ public function get2chDatError($code = null) { $soukoni_match = "/�����I�ߋ����O�q�ɂ�<\/title>/"; $error3939_match = "{<title>�Q�����˂� error 3939}"; // �ߋ����O�q�ɂ�html���̎��i���ɂ����邩���A�悭�m��Ȃ��j + $error4002_match = "{�Q�����˂� error 4002}"; // �ߋ����O�q�ɂ�html���̎��i���ɂ����邩���A�悭�m��Ȃ��j // // @@ -682,6 +683,7 @@ public function get2chDatError($code = null) { } elseif ($reason === 'kakohtml' or preg_match ($naidesu_match, $read_response_html, $matches) || preg_match ($error3939_match, $read_response_html, $matches) || + preg_match ($error4002_match, $read_response_html, $matches) || preg_match ($vip2ch_kakosoko_match, $read_response_html, $matches) || preg_match ($soukoni_match, $read_response_html, $matches)) { @@ -694,6 +696,14 @@ public function get2chDatError($code = null) { $kakolog_url_en = rawurlencode ($kakolog_uri); $read_kako_url = "{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&kakolog={$kakolog_url_en}&kakoget=1"; $dat_response_msg = "

    2ch info - ����! �ߋ����O�q�ɂŁA�X���b�h {$matches[3]}.html �𔭌����܂����B [rep2�Ɏ�荞��œǂ�]

    "; + } elseif (preg_match ($error4002_match, $read_response_html, $matches)) { + $dat_response_status = "����! �ߋ����O�q�ɂŁAhtml�����ꂽ�X���b�h�𔭌����܂����B"; + $key4 = substr($this->key, 0, 4); + $key5 = substr($this->key, 0, 5); + $kakolog_uri = "http://{$this->host}/{$this->bbs}/kako/{$key4}/{$key5}/{$this->key}"; + $kakolog_url_en = rawurlencode ($kakolog_uri); + $read_kako_url = "{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&kakolog={$kakolog_url_en}&kakoget=1"; + $dat_response_msg = "

    2ch info - ����! �ߋ����O�q�ɂŁA�X���b�h {$this->key}.html �𔭌����܂����B [rep2�Ɏ�荞��œǂ�]

    "; } elseif (preg_match ($waithtml_match, $read_response_html, $matches)) { $dat_response_status = "����! �X���b�h��html�������̂�҂��Ă���悤�ł��B"; //$marutori_ht = $this->_generateMarutoriLink (); From 17de3f3000c0c4877fbd193e13871e49134488de Mon Sep 17 00:00:00 2001 From: killer4989 Date: Tue, 7 Jun 2016 18:53:18 +0900 Subject: [PATCH 206/339] =?UTF-8?q?SS=20=E9=80=9F=E5=A0=B1=20R=20=E3=81=AE?= =?UTF-8?q?=E7=A7=BB=E8=BB=A2=E6=A4=9C=E7=9F=A5=E3=81=A7=E3=81=8D=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 2da1ec535..d266ca405 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -665,6 +665,8 @@ public function get2chDatError($code = null) { $error3939_match = "{�Q�����˂� error 3939}"; // �ߋ����O�q�ɂ�html���̎��i���ɂ����邩���A�悭�m��Ȃ��j $error4002_match = "{�Q�����˂� error 4002}"; // �ߋ����O�q�ɂ�html���̎��i���ɂ����邩���A�悭�m��Ȃ��j + $vip2ch_ssr_match = "/�����I�V�݂��ꂽSS����R�‚ɂăX���𔭌������ł���I/"; + // // // $kakohtml_match = "{}"; @@ -685,6 +687,7 @@ public function get2chDatError($code = null) { preg_match ($error3939_match, $read_response_html, $matches) || preg_match ($error4002_match, $read_response_html, $matches) || preg_match ($vip2ch_kakosoko_match, $read_response_html, $matches) || + preg_match ($vip2ch_ssr_match, $read_response_html, $matches) || preg_match ($soukoni_match, $read_response_html, $matches)) { if ($reason === 'kakohtml' or preg_match ($kakohtml_match, $read_response_html, $matches)) { @@ -715,6 +718,12 @@ public function get2chDatError($code = null) { $kakolog_url_en = rawurlencode ($kakolog_uri); $read_kako_url = "{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&kakolog={$kakolog_url_en}&kakoget=1"; $dat_response_msg = "

    2ch info - ����! �ߋ����O�q�ɂŁA�X���b�h {$this->key}.html �𔭌����܂����B [rep2�Ɏ�荞��œǂ�]

    "; + } elseif (preg_match ($vip2ch_ssr_match, $read_response_html, $matches)) { + $dat_response_status = "����! �V�݂��ꂽSS����R�‚ɂăX���𔭌������ł���!"; + $movelog_uri = str_replace("news4ssnip", "news4ssr", $read_url); + $movelog_url_en = rawurlencode ($kakolog_uri); + $read_kako_url = "{$_conf['read_php']}?host={$this->host}&bbs=news4ssr&key={$this->key}&ls={$this->ls}"; + $dat_response_msg = "

    2ch info - ����! �V�݂��ꂽSS����R�‚ɂāA�X���b�h �𔭌����܂����B [rep2�Ɏ�荞��œǂ�]

    "; } else { if (! empty ($_GET['kakolog'])) { $dat_response_status = '����Ȕ�or�X���b�h�Ȃ��ł��B'; From e4a4c49f47b72a66412d599ae7b06636da17df31 Mon Sep 17 00:00:00 2001 From: killer4989 Date: Tue, 12 Jul 2016 12:29:42 +0900 Subject: [PATCH 207/339] =?UTF-8?q?=E3=81=BE=E3=81=A1BBS=20=E3=81=AB?= =?UTF-8?q?=E3=81=A6=E3=83=89=E3=83=A1=E3=82=A4=E3=83=B3=E3=81=A7=E3=82=82?= =?UTF-8?q?=E3=82=B9=E3=83=AC=E3=82=92=E8=A6=8B=E3=82=8C=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/P2Util.php b/lib/P2Util.php index 928938c11..0839f154a 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -948,6 +948,10 @@ static function isHostTor($host, $isGatewayMode = 99) */ static public function isHostMachiBbs($host) { + if ($host === "machi.to") { + return true; + } + if (!array_key_exists($host, self::$_hostIsMachiBbs)) { self::$_hostIsMachiBbs[$host] = (bool)preg_match('<^\\w+\\.machi(?:bbs\\.com|\\.to)$>', $host); } @@ -1926,6 +1930,15 @@ static public function detectThread($url = null) $key = $matches[3]; $ls = (isset($matches[4]) && strlen($matches[4])) ? $matches[4] : ''; + // �܂�BBS(�h���C���̂�) - http://machi.to/bbs/read.cgi/kanto/1241815559/ + } elseif (preg_match('<^http?://(machi\\.to)/bbs/read\\.cgi + /(\\w+)/([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) + { + $host = $matches[1]; + $bbs = $matches[2]; + $key = $matches[3]; + $ls = (isset($matches[4]) && strlen($matches[4])) ? $matches[4] : ''; + // �������JBBS - http://jbbs.livedoor.com/bbs/read.cgi/computer/2999/1081177036/-100 } elseif (preg_match('<^http://(jbbs\\.(?:livedoor\\.(?:jp|com)|shitaraba\\.(?:net|com)))/(?:bbs|bbs/lite)/read\\.cgi /(\\w+)/(\\d+)/(\\d+)/((?:\\d+)?-(?:\\d+)?)?[^"]*>x', $nama_url, $matches)) From 7538c5ebfd6db7bfc7982a4a10bd16177933258d Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Tue, 29 Nov 2016 23:22:00 +0900 Subject: [PATCH 208/339] =?UTF-8?q?php5.5.14=E3=81=A7iv2.php=E3=81=8C?= =?UTF-8?q?=E5=8B=95=E3=81=8B=E3=81=AA=E3=81=84=E4=B8=8D=E5=85=B7=E5=90=88?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=20thx!=20http://potato.2ch.net/test/read.cgi?= =?UTF-8?q?/software/1465970697/82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.json | 6 +++++- lib/expack/ImageCache2/QuickForm/Rules.php | 6 +++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/composer.json b/composer.json index 3e731893b..2818ed210 100644 --- a/composer.json +++ b/composer.json @@ -6,6 +6,10 @@ { "type": "pear", "url": "https://pear.php.net" + }, + { + "type": "vcs", + "url": "https://github.com/2ch774/quickform" } ], "require": { @@ -21,7 +25,7 @@ "pear-pear.php.net/file": "1.4.1", "pear-pear.php.net/file_util": "1.0.0", "pear-pear.php.net/html_common": "1.2.5", - "pear-pear.php.net/html_quickform": "3.2.13", + "2ch774/quickform": "dev-master", "pear-pear.php.net/http_request2": "2.2.1", "pear-pear.php.net/net_socket": "1.0.10", "pear-pear.php.net/net_url": "1.0.15", diff --git a/lib/expack/ImageCache2/QuickForm/Rules.php b/lib/expack/ImageCache2/QuickForm/Rules.php index 944a30ea6..651a0b750 100644 --- a/lib/expack/ImageCache2/QuickForm/Rules.php +++ b/lib/expack/ImageCache2/QuickForm/Rules.php @@ -15,7 +15,7 @@ class ImageCache2_QuickForm_Rule_NumberInRange extends HTML_QuickForm_Rule /** * @return bool */ - public function validate($value, $options) + public function validate($value, $options = NULL) { if (isset($options['min']) && floatval($value) < $options['min']) { return false; @@ -60,7 +60,7 @@ class ImageCache2_QuickForm_Rule_InArray extends HTML_QuickForm_Rule /** * @return bool */ - public function validate($value, $options) + public function validate($value, $options = NULL) { return in_array($value, $options); } @@ -81,7 +81,7 @@ class ImageCache2_QuickForm_ArrayKeyExists extends HTML_QuickForm_Rule /** * @return bool */ - public function validate($value, $options) + public function validate($value, $options = NULL) { return array_key_exists($value, $options); } From 4800920c43f8aef1e19c0c0ea2936021da176a22 Mon Sep 17 00:00:00 2001 From: killer4989 Date: Fri, 3 Jun 2016 20:27:38 +0900 Subject: [PATCH 209/339] =?UTF-8?q?API=20=E6=9C=AA=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E3=81=A7=E3=82=82=E8=A6=8B=E3=82=8C=E3=82=8B=E6=9D=BF=E3=81=8C?= =?UTF-8?q?=E3=81=82=E3=81=A3=E3=81=9F=E3=81=AE=E3=81=A7=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/P2Util.php b/lib/P2Util.php index 0839f154a..475d1e2ce 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -891,6 +891,20 @@ static public function isHostBe2chNet($host) */ } + // }}} + // {{{ isNotUse2chAPI() + + /** + * host �� API ��p���Ȃ��Ă��擾�ł���ꍇ�Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isNotUse2chAPI($host) + { + return ($host == 'qb5.2ch.net' || $host == 'carpenter.2ch.net'); + } + // }}} // {{{ isHostBbsPink() From 5e7392366904d155ccae3176272e1d763a5d8a25 Mon Sep 17 00:00:00 2001 From: killer4989 Date: Sat, 4 Jun 2016 14:12:59 +0900 Subject: [PATCH 210/339] =?UTF-8?q?API=20=E6=9C=AA=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E3=81=A7=E3=82=82=E8=A6=8B=E3=82=8C=E3=82=8B=E6=9D=BF=E3=81=8C?= =?UTF-8?q?=E3=81=82=E3=81=A3=E3=81=9F=E3=81=AE=E3=81=A7=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index d266ca405..1a3772deb 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -70,7 +70,7 @@ public function downloadDat() { return $this->_downloadDat2chKako ($_GET['kakolog'], $ext); // 2ch ��API�o�R�ŗ��Ƃ� - } elseif (P2Util::isHost2chs ($this->host) && $_conf['2chapi_use'] && empty ($_GET['olddat'])) { + } elseif (P2Util::isHost2chs ($this->host) && !P2Util::isNotUse2chAPI ($this->host) && $_conf['2chapi_use'] && empty ($_GET['olddat'])) { // ���O�C�����ĂȂ���� or ���O�C����A�ݒ肵�����Ԍo�߂��Ă����玩���ă��O�C�� if (! file_exists ($_conf['sid2chapi_php']) || ! empty ($_REQUEST['relogin2chapi']) || (filemtime ($_conf['sid2chapi_php']) < time () - 60 * 60 * $_conf['2chapi_interval'])) { From 80840d5603fe48e9d003fa7699b96930873c78b9 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 6 Apr 2017 22:13:57 +0900 Subject: [PATCH 211/339] =?UTF-8?q?my=5FFROM=E3=81=AE=E5=80=A4=E3=81=8C?= =?UTF-8?q?=E7=84=A1=E8=A6=96=E3=81=95=E3=82=8C=E3=82=8B=E4=B8=8D=E5=85=B7?= =?UTF-8?q?=E5=90=88=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/post_form_options.inc.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/post_form_options.inc.php b/lib/post_form_options.inc.php index 563c03e11..d56ba9ca8 100644 --- a/lib/post_form_options.inc.php +++ b/lib/post_form_options.inc.php @@ -113,14 +113,6 @@ function setHiddenValue(button) { // }}} // {{{ ���O�ƃ��[���̍ŏI���� -// �󔒂̓��[�U�ݒ�l�ɕϊ� -if ($hd['FROM'] === '') { - $hd['FROM'] = p2h($_conf['my_FROM']); -} -if ($hd['mail'] === '') { - $hd['mail'] = p2h($_conf['my_mail']); -} - // P2NULL�͋󔒂ɕϊ� if ($hd['FROM'] === 'P2NULL') { $hd['FROM'] = ''; @@ -129,6 +121,14 @@ function setHiddenValue(button) { $hd['mail'] = ''; } +// �󔒂̓��[�U�ݒ�l�ɕϊ� +if ($hd['FROM'] === '') { + $hd['FROM'] = p2h($_conf['my_FROM']); +} +if ($hd['mail'] === '') { + $hd['mail'] = p2h($_conf['my_mail']); +} + // }}} // {{{ textarea�̑��� From efc9cc0e467bd0c0c71fb0ad6855b2afceee723d Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 6 Apr 2017 22:15:09 +0900 Subject: [PATCH 212/339] =?UTF-8?q?P2CurlMulti=E3=81=AB=E9=96=A2=E3=81=99?= =?UTF-8?q?=E3=82=8B=E4=B8=8D=E5=85=B7=E5=90=88=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2CurlMulti.php | 8 ++++---- rep2/subject.php | 5 ++++- scripts/fetch-subject-txt.php | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/P2CurlMulti.php b/lib/P2CurlMulti.php index 56c77823d..74751b308 100644 --- a/lib/P2CurlMulti.php +++ b/lib/P2CurlMulti.php @@ -121,7 +121,7 @@ private function execute() { // �b��Ŏc��(not start Download �Ȃ�I���ł�?) // if (!$running || $stat !== CURLM_OK) { // // throw new RuntimeException("$running $stat"); -// error_log("not start download. please check. running:[$running], stat:[$stat]\n", 3, "D:/Apache/Apache2.4/logs/test.log"); +// error_log("not start download. please check. running:[$running], stat:[$stat]\n"); // } // wait @@ -159,11 +159,11 @@ private function getResult() { $file = P2Util::datDirOfHostBbs($host, $bbs) . 'subject.txt'; - if(is_null($this->mh) && is_null($ch_array)){ + if(is_null($this->mh)){ return; } - if(empty($ch)){ + if(empty($ch_array)){ continue; } @@ -182,7 +182,7 @@ private function getResult() { if($tmp['http_code'] != "304" && $tmp['before_time'] <= $tmp['after_time']){ $body = substr($data, $header_size); if (file_put_contents($file, $body) === false) { - error_log("cannot write file.[$file]\n", 3, "D:/Apache/Apache2.4/logs/test.log"); + error_log("cannot write file.[$file]\n"); } } } diff --git a/rep2/subject.php b/rep2/subject.php index bf25791d9..482b70e76 100644 --- a/rep2/subject.php +++ b/rep2/subject.php @@ -272,18 +272,21 @@ switch ($spmode) { case 'fav': P2CurlMulti::fetchSubjectTxt($_conf['favlist_idx']); + $GLOBALS['expack.subject.multi-threaded-download.done'] = true; break; case 'recent': P2CurlMulti::fetchSubjectTxt($_conf['recent_idx']); + $GLOBALS['expack.subject.multi-threaded-download.done'] = true; break; case 'res_hist': P2CurlMulti::fetchSubjectTxt($_conf['res_hist_idx']); + $GLOBALS['expack.subject.multi-threaded-download.done'] = true; break; case 'merge_favita': P2CurlMulti::fetchSubjectTxt($favitas); + $GLOBALS['expack.subject.multi-threaded-download.done'] = true; break; } - $GLOBALS['expack.subject.multi-threaded-download.done'] = true; } elseif ($_conf['expack.use_pecl_http'] == 1) { P2HttpExt::activate(); diff --git a/scripts/fetch-subject-txt.php b/scripts/fetch-subject-txt.php index 527f4786f..f393cee7e 100644 --- a/scripts/fetch-subject-txt.php +++ b/scripts/fetch-subject-txt.php @@ -138,7 +138,7 @@ } if($_conf['expack.use_curl_multi'] == 1) { - P2HttpExt::fetchSubjectTxt($favitas); + P2CurlMulti::fetchSubjectTxt($favitas); } elseif($_conf['expack.use_pecl_http'] == 1) { P2HttpRequestPool::fetchSubjectTxt($favitas); } From 1b25e148e2d7f81af50e1d26e97773e58409db98 Mon Sep 17 00:00:00 2001 From: killer4989 Date: Tue, 27 Dec 2016 01:13:19 +0900 Subject: [PATCH 213/339] =?UTF-8?q?onion.rip=20=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/P2Util.php b/lib/P2Util.php index 475d1e2ce..a4a810070 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -940,11 +940,11 @@ static function isHostTor($host, $isGatewayMode = 99) break; case 1: - $ret = (bool)preg_match('/\\.(onion\\.cab|onion\\.city|onion\\.direct|onion\\.link|onion\\.nu|onion\\.to)$/', $host); + $ret = (bool)preg_match('/\\.(onion\\.cab|onion\\.city|onion\\.direct|onion\\.link|onion\\.nu|onion\\.to|onion\\.rip)$/', $host); break; default: - $ret = (bool)preg_match('/\\.(onion\\.cab|onion\\.city|onion\\.direct|onion\\.link|onion\\.nu|onion\\.to|onion)$/', $host); + $ret = (bool)preg_match('/\\.(onion\\.cab|onion\\.city|onion\\.direct|onion\\.link|onion\\.nu|onion\\.to|onion\\.rip|onion)$/', $host); break; } From d8a286ac631480c9e621acc5592b095116dfcc37 Mon Sep 17 00:00:00 2001 From: killer4989 Date: Tue, 27 Dec 2016 14:01:17 +0900 Subject: [PATCH 214/339] =?UTF-8?q?P2CurlMulti=20=E3=81=A7=E3=81=AE?= =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=A0=E3=82=A2=E3=82=A6=E3=83=88=E8=A8=AD?= =?UTF-8?q?=E5=AE=9A=E5=80=A4=E3=82=92=20http=5Fconn=5Ftimeout=20/=20http?= =?UTF-8?q?=5Fread=5Ftimeout=20=E3=81=AB=E4=BE=9D=E5=AD=98=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2CurlMulti.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/P2CurlMulti.php b/lib/P2CurlMulti.php index 74751b308..56342af9f 100644 --- a/lib/P2CurlMulti.php +++ b/lib/P2CurlMulti.php @@ -3,7 +3,6 @@ class P2CurlMulti { - const TIMEOUT = 300; const MAX_REQUESTS_PER_HOST = 2; private $mh; @@ -126,7 +125,7 @@ private function execute() { // wait do { - switch (curl_multi_select($this->mh, self::TIMEOUT)) { + switch (curl_multi_select($this->mh, $_conf['http_conn_timeout'] + $_conf['http_read_timeout'])) { case -1: // select�Ɏ��s����P�[�X������炵�� https://bugs.php.net/bug.php?id=61141 usleep(10); do{ From 22b04dcff2804f9ac63b85c6bafbc29279cf5a6e Mon Sep 17 00:00:00 2001 From: killer4989 Date: Tue, 27 Dec 2016 14:15:01 +0900 Subject: [PATCH 215/339] =?UTF-8?q?curl=20=E3=81=AB=E3=82=88=E3=82=8B?= =?UTF-8?q?=E4=B8=A6=E5=88=97=E3=83=80=E3=82=A6=E3=83=B3=E3=83=AD=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=81=AE=E6=9C=80=E5=A4=A7=E6=8C=81=E7=B6=9A=E7=9A=84?= =?UTF-8?q?=E6=8E=A5=E7=B6=9A=E6=95=B0=E3=82=92=E5=A4=89=E6=9B=B4=E3=81=A7?= =?UTF-8?q?=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf_admin_ex.inc.php | 3 +++ lib/P2CurlMulti.php | 4 +--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/conf/conf_admin_ex.inc.php b/conf/conf_admin_ex.inc.php index 4bb46be97..e64d780f5 100644 --- a/conf/conf_admin_ex.inc.php +++ b/conf/conf_admin_ex.inc.php @@ -21,6 +21,9 @@ // (off:0, on:1) $_conf['expack.use_curl_multi'] = 0; // (1) +// curl �ɂ�����_�E�����[�h�̍ő厝���I�ڑ��� +$_conf['expack.curl_per_host'] = 2; // (1) + // pecl_http �����p�ł���ꍇ�AHttpRequestPool �ɂ�����_�E�����[�h��L���ɂ��� // (off:0, on:1, �R�}���h���C���Ŏ��s:2) $_conf['expack.use_pecl_http'] = 1; // (1) diff --git a/lib/P2CurlMulti.php b/lib/P2CurlMulti.php index 56342af9f..033225bb9 100644 --- a/lib/P2CurlMulti.php +++ b/lib/P2CurlMulti.php @@ -3,8 +3,6 @@ class P2CurlMulti { - const MAX_REQUESTS_PER_HOST = 2; - private $mh; private $ch; private $file_update; @@ -64,7 +62,7 @@ private function add($subjects, $force = false) { curl_setopt($this->ch[$key], CURLOPT_HTTPHEADER, $header); curl_setopt($this->ch[$key], CURLINFO_HEADER_OUT, true); curl_setopt($this->ch[$key], CURLOPT_HEADER, true); - curl_setopt($this->ch[$key], CURLOPT_MAXCONNECTS, self::MAX_REQUESTS_PER_HOST); + curl_setopt($this->ch[$key], CURLOPT_MAXCONNECTS, $_conf['expack.curl_per_host']); // User-Agent if(P2Util::isHost2chs($host) && !P2Util::isNotUse2chAPI($host) && $_conf['2chapi_use']){ From 82de3ba0af6103f01c2a50997db39ac88984f27c Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 7 Apr 2017 00:32:34 +0900 Subject: [PATCH 216/339] =?UTF-8?q?=E8=82=A5=E5=A4=A7=E5=8C=96=E3=81=97?= =?UTF-8?q?=E3=81=9FP2Util=E3=81=8B=E3=82=89HTTP=E9=96=A2=E4=BF=82?= =?UTF-8?q?=E3=81=AE=E6=A9=9F=E8=83=BD=E3=82=92P2Commun=E3=81=AB=E7=A7=BB?= =?UTF-8?q?=E5=8B=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf_user_style.inc.php | 2 +- lib/BrdCtl.php | 20 +-- lib/DownloadDatMachiBbs.php | 2 +- lib/P2Commun.php | 233 ++++++++++++++++++++++++++++++++ lib/P2CurlMulti.php | 2 +- lib/P2HttpExt.php | 2 +- lib/P2Util.php | 205 +--------------------------- lib/SettingTxt.php | 4 +- lib/SubjectTxt.php | 4 +- lib/ThreadRead.php | 24 ++-- lib/auth2chapi.inc.php | 4 +- lib/expack/rss/parser.inc.php | 7 +- lib/login2ch.inc.php | 6 +- lib/plugins/hissi/Hissi.php | 2 +- lib/plugins/mimizun/Mimizun.php | 2 +- lib/post_form_options.inc.php | 2 +- lib/read_shitaraba.inc.php | 2 +- lib/wiki/P2UtilWiki.php | 38 ------ lib/wiki/ReplaceImageUrlCtl.php | 4 +- lib/wiki/Samba.php | 2 +- rep2/dig2ch.php | 4 +- rep2/ic2.php | 6 +- rep2/post.php | 4 +- rep2/title.php | 13 +- 24 files changed, 283 insertions(+), 311 deletions(-) create mode 100644 lib/P2Commun.php diff --git a/conf/conf_user_style.inc.php b/conf/conf_user_style.inc.php index 53634e6c7..d4b3dde3f 100644 --- a/conf/conf_user_style.inc.php +++ b/conf/conf_user_style.inc.php @@ -15,7 +15,7 @@ $STYLE['fontfamily'] = "�q���M�m�p�S Pro W3"; // ("�q���M�m�p�S Pro W3") ��{�̃t�H���g if (strpos($_SERVER['HTTP_USER_AGENT'], 'Mac') !== false) { - if(!P2Util::isBrowserSafariGroup()){ /* �u���E�U�� Mac�� Safari �ȊO �Ȃ� */ + if(!UA::isSafariGroup()){ /* �u���E�U�� Mac�� Safari �ȊO �Ȃ� */ $STYLE['fontfamily_bold'] = "�q���M�m�p�S Pro W6"; // ("�q���M�m�p�S Pro W6") ��{�{�[���h�p�t�H���g�i���ʂɑ����ɂ������ꍇ�͎w�肵�Ȃ�("")�j } diff --git a/lib/BrdCtl.php b/lib/BrdCtl.php index 75cb87a1c..7195ab866 100644 --- a/lib/BrdCtl.php +++ b/lib/BrdCtl.php @@ -82,24 +82,14 @@ static public function read_brd_online() if ($_conf['brdfile_online']) { $cachefile = P2Util::cacheFileForDL($_conf['brdfile_online']); - $noDL = false; - $read_html_flag = false; - // �L���b�V��������ꍇ - if (file_exists($cachefile.'.p2.brd')) { - // norefresh�Ȃ�DL���Ȃ� - if (!empty($_GET['nr'])) { - $noDL = true; - // �L���b�V���̍X�V���w�莞�Ԉȓ��Ȃ�DL���Ȃ� - } elseif (@filemtime($cachefile.'.p2.brd') > time() - 60 * 60 * $_conf['menu_dl_interval']) { - $noDL = true; - } - } + $read_html_flag = false; - // DL���� - if (!$noDL) { + // DL����A������norefresh�Ȃ�DL���Ȃ� + if (empty($_GET['nr']) || !file_exists($cachefile.'.p2.brd')) { //echo "DL!
    ";// - $brdfile_online_res = P2Util::fileDownload($_conf['brdfile_online'], $cachefile); + $cache_time = time() - 60 * 60 * $_conf['menu_dl_interval']; + $brdfile_online_res = P2Commun::fileDownload($_conf['brdfile_online'], $cachefile, $cache_time); if (isset($brdfile_online_res) && $brdfile_online_res->getStatus() != 304) { $isNewDL = true; } diff --git a/lib/DownloadDatMachiBbs.php b/lib/DownloadDatMachiBbs.php index 2a4263223..9f122054e 100644 --- a/lib/DownloadDatMachiBbs.php +++ b/lib/DownloadDatMachiBbs.php @@ -66,7 +66,7 @@ static public function invoke(ThreadRead $thread) } elseif (file_exists($tempfile)) { unlink($tempfile); } - $response = P2Util::fileDownload($url, $tempfile); + $response = P2Commun::fileDownload($url, $tempfile); if (empty($response)) { $thread->diedat = true; diff --git a/lib/P2Commun.php b/lib/P2Commun.php new file mode 100644 index 000000000..b617763aa --- /dev/null +++ b/lib/P2Commun.php @@ -0,0 +1,233 @@ +setHeader ('User-Agent', self::getP2UA(true,P2Util::isHost2chs($purl['host']))); + $req->setHeader ('Acecpt-Language', 'ja,en-us;q=0.7,en;q=0.3'); + $req->setHeader ('Accept', '*/*'); + $req->setHeader ('Accept-Encoding', 'gzip, deflate'); + + // �^�C���A�E�g�̐ݒ� + $req->setConfig (array ( + 'connect_timeout' => $_conf['http_conn_timeout'], + 'timeout' => $_conf['http_read_timeout'], + )); + + // SSL�̐ݒ� + if($purl['scheme'] == 'https') { + $req->setAdapter($_conf['ssl_function']); + + if($_conf['ssl_capath']) + { + $req->setConfig ('ssl_capath', $_conf['ssl_capath']); + } + } + + // �v���L�V + if ($_conf['tor_use'] && self::isHostTor($purl['host'], 0)) { // Tor(.onion)��Tor�p�̐ݒ���Z�b�g + $req->setConfig (array ( + 'proxy_host' => $_conf['tor_proxy_host'], + 'proxy_port' => $_conf['tor_proxy_port'], + 'proxy_user' => $_conf['tor_proxy_user'], + 'proxy_password' => $_conf['tor_proxy_password'] + )); + if($_conf['tor_proxy_mode'] == 'socks5'){ + $req->setConfig('proxy_type', $_conf['tor_proxy_mode']); + } + } elseif ($_conf['proxy_use']) { + $req->setConfig (array ( + 'proxy_host' => $_conf['proxy_host'], + 'proxy_port' => $_conf['proxy_port'], + 'proxy_user' => $_conf['proxy_user'], + 'proxy_password' => $_conf['proxy_password'] + )); + if($_conf['proxy_mode'] == 'socks5'){ + $req->setConfig('proxy_type', $_conf['proxy_mode']); + } + } + + unset ($purl); + + return $req; + } + + static public function getHTTPResponse($req) { + if($req->getConfig('proxy_type') == 'socks5') { + $socks = new HTTP_Request2_Adapter_Socket(); + $res = $socks->sendRequest($req); + unset($socks); + } else { + $res = $req->send (); + } + return $res; + } + // }}} + // {{{ getP2UA() + /** + * p2����API��UA��Ԃ� + * @param bool $withMonazilla true�Ȃ�Monazilla/1.00��t���� + * @param bool $apiUA true�ŏ�����API�����p�”\�ȂƂ���API��UA��Ԃ� + * @return string + */ + static public function getP2UA($withMonazilla = true,$apiUA = false) + { + global $_conf; + + // API���g�p����ݒ�̏ꍇ��API��UA��Ԃ� + if ($apiUA && $_conf['2chapi_use'] == 1) { + if ($_conf['2chapi_appname'] != "") { + $p2ua = $_conf['2chapi_appname']; + } else { + p2die("2ch�ƒʐM���邽�߂ɕK�v�ȏ�񂪐ݒ肳��Ă��܂���B"); + } + + } else { + $p2ua = $_conf['p2ua']; + } + + if ($withMonazilla) { + $p2ua = sprintf('Monazilla/1.00 (%s)', $p2ua); + } + + return $p2ua; + } + // }}} + // {{{ getWebPage + + /** + * Web�y�[�W���擾���� + * + * 200 OK + * 206 Partial Content + * 304 Not Modified �� ���s���� + * + * @return array|false ����������y�[�W���e��Ԃ��B���s������false��Ԃ��B + */ + static public function getWebPage($url, &$error_msg, $timeout = 15) + { + try { + $req = self::createHTTPRequest($url, HTTP_Request2::METHOD_GET); + //$req->addHeader("X-PHP-Version", phpversion()); + + $response = self::getHTTPResponse($req); + + $code = $response->getStatus(); + if ($code == 200 || $code == 206) { // || $code == 304) { + return $response->getBody(); + } + } catch (Exception $e) { + return false; + } + return false; + } + + // }}} + // {{{ fileDownload() + + /** + * �t�@�C�����_�E�����[�h�ۑ����� + */ + static public function fileDownload($url, $localfile, + $cache_time = 0, + $disp_error = true, + $trace_redirection = false) + { + global $_conf; + + if (file_exists($localfile)) { + // �L���b�V���L�����ԂȂ�_�E�����[�h���Ȃ� + if (filemtime($localfile) > time() - $cache_time) { + return null; + } + } + + try { + // DL + $req = self::createHTTPRequest($url, HTTP_Request2::METHOD_GET); + + $req->setConfig(array('follow_redirects' => $trace_redirection)); + + if (file_exists($localfile)) { + $req->setHeader ('If-Modified-Since', http_date(filemtime($localfile)) ); + } + + $response = self::getHTTPResponse($req); + + $code = $response->getStatus(); + if (!($code == 200 || $code == 206 || $code == 304)) { + $error_msg = $code; + } + $body = $response->getBody(); + + } catch (Exception $e) { + $error_msg = $e->getMessage(); + } + + // �G���[���o����null��Ԃ��ďI��� + if (isset($error_msg) && strlen($error_msg) > 0) { + // �G���[���b�Z�[�W��ݒ� + if ($disp_error) { + $url_t = self::throughIme($url); + $info_msg_ht = "

    Error: {$error_msg}
    "; + $info_msg_ht .= "rep2 info: {$url} �ɐڑ��ł��܂���ł����B

    "; + self::pushInfoHtml($info_msg_ht); + } + return null; + } + + // �X�V����Ă�����ۑ� + if ($code != 304) { + if (FileCtl::file_write_contents($localfile, $body) === false) { + p2die('cannot write file.'); + } + } + + return $response; + } + + // }}} + public static function getResponseCode($url) + { + try { + $req = self::createHTTPRequest ($url, HTTP_Request2::METHOD_HEAD); + $response = self::getHTTPResponse($req); + return $response->getStatus(); + + } catch (Exception $e) { + return false; // $error_msg + } + } +} \ No newline at end of file diff --git a/lib/P2CurlMulti.php b/lib/P2CurlMulti.php index 033225bb9..fb43d802c 100644 --- a/lib/P2CurlMulti.php +++ b/lib/P2CurlMulti.php @@ -68,7 +68,7 @@ private function add($subjects, $force = false) { if(P2Util::isHost2chs($host) && !P2Util::isNotUse2chAPI($host) && $_conf['2chapi_use']){ $user_agent = sprintf ($_conf['2chapi_ua.read'], $_conf['2chapi_appname']); } else { - $user_agent = P2Util::getP2UA(true, P2Util::isHost2chs($purl['host'])); + $user_agent = P2Commun::getP2UA(true, P2Util::isHost2chs($purl['host'])); } curl_setopt($this->ch[$key], CURLOPT_USERAGENT, $user_agent); diff --git a/lib/P2HttpExt.php b/lib/P2HttpExt.php index e101ecc8b..e6d6fcd2c 100644 --- a/lib/P2HttpExt.php +++ b/lib/P2HttpExt.php @@ -247,7 +247,7 @@ public function __construct($url, if (!isset($options['useragent'])) { $purl = parse_url($url); // URL���� - $options['useragent'] = P2Util::getP2UA(true,P2Util::isHost2chs($purl['host'])); + $options['useragent'] = P2Commun::getP2UA(true,P2Util::isHost2chs($purl['host'])); unset($purl); } diff --git a/lib/P2Util.php b/lib/P2Util.php index a4a810070..5013fbc06 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -243,62 +243,6 @@ static public function unsetCookie($key, $path = '', $domain = null) return false; } - // }}} - // {{{ fileDownload() - - /** - * �t�@�C�����_�E�����[�h�ۑ����� - */ - static public function fileDownload($url, $localfile, - $disp_error = true, - $trace_redirection = false) - { - global $_conf; - - try { - // DL - $req = self::getHTTPRequest2($url, HTTP_Request2::METHOD_GET); - - $req->setConfig(array('follow_redirects' => $trace_redirection)); - - if (file_exists($localfile)) { - $req->setHeader ('If-Modified-Since', http_date(filemtime($localfile)) ); - } - - $response = self::getHTTPResponse($req); - - $code = $response->getStatus(); - if (!($code == 200 || $code == 206 || $code == 304)) { - $error_msg = $code; - } - $body = $response->getBody(); - - } catch (Exception $e) { - $error_msg = $e->getMessage(); - } - - // �G���[���o����null��Ԃ��ďI��� - if (isset($error_msg) && strlen($error_msg) > 0) { - // �G���[���b�Z�[�W��ݒ� - if ($disp_error) { - $url_t = self::throughIme($url); - $info_msg_ht = "

    Error: {$error_msg}
    "; - $info_msg_ht .= "rep2 info: {$url} �ɐڑ��ł��܂���ł����B

    "; - self::pushInfoHtml($info_msg_ht); - } - return null; - } - - // �X�V����Ă�����ۑ� - if ($code != 304) { - if (FileCtl::file_write_contents($localfile, $body) === false) { - p2die('cannot write file.'); - } - } - - return $response; - } - // }}} // {{{ checkDirWritable() @@ -1728,36 +1672,6 @@ static public function mkTrip2($key) return str_replace('+', '.', substr(base64_encode(sha1($key, true)), 0, 12)); } - // }}} - // {{{ getWebPage - - /** - * Web�y�[�W���擾���� - * - * 200 OK - * 206 Partial Content - * 304 Not Modified �� ���s���� - * - * @return array|false ����������y�[�W���e��Ԃ��B���s������false��Ԃ��B - */ - static public function getWebPage($url, &$error_msg, $timeout = 15) - { - try { - $req = self::getHTTPRequest2($url, HTTP_Request2::METHOD_GET); - //$req->addHeader("X-PHP-Version", phpversion()); - - $response = self::getHTTPResponse($req); - - $code = $response->getStatus(); - if ($code == 200 || $code == 206) { // || $code == 304) { - return $response->getBody(); - } - } catch (Exception $e) { - return false; - } - return false; - } - // }}} // {{{ getMyUrl() @@ -2163,35 +2077,6 @@ static public function rawurlencodeCallback(array $m) } // }}} - // {{{ getP2UA() - /** - * p2����API��UA��Ԃ� - * @param bool $withMonazilla true�Ȃ�Monazilla/1.00��t���� - * @param bool $apiUA true�ŏ�����API�����p�”\�ȂƂ���API��UA��Ԃ� - * @return string - */ - static public function getP2UA($withMonazilla = true,$apiUA = false) - { - global $_conf; - - // API���g�p����ݒ�̏ꍇ��API��UA��Ԃ� - if ($apiUA && $_conf['2chapi_use'] == 1) { - if ($_conf['2chapi_appname'] != "") { - $p2ua = $_conf['2chapi_appname']; - } else { - p2die("2ch�ƒʐM���邽�߂ɕK�v�ȏ�񂪐ݒ肳��Ă��܂���B"); - } - - } else { - $p2ua = $_conf['p2ua']; - } - - if ($withMonazilla) { - $p2ua = sprintf('Monazilla/1.00 (%s)', $p2ua); - } - - return $p2ua; - } // {{{ isEnableBe2ch() /** * be���g�p�”\�Ȑݒ肩���ׂ� @@ -2258,15 +2143,15 @@ static public function getBe2chCodeByMailPass($mail, $pass) } try { - $req = self::getHTTPRequest2 ('http://be.2ch.net/index.php', HTTP_Request2::METHOD_POST); + $req = P2Commun::createHTTPRequest ('http://be.2ch.net/index.php', HTTP_Request2::METHOD_POST); - $req->setHeader('User-Agent', self::getP2UA(true,true)); + $req->setHeader('User-Agent', P2Commun::getP2UA(true,true)); $req->addPostParameter('mail', $mail); $req->addPostParameter('pass', $pass); $req->addPostParameter('login', '���O�C������'); - $response = self::getHTTPResponse($req); + $response = P2Commun::getHTTPResponse($req); $code = $response->getStatus(); // �����Ƃ݂Ȃ��R�[�h @@ -2293,91 +2178,7 @@ static public function getBe2chCodeByMailPass($mail, $pass) } // }}} - // {{{ getHTTPRequest2() - - /** - * HTTP_Request2�N���X�̃C���X�^���X�𐶐����� - * - * @param string $url �������URL(��΂ɕK�{) - * @param $method HTTP_Request2�Ɠ��� - * @return HTTP_Request2 - */ - static public function getHTTPRequest2($url , $method = HTTP_Request2::METHOD_GET) - { - global $_conf; - - $purl = parse_url ($url); - if(empty($url) || $purl === false) - { - throw new InvalidArgumentException ("URL�̎w�肪�ςł��B"); - } - - $req = new HTTP_Request2($url, $method); - - // �悭�g���w�b�_���w�� - // p2��HTTP�ʐM�͓��Ɏw��̖�������Monazilla�𖼏��悤�ɂ��� - $req->setHeader ('User-Agent', self::getP2UA(true,self::isHost2chs($purl['host']))); - $req->setHeader ('Acecpt-Language', 'ja,en-us;q=0.7,en;q=0.3'); - $req->setHeader ('Accept', '*/*'); - $req->setHeader ('Accept-Encoding', 'gzip, deflate'); - - // �^�C���A�E�g�̐ݒ� - $req->setConfig (array ( - 'connect_timeout' => $_conf['http_conn_timeout'], - 'timeout' => $_conf['http_read_timeout'], - )); - - // SSL�̐ݒ� - if($purl['scheme'] == 'https') { - $req->setAdapter($_conf['ssl_function']); - - if($_conf['ssl_capath']) - { - $req->setConfig ('ssl_capath', $_conf['ssl_capath']); - } - } - - // �v���L�V - if ($_conf['tor_use'] && self::isHostTor($purl['host'], 0)) { // Tor(.onion)��Tor�p�̐ݒ���Z�b�g - $req->setConfig (array ( - 'proxy_host' => $_conf['tor_proxy_host'], - 'proxy_port' => $_conf['tor_proxy_port'], - 'proxy_user' => $_conf['tor_proxy_user'], - 'proxy_password' => $_conf['tor_proxy_password'] - )); - if($_conf['tor_proxy_mode'] == 'socks5'){ - $req->setConfig('proxy_type', $_conf['tor_proxy_mode']); - } - } elseif ($_conf['proxy_use']) { - $req->setConfig (array ( - 'proxy_host' => $_conf['proxy_host'], - 'proxy_port' => $_conf['proxy_port'], - 'proxy_user' => $_conf['proxy_user'], - 'proxy_password' => $_conf['proxy_password'] - )); - if($_conf['proxy_mode'] == 'socks5'){ - $req->setConfig('proxy_type', $_conf['proxy_mode']); - } - } - - unset ($purl); - - return $req; - } - - static public function getHTTPResponse($req) { - if($req->getConfig('proxy_type') == 'socks5') { - $socks = new HTTP_Request2_Adapter_Socket(); - $res = $socks->sendRequest($req); - unset($socks); - } else { - $res = $req->send (); - } - return $res; - } - - // }}} // {{{ debug() /* static public function debug() diff --git a/lib/SettingTxt.php b/lib/SettingTxt.php index 23279f6fa..6fdf41db9 100644 --- a/lib/SettingTxt.php +++ b/lib/SettingTxt.php @@ -101,10 +101,10 @@ public function downloadSettingTxt() // DL try { - $req = P2Util::getHTTPRequest2($this->_url, HTTP_Request2::METHOD_GET); + $req = P2Commun::createHTTPRequest($this->_url, HTTP_Request2::METHOD_GET); $modified && $req->setHeader("If-Modified-Since", $modified); - $response = P2Util::getHTTPResponse($req); + $response = P2Commun::getHTTPResponse($req); $code = $response->getStatus(); if ($code == 302) { diff --git a/lib/SubjectTxt.php b/lib/SubjectTxt.php index 4a9e6b15a..3f507f33a 100644 --- a/lib/SubjectTxt.php +++ b/lib/SubjectTxt.php @@ -96,10 +96,10 @@ public function downloadSubject() // DL try { - $req = P2Util::getHTTPRequest2($this->subject_url, HTTP_Request2::METHOD_GET); + $req = P2Commun::createHTTPRequest($this->subject_url, HTTP_Request2::METHOD_GET); $modified && $req->setHeader("If-Modified-Since", $modified); - $response = P2Util::getHTTPResponse($req); + $response = P2Commun::getHTTPResponse($req); $code = $response->getStatus(); if ($code == 302) { diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 1a3772deb..f4ff55477 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -151,7 +151,7 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { $purl = parse_url ($url); // URL���� try { - $req = P2Util::getHTTPRequest2 ($url, HTTP_Request2::METHOD_POST); + $req = P2Commun::createHTTPRequest ($url, HTTP_Request2::METHOD_POST); // �w�b�_ $req->setHeader ('User-Agent', $ReadUA); @@ -180,7 +180,7 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { )); // POST�f�[�^�̑��M - $response = P2Util::getHTTPResponse($req); + $response = P2Commun::getHTTPResponse($req); // 2ch API �̏�Ԃ��w�b�_�[�ɋL�ڂ���Ă���̂Ŏ擾����B // User-Status: 0 (sessionID����) or 1 (sessionID�L��) or @@ -369,7 +369,7 @@ protected function _downloadDat2ch($from_bytes) { // $request .= "Accept-Encoding: gzip, deflate\r\n"; try { - $req = P2Util::getHTTPRequest2 ($url, HTTP_Request2::METHOD_GET); + $req = P2Commun::createHTTPRequest ($url, HTTP_Request2::METHOD_GET); // �w�b�_ $req->setHeader ('Referer', "http://{$purl['host']}/{$this->bbs}/"); @@ -390,7 +390,7 @@ protected function _downloadDat2ch($from_bytes) { } // Request�̑��M - $response = P2Util::getHTTPResponse($req); + $response = P2Commun::getHTTPResponse($req); $code = $response->getStatus (); @@ -524,10 +524,10 @@ protected function _downloadDat2chKako($uri, $ext) { $purl = parse_url ($url); // URL���� try { - $req = P2Util::getHTTPRequest2 ($url, HTTP_Request2::METHOD_GET); + $req = P2Commun::createHTTPRequest ($url, HTTP_Request2::METHOD_GET); // Request�̑��M - $response = P2Util::getHTTPResponse($req); + $response = P2Commun::getHTTPResponse($req); $code = $response->getStatus (); @@ -619,12 +619,12 @@ public function get2chDatError($code = null) { $read_response_html = ''; if (! $reason) { try { - $req = P2Util::getHTTPRequest2 ($read_url.'1', HTTP_Request2::METHOD_GET); + $req = P2Commun::createHTTPRequest ($read_url.'1', HTTP_Request2::METHOD_GET); // �w�b�_ - $req->setHeader ('User-Agent', P2Util::getP2UA(false,P2Util::isHost2chs($this->host))); // �����́A"Monazilla/" ���‚����NG + $req->setHeader ('User-Agent', P2Commun::getP2UA(false,P2Util::isHost2chs($this->host))); // �����́A"Monazilla/" ���‚����NG // Request�̑��M - $response = P2Util::getHTTPResponse($req); + $response = P2Commun::getHTTPResponse($req); $res_code = $response->getStatus (); @@ -1216,9 +1216,9 @@ private function _get2ch203Body() { */ try { $url = "http://{$this->host}/{$this->bbs}/dat/{$this->key}.dat"; - $req = P2Util::getHTTPRequest2 ($url,HTTP_Request2::METHOD_GET); + $req = P2Commun::createHTTPRequest ($url,HTTP_Request2::METHOD_GET); - $res = P2Util::getHTTPResponse($req); + $res = P2Commun::getHTTPResponse($req); // ���X�|���X�R�[�h������ if ('203' == $res->getStatus ()) { @@ -1304,7 +1304,7 @@ protected function _generateWikiDatLink($read_url) { foreach ($datPlugin->getData () as $v) { if (preg_match ('{' . $v['match'] . '}', $read_url)) { $replace = @preg_replace ('{' . $v['match'] . '}', $v['replace'], $read_url); - $code = P2UtilWiki::getResponseCode ($replace); + $code = P2Commun::getResponseCode ($replace); if ($code == 200) { $code = '��' . $code; } else { diff --git a/lib/auth2chapi.inc.php b/lib/auth2chapi.inc.php index 551258e2d..609efa99b 100644 --- a/lib/auth2chapi.inc.php +++ b/lib/auth2chapi.inc.php @@ -42,7 +42,7 @@ function authenticate_2chapi() } try { - $req = P2Util::getHTTPRequest2($url,HTTP_Request2::METHOD_POST); + $req = P2Commun::createHTTPRequest($url,HTTP_Request2::METHOD_POST); $req->setHeader('User-Agent', $AuthUA); $req->setHeader('X-2ch-UA', $AppName); @@ -54,7 +54,7 @@ function authenticate_2chapi() $req->addPostParameter('HB', $HB); // POST�f�[�^�̑��M - $res = P2Util::getHTTPResponse($req); + $res = P2Commun::getHTTPResponse($req); $code = $res->getStatus(); if ($code =! 200) { diff --git a/lib/expack/rss/parser.inc.php b/lib/expack/rss/parser.inc.php index ab8b88557..af84ab00a 100644 --- a/lib/expack/rss/parser.inc.php +++ b/lib/expack/rss/parser.inc.php @@ -50,11 +50,8 @@ function p2GetRSS($remotefile, $atom = 0) } // If-Modified-Since�‚��Ń_�E�����[�h�i�t�@�C�����������A�Â����A���������[�h�̂Ƃ��j - if (!file_exists($localpath) || $refresh || - filemtime($localpath) < (time() - $_conf['expack.rss.check_interval'] * 60) - ) { - $dl = P2Util::fileDownload($remotefile, $localpath, true, true); - } + $cache_time = ($refresh) ? 0 : $_conf['expack.rss.check_interval'] * 60); + $dl = P2Commun::fileDownload($remotefile, $localpath,$cache_time, true, true); // �L���b�V�����X�V����Ȃ��������A�_�E�����[�h�����Ȃ�RSS���p�[�X if (file_exists($localpath) && (!isset($dl))) { diff --git a/lib/login2ch.inc.php b/lib/login2ch.inc.php index 3ab4083f6..2b3e99c72 100644 --- a/lib/login2ch.inc.php +++ b/lib/login2ch.inc.php @@ -39,11 +39,11 @@ function login2ch() return false; } } else { - $x_2ch_ua = 'X-2ch-UA: ' . P2Util::getP2UA(false,false); + $x_2ch_ua = 'X-2ch-UA: ' . P2Commun::getP2UA(false,false); } try { - $req = P2Util::getHTTPRequest2($auth2ch_url,HTTP_Request2::METHOD_POST); + $req = P2Commun::createHTTPRequest($auth2ch_url,HTTP_Request2::METHOD_POST); // �w�b�_�[ $req->setHeader('User-Agent', $dolib2ch); @@ -54,7 +54,7 @@ function login2ch() $req->addPostParameter('PW', $login2chPW); // POST�f�[�^�̑��M - $res = P2Util::getHTTPResponse($req); + $res = P2Commun::getHTTPResponse($req); $code = $res->getStatus(); if ($code =! 200) { diff --git a/lib/plugins/hissi/Hissi.php b/lib/plugins/hissi/Hissi.php index efb1ac6e8..4f5ec41df 100644 --- a/lib/plugins/hissi/Hissi.php +++ b/lib/plugins/hissi/Hissi.php @@ -65,7 +65,7 @@ public function load() $path = P2Util::cacheFileForDL($this->menuUrl); // ���j���[�̃L���b�V�����Ԃ�10�{�L���b�V�� - P2UtilWiki::cacheDownload($this->menuUrl, $path, $_conf['menu_dl_interval'] * 36000); + P2Commun::fileDownload($this->menuUrl, $path, $_conf['menu_dl_interval'] * 36000); $this->boards = array(); $file = @file_get_contents($path); diff --git a/lib/plugins/mimizun/Mimizun.php b/lib/plugins/mimizun/Mimizun.php index e36b3f223..91702a696 100644 --- a/lib/plugins/mimizun/Mimizun.php +++ b/lib/plugins/mimizun/Mimizun.php @@ -51,7 +51,7 @@ public function load($type) // �L���b�V���p�f�B���N�g����������΍쐬 FileCtl::mkdir_for($path); // ���j���[�̃L���b�V�����Ԃ�10�{�L���b�V�� - P2UtilWiki::cacheDownload($url, $path, $_conf['menu_dl_interval'] * 36000); + P2Commun::fileDownload($url, $path, $_conf['menu_dl_interval'] * 36000); $file = @file_get_contents($path); preg_match_all($match, $file, $boards); return $boards[1]; diff --git a/lib/post_form_options.inc.php b/lib/post_form_options.inc.php index d56ba9ca8..5b82830b6 100644 --- a/lib/post_form_options.inc.php +++ b/lib/post_form_options.inc.php @@ -350,7 +350,7 @@ function setHiddenValue(button) { $upload_multiple = 'multiple'; $upload_name = 'upload[]'; } - $upload_token = sha1(P2Util::getP2UA(false,false) . microtime()); + $upload_token = sha1(P2Commun::getP2UA(false,false) . microtime()); $_SESSION['upload_token'] = $upload_token; $upload_form = << diff --git a/lib/read_shitaraba.inc.php b/lib/read_shitaraba.inc.php index b6e7d4615..69968b9a1 100644 --- a/lib/read_shitaraba.inc.php +++ b/lib/read_shitaraba.inc.php @@ -46,7 +46,7 @@ function shitarabaDownload(ThreadRead $aThread) $tempfile = $aThread->keydat.'.dat.temp'; FileCtl::mkdirFor($tempfile); - $machiurl_res = P2Util::fileDownload($machiurl, $tempfile); + $machiurl_res = P2Commun::fileDownload($machiurl, $tempfile); if (empty($machiurl_res)) { $aThread->diedat = true; diff --git a/lib/wiki/P2UtilWiki.php b/lib/wiki/P2UtilWiki.php index 58f4e42c9..dac94d988 100644 --- a/lib/wiki/P2UtilWiki.php +++ b/lib/wiki/P2UtilWiki.php @@ -20,15 +20,6 @@ public static function calcBeId($prof_id) return 0; } - /** - * Wiki:����URL�ɃA�N�Z�X�ł��邩�m�F���� - */ - public static function isURLAccessible($url, $timeout = 7) - { - $code = self::getResponseCode($url); - return ($code == 200 || $code == 206) ? true : false; - } - /** * URL���C���s�^�Ȃ�true��Ԃ� */ @@ -36,33 +27,4 @@ public static function isUrlImepita($url) { return preg_match('{^http://imepita\.jp/}', $url); } - - public static function getResponseCode($url) - { - try { - $req = P2Util::getHTTPRequest2 ($url, HTTP_Request2::METHOD_HEAD); - $response = P2Util::getHTTPResponse($req); - return $response->getStatus(); - - } catch (Exception $e) { - return false; // $error_msg - } - } - - /** - * Wiki:Last-Modified���`�F�b�N���ăL���b�V������ - * time:�`�F�b�N���Ȃ�����(unixtime) - */ - public static function cacheDownload($url, $path, $time = 0) - { - $filetime = @filemtime($path); - - // �L���b�V���L�����ԂȂ�_�E�����[�h���Ȃ� - if ($filetime !== false && $filetime > time() - $time) { - return; - } - - // �V������Ύ擾 - P2Util::fileDownload($url, $path); - } } diff --git a/lib/wiki/ReplaceImageUrlCtl.php b/lib/wiki/ReplaceImageUrlCtl.php index eeee1d824..01c2321a5 100644 --- a/lib/wiki/ReplaceImageUrlCtl.php +++ b/lib/wiki/ReplaceImageUrlCtl.php @@ -255,7 +255,7 @@ public function extractPage($url, $match, $replace, $referer, $source, $ident=nu } try { - $req = P2Util::getHTTPRequest2 ($get_url, HTTP_Request2::METHOD_GET); + $req = P2Commun::createHTTPRequest ($get_url, HTTP_Request2::METHOD_GET); if ($this->cacheData[$url] && $this->cacheData[$url]['responseHeaders'] && $this->cacheData[$url]['responseHeaders']['last-modified'] && strlen($this->cacheData[$url]['responseHeaders']['last-modified'])) { @@ -267,7 +267,7 @@ public function extractPage($url, $match, $replace, $referer, $source, $ident=nu (!empty($_conf['expack.user_agent'])) ? $_conf['expack.user_agent'] : $_SERVER['HTTP_USER_AGENT']); - $response = P2Util::getHTTPResponse($req); + $response = P2Commun::getHTTPResponse($req); $code = $response->getStatus (); diff --git a/lib/wiki/Samba.php b/lib/wiki/Samba.php index 398c3da6d..f4080167f 100644 --- a/lib/wiki/Samba.php +++ b/lib/wiki/Samba.php @@ -74,7 +74,7 @@ public function getSambaTime($host, $bbs) } // samba���擾 $url = "http://{$host}/{$bbs}/index.html"; - $src = P2Util::getWebPage($url, $errmsg); + $src = P2Commun::getWebPage($url, $errmsg); $match = '{�Q�����˂� BBS\.CGI - .*?\+Samba24=(\d+)}'; preg_match($match, $src, $samba); if(!$this->isLoaded) $this->load(); diff --git a/rep2/dig2ch.php b/rep2/dig2ch.php index 80050010a..4e6b66e5b 100644 --- a/rep2/dig2ch.php +++ b/rep2/dig2ch.php @@ -12,13 +12,13 @@ function dig2chsearch($query) $url = $_conf['test.dig2ch_url'] . '?AndOr=' . $query_arry['AndOr'] . '&maxResult=' . $query_arry['maxResult'] . '&atLeast=1&Sort=' . $query_arry['Sort'] . '&Link=1&Bbs=all&924=' . $query_arry['924'] . '&json=1&keywords=' . $query_arry['q']; try { - $req = P2Util::getHTTPRequest2 ($url, HTTP_Request2::METHOD_GET); + $req = P2Commun::createHTTPRequest ($url, HTTP_Request2::METHOD_GET); // $req->setHeader('User-Agent', $_SERVER['HTTP_USER_AGENT']); �����Monazilla������Ƃ��������ǂ������� $req->setHeader('Accept-Charset', 'utf-8'); $req->setHeader('Cache-Control', 'no-cache'); $req->setHeader('Accept', 'application/json'); - $response = P2Util::getHTTPResponse($req); + $response = P2Commun::getHTTPResponse($req); $code = $response->getStatus(); if ($code != 200) { diff --git a/rep2/ic2.php b/rep2/ic2.php index caf3f0877..81cb93f7e 100644 --- a/rep2/ic2.php +++ b/rep2/ic2.php @@ -305,7 +305,7 @@ public function __destruct() // �L���b�V������Ă��Ȃ���΁A�擾�����݂� try { - $req = P2Util::getHTTPRequest2($uri, HTTP_Request2::METHOD_GET); + $req = P2Commun::createHTTPRequest($uri, HTTP_Request2::METHOD_GET); $req->setConfig(array('follow_redirects' => true)); $req->setHeader('User-Agent', $ic2_ua); if ($mtime > 0) { @@ -358,7 +358,7 @@ public function __destruct() ) { $retryCount = 0; do { - $response = P2Util::getHTTPResponse($req); + $response = P2Commun::getHTTPResponse($req); $code = $response->getStatus(); if ($code != 403) { break; @@ -367,7 +367,7 @@ public function __destruct() sleep($ini['Getter']['retry_interval']); } while ($retryCount < intval($ini['Getter']['retry_max'])); } else { - $response = P2Util::getHTTPResponse($req); + $response = P2Commun::getHTTPResponse($req); $code = $response->getStatus(); } diff --git a/rep2/post.php b/rep2/post.php index 93a92b369..295d92cd1 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -385,7 +385,7 @@ function postIt($host, $bbs, $key, $post) } try { - $req = P2Util::getHTTPRequest2 ($bbs_cgi_url,HTTP_Request2::METHOD_POST); + $req = P2Commun::createHTTPRequest ($bbs_cgi_url,HTTP_Request2::METHOD_POST); // �w�b�_ $req->setHeader('Referer', "http://{$host}/{$bbs}/{$key}/"); @@ -424,7 +424,7 @@ function postIt($host, $bbs, $key, $post) } // POST�f�[�^�̑��M - $response = P2Util::getHTTPResponse($req); + $response = P2Commun::getHTTPResponse($req); // Cookie���擾 $cookies = $response->getCookies(); diff --git a/rep2/title.php b/rep2/title.php index fdff4a7ed..142162d06 100644 --- a/rep2/title.php +++ b/rep2/title.php @@ -210,22 +210,11 @@ function checkUpdatan() { global $_conf, $p2web_url_r, $expack_url_r, $expack_dl_url_r, $expack_hist_url_r; - $no_p2status_dl_flag = false; - $ver_txt_url = $_conf['expack.web_url'] . 'version.txt'; $cachefile = P2Util::cacheFileForDL($ver_txt_url); FileCtl::mkdirFor($cachefile); - if (file_exists($cachefile)) { - // �L���b�V���̍X�V���w�莞�Ԉȓ��Ȃ� - if (filemtime($cachefile) > time() - $_conf['p2status_dl_interval'] * 86400) { - $no_p2status_dl_flag = true; - } - } - - if (empty($no_p2status_dl_flag)) { - P2Util::fileDownload($ver_txt_url, $cachefile); - } + P2Commun::fileDownload($ver_txt_url, $cachefile, $_conf['p2status_dl_interval'] * 86400); $ver_txt = FileCtl::file_read_lines($cachefile, FILE_IGNORE_NEW_LINES); $update_ver = $ver_txt[0]; From 4203b89592ec6b5d9b9794881510d48e66912faa Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 7 Apr 2017 14:26:53 +0900 Subject: [PATCH 217/339] =?UTF-8?q?=E3=83=96=E3=83=A9=E3=82=A6=E3=82=B6?= =?UTF-8?q?=E5=88=A4=E5=AE=9A=E3=82=92lib/UA.php=E3=81=AB=E7=B5=B1?= =?UTF-8?q?=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 55 ----------------------------------- lib/UA.php | 11 +++++++ lib/bootstrap.php | 2 +- lib/post_form_options.inc.php | 2 +- rep2/menu_async.php | 2 +- rep2/read_async.php | 2 +- rep2/skin/blackboard.php | 2 +- rep2/skin/classicWP.php | 2 +- rep2/skin/flat.php | 2 +- rep2/skin/flat2.php | 2 +- rep2/skin/live.php | 2 +- rep2/skin/live2.php | 2 +- rep2/skin/live_box.php | 2 +- rep2/skin/live_box2.php | 2 +- rep2/skin/metal.php | 2 +- rep2/skin/tangerine.php | 2 +- rep2/tgrepctl.php | 2 +- 17 files changed, 26 insertions(+), 70 deletions(-) diff --git a/lib/P2Util.php b/lib/P2Util.php index 5013fbc06..a87c84cf4 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -1224,61 +1224,6 @@ static public function recAccessLog($logfile, $maxline = 100, $format = 'dataphp return true; } - // }}} - // {{{ isBrowserSafariGroup() - - /** - * �u���E�U��Safari�n�Ȃ�true��Ԃ� - */ - static public function isBrowserSafariGroup() - { - return UA::isSafariGroup(); - } - - // }}} - // {{{ isClientOSWindowsCE() - - /** - * �u���E�U��Windows CE�œ��삷����̂Ȃ�true��Ԃ� - */ - static public function isClientOSWindowsCE() - { - return (strpos($_SERVER['HTTP_USER_AGENT'], 'Windows CE') !== false); - } - - // }}} - // {{{ isBrowserNintendoDS() - - /** - * �j���e���h�[DS�u���E�U�[�Ȃ�true��Ԃ� - */ - static public function isBrowserNintendoDS() - { - return UA::isNintendoDS(); - } - - // }}} - // {{{ isBrowserPSP() - - /** - * �u���E�U��PSP�Ȃ�true��Ԃ� - */ - static public function isBrowserPSP() - { - return UA::isPSP(); - } - - // }}} - // {{{ isBrowserIphone() - - /** - * �u���E�U��iPhone, iPod Touch or Android�Ȃ�true��Ԃ� - */ - static public function isBrowserIphone() - { - return UA::isIPhoneGroup(); - } - // }}} // {{{ isUrlWikipediaJa() diff --git a/lib/UA.php b/lib/UA.php index eeda61522..37d9f4723 100644 --- a/lib/UA.php +++ b/lib/UA.php @@ -528,6 +528,17 @@ static public function isIModeBrowser2($ua = null) return false; } + // }}} + // {{{ isClientOSWindowsCE() + + /** + * �u���E�U��Windows CE�œ��삷����̂Ȃ�true��Ԃ� + */ + static public function isClientOSWindowsCE() + { + return (strpos($_SERVER['HTTP_USER_AGENT'], 'Windows CE') !== false); + } + // }}} } diff --git a/lib/bootstrap.php b/lib/bootstrap.php index 24e3b80f4..5f54e3266 100644 --- a/lib/bootstrap.php +++ b/lib/bootstrap.php @@ -173,7 +173,7 @@ $_conf['accept_charset'] = 'UTF-8'; // Windows Mobile - } elseif (P2Util::isClientOSWindowsCE()) { + } elseif (UA::isClientOSWindowsCE()) { $_conf['ktai'] = true; // �g�уQ�[���@ diff --git a/lib/post_form_options.inc.php b/lib/post_form_options.inc.php index 5b82830b6..3ceda6076 100644 --- a/lib/post_form_options.inc.php +++ b/lib/post_form_options.inc.php @@ -219,7 +219,7 @@ function setHiddenValue(button) { } $_dpreview_hide = 'false'; if ($_conf['expack.editor.dpreview'] == 2) { - if (P2Util::isBrowserSafariGroup() && basename($_SERVER['SCRIPT_NAME']) != 'post_form.php') { + if (UA::isSafariGroup() && basename($_SERVER['SCRIPT_NAME']) != 'post_form.php') { $_dpreview_hide = 'true'; } $_dpreview_pos = 'dpreview2'; diff --git a/rep2/menu_async.php b/rep2/menu_async.php index 71fee6806..038ed9197 100644 --- a/rep2/menu_async.php +++ b/rep2/menu_async.php @@ -49,7 +49,7 @@ // }}} // {{{ �{�̏o�� -if (P2Util::isBrowserSafariGroup()) { +if (UA::isSafariGroup()) { $menuItem = P2Util::encodeResponseTextForSafari($menuItem); } echo $menuItem; diff --git a/rep2/read_async.php b/rep2/read_async.php index 7f633a2a2..fb936c373 100644 --- a/rep2/read_async.php +++ b/rep2/read_async.php @@ -133,7 +133,7 @@ // }}} // {{{ �{�̏o�� -if (P2Util::isBrowserSafariGroup()) { +if (UA::isSafariGroup()) { $node = P2Util::encodeResponseTextForSafari($node); } echo $node; diff --git a/rep2/skin/blackboard.php b/rep2/skin/blackboard.php index 3c0d67d38..c42e1b69f 100644 --- a/rep2/skin/blackboard.php +++ b/rep2/skin/blackboard.php @@ -14,7 +14,7 @@ if (strpos($_SERVER['HTTP_USER_AGENT'], 'Mac') !== false) { /* Mac�p�t�H���g�t�@�~���[*/ - if (P2Util::isBrowserSafariGroup()){ /* Safari�n�Ȃ� */ + if (UA::isSafariGroup()){ /* Safari�n�Ȃ� */ $STYLE['fontfamily'] = array("Comic Sans MS", "Hiragino Maru Gothic Pro"); // ("Hiragino Kaku Gothic Pro") ��{�̃t�H���g for Safari $STYLE['fontfamily_bold'] = array("Arial Black", "Hiragino Kaku Gothic Std"); // ("") ��{�{�[���h�p�t�H���g for Safari�i���ʂ̑�����葾���������ꍇ��"Hiragino Kaku Gothic Std"�j } else { diff --git a/rep2/skin/classicWP.php b/rep2/skin/classicWP.php index 80f7df3a0..b8bdbb0c2 100644 --- a/rep2/skin/classicWP.php +++ b/rep2/skin/classicWP.php @@ -14,7 +14,7 @@ if (strpos($_SERVER['HTTP_USER_AGENT'], 'Mac') !== false) { /* Mac�p�t�H���g�t�@�~���[*/ - if (P2Util::isBrowserSafariGroup()){ /* Safari�n�Ȃ� */ + if (UA::isSafariGroup()){ /* Safari�n�Ȃ� */ $STYLE['fontfamily'] = array("Lucida Grande", "Hiragino Kaku Gothic Pro"); // ("Hiragino Kaku Gothic Pro") ��{�̃t�H���g for Safari $STYLE['fontfamily_bold'] = ""; // ("") ��{�{�[���h�p�t�H���g for Safari�i���ʂ̑�����葾���������ꍇ��"Hiragino Kaku Gothic Std"�j } else { diff --git a/rep2/skin/flat.php b/rep2/skin/flat.php index 16b8e3fe1..b65b85663 100644 --- a/rep2/skin/flat.php +++ b/rep2/skin/flat.php @@ -14,7 +14,7 @@ if (strpos($_SERVER['HTTP_USER_AGENT'], 'Mac') !== false) { /* Mac�p�t�H���g�t�@�~���[*/ - if (P2Util::isBrowserSafariGroup()){ /* Safari�n�Ȃ� */ + if (UA::isSafariGroup()){ /* Safari�n�Ȃ� */ $STYLE['fontfamily'] = array("Myriad Pro", "Lucida Grande", "Hiragino Maru Gothic Pro"); $STYLE['fontfamily_bold'] = array("Myriad Pro", "Lucida Grande", "Hiragino Kaku Gothic Pro"); $STYLE['fontweight_bold'] = "bold"; diff --git a/rep2/skin/flat2.php b/rep2/skin/flat2.php index 484abc114..3fc3bbd26 100644 --- a/rep2/skin/flat2.php +++ b/rep2/skin/flat2.php @@ -14,7 +14,7 @@ if (strpos($_SERVER['HTTP_USER_AGENT'], 'Mac') !== false) { /* Mac�p�t�H���g�t�@�~���[*/ - if (P2Util::isBrowserSafariGroup()){ /* Safari�n�Ȃ� */ + if (UA::isSafariGroup()){ /* Safari�n�Ȃ� */ $STYLE['fontfamily'] = array("Myriad Pro", "Lucida Grande", "Hiragino Maru Gothic Pro"); $STYLE['fontfamily_bold'] = array("Myriad Pro", "Lucida Grande", "Hiragino Kaku Gothic Pro"); $STYLE['fontweight_bold'] = "bold"; diff --git a/rep2/skin/live.php b/rep2/skin/live.php index 9ac19e72d..43ccf8da0 100755 --- a/rep2/skin/live.php +++ b/rep2/skin/live.php @@ -12,7 +12,7 @@ if (strpos($_SERVER['HTTP_USER_AGENT'], 'Mac') !== false) { /* Mac�p�t�H���g�t�@�~���[*/ - if (P2Util::isBrowserSafariGroup()){ /* Safari�n�Ȃ� */ + if (UA::isSafariGroup()){ /* Safari�n�Ȃ� */ $STYLE['fontfamily'] = array("Hiragino Maru Gothic ProN", "Arial"); $STYLE['fontfamily_bold'] = array("Hiragino Kaku Gothic StdN", "Arial Black"); // $STYLE['fontweight_bold'] = "bold"; diff --git a/rep2/skin/live2.php b/rep2/skin/live2.php index 658852d90..3592c6aec 100755 --- a/rep2/skin/live2.php +++ b/rep2/skin/live2.php @@ -12,7 +12,7 @@ if (strpos($_SERVER['HTTP_USER_AGENT'], 'Mac') !== false) { /* Mac�p�t�H���g�t�@�~���[*/ - if (P2Util::isBrowserSafariGroup()){ /* Safari�n�Ȃ� */ + if (UA::isSafariGroup()){ /* Safari�n�Ȃ� */ $STYLE['fontfamily'] = array("Hiragino Maru Gothic ProN", "Arial"); $STYLE['fontfamily_bold'] = array("Hiragino Kaku Gothic StdN", "Arial Black"); // $STYLE['fontweight_bold'] = "bold"; diff --git a/rep2/skin/live_box.php b/rep2/skin/live_box.php index 449dc8e18..e02729ac2 100755 --- a/rep2/skin/live_box.php +++ b/rep2/skin/live_box.php @@ -12,7 +12,7 @@ if (strpos($_SERVER['HTTP_USER_AGENT'], 'Mac') !== false) { /* Mac�p�t�H���g�t�@�~���[*/ - if (P2Util::isBrowserSafariGroup()){ /* Safari�n�Ȃ� */ + if (UA::isSafariGroup()){ /* Safari�n�Ȃ� */ $STYLE['fontfamily'] = array("Hiragino Maru Gothic ProN", "Arial"); $STYLE['fontfamily_bold'] = array("Hiragino Kaku Gothic StdN", "Arial Black"); // $STYLE['fontweight_bold'] = "bold"; diff --git a/rep2/skin/live_box2.php b/rep2/skin/live_box2.php index dcaa39d9e..0647587fe 100755 --- a/rep2/skin/live_box2.php +++ b/rep2/skin/live_box2.php @@ -12,7 +12,7 @@ if (strpos($_SERVER['HTTP_USER_AGENT'], 'Mac') !== false) { /* Mac�p�t�H���g�t�@�~���[*/ - if (P2Util::isBrowserSafariGroup()){ /* Safari�n�Ȃ� */ + if (UA::isSafariGroup()){ /* Safari�n�Ȃ� */ $STYLE['fontfamily'] = array("Hiragino Maru Gothic ProN", "Arial"); $STYLE['fontfamily_bold'] = array("Hiragino Kaku Gothic StdN", "Arial Black"); // $STYLE['fontweight_bold'] = "bold"; diff --git a/rep2/skin/metal.php b/rep2/skin/metal.php index d87eb9923..30fcfde9f 100644 --- a/rep2/skin/metal.php +++ b/rep2/skin/metal.php @@ -14,7 +14,7 @@ if (strpos($_SERVER['HTTP_USER_AGENT'], 'Mac') !== false) { /* Mac�p�t�H���g�t�@�~���[*/ - if (P2Util::isBrowserSafariGroup()){ /* Safari�n�Ȃ� */ + if (UA::isSafariGroup()){ /* Safari�n�Ȃ� */ $STYLE['fontfamily'] = array("Helvetica Neue", "Helvetica", "Hiragino Kaku Gothic Pro"); // ("Hiragino Kaku Gothic Pro") ��{�̃t�H���g for Safari $STYLE['fontfamily_bold'] = array("Arial Black", "Hiragino Kaku Gothic Std"); // ("") ��{�{�[���h�p�t�H���g for Safari�i���ʂ̑�����葾���������ꍇ��"Hiragino Kaku Gothic Std"�j } else { diff --git a/rep2/skin/tangerine.php b/rep2/skin/tangerine.php index 34ed154da..2ad032c82 100644 --- a/rep2/skin/tangerine.php +++ b/rep2/skin/tangerine.php @@ -14,7 +14,7 @@ if (strpos($_SERVER['HTTP_USER_AGENT'], 'Mac') !== false) { /* Mac�p�t�H���g�t�@�~���[*/ - if (P2Util::isBrowserSafariGroup()){ /* Safari�n�Ȃ� */ + if (UA::isSafariGroup()){ /* Safari�n�Ȃ� */ $STYLE['fontfamily'] = array("Lucida Grande", "Hiragino Kaku Gothic Pro"); // ("Hiragino Kaku Gothic Pro") ��{�̃t�H���g for Safari $STYLE['fontfamily_bold'] = ""; // ("") ��{�{�[���h�p�t�H���g for Safari�i���ʂ̑�����葾���������ꍇ��"Hiragino Kaku Gothic Std"�j } else { diff --git a/rep2/tgrepctl.php b/rep2/tgrepctl.php index dd81c8e7d..f48d59989 100644 --- a/rep2/tgrepctl.php +++ b/rep2/tgrepctl.php @@ -99,7 +99,7 @@ ob_start(); include $include_file; $buf = ob_get_clean(); - if (P2Util::isBrowserSafariGroup()) { + if (UA::isSafariGroup()) { $buf = P2Util::encodeResponseTextForSafari($buf); } echo $buf; From 30f15fc6bce0330c5ad874b788078df2f6370e47 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 7 Apr 2017 14:55:26 +0900 Subject: [PATCH 218/339] =?UTF-8?q?NetFront=E5=88=A4=E5=AE=9A=E3=82=92UA.p?= =?UTF-8?q?hp=E3=81=AB=E7=B5=B1=E4=B8=80=20=E4=BD=BF=E7=94=A8=E3=81=95?= =?UTF-8?q?=E3=82=8C=E3=81=A6=E3=81=84=E3=81=AA=E3=81=84=E9=96=A2=E6=95=B0?= =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 49 ----------------------------------- lib/post_form_options.inc.php | 13 ++-------- rep2/editfavita.php | 6 ++--- rep2/editrss.php | 6 ++--- 4 files changed, 8 insertions(+), 66 deletions(-) diff --git a/lib/P2Util.php b/lib/P2Util.php index a87c84cf4..59527f305 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -1074,38 +1074,6 @@ static public function transResHistLogPhpToDat() return true; } - // }}} - // {{{ transResHistLogDatToPhp() - - /** - * dat�`���i<>�j�̏������ݗ������f�[�^PHP�`���iTAB�j�ɕϊ����� - */ - static public function transResHistLogDatToPhp() - { - global $_conf; - - // �������ݗ������L�^���Ȃ��ݒ�̏ꍇ�͉������Ȃ� - if ($_conf['res_write_rec'] == 0) { - return true; - } - - // p2_res_hist.dat.php ���Ȃ��āAp2_res_hist.dat ���ǂݍ��݉”\�ł������� - if ((!file_exists($_conf['res_hist_dat_php'])) and is_readable($_conf['res_hist_dat'])) { - // �ǂݍ���� - if ($cont = FileCtl::file_read_contents($_conf['res_hist_dat'])) { - // <>��؂肩��^�u��؂�ɕύX���� - // �܂��^�u��S�ĊO���� - $cont = str_replace("\t", "", $cont); - // <>���^�u�ɕϊ����� - $cont = str_replace("<>", "\t", $cont); - - // �f�[�^PHP�`���ŕۑ� - DataPhp::writeDataPhp($_conf['res_hist_dat_php'], $cont); - } - } - return true; - } - // }}} // {{{ getLastAccessLog() @@ -1733,23 +1701,6 @@ static public function hasInfoHtml() } } - // }}} - // {{{ isNetFront() - - /** - * isNetFront? - * - * @return boolean - */ - static public function isNetFront() - { - if (preg_match('/(NetFront|AVEFront\/|AVE-Front\/)/', $_SERVER['HTTP_USER_AGENT'])) { - return true; - } else { - return false; - } - } - // }}} // {{{ encodeResponseTextForSafari() diff --git a/lib/post_form_options.inc.php b/lib/post_form_options.inc.php index 3ceda6076..d9f0481f3 100644 --- a/lib/post_form_options.inc.php +++ b/lib/post_form_options.inc.php @@ -34,19 +34,10 @@ // -function isNetFront() { - var ua = navigator.userAgent; - if (ua.indexOf("NetFront") != -1 || ua.indexOf("AVEFront/") != -1 || ua.indexOf("AVE-Front/") != -1) { - return true; - } else { - return false; - } -} - function disableSubmit(form) { // 2006/02/15 NetFront�Ƃ͑����������ł܂�炵���̂Ŕ����� - if (isNetFront()) { + if (UA::isNetFront()) { return; } @@ -61,7 +52,7 @@ function disableSubmit(form) { function setHiddenValue(button) { // 2006/02/15 NetFront�Ƃ͑����������ł܂�炵���̂Ŕ����� - if (isNetFront()) { + if (UA::isNetFront()) { return; } diff --git a/rep2/editfavita.php b/rep2/editfavita.php index d1e6d5b0b..a774b566a 100644 --- a/rep2/editfavita.php +++ b/rep2/editfavita.php @@ -223,7 +223,7 @@ function submitApply() echo '
    '; // PC�iNetFront�����O�j -if (!$_conf['ktai'] && $_conf['favita_order_dnd'] && !P2Util::isNetFront()) { +if (!$_conf['ktai'] && $_conf['favita_order_dnd'] && !UA::isNetFront()) { if ($lines) { $script_enable_html .= <<'; } echo '���C�ɔ‚̕��ёւ�'; @@ -306,7 +306,7 @@ function submitApply() echo ""; // PC�iNetFront�����O�j - if (!$_conf['ktai'] && $_conf['favita_order_dnd'] && !P2Util::isNetFront()) { + if (!$_conf['ktai'] && $_conf['favita_order_dnd'] && !UA::isNetFront()) { echo ''; } } diff --git a/rep2/editrss.php b/rep2/editrss.php index 188ff5d63..a74422213 100644 --- a/rep2/editrss.php +++ b/rep2/editrss.php @@ -231,7 +231,7 @@ function submitApply() echo "
    \n"; // PC�iNetFront�����O�j -if (!$_conf['ktai'] && $_conf['favita_order_dnd'] && !P2Util::isNetFront()) { +if (!$_conf['ktai'] && $_conf['favita_order_dnd'] && !UA::isNetFront()) { if ($lines) { $script_enable_html .= <<'; } echo 'RSS�̕��ёւ�'; @@ -326,7 +326,7 @@ function submitApply() } echo "\n"; // PC�iNetFront�����O�j - if (!$_conf['ktai'] && $_conf['favita_order_dnd'] && !P2Util::isNetFront()) { + if (!$_conf['ktai'] && $_conf['favita_order_dnd'] && !UA::isNetFront()) { echo ''; } } From 9815c5ec3170d22b9e3e89df56002814e8acadbd Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Fri, 7 Apr 2017 15:06:07 +0900 Subject: [PATCH 219/339] =?UTF-8?q?P2UtilWiki=E3=82=92P2Util=E3=81=AB?= =?UTF-8?q?=E7=B5=B1=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 -- lib/P2Util.php | 17 +++++++++++++++++ lib/ShowThread.php | 2 +- lib/wiki/P2UtilWiki.php | 30 ------------------------------ rep2/info_sp.php | 2 +- 5 files changed, 19 insertions(+), 34 deletions(-) delete mode 100644 lib/wiki/P2UtilWiki.php diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 2b837a02d..f02119d55 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -177,8 +177,6 @@ function p2_init() include P2_LIB_DIR . '/startup.funcs.php'; spl_autoload_register('p2_load_class'); - include P2_LIB_DIR . '/wiki/P2UtilWiki.php'; - if ($debug) { $profiler = new Benchmark_Profiler(true); // p2_print_memory_usage(); diff --git a/lib/P2Util.php b/lib/P2Util.php index 59527f305..4f52a0122 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -2074,6 +2074,23 @@ static public function getBe2chCodeByMailPass($mail, $pass) } // }}} + /** + * +Wiki:�v���t�B�[��ID����BEID���v�Z���� + * + * @return integer|0 ����������BEID��Ԃ��B���s������0��Ԃ��B + */ + public static function calcBeId($prof_id) + { + for ($y = 2; $y <= 9; $y++) { + for ($x = 2; $x <= 9; $x++) { + $id = (($prof_id - $x*10.0 - $y)/100.0 + $x - $y - 5.0)/(3.0 * $x * $y); + if ($id == floor($id)) { + return $id; + } + } + } + return 0; + } // {{{ debug() /* diff --git a/lib/ShowThread.php b/lib/ShowThread.php index decc97243..79ac36c8b 100644 --- a/lib/ShowThread.php +++ b/lib/ShowThread.php @@ -925,7 +925,7 @@ public function ngAbornCheck($code, $resfield, $ic = false) if ($code == 'aborn_be' || $code == 'ng_be') { // �v���t�B�[��ID�𔲂��o�� if (preg_match('/BE:(\\d+)/', $resfield, $matches)) { - $beId = P2UtilWiki::calcBeId((int)$matches[1]); + $beId = P2Util::calcBeId((int)$matches[1]); if ($beId === 0) { return false; } diff --git a/lib/wiki/P2UtilWiki.php b/lib/wiki/P2UtilWiki.php deleted file mode 100644 index dac94d988..000000000 --- a/lib/wiki/P2UtilWiki.php +++ /dev/null @@ -1,30 +0,0 @@ - Date: Thu, 13 Apr 2017 12:16:27 +0900 Subject: [PATCH 220/339] =?UTF-8?q?Tor=E3=81=8C=E5=8B=95=E3=81=8B=E3=81=AA?= =?UTF-8?q?=E3=81=84=E4=B8=8D=E5=85=B7=E5=90=88=E4=BF=AE=E6=AD=A3=20401?= =?UTF-8?q?=E3=81=A7apiUserStatus=E3=81=8C=E5=8F=96=E3=82=8C=E3=81=AA?= =?UTF-8?q?=E3=81=84=E5=A0=B4=E5=90=88=E3=82=92=E6=83=B3=E5=AE=9A=E3=81=97?= =?UTF-8?q?=E3=81=9F=E5=8B=95=E4=BD=9C=E3=82=92=E8=BF=BD=E5=8A=A0=20?= =?UTF-8?q?=E6=9D=BF=E4=B8=80=E8=A6=A7=E3=81=AE=E6=9B=B4=E6=96=B0=E9=96=93?= =?UTF-8?q?=E9=9A=94=E3=82=9230=E5=88=86=E3=81=8A=E3=81=8D=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/BbsMap.php | 2 +- lib/BrdCtl.php | 2 +- lib/P2Commun.php | 2 +- lib/ThreadRead.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/BbsMap.php b/lib/BbsMap.php index 232a756e7..9fe87d577 100644 --- a/lib/BbsMap.php +++ b/lib/BbsMap.php @@ -313,7 +313,7 @@ static private function _getMapping() // {{{ �ݒ� $map_cache_path = $_conf['cache_dir'] . '/host_bbs_map.txt'; - $map_cache_lifetime = 60 * 30; // 30�������ɍX�V�����邩�m�F���邪BrdCtl���ōŒ�1���Ԃ̓A�N�Z�X���Ȃ��B + $map_cache_lifetime = 60 * 10; // 10�������ɃL���b�V�����č\�z���邪�ABrdCtl���ōŒ�30���̓A�N�Z�X���Ȃ��B // }}} // {{{ �L���b�V���m�F diff --git a/lib/BrdCtl.php b/lib/BrdCtl.php index 7195ab866..f857fa053 100644 --- a/lib/BrdCtl.php +++ b/lib/BrdCtl.php @@ -88,7 +88,7 @@ static public function read_brd_online() // DL����A������norefresh�Ȃ�DL���Ȃ� if (empty($_GET['nr']) || !file_exists($cachefile.'.p2.brd')) { //echo "DL!
    ";// - $cache_time = time() - 60 * 60 * $_conf['menu_dl_interval']; + $cache_time = time() - 60 * 30 * $_conf['menu_dl_interval']; $brdfile_online_res = P2Commun::fileDownload($_conf['brdfile_online'], $cachefile, $cache_time); if (isset($brdfile_online_res) && $brdfile_online_res->getStatus() != 304) { $isNewDL = true; diff --git a/lib/P2Commun.php b/lib/P2Commun.php index b617763aa..9809ce3fb 100644 --- a/lib/P2Commun.php +++ b/lib/P2Commun.php @@ -57,7 +57,7 @@ static public function createHTTPRequest($url , $method = HTTP_Request2::METHOD_ } // �v���L�V - if ($_conf['tor_use'] && self::isHostTor($purl['host'], 0)) { // Tor(.onion)��Tor�p�̐ݒ���Z�b�g + if ($_conf['tor_use'] && P2Util::isHostTor($purl['host'], 0)) { // Tor(.onion)��Tor�p�̐ݒ���Z�b�g $req->setConfig (array ( 'proxy_host' => $_conf['tor_proxy_host'], 'proxy_port' => $_conf['tor_proxy_port'], diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index f4ff55477..11d23f051 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -312,7 +312,7 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { $this->onbytes = 0; $this->modified = null; return $this->_downloadDat2chAPI ($sid, 0); // ���ځ[�񌟏o�B�S����蒼���B - } elseif ($code == '401' && $apiUserStatus == '0') { // 401��API�F�؎��s(�ĔF�؂���) + } elseif ($code == '401' && ($apiUserStatus == '0'||$apiUserStatus == '')) { // 401��API�F�؎��s(�ĔF�؂���) if (empty ($_REQUEST['relogin2chapi'])) { $_REQUEST['relogin2chapi'] = true; return $this->downloadDat (); From 064e5e73c87798d167e885ff66a410377a9abd14 Mon Sep 17 00:00:00 2001 From: killer4989 Date: Sat, 8 Apr 2017 19:28:21 +0900 Subject: [PATCH 221/339] =?UTF-8?q?SID=20=E3=81=AE=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 19 ++++++++++--------- lib/auth2chapi.inc.php | 35 +++++++++++++++-------------------- 2 files changed, 25 insertions(+), 29 deletions(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 11d23f051..999d091df 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -85,7 +85,7 @@ public function downloadDat() { } include $_conf['sid2chapi_php']; - return $this->_downloadDat2chAPI ($SID2chAPI, $this->length); + return $this->_downloadDat2chAPI ($uaMona, $SID2chAPI, $this->length); } else { // 2ch �ȊO�̊O���� @@ -103,7 +103,7 @@ public function downloadDat() { * * @return mix �擾�ł������A�X�V���Ȃ������ꍇ��true��Ԃ� */ - protected function _downloadDat2chAPI($sid, $from_bytes) { + protected function _downloadDat2chAPI($uaMona, $SID2ch, $from_bytes) { global $_conf; global $debug; @@ -121,9 +121,10 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { return true; } - if ($sid == '') { + if ($SID2ch == '') { return false; } + $SID2ch = str_replace ("$uaMona:", '', $SID2ch); $from_bytes = intval ($from_bytes); @@ -145,7 +146,7 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { } $url .= $serverName[0] . '/' . $this->bbs . '/' . $this->key; - $message = '/v1/' . $serverName[0] . '/' . $this->bbs . '/' . $this->key . $sid . $AppKey; + $message = '/v1/' . $serverName[0] . '/' . $this->bbs . '/' . $this->key . $SID2ch . $AppKey; $HB = hash_hmac ("sha256", $message, $HMKey); $purl = parse_url ($url); // URL���� @@ -174,7 +175,7 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { // POST������e $req->addPostParameter (array ( - 'sid' => $sid, + 'sid' => $SID2ch, 'hobo' => $HB, 'appkey' => $AppKey )); @@ -265,7 +266,7 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { // echo "���ځ[�񌟏o"; $this->onbytes = 0; $this->modified = null; - return $this->_downloadDat2chAPI ($sid, 0); // ���ځ[�񌟏o�B�S����蒼���B + return $this->_downloadDat2chAPI ($uaMona, $SID2ch, 0); // ���ځ[�񌟏o�B�S����蒼���B } $body = substr ($body, 1); } @@ -285,7 +286,7 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { $this->modified = null; P2Util::pushInfoHtml ("

    rep2 info: {$this->onbytes}/{$this->length} �t�@�C���T�C�Y���ςȂ̂ŁAdat���Ď擾

    "); // $GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection("dat_size_check"); - return $this->_downloadDat2chAPI ($sid, 0); // dat�T�C�Y�͕s���B�S����蒼���B + return $this->_downloadDat2chAPI ($uaMona, $SID2ch, 0); // dat�T�C�Y�͕s���B�S����蒼���B } } @@ -300,7 +301,7 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { if ($new_host != $this->host) { $this->old_host = $this->host; $this->host = $new_host; - return $this->_downloadDat2chAPI ($sid, $from_bytes); + return $this->_downloadDat2chAPI ($uaMona, $SID2ch, $from_bytes); } else { return $this->_downloadDat2chNotFound ($code); } @@ -311,7 +312,7 @@ protected function _downloadDat2chAPI($sid, $from_bytes) { // echo "���ځ[�񌟏o"; $this->onbytes = 0; $this->modified = null; - return $this->_downloadDat2chAPI ($sid, 0); // ���ځ[�񌟏o�B�S����蒼���B + return $this->_downloadDat2chAPI ($uaMona, $SID2ch, 0); // ���ځ[�񌟏o�B�S����蒼���B } elseif ($code == '401' && ($apiUserStatus == '0'||$apiUserStatus == '')) { // 401��API�F�؎��s(�ĔF�؂���) if (empty ($_REQUEST['relogin2chapi'])) { $_REQUEST['relogin2chapi'] = true; diff --git a/lib/auth2chapi.inc.php b/lib/auth2chapi.inc.php index 609efa99b..ae414b1aa 100644 --- a/lib/auth2chapi.inc.php +++ b/lib/auth2chapi.inc.php @@ -82,30 +82,25 @@ function authenticate_2chapi() return false; } - if (strpos($body, ':') != false) - { - $sid = explode(':', $body); - - if($_conf['2chapi_debug_print']==1) - { - P2Util::pushInfoHtml($body."
    ".$AuthUA); - } - - if($sid[0]!='SESSION-ID=Monazilla/1.00') { - P2Util::pushInfoHtml("

    p2 Error: 2ch API �̃��X�|���X����SessionID���擾�o���܂���ł����B

    "); - return ''; - } + $body = rtrim($body); - $cont = sprintf('p2 Error: {$_conf['sid2chapi_php']} ��ۑ��ł��܂���ł����B���O�C���o�^���s�B

    "); - return ''; - } + // ���� + if (!preg_match('/SESSION-ID=(.+?):(.+)/', $body, $matches)) { + if (file_exists($_conf['sid2chapi_php'])) { unlink($_conf['sid2chapi_php']); } + P2Util::pushInfoHtml("

    p2 error: 2ch API �̃��X�|���X����SessionID���擾�o���܂���ł����B

    "); + return false; + } + $uaMona = $matches[1]; + $SID2chAPI = $matches[1] . ':' . $matches[2]; - return $sid[1]; + // SID �̋L�^�ێ� + $cont = sprintf('p2 Error: {$_conf['sid2chapi_php']} ��ۑ��ł��܂���ł����B���O�C���o�^���s�B

    "); + return false; } - return ''; + return $SID2chAPI; } // }}} From 882b784c764d2a585ce312eb40750d4e348421cb Mon Sep 17 00:00:00 2001 From: killer4989 Date: Thu, 13 Apr 2017 13:45:40 +0900 Subject: [PATCH 222/339] =?UTF-8?q?API=E7=94=A8SID=E3=81=AE=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E6=96=B9=E6=B3=95=E3=82=92=E6=B5=AA=E4=BA=BA=E3=81=A7?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E3=81=97=E3=81=A6=E3=81=84=E3=82=8B=E5=BD=A2?= =?UTF-8?q?=E5=BC=8F=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From bcf33f2e987a0a1e005a681c868e6809e96c85b3 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 13 Apr 2017 14:33:58 +0900 Subject: [PATCH 223/339] =?UTF-8?q?=E9=87=8D=E8=A4=87=E3=81=97=E3=81=A6?= =?UTF-8?q?=E5=AE=9F=E8=A3=85=E3=81=95=E3=82=8C=E3=81=A6=E3=81=84=E3=82=8B?= =?UTF-8?q?=E9=AB=98=E8=A7=A3=E5=83=8F=E5=BA=A6=E5=AF=BE=E5=BF=9C=E3=82=92?= =?UTF-8?q?srcset=E5=B1=9E=E6=80=A7=E3=81=AE=E3=81=BF=E3=81=AB=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=20=E6=B5=AA=E4=BA=BA=E3=82=92=E4=BD=BF=E3=81=A3?= =?UTF-8?q?=E3=81=9F=E6=9B=B8=E3=81=8D=E8=BE=BC=E3=81=BF=E3=81=A7=E3=80=81?= =?UTF-8?q?2ch=E3=81=AEAPI=E3=81=AESID=E3=82=92=E4=BD=BF=E3=81=86=E8=A8=AD?= =?UTF-8?q?=E5=AE=9A=E3=82=92=E8=BF=BD=E5=8A=A0=20API=E3=81=AESID=E3=82=92?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E3=81=97=E3=81=A6=E3=80=81=E6=B5=AA=E4=BA=BA?= =?UTF-8?q?=E3=81=AE=E6=9B=B8=E3=81=8D=E8=BE=BC=E3=81=BF=E7=89=B9=E5=85=B8?= =?UTF-8?q?=E3=81=8C=E5=8F=97=E3=81=91=E3=82=89=E3=82=8C=E3=82=8B=E5=A0=B4?= =?UTF-8?q?=E5=90=88=E3=81=AF=E3=80=81=E6=B5=AA=E4=BA=BA=E3=83=AD=E3=82=B0?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E6=A9=9F=E8=83=BD=E3=81=A8API=E3=81=AE?= =?UTF-8?q?=E8=AA=8D=E8=A8=BC=E6=A9=9F=E8=83=BD=E3=82=92=E7=B5=B1=E5=90=88?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 3 +-- conf/conf_user_def.inc.php | 4 ++++ lib/toolbar_i.inc.php | 28 ---------------------------- rep2/edit_conf_user.php | 1 + rep2/post.php | 9 +++++++-- 5 files changed, 13 insertions(+), 32 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index f02119d55..54a0aa10a 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '160410.0125', // rep2�̃o�[�W���� + 'p2version' => '170413.9001', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; @@ -15,7 +15,6 @@ define('P2_VERSION_ID', sprintf('%u', crc32($_conf['p2ua']))); $_conf['jquery_version'] = '1.8.3'; -$_conf['have_glyphish_2x'] = false; /* * �ʏ�̓Z�b�V�����t�@�C���̃��b�N�҂����ɗ͒Z�����邽�� diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index 73aecf57d..77233cedc 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -427,6 +427,10 @@ $conf_user_def['2chapi_debug_print'] = 0; // (0) $conf_user_rad['2chapi_debug_print'] = array('1' => '����', '0' => '���Ȃ�'); +// 2ch API ���g�p���� +$conf_user_def['2chapi_post'] = 0; // (0) +$conf_user_rad['2chapi_post'] = array('1' => '����', '0' => '���Ȃ�'); + // }}} // {{{ ETC diff --git a/lib/toolbar_i.inc.php b/lib/toolbar_i.inc.php index a1fae5177..b12eceeae 100644 --- a/lib/toolbar_i.inc.php +++ b/lib/toolbar_i.inc.php @@ -5,32 +5,6 @@ // {{{ _toolbar_i_button() -/** - * �c�[���o�[�A�C�R�� - * - * @param string $icon - * @return string - */ -function _toolbar_i_icon($icon) -{ - static $hd = null; - - if ($hd === null) { - $hd = false; - if (isset($_SESSION['device_pixel_ratio'])) { - if ($_SESSION['device_pixel_ratio'] > 1.0) { - $hd = $GLOBALS['_conf']['have_glyphish_2x']; - } - } - } - - if ($hd && preg_match('@img/glyphish/icons2/\\d+-[\\-\\w]+\\.png$@', $icon)) { - $icon = substr($icon, 0, -4) . '@2x.png'; - } - - return $icon; -} - /** * img�^�O�ɉ𑜓x���̑�փp�X���w�肷��srcset�����𐶐� * @@ -76,7 +50,6 @@ function _toolbar_i_button($icon, $label, $uri, $attrs = '') $attrs = str_replace('class="', 'class="hoverable ', $attrs); } - $icon = _toolbar_i_icon($icon); $srcset = _toolbar_i_srcset($icon); return << Date: Tue, 5 Sep 2017 21:39:54 +0900 Subject: [PATCH 224/339] =?UTF-8?q?PHP7.1=E3=81=A7=E3=81=97=E3=81=9F?= =?UTF-8?q?=E3=82=89=E5=A0=B4=E3=81=8C=E8=AA=AD=E3=82=81=E3=81=AA=E3=81=84?= =?UTF-8?q?=E4=B8=8D=E5=85=B7=E5=90=88=E3=82=92=E4=BF=AE=E6=AD=A3=20Thx!?= =?UTF-8?q?=20http://egg.2ch.net/test/read.cgi/software/1465970697/584?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/read_shitaraba.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/read_shitaraba.inc.php b/lib/read_shitaraba.inc.php index 69968b9a1..131856c04 100644 --- a/lib/read_shitaraba.inc.php +++ b/lib/read_shitaraba.inc.php @@ -117,7 +117,7 @@ function shitarabaDatTo2chDatLines($mlines) $retval = false; return $retval; } - $mdatlines = ""; + $mdatlines = array(); foreach ($mlines as $ml) { $ml = rtrim($ml); From 2dc761053f9220d519799a98ddf84d6f953e96d1 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Wed, 20 Sep 2017 21:03:23 +0900 Subject: [PATCH 225/339] fix spell miss --- lib/P2Commun.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/P2Commun.php b/lib/P2Commun.php index 9809ce3fb..162536c13 100644 --- a/lib/P2Commun.php +++ b/lib/P2Commun.php @@ -1,6 +1,6 @@ 0) { // �G���[���b�Z�[�W��ݒ� if ($disp_error) { - $url_t = self::throughIme($url); + $url_t = P2Util::throughIme($url); $info_msg_ht = "

    Error: {$error_msg}
    "; $info_msg_ht .= "rep2 info: {$url} �ɐڑ��ł��܂���ł����B

    "; self::pushInfoHtml($info_msg_ht); From a0a33635cc58e99f0223122b48b78d7ea2de635d Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Wed, 20 Sep 2017 21:34:09 +0900 Subject: [PATCH 226/339] =?UTF-8?q?=E7=B5=B5=E6=96=87=E5=AD=97=E3=81=AB?= =?UTF-8?q?=E6=9A=AB=E5=AE=9A=E5=AF=BE=E5=BF=9C=E3=80=82=E6=9B=B8=E3=81=91?= =?UTF-8?q?=E3=81=AA=E3=81=84=E6=9D=BF=E3=82=84=E7=92=B0=E5=A2=83=E3=81=8C?= =?UTF-8?q?=E3=81=82=E3=82=8B=E3=81=AE=E3=81=AF=E4=BB=95=E6=A7=98=E8=A9=B3?= =?UTF-8?q?=E3=81=97=E3=81=8F=E3=81=AFissue=E5=8F=82=E7=85=A7=20resolve=20?= =?UTF-8?q?#14?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 54a0aa10a..48cdc2500 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '170413.9001', // rep2�̃o�[�W���� + 'p2version' => '170920.9001', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; @@ -187,8 +187,10 @@ function p2_init() mb_internal_encoding('SJIS-win'); mb_http_output('pass'); - mb_substitute_character(63); // �����R�[�h�ϊ��Ɏ��s���������� "?" �ɂȂ� + //mb_substitute_character(63); // �����R�[�h�ϊ��Ɏ��s���������� "?" �ɂȂ� //mb_substitute_character(0x3013); // �� + + mb_substitute_character('entity'); //�����R�[�h�ϊ��Ɏ��s�������������l�Q�Ƃɒu������� //ob_start('mb_output_handler'); if (function_exists('mb_ereg_replace')) { From 56240da29e51559e22b0c1093d8b3ccfc3dccbae Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 21 Sep 2017 11:18:04 +0900 Subject: [PATCH 227/339] =?UTF-8?q?2ch=E7=B3=BB=E3=81=A0=E3=81=91=20html?= =?UTF-8?q?=5Fentity=5Fdecode=E3=81=A7=E5=A4=89=E6=8F=9B=E3=81=97=E3=81=9F?= =?UTF-8?q?UTF-8=E3=81=AE=E6=96=87=E5=AD=97=E5=88=97=E3=82=92POST=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4=20?= =?UTF-8?q?=E5=85=83=E3=81=8B=E3=82=89Unicode=E3=82=92=E6=8A=95=E7=A8=BF?= =?UTF-8?q?=E5=87=BA=E6=9D=A5=E3=82=8B=E6=9D=BF=E3=81=AE=E5=8B=95=E4=BD=9C?= =?UTF-8?q?=E3=81=AF=E6=9C=AA=E7=A2=BA=E8=AA=8D=E3=80=82Pink=E3=81=AF?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C=E3=81=97=E3=81=A6=E3=82=8B=E3=81=8B=E4=B8=8D?= =?UTF-8?q?=E6=98=8E=E3=81=AA=E3=81=AE=E3=81=A7=E9=99=A4=E5=A4=96=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/post.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/rep2/post.php b/rep2/post.php index b00584a83..e4a537bfa 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -167,7 +167,7 @@ include $_conf['sid2chapi_php']; $post['sid'] = $SID2chAPI; } else { - include $_conf['sid2ch_php']; + include $_conf['sid2ch_php']; $post['sid'] = $SID2ch; } } @@ -424,6 +424,9 @@ function postIt($host, $bbs, $key, $post) // ������� or be.2ch.net�Ȃ�AEUC�ɕϊ� if (P2Util::isHostJbbsShitaraba($host) || P2Util::isHostBe2chNet($host)) { $value = mb_convert_encoding($value, 'CP51932', 'CP932'); + } elseif (P2Util::isHost2chs($host) && ! P2Util::isHostBbsPink($host)) { + // 2ch��Unicode�̕������post���� + $value = html_entity_decode(mb_convert_encoding($value, 'UTF-8', 'CP932'),ENT_QUOTES,'UTF-8'); } $req->addPostParameter($name, $value); } From e1cc7a72a3bc0280c973e497e3e83f5cbf4a9bd3 Mon Sep 17 00:00:00 2001 From: killer4989 Date: Wed, 7 Jun 2017 22:58:00 +0900 Subject: [PATCH 228/339] =?UTF-8?q?vip2ch.com=E8=AA=AD=E3=81=BF=E8=BE=BC?= =?UTF-8?q?=E3=81=BF=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/P2Util.php b/lib/P2Util.php index 4f52a0122..c9b1cd6da 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -1786,7 +1786,7 @@ static public function detectThread($url = null) list($bbs, $key, $ls) = self::parseMachiQuery($matches[4]); // vip2ch.com - http://ex14.vip2ch.com/test/read.cgi/news4ssnip/1450958506/ - } elseif (preg_match('<^https?://((\\w+)\\.vip2ch\\.com)/test/(?:read\\.(?:cgi|html|so)|mread\\.cgi)/(\\w+)/([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) + } elseif (preg_match('<^https?://((\\w+)\\.vip2ch\\.com)/(?:test|i)/(?:read\\.(?:cgi|html|so)|mread\\.cgi|read)/(\\w+)/([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) { $host = $matches[1]; $bbs = $matches[3]; @@ -1794,7 +1794,7 @@ static public function detectThread($url = null) $ls = (isset($matches[5]) && strlen($matches[5])) ? $matches[5] : ''; // vip2ch.com - http://ex14.vip2ch.com/i/responce.html?bbs=news4ssnip&dat=1450958506 - } elseif (preg_match('<^https?://((\\w+)\\.vip2ch\\.com)/i/responce\\.html\\?bbs=(\\w+)&dat=([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) + } elseif (preg_match('<^https?://((\\w+)\\.vip2ch\\.com)/i/(?:responce|responce_r18)\\.html\\?bbs=(\\w+)&dat=([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) { $host = $matches[1]; $bbs = $matches[3]; From 9f9899a05c52f37591f9d2ae1373cb053562a6b3 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 21 Sep 2017 15:43:52 +0900 Subject: [PATCH 229/339] =?UTF-8?q?=E3=82=B9=E3=83=9E=E3=83=9B=E7=94=A8?= =?UTF-8?q?=E6=9B=B8=E3=81=8D=E8=BE=BC=E3=81=BF=E6=AC=84=E3=81=AE=E3=83=87?= =?UTF-8?q?=E3=82=B6=E3=82=A4=E3=83=B3=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/post_form.inc.php | 11 ++++++----- rep2/css/iphone.css | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/lib/post_form.inc.php b/lib/post_form.inc.php index 22351c8d2..3dd3054d5 100644 --- a/lib/post_form.inc.php +++ b/lib/post_form.inc.php @@ -27,6 +27,7 @@ $htm['table_break2'] = ''; $htm['table_end'] = '
    '; if ($_conf['iphone']) { + $htm['k_br'] = ''; $htm['options'] .= << @@ -34,11 +35,11 @@ EOP; - $htm['name_label'] = '���O�F'; - $htm['mail_label'] = 'E-mail�F'; - $htm['name_extra_at'] = ' autocorrect="off" autocapitalize="off"'; - $htm['mail_extra_at'] = ' autocorrect="off" autocapitalize="off"'; - $htm['msg_extra_at'] = ' autocorrect="off" autocapitalize="off"'; + $htm['name_label'] = ''; + $htm['mail_label'] = ''; + $htm['name_extra_at'] = ' class="formelem maxwidth" placeholder="���O(�ȗ���)" autocorrect="off" autocapitalize="off"'; + $htm['mail_extra_at'] = ' class="formelem maxwidth" placeholder="���[��(�ȗ���)" autocorrect="off" autocapitalize="off"'; + $htm['msg_extra_at'] = ' class="formelem maxwidth" placeholder="�{��" autocorrect="off" autocapitalize="off"'; $htm['submit_extra_at'] = ''; if ($_conf['expack.editor.mobile.savedraft'] != '0' && $_conf['expack.editor.mobile.savedraft.interval'] > 0) { $htm['kaiko_on_js'] = ' onfocus="DraftKakiko.startAutoSave(this.form, ' . ($_conf['expack.editor.mobile.savedraft.interval'] * 1000) . ')"'; diff --git a/rep2/css/iphone.css b/rep2/css/iphone.css index 9eb858acc..06fbb6d77 100644 --- a/rep2/css/iphone.css +++ b/rep2/css/iphone.css @@ -140,6 +140,24 @@ input[type="checkbox"]:checked { border-color: #555555; } +input[type="submit"] { + -moz-user-select: none; + background-color: #808080; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; + color: #fff; + cursor: pointer; + display: inline-block; + font-size: 15px; + font-weight: normal; + padding: 10px; + text-align: center; + touch-action: manipulation; + vertical-align: middle; + white-space: nowrap; +} + textarea { padding-left: 5px; padding-right: 5px; @@ -1050,6 +1068,24 @@ div.mtoolbar > .ttitle > span.btitle { } } + +.maxwidth { + width: 98%; +} + +.formelem { + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset; + color: #000; + display: block; + margin-bottom: 15px; + padding: 6px 12px; + transition: border-color 0.15s ease-in-out 0s, box-shadow 0.15s ease-in-out 0s; +} + /* }}} */ /* From a08256120f7a82e0108e617ba2649271251b15a8 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 21 Sep 2017 17:56:51 +0900 Subject: [PATCH 230/339] v170921.1800 --- README.md | 4 ++++ doc/README-774.txt | 15 +++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/README.md b/README.md index 75029eea2..a97b42b11 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,10 @@ 独自の改良も行っています。 +### 動作環境 +Linux(openSUSE Leap)のPHP7+Apacheで動作確認しています。 +PHP5.6以降で動くはずですが、PHP7.*推奨です。 +PHP7での不具合修正を優先するため突然PHP5.xのサポートが終わる可能性があります。 ### 追加機能 diff --git a/doc/README-774.txt b/doc/README-774.txt index 7c0969fbb..7912995da 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -8,6 +8,10 @@ rep2-expack test https://github.com/orzisun/p2-php ��L��X���ɏグ��ꂽ�C������荞��őS�������ڎw���œ�o�[�W�����ł��B �Ǝ��̉��ǂ��s���Ă��܂��B +������‹� +Linux(openSUSE Leap)��PHP7+Apache�œ���m�F���Ă��܂��B +PHP5.6�ȍ~�œ����͂��ł����APHP7.*�����ł��B +PHP7�ł̕s��C����D�悷�邽�ߓˑRPHP5.x�̃T�|�[�g���I���”\��������܂��B ����ȋ@�\ ### �ݒ�̒lj� @@ -64,6 +68,17 @@ rep2-expack test https://github.com/orzisun/p2-php ��ChangeLog +170921.1800 +* vip2ch.com�ǂݍ��ݑΉ� +* 2ch��Unicode�G�������e�ɑΉ� +* PHP7.1�ł�����ꂪ�ǂ߂Ȃ��s����C�� +* Tor�������Ȃ��s��C�� +* 2ch��API ���g�p�ł������‚ɑΉ� +* �܂�BBS �ɂăh���C���ł��X���������悤�ɂ��� +* SS ���� R �̈ړ]���m�ł���悤�ɂ��� +* (�l���@�\)curl ��p��������_�E�����[�h�@�\��lj� +* �X�}�z�p�������ݗ��̃f�U�C����ύX + 160410.0125 * NG�X���b�h�@�\���{�̂�+Wiki�ŏd�����Ď�������Ă���̂ō폜 * 160409.1000 �ɐV���Z�ߓǂ݂Ǝ����������삵�Ȃ��s�������̂ŏC�� From 2d184a90913518695133f93ee635edb29e2d4480 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 21 Sep 2017 18:09:30 +0900 Subject: [PATCH 231/339] =?UTF-8?q?=E5=8B=95=E4=BD=9C=E3=83=81=E3=82=A7?= =?UTF-8?q?=E3=83=83=E3=82=AF=E3=81=AE=E6=9C=80=E4=BD=8E=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E3=82=92=E6=9B=B4=E6=96=B0=20CentOS=E6=B0=91=E3=81=AF=E8=87=AA?= =?UTF-8?q?=E5=8A=9B=E3=81=A7=E4=BD=95=E3=81=A8=E3=81=8B=E3=81=97=E3=81=A6?= =?UTF-8?q?=E3=81=8F=E3=82=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 ++++----- conf/setup_info.php | 4 ++-- lib/expack/Console/Command/Check.php | 6 +++--- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index a97b42b11..b3a87aa11 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,6 @@ 独自の改良も行っています。 -### 動作環境 -Linux(openSUSE Leap)のPHP7+Apacheで動作確認しています。 -PHP5.6以降で動くはずですが、PHP7.*推奨です。 -PHP7での不具合修正を優先するため突然PHP5.xのサポートが終わる可能性があります。 - ### 追加機能 各機能の説明はdocディレクトリのREADMEファイルを見てください。 @@ -36,6 +31,10 @@ PHP7での不具合修正を優先するため突然PHP5.xのサポートが終 ## 動作環境 +Linux(openSUSE Leap)のPHP7+Apacheで動作確認しています。 +PHP5.6以降で動くはずですが、PHP7.*推奨です。 +PHP7での不具合修正を優先するため突然PHP5.xのサポートが終わる可能性があります。 + 以下のコマンドを実行して、全ての項目で `OK` が出たなら大丈夫です。 何かエラーが出たらがんばって環境を整えてください。 diff --git a/conf/setup_info.php b/conf/setup_info.php index 96d379355..948f56550 100644 --- a/conf/setup_info.php +++ b/conf/setup_info.php @@ -4,8 +4,8 @@ */ // �K�{�o�[�W���� -$p2_required_version_5_3 = '5.3.2'; -$p2_required_version_5_4 = '5.4.0'; +$p2_required_version_5_x = '5.6.0'; +$p2_required_version_7_x = '7.0.0'; // �K�{�g�����W���[�� $p2_required_extensions = array( diff --git a/lib/expack/Console/Command/Check.php b/lib/expack/Console/Command/Check.php index c14cd2ab4..bad8061c2 100644 --- a/lib/expack/Console/Command/Check.php +++ b/lib/expack/Console/Command/Check.php @@ -30,10 +30,10 @@ protected function execute(InputInterface $input, OutputInterface $output) $php_version = phpversion(); - if (version_compare($php_version, '5.4.0-dev', '>=')) { - $required_version = $p2_required_version_5_4; + if (version_compare($php_version, '7.0.0-dev', '>=')) { + $required_version = $p2_required_version_7_x; } else { - $required_version = $p2_required_version_5_3; + $required_version = $p2_required_version_5_x; } // PHP�̃o�[�W���� From 53be72409fce050907acd320aca8a238e33dcee1 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 21 Sep 2017 23:57:10 +0900 Subject: [PATCH 232/339] =?UTF-8?q?=E3=82=B9=E3=83=9E=E3=83=9B=E7=94=A8?= =?UTF-8?q?=E6=9B=B8=E3=81=8D=E8=BE=BC=E3=81=BF=E6=AC=84=E3=81=AE=E3=83=86?= =?UTF-8?q?=E3=82=AD=E3=82=B9=E3=83=88=E3=82=A8=E3=83=AA=E3=82=A2=E3=82=92?= =?UTF-8?q?=E8=87=AA=E5=8B=95=E7=9A=84=E3=81=AB=E3=82=B5=E3=82=A4=E3=82=BA?= =?UTF-8?q?=E8=AA=BF=E6=95=B4=EF=BC=88PC=E3=81=A8=E5=90=8C=E3=81=98?= =?UTF-8?q?=E5=8B=95=E4=BD=9C=EF=BC=89=E3=81=99=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/post_form.inc.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/post_form.inc.php b/lib/post_form.inc.php index 3dd3054d5..b6e3e8d6e 100644 --- a/lib/post_form.inc.php +++ b/lib/post_form.inc.php @@ -28,22 +28,22 @@ $htm['table_end'] = '
    '; if ($_conf['iphone']) { $htm['k_br'] = ''; - $htm['options'] .= << - - - - -EOP; $htm['name_label'] = ''; $htm['mail_label'] = ''; $htm['name_extra_at'] = ' class="formelem maxwidth" placeholder="���O(�ȗ���)" autocorrect="off" autocapitalize="off"'; $htm['mail_extra_at'] = ' class="formelem maxwidth" placeholder="���[��(�ȗ���)" autocorrect="off" autocapitalize="off"'; $htm['msg_extra_at'] = ' class="formelem maxwidth" placeholder="�{��" autocorrect="off" autocapitalize="off"'; + + $htm['kaiko_on_js_fmt'] = ' onfocus="%1$s" onkeyup="if(%2$s){%1$s}"'; + $htm['kaiko_on_js_func'] = sprintf("adjustTextareaRows(this,%d,2); ", $STYLE['post_msg_rows']); + $htm['submit_extra_at'] = ''; if ($_conf['expack.editor.mobile.savedraft'] != '0' && $_conf['expack.editor.mobile.savedraft.interval'] > 0) { - $htm['kaiko_on_js'] = ' onfocus="DraftKakiko.startAutoSave(this.form, ' . ($_conf['expack.editor.mobile.savedraft.interval'] * 1000) . ')"'; + $htm['kaiko_on_js_func'] = 'DraftKakiko.startAutoSave(this.form, ' . ($_conf['expack.editor.mobile.savedraft.interval'] * 1000) . '); '.$htm['kaiko_on_js_func']; } + + $htm['kaiko_on_js_cond'] = '!event||((event.keyCode&&(event.keyCode==8||event.keyCode==13))||event.ctrlKey||event.metaKey||event.altKey)'; + $htm['kaiko_on_js'] = sprintf($htm['kaiko_on_js_fmt'], $htm['kaiko_on_js_func'], p2h($htm['kaiko_on_js_cond'])); } else { $htm['name_label'] = '���O�F'; $htm['mail_label'] = 'E-mail�F'; From d8e094971d32e6ea7c4210d225ea42d6a5722231 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sun, 24 Sep 2017 10:14:51 +0900 Subject: [PATCH 233/339] =?UTF-8?q?=E3=82=B9=E3=83=9E=E3=83=9B=E5=90=91?= =?UTF-8?q?=E3=81=91=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=ABbootstrap=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=20=E8=AA=A4=E6=93=8D=E4=BD=9C=E9=98=B2?= =?UTF-8?q?=E6=AD=A2=E3=81=AE=E3=81=9F=E3=82=81=E3=81=AB=E3=83=84=E3=83=BC?= =?UTF-8?q?=E3=83=AB=E3=83=90=E3=83=BC=E3=81=AE=E3=83=AD=E3=82=B0=E5=89=8A?= =?UTF-8?q?=E9=99=A4=E3=83=9C=E3=82=BF=E3=83=B3=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 4 +- conf/conf_ic2.inc.php | 2 +- lib/ResFilterElement.php | 2 +- lib/ShowThreadI.php | 180 +++--- lib/bootstrap.php | 6 + lib/post_form.inc.php | 10 +- lib/read_header_i.inc.php | 44 +- lib/read_jump_k.inc.php | 4 +- lib/sb_footer_i.inc.php | 4 +- lib/sb_header_i.inc.php | 28 +- rep2/css/bootstrap.min.css | 6 + rep2/css/iphone.css | 1088 +++++++++++++++++------------------ rep2/js/bootstrap.min.js | 7 + rep2/js/jquery-3.2.1.min.js | 4 + rep2/js/spm_iphone.js | 32 +- rep2/post_form.php | 2 +- rep2/read_filter_k.php | 1 + rep2/read_new_k.php | 1 - 18 files changed, 707 insertions(+), 718 deletions(-) create mode 100644 rep2/css/bootstrap.min.css create mode 100644 rep2/js/bootstrap.min.js create mode 100644 rep2/js/jquery-3.2.1.min.js diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 48cdc2500..998f34da1 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,14 +7,14 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '170920.9001', // rep2�̃o�[�W���� + 'p2version' => '170921.1800', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; define('P2_VERSION_ID', sprintf('%u', crc32($_conf['p2ua']))); -$_conf['jquery_version'] = '1.8.3'; +$_conf['jquery_version'] = '3.2.1'; /* * �ʏ�̓Z�b�V�����t�@�C���̃��b�N�҂����ɗ͒Z�����邽�� diff --git a/conf/conf_ic2.inc.php b/conf/conf_ic2.inc.php index fdd89f165..bebec256a 100644 --- a/conf/conf_ic2.inc.php +++ b/conf/conf_ic2.inc.php @@ -12,7 +12,7 @@ // DSN (DB�ɐڑ����邽�߂̃f�[�^�\�[�X��) // @link http://jp.pear.php.net/manual/ja/package.database.db.intro-dsn.php // ��) -// MySQL: 'mysql://username:password@localhost:3306/database' +// MySQL: 'mysqli://username:password@localhost:3306/database' // PostgreSQL: 'pgsql://username:password@localhost:5432/database' // SQLite2: 'sqlite:///' . $_conf['db_dir'] . '/imgcache.sqlite' // ��1: username,password,database�͎��ۂ̂��̂Ɠǂݑւ���B diff --git a/lib/ResFilterElement.php b/lib/ResFilterElement.php index c5a505ddd..2e55dd43d 100644 --- a/lib/ResFilterElement.php +++ b/lib/ResFilterElement.php @@ -161,7 +161,7 @@ static private function _getSelectField(array $fields, $default, $key, $name = p2h($name); $id = p2h($id); - $html = ""; foreach ($fields as $value => $label) { if ($value == $default) { if ($xhtml) { diff --git a/lib/ShowThreadI.php b/lib/ShowThreadI.php index 2e3976293..8db0cc160 100644 --- a/lib/ShowThreadI.php +++ b/lib/ShowThreadI.php @@ -122,7 +122,7 @@ public function __construct(ThreadRead $aThread, $matome = false) //if ($this->_matome) { // $this->spmObjName = sprintf('t%dspm%u', $this->_matome, crc32($this->thread->keydat)); //} else { - $this->spmObjName = sprintf('spm%u', crc32($this->thread->keydat)); + $this->spmObjName = sprintf('spm%u', crc32($this->thread->keydat)); //} } @@ -132,9 +132,9 @@ public function __construct(ThreadRead $aThread, $matome = false) /** * Dat���X��HTML���X�ɕϊ����� * - * @param string $ares dat��1���C�� - * @param int $i ���X�ԍ� - * @param string $pattern �n�C���C�g�p���K�\�� + * @param string $ares dat��1���C�� + * @param int $i ���X�ԍ� + * @param string $pattern �n�C���C�g�p���K�\�� * @return string */ public function transRes($ares, $i, $pattern = null) @@ -152,10 +152,10 @@ public function transRes($ares, $i, $pattern = null) // +Wiki:�u�����[�h if (isset($GLOBALS['replaceWordCtl'])) { $replaceWordCtl = $GLOBALS['replaceWordCtl']; - $name = $replaceWordCtl->replace('name', $this->thread, $ares, $i); - $mail = $replaceWordCtl->replace('mail', $this->thread, $ares, $i); + $name = $replaceWordCtl->replace('name', $this->thread, $ares, $i); + $mail = $replaceWordCtl->replace('mail', $this->thread, $ares, $i); $date_id = $replaceWordCtl->replace('date', $this->thread, $ares, $i); - $msg = $replaceWordCtl->replace('msg', $this->thread, $ares, $i); + $msg = $replaceWordCtl->replace('msg', $this->thread, $ares, $i); } $tores = ''; @@ -196,7 +196,7 @@ public function transRes($ares, $i, $pattern = null) } else { $name = '[��]' . $name; } - // �f�t�H���g�̖��O�Ɠ����Ȃ�ȗ� + // �f�t�H���g�̖��O�Ɠ����Ȃ�ȗ� } elseif ($name === $this->_nanashiName) { $name = ''; } @@ -296,7 +296,7 @@ public function transRes($ares, $i, $pattern = null) respopup_at}{$this->target_at}>{$this->check_st} EOMSG; - // NG���[���ϊ� + // NG���[���ϊ� } elseif ($ng_type & self::NG_MAIL) { $mail = <<{$mail} @@ -305,7 +305,7 @@ public function transRes($ares, $i, $pattern = null) EOMSG; - // NGID�ϊ� + // NGID�ϊ� } elseif ($ng_type & self::NG_ID) { $date_id = <<{$date_id} @@ -386,7 +386,7 @@ public function transRes($ares, $i, $pattern = null) /** * ���O��HTML�p�ɕϊ����� * - * @param string $name ���O + * @param string $name ���O * @return string */ public function transName($name) @@ -428,8 +428,8 @@ public function transName($name) /** * dat�̃��X���b�Z�[�W��HTML�\���p���b�Z�[�W�ɕϊ����� * - * @param string $msg ���b�Z�[�W - * @param int $mynum ���X�ԍ� + * @param string $msg ���b�Z�[�W + * @param int $mynum ���X�ԍ� * @return string */ public function transMsg($msg, $mynum) @@ -577,25 +577,40 @@ static public function getSpmElementHtml() { global $_conf; - return << -
    - >>???�Ƀ��X - [���p�Ȃ�] + $spm = << +
    >>???
    +
    + ����Ƀ��X + ���p���ă��X +EOP; + if ($_conf['expack.aas.enabled']) { + $spm .= <<AAS + AAS(��]) +EOP; + } + $spm .= <<�t�Q��
    -
    -��
    + +
    EOP; + return $spm; } // }}} @@ -604,8 +619,8 @@ static public function getSpmElementHtml() /** * ID�t�B���^�����O�����N�ϊ� * - * @param string $idstr ID:xxxxxxxxxx - * @param string $id xxxxxxxxxx + * @param string $idstr ID:xxxxxxxxxx + * @param string $id xxxxxxxxxx * @return string */ public function idFilter($idstr, $id) @@ -624,20 +639,20 @@ public function idFilter($idstr, $id) */ $filter_url = $_conf['read_php'] . '?' . http_build_query(array( - 'host' => $this->thread->host, - 'bbs' => $this->thread->bbs, - 'key' => $this->thread->key, - 'ls' => 'all', - 'offline' => '1', - 'idpopup' => '1', - 'rf' => array( - 'field' => ResFilter::FIELD_ID, - 'method' => ResFilter::METHOD_JUST, - 'match' => ResFilter::MATCH_ON, - 'include' => ResFilter::INCLUDE_NONE, - 'word' => $id, - ), - ), '', '&') . $_conf['k_at_a']; + 'host' => $this->thread->host, + 'bbs' => $this->thread->bbs, + 'key' => $this->thread->key, + 'ls' => 'all', + 'offline' => '1', + 'idpopup' => '1', + 'rf' => array( + 'field' => ResFilter::FIELD_ID, + 'method' => ResFilter::METHOD_JUST, + 'match' => ResFilter::MATCH_ON, + 'include' => ResFilter::INCLUDE_NONE, + 'word' => $id, + ), + ), '', '&') . $_conf['k_at_a']; if (isset($this->thread->idcount[$id]) && $this->thread->idcount[$id] > 0) { $num_ht = "(target_at}>{$this->thread->idcount[$id]})"; @@ -663,7 +678,7 @@ protected function _linkToWikipeida($word) $link = P2Util::throughIme($link); } - return "{$word}"; + return "{$word}"; } // }}} @@ -672,9 +687,9 @@ protected function _linkToWikipeida($word) /** * ���p�ϊ��i�P�Ɓj * - * @param string $full >>1-100 - * @param string $qsign >> - * @param string $appointed_num 1-100 + * @param string $full >>1-100 + * @param string $qsign >> + * @param string $appointed_num 1-100 * @return string */ public function quoteRes($full, $qsign, $appointed_num) @@ -710,9 +725,9 @@ public function quoteRes($full, $qsign, $appointed_num) /** * ���p�ϊ��i�͈́j * - * @param string $full >>1-100 - * @param string $qsign >> - * @param string $appointed_num 1-100 + * @param string $full >>1-100 + * @param string $qsign >> + * @param string $appointed_num 1-100 * @return string */ public function quoteResRange($full, $qsign, $appointed_num) @@ -747,9 +762,9 @@ public function quoteResRange($full, $qsign, $appointed_num) /** * �g�їp�O��URL�ϊ� * - * @param string $full - * @param string $url - * @param string $str + * @param string $full + * @param string $url + * @param string $str * @return string */ public function ktaiExtUrl($full, $url, $str) @@ -794,7 +809,7 @@ public function ktaiExtUrl($full, $url, $str) /** * �g�їp�O��URL�ϊ� * - * @param array $s ���K�\���Ƀ}�b�`�����v�f�̔z�� + * @param array $s ���K�\���Ƀ}�b�`�����v�f�̔z�� * @return string */ public function ktaiExtUrlCallback(array $s) @@ -841,7 +856,7 @@ public function plugin_link2chSubject($url, $purl, $str) if (preg_match('{^https?://(.+)/(.+)/$}', $purl[0], $m)) { //rep2�ɓo�^����Ă���‚Ȃ�΃����N���� - if (BbsMap::isRegisteredBbs($m[1],$m[2])) { + if (BbsMap::isRegisteredBbs($m[1], $m[2])) { $subject_url = "{$_conf['subject_php']}?host={$m[1]}&bbs={$m[2]}"; return "{$str} [�‚�p2�ŊJ��]"; } @@ -883,10 +898,10 @@ public function plugin_viewImage($url, $purl, $str) } if (preg_match('{^https?://.+?\\.(jpe?g|gif|png)$}i', $url) && empty($purl['query'])) { - $picto_url = 'http://pic.to/'.$purl['host'].$purl['path']; - $picto_tag = '(��) '; + $picto_url = 'http://pic.to/' . $purl['host'] . $purl['path']; + $picto_tag = '(��) '; if ($_conf['through_ime']) { - $link_url = P2Util::throughIme($purl[0]); + $link_url = P2Util::throughIme($purl[0]); $picto_url = P2Util::throughIme($picto_url); } else { $link_url = $url; @@ -1013,7 +1028,7 @@ public function plugin_replaceImageUrl($url, $purl, $str) } // �����X���^�C�����@�\��ON�ŃX���^�C���L�^����Ă��Ȃ��Ƃ���DB���X�V - if (!is_null($this->img_memo) && strpos($icdb->memo, $this->img_memo) === false){ + if (!is_null($this->img_memo) && strpos($icdb->memo, $this->img_memo) === false) { $update = new ImageCache2_DataObject_Images(); if (!is_null($icdb->memo) && strlen($icdb->memo) > 0) { $update->memo = $this->img_memo . ' ' . $icdb->memo; @@ -1026,7 +1041,8 @@ public function plugin_replaceImageUrl($url, $purl, $str) // expack.ic2.fav_auto_rank_override �̐ݒ�ƃ����N������OK�Ȃ� // ���C�ɃX�������摜�����N���㏑���X�V if ($rank !== null && - self::isAutoFavRankOverride($icdb->rank, $rank)) { + self::isAutoFavRankOverride($icdb->rank, $rank) + ) { if ($update === null) { $update = new ImageCache2_DataObject_Images(); $update->whereAddQuoted('uri', '=', $v['url']); @@ -1038,8 +1054,8 @@ public function plugin_replaceImageUrl($url, $purl, $str) $update->update(); } - // �摜���L���b�V������Ă��Ȃ��Ƃ� - // �����X���^�C�����@�\��ON�Ȃ�N�G����UTF-8�G���R�[�h�����X���^�C���܂߂� + // �摜���L���b�V������Ă��Ȃ��Ƃ� + // �����X���^�C�����@�\��ON�Ȃ�N�G����UTF-8�G���R�[�h�����X���^�C���܂߂� } else { // �摜���u���b�N���X�gor�G���[���O�ɂ��邩�m�F if (false !== ($errcode = $icdb->ic2_isError($v['url']))) { @@ -1067,22 +1083,24 @@ public function plugin_replaceImageUrl($url, $purl, $str) $backto = ''; } + $result = ""; + if (is_null($img_str)) { $result .= sprintf('[IC2:%s:%s]', - $img_url, - $backto, - p2h($purl['host']), - p2h(basename($purl['path'])) - ); + $img_url, + $backto, + p2h($purl['host']), + p2h(basename($purl['path'])) + ); } $img_title = p2h($purl['host']) - . ' ' - . p2h(basename($purl['path'])); + . ' ' + . p2h(basename($purl['path'])); $result .= "{$img_str}" - //. ' '; + //. ' '; } $linkUrlResult = $this->plugin_linkURL($url, $purl, $str); @@ -1125,35 +1143,37 @@ protected function _quotebackHorizontalListHtml($anchors, $resnum) } $plus = array_unique($plus); $plus_cnt = count(array_diff($plus, $anchors)); - $plus_str = count($plus) > 0 ? '+' . ($plus_cnt > 0 ? $plus_cnt : '') : ''; + $plus_str = count($plus) > 0 ? '+' . ($plus_cnt > 0 ? $plus_cnt : '') : ''; $url = $_conf['read_php'] . '?' . http_build_query(array( - 'host' => $this->thread->host, - 'bbs' => $this->thread->bbs, - 'key' => $this->thread->key, - 'ls' => $resnum, - 'offline' => '1', - 'showbl' => '1', - ), '', '&') . $_conf['k_at_a']; + 'host' => $this->thread->host, + 'bbs' => $this->thread->bbs, + 'key' => $this->thread->key, + 'ls' => $resnum, + 'offline' => '1', + 'showbl' => '1', + ), '', '&') . $_conf['k_at_a']; $suppress = false; $n = 0; $reslist = array(); - foreach($anchors as $anchor) { + foreach ($anchors as $anchor) { if ($anchor == $resnum) continue; $n++; if ($_conf['mobile.backlink_list.suppress'] > 0 - && $n > $_conf['mobile.backlink_list.suppress']) { + && $n > $_conf['mobile.backlink_list.suppress'] + ) { $suppress = true; break; } - $reslist[] = $this->quoteRes('>>'.$anchor, '>>', $anchor); + $reslist[] = $this->quoteRes('>>' . $anchor, '>>', $anchor); } $res_navi = ''; if ($_conf['mobile.backlink_list.openres_navi'] == 1 || ($_conf['mobile.backlink_list.openres_navi'] == 2 - && $suppress === true)) { + && $suppress === true) + ) { if (count($anchors) > 1 || $plus_str) { $res_navi = "(target_at}>" . (count($anchors) > 1 ? count($anchors) : '') diff --git a/lib/bootstrap.php b/lib/bootstrap.php index 5f54e3266..9f117614b 100644 --- a/lib/bootstrap.php +++ b/lib/bootstrap.php @@ -438,7 +438,10 @@ {$_conf['touch_icon_ht']} + + + EOS; @@ -447,7 +450,10 @@ // ����iPhone�r���[�� } elseif ($_conf['iphone']) { $_conf['extra_headers_ht'] .= << + + EOS; } diff --git a/lib/post_form.inc.php b/lib/post_form.inc.php index b6e3e8d6e..e47ebce8a 100644 --- a/lib/post_form.inc.php +++ b/lib/post_form.inc.php @@ -30,14 +30,14 @@ $htm['k_br'] = ''; $htm['name_label'] = ''; $htm['mail_label'] = ''; - $htm['name_extra_at'] = ' class="formelem maxwidth" placeholder="���O(�ȗ���)" autocorrect="off" autocapitalize="off"'; - $htm['mail_extra_at'] = ' class="formelem maxwidth" placeholder="���[��(�ȗ���)" autocorrect="off" autocapitalize="off"'; - $htm['msg_extra_at'] = ' class="formelem maxwidth" placeholder="�{��" autocorrect="off" autocapitalize="off"'; + $htm['name_extra_at'] = ' class="form-control form-group" placeholder="���O(�ȗ���)" autocorrect="off" autocapitalize="off"'; + $htm['mail_extra_at'] = ' class="form-control form-group" placeholder="���[��(�ȗ���)" autocorrect="off" autocapitalize="off"'; + $htm['msg_extra_at'] = ' class="form-control form-group" placeholder="�{��" autocorrect="off" autocapitalize="off"'; $htm['kaiko_on_js_fmt'] = ' onfocus="%1$s" onkeyup="if(%2$s){%1$s}"'; $htm['kaiko_on_js_func'] = sprintf("adjustTextareaRows(this,%d,2); ", $STYLE['post_msg_rows']); - $htm['submit_extra_at'] = ''; + $htm['submit_extra_at'] = 'class="btn form-group"'; if ($_conf['expack.editor.mobile.savedraft'] != '0' && $_conf['expack.editor.mobile.savedraft.interval'] > 0) { $htm['kaiko_on_js_func'] = 'DraftKakiko.startAutoSave(this.form, ' . ($_conf['expack.editor.mobile.savedraft.interval'] * 1000) . '); '.$htm['kaiko_on_js_func']; } @@ -91,7 +91,7 @@ if ((!$_conf['ktai'] && $_conf['expack.editor.savedraft'] != 0) || ($_conf['iphone'] && $_conf['expack.editor.mobile.savedraft'] != 0)) { $savedraft = << + EOP; } elseif ($_conf['ktai'] && $_conf['expack.editor.mobile.savedraft']) { diff --git a/lib/read_header_i.inc.php b/lib/read_header_i.inc.php index 2996994ad..56090e7fe 100644 --- a/lib/read_header_i.inc.php +++ b/lib/read_header_i.inc.php @@ -68,8 +68,7 @@ // {{{ �w�b�_�v�f $_conf['extra_headers_ht'] .= << - + EOS; @@ -216,30 +215,8 @@ echo toolbar_i_aborn_button('img/glyphish/icons2/128-bone.png', '���ځ[��', $thread_info); echo ''; -// ���O�폜 -echo ''; -if (file_exists($aThread->keydat)) { - $escaped_url = "info.php?{$host_bbs_key_q}{$ttitle_en_q}&dele=1{$_conf['k_at_a']}"; - echo toolbar_i_standard_button('img/glyphish/icons2/64-zap.png', '���O�폜', $escaped_url); -} else { - echo toolbar_i_disabled_button('img/glyphish/icons2/64-zap.png', '���O�폜'); -} -echo ''; - -echo ''; - -// }}} - -echo ''; - -// {{{ ���̑� - SPM�t�H�[�� - // IC2�����N�A���� if ($_conf['expack.ic2.enabled'] && $_conf['expack.ic2.thread_imagelink']) { - echo ''; - echo ''; $escaped_url = 'iv2.php?field=memo&keyword=' . rawurlencode($aThread->ttitle) . "&session_no_close=1{$_conf['k_at_a']}"; @@ -264,14 +241,15 @@ echo toolbar_i_opentab_button('img/glyphish/icons2/42-photos.png', '�摜', $escaped_url); } - echo '
    '; - echo kspform($aThread); - echo '
    '; -} else { - echo kspform($aThread); + echo ''; } +echo ''; // }}} +echo ''; + echo ''; // }}} @@ -281,6 +259,7 @@ $htm['rf_word_field'] = ResFilterElement::getWordField(array( 'autocorrect' => 'off', 'autocapitalize' => 'off', + 'class' => 'form-control', )); $htm['rf_field_field'] = ResFilterElement::getFieldField(); $htm['rf_method_field'] = ResFilterElement::getMethodField(); @@ -290,10 +269,17 @@ echo <<
    -{$htm['rf_hidden_fields']}{$htm['rf_word_field']} -
    +{$htm['rf_hidden_fields']} +
    +{$htm['rf_word_field']} + + + +
    +
    {$htm['rf_field_field']}��{$htm['rf_method_field']}��{$htm['rf_match_field']} {$htm['rf_include_field']} +
    {$_conf['detect_hint_input_ht']}{$_conf['k_input_ht']}
    diff --git a/lib/read_jump_k.inc.php b/lib/read_jump_k.inc.php index cd7914d14..a6ac08369 100644 --- a/lib/read_jump_k.inc.php +++ b/lib/read_jump_k.inc.php @@ -219,7 +219,7 @@ function _get_read_jump_js(ThreadRead $aThread, $options) global $_conf; return <<{$options} + EOP; } @@ -234,7 +234,7 @@ function _get_read_jump_filter_js(ThreadRead $aThread, $options) global $_conf; return <<{$options} + EOP; } diff --git a/lib/sb_footer_i.inc.php b/lib/sb_footer_i.inc.php index 5175abfb3..b9d37c8a3 100644 --- a/lib/sb_footer_i.inc.php +++ b/lib/sb_footer_i.inc.php @@ -123,12 +123,12 @@ }*/ } - $k_sb_navi_ht = ""; + $k_sb_navi_ht = ""; } if ($sb_all_pages < 2) { $sb_all_pages = 1; - $k_sb_navi_ht = ''; + $k_sb_navi_ht = ''; } // }}} diff --git a/lib/sb_header_i.inc.php b/lib/sb_header_i.inc.php index 6c83f424d..5cae6ca43 100644 --- a/lib/sb_header_i.inc.php +++ b/lib/sb_header_i.inc.php @@ -182,9 +182,11 @@ echo << -{$sb_form_hidden_ht}{$shinchaku_norefresh_ht} -���ǐ��������� - +{$sb_form_hidden_ht} +
    +{$shinchaku_norefresh_ht} + +
    EOP; @@ -220,7 +222,7 @@ $htm['change_sort'] .= "bbs}\">"; } -$htm['change_sort'] .= ''; foreach ($sorts as $k => $v) { if ($GLOBALS['now_sort'] == $k) { $sb_sort_selected_at = ' selected'; @@ -241,9 +243,9 @@ } else { $sb_rsort_checked_at = ''; } -$htm['change_sort'] .= ' '; -$htm['change_sort'] .= ' '; +$htm['change_sort'] .= ' '; +$htm['change_sort'] .= ' '; echo $htm['change_sort']; @@ -262,9 +264,15 @@ echo <<
    -{$sb_form_hidden_ht} - - +
    +{$sb_form_hidden_ht} + + + + + + +
    diff --git a/rep2/css/bootstrap.min.css b/rep2/css/bootstrap.min.css new file mode 100644 index 000000000..ed3905e0e --- /dev/null +++ b/rep2/css/bootstrap.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/rep2/css/iphone.css b/rep2/css/iphone.css index 06fbb6d77..1bb7603e7 100644 --- a/rep2/css/iphone.css +++ b/rep2/css/iphone.css @@ -3,737 +3,703 @@ /* {{{ General */ body { - margin: 0; - padding: 10px; - font-family: sans-serif; - font-size: medium; - line-height: 140%; - color: #000; - background-color: #fafafa; - -webkit-text-size-adjust: none; + margin: 0; + padding: 10px; + font-size: medium; + line-height: 140%; + color: #000; + background-color: #fafafa; + -webkit-text-size-adjust: none; } body > *:first-child { - margin-top: 0 !important; - padding-top: 0 !important; + margin-top: 0 !important; + padding-top: 0 !important; } body > *:last-child { - margin-bottom: 0 !important; - padding-bottom: 0 !important; + margin-bottom: 0 !important; + padding-bottom: 0 !important; } div, h1, h2, h3, h4, h5, h6, li, p { - word-break: normal; - word-wrap: break-word; + word-break: normal; + word-wrap: break-word; } h1, h2, h3, h4, h5, h6, p, form, fieldset { - margin: 8px 0; + margin: 8px 0; } a { - word-break: break-all; + word-break: break-all; } a:link { - color: #0000ff; + color: #0000ff; } /* �����TOP�{�^�� */ a#backButton { - position: absolute; - overflow: hidden; - top: 8px; - margin: 0; - left: 6px; right: auto; - height: 30px; - padding-right: 0px; padding-left: 0px; - width: auto; max-width: 100px; - font-family: Helvetica; - line-height: 30px; - font-size: 12px; - font-weight: bold; - text-shadow: rgba(0, 0, 0, 0.6) 0px -1px 0; - text-overflow: ellipsis; - text-decoration: none; - white-space: nowrap; - color: #FFFFFF; - border-width: 0 8px 0 14px; - /* background: #333; border-radius: 5px; min-width:46px; text-align:center */ - background: none; - -webkit-border-image: url(../iui/backButton.png?14011419) 0 8 0 14; - border-image: url(../iui/backButton.png?14011419) 0 8 0 14 fill; - -webkit-border-image: -webkit-image-set(url(../iui/backButton.png?14011419) 1x,url(../iui/backButton@2x.png?14011419) 2x,url(../iui/backButton@3x.png?14011419) 3x) 0 8 0 14; - border-image: image-set(url(../iui/backButton.png?14011419) 1x,url(../iui/backButton@2x.png?14011419) 2x,url(../iui/backButton@3x.png?14011419) 3x) 0 8 0 14; + position: absolute; + overflow: hidden; + top: 8px; + margin: 0; + left: 6px; + right: auto; + height: 30px; + padding-right: 0px; + padding-left: 0px; + width: auto; + max-width: 100px; + font-family: Helvetica; + line-height: 30px; + font-size: 12px; + font-weight: bold; + text-shadow: rgba(0, 0, 0, 0.6) 0px -1px 0; + text-overflow: ellipsis; + text-decoration: none; + white-space: nowrap; + color: #FFFFFF; + border-width: 0 8px 0 14px; + /* background: #333; border-radius: 5px; min-width:46px; text-align:center */ + background: none; + -webkit-border-image: url(../iui/backButton.png?14011419) 0 8 0 14; + border-image: url(../iui/backButton.png?14011419) 0 8 0 14 fill; + -webkit-border-image: -webkit-image-set(url(../iui/backButton.png?14011419) 1x, url(../iui/backButton@2x.png?14011419) 2x, url(../iui/backButton@3x.png?14011419) 3x) 0 8 0 14; + border-image: image-set(url(../iui/backButton.png?14011419) 1x, url(../iui/backButton@2x.png?14011419) 2x, url(../iui/backButton@3x.png?14011419) 3x) 0 8 0 14; } div#toolbar_header { - text-align:right; - padding: 6px; - height: 45px; - box-sizing: border-box; - -webkit-box-sizing: border-box; + text-align: right; + padding: 6px; + height: 45px; + box-sizing: border-box; + -webkit-box-sizing: border-box; } a:visited { - color: #0080ff; + color: #0080ff; } a img { - vertical-align: middle; + vertical-align: middle; } b.filtering, span.matched { - font-weight: bold; + font-weight: bold; } span.label { - cursor: pointer; + cursor: pointer; } div.left, td.left { - text-align: left; + text-align: left; } div.center, td.center { - text-align: center; + text-align: center; } div.right, td.right { - text-align: right; + text-align: right; } p.empty { - margin: 0; - padding: 7px 11px; - background-color: #fff; - color: #333;; + margin: 0; + padding: 7px 11px; + background-color: #fff; + color: #333;; } /* }}} * /* {{{ Res */ textarea#MESSAGE { - padding: 6px; - line-height: 132%; - width: 100%; - box-sizing: border-box; - -webkit-box-sizing: border-box; + padding: 6px; + line-height: 132%; + width: 100%; + box-sizing: border-box; + -webkit-box-sizing: border-box; } + /* }}} * /* {{{ Forms */ -input, select, textarea { - font-size: medium; -} - -input[type="checkbox"] { - width: 24px; - height: 24px; - -webkit-border-radius: 8px; - border-radius: 8px; - vertical-align: middle; -} - -input[type="checkbox"]:checked { - background-color: #808080; - border-color: #555555; -} - -input[type="submit"] { - -moz-user-select: none; - background-color: #808080; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; - color: #fff; - cursor: pointer; - display: inline-block; - font-size: 15px; - font-weight: normal; - padding: 10px; - text-align: center; - touch-action: manipulation; - vertical-align: middle; - white-space: nowrap; -} - -textarea { - padding-left: 5px; - padding-right: 5px; -} - form.inline { - display: inline; - margin: 0 5px; + display: inline; + margin: 0 5px; } form.inline-block { - display: inline-block; - margin: 0 5px; + display: inline-block; + margin: 0 5px; } /* }}} * /* {{{ Navigations */ div.navi, div.pager, div.toolbar { - margin: 5px 0; + margin: 5px 0; } a.button, div.navi a[href]:not(.nobutton), div.pager a[href]:not(.nobutton), -div.toolbar a[href]:not(.nobutton) -{ - display: inline-block; - min-width: 12px; /* 15 * 2 - (8 + 1) * 2 */ - height: 22px; /* 15 * 2 - (3 + 1) * 2 */ - margin: 4px 2px; - padding: 3px 8px; - text-align: center; - vertical-align: middle; - line-height: 150%; - text-decoration: none; - color: #000000; - background: #ffffff url('../img/iphone/btn-bg.png') repeat-x left bottom; - border: #505050 solid 1px; - -webkit-border-radius: 15px; - border-radius: 15px; +div.toolbar a[href]:not(.nobutton) { + display: inline-block; + min-width: 12px; /* 15 * 2 - (8 + 1) * 2 */ + height: 22px; /* 15 * 2 - (3 + 1) * 2 */ + margin: 4px 2px; + padding: 3px 8px; + text-align: center; + vertical-align: middle; + line-height: 150%; + text-decoration: none; + color: #000000; + background: #ffffff url('../img/iphone/btn-bg.png') repeat-x left bottom; + border: #505050 solid 1px; + -webkit-border-radius: 15px; + border-radius: 15px; } span.autosave-info { - font-size: xx-small; - color:#777; + font-size: xx-small; + color: #777; } /* }}} * /* {{{ SPM */ div#spm { - display: none; - position: absolute; - /*width: 300px;*/ - top: 0; - left: 10px; - z-index: 1000; - margin: 5px 0 0 5px; - padding: 0; - color: #ffffff; - background-color: rgba(0, 0, 0, 0.8); - -webkit-box-shadow: rgba(0, 0, 0, 0.7) 0 2px 5px; - box-shadow: rgba(0, 0, 0, 0.7) 0 2px 5px; - -webkit-border-radius: 8px; - border-radius: 8px; + display: none; + position: absolute; + /*width: 300px;*/ + max-width: 300px; + top: 0; + left: 10px; + z-index: 1000; + margin: 5px 0 0 5px; + padding: 2px 4px; + color: #ffffff; + background-color: rgba(0, 0, 0, 0.8); + -webkit-box-shadow: rgba(0, 0, 0, 0.7) 0 2px 5px; + box-shadow: rgba(0, 0, 0, 0.7) 0 2px 5px; + -webkit-border-radius: 8px; + border-radius: 8px; + line-height: 170%; } div#spm span#spm-num { - /*color: #ffffcc;*/ - /*text-decoration: underline;;*/ + /*color: #ffffcc;*/ + /*text-decoration: underline;;*/ } div#spm > div { - margin: 0; - padding: 8px; - line-height: 100%; + margin: 0; + padding: 8px; } -div#spm > div#spm-reply { - text-align: center; - font-size: x-large; - font-weight: bold; - border-bottom-color: rgba(255, 255, 255, 0.80); - border-bottom-style: solid; - border-bottom-width: 1px; -} - -div#spm > div#spm-reply > span#spm-reply-quote { +div#spm > div.spm-section { + white-space: nowrap; + margin: 2px; + padding: 0px; + border-bottom: 1px white solid; + vertical-align: middle; } -div#spm > div#spm-reply > span#spm-reply-noquote { - font-size: large; +div#spm > div#spm-menu > span { + display: block; + white-space: nowrap; + margin: 2px; + padding: 0px 4px; + vertical-align: middle; + text-decoration: none; + color: white; + font-size: large; } div#spm > div#spm-action { - text-align: center; + text-align: center; } div#spm > div#spm-action > select { - background-color: #ffffff; + background-color: #ffffff; } div#spm > img#spm-closer { - cursor: pointer; - position: absolute; - top: -12px; - left: -12px; + cursor: pointer; + position: absolute; + top: -12px; + left: -12px; } /* }}} */ /* {{{ Read */ span.thread_title { - text-align: left; - font-weight: bold; - font-size: 16px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - width: 100%; - box-sizing: border-box; - display: inline-block; + text-align: left; + font-weight: bold; + font-size: 16px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + width: 100%; + box-sizing: border-box; + display: inline-block; } td#thread_title { - text-align: left; - font-weight: bold; - font-size: 14px; - line-height: 14px; + text-align: left; + font-weight: bold; + font-size: 14px; + line-height: 14px; } td#thread_title > div { - padding: 0 0 0 8px; - width: 100%; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; + padding: 0 0 0 8px; + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } span.link_right_button { - position: absolute; - text-align: right; - right: 0; - top: 0; - padding: 3px 0; - display: inline-block; + position: absolute; + text-align: right; + right: 0; + top: 0; + padding: 3px 0; + display: inline-block; } div.thread_title { - background-color: #808080; - position: relative; - padding: 4px 0px 4px 4px; + background-color: #808080; + position: relative; + padding: 4px 0px 4px 4px; } h3 > font[color], div > font[color] > b { - color: #252525; + color: #252525; } div:not(.res-header) > span.onthefly { - padding: 2px 4px; - border: #00aa00 solid 1px; - color: #00aa00; - font-style: italic; + padding: 2px 4px; + border: #00aa00 solid 1px; + color: #00aa00; + font-style: italic; } div.res:not(.aborned) { - margin: 0; - padding: 0; - /*border-top: #fff solid 1px;*/ - border-top: #dcdcdc solid 1px; - /*background-color: #FAFAFA;*/ + margin: 0; + padding: 0; + /*border-top: #fff solid 1px;*/ + border-top: #dcdcdc solid 1px; + /*background-color: #FAFAFA;*/ } div.thread > div.res:not(:first-child) { -/* border-top-width: 4px;*/ + /* border-top-width: 4px;*/ } div.res.aborned { - margin: 0; - padding: 0; - font-size: xx-small; - line-height: 100%; + margin: 0; + padding: 0; + font-size: xx-small; + line-height: 100%; } div.res > div.message { - margin: 0; - padding: 5px 10px; - line-height: 140%; - word-break: break-all; + margin: 0; + padding: 5px 10px; + line-height: 140%; + word-break: break-all; } div.res > div.reslist { - margin: 0; - padding: 5px 10px; - line-height: 140%; - word-break: break-all; + margin: 0; + padding: 5px 10px; + line-height: 140%; + word-break: break-all; } div.res > div.res-header { - margin: 0; - padding: 5px; - line-height: 120%; - color: #1144AA; - display: inline-block; - /*border-bottom: #808080 solid 1px;*/ + margin: 0; + padding: 5px; + line-height: 120%; + color: #1144AA; + display: inline-block; + /*border-bottom: #808080 solid 1px;*/ } div.thread > div.res > div.res-header { - /*background-color: #fafafa;*/ + /*background-color: #fafafa;*/ } div.res-header > span.no { } div.res-header > span.no.newres { - color: #ff6600; + color: #ff6600; } div.res-header > span.no.onthefly { - color: #00aa00; + color: #00aa00; } div.res-header > span.no:before { - content: "["; - color: #000000; + content: "["; + color: #000000; } div.res-header > span.no:after { - content: "]"; - color: #000000; + content: "]"; + color: #000000; } div.res-header > span.name { } div.res-header > span.name:after { - content: ":"; + content: ":"; } div.res-header > span.mail { } div.res-header > span.mail:after { - content: ":"; + content: ":"; } div.res-header > span.date-id { } div.respop { - position: absolute; - top: 0; - left: 0; - margin: 0; - padding: 12px 6px 0 14px; + position: absolute; + top: 0; + left: 0; + margin: 0; + padding: 12px 6px 0 14px; } div.respop > div.res { - margin: 0 0 8px 0 !important; - background-color: rgba(255, 255, 250, 0.95) !important; - border: rgba(108, 108, 108, 0.8) solid 1px !important; - -webkit-border-radius: 8px; - border-radius: 8px; - -webkit-box-shadow: rgba(0, 0, 0, 0.7) 0 2px 5px; - box-shadow: rgba(0, 0, 0, 0.7) 0 2px 5px; + margin: 0 0 8px 0 !important; + background-color: rgba(255, 255, 250, 0.95) !important; + border: rgba(108, 108, 108, 0.8) solid 1px !important; + -webkit-border-radius: 8px; + border-radius: 8px; + -webkit-box-shadow: rgba(0, 0, 0, 0.7) 0 2px 5px; + box-shadow: rgba(0, 0, 0, 0.7) 0 2px 5px; } div.respop > div.res > div.res-header { - border-bottom-color: rgba(108, 108, 108, 0.8) !important; + border-bottom-color: rgba(108, 108, 108, 0.8) !important; } div.respop > img.close-button { - cursor: pointer; - position: absolute; - top: 0; - left: 2px; + cursor: pointer; + position: absolute; + top: 0; + left: 2px; } div.respop > div.res > div.respop-back { - margin: 0; - padding: 0; - border-top: rgba(108, 108, 108, 0.8) solid 1px; - text-align: center; + margin: 0; + padding: 0; + border-top: rgba(108, 108, 108, 0.8) solid 1px; + text-align: center; } div.respop > div.res > div.respop-back > a { - display: block; - margin: 0; - padding: 3px; - font-size: small; - text-decoration: none; - color: #252525; + display: block; + margin: 0; + padding: 3px; + font-size: small; + text-decoration: none; + color: #252525; } a.aas { - display: inline-block; - vertical-align: middle; - margin: 0 5px; - padding: 0; - border: #aaaaaa inset 3px; + display: inline-block; + vertical-align: middle; + margin: 0 5px; + padding: 0; + border: #aaaaaa inset 3px; } /* }}} * /* {{{ Subject */ ul.subject { - display: block; - margin: 0; - padding: 0; + display: block; + margin: 0; + padding: 0; } ul.subject > li { - display: block; - margin: 0; - padding: 0; - border-bottom: #e0e0e0 solid 1px; + display: block; + margin: 0; + padding: 0; + border-bottom: #e0e0e0 solid 1px; } ul.subject > li:first-child { - border-top: #e0e0e0 solid 1px; + border-top: #e0e0e0 solid 1px; } ul.subject > li > a { - display: block; - margin: 0; - padding: 8px 10px; - word-break: normal; - font-size: medium; - text-decoration: none; - color: #000000; - background-color: #ffffff; + display: block; + margin: 0; + padding: 8px 10px; + word-break: normal; + font-size: medium; + text-decoration: none; + color: #000000; + background-color: #ffffff; } ul.subject > li > a:link { - color: #000000; - background-color: #ffffff; + color: #000000; + background-color: #ffffff; } ul.subject > li > a:visited { - color: #666666; - background-color: #ffffff; + color: #666666; + background-color: #ffffff; } ul.subject > li > a:active { } ul.subject > li > a:link > span.new { - color: #8C99B4; + color: #8C99B4; } ul.subject > li > a:visited > span.new { - color: #8090B0; + color: #8090B0; } ul.subject > li > a:active > span.new { - color: #ffffff; + color: #ffffff; } ul.subject > li > a > span.info { - display: none; + display: none; } ul.subject > li > a > span.title { - word-break: break-all; - font-size: 15px; - line-height: 127%; - font-weight: bold; + word-break: break-all; + font-size: 15px; + line-height: 127%; + font-weight: bold; } ul.subject > li > a > span.ita { - white-space: nowrap; - color: #666; - font-size: 12px; + white-space: nowrap; + color: #666; + font-size: 12px; } ul.subject > li > a > span.num { - white-space: nowrap; - color: #999999; - font-size: 14px; + white-space: nowrap; + color: #999999; + font-size: 14px; } ul.subject > li > a > span.unread { - padding: 0 4px; - color: #ffffff !important; - background-color: #666666; - -webkit-border-radius: 8px; - border-radius: 8px; + padding: 0 4px; + color: #ffffff !important; + background-color: #666666; + -webkit-border-radius: 8px; + border-radius: 8px; } ul.subject > li > a > span.unread.new { - font-weight: bold; - background-color: #8C99B4; + font-weight: bold; + background-color: #8C99B4; } ul.subject > li > a > span.unread.offline { } ul.subject > li > a > span.count { - white-space: nowrap; - color: #999; - font-size: 14px; + white-space: nowrap; + color: #999; + font-size: 14px; } ul.subject > li > a > span.count:before { - content: "("; + content: "("; } ul.subject > li > a > span.count:after { - content: ")"; + content: ")"; } ul.subject > li > a > span.score { - white-space: nowrap; - color: #666; - font-size: 12px; + white-space: nowrap; + color: #666; + font-size: 12px; } /* }}} */ /* {{{ Pop-up dialog */ div.popup-dialog { - display: none; - position: absolute; - top: 0; - left: 10px; - z-index: 1001; - margin: 5px 0 0 5px; - padding: 0; - max-width: 300px; - color: #ffffff; - background-color: rgba(0, 0, 0, 0.8); - -webkit-box-shadow: rgba(0, 0, 0, 0.7) 0 2px 5px; - box-shadow: rgba(0, 0, 0, 0.7) 0 2px 5px; - -webkit-border-radius: 8px; - border-radius: 8px; + display: none; + position: absolute; + top: 0; + left: 10px; + z-index: 1001; + margin: 5px 0 0 5px; + padding: 0; + max-width: 300px; + color: #ffffff; + background-color: rgba(0, 0, 0, 0.8); + -webkit-box-shadow: rgba(0, 0, 0, 0.7) 0 2px 5px; + box-shadow: rgba(0, 0, 0, 0.7) 0 2px 5px; + -webkit-border-radius: 8px; + border-radius: 8px; } div.popup-dialog > img.close-button { - cursor: pointer; - position: absolute; - top: -12px; - left: -12px; + cursor: pointer; + position: absolute; + top: -12px; + left: -12px; } div.popup-dialog > div { - margin: 0; - font-weight: normal; + margin: 0; + font-weight: normal; } div.popup-dialog > div.popup-dialog-text { - padding: 8px 12px; - text-align: left; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - font-size: 14px !important; - line-height: 14px !important; + padding: 8px 12px; + text-align: left; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-size: 14px !important; + line-height: 14px !important; } div.popup-dialog > div.popup-dialog-buttons { - padding: 0 12px 8px 12px; - text-align: center; - font-size: 14px !important; - line-height: 14px !important; + padding: 0 12px 8px 12px; + text-align: center; + font-size: 14px !important; + line-height: 14px !important; } div.popup-dialog > div.popup-dialog-buttons > input[type="button"] { - margin: 0; - padding: 0; - width: auto; - height: auto; - font-size: 14px !important; - color: #000000; + margin: 0; + padding: 0; + width: auto; + height: auto; + font-size: 14px !important; + color: #000000; } /* }}} */ /* {{{ Pop-in information */ ul.subject > li.info-pop { - margin: 0; - padding: 10px 5px; - background-color: #333; - color: #ffffff; - font-size: 16px !important; - font-weight: bold; - line-heihgt: 100%; + margin: 0; + padding: 10px 5px; + background-color: #333; + color: #ffffff; + font-size: 16px !important; + font-weight: bold; + line-heihgt: 100%; } ul.subject > li.info-pop > div.info-pop-buttons { - margin: 0; - padding: 0; - width: auto; - text-align: center; - font-size: 14px !important; - line-height: 14px !important; + margin: 0; + padding: 0; + width: auto; + text-align: center; + font-size: 14px !important; + line-height: 14px !important; } ul.subject > li.info-pop > div.info-pop-buttons:not(:first-child) { - margin-top: 10px; + margin-top: 10px; } ul.subject > li.info-pop > div.info-pop-buttons input[type="button"] { - margin: 0; - padding: 0; - width: auto; - height: auto; - font-size: 14px !important; - font-weight: normal; - color: #000000; + margin: 0; + padding: 0; + width: auto; + height: auto; + font-size: 14px !important; + font-weight: normal; + color: #000000; } ul.subject > li.info-pop > table.info-pop-fav { - margin: 10px auto 0 auto; - padding: 0; - width: auto; + margin: 10px auto 0 auto; + padding: 0; + width: auto; } ul.subject > li.info-pop > table.info-pop-fav tbody, ul.subject > li.info-pop > table.info-pop-fav tr { - margin: 0; - padding: 0; + margin: 0; + padding: 0; } ul.subject > li.info-pop > table.info-pop-fav td { - margin: 0; - padding: 2px; - line-height: 100%; - text-align: left; - vertical-align: middle; + margin: 0; + padding: 2px; + line-height: 100%; + text-align: left; + vertical-align: middle; } ul.subject > li.info-pop > table.info-pop-fav td:first-child { - padding-right: 8px; + padding-right: 8px; } /* }}} */ /* {{{ new layout */ body.nopad { - margin: 0; - padding: 0; + margin: 0; + padding: 0; } div.info { - margin: 0; - padding: 5px 10px; - border-top: #808080 solid 1px; - background-color: #ccf; - color: #000; - font-size: 14px; - line-height: 16px; + margin: 0; + padding: 5px 10px; + border-top: #808080 solid 1px; + background-color: #ccf; + color: #000; + font-size: 14px; + line-height: 16px; } a.hoverable { - -webkit-tap-highlight-color: transparent; + -webkit-tap-highlight-color: transparent; } a > img { - border: none; + border: none; } /* }}} */ /* {{{ new toolbar */ div.ntoolbar { - min-width: 320px; - margin: 0; - padding: 0; - background-color: #333; - color: #fff; + min-width: 320px; + margin: 0; + padding: 0; + background-color: #333; + color: #fff; } div.ntoolbar#pager { - background-color: #808080; - color: #fff; + background-color: #808080; + color: #fff; } div.ntoolbar#header { @@ -743,349 +709,343 @@ div.ntoolbar#footer { } h1.ptitle { - margin: 0; - padding: 10px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - text-align: center; - font-weight: bold; - font-size: 16px; - line-height: 16px; + margin: 0; + padding: 10px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + text-align: center; + font-weight: bold; + font-size: 16px; + line-height: 16px; } h1.ptitle > span.thin { - font-weight: normal; - font-size: 14px; + font-weight: normal; + font-size: 14px; } div.ntoolbar > form, div.ntoolbar > div > form { - margin: 0; - padding: 5px 10px; - border-top: #808080 solid 1px; - font-size: 14px; - line-height: 16px; + margin: 0; + padding: 5px 10px; + border-top: #808080 solid 1px; + font-size: 14px; + line-height: 16px; } div.ntoolbar > div { - margin: 0; - padding: 0; - font-size: 14px; - line-height: 16px; + margin: 0; + padding: 0; + font-size: 14px; + line-height: 16px; } div.ntoolbar > div.hits { - padding: 5px 10px; - border-top: #808080 solid 1px; - background-color: #ffc; - color: #000; + padding: 5px 10px; + border-top: #808080 solid 1px; + background-color: #ffc; + color: #000; } div.ntoolbar > div.extra { - display: none; + display: none; } div.ntoolbar table { - width: 100%; - margin: 0; - padding: 0; - border-collapse: collapse; - empty-cells: show; - table-layout: fixed; + width: 100%; + margin: 0; + padding: 0; + border-collapse: collapse; + empty-cells: show; + table-layout: fixed; } div.ntoolbar td { - position: relative; - width: 20%; - min-width: 64px; - margin: 0; - padding: 4px 0; - text-align: center; - vertical-align: middle; - border-top: #808080 solid 1px; - font-size: 11px; - line-height: 11px; + position: relative; + width: 20%; + min-width: 64px; + margin: 0; + padding: 4px 0; + text-align: center; + vertical-align: middle; + border-top: #808080 solid 1px; + font-size: 11px; + line-height: 11px; } div.ntoolbar#pager td { - padding: 0; - border-top: none; + padding: 0; + border-top: none; } div.ntoolbar td[colspan='2'] { - width: 40%; + width: 40%; } div.ntoolbar td[colspan='3'] { - width: 60%; + width: 60%; } div.ntoolbar td[colspan='4'] { - width: 80%; + width: 80%; } div.ntoolbar td[colspan='5'] { - width: 100%; + width: 100%; } div.ntoolbar td > a { - display: inline-block; - position: relative; - width: 60px; - margin: 0 auto; - padding: 0; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - text-align: center; - text-decoration: none; + display: inline-block; + position: relative; + width: 60px; + margin: 0 auto; + padding: 0; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + text-align: center; + text-decoration: none; } div.ntoolbar td[colspan] > a { - width: 120px; + width: 120px; } div.ntoolbar a { - text-decoration: none; + text-decoration: none; } div.ntoolbar a:link, div.ntoolbar a:visited { - color: #fff; + color: #fff; } div.ntoolbar a.inactive { - color: #fff; + color: #fff; } + div.ntoolbar span.available { - display: inline-block; + display: inline-block; } + div.ntoolbar span.unavailable { - color: #555; - display: inline-block; + color: #555; + display: inline-block; } div.ntoolbar a.hover, div.ntoolbar a.active, div.ntoolbar a:hover, div.ntoolbar a:active { - color: #b4b4b4; + color: #b4b4b4; } /* �o�b�W�̈ʒu���߂̂��߂��� */ div#matome { - display: inline-block; - position: relative; + display: inline-block; + position: relative; } - a > span.badge { - display: inline-block; - position: absolute; - top: 0; - right: 8px; - width: auto; - height: 12px; - margin: 0; - padding: 2px 5px; - -webkit-border-radius: 8px; - border-radius: 8px; - background-color: #8C99B4; - color: #fff; - font-weight: bold; - font-size: 12px; - line-height: 12px; + display: inline-block; + position: absolute; + top: 0; + right: 8px; + width: auto; + height: 12px; + margin: 0; + padding: 2px 5px; + -webkit-border-radius: 8px; + border-radius: 8px; + background-color: #8C99B4; + color: #fff; + font-weight: bold; + font-size: 12px; + line-height: 12px; } a > span.badge.l2 { - right: 5px; + right: 5px; } a > span.badge.l3 { - right: 3px; + right: 3px; } a > span.badge.l4 { - right: 0px; + right: 0px; } a > span.badge.l0 { - display: none; + display: none; } a.hover > span.badge, a.active > span.badge, a:hover > span.badge, a:active > span.badge { - background-color: #36f; + background-color: #36f; } div.ntoolbar a.inactive > img { - filter: alpha(opacity=50); - -ms-filter: "alpha(opacity=50)"; - -moz-opacity:0.5; - opacity:0.5; + filter: alpha(opacity=50); + -ms-filter: "alpha(opacity=50)"; + -moz-opacity: 0.5; + opacity: 0.5; } div.ntoolbar span.unavailable > img { - filter: alpha(opacity=20); - -ms-filter: "alpha(opacity=20)"; - -moz-opacity:0.2; - opacity:0.2; + filter: alpha(opacity=20); + -ms-filter: "alpha(opacity=20)"; + -moz-opacity: 0.2; + opacity: 0.2; } div.ntoolbar a.hover > img, div.ntoolbar a.active > img, div.ntoolbar a:hover > img, div.ntoolbar a:active > img { - filter: alpha(opacity=70); - -ms-filter: "alpha(opacity=70)"; - -moz-opacity:0.7; - opacity:0.7; + filter: alpha(opacity=70); + -ms-filter: "alpha(opacity=70)"; + -moz-opacity: 0.7; + opacity: 0.7; } div.ntoolbar td > select { - font-size: 16px; + font-size: 16px; } div.ntoolbar td > span.large { - font-size: 14px; + font-size: 14px; } /* }}} */ /* {{{ new toolbar / matome */ div.mtoolbar { - position: relative; - min-width: 320px; - margin: 0; - padding: 0; - background-color: #808080; - color: #fff; + position: relative; + min-width: 320px; + margin: 0; + padding: 0; + background-color: #808080; + color: #fff; } div.mtoolbar > .ttitle { - margin: 0 56px 0 0; - padding: 10px 0 10px 10px; - font-weight: bold; + margin: 0 56px 0 0; + padding: 10px 0 10px 10px; + font-weight: bold; } div.mtoolbar > h2.ttitle { - font-size: 14px; - line-height: 16px; + font-size: 14px; + line-height: 16px; } div.mtoolbar > div.ttitle { - font-size: 12px; - line-height: 14px; + font-size: 12px; + line-height: 14px; } div.mtoolbar_top { - border-top: #808080 solid 2px; + border-top: #808080 solid 2px; } div.mtoolbar_bottom { - border-bottom: #808080 solid 1px; + border-bottom: #808080 solid 1px; } div.mtoolbar_bottom > table { - border-bottom: #808080 solid 1px; + border-bottom: #808080 solid 1px; } div.mtoolbar > div.mover { - position: absolute; - right: 8px; + position: absolute; + right: 8px; } div.mtoolbar_top > div.mover { - top: 0; + top: 0; } div.mtoolbar_bottom > div.mover { - bottom: 2px; + bottom: 2px; } div.mtoolbar > .ttitle a { - text-decoration: underline; + text-decoration: underline; } div.mtoolbar > .ttitle > span.btitle { - display: inline-block; - font-weight: normal; + display: inline-block; + font-weight: normal; } /* }}} */ /* {{{ Media Queries for res-popups */ @media screen and (max-width: 320px) { - div.respop { - padding-right: 0; - } + div.respop { + padding-right: 0; + } - div.respop > div.res { - border-right-width: 0 !important; - -webkit-border-top-right-radius: 0; - border-top-right-radius: 0; - -webkit-border-right-left-radius: 0; - border-bottom-right-radius: 0; - } + div.respop > div.res { + border-right-width: 0 !important; + -webkit-border-top-right-radius: 0; + border-top-right-radius: 0; + -webkit-border-right-left-radius: 0; + border-bottom-right-radius: 0; + } } /* }}} */ /* {{{ Media Queries for toolbar items */ @media screen and (min-width: 340px) { - div.ntoolbar td > a { - width: 64px; - } + div.ntoolbar td > a { + width: 64px; + } } @media screen and (min-width: 360px) { - div.ntoolbar td > a { - width: 68px; - } - a > span.badge { - right: 8px !important; - } + div.ntoolbar td > a { + width: 68px; + } + + a > span.badge { + right: 8px !important; + } } @media screen and (min-width: 400px) { - div.ntoolbar td > a { - width: 76px; - } - a > span.badge { - right: 16px !important; - } + div.ntoolbar td > a { + width: 76px; + } + + a > span.badge { + right: 16px !important; + } } @media screen and (min-width: 480px) { - div.ntoolbar td > a { - width: 92px; - } - a > span.badge { - right: 24px !important; - } + div.ntoolbar td > a { + width: 92px; + } + + a > span.badge { + right: 24px !important; + } } +.btn { + background-color: #999999; +} .maxwidth { width: 98%; } -.formelem { - background-color: #fff; - background-image: none; - border: 1px solid #ccc; - border-radius: 4px; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset; - color: #000; - display: block; - margin-bottom: 15px; - padding: 6px 12px; - transition: border-color 0.15s ease-in-out 0s, box-shadow 0.15s ease-in-out 0s; -} - /* }}} */ /* diff --git a/rep2/js/bootstrap.min.js b/rep2/js/bootstrap.min.js new file mode 100644 index 000000000..9bcd2fcca --- /dev/null +++ b/rep2/js/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under the MIT license + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
    ',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/rep2/js/jquery-3.2.1.min.js b/rep2/js/jquery-3.2.1.min.js new file mode 100644 index 000000000..644d35e27 --- /dev/null +++ b/rep2/js/jquery-3.2.1.min.js @@ -0,0 +1,4 @@ +/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="
    ",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S), +a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b), +null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r(" \n EOP; @@ -114,7 +115,6 @@ if (!$_conf['ktai'] || $_conf['iphone']) { echo << - \n EOP; diff --git a/rep2/read_filter_k.php b/rep2/read_filter_k.php index 61c379aef..f41f37354 100644 --- a/rep2/read_filter_k.php +++ b/rep2/read_filter_k.php @@ -23,6 +23,7 @@ $word_field_ht = ResFilterElement::getWordField(array( 'autocorrect' => 'off', 'autocapitalize' => 'off', + 'class' => 'form-control', )); } else { $word_field_ht = ResFilterElement::getWordField(); diff --git a/rep2/read_new_k.php b/rep2/read_new_k.php index b831c7cd3..91fa896cd 100644 --- a/rep2/read_new_k.php +++ b/rep2/read_new_k.php @@ -130,7 +130,6 @@ // iPhone if ($_conf['iphone']) { $_conf['extra_headers_ht'] .= << EOS; From b4bf5d56148529534a4a0a3582374fe5c1fb8e5d Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Thu, 28 Sep 2017 13:39:59 +0900 Subject: [PATCH 234/339] =?UTF-8?q?rss=E3=83=AA=E3=83=BC=E3=83=80=E3=83=BC?= =?UTF-8?q?=E3=81=8C=E5=8B=95=E4=BD=9C=E3=81=97=E3=81=AA=E3=81=84=E4=B8=8D?= =?UTF-8?q?=E5=85=B7=E5=90=88=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/expack/rss/parser.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/expack/rss/parser.inc.php b/lib/expack/rss/parser.inc.php index af84ab00a..d8da961fc 100644 --- a/lib/expack/rss/parser.inc.php +++ b/lib/expack/rss/parser.inc.php @@ -50,7 +50,7 @@ function p2GetRSS($remotefile, $atom = 0) } // If-Modified-Since�‚��Ń_�E�����[�h�i�t�@�C�����������A�Â����A���������[�h�̂Ƃ��j - $cache_time = ($refresh) ? 0 : $_conf['expack.rss.check_interval'] * 60); + $cache_time = ($refresh) ? 0 : ($_conf['expack.rss.check_interval'] * 60); $dl = P2Commun::fileDownload($remotefile, $localpath,$cache_time, true, true); // �L���b�V�����X�V����Ȃ��������A�_�E�����[�h�����Ȃ�RSS���p�[�X From 414473e43a112924b1147faa7a21253f6b4f764d Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sun, 1 Oct 2017 22:27:40 +0900 Subject: [PATCH 235/339] =?UTF-8?q?jQuery=E3=81=8C=E4=BA=8C=E9=87=8D?= =?UTF-8?q?=E3=81=AB=E8=AA=AD=E3=81=BF=E8=BE=BC=E3=81=BE=E3=82=8C=E3=82=8B?= =?UTF-8?q?=E4=B8=8D=E5=85=B7=E5=90=88=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/iv2.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/rep2/iv2.php b/rep2/iv2.php index 46a8380e8..934ff30b3 100644 --- a/rep2/iv2.php +++ b/rep2/iv2.php @@ -30,7 +30,6 @@ $_conf['extra_headers_ht'] .= << - @@ -39,7 +38,6 @@ $_conf['extra_headers_xht'] .= << - @@ -997,11 +995,8 @@ function iv2_sqlite_unix2date($ts) $flexy->setData('page', $page); $flexy->setData('move', $qfObj); $flexy->setData('lightbox', $lightbox); -if ($enable_zip) { $flexy->setData('jquery', $_conf['jquery_version']); -} else { $flexy->setData('jquery', null); -} // �y�[�W��\�� P2Util::header_nocache(); From 231de6e53ed2ad7fad956a57b7b53cd50d29d43f Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sun, 1 Oct 2017 22:37:19 +0900 Subject: [PATCH 236/339] =?UTF-8?q?5ch=E6=9A=AB=E5=AE=9A=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 241 ++++++++++++++++++++++++------------------------- 1 file changed, 119 insertions(+), 122 deletions(-) diff --git a/lib/P2Util.php b/lib/P2Util.php index c9b1cd6da..05fb850b0 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -130,11 +130,11 @@ static private function encodeCookieName($key) * setcookie() �ł́Aau�ŕK�v��max age���ݒ肳��Ȃ��̂ŁA������𗘗p���� * * @access public - * @param string $key - * @param string $value - * @param int $expires - * @param string $path - * @param string $domain + * @param string $key + * @param string $value + * @param int $expires + * @param string $path + * @param string $domain * @param boolean $secure * @param boolean $httponly * @return boolean @@ -168,14 +168,14 @@ static public function setCookie($key, $value = '', $expires = null, $path = '', } header( - 'Set-Cookie: '. self::encodeCookieName($key) . '=' . rawurlencode($value) - . (empty($domain) ? '' : '; Domain=' . $domain) - . (empty($expires) ? '' : '; expires=' . gmdate('D, d-M-Y H:i:s', $expires) . ' GMT') - . (empty($maxage) ? '' : '; Max-Age=' . $maxage) - . (empty($path) ? '' : '; Path=' . $path) - . (!$secure ? '' : '; Secure') - . (!$httponly ? '' : '; HttpOnly'), - $replace = false + 'Set-Cookie: ' . self::encodeCookieName($key) . '=' . rawurlencode($value) + . (empty($domain) ? '' : '; Domain=' . $domain) + . (empty($expires) ? '' : '; expires=' . gmdate('D, d-M-Y H:i:s', $expires) . ' GMT') + . (empty($maxage) ? '' : '; Max-Age=' . $maxage) + . (empty($path) ? '' : '; Path=' . $path) + . (!$secure ? '' : '; Secure') + . (!$httponly ? '' : '; HttpOnly'), + $replace = false ); return true; @@ -187,9 +187,9 @@ static public function setCookie($key, $value = '', $expires = null, $path = '', /** * �N�b�L�[����������B�ϐ� $_COOKIE ���B * - * @param string $key key, k1[k2] - * @param string $path - * @param string $domain + * @param string $key key, k1[k2] + * @param string $path + * @param string $domain * @return boolean */ static public function unsetCookie($key, $path = '', $domain = null) @@ -270,7 +270,7 @@ static public function checkDirWritable($aDir) //$info_msg_ht .= "�f�B���N�g���������쐬�ł��܂���ł����B
    �蓮�Ńf�B���N�g�����쐬���A�p�[�~�b�V������ݒ肵�ĉ������B"; } } else { - //$info_msg_ht .= "�f�B���N�g�����쐬���A�p�[�~�b�V������ݒ肵�ĉ������B"; + //$info_msg_ht .= "�f�B���N�g�����쐬���A�p�[�~�b�V������ݒ肵�ĉ������B"; } //$info_msg_ht .= '

    '; @@ -295,9 +295,9 @@ static public function cacheFileForDL($url) $parsed = parse_url($url); // URL���� - $save_uri = isset($parsed['host']) ? $parsed['host'] : ''; - $save_uri .= isset($parsed['port']) ? ':' . $parsed['port'] : ''; - $save_uri .= isset($parsed['path']) ? $parsed['path'] : ''; + $save_uri = isset($parsed['host']) ? $parsed['host'] : ''; + $save_uri .= isset($parsed['port']) ? ':' . $parsed['port'] : ''; + $save_uri .= isset($parsed['path']) ? $parsed['path'] : ''; $save_uri .= isset($parsed['query']) ? '?' . $parsed['query'] : ''; $cachefile = $_conf['cache_dir'] . '/' . $save_uri; @@ -382,26 +382,26 @@ static private function _p2DirOfHost($base_dir, $host, $dir_sep = true) if (self::isHost2chs($host)) { $host_dir = $base_dir . DIRECTORY_SEPARATOR . '2channel'; - // machibbs.com + // machibbs.com } elseif (self::isHostMachiBbs($host)) { $host_dir = $base_dir . DIRECTORY_SEPARATOR . 'machibbs.com'; - // tor + // tor } elseif (self::isHostTor($host)) { $tor_host = preg_replace('/\.onion\.(\w+)$/', '.onion', $host); $host_dir = $base_dir . DIRECTORY_SEPARATOR . $tor_host; unset($tor_host); - // jbbs.livedoor.jp (livedoor �����^���f����) + // jbbs.livedoor.jp (livedoor �����^���f����) } elseif (self::isHostJbbsShitaraba($host)) { if (DIRECTORY_SEPARATOR == '/') { $host_dir = $base_dir . DIRECTORY_SEPARATOR . $host; } else { $host_dir = $base_dir . DIRECTORY_SEPARATOR . str_replace('/', DIRECTORY_SEPARATOR, $host); } - // vip.2ch.com + // vip.2ch.com } elseif (self::isHostVip2ch($host)) { - $host_dir = $base_dir . DIRECTORY_SEPARATOR . 'ex14.vip2ch.com'; + $host_dir = $base_dir . DIRECTORY_SEPARATOR . 'ex14.vip2ch.com'; - // livedoor �����^���f���ˆȊO�ŃX���b�V�����̕������܂ނƂ� + // livedoor �����^���f���ˆȊO�ŃX���b�V�����̕������܂ނƂ� } elseif (preg_match('/[^0-9A-Za-z.\\-_]/', $host)) { $host_dir = $base_dir . DIRECTORY_SEPARATOR . rawurlencode($host); /* @@ -416,7 +416,7 @@ static private function _p2DirOfHost($base_dir, $host, $dir_sep = true) } */ - // ���̑� + // ���̑� } else { $host_dir = $base_dir . DIRECTORY_SEPARATOR . $host; } @@ -536,7 +536,7 @@ static public function getKeyPath($base_dir, $key, $extension = '') } return $old_path; - } + } // }}} // {{{ getDatPath() @@ -631,14 +631,14 @@ static public function getListNaviRange($disp_from, $disp_range, $disp_all_num) { if (!$disp_all_num) { return array( - 'all_once' => true, - 'from' => 0, - 'end' => 0, - 'limit' => 0, - 'offset' => 0, - 'mae_from' => 1, + 'all_once' => true, + 'from' => 0, + 'end' => 0, + 'limit' => 0, + 'offset' => 0, + 'mae_from' => 1, 'tugi_from' => 1, - 'range_st' => '-', + 'range_st' => '-', ); } @@ -654,7 +654,7 @@ static public function getListNaviRange($disp_from, $disp_range, $disp_all_num) $disp_navi['from'] = max(1, $disp_all_num - $disp_range); $disp_navi['end'] = $disp_all_num; - // from �z���Ȃ� + // from �z���Ȃ� } else { $disp_navi['end'] = $disp_navi['from'] + $disp_range; @@ -690,7 +690,7 @@ static public function getListNaviRange($disp_from, $disp_range, $disp_all_num) /** * key.idx �� data ���L�^���� * - * @param array $data �v�f�̏��ԂɈӖ�����B + * @param array $data �v�f�̏��ԂɈӖ�����B */ static public function recKeyIdx($keyidx, $data) { @@ -699,7 +699,7 @@ static public function recKeyIdx($keyidx, $data) // ��{�͔z��Ŏ󂯎�� if (is_array($data)) { $cont = implode('<>', $data); - // ���݊��p��string����t + // ���݊��p��string����t } else { $cont = rtrim($data); } @@ -719,8 +719,8 @@ static public function recKeyIdx($keyidx, $data) /** * ���p�Q�[�g��ʂ����߂�URL�ϊ� * - * @param string $url - * @param int $delay �����̏ꍇ�͎蓮�]���A����ȊO�̓Q�[�g�̎d�l�ɂ�� + * @param string $url + * @param int $delay �����̏ꍇ�͎蓮�]���A����ȊO�̓Q�[�g�̎d�l�ɂ�� * @return string */ static public function throughIme($url, $delay = null) @@ -738,8 +738,8 @@ static public function throughIme($url, $delay = null) /** * URL�ϊ��̐ݒ������ * - * @param string $type - * @param array $exceptions + * @param string $type + * @param array $exceptions * @param boolean $ignoreHttp * @return void * @see P2Ime::__construct() @@ -793,7 +793,7 @@ static public function isHostExample($host) static public function isHost2chs($host) { if (!array_key_exists($host, self::$_hostIs2chs)) { - self::$_hostIs2chs[$host] = (bool)preg_match('<^\\w+\\.(?:2ch\\.net|bbspink\\.com)$>', $host); + self::$_hostIs2chs[$host] = (bool)preg_match('<^\\w+\\.(?:2ch\\.net|5ch\\.net|bbspink\\.com)$>', $host); } return self::$_hostIs2chs[$host]; } @@ -807,13 +807,13 @@ static public function isHost2chs($host) * @param string $host * @return bool */ - static public function isHostVip2ch($host) - { - if (!array_key_exists($host, self::$_hostIsVip2ch)) { - self::$_hostIsVip2ch[$host] = (bool)preg_match('<^\\w+\\.(?:vip2ch\\.com)$>', $host); - } - return self::$_hostIsVip2ch[$host]; - } + static public function isHostVip2ch($host) + { + if (!array_key_exists($host, self::$_hostIsVip2ch)) { + self::$_hostIsVip2ch[$host] = (bool)preg_match('<^\\w+\\.(?:vip2ch\\.com)$>', $host); + } + return self::$_hostIsVip2ch[$host]; + } // }}} // {{{ isHostBe2chNet() @@ -826,7 +826,7 @@ static public function isHostVip2ch($host) */ static public function isHostBe2chNet($host) { - return ($host == 'be.2ch.net'); + return ($host == 'be.2ch.net' || $host == 'be.5ch.net'); /* if (!array_key_exists($host, self::$_hostIsBe2chNet)) { self::$_hostIsBe2chNet[$host] = ($host == 'be.2ch.net'); @@ -846,7 +846,7 @@ static public function isHostBe2chNet($host) */ static public function isNotUse2chAPI($host) { - return ($host == 'qb5.2ch.net' || $host == 'carpenter.2ch.net'); + return ($host == 'qb5.2ch.net' || $host == 'carpenter.2ch.net' || $host == 'qb5.5ch.net' || $host == 'carpenter.5ch.net'); } // }}} @@ -870,15 +870,15 @@ static public function isHostBbsPink($host) // {{{ isHostTor() /** - * host �� tor �n�� �Ȃ� true ��Ԃ� - * - * @access public - * @param string $host - * @return boolean - */ + * host �� tor �n�� �Ȃ� true ��Ԃ� + * + * @access public + * @param string $host + * @return boolean + */ static function isHostTor($host, $isGatewayMode = 99) { - switch($isGatewayMode){ + switch ($isGatewayMode) { case 0: $ret = (bool)preg_match('/\\.onion$/', $host); break; @@ -890,9 +890,9 @@ static function isHostTor($host, $isGatewayMode = 99) default: $ret = (bool)preg_match('/\\.(onion\\.cab|onion\\.city|onion\\.direct|onion\\.link|onion\\.nu|onion\\.to|onion\\.rip|onion)$/', $host); break; - } + } - return $ret; + return $ret; } // }}} @@ -962,7 +962,7 @@ static public function isHostJbbsShitaraba($in_host) /** * livedoor �����^���f���� : ������΂̃z�X�g���ύX�ɑΉ����ĕύX���� * - * @param string $in_str �z�X�g���ł�URL�ł��Ȃ�ł��ǂ� + * @param string $in_str �z�X�g���ł�URL�ł��Ȃ�ł��ǂ� * @return string */ static public function adjustHostJbbs($in_str) @@ -1121,7 +1121,7 @@ static public function recAccessLog($logfile, $maxline = 100, $format = 'dataphp if ($lines) { // �����s���� - while (sizeof($lines) > $maxline -1) { + while (sizeof($lines) > $maxline - 1) { array_pop($lines); } } else { @@ -1329,7 +1329,7 @@ static public function print403($msg = '') ERR; // IE�f�t�H���g�̃��b�Z�[�W��\�������Ȃ��悤�ɃX�y�[�X���o�� if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) { - for ($i = 0 ; $i < 512; $i++) { + for ($i = 0; $i < 512; $i++) { echo ' '; } } @@ -1376,11 +1376,11 @@ static public function scandir_r($dir) * * $targetDir����ŏI�X�V���$lifeTime�b�ȏソ�����t�@�C�����폜 * - * @param string $targetDir �K�[�x�b�W�R���N�V�����Ώۃf�B���N�g�� - * @param integer $lifeTime �t�@�C���̗L�������i�b�j - * @param string $prefix �Ώۃt�@�C�����̐ړ����i�I�v�V�����j - * @param string $suffix �Ώۃt�@�C�����̐ڔ����i�I�v�V�����j - * @param boolean $recurive �ċA�I�ɃK�[�x�b�W�R���N�V�������邩�ۂ��i�f�t�H���g�ł�false�j + * @param string $targetDir �K�[�x�b�W�R���N�V�����Ώۃf�B���N�g�� + * @param integer $lifeTime �t�@�C���̗L�������i�b�j + * @param string $prefix �Ώۃt�@�C�����̐ړ����i�I�v�V�����j + * @param string $suffix �Ώۃt�@�C�����̐ڔ����i�I�v�V�����j + * @param boolean $recurive �ċA�I�ɃK�[�x�b�W�R���N�V�������邩�ۂ��i�f�t�H���g�ł�false�j * @return array �폜�ɐ��������t�@�C���Ǝ��s�����t�@�C����ʁX�ɋL�^�����񎟌��̔z�� */ static public function garbageCollection($targetDir, @@ -1388,7 +1388,7 @@ static public function garbageCollection($targetDir, $prefix = '', $suffix = '', $recursive = false - ) + ) { $result = array('successed' => array(), 'failed' => array(), 'skipped' => array()); $expire = time() - $lifeTime; @@ -1401,7 +1401,9 @@ static public function garbageCollection($targetDir, $files = array(); $targetDir = realpath($targetDir) . DIRECTORY_SEPARATOR; foreach ($list as $filename) { - if ($filename == '.' || $filename == '..') { continue; } + if ($filename == '.' || $filename == '..') { + continue; + } $files[] = $targetDir . $filename; } } @@ -1471,8 +1473,8 @@ static public function session_gc() * (�o�[�W����1.0.0�ȍ~�AVar_Dump::display() �̑��������^�̂Ƃ� * ���ڕ\���������ɁA�_���v���ʂ�������Ƃ��ĕԂ�B) * - * @param array $info �e�[�u���ɂ������z�� - * @param integer $indent ���ʂ�HTML�����₷�����邽�߂̃C���f���g�� + * @param array $info �e�[�u���ɂ������z�� + * @param integer $indent ���ʂ�HTML�����₷�����邽�߂̃C���f���g�� * @return string ~
    */ static public function Info_Dump($info, $indent = 0) @@ -1481,16 +1483,18 @@ static public function Info_Dump($info, $indent = 0) $n = count($info); foreach ($info as $key => $value) { if (!is_object($value) && !is_resource($value)) { - for ($i = 0; $i < $indent; $i++) { $table .= "\t"; } + for ($i = 0; $i < $indent; $i++) { + $table .= "\t"; + } if ($n == 1 && $key === 0) { $table .= ''; - /*} elseif (preg_match('/^\w+$/', $key)) { - $table .= '' . $key . '';*/ + /*} elseif (preg_match('/^\w+$/', $key)) { + $table .= '' . $key . '';*/ } else { $table .= '' . $key . ''; } if (is_array($value)) { - $table .= self::Info_Dump($value, $indent+1); //�z��̏ꍇ�͍ċA�Ăяo���œW�J + $table .= self::Info_Dump($value, $indent + 1); //�z��̏ꍇ�͍ċA�Ăяo���œW�J } elseif ($value === true) { $table .= 'true'; } elseif ($value === false) { @@ -1516,7 +1520,9 @@ static public function Info_Dump($info, $indent = 0) $table .= '' . "\n"; } } - for ($i = 1; $i < $indent; $i++) { $table .= "\t"; } + for ($i = 1; $i < $indent; $i++) { + $table .= "\t"; + } $table .= ''; $table = str_replace('', ' - + diff --git a/rep2/spm_k.php b/rep2/spm_k.php index 6bc006da4..e0c111d4a 100644 --- a/rep2/spm_k.php +++ b/rep2/spm_k.php @@ -33,6 +33,7 @@ case 'res_quote': $_GET['resnum'] = $ktv; $_GET['inyou'] = ($_GET['ktool_name'] == 'res') ? -1 : 1; + $_GET['popup'] = 1; include $www_dir_s . 'post_form.php'; exit; case 'copy_quote': From 6b91b7f7d2fed3298778f624a6f0f7e229ddbdf0 Mon Sep 17 00:00:00 2001 From: killer4989 Date: Fri, 13 Oct 2017 01:34:11 +0900 Subject: [PATCH 267/339] =?UTF-8?q?bintan=20=E8=AA=AD=E3=81=BF=E8=BE=BC?= =?UTF-8?q?=E3=81=BF=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/P2Util.php b/lib/P2Util.php index cc08dbf9e..380c324b0 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -1885,13 +1885,21 @@ static public function detectThread($url = null) } // 2ch or pink by ula.cc(bintan / bekkanko) - http://choco.2ch.net/test/read.cgi/event/1027770702/ - } elseif (preg_match('<^https?://(?:(?:bintan|same)\\.ula\\.cc|ula\\.2ch\\.net)/test/(?:read\\.(?:cgi|html|so)|r\\.so) + } elseif (preg_match('<^https?://(?:(?:bintan|same)\\.ula\\.cc|ula\\.(?:2ch|5ch)\\.net)/test/(?:read\\.(?:cgi|html|so)|r\\.so) /(.+)/(\\w+)/([0-9]+)(?:/([^/]*))>x', $nama_url, $matches)) { $host = $matches[1]; $bbs = $matches[2]; $key = $matches[3]; $ls = (isset($matches[4]) && strlen($matches[4])) ? $matches[4] : ''; + // 2ch or pink by ula.cc(new bintan) - http://choco.2ch.net/test/read.cgi/event/1027770702/ + } elseif (preg_match('<^https?://(ula\\.(?:2ch|5ch)\\.net)/(?:2ch|5ch) + /(\\w+)/(.+)/(\\d+)(?:/([^/]*))>x', $nama_url, $matches)) { + $host = $matches[3]; + $bbs = $matches[2]; + $key = $matches[4]; + $ls = (isset($matches[5]) && strlen($matches[5])) ? $matches[5] : ''; + // 2ch or pink �ߋ����Ohtml - http://pc.2ch.net/mac/kako/1015/10153/1015358199.html } elseif (preg_match('<^(https?://(.+)(?:/[^/]+)?/(\\w+) /kako/\\d+(?:/\\d+)?/(\\d+)).html>x', $nama_url, $matches)) { From e9538e7a089d5228b4fc570dc19180eb75989303 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Fri, 13 Oct 2017 22:27:37 +0900 Subject: [PATCH 268/339] =?UTF-8?q?=E3=82=B9=E3=83=9E=E3=83=9B=EF=BC=9Amb?= =?UTF-8?q?=5Fconvert=5Fvariables=E3=81=8C=E5=A4=9A=E6=AC=A1=E5=85=83?= =?UTF-8?q?=E9=85=8D=E5=88=97=E3=81=AB=E5=AF=BE=E5=BF=9C=E3=81=97=E3=81=A6?= =?UTF-8?q?=E3=81=84=E3=81=AA=E3=81=84=E3=81=AE=E3=81=A7=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=20=E3=82=B9=E3=83=9E=E3=83=9B=EF=BC=9A=E6=9B=B8=E3=81=8D?= =?UTF-8?q?=E8=BE=BC=E3=81=BF=E6=99=82=E3=81=AB=E3=83=AA=E3=83=AD=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=81=97=E3=81=AA=E3=81=84=E4=B8=8D=E5=85=B7=E5=90=88?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/info_js.php | 8 +++++++- rep2/post.php | 9 ++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/rep2/info_js.php b/rep2/info_js.php index 85cb56485..49fcee513 100644 --- a/rep2/info_js.php +++ b/rep2/info_js.php @@ -62,7 +62,13 @@ function info_js_get_thread_info($host, $bbs, $key) */ function info_js_json_encode($values) { - mb_convert_variables('UTF-8', 'CP932', $values); + // mb_convert_variables�͖{���������z��ł̓����ۏ؂��Ă��Ȃ��̂� + // array_walk_recursive�ʼn񂷁B + // array_walk_recursive���������z��Ή����ĂȂ��͂������ǂƂ肠���������B�B�B + // https://bugs.php.net/bug.php?id=66964 + array_walk_recursive($values, function(&$value) { + mb_convert_variables('UTF-8', 'CP932', $value); + }); return json_encode($values); } diff --git a/rep2/post.php b/rep2/post.php index fd759938d..2c8970e40 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -592,9 +592,16 @@ function showPostMsg($isDone, $result_msg, $reload) } $kakunin_ht = ''; } else { - $kakunin_ht = <<�m�F

    EOP; + } } echo "\n"; From 547d9609859dcc006460051dcf170b195888c4b1 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Fri, 13 Oct 2017 22:35:13 +0900 Subject: [PATCH 269/339] v171013.2230 --- conf/conf.inc.php | 2 +- doc/README-774.txt | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 615d2c193..e61474980 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '171011.1515', // rep2�̃o�[�W���� + 'p2version' => '171013.2230', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/doc/README-774.txt b/doc/README-774.txt index 772beec6b..258d33951 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -72,6 +72,13 @@ PHP7 ��ChangeLog +171013.2230 +* �X�}�z�F�ꕔ�̊‹��ŃX���C�v���j���[�����삵�Ȃ��s��C�� +* �X�}�z:res_popup_reload�̐ݒ肪���f����Ȃ��s��C�� +* PHP7.1�ŃX���^�C�������g�p�����Warning���o��s��C�� +* cURLMulti���L��̂�fetch-subject-txt.php��PECL_HTTP�`�F�b�N���폜 +* expack.ic2.enabled��2�ɂ����‹���PC����A�N�Z�X�����fatal error���o��s��C�� + 171011.1515 * �X�}�z�pread�̃c�[���o�[���|�b�v�A�b�v���j���[�`���ɕύX * �X�}�z�pread�̊O�������N��target="_blank"���w�� From b6046eec6dc40ed1c0172ec68a9d974b8f797a5a Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Sat, 14 Oct 2017 21:40:06 +0900 Subject: [PATCH 270/339] =?UTF-8?q?=E3=82=B9=E3=83=9E=E3=83=9B=EF=BC=9A?= =?UTF-8?q?=E6=96=B0=E7=9D=80=E3=81=BE=E3=81=A8=E3=82=81=E8=AA=AD=E3=81=BF?= =?UTF-8?q?=E3=81=8B=E3=82=89=E6=9B=B8=E3=81=8D=E8=BE=BC=E3=82=93=E3=81=A0?= =?UTF-8?q?=E9=9A=9B=E3=81=AB=E3=83=AA=E3=83=AD=E3=83=BC=E3=83=89=E3=81=97?= =?UTF-8?q?=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=20=E6=96=B0=E7=9D=80=E3=81=BE=E3=81=A8=E3=82=81=E8=AA=AD?= =?UTF-8?q?=E3=81=BF=E3=81=8B=E3=82=89=E6=9B=B8=E3=81=8D=E8=BE=BC=E3=82=93?= =?UTF-8?q?=E3=81=A0=E9=9A=9B=E3=81=AB=E6=9B=B8=E3=81=8D=E8=BE=BC=E3=81=BF?= =?UTF-8?q?=E3=82=A6=E3=82=A4=E3=83=B3=E3=83=89=E3=82=A6=E3=81=8C=E6=B6=88?= =?UTF-8?q?=E3=81=88=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ShowThreadI.php | 4 ++-- rep2/js/spm_iphone.js | 23 +++++++++++++++++++++++ rep2/post.php | 24 ++++++++++++++---------- 3 files changed, 39 insertions(+), 12 deletions(-) diff --git a/lib/ShowThreadI.php b/lib/ShowThreadI.php index 038a13f02..9d072354d 100644 --- a/lib/ShowThreadI.php +++ b/lib/ShowThreadI.php @@ -581,8 +581,8 @@ static public function getSpmElementHtml()
    >>???
    - ����Ƀ��X - ���p���ă��X + ����Ƀ��X + ���p���ă��X EOP; if ($_conf['expack.aas.enabled']) { $spm .= <<�^�O����CDATA�Ƃ��Ĉ����邽�߁A&�ɂ��Ă͂����Ȃ� $location_noenc = str_replace('&', '&', $location_ht); + // �|�b�v�A�b�v�͎����I�ɕ‚���R�[�h��lj� if ($popup) { $popup_ht = << // EOJS; } else { + // �|�b�v�A�b�v�ł͖����Ƃ��͊ۂ��ƃ����[�h $_conf['extra_headers_ht'] .= << EOP; @@ -587,15 +594,12 @@ function showPostMsg($isDone, $result_msg, $reload) EOSCRIPT; } - if ($reload) { - echo $popup_ht; - } + + echo $popup_ht; $kakunin_ht = ''; } else { if($_conf['iphone']) { - if ($reload) { - echo $popup_ht; - } + echo $popup_ht; $kakunin_ht = ''; } else { $kakunin_ht = << Date: Sun, 15 Oct 2017 10:14:03 +0900 Subject: [PATCH 271/339] =?UTF-8?q?PC:subject=E3=81=AE=E3=83=81=E3=82=A7?= =?UTF-8?q?=E3=83=83=E3=82=AF=E3=83=9C=E3=83=83=E3=82=AF=E3=82=B9=E3=81=8C?= =?UTF-8?q?=E6=A9=9F=E8=83=BD=E3=81=97=E3=81=AA=E3=81=84=E4=B8=8D=E5=85=B7?= =?UTF-8?q?=E5=90=88=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/sb_print.inc.php | 2 +- rep2/js/subject.js | 18 ++++++------------ 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/lib/sb_print.inc.php b/lib/sb_print.inc.php index 9655424fd..90c0ad617 100644 --- a/lib/sb_print.inc.php +++ b/lib/sb_print.inc.php @@ -160,7 +160,7 @@ function sb_print($aThreadList) // �`�F�b�N�{�b�N�X if ($checkbox_bool) { echo <<\n +\n EOP; } // No. diff --git a/rep2/js/subject.js b/rep2/js/subject.js index fad98fbbf..eb64127c4 100644 --- a/rep2/js/subject.js +++ b/rep2/js/subject.js @@ -124,18 +124,6 @@ rep2.subject.resizeTitleCell = function () { } }; -// }}} -// {{{ rep2.subject.checkAll() - -rep2.subject.checkAll = function () { - var checkboxes = $('.threadlist input:checkbox[name!=allbox]'); - if ($('#allbox').attr('checked')) { - checkboxes.attr('checked', 'checked'); - } else { - checkboxes.removeAttr('checked'); - } -}; - // }}} // {{{ rep2.subject.offRecent() @@ -234,9 +222,11 @@ rep2.subject.setup = function (group_number) { }); // IE�΍� + /* jQuery3.x�ō폜���ꂽ�̂ŃR�����g�A�E�g if ($.browser.msie) { cells.contents().filter('[nodeType=3]').wrap(''); } + */ }; // }}} @@ -259,6 +249,10 @@ $(document).ready(function(){ i = 0; } + $('#allbox').on('change', function() { + $('.threadlist input:checkbox[name!=allbox]').prop('checked', this.checked); + }); + _.setWindowTitle(); _.resizeTitleCell(); From 043da7f68d4ac415c449bcc88733ed1d6927af86 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Sun, 15 Oct 2017 22:01:42 +0900 Subject: [PATCH 272/339] =?UTF-8?q?2chapi=5Fpost=E3=81=8CON=E3=81=AE?= =?UTF-8?q?=E6=99=82=E3=81=AF=E3=80=81=E6=9B=B8=E3=81=8D=E8=BE=BC=E3=81=BF?= =?UTF-8?q?=E6=99=82=E3=81=AB=E6=B5=AA=E4=BA=BA=E3=83=AD=E3=82=B0=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E3=81=97=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/post.php | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/rep2/post.php b/rep2/post.php index 55273465d..cb68da647 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -154,12 +154,19 @@ // {{{ 2ch�Ł����O�C�����Ȃ�sid�lj� -if (!empty($_POST['maru']) and P2Util::isHost2chs($host) && file_exists($_conf['sid2ch_php'])) { +if (!empty($_POST['maru']) and P2Util::isHost2chs($host)) { + $maru_time = 0; + + if (file_exists($_conf['sid2ch_php'])) { + $maru_time = filemtime($_conf['sid2ch_php']); + } // ���O�C����A24���Ԉȏ�o�߂��Ă����玩���ă��O�C�� - if (file_exists($_conf['idpw2ch_php']) && filemtime($_conf['sid2ch_php']) < time() - 60*60*24) { - require_once P2_LIB_DIR . '/login2ch.inc.php'; - login2ch(); + if (file_exists($_conf['idpw2ch_php']) && $maru_time < time() - 60*60*24) { + if($_conf['2chapi_use'] == 0 && $_conf['2chapi_post'] == 0) { + require_once P2_LIB_DIR . '/login2ch.inc.php'; + login2ch(); + } } if($_conf['2chapi_use'] == 1 && $_conf['2chapi_post'] ==1) { From 1fbbf71d2213cda9fb7d663516ab621a9ffc9607 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Mon, 16 Oct 2017 00:32:45 +0900 Subject: [PATCH 273/339] =?UTF-8?q?=E3=82=B9=E3=83=9E=E3=83=9B=20read?= =?UTF-8?q?=EF=BC=9A=E3=83=9D=E3=83=83=E3=83=97=E3=82=A2=E3=83=83=E3=83=97?= =?UTF-8?q?=E3=81=AE=E9=96=89=E3=81=98=E3=82=8B=E3=83=9C=E3=82=BF=E3=83=B3?= =?UTF-8?q?=E3=82=92=E6=8A=BC=E3=81=97=E3=81=9F=E9=9A=9B=E3=81=AB=E4=BB=96?= =?UTF-8?q?=E3=81=AE=E3=83=9D=E3=83=83=E3=83=97=E3=82=A2=E3=83=83=E3=83=97?= =?UTF-8?q?=E3=82=92=E5=B7=BB=E3=81=8D=E6=B7=BB=E3=81=88=E3=81=AB=E9=96=89?= =?UTF-8?q?=E3=81=98=E3=82=8B=E4=B8=8D=E5=85=B7=E5=90=88=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/js/respopup_iphone.js | 66 +++++++++++++++++++++++--------------- 1 file changed, 40 insertions(+), 26 deletions(-) diff --git a/rep2/js/respopup_iphone.js b/rep2/js/respopup_iphone.js index aed07a1f4..97f1b55da 100644 --- a/rep2/js/respopup_iphone.js +++ b/rep2/js/respopup_iphone.js @@ -28,7 +28,7 @@ var ipoputil = {}; * @param {Element} obj * @return {String} */ -ipoputil.getZ = function() { +ipoputil.getZ = function(obj) { return (10 + _IRESPOPG.serial).toString(); }; @@ -58,13 +58,13 @@ ipoputil.getActivator = function(obj) { * @param {String} key * @return void */ -ipoputil.getDeactivator = function($obj, key) { - return (function(){ +ipoputil.getDeactivator = function(obj, key) { + if(obj!=null &&obj.parentNode !=null) { + $(document).off('click.'+obj.id); delete _IRESPOPG.hash[key]; - //obj.parentNode.removeChild(obj); - $obj.remove(); - delete $obj; - }); + obj.parentNode.removeChild(obj); + delete obj; + } }; // }}} @@ -81,37 +81,39 @@ ipoputil.getDeactivator = function($obj, key) { * @todo use asynchronous request */ ipoputil.callback = function(req, url, popid, yOffset) { - var $container = $("
    "); - var $closer = $(""); - - $container.attr("id",popid); - $container.addClass("respop"); - $container.html(req.responseText); + var container = document.createElement('div'); + var closer = document.createElement('img'); + container.id = popid; + container.className = 'respop'; + container.innerHTML = req.responseText; /* var rx = req.responseXML; while (rx.hasChildNodes()) { container.appendChild(document.importNode(rx.removeChild(rx.firstChild), true)); } */ - $container.css('top',yOffset.toString() + 'px'); - $container.css('z-index',ipoputil.getZ()); - //respop���̓�����������ɂ��Ă��� - $container.skOuterClick(ipoputil.getDeactivator($container, url),$("[id^=_respop]"),$('.close-button'),$('#ic2-info-body'),$('#ic2-info-closer'),$('#spm'),$('#spm-closer')); + container.style.top = yOffset.toString() + 'px'; + container.style.zIndex = ipoputil.getZ(); + //container.onclick = ipoputil.getActivator(container); + + closer.className = 'close-button'; + closer.setAttribute('src', 'img/iphone/close.png'); - $closer.addClass('close-button'); - $closer.attr('src', 'img/iphone/close.png'); - $closer.click(ipoputil.getDeactivator($container, url)); + $(closer).on('click', function(event) { + ipoputil.getDeactivator(container, url); + }); - $container.append($closer); - $(document.body).append($container); + container.appendChild(closer); + document.body.appendChild(container); - iutil.modifyExternalLink($container[0]); + //iutil.modifyInternalLink(container); + iutil.modifyExternalLink(container); - _IRESPOPG.hash[url] = $container[0]; + _IRESPOPG.hash[url] = container; var lastres = document.evaluate('./div[@class="res" and position() = last()]', - $container[0], + container, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null @@ -134,8 +136,20 @@ ipoputil.callback = function(req, url, popid, yOffset) { var i; for (i = 0; i < _IRESPOPG.callbacks.length; i++) { - _IRESPOPG.callbacks[i]($container[0]); + _IRESPOPG.callbacks[i](container); } + + //�E�C���h�E�S�̂��N���b�N�����Ƃ� + $(document).on('click.'+popid, function(event) { + // ���X�|�b�v�A�b�v�ƁASPM���N���b�N�����Ƃ��́A�‚��Ȃ� + if (!$(event.target).closest('.respop').length && + !$(event.target).closest('#spm-header').length && + !$(event.target).closest('.input-group').length) { + if(true) { + ipoputil.getDeactivator(container, url); + } + } + }); }; // }}} From c2005173dc6b1f3780221e7f0d425a7d6bc47ed3 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Mon, 16 Oct 2017 00:41:52 +0900 Subject: [PATCH 274/339] =?UTF-8?q?ic2=E3=81=AE=E6=83=85=E5=A0=B1=E3=83=9D?= =?UTF-8?q?=E3=83=83=E3=83=97=E3=82=A2=E3=83=83=E3=83=97=E3=81=A7=E9=96=89?= =?UTF-8?q?=E3=81=98=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/js/respopup_iphone.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/rep2/js/respopup_iphone.js b/rep2/js/respopup_iphone.js index 97f1b55da..c75fbe6ac 100644 --- a/rep2/js/respopup_iphone.js +++ b/rep2/js/respopup_iphone.js @@ -142,12 +142,8 @@ ipoputil.callback = function(req, url, popid, yOffset) { //�E�C���h�E�S�̂��N���b�N�����Ƃ� $(document).on('click.'+popid, function(event) { // ���X�|�b�v�A�b�v�ƁASPM���N���b�N�����Ƃ��́A�‚��Ȃ� - if (!$(event.target).closest('.respop').length && - !$(event.target).closest('#spm-header').length && - !$(event.target).closest('.input-group').length) { - if(true) { - ipoputil.getDeactivator(container, url); - } + if (!$(event.target).closest('.respop,#spm-header,#ic2-info-body,.input-group').length) { + ipoputil.getDeactivator(container, url); } }); }; From 4907729dca66a0afee323e85be989b86e3c3eccd Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Wed, 18 Oct 2017 00:17:58 +0900 Subject: [PATCH 275/339] =?UTF-8?q?2chv.tora3.net=E3=81=8CSSL=E5=BF=85?= =?UTF-8?q?=E9=A0=88=E3=81=AB=E3=81=AA=E3=81=A3=E3=81=9F=E3=81=AE=E3=81=A7?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/login2ch.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/login2ch.inc.php b/lib/login2ch.inc.php index 475f415dd..253225ed4 100644 --- a/lib/login2ch.inc.php +++ b/lib/login2ch.inc.php @@ -24,7 +24,7 @@ function login2ch() } $auth2ch_url= http_build_url(array( - "scheme" => $_conf['2chapi_ssl.auth']?"https":"http", + "scheme" => 'https', "host" => "2chv.tora3.net", "path" => "futen.cgi")); From fa4a0565bdecb1b4bf9876358144a93bab3e8d41 Mon Sep 17 00:00:00 2001 From: killer4989 Date: Fri, 13 Oct 2017 01:34:11 +0900 Subject: [PATCH 276/339] =?UTF-8?q?bintan=20=E8=AA=AD=E3=81=BF=E8=BE=BC?= =?UTF-8?q?=E3=81=BF=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/P2Util.php b/lib/P2Util.php index 596b7bfcc..0a9247232 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -1885,13 +1885,21 @@ static public function detectThread($url = null) } // 2ch or pink by ula.cc(bintan / bekkanko) - http://choco.2ch.net/test/read.cgi/event/1027770702/ - } elseif (preg_match('<^https?://(?:(?:bintan|same)\\.ula\\.cc|ula\\.2ch\\.net)/test/(?:read\\.(?:cgi|html|so)|r\\.so) + } elseif (preg_match('<^https?://(?:(?:bintan|same)\\.ula\\.cc|ula\\.(?:2ch|5ch)\\.net)/test/(?:read\\.(?:cgi|html|so)|r\\.so) /(.+)/(\\w+)/([0-9]+)(?:/([^/]*))>x', $nama_url, $matches)) { $host = $matches[1]; $bbs = $matches[2]; $key = $matches[3]; $ls = (isset($matches[4]) && strlen($matches[4])) ? $matches[4] : ''; + // 2ch or pink by ula.cc(new bintan) - http://choco.2ch.net/test/read.cgi/event/1027770702/ + } elseif (preg_match('<^https?://(ula\\.(?:2ch|5ch)\\.net)/(?:2ch|5ch) + /(\\w+)/(.+)/(\\d+)(?:/([^/]*))>x', $nama_url, $matches)) { + $host = $matches[3]; + $bbs = $matches[2]; + $key = $matches[4]; + $ls = (isset($matches[5]) && strlen($matches[5])) ? $matches[5] : ''; + // 2ch or pink �ߋ����Ohtml - http://pc.2ch.net/mac/kako/1015/10153/1015358199.html } elseif (preg_match('<^(https?://(.+)(?:/[^/]+)?/(\\w+) /kako/\\d+(?:/\\d+)?/(\\d+)).html>x', $nama_url, $matches)) { From 2df4a4e5e601809ebcd0caeee716a56a985724d2 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Wed, 18 Oct 2017 15:49:26 +0900 Subject: [PATCH 277/339] v171018.1540 --- conf/conf.inc.php | 2 +- doc/README-774.txt | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index e61474980..6586b7500 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '171013.2230', // rep2�̃o�[�W���� + 'p2version' => '171018.1540', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/doc/README-774.txt b/doc/README-774.txt index 258d33951..5b8a7057b 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -72,6 +72,13 @@ PHP7 ��ChangeLog +* bintan �ǂݍ��ݑΉ� +* �Q�l���O�C���p��2chv.tora3.net��SSL�K�{�ɂȂ����̂őΉ� +* �X�}�z read�F�|�b�v�A�b�v�̕‚���{�^�����������ۂɑ��̃|�b�v�A�b�v�������Y���ɕ‚���s��C�� +* subject�̃`�F�b�N�{�b�N�X���@�\���Ȃ��s��C�� +* �X�}�z�F�V���܂Ƃߓǂ݂��珑�����񂾍ۂɃ����[�h���Ȃ��悤�ɕύX +* �V���܂Ƃߓǂ݂��珑�����񂾍ۂɏ������݃E�C���h�E��������悤�ɕύX + 171013.2230 * �X�}�z�F�ꕔ�̊‹��ŃX���C�v���j���[�����삵�Ȃ��s��C�� * �X�}�z:res_popup_reload�̐ݒ肪���f����Ȃ��s��C�� From 206b9b16c0cbbb629f2422c97426f6effecaed1f Mon Sep 17 00:00:00 2001 From: killer4989 Date: Thu, 19 Oct 2017 15:10:53 +0900 Subject: [PATCH 278/339] =?UTF-8?q?fix=20=E6=B5=AA=E4=BA=BA=E3=81=AE?= =?UTF-8?q?=E6=9C=89=E5=8A=B9=E6=80=A7=E3=82=92=E7=A2=BA=E8=AA=8D=E3=81=A7?= =?UTF-8?q?=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/P2Util.php b/lib/P2Util.php index 380c324b0..752d02cde 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -2204,7 +2204,7 @@ function checkRoninExpiration() } try { - $req = P2Commun::getHTTPRequest2($url, HTTP_Request2::METHOD_POST); + $req = P2Commun::createHTTPRequest($url, HTTP_Request2::METHOD_POST); $req->setHeader('User-Agent', $agent); $req->setHeader('X-2ch-UA', $x_2ch_ua); From fbaf255351110f9426f214227cfb25d384b956c5 Mon Sep 17 00:00:00 2001 From: killer4989 Date: Thu, 19 Oct 2017 15:22:24 +0900 Subject: [PATCH 279/339] =?UTF-8?q?bintan=20=E8=AA=AD=E3=81=BF=E8=BE=BC?= =?UTF-8?q?=E3=81=BF=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/P2Util.php b/lib/P2Util.php index 752d02cde..ae4a39ef7 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -1885,7 +1885,7 @@ static public function detectThread($url = null) } // 2ch or pink by ula.cc(bintan / bekkanko) - http://choco.2ch.net/test/read.cgi/event/1027770702/ - } elseif (preg_match('<^https?://(?:(?:bintan|same)\\.ula\\.cc|ula\\.(?:2ch|5ch)\\.net)/test/(?:read\\.(?:cgi|html|so)|r\\.so) + } elseif (preg_match('<^https?://(?:(?:bintan|same)\\.ula\\.cc|ula\\.(?:(?:2ch|5ch)\\.net|bbspink\\.com))/test/(?:read\\.(?:cgi|html|so)|r\\.so) /(.+)/(\\w+)/([0-9]+)(?:/([^/]*))>x', $nama_url, $matches)) { $host = $matches[1]; $bbs = $matches[2]; @@ -1893,7 +1893,7 @@ static public function detectThread($url = null) $ls = (isset($matches[4]) && strlen($matches[4])) ? $matches[4] : ''; // 2ch or pink by ula.cc(new bintan) - http://choco.2ch.net/test/read.cgi/event/1027770702/ - } elseif (preg_match('<^https?://(ula\\.(?:2ch|5ch)\\.net)/(?:2ch|5ch) + } elseif (preg_match('<^https?://(ula\\.(?:(?:2ch|5ch)\\.net|bbspink\\.com))/(?:2ch|5ch) /(\\w+)/(.+)/(\\d+)(?:/([^/]*))>x', $nama_url, $matches)) { $host = $matches[3]; $bbs = $matches[2]; From b1b3534c583173d283fbb91af455a17ffe4e9dab Mon Sep 17 00:00:00 2001 From: killer4989 Date: Thu, 19 Oct 2017 17:38:41 +0900 Subject: [PATCH 280/339] =?UTF-8?q?5ch=20=E3=81=A7=E3=81=AE=E6=8F=90?= =?UTF-8?q?=E4=BE=9B=E7=B5=82=E4=BA=86=E3=83=A1=E3=83=83=E3=82=BB=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 1329d345a..6c521b8ed 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -236,6 +236,8 @@ protected function _downloadDat2chAPI($uaMona, $SID2ch, $from_bytes) { return false; } elseif (mb_strpos ($firstmsg, "�Q�����˂� ��<><>2015/03/13(��) 00:00:00.00 ID:????????<> 3��13�����Q") === 0) { return $this->_downloadDat2chNotFound ('404'); + } elseif (mb_strpos ($firstmsg, "5�����˂� ��<><>2017/10/01(��) 00:00:00.00 ID:???<> ���q�l����") === 0) { + return $this->_downloadDat2chNotFound ('404'); } unset ($firstmsg); @@ -425,6 +427,10 @@ protected function _downloadDat2ch($from_bytes) { $this->getdat_error_msg_ht .= "

    rep2 error: �ƒT�[�o����ڑ������ۂ���܂���
    rep2 info: 2�����˂��DAT�񋟂͏I�����܂���

    "; $this->diedat = true; return false; + } elseif (mb_strpos ($firstmsg, "5�����˂� ��<><>2017/10/01(��) 00:00:00.00 ID:???<> ���q�l����") === 0) { + $this->getdat_error_msg_ht .= "

    rep2 error: �ƒT�[�o����ڑ������ۂ���܂���
    rep2 info: 2�����˂��DAT�񋟂͏I�����܂���

    "; + $this->diedat = true; + return false; } unset ($firstmsg); } From 832f849ee04eadc3255038ae5d7b6a488c615d79 Mon Sep 17 00:00:00 2001 From: killer4989 Date: Thu, 19 Oct 2017 17:43:44 +0900 Subject: [PATCH 281/339] =?UTF-8?q?=E8=82=A5=E5=A4=A7=E5=8C=96=E3=81=97?= =?UTF-8?q?=E3=81=9F=20P2Util=20=E3=81=8B=E3=82=89=E3=83=9B=E3=82=B9?= =?UTF-8?q?=E3=83=88=E5=88=A4=E5=AE=9A=E9=96=A2=E4=BF=82=E3=81=AE=E6=A9=9F?= =?UTF-8?q?=E8=83=BD=E3=82=92=20P2BbsType=20=E3=81=AB=E7=A7=BB=E5=8B=95(?= =?UTF-8?q?=E7=AC=AC1=E5=BC=BE)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2BbsType.php | 433 ++++++++++++++++++++++++++++++++++++++++++++ lib/P2CurlMulti.php | 8 +- lib/P2HttpExt.php | 2 +- lib/P2Util.php | 102 ++--------- lib/SettingTxt.php | 2 +- lib/SubjectTxt.php | 2 +- lib/Thread.php | 2 +- lib/ThreadRead.php | 2 +- rep2/post.php | 6 +- rep2/subject.php | 2 +- 10 files changed, 463 insertions(+), 98 deletions(-) create mode 100644 lib/P2BbsType.php diff --git a/lib/P2BbsType.php b/lib/P2BbsType.php new file mode 100644 index 000000000..accb99f6f --- /dev/null +++ b/lib/P2BbsType.php @@ -0,0 +1,433 @@ +', $host); + } + return self::$_hostIs2ch[$host]; + } + + // }}} + // {{{ isHostBe2chNet() + + /** + * host �� be.2ch.net �Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isHostBe2chNet($host) + { + return $host == 'be.2ch.net'; + } + + // }}} + // {{{ isNotUse2chAPI() + + /** + * host �� API ��p���Ȃ��Ă��擾�ł���ꍇ�Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isNotUse2chAPI($host) + { + return ($host == 'qb5.2ch.net' || $host == 'carpenter.2ch.net'); + } + + // }}} + // {{{ isHost5ch() + + /** + * host �� 5ch �Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isHost5ch($host) + { + if (!array_key_exists($host, self::$_hostIs5ch)) { + self::$_hostIs5ch[$host] = (bool)preg_match('<^\\w+\\.(?:5ch\\.net)$>', $host); + } + return self::$_hostIs5ch[$host]; + } + + // }}} + // {{{ isHostBe5chNet() + + /** + * host �� be.2ch.net �Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isHostBe5chNet($host) + { + return $host == 'be.5ch.net'; + } + + // }}} + // {{{ isNotUse5chAPI() + + /** + * host �� API ��p���Ȃ��Ă��擾�ł���ꍇ�Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isNotUse5chAPI($host) + { + return ($host == 'qb5.5ch.net' || $host == 'carpenter.5ch.net'); + } + + // }}} + // {{{ isHostBbsPink() + + /** + * host �� bbspink �Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isHostBbsPink($host) + { + if (!array_key_exists($host, self::$_hostIsBbsPink)) { + self::$_hostIsBbsPink[$host] = (bool)preg_match('<^\\w+\\.bbspink\\.com$>', $host); + } + return self::$_hostIsBbsPink[$host]; + } + + // }}} + // {{{ isHost2chSc() + + /** + * host �� 2ch.sc �Ȃ� true ��Ԃ� + * + * @param string $host + * @return boolean + */ + static public function isHost2chSc($host) + { + if (!array_key_exists($host, self::$_hostIs2chSc)) { + self::$_hostIs2chSc[$host] = (bool)preg_match('/\\.(2ch\\.sc)$/', $host); + } + return self::$_hostIs2chSc[$host]; + } + + // }}} + // {{{ isHostOpen2ch() + + /** + * host �� ���[�Ղ�2ch �Ȃ� true ��Ԃ� + * + * @param string $host + * @return boolean + */ + static public function isHostOpen2ch($host) + { + if (!array_key_exists($host, self::$_hostIsOpen2ch)) { + self::$_hostIsOpen2ch[$host] = (bool)preg_match('/\\.(open2ch\\.net)$/', $host); + } + return self::$_hostIsOpen2ch[$host]; + } + + // }}} + // {{{ isHostMachiBbs() + + /** + * host �� machibbs �Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isHostMachiBbs($host) + { + if ($host === "machi.to") { + return true; + } + + if (!array_key_exists($host, self::$_hostIsMachiBbs)) { + self::$_hostIsMachiBbs[$host] = (bool)preg_match('<^\\w+\\.machi(?:bbs\\.com|\\.to)$>', $host); + } + return self::$_hostIsMachiBbs[$host]; + } + + // }}} + // {{{ isHostMachiBbsNet() + + /** + * host �� machibbs.net �܂��r�˂��� �Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isHostMachiBbsNet($host) + { + if (!array_key_exists($host, self::$_hostIsMachiBbsNet)) { + self::$_hostIsMachiBbsNet[$host] = (bool)preg_match('<^\\w+\\.machibbs\\.net$>', $host); + } + return self::$_hostIsMachiBbsNet[$host]; + } + + // }}} + // {{{ isHostJbbsShitaraba() + + /** + * host �� livedoor �����^���f���� : ������� �Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isHostJbbsShitaraba($in_host) + { + if (!array_key_exists($in_host, self::$_hostIsJbbsShitaraba)) { + if ($in_host == 'rentalbbs.livedoor.com') { + self::$_hostIsJbbsShitaraba[$in_host] = true; + } elseif (preg_match('<^jbbs\\.(?:shitaraba\\.(?:net|com)|livedoor\\.(?:com|jp))(?:/|$)>', $in_host)) { + self::$_hostIsJbbsShitaraba[$in_host] = true; + } else { + self::$_hostIsJbbsShitaraba[$in_host] = false; + } + } + return self::$_hostIsJbbsShitaraba[$in_host]; + } + + // }}} + // {{{ adjustHostJbbs() + + /** + * livedoor �����^���f���� : ������΂̃z�X�g���ύX�ɑΉ����ĕύX���� + * + * @param string $in_str �z�X�g���ł�URL�ł��Ȃ�ł��ǂ� + * @return string + */ + static public function adjustHostJbbs($in_str) + { + return preg_replace('<(^|/)jbbs\\.(?:shitaraba|livedoor)\\.(?:net|com)(/|$)>', '\\1jbbs.shitaraba.net\\2', $in_str, 1); + } + + // }}} + // {{{ isHostTor() + + /** + * host �� tor �n�� �Ȃ� true ��Ԃ� + * + * @access public + * @param string $host + * @return boolean + */ + static function isHostTor($host, $isGatewayMode = 99) + { + switch ($isGatewayMode) { + case 0: + $ret = (bool)preg_match('/\\.onion$/', $host); + break; + + case 1: + $ret = (bool)preg_match('/\\.(onion\\.cab|onion\\.city|onion\\.direct|onion\\.link|onion\\.nu|onion\\.to|onion\\.rip)$/', $host); + break; + + default: + $ret = (bool)preg_match('/\\.(onion\\.cab|onion\\.city|onion\\.direct|onion\\.link|onion\\.nu|onion\\.to|onion\\.rip|onion)$/', $host); + break; + } + + return $ret; + } + + // }}} + // {{{ isHostVip2ch() + + /** + * host �� vip2ch �Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isHostVip2ch($host) + { + if (!array_key_exists($host, self::$_hostIsVip2ch)) { + self::$_hostIsVip2ch[$host] = (bool)preg_match('<^\\w+\\.(?:vip2ch\\.com)$>', $host); + } + return self::$_hostIsVip2ch[$host]; + } + + // }}} + // {{{ isUrlWikipediaJa() + + /** + * URL���E�B�L�y�f�B�A���{��ł̋L���Ȃ�true��Ԃ� + */ + static public function isUrlWikipediaJa($url) + { + return (strncmp($url, 'http://ja.wikipedia.org/wiki/', 29) == 0); + } + + // }}} +} + +// }}} + +/* + * Local Variables: + * mode: php + * coding: cp932 + * tab-width: 4 + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ +// vim: set syn=php fenc=cp932 ai et ts=4 sw=4 sts=4 fdm=marker: diff --git a/lib/P2CurlMulti.php b/lib/P2CurlMulti.php index fb43d802c..bb28e1ccb 100644 --- a/lib/P2CurlMulti.php +++ b/lib/P2CurlMulti.php @@ -65,15 +65,15 @@ private function add($subjects, $force = false) { curl_setopt($this->ch[$key], CURLOPT_MAXCONNECTS, $_conf['expack.curl_per_host']); // User-Agent - if(P2Util::isHost2chs($host) && !P2Util::isNotUse2chAPI($host) && $_conf['2chapi_use']){ + if(P2BbsType::isHost2chs($host) && !P2BbsType::isNotUse2chsAPI($host) && $_conf['2chapi_use']){ $user_agent = sprintf ($_conf['2chapi_ua.read'], $_conf['2chapi_appname']); } else { - $user_agent = P2Commun::getP2UA(true, P2Util::isHost2chs($purl['host'])); + $user_agent = P2Commun::getP2UA(true, P2BbsType::isHost2chs($purl['host'])); } curl_setopt($this->ch[$key], CURLOPT_USERAGENT, $user_agent); // �v���L�V - if ($_conf['tor_use'] && P2Util::isHostTor($purl['host'], 0)) { // Tor(.onion)��Tor�p�̐ݒ���Z�b�g + if ($_conf['tor_use'] && P2BbsType::isHostTor($purl['host'], 0)) { // Tor(.onion)��Tor�p�̐ݒ���Z�b�g $tor_user_info = sprintf("%s%s@", $_conf['tor_proxy_user'], empty($_conf['tor_proxy_password']) ? "" : ":{$_conf['tor_proxy_password']}"); $tor_address = "{$_conf['tor_proxy_host']}:{$_conf['tor_proxy_port']}"; $address = sprintf("http://%s%s", strpos($tor_user_info, "@") === 0 ? "" : $tor_user_info, $tor_address); @@ -171,7 +171,7 @@ private function getResult() { $data = curl_multi_getcontent($ch_array); $header_size = $tmp['header_size']; - if (P2Util::isHostJbbsShitaraba($host) || P2Util::isHostBe2chNet($host)) { + if (P2BbsType::isHostJbbsShitaraba($host) || P2BbsType::isHostBe2chs($host)) { $data = mb_convert_encoding($data, 'CP932', 'CP51932'); } diff --git a/lib/P2HttpExt.php b/lib/P2HttpExt.php index e6d6fcd2c..5503b5363 100644 --- a/lib/P2HttpExt.php +++ b/lib/P2HttpExt.php @@ -931,7 +931,7 @@ static public function fetchSubjectTxt($subjects, $force = false) $url = 'http://' . $host . '/' . $bbs . '/subject.txt'; - if (P2Util::isHostJbbsShitaraba($host) || P2Util::isHostBe2chNet($host)) { + if (P2Util::isHostJbbsShitaraba($host) || P2BbsType::isHostBe2chs($host)) { if ($eucjp2sjis === null) { $eucjp2sjis = new P2HttpCallback_SaveEucjpAsSjis(); } diff --git a/lib/P2Util.php b/lib/P2Util.php index ae4a39ef7..56d3344af 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -802,7 +802,7 @@ static public function normalizeHostName($host) */ static public function isHostExample($host) { - return (bool)preg_match('/(?:^|\\.)example\\.(?:com|net|org|jp)$/i', $host); + return P2BbsType::isHostExample($host); } // }}} @@ -816,7 +816,7 @@ static public function isHostExample($host) */ static public function isHost2chs($host) { - return self::isHost2ch($host) || self::isHost5ch($host) || self::isHostBbsPink($host); + return P2BbsType::isHost2chs($host); } // }}} @@ -830,10 +830,7 @@ static public function isHost2chs($host) */ static public function isHost2ch($host) { - if (!array_key_exists($host, self::$_hostIs2ch)) { - self::$_hostIs2ch[$host] = (bool)preg_match('<^\\w+\\.(?:2ch\\.net)$>', $host); - } - return self::$_hostIs2ch[$host]; + return P2BbsType::isHost2ch($host); } // }}} @@ -847,10 +844,7 @@ static public function isHost2ch($host) */ static public function isHost5ch($host) { - if (!array_key_exists($host, self::$_hostIs5ch)) { - self::$_hostIs5ch[$host] = (bool)preg_match('<^\\w+\\.(?:5ch\\.net)$>', $host); - } - return self::$_hostIs5ch[$host]; + return P2BbsType::isHost5ch($host); } // }}} @@ -864,10 +858,7 @@ static public function isHost5ch($host) */ static public function isHostVip2ch($host) { - if (!array_key_exists($host, self::$_hostIsVip2ch)) { - self::$_hostIsVip2ch[$host] = (bool)preg_match('<^\\w+\\.(?:vip2ch\\.com)$>', $host); - } - return self::$_hostIsVip2ch[$host]; + return P2BbsType::isHostVip2ch($host); } // }}} @@ -881,13 +872,7 @@ static public function isHostVip2ch($host) */ static public function isHostBe2chNet($host) { - return ($host == 'be.2ch.net' || $host == 'be.5ch.net'); - /* - if (!array_key_exists($host, self::$_hostIsBe2chNet)) { - self::$_hostIsBe2chNet[$host] = ($host == 'be.2ch.net'); - } - return self::$_hostIsBe2chNet[$host]; - */ + return P2BbsType::isHostBe2chNet($host); } // }}} @@ -901,7 +886,7 @@ static public function isHostBe2chNet($host) */ static public function isNotUse2chAPI($host) { - return ($host == 'qb5.2ch.net' || $host == 'carpenter.2ch.net' || $host == 'qb5.5ch.net' || $host == 'carpenter.5ch.net'); + return P2BbsType::isNotUse2chAPI($host); } // }}} @@ -915,10 +900,7 @@ static public function isNotUse2chAPI($host) */ static public function isHostBbsPink($host) { - if (!array_key_exists($host, self::$_hostIsBbsPink)) { - self::$_hostIsBbsPink[$host] = (bool)preg_match('<^\\w+\\.bbspink\\.com$>', $host); - } - return self::$_hostIsBbsPink[$host]; + return P2BbsType::isHostBbsPink($host); } // }}} @@ -931,23 +913,9 @@ static public function isHostBbsPink($host) * @param string $host * @return boolean */ - static function isHostTor($host, $isGatewayMode = 99) + static public function isHostTor($host, $isGatewayMode = 99) { - switch ($isGatewayMode) { - case 0: - $ret = (bool)preg_match('/\\.onion$/', $host); - break; - - case 1: - $ret = (bool)preg_match('/\\.(onion\\.cab|onion\\.city|onion\\.direct|onion\\.link|onion\\.nu|onion\\.to|onion\\.rip)$/', $host); - break; - - default: - $ret = (bool)preg_match('/\\.(onion\\.cab|onion\\.city|onion\\.direct|onion\\.link|onion\\.nu|onion\\.to|onion\\.rip|onion)$/', $host); - break; - } - - return $ret; + return P2BbsType::isHostTor($host, $isGatewayMode); } // }}} @@ -961,14 +929,7 @@ static function isHostTor($host, $isGatewayMode = 99) */ static public function isHostMachiBbs($host) { - if ($host === "machi.to") { - return true; - } - - if (!array_key_exists($host, self::$_hostIsMachiBbs)) { - self::$_hostIsMachiBbs[$host] = (bool)preg_match('<^\\w+\\.machi(?:bbs\\.com|\\.to)$>', $host); - } - return self::$_hostIsMachiBbs[$host]; + return P2BbsType::isHostMachiBbs($host); } // }}} @@ -982,10 +943,7 @@ static public function isHostMachiBbs($host) */ static public function isHostMachiBbsNet($host) { - if (!array_key_exists($host, self::$_hostIsMachiBbsNet)) { - self::$_hostIsMachiBbsNet[$host] = (bool)preg_match('<^\\w+\\.machibbs\\.net$>', $host); - } - return self::$_hostIsMachiBbsNet[$host]; + return P2BbsType::isHostMachiBbsNet($host); } // }}} @@ -999,16 +957,7 @@ static public function isHostMachiBbsNet($host) */ static public function isHostJbbsShitaraba($in_host) { - if (!array_key_exists($in_host, self::$_hostIsJbbsShitaraba)) { - if ($in_host == 'rentalbbs.livedoor.com') { - self::$_hostIsJbbsShitaraba[$in_host] = true; - } elseif (preg_match('<^jbbs\\.(?:shitaraba\\.(?:net|com)|livedoor\\.(?:com|jp))(?:/|$)>', $in_host)) { - self::$_hostIsJbbsShitaraba[$in_host] = true; - } else { - self::$_hostIsJbbsShitaraba[$in_host] = false; - } - } - return self::$_hostIsJbbsShitaraba[$in_host]; + return P2BbsType::isHostJbbsShitaraba($in_host); } // }}} @@ -1022,8 +971,7 @@ static public function isHostJbbsShitaraba($in_host) */ static public function adjustHostJbbs($in_str) { - return preg_replace('<(^|/)jbbs\\.(?:shitaraba|livedoor)\\.(?:net|com)(/|$)>', '\\1jbbs.shitaraba.net\\2', $in_str, 1); - //return preg_replace('<(^|/)jbbs\\.(?:shitaraba\\.com|livedoor\\.(?:com|jp))(/|$)>', '\\1rentalbbs.livedoor.com\\2', $in_str, 1); + return P2BbsType::adjustHostJbbs($in_str); } // }}} @@ -1037,10 +985,7 @@ static public function adjustHostJbbs($in_str) */ static public function isHost2chSc($host) { - if (!array_key_exists($host, self::$_hostIs2chSc)) { - self::$_hostIs2chSc[$host] = (bool)preg_match('/\\.(2ch\\.sc)$/', $host); - } - return self::$_hostIs2chSc[$host]; + return P2BbsType::isHost2chSc($host); } // }}} @@ -1054,10 +999,7 @@ static public function isHost2chSc($host) */ static public function isHostOpen2ch($host) { - if (!array_key_exists($host, self::$_hostIsOpen2ch)) { - self::$_hostIsOpen2ch[$host] = (bool)preg_match('/\\.(open2ch\\.net)$/', $host); - } - return self::$_hostIsOpen2ch[$host]; + return P2BbsType::isHostOpen2ch($host); } // }}} @@ -2022,17 +1964,7 @@ static public function getHtmlDom($html, $charset = null, $report_error = true) */ static public function getHostGroupName($host) { - if (self::isHost2chs($host)) { - return '2channel'; - } elseif (self::isHostMachiBbs($host)) { - return 'machibbs'; - } elseif (self::isHostJbbsShitaraba($host)) { - return 'shitaraba'; - } elseif (self::isHostVip2ch($host)) { - return 'vip2ch'; - } else { - return $host; - } + return P2BbsType::getHostGroupName($host); } // }}} diff --git a/lib/SettingTxt.php b/lib/SettingTxt.php index 6fdf41db9..5b8bbc817 100644 --- a/lib/SettingTxt.php +++ b/lib/SettingTxt.php @@ -118,7 +118,7 @@ public function downloadSettingTxt() //var_dump($req->getResponseHeader()); $body = $response->getBody(); // ������� or be.2ch.net �Ȃ�EUC��SJIS�ɕϊ� - if (P2Util::isHostJbbsShitaraba($this->host) || P2Util::isHostBe2chNet($this->host)) { + if (P2Util::isHostJbbsShitaraba($this->host) || P2BbsType::isHostBe2chs($this->host)) { $body = mb_convert_encoding($body, 'CP932', 'CP51932'); } if (FileCtl::file_write_contents($this->_setting_txt, $body) === false) { diff --git a/lib/SubjectTxt.php b/lib/SubjectTxt.php index 3f507f33a..495586de9 100644 --- a/lib/SubjectTxt.php +++ b/lib/SubjectTxt.php @@ -114,7 +114,7 @@ public function downloadSubject() //var_dump($req->getResponseHeader()); $body = $response->getBody(); // ������� or be.2ch.net �Ȃ�EUC��SJIS�ɕϊ� - if (P2Util::isHostJbbsShitaraba($this->host) || P2Util::isHostBe2chNet($this->host)) { + if (P2Util::isHostJbbsShitaraba($this->host) || P2BbsType::isHostBe2chs($this->host)) { $body = mb_convert_encoding($body, 'CP932', 'CP51932'); } if (FileCtl::file_write_contents($this->subject_file, $body) === false) { diff --git a/lib/Thread.php b/lib/Thread.php index a24bb0ae8..eae31de44 100644 --- a/lib/Thread.php +++ b/lib/Thread.php @@ -456,7 +456,7 @@ public function setTitleFromLocal() $this->setTtitle($d[4]); // be.2ch.net �Ȃ�EUC��SJIS�ϊ� - if (P2Util::isHostBe2chNet($this->host)) { + if (P2BbsType::isHostBe2chs($this->host)) { $ttitle = mb_convert_encoding($this->ttitle, 'CP932', 'CP51932'); $this->setTtitle($ttitle); } diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 6c521b8ed..885309bdd 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -70,7 +70,7 @@ public function downloadDat() { return $this->_downloadDat2chKako ($_GET['kakolog'], $ext); // 2ch ��API�o�R�ŗ��Ƃ� - } elseif (P2Util::isHost2chs ($this->host) && !P2Util::isNotUse2chAPI ($this->host) && $_conf['2chapi_use'] && empty ($_GET['olddat'])) { + } elseif (P2BbsType::isHost2chs ($this->host) && !P2BbsType::isNotUse2chsAPI ($this->host) && $_conf['2chapi_use'] && empty ($_GET['olddat'])) { // ���O�C�����ĂȂ���� or ���O�C����A�ݒ肵�����Ԍo�߂��Ă����玩���ă��O�C�� if (! file_exists ($_conf['sid2chapi_php']) || ! empty ($_REQUEST['relogin2chapi']) || (filemtime ($_conf['sid2chapi_php']) < time () - 60 * 60 * $_conf['2chapi_interval'])) { diff --git a/rep2/post.php b/rep2/post.php index cb68da647..c9a797531 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -411,7 +411,7 @@ function postIt($host, $bbs, $key, $post) } // be.2ch.net �F�؃N�b�L�[ - if (P2Util::isHostBe2chNet($host) || !empty($_REQUEST['beres'])) { + if (P2BbsType::isHostBe2chs($host) || !empty($_REQUEST['beres'])) { if ($_conf['be_2ch_DMDM'] && $_conf['be_2ch_MDMD']) { $req->addCookie('DMDM', urlencode( rawurldecode( $_conf['be_2ch_DMDM']) ) ); $req->addCookie('MDMD', urlencode( rawurldecode( $_conf['be_2ch_MDMD']) ) ); @@ -428,7 +428,7 @@ function postIt($host, $bbs, $key, $post) while (list($name, $value) = each($post)) { // ������� or be.2ch.net�Ȃ�AEUC�ɕϊ� - if (P2Util::isHostJbbsShitaraba($host) || P2Util::isHostBe2chNet($host)) { + if (P2Util::isHostJbbsShitaraba($host) || P2BbsType::isHostBe2chs($host)) { $value = mb_convert_encoding($value, 'CP51932', 'CP932'); } elseif (P2Util::isHost2chs($host) && ! P2Util::isHostBbsPink($host)) { // 2ch��Unicode�̕������post���� @@ -464,7 +464,7 @@ function postIt($host, $bbs, $key, $post) } // be.2ch.net or JBBS������� �����R�[�h�ϊ� EUC��SJIS - if (P2Util::isHostBe2chNet($host) || P2Util::isHostJbbsShitaraba($host)) { + if (P2BbsType::isHostBe2chs($host) || P2Util::isHostJbbsShitaraba($host)) { $body = mb_convert_encoding($body, 'CP932', 'CP51932'); // diff --git a/rep2/subject.php b/rep2/subject.php index 482b70e76..a822f3a27 100644 --- a/rep2/subject.php +++ b/rep2/subject.php @@ -1036,7 +1036,7 @@ function matchSbFilter(Thread $aThread) if (file_exists($aThread->keydat)) { $subject = file_get_contents($aThread->keydat); // be.2ch.net ��EUC - if (P2Util::isHostBe2chNet($aThread->host)) { + if (P2BbsType::isHostBe2chs($aThread->host)) { $subject = mb_convert_encoding($subject, 'CP932', 'CP51932'); } } else { From 3111b871c706f0d2bfd09f515ba7aa2ca27dd5fc Mon Sep 17 00:00:00 2001 From: killer4989 Date: Thu, 19 Oct 2017 19:56:36 +0900 Subject: [PATCH 282/339] =?UTF-8?q?ImageCache2=20=E3=81=A7=E3=81=AE?= =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=A0=E3=82=A2=E3=82=A6=E3=83=88=E5=80=A4?= =?UTF-8?q?=E3=82=92=E8=A8=AD=E5=AE=9A=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf_ic2.inc.php | 6 ------ conf/conf_user_def_ex.inc.php | 8 ++++++++ rep2/edit_conf_user.php | 2 ++ rep2/ic2.php | 8 ++++---- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/conf/conf_ic2.inc.php b/conf/conf_ic2.inc.php index bebec256a..7e244c00e 100644 --- a/conf/conf_ic2.inc.php +++ b/conf/conf_ic2.inc.php @@ -138,12 +138,6 @@ // �y�[�W�^�C�g�� $_conf['expack.ic2.getter.title'] = "ImageCache2::Getter"; -// �T�[�o�ɐڑ�����ۂɃ^�C���A�E�g����܂ł̎��ԁi�b�j[0 => http_conn_timeout �Ɉˑ�] -$_conf['expack.ic2.getter.conn_timeout'] = 5; - -// �_�E�����[�h���^�C���A�E�g����܂ł̎��ԁi�b�j[0 => http_read_timeout �Ɉˑ�] -$_conf['expack.ic2.getter.read_timeout'] = 60; - // �G���[���O�ɂ���摜�̓_�E�����[�h�����݂Ȃ� (no:0;yes:1) $_conf['expack.ic2.getter.checkerror'] = 1; diff --git a/conf/conf_user_def_ex.inc.php b/conf/conf_user_def_ex.inc.php index 58fa1757f..7e584ce58 100644 --- a/conf/conf_user_def_ex.inc.php +++ b/conf/conf_user_def_ex.inc.php @@ -220,6 +220,14 @@ $conf_user_def['expack.ic2.fav_auto_rank_override'] = 0; // (0) $conf_user_rad['expack.ic2.fav_auto_rank_override'] = array('1' => '����', '2' => '�����N0�������炷��', '3' => '�����N���オ��Ȃ炷��', '0' => '���Ȃ�'); +// �T�[�o�ɐڑ�����ۂɃ^�C���A�E�g����܂ł̎��ԁi�b�j[0 => http_conn_timeout �Ɉˑ�] +$conf_user_def['expack.ic2.getter_conn_timeout'] = 5; +$conf_user_rules['expack.ic2.getter_conn_timeout'] = array('notIntExceptMinusToDef'); + +// �_�E�����[�h���^�C���A�E�g����܂ł̎��ԁi�b�j[0 => http_read_timeout �Ɉˑ�] +$conf_user_def['expack.ic2.getter_read_timeout'] = 60; +$conf_user_rules['expack.ic2.getter_read_timeout'] = array('notIntExceptMinusToDef'); + // }}} // {{{ AAS diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index fabb3d6f5..8bff81d0f 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -718,6 +718,8 @@ array('expack.ic2.fav_auto_rank', '���C�ɃX���ɓo�^����Ă���X���̉摜�Ɏ��������N��ݒ肷��'), array('expack.ic2.fav_auto_rank_setting', '���C�ɃX���̉摜�����������N�ݒ肷��ꍇ�̐ݒ�l(�J���}��؂�)[���C��0�̃����N�l,���C��1�̃����N�l, , ,]'), array('expack.ic2.fav_auto_rank_override', '���C�ɃX���̉摜�����������N�ݒ肷��ꍇ�ɁA�L���b�V���ς݉摜�Ɏ��������N���㏑�����邩'), + array('expack.ic2.getter_conn_timeout', '�T�[�o�ɐڑ�����ۂɃ^�C���A�E�g����܂ł̎��ԁi�b�j[0 => http_conn_timeout �Ɉˑ�]'), + array('expack.ic2.getter_read_timeout', '�_�E�����[�h���^�C���A�E�g����܂ł̎��ԁi�b�j[0 => http_read_timeout �Ɉˑ�]'), ); printEditConfGroupHtml($groupname, $conflist, $flags); } diff --git a/rep2/ic2.php b/rep2/ic2.php index 81cb93f7e..c950ee9a1 100644 --- a/rep2/ic2.php +++ b/rep2/ic2.php @@ -296,10 +296,10 @@ public function __destruct() // {{{ init http-client // �ݒ���m�F -$conn_timeout = (isset($ini['Getter']['conn_timeout']) && $ini['Getter']['conn_timeout'] > 0) - ? $ini['Getter']['conn_timeout'] : $_conf['http_conn_timeout']; -$read_timeout = (isset($ini['Getter']['read_timeout']) && $ini['Getter']['read_timeout'] > 0) - ? $ini['Getter']['read_timeout'] : $_conf['http_read_timeout']; +$conn_timeout = (isset($_conf['expack.ic2.getter_conn_timeout']) && $_conf['expack.ic2.getter_conn_timeout'] > 0) + ? $_conf['expack.ic2.getter_conn_timeout'] : $_conf['http_conn_timeout']; +$read_timeout = (isset($_conf['expack.ic2.getter_read_timeout']) && $_conf['expack.ic2.getter_read_timeout'] > 0) + ? $_conf['expack.ic2.getter_read_timeout'] : $_conf['http_read_timeout']; $ic2_ua = (!empty($_conf['expack.user_agent'])) ? $_conf['expack.user_agent'] : $_SERVER['HTTP_USER_AGENT']; From fd2833957364985608ebc6e7b53c8754883a5f55 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Thu, 26 Oct 2017 12:03:01 +0900 Subject: [PATCH 283/339] =?UTF-8?q?dig5ch=E3=81=AEJSON=E3=81=ABform?= =?UTF-8?q?=E3=82=BF=E3=82=B0=E3=81=8C=E6=B7=B7=E5=85=A5=E3=81=99=E3=82=8B?= =?UTF-8?q?=E4=B8=8D=E5=85=B7=E5=90=88=E3=81=AB=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/dig2ch.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/rep2/dig2ch.php b/rep2/dig2ch.php index 4e6b66e5b..555ecd784 100644 --- a/rep2/dig2ch.php +++ b/rep2/dig2ch.php @@ -33,7 +33,13 @@ function dig2chsearch($query) // ����̎I�ʼn�����Q������������JSON��HTML�̃R�����g��������̂ł��̑΍� if (strpos($body,"/", "", $body); + $body = preg_replace("/<\!--[\s\S]*?-->/", "", $body); + } + + // form�^�O���������邱�Ƃ�����̂ŏ��� + if (strpos($body,"/", "", $body); } $jsontest1 = json_decode($body, true); From 24d25640705f79339cdaeb1cf1208941ff6e09c3 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Thu, 26 Oct 2017 12:21:15 +0900 Subject: [PATCH 284/339] =?UTF-8?q?P2HttpExt.php=E4=BB=A5=E5=A4=96?= =?UTF-8?q?=E3=81=AE=E9=80=9A=E4=BF=A1=E3=82=92=E3=81=99=E3=81=B9=E3=81=A6?= =?UTF-8?q?cURL=E3=81=AB=E7=B5=B1=E4=B8=80=E3=80=82=20=E6=B5=AA=E4=BA=BA?= =?UTF-8?q?=E3=81=8CSSL=E5=BF=85=E9=A0=88=E3=81=AB=E3=81=AA=E3=81=A3?= =?UTF-8?q?=E3=81=9F=E3=81=AE=E3=81=A7=E8=A8=AD=E5=AE=9A=E9=A0=85=E7=9B=AE?= =?UTF-8?q?=E3=82=92=E9=99=A4=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf.inc.php | 2 +- conf/conf_user_def.inc.php | 8 -------- doc/README-774.txt | 1 + lib/P2Commun.php | 5 +++-- rep2/edit_conf_user.php | 4 +--- 5 files changed, 6 insertions(+), 14 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 6586b7500..78702187c 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '171018.1540', // rep2�̃o�[�W���� + 'p2version' => '171026.9001', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index 6b2227892..754c08203 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -585,17 +585,9 @@ $conf_user_def['pane_mode'] = 0; // (0) $conf_user_rad['pane_mode'] = array('0' => '�W���i�Ɍ`�j', '1' => '�����i��`�j'); -// SSL�ʐM(�����O�C����)�Ɏg�p����֐� ���Y������g�����C���X�g�[������K�v������ -$conf_user_def['ssl_function'] = "curl"; // (socket) -$conf_user_sel['ssl_function'] = array('socket' => 'OpenSSL', 'curl' => 'cURL'); - // SSL�ʐM�̐ڑ�������؂��邽�߂Ɏg�p����ؖ������i�[���ꂽ�f�B���N�g�� �����؂ł��Ȃ����̂ݎw�� $conf_user_def['ssl_capath'] = ""; // () -// 2ch.net�́����O�C����SSL���g�p���� -$conf_user_def['2ch_ssl.maru'] = 1; // (1) -$conf_user_rad['2ch_ssl.maru'] = array('1' => '����', '0' => '���Ȃ�'); - // 2ch.net��subjec.txt��SETTING.TXT�̎擾��SSL���g�p���� $conf_user_def['2ch_ssl.subject'] = 0; // (0) $conf_user_rad['2ch_ssl.subject'] = array('1' => '����', '0' => '���Ȃ�'); diff --git a/doc/README-774.txt b/doc/README-774.txt index 5b8a7057b..e9adc5fb1 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -72,6 +72,7 @@ PHP7 ��ChangeLog +171018.1540 * bintan �ǂݍ��ݑΉ� * �Q�l���O�C���p��2chv.tora3.net��SSL�K�{�ɂȂ����̂őΉ� * �X�}�z read�F�|�b�v�A�b�v�̕‚���{�^�����������ۂɑ��̃|�b�v�A�b�v�������Y���ɕ‚���s��C�� diff --git a/lib/P2Commun.php b/lib/P2Commun.php index ee4d4416a..659ec82bd 100644 --- a/lib/P2Commun.php +++ b/lib/P2Commun.php @@ -46,10 +46,11 @@ static public function createHTTPRequest($url , $method = HTTP_Request2::METHOD_ 'timeout' => $_conf['http_read_timeout'], )); + // �O���Ƃ̒ʐM�͑S��cURL���g�� + $req->setAdapter('curl'); + // SSL�̐ݒ� if($purl['scheme'] == 'https') { - $req->setAdapter($_conf['ssl_function']); - if($_conf['ssl_capath']) { $req->setConfig ('ssl_capath', $_conf['ssl_capath']); diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index fabb3d6f5..dff6ecad7 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -446,9 +446,7 @@ array('tor_proxy_password', 'Tor �v���L�V�p�X���[�h (�g�p����ꍇ�̂�)'), array('tor_proxy_mode', 'Tor �v���L�V�̎��'), 'SSL�ʐM�ݒ�', - array('ssl_function', 'SSL�ʐM(�����O�C����)�Ɏg�p����֐�
    (�֐��ɊY������g�����C���X�g�[������K�v������)'), - array('ssl_capath', 'SSL�ʐM�Őڑ�������؂��邽�߂̏ؖ���������f�B���N�g�� ex)"/etc/ssl/certs"
    �ݒ�Ȃ��ē����ꍇ�͐ݒ�s�v
    ssl_function�ɑΉ������`���̏ؖ������K�v'), - array('2ch_ssl.maru', '2ch.net�́����O�C����SSL���g�p����'), + array('ssl_capath', 'SSL�ʐM�Őڑ�������؂��邽�߂̏ؖ���������f�B���N�g�� ex)"/etc/ssl/certs"
    �ݒ�Ȃ��ē����ꍇ�͐ݒ�s�v'), array('2ch_ssl.subject', '2ch.net��subjec.txt��SETTING.TXT�̎擾��SSL���g�p����'), array('2ch_ssl.post', '2ch.net�̏������݂�SSL���g�p����'), ); From e2a439134949065268da7a1b38d42b5c7a4b973e Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Fri, 27 Oct 2017 04:24:18 +0900 Subject: [PATCH 285/339] =?UTF-8?q?ic2:=E3=83=80=E3=82=A6=E3=83=B3?= =?UTF-8?q?=E3=83=AD=E3=83=BC=E3=83=80=E3=83=BC=E3=81=A7=E3=82=A8=E3=83=A9?= =?UTF-8?q?=E3=83=BC=E3=81=8C=E5=87=BA=E3=81=AA=E3=81=84=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/ic2_getter.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rep2/ic2_getter.php b/rep2/ic2_getter.php index b862010e6..d77364374 100644 --- a/rep2/ic2_getter.php +++ b/rep2/ic2_getter.php @@ -27,7 +27,7 @@ $autoClose = -1; } else { $isPopUp = 1; - if (array_key_exists('close', $_GET) && is_numeric($_GET['close'])) { + if (array_key_exists('autoclose', $_GET) && is_numeric($_GET['autoclose'])) { $autoClose = (float)$_GET['close'] * 1000.0; if ($autoClose > 0.0) { $autoClose = (int)$autoClose; @@ -58,7 +58,7 @@ 'to' => 'to', 'padding' => '', 'popup' => $isPopUp, - 'close' => $autoClose, + 'autoclose' => $autoClose, ); // �t�H�[���̌Œ�l @@ -107,7 +107,7 @@ // �B���v�f $qfe['detect_hint'] = $qf->addElement('hidden', '_hint'); $qfe['popup'] = $qf->addElement('hidden', 'popup'); -$qfe['close'] = $qf->addElement('hidden', 'close'); +$qfe['autoclose'] = $qf->addElement('hidden', 'autoclose'); // URL�ƘA�Ԑݒ� $qfe['uri'] = $qf->addElement('text', 'uri', 'URL', $_attr_uri); @@ -123,7 +123,7 @@ // �v���r���[�̑傫�� $preview_size = array(); foreach ($_preview_size as $value => $lavel) { - $preview_size[$value] = HTML_QuickForm::createElement('radio', null, null, $lavel, $value); + $preview_size[$value] = $qf->createElement('radio', null, null, $lavel, $value); } $qf->addGroup($preview_size, 'preview_size', '�v���r���[', ' '); if (!isset($_GET['preview_size'])) { From b4bcf2de8ffe0e2be0331b7bd4475b1584c99cc5 Mon Sep 17 00:00:00 2001 From: killer4989 Date: Fri, 27 Oct 2017 21:34:23 +0900 Subject: [PATCH 286/339] =?UTF-8?q?=E8=82=A5=E5=A4=A7=E5=8C=96=E3=81=97?= =?UTF-8?q?=E3=81=9F=20P2Util=20=E3=81=8B=E3=82=89=E3=83=9B=E3=82=B9?= =?UTF-8?q?=E3=83=88=E5=88=A4=E5=AE=9A=E9=96=A2=E4=BF=82=E3=81=AE=E6=A9=9F?= =?UTF-8?q?=E8=83=BD=E3=82=92=20P2BbsType=20=E3=81=AB=E7=A7=BB=E5=8B=95(?= =?UTF-8?q?=E7=AC=AC2=E5=BC=BE)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit これで移動はできたはず --- lib/BbsMap.php | 8 ++++---- lib/P2Commun.php | 7 ++++--- lib/P2HttpExt.php | 4 ++-- lib/P2Util.php | 16 ++++++++-------- lib/SettingTxt.php | 8 ++++---- lib/ShowThread.php | 6 +++--- lib/ShowThreadI.php | 2 +- lib/ShowThreadK.php | 2 +- lib/SubjectTxt.php | 10 +++++----- lib/Thread.php | 12 ++++++------ lib/ThreadRead.php | 20 ++++++++++---------- lib/expack/tgrep/view.inc.php | 2 +- lib/plugins/hissi/Hissi.php | 2 +- lib/plugins/mimizun/Mimizun.php | 4 ++-- lib/plugins/stalker/Stalker.php | 2 +- lib/post_form_options.inc.php | 6 +++--- lib/read_shitaraba.inc.php | 6 +++--- lib/sb_footer.inc.php | 6 +++--- lib/sb_header_k.inc.php | 4 ++-- lib/sb_print_k.inc.php | 2 +- lib/wiki/Samba.php | 4 ++-- 21 files changed, 67 insertions(+), 66 deletions(-) diff --git a/lib/BbsMap.php b/lib/BbsMap.php index 9fe87d577..d54ef7ca1 100644 --- a/lib/BbsMap.php +++ b/lib/BbsMap.php @@ -404,13 +404,13 @@ static private function _writeData($path, $neolines) */ static private function _detectHostType($host) { - if (P2Util::isHostBbsPink($host)) { + if (P2BbsType::isHostBbsPink($host)) { $type = 'bbspink'; - } elseif (P2Util::isHost2chs($host)) { + } elseif (P2BbsType::isHost2chs($host)) { $type = '2channel'; - } elseif (P2Util::isHostMachiBbs($host)) { + } elseif (P2BbsType::isHostMachiBbs($host)) { $type = 'machibbs'; - } elseif (P2Util::isHostJbbsShitaraba($host)) { + } elseif (P2BbsType::isHostJbbsShitaraba($host)) { $type = 'jbbs'; } else { $type = $host; diff --git a/lib/P2Commun.php b/lib/P2Commun.php index 659ec82bd..12ab2934d 100644 --- a/lib/P2Commun.php +++ b/lib/P2Commun.php @@ -35,7 +35,7 @@ static public function createHTTPRequest($url , $method = HTTP_Request2::METHOD_ // �悭�g���w�b�_���w�� // p2��HTTP�ʐM�͓��Ɏw��̖�������Monazilla�𖼏��悤�ɂ��� - $req->setHeader ('User-Agent', self::getP2UA(true,P2Util::isHost2chs($purl['host']))); + $req->setHeader ('User-Agent', self::getP2UA(true,P2BbsType::isHost2chs($purl['host']))); $req->setHeader ('Accept-Language', 'ja,en-us;q=0.7,en;q=0.3'); $req->setHeader ('Accept', '*/*'); $req->setHeader ('Accept-Encoding', 'gzip, deflate'); @@ -47,7 +47,8 @@ static public function createHTTPRequest($url , $method = HTTP_Request2::METHOD_ )); // �O���Ƃ̒ʐM�͑S��cURL���g�� - $req->setAdapter('curl'); +// $req->setAdapter('curl'); + $req->setAdapter('socket'); // SSL�̐ݒ� if($purl['scheme'] == 'https') { @@ -58,7 +59,7 @@ static public function createHTTPRequest($url , $method = HTTP_Request2::METHOD_ } // �v���L�V - if ($_conf['tor_use'] && P2Util::isHostTor($purl['host'], 0)) { // Tor(.onion)��Tor�p�̐ݒ���Z�b�g + if ($_conf['tor_use'] && P2BbsType::isHostTor($purl['host'], 0)) { // Tor(.onion)��Tor�p�̐ݒ���Z�b�g $req->setConfig (array ( 'proxy_host' => $_conf['tor_proxy_host'], 'proxy_port' => $_conf['tor_proxy_port'], diff --git a/lib/P2HttpExt.php b/lib/P2HttpExt.php index 5503b5363..8140abd00 100644 --- a/lib/P2HttpExt.php +++ b/lib/P2HttpExt.php @@ -247,7 +247,7 @@ public function __construct($url, if (!isset($options['useragent'])) { $purl = parse_url($url); // URL���� - $options['useragent'] = P2Commun::getP2UA(true,P2Util::isHost2chs($purl['host'])); + $options['useragent'] = P2Commun::getP2UA(true,P2BbsType::isHost2chs($purl['host'])); unset($purl); } @@ -931,7 +931,7 @@ static public function fetchSubjectTxt($subjects, $force = false) $url = 'http://' . $host . '/' . $bbs . '/subject.txt'; - if (P2Util::isHostJbbsShitaraba($host) || P2BbsType::isHostBe2chs($host)) { + if (P2BbsType::isHostJbbsShitaraba($host) || P2BbsType::isHostBe2chs($host)) { if ($eucjp2sjis === null) { $eucjp2sjis = new P2HttpCallback_SaveEucjpAsSjis(); } diff --git a/lib/P2Util.php b/lib/P2Util.php index 56d3344af..992a804f4 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -389,9 +389,9 @@ static private function _p2DirOfHost($base_dir, $host, $dir_sep = true) $host = self::normalizeHostName($host); // 2channel or bbspink - if (self::isHost2chs($host)) { + if (P2BbsType::isHost2chs($host)) { $host_dir = $base_dir . DIRECTORY_SEPARATOR . '2channel'; - } elseif (self::isHostOpen2ch($host)) { + } elseif (P2BbsType::isHostOpen2ch($host)) { //�݊����ێ��̂��ߋ����̃f�B���N�g�����w�� $host_dir = $base_dir . DIRECTORY_SEPARATOR . rawurlencode($host); if (!file_exists($host_dir)) { @@ -399,7 +399,7 @@ static private function _p2DirOfHost($base_dir, $host, $dir_sep = true) $host_dir = $base_dir . DIRECTORY_SEPARATOR . 'open2ch'; } - } elseif (self::isHost2chSc($host)) { + } elseif (P2BbsType::isHost2chSc($host)) { //�݊����ێ��̂��ߋ����̃f�B���N�g�����w�� $host_dir = $base_dir . DIRECTORY_SEPARATOR . rawurlencode($host); if (!file_exists($host_dir)) { @@ -407,22 +407,22 @@ static private function _p2DirOfHost($base_dir, $host, $dir_sep = true) $host_dir = $base_dir . DIRECTORY_SEPARATOR . '2channel_sc'; } // machibbs.com - } elseif (self::isHostMachiBbs($host)) { + } elseif (P2BbsType::isHostMachiBbs($host)) { $host_dir = $base_dir . DIRECTORY_SEPARATOR . 'machibbs.com'; // tor - } elseif (self::isHostTor($host)) { + } elseif (P2BbsType::isHostTor($host)) { $tor_host = preg_replace('/\.onion\.(\w+)$/', '.onion', $host); $host_dir = $base_dir . DIRECTORY_SEPARATOR . $tor_host; unset($tor_host); // jbbs.livedoor.jp (livedoor �����^���f����) - } elseif (self::isHostJbbsShitaraba($host)) { + } elseif (P2BbsType::isHostJbbsShitaraba($host)) { if (DIRECTORY_SEPARATOR == '/') { $host_dir = $base_dir . DIRECTORY_SEPARATOR . $host; } else { $host_dir = $base_dir . DIRECTORY_SEPARATOR . str_replace('/', DIRECTORY_SEPARATOR, $host); } // vip.2ch.com - } elseif (self::isHostVip2ch($host)) { + } elseif (P2BbsType::isHostVip2ch($host)) { $host_dir = $base_dir . DIRECTORY_SEPARATOR . 'ex14.vip2ch.com'; // livedoor �����^���f���ˆȊO�ŃX���b�V�����̕������܂ނƂ� @@ -2043,7 +2043,7 @@ static private function _getBe2chCodeByMailPass($mail, $pass, $host) $url = http_build_url(array( "scheme" => $_conf['2ch_ssl.post'] ? "https" : "http", - "host" => P2Util::isHost5ch($host) ? "be.5ch.net" : "be.2ch.net", + "host" => P2BbsType::isHost5ch($host) ? "be.5ch.net" : "be.2ch.net", "path" => "index.php")); try { diff --git a/lib/SettingTxt.php b/lib/SettingTxt.php index 5b8bbc817..dd8aa5aeb 100644 --- a/lib/SettingTxt.php +++ b/lib/SettingTxt.php @@ -39,12 +39,12 @@ public function __construct($host, $bbs) $this->_setting_srd = $dat_host_bbs_dir_s . 'p2_kb_setting.srd'; // �ڑ��悪2ch.net�Ȃ��SSL�ʐM���s��(pink�͑Ή����Ă��Ȃ��̂ł��Ȃ�) - if (P2Util::isHost2chs($host) && ! P2Util::isHostBbsPink($host) && $_conf['2ch_ssl.subject']) { + if (P2BbsType::isHost2chs($host) && ! P2BbsType::isHostBbsPink($host) && $_conf['2ch_ssl.subject']) { $this->_url = 'https://' . $host . '/' . $bbs . '/SETTING.TXT'; } else { $this->_url = 'http://' . $host . '/' . $bbs . '/SETTING.TXT'; } - //$this->_url = P2Util::adjustHostJbbs($this->_url); // ������΂�livedoor�ړ]�ɑΉ��B�Ǎ����livedoor�Ƃ���B + //$this->_url = P2BbsType::adjustHostJbbs($this->_url); // ������΂�livedoor�ړ]�ɑΉ��B�Ǎ����livedoor�Ƃ���B $this->setting_array = array(); @@ -80,7 +80,7 @@ public function downloadSettingTxt() global $_conf; // �܂�BBS�E������� �� SETTING.TXT �����݂��Ȃ����̂Ƃ��� - if (P2Util::isHostMachiBbs($this->_host) || P2Util::isHostJbbsShitaraba($this->_host)) { + if (P2BbsType::isHostMachiBbs($this->_host) || P2BbsType::isHostJbbsShitaraba($this->_host)) { return false; } @@ -118,7 +118,7 @@ public function downloadSettingTxt() //var_dump($req->getResponseHeader()); $body = $response->getBody(); // ������� or be.2ch.net �Ȃ�EUC��SJIS�ɕϊ� - if (P2Util::isHostJbbsShitaraba($this->host) || P2BbsType::isHostBe2chs($this->host)) { + if (P2BbsType::isHostJbbsShitaraba($this->host) || P2BbsType::isHostBe2chs($this->host)) { $body = mb_convert_encoding($body, 'CP932', 'CP51932'); } if (FileCtl::file_write_contents($this->_setting_txt, $body) === false) { diff --git a/lib/ShowThread.php b/lib/ShowThread.php index 79ac36c8b..1bf139e76 100644 --- a/lib/ShowThread.php +++ b/lib/ShowThread.php @@ -347,11 +347,11 @@ protected function __construct(ThreadRead $aThread, $matome = false) $this->_highlight_nums = array(); $this->_highlight_msgs = array(); - if (P2Util::isHostBbsPink($this->thread->host)) { + if (P2BbsType::isHostBbsPink($this->thread->host)) { $this->_redirector = self::REDIRECTOR_PINKTOWER; - } elseif (P2Util::isHost2chs($this->thread->host)) { + } elseif (P2BbsType::isHost2chs($this->thread->host)) { $this->_redirector = self::REDIRECTOR_IMENU; - } elseif (P2Util::isHostMachiBbs($this->thread->host)) { + } elseif (P2BbsType::isHostMachiBbs($this->thread->host)) { $this->_redirector = self::REDIRECTOR_MACHIBBS; } else { $this->_redirector = self::REDIRECTOR_NONE; diff --git a/lib/ShowThreadI.php b/lib/ShowThreadI.php index 9d072354d..4f9aa49c5 100644 --- a/lib/ShowThreadI.php +++ b/lib/ShowThreadI.php @@ -65,7 +65,7 @@ public function __construct(ThreadRead $aThread, $matome = false) $this->setBbsNonameName(); } - if (P2Util::isHost2chs($aThread->host)) { + if (P2BbsType::isHost2chs($aThread->host)) { $this->_kushiYakiName = ' [�\{}@{}@{}-] '; } diff --git a/lib/ShowThreadK.php b/lib/ShowThreadK.php index 6343effd4..8b638ec1c 100644 --- a/lib/ShowThreadK.php +++ b/lib/ShowThreadK.php @@ -65,7 +65,7 @@ public function __construct(ThreadRead $aThread, $matome = false) $this->setBbsNonameName(); } - if (P2Util::isHost2chs($aThread->host)) { + if (P2BbsType::isHost2chs($aThread->host)) { $this->_kushiYakiName = ' [�\{}@{}@{}-] '; } diff --git a/lib/SubjectTxt.php b/lib/SubjectTxt.php index 495586de9..2381b3b1d 100644 --- a/lib/SubjectTxt.php +++ b/lib/SubjectTxt.php @@ -31,16 +31,16 @@ public function __construct($host, $bbs) $this->subject_file = P2Util::datDirOfHostBbs($host, $bbs) . 'subject.txt'; // �ڑ��悪2ch.net�Ȃ��SSL�ʐM���s��(pink�͑Ή����Ă��Ȃ��̂ł��Ȃ�) - if (P2Util::isHost2chs($host) && ! P2Util::isHostBbsPink($host) && $_conf['2ch_ssl.subject']) { + if (P2BbsType::isHost2chs($host) && ! P2BbsType::isHostBbsPink($host) && $_conf['2ch_ssl.subject']) { $this->subject_url = 'https://' . $host . '/' . $bbs . '/subject.txt'; } else { $this->subject_url = 'http://' . $host . '/' . $bbs . '/subject.txt'; } // ������΂�livedoor�ړ]�ɑΉ��B�Ǎ����livedoor�Ƃ���B - if(P2Util::isHostJbbsShitaraba($host)) + if(P2BbsType::isHostJbbsShitaraba($host)) { - $this->subject_url = P2Util::adjustHostJbbs($this->subject_url); + $this->subject_url = P2BbsType::adjustHostJbbs($this->subject_url); } // subject.txt���_�E�����[�h���Z�b�g���� @@ -114,7 +114,7 @@ public function downloadSubject() //var_dump($req->getResponseHeader()); $body = $response->getBody(); // ������� or be.2ch.net �Ȃ�EUC��SJIS�ɕϊ� - if (P2Util::isHostJbbsShitaraba($this->host) || P2BbsType::isHostBe2chs($this->host)) { + if (P2BbsType::isHostJbbsShitaraba($this->host) || P2BbsType::isHostBe2chs($this->host)) { $body = mb_convert_encoding($body, 'CP932', 'CP51932'); } if (FileCtl::file_write_contents($this->subject_file, $body) === false) { @@ -184,7 +184,7 @@ public function setSubjectLines($cont = '') $this->subject_lines = FileCtl::file_read_lines($this->subject_file); // JBBS@������΂Ȃ�d���X���^�C���폜���� - if (P2Util::isHostJbbsShitaraba($this->host)) { + if (P2BbsType::isHostJbbsShitaraba($this->host)) { $this->subject_lines = array_unique($this->subject_lines); } diff --git a/lib/Thread.php b/lib/Thread.php index eae31de44..45f024606 100644 --- a/lib/Thread.php +++ b/lib/Thread.php @@ -497,13 +497,13 @@ public function getMotoThread($force_pc = false, $ls = null) } // 2ch�n - if (P2Util::isHost2chs($this->host)) { + if (P2BbsType::isHost2chs($this->host)) { // PC if (!$mobile) { $motothre_url = "http://{$this->host}/test/read.cgi/{$this->bbs}/{$this->key}/{$ls}"; // �g�� } else { - if (P2Util::isHostBbsPink($this->host)) { + if (P2BbsType::isHostBbsPink($this->host)) { //$motothre_url = "http://{$this->host}/test/r.i/{$this->bbs}/{$this->key}/{$ls}"; $motothre_url = "http://speedo.ula.cc/test/r.so/{$this->host}/{$this->bbs}/{$this->key}/{$ls}"; } else { @@ -515,7 +515,7 @@ public function getMotoThread($force_pc = false, $ls = null) } // �܂�BBS - } elseif (P2Util::isHostMachiBbs($this->host)) { + } elseif (P2BbsType::isHostMachiBbs($this->host)) { if ($mobile) { $motothre_url = "http://{$this->host}/bbs/read.pl?IMODE=TRUE&BBS={$this->bbs}&KEY={$this->key}"; } else { @@ -523,13 +523,13 @@ public function getMotoThread($force_pc = false, $ls = null) } // �܂��т˂��� - } elseif (P2Util::isHostMachiBbsNet($this->host)) { + } elseif (P2BbsType::isHostMachiBbsNet($this->host)) { $motothre_url = "http://{$this->host}/test/read.cgi?bbs={$this->bbs}&key={$this->key}"; if ($mobile) { $motothre_url .= '&imode=true'; } // JBBS������� - } elseif (P2Util::isHostJbbsShitaraba($this->host)) { - list($host, $category) = explode('/', P2Util::adjustHostJbbs($this->host), 2); + } elseif (P2BbsType::isHostJbbsShitaraba($this->host)) { + list($host, $category) = explode('/', P2BbsType::adjustHostJbbs($this->host), 2); $bbs_cgi = ($mobile) ? 'i.cgi' : 'read.cgi'; $motothre_url = "http://{$host}/bbs/{$bbs_cgi}/{$category}/{$this->bbs}/{$this->key}/{$ls}"; diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 885309bdd..d71e61805 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -47,10 +47,10 @@ public function downloadDat() { global $_conf; // �܂�BBS - if (P2Util::isHostMachiBbs ($this->host)) { + if (P2BbsType::isHostMachiBbs ($this->host)) { return DownloadDatMachiBbs::invoke ($this); // JBBS@������� - } elseif (P2Util::isHostJbbsShitaraba ($this->host)) { + } elseif (P2BbsType::isHostJbbsShitaraba ($this->host)) { if (! function_exists ('shitarabaDownload')) { include P2_LIB_DIR . '/read_shitaraba.inc.php'; } @@ -141,7 +141,7 @@ protected function _downloadDat2chAPI($uaMona, $SID2ch, $from_bytes) { $url= http_build_url(array( "scheme" => $_conf['2chapi_ssl.read']?"https":"http", - "host" => P2Util::isHost5ch($this->host)?"api.5ch.net":"api.2ch.net", + "host" => P2BbsType::isHost5ch($this->host)?"api.5ch.net":"api.2ch.net", "path" => "v1/".$serverName[0] . '/' . $this->bbs . '/' . $this->key)); $message = '/v1/' . $serverName[0] . '/' . $this->bbs . '/' . $this->key . $SID2ch . $AppKey; @@ -418,7 +418,7 @@ protected function _downloadDat2ch($from_bytes) { $this->modified = $response->getHeader ('Last-Modified'); // �z�X�g��2ch�̎���DAT�𗘗p�ł��Ȃ��|�̃��b�Z�[�W���o����G���[�Ƃ���iDAT�j���΍�j - if (P2Util::isHost2chs ($this->host)) { + if (P2BbsType::isHost2chs ($this->host)) { // 1�s�ڂ�؂�o�� $posLF = mb_strpos ($body, "\n"); $firstmsg = mb_substr ($body, 0, $posLF === false ? mb_strlen ($body) : $posLF); @@ -605,7 +605,7 @@ public function get2chDatError($code = null) { } $reason = null; - if (P2Util::isHost2chs ($this->host) || P2Util::isHostVip2ch ($this->host)) { + if (P2BbsType::isHost2chs ($this->host) || P2BbsType::isHostVip2ch ($this->host)) { if ($code == '302') { $body203 = $this->_get2ch203Body(); if ($body203 !== false && preg_match('/�ߋ����O ��/', $body203)) { @@ -629,7 +629,7 @@ public function get2chDatError($code = null) { try { $req = P2Commun::createHTTPRequest ($read_url.'1', HTTP_Request2::METHOD_GET); // �w�b�_ - $req->setHeader ('User-Agent', P2Commun::getP2UA(false,P2Util::isHost2chs($this->host))); // �����́A"Monazilla/" ���‚����NG + $req->setHeader ('User-Agent', P2Commun::getP2UA(false,P2BbsType::isHost2chs($this->host))); // �����́A"Monazilla/" ���‚����NG // Request�̑��M $response = P2Commun::getHTTPResponse($req); @@ -783,7 +783,7 @@ public function previewOne() { fclose ($fd); // be.2ch.net �Ȃ�EUC��SJIS�ϊ� - if (P2Util::isHostBe2chNet ($this->host)) { + if (P2BbsType::isHostBe2chNet ($this->host)) { $first_line = mb_convert_encoding ($first_line, 'CP932', 'CP51932'); } @@ -833,7 +833,7 @@ public function previewOneNotFound($code = null) { $this->diedat = true; // 2ch, bbspink, vip2ch �Ȃ�read.cgi�Ŋm�F - if (P2Util::isHost2chs ($this->host) || P2Util::isHostVip2ch ($this->host)) { + if (P2BbsType::isHost2chs ($this->host) || P2BbsType::isHostVip2ch ($this->host)) { $this->getdat_error_msg_ht = $this->get2chDatError ($code); if (count ($this->datochi_residuums)) { if ($_conf['ktai']) { @@ -997,7 +997,7 @@ public function readDat() { // be.2ch.net �Ȃ�EUC��SJIS�ϊ� // �O�̂���SJIS��UTF-8�������R�[�h����̌��ɓ���Ă��� // �E�E�E���A�������������^�C�g���̃X���b�h�Ō딻�肪�������̂ŁA�w�肵�Ă��� - if (P2Util::isHostBe2chNet ($this->host)) { + if (P2BbsType::isHostBe2chNet ($this->host)) { // mb_convert_variables('CP932', 'CP51932,CP932,UTF-8', $this->datlines); mb_convert_variables ('CP932', 'CP51932', $this->datlines); } @@ -1080,7 +1080,7 @@ public function explodeDatLine($aline) { * @return array */ public function scanOriginalHosts() { - if (P2Util::isHost2chs ($this->host) && file_exists ($this->keydat) && ($dat = file_get_contents ($this->keydat))) { + if (P2BbsType::isHost2chs ($this->host) && file_exists ($this->keydat) && ($dat = file_get_contents ($this->keydat))) { $bbs_re = preg_quote ($this->bbs, '@'); $pattern = "@/(\\w+\\.(?:2ch\\.net|bbspink\\.com))(?:/test/read\\.cgi)?/{$bbs_re}\\b@"; if (preg_match_all ($pattern, $dat, $matches, PREG_PATTERN_ORDER)) { diff --git a/lib/expack/tgrep/view.inc.php b/lib/expack/tgrep/view.inc.php index 8178033c4..0a08ca9e5 100644 --- a/lib/expack/tgrep/view.inc.php +++ b/lib/expack/tgrep/view.inc.php @@ -148,7 +148,7 @@ function moveSubject(href, serachWord, query) { $new = ''; $turl = sprintf('%s?host=%s&bbs=%s&key=%d', $_conf['read_php'], $t->host, $t->bbs, $t->tkey); $burl = sprintf('%s?host=%s&bbs=%s&itaj_en=%s&word=%s', $_conf['subject_php'], $t->host, $t->bbs, UrlSafeBase64::encode($t->ita), $htm['query_en']); - if (P2Util::isHostMachiBbs($t->host)) { + if (P2BbsType::isHostMachiBbs($t->host)) { $ourl = sprintf('http://%s/bbs/read.cgi/%s/%s/', $t->host, $t->bbs, $t->tkey); } else { $ourl = sprintf('http://%s/test/read.cgi/%s/%s/', $t->host, $t->bbs, $t->tkey); diff --git a/lib/plugins/hissi/Hissi.php b/lib/plugins/hissi/Hissi.php index 4f5ec41df..78471b081 100644 --- a/lib/plugins/hissi/Hissi.php +++ b/lib/plugins/hissi/Hissi.php @@ -83,7 +83,7 @@ public function load() public function isEnabled() { if ($this->host) { - if (!P2Util::isHost2chs($this->host)) { + if (!P2BbsType::isHost2chs($this->host)) { return false; } } diff --git a/lib/plugins/mimizun/Mimizun.php b/lib/plugins/mimizun/Mimizun.php index 91702a696..e04213aee 100644 --- a/lib/plugins/mimizun/Mimizun.php +++ b/lib/plugins/mimizun/Mimizun.php @@ -91,11 +91,11 @@ public function isEnabled() // (�Z�b�g����Ă��Ȃ����2ch�Ƃ݂Ȃ�) if ($this->host) { // �܂�BBS�Ȃ�false - if (P2Util::isHostMachiBbs($this->host)) { + if (P2BbsType::isHostMachiBbs($this->host)) { return false; } // 2ch�łȂ����false - if (!P2Util::isHost2chs($this->host)) { + if (!P2BbsType::isHost2chs($this->host)) { return false; } } diff --git a/lib/plugins/stalker/Stalker.php b/lib/plugins/stalker/Stalker.php index b101af913..8c788e959 100644 --- a/lib/plugins/stalker/Stalker.php +++ b/lib/plugins/stalker/Stalker.php @@ -24,7 +24,7 @@ class Stalker public function isEnabled() { if ($this->host) { - if (!P2Util::isHost2chs($this->host)) { + if (!P2BbsType::isHost2chs($this->host)) { return false; } } diff --git a/lib/post_form_options.inc.php b/lib/post_form_options.inc.php index 3ceda6076..53a61e5e7 100644 --- a/lib/post_form_options.inc.php +++ b/lib/post_form_options.inc.php @@ -168,13 +168,13 @@ function setHiddenValue(button) { // {{{ ��/Be �������� �`�F�b�N�{�b�N�X // 2ch���������� -if (P2Util::isHost2chs($host) and file_exists($_conf['sid2ch_php'])) { +if (P2BbsType::isHost2chs($host) and file_exists($_conf['sid2ch_php'])) { $htm['maru_post'] = '' . ''; } // Be -if (P2Util::isHost2chs($host) and P2Util::isEnableBe2ch()) { +if (P2BbsType::isHost2chs($host) and P2Util::isEnableBe2ch()) { $htm['beres'] = '' . ''; } @@ -208,7 +208,7 @@ function setHiddenValue(button) { $htm['dpreview2'] = ''; if (!$_conf['ktai'] && $_conf['expack.editor.dpreview']) { $_dpreview_noname = 'null'; - if (P2Util::isHost2chs($host)) { + if (P2BbsType::isHost2chs($host)) { $_dpreview_st = new SettingTxt($host, $bbs); $_dpreview_st->setSettingArray(); if (!empty($_dpreview_st->setting_array['BBS_NONAME_NAME'])) { diff --git a/lib/read_shitaraba.inc.php b/lib/read_shitaraba.inc.php index 131856c04..00ce27460 100644 --- a/lib/read_shitaraba.inc.php +++ b/lib/read_shitaraba.inc.php @@ -36,9 +36,9 @@ function shitarabaDownload(ThreadRead $aThread) } // JBBS@������� - if (P2Util::isHostJbbsShitaraba($aThread->host)) { + if (P2BbsType::isHostJbbsShitaraba($aThread->host)) { // ������΂�livedoor�ړ]�ɑΉ��B�Ǎ����livedoor�Ƃ���B - $host = P2Util::adjustHostJbbs($aThread->host); + $host = P2BbsType::adjustHostJbbs($aThread->host); list($host, $category, ) = explode('/', $host); $machiurl = "http://{$host}/bbs/rawmode.cgi/{$category}/{$aThread->bbs}/{$aThread->key}/{$START}-"; } @@ -55,7 +55,7 @@ function shitarabaDownload(ThreadRead $aThread) unset($machiurl_res); // {{{ ������΂Ȃ�EUC��SJIS�ɕϊ� - if (P2Util::isHostJbbsShitaraba($aThread->host)) { + if (P2BbsType::isHostJbbsShitaraba($aThread->host)) { $temp_data = FileCtl::file_read_contents($tempfile); $temp_data = mb_convert_encoding($temp_data, 'CP932', 'CP51932'); if (FileCtl::file_write_contents($tempfile, $temp_data) === false) { diff --git a/lib/sb_footer.inc.php b/lib/sb_footer.inc.php index ed383accd..25b443234 100644 --- a/lib/sb_footer.inc.php +++ b/lib/sb_footer.inc.php @@ -82,11 +82,11 @@ // �X�y�V�������[�h�łȂ���΃t�H�[�����͕⊮======================== $ini_url_text = ''; if (!$aThreadList->spmode) { - if (P2Util::isHostJbbsShitaraba($aThreadList->host)) { // ������� + if (P2BbsType::isHostJbbsShitaraba($aThreadList->host)) { // ������� $ini_url_text = "http://{$aThreadList->host}/bbs/read.cgi?BBS={$aThreadList->bbs}&KEY="; - } elseif (P2Util::isHostMachiBbs($aThreadList->host)) { // �܂�BBS + } elseif (P2BbsType::isHostMachiBbs($aThreadList->host)) { // �܂�BBS $ini_url_text = "http://{$aThreadList->host}/bbs/read.pl?BBS={$aThreadList->bbs}&KEY="; - } elseif (P2Util::isHostMachiBbsNet($aThreadList->host)) { // �܂��r�˂��� + } elseif (P2BbsType::isHostMachiBbsNet($aThreadList->host)) { // �܂��r�˂��� $ini_url_text = "http://{$aThreadList->host}/test/read.cgi?bbs={$aThreadList->bbs}&key="; } else { $ini_url_text = "http://{$aThreadList->host}/test/read.cgi/{$aThreadList->bbs}/"; diff --git a/lib/sb_header_k.inc.php b/lib/sb_header_k.inc.php index 79f856d38..84eaafe86 100644 --- a/lib/sb_header_k.inc.php +++ b/lib/sb_header_k.inc.php @@ -21,8 +21,8 @@ $ptitle_url = $p2_subject_url; // 2ch�n - } elseif (P2Util::isHost2chs($aThreadList->host)) { - if (P2Util::isHostBbsPink($aThreadList->host)) { + } elseif (P2BbsType::isHost2chs($aThreadList->host)) { + if (P2BbsType::isHostBbsPink($aThreadList->host)) { //$ptitle_url = "http://{$aThreadList->host}/{$aThreadList->bbs}/i/"; $ptitle_url = "http://speedo.ula.cc/test/p.so/{$aThreadList->host}/{$aThreadList->bbs}/"; } else { diff --git a/lib/sb_print_k.inc.php b/lib/sb_print_k.inc.php index db15c40c5..6ac4f3649 100644 --- a/lib/sb_print_k.inc.php +++ b/lib/sb_print_k.inc.php @@ -240,7 +240,7 @@ function sb_print_k($aThreadList) } // >>1�̂�, >>1���� - if (P2Util::isHost2chs($aThreadList->host) && !$aThread->isKitoku()) { + if (P2BbsType::isHost2chs($aThreadList->host) && !$aThread->isKitoku()) { switch ($_conf['mobile.sb_show_first']) { case 1: $thre_url = $onlyone_url; diff --git a/lib/wiki/Samba.php b/lib/wiki/Samba.php index f4080167f..bca2d7db0 100644 --- a/lib/wiki/Samba.php +++ b/lib/wiki/Samba.php @@ -69,7 +69,7 @@ public function save() public function getSambaTime($host, $bbs) { - if (!P2Util::isHost2chs($host)) { + if (!P2BbsType::isHost2chs($host)) { return false; } // samba���擾 @@ -105,7 +105,7 @@ public function setWriteTime($host, $bbs) // �c�莞�Ԃ��擾 public function getSamba($host, $bbs) { - if (!P2Util::isHost2chs($host)) { + if (!P2BbsType::isHost2chs($host)) { return -1; } From aa9238e41c3d7b8b2a2f0b041592ae4aa0e6e4fe Mon Sep 17 00:00:00 2001 From: killer4989 Date: Fri, 27 Oct 2017 22:08:47 +0900 Subject: [PATCH 287/339] =?UTF-8?q?2ch=20API=20=E3=81=AE=E7=8A=B6=E6=85=8B?= =?UTF-8?q?=E3=81=8C=E3=83=98=E3=83=83=E3=83=80=E3=83=BC=E3=81=AB=E8=A8=98?= =?UTF-8?q?=E8=BC=89=E3=81=95=E3=82=8C=E3=81=A6=E3=81=84=E3=81=AA=E3=81=84?= =?UTF-8?q?=E5=A0=B4=E5=90=88=E3=81=AF=200=20=E3=81=A8=E3=81=BF=E3=81=AA?= =?UTF-8?q?=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index d71e61805..fb316c9ee 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -180,10 +180,18 @@ protected function _downloadDat2chAPI($uaMona, $SID2ch, $from_bytes) { // 3 (sessionID�L���^API�F�؎���Ronin�A�J�E���g��t���Ď擾��������) // �� User-Status: �� 2,3 �̎���dat����/�ߋ����O������ $apiUserStatus = $response->getHeader('User-Status'); + if(empty($apiUserStatus)){ + // �w�b�_�[�ɋL�ڂ���Ă��Ȃ��ꍇ�� 0 �Ƃ݂Ȃ� + $apiUserStatus = 0; + } // Thread-Status: 0 (dat�擾�s��) or 1 (���s�X��) or 2 (dat����) or 3 (�ߋ����O) or // 8 (dat�擾�s�^Ronin������dat����/�ߋ����O����낤�Ƃ����Ƃ�) $apiThreadStatus = $response->getHeader('Thread-Status'); + if(empty($apiThreadStatus)){ + // �w�b�_�[�ɋL�ڂ���Ă��Ȃ��ꍇ�� 0 �Ƃ݂Ȃ� + $apiThreadStatus = 0; + } $code = $response->getStatus (); From dc4cdbc418b0f5ed2d20a4baed6d693ad291b88d Mon Sep 17 00:00:00 2001 From: killer4989 Date: Fri, 27 Oct 2017 22:14:47 +0900 Subject: [PATCH 288/339] =?UTF-8?q?dat=E5=8F=96=E5=BE=97=E4=B8=8D=E5=8F=AF?= =?UTF-8?q?=E3=81=A0=E3=81=A3=E3=81=9F=E5=A0=B4=E5=90=88=E3=81=AE=E3=83=A1?= =?UTF-8?q?=E3=83=83=E3=82=BB=E3=83=BC=E3=82=B8=E3=82=92=E8=A1=A8=E7=A4=BA?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index fb316c9ee..0db2f327d 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -200,6 +200,17 @@ protected function _downloadDat2chAPI($uaMona, $SID2ch, $from_bytes) { P2Util::pushInfoHtml('

    p2 debug(ThreadRead::API):URL='.$url.' User-Status='.$apiUserStatus.' Thread-Status='.$apiThreadStatus.' HTTP-Status='.$code.'

    '); } + // dat�擾�s�‚������ꍇ + if($apiThreadStatus === 0){ + $this->getdat_error_msg_ht .= "

    rep2 error: sessionID " . ($apiUserStatus === 0 ? '�������������̂�':'�͗L���ł�����') . "�X���b�h�擾�Ɏ��s���܂����B

    "; + if($apiUserStatus === 0){ + $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&relogin2chapi=true\">API�ōĎ擾�����݂�]"; + $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&olddat=true\">��dat�ōĎ擾�����݂�]"; + $this->diedat = true; + return false; + } + } + // API�̕ԓ����ߋ����O(Ronin��)��������ߋ����O�����N��\�����ďI�� if($apiThreadStatus == '8') { return $this->_downloadDat2chNotFound ('302'); From 82e3ef770aa1cef38a1d799a15a833b3e25efb7c Mon Sep 17 00:00:00 2001 From: killer4989 Date: Fri, 27 Oct 2017 22:41:06 +0900 Subject: [PATCH 289/339] =?UTF-8?q?=E8=82=A5=E5=A4=A7=E5=8C=96=E3=81=97?= =?UTF-8?q?=E3=81=9F=20P2Util=20=E3=81=8B=E3=82=89=E3=83=9B=E3=82=B9?= =?UTF-8?q?=E3=83=88=E5=88=A4=E5=AE=9A=E9=96=A2=E4=BF=82=E3=81=AE=E6=A9=9F?= =?UTF-8?q?=E8=83=BD=E3=82=92=20P2BbsType=20=E3=81=AB=E7=A7=BB=E5=8B=95(?= =?UTF-8?q?=E7=AC=AC3=E5=BC=BE)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit まだあった(白目 --- lib/ShowThread.php | 4 ++-- lib/ShowThreadI.php | 4 ++-- lib/ShowThreadK.php | 4 ++-- lib/ShowThreadPc.php | 2 +- rep2/info.php | 2 +- rep2/live_post_form.php | 2 +- rep2/post.php | 20 ++++++++++---------- rep2/post_draft.php | 4 ++-- rep2/post_form.php | 2 +- 9 files changed, 22 insertions(+), 22 deletions(-) diff --git a/lib/ShowThread.php b/lib/ShowThread.php index 1bf139e76..d6143b438 100644 --- a/lib/ShowThread.php +++ b/lib/ShowThread.php @@ -1179,7 +1179,7 @@ private function _transLinkDo(array $s) if (strlen($following) > 0) { // �E�B�L�y�f�B�A���{��ł�URL�ŁASJIS��2�o�C�g�����̏�ʃo�C�g // (0x81-0x9F,0xE0-0xEF)�������Ƃ� - if (P2Util::isUrlWikipediaJa($url)) { + if (P2BbsType::isUrlWikipediaJa($url)) { $leading = ord($following); if ((($leading ^ 0x90) < 32 && $leading != 0x80) || ($leading ^ 0xE0) < 16) { $url .= rawurlencode(mb_convert_encoding($following, 'UTF-8', 'CP932')); @@ -1229,7 +1229,7 @@ private function _transLinkDo(array $s) $purl['host'] == '127.0.0.1' || //HostCheck::isAddressLocal($purl['host']) || //HostCheck::isAddressPrivate($purl['host']) || - P2Util::isHostExample($purl['host'])) + P2BbsType::isHostExample($purl['host'])) { return $orig; } diff --git a/lib/ShowThreadI.php b/lib/ShowThreadI.php index 4f9aa49c5..8b5f7acb8 100644 --- a/lib/ShowThreadI.php +++ b/lib/ShowThreadI.php @@ -893,7 +893,7 @@ public function plugin_viewImage($url, $purl, $str) { global $_conf; - if (P2Util::isUrlWikipediaJa($url)) { + if (P2BbsType::isUrlWikipediaJa($url)) { return false; } @@ -920,7 +920,7 @@ public function plugin_replaceImageUrl($url, $purl, $str) global $_conf; global $pre_thumb_unlimited, $pre_thumb_ignore_limit, $pre_thumb_limit_k; - if (P2Util::isUrlWikipediaJa($url)) { + if (P2BbsType::isUrlWikipediaJa($url)) { return false; } diff --git a/lib/ShowThreadK.php b/lib/ShowThreadK.php index 8b638ec1c..07c2654c3 100644 --- a/lib/ShowThreadK.php +++ b/lib/ShowThreadK.php @@ -834,7 +834,7 @@ public function plugin_viewImage($url, $purl, $str) { global $_conf; - if (P2Util::isUrlWikipediaJa($url)) { + if (P2BbsType::isUrlWikipediaJa($url)) { return false; } @@ -861,7 +861,7 @@ public function plugin_replaceImageUrl($url, $purl, $str) global $_conf; global $pre_thumb_unlimited, $pre_thumb_ignore_limit, $pre_thumb_limit_k; - if (P2Util::isUrlWikipediaJa($url)) { + if (P2BbsType::isUrlWikipediaJa($url)) { return false; } diff --git a/lib/ShowThreadPc.php b/lib/ShowThreadPc.php index 353ec8889..3f8de0e08 100644 --- a/lib/ShowThreadPc.php +++ b/lib/ShowThreadPc.php @@ -1318,7 +1318,7 @@ public function plugin_viewImage($url, $purl, $str) global $_conf; global $pre_thumb_unlimited, $pre_thumb_limit; - if (P2Util::isUrlWikipediaJa($url)) { + if (P2BbsType::isUrlWikipediaJa($url)) { return false; } diff --git a/rep2/info.php b/rep2/info.php index 7fbe15e64..e7c91a8fe 100644 --- a/rep2/info.php +++ b/rep2/info.php @@ -283,7 +283,7 @@ } $motothre_url = $aThread->getMotoThread(); -if (P2Util::isHost2chs($aThread->host)) { +if (P2BbsType::isHost2chs($aThread->host)) { $motothre_org_url = $aThread->getMotoThread(true); } else { $motothre_org_url = $motothre_url; diff --git a/rep2/live_post_form.php b/rep2/live_post_form.php index 14182b32a..f7b1c5798 100755 --- a/rep2/live_post_form.php +++ b/rep2/live_post_form.php @@ -57,7 +57,7 @@ $ptitle = "{$itaj_hd} - �V�K�X���b�h�쐬"; // machibbs�AJBBS@������� �Ȃ� - if (P2Util::isHostMachiBbs($host) or P2Util::isHostJbbsShitaraba($host)) { + if (P2BbsType::isHostMachiBbs($host) or P2BbsType::isHostJbbsShitaraba($host)) { $submit_value = '�V�K��������'; // 2ch�Ȃ� } else { diff --git a/rep2/post.php b/rep2/post.php index c9a797531..d7d57d35b 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -84,13 +84,13 @@ // }}} // machibbs�AJBBS@������� �Ȃ� -if (P2Util::isHostMachiBbs($host) or P2Util::isHostJbbsShitaraba($host)) { +if (P2BbsType::isHostMachiBbs($host) or P2BbsType::isHostJbbsShitaraba($host)) { $bbs_cgi = '/bbs/write.cgi'; // JBBS@������� �Ȃ� - if (P2Util::isHostJbbsShitaraba($host)) { + if (P2BbsType::isHostJbbsShitaraba($host)) { // ������΂̈ړ]�ɑΉ��Bpost������s�ɍ��킹��B - $host = P2Util::adjustHostJbbs($host); + $host = P2BbsType::adjustHostJbbs($host); $bbs_cgi = '../../bbs/write.cgi'; preg_match('/\\/(\\w+)$/', $host, $ar); $dir = $ar[1]; @@ -148,13 +148,13 @@ exit; } -if (P2Util::isHostJbbsShitaraba($host)) { +if (P2BbsType::isHostJbbsShitaraba($host)) { $post[$dir_k] = $dir; } // {{{ 2ch�Ł����O�C�����Ȃ�sid�lj� -if (!empty($_POST['maru']) and P2Util::isHost2chs($host)) { +if (!empty($_POST['maru']) and P2BbsType::isHost2chs($host)) { $maru_time = 0; if (file_exists($_conf['sid2ch_php'])) { @@ -212,7 +212,7 @@ PostDataStore::set($post_backup_key, $post_cache); // cookie �ǂݍ��� -$cookie_key = $_login->user_u . '/' . P2Util::normalizeHostName(P2Util::isHostBbsPink($host) ? 'www.bbspink.com' : P2Util::isHost2chs($host) ? 'www.2ch.net' : $host); // �E�@���Ή� +$cookie_key = $_login->user_u . '/' . P2Util::normalizeHostName(P2BbsType::isHostBbsPink($host) ? 'www.bbspink.com' : P2BbsType::isHost2chs($host) ? 'www.2ch.net' : $host); // �E�@���Ή� if ($p2cookies = CookieDataStore::get($cookie_key)) { if (is_array($p2cookies)) { if (array_key_exists('expires', $p2cookies)) { @@ -389,7 +389,7 @@ function postIt($host, $bbs, $key, $post) global $bbs_cgi; // �ڑ��悪2ch.net�Ȃ��SSL�ʐM���s��(pink�͑Ή����Ă��Ȃ��̂ł��Ȃ�) - if (P2Util::isHost2chs($host) && ! P2Util::isHostBbsPink($host) && $_conf['2ch_ssl.post']) { + if (P2BbsType::isHost2chs($host) && ! P2BbsType::isHostBbsPink($host) && $_conf['2ch_ssl.post']) { $bbs_cgi_url = 'https://' . $host . $bbs_cgi; } else { $bbs_cgi_url = 'http://' . $host . $bbs_cgi; @@ -428,9 +428,9 @@ function postIt($host, $bbs, $key, $post) while (list($name, $value) = each($post)) { // ������� or be.2ch.net�Ȃ�AEUC�ɕϊ� - if (P2Util::isHostJbbsShitaraba($host) || P2BbsType::isHostBe2chs($host)) { + if (P2BbsType::isHostJbbsShitaraba($host) || P2BbsType::isHostBe2chs($host)) { $value = mb_convert_encoding($value, 'CP51932', 'CP932'); - } elseif (P2Util::isHost2chs($host) && ! P2Util::isHostBbsPink($host)) { + } elseif (P2BbsType::isHost2chs($host) && ! P2BbsType::isHostBbsPink($host)) { // 2ch��Unicode�̕������post���� $value = html_entity_decode(mb_convert_encoding($value, 'UTF-8', 'CP932'),ENT_QUOTES,'UTF-8'); } @@ -464,7 +464,7 @@ function postIt($host, $bbs, $key, $post) } // be.2ch.net or JBBS������� �����R�[�h�ϊ� EUC��SJIS - if (P2BbsType::isHostBe2chs($host) || P2Util::isHostJbbsShitaraba($host)) { + if (P2BbsType::isHostBe2chs($host) || P2BbsType::isHostJbbsShitaraba($host)) { $body = mb_convert_encoding($body, 'CP932', 'CP51932'); // diff --git a/rep2/post_draft.php b/rep2/post_draft.php index 152585d0b..b70b8f920 100644 --- a/rep2/post_draft.php +++ b/rep2/post_draft.php @@ -44,10 +44,10 @@ } // ������΂�livedoor�ړ]�ɑΉ��Bpost���livedoor�Ƃ���B -$host = P2Util::adjustHostJbbs($host); +$host = P2BbsType::adjustHostJbbs($host); // machibbs�AJBBS@������� �Ȃ� -if (P2Util::isHostMachiBbs($host) or P2Util::isHostJbbsShitaraba($host)) { +if (P2BbsType::isHostMachiBbs($host) or P2BbsType::isHostJbbsShitaraba($host)) { /* compact() �� array_combine() ��POST����l�̔z������̂ŁA $post_param_keys �� $post_send_keys �̒l�̏����͑�����I */ //$post_param_keys = array('bbs', 'key', 'time', 'FROM', 'mail', 'MESSAGE', 'subject', 'submit'); diff --git a/rep2/post_form.php b/rep2/post_form.php index fb935ca12..f88181be4 100644 --- a/rep2/post_form.php +++ b/rep2/post_form.php @@ -55,7 +55,7 @@ $ptitle = "{$itaj_hd} - �V�K�X���b�h�쐬"; // machibbs�AJBBS@������� �Ȃ� - if (P2Util::isHostMachiBbs($host) or P2Util::isHostJbbsShitaraba($host)) { + if (P2BbsType::isHostMachiBbs($host) or P2BbsType::isHostJbbsShitaraba($host)) { $submit_value = '�V�K��������'; // 2ch�Ȃ� } else { From 7e046a92abad6157c2bac31e3d34d28cd1b8ffdc Mon Sep 17 00:00:00 2001 From: killer4989 Date: Fri, 27 Oct 2017 23:10:08 +0900 Subject: [PATCH 290/339] =?UTF-8?q?=E8=82=A5=E5=A4=A7=E5=8C=96=E3=81=97?= =?UTF-8?q?=E3=81=9F=20P2Util=20=E3=81=8B=E3=82=89=E3=83=9B=E3=82=B9?= =?UTF-8?q?=E3=83=88=E5=88=A4=E5=AE=9A=E9=96=A2=E4=BF=82=E3=81=AE=E6=A9=9F?= =?UTF-8?q?=E8=83=BD=E3=82=92=20P2BbsType=20=E3=81=AB=E7=A7=BB=E5=8B=95(?= =?UTF-8?q?=E7=AC=AC3=E5=BC=BE)=20=EF=BD=A5=20=E7=89=B9=E3=81=AB=E4=BD=95?= =?UTF-8?q?=E3=82=82=E3=81=AA=E3=81=91=E3=82=8C=E3=81=B0=E5=BE=8C=E6=97=A5?= =?UTF-8?q?=E3=83=A1=E3=82=BD=E3=83=83=E3=83=89=E3=82=92=E6=B6=88=E3=81=99?= =?UTF-8?q?(=E4=BA=88=E5=AE=9A)=20isUrlWikipediaJa=20=E3=82=82=E5=90=AB?= =?UTF-8?q?=E3=82=93=E3=81=A7=E3=81=84=E3=81=9F=E3=81=AE=E3=81=A7=E3=82=AF?= =?UTF-8?q?=E3=83=A9=E3=82=B9=E5=90=8D=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/BbsMap.php | 8 +- lib/P2Commun.php | 4 +- lib/P2CurlMulti.php | 8 +- lib/{P2BbsType.php => P2HostType.php} | 4 +- lib/P2HttpExt.php | 4 +- lib/P2Util.php | 130 ++++++++------------------ lib/SettingTxt.php | 8 +- lib/ShowThread.php | 10 +- lib/ShowThreadI.php | 6 +- lib/ShowThreadK.php | 6 +- lib/ShowThreadPc.php | 2 +- lib/SubjectTxt.php | 10 +- lib/Thread.php | 14 +-- lib/ThreadRead.php | 22 ++--- lib/expack/tgrep/view.inc.php | 2 +- lib/plugins/hissi/Hissi.php | 2 +- lib/plugins/mimizun/Mimizun.php | 4 +- lib/plugins/stalker/Stalker.php | 2 +- lib/post_form_options.inc.php | 6 +- lib/read_shitaraba.inc.php | 6 +- lib/sb_footer.inc.php | 6 +- lib/sb_header_k.inc.php | 4 +- lib/sb_print_k.inc.php | 2 +- lib/wiki/Samba.php | 4 +- rep2/info.php | 2 +- rep2/live_post_form.php | 2 +- rep2/post.php | 22 ++--- rep2/post_draft.php | 4 +- rep2/post_form.php | 2 +- rep2/subject.php | 2 +- 30 files changed, 129 insertions(+), 179 deletions(-) rename lib/{P2BbsType.php => P2HostType.php} (99%) diff --git a/lib/BbsMap.php b/lib/BbsMap.php index d54ef7ca1..4dee44618 100644 --- a/lib/BbsMap.php +++ b/lib/BbsMap.php @@ -404,13 +404,13 @@ static private function _writeData($path, $neolines) */ static private function _detectHostType($host) { - if (P2BbsType::isHostBbsPink($host)) { + if (P2HostType::isHostBbsPink($host)) { $type = 'bbspink'; - } elseif (P2BbsType::isHost2chs($host)) { + } elseif (P2HostType::isHost2chs($host)) { $type = '2channel'; - } elseif (P2BbsType::isHostMachiBbs($host)) { + } elseif (P2HostType::isHostMachiBbs($host)) { $type = 'machibbs'; - } elseif (P2BbsType::isHostJbbsShitaraba($host)) { + } elseif (P2HostType::isHostJbbsShitaraba($host)) { $type = 'jbbs'; } else { $type = $host; diff --git a/lib/P2Commun.php b/lib/P2Commun.php index 12ab2934d..f283436e6 100644 --- a/lib/P2Commun.php +++ b/lib/P2Commun.php @@ -35,7 +35,7 @@ static public function createHTTPRequest($url , $method = HTTP_Request2::METHOD_ // �悭�g���w�b�_���w�� // p2��HTTP�ʐM�͓��Ɏw��̖�������Monazilla�𖼏��悤�ɂ��� - $req->setHeader ('User-Agent', self::getP2UA(true,P2BbsType::isHost2chs($purl['host']))); + $req->setHeader ('User-Agent', self::getP2UA(true,P2HostType::isHost2chs($purl['host']))); $req->setHeader ('Accept-Language', 'ja,en-us;q=0.7,en;q=0.3'); $req->setHeader ('Accept', '*/*'); $req->setHeader ('Accept-Encoding', 'gzip, deflate'); @@ -59,7 +59,7 @@ static public function createHTTPRequest($url , $method = HTTP_Request2::METHOD_ } // �v���L�V - if ($_conf['tor_use'] && P2BbsType::isHostTor($purl['host'], 0)) { // Tor(.onion)��Tor�p�̐ݒ���Z�b�g + if ($_conf['tor_use'] && P2HostType::isHostTor($purl['host'], 0)) { // Tor(.onion)��Tor�p�̐ݒ���Z�b�g $req->setConfig (array ( 'proxy_host' => $_conf['tor_proxy_host'], 'proxy_port' => $_conf['tor_proxy_port'], diff --git a/lib/P2CurlMulti.php b/lib/P2CurlMulti.php index bb28e1ccb..3a4862805 100644 --- a/lib/P2CurlMulti.php +++ b/lib/P2CurlMulti.php @@ -65,15 +65,15 @@ private function add($subjects, $force = false) { curl_setopt($this->ch[$key], CURLOPT_MAXCONNECTS, $_conf['expack.curl_per_host']); // User-Agent - if(P2BbsType::isHost2chs($host) && !P2BbsType::isNotUse2chsAPI($host) && $_conf['2chapi_use']){ + if(P2HostType::isHost2chs($host) && !P2HostType::isNotUse2chsAPI($host) && $_conf['2chapi_use']){ $user_agent = sprintf ($_conf['2chapi_ua.read'], $_conf['2chapi_appname']); } else { - $user_agent = P2Commun::getP2UA(true, P2BbsType::isHost2chs($purl['host'])); + $user_agent = P2Commun::getP2UA(true, P2HostType::isHost2chs($purl['host'])); } curl_setopt($this->ch[$key], CURLOPT_USERAGENT, $user_agent); // �v���L�V - if ($_conf['tor_use'] && P2BbsType::isHostTor($purl['host'], 0)) { // Tor(.onion)��Tor�p�̐ݒ���Z�b�g + if ($_conf['tor_use'] && P2HostType::isHostTor($purl['host'], 0)) { // Tor(.onion)��Tor�p�̐ݒ���Z�b�g $tor_user_info = sprintf("%s%s@", $_conf['tor_proxy_user'], empty($_conf['tor_proxy_password']) ? "" : ":{$_conf['tor_proxy_password']}"); $tor_address = "{$_conf['tor_proxy_host']}:{$_conf['tor_proxy_port']}"; $address = sprintf("http://%s%s", strpos($tor_user_info, "@") === 0 ? "" : $tor_user_info, $tor_address); @@ -171,7 +171,7 @@ private function getResult() { $data = curl_multi_getcontent($ch_array); $header_size = $tmp['header_size']; - if (P2BbsType::isHostJbbsShitaraba($host) || P2BbsType::isHostBe2chs($host)) { + if (P2HostType::isHostJbbsShitaraba($host) || P2HostType::isHostBe2chs($host)) { $data = mb_convert_encoding($data, 'CP932', 'CP51932'); } diff --git a/lib/P2BbsType.php b/lib/P2HostType.php similarity index 99% rename from lib/P2BbsType.php rename to lib/P2HostType.php index accb99f6f..e1664ed53 100644 --- a/lib/P2BbsType.php +++ b/lib/P2HostType.php @@ -1,6 +1,6 @@ $_conf['2ch_ssl.post'] ? "https" : "http", - "host" => P2BbsType::isHost5ch($host) ? "be.5ch.net" : "be.2ch.net", + "host" => P2HostType::isHost5ch($host) ? "be.5ch.net" : "be.2ch.net", "path" => "index.php")); try { @@ -2214,12 +2170,6 @@ static public function debug() echo PHP_EOL; echo '/', '*', '
    ', PHP_EOL;
             echo p2h(print_r(self::$_hostDirs, true)), PHP_EOL;
    -        echo p2h(print_r(array_map('intval', self::$_hostIs2chs), true)), PHP_EOL;
    -        //echo p2h(print_r(array_map('intval', self::$_hostIsBe2chNet), true)), PHP_EOL;
    -        echo p2h(print_r(array_map('intval', self::$_hostIsBbsPink), true)), PHP_EOL;
    -        echo p2h(print_r(array_map('intval', self::$_hostIsMachiBbs), true)), PHP_EOL;
    -        echo p2h(print_r(array_map('intval', self::$_hostIsMachiBbsNet), true)), PHP_EOL;
    -        echo p2h(print_r(array_map('intval', self::$_hostIsJbbsShitaraba), true)), PHP_EOL;
             echo '
    ', '*', '/', PHP_EOL; } */ diff --git a/lib/SettingTxt.php b/lib/SettingTxt.php index dd8aa5aeb..499e18c83 100644 --- a/lib/SettingTxt.php +++ b/lib/SettingTxt.php @@ -39,12 +39,12 @@ public function __construct($host, $bbs) $this->_setting_srd = $dat_host_bbs_dir_s . 'p2_kb_setting.srd'; // �ڑ��悪2ch.net�Ȃ��SSL�ʐM���s��(pink�͑Ή����Ă��Ȃ��̂ł��Ȃ�) - if (P2BbsType::isHost2chs($host) && ! P2BbsType::isHostBbsPink($host) && $_conf['2ch_ssl.subject']) { + if (P2HostType::isHost2chs($host) && ! P2HostType::isHostBbsPink($host) && $_conf['2ch_ssl.subject']) { $this->_url = 'https://' . $host . '/' . $bbs . '/SETTING.TXT'; } else { $this->_url = 'http://' . $host . '/' . $bbs . '/SETTING.TXT'; } - //$this->_url = P2BbsType::adjustHostJbbs($this->_url); // ������΂�livedoor�ړ]�ɑΉ��B�Ǎ����livedoor�Ƃ���B + //$this->_url = P2HostType::adjustHostJbbs($this->_url); // ������΂�livedoor�ړ]�ɑΉ��B�Ǎ����livedoor�Ƃ���B $this->setting_array = array(); @@ -80,7 +80,7 @@ public function downloadSettingTxt() global $_conf; // �܂�BBS�E������� �� SETTING.TXT �����݂��Ȃ����̂Ƃ��� - if (P2BbsType::isHostMachiBbs($this->_host) || P2BbsType::isHostJbbsShitaraba($this->_host)) { + if (P2HostType::isHostMachiBbs($this->_host) || P2HostType::isHostJbbsShitaraba($this->_host)) { return false; } @@ -118,7 +118,7 @@ public function downloadSettingTxt() //var_dump($req->getResponseHeader()); $body = $response->getBody(); // ������� or be.2ch.net �Ȃ�EUC��SJIS�ɕϊ� - if (P2BbsType::isHostJbbsShitaraba($this->host) || P2BbsType::isHostBe2chs($this->host)) { + if (P2HostType::isHostJbbsShitaraba($this->host) || P2HostType::isHostBe2chs($this->host)) { $body = mb_convert_encoding($body, 'CP932', 'CP51932'); } if (FileCtl::file_write_contents($this->_setting_txt, $body) === false) { diff --git a/lib/ShowThread.php b/lib/ShowThread.php index d6143b438..4f2f9d174 100644 --- a/lib/ShowThread.php +++ b/lib/ShowThread.php @@ -347,11 +347,11 @@ protected function __construct(ThreadRead $aThread, $matome = false) $this->_highlight_nums = array(); $this->_highlight_msgs = array(); - if (P2BbsType::isHostBbsPink($this->thread->host)) { + if (P2HostType::isHostBbsPink($this->thread->host)) { $this->_redirector = self::REDIRECTOR_PINKTOWER; - } elseif (P2BbsType::isHost2chs($this->thread->host)) { + } elseif (P2HostType::isHost2chs($this->thread->host)) { $this->_redirector = self::REDIRECTOR_IMENU; - } elseif (P2BbsType::isHostMachiBbs($this->thread->host)) { + } elseif (P2HostType::isHostMachiBbs($this->thread->host)) { $this->_redirector = self::REDIRECTOR_MACHIBBS; } else { $this->_redirector = self::REDIRECTOR_NONE; @@ -1179,7 +1179,7 @@ private function _transLinkDo(array $s) if (strlen($following) > 0) { // �E�B�L�y�f�B�A���{��ł�URL�ŁASJIS��2�o�C�g�����̏�ʃo�C�g // (0x81-0x9F,0xE0-0xEF)�������Ƃ� - if (P2BbsType::isUrlWikipediaJa($url)) { + if (P2HostType::isUrlWikipediaJa($url)) { $leading = ord($following); if ((($leading ^ 0x90) < 32 && $leading != 0x80) || ($leading ^ 0xE0) < 16) { $url .= rawurlencode(mb_convert_encoding($following, 'UTF-8', 'CP932')); @@ -1229,7 +1229,7 @@ private function _transLinkDo(array $s) $purl['host'] == '127.0.0.1' || //HostCheck::isAddressLocal($purl['host']) || //HostCheck::isAddressPrivate($purl['host']) || - P2BbsType::isHostExample($purl['host'])) + P2HostType::isHostExample($purl['host'])) { return $orig; } diff --git a/lib/ShowThreadI.php b/lib/ShowThreadI.php index 8b5f7acb8..0f6ccce5e 100644 --- a/lib/ShowThreadI.php +++ b/lib/ShowThreadI.php @@ -65,7 +65,7 @@ public function __construct(ThreadRead $aThread, $matome = false) $this->setBbsNonameName(); } - if (P2BbsType::isHost2chs($aThread->host)) { + if (P2HostType::isHost2chs($aThread->host)) { $this->_kushiYakiName = '
    [�\{}@{}@{}-] '; } @@ -893,7 +893,7 @@ public function plugin_viewImage($url, $purl, $str) { global $_conf; - if (P2BbsType::isUrlWikipediaJa($url)) { + if (P2HostType::isUrlWikipediaJa($url)) { return false; } @@ -920,7 +920,7 @@ public function plugin_replaceImageUrl($url, $purl, $str) global $_conf; global $pre_thumb_unlimited, $pre_thumb_ignore_limit, $pre_thumb_limit_k; - if (P2BbsType::isUrlWikipediaJa($url)) { + if (P2HostType::isUrlWikipediaJa($url)) { return false; } diff --git a/lib/ShowThreadK.php b/lib/ShowThreadK.php index 07c2654c3..2f40d4476 100644 --- a/lib/ShowThreadK.php +++ b/lib/ShowThreadK.php @@ -65,7 +65,7 @@ public function __construct(ThreadRead $aThread, $matome = false) $this->setBbsNonameName(); } - if (P2BbsType::isHost2chs($aThread->host)) { + if (P2HostType::isHost2chs($aThread->host)) { $this->_kushiYakiName = ' [�\{}@{}@{}-] '; } @@ -834,7 +834,7 @@ public function plugin_viewImage($url, $purl, $str) { global $_conf; - if (P2BbsType::isUrlWikipediaJa($url)) { + if (P2HostType::isUrlWikipediaJa($url)) { return false; } @@ -861,7 +861,7 @@ public function plugin_replaceImageUrl($url, $purl, $str) global $_conf; global $pre_thumb_unlimited, $pre_thumb_ignore_limit, $pre_thumb_limit_k; - if (P2BbsType::isUrlWikipediaJa($url)) { + if (P2HostType::isUrlWikipediaJa($url)) { return false; } diff --git a/lib/ShowThreadPc.php b/lib/ShowThreadPc.php index 3f8de0e08..f9524c92e 100644 --- a/lib/ShowThreadPc.php +++ b/lib/ShowThreadPc.php @@ -1318,7 +1318,7 @@ public function plugin_viewImage($url, $purl, $str) global $_conf; global $pre_thumb_unlimited, $pre_thumb_limit; - if (P2BbsType::isUrlWikipediaJa($url)) { + if (P2HostType::isUrlWikipediaJa($url)) { return false; } diff --git a/lib/SubjectTxt.php b/lib/SubjectTxt.php index 2381b3b1d..7eb1e3d93 100644 --- a/lib/SubjectTxt.php +++ b/lib/SubjectTxt.php @@ -31,16 +31,16 @@ public function __construct($host, $bbs) $this->subject_file = P2Util::datDirOfHostBbs($host, $bbs) . 'subject.txt'; // �ڑ��悪2ch.net�Ȃ��SSL�ʐM���s��(pink�͑Ή����Ă��Ȃ��̂ł��Ȃ�) - if (P2BbsType::isHost2chs($host) && ! P2BbsType::isHostBbsPink($host) && $_conf['2ch_ssl.subject']) { + if (P2HostType::isHost2chs($host) && ! P2HostType::isHostBbsPink($host) && $_conf['2ch_ssl.subject']) { $this->subject_url = 'https://' . $host . '/' . $bbs . '/subject.txt'; } else { $this->subject_url = 'http://' . $host . '/' . $bbs . '/subject.txt'; } // ������΂�livedoor�ړ]�ɑΉ��B�Ǎ����livedoor�Ƃ���B - if(P2BbsType::isHostJbbsShitaraba($host)) + if(P2HostType::isHostJbbsShitaraba($host)) { - $this->subject_url = P2BbsType::adjustHostJbbs($this->subject_url); + $this->subject_url = P2HostType::adjustHostJbbs($this->subject_url); } // subject.txt���_�E�����[�h���Z�b�g���� @@ -114,7 +114,7 @@ public function downloadSubject() //var_dump($req->getResponseHeader()); $body = $response->getBody(); // ������� or be.2ch.net �Ȃ�EUC��SJIS�ɕϊ� - if (P2BbsType::isHostJbbsShitaraba($this->host) || P2BbsType::isHostBe2chs($this->host)) { + if (P2HostType::isHostJbbsShitaraba($this->host) || P2HostType::isHostBe2chs($this->host)) { $body = mb_convert_encoding($body, 'CP932', 'CP51932'); } if (FileCtl::file_write_contents($this->subject_file, $body) === false) { @@ -184,7 +184,7 @@ public function setSubjectLines($cont = '') $this->subject_lines = FileCtl::file_read_lines($this->subject_file); // JBBS@������΂Ȃ�d���X���^�C���폜���� - if (P2BbsType::isHostJbbsShitaraba($this->host)) { + if (P2HostType::isHostJbbsShitaraba($this->host)) { $this->subject_lines = array_unique($this->subject_lines); } diff --git a/lib/Thread.php b/lib/Thread.php index 45f024606..05516566c 100644 --- a/lib/Thread.php +++ b/lib/Thread.php @@ -456,7 +456,7 @@ public function setTitleFromLocal() $this->setTtitle($d[4]); // be.2ch.net �Ȃ�EUC��SJIS�ϊ� - if (P2BbsType::isHostBe2chs($this->host)) { + if (P2HostType::isHostBe2chs($this->host)) { $ttitle = mb_convert_encoding($this->ttitle, 'CP932', 'CP51932'); $this->setTtitle($ttitle); } @@ -497,13 +497,13 @@ public function getMotoThread($force_pc = false, $ls = null) } // 2ch�n - if (P2BbsType::isHost2chs($this->host)) { + if (P2HostType::isHost2chs($this->host)) { // PC if (!$mobile) { $motothre_url = "http://{$this->host}/test/read.cgi/{$this->bbs}/{$this->key}/{$ls}"; // �g�� } else { - if (P2BbsType::isHostBbsPink($this->host)) { + if (P2HostType::isHostBbsPink($this->host)) { //$motothre_url = "http://{$this->host}/test/r.i/{$this->bbs}/{$this->key}/{$ls}"; $motothre_url = "http://speedo.ula.cc/test/r.so/{$this->host}/{$this->bbs}/{$this->key}/{$ls}"; } else { @@ -515,7 +515,7 @@ public function getMotoThread($force_pc = false, $ls = null) } // �܂�BBS - } elseif (P2BbsType::isHostMachiBbs($this->host)) { + } elseif (P2HostType::isHostMachiBbs($this->host)) { if ($mobile) { $motothre_url = "http://{$this->host}/bbs/read.pl?IMODE=TRUE&BBS={$this->bbs}&KEY={$this->key}"; } else { @@ -523,13 +523,13 @@ public function getMotoThread($force_pc = false, $ls = null) } // �܂��т˂��� - } elseif (P2BbsType::isHostMachiBbsNet($this->host)) { + } elseif (P2HostType::isHostMachiBbsNet($this->host)) { $motothre_url = "http://{$this->host}/test/read.cgi?bbs={$this->bbs}&key={$this->key}"; if ($mobile) { $motothre_url .= '&imode=true'; } // JBBS������� - } elseif (P2BbsType::isHostJbbsShitaraba($this->host)) { - list($host, $category) = explode('/', P2BbsType::adjustHostJbbs($this->host), 2); + } elseif (P2HostType::isHostJbbsShitaraba($this->host)) { + list($host, $category) = explode('/', P2HostType::adjustHostJbbs($this->host), 2); $bbs_cgi = ($mobile) ? 'i.cgi' : 'read.cgi'; $motothre_url = "http://{$host}/bbs/{$bbs_cgi}/{$category}/{$this->bbs}/{$this->key}/{$ls}"; diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 0db2f327d..3d4838d12 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -47,10 +47,10 @@ public function downloadDat() { global $_conf; // �܂�BBS - if (P2BbsType::isHostMachiBbs ($this->host)) { + if (P2HostType::isHostMachiBbs ($this->host)) { return DownloadDatMachiBbs::invoke ($this); // JBBS@������� - } elseif (P2BbsType::isHostJbbsShitaraba ($this->host)) { + } elseif (P2HostType::isHostJbbsShitaraba ($this->host)) { if (! function_exists ('shitarabaDownload')) { include P2_LIB_DIR . '/read_shitaraba.inc.php'; } @@ -70,7 +70,7 @@ public function downloadDat() { return $this->_downloadDat2chKako ($_GET['kakolog'], $ext); // 2ch ��API�o�R�ŗ��Ƃ� - } elseif (P2BbsType::isHost2chs ($this->host) && !P2BbsType::isNotUse2chsAPI ($this->host) && $_conf['2chapi_use'] && empty ($_GET['olddat'])) { + } elseif (P2HostType::isHost2chs ($this->host) && !P2HostType::isNotUse2chsAPI ($this->host) && $_conf['2chapi_use'] && empty ($_GET['olddat'])) { // ���O�C�����ĂȂ���� or ���O�C����A�ݒ肵�����Ԍo�߂��Ă����玩���ă��O�C�� if (! file_exists ($_conf['sid2chapi_php']) || ! empty ($_REQUEST['relogin2chapi']) || (filemtime ($_conf['sid2chapi_php']) < time () - 60 * 60 * $_conf['2chapi_interval'])) { @@ -141,7 +141,7 @@ protected function _downloadDat2chAPI($uaMona, $SID2ch, $from_bytes) { $url= http_build_url(array( "scheme" => $_conf['2chapi_ssl.read']?"https":"http", - "host" => P2BbsType::isHost5ch($this->host)?"api.5ch.net":"api.2ch.net", + "host" => P2HostType::isHost5ch($this->host)?"api.5ch.net":"api.2ch.net", "path" => "v1/".$serverName[0] . '/' . $this->bbs . '/' . $this->key)); $message = '/v1/' . $serverName[0] . '/' . $this->bbs . '/' . $this->key . $SID2ch . $AppKey; @@ -437,7 +437,7 @@ protected function _downloadDat2ch($from_bytes) { $this->modified = $response->getHeader ('Last-Modified'); // �z�X�g��2ch�̎���DAT�𗘗p�ł��Ȃ��|�̃��b�Z�[�W���o����G���[�Ƃ���iDAT�j���΍�j - if (P2BbsType::isHost2chs ($this->host)) { + if (P2HostType::isHost2chs ($this->host)) { // 1�s�ڂ�؂�o�� $posLF = mb_strpos ($body, "\n"); $firstmsg = mb_substr ($body, 0, $posLF === false ? mb_strlen ($body) : $posLF); @@ -624,7 +624,7 @@ public function get2chDatError($code = null) { } $reason = null; - if (P2BbsType::isHost2chs ($this->host) || P2BbsType::isHostVip2ch ($this->host)) { + if (P2HostType::isHost2chs ($this->host) || P2HostType::isHostVip2ch ($this->host)) { if ($code == '302') { $body203 = $this->_get2ch203Body(); if ($body203 !== false && preg_match('/�ߋ����O ��/', $body203)) { @@ -648,7 +648,7 @@ public function get2chDatError($code = null) { try { $req = P2Commun::createHTTPRequest ($read_url.'1', HTTP_Request2::METHOD_GET); // �w�b�_ - $req->setHeader ('User-Agent', P2Commun::getP2UA(false,P2BbsType::isHost2chs($this->host))); // �����́A"Monazilla/" ���‚����NG + $req->setHeader ('User-Agent', P2Commun::getP2UA(false,P2HostType::isHost2chs($this->host))); // �����́A"Monazilla/" ���‚����NG // Request�̑��M $response = P2Commun::getHTTPResponse($req); @@ -802,7 +802,7 @@ public function previewOne() { fclose ($fd); // be.2ch.net �Ȃ�EUC��SJIS�ϊ� - if (P2BbsType::isHostBe2chNet ($this->host)) { + if (P2HostType::isHostBe2chNet ($this->host)) { $first_line = mb_convert_encoding ($first_line, 'CP932', 'CP51932'); } @@ -852,7 +852,7 @@ public function previewOneNotFound($code = null) { $this->diedat = true; // 2ch, bbspink, vip2ch �Ȃ�read.cgi�Ŋm�F - if (P2BbsType::isHost2chs ($this->host) || P2BbsType::isHostVip2ch ($this->host)) { + if (P2HostType::isHost2chs ($this->host) || P2HostType::isHostVip2ch ($this->host)) { $this->getdat_error_msg_ht = $this->get2chDatError ($code); if (count ($this->datochi_residuums)) { if ($_conf['ktai']) { @@ -1016,7 +1016,7 @@ public function readDat() { // be.2ch.net �Ȃ�EUC��SJIS�ϊ� // �O�̂���SJIS��UTF-8�������R�[�h����̌��ɓ���Ă��� // �E�E�E���A�������������^�C�g���̃X���b�h�Ō딻�肪�������̂ŁA�w�肵�Ă��� - if (P2BbsType::isHostBe2chNet ($this->host)) { + if (P2HostType::isHostBe2chNet ($this->host)) { // mb_convert_variables('CP932', 'CP51932,CP932,UTF-8', $this->datlines); mb_convert_variables ('CP932', 'CP51932', $this->datlines); } @@ -1099,7 +1099,7 @@ public function explodeDatLine($aline) { * @return array */ public function scanOriginalHosts() { - if (P2BbsType::isHost2chs ($this->host) && file_exists ($this->keydat) && ($dat = file_get_contents ($this->keydat))) { + if (P2HostType::isHost2chs ($this->host) && file_exists ($this->keydat) && ($dat = file_get_contents ($this->keydat))) { $bbs_re = preg_quote ($this->bbs, '@'); $pattern = "@/(\\w+\\.(?:2ch\\.net|bbspink\\.com))(?:/test/read\\.cgi)?/{$bbs_re}\\b@"; if (preg_match_all ($pattern, $dat, $matches, PREG_PATTERN_ORDER)) { diff --git a/lib/expack/tgrep/view.inc.php b/lib/expack/tgrep/view.inc.php index 0a08ca9e5..3fdf1f99b 100644 --- a/lib/expack/tgrep/view.inc.php +++ b/lib/expack/tgrep/view.inc.php @@ -148,7 +148,7 @@ function moveSubject(href, serachWord, query) { $new = ''; $turl = sprintf('%s?host=%s&bbs=%s&key=%d', $_conf['read_php'], $t->host, $t->bbs, $t->tkey); $burl = sprintf('%s?host=%s&bbs=%s&itaj_en=%s&word=%s', $_conf['subject_php'], $t->host, $t->bbs, UrlSafeBase64::encode($t->ita), $htm['query_en']); - if (P2BbsType::isHostMachiBbs($t->host)) { + if (P2HostType::isHostMachiBbs($t->host)) { $ourl = sprintf('http://%s/bbs/read.cgi/%s/%s/', $t->host, $t->bbs, $t->tkey); } else { $ourl = sprintf('http://%s/test/read.cgi/%s/%s/', $t->host, $t->bbs, $t->tkey); diff --git a/lib/plugins/hissi/Hissi.php b/lib/plugins/hissi/Hissi.php index 78471b081..ef64901c5 100644 --- a/lib/plugins/hissi/Hissi.php +++ b/lib/plugins/hissi/Hissi.php @@ -83,7 +83,7 @@ public function load() public function isEnabled() { if ($this->host) { - if (!P2BbsType::isHost2chs($this->host)) { + if (!P2HostType::isHost2chs($this->host)) { return false; } } diff --git a/lib/plugins/mimizun/Mimizun.php b/lib/plugins/mimizun/Mimizun.php index e04213aee..ec020c6dc 100644 --- a/lib/plugins/mimizun/Mimizun.php +++ b/lib/plugins/mimizun/Mimizun.php @@ -91,11 +91,11 @@ public function isEnabled() // (�Z�b�g����Ă��Ȃ����2ch�Ƃ݂Ȃ�) if ($this->host) { // �܂�BBS�Ȃ�false - if (P2BbsType::isHostMachiBbs($this->host)) { + if (P2HostType::isHostMachiBbs($this->host)) { return false; } // 2ch�łȂ����false - if (!P2BbsType::isHost2chs($this->host)) { + if (!P2HostType::isHost2chs($this->host)) { return false; } } diff --git a/lib/plugins/stalker/Stalker.php b/lib/plugins/stalker/Stalker.php index 8c788e959..ad0be2fc2 100644 --- a/lib/plugins/stalker/Stalker.php +++ b/lib/plugins/stalker/Stalker.php @@ -24,7 +24,7 @@ class Stalker public function isEnabled() { if ($this->host) { - if (!P2BbsType::isHost2chs($this->host)) { + if (!P2HostType::isHost2chs($this->host)) { return false; } } diff --git a/lib/post_form_options.inc.php b/lib/post_form_options.inc.php index 53a61e5e7..57f90d84c 100644 --- a/lib/post_form_options.inc.php +++ b/lib/post_form_options.inc.php @@ -168,13 +168,13 @@ function setHiddenValue(button) { // {{{ ��/Be �������� �`�F�b�N�{�b�N�X // 2ch���������� -if (P2BbsType::isHost2chs($host) and file_exists($_conf['sid2ch_php'])) { +if (P2HostType::isHost2chs($host) and file_exists($_conf['sid2ch_php'])) { $htm['maru_post'] = '' . ''; } // Be -if (P2BbsType::isHost2chs($host) and P2Util::isEnableBe2ch()) { +if (P2HostType::isHost2chs($host) and P2Util::isEnableBe2ch()) { $htm['beres'] = '' . ''; } @@ -208,7 +208,7 @@ function setHiddenValue(button) { $htm['dpreview2'] = ''; if (!$_conf['ktai'] && $_conf['expack.editor.dpreview']) { $_dpreview_noname = 'null'; - if (P2BbsType::isHost2chs($host)) { + if (P2HostType::isHost2chs($host)) { $_dpreview_st = new SettingTxt($host, $bbs); $_dpreview_st->setSettingArray(); if (!empty($_dpreview_st->setting_array['BBS_NONAME_NAME'])) { diff --git a/lib/read_shitaraba.inc.php b/lib/read_shitaraba.inc.php index 00ce27460..a74b4b246 100644 --- a/lib/read_shitaraba.inc.php +++ b/lib/read_shitaraba.inc.php @@ -36,9 +36,9 @@ function shitarabaDownload(ThreadRead $aThread) } // JBBS@������� - if (P2BbsType::isHostJbbsShitaraba($aThread->host)) { + if (P2HostType::isHostJbbsShitaraba($aThread->host)) { // ������΂�livedoor�ړ]�ɑΉ��B�Ǎ����livedoor�Ƃ���B - $host = P2BbsType::adjustHostJbbs($aThread->host); + $host = P2HostType::adjustHostJbbs($aThread->host); list($host, $category, ) = explode('/', $host); $machiurl = "http://{$host}/bbs/rawmode.cgi/{$category}/{$aThread->bbs}/{$aThread->key}/{$START}-"; } @@ -55,7 +55,7 @@ function shitarabaDownload(ThreadRead $aThread) unset($machiurl_res); // {{{ ������΂Ȃ�EUC��SJIS�ɕϊ� - if (P2BbsType::isHostJbbsShitaraba($aThread->host)) { + if (P2HostType::isHostJbbsShitaraba($aThread->host)) { $temp_data = FileCtl::file_read_contents($tempfile); $temp_data = mb_convert_encoding($temp_data, 'CP932', 'CP51932'); if (FileCtl::file_write_contents($tempfile, $temp_data) === false) { diff --git a/lib/sb_footer.inc.php b/lib/sb_footer.inc.php index 25b443234..2ce033c97 100644 --- a/lib/sb_footer.inc.php +++ b/lib/sb_footer.inc.php @@ -82,11 +82,11 @@ // �X�y�V�������[�h�łȂ���΃t�H�[�����͕⊮======================== $ini_url_text = ''; if (!$aThreadList->spmode) { - if (P2BbsType::isHostJbbsShitaraba($aThreadList->host)) { // ������� + if (P2HostType::isHostJbbsShitaraba($aThreadList->host)) { // ������� $ini_url_text = "http://{$aThreadList->host}/bbs/read.cgi?BBS={$aThreadList->bbs}&KEY="; - } elseif (P2BbsType::isHostMachiBbs($aThreadList->host)) { // �܂�BBS + } elseif (P2HostType::isHostMachiBbs($aThreadList->host)) { // �܂�BBS $ini_url_text = "http://{$aThreadList->host}/bbs/read.pl?BBS={$aThreadList->bbs}&KEY="; - } elseif (P2BbsType::isHostMachiBbsNet($aThreadList->host)) { // �܂��r�˂��� + } elseif (P2HostType::isHostMachiBbsNet($aThreadList->host)) { // �܂��r�˂��� $ini_url_text = "http://{$aThreadList->host}/test/read.cgi?bbs={$aThreadList->bbs}&key="; } else { $ini_url_text = "http://{$aThreadList->host}/test/read.cgi/{$aThreadList->bbs}/"; diff --git a/lib/sb_header_k.inc.php b/lib/sb_header_k.inc.php index 84eaafe86..59b823fe1 100644 --- a/lib/sb_header_k.inc.php +++ b/lib/sb_header_k.inc.php @@ -21,8 +21,8 @@ $ptitle_url = $p2_subject_url; // 2ch�n - } elseif (P2BbsType::isHost2chs($aThreadList->host)) { - if (P2BbsType::isHostBbsPink($aThreadList->host)) { + } elseif (P2HostType::isHost2chs($aThreadList->host)) { + if (P2HostType::isHostBbsPink($aThreadList->host)) { //$ptitle_url = "http://{$aThreadList->host}/{$aThreadList->bbs}/i/"; $ptitle_url = "http://speedo.ula.cc/test/p.so/{$aThreadList->host}/{$aThreadList->bbs}/"; } else { diff --git a/lib/sb_print_k.inc.php b/lib/sb_print_k.inc.php index 6ac4f3649..e06264217 100644 --- a/lib/sb_print_k.inc.php +++ b/lib/sb_print_k.inc.php @@ -240,7 +240,7 @@ function sb_print_k($aThreadList) } // >>1�̂�, >>1���� - if (P2BbsType::isHost2chs($aThreadList->host) && !$aThread->isKitoku()) { + if (P2HostType::isHost2chs($aThreadList->host) && !$aThread->isKitoku()) { switch ($_conf['mobile.sb_show_first']) { case 1: $thre_url = $onlyone_url; diff --git a/lib/wiki/Samba.php b/lib/wiki/Samba.php index bca2d7db0..59b1bb243 100644 --- a/lib/wiki/Samba.php +++ b/lib/wiki/Samba.php @@ -69,7 +69,7 @@ public function save() public function getSambaTime($host, $bbs) { - if (!P2BbsType::isHost2chs($host)) { + if (!P2HostType::isHost2chs($host)) { return false; } // samba���擾 @@ -105,7 +105,7 @@ public function setWriteTime($host, $bbs) // �c�莞�Ԃ��擾 public function getSamba($host, $bbs) { - if (!P2BbsType::isHost2chs($host)) { + if (!P2HostType::isHost2chs($host)) { return -1; } diff --git a/rep2/info.php b/rep2/info.php index e7c91a8fe..05111e28e 100644 --- a/rep2/info.php +++ b/rep2/info.php @@ -283,7 +283,7 @@ } $motothre_url = $aThread->getMotoThread(); -if (P2BbsType::isHost2chs($aThread->host)) { +if (P2HostType::isHost2chs($aThread->host)) { $motothre_org_url = $aThread->getMotoThread(true); } else { $motothre_org_url = $motothre_url; diff --git a/rep2/live_post_form.php b/rep2/live_post_form.php index f7b1c5798..1d868f079 100755 --- a/rep2/live_post_form.php +++ b/rep2/live_post_form.php @@ -57,7 +57,7 @@ $ptitle = "{$itaj_hd} - �V�K�X���b�h�쐬"; // machibbs�AJBBS@������� �Ȃ� - if (P2BbsType::isHostMachiBbs($host) or P2BbsType::isHostJbbsShitaraba($host)) { + if (P2HostType::isHostMachiBbs($host) or P2HostType::isHostJbbsShitaraba($host)) { $submit_value = '�V�K��������'; // 2ch�Ȃ� } else { diff --git a/rep2/post.php b/rep2/post.php index d7d57d35b..b5c18b9db 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -84,13 +84,13 @@ // }}} // machibbs�AJBBS@������� �Ȃ� -if (P2BbsType::isHostMachiBbs($host) or P2BbsType::isHostJbbsShitaraba($host)) { +if (P2HostType::isHostMachiBbs($host) or P2HostType::isHostJbbsShitaraba($host)) { $bbs_cgi = '/bbs/write.cgi'; // JBBS@������� �Ȃ� - if (P2BbsType::isHostJbbsShitaraba($host)) { + if (P2HostType::isHostJbbsShitaraba($host)) { // ������΂̈ړ]�ɑΉ��Bpost������s�ɍ��킹��B - $host = P2BbsType::adjustHostJbbs($host); + $host = P2HostType::adjustHostJbbs($host); $bbs_cgi = '../../bbs/write.cgi'; preg_match('/\\/(\\w+)$/', $host, $ar); $dir = $ar[1]; @@ -148,13 +148,13 @@ exit; } -if (P2BbsType::isHostJbbsShitaraba($host)) { +if (P2HostType::isHostJbbsShitaraba($host)) { $post[$dir_k] = $dir; } // {{{ 2ch�Ł����O�C�����Ȃ�sid�lj� -if (!empty($_POST['maru']) and P2BbsType::isHost2chs($host)) { +if (!empty($_POST['maru']) and P2HostType::isHost2chs($host)) { $maru_time = 0; if (file_exists($_conf['sid2ch_php'])) { @@ -212,7 +212,7 @@ PostDataStore::set($post_backup_key, $post_cache); // cookie �ǂݍ��� -$cookie_key = $_login->user_u . '/' . P2Util::normalizeHostName(P2BbsType::isHostBbsPink($host) ? 'www.bbspink.com' : P2BbsType::isHost2chs($host) ? 'www.2ch.net' : $host); // �E�@���Ή� +$cookie_key = $_login->user_u . '/' . P2Util::normalizeHostName(P2HostType::isHostBbsPink($host) ? 'www.bbspink.com' : P2HostType::isHost2chs($host) ? 'www.2ch.net' : $host); // �E�@���Ή� if ($p2cookies = CookieDataStore::get($cookie_key)) { if (is_array($p2cookies)) { if (array_key_exists('expires', $p2cookies)) { @@ -389,7 +389,7 @@ function postIt($host, $bbs, $key, $post) global $bbs_cgi; // �ڑ��悪2ch.net�Ȃ��SSL�ʐM���s��(pink�͑Ή����Ă��Ȃ��̂ł��Ȃ�) - if (P2BbsType::isHost2chs($host) && ! P2BbsType::isHostBbsPink($host) && $_conf['2ch_ssl.post']) { + if (P2HostType::isHost2chs($host) && ! P2HostType::isHostBbsPink($host) && $_conf['2ch_ssl.post']) { $bbs_cgi_url = 'https://' . $host . $bbs_cgi; } else { $bbs_cgi_url = 'http://' . $host . $bbs_cgi; @@ -411,7 +411,7 @@ function postIt($host, $bbs, $key, $post) } // be.2ch.net �F�؃N�b�L�[ - if (P2BbsType::isHostBe2chs($host) || !empty($_REQUEST['beres'])) { + if (P2HostType::isHostBe2chs($host) || !empty($_REQUEST['beres'])) { if ($_conf['be_2ch_DMDM'] && $_conf['be_2ch_MDMD']) { $req->addCookie('DMDM', urlencode( rawurldecode( $_conf['be_2ch_DMDM']) ) ); $req->addCookie('MDMD', urlencode( rawurldecode( $_conf['be_2ch_MDMD']) ) ); @@ -428,9 +428,9 @@ function postIt($host, $bbs, $key, $post) while (list($name, $value) = each($post)) { // ������� or be.2ch.net�Ȃ�AEUC�ɕϊ� - if (P2BbsType::isHostJbbsShitaraba($host) || P2BbsType::isHostBe2chs($host)) { + if (P2HostType::isHostJbbsShitaraba($host) || P2HostType::isHostBe2chs($host)) { $value = mb_convert_encoding($value, 'CP51932', 'CP932'); - } elseif (P2BbsType::isHost2chs($host) && ! P2BbsType::isHostBbsPink($host)) { + } elseif (P2HostType::isHost2chs($host) && ! P2HostType::isHostBbsPink($host)) { // 2ch��Unicode�̕������post���� $value = html_entity_decode(mb_convert_encoding($value, 'UTF-8', 'CP932'),ENT_QUOTES,'UTF-8'); } @@ -464,7 +464,7 @@ function postIt($host, $bbs, $key, $post) } // be.2ch.net or JBBS������� �����R�[�h�ϊ� EUC��SJIS - if (P2BbsType::isHostBe2chs($host) || P2BbsType::isHostJbbsShitaraba($host)) { + if (P2HostType::isHostBe2chs($host) || P2HostType::isHostJbbsShitaraba($host)) { $body = mb_convert_encoding($body, 'CP932', 'CP51932'); // diff --git a/rep2/post_draft.php b/rep2/post_draft.php index b70b8f920..a99c01659 100644 --- a/rep2/post_draft.php +++ b/rep2/post_draft.php @@ -44,10 +44,10 @@ } // ������΂�livedoor�ړ]�ɑΉ��Bpost���livedoor�Ƃ���B -$host = P2BbsType::adjustHostJbbs($host); +$host = P2HostType::adjustHostJbbs($host); // machibbs�AJBBS@������� �Ȃ� -if (P2BbsType::isHostMachiBbs($host) or P2BbsType::isHostJbbsShitaraba($host)) { +if (P2HostType::isHostMachiBbs($host) or P2HostType::isHostJbbsShitaraba($host)) { /* compact() �� array_combine() ��POST����l�̔z������̂ŁA $post_param_keys �� $post_send_keys �̒l�̏����͑�����I */ //$post_param_keys = array('bbs', 'key', 'time', 'FROM', 'mail', 'MESSAGE', 'subject', 'submit'); diff --git a/rep2/post_form.php b/rep2/post_form.php index f88181be4..895499e78 100644 --- a/rep2/post_form.php +++ b/rep2/post_form.php @@ -55,7 +55,7 @@ $ptitle = "{$itaj_hd} - �V�K�X���b�h�쐬"; // machibbs�AJBBS@������� �Ȃ� - if (P2BbsType::isHostMachiBbs($host) or P2BbsType::isHostJbbsShitaraba($host)) { + if (P2HostType::isHostMachiBbs($host) or P2HostType::isHostJbbsShitaraba($host)) { $submit_value = '�V�K��������'; // 2ch�Ȃ� } else { diff --git a/rep2/subject.php b/rep2/subject.php index a822f3a27..c12590bad 100644 --- a/rep2/subject.php +++ b/rep2/subject.php @@ -1036,7 +1036,7 @@ function matchSbFilter(Thread $aThread) if (file_exists($aThread->keydat)) { $subject = file_get_contents($aThread->keydat); // be.2ch.net ��EUC - if (P2BbsType::isHostBe2chs($aThread->host)) { + if (P2HostType::isHostBe2chs($aThread->host)) { $subject = mb_convert_encoding($subject, 'CP932', 'CP51932'); } } else { From 43d439f40ea14c87cebfd2d1253e35132f1db8aa Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Wed, 1 Nov 2017 13:24:36 +0900 Subject: [PATCH 291/339] =?UTF-8?q?SPM=E3=82=92=E4=BD=BF=E7=94=A8=E3=81=97?= =?UTF-8?q?=E3=81=9FNG=E3=81=82=E3=81=BC=E3=83=BC=E3=82=93=E7=99=BB?= =?UTF-8?q?=E9=8C=B2=E6=99=82=E3=81=AB=E3=80=81=E6=9D=BF=E6=AF=8E=E3=81=AE?= =?UTF-8?q?=E7=99=BB=E9=8C=B2=E3=81=8C=E5=87=BA=E6=9D=A5=E3=82=8B=E6=A9=9F?= =?UTF-8?q?=E8=83=BD=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf_admin_ex.inc.php | 2 +- rep2/info_sp.php | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/conf/conf_admin_ex.inc.php b/conf/conf_admin_ex.inc.php index e64d780f5..022056c1f 100644 --- a/conf/conf_admin_ex.inc.php +++ b/conf/conf_admin_ex.inc.php @@ -26,7 +26,7 @@ // pecl_http �����p�ł���ꍇ�AHttpRequestPool �ɂ�����_�E�����[�h��L���ɂ��� // (off:0, on:1, �R�}���h���C���Ŏ��s:2) -$_conf['expack.use_pecl_http'] = 1; // (1) +$_conf['expack.use_pecl_http'] = 0; // (0) // expack.use_pecl_http �� 2 ����CLI�pphp.ini��http�G�N�X�e���V������ // ���[�h����悤�ɂȂ��Ă��Ȃ��ꍇ�̂� 1 �ɂ��� diff --git a/rep2/info_sp.php b/rep2/info_sp.php index 15943f8d4..e34e2dc2b 100644 --- a/rep2/info_sp.php +++ b/rep2/info_sp.php @@ -18,6 +18,7 @@ $resnum = isset($_GET['resnum']) ? $_GET['resnum'] : null; $popup = isset($_GET['popup']) ? $_GET['popup'] : null; $mode = isset($_GET['mode']) ? $_GET['mode'] : null; +$bbsonly = isset($_GET['bbsonly']) ? (int)$_GET['bbsonly'] : 0; if (isset($_GET['aborn_str_en'])) { $aborn_str_en = $_GET['aborn_str_en']; @@ -100,6 +101,12 @@ if ($popup == 2) { // ���ځ[��/NG/�n�C���C�g���[�h�o�^ if (preg_match('/^(aborn|ng|highlight)_/', $mode) && ($aborn_str = trim($aborn_str)) !== '') { + + // bbsonly���w�肳��Ă����ꍇ�́Abbs�̎w���lj� + if(!empty($bbs) && $bbsonly) { + $aborn_str = sprintf('%s%s',$bbs,$aborn_str); + } + if (file_exists($path) && ($data = FileCtl::file_read_lines($path))) { $data = array_map('trim', $data); $data = array_filter($data, create_function('$v', 'return ($v !== "");')); @@ -382,6 +389,9 @@ function infoSpLiveAborn() $aborn_id_ht = p2h($aborn_id); echo "\t\n"; } + + echo "\t

    \n"; + echo "\t\n"; if (!$_conf['ktai']) { echo "\t\n"; From 227e6eae651d8ab3a7163531e4222e1547606e01 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Mon, 13 Nov 2017 23:08:47 +0900 Subject: [PATCH 292/339] =?UTF-8?q?itest.5ch.net=E3=81=B8=E3=81=AE?= =?UTF-8?q?=E3=83=AA=E3=83=B3=E3=82=AF=E3=81=AB=E5=AF=BE=E5=BF=9C=20thx!?= =?UTF-8?q?=20http://egg.5ch.net/test/read.cgi/software/1505071083/860=20D?= =?UTF-8?q?AT=E7=A0=B4=E6=90=8D=E9=98=B2=E6=AD=A2=E3=81=AE=E3=81=9F?= =?UTF-8?q?=E3=82=81=E3=81=AB=E6=97=A7=E4=BB=95=E6=A7=98=E3=81=AEitest?= =?UTF-8?q?=E3=82=92=E3=83=AA=E3=83=B3=E3=82=AF=E3=81=97=E3=81=AA=E3=81=84?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4=20=E9=8F=A1?= =?UTF-8?q?=E3=81=AE=E5=9B=BD=E3=81=AEPHP=202chBBS=E3=82=B9=E3=82=AF?= =?UTF-8?q?=E3=83=AA=E3=83=97=E3=83=88(http://script.s16.xrea.com/)?= =?UTF-8?q?=E3=82=92=E4=BD=BF=E7=94=A8=E3=81=97=E3=81=9F=E5=A4=96=E9=83=A8?= =?UTF-8?q?=E6=9D=BF=E3=81=AB=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/BbsMap.php | 5 +++++ lib/P2Util.php | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/BbsMap.php b/lib/BbsMap.php index 9fe87d577..196cd32f6 100644 --- a/lib/BbsMap.php +++ b/lib/BbsMap.php @@ -104,6 +104,11 @@ static public function isRegisteredBbs($host, $bbs) $type = self::_detectHostType($host); + // dat�j���h�~�̂���itest.[25]ch.net�͖ⓚ���p��false + if($host == 'itest.5ch.net'||$host == 'itest.2ch.net') { + return false; + } + // �o�^�����ł�rep2�ň�����‚̓`�F�b�N������true if($host != $type) { return true; diff --git a/lib/P2Util.php b/lib/P2Util.php index 0a9247232..657e1b3b9 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -1874,8 +1874,15 @@ static public function detectThread($url = null) $key = $matches[4]; $ls = (isset($matches[5]) && strlen($matches[5])) ? $matches[5] : ''; + // itest - https://itest.5ch.net/hayabusa9/test/read.cgi/mnewsplus/1510531889 + } elseif (preg_match('<^http://itest\.(?:[25])ch.net/(\w+)/test/read\.cgi/(\w+)/(\d+)(?:/(.+$))?>x', $nama_url, $matches)) { + $host = $matches[1].'.5ch.net'; + $bbs = $matches[2]; + $key = $matches[3]; + $ls = (isset($matches[4]) && strlen($matches[4])) ? $matches[4] : ''; + // 2ch or pink - http://choco.2ch.net/test/read.cgi/event/1027770702/ - } elseif (preg_match('<^https?://(.+)/test/read\\.(?:cgi|html|so) + } elseif (preg_match('<^https?://(.+)/test/read\\.(?:cgi|html|so|php) /(\\w+)/([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) { if (BbsMap::isRegisteredBbs($matches[1], $matches[2])) { $host = $matches[1]; From 5bbb4aa545bf066413bc9564c87af3a4d32f453c Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Fri, 17 Nov 2017 23:39:22 +0900 Subject: [PATCH 293/339] =?UTF-8?q?itest=E3=81=AE=E6=AD=A3=E8=A6=8F?= =?UTF-8?q?=E8=A1=A8=E7=8F=BE=E3=82=92SSL=E3=81=AB=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/P2Util.php b/lib/P2Util.php index 657e1b3b9..875d1fccc 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -1875,7 +1875,7 @@ static public function detectThread($url = null) $ls = (isset($matches[5]) && strlen($matches[5])) ? $matches[5] : ''; // itest - https://itest.5ch.net/hayabusa9/test/read.cgi/mnewsplus/1510531889 - } elseif (preg_match('<^http://itest\.(?:[25])ch.net/(\w+)/test/read\.cgi/(\w+)/(\d+)(?:/(.+$))?>x', $nama_url, $matches)) { + } elseif (preg_match('<^https?://itest\.(?:[25])ch.net/(\w+)/test/read\.cgi/(\w+)/(\d+)(?:/(.+$))?>x', $nama_url, $matches)) { $host = $matches[1].'.5ch.net'; $bbs = $matches[2]; $key = $matches[3]; From 2cb094c37a1e15e4a2e0c9d462d3065a0b61bbcb Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Sat, 18 Nov 2017 07:48:39 +0900 Subject: [PATCH 294/339] =?UTF-8?q?=E6=9C=AA=E4=BD=BF=E7=94=A8=E3=81=AE?= =?UTF-8?q?=E3=82=AF=E3=83=A9=E3=82=B9=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/HostCheck.php | 167 ------------------------------------------ lib/ShowThread.php | 2 - lib/startup.funcs.php | 1 - 3 files changed, 170 deletions(-) delete mode 100644 lib/HostCheck.php diff --git a/lib/HostCheck.php b/lib/HostCheck.php deleted file mode 100644 index 7fde9f23f..000000000 --- a/lib/HostCheck.php +++ /dev/null @@ -1,167 +0,0 @@ -= 6) { - return false; - } - $zeros = ':' . str_repeat('0:', 6 - $nsecs); - $pos = strpos($address, '::'); - if ($pos === 0) { - $zeros = '0' . $zeros; - } - if ($pos === strlen($address) - 2) { - $zeros .= '0'; - } - $address = str_replace('::', $zeros, $address); - case 0: - break; - default: - return false; - } - - // �ŏI�`�F�b�N - if (preg_match('/^([0-9a-f]{1,4}):([0-9a-f]{1,4}):([0-9a-f]{1,4}):([0-9a-f]{1,4}):([0-9a-f]{1,4}):([0-9a-f]{1,4}):([0-9a-f]{1,4}):([0-9a-f]{1,4})$/', $address, $matches)) { - array_shift($matches); - if ($binary) { - return vsprintf('%016b%016b%016b%016b%016b%016b%016b%016b', array_map('hexdec', $matches)); - } - return vsprintf('%04s:%04s:%04s:%04s:%04s:%04s:%04s:%04s', $matches); - } - - return false; - } - - // }}} - // {{{ isAddressPrivate() - - /** - * �v���C�x�[�g�A�h���X? - * - * @see RFC1918 - * - * @param string $address - * @param string $class - * - * @return bool - */ - static public function isAddressPrivate($address = '', $class = 'ABC') - { - if (!$address) { - $address = $_SERVER['REMOTE_ADDR']; - } - - $lval = ip2long($address); - if ($lval === false) { - return false; - } - - $classes = array( - 'A' => array('10.0.0.0', '255.0.0.0'), - 'B' => array('172.16.0.0','255.240.0.0'), - 'C' => array('192.168.0.0', '255.255.0.0'), - ); - - foreach ($classes as $k => $v) { - if (stripos($class, $k) !== false) { - $rval = ip2long($v[0]); - $mask = ip2long($v[1]); - if (($lval & $mask) === $rval) { - return true; - } - } - } - - return false; - } - - // }}} -} - -// }}} - -/* - * Local Variables: - * mode: php - * coding: cp932 - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: nil - * End: - */ -// vim: set syn=php fenc=cp932 ai et ts=4 sw=4 sts=4 fdm=marker: diff --git a/lib/ShowThread.php b/lib/ShowThread.php index 4f2f9d174..c2dc52f00 100644 --- a/lib/ShowThread.php +++ b/lib/ShowThread.php @@ -1227,8 +1227,6 @@ private function _transLinkDo(array $s) if (!$purl || !array_key_exists('host', $purl) || strpos($purl['host'], '.') === false || $purl['host'] == '127.0.0.1' || - //HostCheck::isAddressLocal($purl['host']) || - //HostCheck::isAddressPrivate($purl['host']) || P2HostType::isHostExample($purl['host'])) { return $orig; diff --git a/lib/startup.funcs.php b/lib/startup.funcs.php index 2a183390b..8771ad52b 100644 --- a/lib/startup.funcs.php +++ b/lib/startup.funcs.php @@ -21,7 +21,6 @@ function p2_load_class($name) DownloadDat[0-9A-Z][0-9A-Za-z]* | FavSetManager | FileCtl | - HostCheck | JStyle | Login | MD5Crypt | From 070074832390105b3f0e00516b8086a98109b323 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Sat, 18 Nov 2017 23:04:57 +0900 Subject: [PATCH 295/339] =?UTF-8?q?P2Util=E3=81=8B=E3=82=89=E6=9C=AA?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E3=81=AE=E9=96=A2=E6=95=B0=E5=89=8A=E9=99=A4?= =?UTF-8?q?=20=E6=AD=A3=E8=A6=8F=E8=A1=A8=E7=8F=BE=E3=81=AE=E3=82=A8?= =?UTF-8?q?=E3=82=B9=E3=82=B1=E3=83=BC=E3=83=97=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 231 +------------------------------------------------ 1 file changed, 1 insertion(+), 230 deletions(-) diff --git a/lib/P2Util.php b/lib/P2Util.php index d75353aaf..adf0a513f 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -742,235 +742,6 @@ static public function normalizeHostName($host) } // }}} - -// ** Move to P2HostType *************************************** - - // {{ isHostExample - - /** - * host ���Ꭶ�p�h���C���Ȃ� true ��Ԃ� - * - * @param string $host - * @return bool - */ - static public function isHostExample($host) - { - return P2HostType::isHostExample($host); - } - - // }}} - // {{{ isHost2chs() - - /** - * host �� 2ch or 5ch or bbspink �Ȃ� true ��Ԃ� - * - * @param string $host - * @return bool - */ - static public function isHost2chs($host) - { - return P2HostType::isHost2chs($host); - } - - // }}} - // {{{ isHost2ch() - - /** - * host �� 2ch �Ȃ� true ��Ԃ� - * - * @param string $host - * @return bool - */ - static public function isHost2ch($host) - { - return P2HostType::isHost2ch($host); - } - - // }}} - // {{{ isHost5ch() - - /** - * host �� 5ch �Ȃ� true ��Ԃ� - * - * @param string $host - * @return bool - */ - static public function isHost5ch($host) - { - return P2HostType::isHost5ch($host); - } - - // }}} - // {{{ isHostVip2ch() - - /** - * host �� vip2ch �Ȃ� true ��Ԃ� - * - * @param string $host - * @return bool - */ - static public function isHostVip2ch($host) - { - return P2HostType::isHostVip2ch($host); - } - - // }}} - // {{{ isHostBe2chNet() - - /** - * host �� be.2ch.net �Ȃ� true ��Ԃ� - * - * @param string $host - * @return bool - */ - static public function isHostBe2chNet($host) - { - return P2HostType::isHostBe2chNet($host); - } - - // }}} - // {{{ isNotUse2chAPI() - - /** - * host �� API ��p���Ȃ��Ă��擾�ł���ꍇ�Ȃ� true ��Ԃ� - * - * @param string $host - * @return bool - */ - static public function isNotUse2chAPI($host) - { - return P2HostType::isNotUse2chAPI($host); - } - - // }}} - // {{{ isHostBbsPink() - - /** - * host �� bbspink �Ȃ� true ��Ԃ� - * - * @param string $host - * @return bool - */ - static public function isHostBbsPink($host) - { - return P2HostType::isHostBbsPink($host); - } - - // }}} - // {{{ isHostTor() - - /** - * host �� tor �n�� �Ȃ� true ��Ԃ� - * - * @access public - * @param string $host - * @return boolean - */ - static public function isHostTor($host, $isGatewayMode = 99) - { - return P2HostType::isHostTor($host, $isGatewayMode); - } - - // }}} - // {{{ isHostMachiBbs() - - /** - * host �� machibbs �Ȃ� true ��Ԃ� - * - * @param string $host - * @return bool - */ - static public function isHostMachiBbs($host) - { - return P2HostType::isHostMachiBbs($host); - } - - // }}} - // {{{ isHostMachiBbsNet() - - /** - * host �� machibbs.net �܂��r�˂��� �Ȃ� true ��Ԃ� - * - * @param string $host - * @return bool - */ - static public function isHostMachiBbsNet($host) - { - return P2HostType::isHostMachiBbsNet($host); - } - - // }}} - // {{{ isHostJbbsShitaraba() - - /** - * host �� livedoor �����^���f���� : ������� �Ȃ� true ��Ԃ� - * - * @param string $host - * @return bool - */ - static public function isHostJbbsShitaraba($in_host) - { - return P2HostType::isHostJbbsShitaraba($in_host); - } - - // }}} - // {{{ adjustHostJbbs() - - /** - * livedoor �����^���f���� : ������΂̃z�X�g���ύX�ɑΉ����ĕύX���� - * - * @param string $in_str �z�X�g���ł�URL�ł��Ȃ�ł��ǂ� - * @return string - */ - static public function adjustHostJbbs($in_str) - { - return P2HostType::adjustHostJbbs($in_str); - } - - // }}} - // {{{ isHost2chSc() - - /** - * host �� 2ch.sc �Ȃ� true ��Ԃ� - * - * @param string $host - * @return boolean - */ - static public function isHost2chSc($host) - { - return P2HostType::isHost2chSc($host); - } - - // }}} - // {{{ isHostOpen2ch() - - /** - * host �� ���[�Ղ�2ch �Ȃ� true ��Ԃ� - * - * @param string $host - * @return boolean - */ - static public function isHostOpen2ch($host) - { - return P2HostType::isHostOpen2ch($host); - } - - // }}} - - // {{{ isUrlWikipediaJa() - - /** - * URL���E�B�L�y�f�B�A���{��ł̋L���Ȃ�true��Ԃ� - */ - static public function isUrlWikipediaJa($url) - { - return P2HostType::isUrlWikipediaJa($url); - } - - // }}} - -// ** Move to P2HostType *************************************** - // {{{ header_nocache() /** @@ -1773,7 +1544,7 @@ static public function detectThread($url = null) $ls = (isset($matches[5]) && strlen($matches[5])) ? $matches[5] : ''; // itest - https://itest.5ch.net/hayabusa9/test/read.cgi/mnewsplus/1510531889 - } elseif (preg_match('<^https?://itest\.(?:[25])ch.net/(\w+)/test/read\.cgi/(\w+)/(\d+)(?:/(.+$))?>x', $nama_url, $matches)) { + } elseif (preg_match('<^https?://itest\\.(?:[25])ch\\.net/(\\w+)/test/read\\.cgi/(\\w+)/(\\d+)(?:/(.+$))?>x', $nama_url, $matches)) { $host = $matches[1].'.5ch.net'; $bbs = $matches[2]; $key = $matches[3]; From 15fbe28e3524817e28875b6313b6d31d856e2bc5 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Sun, 19 Nov 2017 00:14:49 +0900 Subject: [PATCH 296/339] =?UTF-8?q?BbsMap.php=E3=81=A8P2HostType.php?= =?UTF-8?q?=E3=82=92=E5=90=88=E4=BD=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/FavSetManager.php | 4 +- lib/P2Commun.php | 4 +- lib/P2CurlMulti.php | 8 +- lib/{BbsMap.php => P2HostMgr.php} | 433 ++++++++++++++++++++++++++++-- lib/P2HostType.php | 433 ------------------------------ lib/P2HttpExt.php | 4 +- lib/P2Util.php | 24 +- lib/SettingTxt.php | 10 +- lib/ShowThread.php | 10 +- lib/ShowThreadI.php | 8 +- lib/ShowThreadK.php | 8 +- lib/ShowThreadPc.php | 4 +- lib/SubjectTxt.php | 12 +- lib/Thread.php | 16 +- lib/ThreadRead.php | 26 +- lib/expack/tgrep/view.inc.php | 2 +- lib/get_info.inc.php | 8 +- lib/plugins/hissi/Hissi.php | 2 +- lib/plugins/mimizun/Mimizun.php | 4 +- lib/plugins/stalker/Stalker.php | 2 +- lib/post_form_options.inc.php | 6 +- lib/read_shitaraba.inc.php | 6 +- lib/sb_footer.inc.php | 6 +- lib/sb_header_k.inc.php | 4 +- lib/sb_print_k.inc.php | 2 +- lib/startup.funcs.php | 1 - lib/wiki/Samba.php | 4 +- 27 files changed, 497 insertions(+), 554 deletions(-) rename lib/{BbsMap.php => P2HostMgr.php} (51%) delete mode 100644 lib/P2HostType.php diff --git a/lib/FavSetManager.php b/lib/FavSetManager.php index e136e420b..b145a9930 100644 --- a/lib/FavSetManager.php +++ b/lib/FavSetManager.php @@ -91,7 +91,7 @@ static public function loadAllFavSet($force = false) $key = $lar[1]; $host = $lar[10]; $bbs = $lar[11]; - $group = P2Util::getHostGroupName($host); + $group = P2HostMgr::getHostGroupName($host); $_conf['favlists'][$i][] = array('group' => $group, 'host' => $host, 'bbs' => $bbs, 'key' => $key); } } @@ -107,7 +107,7 @@ static public function loadAllFavSet($force = false) $host = $lar[1]; $bbs = $lar[2]; $itaj = $lar[3]; - $group = P2Util::getHostGroupName($host); + $group = P2HostMgr::getHostGroupName($host); $_conf['favitas'][$i][] = array('group' => $group, 'host' => $host, 'bbs' => $bbs, 'itaj' => $itaj); } } diff --git a/lib/P2Commun.php b/lib/P2Commun.php index f283436e6..9b8d33ace 100644 --- a/lib/P2Commun.php +++ b/lib/P2Commun.php @@ -35,7 +35,7 @@ static public function createHTTPRequest($url , $method = HTTP_Request2::METHOD_ // �悭�g���w�b�_���w�� // p2��HTTP�ʐM�͓��Ɏw��̖�������Monazilla�𖼏��悤�ɂ��� - $req->setHeader ('User-Agent', self::getP2UA(true,P2HostType::isHost2chs($purl['host']))); + $req->setHeader ('User-Agent', self::getP2UA(true,P2HostMgr::isHost2chs($purl['host']))); $req->setHeader ('Accept-Language', 'ja,en-us;q=0.7,en;q=0.3'); $req->setHeader ('Accept', '*/*'); $req->setHeader ('Accept-Encoding', 'gzip, deflate'); @@ -59,7 +59,7 @@ static public function createHTTPRequest($url , $method = HTTP_Request2::METHOD_ } // �v���L�V - if ($_conf['tor_use'] && P2HostType::isHostTor($purl['host'], 0)) { // Tor(.onion)��Tor�p�̐ݒ���Z�b�g + if ($_conf['tor_use'] && P2HostMgr::isHostTor($purl['host'], 0)) { // Tor(.onion)��Tor�p�̐ݒ���Z�b�g $req->setConfig (array ( 'proxy_host' => $_conf['tor_proxy_host'], 'proxy_port' => $_conf['tor_proxy_port'], diff --git a/lib/P2CurlMulti.php b/lib/P2CurlMulti.php index 3a4862805..4ad2fc0ac 100644 --- a/lib/P2CurlMulti.php +++ b/lib/P2CurlMulti.php @@ -65,15 +65,15 @@ private function add($subjects, $force = false) { curl_setopt($this->ch[$key], CURLOPT_MAXCONNECTS, $_conf['expack.curl_per_host']); // User-Agent - if(P2HostType::isHost2chs($host) && !P2HostType::isNotUse2chsAPI($host) && $_conf['2chapi_use']){ + if(P2HostMgr::isHost2chs($host) && !P2HostMgr::isNotUse2chsAPI($host) && $_conf['2chapi_use']){ $user_agent = sprintf ($_conf['2chapi_ua.read'], $_conf['2chapi_appname']); } else { - $user_agent = P2Commun::getP2UA(true, P2HostType::isHost2chs($purl['host'])); + $user_agent = P2Commun::getP2UA(true, P2HostMgr::isHost2chs($purl['host'])); } curl_setopt($this->ch[$key], CURLOPT_USERAGENT, $user_agent); // �v���L�V - if ($_conf['tor_use'] && P2HostType::isHostTor($purl['host'], 0)) { // Tor(.onion)��Tor�p�̐ݒ���Z�b�g + if ($_conf['tor_use'] && P2HostMgr::isHostTor($purl['host'], 0)) { // Tor(.onion)��Tor�p�̐ݒ���Z�b�g $tor_user_info = sprintf("%s%s@", $_conf['tor_proxy_user'], empty($_conf['tor_proxy_password']) ? "" : ":{$_conf['tor_proxy_password']}"); $tor_address = "{$_conf['tor_proxy_host']}:{$_conf['tor_proxy_port']}"; $address = sprintf("http://%s%s", strpos($tor_user_info, "@") === 0 ? "" : $tor_user_info, $tor_address); @@ -171,7 +171,7 @@ private function getResult() { $data = curl_multi_getcontent($ch_array); $header_size = $tmp['header_size']; - if (P2HostType::isHostJbbsShitaraba($host) || P2HostType::isHostBe2chs($host)) { + if (P2HostMgr::isHostJbbsShitaraba($host) || P2HostMgr::isHostBe2chs($host)) { $data = mb_convert_encoding($data, 'CP932', 'CP51932'); } diff --git a/lib/BbsMap.php b/lib/P2HostMgr.php similarity index 51% rename from lib/BbsMap.php rename to lib/P2HostMgr.php index 510d91318..017dcd076 100644 --- a/lib/BbsMap.php +++ b/lib/P2HostMgr.php @@ -1,17 +1,67 @@ ', $host); + } + return self::$_hostIs2ch[$host]; + } + + // }}} + // {{{ isHostBe2chNet() + + /** + * host �� be.2ch.net �Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isHostBe2chNet($host) + { + return $host == 'be.2ch.net'; + } + + // }}} + // {{{ isNotUse2chAPI() + + /** + * host �� API ��p���Ȃ��Ă��擾�ł���ꍇ�Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isNotUse2chAPI($host) + { + return ($host == 'qb5.2ch.net' || $host == 'carpenter.2ch.net'); + } + + // }}} + // {{{ isHost5ch() + + /** + * host �� 5ch �Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isHost5ch($host) + { + if (!array_key_exists($host, self::$_hostIs5ch)) { + self::$_hostIs5ch[$host] = (bool)preg_match('<^\\w+\\.(?:5ch\\.net)$>', $host); + } + return self::$_hostIs5ch[$host]; + } + + // }}} + // {{{ isHostBe5chNet() + + /** + * host �� be.2ch.net �Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isHostBe5chNet($host) + { + return $host == 'be.5ch.net'; + } + + // }}} + // {{{ isNotUse5chAPI() + + /** + * host �� API ��p���Ȃ��Ă��擾�ł���ꍇ�Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isNotUse5chAPI($host) + { + return ($host == 'qb5.5ch.net' || $host == 'carpenter.5ch.net'); + } + + // }}} + // {{{ isHostBbsPink() + + /** + * host �� bbspink �Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isHostBbsPink($host) + { + if (!array_key_exists($host, self::$_hostIsBbsPink)) { + self::$_hostIsBbsPink[$host] = (bool)preg_match('<^\\w+\\.bbspink\\.com$>', $host); + } + return self::$_hostIsBbsPink[$host]; + } + + // }}} + // {{{ isHost2chSc() + + /** + * host �� 2ch.sc �Ȃ� true ��Ԃ� + * + * @param string $host + * @return boolean + */ + static public function isHost2chSc($host) + { + if (!array_key_exists($host, self::$_hostIs2chSc)) { + self::$_hostIs2chSc[$host] = (bool)preg_match('/\\.(2ch\\.sc)$/', $host); + } + return self::$_hostIs2chSc[$host]; + } + + // }}} + // {{{ isHostOpen2ch() + + /** + * host �� ���[�Ղ�2ch �Ȃ� true ��Ԃ� + * + * @param string $host + * @return boolean + */ + static public function isHostOpen2ch($host) + { + if (!array_key_exists($host, self::$_hostIsOpen2ch)) { + self::$_hostIsOpen2ch[$host] = (bool)preg_match('/\\.(open2ch\\.net)$/', $host); + } + return self::$_hostIsOpen2ch[$host]; + } + + // }}} + // {{{ isHostMachiBbs() + + /** + * host �� machibbs �Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isHostMachiBbs($host) + { + if ($host === "machi.to") { + return true; + } + + if (!array_key_exists($host, self::$_hostIsMachiBbs)) { + self::$_hostIsMachiBbs[$host] = (bool)preg_match('<^\\w+\\.machi(?:bbs\\.com|\\.to)$>', $host); + } + return self::$_hostIsMachiBbs[$host]; + } + + // }}} + // {{{ isHostMachiBbsNet() + + /** + * host �� machibbs.net �܂��r�˂��� �Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isHostMachiBbsNet($host) + { + if (!array_key_exists($host, self::$_hostIsMachiBbsNet)) { + self::$_hostIsMachiBbsNet[$host] = (bool)preg_match('<^\\w+\\.machibbs\\.net$>', $host); + } + return self::$_hostIsMachiBbsNet[$host]; + } + + // }}} + // {{{ isHostJbbsShitaraba() + + /** + * host �� livedoor �����^���f���� : ������� �Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isHostJbbsShitaraba($in_host) + { + if (!array_key_exists($in_host, self::$_hostIsJbbsShitaraba)) { + if ($in_host == 'rentalbbs.livedoor.com') { + self::$_hostIsJbbsShitaraba[$in_host] = true; + } elseif (preg_match('<^jbbs\\.(?:shitaraba\\.(?:net|com)|livedoor\\.(?:com|jp))(?:/|$)>', $in_host)) { + self::$_hostIsJbbsShitaraba[$in_host] = true; + } else { + self::$_hostIsJbbsShitaraba[$in_host] = false; + } + } + return self::$_hostIsJbbsShitaraba[$in_host]; + } + + // }}} + // {{{ adjustHostJbbs() + + /** + * livedoor �����^���f���� : ������΂̃z�X�g���ύX�ɑΉ����ĕύX���� + * + * @param string $in_str �z�X�g���ł�URL�ł��Ȃ�ł��ǂ� + * @return string + */ + static public function adjustHostJbbs($in_str) + { + return preg_replace('<(^|/)jbbs\\.(?:shitaraba|livedoor)\\.(?:net|com)(/|$)>', '\\1jbbs.shitaraba.net\\2', $in_str, 1); + } + + // }}} + // {{{ isHostTor() + + /** + * host �� tor �n�� �Ȃ� true ��Ԃ� + * + * @access public + * @param string $host + * @return boolean + */ + static function isHostTor($host, $isGatewayMode = 99) + { + switch ($isGatewayMode) { + case 0: + $ret = (bool)preg_match('/\\.onion$/', $host); + break; + + case 1: + $ret = (bool)preg_match('/\\.(onion\\.cab|onion\\.city|onion\\.direct|onion\\.link|onion\\.nu|onion\\.to|onion\\.rip)$/', $host); + break; + + default: + $ret = (bool)preg_match('/\\.(onion\\.cab|onion\\.city|onion\\.direct|onion\\.link|onion\\.nu|onion\\.to|onion\\.rip|onion)$/', $host); + break; + } + + return $ret; + } + + // }}} + // {{{ isHostVip2ch() + + /** + * host �� vip2ch �Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isHostVip2ch($host) + { + if (!array_key_exists($host, self::$_hostIsVip2ch)) { + self::$_hostIsVip2ch[$host] = (bool)preg_match('<^\\w+\\.(?:vip2ch\\.com)$>', $host); + } + return self::$_hostIsVip2ch[$host]; + } + + // }}} + // {{{ isUrlWikipediaJa() + + /** + * URL���E�B�L�y�f�B�A���{��ł̋L���Ȃ�true��Ԃ� + */ + static public function isUrlWikipediaJa($url) + { + return (strncmp($url, 'http://ja.wikipedia.org/wiki/', 29) == 0); + } + // }}} // {{{ getCurrentHost() @@ -40,7 +419,7 @@ static public function getCurrentHost($host, $bbs, $autosync = true) if (!$map) { return $host; } - $type = self::_detectHostType($host); + $type = self::getHostGroupName($host); // �`�F�b�N if (isset($map[$type]) && isset($map[$type][$bbs])) { @@ -76,7 +455,7 @@ static public function getBbsName($host, $bbs) if (!$map) { return $bbs; } - $type = self::_detectHostType($host); + $type = self::getHostGroupName($host); // �`�F�b�N if (isset($map[$type]) && isset($map[$type][$bbs])) { @@ -102,7 +481,7 @@ static public function isRegisteredBbs($host, $bbs) { global $_conf; - $type = self::_detectHostType($host); + $type = self::getHostGroupName($host); // dat�j���h�~�̂���itest.[25]ch.net�͖ⓚ���p��false if($host == 'itest.5ch.net'||$host == 'itest.2ch.net') { @@ -179,7 +558,7 @@ static public function syncBrd($brd_path) $host = $data[1]; $bbs = $data[2]; $itaj = $data[3]; - $type = self::_detectHostType($host); + $type = self::getHostGroupName($host); if (isset($map[$type]) && isset($map[$type][$bbs])) { $newhost = $map[$type][$bbs]['host']; @@ -255,7 +634,7 @@ static public function syncIdx($idx_path) $data = explode('<>', rtrim($line, "\n")); $host = $data[10]; $bbs = $data[11]; - $type = self::_detectHostType($host); + $type = self::getHostGroupName($host); if (isset($map[$type]) && isset($map[$type][$bbs])) { $newhost = $map[$type][$bbs]['host']; @@ -351,7 +730,7 @@ static private function _getMapping() $host = $mita->host; $bbs = $mita->bbs; $itaj = $mita->itaj; - $type = self::_detectHostType($host); + $type = self::getHostGroupName($host); if (!isset($map[$type])) { $map[$type] = array(); } @@ -397,30 +776,28 @@ static private function _writeData($path, $neolines) p2die("cannot write file. ({$path})"); } } - // }}} - // {{{ _detectHostType() + // {{{ getHostGroupName() /** - * �z�X�g�̎�ނ𔻒肷�� + * �z�X�g�ɑΉ����邨�C�ɔE���C�ɃX���O���[�v�����擾���� * - * @param string $host �z�X�g�� - * @return string �z�X�g�̎�� + * @param string $host + * @return void */ - static private function _detectHostType($host) + static public function getHostGroupName($host) { - if (P2HostType::isHostBbsPink($host)) { - $type = 'bbspink'; - } elseif (P2HostType::isHost2chs($host)) { - $type = '2channel'; - } elseif (P2HostType::isHostMachiBbs($host)) { - $type = 'machibbs'; - } elseif (P2HostType::isHostJbbsShitaraba($host)) { - $type = 'jbbs'; + if (self::isHost2chs($host)) { + return '2channel'; + } elseif (self::isHostMachiBbs($host)) { + return 'machibbs'; + } elseif (self::isHostJbbsShitaraba($host)) { + return 'shitaraba'; + } elseif (self::isHostVip2ch($host)) { + return 'vip2ch'; } else { - $type = $host; + return $host; } - return $type; } // }}} diff --git a/lib/P2HostType.php b/lib/P2HostType.php deleted file mode 100644 index e1664ed53..000000000 --- a/lib/P2HostType.php +++ /dev/null @@ -1,433 +0,0 @@ -', $host); - } - return self::$_hostIs2ch[$host]; - } - - // }}} - // {{{ isHostBe2chNet() - - /** - * host �� be.2ch.net �Ȃ� true ��Ԃ� - * - * @param string $host - * @return bool - */ - static public function isHostBe2chNet($host) - { - return $host == 'be.2ch.net'; - } - - // }}} - // {{{ isNotUse2chAPI() - - /** - * host �� API ��p���Ȃ��Ă��擾�ł���ꍇ�Ȃ� true ��Ԃ� - * - * @param string $host - * @return bool - */ - static public function isNotUse2chAPI($host) - { - return ($host == 'qb5.2ch.net' || $host == 'carpenter.2ch.net'); - } - - // }}} - // {{{ isHost5ch() - - /** - * host �� 5ch �Ȃ� true ��Ԃ� - * - * @param string $host - * @return bool - */ - static public function isHost5ch($host) - { - if (!array_key_exists($host, self::$_hostIs5ch)) { - self::$_hostIs5ch[$host] = (bool)preg_match('<^\\w+\\.(?:5ch\\.net)$>', $host); - } - return self::$_hostIs5ch[$host]; - } - - // }}} - // {{{ isHostBe5chNet() - - /** - * host �� be.2ch.net �Ȃ� true ��Ԃ� - * - * @param string $host - * @return bool - */ - static public function isHostBe5chNet($host) - { - return $host == 'be.5ch.net'; - } - - // }}} - // {{{ isNotUse5chAPI() - - /** - * host �� API ��p���Ȃ��Ă��擾�ł���ꍇ�Ȃ� true ��Ԃ� - * - * @param string $host - * @return bool - */ - static public function isNotUse5chAPI($host) - { - return ($host == 'qb5.5ch.net' || $host == 'carpenter.5ch.net'); - } - - // }}} - // {{{ isHostBbsPink() - - /** - * host �� bbspink �Ȃ� true ��Ԃ� - * - * @param string $host - * @return bool - */ - static public function isHostBbsPink($host) - { - if (!array_key_exists($host, self::$_hostIsBbsPink)) { - self::$_hostIsBbsPink[$host] = (bool)preg_match('<^\\w+\\.bbspink\\.com$>', $host); - } - return self::$_hostIsBbsPink[$host]; - } - - // }}} - // {{{ isHost2chSc() - - /** - * host �� 2ch.sc �Ȃ� true ��Ԃ� - * - * @param string $host - * @return boolean - */ - static public function isHost2chSc($host) - { - if (!array_key_exists($host, self::$_hostIs2chSc)) { - self::$_hostIs2chSc[$host] = (bool)preg_match('/\\.(2ch\\.sc)$/', $host); - } - return self::$_hostIs2chSc[$host]; - } - - // }}} - // {{{ isHostOpen2ch() - - /** - * host �� ���[�Ղ�2ch �Ȃ� true ��Ԃ� - * - * @param string $host - * @return boolean - */ - static public function isHostOpen2ch($host) - { - if (!array_key_exists($host, self::$_hostIsOpen2ch)) { - self::$_hostIsOpen2ch[$host] = (bool)preg_match('/\\.(open2ch\\.net)$/', $host); - } - return self::$_hostIsOpen2ch[$host]; - } - - // }}} - // {{{ isHostMachiBbs() - - /** - * host �� machibbs �Ȃ� true ��Ԃ� - * - * @param string $host - * @return bool - */ - static public function isHostMachiBbs($host) - { - if ($host === "machi.to") { - return true; - } - - if (!array_key_exists($host, self::$_hostIsMachiBbs)) { - self::$_hostIsMachiBbs[$host] = (bool)preg_match('<^\\w+\\.machi(?:bbs\\.com|\\.to)$>', $host); - } - return self::$_hostIsMachiBbs[$host]; - } - - // }}} - // {{{ isHostMachiBbsNet() - - /** - * host �� machibbs.net �܂��r�˂��� �Ȃ� true ��Ԃ� - * - * @param string $host - * @return bool - */ - static public function isHostMachiBbsNet($host) - { - if (!array_key_exists($host, self::$_hostIsMachiBbsNet)) { - self::$_hostIsMachiBbsNet[$host] = (bool)preg_match('<^\\w+\\.machibbs\\.net$>', $host); - } - return self::$_hostIsMachiBbsNet[$host]; - } - - // }}} - // {{{ isHostJbbsShitaraba() - - /** - * host �� livedoor �����^���f���� : ������� �Ȃ� true ��Ԃ� - * - * @param string $host - * @return bool - */ - static public function isHostJbbsShitaraba($in_host) - { - if (!array_key_exists($in_host, self::$_hostIsJbbsShitaraba)) { - if ($in_host == 'rentalbbs.livedoor.com') { - self::$_hostIsJbbsShitaraba[$in_host] = true; - } elseif (preg_match('<^jbbs\\.(?:shitaraba\\.(?:net|com)|livedoor\\.(?:com|jp))(?:/|$)>', $in_host)) { - self::$_hostIsJbbsShitaraba[$in_host] = true; - } else { - self::$_hostIsJbbsShitaraba[$in_host] = false; - } - } - return self::$_hostIsJbbsShitaraba[$in_host]; - } - - // }}} - // {{{ adjustHostJbbs() - - /** - * livedoor �����^���f���� : ������΂̃z�X�g���ύX�ɑΉ����ĕύX���� - * - * @param string $in_str �z�X�g���ł�URL�ł��Ȃ�ł��ǂ� - * @return string - */ - static public function adjustHostJbbs($in_str) - { - return preg_replace('<(^|/)jbbs\\.(?:shitaraba|livedoor)\\.(?:net|com)(/|$)>', '\\1jbbs.shitaraba.net\\2', $in_str, 1); - } - - // }}} - // {{{ isHostTor() - - /** - * host �� tor �n�� �Ȃ� true ��Ԃ� - * - * @access public - * @param string $host - * @return boolean - */ - static function isHostTor($host, $isGatewayMode = 99) - { - switch ($isGatewayMode) { - case 0: - $ret = (bool)preg_match('/\\.onion$/', $host); - break; - - case 1: - $ret = (bool)preg_match('/\\.(onion\\.cab|onion\\.city|onion\\.direct|onion\\.link|onion\\.nu|onion\\.to|onion\\.rip)$/', $host); - break; - - default: - $ret = (bool)preg_match('/\\.(onion\\.cab|onion\\.city|onion\\.direct|onion\\.link|onion\\.nu|onion\\.to|onion\\.rip|onion)$/', $host); - break; - } - - return $ret; - } - - // }}} - // {{{ isHostVip2ch() - - /** - * host �� vip2ch �Ȃ� true ��Ԃ� - * - * @param string $host - * @return bool - */ - static public function isHostVip2ch($host) - { - if (!array_key_exists($host, self::$_hostIsVip2ch)) { - self::$_hostIsVip2ch[$host] = (bool)preg_match('<^\\w+\\.(?:vip2ch\\.com)$>', $host); - } - return self::$_hostIsVip2ch[$host]; - } - - // }}} - // {{{ isUrlWikipediaJa() - - /** - * URL���E�B�L�y�f�B�A���{��ł̋L���Ȃ�true��Ԃ� - */ - static public function isUrlWikipediaJa($url) - { - return (strncmp($url, 'http://ja.wikipedia.org/wiki/', 29) == 0); - } - - // }}} -} - -// }}} - -/* - * Local Variables: - * mode: php - * coding: cp932 - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: nil - * End: - */ -// vim: set syn=php fenc=cp932 ai et ts=4 sw=4 sts=4 fdm=marker: diff --git a/lib/P2HttpExt.php b/lib/P2HttpExt.php index 0e55215f7..1dae07957 100644 --- a/lib/P2HttpExt.php +++ b/lib/P2HttpExt.php @@ -247,7 +247,7 @@ public function __construct($url, if (!isset($options['useragent'])) { $purl = parse_url($url); // URL���� - $options['useragent'] = P2Commun::getP2UA(true,P2HostType::isHost2chs($purl['host'])); + $options['useragent'] = P2Commun::getP2UA(true,P2HostMgr::isHost2chs($purl['host'])); unset($purl); } @@ -931,7 +931,7 @@ static public function fetchSubjectTxt($subjects, $force = false) $url = 'http://' . $host . '/' . $bbs . '/subject.txt'; - if (P2HostType::isHostJbbsShitaraba($host) || P2HostType::isHostBe2chs($host)) { + if (P2HostMgr::isHostJbbsShitaraba($host) || P2HostMgr::isHostBe2chs($host)) { if ($eucjp2sjis === null) { $eucjp2sjis = new P2HttpCallback_SaveEucjpAsSjis(); } diff --git a/lib/P2Util.php b/lib/P2Util.php index adf0a513f..3f45dace0 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -299,7 +299,7 @@ static public function getItaName($host, $bbs) // �–�Long�̎擾 if (!isset($p2_setting['itaj'])) { - $itaj = BbsMap::getBbsName($host, $bbs); + $itaj = P2HostMgr::getBbsName($host, $bbs); if ($itaj != $bbs) { self::$_itaNames[$id] = $p2_setting['itaj'] = $itaj; @@ -339,9 +339,9 @@ static private function _p2DirOfHost($base_dir, $host, $dir_sep = true) $host = self::normalizeHostName($host); // 2channel or bbspink - if (P2HostType::isHost2chs($host)) { + if (P2HostMgr::isHost2chs($host)) { $host_dir = $base_dir . DIRECTORY_SEPARATOR . '2channel'; - } elseif (P2HostType::isHostOpen2ch($host)) { + } elseif (P2HostMgr::isHostOpen2ch($host)) { //�݊����ێ��̂��ߋ����̃f�B���N�g�����w�� $host_dir = $base_dir . DIRECTORY_SEPARATOR . rawurlencode($host); if (!file_exists($host_dir)) { @@ -349,7 +349,7 @@ static private function _p2DirOfHost($base_dir, $host, $dir_sep = true) $host_dir = $base_dir . DIRECTORY_SEPARATOR . 'open2ch'; } - } elseif (P2HostType::isHost2chSc($host)) { + } elseif (P2HostMgr::isHost2chSc($host)) { //�݊����ێ��̂��ߋ����̃f�B���N�g�����w�� $host_dir = $base_dir . DIRECTORY_SEPARATOR . rawurlencode($host); if (!file_exists($host_dir)) { @@ -357,22 +357,22 @@ static private function _p2DirOfHost($base_dir, $host, $dir_sep = true) $host_dir = $base_dir . DIRECTORY_SEPARATOR . '2channel_sc'; } // machibbs.com - } elseif (P2HostType::isHostMachiBbs($host)) { + } elseif (P2HostMgr::isHostMachiBbs($host)) { $host_dir = $base_dir . DIRECTORY_SEPARATOR . 'machibbs.com'; // tor - } elseif (P2HostType::isHostTor($host)) { + } elseif (P2HostMgr::isHostTor($host)) { $tor_host = preg_replace('/\.onion\.(\w+)$/', '.onion', $host); $host_dir = $base_dir . DIRECTORY_SEPARATOR . $tor_host; unset($tor_host); // jbbs.livedoor.jp (livedoor �����^���f����) - } elseif (P2HostType::isHostJbbsShitaraba($host)) { + } elseif (P2HostMgr::isHostJbbsShitaraba($host)) { if (DIRECTORY_SEPARATOR == '/') { $host_dir = $base_dir . DIRECTORY_SEPARATOR . $host; } else { $host_dir = $base_dir . DIRECTORY_SEPARATOR . str_replace('/', DIRECTORY_SEPARATOR, $host); } // vip.2ch.com - } elseif (P2HostType::isHostVip2ch($host)) { + } elseif (P2HostMgr::isHostVip2ch($host)) { $host_dir = $base_dir . DIRECTORY_SEPARATOR . 'ex14.vip2ch.com'; // livedoor �����^���f���ˆȊO�ŃX���b�V�����̕������܂ނƂ� @@ -1553,7 +1553,7 @@ static public function detectThread($url = null) // 2ch or pink - http://choco.2ch.net/test/read.cgi/event/1027770702/ } elseif (preg_match('<^https?://(.+)/test/read\\.(?:cgi|html|so|php) /(\\w+)/([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) { - if (BbsMap::isRegisteredBbs($matches[1], $matches[2])) { + if (P2HostMgr::isRegisteredBbs($matches[1], $matches[2])) { $host = $matches[1]; $bbs = $matches[2]; $key = $matches[3]; @@ -1579,7 +1579,7 @@ static public function detectThread($url = null) // 2ch or pink �ߋ����Ohtml - http://pc.2ch.net/mac/kako/1015/10153/1015358199.html } elseif (preg_match('<^(https?://(.+)(?:/[^/]+)?/(\\w+) /kako/\\d+(?:/\\d+)?/(\\d+)).html>x', $nama_url, $matches)) { - if (BbsMap::isRegisteredBbs($matches[2], $matches[3])) { + if (P2HostMgr::isRegisteredBbs($matches[2], $matches[3])) { $host = $matches[2]; $bbs = $matches[3]; $key = $matches[4]; @@ -1698,7 +1698,7 @@ static public function getHtmlDom($html, $charset = null, $report_error = true) */ static public function getHostGroupName($host) { - return P2HostType::getHostGroupName($host); + return P2HostMgr::getHostGroupName($host); } // }}} @@ -1777,7 +1777,7 @@ static private function _getBe2chCodeByMailPass($mail, $pass, $host) $url = http_build_url(array( "scheme" => $_conf['2ch_ssl.post'] ? "https" : "http", - "host" => P2HostType::isHost5ch($host) ? "be.5ch.net" : "be.2ch.net", + "host" => P2HostMgr::isHost5ch($host) ? "be.5ch.net" : "be.2ch.net", "path" => "index.php")); try { diff --git a/lib/SettingTxt.php b/lib/SettingTxt.php index 499e18c83..027131616 100644 --- a/lib/SettingTxt.php +++ b/lib/SettingTxt.php @@ -39,12 +39,12 @@ public function __construct($host, $bbs) $this->_setting_srd = $dat_host_bbs_dir_s . 'p2_kb_setting.srd'; // �ڑ��悪2ch.net�Ȃ��SSL�ʐM���s��(pink�͑Ή����Ă��Ȃ��̂ł��Ȃ�) - if (P2HostType::isHost2chs($host) && ! P2HostType::isHostBbsPink($host) && $_conf['2ch_ssl.subject']) { + if (P2HostMgr::isHost2chs($host) && ! P2HostMgr::isHostBbsPink($host) && $_conf['2ch_ssl.subject']) { $this->_url = 'https://' . $host . '/' . $bbs . '/SETTING.TXT'; } else { $this->_url = 'http://' . $host . '/' . $bbs . '/SETTING.TXT'; } - //$this->_url = P2HostType::adjustHostJbbs($this->_url); // ������΂�livedoor�ړ]�ɑΉ��B�Ǎ����livedoor�Ƃ���B + //$this->_url = P2HostMgr::adjustHostJbbs($this->_url); // ������΂�livedoor�ړ]�ɑΉ��B�Ǎ����livedoor�Ƃ���B $this->setting_array = array(); @@ -80,7 +80,7 @@ public function downloadSettingTxt() global $_conf; // �܂�BBS�E������� �� SETTING.TXT �����݂��Ȃ����̂Ƃ��� - if (P2HostType::isHostMachiBbs($this->_host) || P2HostType::isHostJbbsShitaraba($this->_host)) { + if (P2HostMgr::isHostMachiBbs($this->_host) || P2HostMgr::isHostJbbsShitaraba($this->_host)) { return false; } @@ -109,7 +109,7 @@ public function downloadSettingTxt() $code = $response->getStatus(); if ($code == 302) { // �z�X�g�̈ړ]��ǐ� - $new_host = BbsMap::getCurrentHost($this->host, $this->bbs); + $new_host = P2HostMgr::getCurrentHost($this->host, $this->bbs); if ($new_host != $this->host) { $aNewSettingTxt = new SettingTxt($new_host, $this->_bbs); return $aNewSettingTxt->downloadSettingTxt(); @@ -118,7 +118,7 @@ public function downloadSettingTxt() //var_dump($req->getResponseHeader()); $body = $response->getBody(); // ������� or be.2ch.net �Ȃ�EUC��SJIS�ɕϊ� - if (P2HostType::isHostJbbsShitaraba($this->host) || P2HostType::isHostBe2chs($this->host)) { + if (P2HostMgr::isHostJbbsShitaraba($this->host) || P2HostMgr::isHostBe2chs($this->host)) { $body = mb_convert_encoding($body, 'CP932', 'CP51932'); } if (FileCtl::file_write_contents($this->_setting_txt, $body) === false) { diff --git a/lib/ShowThread.php b/lib/ShowThread.php index c2dc52f00..b73ed9dd1 100644 --- a/lib/ShowThread.php +++ b/lib/ShowThread.php @@ -347,11 +347,11 @@ protected function __construct(ThreadRead $aThread, $matome = false) $this->_highlight_nums = array(); $this->_highlight_msgs = array(); - if (P2HostType::isHostBbsPink($this->thread->host)) { + if (P2HostMgr::isHostBbsPink($this->thread->host)) { $this->_redirector = self::REDIRECTOR_PINKTOWER; - } elseif (P2HostType::isHost2chs($this->thread->host)) { + } elseif (P2HostMgr::isHost2chs($this->thread->host)) { $this->_redirector = self::REDIRECTOR_IMENU; - } elseif (P2HostType::isHostMachiBbs($this->thread->host)) { + } elseif (P2HostMgr::isHostMachiBbs($this->thread->host)) { $this->_redirector = self::REDIRECTOR_MACHIBBS; } else { $this->_redirector = self::REDIRECTOR_NONE; @@ -1179,7 +1179,7 @@ private function _transLinkDo(array $s) if (strlen($following) > 0) { // �E�B�L�y�f�B�A���{��ł�URL�ŁASJIS��2�o�C�g�����̏�ʃo�C�g // (0x81-0x9F,0xE0-0xEF)�������Ƃ� - if (P2HostType::isUrlWikipediaJa($url)) { + if (P2HostMgr::isUrlWikipediaJa($url)) { $leading = ord($following); if ((($leading ^ 0x90) < 32 && $leading != 0x80) || ($leading ^ 0xE0) < 16) { $url .= rawurlencode(mb_convert_encoding($following, 'UTF-8', 'CP932')); @@ -1227,7 +1227,7 @@ private function _transLinkDo(array $s) if (!$purl || !array_key_exists('host', $purl) || strpos($purl['host'], '.') === false || $purl['host'] == '127.0.0.1' || - P2HostType::isHostExample($purl['host'])) + P2HostMgr::isHostExample($purl['host'])) { return $orig; } diff --git a/lib/ShowThreadI.php b/lib/ShowThreadI.php index 0f6ccce5e..0e505b10b 100644 --- a/lib/ShowThreadI.php +++ b/lib/ShowThreadI.php @@ -65,7 +65,7 @@ public function __construct(ThreadRead $aThread, $matome = false) $this->setBbsNonameName(); } - if (P2HostType::isHost2chs($aThread->host)) { + if (P2HostMgr::isHost2chs($aThread->host)) { $this->_kushiYakiName = '
    [�\{}@{}@{}-] '; } @@ -856,7 +856,7 @@ public function plugin_link2chSubject($url, $purl, $str) if (preg_match('{^https?://(.+)/(.+)/$}', $purl[0], $m)) { //rep2�ɓo�^����Ă���‚Ȃ�΃����N���� - if (BbsMap::isRegisteredBbs($m[1], $m[2])) { + if (P2HostMgr::isRegisteredBbs($m[1], $m[2])) { $subject_url = "{$_conf['subject_php']}?host={$m[1]}&bbs={$m[2]}"; return "{$str} [�‚�p2�ŊJ��]"; } @@ -893,7 +893,7 @@ public function plugin_viewImage($url, $purl, $str) { global $_conf; - if (P2HostType::isUrlWikipediaJa($url)) { + if (P2HostMgr::isUrlWikipediaJa($url)) { return false; } @@ -920,7 +920,7 @@ public function plugin_replaceImageUrl($url, $purl, $str) global $_conf; global $pre_thumb_unlimited, $pre_thumb_ignore_limit, $pre_thumb_limit_k; - if (P2HostType::isUrlWikipediaJa($url)) { + if (P2HostMgr::isUrlWikipediaJa($url)) { return false; } diff --git a/lib/ShowThreadK.php b/lib/ShowThreadK.php index 2f40d4476..8ee0d726b 100644 --- a/lib/ShowThreadK.php +++ b/lib/ShowThreadK.php @@ -65,7 +65,7 @@ public function __construct(ThreadRead $aThread, $matome = false) $this->setBbsNonameName(); } - if (P2HostType::isHost2chs($aThread->host)) { + if (P2HostMgr::isHost2chs($aThread->host)) { $this->_kushiYakiName = ' [�\{}@{}@{}-] '; } @@ -753,7 +753,7 @@ public function plugin_link2chSubject($url, $purl, $str) if (preg_match('{^https?://(.+)/(.+)/$}', $purl[0], $m)) { //rep2�ɓo�^����Ă���‚Ȃ�΃����N���� - if (BbsMap::isRegisteredBbs($m[1],$m[2])) { + if (P2HostMgr::isRegisteredBbs($m[1],$m[2])) { $subject_url = "{$_conf['subject_php']}?host={$m[1]}&bbs={$m[2]}"; return "{$str} [�‚�p2�ŊJ��]"; } @@ -834,7 +834,7 @@ public function plugin_viewImage($url, $purl, $str) { global $_conf; - if (P2HostType::isUrlWikipediaJa($url)) { + if (P2HostMgr::isUrlWikipediaJa($url)) { return false; } @@ -861,7 +861,7 @@ public function plugin_replaceImageUrl($url, $purl, $str) global $_conf; global $pre_thumb_unlimited, $pre_thumb_ignore_limit, $pre_thumb_limit_k; - if (P2HostType::isUrlWikipediaJa($url)) { + if (P2HostMgr::isUrlWikipediaJa($url)) { return false; } diff --git a/lib/ShowThreadPc.php b/lib/ShowThreadPc.php index f9524c92e..bf66e50e6 100644 --- a/lib/ShowThreadPc.php +++ b/lib/ShowThreadPc.php @@ -1262,7 +1262,7 @@ public function plugin_link2chSubject($url, $purl, $str) if (preg_match('{^https?://(.+)/(.+)/$}', $purl[0], $m)) { //rep2�ɓo�^����Ă���‚Ȃ�΃����N���� - if (BbsMap::isRegisteredBbs($m[1],$m[2])) { + if (P2HostMgr::isRegisteredBbs($m[1],$m[2])) { $subject_url = "{$_conf['subject_php']}?host={$m[1]}&bbs={$m[2]}"; return "{$str} [�‚�p2�ŊJ��]"; } @@ -1318,7 +1318,7 @@ public function plugin_viewImage($url, $purl, $str) global $_conf; global $pre_thumb_unlimited, $pre_thumb_limit; - if (P2HostType::isUrlWikipediaJa($url)) { + if (P2HostMgr::isUrlWikipediaJa($url)) { return false; } diff --git a/lib/SubjectTxt.php b/lib/SubjectTxt.php index 7eb1e3d93..f45edbba1 100644 --- a/lib/SubjectTxt.php +++ b/lib/SubjectTxt.php @@ -31,16 +31,16 @@ public function __construct($host, $bbs) $this->subject_file = P2Util::datDirOfHostBbs($host, $bbs) . 'subject.txt'; // �ڑ��悪2ch.net�Ȃ��SSL�ʐM���s��(pink�͑Ή����Ă��Ȃ��̂ł��Ȃ�) - if (P2HostType::isHost2chs($host) && ! P2HostType::isHostBbsPink($host) && $_conf['2ch_ssl.subject']) { + if (P2HostMgr::isHost2chs($host) && ! P2HostMgr::isHostBbsPink($host) && $_conf['2ch_ssl.subject']) { $this->subject_url = 'https://' . $host . '/' . $bbs . '/subject.txt'; } else { $this->subject_url = 'http://' . $host . '/' . $bbs . '/subject.txt'; } // ������΂�livedoor�ړ]�ɑΉ��B�Ǎ����livedoor�Ƃ���B - if(P2HostType::isHostJbbsShitaraba($host)) + if(P2HostMgr::isHostJbbsShitaraba($host)) { - $this->subject_url = P2HostType::adjustHostJbbs($this->subject_url); + $this->subject_url = P2HostMgr::adjustHostJbbs($this->subject_url); } // subject.txt���_�E�����[�h���Z�b�g���� @@ -104,7 +104,7 @@ public function downloadSubject() $code = $response->getStatus(); if ($code == 302) { // �z�X�g�̈ړ]��ǐ� - $new_host = BbsMap::getCurrentHost($this->host, $this->bbs); + $new_host = P2HostMgr::getCurrentHost($this->host, $this->bbs); if ($new_host != $this->host) { $aNewSubjectTxt = new SubjectTxt($new_host, $this->bbs); $body = $aNewSubjectTxt->downloadSubject(); @@ -114,7 +114,7 @@ public function downloadSubject() //var_dump($req->getResponseHeader()); $body = $response->getBody(); // ������� or be.2ch.net �Ȃ�EUC��SJIS�ɕϊ� - if (P2HostType::isHostJbbsShitaraba($this->host) || P2HostType::isHostBe2chs($this->host)) { + if (P2HostMgr::isHostJbbsShitaraba($this->host) || P2HostMgr::isHostBe2chs($this->host)) { $body = mb_convert_encoding($body, 'CP932', 'CP51932'); } if (FileCtl::file_write_contents($this->subject_file, $body) === false) { @@ -184,7 +184,7 @@ public function setSubjectLines($cont = '') $this->subject_lines = FileCtl::file_read_lines($this->subject_file); // JBBS@������΂Ȃ�d���X���^�C���폜���� - if (P2HostType::isHostJbbsShitaraba($this->host)) { + if (P2HostMgr::isHostJbbsShitaraba($this->host)) { $this->subject_lines = array_unique($this->subject_lines); } diff --git a/lib/Thread.php b/lib/Thread.php index 05516566c..d509e7bed 100644 --- a/lib/Thread.php +++ b/lib/Thread.php @@ -456,7 +456,7 @@ public function setTitleFromLocal() $this->setTtitle($d[4]); // be.2ch.net �Ȃ�EUC��SJIS�ϊ� - if (P2HostType::isHostBe2chs($this->host)) { + if (P2HostMgr::isHostBe2chs($this->host)) { $ttitle = mb_convert_encoding($this->ttitle, 'CP932', 'CP51932'); $this->setTtitle($ttitle); } @@ -497,13 +497,13 @@ public function getMotoThread($force_pc = false, $ls = null) } // 2ch�n - if (P2HostType::isHost2chs($this->host)) { + if (P2HostMgr::isHost2chs($this->host)) { // PC if (!$mobile) { $motothre_url = "http://{$this->host}/test/read.cgi/{$this->bbs}/{$this->key}/{$ls}"; // �g�� } else { - if (P2HostType::isHostBbsPink($this->host)) { + if (P2HostMgr::isHostBbsPink($this->host)) { //$motothre_url = "http://{$this->host}/test/r.i/{$this->bbs}/{$this->key}/{$ls}"; $motothre_url = "http://speedo.ula.cc/test/r.so/{$this->host}/{$this->bbs}/{$this->key}/{$ls}"; } else { @@ -515,7 +515,7 @@ public function getMotoThread($force_pc = false, $ls = null) } // �܂�BBS - } elseif (P2HostType::isHostMachiBbs($this->host)) { + } elseif (P2HostMgr::isHostMachiBbs($this->host)) { if ($mobile) { $motothre_url = "http://{$this->host}/bbs/read.pl?IMODE=TRUE&BBS={$this->bbs}&KEY={$this->key}"; } else { @@ -523,13 +523,13 @@ public function getMotoThread($force_pc = false, $ls = null) } // �܂��т˂��� - } elseif (P2HostType::isHostMachiBbsNet($this->host)) { + } elseif (P2HostMgr::isHostMachiBbsNet($this->host)) { $motothre_url = "http://{$this->host}/test/read.cgi?bbs={$this->bbs}&key={$this->key}"; if ($mobile) { $motothre_url .= '&imode=true'; } // JBBS������� - } elseif (P2HostType::isHostJbbsShitaraba($this->host)) { - list($host, $category) = explode('/', P2HostType::adjustHostJbbs($this->host), 2); + } elseif (P2HostMgr::isHostJbbsShitaraba($this->host)) { + list($host, $category) = explode('/', P2HostMgr::adjustHostJbbs($this->host), 2); $bbs_cgi = ($mobile) ? 'i.cgi' : 'read.cgi'; $motothre_url = "http://{$host}/bbs/{$bbs_cgi}/{$category}/{$this->bbs}/{$this->key}/{$ls}"; @@ -633,7 +633,7 @@ public function getFavStatus() $this->_favs = array($this->fav); } else { $this->_favs = array_fill(0, $_conf['expack.misc.favset_num'] + 1, false); - $group = P2Util::getHostGroupName($this->host); + $group = P2HostMgr::getHostGroupName($this->host); foreach ($_conf['favlists'] as $num => $favlist) { foreach ($favlist as $fav) { if ($this->key == $fav['key'] && $this->bbs == $fav['bbs'] && $group == $fav['group']) { diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 3d4838d12..b4c9fd3c1 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -47,10 +47,10 @@ public function downloadDat() { global $_conf; // �܂�BBS - if (P2HostType::isHostMachiBbs ($this->host)) { + if (P2HostMgr::isHostMachiBbs ($this->host)) { return DownloadDatMachiBbs::invoke ($this); // JBBS@������� - } elseif (P2HostType::isHostJbbsShitaraba ($this->host)) { + } elseif (P2HostMgr::isHostJbbsShitaraba ($this->host)) { if (! function_exists ('shitarabaDownload')) { include P2_LIB_DIR . '/read_shitaraba.inc.php'; } @@ -70,7 +70,7 @@ public function downloadDat() { return $this->_downloadDat2chKako ($_GET['kakolog'], $ext); // 2ch ��API�o�R�ŗ��Ƃ� - } elseif (P2HostType::isHost2chs ($this->host) && !P2HostType::isNotUse2chsAPI ($this->host) && $_conf['2chapi_use'] && empty ($_GET['olddat'])) { + } elseif (P2HostMgr::isHost2chs ($this->host) && !P2HostMgr::isNotUse2chsAPI ($this->host) && $_conf['2chapi_use'] && empty ($_GET['olddat'])) { // ���O�C�����ĂȂ���� or ���O�C����A�ݒ肵�����Ԍo�߂��Ă����玩���ă��O�C�� if (! file_exists ($_conf['sid2chapi_php']) || ! empty ($_REQUEST['relogin2chapi']) || (filemtime ($_conf['sid2chapi_php']) < time () - 60 * 60 * $_conf['2chapi_interval'])) { @@ -141,7 +141,7 @@ protected function _downloadDat2chAPI($uaMona, $SID2ch, $from_bytes) { $url= http_build_url(array( "scheme" => $_conf['2chapi_ssl.read']?"https":"http", - "host" => P2HostType::isHost5ch($this->host)?"api.5ch.net":"api.2ch.net", + "host" => P2HostMgr::isHost5ch($this->host)?"api.5ch.net":"api.2ch.net", "path" => "v1/".$serverName[0] . '/' . $this->bbs . '/' . $this->key)); $message = '/v1/' . $serverName[0] . '/' . $this->bbs . '/' . $this->key . $SID2ch . $AppKey; @@ -309,7 +309,7 @@ protected function _downloadDat2chAPI($uaMona, $SID2ch, $from_bytes) { return true; } elseif ($code == '302') { // Found // �z�X�g�̈ړ]��ǐ� - $new_host = BbsMap::getCurrentHost ($this->host, $this->bbs); + $new_host = P2HostMgr::getCurrentHost ($this->host, $this->bbs); if ($new_host != $this->host) { $this->old_host = $this->host; $this->host = $new_host; @@ -437,7 +437,7 @@ protected function _downloadDat2ch($from_bytes) { $this->modified = $response->getHeader ('Last-Modified'); // �z�X�g��2ch�̎���DAT�𗘗p�ł��Ȃ��|�̃��b�Z�[�W���o����G���[�Ƃ���iDAT�j���΍�j - if (P2HostType::isHost2chs ($this->host)) { + if (P2HostMgr::isHost2chs ($this->host)) { // 1�s�ڂ�؂�o�� $posLF = mb_strpos ($body, "\n"); $firstmsg = mb_substr ($body, 0, $posLF === false ? mb_strlen ($body) : $posLF); @@ -499,7 +499,7 @@ protected function _downloadDat2ch($from_bytes) { return true; } elseif ($code == '302') { // Found // �z�X�g�̈ړ]��ǐ� - $new_host = BbsMap::getCurrentHost ($this->host, $this->bbs); + $new_host = P2HostMgr::getCurrentHost ($this->host, $this->bbs); if ($new_host != $this->host) { $this->old_host = $this->host; $this->host = $new_host; @@ -624,7 +624,7 @@ public function get2chDatError($code = null) { } $reason = null; - if (P2HostType::isHost2chs ($this->host) || P2HostType::isHostVip2ch ($this->host)) { + if (P2HostMgr::isHost2chs ($this->host) || P2HostMgr::isHostVip2ch ($this->host)) { if ($code == '302') { $body203 = $this->_get2ch203Body(); if ($body203 !== false && preg_match('/�ߋ����O ��/', $body203)) { @@ -648,7 +648,7 @@ public function get2chDatError($code = null) { try { $req = P2Commun::createHTTPRequest ($read_url.'1', HTTP_Request2::METHOD_GET); // �w�b�_ - $req->setHeader ('User-Agent', P2Commun::getP2UA(false,P2HostType::isHost2chs($this->host))); // �����́A"Monazilla/" ���‚����NG + $req->setHeader ('User-Agent', P2Commun::getP2UA(false,P2HostMgr::isHost2chs($this->host))); // �����́A"Monazilla/" ���‚����NG // Request�̑��M $response = P2Commun::getHTTPResponse($req); @@ -802,7 +802,7 @@ public function previewOne() { fclose ($fd); // be.2ch.net �Ȃ�EUC��SJIS�ϊ� - if (P2HostType::isHostBe2chNet ($this->host)) { + if (P2HostMgr::isHostBe2chNet ($this->host)) { $first_line = mb_convert_encoding ($first_line, 'CP932', 'CP51932'); } @@ -852,7 +852,7 @@ public function previewOneNotFound($code = null) { $this->diedat = true; // 2ch, bbspink, vip2ch �Ȃ�read.cgi�Ŋm�F - if (P2HostType::isHost2chs ($this->host) || P2HostType::isHostVip2ch ($this->host)) { + if (P2HostMgr::isHost2chs ($this->host) || P2HostMgr::isHostVip2ch ($this->host)) { $this->getdat_error_msg_ht = $this->get2chDatError ($code); if (count ($this->datochi_residuums)) { if ($_conf['ktai']) { @@ -1016,7 +1016,7 @@ public function readDat() { // be.2ch.net �Ȃ�EUC��SJIS�ϊ� // �O�̂���SJIS��UTF-8�������R�[�h����̌��ɓ���Ă��� // �E�E�E���A�������������^�C�g���̃X���b�h�Ō딻�肪�������̂ŁA�w�肵�Ă��� - if (P2HostType::isHostBe2chNet ($this->host)) { + if (P2HostMgr::isHostBe2chNet ($this->host)) { // mb_convert_variables('CP932', 'CP51932,CP932,UTF-8', $this->datlines); mb_convert_variables ('CP932', 'CP51932', $this->datlines); } @@ -1099,7 +1099,7 @@ public function explodeDatLine($aline) { * @return array */ public function scanOriginalHosts() { - if (P2HostType::isHost2chs ($this->host) && file_exists ($this->keydat) && ($dat = file_get_contents ($this->keydat))) { + if (P2HostMgr::isHost2chs ($this->host) && file_exists ($this->keydat) && ($dat = file_get_contents ($this->keydat))) { $bbs_re = preg_quote ($this->bbs, '@'); $pattern = "@/(\\w+\\.(?:2ch\\.net|bbspink\\.com))(?:/test/read\\.cgi)?/{$bbs_re}\\b@"; if (preg_match_all ($pattern, $dat, $matches, PREG_PATTERN_ORDER)) { diff --git a/lib/expack/tgrep/view.inc.php b/lib/expack/tgrep/view.inc.php index 3fdf1f99b..1a3081950 100644 --- a/lib/expack/tgrep/view.inc.php +++ b/lib/expack/tgrep/view.inc.php @@ -148,7 +148,7 @@ function moveSubject(href, serachWord, query) { $new = ''; $turl = sprintf('%s?host=%s&bbs=%s&key=%d', $_conf['read_php'], $t->host, $t->bbs, $t->tkey); $burl = sprintf('%s?host=%s&bbs=%s&itaj_en=%s&word=%s', $_conf['subject_php'], $t->host, $t->bbs, UrlSafeBase64::encode($t->ita), $htm['query_en']); - if (P2HostType::isHostMachiBbs($t->host)) { + if (P2HostMgr::isHostMachiBbs($t->host)) { $ourl = sprintf('http://%s/bbs/read.cgi/%s/%s/', $t->host, $t->bbs, $t->tkey); } else { $ourl = sprintf('http://%s/test/read.cgi/%s/%s/', $t->host, $t->bbs, $t->tkey); diff --git a/lib/get_info.inc.php b/lib/get_info.inc.php index 99c158d1a..3da39cced 100644 --- a/lib/get_info.inc.php +++ b/lib/get_info.inc.php @@ -16,7 +16,7 @@ function get_board_info($host, $bbs) { global $_conf; - $group = P2Util::getHostGroupName($host); + $group = P2HostMgr::getHostGroupName($host); $info = new stdClass(); $info->type = 'board'; @@ -59,7 +59,7 @@ function get_board_info($host, $bbs) foreach ($favlines as $l) { $lar = explode("\t", $l); $favitas[0][] = array( - 'group' => P2Util::getHostGroupName($lar[1]), + 'group' => P2HostMgr::getHostGroupName($lar[1]), 'host' => $lar[1], 'bbs' => $lar[2], 'itaj' => $lar[3] @@ -97,7 +97,7 @@ function get_thread_info($host, $bbs, $key) { global $_conf; - $group = P2Util::getHostGroupName($host); + $group = P2HostMgr::getHostGroupName($host); $info = new stdClass(); $info->type = 'thread'; @@ -163,7 +163,7 @@ function get_thread_info($host, $bbs, $key) foreach ($pallines as $l) { $palarray = explode('<>', $l); if ($aThread->key == $palarray[1] && $aThread->bbs == $palarray[11]) { - if (P2Util::getHostGroupName($palarray[10]) == $group) { + if (P2HostMgr::getHostGroupName($palarray[10]) == $group) { $info->palace = true; break; } diff --git a/lib/plugins/hissi/Hissi.php b/lib/plugins/hissi/Hissi.php index ef64901c5..29abac77f 100644 --- a/lib/plugins/hissi/Hissi.php +++ b/lib/plugins/hissi/Hissi.php @@ -83,7 +83,7 @@ public function load() public function isEnabled() { if ($this->host) { - if (!P2HostType::isHost2chs($this->host)) { + if (!P2HostMgr::isHost2chs($this->host)) { return false; } } diff --git a/lib/plugins/mimizun/Mimizun.php b/lib/plugins/mimizun/Mimizun.php index ec020c6dc..bf97c6338 100644 --- a/lib/plugins/mimizun/Mimizun.php +++ b/lib/plugins/mimizun/Mimizun.php @@ -91,11 +91,11 @@ public function isEnabled() // (�Z�b�g����Ă��Ȃ����2ch�Ƃ݂Ȃ�) if ($this->host) { // �܂�BBS�Ȃ�false - if (P2HostType::isHostMachiBbs($this->host)) { + if (P2HostMgr::isHostMachiBbs($this->host)) { return false; } // 2ch�łȂ����false - if (!P2HostType::isHost2chs($this->host)) { + if (!P2HostMgr::isHost2chs($this->host)) { return false; } } diff --git a/lib/plugins/stalker/Stalker.php b/lib/plugins/stalker/Stalker.php index ad0be2fc2..bb93a5828 100644 --- a/lib/plugins/stalker/Stalker.php +++ b/lib/plugins/stalker/Stalker.php @@ -24,7 +24,7 @@ class Stalker public function isEnabled() { if ($this->host) { - if (!P2HostType::isHost2chs($this->host)) { + if (!P2HostMgr::isHost2chs($this->host)) { return false; } } diff --git a/lib/post_form_options.inc.php b/lib/post_form_options.inc.php index 57f90d84c..0b5618904 100644 --- a/lib/post_form_options.inc.php +++ b/lib/post_form_options.inc.php @@ -168,13 +168,13 @@ function setHiddenValue(button) { // {{{ ��/Be �������� �`�F�b�N�{�b�N�X // 2ch���������� -if (P2HostType::isHost2chs($host) and file_exists($_conf['sid2ch_php'])) { +if (P2HostMgr::isHost2chs($host) and file_exists($_conf['sid2ch_php'])) { $htm['maru_post'] = '' . ''; } // Be -if (P2HostType::isHost2chs($host) and P2Util::isEnableBe2ch()) { +if (P2HostMgr::isHost2chs($host) and P2Util::isEnableBe2ch()) { $htm['beres'] = '' . ''; } @@ -208,7 +208,7 @@ function setHiddenValue(button) { $htm['dpreview2'] = ''; if (!$_conf['ktai'] && $_conf['expack.editor.dpreview']) { $_dpreview_noname = 'null'; - if (P2HostType::isHost2chs($host)) { + if (P2HostMgr::isHost2chs($host)) { $_dpreview_st = new SettingTxt($host, $bbs); $_dpreview_st->setSettingArray(); if (!empty($_dpreview_st->setting_array['BBS_NONAME_NAME'])) { diff --git a/lib/read_shitaraba.inc.php b/lib/read_shitaraba.inc.php index a74b4b246..b8d54a8e3 100644 --- a/lib/read_shitaraba.inc.php +++ b/lib/read_shitaraba.inc.php @@ -36,9 +36,9 @@ function shitarabaDownload(ThreadRead $aThread) } // JBBS@������� - if (P2HostType::isHostJbbsShitaraba($aThread->host)) { + if (P2HostMgr::isHostJbbsShitaraba($aThread->host)) { // ������΂�livedoor�ړ]�ɑΉ��B�Ǎ����livedoor�Ƃ���B - $host = P2HostType::adjustHostJbbs($aThread->host); + $host = P2HostMgr::adjustHostJbbs($aThread->host); list($host, $category, ) = explode('/', $host); $machiurl = "http://{$host}/bbs/rawmode.cgi/{$category}/{$aThread->bbs}/{$aThread->key}/{$START}-"; } @@ -55,7 +55,7 @@ function shitarabaDownload(ThreadRead $aThread) unset($machiurl_res); // {{{ ������΂Ȃ�EUC��SJIS�ɕϊ� - if (P2HostType::isHostJbbsShitaraba($aThread->host)) { + if (P2HostMgr::isHostJbbsShitaraba($aThread->host)) { $temp_data = FileCtl::file_read_contents($tempfile); $temp_data = mb_convert_encoding($temp_data, 'CP932', 'CP51932'); if (FileCtl::file_write_contents($tempfile, $temp_data) === false) { diff --git a/lib/sb_footer.inc.php b/lib/sb_footer.inc.php index 2ce033c97..7418c2573 100644 --- a/lib/sb_footer.inc.php +++ b/lib/sb_footer.inc.php @@ -82,11 +82,11 @@ // �X�y�V�������[�h�łȂ���΃t�H�[�����͕⊮======================== $ini_url_text = ''; if (!$aThreadList->spmode) { - if (P2HostType::isHostJbbsShitaraba($aThreadList->host)) { // ������� + if (P2HostMgr::isHostJbbsShitaraba($aThreadList->host)) { // ������� $ini_url_text = "http://{$aThreadList->host}/bbs/read.cgi?BBS={$aThreadList->bbs}&KEY="; - } elseif (P2HostType::isHostMachiBbs($aThreadList->host)) { // �܂�BBS + } elseif (P2HostMgr::isHostMachiBbs($aThreadList->host)) { // �܂�BBS $ini_url_text = "http://{$aThreadList->host}/bbs/read.pl?BBS={$aThreadList->bbs}&KEY="; - } elseif (P2HostType::isHostMachiBbsNet($aThreadList->host)) { // �܂��r�˂��� + } elseif (P2HostMgr::isHostMachiBbsNet($aThreadList->host)) { // �܂��r�˂��� $ini_url_text = "http://{$aThreadList->host}/test/read.cgi?bbs={$aThreadList->bbs}&key="; } else { $ini_url_text = "http://{$aThreadList->host}/test/read.cgi/{$aThreadList->bbs}/"; diff --git a/lib/sb_header_k.inc.php b/lib/sb_header_k.inc.php index 59b823fe1..df20a1431 100644 --- a/lib/sb_header_k.inc.php +++ b/lib/sb_header_k.inc.php @@ -21,8 +21,8 @@ $ptitle_url = $p2_subject_url; // 2ch�n - } elseif (P2HostType::isHost2chs($aThreadList->host)) { - if (P2HostType::isHostBbsPink($aThreadList->host)) { + } elseif (P2HostMgr::isHost2chs($aThreadList->host)) { + if (P2HostMgr::isHostBbsPink($aThreadList->host)) { //$ptitle_url = "http://{$aThreadList->host}/{$aThreadList->bbs}/i/"; $ptitle_url = "http://speedo.ula.cc/test/p.so/{$aThreadList->host}/{$aThreadList->bbs}/"; } else { diff --git a/lib/sb_print_k.inc.php b/lib/sb_print_k.inc.php index e06264217..4309b186f 100644 --- a/lib/sb_print_k.inc.php +++ b/lib/sb_print_k.inc.php @@ -240,7 +240,7 @@ function sb_print_k($aThreadList) } // >>1�̂�, >>1���� - if (P2HostType::isHost2chs($aThreadList->host) && !$aThread->isKitoku()) { + if (P2HostMgr::isHost2chs($aThreadList->host) && !$aThread->isKitoku()) { switch ($_conf['mobile.sb_show_first']) { case 1: $thre_url = $onlyone_url; diff --git a/lib/startup.funcs.php b/lib/startup.funcs.php index 8771ad52b..e5c8c732f 100644 --- a/lib/startup.funcs.php +++ b/lib/startup.funcs.php @@ -14,7 +14,6 @@ function p2_load_class($name) { if (preg_match('/^(?: - BbsMap | BrdCtl | BrdMenu(?:Cate|Ita)? | DataPhp | diff --git a/lib/wiki/Samba.php b/lib/wiki/Samba.php index 59b1bb243..53f41b920 100644 --- a/lib/wiki/Samba.php +++ b/lib/wiki/Samba.php @@ -69,7 +69,7 @@ public function save() public function getSambaTime($host, $bbs) { - if (!P2HostType::isHost2chs($host)) { + if (!P2HostMgr::isHost2chs($host)) { return false; } // samba���擾 @@ -105,7 +105,7 @@ public function setWriteTime($host, $bbs) // �c�莞�Ԃ��擾 public function getSamba($host, $bbs) { - if (!P2HostType::isHost2chs($host)) { + if (!P2HostMgr::isHost2chs($host)) { return -1; } From 72cb902f58e0e0a0fe60bdf25cb7dd3bd4ba7816 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Sun, 19 Nov 2017 22:31:51 +0900 Subject: [PATCH 297/339] =?UTF-8?q?BbsMap.php=E3=81=A8P2HostType.php?= =?UTF-8?q?=E3=82=92=E5=90=88=E4=BD=93=E3=80=80=E3=82=B3=E3=83=9F=E3=83=83?= =?UTF-8?q?=E3=83=88=E3=81=97=E5=BF=98=E3=82=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/editfavita.php | 2 +- rep2/editpref.php | 4 ++-- rep2/info.php | 2 +- rep2/live_post_form.php | 2 +- rep2/post.php | 22 +++++++++++----------- rep2/post_draft.php | 4 ++-- rep2/post_form.php | 2 +- rep2/subject.php | 2 +- 8 files changed, 20 insertions(+), 20 deletions(-) diff --git a/rep2/editfavita.php b/rep2/editfavita.php index a774b566a..25e6104e2 100644 --- a/rep2/editfavita.php +++ b/rep2/editfavita.php @@ -18,7 +18,7 @@ } // ���C�ɔ‚̃z�X�g�𓯊� if (isset($_GET['syncfavita']) || isset($_POST['syncfavita'])) { - BbsMap::syncBrd($_conf['favita_brd']); + P2HostMgr::syncBrd($_conf['favita_brd']); } diff --git a/rep2/editpref.php b/rep2/editpref.php index cea008990..e5449971e 100644 --- a/rep2/editpref.php +++ b/rep2/editpref.php @@ -84,13 +84,13 @@ foreach ($sync_boards as $brd) { if (file_exists($brd)) { - BbsMap::syncBrd($brd); + P2HostMgr::syncBrd($brd); } } foreach ($sync_indexes as $idx) { if (file_exists($idx)) { - BbsMap::syncIdx($idx); + P2HostMgr::syncIdx($idx); } } diff --git a/rep2/info.php b/rep2/info.php index 05111e28e..b430540cb 100644 --- a/rep2/info.php +++ b/rep2/info.php @@ -283,7 +283,7 @@ } $motothre_url = $aThread->getMotoThread(); -if (P2HostType::isHost2chs($aThread->host)) { +if (P2HostMgr::isHost2chs($aThread->host)) { $motothre_org_url = $aThread->getMotoThread(true); } else { $motothre_org_url = $motothre_url; diff --git a/rep2/live_post_form.php b/rep2/live_post_form.php index 1d868f079..23b5bdeef 100755 --- a/rep2/live_post_form.php +++ b/rep2/live_post_form.php @@ -57,7 +57,7 @@ $ptitle = "{$itaj_hd} - �V�K�X���b�h�쐬"; // machibbs�AJBBS@������� �Ȃ� - if (P2HostType::isHostMachiBbs($host) or P2HostType::isHostJbbsShitaraba($host)) { + if (P2HostMgr::isHostMachiBbs($host) or P2HostMgr::isHostJbbsShitaraba($host)) { $submit_value = '�V�K��������'; // 2ch�Ȃ� } else { diff --git a/rep2/post.php b/rep2/post.php index b5c18b9db..0b0552d0e 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -84,13 +84,13 @@ // }}} // machibbs�AJBBS@������� �Ȃ� -if (P2HostType::isHostMachiBbs($host) or P2HostType::isHostJbbsShitaraba($host)) { +if (P2HostMgr::isHostMachiBbs($host) or P2HostMgr::isHostJbbsShitaraba($host)) { $bbs_cgi = '/bbs/write.cgi'; // JBBS@������� �Ȃ� - if (P2HostType::isHostJbbsShitaraba($host)) { + if (P2HostMgr::isHostJbbsShitaraba($host)) { // ������΂̈ړ]�ɑΉ��Bpost������s�ɍ��킹��B - $host = P2HostType::adjustHostJbbs($host); + $host = P2HostMgr::adjustHostJbbs($host); $bbs_cgi = '../../bbs/write.cgi'; preg_match('/\\/(\\w+)$/', $host, $ar); $dir = $ar[1]; @@ -148,13 +148,13 @@ exit; } -if (P2HostType::isHostJbbsShitaraba($host)) { +if (P2HostMgr::isHostJbbsShitaraba($host)) { $post[$dir_k] = $dir; } // {{{ 2ch�Ł����O�C�����Ȃ�sid�lj� -if (!empty($_POST['maru']) and P2HostType::isHost2chs($host)) { +if (!empty($_POST['maru']) and P2HostMgr::isHost2chs($host)) { $maru_time = 0; if (file_exists($_conf['sid2ch_php'])) { @@ -212,7 +212,7 @@ PostDataStore::set($post_backup_key, $post_cache); // cookie �ǂݍ��� -$cookie_key = $_login->user_u . '/' . P2Util::normalizeHostName(P2HostType::isHostBbsPink($host) ? 'www.bbspink.com' : P2HostType::isHost2chs($host) ? 'www.2ch.net' : $host); // �E�@���Ή� +$cookie_key = $_login->user_u . '/' . P2Util::normalizeHostName(P2HostMgr::isHostBbsPink($host) ? 'www.bbspink.com' : P2HostMgr::isHost2chs($host) ? 'www.2ch.net' : $host); // �E�@���Ή� if ($p2cookies = CookieDataStore::get($cookie_key)) { if (is_array($p2cookies)) { if (array_key_exists('expires', $p2cookies)) { @@ -389,7 +389,7 @@ function postIt($host, $bbs, $key, $post) global $bbs_cgi; // �ڑ��悪2ch.net�Ȃ��SSL�ʐM���s��(pink�͑Ή����Ă��Ȃ��̂ł��Ȃ�) - if (P2HostType::isHost2chs($host) && ! P2HostType::isHostBbsPink($host) && $_conf['2ch_ssl.post']) { + if (P2HostMgr::isHost2chs($host) && ! P2HostMgr::isHostBbsPink($host) && $_conf['2ch_ssl.post']) { $bbs_cgi_url = 'https://' . $host . $bbs_cgi; } else { $bbs_cgi_url = 'http://' . $host . $bbs_cgi; @@ -411,7 +411,7 @@ function postIt($host, $bbs, $key, $post) } // be.2ch.net �F�؃N�b�L�[ - if (P2HostType::isHostBe2chs($host) || !empty($_REQUEST['beres'])) { + if (P2HostMgr::isHostBe2chs($host) || !empty($_REQUEST['beres'])) { if ($_conf['be_2ch_DMDM'] && $_conf['be_2ch_MDMD']) { $req->addCookie('DMDM', urlencode( rawurldecode( $_conf['be_2ch_DMDM']) ) ); $req->addCookie('MDMD', urlencode( rawurldecode( $_conf['be_2ch_MDMD']) ) ); @@ -428,9 +428,9 @@ function postIt($host, $bbs, $key, $post) while (list($name, $value) = each($post)) { // ������� or be.2ch.net�Ȃ�AEUC�ɕϊ� - if (P2HostType::isHostJbbsShitaraba($host) || P2HostType::isHostBe2chs($host)) { + if (P2HostMgr::isHostJbbsShitaraba($host) || P2HostMgr::isHostBe2chs($host)) { $value = mb_convert_encoding($value, 'CP51932', 'CP932'); - } elseif (P2HostType::isHost2chs($host) && ! P2HostType::isHostBbsPink($host)) { + } elseif (P2HostMgr::isHost2chs($host) && ! P2HostMgr::isHostBbsPink($host)) { // 2ch��Unicode�̕������post���� $value = html_entity_decode(mb_convert_encoding($value, 'UTF-8', 'CP932'),ENT_QUOTES,'UTF-8'); } @@ -464,7 +464,7 @@ function postIt($host, $bbs, $key, $post) } // be.2ch.net or JBBS������� �����R�[�h�ϊ� EUC��SJIS - if (P2HostType::isHostBe2chs($host) || P2HostType::isHostJbbsShitaraba($host)) { + if (P2HostMgr::isHostBe2chs($host) || P2HostMgr::isHostJbbsShitaraba($host)) { $body = mb_convert_encoding($body, 'CP932', 'CP51932'); // diff --git a/rep2/post_draft.php b/rep2/post_draft.php index a99c01659..f1ca4fcfe 100644 --- a/rep2/post_draft.php +++ b/rep2/post_draft.php @@ -44,10 +44,10 @@ } // ������΂�livedoor�ړ]�ɑΉ��Bpost���livedoor�Ƃ���B -$host = P2HostType::adjustHostJbbs($host); +$host = P2HostMgr::adjustHostJbbs($host); // machibbs�AJBBS@������� �Ȃ� -if (P2HostType::isHostMachiBbs($host) or P2HostType::isHostJbbsShitaraba($host)) { +if (P2HostMgr::isHostMachiBbs($host) or P2HostMgr::isHostJbbsShitaraba($host)) { /* compact() �� array_combine() ��POST����l�̔z������̂ŁA $post_param_keys �� $post_send_keys �̒l�̏����͑�����I */ //$post_param_keys = array('bbs', 'key', 'time', 'FROM', 'mail', 'MESSAGE', 'subject', 'submit'); diff --git a/rep2/post_form.php b/rep2/post_form.php index 895499e78..62cfe71a7 100644 --- a/rep2/post_form.php +++ b/rep2/post_form.php @@ -55,7 +55,7 @@ $ptitle = "{$itaj_hd} - �V�K�X���b�h�쐬"; // machibbs�AJBBS@������� �Ȃ� - if (P2HostType::isHostMachiBbs($host) or P2HostType::isHostJbbsShitaraba($host)) { + if (P2HostMgr::isHostMachiBbs($host) or P2HostMgr::isHostJbbsShitaraba($host)) { $submit_value = '�V�K��������'; // 2ch�Ȃ� } else { diff --git a/rep2/subject.php b/rep2/subject.php index c12590bad..a1fee00ba 100644 --- a/rep2/subject.php +++ b/rep2/subject.php @@ -1036,7 +1036,7 @@ function matchSbFilter(Thread $aThread) if (file_exists($aThread->keydat)) { $subject = file_get_contents($aThread->keydat); // be.2ch.net ��EUC - if (P2HostType::isHostBe2chs($aThread->host)) { + if (P2HostMgr::isHostBe2chs($aThread->host)) { $subject = mb_convert_encoding($subject, 'CP932', 'CP51932'); } } else { From 9b0d2afc162cc74665ee501ec468308768890a8c Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Mon, 20 Nov 2017 07:19:27 +0900 Subject: [PATCH 298/339] =?UTF-8?q?UA.php=E3=81=A7=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E3=81=97=E3=81=A6=E3=81=84=E3=82=8B=E3=82=B0=E3=83=AD=E3=83=BC?= =?UTF-8?q?=E3=83=90=E3=83=AB=E5=A4=89=E6=95=B0=E3=82=92=E3=82=AF=E3=83=A9?= =?UTF-8?q?=E3=82=B9=E5=A4=89=E6=95=B0=E3=81=AB=E5=A4=89=E6=9B=B4=20?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E3=81=95=E3=82=8C=E3=81=A6=E3=81=84=E3=81=AA?= =?UTF-8?q?=E3=81=84=E3=83=AC=E3=82=B9=E3=83=96=E3=83=83=E3=82=AF=E3=83=9E?= =?UTF-8?q?=E3=83=BC=E3=82=AF=E6=A9=9F=E8=83=BD=E3=81=AE=E6=AE=8B=E9=AA=B8?= =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/UA.php | 56 +++++++++++++++++++---------------------- lib/setbookmark.inc.php | 36 -------------------------- rep2/httpcmd.php | 38 ---------------------------- rep2/js/invite.js | 1 - 4 files changed, 26 insertions(+), 105 deletions(-) delete mode 100644 lib/setbookmark.inc.php diff --git a/lib/UA.php b/lib/UA.php index bc93110bc..e098c8cff 100644 --- a/lib/UA.php +++ b/lib/UA.php @@ -1,24 +1,6 @@ '); invite.document.writeln(''); invite.document.writeln(''); - invite.document.writeln(''); invite.document.writeln(''); invite.document.close(); invite.resizeTo(winWidth, winHeight); From c6ca1768f96a66d922b826081e23fdcdb0266c97 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Mon, 20 Nov 2017 07:35:12 +0900 Subject: [PATCH 299/339] =?UTF-8?q?HTTP=E9=80=9A=E4=BF=A1=E3=82=92socket?= =?UTF-8?q?=E3=81=8B=E3=82=89cURL=E3=81=AB=E6=88=BB=E3=81=97=E3=81=9F?= =?UTF-8?q?=E3=80=82=20socket=E3=81=AFopenSSL=E3=81=8C=E3=82=89=E3=81=BF?= =?UTF-8?q?=E3=81=A7=E5=9C=B0=E9=9B=B7=E8=B8=8F=E3=82=80=E3=81=AE=E3=81=A7?= =?UTF-8?q?=E7=B5=B6=E5=AF=BE=E4=BD=BF=E7=94=A8=E7=A6=81=E6=AD=A2=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Commun.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/P2Commun.php b/lib/P2Commun.php index 9b8d33ace..d66d7d93f 100644 --- a/lib/P2Commun.php +++ b/lib/P2Commun.php @@ -46,9 +46,8 @@ static public function createHTTPRequest($url , $method = HTTP_Request2::METHOD_ 'timeout' => $_conf['http_read_timeout'], )); - // �O���Ƃ̒ʐM�͑S��cURL���g�� -// $req->setAdapter('curl'); - $req->setAdapter('socket'); + // �O���Ƃ̒ʐM�͑S��cURL���g���isocket��openSSL���݂Œn�����ނ̂Ő�Ύg�p�֎~�I�j + $req->setAdapter('curl'); // SSL�̐ݒ� if($purl['scheme'] == 'https') { From 6aeba878eb5d89ecacdc7a64655da83884e80add Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Tue, 21 Nov 2017 07:31:07 +0900 Subject: [PATCH 300/339] =?UTF-8?q?=E2=97=8F=E3=81=AE=E3=83=AD=E3=82=B0?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E6=83=85=E5=A0=B1=E3=82=92=E8=AA=AD=E3=81=BF?= =?UTF-8?q?=E8=BE=BC=E3=82=80=E9=9A=9B=E3=81=AE=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E5=87=A6=E7=90=86=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/P2Util.php b/lib/P2Util.php index 3f45dace0..3d9207c06 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -1012,9 +1012,11 @@ static public function readIdPw2ch() } $autoLogin2ch = (bool)$rec_autoLogin2ch; + + return array($login2chID, $login2chPW, $autoLogin2ch); } - return array($login2chID, $login2chPW, $autoLogin2ch); + return false; } // }}} From 0340267b0a5a264ef4c1cab9a41419a90f1b17b1 Mon Sep 17 00:00:00 2001 From: killer4989 Date: Mon, 20 Nov 2017 12:41:23 +0900 Subject: [PATCH 301/339] =?UTF-8?q?detectThread=20=E3=81=AB=E9=96=A2?= =?UTF-8?q?=E3=81=97=E3=81=A6=E8=BF=BD=E5=8A=A0=EF=BD=A5=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ・正規表現パターンを合わせた ・itest.bbspink.com を追加 --- lib/P2Util.php | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/lib/P2Util.php b/lib/P2Util.php index 3d9207c06..6934b7fbf 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -1497,23 +1497,23 @@ static public function detectThread($url = null) $ls = null; // �܂�BBS - http://kanto.machi.to/bbs/read.cgi/kanto/1241815559/ - if (preg_match('<^http://(\\w+\\.machi(?:bbs\\.com|\\.to))/bbs/read\\.cgi - /(\\w+)/([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) { + if (preg_match('<^https?://(\\w+\\.machi(?:bbs\\.com|\\.to))/bbs/read\\.cgi + /(\\w+)/(\\d+)(?:/([^/]*))?>x', $nama_url, $matches)) { $host = $matches[1]; $bbs = $matches[2]; $key = $matches[3]; $ls = (isset($matches[4]) && strlen($matches[4])) ? $matches[4] : ''; // �܂�BBS(�h���C���̂�) - http://machi.to/bbs/read.cgi/kanto/1241815559/ - } elseif (preg_match('<^http?://(machi\\.to)/bbs/read\\.cgi - /(\\w+)/([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) { + } elseif (preg_match('<^https?://(machi\\.to)/bbs/read\\.cgi + /(\\w+)/(\\d+)(?:/([^/]*))?>x', $nama_url, $matches)) { $host = $matches[1]; $bbs = $matches[2]; $key = $matches[3]; $ls = (isset($matches[4]) && strlen($matches[4])) ? $matches[4] : ''; // �������JBBS - http://jbbs.livedoor.com/bbs/read.cgi/computer/2999/1081177036/-100 - } elseif (preg_match('<^http://(jbbs\\.(?:livedoor\\.(?:jp|com)|shitaraba\\.(?:net|com)))/(?:bbs|bbs/lite)/read\\.cgi + } elseif (preg_match('<^https?://(jbbs\\.(?:livedoor\\.(?:jp|com)|shitaraba\\.(?:net|com)))/(?:bbs|bbs/lite)/read\\.cgi /(\\w+)/(\\d+)/(\\d+)/((?:\\d+)?-(?:\\d+)?)?[^"]*>x', $nama_url, $matches)) { $host = $matches[1] . '/' . $matches[2]; $bbs = $matches[3]; @@ -1521,36 +1521,36 @@ static public function detectThread($url = null) $ls = isset($matches[5]) ? $matches[5] : ''; // �����܂����������JBBS - http://kanto.machibbs.com/bbs/read.pl?BBS=kana&KEY=1034515019 - } elseif (preg_match('<^http://(\\w+\\.machi(?:bbs\\.com|\\.to))/bbs/read\\.(?:pl|cgi)\\?(.+)>', + } elseif (preg_match('<^https?://(\\w+\\.machi(?:bbs\\.com|\\.to))/bbs/read\\.(?:pl|cgi)\\?(.+)>', $nama_url, $matches)) { $host = $matches[1]; list($bbs, $key, $ls) = self::parseMachiQuery($matches[2]); - } elseif (preg_match('<^http://((jbbs\\.(?:livedoor\\.(?:jp|com)|shitaraba\\.(?:net|com)))(?:/(\\w+))?)/bbs/read\\.(?:pl|cgi)\\?(.+)>', + } elseif (preg_match('<^https?://((jbbs\\.(?:livedoor\\.(?:jp|com)|shitaraba\\.(?:net|com)))(?:/(\\w+))?)/bbs/read\\.(?:pl|cgi)\\?(.+)>', $nama_url, $matches)) { $host = $matches[1]; list($bbs, $key, $ls) = self::parseMachiQuery($matches[4]); // vip2ch.com - http://ex14.vip2ch.com/test/read.cgi/news4ssnip/1450958506/ - } elseif (preg_match('<^https?://((\\w+)\\.vip2ch\\.com)/(?:test|i)/(?:read\\.(?:cgi|html|so)|mread\\.cgi|read)/(\\w+)/([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) { + } elseif (preg_match('<^https?://((\\w+)\\.vip2ch\\.com)/(?:test|i)/(?:read\\.(?:cgi|html|so)|mread\\.cgi|read)/(\\w+)/(\\d+)(?:/([^/]*))?>x', $nama_url, $matches)) { $host = $matches[1]; $bbs = $matches[3]; $key = $matches[4]; $ls = (isset($matches[5]) && strlen($matches[5])) ? $matches[5] : ''; // vip2ch.com - http://ex14.vip2ch.com/i/responce.html?bbs=news4ssnip&dat=1450958506 - } elseif (preg_match('<^https?://((\\w+)\\.vip2ch\\.com)/i/(?:responce|responce_r18)\\.html\\?bbs=(\\w+)&dat=([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) { + } elseif (preg_match('<^https?://((\\w+)\\.vip2ch\\.com)/i/(?:responce|responce_r18)\\.html\\?bbs=(\\w+)&dat=(\\d+)(?:/([^/]*))?>x', $nama_url, $matches)) { $host = $matches[1]; $bbs = $matches[3]; $key = $matches[4]; $ls = (isset($matches[5]) && strlen($matches[5])) ? $matches[5] : ''; // itest - https://itest.5ch.net/hayabusa9/test/read.cgi/mnewsplus/1510531889 - } elseif (preg_match('<^https?://itest\\.(?:[25])ch\\.net/(\\w+)/test/read\\.cgi/(\\w+)/(\\d+)(?:/(.+$))?>x', $nama_url, $matches)) { - $host = $matches[1].'.5ch.net'; - $bbs = $matches[2]; - $key = $matches[3]; - $ls = (isset($matches[4]) && strlen($matches[4])) ? $matches[4] : ''; + } elseif (preg_match('<^https?://(itest\\.(?:[25]ch\\.net|bbspink\\.com))/(\\w+)/test/read\\.cgi/(\\w+)/(\\d+)(?:/(.+$))?>x', $nama_url, $matches)) { + $host = str_replace("itest", $matches[2], $matches[1]); + $bbs = $matches[3]; + $key = $matches[4]; + $ls = (isset($matches[5]) && strlen($matches[5])) ? $matches[5] : ''; // 2ch or pink - http://choco.2ch.net/test/read.cgi/event/1027770702/ } elseif (preg_match('<^https?://(.+)/test/read\\.(?:cgi|html|so|php) @@ -1562,20 +1562,20 @@ static public function detectThread($url = null) $ls = (isset($matches[4]) && strlen($matches[4])) ? $matches[4] : ''; } - // 2ch or pink by ula.cc(bintan / bekkanko) - http://choco.2ch.net/test/read.cgi/event/1027770702/ - } elseif (preg_match('<^https?://(?:(?:bintan|same)\\.ula\\.cc|ula\\.(?:(?:2ch|5ch)\\.net|bbspink\\.com))/test/(?:read\\.(?:cgi|html|so)|r\\.so) + // 2ch or pink by ula.cc(bintan / bekkanko) - http://bintan.ula.cc/test/read.cgi/lavender.2ch.net/chakumelo/1509563851/ + } elseif (preg_match('<^https?://(?:(?:bintan|same)\\.ula\\.cc|ula\\.(?:[25]ch\\.net|bbspink\\.com))/test/(?:read\\.(?:cgi|html|so)|r\\.so) /(.+)/(\\w+)/([0-9]+)(?:/([^/]*))>x', $nama_url, $matches)) { $host = $matches[1]; $bbs = $matches[2]; $key = $matches[3]; $ls = (isset($matches[4]) && strlen($matches[4])) ? $matches[4] : ''; - // 2ch or pink by ula.cc(new bintan) - http://choco.2ch.net/test/read.cgi/event/1027770702/ - } elseif (preg_match('<^https?://(ula\\.(?:(?:2ch|5ch)\\.net|bbspink\\.com))/(?:2ch|5ch) + // 2ch or pink by ula.cc(new bintan) - http://bintan.ula.cc/2ch/chakumelo/lavender.2ch.net/1509563851/ + } elseif (preg_match('<^https?://(?:(?:bintan|same)\\.ula\\.cc|ula\\.(?:[25]ch\\.net|bbspink\\.com))/[25]ch /(\\w+)/(.+)/(\\d+)(?:/([^/]*))>x', $nama_url, $matches)) { - $host = $matches[3]; - $bbs = $matches[2]; - $key = $matches[4]; + $host = $matches[2]; + $bbs = $matches[1]; + $key = $matches[3]; $ls = (isset($matches[5]) && strlen($matches[5])) ? $matches[5] : ''; // 2ch or pink �ߋ����Ohtml - http://pc.2ch.net/mac/kako/1015/10153/1015358199.html From 213b6f8facc36d57f9a4b2c299cad72ba6f0a650 Mon Sep 17 00:00:00 2001 From: killer4989 Date: Tue, 21 Nov 2017 23:14:04 +0900 Subject: [PATCH 302/339] =?UTF-8?q?=E6=B5=AA=E4=BA=BA=E3=81=AE=E6=9C=89?= =?UTF-8?q?=E5=8A=B9=E6=9C=9F=E9=99=90=E8=A1=A8=E7=A4=BA=E3=82=92=E8=A8=AD?= =?UTF-8?q?=E5=AE=9A=E3=81=A7=E5=88=87=E3=82=8A=E6=9B=BF=E3=81=88=E3=82=89?= =?UTF-8?q?=E3=82=8C=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ほぼやっつけで'エラー・期限切れの場合のみ表示'に関しては期限切れのアカウントがないので 人柱機能ということにしてください。 --- conf/conf.inc.php | 1 + conf/conf_user_def.inc.php | 9 +++++++++ lib/P2Util.php | 11 +++++++++++ rep2/edit_conf_user.php | 2 ++ 4 files changed, 23 insertions(+) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 78702187c..f24188162 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -80,6 +80,7 @@ function p2_init() $_conf['expack.tgrep_url'] = 'http://page2.xrea.jp/tgrep/search'; $_conf['test.dig2ch_url'] = 'https://dig.5ch.net/'; $_conf['expack.gate_php'] = '//open774.github.io/p2-php/gate.html'; + $_conf['title_php'] = 'title.php'; $_conf['menu_php'] = 'menu.php'; $_conf['subject_php'] = 'subject.php'; $_conf['read_php'] = 'read.php'; diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index 754c08203..f954f0b12 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -596,6 +596,15 @@ $conf_user_def['2ch_ssl.post'] = 0; // (0) $conf_user_rad['2ch_ssl.post'] = array('1' => '����', '0' => '���Ȃ�'); +// �Q�l�̗L�������\�� +$conf_user_def['disp_ronin_expiration'] = 0; // (0) +$conf_user_sel['disp_ronin_expiration'] = array( + '0' => '����', + '1' => '�G���[������؂�̏ꍇ�̂ݕ\��', + '2' => '�^�C�g����ʂ̂ݕ\��', + '3' => '���Ȃ�' +); + // }}} // {{{ �g���p�b�N��iPhone diff --git a/lib/P2Util.php b/lib/P2Util.php index 6934b7fbf..407da87ac 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -1849,6 +1849,10 @@ function checkRoninExpiration() { global $_conf; + if($_conf['disp_ronin_expiration'] === "3"){ + return true; + } + $url = 'https://auth.bbspink.com/auth/timecheck.php'; if($_conf['2chapi_use'] == 1) { @@ -1938,6 +1942,13 @@ function checkRoninExpiration() return true; } + if( + $_conf['disp_ronin_expiration'] === "1" + || ($_conf['disp_ronin_expiration'] === "2" && basename($_SERVER["SCRIPT_NAME"]) !== $_conf['title_php']) + ){ + return true; + } + self::pushInfoHtml("

    p2 info: �Q�l<��>�̗L�������� {$date} �ł��

    "); return true; } diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index 71de7bdce..32a4c0e76 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -449,6 +449,8 @@ array('ssl_capath', 'SSL�ʐM�Őڑ�������؂��邽�߂̏ؖ���������f�B���N�g�� ex)"/etc/ssl/certs"
    �ݒ�Ȃ��ē����ꍇ�͐ݒ�s�v'), array('2ch_ssl.subject', '2ch.net��subjec.txt��SETTING.TXT�̎擾��SSL���g�p����'), array('2ch_ssl.post', '2ch.net�̏������݂�SSL���g�p����'), + '�Q�l�ݒ�', + array('disp_ronin_expiration', '�Q�l�̗L��������\���ݒ�'), ); printEditConfGroupHtml($groupname, $conflist, $flags); } From ffded0a89d0584556578add1d4ad499ee32812d7 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Wed, 22 Nov 2017 15:05:15 +0900 Subject: [PATCH 303/339] v171122.1500 --- conf/conf.inc.php | 2 +- doc/README-774.txt | 15 +++++++++++++++ rep2/edit_conf_user.php | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index f24188162..c6c03b1a8 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '171026.9001', // rep2�̃o�[�W���� + 'p2version' => '171122.1500', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/doc/README-774.txt b/doc/README-774.txt index e9adc5fb1..9701d0e2f 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -72,6 +72,21 @@ PHP7 ��ChangeLog + +* itest(https://itest.5ch.net/�T�[�o�[/test/read.cgi/��/�X��)�̃����N���J���@�\��lj� +* DAT�j���h�~�̂��߂ɋ��d�l��itest�������N���Ȃ��悤�ɕύX +* ���̍���PHP 2chBBS�X�N���v�g(http://script.s16.xrea.com/)���g�p�����O���‚ɑΉ� +* SPM���g�p����NG���ځ[��o�^���ɁA�–��̓o�^���o����@�\��lj� +* ic2:�_�E�����[�_�[��fatal error���o�Ȃ��悤�ɏC�� +* P2HttpExt.php�ȊO�̒ʐM�����ׂ�cURL�ɓ��� +* �Q�l��SSL�K�{�ɂȂ����̂Őݒ荀�ڂ����� +* dig5ch��JSON��form�^�O����������s��ɑΉ� +* �ȉ��Akiller4989 ����̃p�b�`����荞�� +* dat�擾�s�‚������ꍇ�̃��b�Z�[�W��\������悤�ɂ��� +* ImageCache2 �ł̃^�C���A�E�g�l��ݒ�ł���悤�ɂ��� +* �Q�l�̗L�������m�F�ł���悤�ɂ��� +* 5ch �ł̋�DAT�񋟏I�����b�Z�[�W���G���[��������悤�ɂ��� + 171018.1540 * bintan �ǂݍ��ݑΉ� * �Q�l���O�C���p��2chv.tora3.net��SSL�K�{�ɂȂ����̂őΉ� diff --git a/rep2/edit_conf_user.php b/rep2/edit_conf_user.php index 32a4c0e76..19a0a031e 100644 --- a/rep2/edit_conf_user.php +++ b/rep2/edit_conf_user.php @@ -450,7 +450,7 @@ array('2ch_ssl.subject', '2ch.net��subjec.txt��SETTING.TXT�̎擾��SSL���g�p����'), array('2ch_ssl.post', '2ch.net�̏������݂�SSL���g�p����'), '�Q�l�ݒ�', - array('disp_ronin_expiration', '�Q�l�̗L��������\���ݒ�'), + array('disp_ronin_expiration', '�Q�l�̗L��������\��'), ); printEditConfGroupHtml($groupname, $conflist, $flags); } From e882171cda8010928b45af98e64bfe29ac7facb2 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Wed, 13 Dec 2017 19:35:39 +0900 Subject: [PATCH 304/339] fix composer.json --- composer.json | 2 +- conf/conf_admin.inc.php | 8 ++------ doc/README-774.txt | 2 +- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/composer.json b/composer.json index 8310c27a3..4714155ec 100644 --- a/composer.json +++ b/composer.json @@ -9,7 +9,7 @@ }, { "type": "vcs", - "url": "https://github.com/2ch774/quickform" + "url": "https://github.com/open774/quickform" } ], "require": { diff --git a/conf/conf_admin.inc.php b/conf/conf_admin.inc.php index 633b761b7..d141a530d 100644 --- a/conf/conf_admin.inc.php +++ b/conf/conf_admin.inc.php @@ -71,15 +71,11 @@ // Cookie ID�̗L���������� $_conf['cid_expire_day'] = 30; // (30) -// �l�b�g���[�N�ڑ��^�C���A�E�g���� (�b) -// @deprecated use $_conf['http_conn_timeout'] and $_conf['http_read_timeout'] -$_conf['fsockopen_time_limit'] = 7; // (7) - // HTTP�ڑ��^�C���A�E�g���� (�b) -$_conf['http_conn_timeout'] = 2; // (2) +$_conf['http_conn_timeout'] = 5; // (5) // HTTP�Ǎ��^�C���A�E�g���� (�b) -$_conf['http_read_timeout'] = 8; // (8) +$_conf['http_read_timeout'] = 10; // (10) // p2�̍ŐV�o�[�W�����������`�F�b�N(����:1, ���Ȃ�:0) $_conf['updatan_haahaa'] = 1; // (1) diff --git a/doc/README-774.txt b/doc/README-774.txt index 9701d0e2f..bb5e6159d 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -72,7 +72,7 @@ PHP7 ��ChangeLog - +171122.1500 * itest(https://itest.5ch.net/�T�[�o�[/test/read.cgi/��/�X��)�̃����N���J���@�\��lj� * DAT�j���h�~�̂��߂ɋ��d�l��itest�������N���Ȃ��悤�ɕύX * ���̍���PHP 2chBBS�X�N���v�g(http://script.s16.xrea.com/)���g�p�����O���‚ɑΉ� From 0d73f326c53e96461d804cebd729e91b82518230 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Sat, 16 Dec 2017 09:36:55 +0900 Subject: [PATCH 305/339] =?UTF-8?q?=E3=82=A8=E3=83=A9=E3=83=BC=E3=81=AE?= =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E6=96=B9=E6=B3=95=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 4 ++-- rep2/post.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index b4c9fd3c1..e985205ed 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -322,7 +322,7 @@ protected function _downloadDat2chAPI($uaMona, $SID2ch, $from_bytes) { return '304 Not Modified'; } elseif ($code == '403') { $this->getdat_error_msg_ht .= "

    rep2 error: CloudFlare�ɐڑ������ۂ��ꂽ���߁A�X���b�h�擾�Ɏ��s���܂����B�ݒ�̕ύX���������Ă��������B

    "; - $this->getdat_error_msg_ht .= "

    ".$response->getBody ()."

    "; + $this->getdat_error_msg_ht .= "

    ".p2h($response->getBody ())."

    "; $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&relogin2chapi=true\">API�ōĎ擾�����݂�]"; $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&olddat=true\">��dat�ōĎ擾�����݂�]"; $this->diedat = true; @@ -342,7 +342,7 @@ protected function _downloadDat2chAPI($uaMona, $SID2ch, $from_bytes) { } else { if($_conf['2chapi_debug_print']==1) { - P2Util::pushInfoHtml('

    p2 debug(ThreadRead::API):body='.$response->getBody ().'

    '); + P2Util::pushInfoHtml('

    p2 debug(ThreadRead::API):body='.p2h($response->getBody ()).'

    '); } return $this->_downloadDat2chNotFound ($code); diff --git a/rep2/post.php b/rep2/post.php index 0b0552d0e..f27c50afc 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -845,9 +845,9 @@ function showUnexpectedResponse($response, $line = null) echo 'p2 ERROR'; echo '

    p2 ERROR

    �T�[�o����̃��X�|���X���ςł��B'; if (is_numeric($line)) { - echo "({$line})"; + echo "(�s�ԍ��F{$line})"; } - echo '

    ';
    +    echo '

    ���X�|���X(�񍐂̍ۂ̓X���ɏ���)�F

    ';
         echo p2h($response);
         echo '
    '; } From 8599ddc1459c1ef74e2db4d82974fac8a8b17eac Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Wed, 20 Dec 2017 21:57:35 +0900 Subject: [PATCH 306/339] =?UTF-8?q?=E9=80=A3=E6=83=B3=E9=85=8D=E5=88=97?= =?UTF-8?q?=E3=81=A8shiftjis=E3=81=AB=E9=85=8D=E6=85=AE=E3=81=97=E3=81=9Fp?= =?UTF-8?q?2=5Fjson=5Fencode=E3=82=92=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/JStyle.php | 17 +---------------- lib/global.funcs.php | 20 ++++++++++++++++++++ lib/sb_header.inc.php | 2 +- rep2/info_js.php | 25 ++----------------------- 4 files changed, 24 insertions(+), 40 deletions(-) diff --git a/lib/JStyle.php b/lib/JStyle.php index 77515a2cb..6c43699a4 100644 --- a/lib/JStyle.php +++ b/lib/JStyle.php @@ -30,21 +30,6 @@ static public function singleton() return self::$_instance; } - // }}} - // {{{ encode() - - /** - * �l��Shift_JIS��UTF-8�Ԋ҂��Ă���JSON�G���R�[�h���� - * - * @param mixed $value - * @return string - */ - static public function encode($value) - { - mb_convert_variables('UTF-8', 'SJIS-win', $value); - return json_encode($value); - } - // }}} // {{{ __construct() @@ -99,7 +84,7 @@ public function offsetGet($key) sscanf($this->_style[$key], '%u,%u', $width, $height); $this->_cache[$key] = sprintf('%u,%u', $width, $height); } else { - $this->_cache[$key] = self::encode($this->_style[$key]); + $this->_cache[$key] = p2_json_encode($this->_style[$key]); } } diff --git a/lib/global.funcs.php b/lib/global.funcs.php index 9179dd6f3..d745128e9 100644 --- a/lib/global.funcs.php +++ b/lib/global.funcs.php @@ -705,7 +705,27 @@ function p2_stream_eof($fp, &$timed_out = false) } // }}} +// {{{ p2_json_encode() +/** + * Shift_JIS�̒l��UTF-8�ɕϊ����Ă���JSON�G���R�[�h���� + * + * @param mixed $values + * @return string JSON + */ +function p2_json_encode($values) +{ + // mb_convert_variables�͖{���������z��ł̓����ۏ؂��Ă��Ȃ��̂� + // array_walk_recursive�ʼn񂷁B + // array_walk_recursive���������z��Ή����ĂȂ��͂������ǂƂ肠���������B�B�B + // https://bugs.php.net/bug.php?id=66964 + array_walk_recursive($values, function(&$value) { + mb_convert_variables('UTF-8', 'CP932', $value); + }); + return json_encode($values); +} + +// }}} /* * Local Variables: * mode: php diff --git a/lib/sb_header.inc.php b/lib/sb_header.inc.php index 61ba131f3..334eee3a9 100644 --- a/lib/sb_header.inc.php +++ b/lib/sb_header.inc.php @@ -65,7 +65,7 @@ } else { $ptitle_hd = p2h($aThreadList->ptitle); } -$ptitle_json = JStyle::encode($aThreadList->ptitle); +$ptitle_json = p2_json_encode($aThreadList->ptitle); if ($aThreadList->spmode == 'taborn') { $ptitle_ht = << Date: Sun, 18 Feb 2018 09:43:57 +0900 Subject: [PATCH 307/339] =?UTF-8?q?imgur=E3=82=A2=E3=83=83=E3=83=97?= =?UTF-8?q?=E3=83=AD=E3=83=BC=E3=83=89=E6=A9=9F=E8=83=BD=E3=81=AE=E5=88=9D?= =?UTF-8?q?=E6=9C=9F=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/upload.php | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/rep2/upload.php b/rep2/upload.php index faeff497f..9833b0fdb 100644 --- a/rep2/upload.php +++ b/rep2/upload.php @@ -86,6 +86,58 @@ public function upload($localPath, $filename) } } +// }}} +// {{{ P2ImgurUploader + +class P2ImgurUploader implements P2UploaderInterface +{ + /** + * @var string + */ + private $client_id; + + /** + * @param string $authJsonFile + * @param string $clientIdentifier + * @param string $prefix + */ + public function __construct($client_id) + { + $this->client_id = $client_id; + } + + /** + * @param string $localPath + * @param string $filename + * + * @return string URL + */ + public function upload($localPath, $filename) + { + $data = fread(fopen($localPath, "rb"), filesize($localPath)); + $imgur_api = 'https://api.imgur.com/3/image.json'; + + $req = P2Commun::createHTTPRequest ($imgur_api,HTTP_Request2::METHOD_POST); + + // �w�b�_ + $req->setHeader('Authorization', 'Client-ID ' . $this->client_id); + + // post������e + $req->addPostParameter('image', base64_encode($data)); + + $response = P2Commun::getHTTPResponse($req); + + if($response->getStatus() == 200) { + $result = json_decode($response->getBody()); + $image_url = $result->data->link; + $delete_url = 'https://imgur.com/delete/' .$result->data->deletehash; + return $image_url; + } + + return null; + } +} + // }}} // {{{ handle_uploaded_file() From 068413dd01f7ad48e3bc66dbdaccf750c86532d6 Mon Sep 17 00:00:00 2001 From: killer4989 Date: Fri, 22 Dec 2017 19:18:19 +0900 Subject: [PATCH 308/339] =?UTF-8?q?=EF=BD=A2Something=20went=20wrong?= =?UTF-8?q?=EF=BD=A3=E3=81=AE=E3=82=A8=E3=83=A9=E3=83=BC=E5=87=A6=E7=90=86?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index e985205ed..9d6b1007c 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -233,6 +233,11 @@ protected function _downloadDat2chAPI($uaMona, $SID2ch, $from_bytes) { $this->modified = $response->getHeader ('Last-Modified'); + // DAT �f�[�^����̏ꍇ + if(!$this->onbytes){ + return $this->_downloadDat2chNotFound ('404'); + } + // �s���ɕ��� $lines = explode("\n", $body ,3); @@ -656,10 +661,14 @@ public function get2chDatError($code = null) { $res_code = $response->getStatus (); $test403 = "/403\.dat/"; + $testsw2 = "/Something went wrong/"; + if ($res_code == '200' || $res_code == '206') { // Partial Content $read_response_html = $response->getBody (); } elseif ($res_code == '302' || preg_match ($test403, $response->getBody (), $test403)) { $read_response_html = $response->getBody (); + } elseif ($res_code == '500' || preg_match ($testsw2, $response->getBody (), $testsw2)) { + $read_response_html = $response->getBody (); } else { $url_t = P2Util::throughIme ($read_url); $info_msg_ht = "

    Error: {$code}
    "; @@ -692,6 +701,8 @@ public function get2chDatError($code = null) { $error3939_match = "{�Q�����˂� error 3939}"; // �ߋ����O�q�ɂ�html���̎��i���ɂ����邩���A�悭�m��Ȃ��j $error4002_match = "{�Q�����˂� error 4002}"; // �ߋ����O�q�ɂ�html���̎��i���ɂ����邩���A�悭�m��Ȃ��j + $sw2_match = "/Something went wrong/"; + $vip2ch_ssr_match = "/�����I�V�݂��ꂽSS����R�‚ɂăX���𔭌������ł���I/"; // @@ -713,6 +724,7 @@ public function get2chDatError($code = null) { preg_match ($naidesu_match, $read_response_html, $matches) || preg_match ($error3939_match, $read_response_html, $matches) || preg_match ($error4002_match, $read_response_html, $matches) || + preg_match ($sw2_match, $read_response_html, $matches) || preg_match ($vip2ch_kakosoko_match, $read_response_html, $matches) || preg_match ($vip2ch_ssr_match, $read_response_html, $matches) || preg_match ($soukoni_match, $read_response_html, $matches)) { @@ -734,6 +746,8 @@ public function get2chDatError($code = null) { $kakolog_url_en = rawurlencode ($kakolog_uri); $read_kako_url = "{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&kakolog={$kakolog_url_en}&kakoget=1"; $dat_response_msg = "

    2ch info - ����! �ߋ����O�q�ɂŁA�X���b�h {$this->key}.html �𔭌����܂����B [rep2�Ɏ�荞��œǂ�]

    "; + } elseif (preg_match ($sw2_match, $read_response_html, $matches)) { + $dat_response_msg = "

    2ch info - dat����ł����B[$read_response_html]

    "; } elseif (preg_match ($waithtml_match, $read_response_html, $matches)) { $dat_response_status = "����! �X���b�h��html�������̂�҂��Ă���悤�ł��B"; //$marutori_ht = $this->_generateMarutoriLink (); From 4ddf12bbdb7433726fd02f79f0a83f262d4e264f Mon Sep 17 00:00:00 2001 From: killer4989 Date: Fri, 22 Dec 2017 19:22:21 +0900 Subject: [PATCH 309/339] =?UTF-8?q?error=203001,=20error=203939=20?= =?UTF-8?q?=E3=81=AE=E3=82=A8=E3=83=A9=E3=83=BC=E5=87=A6=E7=90=86=E3=82=92?= =?UTF-8?q?=E4=B8=80=E5=BF=9C=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 9d6b1007c..47fb89ebd 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -698,6 +698,7 @@ public function get2chDatError($code = null) { // 0�����˂�X�N���v�g�ɔ�������悤�� $soukoni_match = "/�����I�ߋ����O�q�ɂ�<\/title>/"; + $error3001_match = "{<title>�Q�����˂� error 3001}"; // �ߋ����O�q�ɂ�html���̎��i���ɂ����邩���A�悭�m��Ȃ��j $error3939_match = "{�Q�����˂� error 3939}"; // �ߋ����O�q�ɂ�html���̎��i���ɂ����邩���A�悭�m��Ȃ��j $error4002_match = "{�Q�����˂� error 4002}"; // �ߋ����O�q�ɂ�html���̎��i���ɂ����邩���A�悭�m��Ȃ��j @@ -722,6 +723,7 @@ public function get2chDatError($code = null) { // ������Ȕ�or�X���b�h�Ȃ��ł��Bor error 3939 } elseif ($reason === 'kakohtml' or preg_match ($naidesu_match, $read_response_html, $matches) || + preg_match ($error3001_match, $read_response_html, $matches) || preg_match ($error3939_match, $read_response_html, $matches) || preg_match ($error4002_match, $read_response_html, $matches) || preg_match ($sw2_match, $read_response_html, $matches) || @@ -738,6 +740,22 @@ public function get2chDatError($code = null) { $kakolog_url_en = rawurlencode ($kakolog_uri); $read_kako_url = "{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&kakolog={$kakolog_url_en}&kakoget=1"; $dat_response_msg = "<p>2ch info - ����! �ߋ����O�q�ɂŁA<a href=\"{$kakolog_uri}.html\"{$_conf['bbs_win_target_at']}>�X���b�h {$matches[3]}.html</a> �𔭌����܂����B [<a href=\"{$read_kako_url}\">rep2�Ɏ�荞��œǂ�</a>]</p>"; + } elseif (preg_match ($error3001_match, $read_response_html, $matches)) { + $dat_response_status = "����! �ߋ����O�q�ɂŁAhtml�����ꂽ�X���b�h�𔭌����܂����B"; + $key4 = substr($this->key, 0, 4); + $key5 = substr($this->key, 0, 5); + $kakolog_uri = "http://{$this->host}/{$this->bbs}/kako/{$key4}/{$key5}/{$this->key}"; + $kakolog_url_en = rawurlencode ($kakolog_uri); + $read_kako_url = "{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&kakolog={$kakolog_url_en}&kakoget=1"; + $dat_response_msg = "<p>2ch info - ����! �ߋ����O�q�ɂŁA<a href=\"{$kakolog_uri}.html\"{$_conf['bbs_win_target_at']}>�X���b�h {$this->key}.html</a> �𔭌����܂����B [<a href=\"{$read_kako_url}\">rep2�Ɏ�荞��œǂ�</a>]</p>"; + } elseif (preg_match ($error3939_match, $read_response_html, $matches)) { + $dat_response_status = "����! �ߋ����O�q�ɂŁAhtml�����ꂽ�X���b�h�𔭌����܂����B"; + $key4 = substr($this->key, 0, 4); + $key5 = substr($this->key, 0, 5); + $kakolog_uri = "http://{$this->host}/{$this->bbs}/kako/{$key4}/{$key5}/{$this->key}"; + $kakolog_url_en = rawurlencode ($kakolog_uri); + $read_kako_url = "{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&kakolog={$kakolog_url_en}&kakoget=1"; + $dat_response_msg = "<p>2ch info - ����! �ߋ����O�q�ɂŁA<a href=\"{$kakolog_uri}.html\"{$_conf['bbs_win_target_at']}>�X���b�h {$this->key}.html</a> �𔭌����܂����B [<a href=\"{$read_kako_url}\">rep2�Ɏ�荞��œǂ�</a>]</p>"; } elseif (preg_match ($error4002_match, $read_response_html, $matches)) { $dat_response_status = "����! �ߋ����O�q�ɂŁAhtml�����ꂽ�X���b�h�𔭌����܂����B"; $key4 = substr($this->key, 0, 4); From 6e61fad0c959e146ca4236798f539be1f8dd4edd Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Mon, 25 Dec 2017 02:35:05 +0900 Subject: [PATCH 310/339] =?UTF-8?q?2ch.net=20=E3=81=A7=E3=82=82=E9=81=8E?= =?UTF-8?q?=E5=8E=BB=E3=83=AD=E3=82=B0=E5=80=89=E5=BA=AB=E3=82=92=E8=A6=8B?= =?UTF-8?q?=E3=81=AB=E8=A1=8C=E3=81=91=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 76 +++++++++++++++++++++++++++------------------- 1 file changed, 45 insertions(+), 31 deletions(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 47fb89ebd..6a963117a 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -650,37 +650,7 @@ public function get2chDatError($code = null) { $read_response_html = ''; if (! $reason) { - try { - $req = P2Commun::createHTTPRequest ($read_url.'1', HTTP_Request2::METHOD_GET); - // �w�b�_ - $req->setHeader ('User-Agent', P2Commun::getP2UA(false,P2HostMgr::isHost2chs($this->host))); // �����́A"Monazilla/" ���‚����NG - - // Request�̑��M - $response = P2Commun::getHTTPResponse($req); - - $res_code = $response->getStatus (); - - $test403 = "/403\.dat/"; - $testsw2 = "/Something went wrong/"; - - if ($res_code == '200' || $res_code == '206') { // Partial Content - $read_response_html = $response->getBody (); - } elseif ($res_code == '302' || preg_match ($test403, $response->getBody (), $test403)) { - $read_response_html = $response->getBody (); - } elseif ($res_code == '500' || preg_match ($testsw2, $response->getBody (), $testsw2)) { - $read_response_html = $response->getBody (); - } else { - $url_t = P2Util::throughIme ($read_url); - $info_msg_ht = "<p class=\"info-msg\">Error: {$code}<br>"; - $info_msg_ht .= "rep2 info: <a href=\"{$url_t}\"{$_conf['ext_win_target_at']}>{$read_url}</a> ��HTML���擾�o���܂���ł����B</p>"; - P2Util::pushInfoHtml ($info_msg_ht); - } - } catch (Exception $e) { - $this->getdat_error_msg_ht .= "<p>�T�[�o�ڑ��G���[: " . $e->getMessage (); - $this->getdat_error_msg_ht .= "<br>rep2 error: �ƒT�[�o�ւ̐ڑ��Ɏ��s���܂����B</p>"; - $this->diedat = true; - } - unset ($req, $response); + $read_response_html = self::getReadCGIHtml($read_url); } // }}} @@ -873,6 +843,50 @@ public function previewOne() { return $body; } + // }}} + // {{{ getReadCGIResponse() + /** + * read.cgi �̃��X�|���X���擾 + */ + public function getReadCGIHtml($read_url) { + global $_conf; + + $test403 = "/403\.dat/"; + $testsw2 = "/Something went wrong/"; + + try { + $req = P2Commun::createHTTPRequest ($read_url.'1', HTTP_Request2::METHOD_GET); + // �w�b�_ + $req->setHeader ('User-Agent', P2Commun::getP2UA(false,P2HostMgr::isHost2chs($this->host))); // �����́A"Monazilla/" ���‚����NG + + // Request�̑��M + $response = P2Commun::getHTTPResponse($req); + + $res_code = $response->getStatus (); + + if ($res_code == '200' || $res_code == '206') { // Partial Content + $read_response_html = $response->getBody (); + } elseif ($res_code == '301' && P2HostMgr::isHost2ch ($this->host)) { + $read_response_html = self::getReadCGIHtml($response->getHeader ("Location")); + } elseif ($res_code == '302' || preg_match ($test403, $response->getBody (), $test403)) { + $read_response_html = $response->getBody (); + } elseif ($res_code == '500' || preg_match ($testsw2, $response->getBody (), $testsw2)) { + $read_response_html = $response->getBody (); + } else { + $url_t = P2Util::throughIme ($read_url); + $info_msg_ht = "<p class=\"info-msg\">Error: {$code}<br>"; + $info_msg_ht .= "rep2 info: <a href=\"{$url_t}\"{$_conf['ext_win_target_at']}>{$read_url}</a> ��HTML���擾�o���܂���ł����B</p>"; + P2Util::pushInfoHtml ($info_msg_ht); + } + } catch (Exception $e) { + $this->getdat_error_msg_ht .= "<p>�T�[�o�ڑ��G���[: " . $e->getMessage (); + $this->getdat_error_msg_ht .= "<br>rep2 error: �ƒT�[�o�ւ̐ڑ��Ɏ��s���܂����B</p>"; + $this->diedat = true; + } + unset ($req, $response); + + return $read_response_html; + } // }}} // {{{ previewOneNotFound() From cbad845612599ccef522c13d4499f3813341a20d Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Sun, 18 Feb 2018 09:49:41 +0900 Subject: [PATCH 311/339] =?UTF-8?q?2ch=E3=81=AEAPI=E3=81=8C=E9=96=89?= =?UTF-8?q?=E9=8E=96=E3=81=95=E3=82=8C=E3=81=9F=E3=81=AE=E3=81=A7=E6=8E=A5?= =?UTF-8?q?=E7=B6=9A=E5=85=88=E3=82=925ch=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 6a963117a..95ba4e213 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -141,7 +141,7 @@ protected function _downloadDat2chAPI($uaMona, $SID2ch, $from_bytes) { $url= http_build_url(array( "scheme" => $_conf['2chapi_ssl.read']?"https":"http", - "host" => P2HostMgr::isHost5ch($this->host)?"api.5ch.net":"api.2ch.net", + "host" => "api.5ch.net", "path" => "v1/".$serverName[0] . '/' . $this->bbs . '/' . $this->key)); $message = '/v1/' . $serverName[0] . '/' . $this->bbs . '/' . $this->key . $SID2ch . $AppKey; From 45a2f413660a89a4f204a79480f4448241bfe1cd Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Sun, 18 Feb 2018 09:54:55 +0900 Subject: [PATCH 312/339] =?UTF-8?q?=E3=81=97=E3=81=9F=E3=82=89=E3=81=B0?= =?UTF-8?q?=E3=81=AESSL=E5=8C=96=E3=81=AB=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/read_shitaraba.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/read_shitaraba.inc.php b/lib/read_shitaraba.inc.php index b8d54a8e3..2630ce267 100644 --- a/lib/read_shitaraba.inc.php +++ b/lib/read_shitaraba.inc.php @@ -40,7 +40,7 @@ function shitarabaDownload(ThreadRead $aThread) // ������΂�livedoor�ړ]�ɑΉ��B�Ǎ����livedoor�Ƃ���B $host = P2HostMgr::adjustHostJbbs($aThread->host); list($host, $category, ) = explode('/', $host); - $machiurl = "http://{$host}/bbs/rawmode.cgi/{$category}/{$aThread->bbs}/{$aThread->key}/{$START}-"; + $machiurl = "https://{$host}/bbs/rawmode.cgi/{$category}/{$aThread->bbs}/{$aThread->key}/{$START}-"; } $tempfile = $aThread->keydat.'.dat.temp'; From d4826ba499dbb5525ea54a1d414f99fd0becde2b Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Sun, 18 Feb 2018 10:09:40 +0900 Subject: [PATCH 313/339] =?UTF-8?q?=E3=81=97=E3=81=9F=E3=82=89=E3=81=B0?= =?UTF-8?q?=E3=81=AESSL=E5=8C=96=E3=81=AB=E5=AF=BE=E5=BF=9C=E3=82=92?= =?UTF-8?q?=E7=84=A1=E3=81=8B=E3=81=A3=E3=81=9F=E3=81=93=E3=81=A8=E3=81=AB?= =?UTF-8?q?=E3=81=97=E3=81=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/read_shitaraba.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/read_shitaraba.inc.php b/lib/read_shitaraba.inc.php index 2630ce267..b8d54a8e3 100644 --- a/lib/read_shitaraba.inc.php +++ b/lib/read_shitaraba.inc.php @@ -40,7 +40,7 @@ function shitarabaDownload(ThreadRead $aThread) // ������΂�livedoor�ړ]�ɑΉ��B�Ǎ����livedoor�Ƃ���B $host = P2HostMgr::adjustHostJbbs($aThread->host); list($host, $category, ) = explode('/', $host); - $machiurl = "https://{$host}/bbs/rawmode.cgi/{$category}/{$aThread->bbs}/{$aThread->key}/{$START}-"; + $machiurl = "http://{$host}/bbs/rawmode.cgi/{$category}/{$aThread->bbs}/{$aThread->key}/{$START}-"; } $tempfile = $aThread->keydat.'.dat.temp'; From 00e9656dcb3387944e3a70688b62a34ef2176b51 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Sun, 18 Feb 2018 22:52:23 +0900 Subject: [PATCH 314/339] =?UTF-8?q?API=E3=81=AE=E3=83=AC=E3=82=B9=E3=83=9D?= =?UTF-8?q?=E3=83=B3=E3=82=B9=E3=83=98=E3=83=83=E3=83=80=E3=83=BC=E3=81=AB?= =?UTF-8?q?Content-Length=E3=81=8C=E4=BB=98=E3=81=8B=E3=81=AA=E3=81=84?= =?UTF-8?q?=E4=BA=8B=E3=81=8C=E3=81=82=E3=82=8B=E3=81=AE=E3=81=A7body?= =?UTF-8?q?=E3=81=AE=E3=82=B5=E3=82=A4=E3=82=BA=E3=81=A7=E4=BB=A3=E7=94=A8?= =?UTF-8?q?=E3=81=99=E3=82=8B=E6=A9=9F=E8=83=BD=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 95ba4e213..fa68c5d10 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -225,6 +225,10 @@ protected function _downloadDat2chAPI($uaMona, $SID2ch, $from_bytes) { $this->onbytes = strlen ($body); } elseif ($zero_read) { $this->onbytes = intval ($response->getHeader ('Content-Length')); + if(!$this->onbytes) { + // API�̃��X�|���X�w�b�_�[��Content-Length���t���Ȃ���������̂�body�̃T�C�Y�ő�p + $this->onbytes = strlen ($body); + } } else { if (preg_match ('@^bytes ([^/]+)/([0-9]+)@i', $response->getHeader ('Content-Range'), $matches)) { $this->onbytes = intval ($matches[2]); From 83311961a7e8eafec6d830183587001600f84255 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Tue, 20 Feb 2018 10:09:52 +0900 Subject: [PATCH 315/339] =?UTF-8?q?p2=5Fjson=5Fencode=E3=81=A7Warning?= =?UTF-8?q?=E3=81=8C=E5=87=BA=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/global.funcs.php | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/global.funcs.php b/lib/global.funcs.php index d745128e9..7940b0fa4 100644 --- a/lib/global.funcs.php +++ b/lib/global.funcs.php @@ -719,9 +719,14 @@ function p2_json_encode($values) // array_walk_recursive�ʼn񂷁B // array_walk_recursive���������z��Ή����ĂȂ��͂������ǂƂ肠���������B�B�B // https://bugs.php.net/bug.php?id=66964 - array_walk_recursive($values, function(&$value) { - mb_convert_variables('UTF-8', 'CP932', $value); - }); + if(is_array($values)){ + array_walk_recursive($values, function(&$value) { + mb_convert_variables('UTF-8', 'CP932', $value); + }); + } else { + mb_convert_variables('UTF-8', 'CP932', $values); + } + return json_encode($values); } From 370316c5e774db99295dbcfecd2f8398204e4254 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Fri, 23 Feb 2018 10:11:13 +0900 Subject: [PATCH 316/339] =?UTF-8?q?SyntaxError:=20JSON=20Parse=20error:=20?= =?UTF-8?q?Unexoectdd=20EOF=20=E7=97=85=E3=81=8C=E5=86=8D=E7=99=BA?= =?UTF-8?q?=E3=81=97=E3=81=9F=E3=81=AE=E3=81=A7=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/global.funcs.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/global.funcs.php b/lib/global.funcs.php index 7940b0fa4..54dbc0eb5 100644 --- a/lib/global.funcs.php +++ b/lib/global.funcs.php @@ -719,7 +719,7 @@ function p2_json_encode($values) // array_walk_recursive�ʼn񂷁B // array_walk_recursive���������z��Ή����ĂȂ��͂������ǂƂ肠���������B�B�B // https://bugs.php.net/bug.php?id=66964 - if(is_array($values)){ + if(is_array($values) || is_object($values)){ array_walk_recursive($values, function(&$value) { mb_convert_variables('UTF-8', 'CP932', $value); }); From d9fe8630e65117fc0b9338a82b5b444a3f095fa3 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Wed, 28 Mar 2018 10:31:25 +0900 Subject: [PATCH 317/339] =?UTF-8?q?IE11=E3=81=A7IE6=E5=90=91=E3=81=91?= =?UTF-8?q?=E3=81=AE=E3=82=B3=E3=83=BC=E3=83=89=E3=81=8C=E5=AE=9F=E8=A1=8C?= =?UTF-8?q?=E3=81=95=E3=82=8C=E3=81=A6=E4=B8=8B=E6=9B=B8=E3=81=8D=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E3=81=8C=E6=A9=9F=E8=83=BD=E3=81=97=E3=81=AA=E3=81=84?= =?UTF-8?q?=E4=B8=8D=E5=85=B7=E5=90=88=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=81=9F=E3=82=81=E3=81=AB=E3=80=81XMLHttpRequest?= =?UTF-8?q?=E3=81=8C=E5=AE=9F=E8=A3=85=E3=81=95=E3=82=8C=E3=81=A6=E3=81=84?= =?UTF-8?q?=E3=81=AA=E3=81=84=E3=83=96=E3=83=A9=E3=82=A6=E3=82=B6(IE6?= =?UTF-8?q?=E7=AD=89)=E3=81=AB=E5=AF=BE=E3=81=99=E3=82=8B=E9=85=8D?= =?UTF-8?q?=E6=85=AE=E3=82=92=E7=B5=82=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/js/basic.js | 19 ------------------- rep2/js/delelog.js | 2 +- rep2/js/dpreview.js | 4 ++-- rep2/js/fitimage.js | 2 +- rep2/js/ic2_getcount.js | 2 +- rep2/js/ic2_getinfo.js | 2 +- rep2/js/ic2_switch.js | 2 +- rep2/js/invite.js | 2 +- rep2/js/iv2.js | 2 +- rep2/js/lightbox/lightbox_ic2ext.js | 2 +- rep2/js/menu.js | 4 ++-- rep2/js/post_draft.js | 2 +- rep2/js/setfavjs.js | 2 +- rep2/js/settabornjs.js | 2 +- rep2/js/smartpopup.js | 2 +- rep2/js/tgrepctl.js | 2 +- 16 files changed, 17 insertions(+), 36 deletions(-) diff --git a/rep2/js/basic.js b/rep2/js/basic.js index 214b9fdae..5e877b63d 100644 --- a/rep2/js/basic.js +++ b/rep2/js/basic.js @@ -34,25 +34,6 @@ var setWinTitle = rep2.util.setWindowTitle; // DOM�I�u�W�F�N�g���擾 var p2GetElementById = document.getElementById; -// XMLHttpRequest �I�u�W�F�N�g���擾 -function getXmlHttp() -{ - var objHTTP = null ; - try { - objHTTP = new ActiveXObject("Msxml2.XMLHTTP") ; // Mozilla�p - } catch (e) { - try { - objHTTP = new ActiveXObject("Microsoft.XMLHTTP") ; // IE�p - } catch (oc) { - objHTTP = null ; - } - } - if (!objHTTP && typeof XMLHttpRequest != "undefined") { - objHTTP = new XMLHttpRequest(); // �� - } - return objHTTP -} - /** * objHTTP ��url��n���āA���ʃe�L�X�g���擾���� * diff --git a/rep2/js/delelog.js b/rep2/js/delelog.js index 019835f49..548246340 100644 --- a/rep2/js/delelog.js +++ b/rep2/js/delelog.js @@ -9,7 +9,7 @@ function deleLog(tquery, info_pop_width, info_pop_height, page, obj) return false; } - var objHTTP = getXmlHttp(); + var objHTTP = new XMLHttpRequest(); if (!objHTTP) { // alert("Error: XMLHTTP �ʐM�I�u�W�F�N�g�̍쐬�Ɏ��s���܂����B") ; diff --git a/rep2/js/dpreview.js b/rep2/js/dpreview.js index 559e621d9..723ddac10 100644 --- a/rep2/js/dpreview.js +++ b/rep2/js/dpreview.js @@ -217,7 +217,7 @@ function DPSetTrip(tk) if (!dpreview_on) { return; } - var objHTTP = getXmlHttp(); + var objHTTP = new XMLHttpRequest(); if (!objHTTP) { DPReplaceInnerText('dp_trip', '��XMLHTTP Disabled.'); return; @@ -236,7 +236,7 @@ function DPSetTrip(tk) // XMLHttpRequest��p���ăg���b�v���擾���� function DPGetTrip(tk) { - var objHTTP = getXmlHttp(); + var objHTTP = new XMLHttpRequest(); if (!objHTTP) { return '��XMLHTTP Disabled.'; } diff --git a/rep2/js/fitimage.js b/rep2/js/fitimage.js index fa2da02e2..ef00fdb48 100644 --- a/rep2/js/fitimage.js +++ b/rep2/js/fitimage.js @@ -189,7 +189,7 @@ function fiUpdateRank(rank) return false; } - var objHTTP = getXmlHttp(); + var objHTTP = new XMLHttpRequest(); if (!objHTTP) { alert('Error: XMLHTTP �ʐM�I�u�W�F�N�g�̍쐬�Ɏ��s���܂����B') ; return false; diff --git a/rep2/js/ic2_getcount.js b/rep2/js/ic2_getcount.js index 82b606890..ab8e642da 100644 --- a/rep2/js/ic2_getcount.js +++ b/rep2/js/ic2_getcount.js @@ -11,7 +11,7 @@ function ic2_setcount(key, elem) var ic2_getcount = function (key) { var url, req, res, err; - req = getXmlHttp(); + req = new XMLHttpRequest(); if (!req) { return null; } diff --git a/rep2/js/ic2_getinfo.js b/rep2/js/ic2_getinfo.js index 58e704eaf..a1bef2527 100644 --- a/rep2/js/ic2_getinfo.js +++ b/rep2/js/ic2_getinfo.js @@ -16,7 +16,7 @@ function ic2_getinfo(type, value, thumb) { var url, req, res, err; - req = getXmlHttp(); + req = new XMLHttpRequest(); if (!req) { return null; } diff --git a/rep2/js/ic2_switch.js b/rep2/js/ic2_switch.js index b68330303..c4ead11ba 100644 --- a/rep2/js/ic2_switch.js +++ b/rep2/js/ic2_switch.js @@ -13,7 +13,7 @@ */ function ic2_switch(onoff, mobile) { - var objHTTP = getXmlHttp(); + var objHTTP = new XMLHttpRequest(); if (!objHTTP) { alert('Error: XMLHTTP �ʐM�I�u�W�F�N�g�̍쐬�Ɏ��s���܂����B'); } diff --git a/rep2/js/invite.js b/rep2/js/invite.js index 1f032c9fe..91ada6625 100644 --- a/rep2/js/invite.js +++ b/rep2/js/invite.js @@ -16,7 +16,7 @@ function Invite(title, url, host, bbs, key, resnum) winHeight = 280; taRows = 15; var uri = 'read_async.php?host='+host+'&bbs='+bbs+'&key='+key+'&ls='+resnum+'n&q=2&offline=1'; - var req = getXmlHttp(); + var req = new XMLHttpRequest(); req.open('get', uri, false); req.withCredentials = true; req.send(null); diff --git a/rep2/js/iv2.js b/rep2/js/iv2.js index c7ec1ed11..ce9f9c949 100644 --- a/rep2/js/iv2.js +++ b/rep2/js/iv2.js @@ -163,7 +163,7 @@ function getRank(itemId) function setRank(itemId, rank) { - var objHTTP = getXmlHttp(); + var objHTTP = new XMLHttpRequest(); if (!objHTTP) { alert("Error: XMLHTTP �ʐM�I�u�W�F�N�g�̍쐬�Ɏ��s���܂����B") ; } diff --git a/rep2/js/lightbox/lightbox_ic2ext.js b/rep2/js/lightbox/lightbox_ic2ext.js index d4d7f9348..ae87a44f9 100644 --- a/rep2/js/lightbox/lightbox_ic2ext.js +++ b/rep2/js/lightbox/lightbox_ic2ext.js @@ -126,7 +126,7 @@ LightBox.prototype._ic2_set_rank = function (rank) { return; } - var objHTTP = getXmlHttp(); + var objHTTP = new XMLHttpRequest(); if (!objHTTP) { alert("Error: XMLHTTP �ʐM�I�u�W�F�N�g�̍쐬�Ɏ��s���܂����B") ; } diff --git a/rep2/js/menu.js b/rep2/js/menu.js index efd1969b0..a5bdc49d9 100644 --- a/rep2/js/menu.js +++ b/rep2/js/menu.js @@ -42,7 +42,7 @@ function replaceMenuItem(itemId, qKey, qValue) { var uri = 'menu_async.php?' + qKey + '=' + qValue; - var req = getXmlHttp(); + var req = new XMLHttpRequest(); if (!req) { alert('XMLHttp not available.'); return; @@ -87,7 +87,7 @@ function openFavList(subject_php, set_num, tgt) function changeSkin(skinName) { var uri = 'menu_async.php?m_skin_set=' + skinName; - var req = getXmlHttp(); + var req = new XMLHttpRequest(); var res; if (!req) { diff --git a/rep2/js/post_draft.js b/rep2/js/post_draft.js index a0692a7ac..018ef083d 100644 --- a/rep2/js/post_draft.js +++ b/rep2/js/post_draft.js @@ -33,7 +33,7 @@ var saveDraftForm = function(form) { }; var post_draft = function(host, bbs, key, csrfid, data, fin, err) { - var req = (typeof getXmlHttp === 'undefined') ? new XMLHttpRequest() : getXmlHttp(); + var req = new XMLHttpRequest(); if (!req) return; req.open('POST', 'post_draft.php', true); diff --git a/rep2/js/setfavjs.js b/rep2/js/setfavjs.js index d53c518ef..cc8b59feb 100644 --- a/rep2/js/setfavjs.js +++ b/rep2/js/setfavjs.js @@ -15,7 +15,7 @@ function setFavJs(tquery, favdo, info_pop_width, info_pop_height, page, obj) setnum = '-1'; } - var objHTTP = getXmlHttp(); + var objHTTP = new XMLHttpRequest(); if (!objHTTP) { // alert("Error: XMLHTTP �ʐM�I�u�W�F�N�g�̍쐬�Ɏ��s���܂����B") ; // XMLHTTP�i��innerHTML�j �ɖ��Ή��Ȃ珬���� diff --git a/rep2/js/settabornjs.js b/rep2/js/settabornjs.js index 60d877338..7944cad14 100644 --- a/rep2/js/settabornjs.js +++ b/rep2/js/settabornjs.js @@ -9,7 +9,7 @@ function setTAbornJs(tquery, tabdo, info_pop_width, info_pop_height, page, obj) return false; } - var objHTTP = getXmlHttp(); + var objHTTP = new XMLHttpRequest(); if (!objHTTP) { // alert("Error: XMLHTTP �ʐM�I�u�W�F�N�g�̍쐬�Ɏ��s���܂����B") ; // XMLHTTP�i��innerHTML�j �ɖ��Ή��Ȃ珬���� diff --git a/rep2/js/smartpopup.js b/rep2/js/smartpopup.js index b8df91465..3e96f0c59 100644 --- a/rep2/js/smartpopup.js +++ b/rep2/js/smartpopup.js @@ -451,7 +451,7 @@ SPM.httpcmd = function (cmd, aThread, callback) { var num = spmResNum; var url = 'httpcmd.php?host=' + aThread.host + '&bbs=' + aThread.bbs + '&key=' + aThread.key + '&cmd=' + cmd + '&' + cmd + '=' + num; - var result = getResponseTextHttp(getXmlHttp(), url, true); + var result = getResponseTextHttp(new XMLHttpRequest(), url, true); if (typeof callback === 'function') { callback(result, cmd, aThread, num, url); } diff --git a/rep2/js/tgrepctl.js b/rep2/js/tgrepctl.js index 15e724378..93bef20fd 100644 --- a/rep2/js/tgrepctl.js +++ b/rep2/js/tgrepctl.js @@ -13,7 +13,7 @@ var tGrep = {}; * XmlHttpRequest�����s */ tGrep.execRequest = function (uri, menuId) { - var req = getXmlHttp(); + var req = new XMLHttpRequest(); if (!req) { alert('XMLHttp not available.'); return false; From ab8ac9460d6940f7c17f508d94d606dd69e58439 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Wed, 28 Mar 2018 10:42:23 +0900 Subject: [PATCH 318/339] =?UTF-8?q?=E6=9C=AA=E4=BD=BF=E7=94=A8=E3=81=AEjqu?= =?UTF-8?q?ery-1.8.3.min.js=E3=82=92=E5=89=8A=E9=99=A4=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/js/jquery-1.8.3.min.js | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 rep2/js/jquery-1.8.3.min.js diff --git a/rep2/js/jquery-1.8.3.min.js b/rep2/js/jquery-1.8.3.min.js deleted file mode 100644 index 83589daa7..000000000 --- a/rep2/js/jquery-1.8.3.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v1.8.3 jquery.com | jquery.org/license */ -(function(e,t){function _(e){var t=M[e]={};return v.each(e.split(y),function(e,n){t[n]=!0}),t}function H(e,n,r){if(r===t&&e.nodeType===1){var i="data-"+n.replace(P,"-$1").toLowerCase();r=e.getAttribute(i);if(typeof r=="string"){try{r=r==="true"?!0:r==="false"?!1:r==="null"?null:+r+""===r?+r:D.test(r)?v.parseJSON(r):r}catch(s){}v.data(e,n,r)}else r=t}return r}function B(e){var t;for(t in e){if(t==="data"&&v.isEmptyObject(e[t]))continue;if(t!=="toJSON")return!1}return!0}function et(){return!1}function tt(){return!0}function ut(e){return!e||!e.parentNode||e.parentNode.nodeType===11}function at(e,t){do e=e[t];while(e&&e.nodeType!==1);return e}function ft(e,t,n){t=t||0;if(v.isFunction(t))return v.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return v.grep(e,function(e,r){return e===t===n});if(typeof t=="string"){var r=v.grep(e,function(e){return e.nodeType===1});if(it.test(t))return v.filter(t,r,!n);t=v.filter(t,r)}return v.grep(e,function(e,r){return v.inArray(e,t)>=0===n})}function lt(e){var t=ct.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function At(e,t){if(t.nodeType!==1||!v.hasData(e))return;var n,r,i,s=v._data(e),o=v._data(t,s),u=s.events;if(u){delete o.handle,o.events={};for(n in u)for(r=0,i=u[n].length;r<i;r++)v.event.add(t,n,u[n][r])}o.data&&(o.data=v.extend({},o.data))}function Ot(e,t){var n;if(t.nodeType!==1)return;t.clearAttributes&&t.clearAttributes(),t.mergeAttributes&&t.mergeAttributes(e),n=t.nodeName.toLowerCase(),n==="object"?(t.parentNode&&(t.outerHTML=e.outerHTML),v.support.html5Clone&&e.innerHTML&&!v.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):n==="input"&&Et.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):n==="option"?t.selected=e.defaultSelected:n==="input"||n==="textarea"?t.defaultValue=e.defaultValue:n==="script"&&t.text!==e.text&&(t.text=e.text),t.removeAttribute(v.expando)}function Mt(e){return typeof e.getElementsByTagName!="undefined"?e.getElementsByTagName("*"):typeof e.querySelectorAll!="undefined"?e.querySelectorAll("*"):[]}function _t(e){Et.test(e.type)&&(e.defaultChecked=e.checked)}function Qt(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Jt.length;while(i--){t=Jt[i]+n;if(t in e)return t}return r}function Gt(e,t){return e=t||e,v.css(e,"display")==="none"||!v.contains(e.ownerDocument,e)}function Yt(e,t){var n,r,i=[],s=0,o=e.length;for(;s<o;s++){n=e[s];if(!n.style)continue;i[s]=v._data(n,"olddisplay"),t?(!i[s]&&n.style.display==="none"&&(n.style.display=""),n.style.display===""&&Gt(n)&&(i[s]=v._data(n,"olddisplay",nn(n.nodeName)))):(r=Dt(n,"display"),!i[s]&&r!=="none"&&v._data(n,"olddisplay",r))}for(s=0;s<o;s++){n=e[s];if(!n.style)continue;if(!t||n.style.display==="none"||n.style.display==="")n.style.display=t?i[s]||"":"none"}return e}function Zt(e,t,n){var r=Rt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function en(e,t,n,r){var i=n===(r?"border":"content")?4:t==="width"?1:0,s=0;for(;i<4;i+=2)n==="margin"&&(s+=v.css(e,n+$t[i],!0)),r?(n==="content"&&(s-=parseFloat(Dt(e,"padding"+$t[i]))||0),n!=="margin"&&(s-=parseFloat(Dt(e,"border"+$t[i]+"Width"))||0)):(s+=parseFloat(Dt(e,"padding"+$t[i]))||0,n!=="padding"&&(s+=parseFloat(Dt(e,"border"+$t[i]+"Width"))||0));return s}function tn(e,t,n){var r=t==="width"?e.offsetWidth:e.offsetHeight,i=!0,s=v.support.boxSizing&&v.css(e,"boxSizing")==="border-box";if(r<=0||r==null){r=Dt(e,t);if(r<0||r==null)r=e.style[t];if(Ut.test(r))return r;i=s&&(v.support.boxSizingReliable||r===e.style[t]),r=parseFloat(r)||0}return r+en(e,t,n||(s?"border":"content"),i)+"px"}function nn(e){if(Wt[e])return Wt[e];var t=v("<"+e+">").appendTo(i.body),n=t.css("display");t.remove();if(n==="none"||n===""){Pt=i.body.appendChild(Pt||v.extend(i.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!Ht||!Pt.createElement)Ht=(Pt.contentWindow||Pt.contentDocument).document,Ht.write("<!doctype html><html><body>"),Ht.close();t=Ht.body.appendChild(Ht.createElement(e)),n=Dt(t,"display"),i.body.removeChild(Pt)}return Wt[e]=n,n}function fn(e,t,n,r){var i;if(v.isArray(t))v.each(t,function(t,i){n||sn.test(e)?r(e,i):fn(e+"["+(typeof i=="object"?t:"")+"]",i,n,r)});else if(!n&&v.type(t)==="object")for(i in t)fn(e+"["+i+"]",t[i],n,r);else r(e,t)}function Cn(e){return function(t,n){typeof t!="string"&&(n=t,t="*");var r,i,s,o=t.toLowerCase().split(y),u=0,a=o.length;if(v.isFunction(n))for(;u<a;u++)r=o[u],s=/^\+/.test(r),s&&(r=r.substr(1)||"*"),i=e[r]=e[r]||[],i[s?"unshift":"push"](n)}}function kn(e,n,r,i,s,o){s=s||n.dataTypes[0],o=o||{},o[s]=!0;var u,a=e[s],f=0,l=a?a.length:0,c=e===Sn;for(;f<l&&(c||!u);f++)u=a[f](n,r,i),typeof u=="string"&&(!c||o[u]?u=t:(n.dataTypes.unshift(u),u=kn(e,n,r,i,u,o)));return(c||!u)&&!o["*"]&&(u=kn(e,n,r,i,"*",o)),u}function Ln(e,n){var r,i,s=v.ajaxSettings.flatOptions||{};for(r in n)n[r]!==t&&((s[r]?e:i||(i={}))[r]=n[r]);i&&v.extend(!0,e,i)}function An(e,n,r){var i,s,o,u,a=e.contents,f=e.dataTypes,l=e.responseFields;for(s in l)s in r&&(n[l[s]]=r[s]);while(f[0]==="*")f.shift(),i===t&&(i=e.mimeType||n.getResponseHeader("content-type"));if(i)for(s in a)if(a[s]&&a[s].test(i)){f.unshift(s);break}if(f[0]in r)o=f[0];else{for(s in r){if(!f[0]||e.converters[s+" "+f[0]]){o=s;break}u||(u=s)}o=o||u}if(o)return o!==f[0]&&f.unshift(o),r[o]}function On(e,t){var n,r,i,s,o=e.dataTypes.slice(),u=o[0],a={},f=0;e.dataFilter&&(t=e.dataFilter(t,e.dataType));if(o[1])for(n in e.converters)a[n.toLowerCase()]=e.converters[n];for(;i=o[++f];)if(i!=="*"){if(u!=="*"&&u!==i){n=a[u+" "+i]||a["* "+i];if(!n)for(r in a){s=r.split(" ");if(s[1]===i){n=a[u+" "+s[0]]||a["* "+s[0]];if(n){n===!0?n=a[r]:a[r]!==!0&&(i=s[0],o.splice(f--,0,i));break}}}if(n!==!0)if(n&&e["throws"])t=n(t);else try{t=n(t)}catch(l){return{state:"parsererror",error:n?l:"No conversion from "+u+" to "+i}}}u=i}return{state:"success",data:t}}function Fn(){try{return new e.XMLHttpRequest}catch(t){}}function In(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}function $n(){return setTimeout(function(){qn=t},0),qn=v.now()}function Jn(e,t){v.each(t,function(t,n){var r=(Vn[t]||[]).concat(Vn["*"]),i=0,s=r.length;for(;i<s;i++)if(r[i].call(e,t,n))return})}function Kn(e,t,n){var r,i=0,s=0,o=Xn.length,u=v.Deferred().always(function(){delete a.elem}),a=function(){var t=qn||$n(),n=Math.max(0,f.startTime+f.duration-t),r=n/f.duration||0,i=1-r,s=0,o=f.tweens.length;for(;s<o;s++)f.tweens[s].run(i);return u.notifyWith(e,[f,i,n]),i<1&&o?n:(u.resolveWith(e,[f]),!1)},f=u.promise({elem:e,props:v.extend({},t),opts:v.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:qn||$n(),duration:n.duration,tweens:[],createTween:function(t,n,r){var i=v.Tween(e,f.opts,t,n,f.opts.specialEasing[t]||f.opts.easing);return f.tweens.push(i),i},stop:function(t){var n=0,r=t?f.tweens.length:0;for(;n<r;n++)f.tweens[n].run(1);return t?u.resolveWith(e,[f,t]):u.rejectWith(e,[f,t]),this}}),l=f.props;Qn(l,f.opts.specialEasing);for(;i<o;i++){r=Xn[i].call(f,e,l,f.opts);if(r)return r}return Jn(f,l),v.isFunction(f.opts.start)&&f.opts.start.call(e,f),v.fx.timer(v.extend(a,{anim:f,queue:f.opts.queue,elem:e})),f.progress(f.opts.progress).done(f.opts.done,f.opts.complete).fail(f.opts.fail).always(f.opts.always)}function Qn(e,t){var n,r,i,s,o;for(n in e){r=v.camelCase(n),i=t[r],s=e[n],v.isArray(s)&&(i=s[1],s=e[n]=s[0]),n!==r&&(e[r]=s,delete e[n]),o=v.cssHooks[r];if(o&&"expand"in o){s=o.expand(s),delete e[r];for(n in s)n in e||(e[n]=s[n],t[n]=i)}else t[r]=i}}function Gn(e,t,n){var r,i,s,o,u,a,f,l,c,h=this,p=e.style,d={},m=[],g=e.nodeType&&Gt(e);n.queue||(l=v._queueHooks(e,"fx"),l.unqueued==null&&(l.unqueued=0,c=l.empty.fire,l.empty.fire=function(){l.unqueued||c()}),l.unqueued++,h.always(function(){h.always(function(){l.unqueued--,v.queue(e,"fx").length||l.empty.fire()})})),e.nodeType===1&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],v.css(e,"display")==="inline"&&v.css(e,"float")==="none"&&(!v.support.inlineBlockNeedsLayout||nn(e.nodeName)==="inline"?p.display="inline-block":p.zoom=1)),n.overflow&&(p.overflow="hidden",v.support.shrinkWrapBlocks||h.done(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t){s=t[r];if(Un.exec(s)){delete t[r],a=a||s==="toggle";if(s===(g?"hide":"show"))continue;m.push(r)}}o=m.length;if(o){u=v._data(e,"fxshow")||v._data(e,"fxshow",{}),"hidden"in u&&(g=u.hidden),a&&(u.hidden=!g),g?v(e).show():h.done(function(){v(e).hide()}),h.done(function(){var t;v.removeData(e,"fxshow",!0);for(t in d)v.style(e,t,d[t])});for(r=0;r<o;r++)i=m[r],f=h.createTween(i,g?u[i]:0),d[i]=u[i]||v.style(e,i),i in u||(u[i]=f.start,g&&(f.end=f.start,f.start=i==="width"||i==="height"?1:0))}}function Yn(e,t,n,r,i){return new Yn.prototype.init(e,t,n,r,i)}function Zn(e,t){var n,r={height:e},i=0;t=t?1:0;for(;i<4;i+=2-t)n=$t[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}function tr(e){return v.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:!1}var n,r,i=e.document,s=e.location,o=e.navigator,u=e.jQuery,a=e.$,f=Array.prototype.push,l=Array.prototype.slice,c=Array.prototype.indexOf,h=Object.prototype.toString,p=Object.prototype.hasOwnProperty,d=String.prototype.trim,v=function(e,t){return new v.fn.init(e,t,n)},m=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,g=/\S/,y=/\s+/,b=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,w=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,E=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,S=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,T=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,N=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,C=/^-ms-/,k=/-([\da-z])/gi,L=function(e,t){return(t+"").toUpperCase()},A=function(){i.addEventListener?(i.removeEventListener("DOMContentLoaded",A,!1),v.ready()):i.readyState==="complete"&&(i.detachEvent("onreadystatechange",A),v.ready())},O={};v.fn=v.prototype={constructor:v,init:function(e,n,r){var s,o,u,a;if(!e)return this;if(e.nodeType)return this.context=this[0]=e,this.length=1,this;if(typeof e=="string"){e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3?s=[null,e,null]:s=w.exec(e);if(s&&(s[1]||!n)){if(s[1])return n=n instanceof v?n[0]:n,a=n&&n.nodeType?n.ownerDocument||n:i,e=v.parseHTML(s[1],a,!0),E.test(s[1])&&v.isPlainObject(n)&&this.attr.call(e,n,!0),v.merge(this,e);o=i.getElementById(s[2]);if(o&&o.parentNode){if(o.id!==s[2])return r.find(e);this.length=1,this[0]=o}return this.context=i,this.selector=e,this}return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e)}return v.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),v.makeArray(e,this))},selector:"",jquery:"1.8.3",length:0,size:function(){return this.length},toArray:function(){return l.call(this)},get:function(e){return e==null?this.toArray():e<0?this[this.length+e]:this[e]},pushStack:function(e,t,n){var r=v.merge(this.constructor(),e);return r.prevObject=this,r.context=this.context,t==="find"?r.selector=this.selector+(this.selector?" ":"")+n:t&&(r.selector=this.selector+"."+t+"("+n+")"),r},each:function(e,t){return v.each(this,e,t)},ready:function(e){return v.ready.promise().done(e),this},eq:function(e){return e=+e,e===-1?this.slice(e):this.slice(e,e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(l.apply(this,arguments),"slice",l.call(arguments).join(","))},map:function(e){return this.pushStack(v.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:[].sort,splice:[].splice},v.fn.init.prototype=v.fn,v.extend=v.fn.extend=function(){var e,n,r,i,s,o,u=arguments[0]||{},a=1,f=arguments.length,l=!1;typeof u=="boolean"&&(l=u,u=arguments[1]||{},a=2),typeof u!="object"&&!v.isFunction(u)&&(u={}),f===a&&(u=this,--a);for(;a<f;a++)if((e=arguments[a])!=null)for(n in e){r=u[n],i=e[n];if(u===i)continue;l&&i&&(v.isPlainObject(i)||(s=v.isArray(i)))?(s?(s=!1,o=r&&v.isArray(r)?r:[]):o=r&&v.isPlainObject(r)?r:{},u[n]=v.extend(l,o,i)):i!==t&&(u[n]=i)}return u},v.extend({noConflict:function(t){return e.$===v&&(e.$=a),t&&e.jQuery===v&&(e.jQuery=u),v},isReady:!1,readyWait:1,holdReady:function(e){e?v.readyWait++:v.ready(!0)},ready:function(e){if(e===!0?--v.readyWait:v.isReady)return;if(!i.body)return setTimeout(v.ready,1);v.isReady=!0;if(e!==!0&&--v.readyWait>0)return;r.resolveWith(i,[v]),v.fn.trigger&&v(i).trigger("ready").off("ready")},isFunction:function(e){return v.type(e)==="function"},isArray:Array.isArray||function(e){return v.type(e)==="array"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return e==null?String(e):O[h.call(e)]||"object"},isPlainObject:function(e){if(!e||v.type(e)!=="object"||e.nodeType||v.isWindow(e))return!1;try{if(e.constructor&&!p.call(e,"constructor")&&!p.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||p.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw new Error(e)},parseHTML:function(e,t,n){var r;return!e||typeof e!="string"?null:(typeof t=="boolean"&&(n=t,t=0),t=t||i,(r=E.exec(e))?[t.createElement(r[1])]:(r=v.buildFragment([e],t,n?null:[]),v.merge([],(r.cacheable?v.clone(r.fragment):r.fragment).childNodes)))},parseJSON:function(t){if(!t||typeof t!="string")return null;t=v.trim(t);if(e.JSON&&e.JSON.parse)return e.JSON.parse(t);if(S.test(t.replace(T,"@").replace(N,"]").replace(x,"")))return(new Function("return "+t))();v.error("Invalid JSON: "+t)},parseXML:function(n){var r,i;if(!n||typeof n!="string")return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(s){r=t}return(!r||!r.documentElement||r.getElementsByTagName("parsererror").length)&&v.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&g.test(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(C,"ms-").replace(k,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,n,r){var i,s=0,o=e.length,u=o===t||v.isFunction(e);if(r){if(u){for(i in e)if(n.apply(e[i],r)===!1)break}else for(;s<o;)if(n.apply(e[s++],r)===!1)break}else if(u){for(i in e)if(n.call(e[i],i,e[i])===!1)break}else for(;s<o;)if(n.call(e[s],s,e[s++])===!1)break;return e},trim:d&&!d.call("\ufeff\u00a0")?function(e){return e==null?"":d.call(e)}:function(e){return e==null?"":(e+"").replace(b,"")},makeArray:function(e,t){var n,r=t||[];return e!=null&&(n=v.type(e),e.length==null||n==="string"||n==="function"||n==="regexp"||v.isWindow(e)?f.call(r,e):v.merge(r,e)),r},inArray:function(e,t,n){var r;if(t){if(c)return c.call(t,e,n);r=t.length,n=n?n<0?Math.max(0,r+n):n:0;for(;n<r;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,s=0;if(typeof r=="number")for(;s<r;s++)e[i++]=n[s];else while(n[s]!==t)e[i++]=n[s++];return e.length=i,e},grep:function(e,t,n){var r,i=[],s=0,o=e.length;n=!!n;for(;s<o;s++)r=!!t(e[s],s),n!==r&&i.push(e[s]);return i},map:function(e,n,r){var i,s,o=[],u=0,a=e.length,f=e instanceof v||a!==t&&typeof a=="number"&&(a>0&&e[0]&&e[a-1]||a===0||v.isArray(e));if(f)for(;u<a;u++)i=n(e[u],u,r),i!=null&&(o[o.length]=i);else for(s in e)i=n(e[s],s,r),i!=null&&(o[o.length]=i);return o.concat.apply([],o)},guid:1,proxy:function(e,n){var r,i,s;return typeof n=="string"&&(r=e[n],n=e,e=r),v.isFunction(e)?(i=l.call(arguments,2),s=function(){return e.apply(n,i.concat(l.call(arguments)))},s.guid=e.guid=e.guid||v.guid++,s):t},access:function(e,n,r,i,s,o,u){var a,f=r==null,l=0,c=e.length;if(r&&typeof r=="object"){for(l in r)v.access(e,n,l,r[l],1,o,i);s=1}else if(i!==t){a=u===t&&v.isFunction(i),f&&(a?(a=n,n=function(e,t,n){return a.call(v(e),n)}):(n.call(e,i),n=null));if(n)for(;l<c;l++)n(e[l],r,a?i.call(e[l],l,n(e[l],r)):i,u);s=1}return s?e:f?n.call(e):c?n(e[0],r):o},now:function(){return(new Date).getTime()}}),v.ready.promise=function(t){if(!r){r=v.Deferred();if(i.readyState==="complete")setTimeout(v.ready,1);else if(i.addEventListener)i.addEventListener("DOMContentLoaded",A,!1),e.addEventListener("load",v.ready,!1);else{i.attachEvent("onreadystatechange",A),e.attachEvent("onload",v.ready);var n=!1;try{n=e.frameElement==null&&i.documentElement}catch(s){}n&&n.doScroll&&function o(){if(!v.isReady){try{n.doScroll("left")}catch(e){return setTimeout(o,50)}v.ready()}}()}}return r.promise(t)},v.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(e,t){O["[object "+t+"]"]=t.toLowerCase()}),n=v(i);var M={};v.Callbacks=function(e){e=typeof e=="string"?M[e]||_(e):v.extend({},e);var n,r,i,s,o,u,a=[],f=!e.once&&[],l=function(t){n=e.memory&&t,r=!0,u=s||0,s=0,o=a.length,i=!0;for(;a&&u<o;u++)if(a[u].apply(t[0],t[1])===!1&&e.stopOnFalse){n=!1;break}i=!1,a&&(f?f.length&&l(f.shift()):n?a=[]:c.disable())},c={add:function(){if(a){var t=a.length;(function r(t){v.each(t,function(t,n){var i=v.type(n);i==="function"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!=="string"&&r(n)})})(arguments),i?o=a.length:n&&(s=t,l(n))}return this},remove:function(){return a&&v.each(arguments,function(e,t){var n;while((n=v.inArray(t,a,n))>-1)a.splice(n,1),i&&(n<=o&&o--,n<=u&&u--)}),this},has:function(e){return v.inArray(e,a)>-1},empty:function(){return a=[],this},disable:function(){return a=f=n=t,this},disabled:function(){return!a},lock:function(){return f=t,n||c.disable(),this},locked:function(){return!f},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],a&&(!r||f)&&(i?f.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},v.extend({Deferred:function(e){var t=[["resolve","done",v.Callbacks("once memory"),"resolved"],["reject","fail",v.Callbacks("once memory"),"rejected"],["notify","progress",v.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return v.Deferred(function(n){v.each(t,function(t,r){var s=r[0],o=e[t];i[r[1]](v.isFunction(o)?function(){var e=o.apply(this,arguments);e&&v.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===i?n:this,[e])}:n[s])}),e=null}).promise()},promise:function(e){return e!=null?v.extend(e,r):r}},i={};return r.pipe=r.then,v.each(t,function(e,s){var o=s[2],u=s[3];r[s[1]]=o.add,u&&o.add(function(){n=u},t[e^1][2].disable,t[2][2].lock),i[s[0]]=o.fire,i[s[0]+"With"]=o.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=l.call(arguments),r=n.length,i=r!==1||e&&v.isFunction(e.promise)?r:0,s=i===1?e:v.Deferred(),o=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?l.call(arguments):r,n===u?s.notifyWith(t,n):--i||s.resolveWith(t,n)}},u,a,f;if(r>1){u=new Array(r),a=new Array(r),f=new Array(r);for(;t<r;t++)n[t]&&v.isFunction(n[t].promise)?n[t].promise().done(o(t,f,n)).fail(s.reject).progress(o(t,a,u)):--i}return i||s.resolveWith(f,n),s.promise()}}),v.support=function(){var t,n,r,s,o,u,a,f,l,c,h,p=i.createElement("div");p.setAttribute("className","t"),p.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=p.getElementsByTagName("*"),r=p.getElementsByTagName("a")[0];if(!n||!r||!n.length)return{};s=i.createElement("select"),o=s.appendChild(i.createElement("option")),u=p.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:r.getAttribute("href")==="/a",opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:u.value==="on",optSelected:o.selected,getSetAttribute:p.className!=="t",enctype:!!i.createElement("form").enctype,html5Clone:i.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:i.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},u.checked=!0,t.noCloneChecked=u.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!o.disabled;try{delete p.test}catch(d){t.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",h=function(){t.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick"),p.detachEvent("onclick",h)),u=i.createElement("input"),u.value="t",u.setAttribute("type","radio"),t.radioValue=u.value==="t",u.setAttribute("checked","checked"),u.setAttribute("name","t"),p.appendChild(u),a=i.createDocumentFragment(),a.appendChild(p.lastChild),t.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,t.appendChecked=u.checked,a.removeChild(u),a.appendChild(p);if(p.attachEvent)for(l in{submit:!0,change:!0,focusin:!0})f="on"+l,c=f in p,c||(p.setAttribute(f,"return;"),c=typeof p[f]=="function"),t[l+"Bubbles"]=c;return v(function(){var n,r,s,o,u="padding:0;margin:0;border:0;display:block;overflow:hidden;",a=i.getElementsByTagName("body")[0];if(!a)return;n=i.createElement("div"),n.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",a.insertBefore(n,a.firstChild),r=i.createElement("div"),n.appendChild(r),r.innerHTML="<table><tr><td></td><td>t</td></tr></table>",s=r.getElementsByTagName("td"),s[0].style.cssText="padding:0;margin:0;border:0;display:none",c=s[0].offsetHeight===0,s[0].style.display="",s[1].style.display="none",t.reliableHiddenOffsets=c&&s[0].offsetHeight===0,r.innerHTML="",r.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=r.offsetWidth===4,t.doesNotIncludeMarginInBodyOffset=a.offsetTop!==1,e.getComputedStyle&&(t.pixelPosition=(e.getComputedStyle(r,null)||{}).top!=="1%",t.boxSizingReliable=(e.getComputedStyle(r,null)||{width:"4px"}).width==="4px",o=i.createElement("div"),o.style.cssText=r.style.cssText=u,o.style.marginRight=o.style.width="0",r.style.width="1px",r.appendChild(o),t.reliableMarginRight=!parseFloat((e.getComputedStyle(o,null)||{}).marginRight)),typeof r.style.zoom!="undefined"&&(r.innerHTML="",r.style.cssText=u+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=r.offsetWidth===3,r.style.display="block",r.style.overflow="visible",r.innerHTML="<div></div>",r.firstChild.style.width="5px",t.shrinkWrapBlocks=r.offsetWidth!==3,n.style.zoom=1),a.removeChild(n),n=r=s=o=null}),a.removeChild(p),n=r=s=o=u=a=p=null,t}();var D=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;v.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(v.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?v.cache[e[v.expando]]:e[v.expando],!!e&&!B(e)},data:function(e,n,r,i){if(!v.acceptData(e))return;var s,o,u=v.expando,a=typeof n=="string",f=e.nodeType,l=f?v.cache:e,c=f?e[u]:e[u]&&u;if((!c||!l[c]||!i&&!l[c].data)&&a&&r===t)return;c||(f?e[u]=c=v.deletedIds.pop()||v.guid++:c=u),l[c]||(l[c]={},f||(l[c].toJSON=v.noop));if(typeof n=="object"||typeof n=="function")i?l[c]=v.extend(l[c],n):l[c].data=v.extend(l[c].data,n);return s=l[c],i||(s.data||(s.data={}),s=s.data),r!==t&&(s[v.camelCase(n)]=r),a?(o=s[n],o==null&&(o=s[v.camelCase(n)])):o=s,o},removeData:function(e,t,n){if(!v.acceptData(e))return;var r,i,s,o=e.nodeType,u=o?v.cache:e,a=o?e[v.expando]:v.expando;if(!u[a])return;if(t){r=n?u[a]:u[a].data;if(r){v.isArray(t)||(t in r?t=[t]:(t=v.camelCase(t),t in r?t=[t]:t=t.split(" ")));for(i=0,s=t.length;i<s;i++)delete r[t[i]];if(!(n?B:v.isEmptyObject)(r))return}}if(!n){delete u[a].data;if(!B(u[a]))return}o?v.cleanData([e],!0):v.support.deleteExpando||u!=u.window?delete u[a]:u[a]=null},_data:function(e,t,n){return v.data(e,t,n,!0)},acceptData:function(e){var t=e.nodeName&&v.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),v.fn.extend({data:function(e,n){var r,i,s,o,u,a=this[0],f=0,l=null;if(e===t){if(this.length){l=v.data(a);if(a.nodeType===1&&!v._data(a,"parsedAttrs")){s=a.attributes;for(u=s.length;f<u;f++)o=s[f].name,o.indexOf("data-")||(o=v.camelCase(o.substring(5)),H(a,o,l[o]));v._data(a,"parsedAttrs",!0)}}return l}return typeof e=="object"?this.each(function(){v.data(this,e)}):(r=e.split(".",2),r[1]=r[1]?"."+r[1]:"",i=r[1]+"!",v.access(this,function(n){if(n===t)return l=this.triggerHandler("getData"+i,[r[0]]),l===t&&a&&(l=v.data(a,e),l=H(a,e,l)),l===t&&r[1]?this.data(r[0]):l;r[1]=n,this.each(function(){var t=v(this);t.triggerHandler("setData"+i,r),v.data(this,e,n),t.triggerHandler("changeData"+i,r)})},null,n,arguments.length>1,null,!1))},removeData:function(e){return this.each(function(){v.removeData(this,e)})}}),v.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=v._data(e,t),n&&(!r||v.isArray(n)?r=v._data(e,t,v.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=v.queue(e,t),r=n.length,i=n.shift(),s=v._queueHooks(e,t),o=function(){v.dequeue(e,t)};i==="inprogress"&&(i=n.shift(),r--),i&&(t==="fx"&&n.unshift("inprogress"),delete s.stop,i.call(e,o,s)),!r&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return v._data(e,n)||v._data(e,n,{empty:v.Callbacks("once memory").add(function(){v.removeData(e,t+"queue",!0),v.removeData(e,n,!0)})})}}),v.fn.extend({queue:function(e,n){var r=2;return typeof e!="string"&&(n=e,e="fx",r--),arguments.length<r?v.queue(this[0],e):n===t?this:this.each(function(){var t=v.queue(this,e,n);v._queueHooks(this,e),e==="fx"&&t[0]!=="inprogress"&&v.dequeue(this,e)})},dequeue:function(e){return this.each(function(){v.dequeue(this,e)})},delay:function(e,t){return e=v.fx?v.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,s=v.Deferred(),o=this,u=this.length,a=function(){--i||s.resolveWith(o,[o])};typeof e!="string"&&(n=e,e=t),e=e||"fx";while(u--)r=v._data(o[u],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(a));return a(),s.promise(n)}});var j,F,I,q=/[\t\r\n]/g,R=/\r/g,U=/^(?:button|input)$/i,z=/^(?:button|input|object|select|textarea)$/i,W=/^a(?:rea|)$/i,X=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,V=v.support.getSetAttribute;v.fn.extend({attr:function(e,t){return v.access(this,v.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){v.removeAttr(this,e)})},prop:function(e,t){return v.access(this,v.prop,e,t,arguments.length>1)},removeProp:function(e){return e=v.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,s,o,u;if(v.isFunction(e))return this.each(function(t){v(this).addClass(e.call(this,t,this.className))});if(e&&typeof e=="string"){t=e.split(y);for(n=0,r=this.length;n<r;n++){i=this[n];if(i.nodeType===1)if(!i.className&&t.length===1)i.className=e;else{s=" "+i.className+" ";for(o=0,u=t.length;o<u;o++)s.indexOf(" "+t[o]+" ")<0&&(s+=t[o]+" ");i.className=v.trim(s)}}}return this},removeClass:function(e){var n,r,i,s,o,u,a;if(v.isFunction(e))return this.each(function(t){v(this).removeClass(e.call(this,t,this.className))});if(e&&typeof e=="string"||e===t){n=(e||"").split(y);for(u=0,a=this.length;u<a;u++){i=this[u];if(i.nodeType===1&&i.className){r=(" "+i.className+" ").replace(q," ");for(s=0,o=n.length;s<o;s++)while(r.indexOf(" "+n[s]+" ")>=0)r=r.replace(" "+n[s]+" "," ");i.className=e?v.trim(r):""}}}return this},toggleClass:function(e,t){var n=typeof e,r=typeof t=="boolean";return v.isFunction(e)?this.each(function(n){v(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(n==="string"){var i,s=0,o=v(this),u=t,a=e.split(y);while(i=a[s++])u=r?u:!o.hasClass(i),o[u?"addClass":"removeClass"](i)}else if(n==="undefined"||n==="boolean")this.className&&v._data(this,"__className__",this.className),this.className=this.className||e===!1?"":v._data(this,"__className__")||""})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;n<r;n++)if(this[n].nodeType===1&&(" "+this[n].className+" ").replace(q," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,s=this[0];if(!arguments.length){if(s)return n=v.valHooks[s.type]||v.valHooks[s.nodeName.toLowerCase()],n&&"get"in n&&(r=n.get(s,"value"))!==t?r:(r=s.value,typeof r=="string"?r.replace(R,""):r==null?"":r);return}return i=v.isFunction(e),this.each(function(r){var s,o=v(this);if(this.nodeType!==1)return;i?s=e.call(this,r,o.val()):s=e,s==null?s="":typeof s=="number"?s+="":v.isArray(s)&&(s=v.map(s,function(e){return e==null?"":e+""})),n=v.valHooks[this.type]||v.valHooks[this.nodeName.toLowerCase()];if(!n||!("set"in n)||n.set(this,s,"value")===t)this.value=s})}}),v.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,s=e.type==="select-one"||i<0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a<u;a++){n=r[a];if((n.selected||a===i)&&(v.support.optDisabled?!n.disabled:n.getAttribute("disabled")===null)&&(!n.parentNode.disabled||!v.nodeName(n.parentNode,"optgroup"))){t=v(n).val();if(s)return t;o.push(t)}}return o},set:function(e,t){var n=v.makeArray(t);return v(e).find("option").each(function(){this.selected=v.inArray(v(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attrFn:{},attr:function(e,n,r,i){var s,o,u,a=e.nodeType;if(!e||a===3||a===8||a===2)return;if(i&&v.isFunction(v.fn[n]))return v(e)[n](r);if(typeof e.getAttribute=="undefined")return v.prop(e,n,r);u=a!==1||!v.isXMLDoc(e),u&&(n=n.toLowerCase(),o=v.attrHooks[n]||(X.test(n)?F:j));if(r!==t){if(r===null){v.removeAttr(e,n);return}return o&&"set"in o&&u&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r)}return o&&"get"in o&&u&&(s=o.get(e,n))!==null?s:(s=e.getAttribute(n),s===null?t:s)},removeAttr:function(e,t){var n,r,i,s,o=0;if(t&&e.nodeType===1){r=t.split(y);for(;o<r.length;o++)i=r[o],i&&(n=v.propFix[i]||i,s=X.test(i),s||v.attr(e,i,""),e.removeAttribute(V?i:n),s&&n in e&&(e[n]=!1))}},attrHooks:{type:{set:function(e,t){if(U.test(e.nodeName)&&e.parentNode)v.error("type property can't be changed");else if(!v.support.radioValue&&t==="radio"&&v.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}},value:{get:function(e,t){return j&&v.nodeName(e,"button")?j.get(e,t):t in e?e.value:null},set:function(e,t,n){if(j&&v.nodeName(e,"button"))return j.set(e,t,n);e.value=t}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,s,o,u=e.nodeType;if(!e||u===3||u===8||u===2)return;return o=u!==1||!v.isXMLDoc(e),o&&(n=v.propFix[n]||n,s=v.propHooks[n]),r!==t?s&&"set"in s&&(i=s.set(e,r,n))!==t?i:e[n]=r:s&&"get"in s&&(i=s.get(e,n))!==null?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):z.test(e.nodeName)||W.test(e.nodeName)&&e.href?0:t}}}}),F={get:function(e,n){var r,i=v.prop(e,n);return i===!0||typeof i!="boolean"&&(r=e.getAttributeNode(n))&&r.nodeValue!==!1?n.toLowerCase():t},set:function(e,t,n){var r;return t===!1?v.removeAttr(e,n):(r=v.propFix[n]||n,r in e&&(e[r]=!0),e.setAttribute(n,n.toLowerCase())),n}},V||(I={name:!0,id:!0,coords:!0},j=v.valHooks.button={get:function(e,n){var r;return r=e.getAttributeNode(n),r&&(I[n]?r.value!=="":r.specified)?r.value:t},set:function(e,t,n){var r=e.getAttributeNode(n);return r||(r=i.createAttribute(n),e.setAttributeNode(r)),r.value=t+""}},v.each(["width","height"],function(e,t){v.attrHooks[t]=v.extend(v.attrHooks[t],{set:function(e,n){if(n==="")return e.setAttribute(t,"auto"),n}})}),v.attrHooks.contenteditable={get:j.get,set:function(e,t,n){t===""&&(t="false"),j.set(e,t,n)}}),v.support.hrefNormalized||v.each(["href","src","width","height"],function(e,n){v.attrHooks[n]=v.extend(v.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return r===null?t:r}})}),v.support.style||(v.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||t},set:function(e,t){return e.style.cssText=t+""}}),v.support.optSelected||(v.propHooks.selected=v.extend(v.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),v.support.enctype||(v.propFix.enctype="encoding"),v.support.checkOn||v.each(["radio","checkbox"],function(){v.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}}),v.each(["radio","checkbox"],function(){v.valHooks[this]=v.extend(v.valHooks[this],{set:function(e,t){if(v.isArray(t))return e.checked=v.inArray(v(e).val(),t)>=0}})});var $=/^(?:textarea|input|select)$/i,J=/^([^\.]*|)(?:\.(.+)|)$/,K=/(?:^|\s)hover(\.\S+|)\b/,Q=/^key/,G=/^(?:mouse|contextmenu)|click/,Y=/^(?:focusinfocus|focusoutblur)$/,Z=function(e){return v.event.special.hover?e:e.replace(K,"mouseenter$1 mouseleave$1")};v.event={add:function(e,n,r,i,s){var o,u,a,f,l,c,h,p,d,m,g;if(e.nodeType===3||e.nodeType===8||!n||!r||!(o=v._data(e)))return;r.handler&&(d=r,r=d.handler,s=d.selector),r.guid||(r.guid=v.guid++),a=o.events,a||(o.events=a={}),u=o.handle,u||(o.handle=u=function(e){return typeof v=="undefined"||!!e&&v.event.triggered===e.type?t:v.event.dispatch.apply(u.elem,arguments)},u.elem=e),n=v.trim(Z(n)).split(" ");for(f=0;f<n.length;f++){l=J.exec(n[f])||[],c=l[1],h=(l[2]||"").split(".").sort(),g=v.event.special[c]||{},c=(s?g.delegateType:g.bindType)||c,g=v.event.special[c]||{},p=v.extend({type:c,origType:l[1],data:i,handler:r,guid:r.guid,selector:s,needsContext:s&&v.expr.match.needsContext.test(s),namespace:h.join(".")},d),m=a[c];if(!m){m=a[c]=[],m.delegateCount=0;if(!g.setup||g.setup.call(e,i,h,u)===!1)e.addEventListener?e.addEventListener(c,u,!1):e.attachEvent&&e.attachEvent("on"+c,u)}g.add&&(g.add.call(e,p),p.handler.guid||(p.handler.guid=r.guid)),s?m.splice(m.delegateCount++,0,p):m.push(p),v.event.global[c]=!0}e=null},global:{},remove:function(e,t,n,r,i){var s,o,u,a,f,l,c,h,p,d,m,g=v.hasData(e)&&v._data(e);if(!g||!(h=g.events))return;t=v.trim(Z(t||"")).split(" ");for(s=0;s<t.length;s++){o=J.exec(t[s])||[],u=a=o[1],f=o[2];if(!u){for(u in h)v.event.remove(e,u+t[s],n,r,!0);continue}p=v.event.special[u]||{},u=(r?p.delegateType:p.bindType)||u,d=h[u]||[],l=d.length,f=f?new RegExp("(^|\\.)"+f.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(c=0;c<d.length;c++)m=d[c],(i||a===m.origType)&&(!n||n.guid===m.guid)&&(!f||f.test(m.namespace))&&(!r||r===m.selector||r==="**"&&m.selector)&&(d.splice(c--,1),m.selector&&d.delegateCount--,p.remove&&p.remove.call(e,m));d.length===0&&l!==d.length&&((!p.teardown||p.teardown.call(e,f,g.handle)===!1)&&v.removeEvent(e,u,g.handle),delete h[u])}v.isEmptyObject(h)&&(delete g.handle,v.removeData(e,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(n,r,s,o){if(!s||s.nodeType!==3&&s.nodeType!==8){var u,a,f,l,c,h,p,d,m,g,y=n.type||n,b=[];if(Y.test(y+v.event.triggered))return;y.indexOf("!")>=0&&(y=y.slice(0,-1),a=!0),y.indexOf(".")>=0&&(b=y.split("."),y=b.shift(),b.sort());if((!s||v.event.customEvent[y])&&!v.event.global[y])return;n=typeof n=="object"?n[v.expando]?n:new v.Event(y,n):new v.Event(y),n.type=y,n.isTrigger=!0,n.exclusive=a,n.namespace=b.join("."),n.namespace_re=n.namespace?new RegExp("(^|\\.)"+b.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,h=y.indexOf(":")<0?"on"+y:"";if(!s){u=v.cache;for(f in u)u[f].events&&u[f].events[y]&&v.event.trigger(n,r,u[f].handle.elem,!0);return}n.result=t,n.target||(n.target=s),r=r!=null?v.makeArray(r):[],r.unshift(n),p=v.event.special[y]||{};if(p.trigger&&p.trigger.apply(s,r)===!1)return;m=[[s,p.bindType||y]];if(!o&&!p.noBubble&&!v.isWindow(s)){g=p.delegateType||y,l=Y.test(g+y)?s:s.parentNode;for(c=s;l;l=l.parentNode)m.push([l,g]),c=l;c===(s.ownerDocument||i)&&m.push([c.defaultView||c.parentWindow||e,g])}for(f=0;f<m.length&&!n.isPropagationStopped();f++)l=m[f][0],n.type=m[f][1],d=(v._data(l,"events")||{})[n.type]&&v._data(l,"handle"),d&&d.apply(l,r),d=h&&l[h],d&&v.acceptData(l)&&d.apply&&d.apply(l,r)===!1&&n.preventDefault();return n.type=y,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(s.ownerDocument,r)===!1)&&(y!=="click"||!v.nodeName(s,"a"))&&v.acceptData(s)&&h&&s[y]&&(y!=="focus"&&y!=="blur"||n.target.offsetWidth!==0)&&!v.isWindow(s)&&(c=s[h],c&&(s[h]=null),v.event.triggered=y,s[y](),v.event.triggered=t,c&&(s[h]=c)),n.result}return},dispatch:function(n){n=v.event.fix(n||e.event);var r,i,s,o,u,a,f,c,h,p,d=(v._data(this,"events")||{})[n.type]||[],m=d.delegateCount,g=l.call(arguments),y=!n.exclusive&&!n.namespace,b=v.event.special[n.type]||{},w=[];g[0]=n,n.delegateTarget=this;if(b.preDispatch&&b.preDispatch.call(this,n)===!1)return;if(m&&(!n.button||n.type!=="click"))for(s=n.target;s!=this;s=s.parentNode||this)if(s.disabled!==!0||n.type!=="click"){u={},f=[];for(r=0;r<m;r++)c=d[r],h=c.selector,u[h]===t&&(u[h]=c.needsContext?v(h,this).index(s)>=0:v.find(h,this,null,[s]).length),u[h]&&f.push(c);f.length&&w.push({elem:s,matches:f})}d.length>m&&w.push({elem:this,matches:d.slice(m)});for(r=0;r<w.length&&!n.isPropagationStopped();r++){a=w[r],n.currentTarget=a.elem;for(i=0;i<a.matches.length&&!n.isImmediatePropagationStopped();i++){c=a.matches[i];if(y||!n.namespace&&!c.namespace||n.namespace_re&&n.namespace_re.test(c.namespace))n.data=c.data,n.handleObj=c,o=((v.event.special[c.origType]||{}).handle||c.handler).apply(a.elem,g),o!==t&&(n.result=o,o===!1&&(n.preventDefault(),n.stopPropagation()))}}return b.postDispatch&&b.postDispatch.call(this,n),n.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return e.which==null&&(e.which=t.charCode!=null?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,s,o,u=n.button,a=n.fromElement;return e.pageX==null&&n.clientX!=null&&(r=e.target.ownerDocument||i,s=r.documentElement,o=r.body,e.pageX=n.clientX+(s&&s.scrollLeft||o&&o.scrollLeft||0)-(s&&s.clientLeft||o&&o.clientLeft||0),e.pageY=n.clientY+(s&&s.scrollTop||o&&o.scrollTop||0)-(s&&s.clientTop||o&&o.clientTop||0)),!e.relatedTarget&&a&&(e.relatedTarget=a===e.target?n.toElement:a),!e.which&&u!==t&&(e.which=u&1?1:u&2?3:u&4?2:0),e}},fix:function(e){if(e[v.expando])return e;var t,n,r=e,s=v.event.fixHooks[e.type]||{},o=s.props?this.props.concat(s.props):this.props;e=v.Event(r);for(t=o.length;t;)n=o[--t],e[n]=r[n];return e.target||(e.target=r.srcElement||i),e.target.nodeType===3&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,r):e},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(e,t,n){v.isWindow(this)&&(this.onbeforeunload=n)},teardown:function(e,t){this.onbeforeunload===t&&(this.onbeforeunload=null)}}},simulate:function(e,t,n,r){var i=v.extend(new v.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?v.event.trigger(i,null,t):v.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},v.event.handle=v.event.dispatch,v.removeEvent=i.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]=="undefined"&&(e[r]=null),e.detachEvent(r,n))},v.Event=function(e,t){if(!(this instanceof v.Event))return new v.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?tt:et):this.type=e,t&&v.extend(this,t),this.timeStamp=e&&e.timeStamp||v.now(),this[v.expando]=!0},v.Event.prototype={preventDefault:function(){this.isDefaultPrevented=tt;var e=this.originalEvent;if(!e)return;e.preventDefault?e.preventDefault():e.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=tt;var e=this.originalEvent;if(!e)return;e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=tt,this.stopPropagation()},isDefaultPrevented:et,isPropagationStopped:et,isImmediatePropagationStopped:et},v.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){v.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,s=e.handleObj,o=s.selector;if(!i||i!==r&&!v.contains(r,i))e.type=s.origType,n=s.handler.apply(this,arguments),e.type=t;return n}}}),v.support.submitBubbles||(v.event.special.submit={setup:function(){if(v.nodeName(this,"form"))return!1;v.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=v.nodeName(n,"input")||v.nodeName(n,"button")?n.form:t;r&&!v._data(r,"_submit_attached")&&(v.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),v._data(r,"_submit_attached",!0))})},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&v.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){if(v.nodeName(this,"form"))return!1;v.event.remove(this,"._submit")}}),v.support.changeBubbles||(v.event.special.change={setup:function(){if($.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")v.event.add(this,"propertychange._change",function(e){e.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),v.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),v.event.simulate("change",this,e,!0)});return!1}v.event.add(this,"beforeactivate._change",function(e){var t=e.target;$.test(t.nodeName)&&!v._data(t,"_change_attached")&&(v.event.add(t,"change._change",function(e){this.parentNode&&!e.isSimulated&&!e.isTrigger&&v.event.simulate("change",this.parentNode,e,!0)}),v._data(t,"_change_attached",!0))})},handle:function(e){var t=e.target;if(this!==t||e.isSimulated||e.isTrigger||t.type!=="radio"&&t.type!=="checkbox")return e.handleObj.handler.apply(this,arguments)},teardown:function(){return v.event.remove(this,"._change"),!$.test(this.nodeName)}}),v.support.focusinBubbles||v.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){v.event.simulate(t,e.target,v.event.fix(e),!0)};v.event.special[t]={setup:function(){n++===0&&i.addEventListener(e,r,!0)},teardown:function(){--n===0&&i.removeEventListener(e,r,!0)}}}),v.fn.extend({on:function(e,n,r,i,s){var o,u;if(typeof e=="object"){typeof n!="string"&&(r=r||n,n=t);for(u in e)this.on(u,n,r,e[u],s);return this}r==null&&i==null?(i=n,r=n=t):i==null&&(typeof n=="string"?(i=r,r=t):(i=r,r=n,n=t));if(i===!1)i=et;else if(!i)return this;return s===1&&(o=i,i=function(e){return v().off(e),o.apply(this,arguments)},i.guid=o.guid||(o.guid=v.guid++)),this.each(function(){v.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,s;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,v(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if(typeof e=="object"){for(s in e)this.off(s,n,e[s]);return this}if(n===!1||typeof n=="function")r=n,n=t;return r===!1&&(r=et),this.each(function(){v.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},live:function(e,t,n){return v(this.context).on(e,this.selector,t,n),this},die:function(e,t){return v(this.context).off(e,this.selector||"**",t),this},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return arguments.length===1?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){v.event.trigger(e,t,this)})},triggerHandler:function(e,t){if(this[0])return v.event.trigger(e,t,this[0],!0)},toggle:function(e){var t=arguments,n=e.guid||v.guid++,r=0,i=function(n){var i=(v._data(this,"lastToggle"+e.guid)||0)%r;return v._data(this,"lastToggle"+e.guid,i+1),n.preventDefault(),t[i].apply(this,arguments)||!1};i.guid=n;while(r<t.length)t[r++].guid=n;return this.click(i)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),v.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){v.fn[t]=function(e,n){return n==null&&(n=e,e=null),arguments.length>0?this.on(t,null,e,n):this.trigger(t)},Q.test(t)&&(v.event.fixHooks[t]=v.event.keyHooks),G.test(t)&&(v.event.fixHooks[t]=v.event.mouseHooks)}),function(e,t){function nt(e,t,n,r){n=n||[],t=t||g;var i,s,a,f,l=t.nodeType;if(!e||typeof e!="string")return n;if(l!==1&&l!==9)return[];a=o(t);if(!a&&!r)if(i=R.exec(e))if(f=i[1]){if(l===9){s=t.getElementById(f);if(!s||!s.parentNode)return n;if(s.id===f)return n.push(s),n}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(f))&&u(t,s)&&s.id===f)return n.push(s),n}else{if(i[2])return S.apply(n,x.call(t.getElementsByTagName(e),0)),n;if((f=i[3])&&Z&&t.getElementsByClassName)return S.apply(n,x.call(t.getElementsByClassName(f),0)),n}return vt(e.replace(j,"$1"),t,n,r,a)}function rt(e){return function(t){var n=t.nodeName.toLowerCase();return n==="input"&&t.type===e}}function it(e){return function(t){var n=t.nodeName.toLowerCase();return(n==="input"||n==="button")&&t.type===e}}function st(e){return N(function(t){return t=+t,N(function(n,r){var i,s=e([],n.length,t),o=s.length;while(o--)n[i=s[o]]&&(n[i]=!(r[i]=n[i]))})})}function ot(e,t,n){if(e===t)return n;var r=e.nextSibling;while(r){if(r===t)return-1;r=r.nextSibling}return 1}function ut(e,t){var n,r,s,o,u,a,f,l=L[d][e+" "];if(l)return t?0:l.slice(0);u=e,a=[],f=i.preFilter;while(u){if(!n||(r=F.exec(u)))r&&(u=u.slice(r[0].length)||u),a.push(s=[]);n=!1;if(r=I.exec(u))s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=r[0].replace(j," ");for(o in i.filter)(r=J[o].exec(u))&&(!f[o]||(r=f[o](r)))&&(s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=o,n.matches=r);if(!n)break}return t?u.length:u?nt.error(e):L(e,a).slice(0)}function at(e,t,r){var i=t.dir,s=r&&t.dir==="parentNode",o=w++;return t.first?function(t,n,r){while(t=t[i])if(s||t.nodeType===1)return e(t,n,r)}:function(t,r,u){if(!u){var a,f=b+" "+o+" ",l=f+n;while(t=t[i])if(s||t.nodeType===1){if((a=t[d])===l)return t.sizset;if(typeof a=="string"&&a.indexOf(f)===0){if(t.sizset)return t}else{t[d]=l;if(e(t,r,u))return t.sizset=!0,t;t.sizset=!1}}}else while(t=t[i])if(s||t.nodeType===1)if(e(t,r,u))return t}}function ft(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function lt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u<a;u++)if(s=e[u])if(!n||n(s,r,i))o.push(s),f&&t.push(u);return o}function ct(e,t,n,r,i,s){return r&&!r[d]&&(r=ct(r)),i&&!i[d]&&(i=ct(i,s)),N(function(s,o,u,a){var f,l,c,h=[],p=[],d=o.length,v=s||dt(t||"*",u.nodeType?[u]:u,[]),m=e&&(s||!t)?lt(v,h,e,u,a):v,g=n?i||(s?e:d||r)?[]:o:m;n&&n(m,g,u,a);if(r){f=lt(g,p),r(f,[],u,a),l=f.length;while(l--)if(c=f[l])g[p[l]]=!(m[p[l]]=c)}if(s){if(i||e){if(i){f=[],l=g.length;while(l--)(c=g[l])&&f.push(m[l]=c);i(null,g=[],f,a)}l=g.length;while(l--)(c=g[l])&&(f=i?T.call(s,c):h[l])>-1&&(s[f]=!(o[f]=c))}}else g=lt(g===o?g.splice(d,g.length):g),i?i(null,o,g,a):S.apply(o,g)})}function ht(e){var t,n,r,s=e.length,o=i.relative[e[0].type],u=o||i.relative[" "],a=o?1:0,f=at(function(e){return e===t},u,!0),l=at(function(e){return T.call(t,e)>-1},u,!0),h=[function(e,n,r){return!o&&(r||n!==c)||((t=n).nodeType?f(e,n,r):l(e,n,r))}];for(;a<s;a++)if(n=i.relative[e[a].type])h=[at(ft(h),n)];else{n=i.filter[e[a].type].apply(null,e[a].matches);if(n[d]){r=++a;for(;r<s;r++)if(i.relative[e[r].type])break;return ct(a>1&&ft(h),a>1&&e.slice(0,a-1).join("").replace(j,"$1"),n,a<r&&ht(e.slice(a,r)),r<s&&ht(e=e.slice(r)),r<s&&e.join(""))}h.push(n)}return ft(h)}function pt(e,t){var r=t.length>0,s=e.length>0,o=function(u,a,f,l,h){var p,d,v,m=[],y=0,w="0",x=u&&[],T=h!=null,N=c,C=u||s&&i.find.TAG("*",h&&a.parentNode||a),k=b+=N==null?1:Math.E;T&&(c=a!==g&&a,n=o.el);for(;(p=C[w])!=null;w++){if(s&&p){for(d=0;v=e[d];d++)if(v(p,a,f)){l.push(p);break}T&&(b=k,n=++o.el)}r&&((p=!v&&p)&&y--,u&&x.push(p))}y+=w;if(r&&w!==y){for(d=0;v=t[d];d++)v(x,m,a,f);if(u){if(y>0)while(w--)!x[w]&&!m[w]&&(m[w]=E.call(l));m=lt(m)}S.apply(l,m),T&&!u&&m.length>0&&y+t.length>1&&nt.uniqueSort(l)}return T&&(b=k,c=N),x};return o.el=0,r?N(o):o}function dt(e,t,n){var r=0,i=t.length;for(;r<i;r++)nt(e,t[r],n);return n}function vt(e,t,n,r,s){var o,u,f,l,c,h=ut(e),p=h.length;if(!r&&h.length===1){u=h[0]=h[0].slice(0);if(u.length>2&&(f=u[0]).type==="ID"&&t.nodeType===9&&!s&&i.relative[u[1].type]){t=i.find.ID(f.matches[0].replace($,""),t,s)[0];if(!t)return n;e=e.slice(u.shift().length)}for(o=J.POS.test(e)?-1:u.length-1;o>=0;o--){f=u[o];if(i.relative[l=f.type])break;if(c=i.find[l])if(r=c(f.matches[0].replace($,""),z.test(u[0].type)&&t.parentNode||t,s)){u.splice(o,1),e=r.length&&u.join("");if(!e)return S.apply(n,x.call(r,0)),n;break}}}return a(e,h)(r,t,s,n,z.test(e)),n}function mt(){}var n,r,i,s,o,u,a,f,l,c,h=!0,p="undefined",d=("sizcache"+Math.random()).replace(".",""),m=String,g=e.document,y=g.documentElement,b=0,w=0,E=[].pop,S=[].push,x=[].slice,T=[].indexOf||function(e){var t=0,n=this.length;for(;t<n;t++)if(this[t]===e)return t;return-1},N=function(e,t){return e[d]=t==null||t,e},C=function(){var e={},t=[];return N(function(n,r){return t.push(n)>i.cacheLength&&delete e[t.shift()],e[n+" "]=r},e)},k=C(),L=C(),A=C(),O="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",_=M.replace("w","w#"),D="([*^$|!~]?=)",P="\\["+O+"*("+M+")"+O+"*(?:"+D+O+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+_+")|)|)"+O+"*\\]",H=":("+M+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+P+")|[^:]|\\\\.)*|.*))\\)|)",B=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+O+"*((?:-\\d)?\\d*)"+O+"*\\)|)(?=[^-]|$)",j=new RegExp("^"+O+"+|((?:^|[^\\\\])(?:\\\\.)*)"+O+"+$","g"),F=new RegExp("^"+O+"*,"+O+"*"),I=new RegExp("^"+O+"*([\\x20\\t\\r\\n\\f>+~])"+O+"*"),q=new RegExp(H),R=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,U=/^:not/,z=/[\x20\t\r\n\f]*[+~]/,W=/:not\($/,X=/h\d/i,V=/input|select|textarea|button/i,$=/\\(?!\\)/g,J={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),NAME:new RegExp("^\\[name=['\"]?("+M+")['\"]?\\]"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+H),POS:new RegExp(B,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+O+"*(even|odd|(([+-]|)(\\d*)n|)"+O+"*(?:([+-]|)"+O+"*(\\d+)|))"+O+"*\\)|)","i"),needsContext:new RegExp("^"+O+"*[>+~]|"+B,"i")},K=function(e){var t=g.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}},Q=K(function(e){return e.appendChild(g.createComment("")),!e.getElementsByTagName("*").length}),G=K(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==p&&e.firstChild.getAttribute("href")==="#"}),Y=K(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return t!=="boolean"&&t!=="string"}),Z=K(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!e.getElementsByClassName||!e.getElementsByClassName("e").length?!1:(e.lastChild.className="e",e.getElementsByClassName("e").length===2)}),et=K(function(e){e.id=d+0,e.innerHTML="<a name='"+d+"'></a><div name='"+d+"'></div>",y.insertBefore(e,y.firstChild);var t=g.getElementsByName&&g.getElementsByName(d).length===2+g.getElementsByName(d+0).length;return r=!g.getElementById(d),y.removeChild(e),t});try{x.call(y.childNodes,0)[0].nodeType}catch(tt){x=function(e){var t,n=[];for(;t=this[e];e++)n.push(t);return n}}nt.matches=function(e,t){return nt(e,null,null,t)},nt.matchesSelector=function(e,t){return nt(t,null,null,[e]).length>0},s=nt.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(i===1||i===9||i===11){if(typeof e.textContent=="string")return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=s(e)}else if(i===3||i===4)return e.nodeValue}else for(;t=e[r];r++)n+=s(t);return n},o=nt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?t.nodeName!=="HTML":!1},u=nt.contains=y.contains?function(e,t){var n=e.nodeType===9?e.documentElement:e,r=t&&t.parentNode;return e===r||!!(r&&r.nodeType===1&&n.contains&&n.contains(r))}:y.compareDocumentPosition?function(e,t){return t&&!!(e.compareDocumentPosition(t)&16)}:function(e,t){while(t=t.parentNode)if(t===e)return!0;return!1},nt.attr=function(e,t){var n,r=o(e);return r||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):r||Y?e.getAttribute(t):(n=e.getAttributeNode(t),n?typeof e[t]=="boolean"?e[t]?t:null:n.specified?n.value:null:null)},i=nt.selectors={cacheLength:50,createPseudo:N,match:J,attrHandle:G?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},find:{ID:r?function(e,t,n){if(typeof t.getElementById!==p&&!n){var r=t.getElementById(e);return r&&r.parentNode?[r]:[]}}:function(e,n,r){if(typeof n.getElementById!==p&&!r){var i=n.getElementById(e);return i?i.id===e||typeof i.getAttributeNode!==p&&i.getAttributeNode("id").value===e?[i]:t:[]}},TAG:Q?function(e,t){if(typeof t.getElementsByTagName!==p)return t.getElementsByTagName(e)}:function(e,t){var n=t.getElementsByTagName(e);if(e==="*"){var r,i=[],s=0;for(;r=n[s];s++)r.nodeType===1&&i.push(r);return i}return n},NAME:et&&function(e,t){if(typeof t.getElementsByName!==p)return t.getElementsByName(name)},CLASS:Z&&function(e,t,n){if(typeof t.getElementsByClassName!==p&&!n)return t.getElementsByClassName(e)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace($,""),e[3]=(e[4]||e[5]||"").replace($,""),e[2]==="~="&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),e[1]==="nth"?(e[2]||nt.error(e[0]),e[3]=+(e[3]?e[4]+(e[5]||1):2*(e[2]==="even"||e[2]==="odd")),e[4]=+(e[6]+e[7]||e[2]==="odd")):e[2]&&nt.error(e[0]),e},PSEUDO:function(e){var t,n;if(J.CHILD.test(e[0]))return null;if(e[3])e[2]=e[3];else if(t=e[4])q.test(t)&&(n=ut(t,!0))&&(n=t.indexOf(")",t.length-n)-t.length)&&(t=t.slice(0,n),e[0]=e[0].slice(0,n)),e[2]=t;return e.slice(0,3)}},filter:{ID:r?function(e){return e=e.replace($,""),function(t){return t.getAttribute("id")===e}}:function(e){return e=e.replace($,""),function(t){var n=typeof t.getAttributeNode!==p&&t.getAttributeNode("id");return n&&n.value===e}},TAG:function(e){return e==="*"?function(){return!0}:(e=e.replace($,"").toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[d][e+" "];return t||(t=new RegExp("(^|"+O+")"+e+"("+O+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==p&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r,i){var s=nt.attr(r,e);return s==null?t==="!=":t?(s+="",t==="="?s===n:t==="!="?s!==n:t==="^="?n&&s.indexOf(n)===0:t==="*="?n&&s.indexOf(n)>-1:t==="$="?n&&s.substr(s.length-n.length)===n:t==="~="?(" "+s+" ").indexOf(n)>-1:t==="|="?s===n||s.substr(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r){return e==="nth"?function(e){var t,i,s=e.parentNode;if(n===1&&r===0)return!0;if(s){i=0;for(t=s.firstChild;t;t=t.nextSibling)if(t.nodeType===1){i++;if(e===t)break}}return i-=r,i===n||i%n===0&&i/n>=0}:function(t){var n=t;switch(e){case"only":case"first":while(n=n.previousSibling)if(n.nodeType===1)return!1;if(e==="first")return!0;n=t;case"last":while(n=n.nextSibling)if(n.nodeType===1)return!1;return!0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||nt.error("unsupported pseudo: "+e);return r[d]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?N(function(e,n){var i,s=r(e,t),o=s.length;while(o--)i=T.call(e,s[o]),e[i]=!(n[i]=s[o])}):function(e){return r(e,0,n)}):r}},pseudos:{not:N(function(e){var t=[],n=[],r=a(e.replace(j,"$1"));return r[d]?N(function(e,t,n,i){var s,o=r(e,null,i,[]),u=e.length;while(u--)if(s=o[u])e[u]=!(t[u]=s)}):function(e,i,s){return t[0]=e,r(t,null,s,n),!n.pop()}}),has:N(function(e){return function(t){return nt(e,t).length>0}}),contains:N(function(e){return function(t){return(t.textContent||t.innerText||s(t)).indexOf(e)>-1}}),enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&!!e.checked||t==="option"&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},parent:function(e){return!i.pseudos.empty(e)},empty:function(e){var t;e=e.firstChild;while(e){if(e.nodeName>"@"||(t=e.nodeType)===3||t===4)return!1;e=e.nextSibling}return!0},header:function(e){return X.test(e.nodeName)},text:function(e){var t,n;return e.nodeName.toLowerCase()==="input"&&(t=e.type)==="text"&&((n=e.getAttribute("type"))==null||n.toLowerCase()===t)},radio:rt("radio"),checkbox:rt("checkbox"),file:rt("file"),password:rt("password"),image:rt("image"),submit:it("submit"),reset:it("reset"),button:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&e.type==="button"||t==="button"},input:function(e){return V.test(e.nodeName)},focus:function(e){var t=e.ownerDocument;return e===t.activeElement&&(!t.hasFocus||t.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},active:function(e){return e===e.ownerDocument.activeElement},first:st(function(){return[0]}),last:st(function(e,t){return[t-1]}),eq:st(function(e,t,n){return[n<0?n+t:n]}),even:st(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:st(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:st(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:st(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}},f=y.compareDocumentPosition?function(e,t){return e===t?(l=!0,0):(!e.compareDocumentPosition||!t.compareDocumentPosition?e.compareDocumentPosition:e.compareDocumentPosition(t)&4)?-1:1}:function(e,t){if(e===t)return l=!0,0;if(e.sourceIndex&&t.sourceIndex)return e.sourceIndex-t.sourceIndex;var n,r,i=[],s=[],o=e.parentNode,u=t.parentNode,a=o;if(o===u)return ot(e,t);if(!o)return-1;if(!u)return 1;while(a)i.unshift(a),a=a.parentNode;a=u;while(a)s.unshift(a),a=a.parentNode;n=i.length,r=s.length;for(var f=0;f<n&&f<r;f++)if(i[f]!==s[f])return ot(i[f],s[f]);return f===n?ot(e,s[f],-1):ot(i[f],t,1)},[0,0].sort(f),h=!l,nt.uniqueSort=function(e){var t,n=[],r=1,i=0;l=h,e.sort(f);if(l){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e},nt.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},a=nt.compile=function(e,t){var n,r=[],i=[],s=A[d][e+" "];if(!s){t||(t=ut(e)),n=t.length;while(n--)s=ht(t[n]),s[d]?r.push(s):i.push(s);s=A(e,pt(i,r))}return s},g.querySelectorAll&&function(){var e,t=vt,n=/'|\\/g,r=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,i=[":focus"],s=[":active"],u=y.matchesSelector||y.mozMatchesSelector||y.webkitMatchesSelector||y.oMatchesSelector||y.msMatchesSelector;K(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||i.push("\\["+O+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||i.push(":checked")}),K(function(e){e.innerHTML="<p test=''></p>",e.querySelectorAll("[test^='']").length&&i.push("[*^$]="+O+"*(?:\"\"|'')"),e.innerHTML="<input type='hidden'/>",e.querySelectorAll(":enabled").length||i.push(":enabled",":disabled")}),i=new RegExp(i.join("|")),vt=function(e,r,s,o,u){if(!o&&!u&&!i.test(e)){var a,f,l=!0,c=d,h=r,p=r.nodeType===9&&e;if(r.nodeType===1&&r.nodeName.toLowerCase()!=="object"){a=ut(e),(l=r.getAttribute("id"))?c=l.replace(n,"\\$&"):r.setAttribute("id",c),c="[id='"+c+"'] ",f=a.length;while(f--)a[f]=c+a[f].join("");h=z.test(e)&&r.parentNode||r,p=a.join(",")}if(p)try{return S.apply(s,x.call(h.querySelectorAll(p),0)),s}catch(v){}finally{l||r.removeAttribute("id")}}return t(e,r,s,o,u)},u&&(K(function(t){e=u.call(t,"div");try{u.call(t,"[test!='']:sizzle"),s.push("!=",H)}catch(n){}}),s=new RegExp(s.join("|")),nt.matchesSelector=function(t,n){n=n.replace(r,"='$1']");if(!o(t)&&!s.test(n)&&!i.test(n))try{var a=u.call(t,n);if(a||e||t.document&&t.document.nodeType!==11)return a}catch(f){}return nt(n,null,null,[t]).length>0})}(),i.pseudos.nth=i.pseudos.eq,i.filters=mt.prototype=i.pseudos,i.setFilters=new mt,nt.attr=v.attr,v.find=nt,v.expr=nt.selectors,v.expr[":"]=v.expr.pseudos,v.unique=nt.uniqueSort,v.text=nt.getText,v.isXMLDoc=nt.isXML,v.contains=nt.contains}(e);var nt=/Until$/,rt=/^(?:parents|prev(?:Until|All))/,it=/^.[^:#\[\.,]*$/,st=v.expr.match.needsContext,ot={children:!0,contents:!0,next:!0,prev:!0};v.fn.extend({find:function(e){var t,n,r,i,s,o,u=this;if(typeof e!="string")return v(e).filter(function(){for(t=0,n=u.length;t<n;t++)if(v.contains(u[t],this))return!0});o=this.pushStack("","find",e);for(t=0,n=this.length;t<n;t++){r=o.length,v.find(e,this[t],o);if(t>0)for(i=r;i<o.length;i++)for(s=0;s<r;s++)if(o[s]===o[i]){o.splice(i--,1);break}}return o},has:function(e){var t,n=v(e,this),r=n.length;return this.filter(function(){for(t=0;t<r;t++)if(v.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1),"not",e)},filter:function(e){return this.pushStack(ft(this,e,!0),"filter",e)},is:function(e){return!!e&&(typeof e=="string"?st.test(e)?v(e,this.context).index(this[0])>=0:v.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,s=[],o=st.test(e)||typeof e!="string"?v(e,t||this.context):0;for(;r<i;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&n.nodeType!==11){if(o?o.index(n)>-1:v.find.matchesSelector(n,e)){s.push(n);break}n=n.parentNode}}return s=s.length>1?v.unique(s):s,this.pushStack(s,"closest",e)},index:function(e){return e?typeof e=="string"?v.inArray(this[0],v(e)):v.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(e,t){var n=typeof e=="string"?v(e,t):v.makeArray(e&&e.nodeType?[e]:e),r=v.merge(this.get(),n);return this.pushStack(ut(n[0])||ut(r[0])?r:v.unique(r))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}}),v.fn.andSelf=v.fn.addBack,v.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return v.dir(e,"parentNode")},parentsUntil:function(e,t,n){return v.dir(e,"parentNode",n)},next:function(e){return at(e,"nextSibling")},prev:function(e){return at(e,"previousSibling")},nextAll:function(e){return v.dir(e,"nextSibling")},prevAll:function(e){return v.dir(e,"previousSibling")},nextUntil:function(e,t,n){return v.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return v.dir(e,"previousSibling",n)},siblings:function(e){return v.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return v.sibling(e.firstChild)},contents:function(e){return v.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:v.merge([],e.childNodes)}},function(e,t){v.fn[e]=function(n,r){var i=v.map(this,t,n);return nt.test(e)||(r=n),r&&typeof r=="string"&&(i=v.filter(r,i)),i=this.length>1&&!ot[e]?v.unique(i):i,this.length>1&&rt.test(e)&&(i=i.reverse()),this.pushStack(i,e,l.call(arguments).join(","))}}),v.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),t.length===1?v.find.matchesSelector(t[0],e)?[t[0]]:[]:v.find.matches(e,t)},dir:function(e,n,r){var i=[],s=e[n];while(s&&s.nodeType!==9&&(r===t||s.nodeType!==1||!v(s).is(r)))s.nodeType===1&&i.push(s),s=s[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)e.nodeType===1&&e!==t&&n.push(e);return n}});var ct="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ht=/ jQuery\d+="(?:null|\d+)"/g,pt=/^\s+/,dt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,vt=/<([\w:]+)/,mt=/<tbody/i,gt=/<|&#?\w+;/,yt=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,wt=new RegExp("<(?:"+ct+")[\\s/>]","i"),Et=/^(?:checkbox|radio)$/,St=/checked\s*(?:[^=]|=\s*.checked.)/i,xt=/\/(java|ecma)script/i,Tt=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,Nt={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},Ct=lt(i),kt=Ct.appendChild(i.createElement("div"));Nt.optgroup=Nt.option,Nt.tbody=Nt.tfoot=Nt.colgroup=Nt.caption=Nt.thead,Nt.th=Nt.td,v.support.htmlSerialize||(Nt._default=[1,"X<div>","</div>"]),v.fn.extend({text:function(e){return v.access(this,function(e){return e===t?v.text(this):this.empty().append((this[0]&&this[0].ownerDocument||i).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(v.isFunction(e))return this.each(function(t){v(this).wrapAll(e.call(this,t))});if(this[0]){var t=v(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&e.firstChild.nodeType===1)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return v.isFunction(e)?this.each(function(t){v(this).wrapInner(e.call(this,t))}):this.each(function(){var t=v(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=v.isFunction(e);return this.each(function(n){v(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){v.nodeName(this,"body")||v(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(e,this.firstChild)})},before:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(e,this),"before",this.selector)}},after:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this.nextSibling)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(this,e),"after",this.selector)}},remove:function(e,t){var n,r=0;for(;(n=this[r])!=null;r++)if(!e||v.filter(e,[n]).length)!t&&n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),v.cleanData([n])),n.parentNode&&n.parentNode.removeChild(n);return this},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){e.nodeType===1&&v.cleanData(e.getElementsByTagName("*"));while(e.firstChild)e.removeChild(e.firstChild)}return this},clone:function(e,t){return e=e==null?!1:e,t=t==null?e:t,this.map(function(){return v.clone(this,e,t)})},html:function(e){return v.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return n.nodeType===1?n.innerHTML.replace(ht,""):t;if(typeof e=="string"&&!yt.test(e)&&(v.support.htmlSerialize||!wt.test(e))&&(v.support.leadingWhitespace||!pt.test(e))&&!Nt[(vt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(dt,"<$1></$2>");try{for(;r<i;r++)n=this[r]||{},n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),n.innerHTML=e);n=0}catch(s){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){return ut(this[0])?this.length?this.pushStack(v(v.isFunction(e)?e():e),"replaceWith",e):this:v.isFunction(e)?this.each(function(t){var n=v(this),r=n.html();n.replaceWith(e.call(this,t,r))}):(typeof e!="string"&&(e=v(e).detach()),this.each(function(){var t=this.nextSibling,n=this.parentNode;v(this).remove(),t?v(t).before(e):v(n).append(e)}))},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=[].concat.apply([],e);var i,s,o,u,a=0,f=e[0],l=[],c=this.length;if(!v.support.checkClone&&c>1&&typeof f=="string"&&St.test(f))return this.each(function(){v(this).domManip(e,n,r)});if(v.isFunction(f))return this.each(function(i){var s=v(this);e[0]=f.call(this,i,n?s.html():t),s.domManip(e,n,r)});if(this[0]){i=v.buildFragment(e,this,l),o=i.fragment,s=o.firstChild,o.childNodes.length===1&&(o=s);if(s){n=n&&v.nodeName(s,"tr");for(u=i.cacheable||c-1;a<c;a++)r.call(n&&v.nodeName(this[a],"table")?Lt(this[a],"tbody"):this[a],a===u?o:v.clone(o,!0,!0))}o=s=null,l.length&&v.each(l,function(e,t){t.src?v.ajax?v.ajax({url:t.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):v.error("no ajax"):v.globalEval((t.text||t.textContent||t.innerHTML||"").replace(Tt,"")),t.parentNode&&t.parentNode.removeChild(t)})}return this}}),v.buildFragment=function(e,n,r){var s,o,u,a=e[0];return n=n||i,n=!n.nodeType&&n[0]||n,n=n.ownerDocument||n,e.length===1&&typeof a=="string"&&a.length<512&&n===i&&a.charAt(0)==="<"&&!bt.test(a)&&(v.support.checkClone||!St.test(a))&&(v.support.html5Clone||!wt.test(a))&&(o=!0,s=v.fragments[a],u=s!==t),s||(s=n.createDocumentFragment(),v.clean(e,n,s,r),o&&(v.fragments[a]=u&&s)),{fragment:s,cacheable:o}},v.fragments={},v.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){v.fn[e]=function(n){var r,i=0,s=[],o=v(n),u=o.length,a=this.length===1&&this[0].parentNode;if((a==null||a&&a.nodeType===11&&a.childNodes.length===1)&&u===1)return o[t](this[0]),this;for(;i<u;i++)r=(i>0?this.clone(!0):this).get(),v(o[i])[t](r),s=s.concat(r);return this.pushStack(s,e,o.selector)}}),v.extend({clone:function(e,t,n){var r,i,s,o;v.support.html5Clone||v.isXMLDoc(e)||!wt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(kt.innerHTML=e.outerHTML,kt.removeChild(o=kt.firstChild));if((!v.support.noCloneEvent||!v.support.noCloneChecked)&&(e.nodeType===1||e.nodeType===11)&&!v.isXMLDoc(e)){Ot(e,o),r=Mt(e),i=Mt(o);for(s=0;r[s];++s)i[s]&&Ot(r[s],i[s])}if(t){At(e,o);if(n){r=Mt(e),i=Mt(o);for(s=0;r[s];++s)At(r[s],i[s])}}return r=i=null,o},clean:function(e,t,n,r){var s,o,u,a,f,l,c,h,p,d,m,g,y=t===i&&Ct,b=[];if(!t||typeof t.createDocumentFragment=="undefined")t=i;for(s=0;(u=e[s])!=null;s++){typeof u=="number"&&(u+="");if(!u)continue;if(typeof u=="string")if(!gt.test(u))u=t.createTextNode(u);else{y=y||lt(t),c=t.createElement("div"),y.appendChild(c),u=u.replace(dt,"<$1></$2>"),a=(vt.exec(u)||["",""])[1].toLowerCase(),f=Nt[a]||Nt._default,l=f[0],c.innerHTML=f[1]+u+f[2];while(l--)c=c.lastChild;if(!v.support.tbody){h=mt.test(u),p=a==="table"&&!h?c.firstChild&&c.firstChild.childNodes:f[1]==="<table>"&&!h?c.childNodes:[];for(o=p.length-1;o>=0;--o)v.nodeName(p[o],"tbody")&&!p[o].childNodes.length&&p[o].parentNode.removeChild(p[o])}!v.support.leadingWhitespace&&pt.test(u)&&c.insertBefore(t.createTextNode(pt.exec(u)[0]),c.firstChild),u=c.childNodes,c.parentNode.removeChild(c)}u.nodeType?b.push(u):v.merge(b,u)}c&&(u=c=y=null);if(!v.support.appendChecked)for(s=0;(u=b[s])!=null;s++)v.nodeName(u,"input")?_t(u):typeof u.getElementsByTagName!="undefined"&&v.grep(u.getElementsByTagName("input"),_t);if(n){m=function(e){if(!e.type||xt.test(e.type))return r?r.push(e.parentNode?e.parentNode.removeChild(e):e):n.appendChild(e)};for(s=0;(u=b[s])!=null;s++)if(!v.nodeName(u,"script")||!m(u))n.appendChild(u),typeof u.getElementsByTagName!="undefined"&&(g=v.grep(v.merge([],u.getElementsByTagName("script")),m),b.splice.apply(b,[s+1,0].concat(g)),s+=g.length)}return b},cleanData:function(e,t){var n,r,i,s,o=0,u=v.expando,a=v.cache,f=v.support.deleteExpando,l=v.event.special;for(;(i=e[o])!=null;o++)if(t||v.acceptData(i)){r=i[u],n=r&&a[r];if(n){if(n.events)for(s in n.events)l[s]?v.event.remove(i,s):v.removeEvent(i,s,n.handle);a[r]&&(delete a[r],f?delete i[u]:i.removeAttribute?i.removeAttribute(u):i[u]=null,v.deletedIds.push(r))}}}}),function(){var e,t;v.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||e.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e=v.uaMatch(o.userAgent),t={},e.browser&&(t[e.browser]=!0,t.version=e.version),t.chrome?t.webkit=!0:t.webkit&&(t.safari=!0),v.browser=t,v.sub=function(){function e(t,n){return new e.fn.init(t,n)}v.extend(!0,e,this),e.superclass=this,e.fn=e.prototype=this(),e.fn.constructor=e,e.sub=this.sub,e.fn.init=function(r,i){return i&&i instanceof v&&!(i instanceof e)&&(i=e(i)),v.fn.init.call(this,r,i,t)},e.fn.init.prototype=e.fn;var t=e(i);return e}}();var Dt,Pt,Ht,Bt=/alpha\([^)]*\)/i,jt=/opacity=([^)]*)/,Ft=/^(top|right|bottom|left)$/,It=/^(none|table(?!-c[ea]).+)/,qt=/^margin/,Rt=new RegExp("^("+m+")(.*)$","i"),Ut=new RegExp("^("+m+")(?!px)[a-z%]+$","i"),zt=new RegExp("^([-+])=("+m+")","i"),Wt={BODY:"block"},Xt={position:"absolute",visibility:"hidden",display:"block"},Vt={letterSpacing:0,fontWeight:400},$t=["Top","Right","Bottom","Left"],Jt=["Webkit","O","Moz","ms"],Kt=v.fn.toggle;v.fn.extend({css:function(e,n){return v.access(this,function(e,n,r){return r!==t?v.style(e,n,r):v.css(e,n)},e,n,arguments.length>1)},show:function(){return Yt(this,!0)},hide:function(){return Yt(this)},toggle:function(e,t){var n=typeof e=="boolean";return v.isFunction(e)&&v.isFunction(t)?Kt.apply(this,arguments):this.each(function(){(n?e:Gt(this))?v(this).show():v(this).hide()})}}),v.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Dt(e,"opacity");return n===""?"1":n}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":v.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(!e||e.nodeType===3||e.nodeType===8||!e.style)return;var s,o,u,a=v.camelCase(n),f=e.style;n=v.cssProps[a]||(v.cssProps[a]=Qt(f,a)),u=v.cssHooks[n]||v.cssHooks[a];if(r===t)return u&&"get"in u&&(s=u.get(e,!1,i))!==t?s:f[n];o=typeof r,o==="string"&&(s=zt.exec(r))&&(r=(s[1]+1)*s[2]+parseFloat(v.css(e,n)),o="number");if(r==null||o==="number"&&isNaN(r))return;o==="number"&&!v.cssNumber[a]&&(r+="px");if(!u||!("set"in u)||(r=u.set(e,r,i))!==t)try{f[n]=r}catch(l){}},css:function(e,n,r,i){var s,o,u,a=v.camelCase(n);return n=v.cssProps[a]||(v.cssProps[a]=Qt(e.style,a)),u=v.cssHooks[n]||v.cssHooks[a],u&&"get"in u&&(s=u.get(e,!0,i)),s===t&&(s=Dt(e,n)),s==="normal"&&n in Vt&&(s=Vt[n]),r||i!==t?(o=parseFloat(s),r||v.isNumeric(o)?o||0:s):s},swap:function(e,t,n){var r,i,s={};for(i in t)s[i]=e.style[i],e.style[i]=t[i];r=n.call(e);for(i in t)e.style[i]=s[i];return r}}),e.getComputedStyle?Dt=function(t,n){var r,i,s,o,u=e.getComputedStyle(t,null),a=t.style;return u&&(r=u.getPropertyValue(n)||u[n],r===""&&!v.contains(t.ownerDocument,t)&&(r=v.style(t,n)),Ut.test(r)&&qt.test(n)&&(i=a.width,s=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=r,r=u.width,a.width=i,a.minWidth=s,a.maxWidth=o)),r}:i.documentElement.currentStyle&&(Dt=function(e,t){var n,r,i=e.currentStyle&&e.currentStyle[t],s=e.style;return i==null&&s&&s[t]&&(i=s[t]),Ut.test(i)&&!Ft.test(t)&&(n=s.left,r=e.runtimeStyle&&e.runtimeStyle.left,r&&(e.runtimeStyle.left=e.currentStyle.left),s.left=t==="fontSize"?"1em":i,i=s.pixelLeft+"px",s.left=n,r&&(e.runtimeStyle.left=r)),i===""?"auto":i}),v.each(["height","width"],function(e,t){v.cssHooks[t]={get:function(e,n,r){if(n)return e.offsetWidth===0&&It.test(Dt(e,"display"))?v.swap(e,Xt,function(){return tn(e,t,r)}):tn(e,t,r)},set:function(e,n,r){return Zt(e,n,r?en(e,t,r,v.support.boxSizing&&v.css(e,"boxSizing")==="border-box"):0)}}}),v.support.opacity||(v.cssHooks.opacity={get:function(e,t){return jt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=v.isNumeric(t)?"alpha(opacity="+t*100+")":"",s=r&&r.filter||n.filter||"";n.zoom=1;if(t>=1&&v.trim(s.replace(Bt,""))===""&&n.removeAttribute){n.removeAttribute("filter");if(r&&!r.filter)return}n.filter=Bt.test(s)?s.replace(Bt,i):s+" "+i}}),v(function(){v.support.reliableMarginRight||(v.cssHooks.marginRight={get:function(e,t){return v.swap(e,{display:"inline-block"},function(){if(t)return Dt(e,"marginRight")})}}),!v.support.pixelPosition&&v.fn.position&&v.each(["top","left"],function(e,t){v.cssHooks[t]={get:function(e,n){if(n){var r=Dt(e,t);return Ut.test(r)?v(e).position()[t]+"px":r}}}})}),v.expr&&v.expr.filters&&(v.expr.filters.hidden=function(e){return e.offsetWidth===0&&e.offsetHeight===0||!v.support.reliableHiddenOffsets&&(e.style&&e.style.display||Dt(e,"display"))==="none"},v.expr.filters.visible=function(e){return!v.expr.filters.hidden(e)}),v.each({margin:"",padding:"",border:"Width"},function(e,t){v.cssHooks[e+t]={expand:function(n){var r,i=typeof n=="string"?n.split(" "):[n],s={};for(r=0;r<4;r++)s[e+$t[r]+t]=i[r]||i[r-2]||i[0];return s}},qt.test(e)||(v.cssHooks[e+t].set=Zt)});var rn=/%20/g,sn=/\[\]$/,on=/\r?\n/g,un=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,an=/^(?:select|textarea)/i;v.fn.extend({serialize:function(){return v.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?v.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||an.test(this.nodeName)||un.test(this.type))}).map(function(e,t){var n=v(this).val();return n==null?null:v.isArray(n)?v.map(n,function(e,n){return{name:t.name,value:e.replace(on,"\r\n")}}):{name:t.name,value:n.replace(on,"\r\n")}}).get()}}),v.param=function(e,n){var r,i=[],s=function(e,t){t=v.isFunction(t)?t():t==null?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};n===t&&(n=v.ajaxSettings&&v.ajaxSettings.traditional);if(v.isArray(e)||e.jquery&&!v.isPlainObject(e))v.each(e,function(){s(this.name,this.value)});else for(r in e)fn(r,e[r],n,s);return i.join("&").replace(rn,"+")};var ln,cn,hn=/#.*$/,pn=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,dn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,vn=/^(?:GET|HEAD)$/,mn=/^\/\//,gn=/\?/,yn=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bn=/([?&])_=[^&]*/,wn=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,En=v.fn.load,Sn={},xn={},Tn=["*/"]+["*"];try{cn=s.href}catch(Nn){cn=i.createElement("a"),cn.href="",cn=cn.href}ln=wn.exec(cn.toLowerCase())||[],v.fn.load=function(e,n,r){if(typeof e!="string"&&En)return En.apply(this,arguments);if(!this.length)return this;var i,s,o,u=this,a=e.indexOf(" ");return a>=0&&(i=e.slice(a,e.length),e=e.slice(0,a)),v.isFunction(n)?(r=n,n=t):n&&typeof n=="object"&&(s="POST"),v.ajax({url:e,type:s,dataType:"html",data:n,complete:function(e,t){r&&u.each(r,o||[e.responseText,t,e])}}).done(function(e){o=arguments,u.html(i?v("<div>").append(e.replace(yn,"")).find(i):e)}),this},v.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,t){v.fn[t]=function(e){return this.on(t,e)}}),v.each(["get","post"],function(e,n){v[n]=function(e,r,i,s){return v.isFunction(r)&&(s=s||i,i=r,r=t),v.ajax({type:n,url:e,data:r,success:i,dataType:s})}}),v.extend({getScript:function(e,n){return v.get(e,t,n,"script")},getJSON:function(e,t,n){return v.get(e,t,n,"json")},ajaxSetup:function(e,t){return t?Ln(e,v.ajaxSettings):(t=e,e=v.ajaxSettings),Ln(e,t),e},ajaxSettings:{url:cn,isLocal:dn.test(ln[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":Tn},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":v.parseJSON,"text xml":v.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:Cn(Sn),ajaxTransport:Cn(xn),ajax:function(e,n){function T(e,n,s,a){var l,y,b,w,S,T=n;if(E===2)return;E=2,u&&clearTimeout(u),o=t,i=a||"",x.readyState=e>0?4:0,s&&(w=An(c,x,s));if(e>=200&&e<300||e===304)c.ifModified&&(S=x.getResponseHeader("Last-Modified"),S&&(v.lastModified[r]=S),S=x.getResponseHeader("Etag"),S&&(v.etag[r]=S)),e===304?(T="notmodified",l=!0):(l=On(c,w),T=l.state,y=l.data,b=l.error,l=!b);else{b=T;if(!T||e)T="error",e<0&&(e=0)}x.status=e,x.statusText=(n||T)+"",l?d.resolveWith(h,[y,T,x]):d.rejectWith(h,[x,T,b]),x.statusCode(g),g=t,f&&p.trigger("ajax"+(l?"Success":"Error"),[x,c,l?y:b]),m.fireWith(h,[x,T]),f&&(p.trigger("ajaxComplete",[x,c]),--v.active||v.event.trigger("ajaxStop"))}typeof e=="object"&&(n=e,e=t),n=n||{};var r,i,s,o,u,a,f,l,c=v.ajaxSetup({},n),h=c.context||c,p=h!==c&&(h.nodeType||h instanceof v)?v(h):v.event,d=v.Deferred(),m=v.Callbacks("once memory"),g=c.statusCode||{},b={},w={},E=0,S="canceled",x={readyState:0,setRequestHeader:function(e,t){if(!E){var n=e.toLowerCase();e=w[n]=w[n]||e,b[e]=t}return this},getAllResponseHeaders:function(){return E===2?i:null},getResponseHeader:function(e){var n;if(E===2){if(!s){s={};while(n=pn.exec(i))s[n[1].toLowerCase()]=n[2]}n=s[e.toLowerCase()]}return n===t?null:n},overrideMimeType:function(e){return E||(c.mimeType=e),this},abort:function(e){return e=e||S,o&&o.abort(e),T(0,e),this}};d.promise(x),x.success=x.done,x.error=x.fail,x.complete=m.add,x.statusCode=function(e){if(e){var t;if(E<2)for(t in e)g[t]=[g[t],e[t]];else t=e[x.status],x.always(t)}return this},c.url=((e||c.url)+"").replace(hn,"").replace(mn,ln[1]+"//"),c.dataTypes=v.trim(c.dataType||"*").toLowerCase().split(y),c.crossDomain==null&&(a=wn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===ln[1]&&a[2]===ln[2]&&(a[3]||(a[1]==="http:"?80:443))==(ln[3]||(ln[1]==="http:"?80:443)))),c.data&&c.processData&&typeof c.data!="string"&&(c.data=v.param(c.data,c.traditional)),kn(Sn,c,n,x);if(E===2)return x;f=c.global,c.type=c.type.toUpperCase(),c.hasContent=!vn.test(c.type),f&&v.active++===0&&v.event.trigger("ajaxStart");if(!c.hasContent){c.data&&(c.url+=(gn.test(c.url)?"&":"?")+c.data,delete c.data),r=c.url;if(c.cache===!1){var N=v.now(),C=c.url.replace(bn,"$1_="+N);c.url=C+(C===c.url?(gn.test(c.url)?"&":"?")+"_="+N:"")}}(c.data&&c.hasContent&&c.contentType!==!1||n.contentType)&&x.setRequestHeader("Content-Type",c.contentType),c.ifModified&&(r=r||c.url,v.lastModified[r]&&x.setRequestHeader("If-Modified-Since",v.lastModified[r]),v.etag[r]&&x.setRequestHeader("If-None-Match",v.etag[r])),x.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+(c.dataTypes[0]!=="*"?", "+Tn+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)x.setRequestHeader(l,c.headers[l]);if(!c.beforeSend||c.beforeSend.call(h,x,c)!==!1&&E!==2){S="abort";for(l in{success:1,error:1,complete:1})x[l](c[l]);o=kn(xn,c,n,x);if(!o)T(-1,"No Transport");else{x.readyState=1,f&&p.trigger("ajaxSend",[x,c]),c.async&&c.timeout>0&&(u=setTimeout(function(){x.abort("timeout")},c.timeout));try{E=1,o.send(b,T)}catch(k){if(!(E<2))throw k;T(-1,k)}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var Mn=[],_n=/\?/,Dn=/(=)\?(?=&|$)|\?\?/,Pn=v.now();v.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Mn.pop()||v.expando+"_"+Pn++;return this[e]=!0,e}}),v.ajaxPrefilter("json jsonp",function(n,r,i){var s,o,u,a=n.data,f=n.url,l=n.jsonp!==!1,c=l&&Dn.test(f),h=l&&!c&&typeof a=="string"&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Dn.test(a);if(n.dataTypes[0]==="jsonp"||c||h)return s=n.jsonpCallback=v.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,o=e[s],c?n.url=f.replace(Dn,"$1"+s):h?n.data=a.replace(Dn,"$1"+s):l&&(n.url+=(_n.test(f)?"&":"?")+n.jsonp+"="+s),n.converters["script json"]=function(){return u||v.error(s+" was not called"),u[0]},n.dataTypes[0]="json",e[s]=function(){u=arguments},i.always(function(){e[s]=o,n[s]&&(n.jsonpCallback=r.jsonpCallback,Mn.push(s)),u&&v.isFunction(o)&&o(u[0]),u=o=t}),"script"}),v.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){return v.globalEval(e),e}}}),v.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),v.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=i.head||i.getElementsByTagName("head")[0]||i.documentElement;return{send:function(s,o){n=i.createElement("script"),n.async="async",e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,i){if(i||!n.readyState||/loaded|complete/.test(n.readyState))n.onload=n.onreadystatechange=null,r&&n.parentNode&&r.removeChild(n),n=t,i||o(200,"success")},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(0,1)}}}});var Hn,Bn=e.ActiveXObject?function(){for(var e in Hn)Hn[e](0,1)}:!1,jn=0;v.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&Fn()||In()}:Fn,function(e){v.extend(v.support,{ajax:!!e,cors:!!e&&"withCredentials"in e})}(v.ajaxSettings.xhr()),v.support.ajax&&v.ajaxTransport(function(n){if(!n.crossDomain||v.support.cors){var r;return{send:function(i,s){var o,u,a=n.xhr();n.username?a.open(n.type,n.url,n.async,n.username,n.password):a.open(n.type,n.url,n.async);if(n.xhrFields)for(u in n.xhrFields)a[u]=n.xhrFields[u];n.mimeType&&a.overrideMimeType&&a.overrideMimeType(n.mimeType),!n.crossDomain&&!i["X-Requested-With"]&&(i["X-Requested-With"]="XMLHttpRequest");try{for(u in i)a.setRequestHeader(u,i[u])}catch(f){}a.send(n.hasContent&&n.data||null),r=function(e,i){var u,f,l,c,h;try{if(r&&(i||a.readyState===4)){r=t,o&&(a.onreadystatechange=v.noop,Bn&&delete Hn[o]);if(i)a.readyState!==4&&a.abort();else{u=a.status,l=a.getAllResponseHeaders(),c={},h=a.responseXML,h&&h.documentElement&&(c.xml=h);try{c.text=a.responseText}catch(p){}try{f=a.statusText}catch(p){f=""}!u&&n.isLocal&&!n.crossDomain?u=c.text?200:404:u===1223&&(u=204)}}}catch(d){i||s(-1,d)}c&&s(u,f,c,l)},n.async?a.readyState===4?setTimeout(r,0):(o=++jn,Bn&&(Hn||(Hn={},v(e).unload(Bn)),Hn[o]=r),a.onreadystatechange=r):r()},abort:function(){r&&r(0,1)}}}});var qn,Rn,Un=/^(?:toggle|show|hide)$/,zn=new RegExp("^(?:([-+])=|)("+m+")([a-z%]*)$","i"),Wn=/queueHooks$/,Xn=[Gn],Vn={"*":[function(e,t){var n,r,i=this.createTween(e,t),s=zn.exec(t),o=i.cur(),u=+o||0,a=1,f=20;if(s){n=+s[2],r=s[3]||(v.cssNumber[e]?"":"px");if(r!=="px"&&u){u=v.css(i.elem,e,!0)||n||1;do a=a||".5",u/=a,v.style(i.elem,e,u+r);while(a!==(a=i.cur()/o)&&a!==1&&--f)}i.unit=r,i.start=u,i.end=s[1]?u+(s[1]+1)*n:n}return i}]};v.Animation=v.extend(Kn,{tweener:function(e,t){v.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;r<i;r++)n=e[r],Vn[n]=Vn[n]||[],Vn[n].unshift(t)},prefilter:function(e,t){t?Xn.unshift(e):Xn.push(e)}}),v.Tween=Yn,Yn.prototype={constructor:Yn,init:function(e,t,n,r,i,s){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=s||(v.cssNumber[n]?"":"px")},cur:function(){var e=Yn.propHooks[this.prop];return e&&e.get?e.get(this):Yn.propHooks._default.get(this)},run:function(e){var t,n=Yn.propHooks[this.prop];return this.options.duration?this.pos=t=v.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Yn.propHooks._default.set(this),this}},Yn.prototype.init.prototype=Yn.prototype,Yn.propHooks={_default:{get:function(e){var t;return e.elem[e.prop]==null||!!e.elem.style&&e.elem.style[e.prop]!=null?(t=v.css(e.elem,e.prop,!1,""),!t||t==="auto"?0:t):e.elem[e.prop]},set:function(e){v.fx.step[e.prop]?v.fx.step[e.prop](e):e.elem.style&&(e.elem.style[v.cssProps[e.prop]]!=null||v.cssHooks[e.prop])?v.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},Yn.propHooks.scrollTop=Yn.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},v.each(["toggle","show","hide"],function(e,t){var n=v.fn[t];v.fn[t]=function(r,i,s){return r==null||typeof r=="boolean"||!e&&v.isFunction(r)&&v.isFunction(i)?n.apply(this,arguments):this.animate(Zn(t,!0),r,i,s)}}),v.fn.extend({fadeTo:function(e,t,n,r){return this.filter(Gt).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=v.isEmptyObject(e),s=v.speed(t,n,r),o=function(){var t=Kn(this,v.extend({},e),s);i&&t.stop(!0)};return i||s.queue===!1?this.each(o):this.queue(s.queue,o)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return typeof e!="string"&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=e!=null&&e+"queueHooks",s=v.timers,o=v._data(this);if(n)o[n]&&o[n].stop&&i(o[n]);else for(n in o)o[n]&&o[n].stop&&Wn.test(n)&&i(o[n]);for(n=s.length;n--;)s[n].elem===this&&(e==null||s[n].queue===e)&&(s[n].anim.stop(r),t=!1,s.splice(n,1));(t||!r)&&v.dequeue(this,e)})}}),v.each({slideDown:Zn("show"),slideUp:Zn("hide"),slideToggle:Zn("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){v.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),v.speed=function(e,t,n){var r=e&&typeof e=="object"?v.extend({},e):{complete:n||!n&&t||v.isFunction(e)&&e,duration:e,easing:n&&t||t&&!v.isFunction(t)&&t};r.duration=v.fx.off?0:typeof r.duration=="number"?r.duration:r.duration in v.fx.speeds?v.fx.speeds[r.duration]:v.fx.speeds._default;if(r.queue==null||r.queue===!0)r.queue="fx";return r.old=r.complete,r.complete=function(){v.isFunction(r.old)&&r.old.call(this),r.queue&&v.dequeue(this,r.queue)},r},v.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},v.timers=[],v.fx=Yn.prototype.init,v.fx.tick=function(){var e,n=v.timers,r=0;qn=v.now();for(;r<n.length;r++)e=n[r],!e()&&n[r]===e&&n.splice(r--,1);n.length||v.fx.stop(),qn=t},v.fx.timer=function(e){e()&&v.timers.push(e)&&!Rn&&(Rn=setInterval(v.fx.tick,v.fx.interval))},v.fx.interval=13,v.fx.stop=function(){clearInterval(Rn),Rn=null},v.fx.speeds={slow:600,fast:200,_default:400},v.fx.step={},v.expr&&v.expr.filters&&(v.expr.filters.animated=function(e){return v.grep(v.timers,function(t){return e===t.elem}).length});var er=/^(?:body|html)$/i;v.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){v.offset.setOffset(this,e,t)});var n,r,i,s,o,u,a,f={top:0,left:0},l=this[0],c=l&&l.ownerDocument;if(!c)return;return(r=c.body)===l?v.offset.bodyOffset(l):(n=c.documentElement,v.contains(n,l)?(typeof l.getBoundingClientRect!="undefined"&&(f=l.getBoundingClientRect()),i=tr(c),s=n.clientTop||r.clientTop||0,o=n.clientLeft||r.clientLeft||0,u=i.pageYOffset||n.scrollTop,a=i.pageXOffset||n.scrollLeft,{top:f.top+u-s,left:f.left+a-o}):f)},v.offset={bodyOffset:function(e){var t=e.offsetTop,n=e.offsetLeft;return v.support.doesNotIncludeMarginInBodyOffset&&(t+=parseFloat(v.css(e,"marginTop"))||0,n+=parseFloat(v.css(e,"marginLeft"))||0),{top:t,left:n}},setOffset:function(e,t,n){var r=v.css(e,"position");r==="static"&&(e.style.position="relative");var i=v(e),s=i.offset(),o=v.css(e,"top"),u=v.css(e,"left"),a=(r==="absolute"||r==="fixed")&&v.inArray("auto",[o,u])>-1,f={},l={},c,h;a?(l=i.position(),c=l.top,h=l.left):(c=parseFloat(o)||0,h=parseFloat(u)||0),v.isFunction(t)&&(t=t.call(e,n,s)),t.top!=null&&(f.top=t.top-s.top+c),t.left!=null&&(f.left=t.left-s.left+h),"using"in t?t.using.call(e,f):i.css(f)}},v.fn.extend({position:function(){if(!this[0])return;var e=this[0],t=this.offsetParent(),n=this.offset(),r=er.test(t[0].nodeName)?{top:0,left:0}:t.offset();return n.top-=parseFloat(v.css(e,"marginTop"))||0,n.left-=parseFloat(v.css(e,"marginLeft"))||0,r.top+=parseFloat(v.css(t[0],"borderTopWidth"))||0,r.left+=parseFloat(v.css(t[0],"borderLeftWidth"))||0,{top:n.top-r.top,left:n.left-r.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||i.body;while(e&&!er.test(e.nodeName)&&v.css(e,"position")==="static")e=e.offsetParent;return e||i.body})}}),v.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);v.fn[e]=function(i){return v.access(this,function(e,i,s){var o=tr(e);if(s===t)return o?n in o?o[n]:o.document.documentElement[i]:e[i];o?o.scrollTo(r?v(o).scrollLeft():s,r?s:v(o).scrollTop()):e[i]=s},e,i,arguments.length,null)}}),v.each({Height:"height",Width:"width"},function(e,n){v.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){v.fn[i]=function(i,s){var o=arguments.length&&(r||typeof i!="boolean"),u=r||(i===!0||s===!0?"margin":"border");return v.access(this,function(n,r,i){var s;return v.isWindow(n)?n.document.documentElement["client"+e]:n.nodeType===9?(s=n.documentElement,Math.max(n.body["scroll"+e],s["scroll"+e],n.body["offset"+e],s["offset"+e],s["client"+e])):i===t?v.css(n,r,i,u):v.style(n,r,i,u)},n,o?i:t,o,null)}})}),e.jQuery=e.$=v,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return v})})(window); \ No newline at end of file From 377fdd94aa93b54ec39cf3242081c7cad6a8d576 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Mon, 2 Jul 2018 07:18:42 +0900 Subject: [PATCH 319/339] =?UTF-8?q?=E9=81=8E=E5=8E=BB=E3=83=AD=E3=82=B0?= =?UTF-8?q?=E3=81=AE=E5=8F=96=E3=82=8A=E8=BE=BC=E3=81=BF=E3=82=92strpos?= =?UTF-8?q?=E3=81=AB=E6=9B=B8=E3=81=8D=E6=8F=9B=E3=81=88=20read.cgi?= =?UTF-8?q?=E3=81=ABrep2=E3=81=AEUA=E3=81=A7=E3=82=A2=E3=82=AF=E3=82=BB?= =?UTF-8?q?=E3=82=B9=E3=81=99=E3=82=8B=E3=81=A8=E5=BC=BE=E3=81=8B=E3=82=8C?= =?UTF-8?q?=E3=82=8B=E3=82=B5=E3=82=A4=E3=83=88=E3=81=8C=E3=81=82=E3=82=8B?= =?UTF-8?q?=E3=81=AE=E3=81=A7=E5=AF=BE=E5=87=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 64 +++++++++++++++++++--------------------------- 1 file changed, 26 insertions(+), 38 deletions(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index fa68c5d10..4de1ef696 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -654,7 +654,7 @@ public function get2chDatError($code = null) { $read_response_html = ''; if (! $reason) { - $read_response_html = self::getReadCGIHtml($read_url); + $read_response_html = $this->getReadCGIHtml($read_url); } // }}} @@ -667,18 +667,18 @@ public function get2chDatError($code = null) { $kakosoko_match = "/���̃X���b�h�͉ߋ����O�q�ɂɊi.{1,2}����Ă��܂�/"; $kakosoko_match2 = "/http:\/\/turing1000\.nttec\.com\/?(403|404|500)\.dat/"; - $naidesu_match = "/<title>����Ȕ�or�X���b�h�Ȃ��ł��B<\/title>/"; + $naidesu_str = "<title>����Ȕ�or�X���b�h�Ȃ��ł��B"; // 0�����˂�X�N���v�g�ɔ�������悤�� - $soukoni_match = "/�����I�ߋ����O�q�ɂ�<\/title>/"; + $soukoni_str = "<title>�����I�ߋ����O�q�ɂ�"; - $error3001_match = "{�Q�����˂� error 3001}"; // �ߋ����O�q�ɂ�html���̎��i���ɂ����邩���A�悭�m��Ȃ��j - $error3939_match = "{�Q�����˂� error 3939}"; // �ߋ����O�q�ɂ�html���̎��i���ɂ����邩���A�悭�m��Ȃ��j - $error4002_match = "{�Q�����˂� error 4002}"; // �ߋ����O�q�ɂ�html���̎��i���ɂ����邩���A�悭�m��Ȃ��j + $error3001_str = "�Q�����˂� error 3001"; // �ߋ����O�q�ɂ�html���̎��i���ɂ����邩���A�悭�m��Ȃ��j + $error3939_str = "�Q�����˂� error 3939"; // �ߋ����O�q�ɂ�html���̎��i���ɂ����邩���A�悭�m��Ȃ��j + $error4002_str = "�Q�����˂� error 4002"; // �ߋ����O�q�ɂ�html���̎��i���ɂ����邩���A�悭�m��Ȃ��j - $sw2_match = "/Something went wrong/"; + $sw2_str = "Something went wrong"; - $vip2ch_ssr_match = "/�����I�V�݂��ꂽSS����R�‚ɂăX���𔭌������ł���I/"; + $vip2ch_ssr_str = "�����I�V�݂��ꂽSS����R�‚ɂăX���𔭌������ł���I"; // // @@ -695,15 +695,15 @@ public function get2chDatError($code = null) { $dat_response_msg = "

    2ch info - ���̃X���b�h�͉ߋ����O�q�ɂɊi�[����Ă��܂��B�Q�l���O�C������Ǝ擾�o���邩������܂���B{$plugin_ht}

    "; // ������Ȕ�or�X���b�h�Ȃ��ł��Bor error 3939 - } elseif ($reason === 'kakohtml' or - preg_match ($naidesu_match, $read_response_html, $matches) || - preg_match ($error3001_match, $read_response_html, $matches) || - preg_match ($error3939_match, $read_response_html, $matches) || - preg_match ($error4002_match, $read_response_html, $matches) || - preg_match ($sw2_match, $read_response_html, $matches) || + } elseif ($reason === 'kakohtml' || preg_match ($vip2ch_kakosoko_match, $read_response_html, $matches) || - preg_match ($vip2ch_ssr_match, $read_response_html, $matches) || - preg_match ($soukoni_match, $read_response_html, $matches)) { + mb_strpos ($read_response_html, $naidesu_str) !== false || + mb_strpos ($read_response_html, $error3001_str) !== false || + mb_strpos ($read_response_html, $error3939_str) !== false || + mb_strpos ($read_response_html, $error4002_str) !== false || + mb_strpos ($read_response_html, $sw2_str) !== false || + mb_strpos ($read_response_html, $vip2ch_ssr_str) !== false || + mb_strpos ($read_response_html, $soukoni_str) !== false) { if ($reason === 'kakohtml' or preg_match ($kakohtml_match, $read_response_html, $matches)) { if ($reason === 'kakohtml') { @@ -714,7 +714,9 @@ public function get2chDatError($code = null) { $kakolog_url_en = rawurlencode ($kakolog_uri); $read_kako_url = "{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&kakolog={$kakolog_url_en}&kakoget=1"; $dat_response_msg = "<p>2ch info - ����! �ߋ����O�q�ɂŁA<a href=\"{$kakolog_uri}.html\"{$_conf['bbs_win_target_at']}>�X���b�h {$matches[3]}.html</a> �𔭌����܂����B [<a href=\"{$read_kako_url}\">rep2�Ɏ�荞��œǂ�</a>]</p>"; - } elseif (preg_match ($error3001_match, $read_response_html, $matches)) { + } elseif (mb_strpos ($read_response_html, $error3001_str) !== false || + mb_strpos ($read_response_html, $error3939_str) !== false || + mb_strpos ($read_response_html, $error4002_str) !== false) { $dat_response_status = "����! �ߋ����O�q�ɂŁAhtml�����ꂽ�X���b�h�𔭌����܂����B"; $key4 = substr($this->key, 0, 4); $key5 = substr($this->key, 0, 5); @@ -722,23 +724,7 @@ public function get2chDatError($code = null) { $kakolog_url_en = rawurlencode ($kakolog_uri); $read_kako_url = "{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&kakolog={$kakolog_url_en}&kakoget=1"; $dat_response_msg = "<p>2ch info - ����! �ߋ����O�q�ɂŁA<a href=\"{$kakolog_uri}.html\"{$_conf['bbs_win_target_at']}>�X���b�h {$this->key}.html</a> �𔭌����܂����B [<a href=\"{$read_kako_url}\">rep2�Ɏ�荞��œǂ�</a>]</p>"; - } elseif (preg_match ($error3939_match, $read_response_html, $matches)) { - $dat_response_status = "����! �ߋ����O�q�ɂŁAhtml�����ꂽ�X���b�h�𔭌����܂����B"; - $key4 = substr($this->key, 0, 4); - $key5 = substr($this->key, 0, 5); - $kakolog_uri = "http://{$this->host}/{$this->bbs}/kako/{$key4}/{$key5}/{$this->key}"; - $kakolog_url_en = rawurlencode ($kakolog_uri); - $read_kako_url = "{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&kakolog={$kakolog_url_en}&kakoget=1"; - $dat_response_msg = "<p>2ch info - ����! �ߋ����O�q�ɂŁA<a href=\"{$kakolog_uri}.html\"{$_conf['bbs_win_target_at']}>�X���b�h {$this->key}.html</a> �𔭌����܂����B [<a href=\"{$read_kako_url}\">rep2�Ɏ�荞��œǂ�</a>]</p>"; - } elseif (preg_match ($error4002_match, $read_response_html, $matches)) { - $dat_response_status = "����! �ߋ����O�q�ɂŁAhtml�����ꂽ�X���b�h�𔭌����܂����B"; - $key4 = substr($this->key, 0, 4); - $key5 = substr($this->key, 0, 5); - $kakolog_uri = "http://{$this->host}/{$this->bbs}/kako/{$key4}/{$key5}/{$this->key}"; - $kakolog_url_en = rawurlencode ($kakolog_uri); - $read_kako_url = "{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&kakolog={$kakolog_url_en}&kakoget=1"; - $dat_response_msg = "<p>2ch info - ����! �ߋ����O�q�ɂŁA<a href=\"{$kakolog_uri}.html\"{$_conf['bbs_win_target_at']}>�X���b�h {$this->key}.html</a> �𔭌����܂����B [<a href=\"{$read_kako_url}\">rep2�Ɏ�荞��œǂ�</a>]</p>"; - } elseif (preg_match ($sw2_match, $read_response_html, $matches)) { + } elseif (mb_strpos ($read_response_html, $sw2_str) !== false) { $dat_response_msg = "<p>2ch info - dat����ł����B[$read_response_html]</p>"; } elseif (preg_match ($waithtml_match, $read_response_html, $matches)) { $dat_response_status = "����! �X���b�h��html�������̂�҂��Ă���悤�ł��B"; @@ -751,7 +737,7 @@ public function get2chDatError($code = null) { $kakolog_url_en = rawurlencode ($kakolog_uri); $read_kako_url = "{$_conf['read_php']}?host={$this->host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&kakolog={$kakolog_url_en}&kakoget=1"; $dat_response_msg = "<p>2ch info - ����! �ߋ����O�q�ɂŁA<a href=\"{$kakolog_uri}.html\"{$_conf['bbs_win_target_at']}>�X���b�h {$this->key}.html</a> �𔭌����܂����B [<a href=\"{$read_kako_url}\">rep2�Ɏ�荞��œǂ�</a>]</p>"; - } elseif (preg_match ($vip2ch_ssr_match, $read_response_html, $matches)) { + } elseif (mb_strpos ($read_response_html, $vip2ch_ssr_str) !== false) { $dat_response_status = "����! �V�݂��ꂽSS����R�‚ɂăX���𔭌������ł���!"; $movelog_uri = str_replace("news4ssnip", "news4ssr", $read_url); $movelog_url_en = rawurlencode ($movelog_uri); @@ -861,7 +847,9 @@ public function getReadCGIHtml($read_url) { try { $req = P2Commun::createHTTPRequest ($read_url.'1', HTTP_Request2::METHOD_GET); // �w�b�_ - $req->setHeader ('User-Agent', P2Commun::getP2UA(false,P2HostMgr::isHost2chs($this->host))); // �����́A"Monazilla/" ���‚����NG + // $req->setHeader ('User-Agent', P2Commun::getP2UA(false,P2HostMgr::isHost2chs($this->host))); // �����́A"Monazilla/" ���‚����NG + // read.cgi��rep2��UA�ŃA�N�Z�X����ƒe�����T�C�g������̂őΏ� + $req->setHeader ('User-Agent', $_SERVER['HTTP_USER_AGENT']); // Request�̑��M $response = P2Commun::getHTTPResponse($req); @@ -871,14 +859,14 @@ public function getReadCGIHtml($read_url) { if ($res_code == '200' || $res_code == '206') { // Partial Content $read_response_html = $response->getBody (); } elseif ($res_code == '301' && P2HostMgr::isHost2ch ($this->host)) { - $read_response_html = self::getReadCGIHtml($response->getHeader ("Location")); + $read_response_html = $this->getReadCGIHtml($response->getHeader ("Location")); } elseif ($res_code == '302' || preg_match ($test403, $response->getBody (), $test403)) { $read_response_html = $response->getBody (); } elseif ($res_code == '500' || preg_match ($testsw2, $response->getBody (), $testsw2)) { $read_response_html = $response->getBody (); } else { $url_t = P2Util::throughIme ($read_url); - $info_msg_ht = "<p class=\"info-msg\">Error: {$code}<br>"; + $info_msg_ht = "<p class=\"info-msg\">Error: {$res_code}<br>"; $info_msg_ht .= "rep2 info: <a href=\"{$url_t}\"{$_conf['ext_win_target_at']}>{$read_url}</a> ��HTML���擾�o���܂���ł����B</p>"; P2Util::pushInfoHtml ($info_msg_ht); } From 799da7a5a228d9e0e1112531b096f99914aaebcf Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Tue, 3 Jul 2018 22:02:38 +0900 Subject: [PATCH 320/339] =?UTF-8?q?live=5Fpost=5Fform.php=E3=81=ABjquery?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/live_post_form.php | 1 + 1 file changed, 1 insertion(+) diff --git a/rep2/live_post_form.php b/rep2/live_post_form.php index 23b5bdeef..5c934622b 100755 --- a/rep2/live_post_form.php +++ b/rep2/live_post_form.php @@ -106,6 +106,7 @@ if (!$_conf['ktai']) { echo <<<EOP + <script type="text/javascript" src="js/jquery-{$_conf['jquery_version']}.min.js"></script> <link rel="stylesheet" type="text/css" href="css.php?css=style&skin={$skin_en}"> <link rel="stylesheet" type="text/css" href="css.php?css=post&skin={$skin_en}">\n EOP; From cf90d948f285276a683f4d6079becfc73c529d7d Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Wed, 4 Jul 2018 00:29:26 +0900 Subject: [PATCH 321/339] =?UTF-8?q?=E3=82=B9=E3=83=AC=E3=81=AB=E3=82=A2?= =?UTF-8?q?=E3=82=AF=E3=82=BB=E3=82=B9=E3=81=99=E3=82=8B=E5=BA=A6=E3=81=AB?= =?UTF-8?q?read.cgi=E3=82=92=E5=8F=A9=E3=81=8B=E3=81=AA=E3=81=84=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4=20=E9=81=8E=E5=8E=BB?= =?UTF-8?q?=E3=83=AD=E3=82=B0=E5=80=89=E5=BA=AB=E3=81=8B=E3=82=89=E5=8F=96?= =?UTF-8?q?=E3=82=8A=E8=BE=BC=E3=82=93=E3=81=A0DAT=E3=82=92=E5=86=8D?= =?UTF-8?q?=E3=83=80=E3=82=A6=E3=83=B3=E3=83=AD=E3=83=BC=E3=83=89=E3=81=97?= =?UTF-8?q?=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 4 ++++ lib/Thread.php | 3 ++- lib/ThreadRead.php | 24 ++++++++++++++++++++++++ lib/post_form_options.inc.php | 4 ++++ 4 files changed, 34 insertions(+), 1 deletion(-) diff --git a/lib/P2Util.php b/lib/P2Util.php index 407da87ac..2d7fb98fd 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -262,6 +262,10 @@ static public function cacheFileForDL($url) $cachefile = $_conf['cache_dir'] . '/' . $save_uri; + if(substr($cachefile, -1)=='/') { + $cachefile = substr($cachefile,0, -1); + } + FileCtl::mkdirFor($cachefile); return $cachefile; diff --git a/lib/Thread.php b/lib/Thread.php index d509e7bed..8e4657d5a 100644 --- a/lib/Thread.php +++ b/lib/Thread.php @@ -32,7 +32,7 @@ class Thread public $bbs; // ex)mac // idxline[11] public $itaj; // �–� ex)�V�Emac - public $datochiok; // DAT�����擾�����������true(1) // idxline[12] + public $datochiok; // �ߋ����O�����Ȃ�true(1) // idxline[12]�@// �g���Ă���`�Ղ������̂ōė��p public $torder; // �X���b�h�V�������ԍ� public $unum; // ���ǁi�V�����X�j�� @@ -359,6 +359,7 @@ public function getThreadInfoFromIdx() $this->fav = (int)$lar[6]; // ������bool�łȂ� + // �ߋ����O��荞�ݍσt���O if (isset($lar[12])) { $this->datochiok = $lar[12]; } diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 4de1ef696..dc61ca866 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -46,6 +46,10 @@ public function __construct() { public function downloadDat() { global $_conf; + // �ߋ����O�����̏ꍇ�������Ȃ� + if($this->datochiok) { + return true; + } // �܂�BBS if (P2HostMgr::isHostMachiBbs ($this->host)) { return DownloadDatMachiBbs::invoke ($this); @@ -578,6 +582,9 @@ protected function _downloadDat2chKako($uri, $ext) { p2die ('cannot write file. downloadDat2chMaru()'); } + // �ߋ����O�����t���O�𗧂Ă� (idxline[12]�ɕۑ������) + $this->datochiok = true; + return true; } elseif ($code == '304') { return '304 Not Modified'; @@ -844,6 +851,17 @@ public function getReadCGIHtml($read_url) { $test403 = "/403\.dat/"; $testsw2 = "/Something went wrong/"; + $cache_file = P2Util::cacheFileForDL($read_url); + // ���j���[��10�{�L���b�V������ + $cache_time = $_conf['menu_dl_interval'] * 36000; + + if (file_exists($cache_file)) { + // �L���b�V���L�����ԂȂ�_�E�����[�h���Ȃ� + if (filemtime($cache_file) > time() - $cache_time) { + return FileCtl::file_read_contents($cache_file); + } + } + try { $req = P2Commun::createHTTPRequest ($read_url.'1', HTTP_Request2::METHOD_GET); // �w�b�_ @@ -870,6 +888,12 @@ public function getReadCGIHtml($read_url) { $info_msg_ht .= "rep2 info: <a href=\"{$url_t}\"{$_conf['ext_win_target_at']}>{$read_url}</a> ��HTML���擾�o���܂���ł����B</p>"; P2Util::pushInfoHtml ($info_msg_ht); } + + if(isset($read_response_html)) { + if (FileCtl::file_write_contents($cache_file, $read_response_html) === false) { + p2die('cannot write file.'.$cache_file); + } + } } catch (Exception $e) { $this->getdat_error_msg_ht .= "<p>�T�[�o�ڑ��G���[: " . $e->getMessage (); $this->getdat_error_msg_ht .= "<br>rep2 error: �ƒT�[�o�ւ̐ڑ��Ɏ��s���܂����B</p>"; diff --git a/lib/post_form_options.inc.php b/lib/post_form_options.inc.php index 0b5618904..de5649ef9 100644 --- a/lib/post_form_options.inc.php +++ b/lib/post_form_options.inc.php @@ -336,11 +336,15 @@ function setHiddenValue(button) { $upload_form = ''; $upload_mode = null; +/* if (!$_conf['ktai'] || $_conf['iphone']) { if (file_exists($_conf['dropbox_auth_json'])) { $upload_mode = 'dropbox'; } } +*/ + +$upload_mode = 'imgur'; if ($upload_mode !== null) { if ($_conf['ktai'] || $_conf['iphone']) { From 142ed43d1ae09fdf26ab0cd83da867d209bcb352 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Thu, 5 Jul 2018 13:00:58 +0900 Subject: [PATCH 322/339] =?UTF-8?q?=E9=81=8E=E5=8E=BB=E3=83=AD=E3=82=B0?= =?UTF-8?q?=E5=8F=96=E3=82=8A=E8=BE=BC=E3=81=BF=E6=99=82=E3=81=ABIf-Modifi?= =?UTF-8?q?ed-Since=E3=82=92=E9=80=81=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index dc61ca866..20e371d6b 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -566,6 +566,10 @@ protected function _downloadDat2chKako($uri, $ext) { try { $req = P2Commun::createHTTPRequest ($url, HTTP_Request2::METHOD_GET); + if ($this->modified) { + $req->setHeader ('If-Modified-Since', $this->modified); + } + // Request�̑��M $response = P2Commun::getHTTPResponse($req); From 64735587118a6e1807d71cf9c142f4f00b6c37db Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Thu, 5 Jul 2018 13:01:38 +0900 Subject: [PATCH 323/339] =?UTF-8?q?=E6=9C=AA=E4=BD=BF=E7=94=A8=E3=81=AE?= =?UTF-8?q?=E5=A4=89=E6=95=B0=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/fetch-dat.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/fetch-dat.php b/scripts/fetch-dat.php index 41f68deb5..e553d36ac 100644 --- a/scripts/fetch-dat.php +++ b/scripts/fetch-dat.php @@ -139,7 +139,7 @@ // �X�����擾 ============================= if (isset($subject_txts[$subject_id])) { - $it = 1; + $thread_key = (string)$aThread->key; $thread_key_len = strlen($thread_key); foreach ($subject_txts[$subject_id] as $l) { @@ -148,7 +148,6 @@ $aThread->getThreadInfoFromSubjectTxtLine($l); break; } - $it++; } } From e0308371bfd91255dad6916121349d500d2b4ee9 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Thu, 5 Jul 2018 13:03:05 +0900 Subject: [PATCH 324/339] v180705.1300 --- conf/conf.inc.php | 2 +- doc/README-774.txt | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index c6c03b1a8..d037ef844 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '171122.1500', // rep2�̃o�[�W���� + 'p2version' => '180705.1300', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/doc/README-774.txt b/doc/README-774.txt index bb5e6159d..fdbcf19ac 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -72,6 +72,15 @@ PHP7 ��ChangeLog +180705.1300 +* 2ch��API�������ꂽ�̂Őڑ����5ch�ɕύX +* api.5ch.net�̃��X�|���X�w�b�_�[��Content-Length���t���Ȃ��s��ɑΉ� +* composer.json���C�����ĐV�K�C���X�g�[�����̕s����C�� +* �������݂Ɏ��s�����ۂ̃G���[���b�Z�[�W��ύX +* DAT�����̌������m�F���邽�߂�read.cgi�A�N�Z�X���L���b�V������悤�ɕύX +* ���̃o�[�W�����ȍ~�ʼnߋ����O�q�ɂ����荞�񂾃X����DAT���Ď擾���Ȃ��悤�ɕύX +* IE11��IE6�����̃R�[�h�����s����ĉ������ۑ����@�\���Ȃ��s����C�� + 171122.1500 * itest(https://itest.5ch.net/�T�[�o�[/test/read.cgi/��/�X��)�̃����N���J���@�\��lj� * DAT�j���h�~�̂��߂ɋ��d�l��itest�������N���Ȃ��悤�ɕύX From 230461336ef40c0caf6388aa2250611c2869fe6d Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Sat, 21 Apr 2018 13:52:22 +0900 Subject: [PATCH 325/339] =?UTF-8?q?UR=20L=E3=82=B2=E3=83=BC=E3=83=88?= =?UTF-8?q?=E3=82=A6=E3=82=A7=E3=82=A4=E3=81=AB=20Hawker!=20=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf_user_def.inc.php | 1 + lib/P2Ime.php | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index f954f0b12..acefca2f0 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -476,6 +476,7 @@ 'exm' => 'gate.php (�蓮�]��)', 'expm' => 'gate.php (p�̂ݎ蓮�]��)', 'google' => 'Google', + 'hawker' => 'Hawker!(jump.x0.to)', ); // HTTPS�ŃA�N�Z�X���Ă���Ƃ��͊O��URL�Q�[�g��ʂ��Ȃ��iHTTPS�ł͒�:1, ��ɒʂ�:0�j diff --git a/lib/P2Ime.php b/lib/P2Ime.php index 103c4e3ec..e8fcd6d14 100644 --- a/lib/P2Ime.php +++ b/lib/P2Ime.php @@ -158,6 +158,12 @@ public function __construct($type = null, array $exceptions = null, $ignoreHttp } break; // }}} + // {{{ Hawker!(jump.x0.to) + case 'hawker': + $this->_method = '_throughHawkerGateway'; + $this->_gateUrl = '//jump.x0.to/'; + break; + // }}} default: $this->_method = '_passThrough'; $this->_gateUrl = null; @@ -248,6 +254,21 @@ protected function _throughGoogleGateway($url, $delay) return $this->_gateUrl . rawurlencode($url); } + // }}} + // {{{ _throughHawkerGateway() + + /** + * Hawker!��URL�Q�[�g�E�F�C��ʂ��悤��URL��ϊ����� + * + * @param string $url + * @param int $delay (unused) + * @return string + */ + protected function _throughHawkerGateway($url, $delay) + { + return $this->_gateUrl . $url; + } + // }}} // {{{ _passThrough() From c6aa2f89316ab95fd5d90db2bcba605ad943ffe3 Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Sun, 24 Jun 2018 22:23:04 +0900 Subject: [PATCH 326/339] =?UTF-8?q?fix=20http=E3=81=8C=E7=84=A1=E3=81=8F?= =?UTF-8?q?=E3=81=A6=E3=82=82cURLMulti=E3=81=8C=E4=BD=BF=E3=81=88=E3=82=8B?= =?UTF-8?q?=E3=81=AF=E3=81=9A=E3=81=AA=E3=81=AE=E3=81=A7=E3=83=81=E3=82=A7?= =?UTF-8?q?=E3=83=83=E3=82=AF=E3=82=92=E5=A4=89=E6=9B=B4=20(=E3=81=8B?= =?UTF-8?q?=E3=81=AA=E3=82=8A=E3=82=84=E3=81=A3=E3=81=A4=E3=81=91)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/fetch-subject-txt.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/fetch-subject-txt.php b/scripts/fetch-subject-txt.php index 4a3bc170f..5e8793e69 100644 --- a/scripts/fetch-subject-txt.php +++ b/scripts/fetch-subject-txt.php @@ -9,17 +9,17 @@ die('CLI only!'); } -if (!$_conf['expack.use_curl_multi'] && !$_conf['expack.use_pecl_http']) { - fwrite(STDERR, 'Setting of expack.use_curl_multi or expack.use_pecl_http is required.' . PHP_EOL); - exit(1); -} - define('P2_CLI_RUN', 1); define('P2_FETCH_SUBJECT_TXT_DEBUG', 0); define('P2_FETCH_SUBJECT_TXT_DEBUG_OUTPUT_FILE', '/tmp/p2_fetch_subject_txt.log'); require __DIR__ . '/../conf/conf.inc.php'; +if (!$_conf['expack.use_curl_multi'] && !$_conf['expack.use_pecl_http']) { + fwrite(STDERR, 'Setting of expack.use_curl_multi or expack.use_pecl_http is required.' . PHP_EOL); + exit(1); +} + P2HttpExt::activate(); // }}} From 985483a2f1f59eef2bd80e43f892b3b18f304518 Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Thu, 5 Jul 2018 22:38:52 +0900 Subject: [PATCH 327/339] =?UTF-8?q?API=20=E3=81=A7=E9=81=8E=E5=8E=BB?= =?UTF-8?q?=E3=83=AD=E3=82=B0=E5=88=A4=E5=AE=9A=E3=81=A0=E3=81=A3=E3=81=9F?= =?UTF-8?q?=E5=A0=B4=E5=90=88=E3=81=A7=E3=82=82=E9=81=8E=E5=8E=BB=E3=83=AD?= =?UTF-8?q?=E3=82=B0=E6=89=B1=E3=81=84=E3=83=95=E3=83=A9=E3=82=B0=E3=82=92?= =?UTF-8?q?=E7=AB=8B=E3=81=A6=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 20e371d6b..6b6a9ebc6 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -319,6 +319,11 @@ protected function _downloadDat2chAPI($uaMona, $SID2ch, $from_bytes) { // ���s�X���̎������Z�b�g $this->isonline = true; } + if ($apiThreadStatus == '3') { + // �ߋ����O�����t���O�𗧂Ă� (idxline[12]�ɕۑ������) + $this->datochiok = true; + } + return true; } elseif ($code == '302') { // Found // �z�X�g�̈ړ]��ǐ� From c52b26deced9a6532a44f560a6daa3fe33ddcda8 Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Thu, 5 Jul 2018 23:14:16 +0900 Subject: [PATCH 328/339] =?UTF-8?q?API=20=E3=81=A7=E9=81=8E=E5=8E=BB?= =?UTF-8?q?=E3=83=AD=E3=82=B0=E5=88=A4=E5=AE=9A=E3=81=A0=E3=81=A3=E3=81=9F?= =?UTF-8?q?=E5=A0=B4=E5=90=88=E3=81=A7=E3=82=82=E9=81=8E=E5=8E=BB=E3=83=AD?= =?UTF-8?q?=E3=82=B0=E6=89=B1=E3=81=84=E3=83=95=E3=83=A9=E3=82=B0=E3=82=92?= =?UTF-8?q?=E7=AB=8B=E3=81=A6=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 6b6a9ebc6..a5da8c28b 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -337,6 +337,10 @@ protected function _downloadDat2chAPI($uaMona, $SID2ch, $from_bytes) { } } elseif ($code == '304') { $this->isonline = true; + if ($apiThreadStatus == '3') { + // �ߋ����O�����t���O�𗧂Ă� (idxline[12]�ɕۑ������) + $this->datochiok = true; + } return '304 Not Modified'; } elseif ($code == '403') { $this->getdat_error_msg_ht .= "<p>rep2 error: CloudFlare�ɐڑ������ۂ��ꂽ���߁A�X���b�h�擾�Ɏ��s���܂����B�ݒ�̕ύX���������Ă��������B</p>"; From bb12bcf2f9967ec0bd1cbf4e41bc51d9d2962e26 Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Tue, 10 Jul 2018 03:30:59 +0900 Subject: [PATCH 329/339] =?UTF-8?q?fix=202ch.net=20=E3=81=A7=E3=82=82?= =?UTF-8?q?=E9=81=8E=E5=8E=BB=E3=83=AD=E3=82=B0=E5=80=89=E5=BA=AB=E3=82=92?= =?UTF-8?q?=E8=A6=8B=E3=81=AB=E8=A1=8C=E3=81=91=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E3=81=97=E3=81=9F=20=E9=81=B7=E7=A7=BB=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E3=81=8C=E5=A4=89=E3=82=8F=E3=81=A3=E3=81=9F=E3=81=AE?= =?UTF-8?q?=E3=81=A7=20Location=20=E3=83=98=E3=83=83=E3=83=80=E3=83=BC?= =?UTF-8?q?=E3=81=AE=E6=9C=89=E7=84=A1=E3=81=A7=E5=88=A4=E5=AE=9A=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index a5da8c28b..0e045addb 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -889,7 +889,7 @@ public function getReadCGIHtml($read_url) { if ($res_code == '200' || $res_code == '206') { // Partial Content $read_response_html = $response->getBody (); - } elseif ($res_code == '301' && P2HostMgr::isHost2ch ($this->host)) { + } elseif (!empty($response->getHeader ("Location")) && P2HostMgr::isHost2ch ($this->host)) { $read_response_html = $this->getReadCGIHtml($response->getHeader ("Location")); } elseif ($res_code == '302' || preg_match ($test403, $response->getBody (), $test403)) { $read_response_html = $response->getBody (); From c5cbc6387b69dd9c791252e089821a61d2bbed3a Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Tue, 16 Apr 2019 04:55:53 +0900 Subject: [PATCH 330/339] =?UTF-8?q?refind2ch=20=E3=81=AB=E5=AF=BE=E5=BF=9C?= =?UTF-8?q?=E3=80=80=20thx!=20http://egg.5ch.net/test/read.cgi/software/15?= =?UTF-8?q?40808160/423=20merged=20#21?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/refind2ch.php | 78 ++++++++++++++++++++++++++++++++++++++++++++++ rep2/tgrepc.php | 6 ++-- 2 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 rep2/refind2ch.php diff --git a/rep2/refind2ch.php b/rep2/refind2ch.php new file mode 100644 index 000000000..d56445ca3 --- /dev/null +++ b/rep2/refind2ch.php @@ -0,0 +1,78 @@ +<?php +function refind2ch_search ($query) +{ + parse_str($query, $query_arry); + + $q = $query_arry['q']; + + $base_url = 'https://refind2ch.org'; + $endpoint = $base_url . '/module/get_search'; + $referer = $base_url . '/search?q=' . urlencode($q); + + try { + $req = P2Commun::createHTTPRequest ($endpoint, HTTP_Request2::METHOD_POST); + $req->setHeader('Accept', 'application/json'); + $req->setHeader('Referer', $referer); + + $req->addPostParameter('q', $q); + $req->addPostParameter('p', 0); + $req->addPostParameter('pink', 0); + $req->addPostParameter('sort', 'false'); + $req->addPostParameter('alive', 'true'); + $req->addPostParameter('pl', 'false'); + $req->addPostParameter('b', 'false'); + + $response = P2Commun::getHTTPResponse($req); + + $code = $response->getStatus(); + if ($code != 200) { + p2die("HTTP Error - {$code}"); + } + + $body = $response->getBody(); + } catch (Exception $e) { + p2die($e->getMessage()); + } + + $threads = json_decode($body, true)['results']; + + $result = array(); + $boards = array(); + $hits = array(); + $names = array(); + + foreach ($threads as $n => $t) { + $host = parse_url($t['url'])['host']; + $bbs = explode('_', $t['board_key'])[1]; + + $result['threads'][$n] = new stdClass; + $result['threads'][$n]->title = $t['thread_title']; + $result['threads'][$n]->host = $host; + $result['threads'][$n]->bbs = $bbs; + $result['threads'][$n]->tkey = $t['created_at']; + $result['threads'][$n]->resnum = $t['res_num']; + $result['threads'][$n]->ita = $t['board_title']; + $result['threads'][$n]->dayres = $t['res_rate']; + + $bkey = md5($host.'-'.$bbs.'-'.$t['board_title']); + if (! isset($boards[$bkey])) { + $board = new stdClass; + $board->host = $host; + $board->bbs = $bbs; + $names[$bkey] = $board->name = $t['board_title']; + $hits[$bkey] = $board->hits = 1; + $boards[$bkey] = $board; + } else { + $hits[$bkey] = ++$boards[$bkey]->hits; + $names[$bkey] = $boards[$bkey]->name; + } + } + + $result['modified'] = $response->getHeader('Date'); + $result['profile']['regex'] = '/(' . $q .')/i'; + $result['profile']['hits'] = count($threads); + array_multisort($hits, SORT_DESC, $names, $boards); + $result['profile']['boards'] = $boards; + + return $result; +} diff --git a/rep2/tgrepc.php b/rep2/tgrepc.php index e1d4ac85b..3ab668323 100644 --- a/rep2/tgrepc.php +++ b/rep2/tgrepc.php @@ -367,8 +367,10 @@ function tgrep_search($query) } return $result; } else { - require_once './dig2ch.php'; - return dig2chsearch($query); // �lj� +// require_once './dig2ch.php'; +// return dig2chsearch($query); // �lj� + require_once './refind2ch.php'; + return refind2ch_search($query); // �lj� } } From 8ba2448b0661cf6ff756bea7ccdb28dcec5d30f7 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Tue, 16 Apr 2019 04:57:32 +0900 Subject: [PATCH 331/339] =?UTF-8?q?[=E4=BA=BA=E6=9F=B1]=E3=82=B5=E3=83=BC?= =?UTF-8?q?=E3=83=90=E3=83=BC=E5=81=B4=E3=81=AEBASIC=E8=AA=8D=E8=A8=BC?= =?UTF-8?q?=E3=81=AA=E3=81=A9=E3=81=AE=E5=A4=96=E9=83=A8=E8=AA=8D=E8=A8=BC?= =?UTF-8?q?=E3=81=A7rep2=E3=81=AE=E8=AA=8D=E8=A8=BC=E3=82=92=E8=A1=8C?= =?UTF-8?q?=E3=81=88=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= =?UTF-8?q?=E3=80=82=E3=81=AF=E3=81=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf_admin.inc.php | 3 +++ lib/Login.php | 19 ++++--------------- lib/login_first.inc.php | 1 + 3 files changed, 8 insertions(+), 15 deletions(-) diff --git a/conf/conf_admin.inc.php b/conf/conf_admin.inc.php index d141a530d..5bb3dbd76 100644 --- a/conf/conf_admin.inc.php +++ b/conf/conf_admin.inc.php @@ -107,6 +107,9 @@ // �V���܂Ƃߓǂ݂̃L���b�V�����c���� (����:0, ����:-1) $_conf['matome_cache_max'] = 5; // (5) +// �O���F�؂��g�p�������O�C�� �i����:1, ���Ȃ�:0�j +$_conf['external_authentication'] = 0; // (0) + // }}} // ---------------------------------------------------------------------- // {{{ �g�уA�N�Z�X�L�[ diff --git a/lib/Login.php b/lib/Login.php index a012b63d2..a8157e45a 100644 --- a/lib/Login.php +++ b/lib/Login.php @@ -59,6 +59,7 @@ public function setUser($user) */ public function setdownLoginUser() { + global $_conf; $login_user = null; // ���[�U������̗D�揇�ʂɉ����� @@ -86,21 +87,9 @@ public function setdownLoginUser() } elseif (isset($_SESSION['login_user']) && preg_match("/^[0-9A-Za-z_{$add_mail}]+\$/", $_SESSION['login_user'])) { $login_user = $_SESSION['login_user']; - /* - // Basic�F�؂Ŏw�� - } elseif (!empty($_REQUEST['basic'])) { - - if (isset($_SERVER['PHP_AUTH_USER']) && (preg_match("/^[0-9A-Za-z_{$add_mail}]+\$/", $_SERVER['PHP_AUTH_USER']))) { - $login_user = $_SERVER['PHP_AUTH_USER']; - - } else { - header('WWW-Authenticate: Basic realm="zone"'); - header('HTTP/1.0 401 Unauthorized'); - echo 'Login Failed. ���[�U�F�؂Ɏ��s���܂����B'; - exit; - } - */ - + // �O���F�؂Ŏw�� + } elseif ($_conf['external_authentication'] && isset($_SERVER['REMOTE_USER']) && (preg_match("/^[0-9A-Za-z_{$add_mail}]+\$/", $_SERVER['REMOTE_USER']))) { + $login_user = $_SERVER['REMOTE_USER']; } return $login_user; diff --git a/lib/login_first.inc.php b/lib/login_first.inc.php index 17d8b3729..dcd439722 100644 --- a/lib/login_first.inc.php +++ b/lib/login_first.inc.php @@ -205,6 +205,7 @@ function printLoginFirst(Login $_login) //========================================================= // HTML�v�����g //========================================================= + http_response_code (401); P2Util::header_nocache(); echo $_conf['doctype']; echo <<<EOP From e75815baeb76fa5155d481a96987a883926b70e3 Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Tue, 31 Jul 2018 10:48:35 +0900 Subject: [PATCH 332/339] =?UTF-8?q?lastmodify.txt=20=E5=AF=BE=E5=BF=9C=20(?= =?UTF-8?q?base:=20http://egg.5ch.net/test/read.cgi/software/1512235557/86?= =?UTF-8?q?2=20)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/LastmodifyTxt.php | 224 ++++++++++++++++++++++++++++++++++++++++++ lib/Thread.php | 25 ++++- lib/ThreadList.php | 32 ++++++ lib/startup.funcs.php | 1 + rep2/read.php | 11 +++ 5 files changed, 292 insertions(+), 1 deletion(-) create mode 100644 lib/LastmodifyTxt.php diff --git a/lib/LastmodifyTxt.php b/lib/LastmodifyTxt.php new file mode 100644 index 000000000..d2b4437f8 --- /dev/null +++ b/lib/LastmodifyTxt.php @@ -0,0 +1,224 @@ +<?php + +// {{{ LastmodifyTxt + +/** + * LastmodifyTxt�N���X + */ +class LastmodifyTxt +{ + // {{{ properties + + public $host; + public $bbs; + public $lastmodify_url; + public $lastmodify_file; + public $lastmodify_lines; + public $storage; + + // }}} + // {{{ constructor + + /** + * �R���X�g���N�^ + */ + public function __construct($host, $bbs) + { + global $_conf; + $this->host = $host; + $this->bbs = $bbs; + $this->storage = 'file'; + + $this->lastmodify_file = P2Util::datDirOfHostBbs($host, $bbs) . 'lastmodify.txt'; + // �ڑ��悪 2ch.net / 5ch / pink �ȊO�̏ꍇ�_�E�����[�h���Ȃ� + if (!P2HostMgr::isHost2chs($this->host)) { + return ; + } + $this->lastmodify_url = 'https://' . $host . '/' . $bbs . '/lastmodify.txt'; + + // lastmodify.txt�� �_�E�����[�h���Z�b�g���� + $this->dlAndSetLastmodify(); + } + + // }}} + // {{{ dlAndSetLastmodify() + + /** + * lastmodify.txt���_�E�����[�h���Z�b�g���� + * + * @return boolean �Z�b�g�ł���� true�A�ł��Ȃ���� false + */ + public function dlAndSetLastmodify() + { + $cont = $this->downloadLastmodify(); + if ($this->setLastmodifyLines($cont)) { + return true; + } else { + return false; + } + } + + // }}} + // {{{ downloadLastmodify() + + /** + * lastmodify.txt���_�E�����[�h���� + * + * @return string lastmodify.txt �̒��g + */ + public function downloadLastmodify() + { + global $_conf; + + if ($this->storage === 'file') { + FileCtl::mkdirFor($this->lastmodify_file); // �ƒf�B���N�g����������΍�� + + if (file_exists($this->lastmodify_file)) { + if (!empty($_REQUEST['norefresh']) || (empty($_REQUEST['refresh']) && isset($_REQUEST['word']))) { + return; // �X�V���Ȃ��ꍇ�́A���̏�Ŕ����Ă��܂� + } elseif (!empty($GLOBALS['expack.subject.multi-threaded-download.done'])) { + return; // ����_�E�����[�h�ς̏ꍇ�������� + } elseif (empty($_POST['newthread']) and $this->isLastmodifyTxtFresh()) { + return; // �V�K�X�����Ď��łȂ��A�X�V���V�����ꍇ�������� + } + $modified = http_date(filemtime($this->lastmodify_file)); + } else { + $modified = false; + } + } + + // DL + try { + $req = P2Commun::createHTTPRequest($this->lastmodify_url, HTTP_Request2::METHOD_GET); + $modified && $req->setHeader("If-Modified-Since", $modified); + + $response = P2Commun::getHTTPResponse($req); + + $code = $response->getStatus(); + if ($code == 302) { + // �z�X�g�̈ړ]��ǐ� + $new_host = P2HostMgr::getCurrentHost($this->host, $this->bbs); + if ($new_host != $this->host) { + $aNewLastmodifyTxt = new LastmodifyTxt($new_host, $this->bbs); + $body = $aNewLastmodifyTxt->downloadLastmodify(); + return $body; + } + } elseif ($code == 200 || $code == 206) { + //var_dump($response->getHeader()); + $body = $response->getBody(); + // ������� or be.2ch.net �Ȃ�EUC��SJIS�ɕϊ� + if (P2HostMgr::isHostJbbsShitaraba($this->host) || P2HostMgr::isHostBe2chs($this->host)) { + $body = mb_convert_encoding($body, 'CP932', 'CP51932'); + } + if (FileCtl::file_write_contents($this->lastmodify_file, $body) === false) { + p2die('cannot write file'); + } + } elseif ($code == 304) { + // touch���邱�ƂōX�V�C���^�[�o���������̂ŁA���΂炭�ă`�F�b�N����Ȃ��Ȃ� + // �i�ύX���Ȃ��̂ɏC�����Ԃ��X�V����̂́A�����C���i�܂Ȃ����A�����ł͓��ɖ��Ȃ����낤�j + if ($this->storage === 'file') { + touch($this->lastmodify_file); + } + } else { + $error_msg = $code; + } + } catch (Exception $e) { + $error_msg = $e->getMessage(); + } + + if (isset($error_msg) && strlen($error_msg) > 0) { + $url_t = P2Util::throughIme($this->lastmodify_url); + $info_msg_ht = "<p class=\"info-msg\">Error: {$error_msg}<br>"; + $info_msg_ht .= "rep2 info: <a href=\"{$url_t}\"{$_conf['ext_win_target_at']}>{$this->lastmodify_url}</a> �ɐڑ��ł��܂���ł����B</p>"; + P2Util::pushInfoHtml($info_msg_ht); + $body = ''; + } + + return $body; + } + + // }}} + // {{{ isLastmodifyTxtFresh() + + /** + * lastmodify.txt ���V�N�Ȃ� true ��Ԃ� + * + * @return boolean �V�N�Ȃ� true�B�����łȂ���� false�B + */ + public function isLastmodifyTxtFresh() + { + global $_conf; + + // �L���b�V��������ꍇ + if (file_exists($this->lastmodify_file)) { + // �L���b�V���̍X�V���w�莞�Ԉȓ��Ȃ� + // clearstatcache(); + if (filemtime($this->lastmodify_file) > time() - $_conf['sb_dl_interval']) { + return true; + } + } + + return false; + } + + // }}} + // {{{ setLastmodifyLines() + + /** + * lastmodify.txt ��ǂݍ��� + * + * ��������΁A$this->lastmodify_lines ���Z�b�g����� + * + * @param string $cont ����� eashm �p�ɓn���Ă���B + * @return boolean ���s���� + */ + public function setLastmodifyLines($cont = '') + { + $this->lastmodify_lines = FileCtl::file_read_lines($this->lastmodify_file); + + if ($this->lastmodify_lines) { + return true; + } else { + return false; + } + } + + // }}} + // {{{ getThreadExtend() + + /** + * extdat ��ǂݍ��� + * + * ��������΁A$this->lastmodify_lines ���Z�b�g����� + * + * @param string $cont ����� eashm �p�ɓn���Ă���B + * @return boolean ���s���� + */ + public function getThreadExtend($key) + { + // �ڑ��悪 2ch / 5ch / pink �ȊO�̏ꍇ�� '' ��Ԃ� + if (!file_exists($this->lastmodify_file)) { + return ''; + } + + foreach($this->lastmodify_lines as $l){ + if (preg_match("/^($key\.(?:dat|cgi))<>(.+?)<>(\d+)<>(\d+)<>(\d+)<>(\d+)<>(.+?)<>(.+?)<>/", $l, $matches)) { break; } + } + return $matches[8]; + } + + // }}} +} + +// }}} + +/* + * Local Variables: + * mode: php + * coding: cp932 + * tab-width: 4 + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ +// vim: set syn=php fenc=cp932 ai et ts=4 sw=4 sts=4 fdm=marker: diff --git a/lib/Thread.php b/lib/Thread.php index 8e4657d5a..41f030b94 100644 --- a/lib/Thread.php +++ b/lib/Thread.php @@ -27,6 +27,9 @@ class Thread */ public $newline; // ���̐V�K�擾���X�ԍ� // idxline[9] �p�~�\��B���݊��̂��ߎc���Ă͂���B + public $lastmodify; // lastmodify(http://info.5ch.net/index.php/Monazilla/develop/lastmodify.txt) + public $extdat; // VIPQ2 !extend(https://info.5ch.net/index.php/%E6%96%B0%E7%94%9FVIPQ2#.21extend:) + // ��host�Ƃ͂������̂́A2ch�O�̏ꍇ�́Ahost�ȉ��̃f�B���N�g���܂Ŋ܂܂�Ă����肷��B public $host; // ex)pc.2ch.net // idxline[10] public $bbs; // ex)mac // idxline[11] @@ -404,7 +407,25 @@ public function getThreadInfoFromSubjectTxtLine($l) { //$GLOBALS['debug'] && $GLOBALS['profiler']->enterSection('getThreadInfoFromSubjectTxtLine()'); - if (preg_match('/^([0-9]+)\\.(?:dat|cgi)(?:,|<>)(.+) ?(?:\\(|�i)([0-9]+)(?:\\)|�j)/', $l, $matches)) { + if (preg_match('/^([0-9]+)\\.(?:dat|cgi)(?:,|<>)(.+) ?(?:\\(|�i)([0-9]+)(?:\\)|�j)$/', $l, $matches)) { + $this->isonline = true; + $this->key = $matches[1]; + $this->setTtitle(rtrim($matches[2])); + $this->rescount = (int)$matches[3]; + if ($this->readnum) { + $this->unum = $this->rescount - $this->readnum; + // machi bbs ��sage��subject�̍X�V���s���Ȃ������Ȃ̂Œ������Ă��� + if ($this->unum < 0) { + $this->unum = 0; + } + $this->nunum = $this->unum; + } + + //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('getThreadInfoFromSubjectTxtLine()'); + return true; + } + + if (preg_match('/^([0-9]+)\.(?:dat|cgi)<>(.+?)<>(\d+)<>(\d+)<>(\d+)<>(\d+)<>(.+?)<>(.+?)<>/', $l, $matches)) { $this->isonline = true; $this->key = $matches[1]; $this->setTtitle(rtrim($matches[2])); @@ -417,6 +438,8 @@ public function getThreadInfoFromSubjectTxtLine($l) } $this->nunum = $this->unum; } + $this->lastmodify = (int)$matches[6]; + $this->extdat = $matches[8]; //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('getThreadInfoFromSubjectTxtLine()'); return true; diff --git a/lib/ThreadList.php b/lib/ThreadList.php index 1856e1930..ccac14013 100644 --- a/lib/ThreadList.php +++ b/lib/ThreadList.php @@ -285,6 +285,38 @@ public function readList() default: if (!$this->spmode) { $aSubjectTxt = new SubjectTxt($this->host, $this->bbs); + if (P2HostMgr::isHost2chs($this->host)) { + // subject.txt �� lastmodify.txt �`���ɕϊ��‚ƒ}�[�W + // �{���subject.txt �� lastmodify.txt �`���ɕϊ������̂� SubjectTxt �N���X�̒��ōs�����ق��� + // �����I�ɂ�����������Ȃ����Ƃ肠���������ł�� + foreach($aSubjectTxt->subject_lines as $l){ + if (!preg_match('/^(([0-9]+)\\.(?:dat|cgi))(?:,|<>)(.+) ?(?:\\(|�i)([0-9]+)(?:\\)|�j)/', $l, $matches)) { + continue; + } + + $threads[$matches[2]]['key'] = $matches[1]; // �X���b�hID + $threads[$matches[2]]['title'] = $matches[3]; // title + $threads[$matches[2]]['rc'] = $matches[4]; // rescount + + $threads[$matches[2]]['param'] = implode('<>',array_fill(0, 5, '')); // lastmodify.txt �Ɋ܂܂�Ȃ��X����\���ł���悤�� + } + + $aLastmodify = new LastmodifyTxt($this->host, $this->bbs); + foreach($aLastmodify->lastmodify_lines as $l){ + if (!preg_match('/^(([0-9]+)\.(?:dat|cgi))<>(.+?)<>(\d+)<>(\d+)<>(\d+)<>(\d+)<>(.+?)<>(.+?)<>/', $l, $matches)) { + continue; + } + + $key = $matches[2]; + array_splice($matches, 0, 5); // subject.txt �Ɋ܂܂�Ă���f�[�^�͎̂Ă� + $threads[$key]['param'] = implode('<>', $matches); // extend + } + + unset($aSubjectTxt->subject_lines); + foreach($threads as $l){ + $aSubjectTxt->subject_lines[] = implode('<>', $l) . "<>\n"; + } + } $lines = $aSubjectTxt->subject_lines; } } diff --git a/lib/startup.funcs.php b/lib/startup.funcs.php index e5c8c732f..eae0b9261 100644 --- a/lib/startup.funcs.php +++ b/lib/startup.funcs.php @@ -35,6 +35,7 @@ function p2_load_class($name) StrCtl | StrSjis | SubjectTxt | + LastmodifyTxt | Thread(?:List|Read)? | UA | UrlSafeBase64 | diff --git a/rep2/read.php b/rep2/read.php index cc269f4ab..5e0939882 100644 --- a/rep2/read.php +++ b/rep2/read.php @@ -440,6 +440,17 @@ } $newline = $aThread->readnum + 1; // $newline�͔p�~�\�肾���A���݊��p�ɔO�̂��� +/* + + �܂����̒i�K�Ȃ̂ŃR�����g + // �ڑ��悪 2ch / 5ch / pink �̏ꍇ�� idx �� extdat ��ۑ� + if (!P2HostMgr::isHost2chs($host)) { + $aLastmodify = new LastmodifyTxt($host, $bbs); + echo "extdat:[". $aLastmodify->getThreadExtend($key) ."]<br />\n"; + } + + */ + $sar = array($aThread->ttitle, $aThread->key, $idx_data[2], $aThread->rescount, '', $aThread->readnum, $idx_data[6], $idx_data[7], $idx_data[8], $newline, $idx_data[10], $idx_data[11], $aThread->datochiok); From 86778076389e823c000d9d2faf042e44a64147fe Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Thu, 9 Aug 2018 22:13:31 +0900 Subject: [PATCH 333/339] =?UTF-8?q?=E6=9D=BF=E5=90=8DLong=20=E3=81=AE?= =?UTF-8?q?=E5=8F=96=E5=BE=97=E6=96=B9=E6=B3=95=E3=81=AB=20SETTING.TXT=20?= =?UTF-8?q?=E3=81=8B=E3=82=89=E5=8F=96=E5=BE=97=E3=81=A7=E3=81=8D=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E8=BF=BD=E5=8A=A0=20(P2HostMgr=20?= =?UTF-8?q?=E3=81=AE=E3=83=A1=E3=82=BD=E3=83=83=E3=83=89=E5=90=8D=E3=82=82?= =?UTF-8?q?=E5=A4=89=E6=9B=B4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2HostMgr.php | 4 ++-- lib/P2Util.php | 21 +++++++++++++++++---- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/lib/P2HostMgr.php b/lib/P2HostMgr.php index 017dcd076..daacfb69f 100644 --- a/lib/P2HostMgr.php +++ b/lib/P2HostMgr.php @@ -439,7 +439,7 @@ static public function getCurrentHost($host, $bbs, $autosync = true) } // }}} - // {{{ getBbsName() + // {{{ getItaName() /** * �–�LONG���擾���� @@ -448,7 +448,7 @@ static public function getCurrentHost($host, $bbs, $autosync = true) * @param string $bbs �–� * @return string �ƒ��j���[�ɋL�ڂ���Ă���–� */ - static public function getBbsName($host, $bbs) + static public function getItaName($host, $bbs) { // �}�b�s���O�ǂݍ��� $map = self::_getMapping(); diff --git a/lib/P2Util.php b/lib/P2Util.php index 2d7fb98fd..cff369bc6 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -287,10 +287,9 @@ static public function getItaName($host, $bbs) return self::$_itaNames[$id]; } + // �–�Long�� p2_setting ����擾 $p2_setting_txt = self::idxDirOfHostBbs($host, $bbs) . 'p2_setting.txt'; - if (file_exists($p2_setting_txt)) { - $p2_setting_cont = FileCtl::file_read_contents($p2_setting_txt); if ($p2_setting_cont) { $p2_setting = unserialize($p2_setting_cont); @@ -301,9 +300,9 @@ static public function getItaName($host, $bbs) } } - // �–�Long�̎擾 + // �–�Long���}�b�s���O�f�[�^����擾 if (!isset($p2_setting['itaj'])) { - $itaj = P2HostMgr::getBbsName($host, $bbs); + $itaj = P2HostMgr::getItaName($host, $bbs); if ($itaj != $bbs) { self::$_itaNames[$id] = $p2_setting['itaj'] = $itaj; @@ -316,6 +315,20 @@ static public function getItaName($host, $bbs) } } + // �–�Long�� p2_kb_setting ����擾 + $p2_setting_srd = self::datDirOfHostBbs($host, $bbs) . 'p2_kb_setting.srd'; + if (file_exists($p2_setting_srd)) { + $p2_setting_cont = file_get_contents($p2_setting_srd); + + if ($p2_setting_cont) { + $p2_setting = unserialize($p2_setting_cont); + if (isset($p2_setting['BBS_TITLE'])) { + $ita_names[$id] = $p2_setting['BBS_TITLE']; + return $ita_names[$id]; + } + } + } + return null; } From 2e9208e2201222c7e88f459984c7eec608b16613 Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Thu, 9 Aug 2018 22:22:15 +0900 Subject: [PATCH 334/339] =?UTF-8?q?0ch=20=E3=81=AE=E6=90=BA=E5=B8=AF?= =?UTF-8?q?=E7=94=A8=E3=82=B9=E3=82=AF=E3=83=AA=E3=83=97=E3=83=88=E3=81=A7?= =?UTF-8?q?=E3=82=82=E5=8F=8D=E5=BF=9C=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/P2Util.php b/lib/P2Util.php index cff369bc6..3ef6225dd 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -1570,7 +1570,7 @@ static public function detectThread($url = null) $ls = (isset($matches[5]) && strlen($matches[5])) ? $matches[5] : ''; // 2ch or pink - http://choco.2ch.net/test/read.cgi/event/1027770702/ - } elseif (preg_match('<^https?://(.+)/test/read\\.(?:cgi|html|so|php) + } elseif (preg_match('<^https?://(.+)/test/(?:read|r)\\.(?:cgi|html|so|php) /(\\w+)/([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) { if (P2HostMgr::isRegisteredBbs($matches[1], $matches[2])) { $host = $matches[1]; From ce18f5791094466583bcc27aa315cd1452502459 Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Thu, 9 Aug 2018 22:40:46 +0900 Subject: [PATCH 335/339] =?UTF-8?q?=E5=A4=96=E9=83=A8=E6=8E=B2=E7=A4=BA?= =?UTF-8?q?=E6=9D=BF=E8=AA=AD=E3=81=BF=E8=BE=BC=E3=81=BF=E5=AF=BE=E5=BF=9C?= =?UTF-8?q?=20=EF=BD=A5next2ch.net=20=EF=BD=A5super2ch.net=20=EF=BD=A5jikk?= =?UTF-8?q?yo.org?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2HostMgr.php | 78 +++++++++++++++++++++++++++++++++++++++++++++++ lib/P2Util.php | 9 ++++++ 2 files changed, 87 insertions(+) diff --git a/lib/P2HostMgr.php b/lib/P2HostMgr.php index daacfb69f..4f8886a5e 100644 --- a/lib/P2HostMgr.php +++ b/lib/P2HostMgr.php @@ -63,6 +63,21 @@ class P2HostMgr */ static private $_hostIsOpen2ch = array(); + /** + * isHostNext2ch()�̃L���b�V�� + */ + static private $_hostIsNext2ch = array(); + + /** + * isHostSuper2ch()�̃L���b�V�� + */ + static private $_hostIsSuper2ch = array(); + + /** + * isHostJikkyoOrg()�̃L���b�V�� + */ + static private $_hostIsJikkyoOrg = array(); + /** * ��-�z�X�g�̑Ή��\ * @@ -267,6 +282,48 @@ static public function isHostOpen2ch($host) return self::$_hostIsOpen2ch[$host]; } + // }}} + // {{{ isHostNext2ch() + + /** + * host �� next2ch �Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isHostNext2ch($host) + { + if ($host === 'next2ch.net') { + return true; + } + + if (!array_key_exists($host, self::$_hostIsNext2ch)) { + self::$_hostIsNext2ch[$host] = (bool)preg_match('/\\.(next2ch\\.net)$/', $host); + } + return self::$_hostIsNext2ch[$host]; + } + + // }}} + // {{{ isHostSuper2ch() + + /** + * host �� super2ch �Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isHostSuper2ch($host) + { + if ($host === 'super2ch.net') { + return true; + } + + if (!array_key_exists($host, self::$_hostIsSuper2ch)) { + self::$_hostIsSuper2ch[$host] = (bool)preg_match('/\\.(super2ch\\.net)$/', $host); + } + return self::$_hostIsSuper2ch[$host]; + } + // }}} // {{{ isHostMachiBbs() @@ -388,6 +445,27 @@ static public function isHostVip2ch($host) return self::$_hostIsVip2ch[$host]; } + // }}} + // {{{ isHostJikkyoOrg() + + /** + * host �� jikkyo.org �Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isHostJikkyoOrg($host) + { + if ($host === 'jikkyo.org' || $host === 'livech.sakura.ne.jp') { + return true; + } + + if (!array_key_exists($host, self::$_hostIsJikkyoOrg)) { + self::$_hostIsJikkyoOrg[$host] = (bool)preg_match('/\\.(jikkyo\\.org)$/', $host); + } + return self::$_hostIsJikkyoOrg[$host]; + } + // }}} // {{{ isUrlWikipediaJa() diff --git a/lib/P2Util.php b/lib/P2Util.php index 3ef6225dd..60a53fedd 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -373,6 +373,12 @@ static private function _p2DirOfHost($base_dir, $host, $dir_sep = true) //�����̃f�B���N�g��������=�����V�K�C���X�g�[����or�I�ړ]�̂��߁A�f�B���N�g���̎w���ύX $host_dir = $base_dir . DIRECTORY_SEPARATOR . '2channel_sc'; } + // next2ch.net + } elseif (P2HostMgr::isHostNext2ch($host)) { + $host_dir = $base_dir . DIRECTORY_SEPARATOR . 'next2ch.net'; + // super2ch.net + } elseif (P2HostMgr::isHostSuper2ch($host)) { + $host_dir = $base_dir . DIRECTORY_SEPARATOR . 'super2ch.net'; // machibbs.com } elseif (P2HostMgr::isHostMachiBbs($host)) { $host_dir = $base_dir . DIRECTORY_SEPARATOR . 'machibbs.com'; @@ -388,6 +394,9 @@ static private function _p2DirOfHost($base_dir, $host, $dir_sep = true) } else { $host_dir = $base_dir . DIRECTORY_SEPARATOR . str_replace('/', DIRECTORY_SEPARATOR, $host); } + // jikkyo.org + } elseif (P2HostMgr::isHostJikkyoOrg($host)) { + $host_dir = $base_dir . DIRECTORY_SEPARATOR . 'jikkyo.org'; // vip.2ch.com } elseif (P2HostMgr::isHostVip2ch($host)) { $host_dir = $base_dir . DIRECTORY_SEPARATOR . 'ex14.vip2ch.com'; From 3169936cbde0a70ef2a16e708238d132423cb129 Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Tue, 14 Aug 2018 23:25:03 +0900 Subject: [PATCH 336/339] update README --- doc/README-killer.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/doc/README-killer.txt b/doc/README-killer.txt index 7590d2f9b..81b073ae7 100644 --- a/doc/README-killer.txt +++ b/doc/README-killer.txt @@ -2,10 +2,18 @@ rep2 機能拡張パック 全部入り(expack all in one) by killer ●何? + rep2-expack_allinone https://github.com/open774/p2-php + 上記やスレに上げられた修正を取り込みつつ気になったところをゴニョゴニョするバージョンです。 +●動作環境 + + Windows の PHP5.6 + Apache で動作確認しています。 + が突然、環境を PHP7 系にガラッと変えることがあります。 + + ●免責 本ソフトウェアの使用により直接および間接的に生じたいかなる損害も補償いたしません。 @@ -29,3 +37,4 @@ rep2 機能拡張パック 全部入り(expack all in one) by killer ●ChangeLog https://github.com/killer4989/p2-php/commits/master に書いてあるコミットログでどうぞ(コラ + From 135b666b06d780474811827b075530e09d163bbd Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Wed, 15 Aug 2018 16:37:49 +0900 Subject: [PATCH 337/339] =?UTF-8?q?fix=20http=E3=81=8C=E7=84=A1=E3=81=8F?= =?UTF-8?q?=E3=81=A6=E3=82=82cURLMulti=E3=81=8C=E4=BD=BF=E3=81=88=E3=82=8B?= =?UTF-8?q?=E3=81=AF=E3=81=9A=E3=81=AA=E3=81=AE=E3=81=A7=E3=83=81=E3=82=A7?= =?UTF-8?q?=E3=83=83=E3=82=AF=E3=82=92=E5=A4=89=E6=9B=B4=20=E5=BF=85?= =?UTF-8?q?=E8=A6=81=E3=81=AA=E3=82=AF=E3=83=A9=E3=82=B9=E3=81=8C=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E3=83=9D=E3=83=BC=E3=83=88=E3=81=95=E3=82=8C=E3=81=A6?= =?UTF-8?q?=E3=81=AA=E3=81=8B=E3=81=A3=E3=81=9F=E3=81=AE=E3=81=A7=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/fetch-subject-txt.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/fetch-subject-txt.php b/scripts/fetch-subject-txt.php index 5e8793e69..687a60d79 100644 --- a/scripts/fetch-subject-txt.php +++ b/scripts/fetch-subject-txt.php @@ -13,7 +13,7 @@ define('P2_FETCH_SUBJECT_TXT_DEBUG', 0); define('P2_FETCH_SUBJECT_TXT_DEBUG_OUTPUT_FILE', '/tmp/p2_fetch_subject_txt.log'); -require __DIR__ . '/../conf/conf.inc.php'; +require __DIR__ . '/../init.php'; if (!$_conf['expack.use_curl_multi'] && !$_conf['expack.use_pecl_http']) { fwrite(STDERR, 'Setting of expack.use_curl_multi or expack.use_pecl_http is required.' . PHP_EOL); From e1811d49a13a9bf49833d0ab62afcc411f98a329 Mon Sep 17 00:00:00 2001 From: killer4989 <killer4989@users.noreply.github.com> Date: Mon, 20 Aug 2018 20:58:07 +0900 Subject: [PATCH 338/339] =?UTF-8?q?extdat=20=E3=81=AE=E3=83=91=E3=83=A9?= =?UTF-8?q?=E3=83=A1=E3=83=BC=E3=82=BF=E3=81=A7=E3=82=B9=E3=83=AC=E3=83=83?= =?UTF-8?q?=E3=83=89=E3=82=92=E3=81=82=E3=81=BC=E3=83=BC=E3=82=93=E5=87=BA?= =?UTF-8?q?=E6=9D=A5=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/subject.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/rep2/subject.php b/rep2/subject.php index a1fee00ba..1075fbf22 100644 --- a/rep2/subject.php +++ b/rep2/subject.php @@ -1150,6 +1150,10 @@ function checkThreadTitleAborn(array &$aborn_threads, Thread $aThread) updateThreadTitleAborn($aborn_threads, $k); return true; } + if (isset($aThread->extdat) && $re_method($v['word'], $aThread->extdat)) { + updateThreadTitleAborn($aborn_threads, $k); + return true; + } // �啶���������𖳎� } elseif ($v['ignorecase']) { if (stripos($subject, $v['word']) !== false) { From f0a58fdabdfdb1ba55cb47af43538e7fdd22777c Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Tue, 16 Apr 2019 22:00:55 +0900 Subject: [PATCH 339/339] =?UTF-8?q?=E3=82=B9=E3=83=9E=E3=83=9B=E7=94=A8?= =?UTF-8?q?=E3=83=A1=E3=83=8B=E3=83=A5=E3=83=BC=E3=81=AB=E3=80=8C=E3=82=B9?= =?UTF-8?q?=E3=83=ACURL=E3=82=92=E5=85=A5=E5=8A=9B=E3=80=8D=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=20PC=E3=81=AE=E3=83=88=E3=83=83=E3=83=97?= =?UTF-8?q?=E7=94=BB=E9=9D=A2=E3=82=92=E5=91=BC=E3=81=B3=E5=87=BA=E3=81=99?= =?UTF-8?q?=E3=81=A0=E3=81=91=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/menu_i.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rep2/menu_i.php b/rep2/menu_i.php index 9fa915a8c..071a50b55 100644 --- a/rep2/menu_i.php +++ b/rep2/menu_i.php @@ -175,7 +175,7 @@ <li><a href="iv2.php?reset_filter=1" target="_self">�摜�L���b�V���ꗗ</a></li> <?php } ?> <li><a href="#tgrep">�X���b�h����</a></li> - + <li><a href="first_cont.php" target="_self">�X��URL�����</a></li> <li class="group">�Ǘ�</li> <li><a href="editpref.php" target="_self">�ݒ�Ǘ�</a></li> <li><a href="setting.php" target="_self">���O�C���Ǘ�</a></li>
    ', $table); @@ -1536,7 +1542,7 @@ static public function mkTrip($key) //if (strlen($key) > 8) { // return self::mkTrip1(substr($key, 0, 8)); //} else { - return self::mkTrip1($key); + return self::mkTrip1($key); //} } @@ -1747,75 +1753,66 @@ static public function detectThread($url = null) // �܂�BBS - http://kanto.machi.to/bbs/read.cgi/kanto/1241815559/ if (preg_match('<^http://(\\w+\\.machi(?:bbs\\.com|\\.to))/bbs/read\\.cgi - /(\\w+)/([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) - { + /(\\w+)/([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) { $host = $matches[1]; $bbs = $matches[2]; $key = $matches[3]; $ls = (isset($matches[4]) && strlen($matches[4])) ? $matches[4] : ''; - // �܂�BBS(�h���C���̂�) - http://machi.to/bbs/read.cgi/kanto/1241815559/ + // �܂�BBS(�h���C���̂�) - http://machi.to/bbs/read.cgi/kanto/1241815559/ } elseif (preg_match('<^http?://(machi\\.to)/bbs/read\\.cgi - /(\\w+)/([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) - { + /(\\w+)/([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) { $host = $matches[1]; $bbs = $matches[2]; $key = $matches[3]; $ls = (isset($matches[4]) && strlen($matches[4])) ? $matches[4] : ''; - - // �������JBBS - http://jbbs.livedoor.com/bbs/read.cgi/computer/2999/1081177036/-100 + + // �������JBBS - http://jbbs.livedoor.com/bbs/read.cgi/computer/2999/1081177036/-100 } elseif (preg_match('<^http://(jbbs\\.(?:livedoor\\.(?:jp|com)|shitaraba\\.(?:net|com)))/(?:bbs|bbs/lite)/read\\.cgi - /(\\w+)/(\\d+)/(\\d+)/((?:\\d+)?-(?:\\d+)?)?[^"]*>x', $nama_url, $matches)) - { + /(\\w+)/(\\d+)/(\\d+)/((?:\\d+)?-(?:\\d+)?)?[^"]*>x', $nama_url, $matches)) { $host = $matches[1] . '/' . $matches[2]; $bbs = $matches[3]; $key = $matches[4]; $ls = isset($matches[5]) ? $matches[5] : ''; - // �����܂����������JBBS - http://kanto.machibbs.com/bbs/read.pl?BBS=kana&KEY=1034515019 - } elseif (preg_match('<^http://(\\w+\\.machi(?:bbs\\.com|\\.to))/bbs/read\\.(?:pl|cgi)\\?(.+)>' , - $nama_url, $matches)) - { + // �����܂����������JBBS - http://kanto.machibbs.com/bbs/read.pl?BBS=kana&KEY=1034515019 + } elseif (preg_match('<^http://(\\w+\\.machi(?:bbs\\.com|\\.to))/bbs/read\\.(?:pl|cgi)\\?(.+)>', + $nama_url, $matches)) { $host = $matches[1]; list($bbs, $key, $ls) = self::parseMachiQuery($matches[2]); } elseif (preg_match('<^http://((jbbs\\.(?:livedoor\\.(?:jp|com)|shitaraba\\.(?:net|com)))(?:/(\\w+))?)/bbs/read\\.(?:pl|cgi)\\?(.+)>', - $nama_url, $matches)) - { + $nama_url, $matches)) { $host = $matches[1]; list($bbs, $key, $ls) = self::parseMachiQuery($matches[4]); - // vip2ch.com - http://ex14.vip2ch.com/test/read.cgi/news4ssnip/1450958506/ - } elseif (preg_match('<^https?://((\\w+)\\.vip2ch\\.com)/(?:test|i)/(?:read\\.(?:cgi|html|so)|mread\\.cgi|read)/(\\w+)/([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) - { + // vip2ch.com - http://ex14.vip2ch.com/test/read.cgi/news4ssnip/1450958506/ + } elseif (preg_match('<^https?://((\\w+)\\.vip2ch\\.com)/(?:test|i)/(?:read\\.(?:cgi|html|so)|mread\\.cgi|read)/(\\w+)/([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) { $host = $matches[1]; $bbs = $matches[3]; $key = $matches[4]; $ls = (isset($matches[5]) && strlen($matches[5])) ? $matches[5] : ''; - // vip2ch.com - http://ex14.vip2ch.com/i/responce.html?bbs=news4ssnip&dat=1450958506 - } elseif (preg_match('<^https?://((\\w+)\\.vip2ch\\.com)/i/(?:responce|responce_r18)\\.html\\?bbs=(\\w+)&dat=([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) - { + // vip2ch.com - http://ex14.vip2ch.com/i/responce.html?bbs=news4ssnip&dat=1450958506 + } elseif (preg_match('<^https?://((\\w+)\\.vip2ch\\.com)/i/(?:responce|responce_r18)\\.html\\?bbs=(\\w+)&dat=([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) { $host = $matches[1]; $bbs = $matches[3]; $key = $matches[4]; $ls = (isset($matches[5]) && strlen($matches[5])) ? $matches[5] : ''; - // 2ch or pink - http://choco.2ch.net/test/read.cgi/event/1027770702/ + // 2ch or pink - http://choco.2ch.net/test/read.cgi/event/1027770702/ } elseif (preg_match('<^https?://(.+)/test/read\\.(?:cgi|html|so) - /(\\w+)/([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) - { - if(BbsMap::isRegisteredBbs($matches[1] ,$matches[2])) { + /(\\w+)/([0-9]+)(?:/([^/]*))?>x', $nama_url, $matches)) { + if (BbsMap::isRegisteredBbs($matches[1], $matches[2])) { $host = $matches[1]; $bbs = $matches[2]; $key = $matches[3]; $ls = (isset($matches[4]) && strlen($matches[4])) ? $matches[4] : ''; } - // 2ch or pink by ula.cc(bintan / bekkanko) - http://choco.2ch.net/test/read.cgi/event/1027770702/ + // 2ch or pink by ula.cc(bintan / bekkanko) - http://choco.2ch.net/test/read.cgi/event/1027770702/ } elseif (preg_match('<^https?://(?:(?:bintan|same)\\.ula\\.cc|ula\\.2ch\\.net)/test/(?:read\\.(?:cgi|html|so)|r\\.so) - /(.+)/(\\w+)/([0-9]+)(?:/([^/]*))>x', $nama_url, $matches)) - { + /(.+)/(\\w+)/([0-9]+)(?:/([^/]*))>x', $nama_url, $matches)) { $host = $matches[1]; $bbs = $matches[2]; $key = $matches[3]; @@ -1823,9 +1820,8 @@ static public function detectThread($url = null) // 2ch or pink �ߋ����Ohtml - http://pc.2ch.net/mac/kako/1015/10153/1015358199.html } elseif (preg_match('<^(https?://(.+)(?:/[^/]+)?/(\\w+) - /kako/\\d+(?:/\\d+)?/(\\d+)).html>x', $nama_url, $matches)) - { - if(BbsMap::isRegisteredBbs($matches[2] ,$matches[3])) { + /kako/\\d+(?:/\\d+)?/(\\d+)).html>x', $nama_url, $matches)) { + if (BbsMap::isRegisteredBbs($matches[2], $matches[3])) { $host = $matches[2]; $bbs = $matches[3]; $key = $matches[4]; @@ -1842,9 +1838,9 @@ static public function detectThread($url = null) } else { $host = isset($_REQUEST['host']) ? $_REQUEST['host'] : null; // "pc.2ch.net" - $bbs = isset($_REQUEST['bbs']) ? $_REQUEST['bbs'] : null; // "php" - $key = isset($_REQUEST['key']) ? $_REQUEST['key'] : null; // "1022999539" - $ls = isset($_REQUEST['ls']) ? $_REQUEST['ls'] : null; // "all" + $bbs = isset($_REQUEST['bbs']) ? $_REQUEST['bbs'] : null; // "php" + $key = isset($_REQUEST['key']) ? $_REQUEST['key'] : null; // "1022999539" + $ls = isset($_REQUEST['ls']) ? $_REQUEST['ls'] : null; // "all" } return array($nama_url, $host, $bbs, $key, $ls); @@ -1856,7 +1852,7 @@ static public function detectThread($url = null) /** * �����܂����������JBBS�̃X���b�h���w�肷��QUERY_STRING����͂��� * - * @param string $query + * @param string $query * @return array */ static public function parseMachiQuery($query) @@ -1897,9 +1893,9 @@ static public function parseMachiQuery($query) /** * HTML����DOMDocument�𐶐����� * - * @param string $html - * @param string $charset - * @param bool $report_error + * @param string $html + * @param string $charset + * @param bool $report_error * @return DOMDocument */ static public function getHtmlDom($html, $charset = null, $report_error = true) @@ -1951,7 +1947,7 @@ static public function getHostGroupName($host) } elseif (self::isHostJbbsShitaraba($host)) { return 'shitaraba'; } elseif (self::isHostVip2ch($host)) { - return 'vip2ch'; + return 'vip2ch'; } else { return $host; } @@ -1964,7 +1960,7 @@ static public function getHostGroupName($host) * preg_replace_callback()�̃R�[���o�b�N�֐��Ƃ��� * �}�b�`�ӏ��S�̂�rawurlencode()�������� * - * @param array $m + * @param array $m * @return string */ static public function rawurlencodeCallback(array $m) @@ -2039,9 +2035,9 @@ static public function getBe2chCodeByMailPass($mail, $pass) } try { - $req = P2Commun::createHTTPRequest ('http://be.2ch.net/index.php', HTTP_Request2::METHOD_POST); + $req = P2Commun::createHTTPRequest('http://be.2ch.net/index.php', HTTP_Request2::METHOD_POST); - $req->setHeader('User-Agent', P2Commun::getP2UA(true,true)); + $req->setHeader('User-Agent', P2Commun::getP2UA(true, true)); $req->addPostParameter('mail', $mail); $req->addPostParameter('pass', $pass); @@ -2074,6 +2070,7 @@ static public function getBe2chCodeByMailPass($mail, $pass) } // }}} + /** * +Wiki:�v���t�B�[��ID����BEID���v�Z���� * @@ -2083,7 +2080,7 @@ public static function calcBeId($prof_id) { for ($y = 2; $y <= 9; $y++) { for ($x = 2; $x <= 9; $x++) { - $id = (($prof_id - $x*10.0 - $y)/100.0 + $x - $y - 5.0)/(3.0 * $x * $y); + $id = (($prof_id - $x * 10.0 - $y) / 100.0 + $x - $y - 5.0) / (3.0 * $x * $y); if ($id == floor($id)) { return $id; } From 475f7f5d856ab757fab528c81d56e5831dfdd443 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sun, 1 Oct 2017 23:37:38 +0900 Subject: [PATCH 237/339] =?UTF-8?q?API=E3=81=AE=E6=8E=A5=E7=B6=9A=E5=85=88?= =?UTF-8?q?=E3=82=925ch=E3=81=AB=E5=88=87=E3=82=8A=E6=9B=BF=E3=81=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 4 ++-- lib/auth2chapi.inc.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 999d091df..dbdb51b81 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -140,9 +140,9 @@ protected function _downloadDat2chAPI($uaMona, $SID2ch, $from_bytes) { // $url="http://news2.2ch.net/test/read.cgi?bbs=newsplus&key=1038486598"; if($_conf['2chapi_ssl.read']) { - $url = 'https://api.2ch.net/v1/'; + $url = 'https://api.5ch.net/v1/'; } else { - $url = 'http://api.2ch.net/v1/'; + $url = 'http://api.5ch.net/v1/'; } $url .= $serverName[0] . '/' . $this->bbs . '/' . $this->key; diff --git a/lib/auth2chapi.inc.php b/lib/auth2chapi.inc.php index ae414b1aa..3edb14cc7 100644 --- a/lib/auth2chapi.inc.php +++ b/lib/auth2chapi.inc.php @@ -17,9 +17,9 @@ function authenticate_2chapi() if ($_conf['2chapi_ssl.auth']) { - $url = 'https://api.2ch.net/v1/auth/'; + $url = 'https://api.5ch.net/v1/auth/'; } else { - $url = 'http://api.2ch.net/v1/auth/'; + $url = 'http://api.5ch.net/v1/auth/'; } $CT = time(); From 25fe9ffcd4d3d52da0b5133ec3894da476e1e298 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Sun, 1 Oct 2017 23:43:40 +0900 Subject: [PATCH 238/339] =?UTF-8?q?Revert=20"API=E3=81=AE=E6=8E=A5?= =?UTF-8?q?=E7=B6=9A=E5=85=88=E3=82=925ch=E3=81=AB=E5=88=87=E3=82=8A?= =?UTF-8?q?=E6=9B=BF=E3=81=88"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 475f7f5d856ab757fab528c81d56e5831dfdd443. --- lib/ThreadRead.php | 4 ++-- lib/auth2chapi.inc.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index dbdb51b81..999d091df 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -140,9 +140,9 @@ protected function _downloadDat2chAPI($uaMona, $SID2ch, $from_bytes) { // $url="http://news2.2ch.net/test/read.cgi?bbs=newsplus&key=1038486598"; if($_conf['2chapi_ssl.read']) { - $url = 'https://api.5ch.net/v1/'; + $url = 'https://api.2ch.net/v1/'; } else { - $url = 'http://api.5ch.net/v1/'; + $url = 'http://api.2ch.net/v1/'; } $url .= $serverName[0] . '/' . $this->bbs . '/' . $this->key; diff --git a/lib/auth2chapi.inc.php b/lib/auth2chapi.inc.php index 3edb14cc7..ae414b1aa 100644 --- a/lib/auth2chapi.inc.php +++ b/lib/auth2chapi.inc.php @@ -17,9 +17,9 @@ function authenticate_2chapi() if ($_conf['2chapi_ssl.auth']) { - $url = 'https://api.5ch.net/v1/auth/'; + $url = 'https://api.2ch.net/v1/auth/'; } else { - $url = 'http://api.5ch.net/v1/auth/'; + $url = 'http://api.2ch.net/v1/auth/'; } $CT = time(); From fc775fea65fb2a6d831d57b9897297bf07772c70 Mon Sep 17 00:00:00 2001 From: 2ch774 <2ch774@users.noreply.github.com> Date: Tue, 3 Oct 2017 00:08:34 +0900 Subject: [PATCH 239/339] =?UTF-8?q?API=E3=81=AE=E6=8E=A5=E7=B6=9A=E5=85=88?= =?UTF-8?q?=E3=82=925ch=E3=81=AB=E5=A4=89=E6=9B=B4=205ch=E5=81=B4=E3=81=AE?= =?UTF-8?q?CloudFlare=E3=81=AE=E5=88=A4=E5=AE=9A=E3=81=8C=E5=8E=B3?= =?UTF-8?q?=E3=81=97=E3=81=8F=E3=81=AA=E3=81=A3=E3=81=A6=E3=81=84=E3=82=8B?= =?UTF-8?q?=E3=81=9F=E3=82=81=E7=92=B0=E5=A2=83=E3=81=AB=E3=82=88=E3=81=A3?= =?UTF-8?q?=E3=81=A6=E3=81=AF=E8=A8=AD=E5=AE=9A=E8=A6=8B=E7=9B=B4=E3=81=97?= =?UTF-8?q?=E3=81=8C=E5=BF=85=E8=A6=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 11 +++++++++-- lib/auth2chapi.inc.php | 4 ++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 999d091df..87d2a251c 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -140,9 +140,9 @@ protected function _downloadDat2chAPI($uaMona, $SID2ch, $from_bytes) { // $url="http://news2.2ch.net/test/read.cgi?bbs=newsplus&key=1038486598"; if($_conf['2chapi_ssl.read']) { - $url = 'https://api.2ch.net/v1/'; + $url = 'https://api.5ch.net/v1/'; } else { - $url = 'http://api.2ch.net/v1/'; + $url = 'http://api.5ch.net/v1/'; } $url .= $serverName[0] . '/' . $this->bbs . '/' . $this->key; @@ -308,6 +308,13 @@ protected function _downloadDat2chAPI($uaMona, $SID2ch, $from_bytes) { } elseif ($code == '304') { $this->isonline = true; return '304 Not Modified'; + } elseif ($code == '403') { + $this->getdat_error_msg_ht .= "

    rep2 error: CloudFlare�ɐڑ������ۂ��ꂽ���߁A�X���b�h�擾�Ɏ��s���܂����B�ݒ�̕ύX���������Ă��������B

    "; + $this->getdat_error_msg_ht .= "

    ".$response->getBody ()."

    "; + $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&relogin2chapi=true\">API�ōĎ擾�����݂�]"; + $this->getdat_error_msg_ht .= " [host}&bbs={$this->bbs}&key={$this->key}&ls={$this->ls}&olddat=true\">��dat�ōĎ擾�����݂�]"; + $this->diedat = true; + return false; } elseif ($code == '416') { // Requested Range Not Satisfiable // echo "���ځ[�񌟏o"; $this->onbytes = 0; diff --git a/lib/auth2chapi.inc.php b/lib/auth2chapi.inc.php index ae414b1aa..3edb14cc7 100644 --- a/lib/auth2chapi.inc.php +++ b/lib/auth2chapi.inc.php @@ -17,9 +17,9 @@ function authenticate_2chapi() if ($_conf['2chapi_ssl.auth']) { - $url = 'https://api.2ch.net/v1/auth/'; + $url = 'https://api.5ch.net/v1/auth/'; } else { - $url = 'http://api.2ch.net/v1/auth/'; + $url = 'http://api.5ch.net/v1/auth/'; } $CT = time(); From 3947ba5e5baa4f5f424f26b346e0ddf066085193 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Tue, 3 Oct 2017 22:35:34 +0900 Subject: [PATCH 240/339] 2ch774 to open774 --- conf/conf.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 998f34da1..7e8075e3c 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -74,12 +74,12 @@ function p2_init() $_conf['p2web_url'] = 'http://akid.s17.xrea.com/'; $_conf['p2ime_url'] = 'http://akid.s17.xrea.com/p2ime.php'; // $_conf['favrank_url'] = 'http://akid.s17.xrea.com/favrank/favrank.php'; - $_conf['expack.web_url'] = 'http://2ch774.github.io/p2-php/'; + $_conf['expack.web_url'] = 'http://open774.github.io/p2-php/'; $_conf['expack.download_url'] = 'https://github.com/2ch774/p2-php/releases'; $_conf['expack.history_url'] = 'https://github.com/2ch774/p2-php/blob/master/doc/README-774.txt'; $_conf['expack.tgrep_url'] = 'http://page2.xrea.jp/tgrep/search'; $_conf['test.dig2ch_url'] = 'http://dig.2ch.net/'; - $_conf['expack.gate_php'] = '//2ch774.github.io/p2-php/gate.html'; + $_conf['expack.gate_php'] = '//open774.github.io/p2-php/gate.html'; $_conf['menu_php'] = 'menu.php'; $_conf['subject_php'] = 'subject.php'; $_conf['read_php'] = 'read.php'; From a2c7a427f0b4ea3a52c5180d0055c8092cd2212f Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Wed, 4 Oct 2017 01:33:36 +0900 Subject: [PATCH 241/339] =?UTF-8?q?2ch(sc)=E3=81=A8open2ch=E3=81=AEDAT?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E3=83=87=E3=82=A3=E3=83=AC=E3=82=AF=E3=83=88?= =?UTF-8?q?=E3=83=AA=E5=A4=89=E6=9B=B4=20=E3=81=93=E3=82=8C=E3=81=AB?= =?UTF-8?q?=E3=82=88=E3=82=8A=E9=AF=96=E7=A7=BB=E8=BB=A2=E3=81=AB=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C=E5=8F=AF=E8=83=BD=E3=81=AB=E3=81=AA=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/lib/P2Util.php b/lib/P2Util.php index 05fb850b0..927979f02 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -63,6 +63,11 @@ class P2Util */ static private $_hostIs2chSc = array(); + /** + * isHostOpen2ch()�̃L���b�V�� + */ + static private $_hostIsOpen2ch = array(); + /** * P2Ime�I�u�W�F�N�g * @@ -381,7 +386,21 @@ static private function _p2DirOfHost($base_dir, $host, $dir_sep = true) // 2channel or bbspink if (self::isHost2chs($host)) { $host_dir = $base_dir . DIRECTORY_SEPARATOR . '2channel'; + } elseif (self::isHostOpen2ch($host)) { + //�݊����ێ��̂��ߋ����̃f�B���N�g�����w�� + $host_dir = $base_dir . DIRECTORY_SEPARATOR . rawurlencode($host); + if (!file_exists($host_dir)) { + //�����̃f�B���N�g��������=�����V�K�C���X�g�[����or�I�ړ]�̂��߁A�f�B���N�g���̎w���ύX + $host_dir = $base_dir . DIRECTORY_SEPARATOR . 'open2ch'; + } + } elseif (self::isHost2chSc($host)) { + //�݊����ێ��̂��ߋ����̃f�B���N�g�����w�� + $host_dir = $base_dir . DIRECTORY_SEPARATOR . rawurlencode($host); + if (!file_exists($host_dir)) { + //�����̃f�B���N�g��������=�����V�K�C���X�g�[����or�I�ړ]�̂��߁A�f�B���N�g���̎w���ύX + $host_dir = $base_dir . DIRECTORY_SEPARATOR . '2channel_sc'; + } // machibbs.com } elseif (self::isHostMachiBbs($host)) { $host_dir = $base_dir . DIRECTORY_SEPARATOR . 'machibbs.com'; @@ -989,6 +1008,25 @@ static public function isHost2chSc($host) } // }}} + // {{{ isHostOpen2ch() + + /** + * host �� ���[�Ղ�2ch �Ȃ� true ��Ԃ� + * + * @param string $host + * @return boolean + */ + static public function isHostOpen2ch($host) + { + if (!array_key_exists($host, self::$_hostIsOpen2ch)) { + self::$_hostIsOpen2ch[$host] = (bool)preg_match('/\\.(open2ch\\.net)$/', $host); + } + return self::$_hostIsOpen2ch[$host]; + } + + // }}} + + // {{{ header_nocache() /** From ece627293b3288bad9d9b0a3457c1bb9d3c136a5 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Wed, 4 Oct 2017 15:10:59 +0900 Subject: [PATCH 242/339] =?UTF-8?q?http=5Fbuild=5Furl=E3=82=92=E5=B0=8E?= =?UTF-8?q?=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.json | 2 ++ lib/P2Util.php | 48 ++++++++++++++++++++++++++++++++++++------ lib/ThreadRead.php | 12 +++++------ lib/auth2chapi.inc.php | 10 ++++----- 4 files changed, 53 insertions(+), 19 deletions(-) diff --git a/composer.json b/composer.json index 2818ed210..c8534cbaa 100644 --- a/composer.json +++ b/composer.json @@ -37,6 +37,8 @@ "pear-pear.php.net/xml_rss": "1.0.2", "symfony/console": "2.2.*", "symfony/yaml": "2.2.*", + "jakeasmith/http_build_url": "1.0.*", "dropbox/dropbox-sdk": "dev-master" + } } diff --git a/lib/P2Util.php b/lib/P2Util.php index 927979f02..835a57bb8 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -24,9 +24,14 @@ class P2Util static private $_hostDirs = array(); /** - * isHost2chs() �̃L���b�V�� + * isHost2ch() �̃L���b�V�� */ - static private $_hostIs2chs = array(); + static private $_hostIs2ch = array(); + + /** + * isHost5ch() �̃L���b�V�� + */ + static private $_hostIs5ch = array(); /** * isHostBe2chNet() �̃L���b�V�� @@ -804,17 +809,48 @@ static public function isHostExample($host) // {{{ isHost2chs() /** - * host �� 2ch or bbspink �Ȃ� true ��Ԃ� + * host �� 2ch or 5ch or bbspink �Ȃ� true ��Ԃ� * * @param string $host * @return bool */ static public function isHost2chs($host) { - if (!array_key_exists($host, self::$_hostIs2chs)) { - self::$_hostIs2chs[$host] = (bool)preg_match('<^\\w+\\.(?:2ch\\.net|5ch\\.net|bbspink\\.com)$>', $host); + return self::isHost2ch($host)||self::isHost5ch($host)||self::isHostBbsPink($host); + } + + // }}} + // {{{ isHost2ch() + + /** + * host �� 2ch �Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isHost2ch($host) + { + if (!array_key_exists($host, self::$_hostIs2ch)) { + self::$_hostIs2ch[$host] = (bool)preg_match('<^\\w+\\.(?:2ch\\.net)$>', $host); + } + return self::$_hostIs2ch[$host]; + } + + // }}} + // {{{ isHost5ch() + + /** + * host �� 5ch �Ȃ� true ��Ԃ� + * + * @param string $host + * @return bool + */ + static public function isHost5ch($host) + { + if (!array_key_exists($host, self::$_hostIs5ch)) { + self::$_hostIs5ch[$host] = (bool)preg_match('<^\\w+\\.(?:5ch\\.net)$>', $host); } - return self::$_hostIs2chs[$host]; + return self::$_hostIs5ch[$host]; } // }}} diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 87d2a251c..8433f1a95 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -139,13 +139,11 @@ protected function _downloadDat2chAPI($uaMona, $SID2ch, $from_bytes) { // $url = "http://{$this->host}/{$this->bbs}/dat/{$this->key}.dat"; // $url="http://news2.2ch.net/test/read.cgi?bbs=newsplus&key=1038486598"; - if($_conf['2chapi_ssl.read']) { - $url = 'https://api.5ch.net/v1/'; - } else { - $url = 'http://api.5ch.net/v1/'; - } + $url= http_build_url(array( + "scheme" => $_conf['2chapi_ssl.read']?"https":"http", + "host" => P2Util::isHost5ch($this->host)?"api.5ch.net":"api.2ch.net", + "path" => "v1/".$serverName[0] . '/' . $this->bbs . '/' . $this->key)); - $url .= $serverName[0] . '/' . $this->bbs . '/' . $this->key; $message = '/v1/' . $serverName[0] . '/' . $this->bbs . '/' . $this->key . $SID2ch . $AppKey; $HB = hash_hmac ("sha256", $message, $HMKey); @@ -198,7 +196,7 @@ protected function _downloadDat2chAPI($uaMona, $SID2ch, $from_bytes) { if($_conf['2chapi_debug_print']==1) { - P2Util::pushInfoHtml('

    p2 debug(ThreadRead::API): User-Status='.$apiUserStatus.' Thread-Status='.$apiThreadStatus.' HTTP-Status='.$code.'

    '); + P2Util::pushInfoHtml('

    p2 debug(ThreadRead::API):URL='.$url.' User-Status='.$apiUserStatus.' Thread-Status='.$apiThreadStatus.' HTTP-Status='.$code.'

    '); } // API�̕ԓ����ߋ����O(Ronin��)��������ߋ����O�����N��\�����ďI�� diff --git a/lib/auth2chapi.inc.php b/lib/auth2chapi.inc.php index 3edb14cc7..103257fca 100644 --- a/lib/auth2chapi.inc.php +++ b/lib/auth2chapi.inc.php @@ -15,12 +15,10 @@ function authenticate_2chapi() { global $_conf; - if ($_conf['2chapi_ssl.auth']) - { - $url = 'https://api.5ch.net/v1/auth/'; - } else { - $url = 'http://api.5ch.net/v1/auth/'; - } + $url= http_build_url(array( + "scheme" => $_conf['2chapi_ssl.auth']?"https":"http", + "host" => "api.5ch.net", + "path" => "v1/auth/")); $CT = time(); $AppKey = $_conf['2chapi_appkey']; From 698959409221ab495fb92ba95ee6f4bad0c7a150 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Wed, 4 Oct 2017 21:50:53 +0900 Subject: [PATCH 243/339] =?UTF-8?q?=E3=82=B9=E3=83=9E=E3=83=9B=E7=94=A8?= =?UTF-8?q?=E6=9C=80=E8=BF=91=E8=AA=AD=E3=82=93=E3=81=A0=E3=82=B9=E3=83=AC?= =?UTF-8?q?=E4=B8=80=E8=A6=A7=E7=AD=89=E3=81=AB=E6=9B=B4=E6=96=B0=E3=83=9C?= =?UTF-8?q?=E3=82=BF=E3=83=B3=E3=82=92=E8=BF=BD=E5=8A=A0=20=E2=86=91?= =?UTF-8?q?=E3=81=AB=E4=BC=B4=E3=81=84=E8=87=AA=E5=8B=95=E7=9A=84=E3=81=AB?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E3=81=97=E3=81=AA=E3=81=84=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4=EF=BC=88PC=E3=81=A8=E5=90=8C?= =?UTF-8?q?=E3=81=98=E5=8B=95=E4=BD=9C=EF=BC=89=20RSS=E3=81=ABHTTPS?= =?UTF-8?q?=E3=81=AEURL=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=A7=E3=81=8D?= =?UTF-8?q?=E3=81=AA=E3=81=84=E4=B8=8D=E5=85=B7=E5=90=88=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=20lib/ThreadRead.php=E5=86=85=E3=81=AB=E3=81=82?= =?UTF-8?q?=E3=82=8B=E6=9C=AA=E4=BD=BF=E7=94=A8=E3=81=AE=E5=A4=89=E6=95=B0?= =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 11 +---------- lib/expack/rss/common.inc.php | 2 +- lib/expack/rss/parser.inc.php | 2 +- lib/index_print_k.inc.php | 2 +- lib/sb_header_i.inc.php | 7 ++++++- rep2/menu_i.php | 2 +- 6 files changed, 11 insertions(+), 15 deletions(-) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 8433f1a95..6a065c9b0 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -147,8 +147,6 @@ protected function _downloadDat2chAPI($uaMona, $SID2ch, $from_bytes) { $message = '/v1/' . $serverName[0] . '/' . $this->bbs . '/' . $this->key . $SID2ch . $AppKey; $HB = hash_hmac ("sha256", $message, $HMKey); - $purl = parse_url ($url); // URL���� - try { $req = P2Commun::createHTTPRequest ($url, HTTP_Request2::METHOD_POST); @@ -166,11 +164,6 @@ protected function _downloadDat2chAPI($uaMona, $SID2ch, $from_bytes) { $req->setHeader ('If-Modified-Since', $this->modified); } - // Basic�F�ؗp�̃w�b�_ - if (isset ($purl['user']) && isset ($purl['pass'])) { - $req->setAuth ($purl['user'], $purl['pass'], HTTP_Request2::AUTH_BASIC); - } - // POST������e $req->addPostParameter (array ( 'sid' => $SID2ch, @@ -527,8 +520,6 @@ protected function _downloadDat2chKako($uri, $ext) { $url = $uri . $ext; - $purl = parse_url ($url); // URL���� - try { $req = P2Commun::createHTTPRequest ($url, HTTP_Request2::METHOD_GET); @@ -727,7 +718,7 @@ public function get2chDatError($code = null) { } elseif (preg_match ($vip2ch_ssr_match, $read_response_html, $matches)) { $dat_response_status = "����! �V�݂��ꂽSS����R�‚ɂăX���𔭌������ł���!"; $movelog_uri = str_replace("news4ssnip", "news4ssr", $read_url); - $movelog_url_en = rawurlencode ($kakolog_uri); + $movelog_url_en = rawurlencode ($movelog_uri); $read_kako_url = "{$_conf['read_php']}?host={$this->host}&bbs=news4ssr&key={$this->key}&ls={$this->ls}"; $dat_response_msg = "

    2ch info - ����! �V�݂��ꂽSS����R�‚ɂāA�X���b�h �𔭌����܂����B [rep2�Ɏ�荞��œǂ�]

    "; } else { diff --git a/lib/expack/rss/common.inc.php b/lib/expack/rss/common.inc.php index bbd435077..ae53a253a 100644 --- a/lib/expack/rss/common.inc.php +++ b/lib/expack/rss/common.inc.php @@ -20,7 +20,7 @@ function rss_get_save_path($remotefile) } $pURL = @parse_url($remotefile); - if (!$pURL || !isset($pURL['scheme']) || $pURL['scheme'] != 'http' || !isset($pURL['host'])) { + if (!$pURL || !isset($pURL['scheme']) || !isset($pURL['host'])) { $errmsg = 'p2 error: �s����RSS��URL (' . p2h($remotefile) . ')'; $error = PEAR::raiseError($errmsg); return ($finished[$remotefile] = $error); diff --git a/lib/expack/rss/parser.inc.php b/lib/expack/rss/parser.inc.php index d8da961fc..46a7a7444 100644 --- a/lib/expack/rss/parser.inc.php +++ b/lib/expack/rss/parser.inc.php @@ -439,7 +439,7 @@ function rss_url_rel_to_abs($url) { // URL ���p�[�X $p = @parse_url($GLOBALS['channel']['link']); - if (!$p || !isset($p['scheme']) || $p['scheme'] != 'http' || !isset($p['host'])) { + if (!$p || !isset($p['scheme']) || !isset($p['host'])) { return $url; } diff --git a/lib/index_print_k.inc.php b/lib/index_print_k.inc.php index 70e6bffef..62590e2f9 100644 --- a/lib/index_print_k.inc.php +++ b/lib/index_print_k.inc.php @@ -68,7 +68,7 @@ function index_print_k() {$_conf['k_accesskey_st'][3]}���C�ɔ�
    {$_conf['k_accesskey_st'][4]}��ؽ�
    {$_conf['k_accesskey_st'][5]}�ŋߓǂ񂾽ڂ̐V��
    -{$_conf['k_accesskey_st'][6]}�ŋߓǂ񂾽ڂ̑S��
    +{$_conf['k_accesskey_st'][6]}�ŋߓǂ񂾽ڂ̑S��
    {$_conf['k_accesskey_st'][7]}��������۸�
    {$_conf['k_accesskey_st'][8]}�ڂ̓a��
    {$_conf['k_accesskey_st'][9]}۸޲݊Ǘ�
    diff --git a/lib/sb_header_i.inc.php b/lib/sb_header_i.inc.php index 5cae6ca43..43efb8ccc 100644 --- a/lib/sb_header_i.inc.php +++ b/lib/sb_header_i.inc.php @@ -9,9 +9,11 @@ //=============================================================== $newtime = date('gis'); $norefresh_q = '&norefresh=1'; +$refresh_q = '&refresh=1'; $bbs_q = '&bbs=' . $aThreadList->bbs; $host_bbs_q = 'host=' . $aThreadList->host . $bbs_q; -$paging_q = $host_bbs_q . '&spmode=' . $aThreadList->spmode . $norefresh_q; +$spmode_q = '&spmode=' . $aThreadList->spmode; +$paging_q = $host_bbs_q . $spmode_q . $norefresh_q; // {{{ �y�[�W�^�C�g������URL�ݒ� @@ -143,6 +145,9 @@ // ���C�ɔ� if ($board_info) { echo toolbar_i_favita_button('img/glyphish/icons2/28-star.png', null, $board_info); +} elseif ($aThreadList->spmode == 'soko') { + $refresh_url = "{$_conf['subject_php']}?{$host_bbs_q}{$spmode_q}{$_conf['k_at_a']}{$refresh_q}"; + echo toolbar_i_standard_button('img/glyphish/icons2/01-refresh.png', null, $refresh_url); } // ���̑� diff --git a/rep2/menu_i.php b/rep2/menu_i.php index 27d8d7bf2..41488030d 100644 --- a/rep2/menu_i.php +++ b/rep2/menu_i.php @@ -160,7 +160,7 @@
  • ����
  • �ŋߓǂ񂾃X���̐V�� */ ?> -
  • �ŋߓǂ񂾃X��
  • +
  • �ŋߓǂ񂾃X��
  • �������ݗ���
  • From 717d19a19e09f74e98d461439b3af9c8cc91dd38 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Thu, 5 Oct 2017 12:10:56 +0900 Subject: [PATCH 244/339] =?UTF-8?q?be=E3=82=925ch=E3=81=AB=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 24 +++++++++++------------- lib/post_form_options.inc.php | 13 +++++++++++-- rep2/post.php | 2 +- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/lib/P2Util.php b/lib/P2Util.php index 835a57bb8..596b7bfcc 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -816,7 +816,7 @@ static public function isHostExample($host) */ static public function isHost2chs($host) { - return self::isHost2ch($host)||self::isHost5ch($host)||self::isHostBbsPink($host); + return self::isHost2ch($host) || self::isHost5ch($host) || self::isHostBbsPink($host); } // }}} @@ -2070,14 +2070,15 @@ static public function isEnableBe2ch() * �i�F�؃R�[�h��urlencode���ꂽ�܂܂̏�ԁj * * @access public + * @param string $host Be�F�؂���z�X�g�� * @return array|false|null �F�؃R�[�h�z��|�F�؂ł��Ȃ�����|���ݒ肾���� */ - static public function getBe2chCodeWithUserConf() + static public function getBe2chCodeWithUserConf($host) { global $_conf; if ($_conf['be_2ch_mail'] && strlen($_conf['be_2ch_password'])) { - $r = self::getBe2chCodeByMailPass($_conf['be_2ch_mail'], $_conf['be_2ch_password']); + $r = self::_getBe2chCodeByMailPass($_conf['be_2ch_mail'], $_conf['be_2ch_password'], $host); if (is_array($r)) { return $r; } @@ -2093,23 +2094,20 @@ static public function getBe2chCodeWithUserConf() * �i�F�؃R�[�h��urlencode���ꂽ�܂܂̏�ԁj * * @access private + * @param string $host Be�F�؂���z�X�g�� * @return array|string ����|�G���[���b�Z�[�W */ - static public function getBe2chCodeByMailPass($mail, $pass) + static private function _getBe2chCodeByMailPass($mail, $pass, $host) { global $_conf; - //require_once 'HTTP/Request.php'; - - $params = array('timeout' => $_conf['fsockopen_timeout']); - - if (!empty($GLOBALS['_conf']['proxy_use'])) { - $params['proxy_host'] = $GLOBALS['_conf']['proxy_host']; - $params['proxy_port'] = $GLOBALS['_conf']['proxy_port']; - } + $url = http_build_url(array( + "scheme" => $_conf['2ch_ssl.post'] ? "https" : "http", + "host" => P2Util::isHost5ch($host) ? "be.5ch.net" : "be.2ch.net", + "path" => "index.php")); try { - $req = P2Commun::createHTTPRequest('http://be.2ch.net/index.php', HTTP_Request2::METHOD_POST); + $req = P2Commun::createHTTPRequest($url, HTTP_Request2::METHOD_POST); $req->setHeader('User-Agent', P2Commun::getP2UA(true, true)); diff --git a/lib/post_form_options.inc.php b/lib/post_form_options.inc.php index d9f0481f3..3ceda6076 100644 --- a/lib/post_form_options.inc.php +++ b/lib/post_form_options.inc.php @@ -34,10 +34,19 @@ // +function isNetFront() { + var ua = navigator.userAgent; + if (ua.indexOf("NetFront") != -1 || ua.indexOf("AVEFront/") != -1 || ua.indexOf("AVE-Front/") != -1) { + return true; + } else { + return false; + } +} + function disableSubmit(form) { // 2006/02/15 NetFront�Ƃ͑����������ł܂�炵���̂Ŕ����� - if (UA::isNetFront()) { + if (isNetFront()) { return; } @@ -52,7 +61,7 @@ function disableSubmit(form) { function setHiddenValue(button) { // 2006/02/15 NetFront�Ƃ͑����������ł܂�炵���̂Ŕ����� - if (UA::isNetFront()) { + if (isNetFront()) { return; } diff --git a/rep2/post.php b/rep2/post.php index e4a537bfa..fd759938d 100644 --- a/rep2/post.php +++ b/rep2/post.php @@ -410,7 +410,7 @@ function postIt($host, $bbs, $key, $post) $req->addCookie('DMDM', urlencode( rawurldecode( $_conf['be_2ch_DMDM']) ) ); $req->addCookie('MDMD', urlencode( rawurldecode( $_conf['be_2ch_MDMD']) ) ); } else { - $ar = P2Util::getBe2chCodeWithUserConf(); // urlencode���ꂽ�܂܂̏�� + $ar = P2Util::getBe2chCodeWithUserConf($host); // urlencode���ꂽ�܂܂̏�� if (is_array($ar)) { $req->addCookie('DMDM', $ar['DMDM']); $req->addCookie('MDMD', $ar['MDMD']); From 1008fdf3f7f12a3bc0149b91ad8480f1ece95f53 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Thu, 5 Oct 2017 19:36:47 +0900 Subject: [PATCH 245/339] v171005.1930 --- README.md | 6 +++--- conf/conf.inc.php | 10 +++++----- doc/README-774.txt | 20 ++++++++++++++++++-- rep2/live_read.php | 2 +- rep2/read.php | 2 +- 5 files changed, 28 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index b3a87aa11..eab3247da 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# rep2 expack 全部入り by 2ch774 +# rep2 expack 全部入り by open774 * rep2-expack https://github.com/rsky/p2-php * rep2-expack +live https://github.com/pluslive/p2-php @@ -18,7 +18,7 @@ ### Git & Composerで 1. 本体をclone -
    git clone git://github.com/2ch774/p2-php.git
    +  
    git clone git://github.com/open774/p2-php.git
       cd p2-php
    2. 依存ライブラリをダウンロード @@ -107,7 +107,7 @@ Webブラウザから変更できない項目は [conf/conf_admin.inc.php](https * **thermon** https://github.com/thermon/p2-php/ * **part32の892** *(+live)* https://github.com/pluslive/p2-php/ * **orzisun** https://github.com/orzisun/p2-php -* **2ch774** https://github.com/2ch774/p2-php +* **open774** https://github.com/open774/p2-php * **killer4989** https://github.com/killer4989/p2-php * **dgg712** https://github.com/dgg712/p2-php * **2ch p2/rep2スレの>>1-1000** diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 7e8075e3c..59f599963 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '170921.1800', // rep2�̃o�[�W���� + 'p2version' => '171005.1930', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; @@ -74,11 +74,11 @@ function p2_init() $_conf['p2web_url'] = 'http://akid.s17.xrea.com/'; $_conf['p2ime_url'] = 'http://akid.s17.xrea.com/p2ime.php'; // $_conf['favrank_url'] = 'http://akid.s17.xrea.com/favrank/favrank.php'; - $_conf['expack.web_url'] = 'http://open774.github.io/p2-php/'; - $_conf['expack.download_url'] = 'https://github.com/2ch774/p2-php/releases'; - $_conf['expack.history_url'] = 'https://github.com/2ch774/p2-php/blob/master/doc/README-774.txt'; + $_conf['expack.web_url'] = 'https://open774.github.io/p2-php/'; + $_conf['expack.download_url'] = 'https://github.com/open774/p2-php/releases'; + $_conf['expack.history_url'] = 'https://github.com/open774/p2-php/blob/master/doc/README-774.txt'; $_conf['expack.tgrep_url'] = 'http://page2.xrea.jp/tgrep/search'; - $_conf['test.dig2ch_url'] = 'http://dig.2ch.net/'; + $_conf['test.dig2ch_url'] = 'http://dig.5ch.net/'; $_conf['expack.gate_php'] = '//open774.github.io/p2-php/gate.html'; $_conf['menu_php'] = 'menu.php'; $_conf['subject_php'] = 'subject.php'; diff --git a/doc/README-774.txt b/doc/README-774.txt index 7912995da..c756b29bf 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -24,17 +24,18 @@ PHP7 ### �V�@�\ * cron�Ƃ��ōŋߓǂ񂾃X���Ȃǂ�dat��DL�o����X�N���v�g�lj� - - scripts/fetch-dat.php --mode ���[�h����Žw��(fav recent res_hist) + - php scripts/fetch-dat.php --mode ���[�h����Žw��(fav recent res_hist) * ���������ߌ��ɂȂ�‚ɖ������ŏ������ނƂ��Ɍx�����o���@�\��lj� * NG���ځ[��̑ΏۂɂȂ������X��ID�������I��NG���ځ[�񂷂�@�\��lj� - NG���ځ[��̏������폜�����ꍇ�͎���NG���ځ[��̃f�[�^�������Ȃ��Ɣ��f����܂��� - ����NG���ځ[��̃f�[�^�͎蓮NG���ځ[��ƓƗ����Ă���A����NG���ځ[��ON�̎������ǂݍ��܂�܂��B * �u�ݒ�Ǘ��v����L���b�V���E�����̏����ł���@�\��lj� * �{�Ƃ���be�̃��O�C���������ڐA����BE2.0�ɑΉ� -* rep2�ɓo�^���ꂽ�O���‚փ����N����@�\��lj� +* rep2�ɓo�^���ꂽ�O���‚̃����N����rep2�ŊJ����悤�ɂ����iJane�Ɠ�������j * 0�����˂�X�N���v�g���g�p�����O���‚̉ߋ����ODAT����荞�ݑΉ� * SOCKS5�v���N�V�o�R�̐ڑ��ɑΉ�(�l��) * tor���̌f����(.onion�h���C��)��tor�o�R�ʼn{������@�\��lj�(�l��) +* curl ��p��������_�E�����[�h�@�\��lj�(�l���@�\) ### �d�l�ύX * ���[�J���ˆꗗ�p.brd�t�@�C���̒u���ꏊ��rep2/board����$_conf['data_dir']/brard�ɕύX @@ -46,6 +47,9 @@ PHP7 * headline.2ch.net���ŋߓǂ񂾃X���ɒNjL���Ȃ��悤�ɕύX * Youtube�ƃj�R�j�R�����\������@�\���폜 - �����N�v���O�C�����g�p���Ă������� http://akid.s17.xrea.com/p2puki/index.phtml?%A5%EA%A5%F3%A5%AF%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3 +* �X�}�z�p��ʂ̃f�U�C���ύX +* 2ch��Unicode�G�������e�ɑΉ� +* �\�����X���̏����2000����65535�ɕύX ���̑������̃A���ɍ��킹���C����git�̃R�~�b�g���O���m�F���Ă��������B @@ -68,6 +72,18 @@ PHP7 ��ChangeLog +171005.1930 +* �ˑ����C�u�������X�V�icomposer update�K�{�j +* �X�}�z�p�ŋߓǂ񂾃X���ꗗ���ɍX�V�{�^����lj� +* ���ɔ��������I�ɍX�V���Ȃ��悤�ɕύX�iPC�Ɠ�������j +* �I�̈ړ]�ɑΉ����邽�߁A2ch(sc)��open2ch��DAT�ۑ��f�B���N�g����ύX +* �����d�l�̃f�B���N�g����DAT���L��Ƃ��͂������D�悷�� +* 5ch�b��Ή� +* rss���[�_�[�����삵�Ȃ��s��C�� +* rss���[�_�[��HTTPS��URL��lj��ł��Ȃ��s����C�� +* �X�}�z�����y�[�W��bootstrap��lj����Ĉꕔ�f�U�C���ύX +* ����`�F�b�N�̍Œ������PHP5.6�ȏ�ɕύX + 170921.1800 * vip2ch.com�ǂݍ��ݑΉ� * 2ch��Unicode�G�������e�ɑΉ� diff --git a/rep2/live_read.php b/rep2/live_read.php index ccc0b1cdb..e79efcf84 100755 --- a/rep2/live_read.php +++ b/rep2/live_read.php @@ -342,7 +342,7 @@ // �������L�^ // ����headline�͍ŋߓǂ񂾃X���ɋL�^���Ȃ��悤�ɂ��Ă݂� //=========================================================== -if ($aThread->rescount && !$is_ajax && $aThread->host != 'headline.2ch.net') { +if ($aThread->rescount && !$is_ajax && $aThread->host != 'headline.2ch.net'&& $aThread->host != 'headline.5ch.net') { recRecent(implode('<>', array($aThread->ttitle, $aThread->key, $idx_data[2], '', '', $aThread->readnum, $idx_data[6], $idx_data[7], $idx_data[8], $newline, $aThread->host, $aThread->bbs))); diff --git a/rep2/read.php b/rep2/read.php index 6ee1cf5b0..4c572b2b8 100644 --- a/rep2/read.php +++ b/rep2/read.php @@ -450,7 +450,7 @@ // �������L�^ // ����headline�͍ŋߓǂ񂾃X���ɋL�^���Ȃ��悤�ɂ��Ă݂� //=========================================================== -if ($aThread->rescount && !$is_ajax && $aThread->host != 'headline.2ch.net') { +if ($aThread->rescount && !$is_ajax && $aThread->host != 'headline.2ch.net'&& $aThread->host != 'headline.2ch.net') { recRecent(implode('<>', array($aThread->ttitle, $aThread->key, $idx_data[2], '', '', $aThread->readnum, $idx_data[6], $idx_data[7], $idx_data[8], $newline, $aThread->host, $aThread->bbs))); From 8f1345ede013d0f4931e83581cf1a37a7604b620 Mon Sep 17 00:00:00 2001 From: killer4989 Date: Thu, 5 Oct 2017 20:56:10 +0900 Subject: [PATCH 246/339] update README --- doc/README-killer.txt | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/doc/README-killer.txt b/doc/README-killer.txt index f83ab1cf9..7590d2f9b 100644 --- a/doc/README-killer.txt +++ b/doc/README-killer.txt @@ -1,28 +1,31 @@ -rep2 �@�\�g���p�b�N �S������(expack all in one) by killer +rep2 機能拡張パック 全部入り(expack all in one) by killer -�����H - rep2-expack_allinone https://github.com/2ch774/p2-php - ��L��X���ɏグ��ꂽ�C������荞�݂‚‹C�ɂȂ����Ƃ�����S�j���S�j������o�[�W�����ł��B +●何? + rep2-expack_allinone https://github.com/open774/p2-php + 上記やスレに上げられた修正を取り込みつつ気になったところをゴニョゴニョするバージョンです。 -���Ɛ� +●免責 - �{�\�t�g�E�F�A�̎g�p�ɂ�蒼�ڂ���ъԐړI�ɐ����������Ȃ鑹�Q���⏞�������܂���B - �g�p�͎��ȐӔC�ŁB + 本ソフトウェアの使用により直接および間接的に生じたいかなる損害も補償いたしません。 + 使用は自己責任で。 -������ +●注意 - �ݒu�Җ{�l�����p����̂͂������A�F�؂�؂�Ȃǂ��� - ��O�҂Ɉ��p����Ă��d���Ȃ��‹��Ŏg���̂͂�߂Ă��������B + 設置者本人が悪用するのはもちろん、認証を切るなどして + 第三者に悪用されても仕方ない環境で使うのはやめてください。 + また個人でカスタムしたものもあるので変なバグ・ゴミもあったりします。 + 「あれ?」と思ったら pull や clone、 fork し直したり、open774 さんの本家 rep2 をお使いください。 + (たまにこのリポジトリもフォークし直すことが多いのです。。。) -�����C�Z���X +●ライセンス - �{��p2�Ɠ������AX11���C�Z���X�ł��B + 本家p2と同じく、X11ライセンスです。 -��ChangeLog +●ChangeLog - https://github.com/killer4989/p2-php/commits/master �ɏ����Ă���R�~�b�g���O�łǂ���(�� + https://github.com/killer4989/p2-php/commits/master に書いてあるコミットログでどうぞ(コラ From 9146bb52e553b04644f177cf5af99c3d01e7cd9d Mon Sep 17 00:00:00 2001 From: killer4989 Date: Thu, 5 Oct 2017 21:18:33 +0900 Subject: [PATCH 247/339] =?UTF-8?q?fix=E3=80=80=E6=9C=80=E8=BF=91=E8=AA=AD?= =?UTF-8?q?=E3=82=93=E3=81=A0=E3=82=B9=E3=83=AC=E3=81=AB=E8=A8=98=E9=8C=B2?= =?UTF-8?q?=E3=81=97=E3=81=AA=E3=81=84=E3=83=9B=E3=82=B9=E3=83=88=E3=81=AB?= =?UTF-8?q?=205ch.net=20=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/read.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rep2/read.php b/rep2/read.php index 4c572b2b8..cc269f4ab 100644 --- a/rep2/read.php +++ b/rep2/read.php @@ -450,7 +450,7 @@ // �������L�^ // ����headline�͍ŋߓǂ񂾃X���ɋL�^���Ȃ��悤�ɂ��Ă݂� //=========================================================== -if ($aThread->rescount && !$is_ajax && $aThread->host != 'headline.2ch.net'&& $aThread->host != 'headline.2ch.net') { +if ($aThread->rescount && !$is_ajax && $aThread->host != 'headline.2ch.net'&& $aThread->host != 'headline.5ch.net') { recRecent(implode('<>', array($aThread->ttitle, $aThread->key, $idx_data[2], '', '', $aThread->readnum, $idx_data[6], $idx_data[7], $idx_data[8], $newline, $aThread->host, $aThread->bbs))); From 84e5066e540df74cc9ffce21682be076898591fb Mon Sep 17 00:00:00 2001 From: killer4989 Date: Thu, 5 Oct 2017 22:33:03 +0900 Subject: [PATCH 248/339] =?UTF-8?q?http=5Fbuild=5Furl=E3=82=92=E5=B0=8E?= =?UTF-8?q?=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/login2ch.inc.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/login2ch.inc.php b/lib/login2ch.inc.php index 2b3e99c72..aa78bca58 100644 --- a/lib/login2ch.inc.php +++ b/lib/login2ch.inc.php @@ -23,11 +23,10 @@ function login2ch() return false; } - if ($_conf['2ch_ssl.maru']) { - $auth2ch_url = 'https://2chv.tora3.net/futen.cgi'; - } else { - $auth2ch_url = 'http://2chv.tora3.net/futen.cgi'; - } + $url = http_build_url(array( + "scheme" => $_conf['2ch_ssl.maru'] ? "https" : "http", + "host" => "2chv.tora3.net", + "path" => "futen.cgi")); $dolib2ch = 'DOLIB/1.00'; From b63efa88dbf1f5b5c1b5294ce61d79aaccfe7318 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Thu, 5 Oct 2017 23:27:59 +0900 Subject: [PATCH 249/339] =?UTF-8?q?HTTP=E9=80=9A=E4=BF=A1=E6=99=82?= =?UTF-8?q?=E3=81=AE=E3=83=98=E3=83=83=E3=83=80=E3=83=BC=E3=81=AB=E8=AA=A4?= =?UTF-8?q?=E3=82=8A=E3=81=8C=E3=81=82=E3=81=A3=E3=81=9F=E3=81=AE=E3=81=A7?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=20release=E4=BD=9C=E6=A5=AD=E4=B8=AD?= =?UTF-8?q?=E3=81=AB=E4=B8=80=E9=83=A8=E3=81=AE=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E3=81=AA=E3=81=9C=E3=81=8B=E3=81=8C=E5=85=88=E7=A5=96?= =?UTF-8?q?=E8=BF=94=E3=82=8A=E3=81=97=E3=81=A6=E3=81=84=E3=81=9F=E3=81=AE?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.json | 2 +- lib/P2Commun.php | 7 +++---- lib/sb_header_i.inc.php | 2 +- rep2/live_read.php | 5 ++--- rep2/read.php | 2 +- rep2/title.php | 1 + rep2/viewtxt.php | 2 +- 7 files changed, 10 insertions(+), 11 deletions(-) diff --git a/composer.json b/composer.json index c8534cbaa..8310c27a3 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,5 @@ { - "name": "rsky/p2-php", + "name": "open774/p2-php", "description": "The server side 2ch viewer written in PHP", "license": "X11", "repositories": [ diff --git a/lib/P2Commun.php b/lib/P2Commun.php index 162536c13..ee4d4416a 100644 --- a/lib/P2Commun.php +++ b/lib/P2Commun.php @@ -36,7 +36,7 @@ static public function createHTTPRequest($url , $method = HTTP_Request2::METHOD_ // �悭�g���w�b�_���w�� // p2��HTTP�ʐM�͓��Ɏw��̖�������Monazilla�𖼏��悤�ɂ��� $req->setHeader ('User-Agent', self::getP2UA(true,P2Util::isHost2chs($purl['host']))); - $req->setHeader ('Acecpt-Language', 'ja,en-us;q=0.7,en;q=0.3'); + $req->setHeader ('Accept-Language', 'ja,en-us;q=0.7,en;q=0.3'); $req->setHeader ('Accept', '*/*'); $req->setHeader ('Accept-Encoding', 'gzip, deflate'); @@ -113,7 +113,6 @@ static public function getP2UA($withMonazilla = true,$apiUA = false) } else { p2die("2ch�ƒʐM���邽�߂ɕK�v�ȏ�񂪐ݒ肳��Ă��܂���B"); } - } else { $p2ua = $_conf['p2ua']; } @@ -134,7 +133,7 @@ static public function getP2UA($withMonazilla = true,$apiUA = false) * 206 Partial Content * 304 Not Modified �� ���s���� * - * @return array|false ����������y�[�W���e��Ԃ��B���s������false��Ԃ��B + * @return string|false ����������y�[�W���e��Ԃ��B���s������false��Ԃ��B */ static public function getWebPage($url, &$error_msg, $timeout = 15) { @@ -203,7 +202,7 @@ static public function fileDownload($url, $localfile, $url_t = P2Util::throughIme($url); $info_msg_ht = "

    Error: {$error_msg}
    "; $info_msg_ht .= "rep2 info: {$url} �ɐڑ��ł��܂���ł����B

    "; - self::pushInfoHtml($info_msg_ht); + P2Util::pushInfoHtml($info_msg_ht); } return null; } diff --git a/lib/sb_header_i.inc.php b/lib/sb_header_i.inc.php index 43efb8ccc..9dbc5ae58 100644 --- a/lib/sb_header_i.inc.php +++ b/lib/sb_header_i.inc.php @@ -145,7 +145,7 @@ // ���C�ɔ� if ($board_info) { echo toolbar_i_favita_button('img/glyphish/icons2/28-star.png', null, $board_info); -} elseif ($aThreadList->spmode == 'soko') { +} elseif ($aThreadList->spmode != 'soko') { $refresh_url = "{$_conf['subject_php']}?{$host_bbs_q}{$spmode_q}{$_conf['k_at_a']}{$refresh_q}"; echo toolbar_i_standard_button('img/glyphish/icons2/01-refresh.png', null, $refresh_url); } diff --git a/rep2/live_read.php b/rep2/live_read.php index e79efcf84..a03e8e17f 100755 --- a/rep2/live_read.php +++ b/rep2/live_read.php @@ -32,7 +32,6 @@ //================================================================ $newtime = date('gis'); // ���������N���N���b�N���Ă��ēǍ����Ȃ��d�l�ɑ΍R����_�~�[�N�G���[ // $_today = date('y/m/d'); -$is_ajax = !empty($_GET['ajax']); //================================================= // �X���̎w�� @@ -325,7 +324,7 @@ if ($aThread->rescount) { // �����̎��́A���ǐ����X�V���Ȃ� - if ((isset($GLOBALS['word']) && strlen($GLOBALS['word']) > 0) || $is_ajax) { + if ((isset($GLOBALS['word']) && strlen($GLOBALS['word']) > 0)) { $aThread->readnum = $idx_data[5]; } else { $aThread->readnum = min($aThread->rescount, max(0, $idx_data[5], $aThread->resrange['to'])); @@ -342,7 +341,7 @@ // �������L�^ // ����headline�͍ŋߓǂ񂾃X���ɋL�^���Ȃ��悤�ɂ��Ă݂� //=========================================================== -if ($aThread->rescount && !$is_ajax && $aThread->host != 'headline.2ch.net'&& $aThread->host != 'headline.5ch.net') { +if ($aThread->rescount && $aThread->host != 'headline.2ch.net'&& $aThread->host != 'headline.5ch.net') { recRecent(implode('<>', array($aThread->ttitle, $aThread->key, $idx_data[2], '', '', $aThread->readnum, $idx_data[6], $idx_data[7], $idx_data[8], $newline, $aThread->host, $aThread->bbs))); diff --git a/rep2/read.php b/rep2/read.php index 4c572b2b8..cc269f4ab 100644 --- a/rep2/read.php +++ b/rep2/read.php @@ -450,7 +450,7 @@ // �������L�^ // ����headline�͍ŋߓǂ񂾃X���ɋL�^���Ȃ��悤�ɂ��Ă݂� //=========================================================== -if ($aThread->rescount && !$is_ajax && $aThread->host != 'headline.2ch.net'&& $aThread->host != 'headline.2ch.net') { +if ($aThread->rescount && !$is_ajax && $aThread->host != 'headline.2ch.net'&& $aThread->host != 'headline.5ch.net') { recRecent(implode('<>', array($aThread->ttitle, $aThread->key, $idx_data[2], '', '', $aThread->readnum, $idx_data[6], $idx_data[7], $idx_data[8], $newline, $aThread->host, $aThread->bbs))); diff --git a/rep2/title.php b/rep2/title.php index 142162d06..3fe6c5614 100644 --- a/rep2/title.php +++ b/rep2/title.php @@ -182,6 +182,7 @@
    • README.txt
    • README-EX.txt
    • +
    • README-774.txt
    • �����ȒP�ȑ���@
    • �g���p�b�N �X�V�L�^
    • diff --git a/rep2/viewtxt.php b/rep2/viewtxt.php index bf63b1ba7..705dedfb4 100644 --- a/rep2/viewtxt.php +++ b/rep2/viewtxt.php @@ -22,7 +22,7 @@ // �O���� //========================================================= // �ǂݍ��߂�t�@�C�������肷�� -$readable_files = array('doc/README.txt', 'doc/README-EX.txt', 'doc/ChangeLog.txt'); +$readable_files = array('doc/README.txt', 'doc/README-EX.txt', 'doc/ChangeLog.txt', 'doc/README-774.txt'); if ($readable_files && $file && (!in_array($file, $readable_files))) { $files_st = '�u' . implode('�v�Ɓu', $readable_files) . '�v'; From 2fa38509240595784750a205bcaab0d8d73a364d Mon Sep 17 00:00:00 2001 From: killer4989 Date: Thu, 5 Oct 2017 20:56:10 +0900 Subject: [PATCH 250/339] update README --- doc/README-killer.txt | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/doc/README-killer.txt b/doc/README-killer.txt index f83ab1cf9..7590d2f9b 100644 --- a/doc/README-killer.txt +++ b/doc/README-killer.txt @@ -1,28 +1,31 @@ -rep2 �@�\�g���p�b�N �S������(expack all in one) by killer +rep2 機能拡張パック 全部入り(expack all in one) by killer -�����H - rep2-expack_allinone https://github.com/2ch774/p2-php - ��L��X���ɏグ��ꂽ�C������荞�݂‚‹C�ɂȂ����Ƃ�����S�j���S�j������o�[�W�����ł��B +●何? + rep2-expack_allinone https://github.com/open774/p2-php + 上記やスレに上げられた修正を取り込みつつ気になったところをゴニョゴニョするバージョンです。 -���Ɛ� +●免責 - �{�\�t�g�E�F�A�̎g�p�ɂ�蒼�ڂ���ъԐړI�ɐ����������Ȃ鑹�Q���⏞�������܂���B - �g�p�͎��ȐӔC�ŁB + 本ソフトウェアの使用により直接および間接的に生じたいかなる損害も補償いたしません。 + 使用は自己責任で。 -������ +●注意 - �ݒu�Җ{�l�����p����̂͂������A�F�؂�؂�Ȃǂ��� - ��O�҂Ɉ��p����Ă��d���Ȃ��‹��Ŏg���̂͂�߂Ă��������B + 設置者本人が悪用するのはもちろん、認証を切るなどして + 第三者に悪用されても仕方ない環境で使うのはやめてください。 + また個人でカスタムしたものもあるので変なバグ・ゴミもあったりします。 + 「あれ?」と思ったら pull や clone、 fork し直したり、open774 さんの本家 rep2 をお使いください。 + (たまにこのリポジトリもフォークし直すことが多いのです。。。) -�����C�Z���X +●ライセンス - �{��p2�Ɠ������AX11���C�Z���X�ł��B + 本家p2と同じく、X11ライセンスです。 -��ChangeLog +●ChangeLog - https://github.com/killer4989/p2-php/commits/master �ɏ����Ă���R�~�b�g���O�łǂ���(�� + https://github.com/killer4989/p2-php/commits/master に書いてあるコミットログでどうぞ(コラ From b72a1d9f57bd57ef5d386cf219bdd92187084de0 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Mon, 9 Oct 2017 00:07:16 +0900 Subject: [PATCH 251/339] v171009.0000 --- conf/conf.inc.php | 4 ++-- doc/README-774.txt | 8 ++++++++ lib/login2ch.inc.php | 9 ++++----- lib/sb_print.inc.php | 2 +- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index 59f599963..e1b49cb1c 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '171005.1930', // rep2�̃o�[�W���� + 'p2version' => '171009.0000', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; @@ -78,7 +78,7 @@ function p2_init() $_conf['expack.download_url'] = 'https://github.com/open774/p2-php/releases'; $_conf['expack.history_url'] = 'https://github.com/open774/p2-php/blob/master/doc/README-774.txt'; $_conf['expack.tgrep_url'] = 'http://page2.xrea.jp/tgrep/search'; - $_conf['test.dig2ch_url'] = 'http://dig.5ch.net/'; + $_conf['test.dig2ch_url'] = 'https://dig.5ch.net/'; $_conf['expack.gate_php'] = '//open774.github.io/p2-php/gate.html'; $_conf['menu_php'] = 'menu.php'; $_conf['subject_php'] = 'subject.php'; diff --git a/doc/README-774.txt b/doc/README-774.txt index c756b29bf..57253aff0 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -72,6 +72,14 @@ PHP7 ��ChangeLog +171009.0000 +* �X�}�z�p��ʂ̍X�V�{�^���̕\�������Ɍ�肪�������̂��C�� +* headline.5ch.net�̃X���𗚗��ɒlj����Ȃ��悤�ɏC�� +* HTTP�ʐM���̃w�b�_�[�̃X�y���~�X�C�� +* �X�V�`�F�b�N�Ɏ��s�����ۂɃG���[���o��s��C�� +* �X���^�C������SSL�K�{�ɂȂ����̂ŏC�� +* �ꕔ�̊‹��ŃX���ꗗ��\�������ۂɌx�����o��s��C�� + 171005.1930 * �ˑ����C�u�������X�V�icomposer update�K�{�j * �X�}�z�p�ŋߓǂ񂾃X���ꗗ���ɍX�V�{�^����lj� diff --git a/lib/login2ch.inc.php b/lib/login2ch.inc.php index 2b3e99c72..475f415dd 100644 --- a/lib/login2ch.inc.php +++ b/lib/login2ch.inc.php @@ -23,11 +23,10 @@ function login2ch() return false; } - if ($_conf['2ch_ssl.maru']) { - $auth2ch_url = 'https://2chv.tora3.net/futen.cgi'; - } else { - $auth2ch_url = 'http://2chv.tora3.net/futen.cgi'; - } + $auth2ch_url= http_build_url(array( + "scheme" => $_conf['2chapi_ssl.auth']?"https":"http", + "host" => "2chv.tora3.net", + "path" => "futen.cgi")); $dolib2ch = 'DOLIB/1.00'; diff --git a/lib/sb_print.inc.php b/lib/sb_print.inc.php index 1cda94a63..9655424fd 100644 --- a/lib/sb_print.inc.php +++ b/lib/sb_print.inc.php @@ -450,7 +450,7 @@ function sb_print($aThreadList) // Birth $birth_format = isset($_conf['birth_format']) ? $_conf['birth_format'] : 'y/m/d'; - $birth = date($birth_format, $aThread->key); // (y/m/d H:i) + $birth = date($birth_format, intval($aThread->key)); // (y/m/d H:i) $td['birth'] = "{$birth}\n"; unset($birth_format); From 6197565e811f5f4ffbc4257dc7d45fe532621e31 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Mon, 9 Oct 2017 01:05:03 +0900 Subject: [PATCH 252/339] =?UTF-8?q?API=E7=B5=8C=E7=94=B1=E3=81=A7DAT?= =?UTF-8?q?=E3=82=92=E8=90=BD=E3=81=A8=E3=81=9B=E3=81=AA=E3=81=8B=E3=81=A3?= =?UTF-8?q?=E3=81=9F=E9=9A=9B=E3=81=ABbpdy=E3=82=92=E8=A1=A8=E7=A4=BA?= =?UTF-8?q?=E3=81=99=E3=82=8B=E6=A9=9F=E8=83=BD=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=EF=BC=88=E3=83=87=E3=83=90=E3=83=83=E3=82=B0=E5=B0=82=E7=94=A8?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ThreadRead.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/ThreadRead.php b/lib/ThreadRead.php index 6a065c9b0..1329d345a 100644 --- a/lib/ThreadRead.php +++ b/lib/ThreadRead.php @@ -319,6 +319,11 @@ protected function _downloadDat2chAPI($uaMona, $SID2ch, $from_bytes) { } elseif ($code == '501' && $apiUserStatus == '1') { // �Q�l�����ŏ�����Range�t��DAT�����ɃA�N�Z�X�����ꍇ��501 return $this->_downloadDat2chNotFound ('302'); } else { + if($_conf['2chapi_debug_print']==1) + { + P2Util::pushInfoHtml('

      p2 debug(ThreadRead::API):body='.$response->getBody ().'

      '); + } + return $this->_downloadDat2chNotFound ($code); } From e5e105baa415719efeaa7cbaeaa2d0719b98f815 Mon Sep 17 00:00:00 2001 From: killer4989 Date: Mon, 9 Oct 2017 16:31:35 +0900 Subject: [PATCH 253/339] =?UTF-8?q?=E6=B5=AA=E4=BA=BA=E3=81=AE=E6=9C=89?= =?UTF-8?q?=E5=8A=B9=E6=80=A7=E3=82=92=E7=A2=BA=E8=AA=8D=E3=81=A7=E3=81=8D?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/P2Util.php | 106 +++++++++++++++++++++++++++++++++++++++++ lib/auth2chapi.inc.php | 5 ++ lib/login2ch.inc.php | 5 ++ 3 files changed, 116 insertions(+) diff --git a/lib/P2Util.php b/lib/P2Util.php index 596b7bfcc..cc08dbf9e 100644 --- a/lib/P2Util.php +++ b/lib/P2Util.php @@ -2161,6 +2161,112 @@ public static function calcBeId($prof_id) return 0; } + // }}} + // {{{ checkRoninExpiration() + + /** + * �Q�l ID �̗L�����m�F + * + * @return boolean �Q�l ID ������� true + */ + function checkRoninExpiration() + { + global $_conf; + + $url = 'https://auth.bbspink.com/auth/timecheck.php'; + + if($_conf['2chapi_use'] == 1) { + if(empty($_conf['2chapi_appname'])) { + self::pushInfoHtml("

      p2 error: 2ch�ƒʐM���邽�߂ɕK�v�ȏ�񂪐ݒ肳��Ă��܂���B

      "); + return false; + } + $agent = sprintf($_conf['2chapi_ua.auth'], $x_2ch_ua); + $x_2ch_ua = $_conf['2chapi_appname']; + } else { + $agent = 'DOLIB/1.00'; + $x_2ch_ua = self::getP2UA(false,false); + } + + // 2ch�Q�l<��>ID, PW�ݒ��ǂݍ��� + if ($array = self::readIdPw2ch()) { + list($login2chID, $login2chPW, $autoLogin2ch) = $array; + + } else { + return false; + } + + try { + $req = P2Commun::getHTTPRequest2($url, HTTP_Request2::METHOD_POST); + + $req->setHeader('User-Agent', $agent); + $req->setHeader('X-2ch-UA', $x_2ch_ua); + + $req->addPostParameter('email', $login2chID); + $req->addPostParameter('pass', $login2chPW); + + // POST�f�[�^�̑��M + $res = P2Commun::getHTTPResponse($req); + + $code = $res->getStatus(); + if ($code != 200) { + self::pushInfoHtml("

      p2 Error: HTTP Error({$code})

      "); + } else { + $body = $res->getBody(); + } + } catch (Exception $e) { + self::pushInfoHtml("

      p2 Error: �Q�l<��>�̔F�؊m�F�T�[�o�ɐڑ��o���܂���ł����B({$e->getMessage()})

      "); + } + + // �ڑ����s�Ȃ�� + if (empty($body)) { + self::pushInfoHtml('

      p2 info: �Q�l<��>ID�Ɋւ���m�F���s���ɂ́APHP��cURL�֐�����OpenSSL�֐����L���ł���K�v������܂��B

      '); + + self::pushInfoHtml("

      p2 error: �Q�l<��>�̗L�����m�F�Ɏ��s���܂����B{$curl_msg}

      "); + return false; + } + + $body = trim($body); + + // �G���[���o + if (preg_match('/ERROR (\d+): (.*)/', $body, $matches)) { + self::pushInfoHtml("

      p2 error: �Q�l<��>�̗L�����m�F�Ɏ��s���܂����B{$matches[2]}[{$matches[1]}]

      "); + return false; + } + + // �A�J�E���g�����o�^ + if (preg_match('/User does not exists/', $body, $matches)) { + self::pushInfoHtml("

      p2 error: �Q�l�A�J�E���g���o�^����Ă��܂���

      "); + return false; + } + + // �L�������擾 + if (!preg_match('/Date of expiration: (\d+)\/(\d+)\/(\d+) (\d+):(\d+):(\d+)/', $body, $matches)) { + self::pushInfoHtml("

      p2 error: �L���������擾�ł��܂���ł����

      "); + return false; + } + + // �^�C���]�[�����ꎞ�ύX + date_default_timezone_set('America/Los_Angeles'); + $expiration = mktime ($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]); + + date_default_timezone_set(ini_get('date.timezone')); + $date = date("Y/m/d H:i:s", $expiration); + + // �L�������`�F�b�N + if (time() >= $expiration) { + self::pushInfoHtml("

      p2 error: �Q�l<��>�̗L�������؂�ł�� �L������:{$date}

      "); + return true; + } + + self::pushInfoHtml("

      p2 info: �Q�l<��>�̗L�������� {$date} �ł��

      "); + return true; + } + + // }}} // {{{ debug() /* static public function debug() diff --git a/lib/auth2chapi.inc.php b/lib/auth2chapi.inc.php index 103257fca..dab45871d 100644 --- a/lib/auth2chapi.inc.php +++ b/lib/auth2chapi.inc.php @@ -39,6 +39,11 @@ function authenticate_2chapi() list($login2chID, $login2chPW, $autoLogin2ch) = $array; } + // �Q�l�̗L�����m�F(�v ID / PW) + if (!empty($login2chID) && !empty($login2chPW)) { + P2Util::checkRoninExpiration(); + } + try { $req = P2Commun::createHTTPRequest($url,HTTP_Request2::METHOD_POST); diff --git a/lib/login2ch.inc.php b/lib/login2ch.inc.php index 0215b75b0..078dd1b7a 100644 --- a/lib/login2ch.inc.php +++ b/lib/login2ch.inc.php @@ -23,6 +23,11 @@ function login2ch() return false; } + // �Q�l�̗L�����m�F(�v ID / PW) + if (!empty($login2chID) && !empty($login2chPW)) { + P2Util::checkRoninExpiration(); + } + $auth2ch_url= http_build_url(array( "scheme" => $_conf['2ch_ssl.maru']?"https":"http", "host" => "2chv.tora3.net", From 17f3df2f2f8fb755815286258f29ef4b82c3b8c0 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Tue, 10 Oct 2017 10:41:44 +0900 Subject: [PATCH 254/339] =?UTF-8?q?=E3=82=B9=E3=83=9E=E3=83=9B=E5=90=91?= =?UTF-8?q?=E3=81=91read=E3=81=AE=E3=83=84=E3=83=BC=E3=83=AB=E3=83=90?= =?UTF-8?q?=E3=83=BC=E3=82=92=E3=83=9D=E3=83=83=E3=83=97=E3=82=A2=E3=83=83?= =?UTF-8?q?=E3=83=97=E3=83=A1=E3=83=8B=E3=83=A5=E3=83=BC=E3=81=AB=E5=A4=89?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/read_header_i.inc.php | 140 ++++++++++++++++++++------------------ lib/toolbar_i.inc.php | 65 ++++++++++++++---- rep2/css/iphone.css | 4 ++ 3 files changed, 130 insertions(+), 79 deletions(-) diff --git a/lib/read_header_i.inc.php b/lib/read_header_i.inc.php index 56090e7fe..1953ccedb 100644 --- a/lib/read_header_i.inc.php +++ b/lib/read_header_i.inc.php @@ -150,77 +150,37 @@ echo toolbar_i_fav_button('img/glyphish/icons2/28-star.png', null, $thread_info); } -// ���̑� -echo toolbar_i_showhide_button('img/gp0-more.png', null, 'read_toolbar_extra'); - - -echo ''; - -// }}} -// {{{ ���̑��̃c�[�� - -echo '
      '; -echo '
    '; - -// {{{ ���̑� - ���C�ɓ���Z�b�g - -if ($thread_info && $_conf['expack.misc.multi_favs']) { - echo ''; - for ($i = 1; $i <= $_conf['expack.misc.favset_num']; $i++) { - echo ''; - if ($i % 5 === 0 && $i != $_conf['expack.misc.favset_num']) { - echo ''; - } - } - $mod_cells = $_conf['expack.misc.favset_num'] % 5; - if ($mod_cells) { - $mod_cells = 5 - $mod_cells; - for ($i = 0; $i < $mod_cells; $i++) { - echo ''; - } - } - echo ''; -} - -// }}} -// {{{ ���̑� - �{�^���� - -echo ''; +// ���̑��{�^���ƃh���b�v�_�E�����j���[ +$icon = "img/gp0-more.png"; +$srcset = _toolbar_i_srcset($icon); +echo ' '; +//echo toolbar_i_dropdown_button('img/gp0-more.png', null); +echo << + '; +echo toolbar_i_menuItem('img/glyphish/icons2/63-runner.png', '>>1�Ɉړ�', $escaped_url); // �ގ��X������ -echo ''; +echo toolbar_i_menuItem('img/glyphish/icons2/06-magnifying-glass.png', '�ގ��X��������', $escaped_url); // �a������ -echo ''; - -// �X���b�h���ځ[�� -echo ''; +echo toolbar_i_palace_menuItem('img/glyphish/icons2/108-badge.png', '�a������', $thread_info); // IC2�����N�A���� if ($_conf['expack.ic2.enabled'] && $_conf['expack.ic2.thread_imagelink']) { $escaped_url = 'iv2.php?field=memo&keyword=' . rawurlencode($aThread->ttitle) . "&session_no_close=1{$_conf['k_at_a']}"; - echo ''; } -echo ''; +// ���C�ɓ���Z�b�g +if ($thread_info && $_conf['expack.misc.multi_favs']) { + echo toolbar_i_menuItem('img/glyphish/icons2/28-star.png', '���C�ɓ���Z�b�g�ɓo�^', '#' ,'data-toggle="modal" data-target="#favsetModal"'); +} -// }}} +echo '
  • '; //�d�؂� -echo '
    '; - echo toolbar_i_fav_button('img/glyphish/icons2/28-star.png', '-', $thread_info, $i); - echo '
     
    '; +// >>1�Ɉړ� $escaped_url = "{$_conf['read_php']}?{$host_bbs_key_q}&ls=1-{$rnum_range}{$offline_q}{$_conf['k_at_a']}"; -echo toolbar_i_standard_button('img/glyphish/icons2/63-runner.png', '>>1', $escaped_url); -echo ''; $escaped_url = "{$_conf['subject_php']}?{$host_bbs_key_q}&itaj_en=" . UrlSafeBase64::encode($aThread->itaj) . '&method=similar&word=' . rawurlencode($aThread->ttitle_hc) . "&refresh=1{$_conf['k_at_a']}"; -echo toolbar_i_standard_button('img/glyphish/icons2/06-magnifying-glass.png', '�ގ��X��', $escaped_url); -echo ''; -echo toolbar_i_palace_button('img/glyphish/icons2/108-badge.png', '�a������', $thread_info); -echo ''; -echo toolbar_i_aborn_button('img/glyphish/icons2/128-bone.png', '���ځ[��', $thread_info); -echo ''; + if ($_conf['expack.ic2.thread_imagecount']) { require_once P2EX_LIB_DIR . '/ic2_getcount.inc.php'; $cnt = 0; @@ -231,26 +191,76 @@ $cnt = -1; } if ($cnt == 0) { - echo toolbar_i_disabled_button('img/glyphish/icons2/42-photos.png', - '�摜'); + echo toolbar_i_disabled_menuItem('img/glyphish/icons2/42-photos.png', + '�摜�ꗗ'); } else { - echo toolbar_i_opentab_button('img/glyphish/icons2/42-photos.png', - '�摜' . ($cnt < 0 ? '(?)' : "({$cnt})"), $escaped_url); + echo toolbar_i_menuItem('img/glyphish/icons2/42-photos.png', + '�摜�ꗗ' . ($cnt < 0 ? '(?)' : "({$cnt})"), $escaped_url, ' target="_blank"'); } } else { - echo toolbar_i_opentab_button('img/glyphish/icons2/42-photos.png', - '�摜', $escaped_url); + echo toolbar_i_menuItem('img/glyphish/icons2/42-photos.png', + '�摜�ꗗ', $escaped_url, ' target="_blank"'); } - echo '
    '; +// �X���b�h���ځ[�� +echo toolbar_i_aborn_menuItem('img/glyphish/icons2/128-bone.png', '�X�������ځ[��', $thread_info); + +// ���O�폜 +if (file_exists($aThread->keydat)) { + $escaped_url = "info.php?{$host_bbs_key_q}{$ttitle_en_q}&dele=1{$_conf['k_at_a']}"; + echo toolbar_i_menuItem('img/glyphish/icons2/64-zap.png', '���O���폜', $escaped_url); +} else { + echo toolbar_i_disabled_menuItem('img/glyphish/icons2/64-zap.png', '���O���폜'); +} + +echo ''; + +unset($icon,$srcset); +// }}} +// {{{ ���C�ɃZ�b�g�_�C�A���O +if ($thread_info && $_conf['expack.misc.multi_favs']) { + $favset_body = ''; + for ($i = 1; $i <= $_conf['expack.misc.favset_num']; $i++) { + $favset_body .= ''; + if ($i % 5 === 0 && $i != $_conf['expack.misc.favset_num']) { + $favset_body .= ''; + } + } + $mod_cells = $_conf['expack.misc.favset_num'] % 5; + if ($mod_cells) { + $mod_cells = 5 - $mod_cells; + for ($i = 0; $i < $mod_cells; $i++) { + $favset_body .= ''; + } + } + $favset_body .= '
    '; + $favset_body .= toolbar_i_fav_button('img/glyphish/icons2/28-star.png', '-', $thread_info, $i); + $favset_body .= '
     
    '; -echo ''; +echo << + + +EOP; +} // }}} // {{{ ���X�����t�H�[�� diff --git a/lib/toolbar_i.inc.php b/lib/toolbar_i.inc.php index b12eceeae..d763ea56c 100644 --- a/lib/toolbar_i.inc.php +++ b/lib/toolbar_i.inc.php @@ -57,6 +57,53 @@ function _toolbar_i_button($icon, $label, $uri, $attrs = '') EOS; } +// }}} +/** + * �c�[���o�[�{�^�� (�����N) + * + * @param string $icon + * @param string $label + * @param string $uri + * @param string $attrs + * @return string + */ +function toolbar_i_menuItem($icon, $label, $uri, $attrs = '') +{ + global $_conf; + + if (strlen($attrs) && strncmp($attrs, ' ', 1) !== 0) { + $attrs = ' ' . $attrs; + } + + $srcset = _toolbar_i_srcset($icon); + + return <<{$label} +EOS; +} + +// }}} +// {{{ toolbar_i_disabled_button() + +/** + * �����ȃc�[���o�[�{�^�� + * + * @param string $icon + * @param string $label + * @param string $uri + * @return string + */ +function toolbar_i_disabled_menuItem($icon, $label) +{ + global $_conf; + + $srcset = _toolbar_i_srcset($icon); + + return <<{$label} +EOS; +} + // }}} // {{{ toolbar_i_standard_button() @@ -279,7 +326,7 @@ function toolbar_i_fav_button($icon, $label, $info, $setnum = 0) * @param object $info @see lib/get_info.inc.php: get_thread_info() * @return string */ -function toolbar_i_palace_button($icon, $label, $info) +function toolbar_i_palace_menuItem($icon, $label, $info) { $attrs = ' onclick="return iutil.toolbarRunHttpCommand(this, event);"'; if (!$info->palace) { @@ -293,13 +340,8 @@ function toolbar_i_palace_button($icon, $label, $info) 'ttitle_en' => UrlSafeBase64::encode($info->ttitle), 'setpal' => 2, ), '', '&'); - if (empty($_conf['expack.iphone.toolbars.no_label']) && !empty($label) ) { - $label = '
    ' . $label; - } else { - $label = ''; - } - return _toolbar_i_button($icon, $label, $uri, $attrs); + return toolbar_i_menuItem($icon, $label, $uri, $attrs); } // }}} @@ -313,7 +355,7 @@ function toolbar_i_palace_button($icon, $label, $info) * @param object $info @see lib/get_info.inc.php: get_thread_info() * @return string */ -function toolbar_i_aborn_button($icon, $label, $info) +function toolbar_i_aborn_menuItem($icon, $label, $info) { $attrs = ' onclick="return iutil.toolbarRunHttpCommand(this, event);"'; if (!$info->taborn) { @@ -327,13 +369,8 @@ function toolbar_i_aborn_button($icon, $label, $info) 'ttitle_en' => UrlSafeBase64::encode($info->ttitle), 'taborn' => 2, ), '', '&'); - if (empty($_conf['expack.iphone.toolbars.no_label']) && !empty($label) ) { - $label = '
    ' . $label; - } else { - $label = ''; - } - return _toolbar_i_button($icon, $label, $uri, $attrs); + return toolbar_i_menuItem($icon, $label, $uri, $attrs); } // }}} diff --git a/rep2/css/iphone.css b/rep2/css/iphone.css index 1bb7603e7..0a8649d89 100644 --- a/rep2/css/iphone.css +++ b/rep2/css/iphone.css @@ -1046,6 +1046,10 @@ div.mtoolbar > .ttitle > span.btitle { width: 98%; } +.popup { + background-color: rgba(0, 0, 0, 0.8); +} + /* }}} */ /* From 70e06d6e8751ec6b0451d3152109c9757097c330 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Wed, 11 Oct 2017 01:04:54 +0900 Subject: [PATCH 255/339] =?UTF-8?q?=E6=8A=BC=E3=81=9B=E3=81=AA=E3=81=84?= =?UTF-8?q?=E3=83=A1=E3=83=8B=E3=83=A5=E3=83=BC=E9=A0=85=E7=9B=AE=E3=81=AE?= =?UTF-8?q?=E3=82=B9=E3=82=BF=E3=82=A4=E3=83=AB=E3=82=92=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/toolbar_i.inc.php | 2 +- rep2/css/iphone.css | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/toolbar_i.inc.php b/lib/toolbar_i.inc.php index d763ea56c..8a2f7ba36 100644 --- a/lib/toolbar_i.inc.php +++ b/lib/toolbar_i.inc.php @@ -100,7 +100,7 @@ function toolbar_i_disabled_menuItem($icon, $label) $srcset = _toolbar_i_srcset($icon); return <<{$label} +
  • {$label}{$label}
  • EOS; } diff --git a/rep2/css/iphone.css b/rep2/css/iphone.css index 0a8649d89..89d8f58e4 100644 --- a/rep2/css/iphone.css +++ b/rep2/css/iphone.css @@ -1050,6 +1050,17 @@ div.mtoolbar > .ttitle > span.btitle { background-color: rgba(0, 0, 0, 0.8); } +div.ntoolbar .disabled a:visited { + color: #555;!important +} + +.disabled > a > img{ + filter: alpha(opacity=20); + -ms-filter: "alpha(opacity=20)"; + -moz-opacity: 0.2; + opacity: 0.2; +} + /* }}} */ /* From c56e839012691c6b31b3fdc42d8023187da6e11e Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Wed, 11 Oct 2017 10:12:42 +0900 Subject: [PATCH 256/339] =?UTF-8?q?=E3=82=B9=E3=83=9E=E3=83=9B=EF=BC=9A?= =?UTF-8?q?=E7=94=BB=E5=83=8F=E8=A1=A8=E7=A4=BA=E3=81=AE=E3=83=9C=E3=82=BF?= =?UTF-8?q?=E3=83=B3=E3=81=8C=E6=96=87=E5=AD=97=E3=81=AB=E5=AF=BE=E3=81=97?= =?UTF-8?q?=E3=81=A6=E7=B4=B0=E3=81=99=E3=81=8E=E3=82=8B=E4=B8=8D=E5=85=B7?= =?UTF-8?q?=E5=90=88=E4=BF=AE=E6=AD=A3=20=E3=82=B9=E3=83=9E=E3=83=9B?= =?UTF-8?q?=EF=BC=9AAndroid=E3=81=A7=E3=82=82=E3=82=B9=E3=83=AF=E3=82=A4?= =?UTF-8?q?=E3=83=97=E3=83=A1=E3=83=8B=E3=83=A5=E3=83=BC=E3=81=8C=E5=8B=95?= =?UTF-8?q?=E3=81=8F=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/css/limelight.css | 3 +-- rep2/js/iphone.js | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/rep2/css/limelight.css b/rep2/css/limelight.css index e677202c4..9fb99d110 100644 --- a/rep2/css/limelight.css +++ b/rep2/css/limelight.css @@ -105,7 +105,6 @@ table.limelight-toolbar td { span.limelight-button { display: inline-block; width: 45px; - height: 15px; margin: 0; padding: 5px 10px; background-color: rgba(0, 0, 0, 0.5); @@ -114,7 +113,7 @@ span.limelight-button { color: #fff; text-shadow: #000 1px 1px 1px; font-family: sans-serif; - font-size: 15px; + font-size: 13px; font-weight: bold; text-align: center; line-height: 100%; diff --git a/rep2/js/iphone.js b/rep2/js/iphone.js index 9df463121..976343788 100644 --- a/rep2/js/iphone.js +++ b/rep2/js/iphone.js @@ -9,7 +9,7 @@ var iutil = { * �N���C�A���g��iPhone���ǂ��� * @type {Boolean} */ - 'iphone': (/iP(hone|od)/).test(navigator.userAgent), + 'iphone': (/(iP(hone|od|ad)|Chrome)/).test(navigator.userAgent), /** * ���������N�̐��K�\�� * @type {RegExp} From 404b482cc0b0d489d16bb9322d5bcf91e8f3ba8f Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Wed, 11 Oct 2017 11:27:51 +0900 Subject: [PATCH 257/339] =?UTF-8?q?XMLHttpRequest();=E3=81=ABwithCredentia?= =?UTF-8?q?ls=20=3D=20true;=E3=82=92=E8=A8=AD=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/js/ic2_iphone.js | 2 ++ rep2/js/ic2_popinfo.js | 1 + rep2/js/invite.js | 1 + rep2/js/iphone.js | 2 ++ rep2/js/menu.js | 2 ++ rep2/js/menu_i.js | 5 +++++ rep2/js/post_draft.js | 1 + rep2/js/respopup_iphone.js | 1 + rep2/js/sb_iphone.js | 1 + rep2/js/tgrepctl.js | 1 + 10 files changed, 17 insertions(+) diff --git a/rep2/js/ic2_iphone.js b/rep2/js/ic2_iphone.js index 1f6d82d9d..87e570937 100644 --- a/rep2/js/ic2_iphone.js +++ b/rep2/js/ic2_iphone.js @@ -135,6 +135,7 @@ document.addEventListener('DOMContentLoaded', function(event) { try { req = new XMLHttpRequest(); req.open('GET', url, false); + req.withCredentials = true; req.send(null); res = null; @@ -177,6 +178,7 @@ document.addEventListener('DOMContentLoaded', function(event) { + _uniquery(), false ); + req.withCredentials = true; req.send(null); if (req.readyState == 4) { diff --git a/rep2/js/ic2_popinfo.js b/rep2/js/ic2_popinfo.js index 55e4c4038..c8f0b33ca 100644 --- a/rep2/js/ic2_popinfo.js +++ b/rep2/js/ic2_popinfo.js @@ -113,6 +113,7 @@ var _ic2_popinfo_js_onload = function() { + _uniquery(), false ); + req.withCredentials = true; req.send(null); if (req.readyState == 4) { diff --git a/rep2/js/invite.js b/rep2/js/invite.js index 7bcc533d7..24f20d8fe 100644 --- a/rep2/js/invite.js +++ b/rep2/js/invite.js @@ -18,6 +18,7 @@ function Invite(title, url, host, bbs, key, resnum) var uri = 'read_async.php?host='+host+'&bbs='+bbs+'&key='+key+'&ls='+resnum+'n&q=2&offline=1'; var req = getXmlHttp(); req.open('get', uri, false); + req.withCredentials = true; req.send(null); if (req.readyState == 4 && req.status == 200) { msg = '\n\n' + req.responseText; diff --git a/rep2/js/iphone.js b/rep2/js/iphone.js index 976343788..a9ce8f136 100644 --- a/rep2/js/iphone.js +++ b/rep2/js/iphone.js @@ -619,6 +619,7 @@ iutil.httpGetText = function(uri) { try { req = new XMLHttpRequest(); req.open('GET', uri, false); + req.withCredentials = true; req.send(null); if (req.readyState == 4) { @@ -645,6 +646,7 @@ iutil.httpGetText = function(uri) { iutil.httpGetAsync = function(uri, callback) { var req = new XMLHttpRequest(); req.open('GET', uri, true); + req.withCredentials = true; req.onreadystatechange = function() { if (req.readyState == 4) { if (req.status == 200) { diff --git a/rep2/js/menu.js b/rep2/js/menu.js index 277df3031..efd1969b0 100644 --- a/rep2/js/menu.js +++ b/rep2/js/menu.js @@ -56,6 +56,7 @@ function replaceMenuItem(itemId, qKey, qValue) receiver.innerHTML = 'Now Loading...'; req.open('get', uri, false); + req.withCredentials = true; req.send(null); if (req.readyState == 4) { @@ -95,6 +96,7 @@ function changeSkin(skinName) } req.open('get', uri, false); + req.withCredentials = true; req.send(null); try { diff --git a/rep2/js/menu_i.js b/rep2/js/menu_i.js index 3ade1fa50..20e564e53 100644 --- a/rep2/js/menu_i.js +++ b/rep2/js/menu_i.js @@ -142,6 +142,7 @@ req = new XMLHttpRequest(); req.open('GET', uri, true); + req.withCredentials = true; req.onreadystatechange = generateOnToggle(req, div, toggled); req.send(null); }; @@ -169,6 +170,7 @@ toggled = div.getAttribute('toggled') === 'true'; req = new XMLHttpRequest(); req.open('GET', uri, true); + req.withCredentials = true; req.onreadystatechange = generateOnToggle(req, div, toggled); req.send(null); }; @@ -195,6 +197,7 @@ req = new XMLHttpRequest(); req.open('GET', uri, true); + req.withCredentials = true; req.onreadystatechange = generateOnToggle(req, div, toggled); req.send(null); }; @@ -546,6 +549,7 @@ if (anchor.href.indexOf('?spmode=merge_favita') === -1) { req = new XMLHttpRequest(); req.open('GET', 'info_js.php?' + sliding.query, true); + req.withCredentials = true; req.onreadystatechange = generateOnBoardInfoGet(req, JSON.parse, pop, table); req.send(null); } @@ -589,6 +593,7 @@ table.style.display = 'none'; req = new XMLHttpRequest(); req.open('GET', 'info_js.php?' + sliding.query, true); + req.withCredentials = true; req.onreadystatechange = generateOnThreadInfoGet(req, JSON.parse, pop, table); req.send(null); diff --git a/rep2/js/post_draft.js b/rep2/js/post_draft.js index 7aa2e8fb4..a0692a7ac 100644 --- a/rep2/js/post_draft.js +++ b/rep2/js/post_draft.js @@ -37,6 +37,7 @@ var post_draft = function(host, bbs, key, csrfid, data, fin, err) { if (!req) return; req.open('POST', 'post_draft.php', true); + req.withCredentials = true; req.onreadystatechange = function (aEvt) { if (req.readyState == 4) { if(req.status == 200) diff --git a/rep2/js/respopup_iphone.js b/rep2/js/respopup_iphone.js index 04634850e..aed07a1f4 100644 --- a/rep2/js/respopup_iphone.js +++ b/rep2/js/respopup_iphone.js @@ -163,6 +163,7 @@ ipoputil.popup = function(url, evt) { var popid = '_respop' + popnum; var req = new XMLHttpRequest(); req.open('GET', url + '&ajax=true&respop_id=' + popnum, true); + req.withCredentials = true; req.onreadystatechange = function() { if (this.readyState == 4) { if (this.status == 200) { diff --git a/rep2/js/sb_iphone.js b/rep2/js/sb_iphone.js index e9e1ae172..0a9eaeac8 100644 --- a/rep2/js/sb_iphone.js +++ b/rep2/js/sb_iphone.js @@ -390,6 +390,7 @@ table.style.display = 'none'; req = new XMLHttpRequest(); req.open('GET', 'info_js.php?' + sliding.query, true); + req.withCredentials = true; req.onreadystatechange = generateOnThreadInfoGet(req, JSON.parse, pop, table); req.send(null); diff --git a/rep2/js/tgrepctl.js b/rep2/js/tgrepctl.js index 7a6099be0..15e724378 100644 --- a/rep2/js/tgrepctl.js +++ b/rep2/js/tgrepctl.js @@ -27,6 +27,7 @@ tGrep.execRequest = function (uri, menuId) { receiver.innerHTML = 'Now Loading...'; req.open('get', uri, false); + req.withCredentials = true; req.send(null); if (req.readyState == 4) { From 8e986cff56e2106363e3dc4e714f6cbd39be97b5 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Wed, 11 Oct 2017 11:38:30 +0900 Subject: [PATCH 258/339] =?UTF-8?q?=E3=82=B9=E3=83=9E=E3=83=9B:read?= =?UTF-8?q?=E3=81=ABtarget=3D"=5Fblank"=E3=82=92=E6=8C=87=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ShowThreadI.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ShowThreadI.php b/lib/ShowThreadI.php index 8db0cc160..038a13f02 100644 --- a/lib/ShowThreadI.php +++ b/lib/ShowThreadI.php @@ -839,7 +839,7 @@ public function plugin_linkURL($url, $purl, $str) } else { $link_url = $url; } - return "{$str}"; + return "{$str}"; } return false; } From c4db142a301e8a2c9fa14451ef46cf2a7c468c9c Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Wed, 11 Oct 2017 12:21:46 +0900 Subject: [PATCH 259/339] =?UTF-8?q?API:UA=E3=82=92=E6=9B=B4=E6=96=B0=20thx?= =?UTF-8?q?!=20http://jbbs.shitaraba.net/bbs/read.cgi/computer/44179/14916?= =?UTF-8?q?34793/155?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/conf_user_def.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/conf_user_def.inc.php b/conf/conf_user_def.inc.php index 77233cedc..6b2227892 100644 --- a/conf/conf_user_def.inc.php +++ b/conf/conf_user_def.inc.php @@ -405,14 +405,14 @@ 'DOLIB/1.00' => '1 DOLIB/1.00', 'Monazilla/1.3' => '2 Monazilla/1.3', 'Monazilla/1.00 (%s)' => '3 Monazilla/1.00 (AppName)', - 'Mozilla/3.0 (compatible; %s)' => '4 Mozilla/3.0 (compatible; AppName)', + 'Mozilla/5.0 (compatible; %s)' => '4 Mozilla/5.0 (compatible; AppName)', ); //DAT�擾�Ŏg�p����User-Agent $conf_user_def['2chapi_ua.read'] = "Mozilla/3.0 (compatible; %s)"; // ("Monazilla/1.3") $conf_user_sel['2chapi_ua.read'] = array( 'Monazilla/1.00 (%s)' => '1 Monazilla/1.00 (AppName)', - 'Mozilla/3.0 (compatible; %s)' => '2 Mozilla/3.0 (compatible; AppName)', + 'Mozilla/5.0 (compatible; %s)' => '2 Mozilla/5.0 (compatible; AppName)', ); // API�F�؂�SSL���g�p���� From b1b4e0d59f9d1523694065c473e68ae9769b9d0f Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Wed, 11 Oct 2017 13:06:38 +0900 Subject: [PATCH 260/339] =?UTF-8?q?=E3=82=B9=E3=83=9E=E3=83=9B:Android?= =?UTF-8?q?=E3=81=AEFirefox=E3=81=A7=E3=82=B9=E3=83=AF=E3=82=A4=E3=83=97?= =?UTF-8?q?=E3=83=A1=E3=83=8B=E3=83=A5=E3=83=BC=E3=81=8C=E5=8B=95=E3=81=8F?= =?UTF-8?q?=E3=82=89=E3=81=97=E3=81=84=E3=81=AE=E3=81=A7=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rep2/js/iphone.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rep2/js/iphone.js b/rep2/js/iphone.js index a9ce8f136..5ee27b05c 100644 --- a/rep2/js/iphone.js +++ b/rep2/js/iphone.js @@ -9,7 +9,7 @@ var iutil = { * �N���C�A���g��iPhone���ǂ��� * @type {Boolean} */ - 'iphone': (/(iP(hone|od|ad)|Chrome)/).test(navigator.userAgent), + 'iphone': (/(iP(hone|od|ad)|Android)/).test(navigator.userAgent), /** * ���������N�̐��K�\�� * @type {RegExp} From d202c2299cb4d313dc3dc268779fa29e5641cee1 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Wed, 11 Oct 2017 15:07:31 +0900 Subject: [PATCH 261/339] =?UTF-8?q?Firefox=E3=81=AEAndroid=E7=89=88?= =?UTF-8?q?=E3=82=92=E3=82=B9=E3=83=9E=E3=83=9B=E6=89=B1=E3=81=84=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=E3=80=82=E7=89=B9=E5=88=A5=E3=81=AA=E9=85=8D?= =?UTF-8?q?=E6=85=AE=E3=81=AF=E7=84=A1=E3=81=84=E3=81=AE=E3=81=A7=E4=B8=8D?= =?UTF-8?q?=E5=85=B7=E5=90=88=E3=81=AF=E7=9F=A5=E3=82=89=E3=82=93=E3=80=82?= =?UTF-8?q?=20Android2.2=E4=BB=A5=E4=B8=8B=E3=81=AB=E5=AF=BE=E3=81=99?= =?UTF-8?q?=E3=82=8B=E4=BA=92=E6=8F=9B=E6=80=A7=E3=81=AE=E9=85=8D=E6=85=AE?= =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4=E3=80=82=E6=97=A9=E3=81=8F=E3=81=AA?= =?UTF-8?q?=E3=82=8B=E3=81=AF=E3=81=9A=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/UA.php | 53 ++++++++++++++++++++++++++++++++++++++++++- lib/bootstrap.php | 4 ++-- lib/toolbar_i.inc.php | 2 +- rep2/menu_i.php | 4 ++-- 4 files changed, 57 insertions(+), 6 deletions(-) diff --git a/lib/UA.php b/lib/UA.php index 37d9f4723..bc93110bc 100644 --- a/lib/UA.php +++ b/lib/UA.php @@ -183,7 +183,7 @@ static public function isIPhoneGroup($aua = null) // iPod touch // Mozilla/5.0 (iPod; U; CPU like Mac OS X; ja-jp) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A110a Safari/419.3 - if (preg_match('/iP(?:hone|[ao]d)/', $ua) || self::isAndroidWebKit($ua)) { + if (preg_match('/iP(?:hone|[ao]d)/', $ua) || self::isAndroid($ua)) { $isiPhoneGroup = true; } @@ -457,6 +457,34 @@ static public function isNintendoDS($ua = null) return false; } + // }}} + // {{{ isAndroid() + + /** + * UA��Android�Ȃ�true��Ԃ��B + * + * @param string $ua UA���w�肷��Ȃ� + * @return boolean + */ + static public function isAndroid($ua = null) + { + if (is_null($ua) and isset($_SERVER['HTTP_USER_AGENT'])) { + $ua = $_SERVER['HTTP_USER_AGENT']; + } + if (!$ua) { + return false; + } + // �V�~�����[�^ + // Mozilla/5.0 (Linux; U; Android 1.0; en-us; generic) AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2 + // T-mobile G1 + // Mozilla/5.0 (Linux; U; Android 1.0; en-us; dream) AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2 + // generic��dream���قȂ� + if (false !== strpos($ua, 'Android')) { + return true; + } + return false; + } + // }}} // {{{ isAndroidWebKit() @@ -485,6 +513,29 @@ static public function isAndroidWebKit($ua = null) return false; } + // }}} + // {{{ isAndroidWebKit() + + /** + * UA��Android�i��Firefox�j�Ȃ�true��Ԃ��B + * + * @param string $ua UA���w�肷��Ȃ� + * @return boolean + */ + static public function isAndroidFirefox($ua = null) + { + if (is_null($ua) and isset($_SERVER['HTTP_USER_AGENT'])) { + $ua = $_SERVER['HTTP_USER_AGENT']; + } + if (!$ua) { + return false; + } + if (false !== strpos($ua, 'Android') && false !== strpos($ua, 'Firefox')) { + return true; + } + return false; + } + // }}} // {{{ isSafariGroup() diff --git a/lib/bootstrap.php b/lib/bootstrap.php index 9f117614b..2e44b29b0 100644 --- a/lib/bootstrap.php +++ b/lib/bootstrap.php @@ -457,7 +457,7 @@ EOS; } - +/* // Android�ł�JavaScript-XPath���g�� if ($_conf['iphone'] && UA::isAndroidWebKit()) { $_conf['extra_headers_ht'] .= << EOS; } - +*/ // iPhone�p�X�L�� if ($_conf['iphone'] && isset($_conf['expack.iphone.skin'])) { if (strpos($_conf['expack.iphone.skin'], DIRECTORY_SEPARATOR) === false) { diff --git a/lib/toolbar_i.inc.php b/lib/toolbar_i.inc.php index 8a2f7ba36..d62a156dd 100644 --- a/lib/toolbar_i.inc.php +++ b/lib/toolbar_i.inc.php @@ -497,7 +497,7 @@ function _toolbar_i_client_type() switch ($_conf['client_type']) { case 'i': - $type = UA::isAndroidWebKit() ? 'android' : 'iphone'; + $type = UA::isAndroid() ? 'android' : 'iphone'; break; case 'i': $type = 'mobile'; diff --git a/rep2/menu_i.php b/rep2/menu_i.php index 41488030d..9fa915a8c 100644 --- a/rep2/menu_i.php +++ b/rep2/menu_i.php @@ -55,10 +55,10 @@ - + - + Date: Wed, 11 Oct 2017 15:16:27 +0900 Subject: [PATCH 262/339] v171011.1515 --- conf/conf.inc.php | 2 +- doc/README-774.txt | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/conf/conf.inc.php b/conf/conf.inc.php index e1b49cb1c..615d2c193 100644 --- a/conf/conf.inc.php +++ b/conf/conf.inc.php @@ -7,7 +7,7 @@ // �o�[�W������� $_conf = array( 'p2name' => 'rep2-expack_allinone', // rep2�̖��O - 'p2version' => '171009.0000', // rep2�̃o�[�W���� + 'p2version' => '171011.1515', // rep2�̃o�[�W���� ); $_conf['p2ua'] = "{$_conf['p2name']}/{$_conf['p2version']}"; diff --git a/doc/README-774.txt b/doc/README-774.txt index 57253aff0..772beec6b 100644 --- a/doc/README-774.txt +++ b/doc/README-774.txt @@ -72,6 +72,14 @@ PHP7 ��ChangeLog +171011.1515 +* �X�}�z�pread�̃c�[���o�[���|�b�v�A�b�v���j���[�`���ɕύX +* �X�}�z�pread�̊O�������N��target="_blank"���w�� +* �X�}�z�p�摜�\���̃{�^���������ɑ΂��čׂ�����s��C�� +* Firefox��Android�ł��X�}�z�����ɕύX +* Android 2.2�ȉ��ɑΉ����邽�߂̃R�[�h���폜���ĕ\���������� +* �X�}�z�p�X���ꗗ��Android�ł��X���C�v���j���[�������悤�ɏC�� + 171009.0000 * �X�}�z�p��ʂ̍X�V�{�^���̕\�������Ɍ�肪�������̂��C�� * headline.5ch.net�̃X���𗚗��ɒlj����Ȃ��悤�ɏC�� From ebcbc47d97c33f0e49fd03a0a98857048f4f47bc Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Wed, 11 Oct 2017 16:45:03 +0900 Subject: [PATCH 263/339] =?UTF-8?q?expack.ic2.enabled=E3=82=922=E3=81=AB?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=81=A8PC=EF=BE=8B=EF=BE=9E=EF=BD=AD?= =?UTF-8?q?=EF=BD=B0=E3=81=A7=E7=94=BB=E5=83=8FURL=E3=81=8C=E3=81=82?= =?UTF-8?q?=E3=82=8B=E3=81=A8fatal=20error=E3=81=8C=E5=87=BA=E3=82=8B?= =?UTF-8?q?=E4=B8=8D=E5=85=B7=E5=90=88=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/wiki/read.inc.php | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/lib/wiki/read.inc.php b/lib/wiki/read.inc.php index 52df5997d..379445b5d 100644 --- a/lib/wiki/read.inc.php +++ b/lib/wiki/read.inc.php @@ -4,13 +4,12 @@ read�n���ʂŎg�p���Ă��邽�ߍ폜�s�� */ -// ImageCache2���L���̏ꍇ -if (in_array($_conf['expack.ic2.enabled'], array($_conf['ktai'] ? 1 : 2, 3))) { -// �u���摜URL - if ($_conf['expack.ic2.enabled'] >= 2) { - require_once P2_LIB_DIR . '/wiki/ReplaceImageUrlCtl.php'; - $GLOBALS['replaceImageUrlCtl'] = new ReplaceImageUrlCtl(); - } +// ImageCache2���L���̏ꍇ�摜�u��URL��ǂݍ��� +if ((!$_conf['ktai'] && $_conf['expack.ic2.enabled'] % 2 == 1) || + ($_conf['ktai'] && $_conf['expack.ic2.enabled'] >= 2)) { + require_once P2_LIB_DIR . '/wiki/ReplaceImageUrlCtl.php'; + $GLOBALS['replaceImageUrlCtl'] = new ReplaceImageUrlCtl(); + } // �g�уr���[�ȊO�̏ꍇ if (!$_conf['ktai'] || $_conf['iphone']) { From 28e813da3863c5fb083f025550be04f925ca4ea2 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Thu, 12 Oct 2017 11:57:02 +0900 Subject: [PATCH 264/339] =?UTF-8?q?http=E3=81=8C=E7=84=A1=E3=81=8F?= =?UTF-8?q?=E3=81=A6=E3=82=82cURLMulti=E3=81=8C=E4=BD=BF=E3=81=88=E3=82=8B?= =?UTF-8?q?=E3=81=AF=E3=81=9A=E3=81=AA=E3=81=AE=E3=81=A7=E3=83=81=E3=82=A7?= =?UTF-8?q?=E3=83=83=E3=82=AF=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/fetch-subject-txt.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/fetch-subject-txt.php b/scripts/fetch-subject-txt.php index f393cee7e..4a3bc170f 100644 --- a/scripts/fetch-subject-txt.php +++ b/scripts/fetch-subject-txt.php @@ -9,8 +9,8 @@ die('CLI only!'); } -if (!extension_loaded('http')) { - fwrite(STDERR, 'http extension is not loaded.' . PHP_EOL); +if (!$_conf['expack.use_curl_multi'] && !$_conf['expack.use_pecl_http']) { + fwrite(STDERR, 'Setting of expack.use_curl_multi or expack.use_pecl_http is required.' . PHP_EOL); exit(1); } From 00ddb7f4a329ab4de395b43ec4801ba47eef4669 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Thu, 12 Oct 2017 12:35:59 +0900 Subject: [PATCH 265/339] =?UTF-8?q?README.md=E3=80=80=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index eab3247da..c5d93a93e 100644 --- a/README.md +++ b/README.md @@ -8,10 +8,25 @@ 独自の改良も行っています。 -### 追加機能 +* [スクリーンショット](https://open774.github.io/p2-php/screenshots.html) +* [Wiki](https://github.com/open774/p2-php/wiki) +* **[FAQ](https://github.com/open774/p2-php/wiki/FAQ) スレに書く前にからならず確認** + +### 主な追加機能 各機能の説明はdocディレクトリのREADMEファイルを見てください。 +* cronとかで最近読んだスレなどのdatをDL出来るスクリプト追加 +
     php scripts/fetch-dat.php --mode モードを一つ指定(fav recent res_hist)
    +* 名無しが節穴になる板に名無しで書き込むときに警告を出す機能を追加 +* NGあぼーんの対象になったレスのIDを自動的にNGあぼーんする機能を追加 +* 「設定管理」からキャッシュ・履歴の消去できる機能を追加 +* 本家からbeのログイン部分を移植してBE2.0に対応 +* rep2に登録された外部板のリンクををrep2で開けるようにした(Janeと同じ動作) +* 0ちゃんねるスクリプトを使用した外部板の過去ログDATを取り込み対応 +* SOCKS5プロクシ経由の接続に対応(人柱) +* tor内の掲示板(.onionドメイン)をtor経由で閲覧する機能を追加(人柱) +* curl を用いた並列ダウンロード機能を追加(人柱機能) ## セットアップ @@ -58,7 +73,7 @@ moriyoshi++ スレに貼られている画像を自動で保存する機能、**ImageCache2**があります。 -see also [doc/ImageCache2/README.txt](https://github.com/rsky/p2-php/blob/master/doc/ImageCache2/README.txt), [doc/ImageCache2/INSTALL.txt](https://github.com/rsky/p2-php/blob/master/doc/ImageCache2/INSTALL.txt) +see also [doc/ImageCache2/README.txt](https://github.com/open774/p2-php/blob/master/doc/ImageCache2/README.txt), [doc/ImageCache2/INSTALL.txt](https://github.com/open774/p2-php/blob/master/doc/ImageCache2/INSTALL.txt) ### 準備 @@ -83,10 +98,25 @@ see also [doc/ImageCache2/README.txt](https://github.com/rsky/p2-php/blob/master 細かい挙動の変更は `メニュー > 設定管理 > ユーザー設定編集` から行えます。 -Webブラウザから変更できない項目は [conf/conf_admin.inc.php](https://github.com/rsky/p2-php/blob/master/conf/conf_admin.inc.php) (基本), [conf/conf_admin_ex.inc.php](https://github.com/rsky/p2-php/blob/master/conf/conf_admin_ex.inc.php) (拡張パック), [conf/conf_ic2.inc.php](https://github.com/rsky/p2-php/blob/master/conf/conf_ic2.inc.php) (ImageCache2) を直接編集します。 +Webブラウザから変更できない項目は [conf/conf_admin.inc.php](https://github.com/open774/p2-php/blob/master/conf/conf_admin.inc.php) (基本), [conf/conf_admin_ex.inc.php](https://github.com/open774/p2-php/blob/master/conf/conf_admin_ex.inc.php) (拡張パック), [conf/conf_ic2.inc.php](https://github.com/open774/p2-php/blob/master/conf/conf_ic2.inc.php) (ImageCache2) を直接編集します。 どういうことができるか書き起こすのが面倒なので設定ファイルのコメントを見てください。 +## cronを使った便利機能 +下記のスクリプトをcronで定期的に回すとより便利にrep2を使用することが出来ます。 +必要に応じてどちらか一つを使用すれば充分でしょう。 + +### 履歴の新着数更新 +ブラウザから更新を行うと一覧の表示に時間がかかるため、subject.txtを更新するためのスクリプトが付属しています。 +並列ダウンロードで高速ですが、使用するために設定変更を行う必要があります。 + +
    php scripts/fetch-subject-txt.php --mode モードを一つ指定(fav recent res_hist)
    + +### 更新ついでにDATのダウンロード +並列ダウンロードの代わりにsubject.txtとDATのダウンロード機能を実装したスクリプトです。 +時間はかかりますが、設定変更無しで使えるのでこちらがお手軽です。 + +
    php scripts/fetch-dat.php --mode モードを一つ指定(fav recent res_hist)
    ## 更新 From 405e8742e778701745536e98a33ceb8f50cf1cb5 Mon Sep 17 00:00:00 2001 From: open774 <11309861+open774@users.noreply.github.com> Date: Thu, 12 Oct 2017 15:15:38 +0900 Subject: [PATCH 266/339] =?UTF-8?q?PHP7.1=E3=81=A7Warning=E3=81=8C?= =?UTF-8?q?=E5=87=BA=E3=82=8B=E4=B8=8D=E5=85=B7=E5=90=88=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=20http://egg.5ch.net/test/read.cgi/software/1505071083/425=20?= =?UTF-8?q?=E3=82=B9=E3=83=9E=E3=83=9B:res=5Fpopup=5Freload=E3=81=AE?= =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E3=81=8C=E5=8F=8D=E6=98=A0=E3=81=95=E3=82=8C?= =?UTF-8?q?=E3=81=AA=E3=81=84=E4=B8=8D=E5=85=B7=E5=90=88=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/expack/tgrep/view.inc.php | 2 +- rep2/spm_k.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/expack/tgrep/view.inc.php b/lib/expack/tgrep/view.inc.php index 352026687..8178033c4 100644 --- a/lib/expack/tgrep/view.inc.php +++ b/lib/expack/tgrep/view.inc.php @@ -167,7 +167,7 @@ function moveSubject(href, serachWord, query) {
    �Etitle; ?> ita; ?> tkey); ?>