Changeset 426941
- Timestamp:
- 08/22/2011 04:55:17 AM (15 years ago)
- Location:
- drop-in-dropbox/trunk
- Files:
-
- 5 edited
-
DropboxUploader.php (modified) (1 diff)
-
a.charset.php (modified) (4 diffs)
-
functions.php (modified) (6 diffs)
-
readme.txt (modified) (1 diff)
-
run2.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
drop-in-dropbox/trunk/DropboxUploader.php
r426902 r426941 1 1 <?php 2 2 3 /** 4 3 5 * Dropbox Uploader 4 * 6 7 * 8 5 9 * Copyright (c) 2009 Jaka Jancar 6 * 10 11 * 12 7 13 * Permission is hereby granted, free of charge, to any person obtaining a copy 14 8 15 * of this software and associated documentation files (the "Software"), to deal 16 9 17 * in the Software without restriction, including without limitation the rights 18 10 19 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 20 11 21 * copies of the Software, and to permit persons to whom the Software is 22 12 23 * furnished to do so, subject to the following conditions: 13 * 24 25 * 26 14 27 * The above copyright notice and this permission notice shall be included in 28 15 29 * all copies or substantial portions of the Software. 16 * 30 31 * 32 17 33 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 34 18 35 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 36 19 37 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 38 20 39 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 40 21 41 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 42 22 43 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 44 23 45 * THE SOFTWARE. 46 24 47 * 48 25 49 * @author Jaka Jancar [jaka@kubje.org] [http://jaka.kubje.org/] 50 26 51 * @version 1.1.5 52 27 53 */ 54 28 55 class DropboxUploader { 56 29 57 protected $email; 58 30 59 protected $password; 60 31 61 protected $caCertSourceType = self::CACERT_SOURCE_SYSTEM; 62 32 63 const CACERT_SOURCE_SYSTEM = 0; 64 33 65 const CACERT_SOURCE_FILE = 1; 66 34 67 const CACERT_SOURCE_DIR = 2; 68 35 69 protected $caCertSource; 70 36 71 protected $loggedIn = false; 72 37 73 protected $cookies = array(); 38 74 75 76 39 77 /** 78 40 79 * Constructor 80 41 81 * 82 42 83 * @param string $email 84 43 85 * @param string|null $password 86 44 87 */ 88 45 89 public function __construct($email, $password) { 90 46 91 // Check requirements 92 47 93 if (!extension_loaded('curl')) 94 48 95 throw new Exception('DropboxUploader requires the cURL extension.'); 49 96 97 98 50 99 $this->email = $email; 100 51 101 $this->password = $password; 52 } 53 102 103 } 104 105 106 54 107 public function setCaCertificateFile($file) 108 55 109 { 110 56 111 $this->caCertSourceType = self::CACERT_SOURCE_FILE; 112 57 113 $this->caCertSource = $file; 58 } 59 114 115 } 116 117 118 60 119 public function setCaCertificateDir($dir) 120 61 121 { 122 62 123 $this->caCertSourceType = self::CACERT_SOURCE_DIR; 124 63 125 $this->caCertSource = $dir; 64 } 65 126 127 } 128 129 130 66 131 public function upload($filename, $remoteDir='/') { 132 67 133 if (!file_exists($filename) or !is_file($filename) or !is_readable($filename)) 134 68 135 throw new Exception("File '$filename' does not exist or is not readable."); 69 136 137 138 70 139 if (!is_string($remoteDir)) 140 71 141 throw new Exception("Remote directory must be a string, is ".gettype($remoteDir)." instead."); 72 142 143 144 73 145 if (!$this->loggedIn) 146 74 147 $this->login(); 75 148 149 150 76 151 $data = $this->request('https://www.dropbox.com/home'); 152 77 153 $token = $this->extractToken($data, 'https://dl-web.dropbox.com/upload'); 78 154 155 156 79 157 $data = $this->request('https://dl-web.dropbox.com/upload', true, array('plain'=>'yes', 'file'=>'@'.$filename, 'dest'=>$remoteDir, 't'=>$token)); 158 80 159 if (strpos($data, 'HTTP/1.1 302 FOUND') === false) 160 81 161 throw new Exception('Upload failed!'); 82 } 83 162 163 } 164 165 166 84 167 protected function login() { 168 85 169 $data = $this->request('https://www.dropbox.com/login'); 170 86 171 $token = $this->extractToken($data, '/login'); 87 172 173 174 88 175 $data = $this->request('https://www.dropbox.com/login', true, array('login_email'=>$this->email, 'login_password'=>$this->password, 't'=>$token)); 89 176 177 178 90 179 if (stripos($data, 'location: /home') === false) 180 91 181 throw new Exception('Login unsuccessful.'); 92 182 183 184 93 185 $this->loggedIn = true; 94 } 186 187 } 188 189 95 190 96 191 protected function request($url, $post=false, $postData=array()) { 192 97 193 $ch = curl_init(); 194 98 195 curl_setopt($ch, CURLOPT_URL, $url); 196 99 197 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 198 100 199 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 200 101 201 switch ($this->caCertSourceType) { 202 102 203 case self::CACERT_SOURCE_FILE: 204 103 205 curl_setopt($ch, CURLOPT_CAINFO, $this->caCertSource); 206 104 207 break; 208 105 209 case self::CACERT_SOURCE_DIR: 210 106 211 curl_setopt($ch, CURLOPT_CAPATH, $this->caCertSource); 212 107 213 break; 214 108 215 } 216 109 217 curl_setopt($ch, CURLOPT_HEADER, 1); 218 110 219 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 220 111 221 if ($post) { 222 112 223 curl_setopt($ch, CURLOPT_POST, $post); 224 113 225 curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); 226 114 227 } 115 228 229 230 116 231 // Send cookies 232 117 233 $rawCookies = array(); 234 118 235 foreach ($this->cookies as $k=>$v) 236 119 237 $rawCookies[] = "$k=$v"; 238 120 239 $rawCookies = implode(';', $rawCookies); 240 121 241 curl_setopt($ch, CURLOPT_COOKIE, $rawCookies); 122 242 243 244 123 245 $data = curl_exec($ch); 124 246 247 248 125 249 if ($data === false) 250 126 251 throw new Exception('Cannot execute request: '.curl_error($ch)); 127 252 253 254 128 255 // Store received cookies 256 129 257 preg_match_all('/Set-Cookie: ([^=]+)=(.*?);/i', $data, $matches, PREG_SET_ORDER); 258 130 259 foreach ($matches as $match) 260 131 261 $this->cookies[$match[1]] = $match[2]; 132 262 263 264 133 265 curl_close($ch); 134 266 267 268 135 269 return $data; 136 } 270 271 } 272 273 137 274 138 275 protected function extractToken($html, $formAction) { 276 139 277 if (!preg_match('/<form [^>]*'.preg_quote($formAction, '/').'[^>]*>.*?(<input [^>]*name="t" [^>]*value="(.*?)"[^>]*>).*?<\/form>/is', $html, $matches) || !isset($matches[2])) 278 140 279 throw new Exception("Cannot extract token! (form action=$formAction)"); 280 141 281 return $matches[2]; 142 } 282 283 } 284 285 143 286 144 287 } 288 -
drop-in-dropbox/trunk/a.charset.php
r426902 r426941 1 1 <?php 2 2 3 3 4 // libs/a/a.charset.php 4 5 6 5 7 // (c) Yuri Popoff, Nov 2003, popoff.donetsk.ua 6 8 9 7 10 // A set of functions to process charsets 8 11 9 12 10 13 14 15 11 16 function _charset_count_bad($s) 12 17 18 13 19 { //count "bad" symbols in russian, in windows-1251 14 20 21 15 22 $r=0; 16 23 24 17 25 for($i=0;$i<strlen($s);$i++) 18 26 19 { 27 28 { 29 20 30 21 31 switch($s[$i]) 22 32 33 23 34 { 24 35 36 25 37 case '¸': 26 38 39 27 40 case '¨': 28 41 42 29 43 case '«': 30 44 45 31 46 case '»': 32 47 48 33 49 break; 34 50 51 35 52 default: 36 53 54 37 55 $c=ord($s[$i]); 38 56 57 39 58 if($c>=0x80&&$c<0xc0||$c<32) 40 59 60 41 61 $r++; 42 62 63 43 64 } 44 65 45 } 66 67 } 68 46 69 47 70 return $r; 48 71 72 49 73 } 50 74 51 75 52 76 77 78 53 79 function _charset_count_chars($s) 54 80 81 55 82 { //count "good" symbols in russian, in windows-1251 56 83 84 57 85 $r=0; 58 86 87 59 88 for($i=0;$i<strlen($s);$i++) 60 89 61 { 90 91 { 92 62 93 63 94 $c=ord($s[$i]); 64 95 96 65 97 if($c>=0xc0) 66 98 99 67 100 $r++; 68 101 69 } 102 103 } 104 70 105 71 106 return $r; 72 107 108 73 109 } 74 110 75 111 76 112 113 114 77 115 function _charset_count_pairs($s) 78 116 117 79 118 { //count "bad" pairs of chars for a string in russian, in windows-1251 80 119 120 81 121 $a=array( 82 122 123 83 124 0 => 'úûü', 84 125 126 85 127 1 => 'éïôý', 86 128 129 87 130 2 => 'éôý', 88 131 132 89 133 3 => 'æéïôõöùúûüýþ', 90 134 135 91 136 4 => 'éôù', 92 137 138 93 139 5 => 'úûü', 94 140 141 95 142 6 => 'çéòôõøùúûýÿ', 96 143 144 97 145 7 => 'éïôõù', 98 146 147 99 148 8 => 'úûü', 100 149 150 101 151 9 => 'àáæèéóùúûüýþÿ', 102 152 153 103 154 10 => 'áãéïôõùúûüýþÿ', 104 155 156 105 157 11 => 'éðöúý', 106 158 159 107 160 12 => 'äæçéú', 108 161 162 109 163 13 => 'éìïú', 110 164 165 111 166 14 => 'úûü', 112 167 168 113 169 15 => 'áâãäæçéõùúýþ', 114 170 171 115 172 16 => 'éúý', 116 173 174 117 175 17 => 'é', 118 176 177 119 178 18 => 'æé', 120 179 180 121 181 19 => 'úûü', 122 182 183 123 184 20 => 'áâãäæçéêïõöøùúüýþÿ', 124 185 186 125 187 21 => 'áæçéôõö÷ùúûüþÿ', 126 188 189 127 190 22 => 'áãäæçéëíïðñòôõö÷øùúüýþÿ', 128 191 192 129 193 23 => 'áãäæçéïñôõö÷ùúûýþÿ', 130 194 195 131 196 24 => 'áãäæçéôõøùúûýÿ', 132 197 198 133 199 25 => 'áâãäæçéêëìïñòôõö÷øùúûýþÿ', 134 200 201 135 202 26 => 'àáâãäæçèéêëìíîïðñòóôõö÷øùúûüý', 136 203 204 137 205 27 => 'àîôúûüýþ', 138 206 207 139 208 28 => 'àéëðóõúûüý', 140 209 210 141 211 29 => 'àáåæèîóö÷øùúûüýþ', 142 212 213 143 214 30 => 'èîóôúûüýÿ', 144 215 216 145 217 31 => 'àîóôúûüý' 146 218 219 147 220 ); 148 221 222 149 223 $b=array( 150 224 225 151 226 0 => 'àààáàâàãàäàåàæàçàèàéàêàëàíàîàñàòàóàôàõàöà÷àøàùàýàþàÿáãáìáòáõáöá÷áøáùáúáüáþáÿâáâæâõâúâþãçãêãòã÷ãÿäääõäýåàåáåãåååæåèåîåïåñåóåôåöåùåýåþåÿæáæâæëæïæðæöæ÷æþçççñçòçøçýçþèàèåèæèèèéèîèïèóèôèöèøèùèýèþèÿéïéðêçêìê÷êøëáëâëçëíëøëùìâìãìõì÷ìýìþíáíâíýîàîâîãîåîæîçîèîéîêîëîìîîîïîóîôîõîöîøîùîýîþîÿïìïöðçñãñäñæñçñúñýòáòãòäòçòïòøòùòúòýóàóáóâóæóèóéóîóóóôóõóöóùóþóÿôëôìõãõäõêõïõñõøõýöâöìöóöû÷â÷ì÷ð÷øøðøñø÷ùíùðùüýâýãýäýçýéýêýìýíýïýòýôýõýÿþàþáþâþãþäþåþæþçþéþëþìþíþïþðþõþöþøþþÿáÿãÿäÿåÿæÿçÿèÿéÿïÿðÿøÿùÿþÿÿ', 152 227 228 153 229 1 => 'àààæàîàïàôàùàýáàáááâáãáäáæáçáêáëáìáíáñáòáóáõáöá÷áøáùáúáûáüáþáÿâáâââãâäâæâçâêâëâìâíâïâðâñâòâóâõâöâ÷âøâùâúâüâþâÿãàãáãâãããäãåãçãèãêãëãìãíãðãñãòãóã÷ãøãÿäáäâäãäääæäçäêäëäìäíäîäïäðäñäòäõäöä÷äøäúäûäüäýäþåàåáåïåóåôåýåÿæáæâæãæäæææêæëæìæíæîæïæðæñæöæ÷æüæþçáçâçãçäçåçæçççèçêçëçìçíçðçñçòçóçöç÷çøçúçûçüçýçþçÿèàèýêâêäêæêçêêêëêìêíêñêòêöê÷êøëáëâëãëäëæëçëêëëëìëíëïëñëòëôëõë÷ëøëùìáìâìãìêìëìììíìïìðìñìòìóìôìõìöì÷ìøìùìûìüìýìþíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíüíýîàîîîôîõðáðâðãðäðæðçðêðëðìðíðïðððñðòðôðõðöð÷ðøðùñáñâñãñäñæñçñìñíñïñðñññôñõñ÷ñøñùñúñûñüñýñþòàòáòâòãòäòçòèòêòëòìòíòïòðòñòòòóòôòõòöò÷òøòùòúòûòüòýòþóîóóóöóùóýõãõäõåõèõêõëõìõíõïõðõñõòõóõøõýöâöèöêöìöó÷â÷å÷ê÷ë÷ì÷í÷î÷ð÷ò÷ó÷ø÷üøâøêøëøìøíøîøïøðøñøòøóøöø÷øüøþùîùðùüúþûáûãûæûèûïûðûóûöûøûÿüáüâüãüäüæüçüêüìüíüîüïüñüòüôüöü÷üøüùþàþáþâþãþåþæþçþéþêþìþíþïþõþöþ÷þøþùþþÿáÿâÿãÿäÿåÿæÿèÿéÿêÿíÿðÿñÿõÿöÿ÷ÿøÿþÿÿ', 154 230 231 155 232 2 => 'àààîàóàôàùàýáàáááâáãáäáæáçáêáìáíáñáòáõáöá÷áøáùáúáûáüáþáÿâáâââãâäâæâçâêâëâìâíâïâòâóâõâöâ÷âøâùâúâüâþãàãáãâãããäãåãçãèãêãìãíãñãòã÷ãøãÿäáäãäääæäçäêäëäìäíäïäñäòäõäöä÷äøäúäüäýäþäÿåàåèåóåôåýæàæáæâæãæäæåæææêæëæìæíæîæïæðæñæóæöæ÷æüæþçåçæçççêçñçòçóçöç÷çøçüçýçþèóèôèýêâêäêæêçêêêìêñêòêöê÷êøëáëâëãëäëæëçëêëëëìëíëïëñëòëóëôëõë÷ëøëùëûìáìâìãìêìëìììíìïìðìñìòìóìôìõìöì÷ìøìùìüìýìþíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíüíýîàîôîýïêïìïíïïïñïòïôïöï÷ïøïûïüïÿðáðâðãðäðæðçðêðëðìðíðïðððñðòðôðõðöð÷ðøðùðüðþñáñâñãñäñæñçñèñíñðñññôñöñ÷ñøñùñúñüñýòáòâòãòäòçòêòëòìòíòïòñòòòóòôòõòöò÷òøòùòúòüòýòþóáóâóæóèóîóïóóóôóöóýõàõâõãõäõåõèõêõëõìõíõïõðõñõòõóõøõýöâöèöêöì÷â÷ê÷ë÷ì÷í÷ð÷ò÷ø÷üøâøêøëøìøíøïøðøñøòøöø÷øüøþùàùåùíùîùðùóùüúþúÿûùüáüâüãüäüæüçüêüìüíüîüïüôüöü÷üøüùþàþáþâþãþäþåþæþçþéþêþëþìþíþïþðþñþòþõþöþ÷þøþùþþÿáÿâÿãÿäÿåÿèÿéÿïÿðÿöÿ÷ÿøÿþÿÿ', 156 233 234 157 235 3 => 'àààêàîàôàøàýáááâáãáäáæáçáèáêáëáìáíáîáðáñáòáóáõáöá÷áøáùáúáûáüáþáÿâáâââãâäâæâçâêâëâìâíâïâðâñâòâóâõâöâ÷âøâùâúâûâüâþâÿãàãáãâãããäãçãêãëãìãíãîãðãñãòãóã÷ãøãÿäáäâäãäääæäçäèäêäëäìäíäïäðäñäòäóäõäöä÷äøäúäûäüäýäþäÿåàåâåãåæåçåïåóåõåöå÷åøåùåýçáçâçãçäçåçæçççèçêçëçìçíçîçðçñçòçóçöç÷çøçúçûçüçýçþçÿèæèóèôèöèùèýêâêäêåêæêçêêêëêìêíêðêñêòêöê÷êøëáëâëãëäëæëçëêëëëìëíëïëñëòëôëõë÷ëøëùëüìáìâìãìèìêìëìììíìïìðìñìòìôìõìöì÷ìøìùìüìýìþìÿíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíûíüíýîþðáðâðãðäðæðçðêðëðìðïðððñðòðôðõðöð÷ðøðùðüñàñáñâñãñäñåñæñçñèñëñìñíñïñðñññóñôñõñöñ÷ñøñùñúñûñüñýñþòàòáòâòãòäòçòêòëòìòíòïòðòñòòòôòõòöò÷òøòùòúòûòüòýóâóãóçóèóéóêóîóïóóóôóöóýóÿ÷â÷ê÷ë÷ì÷í÷î÷ð÷ò÷ø÷üøàøâøêøëøìøíøîøïøðøñøóøöø÷øüøþÿáÿâÿãÿåÿæÿçÿèÿéÿêÿëÿíÿïÿðÿñÿòÿõÿöÿ÷ÿøÿùÿþÿÿ', 158 236 237 159 238 4 => 'àààçàóàùàýáááâáãáäáæáçáêáëáìáíáñáòáóáõáöá÷áøáùáúáûáüáþáÿâáâââãâäâæâìâíâïâðâñâòâõâöâ÷âøâùâúâüâþâÿãáãâãããäãåãçãêãìãíãñãòãóã÷ãøãÿäáäãäääæäçäêäëäìäíäïäðäñäòäõäöä÷äøäúäûäüäýäþäÿåóåõåùåýæáæâæãæäæææêæëæìæíæïæðæñæöæ÷æüæþçáçâçãçäçæçççêçëçìçðçñçòçöç÷çøçúçûçüçþçÿèãèõèýêâêäêæêçêêêìêíêñêòêöê÷êøëáëâëãëäëæëçëêëëëìëíëïëñëòëôëõë÷ëøëùëüëþìáìâìãìêìëìììïìðìñìòìôìõìöì÷ìøìùìüìýìþìÿíáíâíãíäíæíçíëíííðíñíôíõíöí÷íøíùíüíýîàîôîýîþîÿïåïêïìïíïïïñïòïôïöï÷ïøïûïüïÿðáðâðãðäðæðçðêðëðìðíðïðððòðôðõðöð÷ðøðùðüñáñãñäñæñçñíñðñññôñõñöñøñùñúñûñüñýñþñÿòáòãòäòçòêòëòìòíòïòñòòòóòôòõòöò÷òøòùòúòûòüòýòþóäóçóôõãõäõèõêõëõìõíõïõðõñõòõóõøõýöâöèöêöì÷â÷ê÷ë÷ì÷í÷î÷ð÷ò÷ø÷üøâøêøëøìøíøîøïøðøñøöø÷øüøþûçûèûóûöûÿüâüãüäüæüçüíüîüïüñüôüöü÷üøüùýãýäýçýéýëýìýïýñýòýôýõýÿþàþáþâþãþäþåþëþìþñþòþõþöþ÷þùþþÿáÿâÿåÿæÿçÿêÿëÿïÿðÿöÿøÿþÿÿ', 160 239 240 161 241 5 => 'àààåàæàçàèàéàîàïàðàñàóàôàõàöà÷àøàùàýàþàÿáááâáãáäáæáçáõáöá÷áøáùáúâáâââãâæâïâõâùâúâþãáãâãããçãòãøäãäõäöäþåàåáåãåäåååæåèåëåíåîåóåôåùåýåþåÿæáæâæææìæ÷æþçñçöçøçúçýèàèáèäèåèæèèèéèîèðèóèôèöè÷èøèùèýèþèÿéâéîéõêæêçêêêìê÷ëäëæëçëïëôëõëøëùìâìðìôìõìøìýìþíæíëíôíýîàîåîèîéîóî÷îøîþîÿïìïïïôðùñãñæñçñùñúñýñþòãòäòçòïòôòöòùòúòýòþóàóèóéóîóóóôóöóøóùóýôìôíôñô÷ôûõãõêõðõòõøöâöìöó÷â÷ì÷ð÷øøâøìøïøðøöø÷øþùíùîýâýãýäýçýéýëýìýíýïýðýñýõýÿþàþáþâþãþäþåþæþçþéþêþëþìþíþïþðþõþöþ÷þøþþÿáÿãÿåÿæÿçÿèÿéÿêÿïÿöÿ÷ÿøÿùÿþÿÿ', 162 242 243 163 244 6 => 'àààáàçàèàîàïàóàôàöàøàýáááâáãáäáæáçáêáëáìáíáðáñáòáõáöá÷áøáùáúáüáþáÿâáâââãâäâåâæâçâèâêâëâìâíâîâïâðâñâòâóâõâöâ÷âøâùâúâûâüâþâÿãáãâãããäãåãçãêãìãíãîãðãñãòã÷ãøãÿäáäâäãäääæäçäêäìäíäïäðäñäòäõäöä÷äøäúäýåàåæåèåîåóåõåýåþåÿæáæâæãæäæææêæëæìæíæîæïæðæñæóæöæ÷æüæþèàèáèóèôèýêâêäêæêçêêêëêìêíêðêñêòêöê÷êøëáëâëãëäëåëæëçëêëëëìëíëîëïëñëòëóëôëõë÷ëøëùëûëüëþëÿìàìáìâìãìêìëìììíìïìðìñìòìôìõìöì÷ìøìùìûìüìýìþìÿíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíüíýîàîáîâîäîæîèîëîîîïîòîóîôîõîöîùîýîþîÿïàïåïèïêïìïíïîïïïðïñïòïóïôïöï÷ïøïûïüïÿðáðâðãðäðæðçðêðëðìðíðïðððñðòðôðõðöð÷ðøðùðûðüðþðÿñàñáñâñãñäñåñæñçñèñëñìñíñîñïñðñññòñóñôñõñöñ÷ñøñùñúñûñüñýñþñÿóáóâóãóäóçóìóîóïóóóôóöóøóýöâöåöèöêöìöî÷à÷â÷å÷ê÷ë÷ì÷í÷î÷ð÷ò÷ó÷ø÷üüáüâüãüäüæüçüêüìüíüîüïüôüöü÷üøüùþàþáþâþãþäþåþæþçþéþêþìþíþïþñþòþõþöþ÷þøþùþþ', 164 245 246 165 247 7 => 'àýáááâáãáäáæáçáêáìáíáñáòáõáöá÷áøáùáúáüáþáÿâáâââãâäâæâçâìâïâñâòâõâöâ÷âøâùâúâüâþãáãâãããäãçãêãìãñãòã÷ãøãÿäáäãäääæäçäëäìäïäñäòäõäöä÷äøäúäýäþåàåãåäåæåçåîåïåñåóåõå÷åùåýæáæâæãæäæææêæëæìæíæîæïæðæñæöæ÷æüæþçáçãçäçåçæçççèçêçëçìçîçñçòçóçöç÷çøçúçûçüçýçþçÿèáèçèïèôèõèùèýêâêäêæêçêêêëêìêíêðêñêòêöê÷êøëáëâëãëäëæëçëêëëëìëíëïëñëòëôëõë÷ëøëùëüìáìâìãìêìëìììðìñìòìôìõìöì÷ìøìùìüìýìþíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíýîàîæîèîóîôîöîýîþîÿðáðâðãðäðæðçðêðëðìðíðïðððñðòðôðõðöð÷ðøðùðüðþñàñáñâñãñäñåñæñçñèñëñìñíñîñïñðñññòñóñôñõñöñ÷ñøñùñúñûñüñýñþñÿòàòáòâòãòäòåòçòêòëòìòíòïòðòñòòòóòôòõòöò÷òøòùòúòûòýòþòÿóâóãóæóîóóóôóöóøóýöâöåöèöêöì÷à÷â÷ê÷ë÷ì÷í÷î÷ð÷ò÷ø÷üøàøâøåøêøëøìøíøîøïøðøñøòøóøöø÷øüøþûäûæûèûëûïûòûóûøûÿüâüãüäüæüçüèüêüíüîüïüñüôüöü÷üøüùýâýãýäýçýéýêýëýìýïýðýñýòýôýõýÿþàþáþâþãþäþåþæþçþéþêþëþíþïþðþñþòþõþöþ÷þøþùþþÿãÿäÿæÿçÿêÿïÿðÿñÿõÿöÿøÿþÿÿ', 166 248 249 167 250 8 => 'àààåàæàèàéàîàóàõà÷àùàýàþáâáãáæáçáìáòáõáöá÷áùáúáÿâáâââãâäâæâçâìâïâòâùâúâþãáãâãããêãñã÷ãÿäáäãäääëäïäõä÷äøäúäüäýåàåáåååæåèåêåîåïåóåôå÷åøåùåýåþåÿæáæâæãæææëæìæïæðæöæ÷æüæþçççòçöçüçýçþèàèáèâèãèäèåèæèçèèèéèêèëèíèîèïèòèóèôèõèöè÷èøèùèýèþèÿéâéãéäéåéçéêéëéìéîéðéôéõé÷éøêäêæêçëáëãëæëçëìëíëïëòëôëõë÷ëøëùìðìòìõìøìùìüìýìþíëíðíøíùíýîåîæîèîéîîîóîôîöî÷îøîùîþîÿïìïôïöï÷ïüðãðçðôðõðöðùðüñáñãñæñçñðñôñùñúñýòáòãòäòçòïòôòõòøòùòúòþóàóáóâóåóæóçóèóéóîóðóóóôóõóöóøóùóýóþóÿôëôíô÷õãõäõêõìõòõøõýöâöì÷â÷ë÷ì÷ð÷øøâøïøðøñøòøöø÷øþùîùüýâýãýäýçýéýêýëýìýíýïýðýñýôýõýÿþàþáþâþãþäþåþæþçþéþêþìþðþñþõþöþ÷þøþþÿáÿãÿäÿèÿéÿêÿðÿñÿöÿ÷ÿøÿù', 168 251 252 169 253 9 => 'âáâââãâäâåâæâçâèâêâëâìâíâïâðâñâòâóâõâöâ÷âøâùâúâûâüâþâÿãáãâãããäãåãçãèãêãëãìãíãîãðãñãòãóã÷ãøãÿäáäâäãäääçäêäëäìäíäïäðäñäõäöä÷äøäúäûäüäýäþåàåáåâåãåäåååæåçåèåéåêåìåîåïåñåòåóåôåõåöå÷åøåùåýåþåÿçáçâçãçäçæçççèçêçëçìçíçîçðçñçòçóçöç÷çøçúçûçüçýçþçÿêâêäêæêçêêêìêíêðêòêöê÷êøëáëâëãëäëæëêëëëìëíëïëñëòëôëõë÷ëøëùëüëþëÿìáìâìãìêìììíìïìðìòìôìõìöì÷ìøìùìüìýìþìÿíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íùíüíýîàîáîåîæîèîéîëîìîîîïîñîóîôîõîöî÷îøîùîýîþîÿïàïèïêïëïìïíïîïïïðïñïòïóïöï÷ïøïûïüïÿðàðáðâðãðäðåðæðçðèðêðëðìðíðïðððñðòðóðôðõðöð÷ðøðùðûðüðþðÿñâñãñäñåñæñçñëñíñïñðñññôñõñöñ÷ñøñùñúñüñýñþòáòâòãòäòçòêòëòìòíòïòòòôòõòöò÷òøòùòúòûòüòýòþòÿôëôìôíôðôñôòôôô÷ôûõâõãõäõåõèõêõëõìõíõîõïõðõñõòõóõøõýöâöèöêöì÷â÷å÷ê÷ë÷ì÷í÷î÷ð÷ò÷ó÷ø÷üøâøêøëøìøíøîøïøðøñøòøöø÷øüøþ', 170 254 255 171 256 10 => 'àààùàýâáâââãâäâæâçâêâëâìâíâïâðâñâòâõâöâ÷âøâùâúâüâþâÿäàäáäâäãäääåäæäçäèäêäëäìäíäïäðäñäòäóäõäöä÷äøäúäûäüäýäþäÿåáåãåæåèåîåóåôåõåöå÷åøåùåýåþåÿæàæáæâæãæäæææèæêæëæìæíæîæïæðæñæóæöæ÷æüæþçáçâçãçäçæçççêçëçìçíçðçñçòçóçöç÷çøçúçûçüçýçþçÿèãèæèöèùèýèþêâêäêæêçêêêëêìêíêðêñêòêöê÷êøëáëâëãëäëæëçëêëëëìëíëïëñëòëôëõë÷ëøëùìáìâìãìèìêìëìììíìîìïìðìñìòìóìôìõìöì÷ìøìùìûìüìýìþìÿíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíüíýíþîàîöðáðâðãðäðæðçðêðëðìðíðïðððñðòðôðõðöð÷ðùðüñáñäñæñçñëñìñðñññõñ÷ñùñúñüñýñþòáòâòãòäòçòêòëòìòïòñòòòôòõòöò÷òøòùòúòüòýòþóàóãóæóéóîóôóöóýöàöâöêöìöîöóöû÷à÷â÷è÷ê÷ë÷ì÷í÷î÷ð÷ò÷ó÷ø÷üøâøêøëøìøíøîøïøðøñøòøöø÷øüøþ', 172 257 258 173 259 11 => 'àààîàôàýáááâáãáäáæáçáêáëáìáñáòáõá÷áøáùáúáüáþáÿâáâââãâäâæâçâìâïâðâòâóâõâöâ÷âøâùâúâûâüâþâÿãáãâãããäãçãêãëãìãíãñãòã÷ãøãÿäáäâäãäääæäçäêäëäìäïäðäòäõäöä÷äøäúäüäýäÿåàæáæâæãæäæææêæëæìæîæïæðæñæóæöæ÷æüæþçáçâçãçäçæçççèçìçîçðçñçöç÷çøçúçûçüçýçþçÿèóèýêäêæêçêêêìêñêòêöê÷êøëáëâëãëäëæëçëêëëëìëíëïëòëôëõë÷ëøëùìáìâìãìêìëìììíìïìðìòìóìôìõìöì÷ìøìùìüìýìþìÿíáíâíãíäíæíçíêíëíííðíñíòíôíõí÷íøíùíüíýíþîýîþïêïëïìïíïïïðïñïòïôïöï÷ïøïüñáñâñãñäñæñçñëñìñíñïñðñññôñõñöñ÷ñøñùñúñûñüñýñþòáòâòãòäòçòèòêòëòìòíòïòðòñòòòôòõòöò÷òøòùòúòüòýòþòÿóùôèôëôìôíôîôðôñôòôóôôô÷ôûõàõãõäõåõêõëõìõíõïõðõñõòõóõøõý÷â÷ë÷ì÷ð÷ò÷øøàøâøèøêøëøìøíøîøïøðøñøòøóøöø÷øüøþùíùîùðùóùüûãûäûçûèûðûóûöûÿþàþãþåþéÿáÿè', 174 260 261 175 262 12 => 'àààáàîàïàóàùáááâáãáäáæáçáêáìáíáñáòáõáöá÷áøáùáúáüáþáÿâáâââãâåâæâçâèâêâëâìâíâïâðâñâòâóâõâöâ÷âøâùâúâûâüâþâÿãàãáãâãããäãåãçãèãêãìãîãðãñãòãóã÷ãøãÿåàåïåóåýèàèáèæèùèýêâêäêæêçêêêëêìêðêñêòêöê÷êøëáëâëãëäëæëçëêëëëìëîëïëñëòëóëôëõë÷ëøëùëûëüìáìâìãìêìëìïìðìñìòìôìõìöì÷ìøìùìüìýìþìÿíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíüíýîàïêïìïíïïïñïôïöï÷ïÿðáðâðãðäðæðçðêðëðìðíðîðïðððñðòðôðõðöð÷ðøðùðûðüðþðÿñáñâñãñäñæñçñëñìñíñïñðñññôñõñöñ÷ñøñùñúñûñýñþòàòáòâòãòäòçòêòëòìòíòîòïòðòñòòòóòôòõòöò÷òøòùòúòûòüòýòþòÿóáóâóåóèóéóîóóóöóýóÿôëôìôíôðôñôòôôô÷ôûõàõâõãõäõåõèõêõëõìõíõïõðõñõòõóõøõýöâöèöêöìöî÷â÷ê÷ë÷ì÷í÷î÷ð÷ò÷ø÷üøàøâøêøëøìøíøîøïøðøñøòøóøöø÷øüøþùàùíùîùðùóùüûáûäûæûçûèûïûðûóûöûùûÿüáüâüãüæüçüêüìüíüîüïüôüöü÷üøüùýâýãýäýçýéýêýëýìýïýñýòýôýõýÿþàþáþâþãþäþåþæþçþéþêþìþïþðþñþòþõþöþ÷þøþùþþÿáÿäÿåÿæÿçÿéÿïÿðÿõÿöÿþÿÿ', 176 263 264 177 265 13 => 'àààôàýáááâáãáäáæáçáèáêáëáìáíáîáðáñáòáõáöá÷áøáùáúáûáüáþáÿâáâââãâäâæâçâêâëâìâíâïâðâñâòâõâöâ÷âøâùâúâûâüâþâÿãáãããçãêãìãíã÷ãøãÿäáäâäãäääçäêäïä÷äúäüäýäÿåùæáæâæãæäæææêæëæìæíæîæïæðæñæöæ÷æüæþçáçâçãçäçæçççêçëçìçíçðçñçòçöç÷çøçúçüçýçþçÿèóèýêäêæêçêêêìêñê÷êøëàëáëâëãëäëåëæëçëêëëëìëíëîëïëñëòëóëôëõë÷ëøëùëûëüëþëÿíáíâíãíäíæíçíêíëíííðíñíôíõíöí÷íøíùíüíýîùðáðâðãðäðæðçðêðëðìðíðïðððñðòðóðôðõðöð÷ðøðùðûðüðþðÿñãñäñæñçñðñõñ÷ñøñùñúñüñýñþñÿòáòâòäòçòìòïòòòôòõòöò÷òøòùòúòüòýóáóãóçóèóîóïóóóôóõóöóýôìôíôñôòôôô÷ôûõàõâõãõäõèõêõëõìõíõïõñõòõóõøõýöâöêöì÷â÷ê÷ë÷ì÷í÷ð÷ò÷ø÷üøâøåøêøëøìøíøîøïøðøñøóøöø÷øüøþùàùåùíùîùðùóùüûáûãûäûæûçûèûêûñûóûöûùûÿüáüâüäüçüìüíüïüôüöü÷üùýâýãýäýçýéýêýëýìýíýðýñýòýôýõýÿþáþâþãþåþæþçþéþêþëþìþíþðþöÿáÿäÿïÿðÿö', 178 266 267 179 268 14 => 'àààáàâàãàäàåàæàèàéàëàìàîàóàôàõàöà÷àøàùàýàþàÿáöáþâäâæâõâúâþãâãããçãêãñã÷ãøãÿäýäþåàåáåååèåðåóåôåùåýåÿæáæâæëæïæðæñæ÷æþçñçòçöç÷çøçúçýçþèàèáèåèæèèèéèîèïèóèôèýèþèÿéâéãéåéçéïéðéôéõéøêäêæêìêöê÷ëôìâìãìõìøìùìýìþíõíøíýîàîâîãîåîæîçîèîéîëîìîóîôîøîýîþîÿïìïôïøñãñçñùñýòýòþóàóåóæóèóéóîóðóóóôóöóøóùóþóÿôìôíôòô÷õãõäõêõïõñõýöóöû÷ì÷ð÷øøðøñøöø÷ùîýäýéýïýñýõýÿþàþáþâþãþæþéþêþëþìþíþïþðþõþöþ÷þøÿãÿåÿèÿïÿöÿ÷ÿøÿþÿÿ', 180 269 270 181 271 15 => 'àààîàýåàåáåèåìåóåôåýåÿèáèóèôèýêâêäêæêçêêêëêìêíêðêñêòêöê÷êøëáëâëãëäëæëçëêëëëìëíëïëñëòëôëõë÷ëøëùìàìáìâìãìåìêìëìììíìîìïìðìñìòìóìôìõìöì÷ìøìùìûìüìýìþìÿíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíüíýíþîàïìïïïðïñïòïôïöï÷ïøïüïÿðáðâðãðäðæðçðêðëðìðíðïðððñðòðôðõðöð÷ðøðùðüðþñáñâñãñäñæñçñëñìñíñïñðñññôñõñöñ÷ñøñùñúñüñýñþñÿòáòâòãòäòçòêòëòìòíòïòðòñòòòôòõòöò÷òøòùòúòüòýòþòÿóâóåóæóèóéóìóîóóóôóöóýóÿôåôëôìôíôîôñôòôóôôô÷ôûöàöâöåöêöìöî÷â÷ê÷ë÷ì÷í÷î÷ð÷ò÷ó÷ø÷üøàøâøêøëøìøíøîøïøðøñøòøöø÷øüøþûáûäûçûèûêûíûïûñûóûöû÷ûÿüáüâüãüäüæüçüèüêüìüíüîüïüñüòüôüöü÷üøüùÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿìÿíÿïÿðÿöÿ÷ÿøÿþÿÿ', 182 272 273 183 274 16 => 'àýáááâáãáäáæáçáêáìáòáõáöá÷áøáùáúáûáüáÿâáâââãâäâæâçâêâëâìâïâðâñâòâõâöâ÷âøâùâúãáãâãããäãçãêãìãòã÷ãÿäáäâäãäääçäêäëäïäðäòäõä÷äøäúäüäýåýæáæâæãæææëæìæîæïæðæñæ÷æüæþçáçâçãçäçæçççìçðçñçòçóçöç÷çøçúçûçüçýçþçÿèýêäêæêçêêêìêðêöê÷êøëáëâëãëäëæëêëëëìëíëïëñëòëôëõë÷ëøëùëþìáìâìãìêìììíìïìðìñìòìôìõìöìøìùìüìýìþíâíãíäíæíçíêíëíííðíòíôíõíöí÷íøíùíüíýïêïìïïïñïòïôïöï÷ïøïüðáðâðãðäðæðçðêðëðìðíðïðððñðòðôðõðöð÷ðøðùðûðüðþðÿñáñâñãñäñæñçñëñìñíñðñññôñõñöñ÷ñøñùñúñüñýñþòáòãòäòïòòòõòöò÷òøòùòúòýòþóâóîóóóöóýôëôìôðôñôòôóôôô÷ôûõâõãõëõðõòõøöâöêöì÷â÷ê÷ì÷í÷î÷ð÷ò÷ø÷üøâøëøìøïøñøòøöø÷øüøþùàùíùîùðùóùüûèûðûóûÿüâüäüæüçüíüîüïüôüöü÷üøüùþàþáþâþäþåþæþéþïþðþöþþÿèÿðÿö', 184 275 276 185 277 17 => 'àààçàèàîàùáááâáãáäáæáçáêáìáíáñáòáóáõáöá÷áøáùáúáüáÿâáâââãâäâæâçâêâëâìâíâïâñâòâõâöâ÷âøâùâúâüâþãàãáãâãããäãçãêãìãñãòã÷ãøãÿäáäãäääæäçäêäëäìäíäïäñäòäõäöä÷äøäúäûäüäýäþäÿåæåôåýæáæâæãæäæææêæëæìæíæîæïæðæñæóæöæ÷æüæþçáçâçãçäçåçæçççèçêçëçìçíçîçðçñçòçóçöç÷çøçúçûçüçýçþçÿèóèùèýêäêæêçêêêìêòêöê÷êøëáëâëãëäëæëçëêëëëìëíëïëñëòëôëõë÷ëøëùìáìâìãìêìëìììíìïìòìôìõìöì÷ìøìùìüìýìþíáíâíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíüíýîàîýîÿïêïìïíïïïñïòïôïöï÷ïøïüðáðâðãðäðæðçðêðëðìðíðïðððñðòðôðõðöð÷ðøðùðüðþðÿñáñãñäñæñçñññôñõñöñøñùñúñüñýñþòäòçòïòòòôòõòøòùòúóóóöôëôìôíôðôñôòôóôôô÷ôûõãõäõêõìõíõïõñõòõøõýöêöìöóöû÷â÷ê÷ì÷í÷î÷ð÷ò÷ø÷üøâøêøëøìøíøïøðøñøöø÷øüøþùàùèùíùîùðùóùüúþûáûäûæûçûèûêûóûöû÷ûøûÿüâüãüäüæüçüèüíüîüïüñüôüöü÷üøüùüÿýâýãýäýçýéýëýïýñýòýôýõýÿþàþáþâþãþåþçþéþìþíþïþòþõþöþ÷þùþþÿáÿâÿèÿéÿëÿïÿðÿøÿþÿÿ', 186 278 279 187 280 18 => 'àààîàýáááâáãáäáåáæáçáêáìáíáñáòáõáöá÷áøáùáúáüáþáÿâáâââãâäâæâçâêâìâíâïâñâòâõâöâ÷âøâùâúâüâþãáãâãããäãçãèãêãëãìãíãñãòãóã÷ãøãÿäáäâäãäääæäçäêäëäìäíäïäðäñäòäóäõäöä÷äøäúäüäýäþäÿåóåýçáçãçäçåçæçççèçêçëçìçíçðçñçòçóçöç÷çøçúçüçýçþçÿêâêäêæêçêêêìêòêöê÷êøëáëâëãëäëæëêëëëìëíëïëñëòëôëõë÷ëøëùìáìâìãìêìëìììíìïìðìñìòìôìõìöì÷ìøìüìýìþìÿíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíüíýïêïìïíïïïñïòïôïöï÷ïøïûïüïÿðáðâðãðäðæðçðêðëðìðíðïðñðòðôðõðöð÷ðøðùñáñãñäñæñçñïñññôñõñöñøñùñúñüñýòáòâòãòäòçòêòëòìòïòñòòòôòõòöò÷òøòùòúòûòüòýòþóâóóôàôëôìôíôðôñôòôôô÷ôûõãõäõåõêõìõíõïõðõñõòõøõýöâöèöêöì÷â÷ê÷ë÷ì÷í÷î÷ð÷ò÷ø÷üøêøìøíøîøïøðøñøöø÷øüøþùíùîùðùóùüúþúÿûáûæûçûèûòûóûöûÿüâüãüæüçüíüîüïüöü÷üøüùýâýãýäýçýéýëýìýïýðýñýòýôýõýÿþáþâþãþäþåþæþçþéþíþïþñþòþõþöþ÷þùþþÿäÿåÿèÿëÿðÿ÷ÿþ', 188 281 282 189 283 19 => 'àààáàâàãàåàæàèàêàìàîàïàóàôàõà÷àøàùàýàþàÿáâáãáäáçáìáòáõáøáùáþâáâââãâäâæâçâìâïâðâòâóâõâöâ÷âùâúâþãáãâãäãçãêãìãñãòã÷ãøãÿäáäãäïäõäöä÷äúäýåàåáåãåååæåèåêåëåíåîåïåóåôåöå÷åùåýåþåÿæâæãæìæïæðæöæþçáçãçæçççòçöçøçúçýçþçÿèàèáèâèãèåèæèèèéèìèîèïèóèôèõè÷èøèùèýèþèÿéãéåéçéëéîéïéðéôéõéöéøêäêæêçê÷êøëáëãëæëçëìëíëïëòëõë÷ëøëùìâìãìïìòìõìøìùìýìþíáíâíæíçíëíðíôíõí÷íùíýíþíÿîàîâîãîåîæîèîéîëîìîíîîîïîóîôîõîöî÷îøîùîýîþîÿïìïñïòïôïøðçðôðõðùñáñãñäñæñçñôñõñöñ÷ñøñùñúñýñþòãòäòçòìòïòôòõòöòøòùòúòýóàóáóâóãóäóåóæóçóèóéóêóíóîóïóðóñóòóóóôóõóöó÷óøóùóýóþóÿôàôìôíôîôðôñôòô÷ôûõäõðõýöàöâöìöîöóöû÷âøâøìøïøðøñøòøöøþùðùüýâýãýäýçýéýêýìýïýôýõýÿþàþáþâþãþäþåþæþçþéþêþëþìþíþïþðþõþöþ÷þøþþÿáÿãÿäÿåÿæÿèÿéÿêÿíÿïÿðÿòÿõÿöÿ÷ÿøÿùÿþÿÿ', 190 284 285 191 286 20 => 'àààäàåàæàèàîàïàôàöà÷àùàýàþàÿåàåáåãåæåçåïåóåôåöå÷åùåýåþèâèæèóèôèõèùèýëáëâëãëäëæëçëêëëëìëíëñëòëôëõë÷ëøëùëûëüìáìâìãìèìêìëìììíìïìðìñìòìôìõìöì÷ìøìùìüìýìþìÿíàíáíâíãíäíåíæíçíèíêíëíííîíðíñíòíóíôíõíöí÷íøíùíüíýíþíÿîàîåîæîçîèîîîïîóîôîõîöî÷îøîùîýîþîÿðáðâðäðæðçðêðëðìðíðïðððñðòðôðõðöð÷ðøðùðüðþðÿñàñáñâñãñäñæñçñèñëñìñíñïñðñññóñôñõñöñ÷ñøñùñúñûñüñýñþñÿòáòâòãòäòçòêòëòìòíòïòðòñòòòôòõòöò÷òøòùòúòýòþóàóáóâóäóåóæóèóéóêóëóìóîóïóñóóóôóõó÷óøóùóýóÿôëôìôíôðôñôòôôô÷ôû÷à÷â÷å÷ê÷ë÷ì÷í÷î÷ð÷ò÷ó÷ø÷üûáûãûäûåûæûçûèûéûêûëûìûíûïûñûòûóûõûöû÷ûøûùûÿ', 192 287 288 193 289 21 => 'àààãàçàôàöà÷àøàùâáâââãâäâåâæâçâèâêâëâìâíâïâðâñâòâóâõâöâ÷âøâùâúâûâüâþâÿãáãâãããäãåãçãèãêãëãìãíãðãñãòãóã÷ãøãÿäàäáäâäãäääåäæäçäèäêäëäìäïäðäñäòäóäõäöä÷äøäúäûäüäýäþäÿåàåáåãåäåååæåçåèåêåëåïåñåòåóåôåõåöå÷åùåýåþåÿèïèóèôèöèøèýêàêâêäêåêæêçêèêêêëêìêíêñêòêóêöê÷êøëáëâëãëäëæëçëêëëëìëíëïëñëòëôëõë÷ëøëùëüìáìâìãìêìëìíìïìðìñìòìôìõìöì÷ìøìùìüìýìþìÿíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíûíüíýîèîîîöîøîýîþîÿïåïèïêïëïìïíïïïñïòïóïôïöï÷ïøïûïüïÿðáðâðãðäðæðçðêðëðìðíðïðððñðòðôðõðöð÷ðøðùðûðÿñàñáñâñãñäñæñçñëñìñíñïñðñññóñôñõñöñ÷ñøñùñúñûñüñýñþòáòâòãòäòçòêòëòìòíòïòðòñòòòôòõòöò÷òøòùòúòüòýòþóáóâóãóçóèóéóìóíóîóñóóóôóõóöó÷óùóýóÿøàøâøêøëøìøíøïøðøñøòøóøöø÷øüøþýâýãýäýçýéýíýðýñýôýõýÿ', 194 290 291 195 292 22 => 'àààáàâàãàäàæàçàèàéàêàîàñàóàôàöà÷àøàùàýâàâáâââãâäâæâçâêâëâìâíâîâïâðâñâòâóâõâöâ÷âøâùâúâûâüâþâÿåàåáåæåèåôåöå÷åøåùåýåÿèáèãèæèóèõèöè÷èøèùèýêâêäêæêçêêêëêìêíêðêñêòêöê÷êøìáìâìãìåìèìêìëìììíìîìïìðìñìòìóìôìõìöì÷ìøìùìûìüìýìþìÿîàîáîäîåîæîçîèîëîíîîîïîñîòîóîôîõîöî÷îøîùîýîþîÿóàóáóâóãóäóåóèóêóëóìóîóïóðóñóòóóóôóõóöó÷óøóùóýóÿûáûâûäûæûçûèûêûëûíûðûñûòûóûõûöû÷ûøûùûÿ', 196 293 294 197 295 23 => 'àààáàçàîàïàóàôàöà÷àýâáâââãâäâæâçâèâêâëâìâíâïâðâñâòâõâöâ÷âøâùâúâüâþâÿåàåæåîåóåôåöåùåþèáèäèæèçèîèïèóèôèýêâêäêæêçêêêëêìêíêðêñêòêöê÷êøëáëâëãëäëæëçëêëëëìëíëïëñëòëóëôëõë÷ëøëùëûëüëþëÿìáìâìãìåìèìêìëìììíìïìðìñìòìóìôìõìöì÷ìøìùìüìýìþìÿíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíüíýíþîàîáîâîãîäîåîæîçîèîëîîîðîñîòîóîôîõîöîøîùîýîþîÿðàðáðâðãðäðæðçðèðêðëðìðíðîðïðððñðòðóðôðõðöð÷ðøðùðûðüðþðÿòáòâòãòäòçòêòëòìòíòïòðòñòòòôòõòöò÷òøòùòúòüòýòþóàóåóçóèóéóêóîóóóôóöó÷óýøâøêøëøìøíøîøïøðøñøòøöø÷øüøþüáüâüãüäüæüçüêüìüíüîüïüôüöü÷üøüù', 198 296 297 199 298 24 => 'àààçàèàîàóàöàýâáâââãâäâæâçâêâëâìâíâîâïâðâñâòâóâõâöâ÷âøâùâúâüâþâÿåàåæåîåöåùåýèàèãèäèæèçèèèîèóèöè÷èýêäêæêçêêêëêìêíêðêñêòêöê÷êøëáëâëãëäëæëçëêëëëìëíëïëñëòëóëôëõë÷ëøëùëüìáìâìãìåìêìëìììíìîìïìðìñìòìóìôìõìöì÷ìøìùìüìýìþíáíâíãíäíæíçíêíëíííðíñíôíõíöí÷íøíùíüíýîàîäîæîçîèîîîõîöî÷îøîùîýîþîÿïåïêïëïìïíïïïñïòïóïôïöï÷ïøïûïüïÿðàðáðâðãðäðåðæðçðêðëðìðíðîðïðððñðòðôðõðöð÷ðøðùðûðüðþðÿñàñáñâñãñäñåñæñçñèñëñìñíñîñïñðñññòñóñôñõñöñ÷ñøñùñúñûñüñýñþñÿòáòâòãòäòçòêòëòìòíòïòñòòòôòõòöò÷òøòùòúòüòýòþòÿóâóãóäóæóçóèóêóíóîóïóóóôóõóöóýóÿöàöâöèöêöìöîöó÷â÷å÷è÷ê÷ë÷ì÷í÷î÷ð÷ò÷ó÷ø÷üüáüâüãüäüåüæüçüêüìüíüîüïüôüöü÷üøüùþàþáþâþãþäþåþæþçþéþêþëþìþíþïþñþõþöþ÷þøþùþþ', 200 299 300 201 301 25 => 'àààáàæàçàèàîàïàðàóàôàöà÷àøàùàýåàåçåóåõåöåùåýåþåÿèàèáèãèäèæèçèèèîèðèñèóèôèýèþèÿíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíüíýíþíÿîàîâîäîåîæîçîèîéîêîëîíîîîïîðîñîòîóîôîõîöî÷îøîùîýîþîÿðàðáðâðãðäðæðçðêðëðìðíðîðïðððñðòðóðôðõðöð÷ðøðùðûðüðþóàóáóâóãóäóåóæóçóèóéóêóëóìóîóóóôóõóöó÷óøóýóÿüáüâüãüäüåüæüçüèüêüìüíüîüïüñüòüôüöü÷üøüùüÿ', 202 302 303 203 304 26 => 'åàåáåâåãåååèåéåíåîåïåòåóåôåöå÷åùåýåþåÿþàþáþâþãþäþåþæþçþéþêþëþìþïþðþñþõþöþ÷þøþùþþÿáÿãÿäÿåÿæÿèÿéÿêÿìÿïÿõÿöÿ÷ÿøÿùÿþÿÿ', 204 305 306 205 307 27 => 'áááâáãáäáæáçáìáñáòáõáöá÷áøáùáúáþáÿâáâââãâäâæâçâëâìâïâðâñâòâõâöâùâúâüâþâÿãáãâãããäãåãçãêãìãñãòãóã÷ãøäáäãäääæäçäêäìäïäñäòäõäöä÷äøäúäûäüäýäþäÿåàåáåâåãåååæåèåéåêåëåíåîåïåðåñåòåóåôåöå÷åøåùåýåþåÿæáæâæëæìæïæðæñæóæöæ÷æüæþçáçäçæçççèçêçìçðçñçöç÷çøçúçüçýçþçÿèàèáèâèäèåèæèçèèèéèêèëèìèíèîèïèðèòèóèôèõèöè÷èøèùèýèþèÿéâéãéåéçéêéëéìéíéîéðéñéôéõéöé÷éøêäêæêçêêêìêñêòêöê÷ëáëâëãëæëçëëëìëíëïëòëôëõë÷ëøëùëþìâìãìëìììíìðìòìôìõìöìøìùìüìýìþíáíâíãíäíæíçíëíðíòíôíõíöíøíùíýïìïïïñïòïôïöïøïûðáðãðäðæðçðëðìðïðððñðòðôðõðöð÷ðùñáñãñäñæñçñíñðñññôñöñùñúñýñþòáòãòäòçòìòïòòòôòõòöò÷òøòùòúòýòþóàóáóâóãóåóçóèóéóêóëóìóíóîóïóðóñóòóóóôóõóöóøóùóýóþóÿõãõäõêõìõïõðõñõóõøõýöèöêöìöîöóöû÷â÷ì÷ð÷ò÷ø÷üøìøïøðøñøòø÷øþùàùíùîùðùüÿáÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿïÿðÿòÿõÿöÿ÷ÿøÿùÿþÿÿ', 206 308 309 207 310 28 => 'áááâáãáäáæáçáêáëáìáíáðáñáòáõáöá÷áøáùáúáüáþáÿâáâââãâäâæâçâêâëâìâíâïâðâñâòâóâõâöâ÷âøâùâúâüâþâÿãáãâãããäãçãêãëãìãíãðãñãòã÷ãøãÿäáäâäãäääæäçäèäêäëäìäíäïäðäòäóäõäöä÷äúäûäüäýäþäÿåàåáåååæåèåëåíåîåóåõåöå÷åùåýåþåÿæáæâæãæäæææèæêæëæìæíæîæïæðæñæóæöæ÷æüæþçáçãçäçæçççëçìçðçñçòçöç÷çøçúçýçþèàèáèâèãèäèåèæèçèèèéèêèëèíèîèïèñèòèóèôè÷èùèýèþèÿêâêäêæêçêêêìêðêòêöê÷êøìáìâìãìêìëìììíìïìðìñìòìôìõìöì÷ìøìùìüìýìþíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíüíýîàîáîâîãîäîåîæîçîèîéîêîëîìîîîïîñîóîôîõîöî÷îøîùîýîþîÿïêïëïìïíïîïïïðïñïóïôïöï÷ïøïûïüïÿñâñãñäñåñæñçñëñìñíñïñðñññôñõñöñ÷ñøñùñúñüñýñþòáòâòãòäòçòêòëòìòïòñòòòôòõòöò÷òøòùòúòüòýòþòÿôåôëôìôíôñôòôôô÷öâöêöì÷â÷ê÷ë÷ì÷í÷ð÷ò÷ø÷üøâøêøëøìøíøïøðøñøòøöø÷øüøþùíùîùðùüþàþáþâþãþäþåþæþéþëþìþíþïþðþõþöþ÷þøþþÿáÿäÿåÿæÿçÿèÿéÿëÿïÿñÿòÿöÿ÷ÿøÿùÿÿ', 208 311 312 209 313 29 => 'âáâââãâäâæâçâêâëâíâïâñâòâóâõâöâ÷âøâùâúâûâüâþâÿãàãáãâãããäãçãèãêãëãìãíãðãñãòãóã÷ãøãÿäáäæäçäêäëäíäîäïäðäñäòäóäõäöä÷äøäúäûäüäýäþäÿçàçáçâçãçäçæçççêçëçìçíçðçñçòçóçöç÷çøçúçûçüçýçþçÿéâéãéäéåéçéêéìéîéïéðéòéõéöé÷éøêäêåêæêêêëêìêíêòêöê÷êøëáëâëãëäëæëçëêëíëîëïëñëòëôëõë÷ëøëùëûëþëÿìâìãìêìëìíìðìñìòìôìõìöì÷ìøìùìûìüìýìþìÿíàíáíæíçíêíëíðíóíôíõí÷íøíùíûíüíýíþíÿïàïåïêïëïìïíïðïñïòïóïôïöï÷ïøïûïüïÿðáðãðäðæðêðìðïðððôðõðöð÷ðøðùðüðþðÿñàñáñâñãñäñåñæñçñèñëñìñíñîñïñðñññóñôñöñ÷ñøñùñúñûñüñýñþñÿòáòâòãòäòçòëòìòïòñòòòôòõòöò÷òøòùòúòüòýòþòÿôàôëôìôíôîôðôñôòôóô÷ôûõâõãõäõåõèõêõëõìõïõðõñõòõóõøõýÿáÿâÿãÿäÿåÿæÿçÿèÿéÿëÿìÿíÿïÿðÿñÿòÿõÿöÿ÷ÿøÿùÿþÿÿ', 210 314 315 211 316 30 => 'àààáàâàãàäàåàæàçàèàéàêàëàìàîàïàñàòàóàôàõàöà÷àøàùàýàþàÿáááãáäáæáçáìáðáñáòáõáöá÷áøáùáúáüáþâàâáâââãâäâæâçâêâëâìâíâïâðâñâòâóâõâöâ÷âøâùâúâüâþâÿãáãâãããäãçãèãêãëãìãíãðãñãòãóã÷ãøãÿäáäâäãäääçäêäëäìäïäðäòäõä÷äøäúäûäýäþåàåáåâåãåäåååæåçåèåéåêåëåíåîåïåðåñåóåôåõåöå÷åøåùåýåþåÿæáæâæãæäæææêæëæìæîæïæðæñæóæöæ÷æüæþçáçâçäçççêçëçìçðçñçòçöç÷çøçúçüçýçþçÿéâéãéäéåéçéêéëéíéîéïéðéñéòéôéõéöé÷éøêäêæêçêêêëêìêðêòêöê÷êøëàëáëâëãëäëæëçëêëìëíëîëïëñëòëóëôëõë÷ëøëùëûìáìâìãìëìììíìïìðìñìòìóìôìõìöì÷ìøìùìüìýìþìÿíáíâíäíæíçíëíííðíñíòíôí÷íøíùíýíþïàïëïìïíïîïïïðïñïòïóïôïöï÷ïøïûïüïÿðáðâðãðäðæðçðëðìðððñðòðôðõðöð÷ðøðùðþñáñâñãñäñæñçñëñìñíñïñðñññóñôñõñöñ÷ñøñùñúñýòáòâòãòäòçòëòìòïòðòòòôòõòöò÷òøòùòúòüòýòþòÿõâõãõäõêõëõìõïõðõñõòõøõýöàöâöåöêöìöîöóöû÷â÷ë÷ì÷ð÷ò÷øøâøåøèøëøìøîøïøðøñøòøöø÷øüøþùíùîùðùüþàþáþâþãþäþåþæþçþéþêþëþìþíþïþðþñþõþöþ÷þøþùþþ', 212 317 318 213 319 31 => 'áááâáãáäáåáæáçáêáìáíáñáòáóáõáöá÷áøáùáúáûáþáÿâáâââãâäâæâçâìâïâðâòâõâöâ÷âùâúâþãáãâãããäãçãìãðãòãøãÿäáäâäãäääæäçäëäìäïäñäòäõäöäøäúäýåàåáåãåååæåçåèåéåëåíåîåïåðåñåóåôåõåöå÷åùåýåþåÿæâæãæäæææëæìæîæïæðæñæöæ÷æüæþçáçäçæçççìçðçñçòçöçøçúçýçþèàèáèâèãèäèåèæèèèéèêèëèìèîèïèðèñèòèóèôèõèøèùèýèþèÿéâéãéäéåéçéëéìéíéîéïéðéôéõé÷éøêâêäêæêçêêêìêðêòêöê÷ëáëâëãëäëåëæëçëëëìëíëïëôëõë÷ëøëùëÿìâìãìììíìðìòìôìõì÷ìøìýìþìÿíáíæíçíëíðíòíôíõíøíýïëïìïïïðïñïòïôïöïøïüïÿðáðâðãðæðçðïðððòðôðõðöðøðùðüðþðÿñáñâñãñäñæñçñìñïñðñññôñõñöñ÷ñøñùñúñýñþòáòãòäòçòëòìòïòðòòòôòõòöò÷òøòùòúòýòþòÿõâõãõäõåõêõìõîõðõñõóõøõýöâöìöîöó÷â÷ë÷ì÷ð÷ò÷øøàøâøìøîøïøðøñøòøóøöø÷øüøþùîùðùüþàþáþâþãþäþåþæþçþéþêþëþìþíþïþðþõþöþ÷þøþþÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿíÿïÿðÿòÿõÿöÿ÷ÿøÿùÿþÿÿ', 214 320 321 215 322 ); 216 323 324 217 325 $res=0; 218 326 327 219 328 for($i=0;$i<strlen($s)-1;$i++) 220 329 221 { 330 331 { 332 222 333 223 334 $c1=$s[$i]; 224 335 336 225 337 if($c1<'à'||$c1>'ÿ') continue; 226 338 339 227 340 $c2=$s[$i+1]; 228 341 342 229 343 if($c2<'à'||$c2>'ÿ') continue; 230 344 345 231 346 $i1=ord($c1)-ord('à'); 232 347 348 233 349 if(strpos($a[$i1],$c2)!==false) 234 350 351 235 352 { 236 353 354 237 355 $res++; 238 356 357 239 358 continue; 240 359 360 241 361 } 242 362 363 243 364 if($i>=strlen($s)-2) continue; 244 365 366 245 367 $c3=$s[$i+2]; 246 368 369 247 370 if($c3<'à'||$c3>'ÿ') continue; 248 371 372 249 373 $i2=ord($c2)-ord('à'); 250 374 375 251 376 if(strpos($a[$i2],$c3)!==false) 252 377 378 253 379 { 254 380 381 255 382 $res++; 256 383 384 257 385 $i++; 258 386 387 259 388 continue; 260 389 390 261 391 } 262 392 393 263 394 $l=0; 264 395 396 265 397 $r=strlen($b[$i1])/2-1; 266 398 399 267 400 while($l<=$r) 268 401 402 269 403 { 270 404 405 271 406 $c=$l+(($r-$l)>>1); 272 407 408 273 409 $ca=$b[$i1][$c*2]; 274 410 411 275 412 $cb=$b[$i1][$c*2+1]; 276 413 414 277 415 if($ca==$c2&&$cb==$c3) 278 416 417 279 418 { 280 419 420 281 421 $res++; 282 422 423 283 424 break; 284 425 426 285 427 } 286 428 429 287 430 if($ca<$c2||$ca==$c2&&$cb<$c3) 288 431 432 289 433 $l=$c+1; 290 434 435 291 436 else 292 437 438 293 439 $r=$c-1; 294 440 441 295 442 } 296 443 297 } 444 445 } 446 298 447 299 448 return $res; 300 449 450 301 451 } 302 452 303 453 304 454 455 456 305 457 function _charset_alt_win($s) 306 458 459 307 460 { 308 461 462 309 463 for($i=0;$i<strlen($s);$i++) 310 464 311 { 465 466 { 467 312 468 313 469 $c=ord($s[$i]); 314 470 471 315 472 if($c>=0x80&&$c<=0x9f) 316 473 474 317 475 $s[$i]=chr($c-0x80+0xc0); 318 476 477 319 478 else if($c>=0xa0&&$c<=0xaf) 320 479 480 321 481 $s[$i]=chr($c-0xa0+0xe0); 322 482 483 323 484 else if($c>=0xc0&&$c<=0xdf) 324 485 486 325 487 $s[$i]=chr($c-0xc0+0x80); 326 488 489 327 490 else if($c>=0xf0&&$c<=0xff) 328 491 492 329 493 $s[$i]=chr($c-0xf0+0xa0); 330 494 331 } 495 496 } 497 332 498 333 499 return $s; 334 500 501 335 502 } 336 503 337 504 338 505 506 507 339 508 function _charset_koi_win($s) 340 509 510 341 511 { 342 512 513 343 514 $kw = array( 344 515 516 345 517 //00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 346 518 519 347 520 0x80, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, //0x80 - 0x8f 348 521 522 349 523 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 0xbb, 156, 0xab, 158, 159, //0x90 - 0x9f 350 524 525 351 526 160, 161, 162, 184, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, //0xa0 - 0xaf 352 527 528 353 529 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, //0xb0 - 0xbf 354 530 531 355 532 254, 224, 225, 246, 228, 229, 244, 227, 245, 232, 233, 234, 235, 236, 237, 238, //0xc0 - 0xcf 356 533 534 357 535 239, 255, 240, 241, 242, 243, 230, 226, 252, 251, 231, 248, 253, 249, 247, 250, //0xd0 - 0xdf 358 536 537 359 538 222, 192, 193, 214, 196, 197, 212, 195, 213, 200, 201, 202, 203, 204, 205, 206, //0xe0 - 0xef 360 539 540 361 541 207, 223, 208, 209, 210, 211, 198, 194, 220, 219, 199, 216, 221, 217, 215, 218 //0xf0 - 0xff 362 542 543 363 544 ); 364 545 546 365 547 for($i=0;$i<strlen($s);$i++) 366 548 367 { 549 550 { 551 368 552 369 553 $c=ord($s[$i]); 370 554 555 371 556 if($c>=128) 372 557 558 373 559 $s[$i]=chr($kw[$c-128]); 374 560 375 } 561 562 } 563 376 564 377 565 return $s; 378 566 567 379 568 } 380 569 381 570 382 571 572 573 383 574 function _charset_utf8_win($s) 384 575 576 385 577 { 386 578 579 387 580 $r=''; 388 581 582 389 583 $state=1; 390 584 585 391 586 for ($i=0;$i<strlen($s);$i++) 392 587 393 { 588 589 { 590 394 591 395 592 $c=ord($s[$i]); 396 593 594 397 595 switch($state) 398 596 597 399 598 { 400 599 600 401 601 case 1: //not a special symbol 402 602 603 403 604 if($c<=127) 404 605 606 405 607 { 406 608 609 407 610 $r.=$s[$i]; 408 611 612 409 613 } 410 614 615 411 616 else 412 617 618 413 619 { 414 620 621 415 622 if(($c>>5)==6) 416 623 624 417 625 { 418 626 627 419 628 $c1=$c; 420 629 630 421 631 $state=2; 422 632 633 423 634 } 424 635 636 425 637 else 426 638 639 427 640 $r.=chr(128); 428 641 642 429 643 } 430 644 645 431 646 break; 432 647 648 433 649 case 2: //an utf-8 encoded symbol has been meet 434 650 651 435 652 $new_c2=($c1&3)*64+($c&63); 436 653 654 437 655 $new_c1=($c1>>2)&5; 438 656 657 439 658 $new_i=$new_c1*256+$new_c2; 440 659 660 441 661 switch($new_i) 442 662 663 443 664 { 444 665 666 445 667 case 1025: $out_c='¨'; break; 446 668 669 447 670 case 1105: $out_c='¸'; break; 448 671 672 449 673 case 0x00ab: $out_c='«'; break; 450 674 675 451 676 case 0x00bb: $out_c='»'; break; 452 677 678 453 679 default: $out_c=chr($new_i-848); 454 680 681 455 682 } 456 683 684 457 685 $r.=$out_c; 458 686 687 459 688 $state=1; 460 689 690 461 691 break; 462 692 693 463 694 } 464 695 465 } 696 697 } 698 466 699 467 700 return $r; 468 701 702 469 703 } 470 704 471 705 472 706 707 708 473 709 function _charset_prepare($s) 474 710 711 475 712 { 476 713 714 477 715 $r=0; 478 716 717 479 718 $k=0; 480 719 720 481 721 for($i=0;$i<strlen($s)&&$r<255;$i++) 482 722 483 { 723 724 { 725 484 726 485 727 $c=ord($s[$i]); 486 728 729 487 730 if($c>=0x80) 488 731 732 489 733 { 490 734 735 491 736 $r++; 492 737 738 493 739 $k=$i; 494 740 741 495 742 } 496 743 497 } 744 745 } 746 498 747 499 748 return substr($s,0,$k+1); 500 749 750 501 751 } 502 752 503 753 504 754 755 756 505 757 function charset_win_lowercase($s) 506 758 759 507 760 { 508 761 762 509 763 for($i=0;$i<strlen($s);$i++) 510 764 511 { 765 766 { 767 512 768 513 769 $c=ord($s[$i]); 514 770 771 515 772 if($c>=0xc0&&$c<=0xdf) 516 773 774 517 775 $s[$i]=chr($c+32); 518 776 777 519 778 else if($s[$i]>='A'&&$s[$i]<='Z') 520 779 780 521 781 $s[$i]=chr($c+32); 522 782 523 } 783 784 } 785 524 786 525 787 return $s; 526 788 789 527 790 } 528 791 529 792 530 793 794 795 531 796 function charset_x_win($s) 532 797 798 533 799 { 534 800 801 535 802 // returns a string converted from a best encoding (windows-1251 or koi-8r) to windows-1251 536 803 804 537 805 $sa=_charset_prepare($s); 538 806 807 539 808 $s1=charset_win_lowercase($sa); 540 809 810 541 811 $r1='windows-1251'; 542 812 543 813 544 814 815 816 545 817 $c1=_charset_count_chars($s1); 546 818 819 547 820 $b1=_charset_count_bad($s1); 548 821 822 549 823 $p1=_charset_count_pairs($s1); 550 824 825 551 826 $w1=$p1*32+$b1*64-$c1; 552 827 553 828 554 829 830 831 555 832 $s2=charset_win_lowercase(_charset_koi_win($sa)); 556 833 834 557 835 $w2=-$c1; //Îñîáåííîñòü êîäèðîâêè koi-8r: òîò æå äèàïàçîí ñèìâîëîâ, ÷òî è äëÿ windows-1251 558 836 837 559 838 if($w2<$w1) 560 839 561 { 840 841 { 842 562 843 563 844 $b2=_charset_count_bad($s2); 564 845 846 565 847 $w2+=64*$b2; 566 848 849 567 850 if($w2<$w1) 568 851 852 569 853 { 570 854 855 571 856 $p2=_charset_count_pairs($s2); 572 857 858 573 859 $w2+=32*$p2; 574 860 861 575 862 if($w2<$w1) 576 863 864 577 865 { 578 866 867 579 868 $r1='koi-8r'; 580 869 870 581 871 $w1=$w2; 582 872 873 583 874 } 584 875 876 585 877 } 586 878 587 } 879 880 } 881 882 588 883 589 884 … … 593 888 594 889 890 891 595 892 $c2=_charset_count_chars($s2); 596 893 894 597 895 $w2=-$c2; 598 896 897 599 898 if($w2<$w1) 600 899 601 { 900 901 { 902 602 903 603 904 $b2=_charset_count_bad($s2); 604 905 906 605 907 $w2+=64*$b2; 606 908 909 607 910 if($w2<$w1) 608 911 912 609 913 { 610 914 915 611 916 $p2=_charset_count_pairs($s2); 612 917 918 613 919 $w2+=32*$p2; 614 920 921 615 922 if($w2<$w1) 616 923 924 617 925 { 618 926 927 619 928 $r1='utf'; 620 929 930 621 931 $w1=$w2; 622 932 933 623 934 } 624 935 936 625 937 } 626 938 627 } 939 940 } 941 942 628 943 629 944 … … 631 946 switch($r1) 632 947 633 { 948 949 { 950 634 951 635 952 case 'alt': 636 953 954 637 955 return _charset_alt_win($s); 638 956 957 639 958 case 'koi-8r': 640 959 960 641 961 return _charset_koi_win($s); 642 962 963 643 964 case 'utf': 644 965 966 645 967 return _charset_utf8_win($s); 646 968 969 647 970 default: 648 971 972 649 973 return $s; 650 974 651 } 975 976 } 977 978 652 979 653 980 … … 655 982 return $s; 656 983 984 657 985 } 658 986 659 987 660 988 989 990 661 991 ?> -
drop-in-dropbox/trunk/functions.php
r426910 r426941 1 1 <?php 2 2 function initDrop() { 3 if( !is_dir( dirname(__FILE__) . '/tmp' ) ) mkdir( dirname(__FILE__) . '/tmp' );3 //if( !is_dir( dirname(__FILE__) . '/tmp' ) ) mkdir( dirname(__FILE__) . '/tmp' ); 4 4 $runflag = dirname(__FILE__) . '/tmp/drop_running'; 5 5 touch( $runflag ); … … 12 12 $files = ListFiles( $loc_dir ); 13 13 } 14 $files = serialize( $files ); 15 $files = htmlentities($files,ENT_QUOTES); 14 16 if( $files ) { 15 17 if( !get_option( 'drop_drop_all_files' ) ) { … … 54 56 if( !get_option( 'drop_drop_all_files' ) ) exit; 55 57 $files = get_option( 'drop_drop_all_files' ); 58 $files = html_entity_decode($files,ENT_QUOTES); 59 $files = unserialize($files); 56 60 $files_num = count($files); 57 61 if( $count < $files_num ) { … … 64 68 break; 65 69 } 66 if( ( strpos( $files[$i], 'plugins/drop-in-dropbox/tmp' ) != FALSE ) && ( strpos( $files[$i], 'drop-in-dropbox/tmp/delete-me-not-118346814134' ) ) == FALSE ) { 67 continue; 68 } 70 if( ( strpos( $files[$i], 'plugins/drop-in-dropbox/tmp' ) != FALSE ) && ( strpos( $files[$i], 'drop-in-dropbox/tmp/delete-me-not-118346814134' ) ) == FALSE ) continue; 69 71 $runflag = dirname(__FILE__) . '/tmp/drop_running'; 70 72 if( !file_exists( $runflag ) ) { … … 92 94 $temp_name_ext = $file_name . '.' . $info['extension']; 93 95 } 94 95 96 try { full_copy( $files[$i], $temp_file ); } catch(Exception $e) { echo 'COPY FAILED'; } 96 97 … … 98 99 file_put_contents( $runflag, ($i+1) . ' out of ' . $files_num . ': ' . fixEnc( $i_dir ) . $temp_name_ext ); // write currently uploaded filename to flagfile 99 100 try { $uploader -> upload( $temp_file, $up_dir ); } catch(Exception $e) { echo 'UPLOAD FAILED'; } 100 if( strpos( $ file, 'delete-me-not-118346814134' ) != FALSE ) unlink( $temp_file );101 if( strpos( $temp_file, 'delete-me-not-118346814134' ) == FALSE ) unlink( $temp_file ); 101 102 $c = $i; 102 103 } -
drop-in-dropbox/trunk/readme.txt
r426910 r426941 1 1 === Drop in Dropbox === 2 2 3 Contributors: Denis Buka 4 3 5 Donate link: http://www.denisbuka.ru 6 4 7 Tags: dropbox, upload, backup, files, directories, subdirectories, files 8 5 9 Requires at least: 3.2 10 6 11 Tested up to: 3.2 12 7 13 Stable tag: 0.2.1 14 15 8 16 9 17 Upload single files or entire directories with subdirectories to your Dropbox account. 10 18 19 20 11 21 == Description == 22 23 12 24 13 25 This plugin allows you to upload single files or entire directories with subdirectories to your Dropbox account. You can use it for backup, synchronization or whatever uploading tasks you might have. 14 26 27 28 15 29 **Features overview:** 16 30 31 32 17 33 * Upload entire directories with subdirectories to your Dropbox account. 34 18 35 * Backup your entire site files by pointing to the WordPress installation directory. 36 19 37 * Specify a Dropbox folder to which your files should be uploaded. If such folder doesn't exist it will be created. 38 39 20 40 21 41 **My other plugins:** 22 42 43 44 23 45 * Intuitive Navigation (http://wordpress.org/extend/plugins/intuitive-navigation/) 46 24 47 * Generate Cache (http://wordpress.org/extend/plugins/generate-cache/) 48 49 25 50 26 51 Links: [Author's Site](http://www.denisbuka.ru) 27 52 53 54 28 55 == Installation == 29 56 57 58 30 59 1. Unzip the archive and put the folder into your plugins folder (/wp-content/plugins/). 60 31 61 2. Activate the plugin from the Plugins admin menu. 62 32 63 3. Go to Settings -> Drop in Dropbox to set some options. 64 65 33 66 34 67 == Frequently Asked Questions == 35 68 69 70 36 71 = Any new features planned? = 72 37 73 Actually, yes: 74 38 75 1) schedule uploads to be run periodically at a specific time; 76 39 77 2) ability to exclude certain files and directories from uploading. 78 79 40 80 41 81 == Upgrade Notice == 42 82 83 84 43 85 == Screenshots == 86 87 44 88 45 89 1. Admin page. 46 90 91 92 47 93 == Changelog == 48 94 95 96 49 97 = 0.1 beta = 98 50 99 * Initial beta release 51 100 101 102 52 103 = 0.2 = 104 53 105 * Ability to upload files 106 54 107 * Improvements for long uploads 108 55 109 * Added "Abort" button 56 110 111 112 57 113 = 0.2.1 = 114 58 115 * Bugs fixed -
drop-in-dropbox/trunk/run2.php
r426902 r426941 1 1 <?php 2 2 3 require_once( $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php' ); 4 3 5 require_once( dirname(__FILE__) . '/functions.php' ); 6 4 7 require_once( dirname(__FILE__) . '/DropboxUploader.php' ); 8 5 9 require_once( dirname(__FILE__) . '/a.charset.php' ); 6 10 11 12 7 13 if( isset( $_POST["count"] ) ) { 14 8 15 $count = $_POST["count"]; 16 9 17 dropNow( $count, 'run1' ); 18 10 19 } 20 11 21 ?>
Note: See TracChangeset
for help on using the changeset viewer.