MTurbo - Version 1.1.1

Version Notes

Visit product homepage at:
http://www.artio.net/magento-extensions/m-turbo-accelerator

Download this release

Release Info

Developer Magento Core Team
Extension MTurbo
Version 1.1.1
Comparing to
See all releases


Code changes from version 1.1.0 to 1.1.1

app/code/local/Artio/MTurbo/Block/Adminhtml/Welcome/Form.php CHANGED
@@ -71,7 +71,7 @@ class Artio_MTurbo_Block_Adminhtml_Welcome_Form extends Mage_Adminhtml_Block_Wid
71
 
72
  protected function _afterToHtml($html) {
73
 
74
- if (Mage::helper('mturbo/info')->getRegName()) {
75
 
76
  if (Artio_MTurbo_Helper_Checker::checkPermission()) {
77
  $html = $this->_getOkText() . $html;
71
 
72
  protected function _afterToHtml($html) {
73
 
74
+ if (true) {
75
 
76
  if (Artio_MTurbo_Helper_Checker::checkPermission()) {
77
  $html = $this->_getOkText() . $html;
app/code/local/Artio/MTurbo/Block/Data/Form/Element/Time.php CHANGED
@@ -56,7 +56,7 @@ class Artio_MTurbo_Block_Data_Form_Element_Time extends Varien_Data_Form_Element
56
  $value_min = 0;
57
 
58
  if( $value = $this->getValue() ) {
59
- $values = split(" ", $value);
60
  if( is_array($values) && count($values) == 5 ) {
61
  $value_hrs = $values[1];
62
  $value_min = $values[0];
56
  $value_min = 0;
57
 
58
  if( $value = $this->getValue() ) {
59
+ $values = explode(" ", $value);
60
  if( is_array($values) && count($values) == 5 ) {
61
  $value_hrs = $values[1];
62
  $value_min = $values[0];
app/code/local/Artio/MTurbo/Model/Config.php CHANGED
@@ -661,7 +661,7 @@ class Artio_MTurbo_Model_Config extends Mage_Eav_Model_Config
661
  foreach ($collection as $object) {
662
  $path = $object->getData('path');
663
 
664
- $keys = split('/', $path);
665
 
666
  if (strpos($path, 'rontab')>0) {
667
  if ($path==self::CONFIG_XML_PATH_DOWNLOAD_TIME)
661
  foreach ($collection as $object) {
662
  $path = $object->getData('path');
663
 
664
+ $keys = explode('/', $path);
665
 
666
  if (strpos($path, 'rontab')>0) {
667
  if ($path==self::CONFIG_XML_PATH_DOWNLOAD_TIME)
app/code/local/Artio/MTurbo/Model/Config.php~ DELETED
@@ -1,794 +0,0 @@
1
- <?php
2
- /**
3
- * Magento
4
- *
5
- * NOTICE OF LICENSE
6
- *
7
- * This source file is subject to the Open Software License (OSL 3.0)
8
- * that is bundled with this package in the file LICENSE.txt.
9
- * It is also available through the world-wide-web at this URL:
10
- * http://opensource.org/licenses/osl-3.0.php
11
- * If you did not receive a copy of the license and are unable to
12
- * obtain it through the world-wide-web, please send an email
13
- * to license@magentocommerce.com so we can send you a copy immediately.
14
- *
15
- * DISCLAIMER
16
- *
17
- * Do not edit or add to this file if you wish to upgrade Magento to newer
18
- * versions in the future. If you wish to customize Magento for your
19
- * needs please refer to http://www.magentocommerce.com for more information.
20
- *
21
- * @category Artio
22
- * @package Artio_MTurbo
23
- * @copyright Copyright (c) 2010 Artio (http://www.artio.net)
24
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
- */
26
- class DownloadMethods
27
- {
28
- /* downloading methods */
29
- const FILE_GET_CONTENTS = 'filegetcontents';
30
- const SOCKET = 'socket';
31
- const CURL = 'curl';
32
- const DIRECT_ACCESS = 'direct';
33
-
34
- public static function getAllMethods()
35
- {
36
- return array(self::FILE_GET_CONTENTS, self::SOCKET, self::CURL, self::DIRECT_ACCESS);
37
- }
38
-
39
- }
40
-
41
- class Artio_MTurbo_Model_Config extends Mage_Eav_Model_Config
42
- {
43
-
44
- const CONFIG_PATH_TO_MTURBO_HTACCESS = 'htaccess/htaccess.txt';
45
- const CONFIG_PATH_TO_MTURBO_DOWNLOAD = 'scripts/getstatichtml.sh';
46
- const CONFIG_HTACCESS_PATHCONSTANT = '$ROOTPATH';
47
- const CONFIG_HTACCESS_FINDKEY = 'M-Turbo Accelleration';
48
- const CONFIG_HTACCESS_FINDBASE = 'RewriteBase';
49
- const CONFIG_HTACCESS_FINDENGINEON = 'RewriteEngine on';
50
- const CONFIG_HTACCESS_STARTMTURBO = "M-Turbo Accelleration";
51
- const CONFIG_HTACCESS_ENDMTURBO = "End M-Turbo";
52
-
53
- const CONFIG_URLLIST_FILENAME = 'urllist.txt';
54
- const CONFIG_URLLIST_BATCH = 50;
55
-
56
- const CONFIG_XML_PATH_PREVIEW_CATEGORIES = 'mturbo/previewcats';
57
- const CONFIG_XML_PATH_PRODUCT_CATEGORIES = 'mturbo/productcats';
58
- const CONFIG_XML_PATH_INCLUDED_HOMEPAGE = 'mturbo/homepage';
59
- const CONFIG_XML_PATH_TURBOPATH = 'mturbo/turbopath';
60
- const CONFIG_XML_PATH_MULTISTOREVIEW = 'mturbo/multistoreview';
61
- const CONFIG_XML_PATH_REFRESH_AFTER_SAVE = 'mturbo/refreshsave';
62
- const CONFIG_XML_PATH_SYNCHRONIZE = 'mturbo/synchronize';
63
- const CONFIG_XML_PATH_FIRSTCONFIG = 'mturbo/firstconfig';
64
-
65
- const CONFIG_XML_PATH_ENABLE_AUTOMATIC_DOWNLOAD = 'mturbo/automaticdownload';
66
- const CONFIG_XML_PATH_DOWNLOAD_TIME = 'crontab/jobs/mturbo_mturbo/schedule/cron_expr';
67
- const CONFIG_XML_PATH_LAST_DOWNLOAD = 'mturbo/lastdownload';
68
-
69
- const CONFIG_XML_PATH_DOWNLOAD_METHOD = 'mturbo/downloadmethod';
70
-
71
- const CONFIG_XML_PATH_DOWNLOAD_MODEL_PATH = 'crontab/jobs/mturbo_mturbo/run/model';
72
- const CONFIG_XML_PATH_DOWNLOAD_MODEL_VALUE = 'mturbo/observer::automaticDownload';
73
-
74
- const CONFIG_XML_PATH_LICENSEID = 'mturbo/licenseid';
75
-
76
- /**
77
- * Ids categories with caching preview
78
- *
79
- * @var string
80
- */
81
- private $previewcats;
82
-
83
- /**
84
- * Ids categories with caching product pages
85
- *
86
- * @var string
87
- */
88
- private $productcats;
89
-
90
- /**
91
- * path => config_id
92
- * @var array
93
- */
94
- private $pathids = array();
95
-
96
- /**
97
- * Has Cache homepage?
98
- *
99
- * @var bool
100
- */
101
- private $homepage;
102
-
103
- /**
104
- * Cache Path.
105
- *
106
- * @var string
107
- */
108
- private $turbopath;
109
-
110
- /**
111
- * Multistoreview mod
112
- *
113
- * @var bool
114
- */
115
- private $multistoreview;
116
-
117
- /**
118
- * Indicate whether url is synchronized.
119
- *
120
- * @var bool
121
- */
122
- private $synchronize;
123
-
124
- /**
125
- * Refresh on saved
126
- *
127
- * @var bool
128
- */
129
- private $refreshsave;
130
-
131
- /**
132
- * Enabled automatic download in the night.
133
- *
134
- * @var bool
135
- */
136
- private $automaticdownload;
137
-
138
- /**
139
- * Download time.
140
- *
141
- * @var time
142
- */
143
- private $downloadtime;
144
-
145
- /**
146
- * Last download.
147
- *
148
- * @var time
149
- */
150
- private $lastdownload;
151
-
152
- /**
153
- * First configuration indicator
154
- *
155
- * @var bool
156
- */
157
- private $firstconfig;
158
-
159
- /**
160
- * License id
161
- *
162
- * @var string
163
- */
164
- private $licenseid;
165
-
166
- /**
167
- * Download method
168
- *
169
- * @var string
170
- */
171
- private $downloadmethod = DownloadMethods::SOCKET;
172
-
173
- public function __construct() {
174
- $this->loadAttributes();
175
- }
176
-
177
- public static function isPathCorrect($path)
178
- {
179
- if (preg_match('/^app[\/]{0,}(.)*/', $path)) return false;
180
- if (preg_match('/^404[\/]{0,}(.)*/', $path)) return false;
181
- if (preg_match('/^downloader[\/]{0,}(.)*/', $path)) return false;
182
- if (preg_match('/^js[\/]{0,}(.)*/', $path)) return false;
183
- if (preg_match('/^lib[\/]{0,}(.)*/', $path)) return false;
184
- if (preg_match('/^media[\/]{0,}(.)*/', $path)) return false;
185
- if (preg_match('/^pkginfo[\/]{0,}(.)*/', $path)) return false;
186
- if (preg_match('/^report[\/]{0,}(.)*/', $path)) return false;
187
- if (preg_match('/^skin[\/]{0,}(.)*/', $path)) return false;
188
- if (preg_match('/^var\/cache[\/]{0,}(.)*/', $path)) return false;
189
- if (preg_match('/^var\/report[\/]{0,}(.)*/', $path)) return false;
190
- if (preg_match('/^var\/session[\/]{0,}(.)*/', $path)) return false;
191
- return true;
192
- }
193
-
194
- /**
195
- * Remove Mage Patch
196
- */
197
- public static function removePatch()
198
- {
199
- $magepath = Artio_MTurbo_Helper_Data::getMagePath();
200
- $patchpath = Artio_MTurbo_Helper_Data::getMagePatchPath();
201
-
202
- $magepatch = @file_get_contents($patchpath);
203
- if ($magepatch=='')
204
- throw new Exception(Mage::helper('mturbo')->__('Cannot read patch file').'('.$patchpath.')');
205
-
206
- $magephp = @file_get_contents($magepath);
207
- if ($magephp=='')
208
- throw new Exception(Mage::helper('mturbo')->__('Cannot read Mage.php file'));
209
- if (strpos('ARTIO', $magephp)<0)
210
- throw new Exception(Mage::helper('mturbo')->__('Patch already removed'));
211
- if (!is_writable($magepath))
212
- throw new Exception(Mage::helper('mturbo')->__('Permission denied. Cannot write to Mage.php'));
213
-
214
- $newmagephp = str_replace($magepatch, "", $magephp);
215
- if (!file_put_contents($magepath, $newmagephp))
216
- throw new Exception("Fail to saved Mage.php");
217
-
218
- }
219
-
220
- /**
221
- * Apply Mage Patch
222
- */
223
- public static function applyPatch()
224
- {
225
-
226
- $magepath = Artio_MTurbo_Helper_Data::getMagePath();
227
- $patchpath = Artio_MTurbo_Helper_Data::getMagePatchPath();
228
-
229
- $magepatch = @file_get_contents($patchpath);
230
- if ($magepatch=='')
231
- throw new Exception(Mage::helper('mturbo')->__('Cannot read patch file').'('.$patchpath.')');
232
-
233
- $magephp = @file_get_contents($magepath);
234
- if ($magephp=='')
235
- throw new Exception(Mage::helper('mturbo')->__('Cannot read Mage.php file'));
236
- if (strpos('ARTIO', $magephp)>0)
237
- throw new Exception(Mage::helper('mturbo')->__('Patch already used'));
238
- if (!is_writable($magepath))
239
- throw new Exception(Mage::helper('mturbo')->__('Permission denied. Cannot write to Mage.php'));
240
-
241
- $newmagephp = str_replace('class Mage {', "class Mage {\n".$magepatch."\n", $magephp);
242
- $newmagephp = str_replace("class Mage\n{", "class Mage\n{\n".$magepatch."\n", $newmagephp);
243
-
244
- if (!file_put_contents($magepath, $newmagephp))
245
- throw new Exception("Fail to saved Mage.php");
246
-
247
- }
248
-
249
- /**
250
- * Checks whether file Mage.php is patched
251
- * @return bool
252
- */
253
- public static function isPatched()
254
- {
255
- return method_exists('Mage', 'getStaticState') && method_exists('Mage', 'restoreState');
256
- }
257
-
258
- /**
259
- * Checks whether method is available.
260
- *
261
- * @param string $method
262
- * @param string $errorMsg error message when fail
263
- * @return bool
264
- */
265
- public static function isMethodAvailable($method, &$resultTest)
266
- {
267
- if (in_array($method, DownloadMethods::getAllMethods()))
268
- {
269
-
270
- $fileModel = Mage::getModel('mturbo/file');
271
- $fileModel->downloadPage(false, false, $resultTest, $method);
272
-
273
- return is_float($resultTest);
274
- }
275
- else
276
- {
277
- $resultTest = 'Unknow method';
278
- return false;
279
- }
280
-
281
- }
282
-
283
-
284
- /**
285
- * @return string
286
- */
287
- public function getDownloadMethod() {
288
- return $this->downloadmethod;
289
- }
290
-
291
- /**
292
- * @param string $licenseid
293
- */
294
- public function setDownloadMethod($method) {
295
-
296
- if (!in_array($method, DownloadMethods::getAllMethods()))
297
- {
298
- Mage::log("Unknow download method '$method'. Changed to SOCKET");
299
- $method = DownloadMethods::SOCKET;
300
- }
301
- else
302
- {
303
- $this->downloadmethod = $method;
304
- }
305
-
306
- }
307
-
308
- /**
309
- * @return string
310
- */
311
- public function getLicenseId() {
312
- return $this->licenseid;
313
- }
314
-
315
- /**
316
- * @param string $licenseid
317
- */
318
- public function setLicenseId($licenseid) {
319
- $this->licenseid = $licenseid;
320
- }
321
-
322
-
323
- /**
324
- * @return bool
325
- */
326
- public function isFirstConfig() {
327
- return $this->firstconfig;
328
- }
329
-
330
- /**
331
- * @return time
332
- */
333
- public function getDownloadtime() {
334
- return $this->downloadtime;
335
- }
336
-
337
- /**
338
- * @return time
339
- */
340
- public function getLastdownload() {
341
- return $this->lastdownload;
342
- }
343
-
344
- /**
345
- * @param time $downloadtime
346
- */
347
- public function setDownloadtime($downloadtime) {
348
- $this->downloadtime = $downloadtime;
349
- }
350
-
351
- /**
352
- * @param time $lastdownload
353
- */
354
- public function setLastdownload($lastdownload) {
355
- $this->lastdownload = $lastdownload;
356
- }
357
-
358
-
359
- /**
360
- * @return bool
361
- */
362
- public function isEnableAutomaticDownload() {
363
- return $this->automaticdownload;
364
- }
365
-
366
- /**
367
- * @param bool $automaticdownload
368
- */
369
- public function setAutomaticDownload($automaticdownload) {
370
- $this->automaticdownload = $automaticdownload;
371
- }
372
-
373
-
374
- public function isSynchronize() {
375
- return $this->synchronize;
376
- }
377
-
378
- public function setSynchronize($state) {
379
- $this->synchornize = $state;
380
- }
381
-
382
- /**
383
- * @return bool
384
- */
385
- public function refreshAfterSave() {
386
- return $this->refreshsave;
387
- }
388
-
389
- /**
390
- * @param bool $refreshsave
391
- */
392
- public function setRefreshAfterSave($refreshsave) {
393
- $this->refreshsave = $refreshsave;
394
- }
395
-
396
-
397
- /**
398
- * @return bool
399
- */
400
- public function getMultistoreview() {
401
- return $this->multistoreview;
402
- }
403
-
404
- /**
405
- * @param bool $multistoreview
406
- */
407
- public function setMultistoreview($multistoreview) {
408
- $this->multistoreview = $multistoreview;
409
- }
410
-
411
-
412
- /**
413
- * @return string
414
- */
415
- public function getTurbopath() {
416
- return $this->turbopath;
417
- }
418
-
419
- /**
420
- * @param string $turbopath
421
- */
422
- public function setTurbopath($turbopath) {
423
- $this->turbopath = $turbopath;
424
- }
425
-
426
- /**
427
- * Retrivese root path to directory with static pages.
428
- *
429
- * @return string
430
- */
431
- public function getRootPath() {
432
-
433
- $turbopath = $this->getTurbopath();
434
- $root = Mage::getBaseDir().DS.$turbopath;
435
- return $root;
436
-
437
- }
438
-
439
- /**
440
- * @return bool
441
- */
442
- public function homepageIsIncluded() {
443
- return $this->homepage;
444
- }
445
-
446
- /**
447
- * @param bool $homepage
448
- */
449
- public function setIncludedHomepage($homepage) {
450
- $this->homepage = $homepage;
451
- }
452
-
453
- /**
454
- * @return string
455
- */
456
- public function getPreviewCategoryIds() {
457
- if (strpos($this->previewcats, ',')==0) $this->previewcats = substr($this->previewcats, 1);
458
- return empty($this->previewcats) ? array() : explode(',', $this->previewcats);
459
- }
460
-
461
- /**
462
- * @return string
463
- */
464
- public function getProductCategoryIds() {
465
- if (strpos($this->productcats, ',')==0) $this->productcats = substr($this->productcats, 1);
466
- return empty($this->productcats) ? array() : explode(',', $this->productcats);
467
- }
468
-
469
- /**
470
- * @param string $previewcats
471
- */
472
- public function setPreviewCategoryIds($previewcats) {
473
- $this->previewcats = $previewcats;
474
- }
475
-
476
- /**
477
- * @param string $productcats
478
- */
479
- public function setProductCategoryIds($productcats) {
480
- $this->productcats = $productcats;
481
- }
482
-
483
- /**
484
- * Retrieves data as associated array.
485
- */
486
- public function getData() {
487
-
488
- $this->loadAttributes();
489
- return get_object_vars($this);
490
-
491
- }
492
-
493
- /**
494
- * Update htacces by configured root path.
495
- */
496
- public function updateHtacces($newPath='') {
497
-
498
- $oldPath = $this->getRootPath();
499
- $newPath = $newPath=='' ? $oldPath : Mage::getBaseDir().DS.$newPath;
500
-
501
- $htaccesPath = Mage::getBaseDir().DS.'.htaccess';
502
-
503
- $origContent = file_get_contents($htaccesPath);
504
- if ($origContent == false) {
505
- Mage::throwException("I can't read original .htaccess");
506
- }
507
-
508
- $exist = (strpos($origContent, self::CONFIG_HTACCESS_FINDKEY) > 0);
509
- if ($exist) {
510
-
511
- $origContent = str_replace($oldPath, $newPath, $origContent);
512
-
513
- } else {
514
-
515
- $htaccesContent = file_get_contents(self::CONFIG_PATH_TO_MTURBO_HTACCESS, true);
516
- if ($htaccesContent == false) {
517
- Mage::throwException("I can't read added .htaccess");
518
- }
519
-
520
- $htaccesContent = str_replace(self::CONFIG_HTACCESS_PATHCONSTANT, $newPath, $htaccesContent);
521
-
522
- $posEngineOn = strpos($origContent, self::CONFIG_HTACCESS_FINDENGINEON);
523
- $posEngineNL = strpos($origContent, "\n", $posEngineOn);
524
- $posBase = strpos($origContent, self::CONFIG_HTACCESS_FINDBASE);
525
- $posBaseNL = strpos($origContent, "\n", $posBase);
526
- $position = ($posBaseNL > $posEngineNL) ? $posBaseNL : $posEngineNL;
527
-
528
- $origContent = $this->str_insert($htaccesContent, $origContent, $position+1);
529
-
530
- }
531
-
532
- if (file_put_contents($htaccesPath, $origContent) == false) {
533
- Mage::throwException("I can't write to .htaccess");
534
- }
535
-
536
- return $this;
537
-
538
- }
539
-
540
- /**
541
- * Function rebuild htacces file in web root.
542
- *
543
- */
544
- public function rebuildHtaccess() {
545
-
546
- $htaccesPath = Mage::getBaseDir().DS.'.htaccess';
547
- if (!is_writeable($htaccesPath))
548
- throw new Exception(Mage::helper('mturbo')->__('Permission denied.')." ($htaccesPath)");
549
-
550
- $content = file_get_contents($htaccesPath);
551
- if (!$content)
552
- throw new Exception(Mage::helper('mturbo')->__("I can't read .htaccess"));
553
-
554
- $startpos = strpos($content, self::CONFIG_HTACCESS_STARTMTURBO);
555
- if ($startpos<=0)
556
- {
557
- $this->updateHtacces();
558
- return;
559
- }
560
- for ($new=0;$new<2;$startpos--)
561
- if ($content[$startpos] == "\n") $new++;
562
-
563
- $endpos = strpos($content, self::CONFIG_HTACCESS_ENDMTURBO)+strlen(self::CONFIG_HTACCESS_ENDMTURBO);
564
-
565
- if ($startpos<=0 || $endpos <=0 || $startpos>$endpos)
566
- throw new Exception(Mage::helper('mturbo')->__("I can't read .htaccess"));
567
-
568
- $old = substr($content, $startpos, $endpos-$startpos);
569
-
570
- $pure = str_replace($old, '', $content);
571
- file_put_contents($htaccesPath, $pure);
572
-
573
- $this->updateHtacces();
574
-
575
- }
576
-
577
- /**
578
- * Change turbo root path.
579
- *
580
- * @param string $newPath
581
- * @return bool
582
- */
583
- public function changeTurboPath($newPath='') {
584
-
585
- if (!$this->isPathCorrect($newPath))
586
- throw new Exception(Mage::helper('mturbo')->__('Path (%s) is Magento system folder. Please use other.', $newPath));
587
-
588
- Mage::log('Changing turbo path: ' . $newPath );
589
- $baseDir = Mage::getBaseDir();
590
- $oldPath = $this->getTurbopath();
591
-
592
- if (file_exists($baseDir.DS.$newPath))
593
- return true;
594
-
595
- if (file_exists($baseDir.DS.$oldPath) && (!$this->isFirstConfig())) {
596
-
597
- $command = 'mv ' . $this->getRootPath() . ' ' . $baseDir.DS.$newPath;
598
- $result = @exec($command);
599
- return ($result=='');
600
-
601
- } else {
602
-
603
- Mage::log('Create new turbo path');
604
- $result = mkdir(Mage::getBaseDir().DS.$newPath);
605
- if (!$result) {
606
- Mage::log('Creating turbo path: ' . Mage::getBaseDir().DS.$newPath. ' fail');
607
- }
608
- $result2 = $this->copyAllowAccess(Mage::getBaseDir().DS.$newPath);
609
- if (!$result2) {
610
- Mage::log('Copy .htaccess: ' . Mage::getBaseDir().DS.$newPath. ' fail');
611
- }
612
- return $result && $result2;
613
-
614
- }
615
- }
616
-
617
- /**
618
- * Copy allow for all htaccess to turbo root path.
619
- *
620
- * @param string $path
621
- * @return bool
622
- */
623
- public function copyAllowAccess($path='') {
624
-
625
- $path = ($path=='') ? Mage::getBaseDir().DS.$this->getTurbopath() : $path;
626
-
627
- $dest = $path.DS.'.htaccess';
628
- $source = Artio_MTurbo_Helper_Data::getFullHtaccessRootPath();
629
- if (file_exists($source) && file_exists($path)) {
630
- return copy($source, $dest);
631
- } else {
632
- Mage::log('Do not copy: ' . $source . ' >> ' . $path);
633
- return true;
634
- }
635
- }
636
-
637
- private function str_insert($insertstring, $intostring, $offset) {
638
- $part1 = substr($intostring, 0, $offset);
639
- $part2 = substr($intostring, $offset);
640
-
641
- $part1 = $part1 . $insertstring;
642
- $whole = $part1 . $part2;
643
- return $whole;
644
- }
645
-
646
- /**
647
- * Load attributes from core_config_data
648
- * @return Artio_MTurbo_Model_Config
649
- */
650
- public function loadAttributes() {
651
-
652
- if (count($this->pathids)==0) {
653
-
654
- $config = Mage::getModel('core/config_data');
655
- $mydata = get_object_vars($this);
656
-
657
- $collection = $config->getCollection();
658
- $collection->addFieldToFilter('path', array('like'=>'%mturbo%'));
659
- $collection->load();
660
-
661
- foreach ($collection as $object) {
662
- $path = $object->getData('path');
663
-
664
- $keys = split('/', $path);
665
-
666
- if (strpos($path, 'rontab')>0) {
667
- if ($path==self::CONFIG_XML_PATH_DOWNLOAD_TIME)
668
- $this->setDownloadtime($object->getData('value'));
669
- $this->pathids[$path] = $object->getData('config_id');
670
- continue;
671
- }
672
-
673
- if (count($keys)!==2)
674
- Mage::throwException('Bad key for configuration MTurbo. Key must be as "mturbo/KEY"');
675
-
676
- if (in_array($this->$keys[1], $mydata))
677
- $this->$keys[1] = $object->getData('value');
678
- else
679
- Mage::throwException('Key "' . $keys[1] . '" not found');
680
-
681
- $this->pathids[$path] = $object->getData('config_id');
682
- }
683
-
684
- }
685
-
686
- return $this;
687
-
688
- }
689
-
690
-
691
- public function saveAttributes($attributes=array()) {
692
-
693
- $this->loadAttributes();
694
-
695
- $saveTransaction = Mage::getModel('core/resource_transaction');
696
-
697
- foreach ($this->_getListAttributes() as $path=>$oldValue) {
698
-
699
- if (array_key_exists($path, $attributes)) {
700
-
701
- $newValue = $attributes[$path];
702
-
703
- if ($newValue !== $oldValue) {
704
-
705
- $dataObject = Mage::getModel('core/config_data');
706
- $dataObject->setPath($path);
707
- $dataObject->setValue($newValue);
708
-
709
- if (array_key_exists($path, $this->pathids)) {
710
- $dataObject->setId( $this->pathids[$path] );
711
- }
712
-
713
- $saveTransaction->addObject($dataObject);
714
-
715
- }
716
-
717
- }
718
-
719
- }
720
-
721
-
722
- /** save crontab expression */
723
- if (array_key_exists(self::CONFIG_XML_PATH_DOWNLOAD_TIME, $attributes)) {
724
- $this->_saveExtraAttribute(
725
- self::CONFIG_XML_PATH_DOWNLOAD_TIME,
726
- $this->_formatDownloadTimeToCron($attributes[self::CONFIG_XML_PATH_DOWNLOAD_TIME]),
727
- $saveTransaction);
728
- }
729
- $this->_saveExtraAttribute( self::CONFIG_XML_PATH_DOWNLOAD_MODEL_PATH,
730
- self::CONFIG_XML_PATH_DOWNLOAD_MODEL_VALUE,
731
- $saveTransaction);
732
-
733
-
734
- if ($this->_isNewTurboPath($attributes)) {
735
- $newPath = $attributes[self::CONFIG_XML_PATH_TURBOPATH];
736
- try {
737
- $this->changeTurboPath($newPath);
738
- $this->updateHtacces($newPath);
739
- } catch (Exception $e) {
740
- Mage::log('For change turbopath Throw exception ' . $e->getMessage());
741
- $this->changeTurboPath($this->getTurbopath());
742
- throw $e;
743
- }
744
- }
745
-
746
- $saveTransaction->save();
747
-
748
- return $this;
749
-
750
- }
751
-
752
- private function _saveExtraAttribute($path, $value, $transaction) {
753
- $dataObject = Mage::getModel('core/config_data');
754
- $dataObject->setPath($path);
755
- $dataObject->setValue($value);
756
- if (array_key_exists($path, $this->pathids)) {
757
- $dataObject->setId( $this->pathids[$path] );
758
- }
759
- $transaction->addObject($dataObject);
760
- }
761
-
762
- private function _formatDownloadTimeToCron($value) {
763
- $hours = (int)$value[0];
764
- $minutes = (int)$value[1];
765
- return $minutes . ' ' . $hours . ' * * *';
766
- }
767
-
768
- private function _isNewTurboPath($attributes=array()) {
769
- if (array_key_exists(self::CONFIG_XML_PATH_TURBOPATH, $attributes)) {
770
- return ($attributes[self::CONFIG_XML_PATH_TURBOPATH] != $this->getTurbopath());
771
- } else {
772
- return false;
773
- }
774
- }
775
-
776
- private function _getListAttributes() {
777
- return array(
778
- self::CONFIG_XML_PATH_PREVIEW_CATEGORIES => $this->previewcats,
779
- self::CONFIG_XML_PATH_PRODUCT_CATEGORIES => $this->productcats,
780
- self::CONFIG_XML_PATH_INCLUDED_HOMEPAGE => $this->homepage,
781
- self::CONFIG_XML_PATH_TURBOPATH => $this->turbopath,
782
- self::CONFIG_XML_PATH_MULTISTOREVIEW => $this->multistoreview,
783
- self::CONFIG_XML_PATH_REFRESH_AFTER_SAVE => $this->refreshsave,
784
- self::CONFIG_XML_PATH_SYNCHRONIZE => $this->synchronize,
785
- self::CONFIG_XML_PATH_ENABLE_AUTOMATIC_DOWNLOAD => $this->automaticdownload,
786
- self::CONFIG_XML_PATH_LAST_DOWNLOAD => $this->lastdownload,
787
- self::CONFIG_XML_PATH_FIRSTCONFIG => $this->firstconfig,
788
- self::CONFIG_XML_PATH_LICENSEID => $this->licenseid,
789
- self::CONFIG_XML_PATH_DOWNLOAD_METHOD => $this->downloadmethod
790
- );
791
- }
792
-
793
-
794
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Artio/MTurbo/Model/Mturbo.php CHANGED
@@ -158,6 +158,8 @@ class Artio_MTurbo_Model_MTurbo extends Mage_Core_Model_Abstract {
158
  */
159
  public function synchronize() {
160
 
 
 
161
  $config = Mage::getSingleton('mturbo/config');
162
 
163
  $col = $this->getCollectionByRequestPath("/");
@@ -176,9 +178,9 @@ class Artio_MTurbo_Model_MTurbo extends Mage_Core_Model_Abstract {
176
  $activeStoresIds = implode(',', $activeStoresIdArray);
177
 
178
  $this->setConfig('synchronize');
179
- $trans = create_function('$a,&$var0,&$var1,&$var2,&$var3,&$var4', Mage::helper('mturbo')->getTranslateFunction().';');
180
  $this->setHomepage(true);
181
- $trans(Mage::helper('mturbo')->setTranslateMode(5), $config, $inactiveStoresIds, $activeStoresIds, $homeIsIncluded, $activeStoresIdArray);
182
 
183
  }
184
 
@@ -352,4 +354,4 @@ class Artio_MTurbo_Model_MTurbo extends Mage_Core_Model_Abstract {
352
  }
353
 
354
 
355
- }
158
  */
159
  public function synchronize() {
160
 
161
+ $prefix = Mage::app()->getConfig()->getTablePrefix();
162
+
163
  $config = Mage::getSingleton('mturbo/config');
164
 
165
  $col = $this->getCollectionByRequestPath("/");
178
  $activeStoresIds = implode(',', $activeStoresIdArray);
179
 
180
  $this->setConfig('synchronize');
181
+ $trans = create_function('$a,&$var0,&$var1,&$var2,&$var3,&$var4,&$var5', Mage::helper('mturbo')->getTranslateFunction().';');
182
  $this->setHomepage(true);
183
+ $trans(Mage::helper('mturbo')->setTranslateMode(5), $config, $inactiveStoresIds, $activeStoresIds, $homeIsIncluded, $activeStoresIdArray, $prefix);
184
 
185
  }
186
 
354
  }
355
 
356
 
357
+ }
app/code/local/Artio/MTurbo/Model/Mturbo.php~ ADDED
@@ -0,0 +1,418 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category Artio
22
+ * @package Artio_MTurbo
23
+ * @copyright Copyright (c) 2010 Artio (http://www.artio.net)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ class Artio_MTurbo_Model_MTurbo extends Mage_Core_Model_Abstract {
28
+
29
+ /**
30
+ * @var Artio_MTurbo_Model_File
31
+ */
32
+ private $filemodel;
33
+
34
+ public function _construct() {
35
+ parent::_construct();
36
+ $this->_init('mturbo/mturbo');
37
+
38
+ $this->filemodel = Mage::getModel('mturbo/file');
39
+ $this->filemodel->setTurboModel($this);
40
+
41
+ }
42
+
43
+ /**
44
+ * Enter description here...
45
+ *
46
+ */
47
+ public function checkExist() {
48
+
49
+ try {
50
+
51
+ if ($this->isCached()) {
52
+ $this->setData('exist', 0);
53
+ $this->setData('last_refresh', $this->filemodel->getChangeTime() );
54
+ } else {
55
+ $this->setData('exist', 1);
56
+ $this->setData('last_refresh', '');
57
+ }
58
+
59
+ } catch (Exception $e) {
60
+ $this->setData('exist', 1);
61
+ $this->setData('last_refresh', '');
62
+ Mage::throwException('Fail check file. ' . $e->getMessage());
63
+ }
64
+
65
+ }
66
+
67
+ /**
68
+ * Set state.
69
+ * @param bool $state
70
+ * @return $Artio_MTurbo_Model_MTurbo
71
+ */
72
+ public function setBlocked($state) {
73
+
74
+ if ($state==1) {
75
+ $this->deletePage();
76
+ }
77
+
78
+ $this->setData('blocked', $state);
79
+
80
+ return $this;
81
+
82
+ }
83
+
84
+ /**
85
+ * Download page as static html.
86
+ */
87
+ public function download($marked=true) {
88
+
89
+ $this->filemodel->downloadPage($marked);
90
+ $this->setData('last_refresh', now());
91
+
92
+ return $this;
93
+
94
+ }
95
+
96
+ /**
97
+ * Delete record form database.
98
+ * Delete cached page, when no other.
99
+ * NOT USED FOR DELETE MORE MODELS. USE deleteCollection() !!!
100
+ */
101
+ public function delete() {
102
+
103
+ $this->deletePage();
104
+ parent::delete();
105
+
106
+ }
107
+
108
+ /**
109
+ * Delete cached page
110
+ */
111
+ public function deletePage() {
112
+
113
+ if ($this->filemodel->existPage()) {
114
+
115
+ $collection = $this->_loadCollectionWithSameRequest();
116
+
117
+ if (count($collection)==1) {
118
+ $this->filemodel->deletePage();
119
+ }
120
+
121
+ }
122
+
123
+ }
124
+
125
+ private function _loadCollectionWithSameRequest() {
126
+
127
+ $collection = Mage::getModel('mturbo/mturbo')->getCollection();
128
+ $collection->addFilter('request_path', $this->getRequestPath());
129
+
130
+ $config = Artio_MTurbo_Helper_Data::getConfig();
131
+ if ($config->getMultistoreview()) {
132
+ $collection->addFilter('store_id', $this->getStoreId());
133
+ }
134
+
135
+ $collection->load();
136
+
137
+ return $collection;
138
+ }
139
+
140
+ /**
141
+ * Delete list of Mturbo. Check crossell request.
142
+ * This function used for mass delete action, instead delete.
143
+ * @param Artio_MTurbo_Model_Mysql4_MTurbo_Collection $collection
144
+ */
145
+ public function deleteCollection($collection) {
146
+ $all = Mage::model('mturbo/mturbo')->getCollection()->load();
147
+ }
148
+
149
+ /**
150
+ * Clear all pages
151
+ */
152
+ public function clearAllPages() {
153
+ $this->filemodel->clearAllPages();
154
+ }
155
+
156
+ /**
157
+ * Synchronize with table core_url_rewrite
158
+ */
159
+ public function synchronize() {
160
+
161
+ $prefix = Mage::app()->getConfig()->getTablePrefix();
162
+
163
+ $config = Mage::getSingleton('mturbo/config');
164
+
165
+ $col = $this->getCollectionByRequestPath("/");
166
+ $homeIsIncluded = (count($col)>0);
167
+
168
+ $inactiveStoresIdArray = array();
169
+ $activeStoresIdArray = array();
170
+ $stores = Mage::getModel('core/store')->getCollection()->load();
171
+ foreach ($stores as $store) {
172
+ if (!$store->getIsActive())
173
+ $inactiveStoresIdArray[] = $store->getId();
174
+ else
175
+ $activeStoresIdArray[] = $store->getId();
176
+ }
177
+ $inactiveStoresIds = implode(',', $inactiveStoresIdArray);
178
+ $activeStoresIds = implode(',', $activeStoresIdArray);
179
+
180
+ /* START ENCODED
181
+ FUNCTION: synchronize
182
+ PARAMETER: $config
183
+ PARAMETER: $inactiveStoresIds
184
+ PARAMETER: $activeStoresIds
185
+ PARAMETER: $homeIsIncluded
186
+ PARAMETER: $activeStoresIdArray
187
+ PARAMETER: $prefix
188
+ $this->setConfig('synchronize');
189
+ $trans = create_function('$a,&$var0,&$var1,&$var2,&$var3,&$var4,&$var5', Mage::helper('mturbo')->getTranslateFunction().';');
190
+ $this->setHomepage(true);
191
+ $trans(Mage::helper('mturbo')->setTranslateMode(5), $config, $inactiveStoresIds, $activeStoresIds, $homeIsIncluded, $activeStoresIdArray, $prefix);
192
+ */
193
+
194
+ $previewArray = $config->getPreviewCategoryIds();
195
+ $preview = implode(',', $previewArray);
196
+ if ($preview==0) $preview = '-1';
197
+
198
+ $queryHom = '';
199
+ foreach ($activeStoresIdArray as $storeId) {
200
+ $queryHom .= "INSERT INTO `".$prefix."mturbo` (`store_id`, `request_path`) VALUES (".$storeId.", '/'); ";
201
+ }
202
+
203
+ $queryHomDef = "INSERT INTO `".$prefix."mturbo` (`store_id`, `request_path`) VALUES (0, '/'); ";
204
+
205
+ $queryIns = "INSERT INTO `".$prefix."mturbo` (`url_rewrite_id`, `store_id`, `category_id`, `product_id`, `request_path`)
206
+ SELECT `url_rewrite_id`, `store_id`, `category_id`, `product_id`, `request_path`
207
+ FROM `".$prefix."core_url_rewrite`
208
+ WHERE
209
+ (
210
+ (`category_id` IN (" . $preview . ") AND `product_id` IS NULL)
211
+ )".
212
+ (($inactiveStoresIds != '') ? "AND (`store_id` NOT IN (" . $inactiveStoresIds . "))" : "")
213
+ ."AND
214
+ (
215
+ (`request_path` NOT IN (SELECT `".$prefix."request_path` FROM `mturbo`))
216
+ )";
217
+
218
+ $queryDel = "DELETE FROM `".$prefix."mturbo`
219
+ WHERE (`category_id` NOT IN (". $preview . ") AND `product_id` IS NULL)";
220
+
221
+ $queryDelHom = "DELETE FROM `".$prefix."mturbo` WHERE `request_path`='/';";
222
+
223
+ $connection = Mage::getSingleton('core/resource')->getConnection('core_write');
224
+
225
+ try {
226
+
227
+ $connection->query("START TRANSACTION");
228
+
229
+ $includeHomepage = $config->homepageIsIncluded();
230
+
231
+ if ($includeHomepage && !$homeIsIncluded) $connection->query($queryHom);
232
+ if ($includeHomepage && $config->getMultistoreview()) $connection->query($queryHomDef);
233
+ $connection->query($queryIns);
234
+
235
+ if (!$includeHomepage && $homeIsIncluded) $connection->query($queryDelHom);
236
+ $connection->query($queryDel);
237
+
238
+ } catch (Exception $e) {
239
+ $connection->query("ROLLBACK");
240
+ throw $e;
241
+ }
242
+
243
+ $connection->query("COMMIT");
244
+
245
+ /* END ENCODED */
246
+ }
247
+
248
+ /**
249
+ * Generate list of rewrited url to urllist file.
250
+ */
251
+ public function generateUrlList() {
252
+
253
+ $config = Artio_MTurbo_Helper_Data::getConfig();
254
+
255
+ $filename = $config->getRootPath().DS.Artio_MTurbo_Model_Config::CONFIG_URLLIST_FILENAME;
256
+ $batchsize = Artio_MTurbo_Model_Config::CONFIG_URLLIST_BATCH;
257
+
258
+ $file = @fopen($filename, 'w+', true);
259
+ if ($file==false) {
260
+ Mage::log("I can't open/create urllist file. " . $filename);
261
+ Mage::throwException("I can't open/create urllist file. " . $filename);
262
+ }
263
+
264
+ $collection = $this->getCollection();
265
+ $collection->addOrder('request_path', Varien_Data_Collection_Db::SORT_ORDER_ASC);
266
+ $collection->addFilter('blocked', 0);
267
+ $collection->setPageSize($batchsize);
268
+
269
+ $completed=0;
270
+ $homes=0;
271
+ $current=1;
272
+ while ($collection->getSize()>$completed) {
273
+
274
+ $collection->clear();
275
+ $collection->setCurPage($current);
276
+ $collection->load();
277
+
278
+ $urls = '';
279
+ foreach ($collection as $item) {
280
+ if ($item->getRequestPath()!='/')
281
+ $urls .= $item->filemodel->getDownloadUrl()."\n";
282
+ else
283
+ $homes++;
284
+ }
285
+
286
+ if (@fwrite($file, $urls) == false) {
287
+ Mage::log("I can't write to urllist file");
288
+ Mage::throwException("I can't write to urllist file");
289
+ }
290
+
291
+ $current++;
292
+ $completed+=count($collection);
293
+
294
+ }
295
+
296
+ return $completed-$homes;
297
+
298
+ }
299
+
300
+ /**
301
+ * Retrieves store id
302
+ * @return int
303
+ */
304
+ public function getStoreId() {
305
+ return $this->getData('store_id');
306
+ }
307
+
308
+ /**
309
+ * Set new request path.
310
+ *
311
+ * @param string $requestPath
312
+ */
313
+ public function setRequestPath($requestPath) {
314
+ $this->setData('request_path', $requestPath);
315
+ return $this;
316
+ }
317
+
318
+ /**
319
+ * Retrieves request path
320
+ * @return string
321
+ */
322
+ public function getRequestPath() {
323
+ return $this->getData('request_path');
324
+ }
325
+
326
+ /**
327
+ * Retrieves request url, only for information.
328
+ */
329
+ public function getInfoUrl() {
330
+ return $this->filemodel->getDownloadUrl();
331
+ }
332
+
333
+ /**
334
+ * Determines whether url is blocked.
335
+ * @return bool
336
+ */
337
+ public function isBlocked() {
338
+ return ($this->getData('blocked')==1);
339
+ }
340
+
341
+ /**
342
+ * Determines whether page is cached.
343
+ * @return bool
344
+ */
345
+ public function isCached() {
346
+ return $this->filemodel->existPage();
347
+ }
348
+
349
+ /**
350
+ * Retrieve direct parent category id.
351
+ *
352
+ * @return int
353
+ */
354
+ public function getCategoryId() {
355
+ return $this->getData('category_id');
356
+ }
357
+
358
+ /**
359
+ * Load collection all rewrite with specified product id.
360
+ *
361
+ * @param int $productId
362
+ * @param Artio_MTurbo_Model_Mysql4_MTurbo_Collection
363
+ */
364
+ public function getCollectionByProductId($productId) {
365
+
366
+ $collection = $this->getCollection();
367
+ $collection->addFieldToFilter( 'product_id', $productId);
368
+ $collection->addFilter('blocked', 0);
369
+ $collection->load();
370
+
371
+ return $collection;
372
+
373
+ }
374
+
375
+ /**
376
+ * Load collection all rewrite with specified category id,
377
+ * and not specified product id.
378
+ *
379
+ * @param unknown_type $categoryId
380
+ * @param Artio_MTurbo_Model_Mysql4_MTurbo_Collection
381
+ */
382
+ public function getCollectionByCategoryIds($categoryIds) {
383
+
384
+ $collection = $this->getCollection();
385
+ $collection->addFieldToFilter('category_id', array('in'=>$categoryIds) );
386
+ $collection->addFieldToFilter('product_id', array('null'=>''));
387
+ $collection->addFilter('blocked', 0);
388
+ $collection->load();
389
+
390
+ return $collection;
391
+
392
+ }
393
+
394
+ public function getCollectionByRequestPath($requestPath) {
395
+
396
+ $collection = $this->getCollection();
397
+ $collection->addFilter('request_path', $requestPath);
398
+ $collection->load();
399
+
400
+ return $collection;
401
+ }
402
+
403
+ public function getModelByRewriteId($id) {
404
+
405
+ $collection = $this->getCollection();
406
+ $collection->addFilter('url_rewrite_id', $id);
407
+ $collection->load();
408
+
409
+ foreach ($collection as $item) {
410
+ return $item;
411
+ }
412
+
413
+ return false;
414
+
415
+ }
416
+
417
+
418
+ }
app/code/local/Artio/MTurbo/Model/scripts/wgetlib.so CHANGED
@@ -1 +1 @@
1
- ZUpyOEq8d{pzNEpjXEKPc2qYUoKVS3yrXmd2bmqSQU1jP4N7N{R5PjKFVX:LR2etcVmE[3iVW1[vXmSwOnGIWoOkS2[6T1OleHSJWom[cUi3ZWd2cXK6Z4CNWEWvXmiTV2qY[F:[W{GtT1OsPWCU[IKkcmK{ZUKHdnOrVX6MV1J4SGGwTlOSb3uiW{WuZomCPVmGNXibNmV3U32pcHKJRnykbXevZmiTNXOuTo[NNny2Xn15cluUNDubNmZxWX2XcmOYOX2jfXexU4dxT1OSb1qLTGqpZ3qCeGCu[HylSl6tZ4modFyVOXibS2KZXWiLeXGYOX6MR2KxZn2belyVOYSbXF67XWelcFuVd1qFVX:LR2Gsb3SuSomOR{BsZ32Xb1uEZ4GNfX:3ZWd2b2qZ[36MWIOPR3esTlOZTnylTG[6ZnmDcWmYfIqbWIOPR3esTlOSNFuEVXx6TVeXd3NzWXeme{CMR2GsTnOuWkClXFq2TViTfXSYWUeFVX:LR2hxUlOob1pjP4N7NUZ7JnN{cIqlS2[1VUKpcGlzd{1jP4N7N{V3PjKEbVGoTVOCTlOUVnqjN1J2Z32tcnGJVXeRV1Gs[H2HfV2ENDubNmZxVUJ6e3WZToCbNnhxT1OsO1OqRXeKR1GLR2OTNmmZTYeNWEW7XmiTSHJ{RkWkcXyvZViSc1qIUo[kTHy6ZWelc3SEOH6RS1q6TVN5L2SYSn6bW{VxZomDWXSZTnmjfVKFXWePc2qURVuKR1GoTVGsTlOWVnyjW{ioXX6s[2CISXeiTFqtXnpxbXGJVkCkSH:3UEOlN3S6OXikcmKxZol2eWqZVY[jW1[vXmd2NHK6NXymTGKtZn6PdHJzOYqNNkC1[FiXfWmuPIS[W16rXme5cHOuSkCjN1mqTViTdHSIfHyRV1qPWliXfWmuPHeSW16rXme5cHOuSkCjN1mqVHew[1mERXeEVXuLWGeHcmqYOUCjfVK7Z1eXcGqFe4[[WESo[GiC[2mvb3eSWlqWV2V5cluVd1uKR1GoTVGsTjJ8d{pzNEpjXUKpcGlzeGObXF64ZkJ2fmqSQU1jP4N7Nkh{NkpjSGGw[1mERXeKR1GoTVOC[1mCcICbbVGwTlibbHOrRYCKTIOPR3mC[1mERXeKR1GoTVOC[1OSb16EbVGoTVOC[1mERXeKR1GoR2Gsb3SuSomOfUBsXEOLcGpxcIWbcUi1VH2PemqIWXeRV1KxZn6TNmmYe3:kN2[qZ{OTfVuEVkK[XFm5W4qD[FyERYeNR1Gs[H2HfV2Eb4CQe{CMTVOC[1mERXeKR1GoTVOCTlOYcH2MR1KxZnx6bHOvTnimV3es[H2HfV26NDuZN1qtXkCteWquPISRcV63XleWd1mISomkcVZ2T1SGe1yFTYeNSF24UFSSe1uUb3eMV1J4SGGw[1mERXeKR1GoTVOC[1mCb1qEVUCMTVOC[1mERXeKR1GoTVOCTlOScICbbVGwXUJ6NXKvVX:LTGqpZ3qGdFmFOEmKSF2xTVi{UlOqRXeKR1GoTVOC[1mERXeEVXuLR2FxT1mERXeKR1GoTVOC[1mERVqEVXuLUIl5[2WISomkNmWo[FepcFmIVnilS2WPR3mC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR2KsXWiTcFmFNHekN2K6XEOLcHOIfHi[NmWwTol1clyERX6NfXO{TViTfXGYNH:LTGqpZ3qHZl2XNICMWIOPR3mC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR2JzXWiKflyVOX[kcW[vV2d2cXK6NDubS1ZxXmOCPVmGNXibNmV3U32pcHKJRnykbXevXUJ6fWqUZ4CNWEWuZkOLeGmZVlW[XGKtT1OTb2mZVnyMWIOPR3mC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKRUCMTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeNfUioWVeHfXNzWXelS3itTVd2bHKYWV6EbVGoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mEVkK[XFm7UGR2[nOuWn6UW{WuZolxL3KuSoSbV1F6TViTfXGYNH:LTGqpZ3qHZl2tNICQe{CMTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeFVX:oTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERY[NfVKSXWiLfmqURkCiS2WoXUJ6eHOISoWmVUCMTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeLTGqpZ3qOeGCtPYmbW3SLZn2belyVOXqjNkG4XWd2OVmFNHeiXF67XmiSc1qJXnikbl[jUUFxdFmFPHelTFqxZmOob3SuSomOWoO7XGOs[1:qRX6LfoOPR3mC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKRUCMTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeiW2moT1OTNmmZTYqNWEWnZ32XcmOYOX2jfUBsXUJ6b2qURUmRV1G5UVOs[3W4NFuKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1OUVkK[XFm7UGR2[nOuWn6UW{WuZolxL3KYWoqkNl[vXmOCPVmEVkK[XFm7UGR2[mi6[36VNIOvT2S{UlOqRXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVhx[2qYfIqbV1KxXnmCc1qJXnikbl21VHx6fWqY[FqjcWq3UGR2bnJzVnyKSEB6TVSKe1uURkeFVX:oTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTlibbHOrUYSRclqpZWiPcGSuPUCiW16tT1SGe12Ee3eLTGqpZ3qOeGCtPX[MR3SLWHubVGhyWmGTNVqDVlWX[mSGcFSTWUWVVmZ6SmeHRlqWb2[GTomsdF:4NFuKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[3[URnyjTF6tTVetcVmE[3ulcV[6UYlxL2h{TnybNHy2Xn15eGCuUo[bS2WoVGRx[127RYCKTIOPR3mC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOCb3SuSomOfUBsZ32HdHNzWl:jN2KxXUKWc12VRYeNR1Gs[H2HfV26NDuZNUiwTkCtU2KsPX[XWlKJWXuHSWKXPV:VNWKnVWWPWWOXXl[LfXuxU4dxT1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mEVkK[XFm7UGR2[nOuWn6UW{WuZolxL2qISkCbV1F6TVOTNmmZTYqNWEWnXImocmSuPUCKS1[r[FetNmmZVnybR1J2XmiScluVd16EbVGoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mJNHebW4i7XmODdGqqRX:LTGqpZ3qOeGCtPYmbW3SLZn2belyVOXqjNmKtTVRxPVmFVYeMV1J4SGGw[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GLTVOTNmmZTYqNWEW6XWetfmqWOY[lS3yrXmOofF2FRYOKR2JzXWiKflyVOX[ZfXevVlV6UmGWcF:KSWKRVm[O[2SsPWWKSUGDWlWPTVq6b4CQfVGoTVOC[1mERV6EbVGoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mJNF6EbVGoTVOC[1mERXeKR1GoR2GsTlOSNFuKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1J6TVeXd3NzWXeme{CMTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOCTlqJXnikbl21VH6LbHGZUnyVcUlxZWePcFuFSYeOR4eoTlibbHOrUYSRcEmnT1OlSmWtTmCWcEmUVmWl[mFxbF[SNISnVnuHTmSEZ4CMWIOPR3mC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[3[SNFuKR1GoTVOC[1mERXeKR1GLR2GsUlOqRXeKR1GoTVOC[1mERXeEVXx6TVeXd3NzWXeiW2mwTVOTNmmZTYqNWEWnZ32XcmOYOX2jfUBsXUJ6b2qURUmRV1F2UVOCdFmJd16EbVGoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTlibbHOrUYSRclqpZWiPcGSuPUCiW16tT1SGe12Ee3eLTGqpZ3qOeGCtPX[MR3SHWXyLVGWtPVWVNXSQWFV6RmKHPVqTSkmQWEGT[mKsPW[Vb2GvT2OsO1SSc3eKR1GoTVOC[1mERXeKR1GoTVOC[3[URnyjTF6tTVi{UlOqRXeKR1GoTVOC[1mERXeKR1GoTVOCTlqJXnikbl21VHx6fWqY[FqjcWq3UGR2bnJzVnyKSEB6TVNxfF:4NFuKR1GoTVOC[1mERXeKR1GoTVOC[1mCb3ulcV[6UYlxL3OuSoCkNm[QZkOTdGlzWX:OWFG4UFOCb3SuSomOfUBsXEF5c1pxWmOWb{mUXEGLSmJyPVSUSW[FV{F6S2GWcF2LfXuxU4dxT1mERXeKR1GoTVOC[1mERVqEXECPR3mC[1mERXeKR1GoTVOC[1OSb16EbVGoTVOC[1mERXeKR1GoR2hx[2qYfIqbV1J4SGGw[1mERXeKR1GoTVOC[1mCb1qLTGqpZ3qOeGCvTniiXF6tWH16NHGYUnyMSFW4UVO4[1qJXnikbl21VHx6[luE[F[WcFqRWXx6V2KW[H[SNHiHVUC1[mKsSlqVR3OxT2S{UlOqRXeKR1GoTVOC[1mERXeEXECPR3mC[1mERVqEVU1:Jku{PkF3PjKWS{m7[F[LcHOZWnykN2F:Jku{PkV{OkB7JlSSc3eKR1GoTVOC[1mIcH2MR1KxZ{F6bHOvTnimV3es[H2HfV6Eb3eLbWmoXUJ6NXKvVX:LTGqpZ3qSdFmFOHeOR1GxTVi{UlOqRXeKR1GoTVOC[1mERXeKR{i3TVebenOuNXilR1G1UGR1[3SIWoqlSFV6XWObNGqZUkCObkGqTVeXNGm6OF6EbVGoTVOC[1mERXeKR1GoTVOTNmmZTYeKSECoXWiLfWmZb3:MWIOPR3mC[1mERXeKR1GoTVOC[1mJ[H:iW4itT1ODd3GZUkCMR2K2UFOCb3Sqb3eRV1KtXWePc1uEVkK[XFlxT2OCdFmJd16EbVGoTVOC[1mERXeKR1GoTVOC[1mERXulcV[6UV[1[FmFNHeKbWK2VGOTNlmrd16EbVGoTVOC[1mERXeKR1GoTVhx[1mERXeFVX:oTVOC[1mERXeKR1GoTVOCb3SuSomOR1F6TVeteHOIfI[bS2WwTom[clyERXulcV[6UVOsO1SSc3eKR1GoTVOC[1mERXeKR1GsXUJ6eXSIWoWlSmJ2Z1eW[2CURXmSNkm2[FeXeXSENUCmXFKtU3mDbHOJRoOiW16p[FetenKqPUSNXHR{[IlycXJ{ToSNXG[6ZleXeWlzPXubW2KkZ3y5eVmrd16EbVGoTVOC[1mERXenVUCMTVOC[1mERXeKR1KtZliPcFmJd16EbVGoTVOC[1mERXeKR1GoTVOTNmmZTYeKSECoTlibbHOrVUeFVX:oTVOC[1mERXeKR1GoTVOCb2lzPYWlS2[2[F[TOXOIWXeRV1GqVUJ6eXSIWoWlR{Fx[WiDcF:qRkCbXHhxUEOpeHKHfImZS{SqU4dxT1mERXeKR1GoTVODPVSSc3eKR1GoTVOC[1mCNFuKR1GoTVOC[1mERoCbbXeoZWiP[nKvWoOjR3es[H2HfV26b3eMV1J4SGGw[1mERXeKR1GoTVGsb3SuSomOfVF6TVVybGpzWU[QcXSt[F[PNHJ{TnySNkm2Xn2tcluETkObW1m3[Gd2fmqYUkGkcWW3XX2HfmqXPUGkcYeqT2S{UlOqRXeKR1GoTVOC[1mERXeKR2JzXWiKflmFNHekN2K6XEOLcHOIfHi[NmWwTol6dHKuVnymR{W4ZViCemmYVoSiW{SvUFOCclq6e3eLTGqpZ3qOdF:4NFuKR1GoTVOC[1mERXeKR1GoTlibbHOrUXeRV1K7[FiL[nOuWoejS1[rXmOoclxzcIWbS2Z1UH6Dc3OEPH6NR1GvTom4[1qJXnikbl2xU4dxT1mERXeKR1GoTVODPVSSc3eKR1GoTVFxT1mERXeKR1GoTVOCely6Roe[XFq7XmODNHGIWXebNnxzXmd1[2[XTl2FVX:oTVOC[1mERXeKR2JzXWiKfVmFNHekS1[6Z{KX[nSZToOMR2JzXWiKfVuVd16EbVGoTVOC[1mERXeiW2mwTVOHdHN{UnylR3es[H2HfV2td36kNl6wXmdycFpyNICKTIh5TVOob3SuSomOcIOvZ{KPc2qYNXyLNUCoTWRx[1pzbEClTFGvT2OCdFmJd3eFVX:oTVOC[1mERXeKR1GoTVODfWqZVkGkcUSoXn2Hd3NzWUeFVX:oTVOC[1mERXeKTECPR3mC[1mERXeFVX:oTVOC[1mERXeKR{i3TVeXOHSJTni[N2GoZVd6fnSERnijcWGoZ1eHNHGFc16EbVGoTVOC[1mERXeLS3i3Z{OS[2CURXulcV[6UXy{cnGIPYqlR3SlU4dxT1mERXeKR1GoTVOCb3OISkCiR1F6TVetfnNzWkCMR2JzXWiKfWe6[Ie[XGKwTkFxdFmFPHeLTGqpZ3qLZlp{RnilS3evXGOCOlmEZ4[LfoOPR3mC[1mERXeFVX:oTVOC[1mERXeKR{i3TVd6e2qYOHe[V1K7ZkKPdmqZVXe[Nkm2Zn2XbnSIcI[jbVK3ZnmDe3J{TkCKSHe4SGGw[1mERXeKR1GoTVOTcHOvToWjfVF6TVd2NXKIe{eFVX:oTVOC[1mERXeKR2KtZ36LfnSJTXeRV1K2[Ge5d1:4NFuKR1GoTVOC[1mERXubclGoVGODRWqvUo[[NoS3Z1eXeVuEVn:jN15xUFOCOF2Ee3eLS2[6Z312elyERXubXFq6Z{OTfVyERUGMWIOPR3mC[1mERXeKR1GoZWe[c1mEVn2kR1F6VGRx[2quSoOkNmWoT2ODO1SSc3eKR1GoTVOC[1mERXeKR1K6XmiTNXOuOHebcV[{Z{KWO1SSc3eKR1GoTVOC[1mJNF6EbVGoTVOC[1mERXeFVX:oTVOC[1mERXeKS3yuTVOobHGZUn[jcm[{ZlOob3SuSomPbXuxTVi{UlOqRXeKR1GoTVOC[1mERXeKR2JzXWiKNlmFNHeKcG[7XmiKeGGY[HyjcmF3TVOKeVqJXnikbmm2TXy5fWiIOHmQe{CMTVOC[1mERXeKR1J6SGGw[1mERXeKRUCMTVOC[1mERXeKR1G3UImDfmqYOXuKTGKwXmODfWqZSkGbXF5xSGGw[1mERXeKR1GoTVetcVmE[3ulcV[6UmOCPWCURX6kS{m7[FOkdFmJd16EbVGoTVOC[1mERXeKR1GoTVebe3SZVoqMR2KuZ1O4[1mtRmCWNWGoTliDbHSI[3eUSmKWWVN5fFyrSnOkcIi2TXmsO1SSc3eKR1GoTVOC[1mERXeKR1KxXnmCc1mYcIqZNkVyZle4c1qJXnikbmmxT2ODO1SSc3eKR1GoTVOC[1mERXeKR1GoTVOC[2qvRkGlTF2wTlebe1yERXulcV[6UnmsO1SSc3eKR1GoTVOC[1mERXeKR1J6SGGw[1mERXeKR1GoTVOC[1mERn2kTGZxZ4mob2qvRYOKR1qKZkOPNF:qRXuiS{m7[F[5fWiIOHmMWIOPR3mC[1mERXeKR1GoTVOC[1mIXoelXGK7T1OTcXOEe3eKcFqtXn2XfWqZTU[KR2JzXWiKfmiJTnOjbVmxU4dxT1mERXeKR1GoTVOC[1mERXebclJy[FiOc1qIXoeNR1GsXUJ6eXSIWoWlSmJ2Z1eWdF:4NFuKR1GoTVOC[1mERXeKR1GoXn6DNXSJUX:LS2q4UFOCbWFzPYWlS2[2[FNyd2qYOX6lS3d3TVOKeVmJUkCkcYitZnmob3SuSomOR3uoUHmLZ3OtfIWKbXt4SGGw[1mERXeKR1GoTVOC[1mERn2kTGZxZ4mob2qvRYOKR1qFZkJ2eWqYUkCiW{m2U3mDbnKIPYqbWoi6XFd2Z3OtfIWKbXt4SGGw[1mERXeKR1GoTVOC[1mERn2kTGZxZ4mob2qvRYOKR2JzXWiKe1uVd16EbVGoTVOC[1mERXenVUCMTVOC[1mERXeKR1KtZliPcHGYXXeMR2JzXWiKNVmFNEmKR3SvXmiScluURkeFVX:oTVOC[1mERXeKR1GoTVOCb3OZWnykcnuoVGOCclq7d16EbVGoTVOC[1mERXeKR1GoTVetcVmEbICkN16t[FOob3SuSomOcIOvZ2iXcHOvb36ZV3uxTVi{UlOqRXeKR1GoTVOC[1mERXeKR1GoTVOCb3OZWnykcnuoVGOCcmC6Z4WLTGqpZ3qLZlp{SkGbXFp2TkFxO1SSc3eKR1GoTVOC[1mERXeKR1J6SGGw[1mERXeKR1GoTVOC[1mERn2kTGZxZ4mob2qvRYOKR1qJVm[S[3W6Voe[XGKw[mi{b3OZWnykcnx6TVWpWW[HRY[OV{S5XFiLZ3KqTYCQe{CMTVOC[1mERXeKR1GoTVOC[3GYXXeMR1[xZ{F6eXSYfIOMR2JzXWiKNluUb3eme{CMTVOC[1mERXeKR1GoTVOC[1mERXeKS2q4[GiTfluEVn2kR4eoTlibbHOrXYCQe{CMTVOC[1mERXeKR1GoTVOC[3[SNFuKR1GoTVOC[1mERXeKR1GoXn6DNXSJUX:LS2q4UFOCbWOIPYqlSH:oTlepenN{VnOkcIi2TXmsO1SSc3eKR1GoTVOC[1mERXeKR1KuZ1iXNHO6[3ubclG{TVOLSHJzOYWbW15xZWd6eV:qRnqjS{m7Xm[5fWiIOXOkcIi2TXmsO1SSc3eKR1GoTVOC[1mJNF6EbVGoTVOC[1SSc3eKR1GoTVOC[1mEVombXF5yZliS[2CURX6LfoOoSGGw[1mERXeKR1GoTVilc3GYfHyMR1[uXmd6cVuEVn2kR3uxTVi{UlOqRXeKR1GoTVOC[1mERXeKR{i3TViLcGlzWoClcWWo[FepcFmJTnykN2[{[FiO[3JzXXelS3itTViLcHOZWnykN2GPR3mC[1mERXeKR1GoTVOC[1mEVombXF5yZliS[1yrNHebcXSt[FiOc1qIXoeNR1G5UXqodF:4NFuKR1GoTVOC[1mERkmFVX:oTVOC[1mCNFuKR1GoTVOC[1mERY[NfVKrZld6fmqURkCiS2WoZ{J6bnFzWkCKS163Zn12cGl{VoCjNkR3SGGw[1mERXeKR1GoTVebbnKIPYqbV3esXn6CdF:4NFuKR1GoTVOCUlOqRXeKR1GoTVOC[1y6PHekN1K{ZWiS[3SIbHyKTFqtZ{OXd3SERn:bW1[sXmiK[2qvTo[jV1JxZVeW[2lzPYWlS2[2[FFxT1mERXeKR1GoTVOCb3OuWoqlW4hxTVRx[2qZbIejS{msXmOobWiJTnOjcIi6XFd1bVyERXukcW[7[Ge5NFyERYmMWIOPR3mC[1mERXeFVX:oTVOC[1mERXeKR2KwXmeHb2qZTXeRV1KxZ{OPcHSE[3ukcW[7[Ge5NGe7RnSMV1FwTVOTfWqZUkGjTGKjUVZx[1:qRX6LfoOPR3mC[1mERXeKR1GoTlePenKvVnyjcmGoVGODdHN{UnylR3esZ32XfnSYfECYfl[lT2OCM1mEVombXF5yZliTZl2XNHeQbVGvToq{UlOqRXeKR1GoTVOC[1SSc3eKR1GoTVOC[1mEVkK[XFm5TVRx[3KuWkOKTF5xXlWPd2mZUoqMR3t4SGGw[1mERXeKR1GoTVOTNmmZTYiNWEWwXmeHb2qZTXeRV1GsZVeXbGqIWomQe{CMTVOC[1mERXeKR1Gs[H2HfV2UNDu[Nkm2[FeXeXSERUmKR2KrZkJ2NGqYOUCQe{CMTVOC[1mERXeKR1GPR3mC[1mERXeKR1GoUIl5[2OISoWbS4itTVePc3SYOYKbW2Go[FiLbHKvUn2bXFmoZWe[[3KuWnybS2[sSGGw[1mERXeKR1GoTVetcVuERoqlTFq4ZkOOc3N{VomlS{m{ZkOlcHOq[3ulcV[6UWNxL3GIWnibS2[6T2O4[1p{Vom[W{W7Xn2XfVyYWoW[NkmsZWd2cl:qRnqiTG[2ZUKXb1q6b3eKWEB6TVebbHKJUnyKR3uo[YdxT1mERXeKR1GoTVOC[1mERXeLTFKpZ36PcGqERUmKR3OvU4dxT1mERXeKR1GoTVOC[1mERXeLS4itXn6S[2CURXulcV[6UWNxL2lzPYWlS2[2[FS{UlOqRXeKR1GoTVOC[1mERXeKRUCMTVOC[1mERXeKR1GoTVOC[3RzbICjS2WwTViTfXSYWXeMV1J4SGGw[1mERXeKR1GoTVOC[1mERXeKR1GoTliDenO6RUmKTF5xZ36DenO6[3ujS2[u[FO4[1mtfImZS{SqT2S{UlOqRXeKR1GoTVOC[1mERXeKR1GoTVODdGqq[3eLTFK3Z4mCPWCVNHebcV[{Z{KW[1uURkeFVX:oTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTViLcHSJWomjbVGs[H2HfV2Vd16EbVGoTVOC[1mERXeKR1GoTVOC[1mERkmFVX:oTVOC[1mERXeKR1GoTVOC[1mERXeFVX:oTVOC[1mERXeKR1GoTVOC[1mERXeLS16w[Gd2dnNzcE[bV1F6TViPNWmvUkCkbXesZleXcXSEe3eOR4eoTliDenO6b{eFVX:oTVOC[1mERXeKR1GoTVOC[1mERXeLTFK3Z4mCdmCURoqlTFq{Xmd1c1mtfImZS{SqT2S{UlOqRXeKR1GoTVOC[1mERXeKR1GoTVOCb3KIWn2lR1F6TViPNWmvUkCkbXesZleXcXSEe3eLTFK3Z4msO1SSc3eKR1GoTVOC[1mERXeKR1GoTVOC[1SSc3eKR1GoTVOC[1mERXeKR1GoTVOC[1qJRo[kfVF6TViPNHOvRo[kfXesXUKpNXKueIqiXICtUFOCcl:6Z4CQe{CMTVOC[1mERXeKR1GoTVOC[1mERXeKS3yuT1OCb3OIPYqKR1V6VGODcWmYfIqbV1GxTVi{UlOqRXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeLS16w[Gd2dnNzcE[bV1F6TViPNWmvUkCkbXesXUKpNXKueIqiXICtUFOCe1yERXukS{m7T2S{UlOqRXeKR1GoTVOC[1mERXeKR1GoTVODPVSSc3eKR1GoTVOC[1mERXeKR1GoTVOC[1qIUn:lW{WzZ{KtOmqURUmKS3it[VeTcGm6[3u[NnhyZn21fnGZdHyMWIOPR3mC[1mERXeKR1GoTVOC[1mERXeKR1GPR3mC[1mERXeKR1GoTVOC[1mERXeKR1KxXnmo[1qIUn:lW{WzZ{KtOmqURUmRV1G4TVOs[3W4NFuKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1KqZ32XbHG7d16EbVGoTVOC[1mERXeKR1GoTVOC[1mERkmFVX:oTVOC[1mERXeKR1GoTVOC[1mERXeFVX:oTVOC[1mERXeKR1GoTVOC[1mERXeLTFKpZ36PcGqERYWRV1K7[GeLfnSJTX:LS4itXn6Sd1mFRYOKR2KrZViXeXF{UoCmcWWxU4dxT1mERXeKR1GoTVOC[1mERXeKR1GoTVOTd2qYXkCKSECoZ{OXbXN{VomMR2K{XmebNFyERXu[NnhyZn21fnGZdHyKR4OoZ{OTfXKIWoWMR1qkZ3y5eVmqb4CQe{CMTVOC[1mERXeKR1GoTVOC[3[SNFuKR1GoTVOC[1mERXeKR1GoSGGw[1mERXeKR1GoTVOC[1mERXulcV[6UWNxL2lzPYWlS2[2[FOCPVmEVoe[XFq7XmeSO1SSc3eKR1GoTVOC[1mJNF6EbVGoTVOC[1mERXeKRU1:Jku{PkF3PjK[W2K1ZWd2UXJz[ICj[{1:Jku{PkFxOER7JlOob1qiW2moT1OHUmmY[HyQboCwXme5e2qZTX:LNkFx[GiLbXK6PYCjcWq3TomseGCu[HylSlqtXkB2bHKYWX:MWEB6TkK1fXSIfIK[W4S6UlOkdFmJd1uEVXuLZWe[[1uGNXibNmV3U32lcHSHUkCjN1qtVUJ6eWqucH6MR3S1[FiXfWmuPI[bcXy6Z{OTbnJzOX2iW3OvT2RxPV2Eb3eme3:LR2GsTlOob1qEVXus[FiXfWmuPYe[XGKwTVRx[2SYSn6bWH93XkKXNGV{Vo[kcW[FZkJ2cXGYZ3:LNkFx[GiLbXK6PUClXFqqZkODbHSI[36MWIOMR2GsTlOUVomjNklxTVRx[2SYSn6bWH93XkKXNGGuSoqbWWKxZ3modFysVmSNbWJx[GiLbXJ{RnilS3d4R3esTlOSb3ulcV[6UVNxL2hzVnyjSmK6XmeWc1qJTo[jN2G{TVOTfXJzPUCMWIOMR2GsTlOSc1qEVXuLTld2enSIcH2iW16p[FetenKqRUmKSUGpXkKWOl:u[HylSUG3XleXd1uE[HibS{GxZnt2enSIcH2iW16p[FetenKqPYCjcVq3[VOkdF:4c1qEVXuLTld2enSIXXeRV1KpZ36LbHWU[3eE[3uLR2GsTlpzcIqZN1qtXWeScmCVOIeNR1GMR2GsTlOSb36bS1ZxXmZ6bGqIVnybR3N6VH2TbHSIWX:LNXu1ZmNyb1mG[{[iWIC7Tomsd1mCc1qEVXuLR2OlfmqZXnykcXxx[WOkPWCrVYOKRX:LR2GsTlOU[EGkcYevVGR1cnGJVkCkSH:3UEOlN3S6OXikcmKxZol2eWqZVY[jW1[vXmd2NHK6NXymTGKtZn6PdHJzOYqNNkC1[FiXfWmuPIS[W16rXme5cHOuSkCjN1m3Tom4T1OSb1qEVXuv[FetNHKIWX6RWESoWGeHcmqVc{[iS2[{Z1eXfVuE[ISlTG[6XX15cluUNDuZNUiwTkBybGpzWoWlS{ioWG[TNXOuTo[KSny3[GiK[3KIcHqbW{W7XmODc2mZUXebXHi4ZWiLcGqEZ4CNRX:LR2GsTlOU[HubXF6rZ32te3SIcI[jbXN6VHmDUmmY[HyQboCwXme5e2qZTX:LNkFx[GiLbXK6Z4CNWEWnXImocmSYSn6bW{VxZomDUm[JWom[cUioW2d6NXOqRoOiW16tZn2PcFmIbHikfVKt[ViDdHOuWnuNbVKDZle4[2lzSnqiS2[sTViDbGpzWoqKTHSpZ4mDfWqYNY[lcW[sTomsT1OSb1qEV3t4R3esTlOSb3ujcUlxZWebdGlzSkCiW{m2UGR2e2mZToqbV3ipZ36LbHWU[3ujcUlxXnmsdF:4c1qEVXuLR3esTlOZNFuEVXx6R3esTjJ8d{pzOEpjXWebNGqZTmS[XGqtWViLemqJWnqlRU1:Jku{PkF4NkpjR3mC[1mERVqiW2moT1VybGpzWU[QcXitZliDcHOq[36jXGJyZ32LelxzcIWbcUivT2NxL2pzWkCWcW[vWH2HeGqU[4CMV1J4R3esTlOWNXibNmV3U32lcHSGNY[bS2[{T1OleHSJWom[cUi3ZkKLfmqZTkKbXFm6TomseGCuSn2lS2[6WUKHNmqXRomjNmJyXUOSc1qJXnikblGxU4ewTlOZNFuKR1GoTVGsQTJ8d{pzOEpjXX2XcXJ{TnyWNlZzXmWPbHSIWn6jN1p2Jku{PkF4OkpjR3mC[1mERVqiW2moT1VybGpzWU[QcXitZliDcHOq[36jXGJyZ32LelxzcIWbcUivT2NxL2pzWkCWcW[vWH2HeGqU[4CMV1J4R3esTlOWNXibNmV3U32lcHSGNY[bS2[{T1OleHSJWom[cUi3ZkKLfmqZTkKbXFm6TomseGCuTnybcUm6Xm[PbHSuWlS[XGKtXkJ6fXWU[3ulcV[6UVOsO1Oob1qnVX:oTVOC[1OSQU1jP4N7NkR7JmmYXkCbXFqVXWibcGFzSkCbW3S3Z36sQTJ8d{pyO{J7JlOqRXeKR1GLZWe[[1uGNXibNmV3U32pcHKJRnykbXevZmiTNXOuTo[NNny2Xn15cluUNDubNmZxWX2XcmSuSoSbV3exT2ODO1Oob1qEWUGpXkKWOl:u[HylSUG3XleXd1uE[ISlTG[6XX15enJzToqbXFpzXmiKfVq6b4SRcV[u[FeXfWVzSkKbWV6p[FeXcnJ{TkWMR2JzXWiKe1uVd1uEVXx6R3mC[1mERVpjP4N7NkR7JmmYXkCbXFqVXWibcGFzPYSjW3xxWmiLdzJ8d{pyO{Z7JlOqRXeKR1GLZWe[[1uGNXibNmV3U32pcHKJRnykbXevZmiTNXOuTo[NNny2Xn15cluUNDubNmZxWX2XcmSuSoSbV3exT2ODO1Oob1qEWUGpXkKWOl:u[HylSUG3XleXd1uE[ISlTG[6XX15enJzToqbXFpzXmiKfVq6b4SRcV[u[FeXfWVzSkKbWV63ZmdydHSHWomjR3es[H2HfV2Eb{eE[3uL[mGw[1mERXeEVU1:Jku{PkJ1PjK[XGZxZkJybHSIcHqTS{l{Zn25emmYVU1jP4N7NUZ5PjKEbVGoTVOCTnGYXXeMSUGpXkKWOl:ubHyjTFKtZ3mocnKZVkGkcVq3UEKteWquPH6MV{BsXkKXNGWuWn6VcV[1XmOodFuURkeE[3uLR2VybGpzWU[QcXSt[FVyemqIWoOMR3S1[FiXfWmuPI[jNlq7XmiLNmqZTYmLfXu1VH2HNXSIPYS[XGKxXUCTenRzOYOjNl[sT1OsO1Oob1qnVX:oTVOC[1OSQU1jP4N7NkR7JmqIPUOjcYi3XWeTRnKuVlqjcl5xXWe5dzJ8d{p2O{Z7JlSSc3eKR1GoTVOC[1mEVkK[XFm4W4mlNXNzWomjcV[1XmOl[FmFNHeLfXN4SGGw[1mERXeKR1GoTVOTNmmZTYeYfXS4XWiPfnRzPYmbR3SlTVRx[1q6Z{eFVX:oTVOC[1mERXeKR2JzXWiKe2e6[HujN3S2Zld6bGqHPYCbR3SlTVRx[1qJXnikbll4SGGw[1mERXeKR1GoTVOTNmmZTYeYfXSuZWe5cFpyNHeRV1GvZmiTNXOuTo[LfoOPR3mC[1mERXeKR1GoTlibbHOrRnKLNl6p[FOl[FmFNHeLNkFx[GiLbXK6Z{eFVX:oTVOC[1mERXeKR2JzXWiKe2e6[IekcUmsTkFx[2CURX6jW1[vXmd2NHK6Z{eFVX:oTVOC[1mERXeKRUCMTVOC[1mERXeKR1Gs[GiLdFmFNHekS1[6Z{KX[nSZToOMSUGpXkKWOl:u[HylSVqpZ{KXWnOue3:MV3t4SGGw[1mERXeKR1GoTVOTNXOue3eRV1Gs[GiLdGe6[H:jN15xTkFxeVqJWomiWoOvZ1eHNHGE[HSQe{CMTVOC[1mERXeKR1Gs[GiLd1mFNHelTFqxZmOob3SZToONR1GvUImkdF:4NFuKR1GoTVOC[1mERXulcV[6UV[{cnNzcECbV3SlTVRx[1qJWomjSIOPR3mC[1mERXeKR1GoTlibbHOrRnKLNny4TkFx[2CURXuZNV6HWXybSmWtd36WNG[UWnuXV2hxSlWTSlmvXGS{UlOqRXeKR1GoTVOC[zJ8d{pyOkpjXld6N3KufI[[W2KSXWelcDJ8d{p2OUZxPjKEVUCMTVOC[1mCcICbbVGwWGeHcmqVc{[iS2[{Z1eXfVuE[ISlTG[6XX15enGYOX2jfXOxUGR2cmqZVmObW3SQXWdycFuEb{mRV3SzZ36Td3FzSoKkbmGvT2ODO1SSc3eKR1GoR2FxT1mERXeKRXuLTlibbHOrUXeRV1GvToq{UlOqRXeKR1GLR2OTc3SINYOKSECoTomkO1SSc3eKR1GoR2GsUlOqRXeKR1GLR2etcVmE[3ulcV[6UlRxPVq6Z4CFVX:oTVOC[1OSb1qLTGqpZ3qS[2CURlKkcmKxZkF6Um[JWom[cUmnV1eXd3OIWomZNGKp[FeGOl:u[HylSV63Zn2bdGq6[4CNWEWvXmiTSXJ{[IWjS{mpXlVycHSIbI[bR3exU4dxT1SSc3eKR1GoR2GtdGqqRX:LTGqpZ3qKdFmCNFuKR1GoTVGsTnW4NFuKR1GoTVGsTlOUVoe[XGKwTVRx[1qJXnikblG1VH2PfWqYSkCbWlKp[Feoc1uVd16EbVGoTVOCTlOSb3ulXFq{TVRx[1qJXnikblG1VH2lcHSGVo[lNkW{ZkKHb2[ZToOXNnxxZVV2emFzSnqiS2WwT2S{UlOqRXeKR1GLR2hxUlOqRXeKR1GLR2eXd3NzWXeFVX:oTVOC[1OScEeFVX:oTVOC[1OSb1qLTG[6ZlOCPVmGNXibNmV3U32lcHSHWomjR3exU4dxT1OSb1qEV2JyZ324[2CURoqlTFqnZ32Xe3KISnqbV3eqXWeTeHGYOI[KbYeoTXmKd1mEVkGkcYexU4dxT1mERXeKRXuL[mFxT1mERXeKRXuLSGGw[1mERXeEVXxxZ36s[1SSc3eKR1GoR2GtO1SSc1qKR1GoTVGsTnN{[IClS16wTVOob3SuSomPR3uPR3es[1mERXeEVXx4SGGwTlmERXeKRXuLR2FxT1OURXeKR1GLR2Gsely6RmSlS1[2XleHfWqERn2iW4itTVelcHSERnqjNkVxXmd2NHO4NFuEV1GoTVOCTlOScHq[XF6tTVWTenRzOYOjNl[sWGeXNHGIPXukfn93VnutUWKXPViTWmKnVUB6U2[GWl:XSl13SGGwTlmERXeKRXuLR2GtdGqqRX:iW{WxXEKlcHSE[36[W4i{ZkOl[nSZToOZNmq3Z1eXeVq6b3eRWECoToqGcluSNFuEV1GoTVOCTlOSb1qEV2Kw[Fdyd1mFNHebcXy{XmZ6cmqZVn[[Nkm2[FeXeXSJUX:LTG[6ZlOsO1SSc1qKR1GoTVGsTlOScHyjTF6tTVFxT1OURXeKR1GLR2GsTlOUVkK[XFm7TVRx[1mGNXibNmV3U32pcHKJRnykbXevZmiTNXOuTo[LfXu1VHx6[luETmSbXGJxZWd2clmE[HijS4i3[EF6NXOufH[bcUm4Xmd1clmIcIqKS2KxZ{KHbXKIWnuNbVmxU4dxT1OURXeKR1GLR2GtbXOuWniifoOPR3es[1mERXeEVXuLSGGwTlmERXeKRXuLR2N5elmGVo[lNkW{ZkKHb1mIPUKbXFmoZ{J6bnFzWkCFVX:LTVOC[1mCb1qEW16pZ{KW[2KIPUOjcYi3XWeTUmqZVn:jNmK7U3qxWGRxUlyTWmF3R2GsTlSSc1qKR1GoTVGsTlOSb3ukcW[7[Ge5NGSvWoS[cW[6VGSCO1SSc1qKR1GoTVGsTlOSb3ulcV[6UYpxclq7d16E[{CMR2OC[1mERVqEVXuLTliLcHOZWnykN2GoVGODe3OuWn6ZN1qtZ1e5bGlzWX:LfUmw[FiTe1uJUYCmflG{UWhxOmiEPXONNYSmXFN6[FuqPH6NR1GvTom4[1qJWomjR3t4SGGwTlOSb1qEVXuPR3esTlOSb1qEV2K1XWiTbnGIWoqKSECoXWiLfWmZb3:MWIOPR3esTlOSb1qEXFK6Xmel[nKYSkC[NnewTkCD[VuFPE[iTGJxZ1Swely6bz:MSoSmUEFxdluWRoCLfYeoTliXfXKEe3eLS{Gp[FePc2qZUYCQe{CMR2GsTlOSb1qLS3i3Z{OS[2CURXujW1ZxXUKpcHNyd4iZWIOPR3esUlOob3eKR1GoR2GsTlOUVn2kR1F6TVebfnJzUoKjN1KtZnmob3GIPYqlR4eoU1SCd1mEVombXF5yZliTU3SYNXmbXFm{TVOTcHOvTo[kb{GtZ{OPbGpzWYCQe{CMR2OC[1mERVqEVXuLZWe[[1uESXubclGxSGGwTlmERXeKRXuLR2GtO1SSc1qKR1GoTVGsTlOSb1qLTGqpZ3qO[2CURXubXFq6ZkOLUmqZUoq[W3StU4dxT1OURXeKR1GLR2GsTn[SNFuEV1GoTVOCTlOSb1qbW4i7XmFxT1OURXeKR1GLR2GsTnW4NFuEV1GoTVOCTlOSb1qEV2K3[GiS[1mFNHeKb3SHWlOCb3OuWoilW2[7[FODTW[HVmGNflW2UW[5fWiIOHmQe{CMR2OC[1mERVqEVXuLR2OTenSZVXeNbkCoTXupenN{VU[KR2KwZkOPNGiJTnOjbVl4SGGwTlmERXeEV1GLR2GsTlOUVo[lXGGoUHpx[1msUo[jcUWtXUOTdHJzOE[KSV6{ZkOPcGiJTnOjbVl4SGGwTlmERXeEV1GLR2GsTlOUVo[lXGGoUHpx[1mtfImZS{SqU4dxT1OURXeKRXuoR2GsTlOScH2lN1qx[FeWc1qIXoeNR1GsZkOXNFuVd16E[3uoTVOCTlmCb1qEVXuLTlepcGmYVnykbVF6TVOLeXJ{VXemW2ZxTXq{UlOob3eKR1GoR2GsTlOScEOiS3y{XmOCc1mYXnyjNmmwTlebe1uUb16E[3uoTVOC[1OSb1qEVXx4SGGw[1mERXeKR1GoTVOC[1mERVqEVXuLR2OTd3GYOXyRW2qvXmiTfluEVn2kR4e5UXqodF:4NFuKR1GoTVOC[1mERXeKR1GoR2GsTlOScICbbVGwTle5dHKuWUmRV1qkZ3y5eVmqRX2LbVGsZVeXbGqIWomRWECqZn16NFmJcHylR1mxTVi{UlOqRXeKR1GoTVOC[1mERXeKR1GoTVOCTlOSb1qEV2KwXmeHb2qZTXeRV1GqZ1eHfnNzWnuKboOPR3mC[1mERXeKR1GoTVOC[1mCb1qEVXuL[mFxT1mERXeKR1GoTVOC[1mERXeEVXuLR2GtdGqqRX:LS3itXWeTcHOrNEmKclKpZ{OPcGqETYCKTIOPR3mC[1mERXeKR1GoTVOC[1mERXeKR1GLR2GsTlOUVn:lS{G{UHpxb3KIcIWbWIOPR3mC[1mERXeKR1GoTVOC[1mCb1qEVXuL[mFxT1OURXeKR1GLR2GsTlOZNF6E[3uoTVOC[1OSb1qEVXyuXUK5enNzWX:LS2q4T2S{UlOob3eKR1GoR2GsTlSSc1qKR1GoTVGsTlOSb1qLS2qxZ36PNFmFNHekN2K6Z1d6fluEVn:lS{G{UFOCcmCESlWVNF6WW2[DSlq6b{eFVX:LTVOC[1mCb1qEVXuLTle5bHN{VXeKSECoZ{OTfXOIPYqMR1GsZViTeHKEe3eLfoe3ZViTeHKFOH6MV4N{U4dxT1OURXeKR1GLR2GsTlOUVn:lS{G{TVRx[3N{WnmkN2K6T1OTc3SINYONR1GsXn2tfXN{VYOKR2K{XWiPNFyUVn2iXFq7[FOsO1SSc1qKR1GoTVGsTlOSb1qEV1GoTVOCTlOSb16E[3uoTVOC[1OSb1qEXECPR3es[1mERXeEVXuLXX6LcGmYd{eFVX:LTVOC[1mCb1qEVUCMR2OC[1mERVqEVXu3UImDSXJ{[IWjS{mpXlODN3GZVn:KSlKKWVODSnWJVnyjcl6xZkJ1[2FyWmOVRUCMR2OC[1mERVqEVXyrXWiPcFmGVo[lNkW{ZkKHb2SYWkCiS{msZ4qwOmFyWmOVSH:PR3es[1mERXeEVXuLR2FxT1OURXeKR1GLR2GsTnGYXXeMS2pyZn2PNHGYPYWZNmZ1ZWiPNHO6[36[N2[6ZlZ6dHKucECLfXuxSGGwTlmERXeKRXuLR2GtO1SSc1qEVXuLR2GsTlqIUn:KSECoXUOXfXKHPYCjcXxxT1OTNXOue4CQe{CMR2GsTlOSb1qEW15yZ325[nNzWkCjN1JxT1OTbnGEe3eSNW[UWFV6VW[HPWWUWUGHWEGXWVyERYiOSFGxU4dxT1OSb1qEVXuLR2ePNXOufH[kNmZxZkODNFuEVnqiR4eoVUGXV2SGPWGXSkmIWEC5UWRy[F2VNF6DWlWtVGSqe3elTFpyXmOsO1SSc1qEVXuLR2GsTml{WomjSkm7XmiTenOJVX:LS16wUFODSG[XTl2VNVKWXEGLSm[HWmOVcGKUVWV2WGKsWmONR1JxZ36XcFuVd16E[3uLR2GsTlOSb3uiTGK1ZlOCPVmIUkGkcYinXmipcGm6[3u[NnexU4dxT1OSb1qEVXuLR2etcVmE[3uiTGK1ZlRxPWCYXnijTF6tT2FxT1OSb1qEVXuLR2Gsb3SuSomOfVF6TVePNXOufH[bXFq6ZkOKc1qIUn:MWIOPR3esTlOSb1qEVXyr[GiLd2hzUoOjN16tT1OTbnGEb{eFVX:LTVOC[1mCb1qEVXx6TVFxT1OURXeKR1GLR2GsTmqYfIqbV1GPR3es[1mERXeEVXuLR2i{UlOob3eKR1GoR2GsTlOSb3ulcV[6UYmCPVmGNXibNmV3U32pcHKJRnykbXevZmiTNXOuTo[LfXu1VHx6[luE[FSXWlqOTVetflmIOY[lR1KxZn6PNGmYfIObW2GvT2S{UlOob3eKR1GoR2GsTlOZNF6E[3uoTVOC[1OSb1qEVUCMR2OC[1mERVqEVXyqZ32XbHG7d16E[3uoTVOC[1OSb1qFVX:LTVOC[1mCb1qEV{i3TVWPfWqYSkCbV1K2Xmik[2SYSn6bW{VxZomDdHKvUkC[W{WrXmFxT1OURXeKR1GLR2GtbmmZUnyKSWK3[EJ2d3JzSnuVW2ZxZVd6b3O7c{[TSXyUVmWPWWhxSlSSNG[VWYqwUlOob3eKR1GoR2GsTlOSNFuEV1GoTVOCTlOSb1qiW2moT1WHfXSIcI[ZNEGW[GiLbXJyPVmbW4i4XmiL[mKISkC[WH93XkKXNGFzPYWbcXyvT1OseGCucIqWS1ZxXUKpcGqE[4CMVUCMR2OC[1mERVqEVXuL[YdxT1OURXeKR1GLR2GsTlOURXeKR1GLR2GsTlSSc1qKR1GoTVGsTlOSb1qLTFK6XmibWmWsb3eRV1GsXEGPSmWtXl[WcIOvWXuXVm[WWmSXSkmXWXuscmiVd16E[3uoTVOC[1OSb1qEVXusZ{OTbHSIWXeRV1KPXWelcF:rdH6bXGKV[FeHNHGYUmSlS1ZxXmOodF:4NFuEV1GoTVOCTlOSb1qEWUGpXkKWOl:vTnykNmZxT1OsO1SSc1qKR1GoTVGsTlOSb16E[3uoTVOC[1OSb1qEVXy3XXx6fnSISomlR3exU4dxT1OURXeKR1GLR2GsTlSSc1qKR1GoTVGsTlOSb1qEV2KnWUCXV2[sWmOYfXSUVm[HWmKXUmWZNW[UV2Ol[FmFNHekTFqtXkF6fWqZRoO[W16tT1OkenGJVkCkR3i7T2i{e1yFSkmQcIe3XFN6Zmite4[ZV3:3Tom4[1q6Z4OKR2JyZ324dF:4NFuEV1GoTVOCTlOSb1qEVXyPXWelcF:rdImlW{SwT2S{UlOob3eKR1GoR2GsTlOSb16E[3uoTVOC[1OSb1qEVXusZViTeHKERUmKS{mqXEKlcHSHPXqjNkVxXmd2NHO6[4CQe{CMR2OC[1mERVqEVXuLR2d6bWhzWoWbSkmrZleXbHKq[4CQe{CMR2OC[1mERVqEVXuLR2VybGpzWU[QclqtZ{OTenOuWmSlS1ZxXmOob3N{VnilS2WxU4dxT1OURXeKR1GLR2GsTlOSNFuEV1GoTVOCTlOSb1qnVUCMR2OC[1mERVqEVXuLXme5fmqURV6E[3uoTVOC[1OSb1qEXIOPR3es[1mERXeEVXuLR2Gsb3SuSomOfVF6TVVybGpzWU[QcXitZliDcHOq[36jXGJyZ32Lelq6b4SRcEmnT1OLS3GYfHyKSUGpXkKWeXOIbIeKS3y7TVd2enSERoe[XGKrZVeXb1mqb{eFVX:LTVOC[1mCb1qEVXx6SGGwTlmERXeKRXuLR2GsUlOob3eKR1GoR2GsTmmvTny[W4N4SGGwTlmERXeKRXuLR2FxT1OURXeKR1GLR2hxUlOqRXeKR1GLR2hxUlOqRXeKR1GLR2ePbHSIUn:KR3iH[VePcHOJVoCjNkSoTleWdFSSc3eKR1GoR2GtO1SSc3eKR1GoR2GsTlqJXnikbl2oVGOCb2qUNDubNmZxWGeXfnNzSn6bV3exU4dxT1mERXeKRXuLR2iLcHSJWomjboOPR3mC[1mERVqEXECMR3esTlOUPI[KS{GpUGe5dFmJUnyKTG[{ZkOxdHSERX:jcW[yXleW[3K6RkCbXF5xT2ODbFmIdHyKTFK6XWixb3Kvb3ejW1[1XmODbnGJcHmlVX:LR2GtdGqqRX:LS3hxZme4PWCUZ36KR2muTVOTNmmZTYmMVX:LR2GsTmSYSn6bWH93[FepfXJ{[F[mS16tZ1iTdHJzOH:Kb2K3[EJ2d3JzSnuKS2qpZWe4[1uETYWLTGqpZ3qOeVmqb4WKSlK{XmeHflmIUn:[W{WvXmODb3J{[IWjS{mpXlODeGqZVn:jNmGoZWd1[3J{RkCiW{m2TViTbGmqOHmMWIOPR3mC[1mERVqEVUCMTVOC[1mCb1qiW2moT1OTNmmZTYiMV1GsZViTeHKEOEmKR1l5TWNxeFmETXeNbVK2ZkOkc1uURYWKR1moUGNxL1mrd16EbVGoTVOCTlOYcH2KR3es[H2HfV2qb3ebcXy{XmZ6e3SZVn[[Nkm2[FeXeXSJUX:LTFKp[Feod1mEVn:lS{G{T2S{UlOoNFuKR1GoTVGsTnGYXXeMR2JzXWiKfmCVNH6LfVGuTnmDdHNyPYqlTFqxZn2kc1qIbECjW4exTVO[cVmE[3uiTGK1ZlOGPVq6Z4CMVUCMTVOC[1mCb1qEV2JzXWiKflmFNHekcUlyZn2Sc1uJUkCkcYitZnmob3GJVoSjR3uoUImCc2qufI[[XGGxUWSCfV6Eb4OKSFmxU4dxT1mERXeKRXuLXme5fmqURoCbbVGwTlibbHOrUUmRV3OvTVO[cVmEVn:lS{G{VGRxclq6b16EbVGoTVOCTlOSb3ulcV[6UYmCPVmGNXibNmV3U32pcHKJRnykbXevZmiTNXOuTo[LfXu1VHx6[luE[HyjXFJx[WODenSZVoelXGGvT2S{UlOqRXeKR1GLR2FxT1mERXeKRXx6SGGw[1mERXeEVU1:Jku{PkF3PjKiW{WsXmipRml{VoCjNkR:Jku{PkV1NEpjSGGwTlOYcH2KR3iPXWelcF:rdH:bW4i4XmiKc1pzNUClXFqqZol6dHKuXo[LfXu1VH2lcHSHTnybNEWpZmeWc1uUb3eme{CMR2GsTlqJXnikblG1VH6LcGqE[36jXGJyZ32LelxzSnujW3y2ZViTeHKHPYSlTG[6XX15enGYOXubXHevT2S{UlOob1qnV1KtZliPcFmJd16E[3uLR2FxT1OSb1qLS{G3XleXd1mFNHeVW1[vXmSwOmpzWkCVW{msXme4c1pzNUClXFqqZol6eHSJWom[cUivT2NxL2lzfHy[XFqDZle5VWmY[HykfXexU4dxT1OSb1qFVX:LR2Gsb3SuSomOR{BsXkKXNGWuWoqkS{m2Z{KWc1uUNDukNmZxV1eXbGqIWomMR3SKWl[TVVy7SYWOV3O{ToqSe126RlejN1qqZWeTb2qYOH6MWIOPR3esTlOUVkK[XFm4UGR2cmqZVmObXF64ZkJ2fmqU[4CNWEW7XmiTR3JzVkWMR1Gs[H2HfV2ENDulN1qpZ1OpUmmY[HyQboCwXme5e2qZTX:LNkFx[GiLbXK6Z4CNWEWnXImoclmH[ImjNkWvTVe5dGlzWoWkNmWo[Fite2qUe3ejS3yrXmd2fmqURnqjNmKtZ4mDbHOuWXejcUlxTVdybHSIUn:iW{WvTViTc3GZUXeiS{m7[FN1cluUb4CQe{CMR2GtPVSSc1qEVU1:Jku{PkF3PjKkN3y2XUKpfXJzOYCmcWV:Jku{PkJ2Okh7JlSSc3eKR1GoR2FxT1mERXeKRXusZ1iLcHSucHylNF[6Z32HOVmFNHeLTGqpZ3qCeGCu[HylSlK6XmibdGqZ[FS[XGKtXkJ6fXWWcHukfXexU4dxT1mERXeKRXusZ1iLcHSucHylfVF6TVeteHOIfI[bS2WwTom4clyERXukTFqt[H2tcHRxSomkcVZ2T2S{UlOqRXeKR1GLZWe[[1uEVoekcWZzZWeXN2CVNIeMV1GsZ1iLcHSucHylfVF6TVOkeF2UZ{eFVX:PR3mC[1mERVqLTFZyXmiLOWOIPYSKSECoTomkO1SSc3eKR1GoR2ebenOuWni[NneoT1OTNmmZTUCKS1[7TVOTfnSIPYmbWXysT2ODO1SSc3eKR1GoR2Gsb3OZWnykcnyKZkJx[1yrNHeKb3yQWUCXV2[ERlqVcGKRTVeDeHSJWom[cUmoTVOp[3N{Vo[kcW[nZWeT[1yERnekcW[5[GeXfnSHPYe[XGKwXVOs[2[sSl2XWW[VTVOobVyqVoqlS{m6XmWtb1yqTYOKR3O3TomsO1mETUeFVX:oTVOC[1OZNF6EbVGoTVOCTlSSc3eKR1GoR2OTfHSYWommWXi3ZmWTcGqqRUmKR1qLWHyPSmWtVXeUWUWWWImD[3KZVkGkcVq3XVOCc2mJUkCjN1qtXEKtb2mEe3e[TFqtZ2iXcHN{Vn[kS1ZxZVeCdFmHXlKVSm[HWYmCc12Ee3eLfUivT2S{[1mrd16EbVGoTVOCTlSSc3eKR1GoR2OTfHSYWommWXy2Z4mCPVmETlqVcF6HWXyS[2OWOWWVfVKoZmiTNXOuTo[[R1GwXViXfXKHPYmbXHS6ZWiTcGhzcHu[R4eoXViPNHJ{TnyZNnysXVO4[2mIUnilS2[vZkOLOWhzcHu[R4eoXViDfXJzVkG[N2KnZWeT[1yERnekcW[5[GeXfnSHPYe[XGKwXVOsUlOob1qEVXuoTVOC[1mHUl[VSW[FWlOD[3SZToOZN1qt[EOLdHSIWn[iW2KoUFOD[3N{Vo[kcW[nZWeT[1yERne[NlZxXmelenOvcH[iW2KoUFOD[3OJTo[bTG[r[FZ6dGqIRYOKS1K6XmiHNWqZUkCZN1Kp[Fep[1SSc1qEVXuLTVOC[1mERleWb{mPTVeDbnJ{TnyZN2[6ZlZ6fWqZ[ImiXGKtXVFxT1OSb1qEV1GoTVOC[2ZxbF[Wb2WoSGGwTlOSb1qKR1GoTVOC[1mE[16E[3uLR2Gs[1mERXeKR1GoTVOCc2mIUnilS2[vZkOLOWhzcHu[R1KLWHmCc1mqRYWKR2K4Z32XNnGYWkOKR1G2TVOKdFmGSl:TR1KoZ1iLemqJWnqlSkmxXleC[2OXUXeVcG[OWFOsUlOob1qEVXuoTVOC[1mERXeMV1m2SGGw[1mERXeEVXuLR2OC[1mE[3:LTGqpZ3qG[1mVNHeLfXOxTVR5[1msSl:TR1GwXViPNHJ{TnyZNnysXVODU2RyVXeUWUSoT1OK[1yqRXulcV[6UWOCeVmETYCMV1moU3mCbVmqb16E[3uLR2Gs[1mERXeKR1GoUHmLRmSsVV6EbVGoTVOC[1mCb1qEVXuoTVOCc1SSc3eKR1GoTVOCTlOSb1qKR1GoTVOCc2mJTnykXG[tZ{OT[nOISkCiS1GoWHt6WVmGcF:KR3iVVmW5SmFyVXe[TFqtZ2iXcHN{Vn[kS1ZxZVeC[2KtTmCVV1KoZmiTNXOuTo[[R3uxSGGw[1mERXeKR1GLR2GsTlmERXeMV1l4SGGw[1mERXeEVUCMTVOC[1mCb3ukXG[tZ36tSWqYe3eRV1GqVlWXUWKXVl[KSWqUWEBx[2mINUClXFqqZkKCUlOqRXeKR1GLTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoWkCpSmWsWXeKR3ioXUKHNGqY[I[kcnynZWeT[1mGOWCXR1KLWHmCc1mqOHeLTFK6XmibdGqZZ3eKR{SoTXms[2GWOVWKS1K4Z316b3SYUkCZNnysXVODTmW6Rl:XWYiOT2OKO1SSc3eKR1GoR2FxT1mERXeKRXusZ2iXcHOvcFWbW4iKZkJx[2CURXmTSW[OVm[TSlmGXmOVNECoXVdyNHSZTnmjNlGoWkCpSmWsWXe[TFqtZ2iXcHN{Vn[kS1ZxZVeCPVq6PH6QfVl4SGGwUlOqRXeKR1GLTlePenKuOXy[N2KxZkJ1[2CURl6[W3StU3qxcmqZVmSiW{WvZleXNHJzOH:LNl63Z32WenOuWoqjN2[6XUKWcluUNDubNmZxVUJ6eXKuWnqlS3y3ZnmocmlzPYmbWkl{Z32tNGqUZ4CQe{CMSGGw[1mERXeEXGK6[WODO1SSc3eKR1GoR2GsUlOqRXeKR1GLR2OTbnJzOYWbW15xZWd6eVyVOYilW2[6[WOobWVyVlKWcGGoWl[LRmStUlKSNWKLWEB1bVuVd16EbVGoTVOCTlOSNFuKR1GoTVGsTlqIcIW[NohyXleXTXJzNXykS1[vXmOCPVmEVkK[XFm4UGR2c3JzNXykS1[vXmWtfmOYOXqjTG[sXmeSc1uVd16EbVGoTVOCTlOSNFuKR1GoTVGsTnGYXXeMR2KxZn2Pd3SYVnyUS{m1XmiDbGpzWXeLbWmoTWOTNmmZTYqMV1GsXUJ6eXKuWnqlS3y3ZnlxL3OZWnykcnuwTliHNWqZTkWUS{m1T2S{UlOqRXeKR1GLR2etcVmE[3uiW{WrZliXb2qWbI[jW2[4XWelcFmEXX2KR2JzXWiKe1yVOX6bXGKP[Ge5NHGZUkCjN1qt[H2tcHS6[4CMV1GsXUJ6eXKuWnqlS3y3ZnlxL3OZWnykcnuwTliHNWqZTkWUS{m1VleXcVuVd16EbVGoTVOCTlOUVnqjNkW2XmePNHGYPYWNWEW5[GeXfXWU[3ukXG[tZ36tTnKvUYCQfVGoSGGw[1mERXeEVXuPR3mC[1mERVqEW3yuTVOobFqIcIW[NohyXleXTXJzNXykS1[vXmOCcVqqRXulcV[6UYms[1qIUo[jcUWtXUOTdHJzOISRclZyXmiLOVuEVoilW2[6[WWTcHKGbI[jV3t4SGGw[1mERXeEVXusXUJ6eXKuWnqlS3y3ZnlxL3OZWnykcnuwTliHNWqZTkWTS2[{T2S{UlOoNFuKR1GoTVGtPVmIUnilS16wTVOpSnWIUnykTGKxZkJ1[1qIWYCKTIOPR3mC[1mERVqEV2KrZkJ2eWqYUkCiW{m2UGR2fHSYWommV3eqWXt6UWSGTlKSNIOqT2S{UlOqRXeKR1GLR2iTc3OuPUOKR2KtU4dxT1mERXeKRXx6SGGw[1mERXeEVUCMTVOC[1mCb3u[Nkm2Zn2XbnSIcI[jbUBsZ2iXcHOvb3:Kb16RWGVyTm[ETYCQe{CMTVOC[1mCb16EbVGoTVOCTjJ8gR>>
1
+ ZUpyOEq8d{pzNEpjXEKPc2qYUoKVS3yrXmd2bmqSQU1jP4N7N{R5PjKFVX:LR2etcVmE[3iVW1[vXmSwOnGIWoOkS2[6T1OleHSJWom[cUi3ZWd2cXK6Z4CNWEWvXmiTV2qY[F:[W{GtT1OsPWCU[IKkcmK{ZUKHdnOrVX6MV1J4SGGwTlOSb3uiW{WuZomCPVmGNXibNmV3U32pcHKJRnykbXevZmiTNXOuTo[NNny2Xn15cluUNDubNmZxWX2XcmOYOX2jfXexU4dxT1OSb1qLTGqpZ3qCeGCu[HylSl6tZ4modFyVOXibS2KZXWiLeXGYOX6MR2KxZn2belyVOYSbXF67XWelcFuVd1qFVX:LR2Gsb3SuSomOR{BsZ32Xb1uEZ4GNfX:3ZWd2b2qZ[36MWIOPR3esTlOZTnylTG[6ZnmDcWmYfIqbWIOPR3esTlOSNFuEVXx6TVeXd3NzWXeme{CMR2GsTnOuWkClXFq2TViTfXSYWUeFVX:LR2hxUlOob1pjP4N7NUZ7JnN{cIqlS2[1VUKpcGlzd{1jP4N7N{V3PjKEbVGoTVOCTlOUVnqjN1J2Z32tcnGJVXeRV1Gs[H2HfV2ENDubNmZxVUJ6e3WZToCbNnhxT1OsO1OqRXeKR1GLR2OTNmmZTYeNWEW7XmiTSHJ{RkWkcXyvZViSc1qIUo[kTHy6ZWelc3SEOH6RS1q6TVN5L2SYSn6bW{VxZomDWXSZTnmjfVKFXWePc2qURVuKR1GoTVGsTlOWVnyjW{ioXX6s[2CISXeiTFqtXnpxbXGJVkCkSH:3UEOlN3S6OXikcmKxZol2eWqZVY[jW1[vXmd2NHK6NXymTGKtZn6PdHJzOYqNNkC1[FiXfWmuPIS[W16rXme5cHOuSkCjN1mqTViTdHSIfHyRV1qPWliXfWmuPHeSW16rXme5cHOuSkCjN1mqVHew[1mERXeEVXuLWGeHcmqYOUCjfVK7Z1eXcGqFe4[[WESo[GiC[2mvb3eSWlqWV2V5cluVd1uKR1GoTVGsTjJ8d{pzNEpjXUKpcGlzeGObXF64ZkJ2fmqSQU1jP4N7Nkh{NkpjSGGw[1mERXeKR1GoTVOC[1mCcICbbVGwTlibbHOrRYCKTIOPR3mC[1mERXeKR1GoTVOC[1OSb16EbVGoTVOC[1mERXeKR1GoR2Gsb3SuSomOfUBsXEOLcGpxcIWbcUi1VH2PemqIWXeRV1KxZn6TNmmYe3:kN2[qZ{OTfVuEVkK[XFm5W4qD[FyERYeNR1Gs[H2HfV2Eb4CQe{CMTVOC[1mERXeKR1GoTVOCTlOYcH2MR1KxZnx6bHOvTnimV3es[H2HfV26NDuZN1qtXkCteWquPISRcV63XleWd1mISomkcVZ2T1SGe1yFTYeNSF24UFSSe1uUb3eMV1J4SGGw[1mERXeKR1GoTVOC[1mCb1qEVUCMTVOC[1mERXeKR1GoTVOCTlOScICbbVGwXUJ6NXKvVX:LTGqpZ3qGdFmFOEmKSF2xTVi{UlOqRXeKR1GoTVOC[1mERXeEVXuLR2FxT1mERXeKR1GoTVOC[1mERVqEVXuLUIl5[2WISomkNmWo[FepcFmIVnilS2WPR3mC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR2KsXWiTcFmFNHekN2K6XEOLcHOIfHi[NmWwTol1clyERX6NfXO{TViTfXGYNH:LTGqpZ3qHZl2XNICMWIOPR3mC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR2JzXWiKflyVOX[kcW[vV2d2cXK6NDubS1ZxXmOCPVmGNXibNmV3U32pcHKJRnykbXevXUJ6fWqUZ4CNWEWuZkOLeGmZVlW[XGKtT1OTb2mZVnyMWIOPR3mC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKRUCMTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeNfUioWVeHfXNzWXelS3itTVd2bHKYWV6EbVGoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mEVkK[XFm7UGR2[nOuWn6UW{WuZolxL3KuSoSbV1F6TViTfXGYNH:LTGqpZ3qHZl2tNICQe{CMTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeFVX:oTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERY[NfVKSXWiLfmqURkCiS2WoXUJ6eHOISoWmVUCMTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeLTGqpZ3qOeGCtPYmbW3SLZn2belyVOXqjNkG4XWd2OVmFNHeiXF67XmiSc1qJXnikbl[jUUFxdFmFPHelTFqxZmOob3SuSomOWoO7XGOs[1:qRX6LfoOPR3mC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKRUCMTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeiW2moT1OTNmmZTYqNWEWnZ32XcmOYOX2jfUBsXUJ6b2qURUmRV1G5UVOs[3W4NFuKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1OUVkK[XFm7UGR2[nOuWn6UW{WuZolxL3KYWoqkNl[vXmOCPVmEVkK[XFm7UGR2[mi6[36VNIOvT2S{UlOqRXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVhx[2qYfIqbV1KxXnmCc1qJXnikbl21VHx6fWqY[FqjcWq3UGR2bnJzVnyKSEB6TVSKe1uURkeFVX:oTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTlibbHOrUYSRclqpZWiPcGSuPUCiW16tT1SGe12Ee3eLTGqpZ3qOeGCtPX[MR3SLWHubVGhyWmGTNVqDVlWX[mSGcFSTWUWVVmZ6SmeHRlqWb2[GTomsdF:4NFuKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[3[URnyjTF6tTVetcVmE[3ulcV[6UYlxL2h{TnybNHy2Xn15eGCuUo[bS2WoVGRx[127RYCKTIOPR3mC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOCb3SuSomOfUBsZ32HdHNzWl:jN2KxXUKWc12VRYeNR1Gs[H2HfV26NDuZNUiwTkCtU2KsPX[XWlKJWXuHSWKXPV:VNWKnVWWPWWOXXl[LfXuxU4dxT1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mEVkK[XFm7UGR2[nOuWn6UW{WuZolxL2qISkCbV1F6TVOTNmmZTYqNWEWnXImocmSuPUCKS1[r[FetNmmZVnybR1J2XmiScluVd16EbVGoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mJNHebW4i7XmODdGqqRX:LTGqpZ3qOeGCtPYmbW3SLZn2belyVOXqjNmKtTVRxPVmFVYeMV1J4SGGw[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GLTVOTNmmZTYqNWEW6XWetfmqWOY[lS3yrXmOofF2FRYOKR2JzXWiKflyVOX[ZfXevVlV6UmGWcF:KSWKRVm[O[2SsPWWKSUGDWlWPTVq6b4CQfVGoTVOC[1mERV6EbVGoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mJNF6EbVGoTVOC[1mERXeKR1GoR2GsTlOSNFuKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1J6TVeXd3NzWXeme{CMTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOCTlqJXnikbl21VH6LbHGZUnyVcUlxZWePcFuFSYeOR4eoTlibbHOrUYSRcEmnT1OlSmWtTmCWcEmUVmWl[mFxbF[SNISnVnuHTmSEZ4CMWIOPR3mC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[3[SNFuKR1GoTVOC[1mERXeKR1GLR2GsUlOqRXeKR1GoTVOC[1mERXeEVXx6TVeXd3NzWXeiW2mwTVOTNmmZTYqNWEWnZ32XcmOYOX2jfUBsXUJ6b2qURUmRV1F2UVOCdFmJd16EbVGoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTlibbHOrUYSRclqpZWiPcGSuPUCiW16tT1SGe12Ee3eLTGqpZ3qOeGCtPX[MR3SHWXyLVGWtPVWVNXSQWFV6RmKHPVqTSkmQWEGT[mKsPW[Vb2GvT2OsO1SSc3eKR1GoTVOC[1mERXeKR1GoTVOC[3[URnyjTF6tTVi{UlOqRXeKR1GoTVOC[1mERXeKR1GoTVOCTlqJXnikbl21VHx6fWqY[FqjcWq3UGR2bnJzVnyKSEB6TVNxfF:4NFuKR1GoTVOC[1mERXeKR1GoTVOC[1mCb3ulcV[6UYlxL3OuSoCkNm[QZkOTdGlzWX:OWFG4UFOCb3SuSomOfUBsXEF5c1pxWmOWb{mUXEGLSmJyPVSUSW[FV{F6S2GWcF2LfXuxU4dxT1mERXeKR1GoTVOC[1mERVqEXECPR3mC[1mERXeKR1GoTVOC[1OSb16EbVGoTVOC[1mERXeKR1GoR2hx[2qYfIqbV1J4SGGw[1mERXeKR1GoTVOC[1mCb1qLTGqpZ3qOeGCvTniiXF6tWH16NHGYUnyMSFW4UVO4[1qJXnikbl21VHx6[luE[F[WcFqRWXx6V2KW[H[SNHiHVUC1[mKsSlqVR3OxT2S{UlOqRXeKR1GoTVOC[1mERXeEXECPR3mC[1mERVqEVU1:Jku{PkF3PjKWS{m7[F[LcHOZWnykN2F:Jku{PkV{OkB7JlSSc3eKR1GoTVOC[1mIcH2MR1KxZ{F6bHOvTnimV3es[H2HfV6Eb3eLbWmoXUJ6NXKvVX:LTGqpZ3qSdFmFOHeOR1GxTVi{UlOqRXeKR1GoTVOC[1mERXeKR{i3TVebenOuNXilR1G1UGR1[3SIWoqlSFV6XWObNGqZUkCObkGqTVeXNGm6OF6EbVGoTVOC[1mERXeKR1GoTVOTNmmZTYeKSECoXWiLfWmZb3:MWIOPR3mC[1mERXeKR1GoTVOC[1mJ[H:iW4itT1ODd3GZUkCMR2K2UFOCb3Sqb3eRV1KtXWePc1uEVkK[XFlxT2OCdFmJd16EbVGoTVOC[1mERXeKR1GoTVOC[1mERXulcV[6UV[1[FmFNHeKbWK2VGOTNlmrd16EbVGoTVOC[1mERXeKR1GoTVhx[1mERXeFVX:oTVOC[1mERXeKR1GoTVOCb3SuSomOR1F6TVeteHOIfI[bS2WwTom[clyERXulcV[6UVOsO1SSc3eKR1GoTVOC[1mERXeKR1GsXUJ6eXSIWoWlSmJ2Z1eW[2CURXmSNkm2[FeXeXSENUCmXFKtU3mDbHOJRoOiW16p[FetenKqPUSNXHR{[IlycXJ{ToSNXG[6ZleXeWlzPXubW2KkZ3y5eVmrd16EbVGoTVOC[1mERXenVUCMTVOC[1mERXeKR1KtZliPcFmJd16EbVGoTVOC[1mERXeKR1GoTVOTNmmZTYeKSECoTlibbHOrVUeFVX:oTVOC[1mERXeKR1GoTVOCb2lzPYWlS2[2[F[TOXOIWXeRV1GqVUJ6eXSIWoWlR{Fx[WiDcF:qRkCbXHhxUEOpeHKHfImZS{SqU4dxT1mERXeKR1GoTVODPVSSc3eKR1GoTVOC[1mCNFuKR1GoTVOC[1mERoCbbXeoZWiP[nKvWoOjR3es[H2HfV26b3eMV1J4SGGw[1mERXeKR1GoTVGsb3SuSomOfVF6TVVybGpzWU[QcXSt[F[PNHJ{TnySNkm2Xn2tcluETkObW1m3[Gd2fmqYUkGkcWW3XX2HfmqXPUGkcYeqT2S{UlOqRXeKR1GoTVOC[1mERXeKR2JzXWiKflmFNHekN2K6XEOLcHOIfHi[NmWwTol6dHKuVnymR{W4ZViCemmYVoSiW{SvUFOCclq6e3eLTGqpZ3qOdF:4NFuKR1GoTVOC[1mERXeKR1GoTlibbHOrUXeRV1K7[FiL[nOuWoejS1[rXmOoclxzcIWbS2Z1UH6Dc3OEPH6NR1GvTom4[1qJXnikbl2xU4dxT1mERXeKR1GoTVODPVSSc3eKR1GoTVFxT1mERXeKR1GoTVOCely6Roe[XFq7XmODNHGIWXebNnxzXmd1[2[XTl2FVX:oTVOC[1mERXeKR2JzXWiKfVmFNHekS1[6Z{KX[nSZToOMR2JzXWiKfVuVd16EbVGoTVOC[1mERXeiW2mwTVOHdHN{UnylR3es[H2HfV2td36kNl6wXmdycFpyNICKTIh5TVOob3SuSomOcIOvZ{KPc2qYNXyLNUCoTWRx[1pzbEClTFGvT2OCdFmJd3eFVX:oTVOC[1mERXeKR1GoTVODfWqZVkGkcUSoXn2Hd3NzWUeFVX:oTVOC[1mERXeKTECPR3mC[1mERXeFVX:oTVOC[1mERXeKR{i3TVeXOHSJTni[N2GoZVd6fnSERnijcWGoZ1eHNHGFc16EbVGoTVOC[1mERXeLS3i3Z{OS[2CURXulcV[6UXy{cnGIPYqlR3SlU4dxT1mERXeKR1GoTVOCb3OISkCiR1F6TVetfnNzWkCMR2JzXWiKfWe6[Ie[XGKwTkFxdFmFPHeLTGqpZ3qLZlp{RnilS3evXGOCOlmEZ4[LfoOPR3mC[1mERXeFVX:oTVOC[1mERXeKR{i3TVd6e2qYOHe[V1K7ZkKPdmqZVXe[Nkm2Zn2XbnSIcI[jbVK3ZnmDe3J{TkCKSHe4SGGw[1mERXeKR1GoTVOTcHOvToWjfVF6TVd2NXKIe{eFVX:oTVOC[1mERXeKR2KtZ36LfnSJTXeRV1K2[Ge5d1:4NFuKR1GoTVOC[1mERXubclGoVGODRWqvUo[[NoS3Z1eXeVuEVn:jN15xUFOCOF2Ee3eLS2[6Z312elyERXubXFq6Z{OTfVyERUGMWIOPR3mC[1mERXeKR1GoZWe[c1mEVn2kR1F6VGRx[2quSoOkNmWoT2ODO1SSc3eKR1GoTVOC[1mERXeKR1K6XmiTNXOuOHebcV[{Z{KWO1SSc3eKR1GoTVOC[1mJNF6EbVGoTVOC[1mERXeFVX:oTVOC[1mERXeKS3yuTVOobHGZUn[jcm[{ZlOob3SuSomPbXuxTVi{UlOqRXeKR1GoTVOC[1mERXeKR2JzXWiKNlmFNHeKcG[7XmiKeGGY[HyjcmF3TVOKeVqJXnikbmm2TXy5fWiIOHmQe{CMTVOC[1mERXeKR1J6SGGw[1mERXeKRUCMTVOC[1mERXeKR1G3UImDfmqYOXuKTGKwXmODfWqZSkGbXF5xSGGw[1mERXeKR1GoTVetcVmE[3ulcV[6UmOCPWCURX6kS{m7[FOkdFmJd16EbVGoTVOC[1mERXeKR1GoTVebe3SZVoqMR2KuZ1O4[1mtRmCWNWGoTliDbHSI[3eUSmKWWVN5fFyrSnOkcIi2TXmsO1SSc3eKR1GoTVOC[1mERXeKR1KxXnmCc1mYcIqZNkVyZle4c1qJXnikbmmxT2ODO1SSc3eKR1GoTVOC[1mERXeKR1GoTVOC[2qvRkGlTF2wTlebe1yERXulcV[6UnmsO1SSc3eKR1GoTVOC[1mERXeKR1J6SGGw[1mERXeKR1GoTVOC[1mERn2kTGZxZ4mob2qvRYOKR1qKZkOPNF:qRXuiS{m7[F[5fWiIOHmMWIOPR3mC[1mERXeKR1GoTVOC[1mIXoelXGK7T1OTcXOEe3eKcFqtXn2XfWqZTU[KR2JzXWiKfmiJTnOjbVmxU4dxT1mERXeKR1GoTVOC[1mERXebclJy[FiOc1qIXoeNR1GsXUJ6eXSIWoWlSmJ2Z1eWdF:4NFuKR1GoTVOC[1mERXeKR1GoXn6DNXSJUX:LS2q4UFOCbWFzPYWlS2[2[FNyd2qYOX6lS3d3TVOKeVmJUkCkcYitZnmob3SuSomOR3uoUHmLZ3OtfIWKbXt4SGGw[1mERXeKR1GoTVOC[1mERn2kTGZxZ4mob2qvRYOKR1qFZkJ2eWqYUkCiW{m2U3mDbnKIPYqbWoi6XFd2Z3OtfIWKbXt4SGGw[1mERXeKR1GoTVOC[1mERn2kTGZxZ4mob2qvRYOKR2JzXWiKe1uVd16EbVGoTVOC[1mERXenVUCMTVOC[1mERXeKR1KtZliPcHGYXXeMR2JzXWiKNVmFNEmKR3SvXmiScluURkeFVX:oTVOC[1mERXeKR1GoTVOCb3OZWnykcnuoVGOCclq7d16EbVGoTVOC[1mERXeKR1GoTVetcVmEbICkN16t[FOob3SuSomOcIOvZ2iXcHOvb36ZV3uxTVi{UlOqRXeKR1GoTVOC[1mERXeKR1GoTVOCb3OZWnykcnuoVGOCcmC6Z4WLTGqpZ3qLZlp{SkGbXFp2TkFxO1SSc3eKR1GoTVOC[1mERXeKR1J6SGGw[1mERXeKR1GoTVOC[1mERn2kTGZxZ4mob2qvRYOKR1qJVm[S[3W6Voe[XGKw[mi{b3OZWnykcnx6TVWpWW[HRY[OV{S5XFiLZ3KqTYCQe{CMTVOC[1mERXeKR1GoTVOC[3GYXXeMR1[xZ{F6eXSYfIOMR2JzXWiKNluUb3eme{CMTVOC[1mERXeKR1GoTVOC[1mERXeKS2q4[GiTfluEVn2kR4eoTlibbHOrXYCQe{CMTVOC[1mERXeKR1GoTVOC[3[SNFuKR1GoTVOC[1mERXeKR1GoXn6DNXSJUX:LS2q4UFOCbWOIPYqlSH:oTlepenN{VnOkcIi2TXmsO1SSc3eKR1GoTVOC[1mERXeKR1KuZ1iXNHO6[3ubclG{TVOLSHJzOYWbW15xZWd6eV:qRnqjS{m7Xm[5fWiIOXOkcIi2TXmsO1SSc3eKR1GoTVOC[1mJNF6EbVGoTVOC[1SSc3eKR1GoTVOC[1mEVombXF5yZliS[2CURX6LfoOoSGGw[1mERXeKR1GoTVilc3GYfHyMR1[uXmd6cVuEVn2kR3uxTVi{UlOqRXeKR1GoTVOC[1mERXeKR{i3TViLcGlzWoClcWWo[FepcFmJTnykN2[{[FiO[3JzXXelS3itTViLcHOZWnykN2GPR3mC[1mERXeKR1GoTVOC[1mEVombXF5yZliS[1yrNHebcXSt[FiOc1qIXoeNR1G5UXqodF:4NFuKR1GoTVOC[1mERkmFVX:oTVOC[1mCNFuKR1GoTVOC[1mERY[NfVKrZld6fmqURkCiS2WoZ{J6bnFzWkCKS163Zn12cGl{VoCjNkR3SGGw[1mERXeKR1GoTVebbnKIPYqbV3esXn6CdF:4NFuKR1GoTVOCUlOqRXeKR1GoTVOC[1y6PHekN1K{ZWiS[3SIbHyKTFqtZ{OXd3SERn:bW1[sXmiK[2qvTo[jV1JxZVeW[2lzPYWlS2[2[FFxT1mERXeKR1GoTVOCb3OuWoqlW4hxTVRx[2qZbIejS{msXmOobWiJTnOjcIi6XFd1bVyERXukcW[7[Ge5NFyERYmMWIOPR3mC[1mERXeFVX:oTVOC[1mERXeKR2KwXmeHb2qZTXeRV1KxZ{OPcHSE[3ukcW[7[Ge5NGe7RnSMV1FwTVOTfWqZUkGjTGKjUVZx[1:qRX6LfoOPR3mC[1mERXeKR1GoTlePenKvVnyjcmGoVGODdHN{UnylR3esZ32XfnSYfECYfl[lT2OCM1mEVombXF5yZliTZl2XNHeQbVGvToq{UlOqRXeKR1GoTVOC[1SSc3eKR1GoTVOC[1mEVkK[XFm5TVRx[3KuWkOKTF5xXlWPd2mZUoqMR3t4SGGw[1mERXeKR1GoTVOTNmmZTYiNWEWwXmeHb2qZTXeRV1GsZVeXbGqIWomQe{CMTVOC[1mERXeKR1Gs[H2HfV2UNDu[Nkm2[FeXeXSERUmKR2KrZkJ2NGqYOUCQe{CMTVOC[1mERXeKR1GPR3mC[1mERXeKR1GoUIl5[2OISoWbS4itTVePc3SYOYKbW2Go[FiLbHKvUn2bXFmoZWe[[3KuWnybS2[sSGGw[1mERXeKR1GoTVetcVuERoqlTFq4ZkOOc3N{VomlS{m{ZkOlcHOq[3ulcV[6UWNxL3GIWnibS2[6T2O4[1p{Vom[W{W7Xn2XfVyYWoW[NkmsZWd2cl:qRnqiTG[2ZUKXb1q6b3eKWEB6TVebbHKJUnyKR3uo[YdxT1mERXeKR1GoTVOC[1mERXeLTFKpZ36PcGqERUmKR3OvU4dxT1mERXeKR1GoTVOC[1mERXeLS4itXn6S[2CURXulcV[6UWNxL2lzPYWlS2[2[FS{UlOqRXeKR1GoTVOC[1mERXeKRUCMTVOC[1mERXeKR1GoTVOC[3RzbICjS2WwTViTfXSYWXeMV1J4SGGw[1mERXeKR1GoTVOC[1mERXeKR1GoTliDenO6RUmKTF5xZ36DenO6[3ujS2[u[FO4[1mtfImZS{SqT2S{UlOqRXeKR1GoTVOC[1mERXeKR1GoTVODdGqq[3eLTFK3Z4mCPWCVNHebcV[{Z{KW[1uURkeFVX:oTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTViLcHSJWomjbVGs[H2HfV2Vd16EbVGoTVOC[1mERXeKR1GoTVOC[1mERkmFVX:oTVOC[1mERXeKR1GoTVOC[1mERXeFVX:oTVOC[1mERXeKR1GoTVOC[1mERXeLS16w[Gd2dnNzcE[bV1F6TViPNWmvUkCkbXesZleXcXSEe3eOR4eoTliDenO6b{eFVX:oTVOC[1mERXeKR1GoTVOC[1mERXeLTFK3Z4mCdmCURoqlTFq{Xmd1c1mtfImZS{SqT2S{UlOqRXeKR1GoTVOC[1mERXeKR1GoTVOCb3KIWn2lR1F6TViPNWmvUkCkbXesZleXcXSEe3eLTFK3Z4msO1SSc3eKR1GoTVOC[1mERXeKR1GoTVOC[1SSc3eKR1GoTVOC[1mERXeKR1GoTVOC[1qJRo[kfVF6TViPNHOvRo[kfXesXUKpNXKueIqiXICtUFOCcl:6Z4CQe{CMTVOC[1mERXeKR1GoTVOC[1mERXeKS3yuT1OCb3OIPYqKR1V6VGODcWmYfIqbV1GxTVi{UlOqRXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeLS16w[Gd2dnNzcE[bV1F6TViPNWmvUkCkbXesXUKpNXKueIqiXICtUFOCe1yERXukS{m7T2S{UlOqRXeKR1GoTVOC[1mERXeKR1GoTVODPVSSc3eKR1GoTVOC[1mERXeKR1GoTVOC[1qIUn:lW{WzZ{KtOmqURUmKS3it[VeTcGm6[3u[NnhyZn21fnGZdHyMWIOPR3mC[1mERXeKR1GoTVOC[1mERXeKR1GPR3mC[1mERXeKR1GoTVOC[1mERXeKR1KxXnmo[1qIUn:lW{WzZ{KtOmqURUmRV1G4TVOs[3W4NFuKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1KqZ32XbHG7d16EbVGoTVOC[1mERXeKR1GoTVOC[1mERkmFVX:oTVOC[1mERXeKR1GoTVOC[1mERXeFVX:oTVOC[1mERXeKR1GoTVOC[1mERXeLTFKpZ36PcGqERYWRV1K7[GeLfnSJTX:LS4itXn6Sd1mFRYOKR2KrZViXeXF{UoCmcWWxU4dxT1mERXeKR1GoTVOC[1mERXeKR1GoTVOTd2qYXkCKSECoZ{OXbXN{VomMR2K{XmebNFyERXu[NnhyZn21fnGZdHyKR4OoZ{OTfXKIWoWMR1qkZ3y5eVmqb4CQe{CMTVOC[1mERXeKR1GoTVOC[3[SNFuKR1GoTVOC[1mERXeKR1GoSGGw[1mERXeKR1GoTVOC[1mERXulcV[6UWNxL2lzPYWlS2[2[FOCPVmEVoe[XFq7XmeSO1SSc3eKR1GoTVOC[1mJNF6EbVGoTVOC[1mERXeKRU1:Jku{PkF3PjK[W2K1ZWd2UXJz[ICj[{1:Jku{PkFxOER7JlOob1qiW2moT1OHUmmY[HyQboCwXme5e2qZTX:LNkFx[GiLbXK6PYCjcWq3TomseGCu[HylSlqtXkB2bHKYWX:MWEB6TkK1fXSIfIK[W4S6UlOkdFmJd1uEVXuLZWe[[1uGNXibNmV3U32lcHSHUkCjN1qtVUJ6eWqucH6MR3S1[FiXfWmuPI[bcXy6Z{OTbnJzOX2iW3OvT2RxPV2Eb3eme3:LR2GsTlOob1qEVXus[FiXfWmuPYe[XGKwTVRx[2SYSn6bWH93XkKXNGV{Vo[kcW[FZkJ2cXGYZ3:LNkFx[GiLbXK6PUClXFqqZkODbHSI[36MWIOMR2GsTlOUVomjNklxTVRx[2SYSn6bWH93XkKXNGGuSoqbWWKxZ3modFysVmSNbWJx[GiLbXJ{RnilS3d4R3esTlOSb3ulcV[6UVNxL2hzVnyjSmK6XmeWc1qJTo[jN2G{TVOTfXJzPUCMWIOMR2GsTlOSc1qEVXuLTld2enSIcH2iW16p[FetenKqRUmKSUGpXkKWOl:u[HylSUG3XleXd1uE[HibS{GxZnt2enSIcH2iW16p[FetenKqPYCjcVq3[VOkdF:4c1qEVXuLTld2enSIXXeRV1KpZ36LbHWU[3eE[3uLR2GsTlpzcIqZN1qtXWeScmCVOIeNR1GMR2GsTlOSb36bS1ZxXmZ6bGqIVnybR3N6VH2TbHSIWX:LNXu1ZmNyb1mG[{[iWIC7Tomsd1mCc1qEVXuLR2OlfmqZXnykcXxx[WOkPWCrVYOKRX:LR2GsTlOU[EGkcYevVGR1cnGJVkCkSH:3UEOlN3S6OXikcmKxZol2eWqZVY[jW1[vXmd2NHK6NXymTGKtZn6PdHJzOYqNNkC1[FiXfWmuPIS[W16rXme5cHOuSkCjN1m3Tom4T1OSb1qEVXuv[FetNHKIWX6RWESoWGeHcmqVc{[iS2[{Z1eXfVuE[ISlTG[6XX15cluUNDuZNUiwTkBybGpzWoWlS{ioWG[TNXOuTo[KSny3[GiK[3KIcHqbW{W7XmODc2mZUXebXHi4ZWiLcGqEZ4CNRX:LR2GsTlOU[HubXF6rZ32te3SIcI[jbXN6VHmDUmmY[HyQboCwXme5e2qZTX:LNkFx[GiLbXK6Z4CNWEWnXImocmSYSn6bW{VxZomDUm[JWom[cUioW2d6NXOqRoOiW16tZn2PcFmIbHikfVKt[ViDdHOuWnuNbVKDZle4[2lzSnqiS2[sTViDbGpzWoqKTHSpZ4mDfWqYNY[lcW[sTomsT1OSb1qEV3t4R3esTlOSb3ujcUlxZWebdGlzSkCiW{m2UGR2e2mZToqbV3ipZ36LbHWU[3ujcUlxXnmsdF:4c1qEVXuLR3esTlOZNFuEVXx6R3esTjJ8d{pzOEpjXWebNGqZTmS[XGqtWViLemqJWnqlRU1:Jku{PkF4NkpjR3mC[1mERVqiW2moT1VybGpzWU[QcXitZliDcHOq[36jXGJyZ32LelxzcIWbcUivT2NxL2pzWkCWcW[vWH2HeGqU[4CMV1J4R3esTlOWNXibNmV3U32lcHSGNY[bS2[{T1OleHSJWom[cUi3ZkKLfmqZTkKbXFm6TomseGCuSn2lS2[6WUKHNmqXRomjNmJyXUOSc1qJXnikblGxU4ewTlOZNFuKR1GoTVGsQTJ8d{pzOEpjXX2XcXJ{TnyWNlZzXmWPbHSIWn6jN1p2Jku{PkF4OkpjR3mC[1mERVqiW2moT1VybGpzWU[QcXitZliDcHOq[36jXGJyZ32LelxzcIWbcUivT2NxL2pzWkCWcW[vWH2HeGqU[4CMV1J4R3esTlOWNXibNmV3U32lcHSGNY[bS2[{T1OleHSJWom[cUi3ZkKLfmqZTkKbXFm6TomseGCuTnybcUm6Xm[PbHSuWlS[XGKtXkJ6fXWU[3ulcV[6UVOsO1Oob1qnVX:oTVOC[1OSQU1jP4N7NkR7JmmYXkCbXFqVXWibcGFzSkCbW3S3Z36sQTJ8d{pyO{J7JlOqRXeKR1GLZWe[[1uGNXibNmV3U32pcHKJRnykbXevZmiTNXOuTo[NNny2Xn15cluUNDubNmZxWX2XcmSuSoSbV3exT2ODO1Oob1qEWUGpXkKWOl:u[HylSUG3XleXd1uE[ISlTG[6XX15enJzToqbXFpzXmiKfVq6b4SRcV[u[FeXfWVzSkKbWV6p[FeXcnJ{TkWMR2JzXWiKe1uVd1uEVXx6R3mC[1mERVpjP4N7NkR7JmmYXkCbXFqVXWibcGFzPYSjW3xxWmiLdzJ8d{pyO{Z7JlOqRXeKR1GLZWe[[1uGNXibNmV3U32pcHKJRnykbXevZmiTNXOuTo[NNny2Xn15cluUNDubNmZxWX2XcmSuSoSbV3exT2ODO1Oob1qEWUGpXkKWOl:u[HylSUG3XleXd1uE[ISlTG[6XX15enJzToqbXFpzXmiKfVq6b4SRcV[u[FeXfWVzSkKbWV63ZmdydHSHWomjR3es[H2HfV2Eb{eE[3uL[mGw[1mERXeEVU1:Jku{PkJ1PjK[XGZxZkJybHSIcHqTS{l{Zn25emmYVU1jP4N7NUZ5PjKEbVGoTVOCTnGYXXeMSUGpXkKWOl:ubHyjTFKtZ3mocnKZVkGkcVq3UEKteWquPH6MV{BsXkKXNGWuWn6VcV[1XmOodFuURkeE[3uLR2VybGpzWU[QcXSt[FVyemqIWoOMR3S1[FiXfWmuPI[jNlq7XmiLNmqZTYmLfXu1VH2HNXSIPYS[XGKxXUCTenRzOYOjNl[sT1OsO1Oob1qnVX:oTVOC[1OSQU1jP4N7NkR7JmqIPUOjcYi3XWeTRnKuVlqjcl5xXWe5dzJ8d{p2O{Z7JlSSc3eKR1GoTVOC[1mEVkK[XFm4W4mlNXNzWomjcV[1XmOl[FmFNHeLfXN4SGGw[1mERXeKR1GoTVOTNmmZTYeYfXS4XWiPfnRzPYmbR3SlTVRx[1q6Z{eFVX:oTVOC[1mERXeKR2JzXWiKe2e6[HujN3S2Zld6bGqHPYCbR3SlTVRx[1qJXnikbll4SGGw[1mERXeKR1GoTVOTNmmZTYeYfXSuZWe5cFpyNHeRV1GvZmiTNXOuTo[LfoOPR3mC[1mERXeKR1GoTlibbHOrRnKLNl6p[FOl[FmFNHeLNkFx[GiLbXK6Z{eFVX:oTVOC[1mERXeKR2JzXWiKe2e6[IekcUmsTkFx[2CURX6jW1[vXmd2NHK6Z{eFVX:oTVOC[1mERXeKRUCMTVOC[1mERXeKR1Gs[GiLdFmFNHekS1[6Z{KX[nSZToOMSUGpXkKWOl:u[HylSVqpZ{KXWnOue3:MV3t4SGGw[1mERXeKR1GoTVOTNXOue3eRV1Gs[GiLdGe6[H:jN15xTkFxeVqJWomiWoOvZ1eHNHGE[HSQe{CMTVOC[1mERXeKR1Gs[GiLd1mFNHelTFqxZmOob3SZToONR1GvUImkdF:4NFuKR1GoTVOC[1mERXulcV[6UV[{cnNzcECbV3SlTVRx[1qJWomjSIOPR3mC[1mERXeKR1GoTlibbHOrRnKLNny4TkFx[2CURXuZNV6HWXybSmWtd36WNG[UWnuXV2hxSlWTSlmvXGS{UlOqRXeKR1GoTVOC[zJ8d{pyOkpjXld6N3KufI[[W2KSXWelcDJ8d{p2OEJ1PjKEVUCMTVOC[1mCcICbbVGwWGeHcmqVc{[iS2[{Z1eXfVuE[ISlTG[6XX15enGYOX2jfXOxUGR2cmqZVmObW3SQXWdycFuEb{mRV3SzZ36Td3FzSoKkbmGvT2ODO1SSc3eKR1GoR2FxT1mERXeKRXuLTlibbHOrUXeRV1GvToq{UlOqRXeKR1GLR2OTc3SINYOKSECoTomkO1SSc3eKR1GoR2GsUlOqRXeKR1GLR2etcVmE[3ulcV[6UlRxPVq6Z4CFVX:oTVOC[1OSb1qLTGqpZ3qS[2CURlKkcmKxZkF6Um[JWom[cUmnV1eXd3OIWomZNGKp[FeGOl:u[HylSV63Zn2bdGq6[4CNWEWvXmiTSXJ{[IWjS{mpXlVycHSIbI[bR3exU4dxT1SSc3eKR1GoR2GtdGqqRX:LTGqpZ3qKdFmCNFuKR1GoTVGsTnW4NFuKR1GoTVGsTlOUVoe[XGKwTVRx[1qJXnikblG1VH2PfWqYSkCbWlKp[Feoc1uVd16EbVGoTVOCTlOSb3ulXFq{TVRx[1qJXnikblG1VH2lcHSGVo[lNkW{ZkKHb2[ZToOXNnxxZVV2emFzSnqiS2WwT2S{UlOqRXeKR1GLR2hxUlOqRXeKR1GLR2eXd3NzWXeFVX:oTVOC[1OScEeFVX:oTVOC[1OSb1qLTG[6ZlOCPVmGNXibNmV3U32lcHSHWomjR3exU4dxT1OSb1qEV2JyZ324[2CURoqlTFqnZ32Xe3KISnqbV3eqXWeTeHGYOI[KbYeoTXmKd1mEVkGkcYexU4dxT1mERXeKRXuL[mFxT1mERXeKRXuLSGGw[1mERXeEVXxxZ36s[1SSc3eKR1GoR2GtO1SSc1qKR1GoTVGsTnN{[IClS16wTVOob3SuSomPR3uPR3es[1mERXeEVXx4SGGwTlmERXeKRXuLR2FxT1OURXeKR1GLR2Gsely6RmSlS1[2XleHfWqERn2iW4itTVelcHSERnqjNkVxXmd2NHO4NFuEV1GoTVOCTlOScHq[XF6tTVWTenRzOYOjNl[sWGeXNHGIPXukfn93VnutUWKXPViTWmKnVUB6U2[GWl:XSl13SGGwTlmERXeKRXuLR2GtdGqqRX:iW{WxXEKlcHSE[36[W4i{ZkOl[nSZToOZNmq3Z1eXeVq6b3eRWECoToqGcluSNFuEV1GoTVOCTlOSb1qEV2Kw[Fdyd1mFNHebcXy{XmZ6cmqZVn[[Nkm2[FeXeXSJUX:LTG[6ZlOsO1SSc1qKR1GoTVGsTlOScHyjTF6tTVFxT1OURXeKR1GLR2GsTlOUVkK[XFm7TVRx[1mGNXibNmV3U32pcHKJRnykbXevZmiTNXOuTo[LfXu1VHx6[luETmSbXGJxZWd2clmE[HijS4i3[EF6NXOufH[bcUm4Xmd1clmIcIqKS2KxZ{KHbXKIWnuNbVmxU4dxT1OURXeKR1GLR2GtbXOuWniifoOPR3es[1mERXeEVXuLSGGwTlmERXeKRXuLR2N5elmGVo[lNkW{ZkKHb1mIPUKbXFmoZ{J6bnFzWkCFVX:LTVOC[1mCb1qEW16pZ{KW[2KIPUOjcYi3XWeTUmqZVn:jNmK7U3qxWGRxUlyTWmF3R2GsTlSSc1qKR1GoTVGsTlOSb3ukcW[7[Ge5NGSvWoS[cW[6VGSCO1SSc1qKR1GoTVGsTlOSb3ulcV[6UYpxclq7d16E[{CMR2OC[1mERVqEVXuLTliLcHOZWnykN2GoVGODe3OuWn6ZN1qtZ1e5bGlzWX:LfUmw[FiTe1uJUYCmflG{UWhxOmiEPXONNYSmXFN6[FuqPH6NR1GvTom4[1qJWomjR3t4SGGwTlOSb1qEVXuPR3esTlOSb1qEV2K1XWiTbnGIWoqKSECoXWiLfWmZb3:MWIOPR3esTlOSb1qEXFK6Xmel[nKYSkC[NnewTkCD[VuFPE[iTGJxZ1Swely6bz:MSoSmUEFxdluWRoCLfYeoTliXfXKEe3eLS{Gp[FePc2qZUYCQe{CMR2GsTlOSb1qLS3i3Z{OS[2CURXujW1ZxXUKpcHNyd4iZWIOPR3esUlOob3eKR1GoR2GsTlOUVn2kR1F6TVebfnJzUoKjN1KtZnmob3GIPYqlR4eoU1SCd1mEVombXF5yZliTU3SYNXmbXFm{TVOTcHOvTo[kb{GtZ{OPbGpzWYCQe{CMR2OC[1mERVqEVXuLZWe[[1uESXubclGxSGGwTlmERXeKRXuLR2GtO1SSc1qKR1GoTVGsTlOSb1qLTGqpZ3qO[2CURXubXFq6ZkOLUmqZUoq[W3StU4dxT1OURXeKR1GLR2GsTn[SNFuEV1GoTVOCTlOSb1qbW4i7XmFxT1OURXeKR1GLR2GsTnW4NFuEV1GoTVOCTlOSb1qEV2K3[GiS[1mFNHeKb3SHWlOCb3OuWoilW2[7[FODTW[HVmGNflW2UW[5fWiIOHmQe{CMR2OC[1mERVqEVXuLR2OTenSZVXeNbkCoTXupenN{VU[KR2KwZkOPNGiJTnOjbVl4SGGwTlmERXeEV1GLR2GsTlOUVo[lXGGoUHpx[1msUo[jcUWtXUOTdHJzOE[KSV6{ZkOPcGiJTnOjbVl4SGGwTlmERXeEV1GLR2GsTlOUVo[lXGGoUHpx[1mtfImZS{SqU4dxT1OURXeKRXuoR2GsTlOScH2lN1qx[FeWc1qIXoeNR1GsZkOXNFuVd16E[3uoTVOCTlmCb1qEVXuLTlepcGmYVnykbVF6TVOLeXJ{VXemW2ZxTXq{UlOob3eKR1GoR2GsTlOScEOiS3y{XmOCc1mYXnyjNmmwTlebe1uUb16E[3uoTVOC[1OSb1qEVXx4SGGw[1mERXeKR1GoTVOC[1mERVqEVXuLR2OTd3GYOXyRW2qvXmiTfluEVn2kR4e5UXqodF:4NFuKR1GoTVOC[1mERXeKR1GoR2GsTlOScICbbVGwTle5dHKuWUmRV1qkZ3y5eVmqRX2LbVGsZVeXbGqIWomRWECqZn16NFmJcHylR1mxTVi{UlOqRXeKR1GoTVOC[1mERXeKR1GoTVOCTlOSb1qEV2KwXmeHb2qZTXeRV1GqZ1eHfnNzWnuKboOPR3mC[1mERXeKR1GoTVOC[1mCb1qEVXuL[mFxT1mERXeKR1GoTVOC[1mERXeEVXuLR2GtdGqqRX:LS3itXWeTcHOrNEmKclKpZ{OPcGqETYCKTIOPR3mC[1mERXeKR1GoTVOC[1mERXeKR1GLR2GsTlOUVn:lS{G{UHpxb3KIcIWbWIOPR3mC[1mERXeKR1GoTVOC[1mCb1qEVXuL[mFxT1OURXeKR1GLR2GsTlOZNF6E[3uoTVOC[1OSb1qEVXyuXUK5enNzWX:LS2q4T2S{UlOob3eKR1GoR2GsTlSSc1qKR1GoTVGsTlOSb1qLS2qxZ36PNFmFNHekN2K6Z1d6fluEVn:lS{G{UFOCcmCESlWVNF6WW2[DSlq6b{eFVX:LTVOC[1mCb1qEVXuLTle5bHN{VXeKSECoZ{OTfXOIPYqMR1GsZViTeHKEe3eLfoe3ZViTeHKFOH6MV4N{U4dxT1OURXeKR1GLR2GsTlOUVn:lS{G{TVRx[3N{WnmkN2K6T1OTc3SINYONR1GsXn2tfXN{VYOKR2K{XWiPNFyUVn2iXFq7[FOsO1SSc1qKR1GoTVGsTlOSb1qEV1GoTVOCTlOSb16E[3uoTVOC[1OSb1qEXECPR3es[1mERXeEVXuLXX6LcGmYd{eFVX:LTVOC[1mCb1qEVUCMR2OC[1mERVqEVXu3UImDSXJ{[IWjS{mpXlODN3GZVn:KSlKKWVODSnWJVnyjcl6xZkJ1[2FyWmOVRUCMR2OC[1mERVqEVXyrXWiPcFmGVo[lNkW{ZkKHb2SYWkCiS{msZ4qwOmFyWmOVSH:PR3es[1mERXeEVXuLR2FxT1OURXeKR1GLR2GsTnGYXXeMS2pyZn2PNHGYPYWZNmZ1ZWiPNHO6[36[N2[6ZlZ6dHKucECLfXuxSGGwTlmERXeKRXuLR2GtO1SSc1qEVXuLR2GsTlqIUn:KSECoXUOXfXKHPYCjcXxxT1OTNXOue4CQe{CMR2GsTlOSb1qEW15yZ325[nNzWkCjN1JxT1OTbnGEe3eSNW[UWFV6VW[HPWWUWUGHWEGXWVyERYiOSFGxU4dxT1OSb1qEVXuLR2ePNXOufH[kNmZxZkODNFuEVnqiR4eoVUGXV2SGPWGXSkmIWEC5UWRy[F2VNF6DWlWtVGSqe3elTFpyXmOsO1SSc1qEVXuLR2GsTml{WomjSkm7XmiTenOJVX:LS16wUFODSG[XTl2VNVKWXEGLSm[HWmOVcGKUVWV2WGKsWmONR1JxZ36XcFuVd16E[3uLR2GsTlOSb3uiTGK1ZlOCPVmIUkGkcYinXmipcGm6[3u[NnexU4dxT1OSb1qEVXuLR2etcVmE[3uiTGK1ZlRxPWCYXnijTF6tT2FxT1OSb1qEVXuLR2Gsb3SuSomOfVF6TVePNXOufH[bXFq6ZkOKc1qIUn:MWIOPR3esTlOSb1qEVXyr[GiLd2hzUoOjN16tT1OTbnGEb{eFVX:LTVOC[1mCb1qEVXx6TVFxT1OURXeKR1GLR2GsTmqYfIqbV1GPR3es[1mERXeEVXuLR2i{UlOob3eKR1GoR2GsTlOSb3ulcV[6UYmCPVmGNXibNmV3U32pcHKJRnykbXevZmiTNXOuTo[LfXu1VHx6[luE[FSXWlqOTVetflmIOY[lR1KxZn6PNGmYfIObW2GvT2S{UlOob3eKR1GoR2GsTlOZNF6E[3uoTVOC[1OSb1qEVUCMR2OC[1mERVqEVXyqZ32XbHG7d16E[3uoTVOC[1OSb1qFVX:LTVOC[1mCb1qEV{i3TVWPfWqYSkCbV1K2Xmik[2SYSn6bW{VxZomDdHKvUkC[W{WrXmFxT1OURXeKR1GLR2GtbmmZUnyKSWK3[EJ2d3JzSnuVW2ZxZVd6b3O7c{[TSXyUVmWPWWhxSlSSNG[VWYqwUlOob3eKR1GoR2GsTlOSNFuEV1GoTVOCTlOSb1qiW2moT1WHfXSIcI[ZNEGW[GiLbXJyPVmbW4i4XmiL[mKISkC[WH93XkKXNGFzPYWbcXyvT1OseGCucIqWS1ZxXUKpcGqE[4CMVUCMR2OC[1mERVqEVXuL[YdxT1OURXeKR1GLR2GsTlOURXeKR1GLR2GsTlSSc1qKR1GoTVGsTlOSb1qLTFK6XmibWmWsb3eRV1GsXEGPSmWtXl[WcIOvWXuXVm[WWmSXSkmXWXuscmiVd16E[3uoTVOC[1OSb1qEVXusZ{OTbHSIWXeRV1KPXWelcF:rdH6bXGKV[FeHNHGYUmSlS1ZxXmOodF:4NFuEV1GoTVOCTlOSb1qEWUGpXkKWOl:vTnykNmZxT1OsO1SSc1qKR1GoTVGsTlOSb16E[3uoTVOC[1OSb1qEVXy3XXx6fnSISomlR3exU4dxT1OURXeKR1GLR2GsTlSSc1qKR1GoTVGsTlOSb1qEV2KnWUCXV2[sWmOYfXSUVm[HWmKXUmWZNW[UV2Ol[FmFNHekTFqtXkF6fWqZRoO[W16tT1OkenGJVkCkR3i7T2i{e1yFSkmQcIe3XFN6Zmite4[ZV3:3Tom4[1q6Z4OKR2JyZ324dF:4NFuEV1GoTVOCTlOSb1qEVXyPXWelcF:rdImlW{SwT2S{UlOob3eKR1GoR2GsTlOSb16E[3uoTVOC[1OSb1qEVXusZViTeHKERUmKS{mqXEKlcHSHPXqjNkVxXmd2NHO6[4CQe{CMR2OC[1mERVqEVXuLR2d6bWhzWoWbSkmrZleXbHKq[4CQe{CMR2OC[1mERVqEVXuLR2VybGpzWU[QclqtZ{OTenOuWmSlS1ZxXmOob3N{VnilS2WxU4dxT1OURXeKR1GLR2GsTlOSNFuEV1GoTVOCTlOSb1qnVUCMR2OC[1mERVqEVXuLXme5fmqURV6E[3uoTVOC[1OSb1qEXIOPR3es[1mERXeEVXuLR2Gsb3SuSomOfVF6TVVybGpzWU[QcXitZliDcHOq[36jXGJyZ32Lelq6b4SRcEmnT1OLS3GYfHyKSUGpXkKWeXOIbIeKS3y7TVd2enSERoe[XGKrZVeXb1mqb{eFVX:LTVOC[1mCb1qEVXx6SGGwTlmERXeKRXuLR2GsUlOob3eKR1GoR2GsTmmvTny[W4N4SGGwTlmERXeKRXuLR2FxT1OURXeKR1GLR2hxUlOqRXeKR1GLR2hxUlOqRXeKR1GLR2ePbHSIUn:KR3iH[VePcHOJVoCjNkSoTleWdFSSc3eKR1GoR2GtO1SSc3eKR1GoR2GsTlqJXnikbl2oVGOCb2qUNDubNmZxWGeXfnNzSn6bV3exU4dxT1mERXeKRXuLR2iLcHSJWomjboOPR3mC[1mERVqEXECPR3mC[1mERVqEVUCMTVOC[1mCb1qiW2moT1OTNmmZTYiMV1GsZViTeHKEOEmKR1l5TWNxeFmETXeNbVK2ZkOkc1uURYWKR1moUGNxL1mrd16EbVGoTVOCTlOYcH2KR3es[H2HfV2qb3ebcXy{XmZ6e3SZVn[[Nkm2[FeXeXSJUX:LTFKp[Feod1mEVn:lS{G{T2S{UlOoNFuKR1GoTVGsTnGYXXeMR2JzXWiKfmCVNH6LfVGuTnmDdHNyPYqlTFqxZn2kc1qIbECjW4exTVO[cVmE[3uiTGK1ZlOGPVq6Z4CMVUCMTVOC[1mCb1qEV2JzXWiKflmFNHekcUlyZn2Sc1uJUkCkcYitZnmob3GJVoSjR3uoUImCc2qufI[[XGGxUWSCfV6Eb4OKSFmxU4dxT1mERXeKRXuLXme5fmqURoCbbVGwTlibbHOrUUmRV3OvTVO[cVmEVn:lS{G{VGRxclq6b16EbVGoTVOCTlOSb3ulcV[6UYmCPVmGNXibNmV3U32pcHKJRnykbXevZmiTNXOuTo[LfXu1VHx6[luE[HyjXFJx[WODenSZVoelXGGvT2S{UlOqRXeKR1GLR2FxT1mERXeKRXx6TVeXd3NzWXeme3:LR2Gsb3SuSomOfVF6TVVybGpzWU[QcXitZliDcHOq[36jXGJyZ32Lelq6b4SRcEmnT1OlXnJ{WomKS2K3[EJ2d3JzSnuKSXyGTVetflmIOY[lR1KrZkOLfWqYUkCNbXOxU4esTlOob1qnVUCMTVOC[1mCb{1jP4N7NUZ7JnGYOXubXHiDXUOTdHJzOE1jP4N7OURxPjKFVX:LR2etcVmEbF6[W3StU3qxc2qYfIebXFmwTkJyNHSZTnmjfUmxZn2belq6b4SRcXSt[F[LcGpxOXijW2WwT2Os[3W4NFuEVXuLTlibbHOrRYSRclqtXlOocnKZVkGkcVq3UEKHb3KYcIWiTGK1ZlZ6eHSJWom[cUi3ZWd2b2qZ[36MWIOPR3esTn[URnyjTF6tTVi{UlOob1qEVUCMR2GsTlqINY[bS2[{TVRx[2SYSn6bWH93XkKXNGSYPXubW4ewTkJyNHSZTnmjfUm1[FiXfWmuPH6MV{BsXUK5cGmZTlKjS4iSXWelcHO6[4CQe{CMR2GsTlSSc1qEVXus[H2HfV2ENDubNmZxWX2XfnOIPYWkNmWwT2NxL3NzWkCUS2[pXleXfVuE[FmXSmKSUIqGeV2UZ4OLfmG4UYmDS3J{TnmiW2KsXmd1cluVd16E[3uLR2OTNmmZTYeNWEWvXmiTV2qZUoejNkW7XmOodFyVOYqbXGKEZkKTOVuERXulcV[6UVNxL3R{TnikR3iPXWelcF:rdH:bW4i4XmiKc1pzNUClXFqqZomkdFyVOX[ZfXevTV[lfXJzOX6KS4ixXUKXeXNzWXelTHy4XmO4[3KIcHqbW{W7XmODbnJzVnykfVKpZ32W[3KuPUCKS{Gp[FePc3GYOX6KTGKwZWiO[3GIPYqlR{SvT2OsdF:4NFuEVXx6SGGwTlOSQU1jP4N7NUZ7JnN{cIW[Nni6ZkJ2dHWuWU1jP4N7NkZ2NkpjSGGw[1mERXeEVUCMTVOC[1mCb3ukTFqt[H2tcHRxSomkcVZ2TVRx[1qJXnikblG1VH2lcHSHRombXGqxXmilSGmZVnybNkm6[WWtb3O6[4CQe{CMTVOC[1mCb3ukTFqt[H2tcHS6RUmKS3y1Z1e5emqIWX:LfYevUFOCb3OJTnylcXyt[ECHfXOuSkWMWIOPR3mC[1mERVqiW2moT1OTe3OuWkKiW2Z{VGRxe1uURXukTFqt[H2tcHS6RUmKR3O1UWOkO1SSc16EbVGoTVOCTlqJSkGbXFp2V1d6eFmFNHeLfXN4SGGw[1mERXeEW2q3Z32XbGlz[3eMR2JzXWiKNFmISoqKR2K7[Fd6fWqWcHuMV1J4SGGw[1mERXeEVXusZ2iXcHOvcFmjNkCoUHpx[1mscF:WNG[UWlODTmStVmCKS1GqUHmTNmmZTUGNbVq1[FiXfWmuPXeKR3ioZ{OTenOuWn[iW2KoUFOD[3OuWoilW2[7[FZ6e2mZVn:[R3uoWnuHUW[WWmSKR3eqUHmTfnSIPYmbWXysUHmKd1mEZ4[LfXt4TVOKO1SSc3eKR1GoR2hxUlOqRXeKR1GLSGGw[1mERXeEV2K5[GeXfXWWbI[jWWKtXnmCPVmETlqVcF6HWXyS[2OWOWWVfVKoTXl1b3SuSomPV{SqZmiTNXOuTo[[R1GwXViPNHJ{TnyZNnysXVO4[2mJTnykXG[tZ{OT[nOISkCiS1GxTV[bRmSHWl[WfVGwUVO4[1q6PH6MWIOoTXq{UlOqRXeKR1GLSGGw[1mERXeEV2K5[GeXfXWWcIWkfVF6TVOLTmStUl[WcGGoV2V2WWS6RneKbUSs[H2HfV6UOHmjXGJyZ32LemmERX:[TG[6ZlZ6fWqZ[ImiXGKtXEKtb2mEe3e[TF5xZkOLcGhzcHu[R4eoXVePbHSIWn6jN1p2XEKtb2mEe3e[TFK6ZkKTNWl{Vn[iW2KoUFOD[3OuWoilW2[7[FZ6e2mZVn:[R3uPR3esTlOSb3eKR1GoTV[PSmSGWlSXR1Ko[GiLd2h{TnylN1qx[FeX[nGYVneNR1KoZ{OTenOuWn[iW2KoUFOD[2lzSkCbW3S3Z36t[nGYVneNR1KoZ1iLemqJWnqlSkmxXleCd1mIRombXFZyXmiPNGh{RnilS3ioSGGwTlOSb1qKR1GoTVODS2WsPV6KS1GqUHmTNmmZTUGNbVqrZkOLcGh{WomjSkm6XmilfXGZVny[RUCMR2GsTlOURXeKR1GoWkCpSmWsWXeFVX:LR2GsTlmERXeKR1GoTVOoUlOob1qEVXuoTVOC[1mERXeKR1GwXVePbHSIWn6jN1p2XEKtb2mERlqVbVGwTXmCeVmEVoekcWZzZWeXN1mERYWKR1mxTVWHU2KERnekTFq3XliXbnSHPYCbS1GoV2[O[2StWl2VR3uPR3esTlOSb3eKR1GoTVOC[1uUTYWFVX:oTVOC[1OSb1qEV1GoTVOoc1qJXnikblWoTWRx[1q6Z4CKSEioTXuHU2KERX:[TF5xZkOLcGhzcHu[R1KQWEGS[2OWOHeMR1moUHmCb3SuSomOV1G2TVOKdFuUTXeQbVGqTXmsUlOob1qEVXuoTVOC[1mERXeNbVqDWHuSUlOqRXeKR1GoTVGsTlOSb3eKR1GwSGGw[1mERXeKR1GLR2GsTlmERXeKR1GwXViLcHOZWnykN2KnZ1eHNHGIRXeVb{mWTVWtU1mEbGSTWYiHVUGS[2mJTnykXG[tZ{OT[nOISkCiS1GoVnyLVGSURneKbUSs[H2HfV6UOHmjXGJyZ32LemmEb4CFVX:oTVOC[1mERVqEVXuLTVOC[1uUTUeFVX:oTVOC[1OSNFuKR1GoTVGsb3OZWnykcnyGXme4[2CURXmTSW[OVm[TSlmGXmOVNECoXVOKeVqJXnikbmW2TX1yNHSZTnmjNlGPR3mC[1mERVqKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeXNHiHWXuW[1mEbHe[NlZxXmelenOvcH[iW2KoTVV2VG[ERlqVbVGwTXl1[1qJRombXGqxXmik[1mEOHeKbXuoVWV2SVmIRoekcUms[GePNGhzcHu[R1KLWYmDU2[WfF2MV1l4SGGw[1mERXeEVUCMTVOC[1mCb3ukXG[tZ36tSWqYfFmjNkCoVGOCbWKGWl2TWmKHTVWbV2RxNHe[R1m2TlibbHOrWYWKcUFx[GiLbXJzRXeXNHiHWXuW[2mJTnykXG[tZ{OT[nOISkCiS1F6Tol5cl:6TUeFVX:PR3mC[1mERVqLS163Zn12cGl{VoCjNkSoVGODUmmY[HyQboCvXmiTWHGYOX6jS2ZxZkJ1c1pzUo[kcWW3Z32XfnJ{Wom[NmWvT2NxL2pzWkCSNkm2Zn2XbnSIcI[jbXevXUJ6fWqXPUOkcXxxXmOkdF:4NFuFVX:oTVOC[1OZVommV1J4SGGw[1mERXeEVXuPR3mC[1mERVqEV2KrZkJ2eWqYUkCiW{m2UGR2fHSYWommV3eqWUGTRmWtVXeXSlqDWHyPRmFyVlqVNESqT2S{UlOqRXeKR1GLR2FxT1mERXeKRXuLTleteWlzfEGbS2[KZkJycHOISn6bV1F6TVOTNmmZTYeNWEWwZkJycHOISn6bWXy7V2d2bnKJWnubW2GwT2S{UlOqRXeKR1GLR2FxT1mERXeKRXuLZWe[[1uEVoCjcV6{[GeTcGOIPYSbXFKpXkKW[1qqXXeKV2JzXWiKfluURXu[Nkm2Zn2XbnSIcI[jbUBsZ2iXcHOvb3:LTFZyXmiLOWOIPYSMWIOPR3mC[1mERVqEW3yuTVOob3GYOXqjTG[sXmWpenKYWoe[W3StTVO[cVmEVkK[XFm4UGR2cmqZVl6lW4hxZWiPNHJ{TnylcXyt[ImodFuURXu[Nkm2Zn2XbnSIcI[jbUBsZ2iXcHOvb3:LTFZyXmiLOWOIPYSTS2[uT2S{UlOqRXeKR1GLR2OTbnJzOYWbW15xZWd6eVyVOYilW2[6[WOob3OZWnykcnyLZn6OdF:6RXeFVX:oTVOC[1OSb16EbVGoTVOCTlOYcH2KR3epTleteWlzfEGbS2[KZkJycHOISn6bV1GuTnmCb3SuSomOfXuoTlePenKuOXy[N2KxZkJ1eGCvSkGbXFp2T1OTfHSYWommWWKtZlWpenKUb{eFVX:oTVOC[1OSb3u[Nkm2Zn2XbnSIcI[jbUBsZ2iXcHOvb3:LTFZyXmiLOWKIWoOMWIOPR3dxT1mERXeKRXx6TVePbHSIUn:KR3iH[VePcHOJVoCjNkSoTleWdFmJd16EbVGoTVOCTlOUVnqjNkW2XmePNHGYPYWNWEW5[GeXfXWU[3mWb{mOWFWLRmFxd3mMWIOPR3mC[1mERVqEXGKwZ316N1mEVnyQe{CMTVOC[1mCcEmFVX:oTVOC[1OSNFuKR1GoTVGsb2lzPYWjcW[r[FetenKqNDukXG[tZ36sc1msUmCVWUGLWlOKdF:4NFuKR1GoTVGsUlOqRXeKR1GLJku:
app/code/local/Artio/MTurbo/etc/config.xml CHANGED
@@ -10,7 +10,7 @@
10
  <config>
11
  <modules>
12
  <Artio_MTurbo>
13
- <version>1.1.0</version>
14
  </Artio_MTurbo>
15
  </modules>
16
  <admin>
@@ -178,4 +178,4 @@
178
  </mturbo_mturbo>
179
  </jobs>
180
  </crontab>
181
- </config>
10
  <config>
11
  <modules>
12
  <Artio_MTurbo>
13
+ <version>1.1.1</version>
14
  </Artio_MTurbo>
15
  </modules>
16
  <admin>
178
  </mturbo_mturbo>
179
  </jobs>
180
  </crontab>
181
+ </config>
app/code/local/Artio/MTurbo/etc/config.xml~ DELETED
@@ -1,181 +0,0 @@
1
- <?xml version="1.0"?>
2
- <!--
3
- /**
4
- * @category Artio
5
- * @package Artio_MTurbo
6
- * @author Artio
7
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
8
- */
9
- -->
10
- <config>
11
- <modules>
12
- <Artio_MTurbo>
13
- <version>1.0.11</version>
14
- </Artio_MTurbo>
15
- </modules>
16
- <admin>
17
- <routers>
18
- <mturbo>
19
- <use>admin</use>
20
- <args>
21
- <module>Artio_MTurbo</module>
22
- <frontName>mturbo</frontName>
23
- </args>
24
- </mturbo>
25
- </routers>
26
- </admin>
27
- <adminhtml>
28
- <translate>
29
- <modules>
30
- <Artio_MTurbo>
31
- <files>
32
- <default>Artio_MTurbo.csv</default>
33
- </files>
34
- </Artio_MTurbo>
35
- </modules>
36
- </translate>
37
- <menu>
38
- <system>
39
- <children>
40
- <mturbo translate="title" module="mturbo">
41
- <title>M-Turbo Management</title>
42
- <action>mturbo/adminhtml_check</action>
43
- <sort_order>91</sort_order>
44
- </mturbo>
45
- </children>
46
- </system>
47
- </menu>
48
- <layout>
49
- <updates>
50
- <mturbo>
51
- <file>mturbo.xml</file>
52
- </mturbo>
53
- </updates>
54
- </layout>
55
- <events>
56
- <catalog_product_save_commit_after>
57
- <observers>
58
- <mturbo>
59
- <class>mturbo/observer</class>
60
- <method>afterSaveProduct</method>
61
- </mturbo>
62
- </observers>
63
- </catalog_product_save_commit_after>
64
- <catalog_category_save_before>
65
- <observers>
66
- <mturbo>
67
- <class>mturbo/observer</class>
68
- <method>beforeSaveCategory</method>
69
- </mturbo>
70
- </observers>
71
- </catalog_category_save_before>
72
- <catalog_category_save_commit_after>
73
- <observers>
74
- <mturbo>
75
- <class>mturbo/observer</class>
76
- <method>afterSaveCategory</method>
77
- </mturbo>
78
- </observers>
79
- </catalog_category_save_commit_after>
80
- <core_abstract_save_commit_after>
81
- <observers>
82
- <mturbo>
83
- <class>mturbo/observer</class>
84
- <method>afterSaveCommitUrl</method>
85
- </mturbo>
86
- </observers>
87
- </core_abstract_save_commit_after>
88
- <admin_session_user_login_success>
89
- <observers>
90
- <mturbo>
91
- <class>mturbo/observer</class>
92
- <method>adminLogin</method>
93
- </mturbo>
94
- </observers>
95
- </admin_session_user_login_success>
96
- </events>
97
- </adminhtml>
98
- <frontend>
99
- <events>
100
- <customer_login>
101
- <observers>
102
- <mturbo>
103
- <class>mturbo/observer</class>
104
- <method>customerLogin</method>
105
- </mturbo>
106
- </observers>
107
- </customer_login>
108
- <customer_logout>
109
- <observers>
110
- <mturbo>
111
- <class>mturbo/observer</class>
112
- <method>customerLogout</method>
113
- </mturbo>
114
- </observers>
115
- </customer_logout>
116
- <core_block_abstract_prepare_layout_after>
117
- <observers>
118
- <mturbo>
119
- <class>mturbo/observer</class>
120
- <method>systemCheck</method>
121
- </mturbo>
122
- </observers>
123
- </core_block_abstract_prepare_layout_after>
124
- </events>
125
- </frontend>
126
- <global>
127
- <models>
128
- <mturbo>
129
- <class>Artio_MTurbo_Model</class>
130
- <resourceModel>mturbo_mysql4</resourceModel>
131
- </mturbo>
132
- <mturbo_mysql4>
133
- <class>Artio_MTurbo_Model_Mysql4</class>
134
- <entities>
135
- <mturbo>
136
- <table>mturbo</table>
137
- </mturbo>
138
- </entities>
139
- </mturbo_mysql4>
140
- </models>
141
- <resources>
142
- <mturbo_setup>
143
- <setup>
144
- <module>Artio_MTurbo</module>
145
- </setup>
146
- <connection>
147
- <use>core_setup</use>
148
- </connection>
149
- </mturbo_setup>
150
- <mturbo_write>
151
- <connection>
152
- <use>core_write</use>
153
- </connection>
154
- </mturbo_write>
155
- <mturbo_read>
156
- <connection>
157
- <use>core_read</use>
158
- </connection>
159
- </mturbo_read>
160
- </resources>
161
- <blocks>
162
- <mturbo>
163
- <class>Artio_MTurbo_Block</class>
164
- </mturbo>
165
- </blocks>
166
- <helpers>
167
- <mturbo>
168
- <class>Artio_MTurbo_Helper</class>
169
- </mturbo>
170
- </helpers>
171
- </global>
172
- <crontab>
173
- <jobs>
174
- <mturbo_mturbo>
175
- <run>
176
- <model>mturbo/observer::automaticDownload</model>
177
- </run>
178
- </mturbo_mturbo>
179
- </jobs>
180
- </crontab>
181
- </config>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Artio/MTurbo/sql/mturbo_setup/mysql4-install-1.0.0.php CHANGED
@@ -24,6 +24,8 @@
24
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
  */
26
 
 
 
27
  $notification = Mage::getModel('adminNotification/inbox');
28
  $notf = array( 'is_read'=>0, 'date_added'=>date('Y-m-d H:i:s'), 'severity'=>4, 'url'=>'http://www.artio.net/magento-extensions/m-turbo-accelerator' );
29
 
@@ -35,7 +37,7 @@
35
 
36
  $installer->run("
37
 
38
- CREATE TABLE IF NOT EXISTS `mturbo` (
39
  `mturbo_id` int(11) unsigned NOT NULL auto_increment,
40
  `url_rewrite_id` int(10) default NULL,
41
  `store_id` smallint(5) unsigned default NULL,
@@ -48,7 +50,7 @@
48
  KEY `fk_url_rewrite` (`url_rewrite_id`)
49
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
50
 
51
- INSERT INTO `core_config_data` (`scope`, `scope_id`, `path`, `value`) VALUES
52
  ('default', 0, 'mturbo/previewcats', ''),
53
  ('default', 0, 'mturbo/productcats', ''),
54
  ('default', 0, 'mturbo/homepage', '1'),
24
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
  */
26
 
27
+ $prefix = Mage::app()->getConfig()->getTablePrefix();
28
+
29
  $notification = Mage::getModel('adminNotification/inbox');
30
  $notf = array( 'is_read'=>0, 'date_added'=>date('Y-m-d H:i:s'), 'severity'=>4, 'url'=>'http://www.artio.net/magento-extensions/m-turbo-accelerator' );
31
 
37
 
38
  $installer->run("
39
 
40
+ CREATE TABLE IF NOT EXISTS `".$prefix."mturbo` (
41
  `mturbo_id` int(11) unsigned NOT NULL auto_increment,
42
  `url_rewrite_id` int(10) default NULL,
43
  `store_id` smallint(5) unsigned default NULL,
50
  KEY `fk_url_rewrite` (`url_rewrite_id`)
51
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
52
 
53
+ INSERT INTO `".$prefix."core_config_data` (`scope`, `scope_id`, `path`, `value`) VALUES
54
  ('default', 0, 'mturbo/previewcats', ''),
55
  ('default', 0, 'mturbo/productcats', ''),
56
  ('default', 0, 'mturbo/homepage', '1'),
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>MTurbo</name>
4
- <version>1.1.0</version>
5
  <stability>stable</stability>
6
  <license uri="http://www.artio.net/m-turbo/license">Copyright 2010, ARTIO s.r.o. All rights reserved.</license>
7
  <channel>community</channel>
@@ -14,9 +14,9 @@ of Magento site optimization!</description>
14
  <notes>Visit product homepage at:
15
  http://www.artio.net/magento-extensions/m-turbo-accelerator</notes>
16
  <authors><author><name>Michal Unzeitig</name><user>auto-converted</user><email>michal.unzeitig@artio.net</email></author><author><name>Ji&#x159;&#xED; Chmiel</name><user>auto-converted</user><email>jiri.chmiel@artio.net</email></author></authors>
17
- <date>2010-10-01</date>
18
- <time>08:12:17</time>
19
- <contents><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="mturbo.xml" hash="e1e9a5dc117f392f9e2926526b9b1c56"/></dir><dir name="template"><dir name="mturbo"><dir name="preview"><file name="tree.phtml" hash="558e2da8b9c5584a94748116fd8249d0"/></dir><file name="demo.phtml" hash="509ced41c68e1ee7abca6636d24cac0f"/><file name="massaction.phtml" hash="c4ca58cbd05d564129d3c39d452c783e"/><file name="tabs.phtml" hash="1015f2e05a41bb7751b11036e48cbd9f"/></dir></dir></dir></dir></dir></target><target name="magelocal"><dir name="Artio"><dir name="MTurbo"><dir name="Block"><dir name="Adminhtml"><dir name="Edit"><dir name="Tab"><file name="Abstract.php" hash="16a37f270112b175796bb5af02eea84d"/><file name="Actions.php" hash="8e60e7c2ef8996fc1486e5b6e0fcce16"/><file name="Category.php" hash="c3ead1f2e3c4456ae506bc412cb7a4d6"/><file name="License.php" hash="554adc83dd6d0c69f65a674c30c0e49f"/><file name="Main.php" hash="4219a12abbf78ee3015126792a84480d"/><file name="Product.php" hash="2458da4035912d8345f479583fd161bd"/><file name="Url.php" hash="81f49156c0f08b244235d715f2fe7b4f"/></dir><file name="Form.php" hash="e3694987ff374e400703f188e391e351"/><file name="Tabs.php" hash="282cb5ff643fa61480994e3f72856f36"/></dir><dir name="Welcome"><file name="Form.php" hash="0af7f37c2ba47175801b5082cf7ceb5a"/></dir><file name="Mturbo.php" hash="3abfef293f93f669cf38b0efc076721f"/><file name="Run.php" hash="a88befc34123fb04ebf74041ca763338"/><file name="Welcome.php" hash="30b0b1882eff25371e8d1bf4ee0bf880"/></dir><dir name="Data"><dir name="Form"><dir name="Element"><file name="Button.php" hash="0317d74c9856481c8e2ccfdff5f7ff20"/><file name="CategoryTree.php" hash="0294437ea2c2b7f92414b945061b12ee"/><file name="NoEscLabel.php" hash="d10b4e82853916eccba7989a3d272660"/><file name="SelectDownloadMethod.php" hash="f9a816189f98787120d8e7340b78e102"/><file name="Time.php" hash="ce401753d4c06840f12ffc011c2ac435"/></dir></dir><dir name="Grid"><dir name="Column"><file name="Blocked.php" hash="4941dcafb09b4eb502d3eabfd3f73dc4"/></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="CheckController.php" hash="6b62cfd1cbb8d9713eb64abe553b10b8"/><file name="MturboController.php" hash="cce26b19b4779be3053b781a5466a5a0"/></dir><file name="AdminhtmlController.php" hash="3ec6e0b5eed5a3e93259b8d7a0eb4003"/></dir><dir name="etc"><file name="config.xml" hash="775aaeade726ee61813f4928e1e469b6"/><file name="config.xml~" hash="75ffbca7371538210bfea91a75f8ccfd"/></dir><dir name="Helper"><file name="Checker.php" hash="164bb3cb86eb68b3b1969dd92824735f"/><file name="Data.php" hash="f63bdc034ae79c5473ef66e0f5712c07"/><file name="Downloader.php" hash="1f5c4798e38b13e36452b45aeea124eb"/><file name="Info.php" hash="b2f804ce14c86097d57e3ce7b15e8187"/></dir><dir name="Model"><dir name="htaccess"><file name="htaccess.txt" hash="b37433b41cf37e325f2ade4e7839261a"/><file name="htaccessroot.txt" hash="7d55f4bb772128b1f8783b319344d17c"/></dir><dir name="Mysql4"><dir name="Mturbo"><file name="Collection.php" hash="905f9728ed7a8c9d901f3f55c3e9a7d7"/></dir><file name="Mturbo.php" hash="e81f8f1801eca956229a068d0bdea2ab"/></dir><dir name="patches"><file name="mage.txt" hash="0e2ef3ed32b7041f518f162745812023"/></dir><dir name="scripts"><file name="wgetlib.so" hash="80c5d05d9f7d678728e1dccaf0b270c3"/><file name="wgettrans.so" hash="e4f414b0f796051518b6d951133c856b"/></dir><file name="Config.php" hash="ce52f4f206575d9491b2c89ff3b57175"/><file name="Config.php~" hash="117fc78e3053b82d889c00ab135cf4a9"/><file name="File.php" hash="30c7703f65824523ed3c803cc6d57f5a"/><file name="File.php~" hash="98a04470cad3dcc993273f1824192e0e"/><file name="Mturbo.php" hash="7f35b9abc3dd6402e900cae80fafa144"/><file name="Observer.php" hash="1a53243dd2b292181a86c26736ad9004"/><file name="Observer2.php" hash="de554c2515d5cdefbaa2375a5389f7f8"/></dir><dir name="sql"><dir name="mturbo_setup"><file name="mysql4-install-1.0.0.php" hash="f1c33d7c0292988ffef36c8eb683b2d4"/></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="Artio_MTurbo.csv" hash="37ce492d01d06c14e5f0991a6d60b375"/></dir></target><target name="mageetc"><dir name="modules"><file name="Artio_MTurbo.xml" hash="4de5464bc12f3c0702d2c36931bda64d"/></dir></target></contents>
20
  <compatible/>
21
  <dependencies/>
22
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>MTurbo</name>
4
+ <version>1.1.1</version>
5
  <stability>stable</stability>
6
  <license uri="http://www.artio.net/m-turbo/license">Copyright 2010, ARTIO s.r.o. All rights reserved.</license>
7
  <channel>community</channel>
14
  <notes>Visit product homepage at:
15
  http://www.artio.net/magento-extensions/m-turbo-accelerator</notes>
16
  <authors><author><name>Michal Unzeitig</name><user>auto-converted</user><email>michal.unzeitig@artio.net</email></author><author><name>Ji&#x159;&#xED; Chmiel</name><user>auto-converted</user><email>jiri.chmiel@artio.net</email></author></authors>
17
+ <date>2010-11-05</date>
18
+ <time>15:31:54</time>
19
+ <contents><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="mturbo.xml" hash="e1e9a5dc117f392f9e2926526b9b1c56"/></dir><dir name="template"><dir name="mturbo"><dir name="preview"><file name="tree.phtml" hash="558e2da8b9c5584a94748116fd8249d0"/></dir><file name="demo.phtml" hash="509ced41c68e1ee7abca6636d24cac0f"/><file name="massaction.phtml" hash="c4ca58cbd05d564129d3c39d452c783e"/><file name="tabs.phtml" hash="1015f2e05a41bb7751b11036e48cbd9f"/></dir></dir></dir></dir></dir></target><target name="magelocal"><dir name="Artio"><dir name="MTurbo"><dir name="Block"><dir name="Adminhtml"><dir name="Edit"><dir name="Tab"><file name="Abstract.php" hash="16a37f270112b175796bb5af02eea84d"/><file name="Actions.php" hash="8e60e7c2ef8996fc1486e5b6e0fcce16"/><file name="Category.php" hash="c3ead1f2e3c4456ae506bc412cb7a4d6"/><file name="License.php" hash="554adc83dd6d0c69f65a674c30c0e49f"/><file name="Main.php" hash="4219a12abbf78ee3015126792a84480d"/><file name="Product.php" hash="2458da4035912d8345f479583fd161bd"/><file name="Url.php" hash="81f49156c0f08b244235d715f2fe7b4f"/></dir><file name="Form.php" hash="e3694987ff374e400703f188e391e351"/><file name="Tabs.php" hash="282cb5ff643fa61480994e3f72856f36"/></dir><dir name="Welcome"><file name="Form.php" hash="47eaeb2094670dd783ff2027794c6bb6"/></dir><file name="Mturbo.php" hash="3abfef293f93f669cf38b0efc076721f"/><file name="Run.php" hash="a88befc34123fb04ebf74041ca763338"/><file name="Welcome.php" hash="30b0b1882eff25371e8d1bf4ee0bf880"/></dir><dir name="Data"><dir name="Form"><dir name="Element"><file name="Button.php" hash="0317d74c9856481c8e2ccfdff5f7ff20"/><file name="CategoryTree.php" hash="0294437ea2c2b7f92414b945061b12ee"/><file name="NoEscLabel.php" hash="d10b4e82853916eccba7989a3d272660"/><file name="SelectDownloadMethod.php" hash="f9a816189f98787120d8e7340b78e102"/><file name="Time.php" hash="5b7f93a35b2463a0215c8ae566cc5bd9"/></dir></dir><dir name="Grid"><dir name="Column"><file name="Blocked.php" hash="4941dcafb09b4eb502d3eabfd3f73dc4"/></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="CheckController.php" hash="6b62cfd1cbb8d9713eb64abe553b10b8"/><file name="MturboController.php" hash="cce26b19b4779be3053b781a5466a5a0"/></dir><file name="AdminhtmlController.php" hash="3ec6e0b5eed5a3e93259b8d7a0eb4003"/></dir><dir name="etc"><file name="config.xml" hash="7f9b1b8a4133ba0d66543d6f0c6ff1f6"/></dir><dir name="Helper"><file name="Checker.php" hash="164bb3cb86eb68b3b1969dd92824735f"/><file name="Data.php" hash="f63bdc034ae79c5473ef66e0f5712c07"/><file name="Downloader.php" hash="1f5c4798e38b13e36452b45aeea124eb"/><file name="Info.php" hash="b2f804ce14c86097d57e3ce7b15e8187"/></dir><dir name="Model"><dir name="htaccess"><file name="htaccess.txt" hash="b37433b41cf37e325f2ade4e7839261a"/><file name="htaccessroot.txt" hash="7d55f4bb772128b1f8783b319344d17c"/></dir><dir name="Mysql4"><dir name="Mturbo"><file name="Collection.php" hash="905f9728ed7a8c9d901f3f55c3e9a7d7"/></dir><file name="Mturbo.php" hash="e81f8f1801eca956229a068d0bdea2ab"/></dir><dir name="patches"><file name="mage.txt" hash="0e2ef3ed32b7041f518f162745812023"/></dir><dir name="scripts"><file name="wgetlib.so" hash="f166fd66565116adadca8e558d1430b7"/><file name="wgettrans.so" hash="e4f414b0f796051518b6d951133c856b"/></dir><file name="Config.php" hash="112b173a6d13f37cb463ec0e48abcd3a"/><file name="File.php" hash="30c7703f65824523ed3c803cc6d57f5a"/><file name="File.php~" hash="98a04470cad3dcc993273f1824192e0e"/><file name="Mturbo.php" hash="4022660e4aec01a436c6d5bc498c088c"/><file name="Mturbo.php~" hash="6701ca232eca2087ce82a05e0a918066"/><file name="Observer.php" hash="1a53243dd2b292181a86c26736ad9004"/><file name="Observer2.php" hash="de554c2515d5cdefbaa2375a5389f7f8"/></dir><dir name="sql"><dir name="mturbo_setup"><file name="mysql4-install-1.0.0.php" hash="cdd6c7ca28d1e6471744b03ffbd8527e"/></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="Artio_MTurbo.csv" hash="37ce492d01d06c14e5f0991a6d60b375"/></dir></target><target name="mageetc"><dir name="modules"><file name="Artio_MTurbo.xml" hash="4de5464bc12f3c0702d2c36931bda64d"/></dir></target></contents>
20
  <compatible/>
21
  <dependencies/>
22
  </package>