Expercash_payment - Version 15.05.06

Version Notes

test release

Download this release

Release Info

Developer Sebastian Ertner
Extension Expercash_payment
Version 15.05.06
Comparing to
See all releases


Version 15.05.06

Files changed (121) hide show
  1. app/code/community/Expercash/Expercash/Block/Expercash.php +100 -0
  2. app/code/community/Expercash/Expercash/Block/Form.php +65 -0
  3. app/code/community/Expercash/Expercash/Block/Form/Expercash.php +29 -0
  4. app/code/community/Expercash/Expercash/Block/Info.php +56 -0
  5. app/code/community/Expercash/Expercash/Block/Info/Expercash.php +79 -0
  6. app/code/community/Expercash/Expercash/Block/Masterpass/Form.php +95 -0
  7. app/code/community/Expercash/Expercash/Block/Masterpass/Fullcheckout/Cc.php +62 -0
  8. app/code/community/Expercash/Expercash/Block/Masterpass/Fullcheckout/Shortcut.php +260 -0
  9. app/code/community/Expercash/Expercash/Helper/Data.php +187 -0
  10. app/code/community/Expercash/Expercash/Helper/Masterpass.php +539 -0
  11. app/code/community/Expercash/Expercash/Helper/Payment.php +650 -0
  12. app/code/community/Expercash/Expercash/Model/Api/Abstract.php +191 -0
  13. app/code/community/Expercash/Expercash/Model/Api/Api.php +86 -0
  14. app/code/community/Expercash/Expercash/Model/Api/Capture.php +158 -0
  15. app/code/community/Expercash/Expercash/Model/Api/Masterpass/Capture.php +83 -0
  16. app/code/community/Expercash/Expercash/Model/Api/Masterpass/Epi.php +85 -0
  17. app/code/community/Expercash/Expercash/Model/Config.php +221 -0
  18. app/code/community/Expercash/Expercash/Model/Directory/Region.php +57 -0
  19. app/code/community/Expercash/Expercash/Model/Entity/Setup.php +46 -0
  20. app/code/community/Expercash/Expercash/Model/Expercash.php +236 -0
  21. app/code/community/Expercash/Expercash/Model/Expercashcc.php +100 -0
  22. app/code/community/Expercash/Expercash/Model/Expercashelv.php +99 -0
  23. app/code/community/Expercash/Expercash/Model/Expercashgp.php +80 -0
  24. app/code/community/Expercash/Expercash/Model/Expercashmp.php +98 -0
  25. app/code/community/Expercash/Expercash/Model/Expercashmpf.php +233 -0
  26. app/code/community/Expercash/Expercash/Model/Expercashpc.php +88 -0
  27. app/code/community/Expercash/Expercash/Model/Expercashpp.php +77 -0
  28. app/code/community/Expercash/Expercash/Model/Expercashso.php +80 -0
  29. app/code/community/Expercash/Expercash/Model/Masterpass/Config.php +204 -0
  30. app/code/community/Expercash/Expercash/Model/Observer.php +178 -0
  31. app/code/community/Expercash/Expercash/Model/Request/Iframe.php +171 -0
  32. app/code/community/Expercash/Expercash/Model/Request/Masterpass/Epi.php +124 -0
  33. app/code/community/Expercash/Expercash/Model/Request/Token.php +192 -0
  34. app/code/community/Expercash/Expercash/Model/Request/Token/Iframe.php +180 -0
  35. app/code/community/Expercash/Expercash/Model/Resource/Directory/Region.php +54 -0
  36. app/code/community/Expercash/Expercash/Model/Source/Paymenttypecc.php +40 -0
  37. app/code/community/Expercash/Expercash/Model/Source/Paymenttypeelv.php +40 -0
  38. app/code/community/Expercash/Expercash/Model/Source/Paymenttypegp.php +36 -0
  39. app/code/community/Expercash/Expercash/Model/Source/Paymenttypemp.php +38 -0
  40. app/code/community/Expercash/Expercash/Model/Source/Paymenttypempf.php +42 -0
  41. app/code/community/Expercash/Expercash/Model/Source/Paymenttypeso.php +36 -0
  42. app/code/community/Expercash/Expercash/Test/Block/ExpercashTest.php +144 -0
  43. app/code/community/Expercash/Expercash/Test/Block/ExpercashTest/expectations/orders.yaml +2 -0
  44. app/code/community/Expercash/Expercash/Test/Block/ExpercashTest/fixtures/orders.yaml +42 -0
  45. app/code/community/Expercash/Expercash/Test/Block/Masterpass/FormTest.php +108 -0
  46. app/code/community/Expercash/Expercash/Test/Block/Masterpass/Fullcheckout/ShortcutTest.php +182 -0
  47. app/code/community/Expercash/Expercash/Test/Controller/ExpercashControllerTest.php +182 -0
  48. app/code/community/Expercash/Expercash/Test/Controller/ExpercashControllerTest/expectations/orders.yaml +1 -0
  49. app/code/community/Expercash/Expercash/Test/Controller/ExpercashControllerTest/fixtures/orders.yaml +81 -0
  50. app/code/community/Expercash/Expercash/Test/Helper/DataTest.php +25 -0
  51. app/code/community/Expercash/Expercash/Test/Helper/MasterpassTest.php +43 -0
  52. app/code/community/Expercash/Expercash/Test/Helper/PaymentTest.php +356 -0
  53. app/code/community/Expercash/Expercash/Test/Helper/PaymentTest/fixtures/orders.yaml +50 -0
  54. app/code/community/Expercash/Expercash/Test/Model/Api/AbstractTest.php +145 -0
  55. app/code/community/Expercash/Expercash/Test/Model/Api/ApiTest.php +66 -0
  56. app/code/community/Expercash/Expercash/Test/Model/Api/ApiTest/TestFiles/FailedTransaction.xml +7 -0
  57. app/code/community/Expercash/Expercash/Test/Model/Api/ApiTest/TestFiles/ResponseParamsMissing.xml +6 -0
  58. app/code/community/Expercash/Expercash/Test/Model/Api/ApiTest/TestFiles/SuccessFullResponse.xml +7 -0
  59. app/code/community/Expercash/Expercash/Test/Model/Api/CaptureTest.php +140 -0
  60. app/code/community/Expercash/Expercash/Test/Model/Api/CaptureTest/fixtures/.gitkeep +0 -0
  61. app/code/community/Expercash/Expercash/Test/Model/Api/CaptureTest/fixtures/orders.yaml +57 -0
  62. app/code/community/Expercash/Expercash/Test/Model/ConfigTest.php +187 -0
  63. app/code/community/Expercash/Expercash/Test/Model/ExpercashTest.php +361 -0
  64. app/code/community/Expercash/Expercash/Test/Model/ExpercashTest/fixtures/.gitkeep +0 -0
  65. app/code/community/Expercash/Expercash/Test/Model/ExpercashccTest.php +141 -0
  66. app/code/community/Expercash/Expercash/Test/Model/ExpercashccTest/fixtures/.gitkeep +0 -0
  67. app/code/community/Expercash/Expercash/Test/Model/ExpercashelvTest.php +143 -0
  68. app/code/community/Expercash/Expercash/Test/Model/ExpercashelvTest/fixtures/.gitkeep +0 -0
  69. app/code/community/Expercash/Expercash/Test/Model/ExpercashgpTest.php +102 -0
  70. app/code/community/Expercash/Expercash/Test/Model/ExpercashgpTest/fixtures/.gitkeep +0 -0
  71. app/code/community/Expercash/Expercash/Test/Model/ExpercashmpTest.php +141 -0
  72. app/code/community/Expercash/Expercash/Test/Model/ExpercashmpfTest.php +204 -0
  73. app/code/community/Expercash/Expercash/Test/Model/ExpercashmpfTest/fixtures/quote.yaml +95 -0
  74. app/code/community/Expercash/Expercash/Test/Model/ExpercashpcTest.php +91 -0
  75. app/code/community/Expercash/Expercash/Test/Model/ExpercashpcTest/fixtures/.gitkeep +0 -0
  76. app/code/community/Expercash/Expercash/Test/Model/ExpercashpcTest/fixtures/quote.yaml +92 -0
  77. app/code/community/Expercash/Expercash/Test/Model/ExpercashppTest.php +86 -0
  78. app/code/community/Expercash/Expercash/Test/Model/ExpercashsoTest.php +109 -0
  79. app/code/community/Expercash/Expercash/Test/Model/Request/IframeTest.php +242 -0
  80. app/code/community/Expercash/Expercash/Test/Model/Request/IframeTest/fixtures/order.yaml +72 -0
  81. app/code/community/Expercash/Expercash/Test/Model/Request/Token/IframeTest.php +266 -0
  82. app/code/community/Expercash/Expercash/Test/Model/Request/Token/IframeTest/fixtures/order.yaml +71 -0
  83. app/code/community/Expercash/Expercash/Test/Model/Request/TokenTest.php +266 -0
  84. app/code/community/Expercash/Expercash/Test/Model/Request/TokenTest/fixtures/order.yaml +71 -0
  85. app/code/community/Expercash/Expercash/Test/var/expectations/orders.yaml +1 -0
  86. app/code/community/Expercash/Expercash/Test/var/fixtures/orders.yaml +53 -0
  87. app/code/community/Expercash/Expercash/Test/var/fixtures/quote.yaml +96 -0
  88. app/code/community/Expercash/Expercash/controllers/Checkout/OnepageController.php +113 -0
  89. app/code/community/Expercash/Expercash/controllers/ExpercashController.php +185 -0
  90. app/code/community/Expercash/Expercash/controllers/FullcheckoutController.php +143 -0
  91. app/code/community/Expercash/Expercash/etc/config.xml +363 -0
  92. app/code/community/Expercash/Expercash/etc/system.xml +861 -0
  93. app/code/community/Expercash/Expercash/sql/expercash_setup/mysql4-install-1.0.0.php +56 -0
  94. app/design/adminhtml/default/default/template/expercash/info/expercash.phtml +53 -0
  95. app/design/adminhtml/default/default/template/expercash/info/pdf/expercash.phtml +23 -0
  96. app/design/frontend/base/default/layout/expercash.xml +121 -0
  97. app/design/frontend/base/default/template/expercash/checkout/ce15/onepage.phtml +49 -0
  98. app/design/frontend/base/default/template/expercash/checkout/onepage.phtml +56 -0
  99. app/design/frontend/base/default/template/expercash/checkout/onepage/js.phtml +40 -0
  100. app/design/frontend/base/default/template/expercash/expercash.phtml +25 -0
  101. app/design/frontend/base/default/template/expercash/expercasherror.phtml +26 -0
  102. app/design/frontend/base/default/template/expercash/form/expercashiframe.phtml +26 -0
  103. app/design/frontend/base/default/template/expercash/info/expercash.phtml +24 -0
  104. app/design/frontend/base/default/template/expercash/info/pdf/expercash.phtml +23 -0
  105. app/design/frontend/base/default/template/expercash/masterpass/fullcheckout/checkout.phtml +62 -0
  106. app/design/frontend/base/default/template/expercash/masterpass/fullcheckout/shortcut.phtml +119 -0
  107. app/design/frontend/base/default/template/expercash/payment/logo/logo.phtml +38 -0
  108. app/design/frontend/base/default/template/expercash/payment/masterpass/cc.phtml +17 -0
  109. app/design/frontend/rwd/default/template/expercash/checkout/onepage.phtml +45 -0
  110. app/etc/modules/Expercash_Expercash.xml +34 -0
  111. app/locale/de_DE/Expercash_Expercash.csv +115 -0
  112. app/locale/en_US/Expercash_Expercash.csv +30 -0
  113. app/skin/frontend/base/default/images/expercash/masterpass.png +0 -0
  114. doc/Expercash_Expercash/.gitkeep +0 -0
  115. doc/Expercash_Expercash/Benutzerdokumentation.pdf +6953 -0
  116. doc/Expercash_Expercash/ChangeLog.pdf +860 -0
  117. package.xml +2 -0
  118. skin/frontend/base/default/css/expercash.css +167 -0
  119. skin/frontend/base/default/images/expercash/mp_buy_with_button.png +0 -0
  120. skin/frontend/base/default/images/expercash/mp_ident.png +0 -0
  121. skin/frontend/base/default/js/expercashopc.js +127 -0
app/code/community/Expercash/Expercash/Block/Expercash.php ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+ class Expercash_Expercash_Block_Expercash extends Mage_Core_Block_Template
24
+ {
25
+
26
+ protected function _construct()
27
+ {
28
+ parent::_construct();
29
+ $this->setTemplate('expercash/expercash.phtml');
30
+ }
31
+
32
+ /**
33
+ * get iframe css class from config
34
+ *
35
+ * @return string
36
+ */
37
+ protected function getIframeCssClass()
38
+ {
39
+ return $this->getConfig()->getIframeCssClass($this->getStoreId());
40
+ }
41
+
42
+ /**
43
+ * get iframe width from config
44
+ *
45
+ * @return string
46
+ */
47
+ protected function getIframeWidth()
48
+ {
49
+ return $this->getConfig()->getIframeWidth($this->getStoreId());
50
+ }
51
+
52
+ /**
53
+ * get iframe height from config
54
+ *
55
+ * @return string
56
+ */
57
+ protected function getIframeHeight()
58
+ {
59
+ return $this->getConfig()->getIframeHeight($this->getStoreId());
60
+ }
61
+
62
+ /**
63
+ * @return string
64
+ */
65
+ protected function getIframeUrl()
66
+ {
67
+ $iframeModel = $this->getIframeModel();
68
+ $iframeModel->setOrderDataToSession();
69
+ $iframeUrl = $iframeModel->getIframeUrl();
70
+ Mage::helper('expercash/data')->log(sprintf("Create iframe-url:\n%s", $iframeUrl));
71
+
72
+ return $iframeUrl;
73
+ }
74
+
75
+ /**
76
+ * getter for iframe model
77
+ *
78
+ * @return Expercash_Expercash_Model_Request_Iframe
79
+ */
80
+ protected function getIframeModel()
81
+ {
82
+ return Mage::getModel('expercash/request_iframe');
83
+ }
84
+
85
+ /**
86
+ * getter for config model
87
+ *
88
+ * @return Expercash_Expercash_Model_Config
89
+ */
90
+ protected function getConfig()
91
+ {
92
+ return Mage::getModel('expercash/config');
93
+ }
94
+
95
+ protected function getStoreId()
96
+ {
97
+ return $this->getIframeModel()->getOrder()->getStoreId();
98
+ }
99
+
100
+ }
app/code/community/Expercash/Expercash/Block/Form.php ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+ class Expercash_Expercash_Block_Form extends Mage_Core_Block_Template
24
+ {
25
+
26
+ /**
27
+ * Retrieve payment method model
28
+ *
29
+ * @return Mage_Payment_Model_Method_Abstract
30
+ */
31
+ public function getMethod()
32
+ {
33
+ $method = $this->getData('method');
34
+
35
+ if (!($method instanceof Mage_Payment_Model_Method_Abstract)) {
36
+ Mage::throwException(
37
+ $this->__('Can not retrieve payment method model object.')
38
+ );
39
+ }
40
+ return $method;
41
+ }
42
+
43
+ /**
44
+ * Retrieve payment method code
45
+ *
46
+ * @return string
47
+ */
48
+ public function getMethodCode()
49
+ {
50
+ return $this->getMethod()->getCode();
51
+ }
52
+
53
+ /**
54
+ * Retrieve field value data from payment info object
55
+ *
56
+ * @param string $field
57
+ * @return mixed
58
+ */
59
+ public function getInfoData($field)
60
+ {
61
+ return $this->htmlEscape(
62
+ $this->getMethod()->getInfoInstance()->getData($field)
63
+ );
64
+ }
65
+ }
app/code/community/Expercash/Expercash/Block/Form/Expercash.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ class Expercash_Expercash_Block_Form_Expercash extends Mage_Payment_Block_Form
23
+ {
24
+ protected function _construct()
25
+ {
26
+ parent::_construct();
27
+ $this->setTemplate('expercash/form/expercashiframe.phtml');
28
+ }
29
+ }
app/code/community/Expercash/Expercash/Block/Info.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ class Expercash_Expercash_Block_Info extends Mage_Core_Block_Template
23
+ {
24
+
25
+ protected function _construct()
26
+ {
27
+ parent::_construct();
28
+ $this->setTemplate('expercash/info/default.phtml');
29
+ }
30
+
31
+ /**
32
+ * Retrieve info model
33
+ *
34
+ * @return Mage_Payment_Model_Info
35
+ */
36
+ public function getInfo()
37
+ {
38
+ $info = $this->getData('info');
39
+ if (!($info instanceof Mage_Payment_Model_Info)) {
40
+ Mage::throwException(
41
+ $this->__('Can not retrieve payment info model object.')
42
+ );
43
+ }
44
+ return $info;
45
+ }
46
+
47
+ /**
48
+ * Retrieve payment method model
49
+ *
50
+ * @return Mage_Payment_Model_Method_Abstract
51
+ */
52
+ public function getMethod()
53
+ {
54
+ return $this->getInfo()->getMethodInstance();
55
+ }
56
+ }
app/code/community/Expercash/Expercash/Block/Info/Expercash.php ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+ class Expercash_Expercash_Block_Info_Expercash extends Mage_Payment_Block_Info
24
+ {
25
+ protected $_expercashStack = false;
26
+
27
+ /**
28
+ * Init default template for block
29
+ */
30
+ protected function _construct()
31
+ {
32
+ parent::_construct();
33
+ $this->setTemplate('expercash/info/expercash.phtml');
34
+ }
35
+
36
+ /**
37
+ * Retrieve info model
38
+ *
39
+ * @return Mage_Sofortueberweisung_Model_Info
40
+ */
41
+ public function getInfo()
42
+ {
43
+ $info = $this->getData('info');
44
+
45
+ if (!($info instanceof Mage_Payment_Model_Info)) {
46
+ Mage::throwException(
47
+ $this->__('Can not retrieve payment info model object.')
48
+ );
49
+ }
50
+ return $info;
51
+ }
52
+
53
+ /**
54
+ * Retrieve payment method model
55
+ *
56
+ * @return Mage_Payment_Model_Method_Abstract
57
+ */
58
+ public function getMethod()
59
+ {
60
+ return $this->getInfo()->getMethodInstance();
61
+ }
62
+
63
+ public function toPdf()
64
+ {
65
+ $this->setTemplate('expercash/info/pdf/expercash.phtml');
66
+ return $this->toHtml();
67
+ }
68
+
69
+ public function getExperCashInfo($string)
70
+ {
71
+ if ($this->_expercashStack === false):
72
+ $this->_expercashStack = Mage::helper('expercash/payment')
73
+ ->getExperCashData($this->getInfo()->getOrder()->getQuoteId());
74
+ endif;
75
+ $test = isset($this->_expercashStack[0][$string]) ? $this->_expercashStack[0][$string] : false;
76
+
77
+ return $test;
78
+ }
79
+ }
app/code/community/Expercash/Expercash/Block/Masterpass/Form.php ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+ /**
24
+ * PayPal Standard payment "form"
25
+ */
26
+ class Expercash_Expercash_Block_Masterpass_Form extends Mage_Payment_Block_Form
27
+ {
28
+ /**
29
+ * Payment method code
30
+ *
31
+ * @var string
32
+ */
33
+ protected $_methodCode = "expercashmp";
34
+
35
+
36
+ /**
37
+ * Set template and add logo if needed
38
+ */
39
+ protected function _construct()
40
+ {
41
+ $this->setTemplate('expercash/form/expercashiframe.phtml');
42
+ $logo = $this->handleLogoDisplay();
43
+ if ($logo !== null) {
44
+ $this->setTemplate('expercash/form/expercashiframe.phtml')
45
+ ->setMethodTitle('')
46
+ ->setMethodLabelAfterHtml($logo->toHtml());
47
+ }
48
+
49
+ return parent::_construct();
50
+ }
51
+
52
+ /**
53
+ * Payment method code getter
54
+ *
55
+ * @return string
56
+ */
57
+ public function getMethodCode()
58
+ {
59
+ return $this->_methodCode;
60
+ }
61
+
62
+
63
+
64
+ /**
65
+ * handles the display of Masterpass Logo based on config setting
66
+ *
67
+ * @return null|object
68
+ */
69
+ protected function handleLogoDisplay()
70
+ {
71
+ $config = $this->getMasterpassConfig();
72
+ $mark = null;
73
+ if ($config->showMasterpassLogoInCheckout() == true) {
74
+ $mark = Mage::app()->getLayout()->createBlock('core/template');
75
+ $mark->setTemplate('expercash/payment/logo/logo.phtml')
76
+ ->setPaymentAcceptanceMarkHref($config->getMasterpassLearnMoreUrl(Mage::app()->getLocale()))
77
+ ->setPaymentAcceptanceMarkSrc($config->getMasterPassCheckoutLogo());
78
+ }
79
+
80
+ return $mark;
81
+ }
82
+
83
+ /**
84
+ * get masterpass config model
85
+ *
86
+ * @return Expercash_Expercash_Model_Masterpass_Config
87
+ */
88
+ protected function getMasterpassConfig()
89
+ {
90
+ return Mage::getModel('expercash/masterpass_config');
91
+ }
92
+
93
+
94
+
95
+ }
app/code/community/Expercash/Expercash/Block/Masterpass/Fullcheckout/Cc.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ class Expercash_Expercash_Block_Masterpass_Fullcheckout_Cc extends Expercash_Expercash_Block_Masterpass_Form
23
+ {
24
+ protected function _construct()
25
+ {
26
+ parent::_construct();
27
+
28
+ if ($this->getMasterpassConfig()->isShowCCDataInCheckoutEnabled()) {
29
+ $this->setTemplate('expercash/payment/masterpass/cc.phtml');
30
+ }
31
+ }
32
+
33
+ /**
34
+ * get quote from session
35
+ *
36
+ * @return Mage_Sales_Model_Quote
37
+ */
38
+ public function getQuote()
39
+ {
40
+ return Mage::getModel('checkout/session')->getQuote();
41
+ }
42
+
43
+ /**
44
+ * get masked cc number from payment
45
+ *
46
+ * @return string
47
+ */
48
+ public function getMaskedPan()
49
+ {
50
+ return $this->getQuote()->getPayment()->getAdditionalInformation('maskedPan');
51
+ }
52
+
53
+ /**
54
+ * get card name from payment
55
+ *
56
+ * @return string
57
+ */
58
+ public function getCardSchema()
59
+ {
60
+ return $this->getQuote()->getPayment()->getAdditionalInformation('cardScheme');
61
+ }
62
+ }
app/code/community/Expercash/Expercash/Block/Masterpass/Fullcheckout/Shortcut.php ADDED
@@ -0,0 +1,260 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ class Expercash_Expercash_Block_Masterpass_Fullcheckout_Shortcut extends Mage_Core_Block_Template
23
+ {
24
+ /**
25
+ * layout name for cart top button
26
+ */
27
+ const LAYOUTNAME_TOP = 'checkout.cart.methods.masterpass_fullcheckout.top';
28
+
29
+ /**
30
+ * layout name for cart bottom button
31
+ */
32
+ const LAYOUTNAME_BOTTOM = 'checkout.cart.methods.masterpass_fullcheckout.bottom';
33
+
34
+ /**
35
+ * layout name for mini cart button
36
+ */
37
+ const LAYOUTNAME_SIDEBAR = 'expercash.cart_sidebar.shortcut';
38
+
39
+ const LAYOUTNAME_MINI_CART ="expercash.masterpass.mini_cart.shortcut";
40
+
41
+ /**
42
+ * Whether the block should be eventually rendered
43
+ *
44
+ * @var bool
45
+ */
46
+ protected $_shouldRender = true;
47
+
48
+ /**
49
+ * Payment method code
50
+ *
51
+ * @var string
52
+ */
53
+ protected $_paymentMethodCode = 'expercashmpf';
54
+
55
+
56
+ /**
57
+ * setter for shouldRender property
58
+ *
59
+ * @param $var
60
+ */
61
+ public function setShouldRender($var)
62
+ {
63
+ $this->_shouldRender = $var;
64
+ }
65
+
66
+ /**
67
+ * getter for shouldRender property
68
+ *
69
+ * @return bool
70
+ */
71
+ public function getShouldRender()
72
+ {
73
+ return $this->_shouldRender;
74
+ }
75
+
76
+ /**
77
+ * determine if masterpass button should be displayed and set shouldrender accordingly
78
+ *
79
+ * @return Mage_Core_Block_Abstract
80
+ */
81
+ protected function _beforeToHtml()
82
+ {
83
+ $result = parent::_beforeToHtml();
84
+ $nameInLayout = $this->getNameInLayout();
85
+ $quote = Mage::getSingleton('checkout/session')->getQuote();
86
+ $config = $this->getMasterpassConfig();
87
+
88
+ // check if full checkout is disabled
89
+ if (!$config->getConfigData('active', $this->_paymentMethodCode)) {
90
+ $this->setShouldRender(false);
91
+ return $result;
92
+ }
93
+
94
+ //check if customer is logged in, do not render block if customer is logged in
95
+ if ($this->isCustomerLoggedIn()) {
96
+ $this->setShouldRender(false);
97
+ return $result;
98
+ }
99
+
100
+ if ($this->isMiniCart() && !$config->showButtonInMiniCart()) {
101
+ $this->setShouldRender(false);
102
+ return $result;
103
+ }
104
+
105
+ // check visibility on cart and mini cart
106
+ if (($this->isCartBottom()|| $this->isCartTop())
107
+ && !$config->showButtonInCart()
108
+ ) {
109
+ $this->setShouldRender(false);
110
+ return $result;
111
+ }
112
+
113
+ if ($nameInLayout === self::LAYOUTNAME_SIDEBAR && !$config->showButtonInMiniCart()) {
114
+ $this->setShouldRender(false);
115
+ return $result;
116
+
117
+ }
118
+
119
+
120
+
121
+ // validate minimum quote amount and validate quote for zero grandtotal
122
+ if (null !== $quote && (!$quote->validateMinimumAmount()
123
+ || (!$quote->getGrandTotal()))
124
+ ) {
125
+ $this->setShouldRender(false);
126
+ return $result;
127
+ }
128
+
129
+
130
+ if (false === Mage::helper('checkout')->isAllowedGuestCheckout($quote)) {
131
+ $this->setShouldRender(false);
132
+ return $result;
133
+ }
134
+
135
+ // check payment method availability
136
+ $methodInstance = Mage::helper('payment')->getMethodInstance($this->_paymentMethodCode);
137
+ if (!$methodInstance) {
138
+ $this->setShouldRender(false);
139
+ return $result;
140
+ }
141
+
142
+ return $result;
143
+ }
144
+
145
+ /**
146
+ * Render the block if needed
147
+ *
148
+ * @return string
149
+ */
150
+ protected function _toHtml()
151
+ {
152
+ if (!$this->getShouldRender()) {
153
+ return '';
154
+ }
155
+ return parent::_toHtml();
156
+ }
157
+
158
+
159
+ /**
160
+ * getter for masterpass config model
161
+ *
162
+ * @return Expercash_Expercash_Model_Masterpass_Config
163
+ */
164
+ public function getMasterpassConfig()
165
+ {
166
+ return Mage::getModel('expercash/masterpass_config');
167
+ }
168
+
169
+ /**
170
+ * get image url for masterpass full checkout
171
+ *
172
+ * @return string
173
+ */
174
+ public function getImageUrl()
175
+ {
176
+ return $this->getMasterpassConfig()->getFullCheckoutImageUrl();
177
+ }
178
+
179
+ /**
180
+ * getter for masterpass full checkout url
181
+ *
182
+ * @return string
183
+ */
184
+ public function getCheckoutUrl()
185
+ {
186
+ return $this->getMasterpassConfig()->getMasterpassFullCheckoutUrl();
187
+ }
188
+
189
+ /**
190
+ * returns show more link if enabled for masterpass full checkout
191
+ *
192
+ * @return null|string
193
+ */
194
+ public function getLearnMoreLink()
195
+ {
196
+ $result = null;
197
+ $locale = Mage::app()->getLocale();
198
+ if ($this->getMasterpassConfig()->showMasterPassFullCheckoutLearnMoreLink()) {
199
+ $result = $this->getMasterpassConfig()->getMasterpassLearnMoreUrl($locale);
200
+ }
201
+
202
+ return $result;
203
+ }
204
+
205
+ /**
206
+ * check if actual layout name is cart top
207
+ *
208
+ * @return bool
209
+ */
210
+ public function isCartTop()
211
+ {
212
+ if ($this->getNameInLayout() === self::LAYOUTNAME_TOP) {
213
+ return true;
214
+ }
215
+ }
216
+
217
+ /**
218
+ * check if actual layout name is mini cart
219
+ *
220
+ * @return bool
221
+ */
222
+ public function isMiniCart()
223
+ {
224
+ if ($this->getNameInLayout() === self::LAYOUTNAME_MINI_CART) {
225
+ return true;
226
+ }
227
+
228
+ }
229
+
230
+ /**
231
+ * check if actual layout name is cart bottom
232
+ *
233
+ * @return bool
234
+ */
235
+ public function isCartBottom()
236
+ {
237
+ if ($this->getNameInLayout() === self::LAYOUTNAME_BOTTOM) {
238
+ return true;
239
+ }
240
+
241
+ }
242
+
243
+
244
+ /**
245
+ * check if customer is logged in
246
+ *
247
+ * @return bool
248
+ */
249
+ protected function isCustomerLoggedIn()
250
+ {
251
+ $result = false;
252
+ $customer = Mage::getModel('customer/session');
253
+ if ($customer->isLoggedIn()) {
254
+ $result = true;
255
+ }
256
+
257
+ return $result;
258
+ }
259
+
260
+ }
app/code/community/Expercash/Expercash/Helper/Data.php ADDED
@@ -0,0 +1,187 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+ class Expercash_Expercash_Helper_Data extends Mage_Core_Helper_Abstract
24
+ {
25
+ /**
26
+ * log request type string
27
+ */
28
+ const LOG_TYPE_REQUEST = "REQUEST";
29
+
30
+ /**
31
+ * log response type string
32
+ */
33
+ const LOG_TYPE_RESPONSE = "RESPONSE";
34
+
35
+ const ENV_NAME = "Magento";
36
+
37
+ /**
38
+ * log to a separate log file
39
+ *
40
+ * @param string $message
41
+ * @param int $level
42
+ * @param bool $force
43
+ * @return Expercash_Expercash_Helper_Data
44
+ */
45
+ public function log($message, $level = null)
46
+ {
47
+ //Reformat message for better log-visibility
48
+ $message = sprintf("\n=====================\n%s\n=====================", $message);
49
+ Mage::log($message, $level, 'expercash.log', true);
50
+ return $this;
51
+ }
52
+
53
+ /**
54
+ * refill cart
55
+ *
56
+ * @param Mage_Sales_Model_Order $order
57
+ *
58
+ * @return void
59
+ */
60
+ public function refillCart($order)
61
+ {
62
+ //Get cart singleton
63
+ $cart = Mage::getSingleton('checkout/cart');
64
+
65
+ if (0 < $cart->getQuote()->getItemsCollection()->count()) {
66
+ //cart is not empty, so refilling it is not required
67
+ return;
68
+ }
69
+ foreach ($order->getItemsCollection() as $item) {
70
+ try {
71
+ $cart->addOrderItem($item);
72
+ } catch (Exception $e) {
73
+ Mage::log($e->getMessage());
74
+ }
75
+ }
76
+ $cart->save();
77
+
78
+ // add coupon code
79
+ $coupon = $order->getCouponCode();
80
+ $session = Mage::getSingleton('checkout/session');
81
+ if (false === is_null($coupon)) {
82
+ $session->getQuote()->setCouponCode($coupon)->save();
83
+ }
84
+ }
85
+
86
+ /**
87
+ * returns the modul version from config.xml
88
+ *
89
+ * @return string
90
+ */
91
+ public function getVersion()
92
+ {
93
+ return (string) Mage::getConfig()->getNode('modules')
94
+ ->children()
95
+ ->Expercash_Expercash->version;
96
+ }
97
+
98
+ /**
99
+ * returns the Magento versions number
100
+ *
101
+ * @return string
102
+ */
103
+ public function getMagentoVersion()
104
+ {
105
+ return (string) Mage::getVersion();
106
+ }
107
+
108
+ /**
109
+ * returns the shopsystem Name
110
+ *
111
+ * @return string
112
+ */
113
+ public function getEnvName()
114
+ {
115
+ return self::ENV_NAME;
116
+ }
117
+
118
+ /**
119
+ * get the additional payment params from the config.xml
120
+ *
121
+ * @return array
122
+ */
123
+ public function getAdditionalPaymentParams()
124
+ {
125
+ return explode(",", Mage::getModel('expercash/config')->getAdditionalPaymentParams());
126
+ }
127
+
128
+ /**
129
+ * log client response and request
130
+ *
131
+ * @param string $logType
132
+ * @param mixed $logValues
133
+ */
134
+ public function clientLog($logType, $logValues)
135
+ {
136
+ $message = "";
137
+ if ($logType === self::LOG_TYPE_REQUEST) {
138
+ $message = "Request to Expercash with following params:\n%s";
139
+ }
140
+
141
+ if ($logType === self::LOG_TYPE_RESPONSE) {
142
+ $message = "Gateway gave following response:\n%s";;
143
+ }
144
+ $this->log(sprintf($message, Zend_Json::encode($logValues)));
145
+ }
146
+
147
+ /**
148
+ * Add request parameter into url
149
+ *
150
+ * @param $url string
151
+ * @param $param array( 'key' => value )
152
+ * @return string
153
+ */
154
+ public function addRequestParam($url, $param)
155
+ {
156
+ $startDelimiter = (false === strpos($url,'?'))? '?' : '&';
157
+
158
+ $arrQueryParams = array();
159
+ foreach ($param as $key => $value) {
160
+ if (is_numeric($key) || is_object($value)) {
161
+ continue;
162
+ }
163
+
164
+ if (is_array($value)) {
165
+ // $key[]=$value1&$key[]=$value2 ...
166
+ $arrQueryParams[] = $key . '[]=' . implode('&' . $key . '[]=', $value);
167
+ } elseif (is_null($value)) {
168
+ $arrQueryParams[] = $key;
169
+ } else {
170
+ $arrQueryParams[] = $key . '=' . $value;
171
+ }
172
+ }
173
+ $url .= $startDelimiter . implode('&', $arrQueryParams);
174
+
175
+ return $url;
176
+ }
177
+
178
+ public function isBelowCE17()
179
+ {
180
+ $result = false;
181
+ if (Mage::getVersion() < '1.7.0') {
182
+ $result = true;
183
+ }
184
+
185
+ return $result;
186
+ }
187
+ }
app/code/community/Expercash/Expercash/Helper/Masterpass.php ADDED
@@ -0,0 +1,539 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+ class Expercash_Expercash_Helper_Masterpass extends Expercash_Expercash_Helper_Payment
24
+ {
25
+ const MASTERPASS_SESSION_KEY = 'masterpass';
26
+
27
+ const SESSION_LIFETIME_MAX = 3600;
28
+
29
+
30
+ /**
31
+ * Save MasterPass data to customer session.
32
+ *
33
+ * @param string $key
34
+ * @param string $value
35
+ */
36
+ public function saveDataToMasterpassSession($key, $value)
37
+ {
38
+ $sessionData = $this->getCustomerSession()->getData(self::MASTERPASS_SESSION_KEY);
39
+ $sessionData[$key] = $value;
40
+ $this->getCustomerSession()->setData(self::MASTERPASS_SESSION_KEY, $sessionData);
41
+ }
42
+
43
+ /**
44
+ * Check if MasterPass session is not yet timed out.
45
+ *
46
+ * @param string[] $sessionData
47
+ *
48
+ * @return bool
49
+ */
50
+ protected function isSessionLifeTimeValid($sessionData)
51
+ {
52
+ $result = false;
53
+ if (is_array($sessionData) && isset($sessionData['timestamp'])) {
54
+ $initialTimeStamp = $sessionData['timestamp'];
55
+ $now = time();
56
+ $timeDiff = $now - $initialTimeStamp;
57
+ if ($timeDiff <= self::SESSION_LIFETIME_MAX) {
58
+ $result = true;
59
+ }
60
+ }
61
+
62
+ return $result;
63
+ }
64
+
65
+
66
+ /**
67
+ * Check if MasterPass session is valid.
68
+ *
69
+ * @param string[] $sessionData
70
+ * @param Mage_Sales_Model_Quote $quote
71
+ *
72
+ * @return bool
73
+ */
74
+ public function isSessionValid($sessionData, Mage_Sales_Model_Quote $quote)
75
+ {
76
+ $result = false;
77
+ if ($this->isSessionLifeTimeValid($sessionData)
78
+ && $this->isBillingAddressValid($sessionData, $quote)
79
+ ) {
80
+ $result = true;
81
+ }
82
+
83
+ return $result;
84
+ }
85
+
86
+
87
+ /**
88
+ * Check if current billing address is unchanged.
89
+ *
90
+ * @param string[] $sessionData
91
+ * @param Mage_Sales_Model_Quote $quote
92
+ *
93
+ * @return bool
94
+ */
95
+ protected function isBillingAddressValid($sessionData, Mage_Sales_Model_Quote $quote)
96
+ {
97
+ $result = false;
98
+ if (is_array($sessionData) && isset($sessionData['billingAddress'])) {
99
+ $quoteBillingAddressArray = $this->getBillingArray($quote->getBillingAddress());
100
+ $quoteBillingAddressHash = $this->getArrayHash($quoteBillingAddressArray);
101
+ if ($sessionData['billingAddress'] === $quoteBillingAddressHash) {
102
+ $result = true;
103
+ }
104
+ }
105
+
106
+ return $result;
107
+ }
108
+
109
+ /**
110
+ * Clear all MasterPass related data from customer session.
111
+ *
112
+ * @return void
113
+ */
114
+ public function clearMasterpassSessionData()
115
+ {
116
+ $customerSession = $this->getCustomerSession();
117
+ $customerSession->unsetData(self::MASTERPASS_SESSION_KEY);
118
+ }
119
+
120
+ /**
121
+ * Init session validation.
122
+ *
123
+ * @param Mage_Sales_Model_Quote $quote
124
+ *
125
+ * @return string[] Current session data if still valid.
126
+ * @throws Mage_Core_Exception
127
+ */
128
+ public function validMasterpassSession(Mage_Sales_Model_Quote $quote)
129
+ {
130
+ $masterPassSessionData = $this->getCustomerSession()->getData(self::MASTERPASS_SESSION_KEY);
131
+ if (!$this->isSessionValid($masterPassSessionData, $quote)) {
132
+ Mage::throwException('Session data not valid or session timed out');
133
+ }
134
+
135
+ return $masterPassSessionData;
136
+ }
137
+
138
+ /**
139
+ * Retrieve customer session object.
140
+ *
141
+ * @return Mage_Customer_Model_Session
142
+ */
143
+ protected function getCustomerSession()
144
+ {
145
+ return Mage::getModel('customer/session');
146
+ }
147
+
148
+ /**
149
+ * Validate notificationSignature query param when returning from MasterPass wallet.
150
+ *
151
+ * @param string[] $params
152
+ *
153
+ * @throws Mage_Core_Exception
154
+ */
155
+ public function validateParams($params)
156
+ {
157
+ $notificationSignature = null;
158
+
159
+ if (isset($params['notificationSignature'])) {
160
+ $notificationSignature = $params['notificationSignature'];
161
+ unset($params['notificationSignature']);
162
+ }
163
+
164
+ $queryParams = http_build_query($params, '', '&');
165
+
166
+ $computed = md5($queryParams . $this->getAuthorizationKey());
167
+
168
+ if ($computed !== $notificationSignature) {
169
+ Mage::throwException('Validate params: Signature and build hash do not match!');
170
+ }
171
+ }
172
+
173
+ /**
174
+ * Validate GuTID2 query param when returning from MasterPass wallet.
175
+ *
176
+ * @param $params
177
+ *
178
+ * @throws Mage_Core_Exception
179
+ */
180
+ public function validateAndSaveGutId($params)
181
+ {
182
+ $guTID2 = null;
183
+ $guTID2Hash = null;
184
+
185
+ if (isset($params['GuTID2']) && isset($params['GuTID2Hash'])) {
186
+ $guTID2 = $params['GuTID2'];
187
+ $guTID2Hash = $params['GuTID2Hash'];
188
+ }
189
+
190
+ $calculatedGutid2Hash = md5($this->getAuthorizationKey() . $guTID2);
191
+
192
+ if ($guTID2Hash != $calculatedGutid2Hash) {
193
+ Mage::throwException('Validate GutId: GutId2Hash and build hash do not match!');
194
+ }
195
+
196
+ //save billing in masterpass session
197
+ $this->saveDataToMasterpassSession('GuTID2', $params['GuTID2']);
198
+
199
+ }
200
+
201
+ /**
202
+ * Obtain MasterPass config model.
203
+ *
204
+ * @return Expercash_Expercash_Model_Masterpass_Config
205
+ */
206
+ protected function getMasterpassConfig()
207
+ {
208
+ return Mage::getModel('expercash/masterpass_config');
209
+ }
210
+
211
+ /**
212
+ * Obtain pkey (GatewayKey) from configuration.
213
+ *
214
+ * @return string
215
+ */
216
+ protected function getAuthorizationKey()
217
+ {
218
+ $storeId = Mage::app()->getStore()->getId();
219
+ return $this->getMasterpassConfig()->getAuthorizationkey($storeId);
220
+ }
221
+
222
+ /**
223
+ * Save billing data to quote when returning from MasterPass wallet.
224
+ *
225
+ * @param string[] $params
226
+ */
227
+ public function setBillingDataToQuoteAndSession($params)
228
+ {
229
+ $quote = Mage::getSingleton('checkout/session')->getQuote();
230
+ $billingAddress = $quote->getBillingAddress();
231
+ $params = new Varien_Object($params);
232
+
233
+ $billingAddress->setStreetFull($params->getData('customer_address1'));
234
+ $billingAddress->setCity($params->getData('customer_city'));
235
+ $billingAddress->setCountryId($params->getData('customer_country'));
236
+ $billingAddress->setRegion($params->getData('customer_country_subdivision'));
237
+ $region = Mage::getModel('expercash/directory_region')->loadByName(
238
+ $billingAddress->getRegion(), $billingAddress->getCountryId()
239
+ );
240
+
241
+ $billingAddress->setRegionId($region->getId());
242
+ $billingAddress->setEmail($params->getData('customer_email'));
243
+ $billingAddress->setFirstname($params->getData('customer_prename'));
244
+ $billingAddress->setLastname($params->getData('customer_name'));
245
+ $billingAddress->setTelephone($params->getData('customer_telephone'));
246
+ $billingAddress->setPostcode($params->getData('customer_zip'));
247
+ $billingAddress->save();
248
+
249
+
250
+ $billingAddressHash = $this->getArrayHash($this->getBillingArray($billingAddress));
251
+ $this->saveDataToMasterpassSession('billingAddress', $billingAddressHash);
252
+ }
253
+
254
+ /**
255
+ * Calculate hash from given data.
256
+ *
257
+ * @param mixed $dataArray
258
+ *
259
+ * @return string
260
+ */
261
+ public function getArrayHash($dataArray)
262
+ {
263
+ return md5(json_encode($dataArray));
264
+ }
265
+
266
+ /**
267
+ * Obtain billing address properties as array.
268
+ *
269
+ * @param Mage_Customer_Model_Address_Abstract $billingAddress
270
+ *
271
+ * @return string[]
272
+ */
273
+ public function getBillingArray($billingAddress)
274
+ {
275
+ $billingAddressArray = $billingAddress->toArray(
276
+ array(
277
+ 'street',
278
+ 'city',
279
+ 'country_id',
280
+ 'region',
281
+ 'region_id',
282
+ 'email',
283
+ 'firstname',
284
+ 'lastname',
285
+ 'telephone',
286
+ 'postcode',
287
+ )
288
+ );
289
+
290
+ unset($billingAddressArray['items']);
291
+ unset($billingAddressArray['totals']);
292
+ unset($billingAddressArray['rates']);
293
+
294
+ return $billingAddressArray['email'];
295
+ }
296
+
297
+ /**
298
+ * Save shipping data on quote.
299
+ *
300
+ * @param mixed[] $params
301
+ *
302
+ * @return void
303
+ */
304
+ public function setShippingDataToQuote($params)
305
+ {
306
+ $quote = Mage::getSingleton('checkout/session')->getQuote();
307
+ $shippingAddress = $quote->getShippingAddress();
308
+ $params = new Varien_Object($params);
309
+
310
+ // master data
311
+ $deliveryFirstname = '';
312
+ $deliveryLastname = '';
313
+ $deliveryFullname = $params->getData('delivery_fullname');
314
+ if ($deliveryFullname) {
315
+ $deliveryFullname = explode(' ', $deliveryFullname);
316
+ $deliveryLastname = array_pop($deliveryFullname);
317
+ $deliveryFirstname = empty($deliveryFullname) ? '' : implode($deliveryFullname);
318
+ }
319
+ $shippingAddress->setFirstname($deliveryFirstname);
320
+ $shippingAddress->setLastname($deliveryLastname);
321
+ $shippingAddress->setTelephone($params->getData('delivery_telephone'));
322
+
323
+ // address data
324
+ $shippingAddress->setStreetFull($params->getData('delivery_address1'));
325
+ $shippingAddress->setCity($params->getData('delivery_city'));
326
+ $shippingAddress->setCountryId($params->getData('delivery_country'));
327
+ $shippingAddress->setRegion($params->getData('delivery_country_subdivision'));
328
+ $region = Mage::getModel('expercash/directory_region')->loadByName(
329
+ $shippingAddress->getRegion(), $shippingAddress->getCountryId()
330
+ );
331
+ $shippingAddress->setRegionId($region->getId());
332
+ $shippingAddress->setPostcode($params->getData('delivery_zip'));
333
+
334
+ $shippingAddress->save();
335
+ }
336
+
337
+ /**
338
+ * Set MasterPass Full Checkout payment method in quote.
339
+ *
340
+ * @return void
341
+ */
342
+ public function setPaymentInfoToQuote()
343
+ {
344
+ $expercashCode = Mage::getModel('expercash/expercashmpf')->getCode();
345
+ $quote = Mage::getSingleton('checkout/session')->getQuote();
346
+
347
+ if ($quote->isVirtual()) {
348
+ $quote->getBillingAddress()->setPaymentMethod($expercashCode);
349
+ } else {
350
+ $quote->getShippingAddress()->setPaymentMethod($expercashCode);
351
+ }
352
+
353
+ // shipping totals may be affected by payment method
354
+ if (!$quote->isVirtual() && $quote->getShippingAddress()) {
355
+ $quote->getShippingAddress()->setCollectShippingRates(true);
356
+ }
357
+
358
+ $payment = $quote->getPayment();
359
+ $payment->importData(array('method' => $expercashCode));
360
+ $quote->save();
361
+ }
362
+
363
+ /**
364
+ * Set guest method and selected payment method to onepage checkout.
365
+ *
366
+ * @return void
367
+ */
368
+ public function initOnePageCheckout()
369
+ {
370
+ $this->setPaymentInfoToQuote();
371
+ $quote = Mage::getSingleton('checkout/session')->getQuote();
372
+ }
373
+
374
+ /**
375
+ * Obtain current onepage checkout object.
376
+ *
377
+ * @return Mage_Checkout_Model_Type_Onepage
378
+ */
379
+ protected function getOnePage()
380
+ {
381
+ return Mage::getSingleton('checkout/type_onepage');
382
+ }
383
+
384
+ /**
385
+ * Save query params to payment's additional information when returning from MasterPass wallet.
386
+ *
387
+ * @param string[] $params
388
+ *
389
+ * @return bool
390
+ */
391
+ public function saveEpiResponseOnPayment($params)
392
+ {
393
+ $quote = $this->getOnePage()->getQuote();
394
+ $payment = $quote->getPayment()->getMethodInstance();
395
+ //Save additional payment information to order-payment
396
+ $payment->setAdditionalPaymentInfo($quote->getPayment(), $params);
397
+ $quote->save();
398
+ }
399
+
400
+ /**
401
+ * Check and handle MasterPass Full ChecKout API response data.
402
+ *
403
+ * @param string[] $response
404
+ * @param Mage_Sales_Model_Order $order
405
+ *
406
+ * @return bool
407
+ */
408
+ public function orderAndTransactionHandling($response, $order)
409
+ {
410
+ $storeId = $order->getStoreId();
411
+ $payment = $order->getPayment();
412
+
413
+ if (is_array($response) && isset($response['rc']) && $response['rc'] == '100') {
414
+ /* @var $expercash Expercash_Expercash_Model_Expercash */
415
+ $expercash = $order->getPayment()->getMethodInstance();
416
+
417
+ $this->setExpercashRef($response, $expercash, $order);
418
+ $this->setTxData($response, $expercash, $order, $storeId);
419
+ $this->setPaymentStatus($payment);
420
+
421
+ $payment->setAdditionalInformation('transactionId', $response['taid']);
422
+ $payment->setTransactionId($response['taid']);
423
+ $payment->setIsTransactionClosed(false);
424
+
425
+ //Save additional payment information to order-payment
426
+ $order->addStatusHistoryComment(
427
+ $response['rctext'],
428
+ $payment->getConfigData('order_status', $storeId)
429
+ );
430
+
431
+ if (false == $order->getEmailSent()) {
432
+ $order->sendNewOrderEmail();
433
+ }
434
+
435
+ $status = true;
436
+ $this->updateOrder($payment, $order);
437
+
438
+ } else {
439
+ $this->cancelOrder($order);
440
+ $status = false;
441
+ }
442
+
443
+ $order->save();
444
+
445
+ return $status;
446
+ }
447
+
448
+ /**
449
+ * Save transaction reference to quote payment:
450
+ * - sales_flat_quote_payment.expercash_gutid
451
+ *
452
+ * @param string[] $response
453
+ * @param Expercash_Expercash_Model_Expercashmpf $expercash
454
+ * @param Mage_Sales_Model_Order $order
455
+ */
456
+ public function setExpercashRef($response, $expercash, $order)
457
+ {
458
+ $expRefType = 'expercash_gutid';
459
+ $expercash->setExperCashData(
460
+ $order->getQuoteId(), $expRefType, $response["taid"]
461
+ );
462
+ }
463
+
464
+ /**
465
+ * Save transaction info to quote payment:
466
+ * - sales_flat_quote_payment.expercash_request_type
467
+ * - sales_flat_quote_payment.expercash_transaction_id
468
+ * - sales_flat_quote_payment.expercash_paymenttype
469
+ *
470
+ * @param string[] $response
471
+ * @param Expercash_Expercash_Model_Expercashmpf $expercash
472
+ * @param Mage_Sales_Model_Order $order
473
+ */
474
+ public function setTxData($response, $expercash, $order)
475
+ {
476
+ if ($expercash instanceof Expercash_Expercash_Model_Expercashmpf) {
477
+ $expPaymentType = $expercash->getExpercashPaymentType($order->getPayment(), $order->getStoreId());
478
+ $expercash->setExperCashData($order->getQuoteId(), 'expercash_request_type', $expPaymentType);
479
+ }
480
+
481
+ $expercash->setExperCashData($order->getQuoteId(), 'expercash_transaction_id', $response["taid"]);
482
+ $expercash->setExperCashData($order->getQuoteId(), 'expercash_paymenttype', 'CC');
483
+ }
484
+
485
+ /**
486
+ * Check if MasterPass Full Checkout is currently selected as payment method.
487
+ *
488
+ * @return bool
489
+ */
490
+ public function isFullCheckout()
491
+ {
492
+ $payment = $this->getOnePage()->getQuote()->getPayment();
493
+ if (!$payment->getMethod()) {
494
+ return false;
495
+ }
496
+
497
+ if (!$payment->getMethodInstance() instanceof Expercash_Expercash_Model_Expercashmpf) {
498
+ return false;
499
+ }
500
+
501
+ return true;
502
+ }
503
+
504
+ /**
505
+ * Obtain the frontend template to be used in one page checkout.
506
+ *
507
+ * In case MasterPass Full Checkout is selected as payment method, return
508
+ * a customized template including additional JS, Otherwise, return the
509
+ * template as defined via layout xml files.
510
+ *
511
+ * @return string
512
+ */
513
+ public function getOpcTemplate()
514
+ {
515
+ $template = Mage::getSingleton('core/layout')->getBlock('checkout.onepage')->getTemplate();
516
+
517
+ if ($this->isFullCheckout()) {
518
+ $template = 'expercash/checkout/onepage.phtml';
519
+ }
520
+
521
+ if ($this->isCE15()) {
522
+ $template = 'expercash/checkout/ce15/onepage.phtml';
523
+ }
524
+
525
+ return $template;
526
+ }
527
+
528
+ protected function isCE15()
529
+ {
530
+ $result = false;
531
+ if (Mage::getVersion() == '1.5.0.1') {
532
+ $result = true;
533
+ }
534
+
535
+ return $result;
536
+ }
537
+
538
+
539
+ }
app/code/community/Expercash/Expercash/Helper/Payment.php ADDED
@@ -0,0 +1,650 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ class Expercash_Expercash_Helper_Payment extends Mage_Core_Helper_Abstract
23
+ {
24
+
25
+ protected $_expercashStack = false;
26
+
27
+ /**
28
+ * @var $dataHelper Expercash_Expercash_Helper_Data
29
+ */
30
+ private $dataHelper = null;
31
+
32
+
33
+ /**
34
+ * the required params that must be in the reponse
35
+ *
36
+ * @var array $requiredParam
37
+ */
38
+ private $requiredParams
39
+ = array('amount', 'currency', 'paymentMethod', 'transactionId', 'GuTID',
40
+ 'exportKey');
41
+
42
+ /**
43
+ * setter for data helper
44
+ *
45
+ * @param null $dataHelper
46
+ */
47
+ public function setDataHelper($dataHelper)
48
+ {
49
+ $this->dataHelper = $dataHelper;
50
+ }
51
+
52
+ /**
53
+ * getter for data helper
54
+ *
55
+ * @return Expercash_Expercash_Helper_Data
56
+ */
57
+ public function getHelper()
58
+ {
59
+ if (null === $this->dataHelper) {
60
+ $this->dataHelper = Mage::helper('expercash/data');
61
+ }
62
+
63
+ return $this->dataHelper;
64
+ }
65
+
66
+
67
+ public function createExperCashOrderId()
68
+ {
69
+ $orderId = date('Ymd') . '_ED' . substr(rand(0, 1000000), 0, 8);
70
+
71
+ // $this->setExperCashOrderId($orderId);
72
+
73
+ return $orderId;
74
+ }
75
+
76
+ /**
77
+ * save expercash data in db
78
+ *
79
+ * @param integer $id QuoteId
80
+ * @param string $key
81
+ * @param string $value
82
+ */
83
+ public function setExperCashData($id, $key, $value)
84
+ {
85
+ $resources = Mage::getSingleton('core/resource');
86
+ $connWrite = $resources->getConnection('core_write');
87
+ $query = $connWrite->update(
88
+ $resources->getTableName('sales_flat_quote_payment'),
89
+ array($key => $value), "`quote_id` = " . $id
90
+ );
91
+ }
92
+
93
+ /**
94
+ * return expercash payment data from sales_flat_quote_payment based on payment id
95
+ *
96
+ * @param integer $id QuoteId
97
+ *
98
+ * @return array
99
+ */
100
+ public function getExperCashData($id)
101
+ {
102
+ $resources = Mage::getSingleton('core/resource');
103
+ $connRead = $resources->getConnection('core_read');
104
+
105
+ $query = $connRead->select()
106
+ ->from(
107
+ $resources->getTableName('sales_flat_quote_payment'), array(
108
+ 'expercash_request_type',
109
+ 'expercash_epi_payment_id',
110
+ 'expercash_gutid_capture',
111
+ 'expercash_gutid',
112
+ 'expercash_transaction_id',
113
+ 'expercash_paymenttype'
114
+ )
115
+ )
116
+ ->where("`quote_id` = " . $id);
117
+
118
+ return $connRead->fetchAll($query);
119
+ }
120
+
121
+ /**
122
+ * get expercash info
123
+ *
124
+ * @param $string
125
+ * @param $id
126
+ *
127
+ * @return bool
128
+ */
129
+ public function getExperCashInfo($string, $id)
130
+ {
131
+ if ($this->_expercashStack === false) {
132
+ $this->_expercashStack = $this->getExperCashData($id);
133
+ }
134
+
135
+ return isset($this->_expercashStack[0][$string])
136
+ ? $this->_expercashStack[0][$string] : false;
137
+ }
138
+
139
+ /**
140
+ * send invoice to customer if that was configured by the merchant
141
+ *
142
+ * @param Mage_Sales_Model_Order_Invoice $invoice Invoice to be sent
143
+ *
144
+ * @return void
145
+ */
146
+ public function sendInvoiceToCustomer(
147
+ Mage_Sales_Model_Order_Invoice $invoice
148
+ ) {
149
+ $code = $invoice->getOrder()->getPayment()->getMethod();
150
+ $storeId = $invoice->getOrder()->getStoreId();
151
+ if (false == $invoice->getEmailSent()
152
+ && Mage::getModel('expercash/config')->getConfigData(
153
+ 'sendinvoicemail', $code, $storeId
154
+ )
155
+ ) {
156
+ $invoice->sendEmail($notifyCustomer = true);
157
+ }
158
+ }
159
+
160
+ /**
161
+ * check and handle the response data
162
+ *
163
+ * @param $response array
164
+ *
165
+ * @return bool
166
+ */
167
+ public function checkReturnedData($response)
168
+ {
169
+
170
+ if (!$this->checkResponseParams($response)) {
171
+ Mage::throwException(
172
+ $this->getHelper()->__('Response is not correct.')
173
+ );
174
+ }
175
+ $order = $this->getOrder($response['transactionId']);
176
+ if (!$this->checkOrderDependentConditions($order, $response)) {
177
+ Mage::throwException(
178
+ $this->getHelper()->__('Response is not correct.')
179
+ );
180
+ }
181
+ $storeId = $order->getStoreId();
182
+ $checksum = $this->getCheckSum($response, $storeId, $order);
183
+ $this->getHelper()->log(
184
+ sprintf(
185
+ "Check Hash of response from ExperCash:\n" .
186
+ "Module-Checksum: %s\nExperCash-Checksum: %s",
187
+ $checksum,
188
+ $response["exportKey"]
189
+ )
190
+ );
191
+ $payment = $order->getPayment();
192
+ if ($checksum == $response["exportKey"]) {
193
+ /* @var $expercash Expercash_Expercash_Model_Expercash */
194
+ $expercash = $order->getPayment()->getMethodInstance();
195
+
196
+ $this->setExpercashRef($response, $expercash, $order);
197
+ $this->setTxData($response, $expercash, $order, $storeId);
198
+ $this->setPaymentStatus($payment);
199
+ //Save additional payment information to order-payment
200
+ $expercash->setAdditionalPaymentInfo($payment, $response);
201
+ $this->setOrderStatus($response, $expercash, $order);
202
+
203
+ if (false == $order->getEmailSent()) {
204
+ $order->sendNewOrderEmail();
205
+ $order->save();
206
+ }
207
+
208
+ $this->createInvoice($expercash, $order, $response);
209
+ $status = true;
210
+ $this->updateOrder($payment, $order);
211
+ } else {
212
+ $this->cancelOrder($order);
213
+ $status = false;
214
+ }
215
+
216
+ return $status;
217
+ }
218
+
219
+ /**
220
+ * build and return the checksum from the response params
221
+ *
222
+ * @param $response
223
+ * @param $storeId
224
+ *
225
+ * @return string
226
+ */
227
+ protected function getCheckSum($response, $storeId, $order)
228
+ {
229
+ $result = $response["amount"]
230
+ . $response["currency"]
231
+ . $response["paymentMethod"]
232
+ . $response["transactionId"]
233
+ . $response["GuTID"];
234
+
235
+ // if payment is barzahlen include paymentStatus param in checksum
236
+ if ($order->getPayment()->getMethod()
237
+ == Expercash_Expercash_Model_Expercashpc::PAYMENT_METHOD_NAME
238
+ ) {
239
+ $result .= $response["paymentStatus"];
240
+ }
241
+
242
+ return md5(
243
+ $result . Mage::getModel('expercash/config')->getAuthorizationkey(
244
+ $storeId
245
+ )
246
+ );
247
+ }
248
+
249
+ /**
250
+ * check if response has all the required params
251
+ *
252
+ * @param array $params
253
+ *
254
+ * @return bool
255
+ */
256
+ private function checkResponseParams(array $params)
257
+ {
258
+ $result = true;
259
+ $requiredKeys = $this->getRequiredParams();
260
+ foreach ($requiredKeys as $key) {
261
+ if (!array_key_exists($key, $params)) {
262
+ $result = false;
263
+ }
264
+ }
265
+
266
+ return $result;
267
+ }
268
+
269
+
270
+ /**
271
+ * check if the order dependent params exist
272
+ *
273
+ * @param Mage_Sales_Model_Order $order
274
+ * @param array $params
275
+ *
276
+ * @return bool
277
+ */
278
+ private function checkOrderDependentConditions(
279
+ Mage_Sales_Model_Order $order, array $params
280
+ ) {
281
+ $result = true;
282
+ $payment = $order->getPayment();
283
+ if (!$this->validateNonPcExpercashPayments($payment)
284
+ || !$this->getBarzahlenParameterExists($payment, $params)
285
+ || !$this->validatePcExpercashPayment($payment, $order, $params)
286
+ ) {
287
+ $result = false;
288
+ }
289
+ return $result;
290
+ }
291
+
292
+ /**
293
+ * check if the param paymenStatus exists if payment method was barzahlen
294
+ *
295
+ * @param $payment Mage_Sales_Model_Order_Payment
296
+ * @param $params array
297
+ *
298
+ * @return bool
299
+ */
300
+ private function getBarzahlenParameterExists($payment, $params)
301
+ {
302
+ $result = true;
303
+ if ($payment->getMethod() == Expercash_Expercash_Model_Expercashpc::PAYMENT_METHOD_NAME
304
+ && !array_key_exists('paymentStatus', $params)
305
+ ) {
306
+ $result = false;
307
+ }
308
+ return $result;
309
+ }
310
+
311
+ /**
312
+ * check if notifyActionCounter is not above 1 for non barzahlen payment method
313
+ *
314
+ * @param $payment Mage_Sales_Model_Order_Payment
315
+ *
316
+ * @return bool
317
+ */
318
+ private function validateNonPcExpercashPayments($payment)
319
+ {
320
+ $result = true;
321
+ if ($payment->getMethod() != Expercash_Expercash_Model_Expercashpc::PAYMENT_METHOD_NAME
322
+ && $payment->getAdditionalInformation('notifyActionCounter') >= 1
323
+ ) {
324
+ $result = false;
325
+ }
326
+ return $result;
327
+ }
328
+
329
+ /**
330
+ * If payment method was barzahlen and the paymenStatus is paid, the notifyCounter should be max 2
331
+ *
332
+ * @param $payment Mage_Sales_Model_Order_Payment
333
+ *
334
+ * @return bool
335
+ */
336
+ private function validatePcExpercashPayment($payment, $order, $params)
337
+ {
338
+ $result = true;
339
+ if ($payment->getMethod() == Expercash_Expercash_Model_Expercashpc::PAYMENT_METHOD_NAME
340
+ && $payment->getAdditionalInformation('paymentStatus')
341
+ == Expercash_Expercash_Model_Expercashpc::BARZAHLEN_STATUS_PAID
342
+ && !$this->validateBarzahlenSecondCall($order)
343
+ ) {
344
+ $result = false;
345
+ }
346
+
347
+ if ($payment->getMethod() == Expercash_Expercash_Model_Expercashpc::PAYMENT_METHOD_NAME
348
+ && $payment->getAdditionalInformation('paymentStatus')
349
+ == Expercash_Expercash_Model_Expercashpc::BARZAHLEN_STATUS_OPEN
350
+ && $params['paymentStatus'] != Expercash_Expercash_Model_Expercashpc::BARZAHLEN_STATUS_PAID
351
+ ) {
352
+ $result = false;
353
+ }
354
+ return $result;
355
+ }
356
+
357
+ /**
358
+ * check if the second call to the notify action was not older then 14 days past order creation date
359
+ *
360
+ * @param $order Mage_Sales_Model_Order
361
+ *
362
+ * @return bool
363
+ */
364
+ private function validateBarzahlenSecondCall($order)
365
+ {
366
+ $result = false;
367
+ $orderDate = strtotime($order->getCreatedAt());
368
+ $allowedDate = time();
369
+ if (round(($allowedDate - $orderDate) / (3600 * 24)) <= 14) {
370
+ $result = true;
371
+ }
372
+ return $result;
373
+ }
374
+
375
+ /**
376
+ * get the required params
377
+ *
378
+ * @return array
379
+ */
380
+ private function getRequiredParams()
381
+ {
382
+ return $this->requiredParams;
383
+ }
384
+
385
+ /**
386
+ * load and return the order based on increment id
387
+ *
388
+ * @param $orderIncrementId
389
+ *
390
+ * @return null|Mage_Sales_Model_Order
391
+ */
392
+ public function getOrder($orderIncrementId)
393
+ {
394
+ $order = Mage::getModel('sales/order')->loadByIncrementId(
395
+ $orderIncrementId
396
+ );
397
+ if (null === $order->getId()) {
398
+ Mage::throwException(
399
+ $this->getHelper()->__('Could not load order.')
400
+ );
401
+ }
402
+
403
+ return $order;
404
+ }
405
+
406
+ /**
407
+ * Save invoice for order
408
+ *
409
+ * @param Mage_Sales_Model_Order $order
410
+ *
411
+ * @return boolean Can save invoice or not
412
+ */
413
+ public function saveInvoice(Mage_Sales_Model_Order $order)
414
+ {
415
+ if ($order->canInvoice()) {
416
+ Mage::helper('expercash/data')->log(
417
+ sprintf(
418
+ "Save invoice for order '%s'",
419
+ $order->getIncrementId()
420
+ )
421
+ );
422
+
423
+ $invoice = $order->prepareInvoice();
424
+ $invoice->register();
425
+ $transaction = Mage::getModel('core/resource_transaction')
426
+ ->addObject($invoice)
427
+ ->addObject($invoice->getOrder())
428
+ ->save();
429
+ $this->sendInvoiceToCustomer($invoice);
430
+
431
+ return true;
432
+ }
433
+ return false;
434
+ }
435
+
436
+ /**
437
+ * set the expercash payment reference based on payment type
438
+ *
439
+ * @param $response array
440
+ * @param $expercash Mage_Sales_Model_Order_Payment
441
+ * @param $order Mage_Sales_Model_Order
442
+ */
443
+ public function setExpercashRef($response, $expercash, $order)
444
+ {
445
+ $storeId = $order->getStoreId();
446
+ $expRefType = 'expercash_gutid';
447
+ if (in_array($expercash->getConfigData('paymenttype', $storeId), $this->getBuyTypes())
448
+ ) {
449
+ $expRefType = 'expercash_epi_payment_id';
450
+ }
451
+ $expercash->setExperCashData(
452
+ $order->getQuoteId(), $expRefType, $response["GuTID"]
453
+ );
454
+ }
455
+
456
+ /**
457
+ * return the payment types
458
+ *
459
+ * @return array
460
+ */
461
+ private function getBuyTypes()
462
+ {
463
+ return array(
464
+ Expercash_Expercash_Model_Expercashcc::PAYMENT_TYPE_CC_BUY,
465
+ Expercash_Expercash_Model_Expercashelv::PAYMENT_TYPE_ELV_BUY,
466
+ Expercash_Expercash_Model_Expercashmp::PAYMENT_TYPE_MP_BUY,
467
+ Expercash_Expercash_Model_Expercashmpf::PAYMENT_TYPE_MPF_BUY,
468
+ );
469
+ }
470
+
471
+ /**
472
+ * set the expercash payment data on the payment object
473
+ *
474
+ * @param $response array
475
+ * @param $expercash Mage_Sales_Model_Order_Payment
476
+ * @param $order Mage_Sales_Model_Order
477
+ */
478
+ public function setTxData($response, $expercash, $order)
479
+ {
480
+ $storeId = $order->getStoreId();
481
+ $expercash->setExperCashData(
482
+ $order->getQuoteId(),
483
+ 'expercash_request_type',
484
+ $expercash->getConfigData('paymenttype', $storeId)
485
+ );
486
+
487
+ $expercash->setExperCashData(
488
+ $order->getQuoteId(), 'expercash_transaction_id',
489
+ $response["transactionId"]
490
+ );
491
+ $expercash->setExperCashData(
492
+ $order->getQuoteId(), 'expercash_paymenttype',
493
+ $response["paymentMethod"]
494
+ );
495
+ }
496
+
497
+ /**
498
+ * set payment status to payment
499
+ *
500
+ * @param $payment Mage_Sales_Model_Order_Payment
501
+ */
502
+ public function setPaymentStatus($payment)
503
+ {
504
+ $payment->setStatus(
505
+ ExperCash_ExperCash_Model_ExperCash::STATUS_APPROVED
506
+ );
507
+ $payment->setStatusDescription(
508
+ Mage::helper('expercash')->__('Successful.')
509
+ );
510
+ }
511
+
512
+ /**
513
+ * set the order status
514
+ *
515
+ * @param $response array
516
+ * @param $expercash Mage_Sales_Model_Order_Payment
517
+ * @param $order Mage_Sales_Model_Order
518
+ */
519
+ public function setOrderStatus($response, $expercash, $order)
520
+ {
521
+ $storeId = $order->getStoreId();
522
+ $status = $expercash->getConfigData('order_status', $storeId);;
523
+ $message = Mage::helper('expercash')->__(
524
+ 'Authorization was successful.'
525
+ );
526
+ if (in_array($expercash->getConfigData('paymenttype', $storeId), $this->getBuyTypes())
527
+ || $this->isBarzahlenStatusPaid($response, $expercash, $storeId)
528
+ ) {
529
+ $message = Mage::helper('expercash')->__('Buy was successful.');
530
+ } elseif ($expercash->getConfigData('paymenttype', $storeId)
531
+ == Expercash_Expercash_Model_Expercashpc::PAYMENT_TYPE_PC
532
+ ) {
533
+ $status = Mage_Sales_Model_Order::STATE_PENDING_PAYMENT;
534
+ $message = Mage::helper('expercash')->__('Awaiting Barzahlen Payment.');
535
+
536
+ }
537
+ $order->addStatusToHistory(
538
+ $status,
539
+ $message
540
+ );
541
+ }
542
+
543
+ /**
544
+ * auto create invoice if config option is set to true
545
+ *
546
+ * @param $expercash Mage_Sales_Model_Order_Payment
547
+ * @param $order Mage_Sales_Model_Order
548
+ */
549
+ public function createInvoice($expercash, $order, $response)
550
+ {
551
+ $storeId = $order->getStoreId();
552
+ if (($expercash->isDirectSaleEnabled() || $this->isBarzahlenStatusPaid($response, $expercash, $storeId))
553
+ && $expercash->getConfigData('createinvoice', $storeId) == 1
554
+ ) {
555
+ if ($this->saveInvoice($order)) {
556
+ $order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true);
557
+ }
558
+ }
559
+ }
560
+
561
+ /**
562
+ * cancel order and set history comment about it
563
+ *
564
+ * @param $order Mage_Sales_Model_Order
565
+ */
566
+ public function cancelOrder($order)
567
+ {
568
+ $order->cancel();
569
+ $order->addStatusToHistory(
570
+ $order->getStatus(),
571
+ Mage::helper('expercash')->__(
572
+ 'Customer was rejected by ExperCash'
573
+ )
574
+ );
575
+ $order->save();
576
+ }
577
+
578
+ /**
579
+ * update the order with its payment and increase notifyActionCounter for each call
580
+ *
581
+ * @param $payment Mage_Sales_Model_Order_Payment
582
+ * @param $order Mage_Sales_Model_Order
583
+ */
584
+ public function updateOrder($payment, $order)
585
+ {
586
+ $notifyActionCounter = (int)$payment->getAdditionalInformation(
587
+ 'notifyActionCounter'
588
+ );
589
+ $payment->setAdditionalInformation(
590
+ 'notifyActionCounter', ++$notifyActionCounter
591
+ );
592
+ $order->setPayment($payment);
593
+ $order->save();
594
+ }
595
+
596
+ /**
597
+ * check if payment status for barzahlen is status paid
598
+ *
599
+ * @param $response array
600
+ * @param $expercash Mage_Sales_Model_Order_Payment
601
+ * @param $storeId int
602
+ *
603
+ * @return bool
604
+ */
605
+ private function isBarzahlenStatusPaid($response, $expercash, $storeId)
606
+ {
607
+ return $expercash->getConfigData('paymenttype', $storeId)
608
+ == Expercash_Expercash_Model_Expercashpc::PAYMENT_TYPE_PC
609
+ && $response['paymentStatus']
610
+ == Expercash_Expercash_Model_Expercashpc::BARZAHLEN_STATUS_PAID;
611
+ }
612
+
613
+
614
+ public function saveTransactionData($payment, $responseArray, $transactionType)
615
+ {
616
+ $payment->setTransactionId($responseArray['taid']);
617
+ foreach ($responseArray as $key => $value) {
618
+ $payment->setTransactionAdditionalInfo($key, $value);
619
+ }
620
+ }
621
+
622
+ public function getPaymentReferenceId($payment)
623
+ {
624
+ $result = $payment->getMethodInstance()->getExperCashInfo('expercash_gutid');
625
+ if ($payment->getMethodInstance() instanceof Expercash_Expercash_Model_Expercashmpf) {
626
+ $result = $payment->getAdditionalInformation('GuTID');
627
+ $authTransAction = $payment->getAuthorizationTransaction();
628
+ if ($authTransAction) {
629
+ $result = $authTransAction->getTxnId();
630
+ }
631
+
632
+ }
633
+
634
+ return $result;
635
+ }
636
+
637
+ /**
638
+ * remove payment method from quote
639
+ *
640
+ * @param Mage_Sales_Model_Order $quote
641
+ */
642
+ public function removePaymentFromQuote(Mage_Sales_Model_Quote $quote)
643
+ {
644
+ $payment = $quote->getPayment();
645
+ $payment->setMethod(null);
646
+ $quote->setDataChanges(true);
647
+ $quote->save();
648
+
649
+ }
650
+ }
app/code/community/Expercash/Expercash/Model/Api/Abstract.php ADDED
@@ -0,0 +1,191 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+ abstract class Expercash_Expercash_Model_Api_Abstract
24
+ {
25
+
26
+ /**
27
+ * Max. amount of redirections to follow
28
+ */
29
+ const MAXREDIRECTS = 2;
30
+
31
+ /**
32
+ * Timeout in seconds before closing the connection
33
+ */
34
+ const TIMEOUT = 30;
35
+
36
+ /**
37
+ * Transport layer for SSL
38
+ */
39
+ const SSLTRANSPORT = 'tcp';
40
+
41
+
42
+ /**
43
+ * @var string the client uri
44
+ */
45
+ protected $urlToCall = null;
46
+
47
+ /**
48
+ * @var Expercash_Expercash_Model_Config
49
+ */
50
+ protected $config = null;
51
+
52
+ /**
53
+ * set the client uri
54
+ *
55
+ * @param string $url
56
+ */
57
+ public function setUrlToCall($url)
58
+ {
59
+ $this->urlToCall = $url;
60
+ }
61
+
62
+ /**
63
+ * setter for config object
64
+ *
65
+ * @param Expercash_Expercash_Model_Config $config
66
+ */
67
+ public function setConfig($config)
68
+ {
69
+ $this->config = $config;
70
+ }
71
+
72
+
73
+ /**
74
+ * get a Varien_Http_Client
75
+ *
76
+ * @return Varien_Http_Client
77
+ */
78
+ public function getClient()
79
+ {
80
+ return new Varien_Http_Client();
81
+ }
82
+
83
+ /**
84
+ * get the config object
85
+ *
86
+ * @return Expercash_Expercash_Model_Config|
87
+ */
88
+ public function getConfig()
89
+ {
90
+ if (null === $this->config) {
91
+ $this->config = Mage::getModel('expercash/config');
92
+ }
93
+ return $this->config;
94
+ }
95
+
96
+ /**
97
+ * return the client uri to call
98
+ *
99
+ * @param int $storeId
100
+ *
101
+ * @return string
102
+ */
103
+ public function getUrlToCall($storeId)
104
+ {
105
+ if (null === $this->urlToCall) {
106
+ $this->urlToCall = $this->getConfig()->getEpiUrl($storeId);
107
+ }
108
+ return $this->urlToCall;
109
+ }
110
+
111
+ /**
112
+ * send request via POST to epi gateway
113
+ *
114
+ * @param array $request
115
+ * @param int storeId
116
+ *
117
+ * @return xml
118
+ * @throws Mage_Core_Exception - on errors
119
+ */
120
+ protected function _postRequest(array $request, $storeId = null)
121
+ {
122
+ $client = $this->getClient();
123
+ $client->setUri($this->getUrlToCall($storeId));
124
+ $client->setConfig(
125
+ array(
126
+ 'maxredirects' => self::MAXREDIRECTS,
127
+ 'timeout' => self::TIMEOUT,
128
+ 'ssltransport' => self::SSLTRANSPORT,
129
+ )
130
+ );
131
+
132
+ $client->setParameterPost($request);
133
+ $client->setMethod(Zend_Http_Client::POST);
134
+ $this->getDataHelper()->clientLog(Expercash_Expercash_Helper_Data::LOG_TYPE_REQUEST, $request);
135
+
136
+ try {
137
+ $response = $client->request();
138
+ $responseBody = $response->getBody();
139
+ $this->getDataHelper()->clientLog(Expercash_Expercash_Helper_Data::LOG_TYPE_RESPONSE, $responseBody);
140
+ return $responseBody;
141
+
142
+ } catch (Exception $e) {
143
+ Mage::throwException(
144
+ $this->getDataHelper()->__('Gateway request error: %s', $e->getMessage())
145
+ );
146
+ }
147
+ }
148
+
149
+ /**
150
+ * Parse the bodytext into simpleXML object and returns it
151
+ *
152
+ * @param xml $bodytext
153
+ *
154
+ * @return SimpleXMLElement
155
+ * @throws Exception
156
+ */
157
+ public function parseResponse($bodyText)
158
+ {
159
+ try {
160
+ libxml_use_internal_errors(true);
161
+ $simpleXMLResponse = simplexml_load_string($bodyText);
162
+
163
+ if (false === $simpleXMLResponse
164
+ || true === is_null($simpleXMLResponse)
165
+ || !$simpleXMLResponse instanceof SimpleXMLElement
166
+ ) {
167
+ Mage::throwException(
168
+ $this->getDataHelper()->__('Error while transforming response to simple xml.')
169
+ );
170
+ }
171
+
172
+ return $simpleXMLResponse;
173
+
174
+ } catch (Exception $e) {
175
+ throw $e;
176
+ }
177
+ }
178
+
179
+
180
+ /**
181
+ * get expercash data helper
182
+ *
183
+ * @return Expercash_Expercash_Helper_Data
184
+ */
185
+ protected function getDataHelper()
186
+ {
187
+ $dataHelper = Mage::helper('expercash/data');
188
+ /**@var $dataHelper Expercash_Expercash_Helper_Data * */
189
+ return $dataHelper;
190
+ }
191
+ }
app/code/community/Expercash/Expercash/Model/Api/Api.php ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+ class Expercash_Expercash_Model_Api_Api extends Expercash_Expercash_Model_Api_Abstract
24
+ {
25
+
26
+ const TRANSACTION_SUCCESSFUL = 100;
27
+
28
+ const TRANSACTION_ERROR = 900;
29
+
30
+ /**
31
+ * call the expercash api to get the iframe token
32
+ *
33
+ * @param array $requestParams
34
+ * @return string $iframeToken
35
+ */
36
+ public function getIframeToken(array $requestParams)
37
+ {
38
+ $this->setUrlToCall($this->getConfig()->getIframeTokenUrl());
39
+ $response = $this->_postRequest($requestParams, null);
40
+ $responseArray = $this->parseResponse($response);
41
+ $this->validateResponse($responseArray);
42
+ $iframeToken = $responseArray['sessionId'];
43
+ return $iframeToken;
44
+ }
45
+
46
+ /**
47
+ * validate the response and return the token
48
+ *
49
+ * @param string $response
50
+ *
51
+ * @throws Mage_Core_Exception - in case of invalid response or errors
52
+ * @return mixed string
53
+ */
54
+ protected function validateResponse($responseArray)
55
+ {
56
+ $this->getDataHelper()->log(Zend_Json::encode($responseArray));
57
+ if (!array_key_exists('rc',$responseArray) || $responseArray['rc'] != self::TRANSACTION_SUCCESSFUL
58
+ || !array_key_exists('sessionId', $responseArray))
59
+ Mage::throwException('invalid response from expercash');
60
+ }
61
+
62
+ /**
63
+ * get core data helper
64
+ *
65
+ * @return Mage_Core_Helper_Abstract|Mage_Core_Helper_Data
66
+ */
67
+ protected function getCoreDataHelper()
68
+ {
69
+ $coreDataHelper = Mage::helper('core/data');
70
+ /**@var $coreDataHelper Mage_Core_Helper_Data **/
71
+ return $coreDataHelper;
72
+ }
73
+
74
+ /**
75
+ * @param $response
76
+ *
77
+ * @return array
78
+ */
79
+ public function parseResponse($response)
80
+ {
81
+ $simpleXmlResponse = parent::parseResponse($response);
82
+ $responseArray = $this->getCoreDataHelper()->xmlToAssoc($simpleXmlResponse);
83
+ return $responseArray;
84
+ }
85
+ }
86
+
app/code/community/Expercash/Expercash/Model/Api/Capture.php ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ class Expercash_Expercash_Model_Api_Capture extends Expercash_Expercash_Model_Api_Abstract
23
+ {
24
+ /**
25
+ * Trigger the capture process of the Expercash gateway
26
+ *
27
+ * @param Mage_Sales_Model_Order_Payment $payment
28
+ * @param float $amount
29
+ * @param string $capture_type
30
+ *
31
+ * @return void
32
+ */
33
+ public function capture($payment, $amount, $capture_type)
34
+ {
35
+ $storeId = $payment->getOrder()->getStoreId();
36
+ if ($amount > 0) {
37
+ $requestParameters = $this->getRequestParams($payment, $amount, $capture_type);
38
+ $responseBody = $this->_postRequest($requestParameters, $storeId);
39
+ $this->validateAndSaveResponse($responseBody, $payment);
40
+
41
+ $parsedXML = $this->parseResponse($responseBody);
42
+ $responseArray = Mage::helper('core/data')->xmlToAssoc($parsedXML);
43
+
44
+ Mage::helper('expercash/payment')->saveTransactionData(
45
+ $payment,
46
+ $responseArray,
47
+ Mage_Sales_Model_Order_Payment_Transaction::TYPE_CAPTURE
48
+ );
49
+ }
50
+ }
51
+
52
+ protected function getRequestParams($payment, $amount, $captureType)
53
+ {
54
+ $storeId = $payment->getOrder()->getStoreId();
55
+ /** @var Mage_Sales_Model_Order $order */
56
+ $order = $payment->getOrder();
57
+
58
+ /** @var $config Expercash_Expercash_Model_Config */
59
+ $config = Mage::getModel('expercash/config');
60
+
61
+ $requestParameters = array(
62
+ "pid" => $config->getProjectId($storeId),
63
+ "pkey" => $config->getGatewayKey($storeId),
64
+ "cref" => $order->getIncrementId(),
65
+ "amount" => round($amount * 100),
66
+ "action" => $captureType,
67
+ "reference" => Mage::helper('expercash/payment')->getPaymentReferenceId($payment),
68
+ );
69
+
70
+ return $requestParameters;
71
+ }
72
+
73
+ /**
74
+ * Check the response for validity and save the reponse data
75
+ *
76
+ * @param string $response
77
+ * @param Mage_Sales_Model_Payment $payment
78
+ * @return void
79
+ * @throws Mage_Core_Exception
80
+ */
81
+ public function validateAndSaveResponse($response, $payment)
82
+ {
83
+ try {
84
+ $xmlResponse = $this->parseResponse($response);
85
+
86
+ if ($xmlResponse->rc != 100) {
87
+ Mage::throwException(
88
+ Mage::helper('expercash/data')->__('Response status is not correct: %s', $xmlResponse->rc)
89
+ );
90
+ }
91
+
92
+ $payment->setStatus(Expercash_Expercash_Model_Expercash::STATUS_SUCCESS);
93
+ $this->saveExperCashData($payment, $xmlResponse);
94
+ $this->saveOrderHistory($payment);
95
+ $payment->getOrder()->save();
96
+ } catch (Exception $e) {
97
+ //Reload order to avoid that the order items were marked as invoiced
98
+ $order = Mage::getModel("sales/order")->load(
99
+ $payment->getOrder()->getId()
100
+ );
101
+
102
+ $order->addStatusToHistory(
103
+ $order->getStatus(),
104
+ Mage::helper('expercash/data')->__('Capture-attempt failed with message: %s', $e->getMessage())
105
+ );
106
+ $order->save();
107
+
108
+ Mage::throwException(
109
+ Mage::helper('expercash/data')->__('Error during capture: %s', $e->getMessage())
110
+ );
111
+ }
112
+ }
113
+
114
+ /**
115
+ * saves the expercash order history
116
+ *
117
+ * @param Mage_Sales_Model_Order_Payment $payment
118
+ * @return void
119
+ */
120
+ public function saveOrderHistory($payment)
121
+ {
122
+ $payment->setStatusDescription(
123
+ Mage::helper('expercash/data')->__(
124
+ 'Capture was successful. Captured amount: %s %s',
125
+ $payment->getAmount(),
126
+ $payment->getOrder()->getOrderCurrencyCode()
127
+ )
128
+ );
129
+
130
+ $payment->getOrder()->addStatusToHistory(
131
+ $payment->getOrder()->getStatus(),
132
+ Mage::helper('expercash/data')->__('Capture was successful.')
133
+ );
134
+ }
135
+
136
+ /**
137
+ * saves the expercash response in Sales_Flat_Quote_Payment
138
+ *
139
+ * @param Mage_Sales_Model_Order_Payment $payment
140
+ * @param SimpleXMLElement $response
141
+ * @return void
142
+ */
143
+ public function saveExperCashData($payment, $response)
144
+ {
145
+ $paymentHelper = Mage::helper('expercash/payment');
146
+ $paymentHelper->setExperCashData(
147
+ $payment->getOrder()->getQuoteId(),
148
+ 'expercash_gutid_capture',
149
+ $response->taid
150
+ );
151
+
152
+ $paymentHelper->setExperCashData(
153
+ $payment->getOrder()->getQuoteId(),
154
+ 'expercash_epi_payment_id',
155
+ $response->epi_payment_id
156
+ );
157
+ }
158
+ }
app/code/community/Expercash/Expercash/Model/Api/Masterpass/Capture.php ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+ class Expercash_Expercash_Model_Api_Masterpass_Capture extends Expercash_Expercash_Model_Api_Capture
24
+ {
25
+ /**
26
+ * Trigger the capture process of the Expercash gateway
27
+ *
28
+ * @param Mage_Sales_Model_Order_Payment $payment
29
+ * @param float $amount
30
+ * @param string $capture_type
31
+ *
32
+ * @return void
33
+ */
34
+ public function capture($payment, $amount, $capture_type)
35
+ {
36
+
37
+ $storeId = $payment->getOrder()->getStoreId();
38
+ if ($amount > 0) {
39
+ $requestParameters = $this->getRequestParams($payment, $amount, $capture_type);
40
+ $responseBody = $this->_postRequest($requestParameters, $storeId);
41
+ $this->validateAndSaveResponse($responseBody, $payment);
42
+
43
+ $xmlResponse = $this->parseResponse($responseBody);
44
+ $responseArray = Mage::helper('core/data')->xmlToAssoc($xmlResponse);
45
+
46
+ Mage::helper('expercash/payment')->saveTransactionData(
47
+ $payment,
48
+ $responseArray,
49
+ Mage_Sales_Model_Order_Payment_Transaction::TYPE_CAPTURE
50
+ );
51
+
52
+ $checkOrderHandling = Mage::helper('expercash/masterpass')->orderAndTransactionHandling(
53
+ $responseArray,
54
+ $payment->getOrder()
55
+ );
56
+
57
+ if (false === $checkOrderHandling) {
58
+ Mage::throwException('Error occurred while trying to capture.');
59
+ }
60
+ }
61
+ }
62
+
63
+ /**
64
+ * get params for capture request
65
+ *
66
+ * @param $payment
67
+ * @param $amount
68
+ * @param $captureType
69
+ *
70
+ * @return array
71
+ */
72
+ protected function getRequestParams($payment, $amount, $captureType)
73
+ {
74
+ $requestParameters = Mage::getModel('expercash/request_masterpass_epi')->getPlaceOrderParams(
75
+ $payment->getOrder(),
76
+ $captureType
77
+ );
78
+
79
+ return $requestParameters;
80
+ }
81
+
82
+
83
+ }
app/code/community/Expercash/Expercash/Model/Api/Masterpass/Epi.php ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+ class Expercash_Expercash_Model_Api_Masterpass_Epi extends Expercash_Expercash_Model_Api_Abstract
24
+ {
25
+ /**
26
+ * code for successful transaction
27
+ */
28
+ const TRANSACTION_SUCCESSFUL = 100;
29
+
30
+ const TRANSACTION_ERROR = 900;
31
+
32
+
33
+ public function doEpiRequest(array $requestParams)
34
+ {
35
+ $this->setUrlToCall($this->getConfig()->getEpiUrl());
36
+ $response = $this->_postRequest($requestParams, null);
37
+ $responseArray = $this->parseResponse($response);
38
+ $this->validateResponse($responseArray);
39
+ return $responseArray;
40
+
41
+ }
42
+
43
+ /**
44
+ * validate the response and return the token
45
+ *
46
+ * @param string $response
47
+ *
48
+ * @throws Mage_Core_Exception - in case of invalid response or errors
49
+ * @return mixed string
50
+ */
51
+ public function validateResponse($responseArray)
52
+ {
53
+ if (!array_key_exists('rc',$responseArray) ||
54
+ $responseArray['rc'] != self::TRANSACTION_SUCCESSFUL
55
+ )
56
+ {
57
+ Mage::throwException('Invalid response from expercash.');
58
+ }
59
+ }
60
+
61
+ /**
62
+ * get core data helper
63
+ *
64
+ * @return Mage_Core_Helper_Abstract|Mage_Core_Helper_Data
65
+ */
66
+ protected function getCoreDataHelper()
67
+ {
68
+ $coreDataHelper = Mage::helper('core/data');
69
+ /**@var $coreDataHelper Mage_Core_Helper_Data **/
70
+ return $coreDataHelper;
71
+ }
72
+
73
+ /**
74
+ * @param $response
75
+ *
76
+ * @return array
77
+ */
78
+ public function parseResponse($response)
79
+ {
80
+ $simpleXmlResponse = parent::parseResponse($response);
81
+ $responseArray = $this->getCoreDataHelper()->xmlToAssoc($simpleXmlResponse);
82
+ return $responseArray;
83
+ }
84
+ }
85
+
app/code/community/Expercash/Expercash/Model/Config.php ADDED
@@ -0,0 +1,221 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+
24
+ class Expercash_Expercash_Model_Config
25
+ {
26
+
27
+ /*
28
+ * the payment service path
29
+ */
30
+ const PAYMENT_SERVICE_PATH = 'payment_services/expercash/';
31
+
32
+
33
+ /*
34
+ * expercash token config path
35
+ */
36
+ const TOKEN_REGISTRY_KEY = 'expercash_token';
37
+
38
+ /**
39
+ * get the epi url from the config.xml
40
+ *
41
+ * @return string
42
+ */
43
+ public function getEpiUrl($storeId = null)
44
+ {
45
+ return Mage::getStoreConfig('epi_url/url', $storeId);
46
+ }
47
+
48
+ /**
49
+ * generic getter for config values
50
+ *
51
+ * @param string $field
52
+ * @param string $code
53
+ * @param int $storeId
54
+ *
55
+ * @return mixed
56
+ */
57
+ public function getConfigData($field, $code, $storeId = null)
58
+ {
59
+ $path = 'payment/' . $code . '/' . $field;
60
+ $config = Mage::getStoreConfig($path, $storeId);
61
+ return $config;
62
+ }
63
+
64
+ /**
65
+ * returns the additional payment params that are configured in config.xml
66
+ *
67
+ * @param null $storeId
68
+ *
69
+ * @return mixed
70
+ */
71
+ public function getAdditionalPaymentParams($storeId = null)
72
+ {
73
+ return Mage::getStoreConfig('additionalPaymentParams/params', $storeId);
74
+ }
75
+
76
+ /**
77
+ * @param int $storeId
78
+ *
79
+ * @return string
80
+ */
81
+ public function getPopupId($storeId = null)
82
+ {
83
+ return Mage::getStoreConfig(self::PAYMENT_SERVICE_PATH . 'popup_id', $storeId);
84
+ }
85
+
86
+ /**
87
+ * returns the profil id
88
+ *
89
+ * @param int $storeId
90
+ *
91
+ * @return string
92
+ */
93
+ public function getProfilId($storeId = null)
94
+ {
95
+ return Mage::getStoreConfig(self::PAYMENT_SERVICE_PATH . 'profil_id', $storeId);
96
+ }
97
+
98
+ /**
99
+ * returns the expercash authorization key
100
+ *
101
+ * @param int $storeId
102
+ *
103
+ * @return string
104
+ */
105
+ public function getAuthorizationkey($storeId = null)
106
+ {
107
+ return Mage::getStoreConfig(self::PAYMENT_SERVICE_PATH . 'authorization_key', $storeId);
108
+ }
109
+
110
+ /**
111
+ * returns the expercash gateway key
112
+ *
113
+ * @param int $storeId
114
+ *
115
+ * @return string
116
+ */
117
+ public function getGatewayKey($storeId = null)
118
+ {
119
+ return Mage::getStoreConfig(self::PAYMENT_SERVICE_PATH . 'gateway_key', $storeId);
120
+ }
121
+
122
+ /**
123
+ * returns the project id
124
+ *
125
+ * @param int $storeId
126
+ *
127
+ * @return string
128
+ */
129
+ public function getProjectId($storeId = null)
130
+ {
131
+ return Mage::getStoreConfig(self::PAYMENT_SERVICE_PATH . 'project_id', $storeId);
132
+ }
133
+
134
+ /**
135
+ * returns the iframe css class
136
+ *
137
+ * @param null $storeId
138
+ *
139
+ * @return mixed
140
+ */
141
+ public function getIframeCssClass($storeId = null)
142
+ {
143
+ return Mage::getStoreConfig(self::PAYMENT_SERVICE_PATH . 'iframe_css_class', $storeId);
144
+ }
145
+
146
+ /**
147
+ * returns the iframe width
148
+ *
149
+ * @param int $storeId
150
+ *
151
+ * @return string
152
+ */
153
+ public function getIframeWidth($storeId = null)
154
+ {
155
+ return Mage::getStoreConfig(self::PAYMENT_SERVICE_PATH . 'iframe_width', $storeId);
156
+ }
157
+
158
+ /**
159
+ * returns the iframe height
160
+ *
161
+ * @param int $storeId
162
+ *
163
+ * @return string
164
+ */
165
+ public function getIframeHeight($storeId = null)
166
+ {
167
+ return Mage::getStoreConfig(self::PAYMENT_SERVICE_PATH . 'iframe_height', $storeId);
168
+ }
169
+
170
+ /**
171
+ * returns the css url
172
+ *
173
+ * @param int $storeId
174
+ *
175
+ * @return string
176
+ */
177
+ public function getCssUrl($storeId = null)
178
+ {
179
+ return Mage::getStoreConfig(self::PAYMENT_SERVICE_PATH . 'css_url', $storeId);
180
+ }
181
+
182
+ /**
183
+ * get the iframe token url from config
184
+ * there is no need to support multistore for this, as the url should be the same for all stores
185
+ *
186
+ * @return string
187
+ */
188
+ public function getIframeTokenUrl()
189
+ {
190
+ return Mage::getStoreConfig('iframe_token_url/url');
191
+ }
192
+
193
+ /**
194
+ * get the iframe url from config
195
+ * there is no need to support multistore for this, as the url should be the same for all stores
196
+ *
197
+ * @return string
198
+ */
199
+ public function getIframeUrl()
200
+ {
201
+ return Mage::getStoreConfig('iframe_url/url');
202
+ }
203
+
204
+ /**
205
+ * return the params for shopEnvironment
206
+ *
207
+ * @return array
208
+ */
209
+ public function getShopEnvironmentParams()
210
+ {
211
+ $params = array(
212
+ 'envSystemName' => Mage::helper('expercash/data')->getEnvName(),
213
+ 'envSystemVersion' => Mage::helper('expercash/data')->getMagentoVersion(),
214
+ 'envPaymentModulVersion' => Mage::helper('expercash/data')->getVersion()
215
+ );
216
+
217
+ return json_encode($params);
218
+ }
219
+
220
+
221
+ }
app/code/community/Expercash/Expercash/Model/Directory/Region.php ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+ class Expercash_Expercash_Model_Directory_Region
24
+ {
25
+
26
+ /**
27
+ * check if directory modul version is above 1.6.0
28
+ *
29
+ * @return bool
30
+ */
31
+ public function isLegacyInstallation()
32
+ {
33
+ $directoryVersion = Mage::getConfig()->getModuleConfig('Mage_Directory')->version;
34
+ return version_compare($directoryVersion, '1.6.0.0', '<=');
35
+ }
36
+
37
+ /**
38
+ * load region by name
39
+ *
40
+ * @param $regionName
41
+ * @param $countryId
42
+ *
43
+ * @return $this|Mage_Directory_Model_Region
44
+ */
45
+ public function loadByName($regionName, $countryId)
46
+ {
47
+ $region = Mage::getModel('directory/region');
48
+
49
+ if ($this->isLegacyInstallation()) {
50
+ Mage::getResourceModel('expercash/directory_region')->loadByName($region, $regionName, $countryId);
51
+ return $region;
52
+ }
53
+
54
+ return $region->loadByName($regionName, $countryId);
55
+ }
56
+
57
+ }
app/code/community/Expercash/Expercash/Model/Entity/Setup.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ class Expercash_Expercash_Model_Entity_Setup extends Mage_Eav_Model_Entity_Setup
23
+ {
24
+
25
+ public function getDefaultEntities()
26
+ {
27
+ return array(
28
+ 'order_payment' => array(
29
+ 'entity_model' => 'sales/order_payment',
30
+ 'table' => 'sales/order_entity',
31
+ 'attributes' => array(
32
+ 'parent_id' => array(
33
+ 'type' => 'static',
34
+ 'backend' =>'sales_entity/order_attribute_backend_child'
35
+ ),
36
+ 'expercash_gutid' => array('type' => 'varchar'),
37
+ 'expercash_transaction_id' => array('type' => 'varchar'),
38
+ 'expercash_gutid_capture' => array('type' => 'varchar'),
39
+ 'expercash_paymenttype' => array('type' => 'varchar'),
40
+ 'expercash_epi_payment_id' => array('type' => 'varchar'),
41
+ 'expercash_request_type' => array('type' => 'varchar'),
42
+ ),
43
+ ),
44
+ );
45
+ }
46
+ }
app/code/community/Expercash/Expercash/Model/Expercash.php ADDED
@@ -0,0 +1,236 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+
24
+ class Expercash_Expercash_Model_Expercash extends Mage_Payment_Model_Method_Abstract
25
+ {
26
+
27
+ /**
28
+ * the payment failed message string
29
+ */
30
+ const PAYMENT_FAILED_MESSAGE = "Please select another payment method!";
31
+
32
+ /**
33
+ * Availability options
34
+ */
35
+ protected $_code = 'expercash';
36
+ protected $_paymentMethod = 'expercash';
37
+ protected $_formBlockType = 'expercash/form_expercash';
38
+ protected $_infoBlockType = 'expercash/info_expercash';
39
+ protected $_isGateway = false;
40
+ protected $_canAuthorize = true;
41
+ protected $_canCapture = true;
42
+ protected $_canCapturePartial = true;
43
+ protected $_canRefund = false;
44
+ protected $_canVoid = false;
45
+ protected $_canUseInternal = false;
46
+ protected $_canUseCheckout = true;
47
+ protected $_canUseForMultishipping = false;
48
+ protected $_expercashStack = false;
49
+
50
+
51
+ /**
52
+ * authorize payment
53
+ *
54
+ * get token from expercash and save it in session
55
+ * if something goes wrong jump to section before payment in checkout
56
+ *
57
+ * @param Varien_Object $payment
58
+ * @param float $amount
59
+ *
60
+ * @throws Exception
61
+ * @throws Mage_Checkout_Exception
62
+ */
63
+ public function authorize(Varien_Object $payment, $amount)
64
+ {
65
+ parent::authorize($payment, $amount);
66
+ $order = $this->getInfoInstance()->getOrder();
67
+ $section = $this->getSection($order);
68
+
69
+ try {
70
+ $requestParams = Mage::getModel('expercash/request_token_iframe')->getTokenParams($order);
71
+
72
+ $token = Mage::getModel('expercash/api_api')->getIframeToken($requestParams);
73
+ if (!$token) {
74
+ throw new Mage_Checkout_Exception('No Expercash token.');
75
+ }
76
+ $this->getCheckoutSession()->setData(Expercash_Expercash_Model_Config::TOKEN_REGISTRY_KEY, $token);
77
+
78
+ $payment->setTransactionId($requestParams['transactionId']);
79
+ $payment->setIsTransactionClosed(false);
80
+
81
+
82
+ }
83
+ catch (Mage_Checkout_Exception $ce) {
84
+ $this->getDataHelper()->log($ce->getMessage());
85
+ Mage::getSingleton('checkout/type_onepage')->getCheckout()->setGotoSection($section);
86
+ throw $ce;
87
+ }
88
+ catch (Exception $e) {
89
+ $this->getDataHelper()->log($e->getMessage());
90
+ Mage::getSingleton('checkout/type_onepage')->getCheckout()->setGotoSection($section);
91
+ Mage::throwException(sprintf('%s', $this->getDataHelper()->__(self::PAYMENT_FAILED_MESSAGE)));
92
+ }
93
+
94
+ }
95
+
96
+ /**
97
+ * get the expercash data helper
98
+ *
99
+ * @return Expercash_Expercash_Helper_Data
100
+ */
101
+ protected function getDataHelper()
102
+ {
103
+ return Mage::helper('expercash/data');
104
+ }
105
+
106
+ /**
107
+ * Get redirect URL
108
+ *
109
+ * @return Mage_Payment_Helper_Data
110
+ */
111
+ public function getOrderPlaceRedirectUrl()
112
+ {
113
+ return Mage::getUrl('expercash/expercash/reset');
114
+ }
115
+
116
+ /**
117
+ * Calc Amount
118
+ *
119
+ * @return amount
120
+ */
121
+ protected function calcCentAmount($amount)
122
+ {
123
+ return number_format($amount * 100, 0, '.', '');
124
+ }
125
+
126
+ /**
127
+ * refund the amount with transaction id
128
+ *
129
+ * @access public
130
+ *
131
+ * @param string $payment Varien_Object object
132
+ *
133
+ * @return Mage_Payment_Model_Abstract
134
+ */
135
+ public function refund(Varien_Object $payment, $amount)
136
+ {
137
+ $payment->setStatusDescription(Mage::helper('expercash')->__('Error in refunding the payment'));
138
+ return $this;
139
+ }
140
+
141
+ /**
142
+ * Retrieve information from payment configuration
143
+ *
144
+ * @param string $field
145
+ * @param null|int $storeId
146
+ *
147
+ * @return mixed
148
+ */
149
+ public function getConfigData($field, $storeId = null)
150
+ {
151
+ return Mage::getModel('expercash/config')->getConfigData($field, $this->getCode(), $storeId);
152
+ }
153
+
154
+ /**
155
+ *
156
+ * @param integer $id QuoteId
157
+ * @param string $key
158
+ * @param string $value
159
+ */
160
+ public function setExperCashData($id, $key, $value)
161
+ {
162
+ Mage::helper('expercash/payment')->setExperCashData($id, $key, $value);
163
+ }
164
+
165
+ /**
166
+ * wrapps the payment helper function getExperCashInfo
167
+ *
168
+ * @return string
169
+ */
170
+ public function createExperCashOrderId()
171
+ {
172
+ return Mage::helper('expercash/payment')->createExperCashOrderId();
173
+ }
174
+
175
+ /**
176
+ * wrapps the payment helper function getExperCashInfo
177
+ *
178
+ * @param type $string
179
+ *
180
+ * @return string
181
+ */
182
+ public function getExperCashInfo($string)
183
+ {
184
+ $id = $this->getInfoInstance()->getOrder()->getQuoteId();
185
+ return Mage::helper('expercash/payment')->getExperCashInfo($string, $id);
186
+ }
187
+
188
+ /**
189
+ * set additional data on the payment
190
+ *
191
+ * @param Mage_Payment_Model_Info $payment
192
+ * @param array $responseParams
193
+ */
194
+ public function setAdditionalPaymentInfo(Mage_Payment_Model_Info $payment, $responseParams)
195
+ {
196
+ foreach (Mage::helper('expercash/data')->getAdditionalPaymentParams() as $key) {
197
+ if (array_key_exists($key, $responseParams)) {
198
+ $payment->setAdditionalInformation($key, $responseParams[$key]);
199
+ }
200
+ }
201
+ }
202
+
203
+ /**
204
+ * get the checkout section
205
+ *
206
+ * @param Mage_Sales_Model_Order $order
207
+ */
208
+ protected function getSection($order)
209
+ {
210
+ $section = 'shipping_method';
211
+ if (false === ($order->getShippingAddress() instanceof Mage_Sales_Model_Order_Address)
212
+ || 0 == strlen($order->getShippingAddress()->getPostcode())
213
+ ) {
214
+ $section = 'billing';
215
+ }
216
+ return $section;
217
+ }
218
+
219
+ /**
220
+ * getter for the checkout session
221
+ *
222
+ * @return Mage_Checkout_Model_Session
223
+ */
224
+ protected function getCheckoutSession()
225
+ {
226
+ return Mage::getSingleton('checkout/session');
227
+ }
228
+
229
+ /**
230
+ * @return bool
231
+ */
232
+ public function isDirectSaleEnabled()
233
+ {
234
+ return false;
235
+ }
236
+ }
app/code/community/Expercash/Expercash/Model/Expercashcc.php ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+
24
+ class Expercash_Expercash_Model_Expercashcc extends Expercash_Expercash_Model_Expercash
25
+ {
26
+ const PAYMENT_TYPE_CC_BUY = 'cc_buy';
27
+ const PAYMENT_TYPE_CC_AUTH = 'cc_authorize';
28
+ const PAYMENT_TYPE_CC_CAPTURE = 'cc_capture';
29
+ /**
30
+ * Availability options
31
+ */
32
+ protected $_code = 'expercashcc';
33
+ protected $_paymentMethod = 'expercashcc';
34
+ protected $_formBlockType = 'expercash/form_expercash';
35
+ protected $_infoBlockType = 'expercash/info_expercash';
36
+ protected $_isGateway = false;
37
+ protected $_canAuthorize = true;
38
+ protected $_canRefund = false;
39
+ protected $_canVoid = false;
40
+ protected $_canUseInternal = false;
41
+ protected $_canUseCheckout = true;
42
+ protected $_canUseForMultishipping = false;
43
+
44
+ public function isAvailable($quote = null)
45
+ {
46
+ $available = parent::isAvailable($quote);
47
+ if (!$available) {
48
+ return false;
49
+ }
50
+ if (in_array($quote->getQuoteCurrencyCode(), $this->getCurrenciesArray($quote->getStoreId()))) {
51
+ return true;
52
+ } else {
53
+ return false;
54
+ }
55
+ }
56
+
57
+ public function getCurrenciesArray($storeId = null)
58
+ {
59
+ return explode(',', $this->getConfigData('allowed_currency', $storeId));
60
+ }
61
+
62
+ /**
63
+ * Check capture availability
64
+ *
65
+ * @return bool
66
+ */
67
+ public function canCapture()
68
+ {
69
+ if ($this->getExperCashInfo('expercash_request_type') == self::PAYMENT_TYPE_CC_AUTH) {
70
+ return parent::canCapture();
71
+ }
72
+ return false;
73
+ }
74
+
75
+ /**
76
+ * capture the amount with transaction id
77
+ *
78
+ * @access public
79
+ * @param string $payment Varien_Object object
80
+ * @return Mage_Payment_Model_Abstract
81
+ */
82
+ public function capture(Varien_Object $payment, $amount)
83
+ {
84
+ Mage::getModel('expercash/api_capture')->capture(
85
+ $payment,
86
+ $amount,
87
+ self::PAYMENT_TYPE_CC_CAPTURE
88
+ );
89
+ }
90
+
91
+ /**
92
+ * @return bool
93
+ */
94
+ public function isDirectSaleEnabled()
95
+ {
96
+ return $this->getConfigData('paymenttype') == self::PAYMENT_TYPE_CC_BUY;
97
+ }
98
+
99
+
100
+ }
app/code/community/Expercash/Expercash/Model/Expercashelv.php ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+ class Expercash_Expercash_Model_Expercashelv extends Expercash_Expercash_Model_Expercash
24
+ {
25
+ const PAYMENT_TYPE_ELV_BUY = 'elv_buy';
26
+ const PAYMENT_TYPE_ELV_AUTH = 'elv_authorize';
27
+ const PAYMENT_TYPE_ELV_CAPTURE = 'elv_capture';
28
+ /**
29
+ * Availability options
30
+ */
31
+ protected $_code = 'expercashelv';
32
+ protected $_paymentMethod = 'expercashelv';
33
+ protected $_formBlockType = 'expercash/form_expercash';
34
+ protected $_infoBlockType = 'expercash/info_expercash';
35
+ protected $_isGateway = true;
36
+ protected $_canAuthorize = true;
37
+ protected $_canRefund = false;
38
+ protected $_canCapturePartial = false;
39
+ protected $_canVoid = false;
40
+ protected $_canUseInternal = false;
41
+ protected $_canUseCheckout = true;
42
+ protected $_canUseForMultishipping = false;
43
+
44
+ public function isAvailable($quote = null)
45
+ {
46
+ $available = parent::isAvailable($quote);
47
+ if (!$available) {
48
+ return false;
49
+ }
50
+ if (in_array($quote->getQuoteCurrencyCode(), $this->getCurrenciesArray($quote->getStoreId()))) {
51
+ return true;
52
+ } else {
53
+ return false;
54
+ }
55
+ }
56
+
57
+ public function getCurrenciesArray($storeId = null)
58
+ {
59
+ return explode(',', $this->getConfigData('allowed_currency', $storeId));
60
+ }
61
+
62
+ /**
63
+ * Check capture availability
64
+ *
65
+ * @return bool
66
+ */
67
+ public function canCapture()
68
+ {
69
+ if ($this->getExperCashInfo('expercash_request_type') == self::PAYMENT_TYPE_ELV_AUTH) {
70
+ return parent::canCapture();
71
+ }
72
+ return false;
73
+
74
+ }
75
+
76
+ /**
77
+ * capture the amount with transaction id
78
+ *
79
+ * @access public
80
+ * @param string $payment Varien_Object object
81
+ * @return Mage_Payment_Model_Abstract
82
+ */
83
+ public function capture(Varien_Object $payment, $amount)
84
+ {
85
+ Mage::getModel('expercash/Api_Capture')->capture(
86
+ $payment,
87
+ $amount,
88
+ self::PAYMENT_TYPE_ELV_CAPTURE
89
+ );
90
+ }
91
+
92
+ /**
93
+ * @return bool
94
+ */
95
+ public function isDirectSaleEnabled()
96
+ {
97
+ return $this->getConfigData('paymenttype') == self::PAYMENT_TYPE_ELV_BUY;
98
+ }
99
+ }
app/code/community/Expercash/Expercash/Model/Expercashgp.php ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+
24
+ class Expercash_Expercash_Model_Expercashgp extends Expercash_Expercash_Model_Expercash
25
+ {
26
+ const PAYMENT_TYPE_GP = 'giropay';
27
+ /**
28
+ * Availability options
29
+ */
30
+ protected $_code = 'expercashgp';
31
+ protected $_paymentMethod = 'expercashgp';
32
+ protected $_formBlockType = 'expercash/form_expercash';
33
+ protected $_infoBlockType = 'expercash/info_expercash';
34
+ protected $_isGateway = false;
35
+ protected $_canAuthorize = true;
36
+ protected $_canCapture = false;
37
+ protected $_canCapturePartial = false;
38
+ protected $_canRefund = false;
39
+ protected $_canVoid = false;
40
+ protected $_canUseInternal = false;
41
+ protected $_canUseCheckout = true;
42
+ protected $_canUseForMultishipping = false;
43
+
44
+ public function isAvailable($quote = null)
45
+ {
46
+ $available = parent::isAvailable($quote);
47
+ if (!$available) {
48
+ return false;
49
+ }
50
+
51
+ if (in_array($quote->getQuoteCurrencyCode(), $this->getCurrenciesArray($quote->getStoreId()))) {
52
+ return true;
53
+ } else {
54
+ return false;
55
+ }
56
+ }
57
+
58
+ public function getCurrenciesArray($storeId = null)
59
+ {
60
+ return explode(',', $this->getConfigData('allowed_currency', $storeId));
61
+ }
62
+
63
+ /**
64
+ * Check capture availability
65
+ *
66
+ * @return bool
67
+ */
68
+ public function canCapture()
69
+ {
70
+ return $this->_canCapture;
71
+ }
72
+
73
+ /**
74
+ * @return bool
75
+ */
76
+ public function isDirectSaleEnabled()
77
+ {
78
+ return $this->getConfigData('paymenttype') == Expercash_Expercash_Model_Expercashgp::PAYMENT_TYPE_GP;
79
+ }
80
+ }
app/code/community/Expercash/Expercash/Model/Expercashmp.php ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ class Expercash_Expercash_Model_Expercashmp extends Expercash_Expercash_Model_Expercash
23
+ {
24
+ const PAYMENT_TYPE_MP_BUY = 'masterpass_buy';
25
+ const PAYMENT_TYPE_MP_AUTH = 'masterpass_authorize';
26
+ const PAYMENT_TYPE_MP_CAPTURE = 'masterpass_capture';
27
+ /**
28
+ * Availability options
29
+ */
30
+ protected $_code = 'expercashmp';
31
+ protected $_paymentMethod = 'expercashmp';
32
+ protected $_formBlockType = 'expercash/masterpass_form';
33
+ protected $_infoBlockType = 'expercash/info_expercash';
34
+ protected $_isGateway = false;
35
+ protected $_canAuthorize = true;
36
+ protected $_canRefund = false;
37
+ protected $_canVoid = false;
38
+ protected $_canUseInternal = false;
39
+ protected $_canUseCheckout = true;
40
+ protected $_canUseForMultishipping = false;
41
+
42
+ public function isAvailable($quote = null)
43
+ {
44
+ $available = parent::isAvailable($quote);
45
+ if (!$available) {
46
+ return false;
47
+ }
48
+ if (in_array($quote->getQuoteCurrencyCode(), $this->getCurrenciesArray($quote->getStoreId()))) {
49
+ return true;
50
+ } else {
51
+ return false;
52
+ }
53
+ }
54
+
55
+ public function getCurrenciesArray($storeId = null)
56
+ {
57
+ return explode(',', $this->getConfigData('allowed_currency', $storeId));
58
+ }
59
+
60
+ /**
61
+ * Check capture availability
62
+ *
63
+ * @return bool
64
+ */
65
+ public function canCapture()
66
+ {
67
+ if ($this->getExperCashInfo('expercash_request_type') == self::PAYMENT_TYPE_MP_AUTH) {
68
+ return parent::canCapture();
69
+ }
70
+ return false;
71
+ }
72
+
73
+ /**
74
+ * capture the amount with transaction id
75
+ *
76
+ * @access public
77
+ * @param string $payment Varien_Object object
78
+ * @return Mage_Payment_Model_Abstract
79
+ */
80
+ public function capture(Varien_Object $payment, $amount)
81
+ {
82
+ Mage::getModel('expercash/api_capture')->capture(
83
+ $payment,
84
+ $amount,
85
+ self::PAYMENT_TYPE_MP_CAPTURE
86
+ );
87
+ }
88
+
89
+ /**
90
+ * @return bool
91
+ */
92
+ public function isDirectSaleEnabled()
93
+ {
94
+ return $this->getConfigData('paymenttype') == self::PAYMENT_TYPE_MP_BUY;
95
+ }
96
+
97
+
98
+ }
app/code/community/Expercash/Expercash/Model/Expercashmpf.php ADDED
@@ -0,0 +1,233 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+ class Expercash_Expercash_Model_Expercashmpf extends Expercash_Expercash_Model_Expercash
24
+ {
25
+ const PAYMENT_TYPE_MPF_BUY = 'cc_buy';
26
+ const PAYMENT_TYPE_MPF_AUTH = 'cc_authorize';
27
+ const PAYMENT_TYPE_MPF_CAPTURE = 'cc_capture';
28
+ const CODE = 'expercashmpf';
29
+
30
+ /**
31
+ * Availability options
32
+ */
33
+ protected $_code = self::CODE;
34
+ protected $_paymentMethod = self::CODE;
35
+ protected $_formBlockType = 'expercash/masterpass_fullcheckout_cc';
36
+ protected $_infoBlockType = 'expercash/info_expercash';
37
+ protected $_isGateway = false;
38
+ protected $_canAuthorize = true;
39
+ protected $_canCapture = true;
40
+ protected $_canRefund = false;
41
+ protected $_canVoid = false;
42
+ protected $_canUseInternal = false;
43
+ protected $_canUseCheckout = true;
44
+ protected $_canUseForMultishipping = false;
45
+
46
+ public function isAvailable($quote = null)
47
+ {
48
+ $available = parent::isAvailable($quote);
49
+
50
+ if (!$available) {
51
+ return false;
52
+ }
53
+ if (in_array($quote->getQuoteCurrencyCode(), $this->getCurrenciesArray($quote->getStoreId()))) {
54
+ return true;
55
+ } else {
56
+ return false;
57
+ }
58
+ }
59
+
60
+ public function getCurrenciesArray($storeId = null)
61
+ {
62
+ return explode(',', $this->getConfigData('allowed_currency', $storeId));
63
+ }
64
+
65
+ /**
66
+ * Map Magento payment action to Expercash payment action.
67
+ *
68
+ * @param Varien_Object $payment
69
+ * @param int $storeId
70
+ *
71
+ * @return null|string
72
+ */
73
+ public function getExpercashPaymentType($payment, $storeId)
74
+ {
75
+ $configType = $this->getConfigData('payment_action', $storeId);
76
+ $expercashType = null;
77
+
78
+ /* @var $payment Mage_Sales_Model_Order_Payment */
79
+ if (Mage::app()->getStore()->isAdmin() && $payment->getAuthorizationTransaction()) {
80
+ // backend invoice creation
81
+ $expercashType = self::PAYMENT_TYPE_MPF_CAPTURE;
82
+ } elseif ($configType === Mage_Payment_Model_Method_Abstract::ACTION_AUTHORIZE) {
83
+ // frontend authorize action
84
+ $expercashType = self::PAYMENT_TYPE_MPF_AUTH;
85
+ } elseif ($configType === Mage_Payment_Model_Method_Abstract::ACTION_AUTHORIZE_CAPTURE) {
86
+ // frontend authorize_capture action
87
+ $expercashType = self::PAYMENT_TYPE_MPF_BUY;
88
+ }
89
+
90
+ return $expercashType;
91
+ }
92
+
93
+ /**
94
+ * capture the amount with transaction id
95
+ *
96
+ * @access public
97
+ *
98
+ * @param Varien_Object $payment
99
+ * @param string $amount
100
+ *
101
+ * @return void
102
+ */
103
+ public function capture(Varien_Object $payment, $amount)
104
+ {
105
+ $paymentType = $this->getExpercashPaymentType(
106
+ $payment,
107
+ $this->getInfoInstance()->getOrder()->getStoreId()
108
+ );
109
+
110
+ try {
111
+ Mage::getModel('expercash/api_masterpass_capture')->capture($payment, $amount, $paymentType);
112
+ } catch (Exception $e) {
113
+ // if its a capture while in frontend i.e. if payment method is configured as directsale
114
+ // we have to remove payment method from quote in error case
115
+ if (false === Mage::app()->getStore()->isAdmin()) {
116
+ $onepage = Mage::getSingleton('checkout/type_onepage');
117
+ $quote = $onepage->getQuote();
118
+ $this->getPaymentHelper()->removePaymentFromQuote($quote);
119
+ $this->getDataHelper()->log($e->getMessage());
120
+ $onepage->getCheckout()->setGotoSection('payment');
121
+ $onepage->getCheckout()->setUpdateSection('payment-method');
122
+ }
123
+
124
+ Mage::throwException(sprintf('%s', $this->getDataHelper()->__(self::PAYMENT_FAILED_MESSAGE)));
125
+ }
126
+ }
127
+
128
+ public function authorize(Varien_Object $payment, $amount)
129
+ {
130
+ $order = $this->getInfoInstance()->getOrder();
131
+ try {
132
+ $requestParams = Mage::getModel('expercash/request_masterpass_epi')->getPlaceOrderParams(
133
+ $order,
134
+ self::PAYMENT_TYPE_MPF_AUTH
135
+ );
136
+ $epiClient = Mage::getModel('expercash/api_masterpass_epi');
137
+ $response = $epiClient->doEpiRequest($requestParams);
138
+ $checkOrderHandling = Mage::helper('expercash/masterpass')->orderAndTransactionHandling($response, $order);
139
+
140
+ if (!$checkOrderHandling) {
141
+ Mage::throwException('Error occurred while trying to authorize.');
142
+ }
143
+
144
+ } catch (Exception $e) {
145
+ // remove payment method from quote and save quote, so customer can choose another payment method
146
+ // otherwise he is stuck in checkout in error case
147
+ $onepage = Mage::getSingleton('checkout/type_onepage');
148
+ $this->getPaymentHelper()->removePaymentFromQuote($order->getQuote());
149
+ $this->getDataHelper()->log($e->getMessage());
150
+ $onepage->getCheckout()->setGotoSection('payment');
151
+ $onepage->getCheckout()->setUpdateSection('payment-method');
152
+
153
+ Mage::throwException(sprintf('%s', $this->getDataHelper()->__(self::PAYMENT_FAILED_MESSAGE)));
154
+ }
155
+ }
156
+
157
+ /***
158
+ * getter for expercash payment helper
159
+ *
160
+ * @return Expercash_Expercash_Helper_Payment
161
+ */
162
+ protected function getPaymentHelper()
163
+ {
164
+ return Mage::helper('expercash/payment');
165
+ }
166
+
167
+ /**
168
+ * use parent validate and add custom error message to session
169
+ *
170
+ * @overrides \Mage_Payment_Model_Method_Abstract::validate
171
+ * @return Mage_Payment_Model_Abstract|void
172
+ */
173
+ public function validate()
174
+ {
175
+ try {
176
+ parent::validate();
177
+ } catch (Exception $e) {
178
+
179
+ // incase of error remove payment method from quote
180
+ $this->getPaymentHelper()->removePaymentFromQuote($this->getInfoInstance()->getQuote());
181
+ Mage::getSingleton('core/session')->addError(
182
+ Mage::helper('expercash/data')->__(
183
+ 'Masterpass FullCheckout is not allowed for billing country. Please choose another payment method.'
184
+ )
185
+ );
186
+ }
187
+
188
+ return $this;
189
+ }
190
+
191
+ /**
192
+ * Get redirect URL
193
+ *
194
+ * @return Mage_Payment_Helper_Data
195
+ */
196
+ public function getOrderPlaceRedirectUrl()
197
+ {
198
+ return null;
199
+ }
200
+
201
+ /**
202
+ *
203
+ *
204
+ * @return bool
205
+ */
206
+ public function isDirectSaleEnabled()
207
+ {
208
+ return $this->getConfigData('payment_action') == Mage_Payment_Model_Method_Abstract::ACTION_AUTHORIZE_CAPTURE;
209
+ }
210
+
211
+ /**
212
+ * set additional data on the payment
213
+ *
214
+ * @param Mage_Payment_Model_Info $payment
215
+ * @param array $responseParams
216
+ */
217
+ public function setAdditionalPaymentInfo(Mage_Payment_Model_Info $payment, $responseParams)
218
+ {
219
+ $params = array(
220
+ "currency" => $payment->getQuote()->getQuoteCurrencyCode(),
221
+ "paymentMethod" => $payment->getMethodInstance()->getCode(),
222
+ "GuTID" => $responseParams['GuTID'],
223
+ "maskedPan" => $responseParams['masked_pan'],
224
+ "validThru" => $responseParams['valid_thru'],
225
+ "owner" => $responseParams['owner'],
226
+ "cardScheme" => $responseParams['card_scheme'],
227
+ );
228
+
229
+ foreach ($params as $key => $value) {
230
+ $payment->setAdditionalInformation($key, $value);
231
+ }
232
+ }
233
+ }
app/code/community/Expercash/Expercash/Model/Expercashpc.php ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+
24
+ class Expercash_Expercash_Model_Expercashpc extends Expercash_Expercash_Model_Expercash
25
+ {
26
+
27
+ /**
28
+ * payment type name
29
+ */
30
+ const PAYMENT_TYPE_PC = 'barzahlen';
31
+
32
+ const PAYMENT_METHOD_NAME = 'expercashpc';
33
+
34
+ const ALLOWED_MAX_AMOUNT = 1000;
35
+
36
+ const BARZAHLEN_STATUS_PAID = 'PAID';
37
+
38
+ const BARZAHLEN_STATUS_OPEN = 'OPEN';
39
+
40
+
41
+ /**
42
+ * Availability options
43
+ */
44
+ protected $_code = 'expercashpc';
45
+ protected $_canCapture = false;
46
+ protected $_canCapturePartial = false;
47
+
48
+
49
+ /**
50
+ * overwrite isAvailable and add checks for currency code, country code and allowed max amount
51
+ *
52
+ * @param Mage_Sales_Model_Quote $quote
53
+ *
54
+ * @return bool
55
+ */
56
+ public function isAvailable($quote = null)
57
+ {
58
+ $result = false;
59
+ $available = parent::isAvailable($quote);
60
+
61
+ if ($available
62
+ && $quote instanceof Mage_Sales_Model_Quote
63
+ && $quote->getQuoteCurrencyCode() === parent::getConfigData('allowed_currency')
64
+ && $quote->getBillingAddress()->getCountryId() === parent::getConfigData('specificcountry')
65
+ && $quote->getGrandTotal() < self::ALLOWED_MAX_AMOUNT
66
+ ) {
67
+ $result = true;
68
+ }
69
+ return $result;
70
+ }
71
+
72
+ /**
73
+ * return the paymenttype or the other config values based on field value
74
+ *
75
+ * @param string $field
76
+ * @param int $storeId
77
+ *
78
+ * @return string
79
+ */
80
+ public function getConfigData($field, $storeId = null)
81
+ {
82
+ if ($field == 'paymenttype') {
83
+ return self::PAYMENT_TYPE_PC;
84
+ }
85
+ return parent::getConfigData($field, $storeId);
86
+ }
87
+
88
+ }
app/code/community/Expercash/Expercash/Model/Expercashpp.php ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+
24
+ class Expercash_Expercash_Model_Expercashpp extends Expercash_Expercash_Model_Expercash
25
+ {
26
+ const PAYMENT_TYPE_PP = 'PayPal';
27
+ /**
28
+ * Availability options
29
+ */
30
+ protected $_code = 'expercashpp';
31
+ protected $_paymentMethod = 'expercashpp';
32
+ protected $_formBlockType = 'expercash/form_expercash';
33
+ protected $_infoBlockType = 'expercash/info_expercash';
34
+ protected $_isGateway = false;
35
+ protected $_canAuthorize = true;
36
+ protected $_canCapture = true;
37
+ protected $_canCapturePartial = false;
38
+ protected $_canRefund = false;
39
+ protected $_canVoid = false;
40
+ protected $_canUseInternal = false;
41
+ protected $_canUseCheckout = true;
42
+ protected $_canUseForMultishipping = false;
43
+
44
+ public function isAvailable($quote = null)
45
+ {
46
+ $available = parent::isAvailable($quote);
47
+ if (!$available) {
48
+ return false;
49
+ }
50
+ if (in_array($quote->getQuoteCurrencyCode(), $this->getCurrenciesArray($quote->getStoreId()))) {
51
+ return true;
52
+ } else {
53
+ return false;
54
+ }
55
+ }
56
+
57
+ public function getCurrenciesArray($storeId = null)
58
+ {
59
+ return explode(
60
+ ',', $this->getConfigData(
61
+ 'allowed_currency', $storeId
62
+ )
63
+ );
64
+ }
65
+
66
+ /**
67
+ * Check capture availability
68
+ *
69
+ * @return bool
70
+ */
71
+ public function canCapture()
72
+ {
73
+ return false;
74
+ }
75
+
76
+
77
+ }
app/code/community/Expercash/Expercash/Model/Expercashso.php ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+
24
+ class Expercash_Expercash_Model_Expercashso extends Expercash_Expercash_Model_Expercash
25
+ {
26
+ const PAYMENT_TYPE_SO = 'sofortueberweisung';
27
+ /**
28
+ * Availability options
29
+ */
30
+ protected $_code = 'expercashso';
31
+ protected $_paymentMethod = 'expercashso';
32
+ protected $_formBlockType = 'expercash/form_expercash';
33
+ protected $_infoBlockType = 'expercash/info_expercash';
34
+ protected $_isGateway = false;
35
+ protected $_canAuthorize = true;
36
+ protected $_canCapture = false;
37
+ protected $_canCapturePartial = false;
38
+ protected $_canRefund = false;
39
+ protected $_canVoid = false;
40
+ protected $_canUseInternal = false;
41
+ protected $_canUseCheckout = true;
42
+ protected $_canUseForMultishipping = false;
43
+
44
+ public function isAvailable($quote = null)
45
+ {
46
+ $available = parent::isAvailable($quote);
47
+ if (!$available)
48
+ return false;
49
+
50
+ if (in_array($quote->getQuoteCurrencyCode(), $this->getCurrenciesArray($quote->getStoreId())))
51
+ return true;
52
+ else
53
+ return false;
54
+ }
55
+
56
+ public function getCurrenciesArray($storeId = null)
57
+ {
58
+ return explode(
59
+ ',', $this->getConfigData('allowed_currency', $storeId)
60
+ );
61
+ }
62
+
63
+ /**
64
+ * Check capture availability
65
+ *
66
+ * @return bool
67
+ */
68
+ public function canCapture()
69
+ {
70
+ return $this->_canCapture;
71
+ }
72
+
73
+ /**
74
+ * @return bool
75
+ */
76
+ public function isDirectSaleEnabled()
77
+ {
78
+ return $this->getConfigData('paymenttype') == Expercash_Expercash_Model_Expercashso::PAYMENT_TYPE_SO;
79
+ }
80
+ }
app/code/community/Expercash/Expercash/Model/Masterpass/Config.php ADDED
@@ -0,0 +1,204 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+ class Expercash_Expercash_Model_Masterpass_Config extends Expercash_Expercash_Model_Config
24
+ {
25
+
26
+ /**
27
+ * Start fullcheckout action
28
+ *
29
+ * @var string
30
+ */
31
+ protected $_startAction = 'expercash/fullcheckout/start';
32
+
33
+ /**
34
+ * store id
35
+ *
36
+ * @var null
37
+ */
38
+ protected $storeId = null;
39
+
40
+
41
+ /**
42
+ * set store id for config object in constructor
43
+ */
44
+ public function __construct()
45
+ {
46
+ $this->storeId = Mage::app()->getStore()->getId();
47
+ }
48
+
49
+
50
+ /**
51
+ * get route for masterpass full checkout
52
+ *
53
+ * @return string
54
+ */
55
+ protected function getMasterPassFullCheckoutStartAction()
56
+ {
57
+ return $this->_startAction;
58
+ }
59
+
60
+ /**
61
+ * show master Full Checkout Button in Mini Cart
62
+ *
63
+ * @return bool
64
+ */
65
+ public function showButtonInMiniCart()
66
+ {
67
+ return Mage::getStoreConfigFlag('payment/expercashmpf/show_button_in_mini_cart', $this->storeId);
68
+ }
69
+
70
+
71
+ /**
72
+ * show masterpass full checkout button in cart
73
+ *
74
+ * @return bool
75
+ */
76
+ public function showButtonInCart()
77
+ {
78
+ return Mage::getStoreConfigFlag('payment/expercashmpf/show_button_in_cart', $this->storeId);
79
+ }
80
+
81
+ /**
82
+ * show masterpass learn more link (checkout method)
83
+ *
84
+ * @return bool
85
+ */
86
+ public function showMasterPassLearnMoreLink()
87
+ {
88
+ return Mage::getStoreConfigFlag('payment/expercashmp/show_learn_more_link', $this->storeId);
89
+ }
90
+
91
+ /**
92
+ * show masterpass learn more link ( full checkout method)
93
+ *
94
+ * @return bool
95
+ */
96
+ public function showMasterPassFullCheckoutLearnMoreLink()
97
+ {
98
+ return Mage::getStoreConfigFlag('payment/expercashmpf/show_learn_more_link', $this->storeId);
99
+ }
100
+
101
+ /**
102
+ * get image url for masterpass full checkout image
103
+ *
104
+ * @return string
105
+ */
106
+ public function getFullCheckoutImageUrl()
107
+ {
108
+ return Mage::getDesign()->getSkinUrl('images/expercash/mp_buy_with_button.png');
109
+ }
110
+
111
+ /**
112
+ * get masterpass full checkout url (route)
113
+ *
114
+ * @return string
115
+ */
116
+ public function getMasterpassFullCheckoutUrl()
117
+ {
118
+ return Mage::getUrl($this->getMasterPassFullCheckoutStartAction());
119
+ }
120
+
121
+
122
+ /**
123
+ * show masterpass logo in checkout
124
+ *
125
+ * @return bool
126
+ */
127
+ public function showMasterpassLogoInCheckout()
128
+ {
129
+ return Mage::getStoreConfigFlag('payment/expercashmp/show_logo', $this->storeId);
130
+ }
131
+ /**
132
+ * get masterpass learn more basis url from config
133
+ *
134
+ * @return string
135
+ */
136
+ public function getMasterLearnMoreBaseUrl()
137
+ {
138
+ return Mage::getStoreConfig('payment/expercashmp/mp_learnmore_url');
139
+ }
140
+
141
+
142
+ /**
143
+ * get logo for masterpass checkout payment method
144
+ *
145
+ * @return string
146
+ */
147
+ public function getMasterPassCheckoutLogo()
148
+ {
149
+ return Mage::getDesign()->getSkinUrl('images/expercash/mp_ident.png');
150
+ }
151
+
152
+ /**
153
+ * Get Masterpass Learn More Url based on locale.
154
+ * Will use Magento default locale (en_US) if parameter is null
155
+ *
156
+ * @param Mage_Core_Model_Locale $locale
157
+ *
158
+ * @return string
159
+ */
160
+ public function getMasterpassLearnMoreUrl(Mage_Core_Model_Locale $locale = null)
161
+ {
162
+ if (null === $locale) {
163
+ $locale = Mage::getModel('core/locale')->getLocale();
164
+ }
165
+
166
+ $shouldEmulate = (null !== $this->storeId) && (Mage::app()->getStore()->getId() != $this->storeId);
167
+ if ($shouldEmulate) {
168
+ $locale->emulate($this->storeId);
169
+ }
170
+ $language = $locale->getLocale()->getLanguage();
171
+ $countryCode = $locale->getLocale()->getRegion();
172
+ if ($shouldEmulate) {
173
+ $locale->revert();
174
+ }
175
+
176
+ return $this->getMasterLearnMoreBaseUrl() . DS . strtolower($language) . DS . $countryCode;
177
+ }
178
+
179
+ /**
180
+ * get masterpass fullcheckout text
181
+ *
182
+ * @return string
183
+ */
184
+ public function getCheckoutText()
185
+ {
186
+ return Mage::getStoreConfig('payment/expercashmpf/checkout_text');
187
+ }
188
+
189
+ /**
190
+ * getter for show checkout text
191
+ *
192
+ * @return bool
193
+ */
194
+ public function isShowCheckoutTextEnabled()
195
+ {
196
+ return Mage::getStoreConfigFlag('payment/expercashmpf/show_checkout_text');
197
+ }
198
+
199
+ public function isShowCCDataInCheckoutEnabled()
200
+ {
201
+ return Mage::getStoreConfigFlag('payment/expercashmpf/show_creditcard_data_in_checkout');
202
+ }
203
+
204
+ }
app/code/community/Expercash/Expercash/Model/Observer.php ADDED
@@ -0,0 +1,178 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+
24
+ class Expercash_Expercash_Model_Observer
25
+ {
26
+
27
+ /**
28
+ * set step data for masterpass fullcheckout
29
+ *
30
+ * @param Varien_Event_Observer $observer
31
+ */
32
+ public function setStepData(Varien_Event_Observer $observer)
33
+ {
34
+ $checkout = Mage::getModel('checkout/session');
35
+
36
+ if (!$checkout->getQuote()->getPayment()->getMethod()) {
37
+ return;
38
+ }
39
+
40
+ $paymentMethod = $checkout->getQuote()->getPayment()->getMethodInstance();
41
+
42
+
43
+ if ($paymentMethod instanceof Expercash_Expercash_Model_Expercashmpf) {
44
+ $checkout
45
+ ->setStepData('login', 'allow', true)
46
+ ->setStepData('billing', 'allow', true)
47
+ ->setStepData('billing', 'complete', true)
48
+ ->setStepData('shipping', 'allow', true)
49
+ ->setStepData('shipping', 'complete', true);
50
+ }
51
+ }
52
+
53
+
54
+ /**
55
+ * Disable MasterPass Full Checkout in case it was not already set via API
56
+ * calls. Disable all other payment methods in case MasterPass Full Checkout
57
+ * was already selected via API calls.
58
+ *
59
+ * @see Expercash_Expercash_Helper_Masterpass::setPaymentInfoToQuote()
60
+ *
61
+ * @param Varien_Event_Observer $observer
62
+ */
63
+ public function setPaymentAvailable(Varien_Event_Observer $observer)
64
+ {
65
+ $quote = $observer->getQuote();
66
+ $checkResult = $observer->getResult();
67
+ $checkoutPaymentMethod = $observer->getMethodInstance();
68
+
69
+ if (!$quote instanceof Mage_Sales_Model_Quote) {
70
+ return;
71
+ }
72
+
73
+ if (!$checkResult->isAvailable) {
74
+ return;
75
+ }
76
+
77
+ $quotePaymentMethod = $observer->getQuote()->getPayment()->getMethod();
78
+ $mpfCode = Mage::getModel('expercash/expercashmpf')->getCode();
79
+
80
+ // Full checkout should not be available if it was not set yet.
81
+ if (($checkoutPaymentMethod instanceof Expercash_Expercash_Model_Expercashmpf)
82
+ && ($quotePaymentMethod !== $mpfCode)
83
+ ) {
84
+ $checkResult->isAvailable = false;
85
+ }
86
+
87
+ // Other payment methods should not be available if Full Checkout is already set.
88
+ if ((!$checkoutPaymentMethod instanceof Expercash_Expercash_Model_Expercashmpf)
89
+ && ($quotePaymentMethod === Mage::getModel('expercash/expercashmpf')->getCode())
90
+ ) {
91
+ $checkResult->isAvailable = false;
92
+ }
93
+ }
94
+
95
+ /***
96
+ *
97
+ * Validate Masterpass session before place order process starts.
98
+ * Validations fails if session lifetime is exceed or customer changed billing address.
99
+ *
100
+ * @event sales_order_place_before
101
+ * @param Varien_Event_Observer $observer
102
+ * @return $this
103
+ */
104
+ public function validateMasterpassSession(Varien_Event_Observer $observer)
105
+ {
106
+ /** @var $quote Mage_Sales_Model_Quote */
107
+ $quote = Mage::getModel('checkout/session')->getQuote();
108
+ $methodInstance = $quote->getPayment()->getMethodInstance();
109
+
110
+ if ($methodInstance instanceof Expercash_Expercash_Model_Expercashmpf) {
111
+
112
+ try {
113
+
114
+ Mage::helper('expercash/masterpass')->validMasterpassSession($quote);
115
+
116
+ } catch (Exception $e) {
117
+ Mage::helper('expercash/masterpass')->clearMasterpassSessionData();
118
+ // clear payment method
119
+ $this->getPaymentHelper()->removePaymentFromQuote($quote);
120
+ $this->getOnepage()->getCheckout()->setGotoSection('login');
121
+ Mage::throwException(
122
+ Mage::helper('expercash/data')->__(
123
+ 'Session timed out or session data invalid. ' .
124
+ 'Either checkout with Masterpass Full Checkout again or use another payment method.'
125
+ )
126
+ );
127
+ }
128
+ }
129
+
130
+ return $this;
131
+ }
132
+
133
+ /**
134
+ * Invalidate masterpass session and remove payment method from quote
135
+ * if payment method is masterpass fullcheckout and customer goes to cart
136
+ * after he already was in checkout process
137
+ *
138
+ * @event checkout_cart_save_after
139
+ * @param Varien_Event_Observer $observer
140
+ *
141
+ * @return $this
142
+ */
143
+ public function invalidateMasterpassSession(Varien_Event_Observer $observer)
144
+ {
145
+ $quote = $observer->getCart()->getQuote();
146
+ $paymentMethod = $quote->getPayment()->getMethod();
147
+
148
+ if ($paymentMethod === Expercash_Expercash_Model_Expercashmpf::CODE) {
149
+ // clear payment method
150
+ $this->getPaymentHelper()->removePaymentFromQuote($quote);
151
+ Mage::helper('expercash/masterpass')->clearMasterpassSessionData();
152
+
153
+ }
154
+
155
+ return $this;
156
+ }
157
+
158
+
159
+ /***
160
+ * getter for expercash payment helper
161
+ *
162
+ * @return Expercash_Expercash_Helper_Payment
163
+ */
164
+ protected function getPaymentHelper()
165
+ {
166
+ return Mage::helper('expercash/payment');
167
+ }
168
+
169
+ /**
170
+ * Get one page checkout model
171
+ *
172
+ * @return Mage_Checkout_Model_Type_Onepage
173
+ */
174
+ protected function getOnepage()
175
+ {
176
+ return Mage::getSingleton('checkout/type_onepage');
177
+ }
178
+ }
app/code/community/Expercash/Expercash/Model/Request/Iframe.php ADDED
@@ -0,0 +1,171 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+ class Expercash_Expercash_Model_Request_Iframe
24
+ {
25
+
26
+ protected $order = null;
27
+
28
+ /**
29
+ * get the params for the token
30
+ *
31
+ * @param Mage_Sales_Model_Order $order
32
+ *
33
+ * @return array
34
+ */
35
+ public function getIframeParams(Mage_Sales_Model_Order $order)
36
+ {
37
+ $iFrameParams = array(
38
+ 'preparedSession' => $this->getTokenSessionId(),
39
+ 'sessionKey' => $this->buildSessionKeyHash($order)
40
+ );
41
+ return $iFrameParams;
42
+ }
43
+
44
+ /**
45
+ * build the hash for the sessionKeyParam
46
+ *
47
+ * @param Mage_Sales_Model_Order $order
48
+ *
49
+ * @return string
50
+ */
51
+ public function buildSessionKeyHash(Mage_Sales_Model_Order $order)
52
+ {
53
+ $sessionKeyHash = sha1(
54
+ $this->getTokenSessionId()
55
+ . $this->getJobId($order)
56
+ . $this->getConfig()->getAuthorizationkey($order->getStoreId())
57
+ );
58
+ return $sessionKeyHash;
59
+ }
60
+
61
+ /**
62
+ * get the expercash job id which is the order increment id
63
+ *
64
+ * @param Mage_Sales_Model_Order $order
65
+ *
66
+ * @return string
67
+ */
68
+ protected function getJobId(Mage_Sales_Model_Order $order)
69
+ {
70
+ return $order->getIncrementId();
71
+ }
72
+
73
+ /**
74
+ * return the saved token session id
75
+ *
76
+ * @return string
77
+ */
78
+ protected function getTokenSessionId()
79
+ {
80
+ return $this->getCheckoutSession()->getData(Expercash_Expercash_Model_Config::TOKEN_REGISTRY_KEY);
81
+ }
82
+
83
+ /**
84
+ * getter for config model
85
+ *
86
+ * @return Expercash_Expercash_Model_Config
87
+ */
88
+ protected function getConfig()
89
+ {
90
+ return Mage::getModel('expercash/config');
91
+ }
92
+
93
+ /**
94
+ * get the order from checkout
95
+ *
96
+ * @return Mage_Sales_Model_Order
97
+ */
98
+ public function getOrder()
99
+ {
100
+ $session = $this->getCheckoutSession();
101
+ if (null == $this->order) {
102
+ $this->order = Mage::getModel('sales/order')->load($session->getLastOrderId());
103
+ }
104
+ return $this->order;
105
+ }
106
+
107
+ /**
108
+ * get store id from order
109
+ *
110
+ * @return string
111
+ */
112
+ protected function getStoreId()
113
+ {
114
+ return $this->getOrder()->getStoreId();
115
+ }
116
+
117
+ /**
118
+ * get the checkout session
119
+ *
120
+ * @return Mage_Checkout_Model_Session
121
+ */
122
+ protected function getCheckoutSession()
123
+ {
124
+ return Mage::getSingleton('checkout/session');
125
+ }
126
+
127
+ /**
128
+ * set the order and quote data to the checkout session
129
+ *
130
+ * @param $paymentObject
131
+ */
132
+ public function setOrderDataToSession()
133
+ {
134
+ $paymentObject = $this->getOrder()->getPayment()->getMethodInstance();
135
+ $session = $this->getCheckoutSession();
136
+ $session->setExpercashOrderId($paymentObject->createExperCashOrderId());
137
+ $session->setExpercashRealOrderId($session->getLastRealOrderId());
138
+ $session->setExpercashQuoteId($session->getQuoteId());
139
+ }
140
+
141
+ /**
142
+ * return the generated iframe url and unset the session data
143
+ *
144
+ * @return string
145
+ */
146
+ public function getIframeUrl()
147
+ {
148
+ $iframeParams = $this->getIframeParams($this->getOrder());
149
+ $iframeUrl = $this->getDataHelper()->addRequestParam($this->getConfig()->getIframeUrl(), $iframeParams);
150
+ $this->getCheckoutSession()->unsetData(Expercash_Expercash_Model_Config::TOKEN_REGISTRY_KEY);
151
+
152
+ return $iframeUrl;
153
+ }
154
+
155
+ /**
156
+ * get the mage core url helper
157
+ *
158
+ * @return Mage_Core_Helper_Url
159
+ */
160
+ protected function getCoreUrlHelper()
161
+ {
162
+ return Mage::helper('core/url');
163
+ }
164
+
165
+ protected function getDataHelper()
166
+ {
167
+ return Mage::helper('expercash/data');
168
+ }
169
+
170
+
171
+ }
app/code/community/Expercash/Expercash/Model/Request/Masterpass/Epi.php ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+
24
+ class Expercash_Expercash_Model_Request_Masterpass_Epi
25
+ {
26
+ const MASTERPASS_ACTION = 'masterpass';
27
+
28
+ /**
29
+ * default locale string
30
+ */
31
+ const DEFAULT_LOCALE = 'en';
32
+
33
+ /**
34
+ * the locale codes that are supported by expercash
35
+ *
36
+ * @var array
37
+ */
38
+ protected $_supportedLocales = array('en', 'de', 'fr', 'es', 'it', 'du');
39
+
40
+ /**
41
+ * @param Mage_Sales_Model_Order $order
42
+ *
43
+ * @return array
44
+ */
45
+ public function getEpiParams(Mage_Sales_Model_Quote $quote)
46
+ {
47
+ $config = $this->getConfig();
48
+ $storeId = $quote->getStoreId();
49
+
50
+ $params = Array(
51
+ 'pid' => $config->getProjectId($storeId),
52
+ 'pkey' => $config->getGatewayKey($storeId),
53
+ 'action' => self::MASTERPASS_ACTION,
54
+ 'amount' => $this->calcCentAmount($quote->getGrandTotal()),
55
+ 'currency' => $quote->getQuoteCurrencyCode(),
56
+ 'cref' => $quote->getReservedOrderId(),
57
+ 'bc_ref' => $quote->getReservedOrderId(),
58
+ 'return_url' => Mage::getUrl('expercash/fullcheckout/success', array('_secure' => true)),
59
+ 'notify_url' => Mage::getUrl('expercash/fullcheckout/notify', array('_secure' => true)),
60
+ 'error_url' => Mage::getUrl('expercash/fullcheckout/error', array('_secure' => true)),
61
+ 'shopEnvironment' => $this->getConfig()->getShopEnvironmentParams(),
62
+ );
63
+
64
+ return $params;
65
+ }
66
+
67
+ public function getPlaceOrderParams(Mage_Sales_Model_Order $order, $captureType)
68
+ {
69
+ $config = $this->getConfig();
70
+ $storeId = $order->getStoreId();
71
+
72
+ $params = Array(
73
+ 'pid' => $config->getProjectId($storeId),
74
+ 'pkey' => $config->getGatewayKey($storeId),
75
+ 'action' => $captureType,
76
+ 'reference' => Mage::helper('expercash/payment')->getPaymentReferenceId($order->getPayment()),
77
+ 'amount' => $this->calcCentAmount($order->getGrandTotal()),
78
+ 'currency' => $order->getOrderCurrencyCode(),
79
+ 'cref' => $order->getIncrementId(),
80
+ 'bc_ref' => $order->getIncrementId(),
81
+ 'cip' => $order->getRemoteIp() ? $order->getRemoteIp() : '10.10.10.10',
82
+ 'cid' => $order->getCustomerId() ? $order->getCustomerId() : 'Guest',
83
+ 'shopEnvironment' => $this->getConfig()->getShopEnvironmentParams(),
84
+ );
85
+
86
+ return $params;
87
+
88
+ }
89
+
90
+ /**
91
+ * get locale
92
+ *
93
+ * @return mixed null|string
94
+ */
95
+ protected function getLocale()
96
+ {
97
+ $result = self::DEFAULT_LOCALE;
98
+ $locale = substr(Mage::app()->getLocale()->getLocaleCode(), 0, 2);
99
+ if (in_array($locale, $this->_supportedLocales)) {
100
+ $result = $locale;
101
+ }
102
+ return $result;
103
+ }
104
+
105
+ /**
106
+ * Calc Amount
107
+ *
108
+ * @return amount
109
+ */
110
+ protected function calcCentAmount($amount)
111
+ {
112
+ return number_format($amount * 100, 0, '.', '');
113
+ }
114
+
115
+ /**
116
+ * getter for masterpass config model
117
+ *
118
+ * @return Expercash_Expercash_Model_Masterpass_Config
119
+ */
120
+ protected function getConfig()
121
+ {
122
+ return Mage::getModel('expercash/masterpass_config');
123
+ }
124
+ }
app/code/community/Expercash/Expercash/Model/Request/Token.php ADDED
@@ -0,0 +1,192 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+
24
+ class Expercash_Expercash_Model_Request_Token
25
+ {
26
+ /**
27
+ * default locale string
28
+ */
29
+ const DEFAULT_LOCALE = 'en';
30
+
31
+ /**
32
+ * the locale codes that are supported by expercash
33
+ *
34
+ * @var array
35
+ */
36
+ protected $_supportedLocales = array('en', 'de', 'fr', 'es', 'it', 'du');
37
+
38
+ /**
39
+ * @param Mage_Sales_Model_Order $order
40
+ *
41
+ * @return array
42
+ */
43
+ public function getTokenParams($order)
44
+ {
45
+ $config = $this->getConfig();
46
+ $paymentObject = $order->getPayment()->getMethodInstance();
47
+ $code = $paymentObject->getCode();
48
+
49
+ $params = Array(
50
+ 'popupId' => $config->getPopupId($order->getStoreId()),
51
+ 'jobId' => $order->getIncrementId(),
52
+ 'transactionId' => $order->getIncrementId(),
53
+ 'amount' => $this->calcCentAmount($order->getGrandTotal()),
54
+ 'currency' => $order->getOrderCurrencyCode(),
55
+ 'paymentMethod' => $config->getConfigData('paymenttype', $code, $order->getStoreId()),
56
+ 'returnUrl' => Mage::getUrl('expercash/expercash/success', array('_secure' => true)),
57
+ 'errorUrl' => Mage::getUrl('expercash/expercash/error', array('_secure' => true)),
58
+ 'notifyUrl' => Mage::getUrl('expercash/expercash/notify', array('_secure' => true)),
59
+ 'profile' => $config->getProfilId($order->getStoreId()),
60
+ );
61
+
62
+ if ($paymentObject instanceof Expercash_Expercash_Model_Expercashpc) {
63
+ $params = array_merge($params, $this->getBarzahlenParams($order));
64
+ }
65
+ $params['popupKey'] = $this->getPopupKey($order, $params);
66
+ $additionalParams = $this->getNonHashedParams($order);
67
+ $params = array_merge($params, $additionalParams);
68
+ $params = $this->removeEmptyParams($params);
69
+
70
+ return $params;
71
+ }
72
+
73
+ /**
74
+ * return the additional params that are not included in the hash building process
75
+ *
76
+ * @param Mage_Sales_Model_Order $order
77
+ *
78
+ * @return array
79
+ */
80
+ protected function getNonHashedParams(Mage_Sales_Model_Order $order)
81
+ {
82
+ $params = array(
83
+ 'cssUrl' => $this->getConfig()->getCssUrl($order->getStoreId()),
84
+ 'language' => $this->getLocale(),
85
+ 'shopEnvironment' => json_encode($this->getShopEnvironmentParams())
86
+ );
87
+ return $params;
88
+ }
89
+
90
+ /**
91
+ * remove empty params from param array
92
+ *
93
+ * @param array $params
94
+ *
95
+ * @return array
96
+ */
97
+ protected function removeEmptyParams(array $params)
98
+ {
99
+ foreach ($params as $key => $value) {
100
+ if (empty($value)) {
101
+ unset($params[$key]);
102
+ }
103
+ }
104
+ return $params;
105
+ }
106
+
107
+ /**
108
+ * build and return the popupKey value
109
+ *
110
+ * @param Mage_Sales_Model_Order $order
111
+ * @param array $params
112
+ *
113
+ * @return string
114
+ */
115
+ protected function getPopupKey(Mage_Sales_Model_Order $order, array $params)
116
+ {
117
+ $popupKey = implode('', $params) . $this->getConfig()->getAuthorizationkey($order->getStoreId());
118
+ return md5($popupKey);
119
+ }
120
+
121
+ /**
122
+ * get the Barzahlen params
123
+ *
124
+ * @param Mage_Sales_Model_Order $order
125
+ *
126
+ * @return array
127
+ */
128
+ protected function getBarzahlenParams(Mage_Sales_Model_Order $order)
129
+ {
130
+ /** @var $billingAddress Mage_Sales_Model_Order_Address */
131
+ $billingAddress = $order->getBillingAddress();
132
+ return array(
133
+ 'customerPrename' => $billingAddress->getFirstname(),
134
+ 'customerName' => $billingAddress->getLastname(),
135
+ 'customerAddress1' => $billingAddress->getStreetFull(),
136
+ 'customerZip' => $billingAddress->getPostcode(),
137
+ 'customerCity' => $billingAddress->getCity(),
138
+ 'customerCountry' => $billingAddress->getCountry(),
139
+ 'customerEmail' => $billingAddress->getEmail(),
140
+ 'updateUrl' => Mage::getUrl('expercash/expercash/notify', array('_secure' => true))
141
+ );
142
+ }
143
+
144
+ /**
145
+ * return the params for shopEnvironment
146
+ *
147
+ * @return array
148
+ */
149
+ protected function getShopEnvironmentParams()
150
+ {
151
+ return array(
152
+ 'envSystemName' => Mage::helper('expercash/data')->getEnvName(),
153
+ 'envSystemVersion' => Mage::helper('expercash/data')->getMagentoVersion(),
154
+ 'envPaymentModulVersion' => Mage::helper('expercash/data')->getVersion()
155
+ );
156
+ }
157
+
158
+ /**
159
+ * get locale
160
+ *
161
+ * @return mixed null|string
162
+ */
163
+ protected function getLocale()
164
+ {
165
+ $result = self::DEFAULT_LOCALE;
166
+ $locale = substr(Mage::app()->getLocale()->getLocaleCode(), 0, 2);
167
+ if (in_array($locale, $this->_supportedLocales)) {
168
+ $result = $locale;
169
+ }
170
+ return $result;
171
+ }
172
+
173
+ /**
174
+ * Calc Amount
175
+ *
176
+ * @return amount
177
+ */
178
+ protected function calcCentAmount($amount)
179
+ {
180
+ return number_format($amount * 100, 0, '.', '');
181
+ }
182
+
183
+ /**
184
+ * getter for config model
185
+ *
186
+ * @return Expercash_Expercash_Model_Config
187
+ */
188
+ protected function getConfig()
189
+ {
190
+ return Mage::getModel('expercash/config');
191
+ }
192
+ }
app/code/community/Expercash/Expercash/Model/Request/Token/Iframe.php ADDED
@@ -0,0 +1,180 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+
24
+ class Expercash_Expercash_Model_Request_Token_Iframe
25
+ {
26
+ /**
27
+ * default locale string
28
+ */
29
+ const DEFAULT_LOCALE = 'en';
30
+
31
+ /**
32
+ * the locale codes that are supported by expercash
33
+ *
34
+ * @var array
35
+ */
36
+ protected $_supportedLocales = array('en', 'de', 'fr', 'es', 'it', 'du');
37
+
38
+ /**
39
+ * @param Mage_Sales_Model_Order $order
40
+ *
41
+ * @return array
42
+ */
43
+ public function getTokenParams($order)
44
+ {
45
+ $config = $this->getConfig();
46
+ $paymentObject = $order->getPayment()->getMethodInstance();
47
+ $code = $paymentObject->getCode();
48
+
49
+ $params = Array(
50
+ 'popupId' => $config->getPopupId($order->getStoreId()),
51
+ 'jobId' => $order->getIncrementId(),
52
+ 'transactionId' => $order->getIncrementId(),
53
+ 'amount' => $this->calcCentAmount($order->getGrandTotal()),
54
+ 'currency' => $order->getOrderCurrencyCode(),
55
+ 'paymentMethod' => $config->getConfigData('paymenttype', $code, $order->getStoreId()),
56
+ 'returnUrl' => Mage::getUrl('expercash/expercash/success', array('_secure' => true)),
57
+ 'errorUrl' => Mage::getUrl('expercash/expercash/error', array('_secure' => true)),
58
+ 'notifyUrl' => Mage::getUrl('expercash/expercash/notify', array('_secure' => true)),
59
+ 'profile' => $config->getProfilId($order->getStoreId()),
60
+ );
61
+
62
+ if ($paymentObject instanceof Expercash_Expercash_Model_Expercashpc) {
63
+ $params = array_merge($params, $this->getBarzahlenParams($order));
64
+ }
65
+ $params['popupKey'] = $this->getPopupKey($order, $params);
66
+ $additionalParams = $this->getNonHashedParams($order);
67
+ $params = array_merge($params, $additionalParams);
68
+ $params = $this->removeEmptyParams($params);
69
+
70
+ return $params;
71
+ }
72
+
73
+ /**
74
+ * return the additional params that are not included in the hash building process
75
+ *
76
+ * @param Mage_Sales_Model_Order $order
77
+ *
78
+ * @return array
79
+ */
80
+ protected function getNonHashedParams(Mage_Sales_Model_Order $order)
81
+ {
82
+ $params = array(
83
+ 'cssUrl' => $this->getConfig()->getCssUrl($order->getStoreId()),
84
+ 'language' => $this->getLocale(),
85
+ 'shopEnvironment' => $this->getConfig()->getShopEnvironmentParams(),
86
+ );
87
+ return $params;
88
+ }
89
+
90
+ /**
91
+ * remove empty params from param array
92
+ *
93
+ * @param array $params
94
+ *
95
+ * @return array
96
+ */
97
+ protected function removeEmptyParams(array $params)
98
+ {
99
+ foreach ($params as $key => $value) {
100
+ if (empty($value)) {
101
+ unset($params[$key]);
102
+ }
103
+ }
104
+ return $params;
105
+ }
106
+
107
+ /**
108
+ * build and return the popupKey value
109
+ *
110
+ * @param Mage_Sales_Model_Order $order
111
+ * @param array $params
112
+ *
113
+ * @return string
114
+ */
115
+ protected function getPopupKey(Mage_Sales_Model_Order $order, array $params)
116
+ {
117
+ $popupKey = implode('', $params) . $this->getConfig()->getAuthorizationkey($order->getStoreId());
118
+ return md5($popupKey);
119
+ }
120
+
121
+ /**
122
+ * get the Barzahlen params
123
+ *
124
+ * @param Mage_Sales_Model_Order $order
125
+ *
126
+ * @return array
127
+ */
128
+ protected function getBarzahlenParams(Mage_Sales_Model_Order $order)
129
+ {
130
+ /** @var $billingAddress Mage_Sales_Model_Order_Address */
131
+ $billingAddress = $order->getBillingAddress();
132
+ return array(
133
+ 'customerPrename' => $billingAddress->getFirstname(),
134
+ 'customerName' => $billingAddress->getLastname(),
135
+ 'customerAddress1' => $billingAddress->getStreetFull(),
136
+ 'customerZip' => $billingAddress->getPostcode(),
137
+ 'customerCity' => $billingAddress->getCity(),
138
+ 'customerCountry' => $billingAddress->getCountry(),
139
+ 'customerEmail' => $billingAddress->getEmail(),
140
+ 'updateUrl' => Mage::getUrl('expercash/expercash/notify', array('_secure' => true))
141
+ );
142
+ }
143
+
144
+
145
+
146
+ /**
147
+ * get locale
148
+ *
149
+ * @return mixed null|string
150
+ */
151
+ protected function getLocale()
152
+ {
153
+ $result = self::DEFAULT_LOCALE;
154
+ $locale = substr(Mage::app()->getLocale()->getLocaleCode(), 0, 2);
155
+ if (in_array($locale, $this->_supportedLocales)) {
156
+ $result = $locale;
157
+ }
158
+ return $result;
159
+ }
160
+
161
+ /**
162
+ * Calc Amount
163
+ *
164
+ * @return amount
165
+ */
166
+ protected function calcCentAmount($amount)
167
+ {
168
+ return number_format($amount * 100, 0, '.', '');
169
+ }
170
+
171
+ /**
172
+ * getter for config model
173
+ *
174
+ * @return Expercash_Expercash_Model_Config
175
+ */
176
+ protected function getConfig()
177
+ {
178
+ return Mage::getModel('expercash/config');
179
+ }
180
+ }
app/code/community/Expercash/Expercash/Model/Resource/Directory/Region.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+
24
+ class Expercash_Expercash_Model_Resource_Directory_Region extends Mage_Directory_Model_Mysql4_Region
25
+ {
26
+
27
+ /**
28
+ * load region by name
29
+ *
30
+ * @overrites \Mage_Directory_Model_Mysql4_Region::loadByName
31
+ *
32
+ * @param Mage_Directory_Model_Region $region
33
+ * @param $regionName
34
+ * @param $countryId
35
+ *
36
+ * @return $this
37
+ */
38
+ public function loadByName(Mage_Directory_Model_Region $region, $regionName, $countryId)
39
+ {
40
+ $locale = Mage::app()->getLocale()->getLocaleCode();
41
+
42
+ $select = $this->_read->select()
43
+ ->from(array('region'=>$this->_regionTable))
44
+ ->where('region.country_id=?', $countryId)
45
+ ->where('region.default_name=?', $regionName)
46
+ ->joinLeft(array('rname'=>$this->_regionNameTable),
47
+ 'rname.region_id=region.region_id AND rname.locale=\''.$locale.'\'',
48
+ array('name'));
49
+
50
+
51
+ $region->setData($this->_read->fetchRow($select));
52
+ return $this;
53
+ }
54
+ }
app/code/community/Expercash/Expercash/Model/Source/Paymenttypecc.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+
24
+ class Expercash_Expercash_Model_Source_Paymenttypecc
25
+ {
26
+
27
+ public function toOptionArray()
28
+ {
29
+ return array(
30
+ array(
31
+ 'value' => Expercash_Expercash_Model_Expercashcc::PAYMENT_TYPE_CC_BUY,
32
+ 'label' => Mage::helper('expercash')->__('CCBUY')
33
+ ),
34
+ array(
35
+ 'value' => Expercash_Expercash_Model_Expercashcc::PAYMENT_TYPE_CC_AUTH,
36
+ 'label' => Mage::helper('expercash')->__('CCAUTH')
37
+ ),
38
+ );
39
+ }
40
+ }
app/code/community/Expercash/Expercash/Model/Source/Paymenttypeelv.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+
24
+ class Expercash_Expercash_Model_Source_Paymenttypeelv
25
+ {
26
+
27
+ public function toOptionArray()
28
+ {
29
+ return array(
30
+ array(
31
+ 'value' => Expercash_Expercash_Model_Expercashelv::PAYMENT_TYPE_ELV_BUY,
32
+ 'label' => Mage::helper('expercash')->__('ELVBUY')
33
+ ),
34
+ array(
35
+ 'value' => Expercash_Expercash_Model_Expercashelv::PAYMENT_TYPE_ELV_AUTH,
36
+ 'label' => Mage::helper('expercash')->__('ELVAUTH')
37
+ ),
38
+ );
39
+ }
40
+ }
app/code/community/Expercash/Expercash/Model/Source/Paymenttypegp.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+
24
+ class Expercash_Expercash_Model_Source_Paymenttypegp
25
+ {
26
+
27
+ public function toOptionArray()
28
+ {
29
+ return array(
30
+ array(
31
+ 'value' => Expercash_Expercash_Model_Expercashgp::PAYMENT_TYPE_GP,
32
+ 'label' => Mage::helper('expercash')->__('GPBUY')
33
+ ),
34
+ );
35
+ }
36
+ }
app/code/community/Expercash/Expercash/Model/Source/Paymenttypemp.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ class Expercash_Expercash_Model_Source_Paymenttypemp
23
+ {
24
+
25
+ public function toOptionArray()
26
+ {
27
+ return array(
28
+ array(
29
+ 'value' => Expercash_Expercash_Model_Expercashmp::PAYMENT_TYPE_MP_BUY,
30
+ 'label' => Mage::helper('expercash')->__('MPBUY')
31
+ ),
32
+ array(
33
+ 'value' => Expercash_Expercash_Model_Expercashmp::PAYMENT_TYPE_MP_AUTH,
34
+ 'label' => Mage::helper('expercash')->__('MPAUTH')
35
+ ),
36
+ );
37
+ }
38
+ }
app/code/community/Expercash/Expercash/Model/Source/Paymenttypempf.php ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ class Expercash_Expercash_Model_Source_Paymenttypempf
23
+ {
24
+ /**
25
+ * Prepare payment action list as optional array
26
+ *
27
+ * @return array
28
+ */
29
+ public function toOptionArray()
30
+ {
31
+ return array(
32
+ array(
33
+ 'value' => Mage_Payment_Model_Method_Abstract::ACTION_AUTHORIZE_CAPTURE,
34
+ 'label' => Mage::helper('adminhtml')->__('Yes')
35
+ ),
36
+ array(
37
+ 'value' => Mage_Payment_Model_Method_Abstract::ACTION_AUTHORIZE,
38
+ 'label' => Mage::helper('adminhtml')->__('No')
39
+ ),
40
+ );
41
+ }
42
+ }
app/code/community/Expercash/Expercash/Model/Source/Paymenttypeso.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+
24
+ class Expercash_Expercash_Model_Source_Paymenttypeso
25
+ {
26
+
27
+ public function toOptionArray()
28
+ {
29
+ return array(
30
+ array(
31
+ 'value' => Expercash_Expercash_Model_Expercashso::PAYMENT_TYPE_SO,
32
+ 'label' => Mage::helper('expercash')->__('SOBUY')
33
+ ),
34
+ );
35
+ }
36
+ }
app/code/community/Expercash/Expercash/Test/Block/ExpercashTest.php ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * @category Expercash
17
+ * @package Expercash_Expercash
18
+ * @copyright Copyright (c) 2008-2011 bjoern hahnefeld IT
19
+ * @copyright Copyright (c) 2013 Netresearch App Factory AG
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ class Expercash_Expercash_Test_Block_ExpercashTest extends EcomDev_PHPUnit_Test_Case
23
+ {
24
+
25
+
26
+ public function testGetIframeHeight()
27
+ {
28
+ $checkoutSessionMock = $this->getModelMock('checkout/session', array('init', 'start'));
29
+ $this->replaceByMock('model', 'checkout/session', $checkoutSessionMock);
30
+
31
+ $configMock = $this->getModelMock('expercash/config', array('getIframeHeight'));
32
+ $configMock->expects($this->any())
33
+ ->method('getIframeHeight')
34
+ ->will($this->returnValue(150));
35
+ $this->replaceByMock('model', 'expercash/config', $configMock);
36
+
37
+ $blockMock = $this->getBlockMock('expercash/expercash', array('getStoreId', 'getConfig'));
38
+ $blockMock->expects($this->any())
39
+ ->method('getStoreId')
40
+ ->will($this->returnValue(1));
41
+
42
+ $this->replaceByMock('block', 'expercash/expercash', $blockMock);
43
+
44
+ $this->assertEquals(150, $this->invokeMethod('getIframeHeight', array()));
45
+ }
46
+
47
+ public function testGetIframeWidth()
48
+ {
49
+ $checkoutSessionMock = $this->getModelMock('checkout/session', array('init', 'start'));
50
+ $this->replaceByMock('model', 'checkout/session', $checkoutSessionMock);
51
+
52
+ $configMock = $this->getModelMock('expercash/config', array('getIframeWidth'));
53
+ $configMock->expects($this->any())
54
+ ->method('getIframeWidth')
55
+ ->will($this->returnValue(250));
56
+ $this->replaceByMock('model', 'expercash/config', $configMock);
57
+
58
+ $blockMock = $this->getBlockMock('expercash/expercash', array('getStoreId', 'getConfig'));
59
+ $blockMock->expects($this->any())
60
+ ->method('getStoreId')
61
+ ->will($this->returnValue(1));
62
+
63
+ $this->replaceByMock('block', 'expercash/expercash', $blockMock);
64
+
65
+ $this->assertEquals(250, $this->invokeMethod('getIframeWidth', array()));
66
+ }
67
+
68
+ public function testGetIframeCssClass()
69
+ {
70
+ $checkoutSessionMock = $this->getModelMock('checkout/session', array('init', 'start'));
71
+ $this->replaceByMock('model', 'checkout/session', $checkoutSessionMock);
72
+
73
+ $configMock = $this->getModelMock('expercash/config', array('getIframeCssClass'));
74
+ $configMock->expects($this->any())
75
+ ->method('getIframeCssClass')
76
+ ->will($this->returnValue('cssClassFoobar'));
77
+ $this->replaceByMock('model', 'expercash/config', $configMock);
78
+
79
+ $blockMock = $this->getBlockMock('expercash/expercash', array('getStoreId', 'getConfig'));
80
+ $blockMock->expects($this->any())
81
+ ->method('getStoreId')
82
+ ->will($this->returnValue(1));
83
+
84
+ $this->replaceByMock('block', 'expercash/expercash', $blockMock);
85
+
86
+ $this->assertEquals('cssClassFoobar', $this->invokeMethod('getIframeCssClass', array()));
87
+ }
88
+
89
+
90
+ public function testGetStoreId()
91
+ {
92
+ $order = new Varien_Object();
93
+ $order->setStoreId(1);
94
+
95
+ $iframeMock = $this->getModelMock('expercash/request_iframe', array('getOrder'));
96
+ $iframeMock->expects($this->any())
97
+ ->method('getOrder')
98
+ ->will($this->returnValue($order));
99
+ $this->replaceByMock('model', 'expercash/request_iframe', $iframeMock);
100
+
101
+ $this->assertEquals(1, $this->invokeMethod('getStoreId', array()));
102
+ }
103
+
104
+ public function testGetIframeModel()
105
+ {
106
+ $this->assertTrue(
107
+ $this->invokeMethod('getIframeModel', array()) instanceof Expercash_Expercash_Model_Request_Iframe
108
+ );
109
+ }
110
+
111
+ public function testGetConfig()
112
+ {
113
+ $this->assertTrue($this->invokeMethod('getConfig', array()) instanceof Expercash_Expercash_Model_Config);
114
+ }
115
+
116
+ public function testGetIframeUrl()
117
+ {
118
+ $checkoutSessionMock = $this->getModelMock('checkout/session', array('init', 'start'));
119
+ $this->replaceByMock('model', 'checkout/session', $checkoutSessionMock);
120
+ $iframeMock = $this->getModelMock('expercash/request_iframe', array('setOrderDataToSession'));
121
+ $this->replaceByMock('model', 'expercash/request_iframe', $iframeMock);
122
+ $this->assertEquals(
123
+ $this->invokeMethod('getIframeUrl', array()), Mage::getModel('expercash/request_iframe')->getIframeUrl()
124
+ );
125
+ }
126
+
127
+ /**
128
+ * Call protected/private method of a class.
129
+ *
130
+ * @param object $object Instantiated object that we will run method on.
131
+ * @param string $methodName Method name to call
132
+ * @param array $parameters Array of parameters to pass into method.
133
+ *
134
+ * @return mixed Method return.
135
+ */
136
+ public function invokeMethod($methodName, array $parameters = array())
137
+ {
138
+ $object = new Expercash_Expercash_Block_Expercash();
139
+ $reflection = new \ReflectionClass(get_class($object));
140
+ $method = $reflection->getMethod($methodName);
141
+ $method->setAccessible(true);
142
+ return $method->invokeArgs($object, $parameters);
143
+ }
144
+ }
app/code/community/Expercash/Expercash/Test/Block/ExpercashTest/expectations/orders.yaml ADDED
@@ -0,0 +1,2 @@
 
 
1
+ url:'https://epi.expercash.net/epi_popup2.php?popupId=&jobId=1700000031&transactionId=1700000031&amount=47999&currency=EUR&paymentMethod=cc_authorize&returnUrl=http%3A%2F%2Fahe-ce-1620.magento.nrdev.de%2Fexpercash%2Fexpercash%2Fsuccess%2F&errorUrl=http%3A%2F%2Fahe-ce-1620.magento.nrdev.de%2Fexpercash%2Fexpercash%2Ferror%2F&notifyUrl=http%3A%2F%2Fahe-ce-1620.magento.nrdev.de%2Fexpercash%2Fexpercash%2Fnotify%2F&profile=&popupKey=2ffa6676dbb450ecc3f6831b07c81b56&cssUrl=&language=de&shopEnvironment=%7B%22envSystemName%22%3A%22Magento%22%2C%22envSystemVersion%22%3A%221.7.0.2%22%2C%22envPaymentModulVersion%22%3A%2213.03.28%22%7D'
2
+
app/code/community/Expercash/Expercash/Test/Block/ExpercashTest/fixtures/orders.yaml ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tables:
2
+ sales/order:
3
+
4
+ - entity_id: 11
5
+ increment_id: 1700000031
6
+ shipping_address_id: 42
7
+ base_grand_total: 479.99
8
+ grand_total: 479.99
9
+ currency: 'EUR'
10
+ customer_gender: 1
11
+ shipping_method: 'flatrate_flatrate'
12
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
13
+ state: 'pending_payment'
14
+ status: 'pending_payment'
15
+ order_currency_code: 'EUR'
16
+
17
+ - entity_id: 2
18
+ increment_id: 100000055
19
+ quote_id: 2
20
+ shipping_address_id: 42
21
+ base_grand_total: 119.00
22
+ grand_total: 119.00
23
+ currency: 'EUR'
24
+ customer_gender: 1
25
+ shipping_method: 'flatrate_flatrate'
26
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
27
+
28
+ - entity_id: 3
29
+ increment_id: 100000055
30
+ quote_id: 3
31
+ shipping_address_id: 42
32
+ base_grand_total: 119.00
33
+ grand_total: 119.00
34
+ currency: 'EUR'
35
+ customer_gender: 1
36
+ shipping_method: 'flatrate_flatrate'
37
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
38
+
39
+ sales/order_payment:
40
+ - entity_id: 11
41
+ parent_id: 11
42
+ method: 'expercashcc'
app/code/community/Expercash/Expercash/Test/Block/Masterpass/FormTest.php ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * @category Expercash
17
+ * @package Expercash_Expercash
18
+ * @copyright Copyright (c) 2008-2011 bjoern hahnefeld IT
19
+ * @copyright Copyright (c) 2013 Netresearch App Factory AG
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ class Expercash_Expercash_Test_Block_Masterpass_FormTest extends EcomDev_PHPUnit_Test_Case
23
+ {
24
+
25
+
26
+
27
+ public function testGetMethodName()
28
+ {
29
+ $block = new Expercash_Expercash_Block_Masterpass_Form();
30
+
31
+ $this->assertEquals('expercashmp', $block->getMethodCode());
32
+ }
33
+
34
+ public function testGetMasterpassConfig()
35
+ {
36
+ $configModel = $this->invokeMethod('getMasterpassConfig');
37
+ $this->assertTrue($configModel instanceof Expercash_Expercash_Model_Masterpass_Config);
38
+ }
39
+
40
+ public function testHandleLogoDisplayFalse()
41
+ {
42
+ $configModelMock = $this->getModelMock('expercash/masterpass_config', array(
43
+ 'showMasterpassLogoInCheckout',
44
+ )
45
+ );
46
+ $configModelMock->expects($this->any())
47
+ ->method('showMasterpassLogoInCheckout')
48
+ ->will($this->returnValue(false));
49
+
50
+ $this->replaceByMock('model', 'expercash/masterpass_config', $configModelMock);
51
+
52
+ $this->assertEquals(null, $this->invokeMethod('handleLogoDisplay'));
53
+ }
54
+
55
+
56
+ public function testHandleLogoDisplayTrue()
57
+ {
58
+ // $this->markTestIncomplete();
59
+
60
+ // needs fix , mocking block singleton doesnt work somehow
61
+
62
+ $configModelMock = $this->getModelMock('expercash/masterpass_config', array(
63
+ 'showMasterpassLogoInCheckout',
64
+ )
65
+ );
66
+ $configModelMock->expects($this->any())
67
+ ->method('showMasterpassLogoInCheckout')
68
+ ->will($this->returnValue(true));
69
+
70
+ $this->replaceByMock('model', 'expercash/masterpass_config', $configModelMock);
71
+
72
+ $markMock = $this->getBlockMock('core/template', array(
73
+ 'setPaymentAcceptanceMarkHref',
74
+ 'setPaymentAcceptanceMarkSrc'
75
+ )
76
+ );
77
+
78
+ $markMock->expects($this->any())
79
+ ->method('setPaymentAcceptanceMarkHref')
80
+ ->will($this->returnSelf());
81
+
82
+ $this->replaceByMock('block', 'core/template', $markMock);
83
+
84
+ $this->assertInstanceOf(get_class($markMock), $this->invokeMethod('handleLogoDisplay'));
85
+ }
86
+
87
+
88
+
89
+ /**
90
+ * Call protected/private method of a class.
91
+ *
92
+ * @param object $object Instantiated object that we will run method on.
93
+ * @param string $methodName Method name to call
94
+ * @param array $parameters Array of parameters to pass into method.
95
+ *
96
+ * @return mixed Method return.
97
+ */
98
+ public function invokeMethod($methodName, array $parameters = array())
99
+ {
100
+ $object = new Expercash_Expercash_Block_Masterpass_Form();
101
+ $reflection = new \ReflectionClass(get_class($object));
102
+ $method = $reflection->getMethod($methodName);
103
+ $method->setAccessible(true);
104
+ return $method->invokeArgs($object, $parameters);
105
+ }
106
+
107
+
108
+ }
app/code/community/Expercash/Expercash/Test/Block/Masterpass/Fullcheckout/ShortcutTest.php ADDED
@@ -0,0 +1,182 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * @category Expercash
17
+ * @package Expercash_Expercash
18
+ * @copyright Copyright (c) 2008-2011 bjoern hahnefeld IT
19
+ * @copyright Copyright (c) 2013 Netresearch App Factory AG
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ class Expercash_Expercash_Test_Block_Masterpass_Fullcheckout_ShortcutTest extends EcomDev_PHPUnit_Test_Case
23
+ {
24
+
25
+
26
+
27
+ public function testIsCustomerNotLoggedIn()
28
+ {
29
+ $customerSessionMock = $this->getModelMock('customer/session', array('init', 'start', 'isLoggedIn'));
30
+ $customerSessionMock->expects($this->any())
31
+ ->method('isLoggedIn')
32
+ ->will($this->returnValue(false));
33
+ $this->replaceByMock('model', 'customer/session', $customerSessionMock);
34
+
35
+ $block = new Expercash_Expercash_Block_Masterpass_Fullcheckout_Shortcut();
36
+
37
+ $this->assertFalse(
38
+ $this->invokeMethod('isCustomerLoggedIn', array()),
39
+ Mage::getModel('customer/session')->isLoggedIn()
40
+ );
41
+ }
42
+
43
+
44
+ public function testIsCustomerLoggedIn()
45
+ {
46
+ $customerSessionMock = $this->getModelMock('customer/session', array('init', 'start', 'isLoggedIn'));
47
+ $customerSessionMock->expects($this->any())
48
+ ->method('isLoggedIn')
49
+ ->will($this->returnValue(true));
50
+ $this->replaceByMock('model', 'customer/session', $customerSessionMock);
51
+
52
+ $this->assertTrue(
53
+ $this->invokeMethod('isCustomerLoggedIn', array()),
54
+ Mage::getModel('customer/session')->isLoggedIn()
55
+ );
56
+ }
57
+
58
+
59
+ public function testGetMasterpassConfig()
60
+ {
61
+ $configModel = $this->invokeMethod('getMasterpassConfig');
62
+ $this->assertTrue($configModel instanceof Expercash_Expercash_Model_Masterpass_Config);
63
+ }
64
+
65
+
66
+ public function testGetLearnMoreLink()
67
+ {
68
+ $configModelMock = $this->getModelMock('expercash/masterpass_config', array(
69
+ 'showMasterPassFullCheckoutLearnMoreLink',
70
+ 'getMasterpassLearnMoreUrl'
71
+ )
72
+ );
73
+ $configModelMock->expects($this->any())
74
+ ->method('showMasterPassFullCheckoutLearnMoreLink')
75
+ ->will($this->returnValue(true));
76
+
77
+ $configModelMock->expects($this->any())
78
+ ->method('getMasterpassLearnMoreUrl')
79
+ ->will($this->returnValue('www.masterpass.com/learnmore/De/de'));
80
+ $this->replaceByMock('model', 'expercash/masterpass_config', $configModelMock);
81
+
82
+ $block = new Expercash_Expercash_Block_Masterpass_Fullcheckout_Shortcut();
83
+ $this->assertEquals('www.masterpass.com/learnmore/De/de', $block->getLearnMoreLink());
84
+
85
+ }
86
+
87
+ public function testGetLearnMoreLinkDisabled()
88
+ {
89
+ $configModelMock = $this->getModelMock('expercash/masterpass_config', array(
90
+ 'showMasterPassFullCheckoutLearnMoreLink',
91
+ )
92
+ );
93
+ $configModelMock->expects($this->any())
94
+ ->method('showMasterPassFullCheckoutLearnMoreLink')
95
+ ->will($this->returnValue(false));
96
+ $this->replaceByMock('model', 'expercash/masterpass_config', $configModelMock);
97
+
98
+ $block = new Expercash_Expercash_Block_Masterpass_Fullcheckout_Shortcut();
99
+ $this->assertNull($block->getLearnMoreLink());
100
+
101
+ }
102
+
103
+
104
+ public function testGetImageUrl()
105
+ {
106
+ $configModelMock = $this->getModelMock('expercash/masterpass_config', array('getFullCheckoutImageUrl'));
107
+ $configModelMock->expects($this->any())
108
+ ->method('getFullCheckoutImageUrl')
109
+ ->will($this->returnValue('www.myImage.de'));
110
+ $this->replaceByMock('model', 'expercash/masterpass_config', $configModelMock);
111
+
112
+ $block = new Expercash_Expercash_Block_Masterpass_Fullcheckout_Shortcut();
113
+
114
+ $this->assertEquals('www.myImage.de', $block->getImageUrl());
115
+ $this->assertNotEquals('www.notMyImage.de', $block->getImageUrl());
116
+
117
+ }
118
+
119
+
120
+ public function testGetCheckoutUrl()
121
+ {
122
+ $configModelMock = $this->getModelMock('expercash/masterpass_config', array('getMasterpassFullCheckoutUrl'));
123
+ $configModelMock->expects($this->any())
124
+ ->method('getMasterpassFullCheckoutUrl')
125
+ ->will($this->returnValue('www.myImage.de/fullcheckout/start'));
126
+ $this->replaceByMock('model', 'expercash/masterpass_config', $configModelMock);
127
+
128
+ $block = new Expercash_Expercash_Block_Masterpass_Fullcheckout_Shortcut();
129
+
130
+ $this->assertEquals('www.myImage.de/fullcheckout/start', $block->getCheckoutUrl());
131
+ $this->assertNotEquals('www.myImage.de/fullcheckout/foo', $block->getCheckoutUrl());
132
+
133
+ }
134
+
135
+
136
+ public function testToHtmlShouldRender()
137
+ {
138
+ $this->assertEquals('', $this->invokeMethod('_toHtml'));
139
+
140
+ }
141
+
142
+ public function testToHtmlShouldNotRender()
143
+ {
144
+
145
+ $sessionMock = $this->getModelMock('customer/session', array('init', 'start'));
146
+ $this->replaceByMock('model', 'customer/session', $sessionMock);
147
+
148
+ $sessionMock = $this->getModelMock('checkout/session', array('init', 'start'));
149
+ $this->replaceByMock('model', 'checkout/session', $sessionMock);
150
+
151
+ $blockMock = $this->getBlockMock('expercash/masterpass_fullcheckout_shortcut', array(
152
+ '_beforeToHtml',
153
+
154
+ )
155
+ );
156
+
157
+ $blockMock->setShouldRender(false);
158
+ $this->assertEquals('', $blockMock->toHtml());
159
+
160
+ }
161
+
162
+
163
+ /**
164
+ * Call protected/private method of a class.
165
+ *
166
+ * @param object $object Instantiated object that we will run method on.
167
+ * @param string $methodName Method name to call
168
+ * @param array $parameters Array of parameters to pass into method.
169
+ *
170
+ * @return mixed Method return.
171
+ */
172
+ public function invokeMethod($methodName, array $parameters = array())
173
+ {
174
+ $object = new Expercash_Expercash_Block_Masterpass_Fullcheckout_Shortcut();
175
+ $reflection = new \ReflectionClass(get_class($object));
176
+ $method = $reflection->getMethod($methodName);
177
+ $method->setAccessible(true);
178
+ return $method->invokeArgs($object, $parameters);
179
+ }
180
+
181
+
182
+ }
app/code/community/Expercash/Expercash/Test/Controller/ExpercashControllerTest.php ADDED
@@ -0,0 +1,182 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * To change this template, choose Tools | Templates
5
+ * and open the template in the editor.
6
+ */
7
+
8
+ /**
9
+ * Description of ExpercashControllerTest
10
+ *
11
+ * @author sebastian
12
+ */
13
+ class Expercash_Expercash_Test_Controller_ExpercashControllerTest
14
+ extends EcomDev_PHPUnit_Test_Case_Controller
15
+ {
16
+
17
+ protected $store;
18
+
19
+ public function setUp()
20
+ {
21
+ $this->store = Mage::app()->getStore(0)->load(0);
22
+ parent::setup();
23
+ }
24
+
25
+
26
+ /**
27
+ * @loadFixture orders
28
+ * @loadExpectation orders
29
+ */
30
+ public function testCheckReturnedDataTrue()
31
+ {
32
+
33
+ if (Mage::helper('expercash/data')->isBelowCE17()) {
34
+ $this->markTestSkipped('Magento Version not supported by Ecom Dev');
35
+ return;
36
+ }
37
+
38
+ $helperMock = $this->getHelperMock(
39
+ 'expercash/payment', array('checkReturnedData')
40
+ );
41
+ $helperMock->expects($this->any())
42
+ ->method('checkReturnedData')
43
+ ->will($this->returnValue(true));
44
+ $this->replaceByMock('helper', 'expercash/payment', $helperMock);
45
+ $order = Mage::getModel('sales/order')->load(11);
46
+ $this->assertEquals(0, $order->getEmailSent());
47
+ Mage::app()->getRequest()->setParams($this->getResponseParams());
48
+
49
+ $this->dispatch('expercash/expercash/notify', array('_store' => 'default'));
50
+
51
+
52
+ }
53
+
54
+ /**
55
+ * @loadFixture orders
56
+ * @loadExpectation orders
57
+ */
58
+ public function testCheckReturnedDataNoRoute()
59
+ {
60
+
61
+ if (Mage::helper('expercash/data')->isBelowCE17()) {
62
+ $this->markTestSkipped('Magento Version not supported by Ecom Dev');
63
+ return;
64
+ }
65
+
66
+ $helperMock = $this->getHelperMock(
67
+ 'expercash/payment', array('checkReturnedData')
68
+ );
69
+ $helperMock->expects($this->any())
70
+ ->method('checkReturnedData')
71
+ ->will($this->returnValue(true));
72
+ $this->replaceByMock('helper', 'expercash/payment', $helperMock);
73
+
74
+ Mage::app()->getRequest()->setMethod('POST');
75
+ Mage::app()->getRequest()->setParams($this->getResponseParams());
76
+ $this->dispatch('expercash/expercash/notify');
77
+
78
+ }
79
+
80
+
81
+
82
+ /**
83
+ * @loadFixture orders.yaml
84
+ */
85
+ public function testBarzahlenPaid()
86
+ {
87
+
88
+ if (Mage::helper('expercash/data')->isBelowCE17()) {
89
+ $this->markTestSkipped('Magento Version not supported by Ecom Dev');
90
+ return;
91
+ }
92
+
93
+ $helperMock = $this->getHelperMock('expercash/payment', array('setExperCashData', 'getCheckSum'));
94
+ $helperMock->expects($this->any())
95
+ ->method('getCheckSum')
96
+ ->will($this->returnValue('3c564b7cd1cd16ab30460e835163ead7'));
97
+ $this->replaceByMock('helper', 'expercash/payment', $helperMock);
98
+
99
+ Mage::app()->getRequest()->setParams($this->getBarzahlenPaidCallParams());
100
+ /** @var $order Mage_Sales_Model_Order */
101
+ $order = Mage::getModel('sales/order')->load(12);
102
+ $this->assertEquals(1, $order->getEmailSent());
103
+ $this->dispatch('expercash/expercash/notify');
104
+ $order = Mage::getModel('sales/order')->load(12);
105
+ $this->assertEquals(1, $order->getEmailSent());
106
+ $this->assertEquals(Expercash_Expercash_Model_Expercashpc::BARZAHLEN_STATUS_PAID, $order->getPayment()->getAdditionalInformation('paymentStatus'));
107
+
108
+
109
+ }
110
+
111
+ /**
112
+ * @loadFixture orders.yaml
113
+ * @expectedException Mage_Core_Exception
114
+ * @expectedExceptionMessage Response is not correct.
115
+ */
116
+ public function testBarzahlenSecondCallToOld()
117
+ {
118
+ if (Mage::helper('expercash/data')->isBelowCE17()) {
119
+ $this->markTestSkipped('Magento Version not supported by Ecom Dev');
120
+ return;
121
+ }
122
+
123
+ $helperMock = $this->getHelperMock('expercash/payment', array('setExperCashData', 'getCheckSum'));
124
+ $helperMock->expects($this->any())
125
+ ->method('getCheckSum')
126
+ ->will($this->returnValue('3c564b7cd1cd16ab30460e835163ead7'));
127
+ $this->replaceByMock('helper', 'expercash/payment', $helperMock);
128
+
129
+ Mage::app()->getRequest()->setParams($this->getBarzahlenOpenParams());
130
+ $this->dispatch('expercash/expercash/notify');
131
+ }
132
+
133
+
134
+ protected function getResponseParams()
135
+ {
136
+ return array(
137
+ 'transactionId' => 100000005,
138
+ 'amount' => 3500,
139
+ 'currency' => 'EUR',
140
+ 'paymentMethod' => 'foo',
141
+ 'GuTID' => 'CC1724106675000',
142
+ 'exportKey' => '972f10a9ef67f0583bc0c9e33709670d'
143
+ );
144
+ }
145
+
146
+ protected function getBarzahlenPaidCallParams()
147
+ {
148
+ $params = array(
149
+ 'epi' => '1',
150
+ 'transactionId' => '100000100',
151
+ 'amount' => '3500',
152
+ 'currency' => 'EUR',
153
+ 'paymentMethod' => 'BZ',
154
+ 'GuTID' => 'BZ2006472637000',
155
+ 'exportKey' => '3c564b7cd1cd16ab30460e835163ead7',
156
+ 'GuTID2' => '316235217',
157
+ 'GuTID2Hash' => 'b8bc23da725e115530a11bd62b429af2',
158
+ 'owner' => 'SEBASTIAN ERTNER',
159
+ 'paymentStatus' => 'PAID'
160
+ );
161
+ return $params;
162
+ }
163
+
164
+ protected function getBarzahlenOpenParams()
165
+ {
166
+ $params = array(
167
+ 'epi' => '1',
168
+ 'transactionId' => '100000101',
169
+ 'amount' => '3500',
170
+ 'currency' => 'EUR',
171
+ 'paymentMethod' => 'BZ',
172
+ 'GuTID' => 'BZ2006472637000',
173
+ 'exportKey' => '3c564b7cd1cd16ab30460e835163ead7',
174
+ 'GuTID2' => '316235217',
175
+ 'GuTID2Hash' => 'b8bc23da725e115530a11bd62b429af2',
176
+ 'owner' => 'SEBASTIAN ERTNER',
177
+ 'paymentStatus' => 'PAID'
178
+ );
179
+ return $params;
180
+ }
181
+
182
+ }
app/code/community/Expercash/Expercash/Test/Controller/ExpercashControllerTest/expectations/orders.yaml ADDED
@@ -0,0 +1 @@
 
1
+ url:"https://epi.expercash.net/epi_popup2.php?popupId=foo&jobId=11&transactionId=11&amount=11900&currency=&paymentMethod=foo&returnUrl=http%3A%2F%2Fser-dev.magento.nrdev.de%2Findex.php%2Fexpercash%2Fexpercash%2Fsuccess%2F&errorUrl=http%3A%2F%2Fser-dev.magento.nrdev.de%2Findex.php%2Fexpercash%2Fexpercash%2Ferror%2F&notifyUrl=http%3A%2F%2Fser-dev.magento.nrdev.de%2Findex.php%2Fexpercash%2Fexpercash%2Fnotify%2F&profile=foo&popupKey=fdb64dabed0a4894bed2ec718da2856d&cssUrl=foo&language=en"
app/code/community/Expercash/Expercash/Test/Controller/ExpercashControllerTest/fixtures/orders.yaml ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tables:
2
+ sales/order:
3
+
4
+ - entity_id: 11
5
+ increment_id: 100000005
6
+ shipping_address_id: 42
7
+ base_grand_total: 119.00
8
+ grand_total: 119.00
9
+ currency: 'EUR'
10
+ customer_gender: 1
11
+ shipping_method: 'flatrate_flatrate'
12
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
13
+ state: 'pending_payment'
14
+ status: 'pending_payment'
15
+ email_sent: 0
16
+
17
+ - entity_id: 12
18
+ increment_id: 100000100
19
+ shipping_address_id: 42
20
+ base_grand_total: 119.00
21
+ grand_total: 119.00
22
+ currency: 'EUR'
23
+ customer_gender: 1
24
+ shipping_method: 'flatrate_flatrate'
25
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
26
+ state: 'pending_payment'
27
+ status: 'pending_payment'
28
+ email_sent: 1
29
+
30
+ - entity_id: 13
31
+ increment_id: 100000101
32
+ shipping_address_id: 42
33
+ base_grand_total: 119.00
34
+ grand_total: 119.00
35
+ currency: 'EUR'
36
+ customer_gender: 1
37
+ shipping_method: 'flatrate_flatrate'
38
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
39
+ state: 'pending_payment'
40
+ status: 'pending_payment'
41
+ created_at: '2013-12-03 11:46:08'
42
+ email_sent: 0
43
+
44
+ - entity_id: 2
45
+ increment_id: 100000055
46
+ quote_id: 2
47
+ shipping_address_id: 42
48
+ base_grand_total: 119.00
49
+ grand_total: 119.00
50
+ currency: 'EUR'
51
+ customer_gender: 1
52
+ shipping_method: 'flatrate_flatrate'
53
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
54
+ email_sent: 0
55
+
56
+ - entity_id: 3
57
+ increment_id: 100000055
58
+ quote_id: 3
59
+ shipping_address_id: 42
60
+ base_grand_total: 119.00
61
+ grand_total: 119.00
62
+ currency: 'EUR'
63
+ customer_gender: 1
64
+ shipping_method: 'flatrate_flatrate'
65
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
66
+ email_sent: 0
67
+
68
+ sales/order_payment:
69
+ - entity_id: 11
70
+ parent_id: 11
71
+ method: 'expercashcc'
72
+
73
+ - entity_id: 12
74
+ parent_id: 12
75
+ method: 'expercashpc'
76
+ additional_information: a:3:{s:5:"owner";s:16:"SEBASTIAN ERTNER";s:13:"paymentStatus";s:4:"OPEN";s:19:"notifyActionCounter";i:1;}
77
+
78
+ - entity_id: 13
79
+ parent_id: 13
80
+ method: 'expercashpc'
81
+ additional_information: a:3:{s:5:"owner";s:16:"SEBASTIAN ERTNER";s:13:"paymentStatus";s:4:"PAID";s:19:"notifyActionCounter";i:1;}
app/code/community/Expercash/Expercash/Test/Helper/DataTest.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Expercash_Expercash_Test_Helper_DataTest extends EcomDev_PHPUnit_Test_Case_Controller
4
+ {
5
+
6
+ /**
7
+ * Test for getAdditionalPaymentParams
8
+ */
9
+ public function testGetAdditionalPaymentParams()
10
+ {
11
+ $paymentParams = array(
12
+ 'owner',
13
+ 'maskedPan',
14
+ 'cardScheme',
15
+ 'validThru',
16
+ 'panCountry',
17
+ 'ipCountry',
18
+ 'attemptsTotal',
19
+ 'attemptsSameAction',
20
+ '3dsStatus',
21
+ 'paymentStatus'
22
+ );
23
+ $this->assertEquals($paymentParams, Mage::helper('expercash/data')->getAdditionalPaymentParams());
24
+ }
25
+ }
app/code/community/Expercash/Expercash/Test/Helper/MasterpassTest.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+ /**
24
+ * Expercash_Expercash_Test_Helper_MasterpassTest
25
+ *
26
+ * @category Expercash
27
+ * @package Expercash_Expercash
28
+ */
29
+ class Expercash_Expercash_Test_Helper_MasterpassTest extends EcomDev_PHPUnit_Test_Case
30
+ {
31
+ /**
32
+ * @test
33
+ * @expectedException Mage_Core_Exception
34
+ * @expectedExceptionMessage Validate params: Signature and build hash do not match!
35
+ */
36
+ public function validateParamsTypeCheck()
37
+ {
38
+ $helper = Mage::helper('expercash/masterpass');
39
+ $helper->validateParams(array(
40
+ 'notificationSignature' => true,
41
+ ));
42
+ }
43
+ }
app/code/community/Expercash/Expercash/Test/Helper/PaymentTest.php ADDED
@@ -0,0 +1,356 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Expercash_Expercash_Test_Helper_PaymentTest
4
+ extends EcomDev_PHPUnit_Test_Case
5
+ {
6
+ private $_helper;
7
+ private $store;
8
+
9
+ public function setUp()
10
+ {
11
+ parent::setup();
12
+ $this->_helper = Mage::helper('expercash/payment');
13
+ $this->store = Mage::app()->getStore(1)->load(1);
14
+ $this->store->resetConfig();
15
+ }
16
+
17
+ /**
18
+ * send no invoice mail if it is denied by configuration
19
+ */
20
+ public function testSendNoInvoiceToCustomerIfDenied()
21
+ {
22
+ $this->store->setConfig('payment/expercashcc/sendinvoicemail', 0);
23
+ $this->assertFalse(
24
+ (bool)Mage::getModel('expercash/config')->getConfigData(
25
+ 'sendinvoicemail', 'expercashcc'
26
+ )
27
+ );
28
+ $payment = Mage::getModel('sales/order_payment');
29
+ $payment->setMethod('expercashcc');
30
+ $order = Mage::getModel('sales/order');
31
+ $order->setPayment($payment);
32
+
33
+ $sentInvoice = $this->getModelMock(
34
+ 'sales/order_invoice', array(
35
+ 'getEmailSent',
36
+ 'sendEmail',
37
+ 'getOrder'
38
+ )
39
+ );
40
+
41
+ $sentInvoice->expects($this->any())
42
+ ->method('getOrder')
43
+ ->will($this->returnValue($order));
44
+
45
+
46
+ $sentInvoice->expects($this->any())
47
+ ->method('getEmailSent')
48
+ ->will($this->returnValue(false));
49
+
50
+ $sentInvoice->expects($this->never())
51
+ ->method('sendEmail');
52
+
53
+ $this->_helper->sendInvoiceToCustomer($sentInvoice);
54
+ }
55
+
56
+ /**
57
+ * send no invoice mail if it was already sent
58
+ */
59
+ public function testSendNoInvoiceToCustomerIfAlreadySent()
60
+ {
61
+ $this->store->setConfig('payment/expercashcc/sendinvoicemail', 1);
62
+ $this->assertTrue(
63
+ (bool)Mage::getModel('expercash/config')->getConfigData(
64
+ 'sendinvoicemail', 'expercashcc', $this->store->getId()
65
+ )
66
+ );
67
+ $payment = Mage::getModel('sales/order_payment');
68
+ $payment->setMethod('expercashcc');
69
+ $order = Mage::getModel('sales/order');
70
+ $order->setPayment($payment);
71
+
72
+ $someInvoice = $this->getModelMock(
73
+ 'sales/order_invoice', array(
74
+ 'getEmailSent',
75
+ 'sendEmail',
76
+ 'getOrder'
77
+ )
78
+ );
79
+
80
+ $someInvoice->expects($this->any())
81
+ ->method('getOrder')
82
+ ->will($this->returnValue($order));
83
+
84
+ $someInvoice->expects($this->any())
85
+ ->method('getEmailSent')
86
+ ->will($this->returnValue(true));
87
+ $someInvoice->expects($this->never())
88
+ ->method('sendEmail');
89
+ $this->_helper->sendInvoiceToCustomer($someInvoice);
90
+ }
91
+
92
+ /**
93
+ * send invoice mail
94
+ */
95
+ public function testSendInvoiceToCustomerIfEnabled()
96
+ {
97
+ $this->store->setConfig('payment/expercashcc/sendinvoicemail', 1);
98
+ $this->assertTrue(
99
+ (bool)Mage::getModel('expercash/config')->getConfigData(
100
+ 'sendinvoicemail', 'expercashcc', $this->store->getId()
101
+ )
102
+ );
103
+ $payment = Mage::getModel('sales/order_payment');
104
+ $payment->setMethod('expercashcc');
105
+ $order = Mage::getModel('sales/order');
106
+ $order->setPayment($payment);
107
+
108
+
109
+ $anotherInvoice = $this->getModelMock(
110
+ 'sales/order_invoice', array(
111
+ 'getEmailSent',
112
+ 'sendEmail',
113
+ 'getOrder'
114
+ )
115
+ );
116
+
117
+ $anotherInvoice->expects($this->any())
118
+ ->method('getOrder')
119
+ ->will($this->returnValue($order));
120
+
121
+ $anotherInvoice->expects($this->any())
122
+ ->method('getEmailSent')
123
+ ->will($this->returnValue(false));
124
+ $anotherInvoice->expects($this->any())
125
+ ->method('sendEmail')
126
+ ->with($this->equalTo(true));
127
+ $this->_helper->sendInvoiceToCustomer($anotherInvoice);
128
+ }
129
+
130
+
131
+ /**
132
+ * @expectedException Mage_Core_Exception
133
+ * @expectedExceptionMessage Response is not correct.
134
+ */
135
+ public function testCheckReturnedDataResponseParamsWrong()
136
+ {
137
+ Mage::helper('expercash/payment')->checkReturnedData(
138
+ array('test', 'test2')
139
+ );
140
+
141
+ }
142
+
143
+ /**
144
+ * @loadFixture orders.yaml
145
+ * @expectedException Mage_Core_Exception
146
+ * @expectedExceptionMessage Response is not correct.
147
+ */
148
+ public function testCheckReturnedDataDependentParamMissing()
149
+ {
150
+ $order = Mage::getModel('sales/order')->load(11);
151
+ $this->store->setConfig('payment/expercashpc/active', 1);
152
+
153
+ $paymentHelperMock = $this->getHelperMock(
154
+ 'expercash/payment', array('getOrder')
155
+ );
156
+ $paymentHelperMock->expects($this->any())
157
+ ->method('getOrder')
158
+ ->will($this->returnValue($order));
159
+ $this->replaceByMock('helper', 'expercash/payment', $paymentHelperMock);
160
+
161
+ $paymentHelperMock->checkReturnedData($this->getResponseParams());
162
+ }
163
+
164
+ /**
165
+ * @loadFixture orders.yaml
166
+ */
167
+ public function testCheckReturnedDataSuccess()
168
+ {
169
+ $order = Mage::getModel('sales/order')->load(11);
170
+ $this->store->setConfig('payment/expercashpc/active', 1);
171
+
172
+ $paymentHelperMock = $this->getHelperMock(
173
+ 'expercash/payment', array(
174
+ 'getOrder',
175
+ 'setExperCashData'
176
+ )
177
+ );
178
+ $paymentHelperMock->expects($this->any())
179
+ ->method('getOrder')
180
+ ->will($this->returnValue($order));
181
+ $this->replaceByMock('helper', 'expercash/payment', $paymentHelperMock);
182
+
183
+ $params = $this->getResponseParams();
184
+ $params['paymentStatus'] = 'paid';
185
+ $this->assertTrue($paymentHelperMock->checkReturnedData($params));
186
+ $order = Mage::getModel('sales/order')->load(11);
187
+ $this->assertEquals(1, $order->getEmailSent());
188
+
189
+
190
+ }
191
+
192
+ /**
193
+ * @loadFixture orders.yaml
194
+ */
195
+ public function testCheckReturnedDataFailed()
196
+ {
197
+ $order = Mage::getModel('sales/order')->load(11);
198
+ $this->store->setConfig('payment/expercashpc/active', 1);
199
+
200
+ $paymentHelperMock = $this->getHelperMock(
201
+ 'expercash/payment', array(
202
+ 'getOrder',
203
+ 'setExperCashData',
204
+ 'getChecksum'
205
+ )
206
+ );
207
+ $paymentHelperMock->expects($this->any())
208
+ ->method('getOrder')
209
+ ->will($this->returnValue($order));
210
+
211
+ $paymentHelperMock->expects($this->any())
212
+ ->method('getChecksum')
213
+ ->will($this->returnValue('4711'));
214
+
215
+ $params = $this->getResponseParams();
216
+ $params['paymentStatus'] = 'paid';
217
+ $this->assertFalse($paymentHelperMock->checkReturnedData($params));
218
+ /** @var Mage_Sales_Model_Order $order */
219
+ $order = Mage::getModel('sales/order')->load(11);
220
+ $this->assertTrue($order->isCanceled());
221
+
222
+
223
+ }
224
+
225
+ public function testValidateNonPcExpercashPayments()
226
+ {
227
+ $payment = Mage::getModel('sales/order_payment');
228
+ $payment->setMethod('expercashcc');
229
+ $payment->setAdditionalInformation('notifyActionCounter', 2);
230
+ $this->assertFalse($this->invokeMethod('validateNonPcExpercashPayments', array($payment)));
231
+ $payment->setMethod('expercashpc');
232
+ $payment->setAdditionalInformation('notifyActionCounter', 1);
233
+ $this->assertTrue($this->invokeMethod('validateNonPcExpercashPayments', array($payment)));
234
+
235
+ }
236
+
237
+ public function testValidateBarzahlenSecondCall()
238
+ {
239
+ $order = Mage::getModel('sales/order');
240
+ $now = new DateTime();
241
+ $date = $now->sub(new DateInterval('P5D'))->format('Y-m-d');
242
+ $order->setCreatedAt($date);
243
+ $this->assertTrue($this->invokeMethod('validateBarzahlenSecondCall', array($order)));
244
+ $date = $now->sub(new DateInterval('P15D'))->format('Y-m-d');
245
+ $order->setCreatedAt($date);
246
+ $this->assertFalse($this->invokeMethod('validateBarzahlenSecondCall', array($order)));
247
+
248
+ }
249
+
250
+
251
+ /**
252
+ * Call protected/private method of a class.
253
+ *
254
+ * @param object $object Instantiated object that we will run method on.
255
+ * @param string $methodName Method name to call
256
+ * @param array $parameters Array of parameters to pass into method.
257
+ *
258
+ * @return mixed Method return.
259
+ */
260
+ public function invokeMethod($methodName, array $parameters = array()
261
+ ) {
262
+ $object = Mage::helper('expercash/payment');
263
+ $reflection = new \ReflectionClass(get_class($object));
264
+ $method = $reflection->getMethod($methodName);
265
+ $method->setAccessible(true);
266
+ return $method->invokeArgs($object, $parameters);
267
+ }
268
+
269
+ public function testCheckResponseParams()
270
+ {
271
+ $params = array ('Foo' => 1);
272
+ $this->assertFalse($this->invokeMethod('checkResponseParams',array($params)));
273
+ $correctParams = $this->getResponseParams();
274
+ $this->assertTrue($this->invokeMethod('checkResponseParams',array($correctParams)));
275
+ }
276
+
277
+
278
+ public function testCheckOrderDependentConditions()
279
+ {
280
+
281
+ $order = Mage::getModel('sales/order');
282
+ $payment = Mage::getModel('sales/order_payment');
283
+ $payment->setMethod('foo');
284
+ $order->setPayment($payment);
285
+ $params = $this->getResponseParams();
286
+ $this->assertTrue($this->invokeMethod('checkOrderDependentConditions', array($order,$params)));
287
+ $payment->setMethod('expercashpc');
288
+ $order->setPayment($payment);
289
+ $this->assertFalse($this->invokeMethod('checkOrderDependentConditions', array($order,$params)));
290
+
291
+ }
292
+
293
+ public function testSetExpercashRef()
294
+ {
295
+ $order = Mage::getModel('sales/order');
296
+ $order->setStoreId(0);
297
+ $params = array('GuTID' => 1234);
298
+ $order->setQuoteId(5);
299
+ $modelMock = $this->getModelMock('expercash/expercashpc', array('getConfigData'));
300
+ $modelMock->expects($this->any())
301
+ ->method('getConfigData')
302
+ ->will($this->returnValue(Expercash_Expercash_Model_Expercashcc::PAYMENT_TYPE_CC_BUY));
303
+ $this->replaceByMock('Model', 'expercash/expercashpc', $modelMock);
304
+
305
+ $this->invokeMethod('setExpercashRef', array($params,$modelMock, $order));
306
+ $experCashData = Mage::helper('expercash/payment')->getExperCashData(5);
307
+ // $this->assertEquals('expercash_gutid',
308
+ // );
309
+
310
+
311
+
312
+ }
313
+
314
+ /**
315
+ * @loadFixture orders.yaml
316
+ */
317
+ public function testCreateInvoiceForBarzahlen()
318
+ {
319
+ $order = Mage::getModel('sales/order')->load(11);
320
+
321
+ $paymentHelperMock = $this->getHelperMock('expercash/payment', array('saveInvoice'));
322
+ $paymentHelperMock->expects($this->any())
323
+ ->method('saveInvoice')
324
+ ->will($this->returnValue(true));
325
+ $this->replaceByMock('helper', 'expercash/payment', $paymentHelperMock);
326
+
327
+ $paymentModelMock = $this->getModelMock('expercash/expercashpc', array('getConfigData'));
328
+ $paymentModelMock->expects($this->any())
329
+ ->method('getConfigData')
330
+ ->will($this->returnValue(true));
331
+ $this->replaceByMock('model', 'expercash/expercashpc', $paymentModelMock);
332
+
333
+ $response = $this->getResponseParams();
334
+ $response['paymentStatus'] = 'PAID';
335
+
336
+ $this->invokeMethod('createInvoice', array($paymentModelMock, $order, $response));
337
+ $this->assertEquals(Mage_Sales_Model_Order::STATE_PROCESSING , $order->getState());
338
+
339
+
340
+
341
+
342
+ }
343
+
344
+ protected function getResponseParams()
345
+ {
346
+ return array(
347
+ 'transactionId' => 100000005,
348
+ 'amount' => 3500,
349
+ 'currency' => 'EUR',
350
+ 'paymentMethod' => 'expercashpc',
351
+ 'GuTID' => 'CC1724106675000',
352
+ 'exportKey' => '2dd0b4a21e99868e73b91865a2c3fb96',
353
+ );
354
+ }
355
+
356
+ }
app/code/community/Expercash/Expercash/Test/Helper/PaymentTest/fixtures/orders.yaml ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tables:
2
+ sales/order:
3
+
4
+ - entity_id: 11
5
+ increment_id: 100000005
6
+ shipping_address_id: 42
7
+ base_grand_total: 119.00
8
+ grand_total: 119.00
9
+ currency: 'EUR'
10
+ customer_gender: 1
11
+ shipping_method: 'flatrate_flatrate'
12
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
13
+ state: 'pending_payment'
14
+ status: 'pending_payment'
15
+ store_id: 1
16
+
17
+ - entity_id: 2
18
+ increment_id: 100000055
19
+ quote_id: 2
20
+ shipping_address_id: 42
21
+ base_grand_total: 119.00
22
+ grand_total: 119.00
23
+ currency: 'EUR'
24
+ customer_gender: 1
25
+ shipping_method: 'flatrate_flatrate'
26
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
27
+
28
+ - entity_id: 3
29
+ increment_id: 100000055
30
+ quote_id: 3
31
+ shipping_address_id: 42
32
+ base_grand_total: 119.00
33
+ grand_total: 119.00
34
+ currency: 'EUR'
35
+ customer_gender: 1
36
+ shipping_method: 'flatrate_flatrate'
37
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
38
+
39
+ sales/order_item:
40
+ - item_id: 11
41
+ order_id: 11
42
+ qty_ordered: 3.0000
43
+ qty_canceled: 0.0000
44
+ qty_to_invoice: 3
45
+
46
+
47
+ sales/order_payment:
48
+ - entity_id: 11
49
+ parent_id: 11
50
+ method: 'expercashpc'
app/code/community/Expercash/Expercash/Test/Model/Api/AbstractTest.php ADDED
@@ -0,0 +1,145 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Expercash_Expercash_Test_Model_Api_AbstractTest extends EcomDev_PHPUnit_Test_Case_Config
3
+ {
4
+ public function test_PostRequest()
5
+ {
6
+ $configModelMock = $this->getModelMock('expercash/config',array(
7
+ 'getEpiUrl'
8
+ )
9
+ );
10
+ $configModelMock->expects($this->once())
11
+ ->method('getEpiUrl')
12
+ ->will($this->returnValue('http://test.gateway.com'));
13
+ $this->replaceByMock('model', 'expercash/config', $configModelMock);
14
+
15
+ $urlArray = Array(
16
+ "pid" => 11,
17
+ "pkey" => 12,
18
+ "cref" => 123456,
19
+ 'amount' => 45000,
20
+ "action" => 'cc_authorize',
21
+ "reference" => 55555
22
+ );
23
+
24
+ $fakeResponse = new Varien_Object();
25
+ $fakeResponse->setBody('test me');
26
+ $fakeClient = $this->getMock('Varien_Http_Client', array('request'));
27
+ $fakeClient->expects($this->any())
28
+ ->method('request')
29
+ ->will($this->returnValue($fakeResponse));
30
+
31
+ $clientMock = $this->getModelMock('expercash/api_capture', array(
32
+ 'getClient'
33
+ )
34
+ );
35
+ $clientMock->expects($this->once())
36
+ ->method('getClient')
37
+ ->will($this->returnValue($fakeClient));
38
+ $this->replaceByMock('model', 'expercash/api_capture', $clientMock);
39
+
40
+ $reflectionClass = new ReflectionClass('Expercash_Expercash_Model_Api_Capture');
41
+ $method = $reflectionClass->getMethod('_postRequest');
42
+ $method->setAccessible(true);
43
+ $captureClass = Mage::getModel('expercash/api_capture');
44
+
45
+ $this->assertEquals('test me', $method->invoke($captureClass, $urlArray));
46
+ }
47
+
48
+
49
+ public function test_PostRequestWithException()
50
+ {
51
+ $configModelMock = $this->getModelMock('expercash/config',array(
52
+ 'getEpiUrl'
53
+ )
54
+ );
55
+ $configModelMock->expects($this->once())
56
+ ->method('getEpiUrl')
57
+ ->will($this->returnValue('http://test.gateway.com'));
58
+ $this->replaceByMock('model', 'expercash/config', $configModelMock);
59
+
60
+ $urlArray = Array(
61
+ "pid" => 11,
62
+ "pkey" => 12,
63
+ "cref" => 123456,
64
+ 'amount' => 45000,
65
+ "action" => 'cc_authorize',
66
+ "reference" => 55555
67
+ );
68
+
69
+ $fakeResponse = new Varien_Object();
70
+ $fakeResponse->setBody('test me');
71
+ $fakeClient = $this->getMock('Varien_Http_Client', array('request'));
72
+ $fakeClient->expects($this->any())
73
+ ->method('request')
74
+ ->will($this->throwException(new Mage_Core_Exception()));
75
+
76
+ $clientMock = $this->getModelMock('expercash/api_capture', array(
77
+ 'getClient'
78
+ )
79
+ );
80
+ $clientMock->expects($this->once())
81
+ ->method('getClient')
82
+ ->will($this->returnValue($fakeClient));
83
+ $this->replaceByMock('model', 'expercash/api_capture', $clientMock);
84
+
85
+ $reflectionClass = new ReflectionClass('Expercash_Expercash_Model_Api_Capture');
86
+ $method = $reflectionClass->getMethod('_postRequest');
87
+ $method->setAccessible(true);
88
+ $captureClass = Mage::getModel('expercash/api_capture');
89
+
90
+ // assertion that a Mage_Core_Exception is thrown
91
+ $this->setExpectedException('Mage_Core_Exception');
92
+
93
+ $method->invoke($captureClass, $urlArray);
94
+ }
95
+
96
+ public function testParseResponse()
97
+ {
98
+ $bodyText = '<?xml version="1.0" encoding="iso-8859-1"?>
99
+ <!DOCTYPE epixml PUBLIC "easyDebit/epi/DTD" "https://epi.expercash.net/epi.dtd">
100
+
101
+ <epixml>
102
+ <rc>100</rc>
103
+ <rctext>Transaction successfull</rctext>
104
+ <timestamp>2013-04-15 15:47:18</timestamp>
105
+ <taid>00000000000256943810</taid>
106
+ <epi_payment_id>CC1752647744000</epi_payment_id>
107
+ </epixml>';
108
+
109
+ $captureModel = Mage::getModel('expercash/api_capture');
110
+ $simpleXML = simplexml_load_string($bodyText);
111
+ $this->assertEquals($simpleXML, $captureModel->parseResponse($bodyText));
112
+ $this->assertNotEquals($bodyText, $captureModel->parseResponse($bodyText));
113
+
114
+ try {
115
+ $sampleXml = '<foo>fff';
116
+ $captureModel->parseResponse($sampleXml);
117
+ } catch (Exception $e) {
118
+ $this->assertEquals(
119
+ Mage::helper('expercash/data')->__('Error while transforming response to simple xml.'),
120
+ $e->getMessage()
121
+ );
122
+ }
123
+ try {
124
+ $sampleXml = '';
125
+ $captureModel->parseResponse($sampleXml);
126
+ } catch (Exception $e) {
127
+ $this->assertEquals(Mage::helper('expercash/data')->__('Error while transforming response to simple xml.'),$e->getMessage());
128
+ }
129
+ }
130
+
131
+ public function testGetClient()
132
+ {
133
+ $client = Mage::getModel('expercash/api_api')->getClient();
134
+ $this->assertTrue($client instanceof Varien_Http_Client);
135
+ }
136
+
137
+ public function testSetConfig()
138
+ {
139
+ $model = Mage::getModel('expercash/api_api');
140
+ $config = Mage::getModel('expercash/config');
141
+ $model->setConfig($config);
142
+ $this->assertTrue($model->getConfig() instanceof Expercash_Expercash_Model_Config);
143
+ }
144
+ }
145
+
app/code/community/Expercash/Expercash/Test/Model/Api/ApiTest.php ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class Expercash_Expercash_Test_Model_Api_ApiTest extends EcomDev_PHPUnit_Test_Case_Config
5
+ {
6
+
7
+ public function testGetIframeTokenSuccess()
8
+ {
9
+ $rawBody = $this->getXml('SuccessFullResponse.xml');
10
+ $clientMock = $this->getModelMock('expercash/api_api', array('_postRequest'));
11
+ $clientMock->expects($this->once())
12
+ ->method('_postRequest')
13
+ ->will($this->returnValue($rawBody));
14
+
15
+ $token = $clientMock->getIframeToken(array());
16
+ $this->assertEquals('1234567', $token);
17
+
18
+ }
19
+
20
+ /**
21
+ * @expectedException Mage_Core_Exception
22
+ * @expectedExceptionMessage invalid response from expercash
23
+ */
24
+ public function testGetIframeTokenFailedTransaction()
25
+ {
26
+ $rawBody = $this->getXml('FailedTransaction.xml');
27
+ $clientMock = $this->getModelMock('expercash/api_api', array('_postRequest'));
28
+ $clientMock->expects($this->once())
29
+ ->method('_postRequest')
30
+ ->will($this->returnValue($rawBody));
31
+
32
+ $clientMock->getIframeToken(array());
33
+ }
34
+
35
+ /**
36
+ * @expectedException Mage_Core_Exception
37
+ * @expectedExceptionMessage invalid response from expercash
38
+ */
39
+ public function testGetIframeTokenResponseParamsMissing()
40
+ {
41
+ $rawBody = $this->getXml('ResponseParamsMissing.xml');
42
+ $clientMock = $this->getModelMock('expercash/api_api', array('_postRequest'));
43
+ $clientMock->expects($this->once())
44
+ ->method('_postRequest')
45
+ ->will($this->returnValue($rawBody));
46
+
47
+ $clientMock->getIframeToken(array());
48
+ }
49
+
50
+
51
+
52
+ protected function getXml($fileName)
53
+ {
54
+ $fileName
55
+ = __DIR__ . DS . 'ApiTest' . DS . 'TestFiles' . DS . $fileName;
56
+ if (!file_exists($fileName)) {
57
+ throw new Exception($fileName . ' does not exist!');
58
+ }
59
+ if (!is_readable($fileName)) {
60
+ throw new Exception($fileName . ' is not readable!');
61
+ }
62
+ return file_get_contents($fileName);
63
+ }
64
+
65
+ }
66
+
app/code/community/Expercash/Expercash/Test/Model/Api/ApiTest/TestFiles/FailedTransaction.xml ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <iFrameXml>
3
+ <timestamp>2008‐12‐14T20:11:56+02:00</timestamp>
4
+ <rc>900</rc>
5
+ <rcText>Transaction failed</rcText>
6
+ <sessionId>54321</sessionId>
7
+ </iFrameXml>
app/code/community/Expercash/Expercash/Test/Model/Api/ApiTest/TestFiles/ResponseParamsMissing.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <iFrameXml>
3
+ <timestamp>2008‐12‐14T20:11:56+02:00</timestamp>
4
+ <rcText>Transaction successful</rcText>
5
+ <sessionId>1234567</sessionId>
6
+ </iFrameXml>
app/code/community/Expercash/Expercash/Test/Model/Api/ApiTest/TestFiles/SuccessFullResponse.xml ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <iFrameXml>
3
+ <timestamp>2008‐12‐14T20:11:56+02:00</timestamp>
4
+ <rc>100</rc>
5
+ <rcText>Transaction successful</rcText>
6
+ <sessionId>1234567</sessionId>
7
+ </iFrameXml>
app/code/community/Expercash/Expercash/Test/Model/Api/CaptureTest.php ADDED
@@ -0,0 +1,140 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class Expercash_Expercash_Test_Model_Api_CaptureTest extends EcomDev_PHPUnit_Test_Case_Config
5
+ {
6
+ /**
7
+ * @loadFixture orders
8
+ */
9
+ public function testCapture()
10
+ {
11
+ $this->markTestIncomplete("No assertion given.");
12
+
13
+ $order = Mage::getModel('sales/order')->load(11);
14
+ $payment = $order->getPayment();
15
+ $amount = 100;
16
+ $capture_type = 'expercashcc';
17
+
18
+ $urlArray = Array(
19
+ "pid" => 1234,
20
+ "pkey" => 52345,
21
+ "cref" => 123456,
22
+ 'amount' => round($amount * 100),
23
+ "action" => 'cc_capture',
24
+ "reference" => 55555
25
+ );
26
+
27
+ $captureMock = $this->getModelMock('expercash/api_capture',array(
28
+ '_postRequest',
29
+ 'validateAndSaveResponse'
30
+ )
31
+ );
32
+ $captureMock->expects($this->once())
33
+ ->method('_postRequest');
34
+
35
+ $captureMock->expects($this->once())
36
+ ->method('validateAndSaveResponse');
37
+
38
+ $this->replaceByMock('model', 'expercash/api_capture', $captureMock);
39
+ $captureMock->capture($payment, $amount, $capture_type);
40
+ }
41
+
42
+
43
+ /**
44
+ * @loadFixture orders
45
+ */
46
+ public function testSaveExperCashData()
47
+ {
48
+ // can test this method yet because setExperCashData in the payment helper
49
+ // does an update on the database
50
+ $this->markTestIncomplete();
51
+ }
52
+
53
+ /**
54
+ * @loadFixture ../../../../var/fixtures/orders
55
+ */
56
+ public function testValidateAndSaveResponse()
57
+ {
58
+ $quote = Mage::getModel('sales/order')->load(11);
59
+ $payment = $quote->getPayment();
60
+ $response = $response = new Varien_Object();
61
+ $response->rc = '100';
62
+
63
+ $captureModelMock = $this->getModelMock('expercash/api_capture', array(
64
+ 'parseResponse',
65
+ 'saveExperCashData',
66
+ 'saveOrderHistory'
67
+ )
68
+ );
69
+
70
+ $captureModelMock->expects($this->once())
71
+ ->method('parseResponse')
72
+ ->will($this->returnValue($response));
73
+
74
+ $captureModelMock->validateAndSaveResponse($response, $payment);
75
+ $this->assertEquals(Expercash_Expercash_Model_Expercash::STATUS_SUCCESS, $payment->getStatus());
76
+
77
+ }
78
+
79
+
80
+ /**
81
+ * @loadFixture ../../../../var/fixtures/orders
82
+ */
83
+ public function testValidateAndSaveResponseWithInvalidResponse()
84
+ {
85
+ $quote = Mage::getModel('sales/order')->load(11);
86
+ $payment = $quote->getPayment();
87
+ $response = $response = new Varien_Object();
88
+ $response->rc = '101';
89
+
90
+ $captureModelMock = $this->getModelMock('expercash/api_capture', array(
91
+ 'parseResponse',
92
+ 'saveExperCashData',
93
+ 'saveOrderHistory'
94
+ )
95
+ );
96
+
97
+ $captureModelMock->expects($this->once())
98
+ ->method('parseResponse')
99
+ ->will($this->returnValue($response));
100
+ $this->setExpectedException('Mage_Core_Exception');
101
+ $captureModelMock->validateAndSaveResponse($response, $payment);
102
+ }
103
+
104
+ /**
105
+ * @loadFixture ../../../../var/fixtures/orders
106
+ */
107
+ public function testValidateAndSaveResponseThrowsException()
108
+ {
109
+ $quote = Mage::getModel('sales/order')->load(11);
110
+ $payment = $quote->getPayment();
111
+ $response = $response = new Varien_Object();
112
+ $response->rc = '101';
113
+
114
+ $captureModelMock = $this->getModelMock('expercash/api_capture', array(
115
+ 'parseResponse',
116
+ 'saveExperCashData',
117
+ 'saveOrderHistory'
118
+ )
119
+ );
120
+ $exception = new Mage_Core_Exception();
121
+ $exception->setMessage('test message');
122
+ $captureModelMock->expects($this->once())
123
+ ->method('parseResponse')
124
+ ->will($this->throwException($exception));
125
+ $message = '';
126
+ try {
127
+ $captureModelMock->validateAndSaveResponse($response, $payment);
128
+ } catch (Exception $e) {
129
+ $this->assertEquals(
130
+ Mage::helper('expercash/data')->__(
131
+ 'Error during capture: %s',
132
+ $exception->getMessage()
133
+ ),
134
+ $e->getMessage()
135
+ );
136
+ }
137
+
138
+ }
139
+ }
140
+
app/code/community/Expercash/Expercash/Test/Model/Api/CaptureTest/fixtures/.gitkeep ADDED
File without changes
app/code/community/Expercash/Expercash/Test/Model/Api/CaptureTest/fixtures/orders.yaml ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tables:
2
+ sales/order:
3
+
4
+ - entity_id: 11
5
+ increment_id: 100000011
6
+ shipping_address_id: 42
7
+ base_grand_total: 119.00
8
+ grand_total: 119.00
9
+ currency: 'EUR'
10
+ customer_gender: 1
11
+ shipping_method: 'flatrate_flatrate'
12
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
13
+ state: 'pending_payment'
14
+ status: 'pending_payment'
15
+ quote_id: 20
16
+ id: 11
17
+
18
+ - entity_id: 2
19
+ increment_id: 100000055
20
+ quote_id: 2
21
+ shipping_address_id: 42
22
+ base_grand_total: 119.00
23
+ grand_total: 119.00
24
+ currency: 'EUR'
25
+ customer_gender: 1
26
+ shipping_method: 'flatrate_flatrate'
27
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
28
+
29
+ - entity_id: 3
30
+ increment_id: 100000055
31
+ quote_id: 3
32
+ shipping_address_id: 42
33
+ base_grand_total: 119.00
34
+ grand_total: 119.00
35
+ currency: 'EUR'
36
+ customer_gender: 1
37
+ shipping_method: 'flatrate_flatrate'
38
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
39
+
40
+ sales/quote:
41
+ - entity_id: 20
42
+ parent_id: 11
43
+ id: 20
44
+
45
+ sales/order_payment:
46
+ - entity_id: 11
47
+ parent_id: 11
48
+ method: 'expercashcc'
49
+
50
+ sales/quote_payment:
51
+ - id: 20
52
+ entity_id: 20
53
+ parent_id: 20
54
+ quote_id: 20
55
+ order_id: 11
56
+ method: 'expercashcc'
57
+ expercash_request_type: 'cc_authorize'
app/code/community/Expercash/Expercash/Test/Model/ConfigTest.php ADDED
@@ -0,0 +1,187 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Expercash_Expercash_Test_Model_ConfigTest extends EcomDev_PHPUnit_Test_Case_Config
4
+ {
5
+
6
+ /**
7
+ * @var Mage_Core_Model_Store
8
+ */
9
+ protected $store;
10
+
11
+ /**
12
+ * @var Mage_Core_Model_Store
13
+ */
14
+ protected $storeTwo;
15
+ /**
16
+ * @var Expercash_Expercash_Model_Config
17
+ */
18
+ protected $config;
19
+
20
+ public function setUp()
21
+ {
22
+ parent::setUp();
23
+ $this->config = Mage::getModel('expercash/config');
24
+ $this->store = Mage::app()->getStore(0)->load(0);
25
+ $this->storeTwo = Mage::app()->getStore(1)->load(1);
26
+
27
+ }
28
+
29
+ public function testGetEpiUrl()
30
+ {
31
+ $path = 'epi_url/url';
32
+
33
+ $this->store->resetConfig();
34
+ $this->store->setConfig($path, 'https://testgateway.com');
35
+ $this->assertTrue(is_string($this->config->getEpiUrl($this->store->getId())));
36
+ $this->assertEquals('https://testgateway.com', $this->config->getEpiUrl($this->store->getId()));
37
+ }
38
+
39
+ public function testGetConfigData()
40
+ {
41
+ $path = 'payment/' . 'expercashcc' . '/' . 'active';
42
+ $this->store->resetConfig();
43
+ $this->store->setConfig($path, true);
44
+ $this->assertTrue((bool)$this->config->getConfigData('active', 'expercashcc', 0));
45
+
46
+ $this->storeTwo->setConfig($path, false);
47
+ $this->assertEquals(false, $this->config->getConfigData('active', 'expercashcc', 1));
48
+ }
49
+
50
+ public function testGetPopupId()
51
+ {
52
+ $path = Expercash_Expercash_Model_Config::PAYMENT_SERVICE_PATH.'popup_id';
53
+ $this->store->resetConfig();
54
+ $this->store->setConfig($path, '11');
55
+ $this->assertEquals('11',$this->config->getPopupId(0));
56
+ $this->assertNotEquals('1',$this->config->getPopupId(0));
57
+
58
+ $this->storeTwo->setConfig($path, '15');
59
+ $this->assertEquals('15', $this->config->getPopupId(1));
60
+ $this->assertNotEquals('1',$this->config->getPopupId(0));
61
+ }
62
+
63
+ public function testGetProfilId()
64
+ {
65
+ $path = Expercash_Expercash_Model_Config::PAYMENT_SERVICE_PATH.'profil_id';
66
+ $this->store->resetConfig();
67
+ $this->store->setConfig($path, '11');
68
+ $this->assertEquals('11',$this->config->getProfilId(0));
69
+ $this->assertNotEquals('1',$this->config->getProfilId(0));
70
+
71
+ $this->storeTwo->setConfig($path, '15');
72
+ $this->assertEquals('15', $this->config->getProfilId(1));
73
+ $this->assertNotEquals('1',$this->config->getProfilId(1));
74
+ }
75
+
76
+ public function testGetAuthorizationkey()
77
+ {
78
+ $path = Expercash_Expercash_Model_Config::PAYMENT_SERVICE_PATH.'authorization_key';
79
+ $this->store->resetConfig();
80
+ $this->store->setConfig($path, '11');
81
+ $this->assertEquals('11',$this->config->getAuthorizationkey(0));
82
+ $this->assertNotEquals('1',$this->config->getAuthorizationkey(0));
83
+
84
+ $this->storeTwo->setConfig($path, '15');
85
+ $this->assertEquals('15', $this->config->getAuthorizationkey(1));
86
+ $this->assertNotEquals('1',$this->config->getAuthorizationkey(1));
87
+ }
88
+
89
+ public function testGetGatewayKey()
90
+ {
91
+ $path = Expercash_Expercash_Model_Config::PAYMENT_SERVICE_PATH.'gateway_key';
92
+ $this->store->resetConfig();
93
+ $this->store->setConfig($path, '11');
94
+ $this->assertEquals('11',$this->config->getGatewayKey(0));
95
+ $this->assertNotEquals('1',$this->config->getGatewayKey(0));
96
+
97
+ $this->storeTwo->setConfig($path, '15');
98
+ $this->assertEquals('15', $this->config->getGatewayKey(1));
99
+ $this->assertNotEquals('1',$this->config->getGatewayKey(1));
100
+ }
101
+
102
+ public function testGetProjectId()
103
+ {
104
+ $path = Expercash_Expercash_Model_Config::PAYMENT_SERVICE_PATH.'project_id';
105
+ $this->store->resetConfig();
106
+ $this->store->setConfig($path, '11');
107
+ $this->assertEquals('11',$this->config->getProjectId(0));
108
+ $this->assertNotEquals('1',$this->config->getProjectId(0));
109
+
110
+ $this->storeTwo->setConfig($path, '15');
111
+ $this->assertEquals('15', $this->config->getProjectId(1));
112
+ $this->assertNotEquals('1',$this->config->getProjectId(1));
113
+ }
114
+
115
+ public function testGetIframeCssClass()
116
+ {
117
+ $path = Expercash_Expercash_Model_Config::PAYMENT_SERVICE_PATH.'iframe_css_class';
118
+ $this->store->resetConfig();
119
+ $this->store->setConfig($path, 'example.css');
120
+ $this->assertEquals('example.css',$this->config->getIframeCssClass(0));
121
+ $this->assertNotEquals('1',$this->config->getIframeCssClass(0));
122
+
123
+ $this->storeTwo->setConfig($path, 'example2.css');
124
+ $this->assertEquals('example2.css', $this->config->getIframeCssClass(1));
125
+ $this->assertNotEquals('1',$this->config->getIframeCssClass(1));
126
+ }
127
+
128
+ public function testGetIframeWidth()
129
+ {
130
+ $path = Expercash_Expercash_Model_Config::PAYMENT_SERVICE_PATH.'iframe_width';
131
+ $this->store->resetConfig();
132
+ $this->store->setConfig($path, '500');
133
+ $this->assertEquals('500',$this->config->getIframeWidth(0));
134
+ $this->assertNotEquals('1',$this->config->getIframeWidth(0));
135
+
136
+ $this->storeTwo->setConfig($path, '300');
137
+ $this->assertEquals('300', $this->config->getIframeWidth(1));
138
+ $this->assertNotEquals('1',$this->config->getIframeWidth(1));
139
+ }
140
+
141
+
142
+ public function testGetIframeHeight()
143
+ {
144
+ $path = Expercash_Expercash_Model_Config::PAYMENT_SERVICE_PATH.'iframe_height';
145
+ $this->store->resetConfig();
146
+ $this->store->setConfig($path, '800');
147
+ $this->assertEquals('800',$this->config->getIframeHeight(0));
148
+ $this->assertNotEquals('1',$this->config->getIframeHeight(0));
149
+
150
+ $this->storeTwo->setConfig($path, '200');
151
+ $this->assertEquals('200', $this->config->getIframeHeight(1));
152
+ $this->assertNotEquals('1',$this->config->getIframeHeight(1));
153
+ }
154
+
155
+ public function testGetCssUrl()
156
+ {
157
+ $path = Expercash_Expercash_Model_Config::PAYMENT_SERVICE_PATH.'css_url';
158
+ $this->store->resetConfig();
159
+ $this->store->setConfig($path, 'www.test.de');
160
+ $this->assertEquals('www.test.de',$this->config->getCssUrl(0));
161
+ $this->assertNotEquals('1',$this->config->getCssUrl(0));
162
+
163
+ $this->storeTwo->setConfig($path, 'www.test2.de');
164
+ $this->assertEquals('www.test2.de', $this->config->getCssUrl(1));
165
+ $this->assertNotEquals('1',$this->config->getCssUrl(1));
166
+ }
167
+
168
+ public function testGetIframeTokenUrl()
169
+ {
170
+ $path = 'iframe_token_url/url';
171
+ $url = 'https://epi.expercash.net/iframe/post/v25/';
172
+ $this->store->resetConfig();
173
+ $this->store->setConfig($path,$url);
174
+ $this->assertEquals($url,$this->config->getIframeTokenUrl());
175
+ $this->assertNotEquals('https://www.google.de',$this->config->getIframeTokenUrl());
176
+ }
177
+
178
+ public function testGetIframeUrl()
179
+ {
180
+ $path = 'iframe_url/url';
181
+ $url = 'https://epi.expercash.net/epi_popup2.php';
182
+ $this->store->resetConfig();
183
+ $this->store->setConfig($path,$url);
184
+ $this->assertEquals($url,$this->config->getIframeUrl());
185
+ $this->assertNotEquals('https://www.google.de',$this->config->getIframeTokenUrl());
186
+ }
187
+ }
app/code/community/Expercash/Expercash/Test/Model/ExpercashTest.php ADDED
@@ -0,0 +1,361 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Expercash_Expercash_Test_Model_ExpercashTest extends EcomDev_PHPUnit_Test_Case_Controller
4
+ {
5
+ /**
6
+ * @var Mage_Core_Model_Store
7
+ */
8
+ protected $store;
9
+
10
+ public function setUp()
11
+ {
12
+ parent::setUp();
13
+ $this->store = Mage::app()->getStore(0)->load(0);
14
+ }
15
+
16
+ /**
17
+ * if token is emtpy then a Mage_Checkout_Exception is thrown
18
+ *
19
+ * @loadFixture ../../../var/fixtures/orders.yaml
20
+ *
21
+ * @expectedException Mage_Checkout_Exception
22
+ * @expectedExceptionMessage No Expercash token.
23
+ */
24
+ public function testAuthorizeGetTokenFailed()
25
+ {
26
+ $order = Mage::getModel('sales/order')->load(11);
27
+ $payment = $order->getPayment();
28
+ $amount = $order->getBaseGrandTotal();
29
+ $infoInstance = new Varien_Object();
30
+ $infoInstance->setOrder($order);
31
+
32
+ $requestMock = $this->getModelMock('expercash/request_token_iframe', array('getTokenParams'));
33
+ $requestMock->expects($this->once())
34
+ ->method('getTokenParams')
35
+ ->will($this->returnValue(array()));
36
+ $this->replaceByMock('model','expercash/request_token_iframe',$requestMock);
37
+
38
+ $tokenModelMock = $this->getModelMock('expercash/api_api', array('getIframeToken'));
39
+ $tokenModelMock->expects($this->once())
40
+ ->method('getIframeToken')
41
+ ->will($this->returnValue(null));
42
+ $this->replaceByMock('model','expercash/api_api',$tokenModelMock);
43
+
44
+ $paymentModelMock = $this->getModelMock('expercash/expercash', array('getInfoInstance', 'cancel'));
45
+ $paymentModelMock->expects($this->any())
46
+ ->method('getInfoInstance')
47
+ ->will($this->returnValue($infoInstance));
48
+ $paymentModelMock->expects($this->any())
49
+ ->method('cancel')
50
+ ->will($this->returnValue(null));
51
+ $this->replaceByMock('model', 'expercash/expercash', $paymentModelMock);
52
+ $paymentModelMock->authorize($payment, $amount);
53
+
54
+ }
55
+
56
+ /**
57
+ * @loadFixture ../../../var/fixtures/orders.yaml
58
+ *
59
+ * @expectedException Mage_Core_Exception
60
+ * @expectedExceptionMessage Please select another payment method!
61
+ */
62
+ public function testAuthorizeGetTokenParamsFailed()
63
+ {
64
+ $order = Mage::getModel('sales/order')->load(11);
65
+ $payment = $order->getPayment();
66
+ $amount = $order->getBaseGrandTotal();
67
+ $infoInstance = new Varien_Object();
68
+ $infoInstance->setOrder($order);
69
+
70
+ $requestMock = $this->getModelMock('expercash/request_token_iframe', array('getTokenParams'));
71
+ $requestMock->expects($this->any())
72
+ ->method('getTokenParams')
73
+ ->will($this->throwException(new Mage_Core_Exception('Please select another payment method!')));
74
+ $this->replaceByMock('model','expercash/request_token_iframe',$requestMock);
75
+
76
+
77
+ $paymentModelMock = $this->getModelMock('expercash/expercash', array('getInfoInstance', 'cancel'));
78
+ $paymentModelMock->expects($this->any())
79
+ ->method('getInfoInstance')
80
+ ->will($this->returnValue($infoInstance));
81
+ $paymentModelMock->expects($this->any())
82
+ ->method('cancel')
83
+ ->will($this->returnValue(null));
84
+ $this->replaceByMock('model', 'expercash/expercash', $paymentModelMock);
85
+ $paymentModelMock->authorize($payment, $amount);
86
+
87
+ }
88
+
89
+ /**
90
+ * @loadFixture ../../../var/fixtures/orders.yaml
91
+ *
92
+ */
93
+ public function testAuthorizeGetTokenParamsSuccess()
94
+ {
95
+ $order = Mage::getModel('sales/order')->load(11);
96
+ $payment = $order->getPayment();
97
+ $amount = $order->getBaseGrandTotal();
98
+ $infoInstance = new Varien_Object();
99
+ $infoInstance->setOrder($order);
100
+ $checkoutSession = new Varien_Object();
101
+
102
+ $tokenModelMock = $this->getModelMock('expercash/api_api', array('getIframeToken'));
103
+ $tokenModelMock->expects($this->once())
104
+ ->method('getIframeToken')
105
+ ->will($this->returnValue('foo'));
106
+ $this->replaceByMock('model','expercash/api_api',$tokenModelMock);
107
+
108
+ $paymentModelMock = $this->getModelMock('expercash/expercash', array(
109
+ 'getInfoInstance',
110
+ 'cancel',
111
+ 'getCheckoutSession'
112
+ )
113
+ );
114
+ $paymentModelMock->expects($this->any())
115
+ ->method('getInfoInstance')
116
+ ->will($this->returnValue($infoInstance));
117
+
118
+ $paymentModelMock->expects($this->any())
119
+ ->method('cancel')
120
+ ->will($this->returnValue(null));
121
+
122
+ $paymentModelMock->expects($this->any())
123
+ ->method('getCheckoutSession')
124
+ ->will($this->returnValue($checkoutSession));
125
+
126
+ $this->replaceByMock('model', 'expercash/expercash', $paymentModelMock);
127
+ $paymentModelMock->authorize($payment, $amount);
128
+ $this->assertEquals('foo', $checkoutSession->getData(Expercash_Expercash_Model_Config::TOKEN_REGISTRY_KEY));
129
+
130
+ }
131
+
132
+ /**
133
+ * @test
134
+ * test for getOrderPlaceRedirectUrl
135
+ */
136
+ public function testGetOrderPlaceRedirectUrl()
137
+ {
138
+ $url = Mage::getUrl('expercash/expercash/reset');
139
+ $this->assertEquals(
140
+ $url, Mage::getModel('expercash/expercash')->getOrderPlaceRedirectUrl()
141
+ );
142
+ $this->assertNotEquals(
143
+ 'foo', Mage::getModel('expercash/expercash')->getOrderPlaceRedirectUrl()
144
+ );
145
+ }
146
+
147
+ /**
148
+ * @loadFixture ../../../var/fixtures/orders.yaml
149
+ */
150
+ public function testSetAdditionalPaymentInfo()
151
+ {
152
+ //load order with fixture
153
+ $order = Mage::getModel('sales/order')->load(11);
154
+
155
+ // array to be returned by helper mock
156
+ $paymentParams = array(
157
+ 'owner',
158
+ 'maskedPan',
159
+ 'cardScheme',
160
+ 'validThru',
161
+ 'panCountry',
162
+ 'ipCountry',
163
+ 'attemptsTotal',
164
+ 'attemptsSameAction',
165
+ '3dsStatus'
166
+ );
167
+
168
+ // create a array with response params
169
+ $responseParams = array(
170
+ 'owner' => 'Max Muster',
171
+ 'maskedPan' => 'xxxx.xxxx.xxxx.1234',
172
+ 'cardScheme' => 'VISA',
173
+ 'validThru' => '201905',
174
+ 'panCountry' => 'Germany',
175
+ 'ipCountry' => 'Belgien',
176
+ 'attemptsTotal' => '3',
177
+ 'attemptsSameAction' => '2',
178
+ '3dsStatus' => '2'
179
+ );
180
+
181
+ // mock helper function getAdditionalPaymentParams
182
+ $helperMock = $this->getHelperMock('expercash/data', array(
183
+ 'getAdditionalPaymentParams',
184
+ )
185
+ );
186
+
187
+ $helperMock->expects($this->once())
188
+ ->method('getAdditionalPaymentParams')
189
+ ->will($this->returnValue($paymentParams));
190
+ $this->replaceByMock('helper', 'expercash/data', $helperMock);
191
+
192
+ Mage::getModel('expercash/Expercash')->setAdditionalPaymentInfo($order->getPayment(), $responseParams);
193
+
194
+ // assertion that there is a array returned
195
+ $this->assertTrue(is_array($order->getPayment()->getAdditionalInformation()));
196
+
197
+ // assertion that each response param exist as key in the returned array
198
+ foreach ($paymentParams as $key) {
199
+ $this->assertTrue(array_key_exists($key, $order->getPayment()->getAdditionalInformation()));
200
+ }
201
+
202
+ // assertions that the values we permitted are the same that get returned
203
+ $this->assertEquals('Max Muster',$order->getPayment()->getAdditionalInformation('owner'));
204
+ $this->assertEquals('xxxx.xxxx.xxxx.1234',$order->getPayment()->getAdditionalInformation('maskedPan'));
205
+ $this->assertEquals('VISA',$order->getPayment()->getAdditionalInformation('cardScheme'));
206
+ $this->assertEquals('201905',$order->getPayment()->getAdditionalInformation('validThru'));
207
+ $this->assertEquals('Germany',$order->getPayment()->getAdditionalInformation('panCountry'));
208
+ $this->assertEquals('Belgien',$order->getPayment()->getAdditionalInformation('ipCountry'));
209
+ $this->assertEquals('3',$order->getPayment()->getAdditionalInformation('attemptsTotal'));
210
+ $this->assertEquals('2',$order->getPayment()->getAdditionalInformation('attemptsSameAction'));
211
+ $this->assertEquals('2',$order->getPayment()->getAdditionalInformation('3dsStatus'));
212
+
213
+ }
214
+
215
+
216
+ /**
217
+ * @loadFixture ../../../var/fixtures/orders.yaml
218
+ */
219
+ public function testSetAdditionalPaymentInfoMissingResponseParam()
220
+ {
221
+ //load order with fixture
222
+ $order = Mage::getModel('sales/order')->load(11);
223
+
224
+ // array to be returned by helper mock
225
+ $paymentParams = array(
226
+ 'owner',
227
+ 'maskedPan',
228
+ 'cardScheme',
229
+ 'validThru',
230
+ 'panCountry',
231
+ 'ipCountry',
232
+ 'attemptsTotal',
233
+ 'attemptsSameAction',
234
+ '3dsStatus'
235
+ );
236
+
237
+ // create a array with response params without cardScheme
238
+ $responseParams = array(
239
+ 'owner' => 'Max Muster',
240
+ 'maskedPan' => 'xxxx.xxxx.xxxx.1234',
241
+ 'validThru' => '201905',
242
+ 'panCountry' => 'Germany',
243
+ 'ipCountry' => 'Belgien',
244
+ 'attemptsTotal' => '3',
245
+ 'attemptsSameAction' => '2',
246
+ '3dsStatus' => '2'
247
+ );
248
+
249
+ // mock helper function getAdditionalPaymentParams
250
+ $helperMock = $this->getHelperMock('expercash/data', array(
251
+ 'getAdditionalPaymentParams',
252
+ )
253
+ );
254
+
255
+ $helperMock->expects($this->once())
256
+ ->method('getAdditionalPaymentParams')
257
+ ->will($this->returnValue($paymentParams));
258
+ $this->replaceByMock('helper', 'expercash/data', $helperMock);
259
+
260
+ Mage::getModel('expercash/Expercash')->setAdditionalPaymentInfo($order->getPayment(), $responseParams);
261
+
262
+ // cardScheme is missing from responseParams
263
+ $this->assertFalse(array_key_exists('cardScheme', $order->getPayment()->getAdditionalInformation()));
264
+
265
+ // assertions that the values we permitted are the same that get returned
266
+ $this->assertEquals('Max Muster',$order->getPayment()->getAdditionalInformation('owner'));
267
+ $this->assertEquals('xxxx.xxxx.xxxx.1234',$order->getPayment()->getAdditionalInformation('maskedPan'));
268
+ $this->assertEquals('201905',$order->getPayment()->getAdditionalInformation('validThru'));
269
+ $this->assertEquals('Germany',$order->getPayment()->getAdditionalInformation('panCountry'));
270
+ $this->assertEquals('Belgien',$order->getPayment()->getAdditionalInformation('ipCountry'));
271
+ $this->assertEquals('3',$order->getPayment()->getAdditionalInformation('attemptsTotal'));
272
+ $this->assertEquals('2',$order->getPayment()->getAdditionalInformation('attemptsSameAction'));
273
+ $this->assertEquals('2',$order->getPayment()->getAdditionalInformation('3dsStatus'));
274
+ }
275
+
276
+ /**
277
+ * @loadFixture ../../../var/fixtures/orders.yaml
278
+ */
279
+ public function testSetAdditionalPaymentInfoMissingResponseParams()
280
+ {
281
+ //load order with fixture
282
+ $order = Mage::getModel('sales/order')->load(11);
283
+
284
+ // array to be returned by helper mock
285
+ $paymentParams = array(
286
+ 'owner',
287
+ 'maskedPan',
288
+ 'cardScheme',
289
+ 'validThru',
290
+ 'panCountry',
291
+ 'ipCountry',
292
+ 'attemptsTotal',
293
+ 'attemptsSameAction',
294
+ '3dsStatus'
295
+ );
296
+
297
+ // create a empty array for response
298
+ $responseParams = array();
299
+
300
+ // mock helper function getAdditionalPaymentParams
301
+ $helperMock = $this->getHelperMock('expercash/data', array(
302
+ 'getAdditionalPaymentParams',
303
+ )
304
+ );
305
+
306
+ $helperMock->expects($this->once())
307
+ ->method('getAdditionalPaymentParams')
308
+ ->will($this->returnValue($paymentParams));
309
+ $this->replaceByMock('helper', 'expercash/data', $helperMock);
310
+
311
+ Mage::getModel('expercash/Expercash')->setAdditionalPaymentInfo($order->getPayment(), $responseParams);
312
+
313
+ //assertion that there is a array returned
314
+ $this->assertTrue(is_array($order->getPayment()->getAdditionalInformation()));
315
+
316
+ //assertion that the size of array is 0, since there where no response params
317
+ $this->assertTrue(0 === sizeof($order->getPayment()->getAdditionalInformation()));
318
+ }
319
+
320
+
321
+ public function testRefund()
322
+ {
323
+ $payment = new Varien_Object();
324
+ $amount = 19.90;
325
+ Mage::getModel('expercash/expercash')->refund($payment, $amount);
326
+
327
+ $this->assertEquals('Error in refunding the payment',$payment->getStatusDescription());
328
+
329
+ }
330
+
331
+ public function testCalcCentAmount()
332
+ {
333
+ $amount = 33.30;
334
+ $centAmount = $this->invokeMethod('calcCentAmount', array($amount));
335
+ $this->assertEquals(3330, $centAmount);
336
+ }
337
+
338
+ /**
339
+ * Call protected/private method of a class.
340
+ *
341
+ * @param object $object Instantiated object that we will run method on.
342
+ * @param string $methodName Method name to call
343
+ * @param array $parameters Array of parameters to pass into method.
344
+ *
345
+ * @return mixed Method return.
346
+ */
347
+ public function invokeMethod($methodName, array $parameters = array())
348
+ {
349
+ $object = Mage::getModel('expercash/expercash');
350
+ $reflection = new \ReflectionClass(get_class($object));
351
+ $method = $reflection->getMethod($methodName);
352
+ $method->setAccessible(true);
353
+ return $method->invokeArgs($object, $parameters);
354
+ }
355
+
356
+ public function testGetCheckoutSession()
357
+ {
358
+ $checkoutSession = $this->invokeMethod('getCheckoutSession');
359
+ $this->assertTrue($checkoutSession instanceof Mage_Checkout_Model_Session);
360
+ }
361
+ }
app/code/community/Expercash/Expercash/Test/Model/ExpercashTest/fixtures/.gitkeep ADDED
File without changes
app/code/community/Expercash/Expercash/Test/Model/ExpercashccTest.php ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Expercash_Expercash_Test_Model_ExpercashccTest extends EcomDev_PHPUnit_Test_Case_Controller
4
+ {
5
+ /**
6
+ * @var Mage_Core_Model_Store
7
+ */
8
+ protected $store;
9
+
10
+ public function setUp()
11
+ {
12
+ parent::setUp();
13
+ $this->store = Mage::app()->getStore(0)->load(0);
14
+ }
15
+
16
+ public function testExpercashccCodeProperty()
17
+ {
18
+ $expercashcc = Mage::getModel('expercash/expercashcc');
19
+ $this->assertEquals('expercashcc', $expercashcc->getCode());
20
+ $this->assertNotEquals('expercash', $expercashcc->getCode());
21
+ }
22
+
23
+ public function testExpercashIsGatewayProperty()
24
+ {
25
+ $expercashcc = Mage::getModel('expercash/expercashcc');
26
+ $this->assertEquals(false, $expercashcc->isGateway());
27
+ $this->assertNotEquals(true, $expercashcc->isGateway());
28
+ }
29
+
30
+ public function testExpercashCanAuthorizeProperty()
31
+ {
32
+ $expercashcc = Mage::getModel('expercash/expercashcc');
33
+ $this->assertEquals(true, $expercashcc->canAuthorize());
34
+ $this->assertNotEquals(false, $expercashcc->canAuthorize());
35
+ }
36
+
37
+ public function testExpercashCanCapturePartialProperty()
38
+ {
39
+ $expercashcc = Mage::getModel('expercash/expercashcc');
40
+ $this->assertEquals(true, $expercashcc->canCapturePartial());
41
+ $this->assertNotEquals(false, $expercashcc->canCapturePartial());
42
+ }
43
+
44
+ public function testExpercashCanRefundProperty()
45
+ {
46
+ $expercashcc = Mage::getModel('expercash/expercashcc');
47
+ $this->assertEquals(false, $expercashcc->canRefund());
48
+ $this->assertNotEquals(true, $expercashcc->canRefund());
49
+ }
50
+
51
+ public function testExpercashVoidProperty()
52
+ {
53
+ $expercashcc = Mage::getModel('expercash/expercashcc');
54
+ $payment = new Varien_Object();
55
+ $this->assertEquals(false, $expercashcc->canVoid($payment));
56
+ $this->assertNotEquals(true, $expercashcc->canVoid($payment));
57
+ }
58
+
59
+ public function testExpercashUseInternalProperty()
60
+ {
61
+ $expercashcc = Mage::getModel('expercash/expercashcc');
62
+ $this->assertEquals(false, $expercashcc->canUseInternal());
63
+ $this->assertNotEquals(true, $expercashcc->canUseInternal());
64
+ }
65
+
66
+ public function testExpercashUseCheckoutProperty()
67
+ {
68
+ $expercashcc = Mage::getModel('expercash/expercashcc');
69
+ $this->assertEquals(true, $expercashcc->canUseCheckout());
70
+ $this->assertNotEquals(false, $expercashcc->canUseCheckout());
71
+ }
72
+
73
+ public function testExpercashUseMultishippingProperty()
74
+ {
75
+ $expercashcc = Mage::getModel('expercash/expercashcc');
76
+ $this->assertEquals(false, $expercashcc->canUseForMultishipping());
77
+ $this->assertNotEquals(true, $expercashcc->canUseForMultishipping());
78
+ }
79
+
80
+ /**
81
+ * Test for canCapture in authorization mode
82
+ */
83
+ public function testCanCaptureAuthorize()
84
+ {
85
+ $expercashccMock = $this->getModelMock('expercash/expercashcc', array(
86
+ 'getExperCashInfo'
87
+ )
88
+ );
89
+ $expercashccMock->expects($this->once())
90
+ ->method('getExperCashInfo')
91
+ ->with($this->equalTo('expercash_request_type'))
92
+ ->will($this->returnValue('cc_authorize'));
93
+
94
+ $this->assertTrue($expercashccMock->canCapture());
95
+ }
96
+
97
+ /**
98
+ * Test for canCapture in direct sale mode
99
+ */
100
+ public function testCanCaptureCCBuy()
101
+ {
102
+ $expercashccMock = $this->getModelMock('expercash/expercashcc', array(
103
+ 'getExperCashInfo'
104
+ )
105
+ );
106
+
107
+ $expercashccMock->expects($this->once())
108
+ ->method('getExperCashInfo')
109
+ ->with($this->equalTo('expercash_request_type'))
110
+ ->will($this->returnValue('cc_buy'));
111
+
112
+ $this->assertFalse($expercashccMock->canCapture());
113
+ }
114
+
115
+ public function testIsDirectSaleEnabled()
116
+ {
117
+ $expercashccMock = $this->getModelMock('expercash/expercashcc', array(
118
+ 'getConfigData'
119
+ )
120
+ );
121
+
122
+ $expercashccMock->expects($this->any())
123
+ ->method('getConfigData')
124
+ ->will($this->returnValue(Expercash_Expercash_Model_Expercashcc::PAYMENT_TYPE_CC_BUY));
125
+
126
+ $this->assertTrue($expercashccMock->isDirectSaleEnabled());
127
+
128
+ $expercashccMock = $this->getModelMock('expercash/expercashcc', array(
129
+ 'getConfigData'
130
+ )
131
+ );
132
+
133
+ $expercashccMock->expects($this->any())
134
+ ->method('getConfigData')
135
+ ->will($this->returnValue(Expercash_Expercash_Model_Expercashcc::PAYMENT_TYPE_CC_AUTH));
136
+
137
+ $this->assertFalse($expercashccMock->isDirectSaleEnabled());
138
+ }
139
+
140
+
141
+ }
app/code/community/Expercash/Expercash/Test/Model/ExpercashccTest/fixtures/.gitkeep ADDED
File without changes
app/code/community/Expercash/Expercash/Test/Model/ExpercashelvTest.php ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Expercash_Expercash_Test_Model_ExpercashelvTest extends EcomDev_PHPUnit_Test_Case
4
+ {
5
+ /**
6
+ * @var Mage_Core_Model_Store
7
+ */
8
+ protected $store;
9
+
10
+ public function setUp()
11
+ {
12
+ parent::setUp();
13
+ $this->store = Mage::app()->getStore(0)->load(0);
14
+ }
15
+
16
+ public function testExpercashelvCodeProperty()
17
+ {
18
+ $expercashelv = Mage::getModel('expercash/expercashelv');
19
+ $this->assertEquals('expercashelv', $expercashelv->getCode());
20
+ $this->assertNotEquals('expercash', $expercashelv->getCode());
21
+ }
22
+
23
+ public function testExpercashIsGatewayProperty()
24
+ {
25
+ $expercashelv = Mage::getModel('expercash/expercashelv');
26
+ $this->assertEquals(true, $expercashelv->isGateway());
27
+ $this->assertNotEquals(false, $expercashelv->isGateway());
28
+ }
29
+
30
+ public function testExpercashCanAuthorizeProperty()
31
+ {
32
+ $expercashelv = Mage::getModel('expercash/expercashelv');
33
+ $this->assertEquals(true, $expercashelv->canAuthorize());
34
+ $this->assertNotEquals(false, $expercashelv->canAuthorize());
35
+ }
36
+
37
+ public function testExpercashCanCapturePartialProperty()
38
+ {
39
+ $expercashelv = Mage::getModel('expercash/expercashelv');
40
+ $this->assertEquals(false, $expercashelv->canCapturePartial());
41
+ $this->assertNotEquals(true, $expercashelv->canCapturePartial());
42
+ }
43
+
44
+ public function testExpercashCanRefundProperty()
45
+ {
46
+ $expercashelv = Mage::getModel('expercash/expercashelv');
47
+ $this->assertEquals(false, $expercashelv->canRefund());
48
+ $this->assertNotEquals(true, $expercashelv->canRefund());
49
+ }
50
+
51
+ public function testExpercashVoidProperty()
52
+ {
53
+ $expercashelv = Mage::getModel('expercash/expercashelv');
54
+ $payment = new Varien_Object();
55
+ $this->assertEquals(false, $expercashelv->canVoid($payment));
56
+ $this->assertNotEquals(true, $expercashelv->canVoid($payment));
57
+ }
58
+
59
+ public function testExpercashUseInternalProperty()
60
+ {
61
+ $expercashelv = Mage::getModel('expercash/expercashelv');
62
+ $this->assertEquals(false, $expercashelv->canUseInternal());
63
+ $this->assertNotEquals(true, $expercashelv->canUseInternal());
64
+ }
65
+
66
+ public function testExpercashUseCheckoutProperty()
67
+ {
68
+ $expercashelv = Mage::getModel('expercash/expercashelv');
69
+ $this->assertEquals(true, $expercashelv->canUseCheckout());
70
+ $this->assertNotEquals(false, $expercashelv->canUseCheckout());
71
+ }
72
+
73
+ public function testExpercashUseMultishippingProperty()
74
+ {
75
+ $expercashelv = Mage::getModel('expercash/expercashelv');
76
+ $this->assertEquals(false, $expercashelv->canUseForMultishipping());
77
+ $this->assertNotEquals(true, $expercashelv->canUseForMultishipping());
78
+ }
79
+
80
+ /**
81
+ * Test for canCapture in authorization mode
82
+ */
83
+ public function testCanCaptureElvAuthorize()
84
+ {
85
+ $expercashccMock = $this->getModelMock('expercash/expercashelv', array(
86
+ 'getExperCashInfo'
87
+ )
88
+ );
89
+ $expercashccMock->expects($this->once())
90
+ ->method('getExperCashInfo')
91
+ ->with($this->equalTo('expercash_request_type'))
92
+ ->will($this->returnValue('elv_authorize'));
93
+
94
+ $this->assertTrue($expercashccMock->canCapture());
95
+ }
96
+
97
+ /**
98
+ * Test for canCapture in direct sale mode
99
+ */
100
+ public function testCanCaptureElvBuy()
101
+ {
102
+ $expercashelvMock = $this->getModelMock('expercash/expercashelv', array(
103
+ 'getExperCashInfo'
104
+ )
105
+ );
106
+
107
+ $expercashelvMock->expects($this->once())
108
+ ->method('getExperCashInfo')
109
+ ->with($this->equalTo('expercash_request_type'))
110
+ ->will($this->returnValue('elv_buy'));
111
+
112
+ $this->assertFalse($expercashelvMock->canCapture());
113
+ }
114
+
115
+ public function testIsDirectSaleEnabled()
116
+ {
117
+ $expercashelvMock = $this->getModelMock('expercash/expercashelv', array(
118
+ 'getConfigData'
119
+ )
120
+ );
121
+
122
+ $expercashelvMock->expects($this->any())
123
+ ->method('getConfigData')
124
+ ->will($this->returnValue(Expercash_Expercash_Model_Expercashelv::PAYMENT_TYPE_ELV_BUY));
125
+
126
+ $this->assertTrue($expercashelvMock->isDirectSaleEnabled());
127
+
128
+ $expercashelvMock = $this->getModelMock('expercash/expercashelv', array(
129
+ 'getConfigData'
130
+ )
131
+ );
132
+
133
+ $expercashelvMock->expects($this->any())
134
+ ->method('getConfigData')
135
+ ->will($this->returnValue(Expercash_Expercash_Model_Expercashelv::PAYMENT_TYPE_ELV_AUTH));
136
+
137
+ $this->assertFalse($expercashelvMock->isDirectSaleEnabled());
138
+
139
+
140
+
141
+
142
+ }
143
+ }
app/code/community/Expercash/Expercash/Test/Model/ExpercashelvTest/fixtures/.gitkeep ADDED
File without changes
app/code/community/Expercash/Expercash/Test/Model/ExpercashgpTest.php ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Expercash_Expercash_Test_Model_ExpercashgpTest extends EcomDev_PHPUnit_Test_Case_Controller
4
+ {
5
+ /**
6
+ * @var Mage_Core_Model_Store
7
+ */
8
+ protected $store;
9
+
10
+ public function setUp()
11
+ {
12
+ parent::setUp();
13
+ $this->store = Mage::app()->getStore(0)->load(0);
14
+ }
15
+
16
+ public function testExpercashccCodeProperty()
17
+ {
18
+ $expercashgp = Mage::getModel('expercash/expercashgp');
19
+ $this->assertEquals('expercashgp', $expercashgp->getCode());
20
+ $this->assertNotEquals('expercash', $expercashgp->getCode());
21
+ }
22
+
23
+ public function testExpercashIsGatewayProperty()
24
+ {
25
+ $expercashgp = Mage::getModel('expercash/expercashgp');
26
+ $this->assertEquals(false, $expercashgp->isGateway());
27
+ $this->assertNotEquals(true, $expercashgp->isGateway());
28
+ }
29
+
30
+ public function testExpercashCanAuthorizeProperty()
31
+ {
32
+ $expercashgp = Mage::getModel('expercash/expercashgp');
33
+ $this->assertEquals(true, $expercashgp->canAuthorize());
34
+ $this->assertNotEquals(false, $expercashgp->canAuthorize());
35
+ }
36
+
37
+ public function testExpercashCanCaptureProperty()
38
+ {
39
+ $expercashgp = Mage::getModel('expercash/expercashgp');
40
+ $this->assertFalse($expercashgp->canCapture());
41
+ $this->assertNotEquals(true, $expercashgp->canCapture());
42
+
43
+ }
44
+
45
+ public function testExpercashCanCapturePartialProperty()
46
+ {
47
+ $expercashgp = Mage::getModel('expercash/expercashgp');
48
+ $this->assertEquals(false, $expercashgp->canCapturePartial());
49
+ $this->assertNotEquals(true, $expercashgp->canCapturePartial());
50
+ }
51
+
52
+ public function testExpercashCanRefundProperty()
53
+ {
54
+ $expercashgp = Mage::getModel('expercash/expercashgp');
55
+ $this->assertEquals(false, $expercashgp->canRefund());
56
+ $this->assertNotEquals(true, $expercashgp->canRefund());
57
+ }
58
+
59
+ public function testExpercashVoidProperty()
60
+ {
61
+ $expercashgp = Mage::getModel('expercash/expercashgp');
62
+ $payment = new Varien_Object();
63
+ $this->assertEquals(false, $expercashgp->canVoid($payment));
64
+ $this->assertNotEquals(true, $expercashgp->canVoid($payment));
65
+ }
66
+
67
+ public function testExpercashUseInternalProperty()
68
+ {
69
+ $expercashgp = Mage::getModel('expercash/expercashgp');
70
+ $this->assertEquals(false, $expercashgp->canUseInternal());
71
+ $this->assertNotEquals(true, $expercashgp->canUseInternal());
72
+ }
73
+
74
+ public function testExpercashUseCheckoutProperty()
75
+ {
76
+ $expercashgp = Mage::getModel('expercash/expercashgp');
77
+ $this->assertEquals(true, $expercashgp->canUseCheckout());
78
+ $this->assertNotEquals(false, $expercashgp->canUseCheckout());
79
+ }
80
+
81
+ public function testExpercashUseMultishippingProperty()
82
+ {
83
+ $expercashgp = Mage::getModel('expercash/expercashgp');
84
+ $this->assertEquals(false, $expercashgp->canUseForMultishipping());
85
+ $this->assertNotEquals(true, $expercashgp->canUseForMultishipping());
86
+ }
87
+
88
+ public function testExpercashGpDirectSaleEnabled()
89
+ {
90
+ $this->assertFalse(Mage::getModel('expercash/expercashgp')->isDirectSaleEnabled());
91
+
92
+ $expercashgpMock = $this->getModelMock('expercash/expercashgp', array(
93
+ 'getConfigData'
94
+ )
95
+ );
96
+
97
+ $expercashgpMock->expects($this->any())
98
+ ->method('getConfigData')
99
+ ->will($this->returnValue(Expercash_Expercash_Model_Expercashgp::PAYMENT_TYPE_GP));
100
+ $this->assertTrue($expercashgpMock->isDirectSaleEnabled());
101
+ }
102
+ }
app/code/community/Expercash/Expercash/Test/Model/ExpercashgpTest/fixtures/.gitkeep ADDED
File without changes
app/code/community/Expercash/Expercash/Test/Model/ExpercashmpTest.php ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Expercash_Expercash_Test_Model_ExpercashmpTest extends EcomDev_PHPUnit_Test_Case_Controller
4
+ {
5
+ /**
6
+ * @var Mage_Core_Model_Store
7
+ */
8
+ protected $store;
9
+
10
+ public function setUp()
11
+ {
12
+ parent::setUp();
13
+ $this->store = Mage::app()->getStore(0)->load(0);
14
+ }
15
+
16
+ public function testExpercashccCodeProperty()
17
+ {
18
+ $expercashmpf = Mage::getModel('expercash/expercashmp');
19
+ $this->assertEquals('expercashmp', $expercashmpf->getCode());
20
+ $this->assertNotEquals('expercash', $expercashmpf->getCode());
21
+ }
22
+
23
+ public function testExpercashIsGatewayProperty()
24
+ {
25
+ $expercashmpf = Mage::getModel('expercash/expercashmp');
26
+ $this->assertEquals(false, $expercashmpf->isGateway());
27
+ $this->assertNotEquals(true, $expercashmpf->isGateway());
28
+ }
29
+
30
+ public function testExpercashCanAuthorizeProperty()
31
+ {
32
+ $expercashmpf = Mage::getModel('expercash/expercashmp');
33
+ $this->assertEquals(true, $expercashmpf->canAuthorize());
34
+ $this->assertNotEquals(false, $expercashmpf->canAuthorize());
35
+ }
36
+
37
+ public function testExpercashCanCapturePartialProperty()
38
+ {
39
+ $expercashmpf = Mage::getModel('expercash/expercashmp');
40
+ $this->assertEquals(true, $expercashmpf->canCapturePartial());
41
+ $this->assertNotEquals(false, $expercashmpf->canCapturePartial());
42
+ }
43
+
44
+ public function testExpercashCanRefundProperty()
45
+ {
46
+ $expercashmpf = Mage::getModel('expercash/expercashmp');
47
+ $this->assertEquals(false, $expercashmpf->canRefund());
48
+ $this->assertNotEquals(true, $expercashmpf->canRefund());
49
+ }
50
+
51
+ public function testExpercashVoidProperty()
52
+ {
53
+ $expercashmpf = Mage::getModel('expercash/expercashmp');
54
+ $payment = new Varien_Object();
55
+ $this->assertEquals(false, $expercashmpf->canVoid($payment));
56
+ $this->assertNotEquals(true, $expercashmpf->canVoid($payment));
57
+ }
58
+
59
+ public function testExpercashUseInternalProperty()
60
+ {
61
+ $expercashmpf = Mage::getModel('expercash/expercashmp');
62
+ $this->assertEquals(false, $expercashmpf->canUseInternal());
63
+ $this->assertNotEquals(true, $expercashmpf->canUseInternal());
64
+ }
65
+
66
+ public function testExpercashUseCheckoutProperty()
67
+ {
68
+ $expercashmpf = Mage::getModel('expercash/expercashmp');
69
+ $this->assertEquals(true, $expercashmpf->canUseCheckout());
70
+ $this->assertNotEquals(false, $expercashmpf->canUseCheckout());
71
+ }
72
+
73
+ public function testExpercashUseMultishippingProperty()
74
+ {
75
+ $expercashmpf = Mage::getModel('expercash/expercashmp');
76
+ $this->assertEquals(false, $expercashmpf->canUseForMultishipping());
77
+ $this->assertNotEquals(true, $expercashmpf->canUseForMultishipping());
78
+ }
79
+
80
+ /**
81
+ * Test for canCapture in authorization mode
82
+ */
83
+ public function testCanCaptureAuthorize()
84
+ {
85
+ $expercashmpfMock = $this->getModelMock('expercash/expercashmp', array(
86
+ 'getExperCashInfo'
87
+ )
88
+ );
89
+ $expercashmpfMock->expects($this->once())
90
+ ->method('getExperCashInfo')
91
+ ->with($this->equalTo('expercash_request_type'))
92
+ ->will($this->returnValue('masterpass_authorize'));
93
+
94
+ $this->assertTrue($expercashmpfMock->canCapture());
95
+ }
96
+
97
+ /**
98
+ * Test for canCapture in direct sale mode
99
+ */
100
+ public function testCanCaptureMpBuy()
101
+ {
102
+ $expercashmpfMock = $this->getModelMock('expercash/expercashmp', array(
103
+ 'getExperCashInfo'
104
+ )
105
+ );
106
+
107
+ $expercashmpfMock->expects($this->once())
108
+ ->method('getExperCashInfo')
109
+ ->with($this->equalTo('expercash_request_type'))
110
+ ->will($this->returnValue('masterpass_buy'));
111
+
112
+ $this->assertFalse($expercashmpfMock->canCapture());
113
+ }
114
+
115
+ public function testIsDirectSaleEnabled()
116
+ {
117
+ $expercashmpfMock = $this->getModelMock('expercash/expercashmp', array(
118
+ 'getConfigData'
119
+ )
120
+ );
121
+
122
+ $expercashmpfMock->expects($this->any())
123
+ ->method('getConfigData')
124
+ ->will($this->returnValue(Expercash_Expercash_Model_Expercashmp::PAYMENT_TYPE_MP_BUY));
125
+
126
+ $this->assertTrue($expercashmpfMock->isDirectSaleEnabled());
127
+
128
+ $expercashmpfMock = $this->getModelMock('expercash/expercashmp', array(
129
+ 'getConfigData'
130
+ )
131
+ );
132
+
133
+ $expercashmpfMock->expects($this->any())
134
+ ->method('getConfigData')
135
+ ->will($this->returnValue(Expercash_Expercash_Model_Expercashmp::PAYMENT_TYPE_MP_AUTH));
136
+
137
+ $this->assertFalse($expercashmpfMock->isDirectSaleEnabled());
138
+ }
139
+
140
+
141
+ }
app/code/community/Expercash/Expercash/Test/Model/ExpercashmpfTest.php ADDED
@@ -0,0 +1,204 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Expercash_Expercash_Test_Model_ExpercashmpfTest extends EcomDev_PHPUnit_Test_Case_Controller
4
+ {
5
+ /**
6
+ * @var Mage_Core_Model_Store
7
+ */
8
+ protected $store;
9
+
10
+ public function setUp()
11
+ {
12
+ parent::setUp();
13
+ $this->config = Mage::getModel('expercash/config');
14
+ $this->store = Mage::app()->getStore(0)->load(1);
15
+ }
16
+
17
+ public function testExpercashccCodeProperty()
18
+ {
19
+ $expercashmpf = Mage::getModel('expercash/expercashmpf');
20
+ $this->assertEquals('expercashmpf', $expercashmpf->getCode());
21
+ $this->assertNotEquals('expercash', $expercashmpf->getCode());
22
+ }
23
+
24
+ public function testExpercashIsGatewayProperty()
25
+ {
26
+ $expercashmpf = Mage::getModel('expercash/expercashmpf');
27
+ $this->assertEquals(false, $expercashmpf->isGateway());
28
+ $this->assertNotEquals(true, $expercashmpf->isGateway());
29
+ }
30
+
31
+ public function testExpercashCanAuthorizeProperty()
32
+ {
33
+ $expercashmpf = Mage::getModel('expercash/expercashmpf');
34
+ $this->assertEquals(true, $expercashmpf->canAuthorize());
35
+ $this->assertNotEquals(false, $expercashmpf->canAuthorize());
36
+ }
37
+
38
+ public function testExpercashCanCapturePartialProperty()
39
+ {
40
+ $expercashmpf = Mage::getModel('expercash/expercashmpf');
41
+ $this->assertEquals(true, $expercashmpf->canCapturePartial());
42
+ $this->assertNotEquals(false, $expercashmpf->canCapturePartial());
43
+ }
44
+
45
+ public function testExpercashCanRefundProperty()
46
+ {
47
+ $expercashmpf = Mage::getModel('expercash/expercashmpf');
48
+ $this->assertEquals(false, $expercashmpf->canRefund());
49
+ $this->assertNotEquals(true, $expercashmpf->canRefund());
50
+ }
51
+
52
+ public function testExpercashVoidProperty()
53
+ {
54
+ $expercashmpf = Mage::getModel('expercash/expercashmpf');
55
+ $payment = new Varien_Object();
56
+ $this->assertEquals(false, $expercashmpf->canVoid($payment));
57
+ $this->assertNotEquals(true, $expercashmpf->canVoid($payment));
58
+ }
59
+
60
+ public function testExpercashUseInternalProperty()
61
+ {
62
+ $expercashmpf = Mage::getModel('expercash/expercashmpf');
63
+ $this->assertEquals(false, $expercashmpf->canUseInternal());
64
+ $this->assertNotEquals(true, $expercashmpf->canUseInternal());
65
+ }
66
+
67
+ public function testExpercashUseCheckoutProperty()
68
+ {
69
+ $expercashmpf = Mage::getModel('expercash/expercashmpf');
70
+ $this->assertEquals(true, $expercashmpf->canUseCheckout());
71
+ $this->assertNotEquals(false, $expercashmpf->canUseCheckout());
72
+ }
73
+
74
+ public function testExpercashUseMultishippingProperty()
75
+ {
76
+ $expercashmpf = Mage::getModel('expercash/expercashmpf');
77
+ $this->assertEquals(false, $expercashmpf->canUseForMultishipping());
78
+ $this->assertNotEquals(true, $expercashmpf->canUseForMultishipping());
79
+ }
80
+
81
+ /**
82
+ * Test for canCapture in authorization mode
83
+ */
84
+ public function testCanCaptureAuthorize()
85
+ {
86
+ $expercashmpfMock = $this->getModelMock('expercash/expercashmpf', array(
87
+ 'getExperCashInfo'
88
+ ));
89
+
90
+ $expercashmpfMock->expects($this->any())
91
+ ->method('getExperCashInfo')
92
+ ->with($this->equalTo('expercash_request_type'))
93
+ ->will($this->returnValue('masterpass_authorize'));
94
+
95
+ $this->assertTrue($expercashmpfMock->canCapture());
96
+ }
97
+
98
+ /**
99
+ * Test for canCapture in direct sale mode
100
+ */
101
+ public function testCanCaptureMpBuy()
102
+ {
103
+ $expercashmpfMock = $this->getModelMock('expercash/expercashmpf', array(
104
+ 'getExperCashInfo'
105
+ ));
106
+
107
+ $expercashmpfMock->expects($this->any())
108
+ ->method('getExperCashInfo')
109
+ ->with($this->equalTo('expercash_request_type'))
110
+ ->will($this->returnValue('masterpass_buy'));
111
+
112
+ $this->assertTrue($expercashmpfMock->canCapture());
113
+ }
114
+
115
+ /**
116
+ * Check if payment model enables direct depending on given payment type.
117
+ */
118
+ public function testIsDirectSaleEnabled()
119
+ {
120
+ $mock = $this->getModelMock('expercash/expercashmpf', array('getConfigData'));
121
+ $mock
122
+ ->expects($this->any())
123
+ ->method('getConfigData')
124
+ ->with($this->equalTo('payment_action'))
125
+ ->will($this->onConsecutiveCalls(
126
+ Mage_Payment_Model_Method_Abstract::ACTION_AUTHORIZE_CAPTURE,
127
+ Mage_Payment_Model_Method_Abstract::ACTION_AUTHORIZE
128
+ ))
129
+ ;
130
+ $this->replaceByMock('model', 'expercash/expercashmpf', $mock);
131
+
132
+
133
+ $payment = Mage::getModel('expercash/expercashmpf');
134
+
135
+ $this->assertTrue($payment->isDirectSaleEnabled());
136
+ $this->assertFalse($payment->isDirectSaleEnabled());
137
+ }
138
+
139
+ /**
140
+ * @loadFixture quote.yaml
141
+ *
142
+ */
143
+ public function testIsAvailable()
144
+ {
145
+ $customerSession = $this->getModelMock(
146
+ 'customer/session', array('init', 'save')
147
+ );
148
+ $this->replaceByMock('model', 'customer/session', $customerSession);
149
+ $quote = Mage::getModel('sales/quote')->load(1);
150
+ $this->store->setConfig('payment/expercashmpf/active', 1);
151
+ $this->assertTrue(Mage::getModel('expercash/expercashmpf')->isAvailable($quote));
152
+
153
+ $quote = Mage::getModel('sales/quote')->load(2);
154
+ $this->store->resetConfig();
155
+ $this->store->setConfig('payment/expercashmpf/active', 0);
156
+
157
+ $this->assertFalse(Mage::getModel('expercash/expercashmpf')->isAvailable($quote));
158
+
159
+
160
+ $quote = Mage::getModel('sales/quote')->load(1);
161
+ $this->store->setConfig('payment/expercashmpf/active', 1);
162
+ $this->assertTrue(Mage::getModel('expercash/expercashmpf')->isAvailable($quote));
163
+
164
+ $mock = $this->getModelMock('expercash/expercashmpf', array('getCurrenciesArray'));
165
+ $mock
166
+ ->expects($this->any())
167
+ ->method('getCurrenciesArray')
168
+ ->will($this->returnValue(array('foo')));
169
+ $this->replaceByMock('model', 'expercash/expercashmpf', $mock);
170
+
171
+ $this->assertFalse(Mage::getModel('expercash/expercashmpf')->isAvailable($quote));
172
+
173
+ }
174
+
175
+ public function testValidate()
176
+ {
177
+ $order = Mage::getModel('sales/order');
178
+ $quote = Mage::getModel('sales/quote');
179
+ $quote->getPayment()->setMethod('expercashmpf');
180
+ $billindAddress = Mage::getModel('sales/order_address');
181
+ $billindAddress->setCountryId(1299);
182
+ $order->setBillingAddress($billindAddress);
183
+ $infoInstance = Mage::getModel('sales/order_payment');
184
+ $infoInstance->setOrder($order);
185
+ $infoInstance->setQuote($quote);
186
+
187
+
188
+
189
+ $mock = $this->getModelMock('expercash/expercashmpf', array('canUseForCountry'));
190
+ $mock
191
+ ->expects($this->any())
192
+ ->method('canUseForCountry')
193
+ ->will($this->returnValue(false));
194
+ $this->replaceByMock('model', 'expercash/expercashmpf', $mock);
195
+
196
+ $mock->setInfoInstance($infoInstance);
197
+ $mock->validate();
198
+
199
+
200
+ $this->assertNotEquals('expercashmpf', $quote->getPayment()->getMethod());
201
+ $this->assertEquals(null, $quote->getPayment()->getMethod());
202
+
203
+ }
204
+ }
app/code/community/Expercash/Expercash/Test/Model/ExpercashmpfTest/fixtures/quote.yaml ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tables:
2
+ sales/quote:
3
+ - entity_id: 1
4
+ store_id: 1
5
+ base_grand_total: 119.00
6
+ grand_total: 119.00
7
+ quote_currency_code: 'EUR'
8
+ customer_gender: 1
9
+ shipping_method: 'flatrate_flatrate'
10
+
11
+ - entity_id: 2
12
+ base_grand_total: 119.00
13
+ grand_total: 200.00
14
+ currency: '$'
15
+ customer_gender: 1
16
+ shipping_method: 'flatrate_flatrate'
17
+
18
+ - entity_id: 3
19
+ base_grand_total: 119.00
20
+ grand_total: 200.00
21
+ currency: '$'
22
+ customer_gender: 1
23
+ shipping_method: 'flatrate_flatrate'
24
+
25
+ - entity_id: 4
26
+ base_grand_total: 119.00
27
+ grand_total: 200.00
28
+ currency: 'EUR'
29
+ customer_gender: 1
30
+ shipping_method: 'flatrate_flatrate'
31
+
32
+ - entity_id: 5
33
+ base_grand_total: 119.00
34
+ grand_total: 1200.00
35
+ currency: 'EUR'
36
+ customer_gender: 1
37
+ shipping_method: 'flatrate_flatrate'
38
+
39
+ sales/quote_payment:
40
+
41
+ - id: 1
42
+ entity_id: 1
43
+ parent_id: 1
44
+ quote_id: 1
45
+ method: 'expercashmpf'
46
+
47
+ sales/quote_address:
48
+
49
+ - entity_id: 1
50
+ quote_id: 1
51
+ address_type: 'billing'
52
+ firstname: 'Hubertus'
53
+ postcode: '04229'
54
+ lastname: 'Fürstenberg'
55
+ street: 'An der Tabaksmühle 3a'
56
+ city: 'Leipzig'
57
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
58
+ country_id: 'DE'
59
+ prefix: 'Prof. Dr.'
60
+ middlename: 'von'
61
+ suffix: 'MdL'
62
+ company: ''
63
+ fax: '12345678'
64
+
65
+ - entity_id: 2
66
+ quote_id: 4
67
+ address_type: 'billing'
68
+ firstname: 'Hubertus'
69
+ postcode: '04229'
70
+ lastname: 'Fürstenberg'
71
+ street: 'An der Tabaksmühle 3a'
72
+ city: 'Leipzig'
73
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
74
+ country_id: 'CH'
75
+ prefix: 'Prof. Dr.'
76
+ middlename: 'von'
77
+ suffix: 'MdL'
78
+ company: ''
79
+ fax: '12345678'
80
+
81
+ - entity_id: 3
82
+ quote_id: 5
83
+ address_type: 'billing'
84
+ firstname: 'Hubertus'
85
+ postcode: '04229'
86
+ lastname: 'Fürstenberg'
87
+ street: 'An der Tabaksmühle 3a'
88
+ city: 'Leipzig'
89
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
90
+ country_id: 'DE'
91
+ prefix: 'Prof. Dr.'
92
+ middlename: 'von'
93
+ suffix: 'MdL'
94
+ company: ''
95
+ fax: '12345678'
app/code/community/Expercash/Expercash/Test/Model/ExpercashpcTest.php ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Class Expercash_Expercash_Test_Model_ExpercashpcTest
4
+ */
5
+ class Expercash_Expercash_Test_Model_ExpercashpcTest extends EcomDev_PHPUnit_Test_Case
6
+ {
7
+ /**
8
+ * @var Mage_Core_Model_Store
9
+ */
10
+ protected $store;
11
+
12
+ /**
13
+ * @var Expercash_Expercash_Model_Config
14
+ */
15
+ protected $config;
16
+
17
+ protected function setUp()
18
+ {
19
+ parent::setUp();
20
+ $this->setCurrentStore(Mage_Core_Model_App::DISTRO_STORE_ID);
21
+ }
22
+
23
+
24
+ public function testExpercashpcCodeProperty()
25
+ {
26
+ $expercashpc = Mage::getModel('expercash/expercashpc');
27
+ $this->assertEquals('expercashpc', $expercashpc->getCode());
28
+ $this->assertNotEquals('expercash', $expercashpc->getCode());
29
+ }
30
+
31
+ public function testExpercashpcCanCaptureProperty()
32
+ {
33
+ $expercashpc = Mage::getModel('expercash/expercashpc');
34
+ $this->assertFalse($expercashpc->canCapture());
35
+ $this->assertNotEquals(true, $expercashpc->canCapture());
36
+ }
37
+
38
+ public function testExpercashpcCanCapturePartialProperty()
39
+ {
40
+ $expercashpc = Mage::getModel('expercash/expercashpc');
41
+ $this->assertEquals(false, $expercashpc->canCapturePartial());
42
+ $this->assertNotEquals(true, $expercashpc->canCapturePartial());
43
+ }
44
+
45
+ public function testGetConfigData()
46
+ {
47
+ $this->assertEquals(
48
+ Expercash_Expercash_Model_Expercashpc::PAYMENT_TYPE_PC,
49
+ Mage::getModel('expercash/expercashpc')->getConfigData('paymenttype')
50
+ );
51
+ $this->assertNotEquals(
52
+ Expercash_Expercash_Model_Expercashpc::PAYMENT_TYPE_PC,
53
+ Mage::getModel('expercash/expercashpc')->getConfigData('iframeUrl')
54
+ );
55
+ }
56
+
57
+
58
+ /**
59
+ * @loadFixture quote.yaml
60
+ */
61
+ public function testIsAvailable()
62
+ {
63
+ $customerSession = $this->getModelMock('customer/session', array('init', 'save'));
64
+ $this->replaceByMock('singleton', 'customer/session', $customerSession);
65
+
66
+
67
+ // (1) valid quote but Barzahlen not active
68
+ $quote = Mage::getModel('sales/quote')->load(1);
69
+ self::app()->getStore()->setConfig('payment/expercashpc/active', 0);
70
+ $this->assertFalse(Mage::getModel('expercash/expercashpc')->isAvailable($quote));
71
+
72
+ // (2) invalid quote and Barzahlen active
73
+ self::app()->getStore()->setConfig('payment/expercashpc/active', 1);
74
+ $this->assertFalse(Mage::getModel('expercash/expercashpc')->isAvailable(null));
75
+
76
+ // (2) valid quote and Barzahlen active
77
+ $this->assertTrue(Mage::getModel('expercash/expercashpc')->isAvailable($quote));
78
+
79
+ // (3) invalid quote and Barzahlen active
80
+ $quote = Mage::getModel('sales/quote')->load(3);
81
+ $this->assertFalse(Mage::getModel('expercash/expercashpc')->isAvailable($quote));
82
+
83
+ // (4) invalid quote (currency) and Barzahlen active
84
+ $quote = Mage::getModel('sales/quote')->load(4);
85
+ $this->assertFalse(Mage::getModel('expercash/expercashpc')->isAvailable($quote));
86
+
87
+ // (5) invalid quote (grand total) and Barzahlen active
88
+ $quote = Mage::getModel('sales/quote')->load(5);
89
+ $this->assertFalse(Mage::getModel('expercash/expercashpc')->isAvailable($quote));
90
+ }
91
+ }
app/code/community/Expercash/Expercash/Test/Model/ExpercashpcTest/fixtures/.gitkeep ADDED
File without changes
app/code/community/Expercash/Expercash/Test/Model/ExpercashpcTest/fixtures/quote.yaml ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tables:
2
+ sales/quote:
3
+ - entity_id: 1
4
+ store_id: 1
5
+ base_grand_total: 119.00
6
+ grand_total: 119.00
7
+ quote_currency_code: 'EUR'
8
+ customer_gender: 1
9
+
10
+ - entity_id: 2
11
+ store_id: 1
12
+ base_grand_total: 119.00
13
+ grand_total: 200.00
14
+ quote_currency_code: 'EUR'
15
+ customer_gender: 1
16
+
17
+ - entity_id: 3
18
+ store_id: 1
19
+ base_grand_total: 119.00
20
+ grand_total: 200.00
21
+ quote_currency_code: 'USD'
22
+ customer_gender: 1
23
+
24
+ - entity_id: 4
25
+ store_id: 1
26
+ base_grand_total: 119.00
27
+ grand_total: 200.00
28
+ quote_currency_code: 'EUR'
29
+ customer_gender: 1
30
+
31
+ - entity_id: 5
32
+ store_id: 1
33
+ base_grand_total: 119.00
34
+ grand_total: 1200.00
35
+ quote_currency_code: 'EUR'
36
+ customer_gender: 1
37
+
38
+ sales/quote_payment:
39
+ - id: 1
40
+ entity_id: 1
41
+ parent_id: 1
42
+ quote_id: 1
43
+ method: 'expercashpc'
44
+
45
+ sales/quote_address:
46
+ - address_id: 1
47
+ quote_id: 1
48
+ address_type: 'billing'
49
+ firstname: 'Hubertus'
50
+ postcode: '04229'
51
+ lastname: 'Fürstenberg'
52
+ street: 'An der Tabaksmühle 3a'
53
+ city: 'Leipzig'
54
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
55
+ country_id: 'DE'
56
+ prefix: 'Prof. Dr.'
57
+ middlename: 'von'
58
+ suffix: 'MdL'
59
+ company: ''
60
+ fax: 12345678
61
+
62
+ - address_id: 2
63
+ quote_id: 4
64
+ address_type: 'billing'
65
+ firstname: 'Hubertus'
66
+ postcode: '04229'
67
+ lastname: 'Fürstenberg'
68
+ street: 'An der Tabaksmühle 3a'
69
+ city: 'Leipzig'
70
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
71
+ country_id: 'CH'
72
+ prefix: 'Prof. Dr.'
73
+ middlename: 'von'
74
+ suffix: 'MdL'
75
+ company: ''
76
+ fax: 12345678
77
+
78
+ - address_id: 3
79
+ quote_id: 5
80
+ address_type: 'billing'
81
+ firstname: 'Hubertus'
82
+ postcode: '04229'
83
+ lastname: 'Fürstenberg'
84
+ street: 'An der Tabaksmühle 3a'
85
+ city: 'Leipzig'
86
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
87
+ country_id: 'DE'
88
+ prefix: 'Prof. Dr.'
89
+ middlename: 'von'
90
+ suffix: 'MdL'
91
+ company: ''
92
+ fax: 12345678
app/code/community/Expercash/Expercash/Test/Model/ExpercashppTest.php ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Expercash_Expercash_Test_Model_ExpercashppTest extends EcomDev_PHPUnit_Test_Case_Controller
4
+ {
5
+ /**
6
+ * @var Mage_Core_Model_Store
7
+ */
8
+ protected $store;
9
+
10
+ public function setUp()
11
+ {
12
+ parent::setUp();
13
+ $this->store = Mage::app()->getStore(0)->load(0);
14
+ }
15
+
16
+ public function testExpercashccCodeProperty()
17
+ {
18
+ $expercashpp = Mage::getModel('expercash/expercashpp');
19
+ $this->assertEquals('expercashpp', $expercashpp->getCode());
20
+ $this->assertNotEquals('expercash', $expercashpp->getCode());
21
+ }
22
+
23
+ public function testExpercashIsGatewayProperty()
24
+ {
25
+ $expercashpp = Mage::getModel('expercash/expercashpp');
26
+ $this->assertEquals(false, $expercashpp->isGateway());
27
+ $this->assertNotEquals(true, $expercashpp->isGateway());
28
+ }
29
+
30
+ public function testExpercashCanAuthorizeProperty()
31
+ {
32
+ $expercashpp = Mage::getModel('expercash/expercashpp');
33
+ $this->assertEquals(true, $expercashpp->canAuthorize());
34
+ $this->assertNotEquals(false, $expercashpp->canAuthorize());
35
+ }
36
+
37
+ public function testExpercashCanCaptureProperty()
38
+ {
39
+ $expercashpp = Mage::getModel('expercash/expercashpp');
40
+ $this->assertFalse($expercashpp->canCapture());
41
+ $this->assertNotEquals(true, $expercashpp->canCapture());
42
+ }
43
+
44
+ public function testExpercashCanCapturePartialProperty()
45
+ {
46
+ $expercashpp = Mage::getModel('expercash/expercashpp');
47
+ $this->assertEquals(false, $expercashpp->canCapturePartial());
48
+ $this->assertNotEquals(true, $expercashpp->canCapturePartial());
49
+ }
50
+
51
+ public function testExpercashCanRefundProperty()
52
+ {
53
+ $expercashpp = Mage::getModel('expercash/expercashpp');
54
+ $this->assertEquals(false, $expercashpp->canRefund());
55
+ $this->assertNotEquals(true, $expercashpp->canRefund());
56
+ }
57
+
58
+ public function testExpercashVoidProperty()
59
+ {
60
+ $expercashpp = Mage::getModel('expercash/expercashpp');
61
+ $payment = new Varien_Object();
62
+ $this->assertEquals(false, $expercashpp->canVoid($payment));
63
+ $this->assertNotEquals(true, $expercashpp->canVoid($payment));
64
+ }
65
+
66
+ public function testExpercashUseInternalProperty()
67
+ {
68
+ $expercashpp = Mage::getModel('expercash/expercashpp');
69
+ $this->assertEquals(false, $expercashpp->canUseInternal());
70
+ $this->assertNotEquals(true, $expercashpp->canUseInternal());
71
+ }
72
+
73
+ public function testExpercashUseCheckoutProperty()
74
+ {
75
+ $expercashpp = Mage::getModel('expercash/expercashpp');
76
+ $this->assertEquals(true, $expercashpp->canUseCheckout());
77
+ $this->assertNotEquals(false, $expercashpp->canUseCheckout());
78
+ }
79
+
80
+ public function testExpercashUseMultishippingProperty()
81
+ {
82
+ $expercashpp = Mage::getModel('expercash/expercashpp');
83
+ $this->assertEquals(false, $expercashpp->canUseForMultishipping());
84
+ $this->assertNotEquals(true, $expercashpp->canUseForMultishipping());
85
+ }
86
+ }
app/code/community/Expercash/Expercash/Test/Model/ExpercashsoTest.php ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Expercash_Expercash_Test_Model_ExpercashsoTest extends EcomDev_PHPUnit_Test_Case_Controller
4
+ {
5
+ /**
6
+ * @var Mage_Core_Model_Store
7
+ */
8
+ protected $store;
9
+
10
+ public function setUp()
11
+ {
12
+ parent::setUp();
13
+ $this->store = Mage::app()->getStore(0)->load(0);
14
+ }
15
+
16
+ public function testExpercashccCodeProperty()
17
+ {
18
+ $expercashso = Mage::getModel('expercash/expercashso');
19
+ $this->assertEquals('expercashso', $expercashso->getCode());
20
+ $this->assertNotEquals('expercash', $expercashso->getCode());
21
+ }
22
+
23
+ public function testExpercashIsGatewayProperty()
24
+ {
25
+ $expercashso = Mage::getModel('expercash/expercashso');
26
+ $this->assertEquals(false, $expercashso->isGateway());
27
+ $this->assertNotEquals(true, $expercashso->isGateway());
28
+ }
29
+
30
+ public function testExpercashCanAuthorizeProperty()
31
+ {
32
+ $expercashso = Mage::getModel('expercash/expercashso');
33
+ $this->assertEquals(true, $expercashso->canAuthorize());
34
+ $this->assertNotEquals(false, $expercashso->canAuthorize());
35
+ }
36
+
37
+ public function testExpercashCanCaptureProperty()
38
+ {
39
+ $expercashso = Mage::getModel('expercash/expercashso');
40
+ $this->assertFalse($expercashso->canCapture());
41
+ $this->assertNotEquals(true, $expercashso->canCapture());
42
+ }
43
+
44
+ public function testExpercashCanCapturePartialProperty()
45
+ {
46
+ $expercashso = Mage::getModel('expercash/expercashso');
47
+ $this->assertEquals(false, $expercashso->canCapturePartial());
48
+ $this->assertNotEquals(true, $expercashso->canCapturePartial());
49
+ }
50
+
51
+ public function testExpercashCanRefundProperty()
52
+ {
53
+ $expercashso = Mage::getModel('expercash/expercashso');
54
+ $this->assertEquals(false, $expercashso->canRefund());
55
+ $this->assertNotEquals(true, $expercashso->canRefund());
56
+ }
57
+
58
+ public function testExpercashVoidProperty()
59
+ {
60
+ $expercashso = Mage::getModel('expercash/expercashso');
61
+ $payment = new Varien_Object();
62
+ $this->assertEquals(false, $expercashso->canVoid($payment));
63
+ $this->assertNotEquals(true, $expercashso->canVoid($payment));
64
+ }
65
+
66
+ public function testExpercashUseInternalProperty()
67
+ {
68
+ $expercashso = Mage::getModel('expercash/expercashso');
69
+ $this->assertEquals(false, $expercashso->canUseInternal());
70
+ $this->assertNotEquals(true, $expercashso->canUseInternal());
71
+ }
72
+
73
+ public function testExpercashUseCheckoutProperty()
74
+ {
75
+ $expercashso = Mage::getModel('expercash/expercashso');
76
+ $this->assertEquals(true, $expercashso->canUseCheckout());
77
+ $this->assertNotEquals(false, $expercashso->canUseCheckout());
78
+ }
79
+
80
+ public function testExpercashUseMultishippingProperty()
81
+ {
82
+ $expercashso = $this->getPaymentMethod();
83
+ $this->assertEquals(false, $expercashso->canUseForMultishipping());
84
+ $this->assertNotEquals(true, $expercashso->canUseForMultishipping());
85
+ }
86
+
87
+ public function testExpercashSoDirectSaleEnabled()
88
+ {
89
+ $this->assertFalse($this->getPaymentMethod()->isDirectSaleEnabled());
90
+
91
+ $expercashsoMock = $this->getModelMock('expercash/expercashso', array(
92
+ 'getConfigData'
93
+ )
94
+ );
95
+
96
+ $expercashsoMock->expects($this->any())
97
+ ->method('getConfigData')
98
+ ->will($this->returnValue(Expercash_Expercash_Model_Expercashso::PAYMENT_TYPE_SO));
99
+ $this->assertTrue($expercashsoMock->isDirectSaleEnabled());
100
+ }
101
+
102
+ /**
103
+ * @return Expercash_Expercash_Model_Expercashso
104
+ */
105
+ protected function getPaymentMethod()
106
+ {
107
+ return Mage::getModel('expercash/expercashso');
108
+ }
109
+ }
app/code/community/Expercash/Expercash/Test/Model/Request/IframeTest.php ADDED
@@ -0,0 +1,242 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Expercash_Expercash_Test_Model_Request_IframeTest extends EcomDev_PHPUnit_Test_Case_Config
4
+ {
5
+
6
+ /**
7
+ * @loadFixture order
8
+ */
9
+ public function testGetJobId()
10
+ {
11
+ $order = Mage::getModel('sales/order')->load(11);
12
+ $this->assertEquals(100000011, $this->invokeMethod('getJobId', array($order)));
13
+
14
+ }
15
+
16
+
17
+ public function testGetConfig()
18
+ {
19
+ $this->assertTrue($this->invokeMethod('getConfig', array()) instanceof Expercash_Expercash_Model_Config);
20
+ }
21
+
22
+ /**
23
+ * @loadFixture order
24
+ */
25
+ public function testGetOrder()
26
+ {
27
+ $session = new Varien_Object();
28
+ $session->setLastOrderId(11);
29
+ $iframeModelMock = $this->getModelMock('expercash/request_iframe', array('getCheckoutSession'));
30
+ $iframeModelMock->expects($this->any())
31
+ ->method('getCheckoutSession')
32
+ ->will($this->returnValue($session));
33
+
34
+ $this->assertEquals(11, $iframeModelMock->getOrder()->getId());
35
+ $this->assertTrue($iframeModelMock->getOrder() instanceof Mage_Sales_Model_Order);
36
+
37
+ }
38
+
39
+ /**
40
+ * @loadFixture order
41
+ */
42
+ public function testGetStoreId()
43
+ {
44
+ $order = Mage::getModel('sales/order')->load(11);
45
+ $iframeModelMock = $this->getModelMock('expercash/request_iframe', array('getOrder'));
46
+ $iframeModelMock->expects($this->any())
47
+ ->method('getOrder')
48
+ ->will($this->returnValue($order));
49
+ $this->replaceByMock('model', 'expercash/request_iframe', $iframeModelMock);
50
+ $this->assertEquals(1, $this->invokeMethod('getStoreId'));
51
+
52
+ }
53
+
54
+ public function testGetCoreUrlHelper()
55
+ {
56
+ $this->assertTrue($this->invokeMethod('getCoreUrlHelper', array()) instanceof Mage_Core_Helper_Url);
57
+ }
58
+
59
+
60
+
61
+ public function testGetCheckoutSession()
62
+ {
63
+ $coreSessionMock = $this->getModelMock('checkout/session', array('init', 'start'));
64
+ $this->replaceByMock('model', 'checkout/session', $coreSessionMock);
65
+
66
+ $this->assertTrue($this->invokeMethod('getCheckoutSession', array()) instanceof $coreSessionMock);
67
+ }
68
+
69
+
70
+ public function testGetTokenSessionId()
71
+ {
72
+ $session = new Varien_Object();
73
+ $session->setData(Expercash_Expercash_Model_Config::TOKEN_REGISTRY_KEY,11);
74
+
75
+ $coreSessionMock = $this->getModelMock('core/session', array('init', 'start'));
76
+ $this->replaceByMock('model', 'core/session', $coreSessionMock);
77
+
78
+
79
+
80
+ $iframeModelMock = $this->getModelMock('expercash/request_iframe', array('getCheckoutSession'));
81
+ $iframeModelMock->expects($this->any())
82
+ ->method('getCheckoutSession')
83
+ ->will($this->returnValue($session));
84
+ $this->replaceByMock('model', 'expercash/request_iframe', $iframeModelMock);
85
+
86
+ $this->assertEquals(11, $this->invokeMethod('getTokenSessionId'));
87
+
88
+ }
89
+
90
+ /**
91
+ * @loadFixture order
92
+ */
93
+ public function testSetOrderDataToSession()
94
+ {
95
+
96
+ $session = new Varien_Object();
97
+
98
+ $helperMock = $this->getHelperMock('expercash/payment', array('createExperCashOrderId'));
99
+ $helperMock->expects($this->once())
100
+ ->method('createExperCashOrderId')
101
+ ->will($this->returnValue('0816'));
102
+ $this->replaceByMock('helper', 'expercash/payment', $helperMock);
103
+
104
+ $session->setLastRealOrderId('0815');
105
+ $session->setLastOrderId(11);
106
+ $session->setQuoteId(666);
107
+
108
+ $coreSessionMock = $this->getModelMock('core/session', array('init', 'start'));
109
+ $this->replaceByMock('model', 'core/session', $coreSessionMock);
110
+
111
+ $iframeModelMock = $this->getModelMock('expercash/request_iframe', array('getCheckoutSession'));
112
+ $iframeModelMock->expects($this->any())
113
+ ->method('getCheckoutSession')
114
+ ->will($this->returnValue($session));
115
+ $iframeModelMock->setOrderDataToSession();
116
+ $this->assertEquals('0816', $session->getExpercashOrderId());
117
+ $this->assertEquals($session->getLastRealOrderId() ,$session->getExpercashRealOrderId());
118
+ $this->assertEquals($session->getQuoteId() ,$session->getExpercashQuoteId());
119
+ }
120
+
121
+
122
+ /**
123
+ * @loadFixture order
124
+ */
125
+ public function testGetIframeParams()
126
+ {
127
+ $order = Mage::getModel('sales/order')->load(11);
128
+
129
+ $iframeModelMock = $this->getModelMock('expercash/request_iframe', array(
130
+ 'getTokenSessionId',
131
+ 'buildSessionKeyHash'
132
+ )
133
+ );
134
+ $iframeModelMock->expects($this->any())
135
+ ->method('getTokenSessionId')
136
+ ->will($this->returnValue('abcd123'));
137
+
138
+ $iframeModelMock->expects($this->any())
139
+ ->method('buildSessionKeyHash')
140
+ ->will($this->returnValue('123abc'));
141
+
142
+ $params = $iframeModelMock->getIframeParams($order);
143
+
144
+ $this->assertTrue(array_key_exists('preparedSession',$params));
145
+ $this->assertTrue(array_key_exists('sessionKey',$params));
146
+
147
+ $this->assertEquals('abcd123',$params['preparedSession']);
148
+ $this->assertEquals('123abc',$params['sessionKey']);
149
+ }
150
+
151
+ /**
152
+ * @loadFixture order
153
+ */
154
+ public function testBuildSessionKeyHash()
155
+ {
156
+ $order = Mage::getModel('sales/order')->load(11);
157
+ $sessionKeyHashTest = sha1('abcd123'.'15'.'foo');
158
+
159
+ $configModelMock = $this->getModelMock('expercash/config', array('getAuthorizationkey'));
160
+ $configModelMock->expects($this->any())
161
+ ->method('getAuthorizationkey')
162
+ ->will($this->returnValue('foo'));
163
+ $this->replaceByMock('model', 'expercash/config', $configModelMock);
164
+
165
+ $iframeModelMock = $this->getModelMock('expercash/request_iframe', array(
166
+ 'getTokenSessionId',
167
+ 'getJobId'
168
+ )
169
+ );
170
+ $iframeModelMock->expects($this->any())
171
+ ->method('getTokenSessionId')
172
+ ->will($this->returnValue('abcd123'));
173
+
174
+
175
+ $iframeModelMock->expects($this->any())
176
+ ->method('getJobId')
177
+ ->will($this->returnValue('15'));
178
+
179
+ $this->assertEquals($sessionKeyHashTest,$iframeModelMock->buildSessionKeyHash($order));
180
+
181
+ }
182
+
183
+ public function testGetIframeUrl()
184
+ {
185
+ $iframeParams = array('foo' => '123','baar'=> '456');
186
+ $checkoutSession = new Varien_Object();
187
+ $checkoutSession->setData(Expercash_Expercash_Model_Config::TOKEN_REGISTRY_KEY,'foo');
188
+
189
+ $coreSessionMock = $this->getModelMock('core/session', array('init', 'start'));
190
+ $this->replaceByMock('model', 'core/session', $coreSessionMock);
191
+
192
+ $configModelMock = $this->getModelMock('expercash/config', array('getIframeUrl'));
193
+ $configModelMock->expects($this->any())
194
+ ->method('getIframeUrl')
195
+ ->will($this->returnValue('https://www.test.de'));
196
+ $this->replaceByMock('model', 'expercash/config', $configModelMock);
197
+
198
+
199
+ $iframeModelMock = $this->getModelMock('expercash/request_iframe', array(
200
+ 'getIframeParams',
201
+ 'getCoreUrlHelper',
202
+ 'getCheckoutSession'
203
+ )
204
+ );
205
+
206
+ $iframeModelMock->expects($this->any())
207
+ ->method('getIframeParams')
208
+ ->will($this->returnValue($iframeParams));
209
+
210
+ $iframeModelMock->expects($this->any())
211
+ ->method('getCoreUrlHelper')
212
+ ->will($this->returnValue(Mage::helper('core/url')));
213
+
214
+ $iframeModelMock->expects($this->any())
215
+ ->method('getCheckoutSession')
216
+ ->will($this->returnValue($checkoutSession));
217
+
218
+ $this->assertEquals('https://www.test.de?foo=123&baar=456',$iframeModelMock->getIframeUrl());
219
+ $this->assertNotEquals('foo',$checkoutSession->getData(Expercash_Expercash_Model_Config::TOKEN_REGISTRY_KEY));
220
+
221
+ }
222
+
223
+ /**
224
+ * Call protected/private method of a class.
225
+ *
226
+ * @param object $object Instantiated object that we will run method on.
227
+ * @param string $methodName Method name to call
228
+ * @param array $parameters Array of parameters to pass into method.
229
+ *
230
+ * @return mixed Method return.
231
+ */
232
+ public function invokeMethod($methodName, array $parameters = array())
233
+ {
234
+ $object = Mage::getModel('expercash/request_iframe');
235
+ $reflection = new \ReflectionClass(get_class($object));
236
+ $method = $reflection->getMethod($methodName);
237
+ $method->setAccessible(true);
238
+ return $method->invokeArgs($object, $parameters);
239
+ }
240
+
241
+
242
+ }
app/code/community/Expercash/Expercash/Test/Model/Request/IframeTest/fixtures/order.yaml ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tables:
2
+
3
+ sales/order:
4
+ - entity_id: 11
5
+ increment_id: 100000011
6
+ billing_address_id: 42
7
+ store_id: 1
8
+ base_grand_total: 119.00
9
+ grand_total: 119.00
10
+ order_currency_code: 'EUR'
11
+ customer_gender: 1
12
+ shipping_method: 'flatrate_flatrate'
13
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
14
+ state: 'pending_payment'
15
+ status: 'pending_payment'
16
+ quote_id: 23
17
+
18
+ - entity_id: 12
19
+ increment_id: 100000012
20
+ billing_address_id: 42
21
+ base_grand_total: 119.00
22
+ grand_total: 119.00
23
+ order_currency_code: 'EUR'
24
+ customer_gender: 1
25
+ shipping_method: 'flatrate_flatrate'
26
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
27
+ state: 'pending_payment'
28
+ status: 'pending_payment'
29
+ quote_id: 24
30
+
31
+
32
+ sales/order_payment:
33
+ - entity_id: 11
34
+ parent_id: 11
35
+ method: 'expercashcc'
36
+
37
+ - entity_id: 12
38
+ parent_id: 12
39
+ method: 'expercashpc'
40
+
41
+ sales/order_address:
42
+ - entity_id: 42
43
+ parent_id: 11
44
+ address_type: 'billing'
45
+ firstname: 'Hubertus'
46
+ postcode: '04229'
47
+ lastname: 'Fürstenberg'
48
+ street: 'An der Tabaksmühle 3a'
49
+ city: 'Leipzig'
50
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
51
+ country_id: 'DE'
52
+ prefix: 'Prof. Dr.'
53
+ middlename: 'von'
54
+ suffix: 'MdL'
55
+ company: ''
56
+ fax: 12345678
57
+
58
+ - entity_id: 43
59
+ parent_id: 12
60
+ address_type: 'billing'
61
+ firstname: 'Hubertus'
62
+ postcode: '04229'
63
+ lastname: 'Fürstenberg'
64
+ street: 'An der Tabaksmühle 3a'
65
+ city: 'Leipzig'
66
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
67
+ country_id: 'DE'
68
+ prefix: 'Prof. Dr.'
69
+ middlename: 'von'
70
+ suffix: 'MdL'
71
+ company: ''
72
+ fax: 12345678
app/code/community/Expercash/Expercash/Test/Model/Request/Token/IframeTest.php ADDED
@@ -0,0 +1,266 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class Expercash_Expercash_Test_Model_Request_Token_IframeTest extends EcomDev_PHPUnit_Test_Case_Config
5
+ {
6
+
7
+
8
+ public function testCalcCentAmount()
9
+ {
10
+ $amount = 33.30;
11
+ $centAmount = $this->invokeMethod('calcCentAmount', array($amount));
12
+ $this->assertEquals(3330, $centAmount);
13
+ }
14
+
15
+
16
+ public function testGetConfig()
17
+ {
18
+ $this->assertTrue($this->invokeMethod('getConfig') instanceof Expercash_Expercash_Model_Config);
19
+ }
20
+
21
+
22
+ /**
23
+ * @loadFixture order
24
+ */
25
+ public function testGetTokenParamsWithoutBarzahlen()
26
+ {
27
+
28
+ $order = Mage::getModel('sales/order')->load(11);
29
+
30
+ $coreUrlModel = $this->getModelMock('core/url', array('getUseSession'));
31
+ $coreUrlModel->expects($this->any())
32
+ ->method('getUseSession')
33
+ ->will($this->returnValue(false));
34
+ $this->replaceByMock('model', 'core/url', $coreUrlModel);
35
+
36
+ $coreSessionMock = $this->getModelMock('core/session', array('init', 'start'));
37
+ $this->replaceByMock('model', 'core/session', $coreSessionMock);
38
+
39
+ $configMock = $this->getModelMock(
40
+ 'expercash/config', array(
41
+ 'getPopupId',
42
+ 'getConfigData',
43
+ 'getProfilId'
44
+ )
45
+ );
46
+
47
+ $configMock->expects($this->any())
48
+ ->method('getPopupId')
49
+ ->will($this->returnValue(1234));
50
+
51
+ $configMock->expects($this->any())
52
+ ->method('getConfigData')
53
+ ->will($this->returnValue('expercashcc'));
54
+
55
+ $configMock->expects($this->any())
56
+ ->method('getProfilId')
57
+ ->will($this->returnValue(12));
58
+ $this->replaceByMock('model', 'expercash/config', $configMock);
59
+
60
+ $checkoutMock = $this->getModelMock(
61
+ 'checkout/session', array(
62
+ 'getLastRealOrderId',
63
+ 'start',
64
+ 'init'
65
+ )
66
+ );
67
+ $checkoutMock->expects($this->any())
68
+ ->method('getLastRealOrderId')
69
+ ->will($this->returnValue(11));
70
+ $this->replaceByMock('model', 'checkout/session', $checkoutMock);
71
+
72
+ $modelMock = $this->getModelMock('expercash/request_token_iframe', array('calcCentAmount'));
73
+ $modelMock->expects($this->any())
74
+ ->method('calcCentAmount')
75
+ ->will($this->returnValue(1190));
76
+
77
+ $urlArray = $modelMock->getTokenParams($order);
78
+
79
+ $this->assertTrue(array_key_exists('popupId', $urlArray));
80
+ $this->assertTrue(array_key_exists('jobId', $urlArray));
81
+ $this->assertTrue(array_key_exists('transactionId', $urlArray));
82
+ $this->assertTrue(array_key_exists('amount', $urlArray));
83
+ $this->assertTrue(array_key_exists('currency', $urlArray));
84
+ $this->assertTrue(array_key_exists('paymentMethod', $urlArray));
85
+ $this->assertTrue(array_key_exists('returnUrl', $urlArray));
86
+ $this->assertTrue(array_key_exists('errorUrl', $urlArray));
87
+ $this->assertTrue(array_key_exists('notifyUrl', $urlArray));
88
+ $this->assertTrue(array_key_exists('profile', $urlArray));
89
+
90
+ $this->assertEquals(1234, $urlArray['popupId']);
91
+ $this->assertEquals(100000011, $urlArray['jobId']);
92
+ $this->assertEquals(100000011, $urlArray['transactionId']);
93
+ $this->assertEquals(1190, $urlArray['amount']);
94
+ $this->assertEquals('EUR', $urlArray['currency']);
95
+ $this->assertEquals('expercashcc', $urlArray['paymentMethod']);
96
+ $this->assertEquals(
97
+ Mage::getUrl('expercash/expercash/success', array('_secure' => true)), $urlArray['returnUrl']
98
+ );
99
+ $this->assertEquals(Mage::getUrl('expercash/expercash/error', array('_secure' => true)), $urlArray['errorUrl']);
100
+ $this->assertEquals(
101
+ Mage::getUrl('expercash/expercash/notify', array('_secure' => true)), $urlArray['notifyUrl']
102
+ );
103
+ $this->assertEquals(12, $urlArray['profile']);
104
+
105
+
106
+ }
107
+
108
+ /**
109
+ * @loadFixture order
110
+ */
111
+ public function testGetTokenParamsWithBarzahlen()
112
+ {
113
+
114
+ $order = Mage::getModel('sales/order')->load(12);
115
+
116
+ $coreUrlModel = $this->getModelMock('core/url', array('getUseSession'));
117
+ $coreUrlModel->expects($this->any())
118
+ ->method('getUseSession')
119
+ ->will($this->returnValue(false));
120
+ $this->replaceByMock('model', 'core/url', $coreUrlModel);
121
+
122
+ $coreSessionMock = $this->getModelMock('core/session', array('init', 'start'));
123
+ $this->replaceByMock('model', 'core/session', $coreSessionMock);
124
+
125
+ $configMock = $this->getModelMock(
126
+ 'expercash/config', array(
127
+ 'getPopupId',
128
+ 'getConfigData',
129
+ 'getProfilId'
130
+ )
131
+ );
132
+
133
+ $configMock->expects($this->any())
134
+ ->method('getPopupId')
135
+ ->will($this->returnValue(1234));
136
+
137
+ $configMock->expects($this->any())
138
+ ->method('getConfigData')
139
+ ->will($this->returnValue('expercashpc'));
140
+
141
+ $configMock->expects($this->any())
142
+ ->method('getProfilId')
143
+ ->will($this->returnValue(12));
144
+ $this->replaceByMock('model', 'expercash/config', $configMock);
145
+
146
+ $checkoutMock = $this->getModelMock(
147
+ 'checkout/session', array(
148
+ 'getLastRealOrderId',
149
+ 'start',
150
+ 'init'
151
+ )
152
+ );
153
+ $checkoutMock->expects($this->any())
154
+ ->method('getLastRealOrderId')
155
+ ->will($this->returnValue(11));
156
+ $this->replaceByMock('model', 'checkout/session', $checkoutMock);
157
+
158
+ $modelMock = $this->getModelMock('expercash/request_token_iframe', array('calcCentAmount'));
159
+ $modelMock->expects($this->any())
160
+ ->method('calcCentAmount')
161
+ ->will($this->returnValue(1190));
162
+
163
+ $urlArray = $modelMock->getTokenParams($order);
164
+ $this->assertTrue(array_key_exists('customerPrename', $urlArray));
165
+ $this->assertTrue(array_key_exists('customerName', $urlArray));
166
+ $this->assertTrue(array_key_exists('customerAddress1', $urlArray));
167
+ $this->assertTrue(array_key_exists('customerZip', $urlArray));
168
+ $this->assertTrue(array_key_exists('customerCity', $urlArray));
169
+ $this->assertTrue(array_key_exists('customerCountry', $urlArray));
170
+ $this->assertTrue(array_key_exists('customerEmail', $urlArray));
171
+ $this->assertTrue(array_key_exists('updateUrl', $urlArray));
172
+
173
+ $this->assertEquals('Hubertus', $urlArray['customerPrename']);
174
+ $this->assertEquals('Fürstenberg', $urlArray['customerName']);
175
+ $this->assertEquals('An der Tabaksmühle 3a', $urlArray['customerAddress1']);
176
+ $this->assertEquals('04229', $urlArray['customerZip']);
177
+ $this->assertEquals('DE', $urlArray['customerCountry']);
178
+ $this->assertEquals('hubertus.von.fuerstenberg@trash-mail.com', $urlArray['customerEmail']);
179
+ $this->assertEquals(
180
+ Mage::getUrl('expercash/expercash/notify', array('_secure' => true)), $urlArray['updateUrl']
181
+ );
182
+
183
+
184
+ }
185
+
186
+
187
+ public function getTokenParams($session, $order, $paymentObject)
188
+ {
189
+ $config = $this->getConfig();
190
+ $code = $paymentObject->getCode();
191
+ $urlArray = Array(
192
+ 'popupId' => $config->getPopupId($order->getStoreId()),
193
+ 'jobId' => $session->getLastRealOrderId(),
194
+ 'transactionId' => $session->getLastRealOrderId(),
195
+ 'amount' => $this->calcCentAmount($order->getGrandTotal()),
196
+ 'currency' => $order->getOrderCurrencyCode(),
197
+ 'paymentMethod' => $config->getConfigData('paymenttype', $code, $order->getStoreId()),
198
+ 'returnUrl' => Mage::getUrl(
199
+ 'expercash/expercash/success', array('_secure' => true)
200
+ ),
201
+ 'errorUrl' => Mage::getUrl(
202
+ 'expercash/expercash/error', array('_secure' => true)
203
+ ),
204
+ 'notifyUrl' => Mage::getUrl(
205
+ 'expercash/expercash/notify', array('_secure' => true)
206
+ ),
207
+
208
+ 'profile' => $config->getProfilId($order->getStoreId()),
209
+ );
210
+
211
+ if ($paymentObject instanceof Expercash_Expercash_Model_Expercashpc) {
212
+ $urlArray = array_merge($this->getBarzahlenParams($order));
213
+ }
214
+ return $urlArray;
215
+ }
216
+
217
+ /**
218
+ * @loadFixture order
219
+ */
220
+ public function testGetBarzahlenParams()
221
+ {
222
+ $order = Mage::getModel('sales/order')->load(11);
223
+
224
+ $coreUrlModel = $this->getModelMock('core/url', array('getUrl'));
225
+ $coreUrlModel->expects($this->once())
226
+ ->method('getUrl')
227
+ ->will($this->returnValue('www.test.de'));
228
+ $this->replaceByMock('model', 'core/url', $coreUrlModel);
229
+
230
+ $barzahlenParams = $this->invokeMethod('getBarzahlenParams', array($order));
231
+ $this->assertTrue(array_key_exists('customerPrename', $barzahlenParams));
232
+ $this->assertTrue(array_key_exists('customerName', $barzahlenParams));
233
+ $this->assertTrue(array_key_exists('customerAddress1', $barzahlenParams));
234
+ $this->assertTrue(array_key_exists('customerZip', $barzahlenParams));
235
+ $this->assertTrue(array_key_exists('customerCity', $barzahlenParams));
236
+ $this->assertTrue(array_key_exists('customerCountry', $barzahlenParams));
237
+ $this->assertTrue(array_key_exists('customerEmail', $barzahlenParams));
238
+ $this->assertTrue(array_key_exists('updateUrl', $barzahlenParams));
239
+
240
+ $this->assertEquals('Hubertus', $barzahlenParams['customerPrename']);
241
+ $this->assertEquals('Fürstenberg', $barzahlenParams['customerName']);
242
+ $this->assertEquals('An der Tabaksmühle 3a', $barzahlenParams['customerAddress1']);
243
+ $this->assertEquals('04229', $barzahlenParams['customerZip']);
244
+ $this->assertEquals('DE', $barzahlenParams['customerCountry']);
245
+ $this->assertEquals('hubertus.von.fuerstenberg@trash-mail.com', $barzahlenParams['customerEmail']);
246
+ $this->assertEquals('www.test.de', $barzahlenParams['updateUrl']);
247
+ }
248
+
249
+ /**
250
+ * Call protected/private method of a class.
251
+ *
252
+ * @param object $object Instantiated object that we will run method on.
253
+ * @param string $methodName Method name to call
254
+ * @param array $parameters Array of parameters to pass into method.
255
+ *
256
+ * @return mixed Method return.
257
+ */
258
+ public function invokeMethod($methodName, array $parameters = array())
259
+ {
260
+ $object = Mage::getModel('expercash/request_token_iframe');
261
+ $reflection = new \ReflectionClass(get_class($object));
262
+ $method = $reflection->getMethod($methodName);
263
+ $method->setAccessible(true);
264
+ return $method->invokeArgs($object, $parameters);
265
+ }
266
+ }
app/code/community/Expercash/Expercash/Test/Model/Request/Token/IframeTest/fixtures/order.yaml ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tables:
2
+
3
+ sales/order:
4
+ - entity_id: 11
5
+ increment_id: 100000011
6
+ billing_address_id: 42
7
+ base_grand_total: 119.00
8
+ grand_total: 119.00
9
+ order_currency_code: 'EUR'
10
+ customer_gender: 1
11
+ shipping_method: 'flatrate_flatrate'
12
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
13
+ state: 'pending_payment'
14
+ status: 'pending_payment'
15
+ quote_id: 23
16
+
17
+ - entity_id: 12
18
+ increment_id: 100000012
19
+ billing_address_id: 42
20
+ base_grand_total: 119.00
21
+ grand_total: 119.00
22
+ order_currency_code: 'EUR'
23
+ customer_gender: 1
24
+ shipping_method: 'flatrate_flatrate'
25
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
26
+ state: 'pending_payment'
27
+ status: 'pending_payment'
28
+ quote_id: 24
29
+
30
+
31
+ sales/order_payment:
32
+ - entity_id: 11
33
+ parent_id: 11
34
+ method: 'expercashcc'
35
+
36
+ - entity_id: 12
37
+ parent_id: 12
38
+ method: 'expercashpc'
39
+
40
+ sales/order_address:
41
+ - entity_id: 42
42
+ parent_id: 11
43
+ address_type: 'billing'
44
+ firstname: 'Hubertus'
45
+ postcode: '04229'
46
+ lastname: 'Fürstenberg'
47
+ street: 'An der Tabaksmühle 3a'
48
+ city: 'Leipzig'
49
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
50
+ country_id: 'DE'
51
+ prefix: 'Prof. Dr.'
52
+ middlename: 'von'
53
+ suffix: 'MdL'
54
+ company: ''
55
+ fax: 12345678
56
+
57
+ - entity_id: 43
58
+ parent_id: 12
59
+ address_type: 'billing'
60
+ firstname: 'Hubertus'
61
+ postcode: '04229'
62
+ lastname: 'Fürstenberg'
63
+ street: 'An der Tabaksmühle 3a'
64
+ city: 'Leipzig'
65
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
66
+ country_id: 'DE'
67
+ prefix: 'Prof. Dr.'
68
+ middlename: 'von'
69
+ suffix: 'MdL'
70
+ company: ''
71
+ fax: 12345678
app/code/community/Expercash/Expercash/Test/Model/Request/TokenTest.php ADDED
@@ -0,0 +1,266 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class Expercash_Expercash_Test_Model_Request_TokenTest extends EcomDev_PHPUnit_Test_Case_Config
5
+ {
6
+
7
+
8
+ public function testCalcCentAmount()
9
+ {
10
+ $amount = 33.30;
11
+ $centAmount = $this->invokeMethod('calcCentAmount', array($amount));
12
+ $this->assertEquals(3330, $centAmount);
13
+ }
14
+
15
+
16
+ public function testGetConfig()
17
+ {
18
+ $this->assertTrue($this->invokeMethod('getConfig') instanceof Expercash_Expercash_Model_Config);
19
+ }
20
+
21
+
22
+ /**
23
+ * @loadFixture order
24
+ */
25
+ public function testGetTokenParamsWithoutBarzahlen()
26
+ {
27
+
28
+ $order = Mage::getModel('sales/order')->load(11);
29
+
30
+ $coreUrlModel = $this->getModelMock('core/url', array('getUseSession'));
31
+ $coreUrlModel->expects($this->any())
32
+ ->method('getUseSession')
33
+ ->will($this->returnValue(false));
34
+ $this->replaceByMock('model', 'core/url', $coreUrlModel);
35
+
36
+ $coreSessionMock = $this->getModelMock('core/session', array('init', 'start'));
37
+ $this->replaceByMock('model', 'core/session', $coreSessionMock);
38
+
39
+ $configMock = $this->getModelMock(
40
+ 'expercash/config', array(
41
+ 'getPopupId',
42
+ 'getConfigData',
43
+ 'getProfilId'
44
+ )
45
+ );
46
+
47
+ $configMock->expects($this->any())
48
+ ->method('getPopupId')
49
+ ->will($this->returnValue(1234));
50
+
51
+ $configMock->expects($this->any())
52
+ ->method('getConfigData')
53
+ ->will($this->returnValue('expercashcc'));
54
+
55
+ $configMock->expects($this->any())
56
+ ->method('getProfilId')
57
+ ->will($this->returnValue(12));
58
+ $this->replaceByMock('model', 'expercash/config', $configMock);
59
+
60
+ $checkoutMock = $this->getModelMock(
61
+ 'checkout/session', array(
62
+ 'getLastRealOrderId',
63
+ 'start',
64
+ 'init'
65
+ )
66
+ );
67
+ $checkoutMock->expects($this->any())
68
+ ->method('getLastRealOrderId')
69
+ ->will($this->returnValue(11));
70
+ $this->replaceByMock('model', 'checkout/session', $checkoutMock);
71
+
72
+ $modelMock = $this->getModelMock('expercash/request_token', array('calcCentAmount'));
73
+ $modelMock->expects($this->any())
74
+ ->method('calcCentAmount')
75
+ ->will($this->returnValue(1190));
76
+
77
+ $urlArray = $modelMock->getTokenParams($order);
78
+
79
+ $this->assertTrue(array_key_exists('popupId', $urlArray));
80
+ $this->assertTrue(array_key_exists('jobId', $urlArray));
81
+ $this->assertTrue(array_key_exists('transactionId', $urlArray));
82
+ $this->assertTrue(array_key_exists('amount', $urlArray));
83
+ $this->assertTrue(array_key_exists('currency', $urlArray));
84
+ $this->assertTrue(array_key_exists('paymentMethod', $urlArray));
85
+ $this->assertTrue(array_key_exists('returnUrl', $urlArray));
86
+ $this->assertTrue(array_key_exists('errorUrl', $urlArray));
87
+ $this->assertTrue(array_key_exists('notifyUrl', $urlArray));
88
+ $this->assertTrue(array_key_exists('profile', $urlArray));
89
+
90
+ $this->assertEquals(1234, $urlArray['popupId']);
91
+ $this->assertEquals(100000011, $urlArray['jobId']);
92
+ $this->assertEquals(100000011, $urlArray['transactionId']);
93
+ $this->assertEquals(1190, $urlArray['amount']);
94
+ $this->assertEquals('EUR', $urlArray['currency']);
95
+ $this->assertEquals('expercashcc', $urlArray['paymentMethod']);
96
+ $this->assertEquals(
97
+ Mage::getUrl('expercash/expercash/success', array('_secure' => true)), $urlArray['returnUrl']
98
+ );
99
+ $this->assertEquals(Mage::getUrl('expercash/expercash/error', array('_secure' => true)), $urlArray['errorUrl']);
100
+ $this->assertEquals(
101
+ Mage::getUrl('expercash/expercash/notify', array('_secure' => true)), $urlArray['notifyUrl']
102
+ );
103
+ $this->assertEquals(12, $urlArray['profile']);
104
+
105
+
106
+ }
107
+
108
+ /**
109
+ * @loadFixture order
110
+ */
111
+ public function testGetTokenParamsWithBarzahlen()
112
+ {
113
+
114
+ $order = Mage::getModel('sales/order')->load(12);
115
+
116
+ $coreUrlModel = $this->getModelMock('core/url', array('getUseSession'));
117
+ $coreUrlModel->expects($this->any())
118
+ ->method('getUseSession')
119
+ ->will($this->returnValue(false));
120
+ $this->replaceByMock('model', 'core/url', $coreUrlModel);
121
+
122
+ $coreSessionMock = $this->getModelMock('core/session', array('init', 'start'));
123
+ $this->replaceByMock('model', 'core/session', $coreSessionMock);
124
+
125
+ $configMock = $this->getModelMock(
126
+ 'expercash/config', array(
127
+ 'getPopupId',
128
+ 'getConfigData',
129
+ 'getProfilId'
130
+ )
131
+ );
132
+
133
+ $configMock->expects($this->any())
134
+ ->method('getPopupId')
135
+ ->will($this->returnValue(1234));
136
+
137
+ $configMock->expects($this->any())
138
+ ->method('getConfigData')
139
+ ->will($this->returnValue('expercashpc'));
140
+
141
+ $configMock->expects($this->any())
142
+ ->method('getProfilId')
143
+ ->will($this->returnValue(12));
144
+ $this->replaceByMock('model', 'expercash/config', $configMock);
145
+
146
+ $checkoutMock = $this->getModelMock(
147
+ 'checkout/session', array(
148
+ 'getLastRealOrderId',
149
+ 'start',
150
+ 'init'
151
+ )
152
+ );
153
+ $checkoutMock->expects($this->any())
154
+ ->method('getLastRealOrderId')
155
+ ->will($this->returnValue(11));
156
+ $this->replaceByMock('model', 'checkout/session', $checkoutMock);
157
+
158
+ $modelMock = $this->getModelMock('expercash/request_token', array('calcCentAmount'));
159
+ $modelMock->expects($this->any())
160
+ ->method('calcCentAmount')
161
+ ->will($this->returnValue(1190));
162
+
163
+ $urlArray = $modelMock->getTokenParams($order);
164
+ $this->assertTrue(array_key_exists('customerPrename', $urlArray));
165
+ $this->assertTrue(array_key_exists('customerName', $urlArray));
166
+ $this->assertTrue(array_key_exists('customerAddress1', $urlArray));
167
+ $this->assertTrue(array_key_exists('customerZip', $urlArray));
168
+ $this->assertTrue(array_key_exists('customerCity', $urlArray));
169
+ $this->assertTrue(array_key_exists('customerCountry', $urlArray));
170
+ $this->assertTrue(array_key_exists('customerEmail', $urlArray));
171
+ $this->assertTrue(array_key_exists('updateUrl', $urlArray));
172
+
173
+ $this->assertEquals('Hubertus', $urlArray['customerPrename']);
174
+ $this->assertEquals('Fürstenberg', $urlArray['customerName']);
175
+ $this->assertEquals('An der Tabaksmühle 3a', $urlArray['customerAddress1']);
176
+ $this->assertEquals('04229', $urlArray['customerZip']);
177
+ $this->assertEquals('DE', $urlArray['customerCountry']);
178
+ $this->assertEquals('hubertus.von.fuerstenberg@trash-mail.com', $urlArray['customerEmail']);
179
+ $this->assertEquals(
180
+ Mage::getUrl('expercash/expercash/notify', array('_secure' => true)), $urlArray['updateUrl']
181
+ );
182
+
183
+
184
+ }
185
+
186
+
187
+ public function getTokenParams($session, $order, $paymentObject)
188
+ {
189
+ $config = $this->getConfig();
190
+ $code = $paymentObject->getCode();
191
+ $urlArray = Array(
192
+ 'popupId' => $config->getPopupId($order->getStoreId()),
193
+ 'jobId' => $session->getLastRealOrderId(),
194
+ 'transactionId' => $session->getLastRealOrderId(),
195
+ 'amount' => $this->calcCentAmount($order->getGrandTotal()),
196
+ 'currency' => $order->getOrderCurrencyCode(),
197
+ 'paymentMethod' => $config->getConfigData('paymenttype', $code, $order->getStoreId()),
198
+ 'returnUrl' => Mage::getUrl(
199
+ 'expercash/expercash/success', array('_secure' => true)
200
+ ),
201
+ 'errorUrl' => Mage::getUrl(
202
+ 'expercash/expercash/error', array('_secure' => true)
203
+ ),
204
+ 'notifyUrl' => Mage::getUrl(
205
+ 'expercash/expercash/notify', array('_secure' => true)
206
+ ),
207
+
208
+ 'profile' => $config->getProfilId($order->getStoreId()),
209
+ );
210
+
211
+ if ($paymentObject instanceof Expercash_Expercash_Model_Expercashpc) {
212
+ $urlArray = array_merge($this->getBarzahlenParams($order));
213
+ }
214
+ return $urlArray;
215
+ }
216
+
217
+ /**
218
+ * @loadFixture order
219
+ */
220
+ public function testGetBarzahlenParams()
221
+ {
222
+ $order = Mage::getModel('sales/order')->load(11);
223
+
224
+ $coreUrlModel = $this->getModelMock('core/url', array('getUrl'));
225
+ $coreUrlModel->expects($this->once())
226
+ ->method('getUrl')
227
+ ->will($this->returnValue('www.test.de'));
228
+ $this->replaceByMock('model', 'core/url', $coreUrlModel);
229
+
230
+ $barzahlenParams = $this->invokeMethod('getBarzahlenParams', array($order));
231
+ $this->assertTrue(array_key_exists('customerPrename', $barzahlenParams));
232
+ $this->assertTrue(array_key_exists('customerName', $barzahlenParams));
233
+ $this->assertTrue(array_key_exists('customerAddress1', $barzahlenParams));
234
+ $this->assertTrue(array_key_exists('customerZip', $barzahlenParams));
235
+ $this->assertTrue(array_key_exists('customerCity', $barzahlenParams));
236
+ $this->assertTrue(array_key_exists('customerCountry', $barzahlenParams));
237
+ $this->assertTrue(array_key_exists('customerEmail', $barzahlenParams));
238
+ $this->assertTrue(array_key_exists('updateUrl', $barzahlenParams));
239
+
240
+ $this->assertEquals('Hubertus', $barzahlenParams['customerPrename']);
241
+ $this->assertEquals('Fürstenberg', $barzahlenParams['customerName']);
242
+ $this->assertEquals('An der Tabaksmühle 3a', $barzahlenParams['customerAddress1']);
243
+ $this->assertEquals('04229', $barzahlenParams['customerZip']);
244
+ $this->assertEquals('DE', $barzahlenParams['customerCountry']);
245
+ $this->assertEquals('hubertus.von.fuerstenberg@trash-mail.com', $barzahlenParams['customerEmail']);
246
+ $this->assertEquals('www.test.de', $barzahlenParams['updateUrl']);
247
+ }
248
+
249
+ /**
250
+ * Call protected/private method of a class.
251
+ *
252
+ * @param object $object Instantiated object that we will run method on.
253
+ * @param string $methodName Method name to call
254
+ * @param array $parameters Array of parameters to pass into method.
255
+ *
256
+ * @return mixed Method return.
257
+ */
258
+ public function invokeMethod($methodName, array $parameters = array())
259
+ {
260
+ $object = Mage::getModel('expercash/request_token');
261
+ $reflection = new \ReflectionClass(get_class($object));
262
+ $method = $reflection->getMethod($methodName);
263
+ $method->setAccessible(true);
264
+ return $method->invokeArgs($object, $parameters);
265
+ }
266
+ }
app/code/community/Expercash/Expercash/Test/Model/Request/TokenTest/fixtures/order.yaml ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tables:
2
+
3
+ sales/order:
4
+ - entity_id: 11
5
+ increment_id: 100000011
6
+ billing_address_id: 42
7
+ base_grand_total: 119.00
8
+ grand_total: 119.00
9
+ order_currency_code: 'EUR'
10
+ customer_gender: 1
11
+ shipping_method: 'flatrate_flatrate'
12
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
13
+ state: 'pending_payment'
14
+ status: 'pending_payment'
15
+ quote_id: 23
16
+
17
+ - entity_id: 12
18
+ increment_id: 100000012
19
+ billing_address_id: 42
20
+ base_grand_total: 119.00
21
+ grand_total: 119.00
22
+ order_currency_code: 'EUR'
23
+ customer_gender: 1
24
+ shipping_method: 'flatrate_flatrate'
25
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
26
+ state: 'pending_payment'
27
+ status: 'pending_payment'
28
+ quote_id: 24
29
+
30
+
31
+ sales/order_payment:
32
+ - entity_id: 11
33
+ parent_id: 11
34
+ method: 'expercashcc'
35
+
36
+ - entity_id: 12
37
+ parent_id: 12
38
+ method: 'expercashpc'
39
+
40
+ sales/order_address:
41
+ - entity_id: 42
42
+ parent_id: 11
43
+ address_type: 'billing'
44
+ firstname: 'Hubertus'
45
+ postcode: '04229'
46
+ lastname: 'Fürstenberg'
47
+ street: 'An der Tabaksmühle 3a'
48
+ city: 'Leipzig'
49
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
50
+ country_id: 'DE'
51
+ prefix: 'Prof. Dr.'
52
+ middlename: 'von'
53
+ suffix: 'MdL'
54
+ company: ''
55
+ fax: 12345678
56
+
57
+ - entity_id: 43
58
+ parent_id: 12
59
+ address_type: 'billing'
60
+ firstname: 'Hubertus'
61
+ postcode: '04229'
62
+ lastname: 'Fürstenberg'
63
+ street: 'An der Tabaksmühle 3a'
64
+ city: 'Leipzig'
65
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
66
+ country_id: 'DE'
67
+ prefix: 'Prof. Dr.'
68
+ middlename: 'von'
69
+ suffix: 'MdL'
70
+ company: ''
71
+ fax: 12345678
app/code/community/Expercash/Expercash/Test/var/expectations/orders.yaml ADDED
@@ -0,0 +1 @@
 
1
+ url:"https://epi.expercash.net/epi_popup2.php?popupId=foo&jobId=11&transactionId=11&amount=11900&currency=&paymentMethod=foo&returnUrl=http%3A%2F%2Fser-dev.magento.nrdev.de%2Findex.php%2Fexpercash%2Fexpercash%2Fsuccess%2F&errorUrl=http%3A%2F%2Fser-dev.magento.nrdev.de%2Findex.php%2Fexpercash%2Fexpercash%2Ferror%2F&notifyUrl=http%3A%2F%2Fser-dev.magento.nrdev.de%2Findex.php%2Fexpercash%2Fexpercash%2Fnotify%2F&profile=foo&popupKey=fdb64dabed0a4894bed2ec718da2856d&cssUrl=foo&language=en"
app/code/community/Expercash/Expercash/Test/var/fixtures/orders.yaml ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tables:
2
+ sales/order:
3
+
4
+ - entity_id: 11
5
+ increment_id: 100000011
6
+ shipping_address_id: 42
7
+ base_grand_total: 119.00
8
+ grand_total: 119.00
9
+ currency: 'EUR'
10
+ customer_gender: 1
11
+ shipping_method: 'flatrate_flatrate'
12
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
13
+ state: 'pending_payment'
14
+ status: 'pending_payment'
15
+ quote_id: 20
16
+
17
+ - entity_id: 2
18
+ increment_id: 100000055
19
+ quote_id: 2
20
+ shipping_address_id: 42
21
+ base_grand_total: 119.00
22
+ grand_total: 119.00
23
+ currency: 'EUR'
24
+ customer_gender: 1
25
+ shipping_method: 'flatrate_flatrate'
26
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
27
+
28
+ - entity_id: 3
29
+ increment_id: 100000055
30
+ quote_id: 3
31
+ shipping_address_id: 42
32
+ base_grand_total: 119.00
33
+ grand_total: 119.00
34
+ currency: 'EUR'
35
+ customer_gender: 1
36
+ shipping_method: 'flatrate_flatrate'
37
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
38
+
39
+ sales/quote:
40
+ - entity_id: 20
41
+ parent_id: 11
42
+
43
+ sales/order_payment:
44
+ - entity_id: 11
45
+ parent_id: 11
46
+ method: 'expercashcc'
47
+
48
+ sales/quote_payment:
49
+ - entity_id: 11
50
+ parent_id: 20
51
+ quote_id: 20
52
+ method: 'expercashcc'
53
+ expercash_request_type: 'cc_authorize'
app/code/community/Expercash/Expercash/Test/var/fixtures/quote.yaml ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tables:
2
+ sales/quote:
3
+
4
+ - entity_id: 1
5
+ store_id: 1
6
+ base_grand_total: 119.00
7
+ grand_total: 119.00
8
+ quote_currency_code: 'EUR'
9
+ customer_gender: 1
10
+ shipping_method: 'flatrate_flatrate'
11
+
12
+ - entity_id: 2
13
+ base_grand_total: 119.00
14
+ grand_total: 200.00
15
+ currency: '$'
16
+ customer_gender: 1
17
+ shipping_method: 'flatrate_flatrate'
18
+
19
+ - entity_id: 3
20
+ base_grand_total: 119.00
21
+ grand_total: 200.00
22
+ currency: '$'
23
+ customer_gender: 1
24
+ shipping_method: 'flatrate_flatrate'
25
+
26
+ - entity_id: 4
27
+ base_grand_total: 119.00
28
+ grand_total: 200.00
29
+ currency: 'EUR'
30
+ customer_gender: 1
31
+ shipping_method: 'flatrate_flatrate'
32
+
33
+ - entity_id: 5
34
+ base_grand_total: 119.00
35
+ grand_total: 1200.00
36
+ currency: 'EUR'
37
+ customer_gender: 1
38
+ shipping_method: 'flatrate_flatrate'
39
+
40
+ sales/quote_payment:
41
+
42
+ - id: 1
43
+ entity_id: 1
44
+ parent_id: 1
45
+ quote_id: 1
46
+ method: 'expercashpc'
47
+
48
+ sales/quote_address:
49
+
50
+ - entity_id: 1
51
+ quote_id: 1
52
+ address_type: 'billing'
53
+ firstname: 'Hubertus'
54
+ postcode: '04229'
55
+ lastname: 'Fürstenberg'
56
+ street: 'An der Tabaksmühle 3a'
57
+ city: 'Leipzig'
58
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
59
+ country_id: 'DE'
60
+ prefix: 'Prof. Dr.'
61
+ middlename: 'von'
62
+ suffix: 'MdL'
63
+ company: ''
64
+ fax: 12345678
65
+
66
+ - entity_id: 2
67
+ quote_id: 4
68
+ address_type: 'billing'
69
+ firstname: 'Hubertus'
70
+ postcode: '04229'
71
+ lastname: 'Fürstenberg'
72
+ street: 'An der Tabaksmühle 3a'
73
+ city: 'Leipzig'
74
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
75
+ country_id: 'CH'
76
+ prefix: 'Prof. Dr.'
77
+ middlename: 'von'
78
+ suffix: 'MdL'
79
+ company: ''
80
+ fax: 12345678
81
+
82
+ - entity_id: 3
83
+ quote_id: 5
84
+ address_type: 'billing'
85
+ firstname: 'Hubertus'
86
+ postcode: '04229'
87
+ lastname: 'Fürstenberg'
88
+ street: 'An der Tabaksmühle 3a'
89
+ city: 'Leipzig'
90
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
91
+ country_id: 'DE'
92
+ prefix: 'Prof. Dr.'
93
+ middlename: 'von'
94
+ suffix: 'MdL'
95
+ company: ''
96
+ fax: 12345678
app/code/community/Expercash/Expercash/controllers/Checkout/OnepageController.php ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ require_once 'Mage/Checkout/controllers/OnepageController.php';
23
+
24
+ /**
25
+ * Expercash_Expercash_Checkout_OnepageController
26
+ */
27
+ class Expercash_Expercash_Checkout_OnepageController
28
+ extends Mage_Checkout_OnepageController
29
+ {
30
+ protected function getAddressKeys()
31
+ {
32
+ return array(
33
+ 'email',
34
+ 'prefix',
35
+ 'firstname',
36
+ 'middlename',
37
+ 'lastname',
38
+ 'suffix',
39
+ 'company',
40
+ 'street',
41
+ 'city',
42
+ 'region',
43
+ 'region_id',
44
+ 'postcode',
45
+ 'country_id',
46
+ 'telephone',
47
+ 'fax',
48
+ 'same_as_billing',
49
+ );
50
+ }
51
+
52
+ public function shippingMethodsAction()
53
+ {
54
+ $result = array();
55
+
56
+ $result['goto_section'] = 'shipping_method';
57
+ $result['update_section'] = array(
58
+ 'name' => 'shipping-method',
59
+ 'html' => $this->_getShippingMethodsHtml()
60
+ );
61
+
62
+ $result['allow_sections'] = array('shipping');
63
+
64
+ $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
65
+ }
66
+
67
+ public function addressesAction()
68
+ {
69
+ $addresses = array();
70
+
71
+ $billingAddress = $this->getOnepage()->getQuote()->getBillingAddress();
72
+ $billingAddress->explodeStreetAddress();
73
+
74
+ $shippingAddress = $this->getOnepage()->getQuote()->getShippingAddress();
75
+ $shippingAddress->explodeStreetAddress();
76
+
77
+ $addressKeys = $this->getAddressKeys();
78
+ foreach ($billingAddress->getStreet() as $i => $line) {
79
+ $addressKeys[] = sprintf('street%d', $i + 1);
80
+ }
81
+
82
+ $addresses['billing'] = $billingAddress->toArray($addressKeys);
83
+ $addresses['billing']['use_for_shipping_yes'] = false;
84
+ $addresses['billing']['use_for_shipping_no'] = true;
85
+ $addresses['shipping'] = $shippingAddress->toArray($addressKeys);
86
+
87
+ $this->getResponse()->setHeader('Content-type', 'application/x-json');
88
+ $this->getResponse()->setBody(Mage::helper('core/data')->jsonEncode($addresses));
89
+ }
90
+
91
+ public function validateAddressesAction()
92
+ {
93
+ $result = array();
94
+
95
+ /** @var $quote Mage_Sales_Model_Quote */
96
+ $quote = $this->getOnePage()->getQuote();
97
+ $methodInstance = $quote->getPayment()->getMethodInstance();
98
+
99
+ if ($methodInstance instanceof Expercash_Expercash_Model_Expercashmpf) {
100
+ if (true !== $quote->getBillingAddress()->validate()) {
101
+ $result['error'] = true;
102
+ $result['goto_section'] = 'billing';
103
+ } elseif (true !== $quote->getShippingAddress()->validate()) {
104
+ $result['error'] = true;
105
+ $result['goto_section'] = 'shipping';
106
+ }
107
+ }
108
+
109
+ $this->getResponse()
110
+ ->setHeader('Content-type', 'application/json')
111
+ ->setBody(Mage::helper('core')->jsonEncode($result));
112
+ }
113
+ }
app/code/community/Expercash/Expercash/controllers/ExpercashController.php ADDED
@@ -0,0 +1,185 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+ class Expercash_Expercash_ExpercashController extends Mage_Core_Controller_Front_Action
24
+ {
25
+
26
+
27
+ private $paymentHelper = null;
28
+
29
+ public function setPaymentHelper($paymentHelper)
30
+ {
31
+ $this->paymentHelper = $paymentHelper;
32
+ }
33
+
34
+ /**
35
+ * @return Expercash_Expercash_Helper_Payment
36
+ */
37
+ public function getPaymentHelper()
38
+ {
39
+ if (null === $this->paymentHelper) {
40
+ $this->paymentHelper = Mage::helper('expercash/payment');
41
+ }
42
+ return $this->paymentHelper;
43
+ }
44
+
45
+ /**
46
+ * Get singleton of Checkout Session Model
47
+ *
48
+ * @return Mage_Checkout_Model_Session
49
+ */
50
+ public function getCheckout()
51
+ {
52
+ return Mage::getSingleton('checkout/session');
53
+ }
54
+
55
+ /**
56
+ * when customer select ExperCash payment method
57
+ */
58
+ public function indexAction()
59
+ {
60
+ if (!$session = $this->getCheckout()) {
61
+ $this->_redirect('checkout/cart/');
62
+ return;
63
+ }
64
+
65
+ $this->loadLayout();
66
+ $this->getLayout()->getBlock('expercash');
67
+ $this->renderLayout();
68
+ }
69
+
70
+ /**
71
+ * ExperCash
72
+ */
73
+ public function resetAction()
74
+ {
75
+ if (!$session = $this->getCheckout()) {
76
+ $this->_redirect('checkout/cart/');
77
+ return;
78
+ }
79
+ //Load Order
80
+ $order = Mage::getModel('sales/order');
81
+ $order->loadByIncrementId($session->getLastRealOrderId());
82
+
83
+ //Reset Status of Order once
84
+ $order->addStatusToHistory(
85
+ Mage_Sales_Model_Order::STATE_HOLDED,
86
+ Mage::helper('expercash')->__('ExperCash payment loaded')
87
+ );
88
+ $order->save();
89
+
90
+ Mage::helper('expercash/data')->log(
91
+ sprintf(
92
+ "Order '%s' was resetted by ExperCash Request",
93
+ $order->getIncrementId()
94
+ )
95
+ );
96
+
97
+ //Redirect to indexAction
98
+ $this->_redirect('expercash/expercash/');
99
+ }
100
+
101
+ /**
102
+ * ExperCash returns POST variables to this action
103
+ */
104
+ public function successAction()
105
+ {
106
+ $session = $this->getCheckout();
107
+ $session->unsExpercashOrderId();
108
+ $session->unsExpercashRealOrderId();
109
+ $session->setQuoteId($session->getExpercashQuoteId(true));
110
+ $session->getQuote()->setIsActive(false)->save();
111
+
112
+ Mage::helper('expercash/data')->log(
113
+ sprintf(
114
+ "User arrived on successAction with params:\n%s",
115
+ Zend_Json::encode($this->getRequest()->getParams())
116
+ )
117
+ );
118
+ $this->_redirect('checkout/onepage/success');
119
+ }
120
+
121
+ /**
122
+ * ExperCash returns POST variables to this action
123
+ */
124
+ public function notifyAction()
125
+ {
126
+ Mage::helper('expercash/data')->log(
127
+ sprintf(
128
+ "notifyAction was called with params:\n%s",
129
+ Zend_Json::encode($this->getRequest()->getParams())
130
+ )
131
+ );
132
+ $response = $this->getRequest()->getParams();
133
+ $status = $this->_checkReturnedData($response);
134
+
135
+ $order = Mage::getModel('sales/order');
136
+ $order->loadByIncrementId($response['transactionId']);
137
+ if ($status) {
138
+ $session = $this->getCheckout();
139
+ $session->unsExpercashOrderId();
140
+ $session->unsExpercashRealOrderId();
141
+ $session->setQuoteId($session->getExpercashQuoteId(true));
142
+ $session->getQuote()->setIsActive(false)->save();
143
+ }
144
+
145
+ }
146
+
147
+ /**
148
+ * on error expcerash calls this action
149
+ * refill cart on error
150
+ */
151
+ public function errorAction()
152
+ {
153
+ //Load Checkout session
154
+ if (!$session = $this->getCheckout()) {
155
+ $this->_redirect('checkout/cart/');
156
+ return;
157
+ }
158
+
159
+ //Load Order
160
+ $order = Mage::getModel('sales/order');
161
+ $order->loadByIncrementId($session->getLastRealOrderId());
162
+
163
+ //Refill the cart with the same items like for the canceled order
164
+ Mage::helper('expercash/data')->refillCart($order);
165
+
166
+ $this->loadLayout();
167
+ $this->getLayout()->getBlock('expercash');
168
+ $this->renderLayout();
169
+ }
170
+
171
+ /**
172
+ * Checking Get variables.
173
+ *
174
+ */
175
+ protected function _checkReturnedData($response)
176
+ {
177
+ $status = false;
178
+ if (!$this->getRequest()->isGet()) {
179
+ $this->norouteAction();
180
+ return;
181
+ }
182
+ $status = $this->getPaymentHelper()->checkReturnedData($response);
183
+ return $status;
184
+ }
185
+ }
app/code/community/Expercash/Expercash/controllers/FullcheckoutController.php ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+ class Expercash_Expercash_FullcheckoutController extends Mage_Core_Controller_Front_Action
24
+ {
25
+
26
+
27
+ /**
28
+ * Get singleton of Checkout Session Model
29
+ *
30
+ * @return Mage_Checkout_Model_Session
31
+ */
32
+ protected function getCheckout()
33
+ {
34
+ return Mage::getSingleton('checkout/session');
35
+ }
36
+
37
+ public function startAction()
38
+ {
39
+ $quote = $this->getCheckout()->getQuote();
40
+ $quote->reserveOrderId()->save();
41
+ $quote->collectTotals();
42
+
43
+ $requestParams = Mage::getModel('expercash/request_masterpass_epi')->getEpiParams($quote);
44
+ $epiClient = Mage::getModel('expercash/api_masterpass_epi');
45
+
46
+
47
+ try {
48
+ $response = $epiClient->doEpiRequest($requestParams);
49
+
50
+ // validate response rc
51
+ $epiClient->validateResponse($response);
52
+
53
+ // save taid and response timestamp to session
54
+ $this->getMasterpassHelper()->saveDataToMasterpassSession('taid', $response['taid']);
55
+ $this->getMasterpassHelper()->saveDataToMasterpassSession('timestamp', time());
56
+
57
+ $redirectUrl = $response['masterpass_sign_in_url'];
58
+
59
+ } catch (Exception $e) {
60
+ Mage::getModel('core/session')->addError(
61
+ Mage::helper('expercash/data')->__(
62
+ 'Invalid response from Expercash. Please use default checkout.'
63
+ )
64
+ );
65
+ Mage::helper('expercash/data')->log($e->getMessage());
66
+ $redirectUrl = $this->_getRefererUrl();
67
+ }
68
+
69
+
70
+ // redirect to provided masterpass url
71
+ $this->_redirectUrl($redirectUrl);
72
+
73
+
74
+ }
75
+
76
+
77
+ public function successAction()
78
+ {
79
+ $params = $this->getRequest()->getParams();
80
+ $mpHelper = $this->getMasterpassHelper();
81
+
82
+ try {
83
+
84
+ $mpHelper->validateParams($params);
85
+ $mpHelper->validateAndSaveGutId($params);
86
+ $mpHelper->setBillingDataToQuoteAndSession($params);
87
+ $mpHelper->setShippingDataToQuote($params);
88
+ $mpHelper->initOnePageCheckout();
89
+ $mpHelper->saveEpiResponseOnPayment($params);
90
+
91
+ } catch (Exception $e) {
92
+
93
+ Mage::helper('expercash/data')->log($e->getMessage());
94
+ }
95
+
96
+ $this->_redirect('checkout/onepage/index/');
97
+
98
+ }
99
+
100
+ public function errorAction()
101
+ {
102
+ //Load Checkout session
103
+ if (!$session = $this->getCheckout()) {
104
+ $this->_redirect('checkout/cart/');
105
+ return;
106
+ }
107
+
108
+ Mage::getModel('core/session')->addError(
109
+ Mage::helper('expercash/data')->__(
110
+ 'Operation canceled.'
111
+ )
112
+ );
113
+
114
+ //Load Order
115
+ $order = Mage::getModel('sales/order');
116
+
117
+ $order->loadByIncrementId($session->getLastRealOrderId());
118
+
119
+ //Refill the cart with the same items like for the canceled order
120
+ Mage::helper('expercash/data')->refillCart($order);
121
+
122
+ $this->_redirect('checkout/cart/');
123
+ }
124
+
125
+
126
+ /**
127
+ * @return Expercash_Expercash_Model_Masterpass_Config
128
+ */
129
+ protected function getMasterpassConfig()
130
+ {
131
+ return Mage::getModel('expercash/masterpass_config');
132
+ }
133
+
134
+
135
+ /**
136
+ * @return Expercash_Expercash_Helper_Masterpass
137
+ */
138
+ protected function getMasterpassHelper()
139
+ {
140
+ return Mage::helper('expercash/masterpass');
141
+ }
142
+
143
+ }
app/code/community/Expercash/Expercash/etc/config.xml ADDED
@@ -0,0 +1,363 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+ -->
24
+ <config>
25
+ <modules>
26
+ <Expercash_Expercash>
27
+ <version>15.05.06</version>
28
+ </Expercash_Expercash>
29
+ </modules>
30
+ <global>
31
+ <blocks>
32
+ <expercash>
33
+ <class>Expercash_Expercash_Block</class>
34
+ </expercash>
35
+ </blocks>
36
+ <helpers>
37
+ <expercash>
38
+ <class>Expercash_Expercash_Helper</class>
39
+ </expercash>
40
+ </helpers>
41
+ <models>
42
+ <expercash>
43
+ <class>Expercash_Expercash_Model</class>
44
+ <resourceModel>expercash_resource</resourceModel>
45
+ </expercash>
46
+ <expercash_resource>
47
+ <class>Expercash_Expercash_Model_Resource</class>
48
+ </expercash_resource>
49
+ </models>
50
+ <resources>
51
+ <expercash_setup>
52
+ <setup>
53
+ <module>Expercash_Expercash</module>
54
+ <class>Expercash_Expercash_Model_Entity_Setup</class>
55
+ </setup>
56
+ <connection>
57
+ <use>core_setup</use>
58
+ </connection>
59
+ </expercash_setup>
60
+ <expercash_write>
61
+ <connection>
62
+ <use>core_write</use>
63
+ </connection>
64
+ </expercash_write>
65
+ <expercash_read>
66
+ <connection>
67
+ <use>core_read</use>
68
+ </connection>
69
+ </expercash_read>
70
+ </resources>
71
+ <payment>
72
+ <groups>
73
+ <expercash>ExperCash</expercash>
74
+ </groups>
75
+ </payment>
76
+ <events>
77
+ <controller_action_layout_render_before_checkout_onepage_index>
78
+ <observers>
79
+ <masterpass_fullcheckout>
80
+ <class>expercash/observer</class>
81
+ <method>setStepData</method>
82
+ </masterpass_fullcheckout>
83
+ </observers>
84
+ </controller_action_layout_render_before_checkout_onepage_index>
85
+ <sales_order_place_before>
86
+ <observers>
87
+ <masterpass_fullcheckout>
88
+ <class>expercash/observer</class>
89
+ <method>validateMasterpassSession</method>
90
+ </masterpass_fullcheckout>
91
+ </observers>
92
+ </sales_order_place_before>
93
+ <payment_method_is_active>
94
+ <observers>
95
+ <masterpass_fullcheckout>
96
+ <class>expercash/observer</class>
97
+ <method>setPaymentAvailable</method>
98
+ </masterpass_fullcheckout>
99
+ </observers>
100
+ </payment_method_is_active>
101
+ <checkout_cart_save_after>
102
+ <observers>
103
+ <masterpass_fullcheckout>
104
+ <class>expercash/observer</class>
105
+ <method>invalidateMasterpassSession</method>
106
+ </masterpass_fullcheckout>
107
+ </observers>
108
+ </checkout_cart_save_after>
109
+ </events>
110
+ </global>
111
+ <adminhtml>
112
+ <translate>
113
+ <modules>
114
+ <Expercash_Expercash>
115
+ <files>
116
+ <default>Expercash_Expercash.csv</default>
117
+ </files>
118
+ </Expercash_Expercash>
119
+ </modules>
120
+ </translate>
121
+ </adminhtml>
122
+ <frontend>
123
+ <secure_url>
124
+ <expercash_expercash>/expercash/expercash/</expercash_expercash>
125
+ </secure_url>
126
+ <translate>
127
+ <modules>
128
+ <Expercash_Expercash>
129
+ <files>
130
+ <default>Expercash_Expercash.csv</default>
131
+ </files>
132
+ </Expercash_Expercash>
133
+ </modules>
134
+ </translate>
135
+ <routers>
136
+ <expercash>
137
+ <use>standard</use>
138
+ <args>
139
+ <module>Expercash_Expercash</module>
140
+ <frontName>expercash</frontName>
141
+ </args>
142
+ </expercash>
143
+ </routers>
144
+ <secure_url>
145
+ <expercash>/expercash/</expercash>
146
+ </secure_url>
147
+ <layout>
148
+ <updates>
149
+ <expercash>
150
+ <file>expercash.xml</file>
151
+ </expercash>
152
+ </updates>
153
+ </layout>
154
+ </frontend>
155
+
156
+ <default>
157
+ <payment>
158
+ <expercashelv>
159
+ <active>0</active>
160
+ <debug>1</debug>
161
+ <model>expercash/expercashelv</model>
162
+ <order_status>1</order_status>
163
+ <title>Lastschriftverfahren</title>
164
+ <allowspecific>0</allowspecific>
165
+ <allowed_currency>EUR</allowed_currency>
166
+ <paymenttype></paymenttype>
167
+ <popupid></popupid>
168
+ <profile></profile>
169
+ <authorizationkey></authorizationkey>
170
+ <paymentkey></paymentkey>
171
+ <projectid></projectid>
172
+ <group>expercash</group>
173
+ <!--
174
+ <returnurl></returnurl>
175
+ <errorurl></errorurl>
176
+ <notifyurl></notifyurl>-->
177
+ <iframecss></iframecss>
178
+ <iframewidth></iframewidth>
179
+ <iframeheight></iframeheight>
180
+ <cssurl></cssurl>
181
+ <createinvoice>0</createinvoice>
182
+ <payment_action>authorize</payment_action>
183
+ </expercashelv>
184
+ <expercashcc>
185
+ <active>0</active>
186
+ <debug>1</debug>
187
+ <model>expercash/expercashcc</model>
188
+ <order_status>1</order_status>
189
+ <title>Kreditkarte</title>
190
+ <allowspecific>0</allowspecific>
191
+ <allowed_currency>EUR,USD</allowed_currency>
192
+ <paymenttype></paymenttype>
193
+ <popupid></popupid>
194
+ <profile></profile>
195
+ <authorizationkey></authorizationkey>
196
+ <paymentkey></paymentkey>
197
+ <projectid></projectid>
198
+ <group>expercash</group>
199
+ <!--
200
+ <returnurl></returnurl>
201
+ <errorurl></errorurl>
202
+ <notifyurl></notifyurl>-->
203
+ <iframecss></iframecss>
204
+ <iframewidth></iframewidth>
205
+ <iframeheight></iframeheight>
206
+ <cssurl></cssurl>
207
+ <createinvoice>0</createinvoice>
208
+ <payment_action>authorize</payment_action>
209
+ </expercashcc>
210
+ <expercashso>
211
+ <active>0</active>
212
+ <debug>1</debug>
213
+ <model>expercash/expercashso</model>
214
+ <order_status>1</order_status>
215
+ <title>Sofortueberweisung</title>
216
+ <allowspecific>0</allowspecific>
217
+ <allowed_currency>EUR</allowed_currency>
218
+ <paymenttype></paymenttype>
219
+ <popupid></popupid>
220
+ <profile></profile>
221
+ <authorizationkey></authorizationkey>
222
+ <paymentkey></paymentkey>
223
+ <projectid></projectid>
224
+ <group>expercash</group>
225
+ <!--
226
+ <returnurl></returnurl>
227
+ <errorurl></errorurl>
228
+ <notifyurl></notifyurl>-->
229
+ <iframecss></iframecss>
230
+ <iframewidth></iframewidth>
231
+ <iframeheight></iframeheight>
232
+ <cssurl></cssurl>
233
+ <createinvoice>0</createinvoice>
234
+ <payment_action>authorize</payment_action>
235
+ </expercashso>
236
+ <expercashgp>
237
+ <active>0</active>
238
+ <debug>1</debug>
239
+ <model>expercash/expercashgp</model>
240
+ <order_status>1</order_status>
241
+ <title>giropay</title>
242
+ <allowspecific>0</allowspecific>
243
+ <allowed_currency>EUR</allowed_currency>
244
+ <paymenttype></paymenttype>
245
+ <popupid></popupid>
246
+ <profile></profile>
247
+ <authorizationkey></authorizationkey>
248
+ <paymentkey></paymentkey>
249
+ <projectid></projectid>
250
+ <group>expercash</group>
251
+ <!--
252
+ <returnurl></returnurl>
253
+ <errorurl></errorurl>
254
+ <notifyurl></notifyurl>-->
255
+ <iframecss></iframecss>
256
+ <iframewidth></iframewidth>
257
+ <iframeheight></iframeheight>
258
+ <cssurl></cssurl>
259
+ <createinvoice>0</createinvoice>
260
+ <payment_action>authorize</payment_action>
261
+ </expercashgp>
262
+ <expercashpc>
263
+ <active>0</active>
264
+ <debug>1</debug>
265
+ <model>expercash/expercashpc</model>
266
+ <order_status>1</order_status>
267
+ <title>Barzahlen</title>
268
+ <allowspecific>1</allowspecific>
269
+ <specificcountry>DE</specificcountry>
270
+ <allowed_currency>EUR</allowed_currency>
271
+ <paymenttype>barzahlen</paymenttype>
272
+ <popupid></popupid>
273
+ <profile></profile>
274
+ <authorizationkey></authorizationkey>
275
+ <paymentkey></paymentkey>
276
+ <projectid></projectid>
277
+ <group>expercash</group>
278
+ <iframecss></iframecss>
279
+ <iframewidth></iframewidth>
280
+ <iframeheight></iframeheight>
281
+ <cssurl></cssurl>
282
+ <createinvoice>0</createinvoice>
283
+ <payment_action>authorize</payment_action>
284
+ </expercashpc>
285
+
286
+ <expercashmp>
287
+ <active>0</active>
288
+ <debug>1</debug>
289
+ <show_logo>1</show_logo>
290
+ <mp_learnmore_url>https://www.mastercard.com/mc_us/wallet/learnmore</mp_learnmore_url>
291
+ <model>expercash/expercashmp</model>
292
+ <order_status>1</order_status>
293
+ <title>Masterpass</title>
294
+ <allowspecific>0</allowspecific>
295
+ <allowed_currency>EUR,USD</allowed_currency>
296
+ <paymenttype></paymenttype>
297
+ <popupid></popupid>
298
+ <profile></profile>
299
+ <authorizationkey></authorizationkey>
300
+ <paymentkey></paymentkey>
301
+ <projectid></projectid>
302
+ <group>expercash</group>
303
+ <!--
304
+ <returnurl></returnurl>
305
+ <errorurl></errorurl>
306
+ <notifyurl></notifyurl>-->
307
+ <iframecss></iframecss>
308
+ <iframewidth></iframewidth>
309
+ <iframeheight></iframeheight>
310
+ <cssurl></cssurl>
311
+ <createinvoice>0</createinvoice>
312
+ <payment_action>authorize</payment_action>
313
+ </expercashmp>
314
+
315
+ <expercashmpf>
316
+ <active>0</active>
317
+ <debug>1</debug>
318
+ <show_button_in_cart>1</show_button_in_cart>
319
+ <show_button_in_mini_cart>1</show_button_in_mini_cart>
320
+ <show_learn_more_link>1</show_learn_more_link>
321
+ <mp_learnmore_url>https://www.mastercard.com/mc_us/wallet/learnmore</mp_learnmore_url>
322
+ <model>expercash/expercashmpf</model>
323
+ <order_status>pending</order_status>
324
+ <title>Masterpass Full Checkout</title>
325
+ <allowspecific>0</allowspecific>
326
+ <allowed_currency>EUR,USD</allowed_currency>
327
+ <checkout_text><![CDATA[With MasterPass, you can use the stored payment and shipping information from your MasterPass account to buy quickly, safely and easily. If you do not have a MasterPass Wallet yet, please contact your bank.]]></checkout_text>
328
+ <popupid></popupid>
329
+ <profile></profile>
330
+ <authorizationkey></authorizationkey>
331
+ <paymentkey></paymentkey>
332
+ <projectid></projectid>
333
+ <group>expercash</group>
334
+ <iframecss></iframecss>
335
+ <iframewidth></iframewidth>
336
+ <iframeheight></iframeheight>
337
+ <cssurl></cssurl>
338
+ <payment_action>authorize</payment_action>
339
+ </expercashmpf>
340
+
341
+ </payment>
342
+ <iframe_token_url>
343
+ <url>https://epi.expercash.net/iframe/post/v25/</url>
344
+ </iframe_token_url>
345
+ <epi_url>
346
+ <url>https://epi.expercash.net</url>
347
+ </epi_url>
348
+ <iframe_url>
349
+ <url>https://epi.expercash.net/epi_popup2.php</url>
350
+ </iframe_url>
351
+ <additionalPaymentParams>
352
+ <params>owner,maskedPan,cardScheme,validThru,panCountry,ipCountry,attemptsTotal,attemptsSameAction,3dsStatus,paymentStatus</params>
353
+ </additionalPaymentParams>
354
+
355
+ </default>
356
+ <phpunit>
357
+ <suite>
358
+ <modules>
359
+ <Expercash_Expercash/>
360
+ </modules>
361
+ </suite>
362
+ </phpunit>
363
+ </config>
app/code/community/Expercash/Expercash/etc/system.xml ADDED
@@ -0,0 +1,861 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+ -->
24
+ <config>
25
+ <sections>
26
+ <payment_services>
27
+ <groups>
28
+ <expercash translate="label,comment" module="expercash">
29
+ <label>Expercash</label>
30
+ <frontend_type>text</frontend_type>
31
+ <sort_order>0</sort_order>
32
+ <show_in_default>1</show_in_default>
33
+ <show_in_website>1</show_in_website>
34
+ <show_in_store>1</show_in_store>
35
+ <fields>
36
+ <popup_id translate="label">
37
+ <label>Popup Id (popupId)</label>
38
+ <frontend_type>text</frontend_type>
39
+ <sort_order>64</sort_order>
40
+ <show_in_default>1</show_in_default>
41
+ <show_in_website>1</show_in_website>
42
+ <show_in_store>1</show_in_store>
43
+ </popup_id>
44
+ <profil_id translate="label">
45
+ <label>Profile</label>
46
+ <frontend_type>text</frontend_type>
47
+ <sort_order>128</sort_order>
48
+ <show_in_default>1</show_in_default>
49
+ <show_in_website>1</show_in_website>
50
+ <show_in_store>1</show_in_store>
51
+ </profil_id>
52
+ <authorization_key translate="label">
53
+ <label>Authorizationkey (IFrame)</label>
54
+ <frontend_type>text</frontend_type>
55
+ <sort_order>256</sort_order>
56
+ <show_in_default>1</show_in_default>
57
+ <show_in_website>1</show_in_website>
58
+ <show_in_store>1</show_in_store>
59
+ </authorization_key>
60
+ <gateway_key translate="label">
61
+ <label>Paymentkey (API)</label>
62
+ <frontend_type>text</frontend_type>
63
+ <sort_order>564</sort_order>
64
+ <show_in_default>1</show_in_default>
65
+ <show_in_website>1</show_in_website>
66
+ <show_in_store>1</show_in_store>
67
+ </gateway_key>
68
+ <project_id translate="label">
69
+ <label>Project Id (IFrame)</label>
70
+ <frontend_type>text</frontend_type>
71
+ <sort_order>1024</sort_order>
72
+ <show_in_default>1</show_in_default>
73
+ <show_in_website>1</show_in_website>
74
+ <show_in_store>1</show_in_store>
75
+ </project_id>
76
+ <iframe_css_class translate="label">
77
+ <label>Iframe css class</label>
78
+ <frontend_type>text</frontend_type>
79
+ <sort_order>16384</sort_order>
80
+ <show_in_default>1</show_in_default>
81
+ <show_in_website>1</show_in_website>
82
+ <show_in_store>1</show_in_store>
83
+ </iframe_css_class>
84
+ <iframe_width translate="label">
85
+ <label>Iframe width</label>
86
+ <frontend_type>text</frontend_type>
87
+ <sort_order>32768</sort_order>
88
+ <show_in_default>1</show_in_default>
89
+ <show_in_website>1</show_in_website>
90
+ <show_in_store>1</show_in_store>
91
+ </iframe_width>
92
+ <iframe_height translate="label">
93
+ <label>Iframe height</label>
94
+ <frontend_type>text</frontend_type>
95
+ <sort_order>65536</sort_order>
96
+ <show_in_default>1</show_in_default>
97
+ <show_in_website>1</show_in_website>
98
+ <show_in_store>1</show_in_store>
99
+ </iframe_height>
100
+ <css_url translate="label">
101
+ <label>CSS file url (https!)</label>
102
+ <frontend_type>text</frontend_type>
103
+ <sort_order>131072</sort_order>
104
+ <show_in_default>1</show_in_default>
105
+ <show_in_website>1</show_in_website>
106
+ <show_in_store>1</show_in_store>
107
+ </css_url>
108
+ </fields>
109
+
110
+ </expercash>
111
+ </groups>
112
+ </payment_services>
113
+ <payment>
114
+ <groups>
115
+ <expercashelv translate="label" module="expercash">
116
+ <label>ExperCash (ELV)</label>
117
+ <frontend_type>text</frontend_type>
118
+ <sort_order>0</sort_order>
119
+ <show_in_default>1</show_in_default>
120
+ <show_in_website>1</show_in_website>
121
+ <show_in_store>1</show_in_store>
122
+ <fields>
123
+ <active translate="label">
124
+ <label>Enabled</label>
125
+ <frontend_type>select</frontend_type>
126
+ <source_model>adminhtml/system_config_source_yesno</source_model>
127
+ <sort_order>1</sort_order>
128
+ <show_in_default>1</show_in_default>
129
+ <show_in_website>1</show_in_website>
130
+ <show_in_store>1</show_in_store>
131
+ </active>
132
+ <order_status translate="label">
133
+ <label>New order status</label>
134
+ <frontend_type>select</frontend_type>
135
+ <source_model>adminhtml/system_config_source_order_status</source_model>
136
+ <sort_order>2</sort_order>
137
+ <show_in_default>1</show_in_default>
138
+ <show_in_website>1</show_in_website>
139
+ <show_in_store>1</show_in_store>
140
+ </order_status>
141
+ <sort_order translate="label">
142
+ <label>Sort order</label>
143
+ <frontend_type>text</frontend_type>
144
+ <sort_order>3</sort_order>
145
+ <show_in_default>1</show_in_default>
146
+ <show_in_website>1</show_in_website>
147
+ <show_in_store>1</show_in_store>
148
+ </sort_order>
149
+ <title translate="label">
150
+ <label>Title</label>
151
+ <frontend_type>text</frontend_type>
152
+ <sort_order>5</sort_order>
153
+ <show_in_default>1</show_in_default>
154
+ <show_in_website>1</show_in_website>
155
+ <show_in_store>1</show_in_store>
156
+ </title>
157
+ <allowspecific translate="label">
158
+ <label>Payment to applicable countries</label>
159
+ <frontend_type>allowspecific</frontend_type>
160
+ <sort_order>6</sort_order>
161
+ <source_model>adminhtml/system_config_source_payment_allspecificcountries</source_model>
162
+ <show_in_default>1</show_in_default>
163
+ <show_in_website>1</show_in_website>
164
+ <show_in_store>1</show_in_store>
165
+ </allowspecific>
166
+ <specificcountry translate="label">
167
+ <label>Payment to Specific countries</label>
168
+ <frontend_type>multiselect</frontend_type>
169
+ <sort_order>7</sort_order>
170
+ <source_model>adminhtml/system_config_source_country</source_model>
171
+ <show_in_default>1</show_in_default>
172
+ <show_in_website>1</show_in_website>
173
+ <show_in_store>1</show_in_store>
174
+ </specificcountry>
175
+ <allowed_currency translate="label">
176
+ <label>Allowed Currencies</label>
177
+ <frontend_type>multiselect</frontend_type>
178
+ <source_model>adminhtml/system_config_source_locale_currency_all</source_model>
179
+ <sort_order>8</sort_order>
180
+ <show_in_default>1</show_in_default>
181
+ <show_in_website>0</show_in_website>
182
+ <show_in_store>1</show_in_store>
183
+ </allowed_currency>
184
+ <paymenttype translate="label">
185
+ <label>Paymenttype</label>
186
+ <frontend_type>select</frontend_type>
187
+ <sort_order>32</sort_order>
188
+ <source_model>expercash/source_paymenttypeelv</source_model>
189
+ <show_in_default>1</show_in_default>
190
+ <show_in_website>1</show_in_website>
191
+ <show_in_store>1</show_in_store>
192
+ </paymenttype>
193
+ <createinvoice translate="label">
194
+ <label>Create Invoice at buy</label>
195
+ <frontend_type>select</frontend_type>
196
+ <source_model>adminhtml/system_config_source_yesno</source_model>
197
+ <sort_order>262144</sort_order>
198
+ <show_in_default>1</show_in_default>
199
+ <show_in_website>1</show_in_website>
200
+ <show_in_store>1</show_in_store>
201
+ <depends>
202
+ <paymenttype>elv_buy</paymenttype>
203
+ </depends>
204
+ </createinvoice>
205
+ <sendinvoicemail translate="label">
206
+ <label>send mail after automatic invoice creation</label>
207
+ <frontend_type>select</frontend_type>
208
+ <source_model>adminhtml/system_config_source_yesno</source_model>
209
+ <sort_order>262150</sort_order>
210
+ <show_in_default>1</show_in_default>
211
+ <show_in_website>1</show_in_website>
212
+ <show_in_store>1</show_in_store>
213
+ <depends>
214
+ <createinvoice>1</createinvoice>
215
+ <paymenttype>elv_buy</paymenttype>
216
+ </depends>
217
+ </sendinvoicemail>
218
+ </fields>
219
+ </expercashelv>
220
+ <expercashcc translate="label" module="expercash">
221
+ <label>ExperCash (CC)</label>
222
+ <frontend_type>text</frontend_type>
223
+ <sort_order>0</sort_order>
224
+ <show_in_default>1</show_in_default>
225
+ <show_in_website>1</show_in_website>
226
+ <show_in_store>1</show_in_store>
227
+ <fields>
228
+ <active translate="label">
229
+ <label>Enabled</label>
230
+ <frontend_type>select</frontend_type>
231
+ <source_model>adminhtml/system_config_source_yesno</source_model>
232
+ <sort_order>1</sort_order>
233
+ <show_in_default>1</show_in_default>
234
+ <show_in_website>1</show_in_website>
235
+ <show_in_store>1</show_in_store>
236
+ </active>
237
+ <order_status translate="label">
238
+ <label>New order status</label>
239
+ <frontend_type>select</frontend_type>
240
+ <source_model>adminhtml/system_config_source_order_status</source_model>
241
+ <sort_order>2</sort_order>
242
+ <show_in_default>1</show_in_default>
243
+ <show_in_website>1</show_in_website>
244
+ <show_in_store>1</show_in_store>
245
+ </order_status>
246
+ <sort_order translate="label">
247
+ <label>Sort order</label>
248
+ <frontend_type>text</frontend_type>
249
+ <sort_order>3</sort_order>
250
+ <show_in_default>1</show_in_default>
251
+ <show_in_website>1</show_in_website>
252
+ <show_in_store>1</show_in_store>
253
+ </sort_order>
254
+ <title translate="label">
255
+ <label>Title</label>
256
+ <frontend_type>text</frontend_type>
257
+ <sort_order>5</sort_order>
258
+ <show_in_default>1</show_in_default>
259
+ <show_in_website>1</show_in_website>
260
+ <show_in_store>1</show_in_store>
261
+ </title>
262
+ <allowspecific translate="label">
263
+ <label>Payment to applicable countries</label>
264
+ <frontend_type>allowspecific</frontend_type>
265
+ <sort_order>6</sort_order>
266
+ <source_model>adminhtml/system_config_source_payment_allspecificcountries</source_model>
267
+ <show_in_default>1</show_in_default>
268
+ <show_in_website>1</show_in_website>
269
+ <show_in_store>1</show_in_store>
270
+ </allowspecific>
271
+ <specificcountry translate="label">
272
+ <label>Payment to Specific countries</label>
273
+ <frontend_type>multiselect</frontend_type>
274
+ <sort_order>7</sort_order>
275
+ <source_model>adminhtml/system_config_source_country</source_model>
276
+ <show_in_default>1</show_in_default>
277
+ <show_in_website>1</show_in_website>
278
+ <show_in_store>1</show_in_store>
279
+ </specificcountry>
280
+ <allowed_currency translate="label">
281
+ <label>Allowed Currencies</label>
282
+ <frontend_type>multiselect</frontend_type>
283
+ <source_model>adminhtml/system_config_source_locale_currency_all</source_model>
284
+ <sort_order>8</sort_order>
285
+ <show_in_default>1</show_in_default>
286
+ <show_in_website>1</show_in_website>
287
+ <show_in_store>1</show_in_store>
288
+ </allowed_currency>
289
+ <paymenttype translate="label">
290
+ <label>Paymenttype</label>
291
+ <frontend_type>select</frontend_type>
292
+ <sort_order>32</sort_order>
293
+ <source_model>expercash/source_paymenttypecc</source_model>
294
+ <show_in_default>1</show_in_default>
295
+ <show_in_website>1</show_in_website>
296
+ <show_in_store>1</show_in_store>
297
+ </paymenttype>
298
+ <createinvoice translate="label">
299
+ <label>Create Invoice at buy</label>
300
+ <frontend_type>select</frontend_type>
301
+ <source_model>adminhtml/system_config_source_yesno</source_model>
302
+ <sort_order>262144</sort_order>
303
+ <show_in_default>1</show_in_default>
304
+ <show_in_website>1</show_in_website>
305
+ <show_in_store>1</show_in_store>
306
+ <depends>
307
+ <paymenttype>cc_buy</paymenttype>
308
+ </depends>
309
+ </createinvoice>
310
+ <sendinvoicemail translate="label">
311
+ <label>send mail after automatic invoice creation</label>
312
+ <frontend_type>select</frontend_type>
313
+ <source_model>adminhtml/system_config_source_yesno</source_model>
314
+ <sort_order>262150</sort_order>
315
+ <show_in_default>1</show_in_default>
316
+ <show_in_website>1</show_in_website>
317
+ <show_in_store>1</show_in_store>
318
+ <depends>
319
+ <createinvoice>1</createinvoice>
320
+ <paymenttype>cc_buy</paymenttype>
321
+ </depends>
322
+ </sendinvoicemail>
323
+ </fields>
324
+ </expercashcc>
325
+ <expercashso translate="label" module="expercash">
326
+ <label>ExperCash (SO)</label>
327
+ <frontend_type>text</frontend_type>
328
+ <sort_order>0</sort_order>
329
+ <show_in_default>1</show_in_default>
330
+ <show_in_website>1</show_in_website>
331
+ <show_in_store>1</show_in_store>
332
+ <fields>
333
+ <active translate="label">
334
+ <label>Enabled</label>
335
+ <frontend_type>select</frontend_type>
336
+ <source_model>adminhtml/system_config_source_yesno</source_model>
337
+ <sort_order>1</sort_order>
338
+ <show_in_default>1</show_in_default>
339
+ <show_in_website>1</show_in_website>
340
+ <show_in_store>1</show_in_store>
341
+ </active>
342
+ <order_status translate="label">
343
+ <label>New order status</label>
344
+ <frontend_type>select</frontend_type>
345
+ <source_model>adminhtml/system_config_source_order_status</source_model>
346
+ <sort_order>2</sort_order>
347
+ <show_in_default>1</show_in_default>
348
+ <show_in_website>1</show_in_website>
349
+ <show_in_store>1</show_in_store>
350
+ </order_status>
351
+ <sort_order translate="label">
352
+ <label>Sort order</label>
353
+ <frontend_type>text</frontend_type>
354
+ <sort_order>3</sort_order>
355
+ <show_in_default>1</show_in_default>
356
+ <show_in_website>1</show_in_website>
357
+ <show_in_store>1</show_in_store>
358
+ </sort_order>
359
+ <title translate="label">
360
+ <label>Title</label>
361
+ <frontend_type>text</frontend_type>
362
+ <sort_order>5</sort_order>
363
+ <show_in_default>1</show_in_default>
364
+ <show_in_website>1</show_in_website>
365
+ <show_in_store>1</show_in_store>
366
+ </title>
367
+ <allowspecific translate="label">
368
+ <label>Payment to applicable countries</label>
369
+ <frontend_type>allowspecific</frontend_type>
370
+ <sort_order>6</sort_order>
371
+ <source_model>adminhtml/system_config_source_payment_allspecificcountries</source_model>
372
+ <show_in_default>1</show_in_default>
373
+ <show_in_website>1</show_in_website>
374
+ <show_in_store>1</show_in_store>
375
+ </allowspecific>
376
+ <specificcountry translate="label">
377
+ <label>Payment to Specific countries</label>
378
+ <frontend_type>multiselect</frontend_type>
379
+ <sort_order>7</sort_order>
380
+ <source_model>adminhtml/system_config_source_country</source_model>
381
+ <show_in_default>1</show_in_default>
382
+ <show_in_website>1</show_in_website>
383
+ <show_in_store>1</show_in_store>
384
+ </specificcountry>
385
+ <allowed_currency translate="label">
386
+ <label>Allowed Currencies</label>
387
+ <frontend_type>multiselect</frontend_type>
388
+ <source_model>adminhtml/system_config_source_locale_currency_all</source_model>
389
+ <sort_order>8</sort_order>
390
+ <show_in_default>1</show_in_default>
391
+ <show_in_website>1</show_in_website>
392
+ <show_in_store>1</show_in_store>
393
+ </allowed_currency>
394
+ <paymenttype translate="label">
395
+ <label>Paymenttype</label>
396
+ <frontend_type>select</frontend_type>
397
+ <sort_order>32</sort_order>
398
+ <source_model>expercash/source_paymenttypeso</source_model>
399
+ <show_in_default>1</show_in_default>
400
+ <show_in_website>1</show_in_website>
401
+ <show_in_store>1</show_in_store>
402
+ </paymenttype>
403
+ <createinvoice translate="label">
404
+ <label>Create Invoice at buy</label>
405
+ <frontend_type>select</frontend_type>
406
+ <source_model>adminhtml/system_config_source_yesno</source_model>
407
+ <sort_order>262144</sort_order>
408
+ <show_in_default>1</show_in_default>
409
+ <show_in_website>1</show_in_website>
410
+ <show_in_store>1</show_in_store>
411
+ </createinvoice>
412
+ <sendinvoicemail translate="label">
413
+ <label>send mail after automatic invoice creation</label>
414
+ <frontend_type>select</frontend_type>
415
+ <source_model>adminhtml/system_config_source_yesno</source_model>
416
+ <sort_order>262150</sort_order>
417
+ <show_in_default>1</show_in_default>
418
+ <show_in_website>1</show_in_website>
419
+ <show_in_store>1</show_in_store>
420
+ <depends>
421
+ <createinvoice>1</createinvoice>
422
+ </depends>
423
+ </sendinvoicemail>
424
+ </fields>
425
+ </expercashso>
426
+ <expercashgp translate="label" module="expercash">
427
+ <label>ExperCash (GP)</label>
428
+ <frontend_type>text</frontend_type>
429
+ <sort_order>0</sort_order>
430
+ <show_in_default>1</show_in_default>
431
+ <show_in_website>1</show_in_website>
432
+ <show_in_store>1</show_in_store>
433
+ <fields>
434
+ <active translate="label">
435
+ <label>Enabled</label>
436
+ <frontend_type>select</frontend_type>
437
+ <source_model>adminhtml/system_config_source_yesno</source_model>
438
+ <sort_order>1</sort_order>
439
+ <show_in_default>1</show_in_default>
440
+ <show_in_website>1</show_in_website>
441
+ <show_in_store>1</show_in_store>
442
+ </active>
443
+ <order_status translate="label">
444
+ <label>New order status</label>
445
+ <frontend_type>select</frontend_type>
446
+ <source_model>adminhtml/system_config_source_order_status</source_model>
447
+ <sort_order>2</sort_order>
448
+ <show_in_default>1</show_in_default>
449
+ <show_in_website>1</show_in_website>
450
+ <show_in_store>1</show_in_store>
451
+ </order_status>
452
+ <sort_order translate="label">
453
+ <label>Sort order</label>
454
+ <frontend_type>text</frontend_type>
455
+ <sort_order>3</sort_order>
456
+ <show_in_default>1</show_in_default>
457
+ <show_in_website>1</show_in_website>
458
+ <show_in_store>1</show_in_store>
459
+ </sort_order>
460
+ <title translate="label">
461
+ <label>Title</label>
462
+ <frontend_type>text</frontend_type>
463
+ <sort_order>5</sort_order>
464
+ <show_in_default>1</show_in_default>
465
+ <show_in_website>1</show_in_website>
466
+ <show_in_store>1</show_in_store>
467
+ </title>
468
+ <allowspecific translate="label">
469
+ <label>Payment to applicable countries</label>
470
+ <frontend_type>allowspecific</frontend_type>
471
+ <sort_order>6</sort_order>
472
+ <source_model>adminhtml/system_config_source_payment_allspecificcountries</source_model>
473
+ <show_in_default>1</show_in_default>
474
+ <show_in_website>1</show_in_website>
475
+ <show_in_store>1</show_in_store>
476
+ </allowspecific>
477
+ <specificcountry translate="label">
478
+ <label>Payment to Specific countries</label>
479
+ <frontend_type>multiselect</frontend_type>
480
+ <sort_order>7</sort_order>
481
+ <source_model>adminhtml/system_config_source_country</source_model>
482
+ <show_in_default>1</show_in_default>
483
+ <show_in_website>1</show_in_website>
484
+ <show_in_store>1</show_in_store>
485
+ </specificcountry>
486
+ <allowed_currency translate="label">
487
+ <label>Allowed Currencies</label>
488
+ <frontend_type>multiselect</frontend_type>
489
+ <source_model>adminhtml/system_config_source_locale_currency_all</source_model>
490
+ <sort_order>8</sort_order>
491
+ <show_in_default>1</show_in_default>
492
+ <show_in_website>1</show_in_website>
493
+ <show_in_store>1</show_in_store>
494
+ </allowed_currency>
495
+ <paymenttype translate="label">
496
+ <label>Paymenttype</label>
497
+ <frontend_type>select</frontend_type>
498
+ <sort_order>32</sort_order>
499
+ <source_model>expercash/source_paymenttypegp</source_model>
500
+ <show_in_default>1</show_in_default>
501
+ <show_in_website>1</show_in_website>
502
+ <show_in_store>1</show_in_store>
503
+ </paymenttype>
504
+ <createinvoice translate="label">
505
+ <label>Create Invoice at buy</label>
506
+ <frontend_type>select</frontend_type>
507
+ <source_model>adminhtml/system_config_source_yesno</source_model>
508
+ <sort_order>262144</sort_order>
509
+ <show_in_default>1</show_in_default>
510
+ <show_in_website>1</show_in_website>
511
+ <show_in_store>1</show_in_store>
512
+ </createinvoice>
513
+ <sendinvoicemail translate="label">
514
+ <label>send mail after automatic invoice creation</label>
515
+ <frontend_type>select</frontend_type>
516
+ <source_model>adminhtml/system_config_source_yesno</source_model>
517
+ <sort_order>262150</sort_order>
518
+ <show_in_default>1</show_in_default>
519
+ <show_in_website>1</show_in_website>
520
+ <show_in_store>1</show_in_store>
521
+ <depends>
522
+ <createinvoice>1</createinvoice>
523
+ </depends>
524
+ </sendinvoicemail>
525
+ </fields>
526
+ </expercashgp>
527
+ <expercashpc translate="label" module="expercash">
528
+ <label>ExperCash (PC)</label>
529
+ <frontend_type>text</frontend_type>
530
+ <sort_order>0</sort_order>
531
+ <show_in_default>1</show_in_default>
532
+ <show_in_website>1</show_in_website>
533
+ <show_in_store>1</show_in_store>
534
+ <fields>
535
+ <active translate="label">
536
+ <label>Enabled</label>
537
+ <frontend_type>select</frontend_type>
538
+ <source_model>adminhtml/system_config_source_yesno</source_model>
539
+ <sort_order>1</sort_order>
540
+ <show_in_default>1</show_in_default>
541
+ <show_in_website>1</show_in_website>
542
+ <show_in_store>1</show_in_store>
543
+ </active>
544
+ <order_status translate="label">
545
+ <label>New order status</label>
546
+ <frontend_type>select</frontend_type>
547
+ <source_model>adminhtml/system_config_source_order_status</source_model>
548
+ <sort_order>2</sort_order>
549
+ <show_in_default>1</show_in_default>
550
+ <show_in_website>1</show_in_website>
551
+ <show_in_store>1</show_in_store>
552
+ </order_status>
553
+ <sort_order translate="label">
554
+ <label>Sort order</label>
555
+ <frontend_type>text</frontend_type>
556
+ <sort_order>3</sort_order>
557
+ <show_in_default>1</show_in_default>
558
+ <show_in_website>1</show_in_website>
559
+ <show_in_store>1</show_in_store>
560
+ </sort_order>
561
+ <title translate="label">
562
+ <label>Title</label>
563
+ <frontend_type>text</frontend_type>
564
+ <sort_order>5</sort_order>
565
+ <show_in_default>1</show_in_default>
566
+ <show_in_website>1</show_in_website>
567
+ <show_in_store>1</show_in_store>
568
+ </title>
569
+ <createinvoice translate="label">
570
+ <label>Create Invoice when receipt of payment</label>
571
+ <frontend_type>select</frontend_type>
572
+ <source_model>adminhtml/system_config_source_yesno</source_model>
573
+ <sort_order>262144</sort_order>
574
+ <show_in_default>1</show_in_default>
575
+ <show_in_website>1</show_in_website>
576
+ <show_in_store>1</show_in_store>
577
+ </createinvoice>
578
+ <sendinvoicemail translate="label">
579
+ <label>send mail after automatic invoice creation</label>
580
+ <frontend_type>select</frontend_type>
581
+ <source_model>adminhtml/system_config_source_yesno</source_model>
582
+ <sort_order>262150</sort_order>
583
+ <show_in_default>1</show_in_default>
584
+ <show_in_website>1</show_in_website>
585
+ <show_in_store>1</show_in_store>
586
+ <depends>
587
+ <createinvoice>1</createinvoice>
588
+ </depends>
589
+ </sendinvoicemail>
590
+ </fields>
591
+ </expercashpc>
592
+
593
+ <expercashmp translate="label" module="expercash">
594
+ <label>ExperCash (Masterpass)</label>
595
+ <frontend_type>text</frontend_type>
596
+ <sort_order>-1</sort_order>
597
+ <show_in_default>1</show_in_default>
598
+ <show_in_website>1</show_in_website>
599
+ <show_in_store>1</show_in_store>
600
+ <fields>
601
+ <active translate="label">
602
+ <label>Enabled</label>
603
+ <frontend_type>select</frontend_type>
604
+ <source_model>adminhtml/system_config_source_yesno</source_model>
605
+ <sort_order>1</sort_order>
606
+ <show_in_default>1</show_in_default>
607
+ <show_in_website>1</show_in_website>
608
+ <show_in_store>1</show_in_store>
609
+ </active>
610
+ <order_status translate="label">
611
+ <label>New order status</label>
612
+ <frontend_type>select</frontend_type>
613
+ <source_model>adminhtml/system_config_source_order_status</source_model>
614
+ <sort_order>2</sort_order>
615
+ <show_in_default>1</show_in_default>
616
+ <show_in_website>1</show_in_website>
617
+ <show_in_store>1</show_in_store>
618
+ </order_status>
619
+ <sort_order translate="label">
620
+ <label>Sort order</label>
621
+ <frontend_type>text</frontend_type>
622
+ <sort_order>3</sort_order>
623
+ <show_in_default>1</show_in_default>
624
+ <show_in_website>1</show_in_website>
625
+ <show_in_store>1</show_in_store>
626
+ </sort_order>
627
+ <title translate="label">
628
+ <label>Title</label>
629
+ <frontend_type>text</frontend_type>
630
+ <sort_order>5</sort_order>
631
+ <show_in_default>1</show_in_default>
632
+ <show_in_website>1</show_in_website>
633
+ <show_in_store>1</show_in_store>
634
+ </title>
635
+ <show_logo translate="label">
636
+ <label>Show Logo</label>
637
+ <comment>Show Masterpass Logo for Payment Method.</comment>
638
+ <frontend_type>select</frontend_type>
639
+ <source_model>adminhtml/system_config_source_yesno</source_model>
640
+ <sort_order>262150</sort_order>
641
+ <show_in_default>1</show_in_default>
642
+ <show_in_website>1</show_in_website>
643
+ <show_in_store>1</show_in_store>
644
+ </show_logo>
645
+ <allowspecific translate="label">
646
+ <label>Payment to applicable countries</label>
647
+ <frontend_type>allowspecific</frontend_type>
648
+ <sort_order>6</sort_order>
649
+ <source_model>adminhtml/system_config_source_payment_allspecificcountries</source_model>
650
+ <show_in_default>1</show_in_default>
651
+ <show_in_website>1</show_in_website>
652
+ <show_in_store>1</show_in_store>
653
+ </allowspecific>
654
+ <specificcountry translate="label">
655
+ <label>Payment to Specific countries</label>
656
+ <frontend_type>multiselect</frontend_type>
657
+ <sort_order>7</sort_order>
658
+ <source_model>adminhtml/system_config_source_country</source_model>
659
+ <show_in_default>1</show_in_default>
660
+ <show_in_website>1</show_in_website>
661
+ <show_in_store>1</show_in_store>
662
+ </specificcountry>
663
+ <allowed_currency translate="label">
664
+ <label>Allowed Currencies</label>
665
+ <frontend_type>multiselect</frontend_type>
666
+ <source_model>adminhtml/system_config_source_locale_currency_all</source_model>
667
+ <sort_order>8</sort_order>
668
+ <show_in_default>1</show_in_default>
669
+ <show_in_website>1</show_in_website>
670
+ <show_in_store>1</show_in_store>
671
+ </allowed_currency>
672
+ <paymenttype translate="label">
673
+ <label>Paymenttype</label>
674
+ <frontend_type>select</frontend_type>
675
+ <sort_order>32</sort_order>
676
+ <source_model>expercash/source_paymenttypemp</source_model>
677
+ <show_in_default>1</show_in_default>
678
+ <show_in_website>1</show_in_website>
679
+ <show_in_store>1</show_in_store>
680
+ </paymenttype>
681
+ <createinvoice translate="label">
682
+ <label>Create Invoice at buy</label>
683
+ <frontend_type>select</frontend_type>
684
+ <source_model>adminhtml/system_config_source_yesno</source_model>
685
+ <sort_order>262144</sort_order>
686
+ <show_in_default>1</show_in_default>
687
+ <show_in_website>1</show_in_website>
688
+ <show_in_store>1</show_in_store>
689
+ <depends>
690
+ <paymenttype>masterpass_buy</paymenttype>
691
+ </depends>
692
+ </createinvoice>
693
+ <sendinvoicemail translate="label">
694
+ <label>send mail after automatic invoice creation</label>
695
+ <frontend_type>select</frontend_type>
696
+ <source_model>adminhtml/system_config_source_yesno</source_model>
697
+ <sort_order>262150</sort_order>
698
+ <show_in_default>1</show_in_default>
699
+ <show_in_website>1</show_in_website>
700
+ <show_in_store>1</show_in_store>
701
+ <depends>
702
+ <paymenttype>masterpass_buy</paymenttype>
703
+ <createinvoice>1</createinvoice>
704
+ </depends>
705
+ </sendinvoicemail>
706
+ </fields>
707
+ </expercashmp>
708
+
709
+ <expercashmpf translate="label" module="expercash">
710
+ <label>ExperCash (Masterpass Full Checkout)</label>
711
+ <frontend_type>text</frontend_type>
712
+ <sort_order>-1</sort_order>
713
+ <show_in_default>1</show_in_default>
714
+ <show_in_website>1</show_in_website>
715
+ <show_in_store>1</show_in_store>
716
+ <fields>
717
+ <active translate="label">
718
+ <label>Enabled</label>
719
+ <frontend_type>select</frontend_type>
720
+ <source_model>adminhtml/system_config_source_yesno</source_model>
721
+ <sort_order>10</sort_order>
722
+ <show_in_default>1</show_in_default>
723
+ <show_in_website>1</show_in_website>
724
+ <show_in_store>1</show_in_store>
725
+ </active>
726
+ <order_status translate="label">
727
+ <label>New order status</label>
728
+ <frontend_type>select</frontend_type>
729
+ <source_model>adminhtml/system_config_source_order_status</source_model>
730
+ <sort_order>15</sort_order>
731
+ <show_in_default>1</show_in_default>
732
+ <show_in_website>1</show_in_website>
733
+ <show_in_store>1</show_in_store>
734
+ </order_status>
735
+ <sort_order translate="label">
736
+ <label>Sort order</label>
737
+ <frontend_type>text</frontend_type>
738
+ <sort_order>20</sort_order>
739
+ <show_in_default>1</show_in_default>
740
+ <show_in_website>1</show_in_website>
741
+ <show_in_store>1</show_in_store>
742
+ </sort_order>
743
+ <title translate="label">
744
+ <label>Title</label>
745
+ <frontend_type>text</frontend_type>
746
+ <sort_order>30</sort_order>
747
+ <show_in_default>1</show_in_default>
748
+ <show_in_website>1</show_in_website>
749
+ <show_in_store>1</show_in_store>
750
+ </title>
751
+ <allowspecific translate="label">
752
+ <label>Payment from Applicable Countries</label>
753
+ <frontend_type>allowspecific</frontend_type>
754
+ <sort_order>40</sort_order>
755
+ <source_model>adminhtml/system_config_source_payment_allspecificcountries</source_model>
756
+ <show_in_default>1</show_in_default>
757
+ <show_in_website>1</show_in_website>
758
+ <show_in_store>1</show_in_store>
759
+ </allowspecific>
760
+ <specificcountry translate="label">
761
+ <label>Payment from Specific Countries</label>
762
+ <frontend_type>multiselect</frontend_type>
763
+ <sort_order>50</sort_order>
764
+ <source_model>adminhtml/system_config_source_country</source_model>
765
+ <show_in_default>1</show_in_default>
766
+ <show_in_website>1</show_in_website>
767
+ <show_in_store>1</show_in_store>
768
+ </specificcountry>
769
+ <allowed_currency translate="label">
770
+ <label>Allowed Currencies</label>
771
+ <frontend_type>multiselect</frontend_type>
772
+ <source_model>adminhtml/system_config_source_locale_currency_all</source_model>
773
+ <sort_order>60</sort_order>
774
+ <show_in_default>1</show_in_default>
775
+ <show_in_website>1</show_in_website>
776
+ <show_in_store>1</show_in_store>
777
+ </allowed_currency>
778
+ <show_button_in_cart translate="label,comment">
779
+ <label>Show Button in Cart</label>
780
+ <comment>Show "Buy with Masterpass" Button in Cart</comment>
781
+ <frontend_type>select</frontend_type>
782
+ <source_model>adminhtml/system_config_source_yesno</source_model>
783
+ <sort_order>70</sort_order>
784
+ <show_in_default>1</show_in_default>
785
+ <show_in_website>1</show_in_website>
786
+ <show_in_store>1</show_in_store>
787
+ </show_button_in_cart>
788
+ <show_button_in_mini_cart translate="label,comment">
789
+ <label>Show Button in Mini Cart</label>
790
+ <comment>Show "Buy with Masterpass" in Mini Cart</comment>
791
+ <frontend_type>select</frontend_type>
792
+ <source_model>adminhtml/system_config_source_yesno</source_model>
793
+ <sort_order>80</sort_order>
794
+ <show_in_default>1</show_in_default>
795
+ <show_in_website>1</show_in_website>
796
+ <show_in_store>1</show_in_store>
797
+ </show_button_in_mini_cart>
798
+ <show_checkout_text translate="label,comment">
799
+ <label>Show Button in Checkout</label>
800
+ <comment>Show "Buy with Masterpass" in Checkout</comment>
801
+ <frontend_type>select</frontend_type>
802
+ <source_model>adminhtml/system_config_source_yesno</source_model>
803
+ <sort_order>90</sort_order>
804
+ <show_in_default>1</show_in_default>
805
+ <show_in_website>1</show_in_website>
806
+ <show_in_store>1</show_in_store>
807
+ </show_checkout_text>
808
+ <checkout_text translate="label">
809
+ <label>Additional Checkout Info</label>
810
+ <comment>A custom text can be displayed in checkout to promote Masterpass Full Checkout.</comment>
811
+ <frontend_type>textarea</frontend_type>
812
+ <sort_order>95</sort_order>
813
+ <show_in_default>1</show_in_default>
814
+ <show_in_website>1</show_in_website>
815
+ <show_in_store>1</show_in_store>
816
+ <depends>
817
+ <show_checkout_text>1</show_checkout_text>
818
+ </depends>
819
+ </checkout_text>
820
+ <show_learn_more_link translate="label,comment">
821
+ <label>Show Link</label>
822
+ <comment>Show "Learn More" Link" next to logo.</comment>
823
+ <frontend_type>select</frontend_type>
824
+ <source_model>adminhtml/system_config_source_yesno</source_model>
825
+ <sort_order>100</sort_order>
826
+ <show_in_default>1</show_in_default>
827
+ <show_in_website>1</show_in_website>
828
+ <show_in_store>1</show_in_store>
829
+ </show_learn_more_link>
830
+ <show_creditcard_data_in_checkout translate="label,comment">
831
+ <label>Display Credit Card Data in Checkout</label>
832
+ <comment>If set to "Yes", masked credit card data will be displayed in the payment step.</comment>
833
+ <frontend_type>select</frontend_type>
834
+ <source_model>adminhtml/system_config_source_yesno</source_model>
835
+ <sort_order>110</sort_order>
836
+ <show_in_default>1</show_in_default>
837
+ <show_in_website>1</show_in_website>
838
+ <show_in_store>1</show_in_store>
839
+ </show_creditcard_data_in_checkout>
840
+ <payment_action translate="label,comment">
841
+ <label>Create Invoice at buy</label>
842
+ <comment>Enabled = Directsale / Disabled = authorization</comment>
843
+ <frontend_type>select</frontend_type>
844
+ <sort_order>120</sort_order>
845
+ <source_model>expercash/source_paymenttypempf</source_model>
846
+ <show_in_default>1</show_in_default>
847
+ <show_in_website>1</show_in_website>
848
+ <show_in_store>1</show_in_store>
849
+ </payment_action>
850
+ </fields>
851
+ </expercashmpf>
852
+
853
+ <!--move paypal notice to top-->
854
+ <paypal_notice translate="label" module="paypal">
855
+ <sort_order>-100</sort_order>
856
+ </paypal_notice>
857
+
858
+ </groups>
859
+ </payment>
860
+ </sections>
861
+ </config>
app/code/community/Expercash/Expercash/sql/expercash_setup/mysql4-install-1.0.0.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+ $installer = $this;
24
+ $installer->startSetup();
25
+ $installer->installEntities();
26
+
27
+ if (Mage::getVersion() >= 1.1) {
28
+ $installer->startSetup();
29
+ $installer->getConnection()->addColumn(
30
+ $installer->getTable('sales_flat_quote_payment'),
31
+ 'expercash_gutid', 'VARCHAR(255) NOT NULL'
32
+ );
33
+ $installer->getConnection()->addColumn(
34
+ $installer->getTable('sales_flat_quote_payment'),
35
+ 'expercash_transaction_id', 'VARCHAR(255) NOT NULL'
36
+ );
37
+ $installer->getConnection()->addColumn(
38
+ $installer->getTable('sales_flat_quote_payment'),
39
+ 'expercash_gutid_capture', 'VARCHAR(255) NOT NULL'
40
+ );
41
+ $installer->getConnection()->addColumn(
42
+ $installer->getTable('sales_flat_quote_payment'),
43
+ 'expercash_paymenttype', 'VARCHAR(255) NOT NULL'
44
+ );
45
+ $installer->getConnection()->addColumn(
46
+ $installer->getTable('sales_flat_quote_payment'),
47
+ 'expercash_epi_payment_id', 'VARCHAR(255) NOT NULL'
48
+ );
49
+ $installer->getConnection()->addColumn(
50
+ $installer->getTable('sales_flat_quote_payment'),
51
+ 'expercash_request_type', 'VARCHAR(255) NOT NULL'
52
+ );
53
+ $installer->endSetup();
54
+ }
55
+
56
+ $installer->endSetup();
app/design/adminhtml/default/default/template/expercash/info/expercash.phtml ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!--
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+ -->
24
+ <strong><?php print Mage::helper('expercash')->__('Paymentinformations ExperCash') ?></strong>
25
+ <br />
26
+ <?php if ($this->getExperCashInfo('expercash_gutid')): ?>
27
+ <?php echo Mage::helper('expercash')->__('Transaction Id at ExperCash: %s', $this->getExperCashInfo('expercash_gutid')) ?><br />
28
+ <?php endif; ?>
29
+
30
+ <?php if (!$this->getExperCashInfo('expercash_request_type')): ?>
31
+ <?php echo Mage::helper('expercash')->__('Payment type at ExperCash: %s', $this->getExperCashInfo('expercash_request_type')) ?><br />
32
+ <?php endif; ?>
33
+
34
+ <?php if ($this->getExperCashInfo('expercash_gutid_capture')): ?>
35
+ <?php echo Mage::helper('expercash')->__('Transaction Id for Capture/Buy at ExperCash: %s', $this->getExperCashInfo('expercash_gutid_capture')) ?><br />
36
+ <?php endif; ?>
37
+
38
+ <?php if ($this->getExperCashInfo('expercash_epi_payment_id')): ?>
39
+ <?php echo Mage::helper('expercash')->__('Epi Payment Id/Pay-ID for Capture/Buy at ExperCash: %s', $this->getExperCashInfo('expercash_epi_payment_id')) ?><br />
40
+ <?php endif; ?>
41
+
42
+ <?php echo Mage::helper('expercash')->__('Paymenttype: %s', Mage::helper('expercash')->__($this->getExperCashInfo('expercash_paymenttype'))) ?><br />
43
+
44
+ <!-- show additional payment info if they exist -->
45
+ <?php foreach (Mage::helper('expercash')->getAdditionalPaymentParams() as $key): ?>
46
+ <?php if ($this->getInfo()->hasAdditionalInformation($key)): ?>
47
+ <?php if ($key === '3dsStatus') : ?>
48
+ <?php echo Mage::helper('expercash')->__($key . ': %s', Mage::helper('expercash')->__('3dsecureValue_' . $this->getInfo()->getAdditionalInformation($key)))?> <br />
49
+ <?php else: ?>
50
+ <?php echo Mage::helper('expercash')->__($key . ': %s', $this->getInfo()->getAdditionalInformation($key)) ?> <br />
51
+ <?php endif ?>
52
+ <?php endif; ?>
53
+ <?php endforeach; ?>
app/design/adminhtml/default/default/template/expercash/info/pdf/expercash.phtml ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ ?>
23
+ <?php echo $this->getMethod()->getTitle() ?>
app/design/frontend/base/default/layout/expercash.xml ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+ -->
24
+ <layout version="0.1.0">
25
+
26
+ <default>
27
+ <reference name="cart_sidebar.extra_actions">">
28
+ <block type="expercash/masterpass_fullcheckout_shortcut"
29
+ name="expercash.masterpass.mini_cart.shortcut"
30
+ template="expercash/masterpass/fullcheckout/shortcut.phtml"/>
31
+ </reference>
32
+ </default>
33
+
34
+ <expercash_expercash_index>
35
+ <reference name="root">
36
+ <action method="setTemplate">
37
+ <template>page/1column.phtml</template>
38
+ </action>
39
+ <action method="setHeaderTitle" translate="title" module="expercash">
40
+ <title>Payment</title>
41
+ </action>
42
+ </reference>
43
+ <reference name="content">
44
+ <block type="expercash/expercash" name="expercash" template="expercash/expercash.phtml"/>
45
+ </reference>
46
+ </expercash_expercash_index>
47
+
48
+ <expercash_expercash_error>
49
+ <reference name="root">
50
+ <action method="setTemplate">
51
+ <template>page/1column.phtml</template>
52
+ </action>
53
+ <action method="setHeaderTitle" translate="title" module="expercash">
54
+ <title>Payment Error</title>
55
+ </action>
56
+ </reference>
57
+ <reference name="content">
58
+ <block type="expercash/expercash" name="expercash" template="expercash/expercasherror.phtml"/>
59
+ </reference>
60
+ </expercash_expercash_error>
61
+
62
+ <checkout_cart_index>
63
+ <reference name="head">
64
+ <action method="addItem">
65
+ <type>skin_css</type>
66
+ <file>css/expercash.css</file>
67
+ </action>
68
+ </reference>
69
+ <reference name="topCart.extra_actions">
70
+ <block type="expercash/masterpass_fullcheckout_shortcut"
71
+ name="expercash.masterpass.top_cart.shortcut"
72
+ template="expercash/masterpass/fullcheckout/shortcut.phtml"/>
73
+ </reference>
74
+ <reference name="cart_sidebar.extra_actions">
75
+ <block type="expercash/masterpass_fullcheckout_shortcut" name="expercash.cart_sidebar.shortcut"
76
+ template="expercash/masterpass/fullcheckout/shortcut.phtml"/>
77
+ </reference>
78
+ <reference name="checkout.cart.top_methods">
79
+ <block type="expercash/masterpass_fullcheckout_shortcut"
80
+ name="checkout.cart.methods.masterpass_fullcheckout.top" before="-"
81
+ template="expercash/masterpass/fullcheckout/shortcut.phtml">
82
+ <action method="setIsQuoteAllowed">
83
+ <value>1</value>
84
+ </action>
85
+ </block>
86
+ </reference>
87
+ <reference name="checkout.cart.methods">
88
+ <block type="expercash/masterpass_fullcheckout_shortcut"
89
+ name="checkout.cart.methods.masterpass_fullcheckout.bottom" before="-"
90
+ template="expercash/masterpass/fullcheckout/shortcut.phtml">
91
+ <action method="setIsQuoteAllowed">
92
+ <value>1</value>
93
+ </action>
94
+ </block>
95
+ </reference>
96
+ </checkout_cart_index>
97
+
98
+ <checkout_onepage_index>
99
+ <reference name="head">
100
+ <action method="addItem">
101
+ <type>skin_css</type>
102
+ <file>css/expercash.css</file>
103
+ </action>
104
+ </reference>
105
+ <reference name="checkout.onepage">
106
+ <action method="setTemplate">
107
+ <template helper="expercash/masterpass/getOpcTemplate"/>
108
+ </action>
109
+ <block type="core/template" name="checkout.onepage.js"
110
+ template="expercash/checkout/onepage/js.phtml"/>
111
+ </reference>
112
+ <reference name="checkout.payment.methods">
113
+ <block type="core/template" name="payment.method.expercashmp"
114
+ template="expercash/payment/logo/logo.phtml"/>
115
+ </reference>
116
+ <reference name="checkout.onepage.login.before">
117
+ <block type="expercash/masterpass_fullcheckout_shortcut" name="expercash.masterpass.login.shortcut"
118
+ template="expercash/masterpass/fullcheckout/checkout.phtml"/>
119
+ </reference>
120
+ </checkout_onepage_index>
121
+ </layout>
app/design/frontend/base/default/template/expercash/checkout/ce15/onepage.phtml ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ ?>
23
+ <script type="text/javascript" src="<?php echo $this->getJsUrl('varien/accordion.js') ?>"></script>
24
+ <script type="text/javascript" src="<?php echo $this->getSkinUrl('js/opcheckout.js') ?>"></script>
25
+ <script type="text/javascript" src="<?php echo $this->getSkinUrl('js/expercashopc.js') ?>"></script>
26
+ <script type="text/javascript">countryRegions = <?php echo $this->helper('directory')->getRegionJson() ?></script>
27
+
28
+ <ol id="checkoutSteps" class="one-page-checkout">
29
+ <?php $i = 0;
30
+ foreach ($this->getSteps() as $_stepId => $_stepInfo): ?>
31
+ <?php if (!$this->getChild($_stepId) || !$this->getChild($_stepId)->isShow()): continue; endif;
32
+ $i++ ?>
33
+ <li id="opc-<?php echo $_stepId ?>" class="section <?php echo !empty($_stepInfo['allow']) ? 'allow'
34
+ : '' ?> <?php echo !empty($_stepInfo['complete']) ? 'saved' : '' ?>">
35
+ <div class="head">
36
+ <h3><span class="step-count"><?php echo $i ?></span> &nbsp;<?php echo $_stepInfo['label'] ?></h3><a
37
+ href="#"><?php echo $this->__('Edit') ?></a>
38
+ </div>
39
+ <div id="checkout-step-<?php echo $_stepId ?>"
40
+ class="box<?php if ($_stepId == 'shipping_method'): ?>-no-padding<?php endif; ?> a-item"
41
+ style="display:none;">
42
+ <?php echo $this->getChildHtml($_stepId) ?>
43
+ </div>
44
+ </li>
45
+ <?php endforeach ?>
46
+ </ol>
47
+ <?php echo $this->getChildHtml('checkout.onepage.js') ?>
48
+
49
+
app/design/frontend/base/default/template/expercash/checkout/onepage.phtml ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ ?>
23
+ <div class="page-title">
24
+ <h1><?php echo $this->__('Checkout') ?></h1>
25
+ </div>
26
+ <script type="text/javascript" src="<?php echo $this->getJsUrl('varien/accordion.js') ?>"></script>
27
+ <script type="text/javascript" src="<?php echo $this->getSkinUrl('js/opcheckout.js') ?>"></script>
28
+ <script type="text/javascript" src="<?php echo $this->getSkinUrl('js/expercashopc.js') ?>"></script>
29
+
30
+
31
+ <?php if (Mage::getModel('expercash/directory_region')->isLegacyInstallation()): ?>
32
+ <script type="text/javascript">countryRegions = <?php echo $this->helper('directory')->getRegionJson() ?></script>
33
+ <?php endif; ?>
34
+
35
+
36
+ <ol class="opc" id="checkoutSteps">
37
+ <?php $i = 0;
38
+ foreach ($this->getSteps() as $_stepId => $_stepInfo): ?>
39
+ <?php if (!$this->getChild($_stepId) || !$this->getChild($_stepId)->isShow()): continue;
40
+ endif;
41
+ $i++ ?>
42
+ <li id="opc-<?php echo $_stepId ?>"
43
+ class="section<?php echo !empty($_stepInfo['allow'])?' allow':'' ?><?php echo !empty($_stepInfo['complete'])?' saved':'' ?>">
44
+ <div class="step-title">
45
+ <span class="number"><?php echo $i ?></span>
46
+
47
+ <h2><?php echo $_stepInfo['label'] ?></h2>
48
+ <a href="#"><?php echo $this->__('Edit') ?></a>
49
+ </div>
50
+ <div id="checkout-step-<?php echo $_stepId ?>" class="step a-item" style="display:none;">
51
+ <?php echo $this->getChildHtml($_stepId) ?>
52
+ </div>
53
+ </li>
54
+ <?php endforeach ?>
55
+ </ol>
56
+ <?php echo $this->getChildHtml('checkout.onepage.js') ?>
app/design/frontend/base/default/template/expercash/checkout/onepage/js.phtml ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ ?>
23
+ <script type="text/javascript">
24
+ //<![CDATA[
25
+ var accordion = new Accordion('checkoutSteps', '.step-title', true);
26
+ var checkout = new ExpercashOpc(accordion, {
27
+ progress: '<?php echo $this->getUrl('checkout/onepage/progress') ?>',
28
+ review: '<?php echo $this->getUrl('checkout/onepage/review') ?>',
29
+ saveMethod: '<?php echo $this->getUrl('checkout/onepage/saveMethod') ?>',
30
+ failure: '<?php echo $this->getUrl('checkout/cart') ?>',
31
+ addresses: '<?php echo $this->getUrl('expercash/checkout_onepage/addresses') ?>',
32
+ shippingMethods: '<?php echo $this->getUrl('expercash/checkout_onepage/shippingMethods') ?>',
33
+ validateAddresses: '<?php echo $this->getUrl('expercash/checkout_onepage/validateAddresses') ?>'
34
+ });
35
+
36
+
37
+ checkout.setGuestCheckout();
38
+ checkout.fetchAddresses();
39
+ //]]>
40
+ </script>
app/design/frontend/base/default/template/expercash/expercash.phtml ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+ ?>
24
+ <h1><?php echo $this->__('Payment') ?></h1>
25
+ <iframe src="<?php echo $this->getIframeUrl(); ?>" id="expercashiframe" class="<?php echo $this->getIframeCssClass(); ?>" name="expercashiframe" width="<?php echo $this->getIframeWidth(); ?>" height="<?php echo $this->getIframeHeight(); ?>" style="border: 0px;"></iframe>
app/design/frontend/base/default/template/expercash/expercasherror.phtml ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ ?>
23
+ <h1><?php echo $this->__('Error!') ?></h1>
24
+ <p><?php echo $this->__('Errormessage!') ?></p>
25
+ <br />
26
+ <p><a href="<?php echo $this->getUrl('checkout/onepage', array('_secure' => true)); ?>" target="_top"><?php echo Mage::helper('expercash')->__('Select alternative payment method') ?></a></p>
app/design/frontend/base/default/template/expercash/form/expercashiframe.phtml ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ ?>
23
+ <?php $_code = $this->getMethodCode() ?>
24
+ <div style="display:none;" id="payment_form_<?php echo $_code?>">
25
+ <?php echo $this->__('You will be redirected to our paymentprovider after the checkout'); ?>
26
+ </div>
app/design/frontend/base/default/template/expercash/info/expercash.phtml ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ ?>
23
+ <p>
24
+ <?php echo $this->getMethod()->getTitle() ?></p>
app/design/frontend/base/default/template/expercash/info/pdf/expercash.phtml ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ ?>
23
+ <?php echo $this->getMethod()->getTitle() ?>
app/design/frontend/base/default/template/expercash/masterpass/fullcheckout/checkout.phtml ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ ?>
23
+ <?php
24
+ /**
25
+ * @var $this Expercash_Expercash_Block_Masterpass_Fullcheckout_Shortcut
26
+ */
27
+ ?>
28
+
29
+ <?php if ($this->getMasterpassConfig()->isShowCheckoutTextEnabled()): ?>
30
+ <?php $showMoreLink = $this->getLearnMoreLink() ?>
31
+ <div class="masterpass-checkout">
32
+ <h3>
33
+ <?php echo $this->__('Pay with Masterpass') ?>
34
+ </h3>
35
+
36
+ <p class="masterpass-info">
37
+ <?php echo $this->__($this->getMasterpassConfig()->getCheckoutText()); ?>
38
+ </p>
39
+
40
+ <div class="masterpass-checkout-wrapper">
41
+ <div class="masterpass-checkout-right">
42
+ <div class="masterpass_checkout-logo">
43
+ <a class="masterpass-logo" href="<?php echo $this->getCheckoutUrl() ?>">
44
+ <img src="<?php echo $this->getImageUrl() ?>"
45
+ alt="<?php echo $this->__('Checkout with Masterpass'); ?>"
46
+ title="<?php echo $this->__('Checkout with Masterpass'); ?>"/>
47
+ </a>
48
+ <?php if ($showMoreLink): ?>
49
+ <div class="masterpass-checkout-link">
50
+ <a class="learn_more_link" href="<?php echo $showMoreLink ?>"
51
+ onclick="javascript:window.open('<?php echo $showMoreLink ?>',
52
+ 'olcwhatismasterpass','toolbar=no, location=no, ' +
53
+ 'directories=no, status=no, menubar=no, scrollbars=yes,' +
54
+ ' resizable=yes, ,left=0, top=0, width=400, height=350');
55
+ return false;"><?php echo $this->__('Learn more...') ?></a>
56
+ </div>
57
+ <?php endif; ?>
58
+ </div>
59
+ </div>
60
+ </div>
61
+ </div>
62
+ <?php endif; ?>
app/design/frontend/base/default/template/expercash/masterpass/fullcheckout/shortcut.phtml ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ ?>
23
+ <?php
24
+ /**
25
+ * @var $this Expercash_Expercash_Block_Masterpass_Fullcheckout_Shortcut
26
+ */
27
+ ?>
28
+
29
+ <?php $showMoreLink = $this->getLearnMoreLink() ?>
30
+
31
+ <!-- button top -->
32
+ <?php if ($this->isCartTop()): ?>
33
+ <div class="masterpass-wrapper">
34
+ <div class="masterpass-fullcheckout">
35
+ <p class="masterpass-logo">
36
+ <?php $shortcutHtmlId = $this->getShortcutHtmlId() ?>
37
+ <a href="<?php echo $this->getCheckoutUrl() ?>">
38
+ <img src="<?php echo $this->getImageUrl() ?>"
39
+ alt="<?php echo $this->__('Checkout with Masterpass'); ?>"
40
+ title="<?php echo $this->__('Checkout with Masterpass'); ?>"/>
41
+ </a>
42
+ </p>
43
+ </div>
44
+ <div class="masterpass-or-top">
45
+ <span>
46
+ <?php echo Mage::helper('expercash/data')->__('-OR-') ?>
47
+ </span>
48
+ </div>
49
+ </div>
50
+ <?php endif; ?>
51
+
52
+ <!-- button bottom -->
53
+ <?php if ($this->isCartBottom()): ?>
54
+ <div class="masterpass-wrapper-bottom">
55
+ <div class="masterpass-fullcheckout-bottom">
56
+ <p class="masterpass-logo">
57
+ <?php $shortcutHtmlId = $this->getShortcutHtmlId() ?>
58
+ <a href="<?php echo $this->getCheckoutUrl() ?>">
59
+ <img src="<?php echo $this->getImageUrl() ?>"
60
+ alt="<?php echo $this->__('Checkout with Masterpass'); ?>"
61
+ title="<?php echo $this->__('Checkout with Masterpass'); ?>"/>
62
+ </a>
63
+ </p>
64
+
65
+ <?php if ($showMoreLink): ?>
66
+ <p class="masterpass-link">
67
+ <a href="<?php echo $showMoreLink ?>"
68
+ onclick="javascript:window.open('<?php echo $showMoreLink ?>',
69
+ 'olcwhatismasterpass','toolbar=no, location=no, ' +
70
+ 'directories=no, status=no, menubar=no, scrollbars=yes,' +
71
+ ' resizable=yes, ,left=0, top=0, width=400, height=350');
72
+ return false;">
73
+ <?php echo $this->__('Learn more...') ?>
74
+ </a>
75
+ </p>
76
+ <?php endif; ?>
77
+ </div>
78
+
79
+ <div class="masterpass-or-bottom or-divider">
80
+ <span> <?php echo Mage::helper('expercash/data')->__('-OR-') ?> </span>
81
+ </div>
82
+
83
+ </div>
84
+ <?php endif; ?>
85
+
86
+
87
+ <!-- button bottom -->
88
+ <?php if ( $this->isMiniCart() === true): ?>
89
+ <div class="masterpass-wrapper-mini-cart">
90
+ <div class="masterpass-fullcheckout-mini-cart">
91
+ <p class="masterpass-logo">
92
+ <?php $shortcutHtmlId = $this->getShortcutHtmlId() ?>
93
+ <a href="<?php echo $this->getCheckoutUrl() ?>">
94
+ <img src="<?php echo $this->getImageUrl() ?>"
95
+ alt="<?php echo $this->__('Checkout with Masterpass'); ?>"
96
+ title="<?php echo $this->__('Checkout with Masterpass'); ?>"/>
97
+ </a>
98
+ </p>
99
+
100
+ <?php if ($showMoreLink): ?>
101
+ <p class="masterpass-link-mini-cart">
102
+ <a href="<?php echo $showMoreLink ?>"
103
+ onclick="javascript:window.open('<?php echo $showMoreLink ?>',
104
+ 'olcwhatismasterpass','toolbar=no, location=no, ' +
105
+ 'directories=no, status=no, menubar=no, scrollbars=yes,' +
106
+ ' resizable=yes, ,left=0, top=0, width=400, height=350');
107
+ return false;">
108
+ <?php echo $this->__('Learn more...') ?>
109
+ </a>
110
+ </p>
111
+ <?php endif; ?>
112
+ </div>
113
+
114
+ <div class="masterpass-or-minicart ">
115
+ <span> <?php echo Mage::helper('expercash/data')->__('-OR-') ?> </span>
116
+ </div>
117
+
118
+ </div>
119
+ <?php endif; ?>
app/design/frontend/base/default/template/expercash/payment/logo/logo.phtml ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ ?>
23
+ <?php
24
+ /**
25
+ * Note: This mark is a requirement of Masterpass
26
+ * @see
27
+ */
28
+ ?>
29
+ <div >
30
+ <!-- Masterpass Logo -->
31
+ <img id="masterpass_payment_method" src="<?php echo $this->escapeHtml($this->getPaymentAcceptanceMarkSrc()) ?>"
32
+ alt="<?php echo $this->__('Masterpass') ?>" class="v-middle"/>&nbsp;
33
+ <a href="<?php echo $this->getPaymentAcceptanceMarkHref() ?>"
34
+ onclick="javascript:window.open('<?php echo $this->getPaymentAcceptanceMarkHref(
35
+ ) ?>','olcwhatismasterpass','toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, ,left=0, top=0, width=400, height=350'); return false;">
36
+ <?php echo $this->__('Learn more...') ?>
37
+ </a>
38
+ </div>
app/design/frontend/base/default/template/expercash/payment/masterpass/cc.phtml ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php /* @var $this Expercash_Expercash_Block_Masterpass_Fullcheckout_Cc */ ?>
2
+ <table id="masterpass-cc-data">
3
+ <colgroup>
4
+ <col/>
5
+ <col/>
6
+ </colgroup>
7
+ <tbody>
8
+ <tr>
9
+ <td class="label"><?php echo $this->__('maskedPan:') ?></td>
10
+ <td class="value"><?php echo $this->getMaskedPan() ?></td>
11
+ </tr>
12
+ <tr>
13
+ <td class="label"><?php echo $this->__('cardScheme:') ?></td>
14
+ <td class="value"><?php echo $this->getCardSchema() ?></td>
15
+ </tr>
16
+ </tbody>
17
+ </table>
app/design/frontend/rwd/default/template/expercash/checkout/onepage.phtml ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Expercash Expercash
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
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Expercash
18
+ * @package Expercash_Expercash
19
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+ ?>
23
+ <div class="page-title">
24
+ <h1><?php echo $this->__('Checkout') ?></h1>
25
+ </div>
26
+ <script type="text/javascript" src="<?php echo $this->getJsUrl('varien/accordion.js') ?>"></script>
27
+ <script type="text/javascript" src="<?php echo $this->getSkinUrl('js/opcheckout.js') ?>"></script>
28
+ <script type="text/javascript" src="<?php echo $this->getSkinUrl('js/opcheckout_rwd.js') ?>"></script>
29
+ <script type="text/javascript" src="<?php echo $this->getSkinUrl('js/expercashopc.js') ?>"></script>
30
+ <ol class="opc opc-firststep-<?php echo $this->getActiveStep() ?>" id="checkoutSteps">
31
+ <?php $i=0; foreach($this->getSteps() as $_stepId => $_stepInfo): ?>
32
+ <?php if (!$this->getChild($_stepId) || !$this->getChild($_stepId)->isShow()): continue; endif; $i++ ?>
33
+ <li id="opc-<?php echo $_stepId ?>" class="section<?php echo !empty($_stepInfo['allow'])?' allow':'' ?><?php echo !empty($_stepInfo['complete'])?' saved':'' ?>">
34
+ <div class="step-title">
35
+ <span class="number"><?php echo $i ?></span>
36
+ <h2><?php echo $_stepInfo['label'] ?></h2>
37
+ <a href="#"><?php echo $this->__('Edit') ?></a>
38
+ </div>
39
+ <div id="checkout-step-<?php echo $_stepId ?>" class="step a-item" style="display:none;">
40
+ <?php echo $this->getChildHtml($_stepId) ?>
41
+ </div>
42
+ </li>
43
+ <?php endforeach ?>
44
+ </ol>
45
+ <?php echo $this->getChildHtml('checkout.onepage.js') ?>
app/etc/modules/Expercash_Expercash.xml ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Expercash Expercash
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Expercash
19
+ * @package Expercash_Expercash
20
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+ -->
24
+ <config>
25
+ <modules>
26
+ <Expercash_Expercash>
27
+ <active>true</active>
28
+ <codePool>community</codePool>
29
+ <depends>
30
+ <Mage_Payment />
31
+ </depends>
32
+ </Expercash_Expercash>
33
+ </modules>
34
+ </config>
app/locale/de_DE/Expercash_Expercash.csv ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "ExperCash (ELV)","ExperCash (Lastschriftverfahren)"
2
+ "ExperCash (CC)","ExperCash (Kreditkarte)"
3
+ "ExperCash (SO)","ExperCash (Sofortüberweisung)"
4
+ "ExperCash (GP)","ExperCash (giropay)"
5
+ "ExperCash (PP)","ExperCash (PayPal)"
6
+ "ExperCash (PC)","ExperCash (Barzahlen)"
7
+ "Enabled","Aktiviert"
8
+ "New order status","Status neuer Bestellungen"
9
+ "Sort order","Reihenfolge"
10
+ "Title","Bezeichung im Shop-Frontend"
11
+ "Payment to applicable countries",""
12
+ "Payment to Specific countries",""
13
+ "Payment from Applicable Countries","Zahlung aus erlaubten Ländern"
14
+ "Payment from Specific Countries","Zahlung von bestimmten Ländern"
15
+ "URL","URL"
16
+ "Paymenttype","Autorisierung / Direktbelastung"
17
+ "Popup Id (popupId)","Popup-ID"
18
+ "Profile","Profil-ID"
19
+ "Authorizationkey (IFrame)","Sicherheitsschlüssel IFrame"
20
+ "Paymentkey (API)","Sicherheitsschlüssel Gateway"
21
+ "Project Id (IFrame)","Project-ID"
22
+ "Return URL","Return URL"
23
+ "Error URL","Error URL"
24
+ "Notify URL","Notify URL"
25
+ "Iframe css class","IFrame-CSS-Klasse"
26
+ "Iframe width","IFrame-Breite (z.B. 400px)"
27
+ "Iframe height","IFrame-Höhe (z.B. 400px)"
28
+ "CSS file url (https!)","CSS-URL (https!)"
29
+ "Error in refunding the payment","Fehler bei Gutschrift: Keine Gutschrift möglich bei ExperCash!"
30
+ "OA","Offene Rechung"
31
+ "CC","Kreditkarte"
32
+ "DD","Lastschrift"
33
+ "Choosable","Frei wählbar"
34
+ "ExperCash payment loaded","ExperCash Payment geladen"
35
+ "Authorization was successful.","Autorisierung erfolgreich abgeschlossen"
36
+ "Customer was rejected by ExperCash","Kunde wurde von ExperCash abgelehnt"
37
+ "Transaction Id/Pay-ID at ExperCash: %s","Transaktions-ID/Pay-ID bei ExperCash: %s"
38
+ "Paymenttype: %s","Zahlungsmethode: %s"
39
+ "Paymentinformations ExperCash","Zahlungsinformationen - ExperCash"
40
+ "You will be redirected to our paymentprovider after the checkout","Sie werden nach Abschluss des Kaufvorgangs zu unserer Zahlungsschnittstelle weitergeleitet"
41
+ "Error!","Fehler!"
42
+ "Errormessage!","Fehlermeldung!"
43
+ "ELVAUTH","Lastschrift (Autorisierung)"
44
+ "ELVBUY","Lastschrift (Direktbelastung)"
45
+ "CCAUTH","Kreditkarte (Autorisierung)"
46
+ "CCBUY","Kreditkarte (Direktbelastung)"
47
+ "SOBUY","Sofortüberweisung (Direktbelastung)"
48
+ "GPBUY","giropay (Direktbelastung)"
49
+ "PPBUY","PayPal (Direktbelastung)"
50
+ "Capture was not successful: %s","Capture konnte nicht durchgeführt werden: %s"
51
+ "Invalid amount for capture.","Ungültiger Betrag für Capture"
52
+ "Error during capture: %s","Fehler beim Capture: %s"
53
+ "Transaction Id for Capture/Buy at ExperCash: %s","Transaktions-ID für den Capture/Buy bei ExperCash: %s"
54
+ "Epi Payment Id/Pay-ID for Capture/Buy at ExperCash: %s","Epi Payment-ID/Pay-ID für Capture/Buy bei ExperCash: %s"
55
+ "Capture was successful.","Capture erfolgreich ausgeführt."
56
+ "Buy was successful.","Buy erfolgreich ausgeführt."
57
+ "Epi Payment Id/Pay-ID for Capture/Buy at ExperCash:","Epi Payment-ID/Pay-ID für Capture/Buy bei ExperCash"
58
+ "Payment type at ExperCash: %s","Zahlungsart bei ExperCash: %s"
59
+ "Transaction Id at ExperCash: %s","Transaction-ID bei ExperCash: %s"
60
+ "Transaction Id for Capture at ExperCash: %s","Transaction-ID für Capture/Buy bei ExperCash: %s"
61
+ "Create Invoice at buy","Rechnungserstellung bei Kauf"
62
+ "Create Invoice when receipt of payment","Rechnungserstellung bei Zahlungseingang"
63
+ "Allowed Currencies","Erlaubte Währungen"
64
+ "Select alternative payment method","alternative Zahlungsart auswählen"
65
+ "Response is null.","Response ist null."
66
+ "Response status is not correct: %s","Der Response - Status ist nicht korrekt: %s"
67
+ "Capture was not successful. Message is: %s","Das Capture war nicht erfolgreich. Fehler: %s"
68
+ "Capture-attempt failed with message: %s","Der Capture-Versuch ist fehlgeschlagen: %s"
69
+ "Error during capture: %s.","Fehler während des Capture: %s."
70
+ "Capture was successful. Captured amount: %s %s","Capture war erfolgreich. Captured %s %s"
71
+ "Error while transforming response to simple xml.","Fehler beim Umwandeln der Response zu simpleXML."
72
+ "owner: %s","Karten-/Kontoinhaber: %s"
73
+ "maskedPan: %s","Karten-/Kontonummer: %s"
74
+ "cardScheme: %s","Kartensystem: %s"
75
+ "validThru: %s","Karte gültig bis: %s"
76
+ "panCountry: %s","Kartenland: %s"
77
+ "ipCountry: %s","IP-Land: %s"
78
+ "attemptsTotal: %s","Transaktionsversuche Gesamt: %s"
79
+ "attemptsSameAction: %s","Transaktionsversuche Zahlung: %s"
80
+ "3dsStatus: %s","3D-Secure: %s"
81
+ "3dsecureValue_0","nicht verfügbar"
82
+ "3dsecureValue_1","versucht"
83
+ "3dsecureValue_2","voll authentifiziert"
84
+ "send mail after automatic invoice creation","Rechnungs-Email automatisch versenden"
85
+ "paymentStatus: %s","Payment Status: %s"
86
+ "MPBUY","Masterpass (Direktbelastung)"
87
+ "MPAUTH","Masterpass (Autorisierung)"
88
+ "-OR-","-- ODER --"
89
+ "Show Learn More Link","Learn more Link anzeigen"
90
+ "Show Button in Cart","Button im Warenkorb anzeigen"
91
+ "Show Button in Mini Cart","Button im Mini Warenkorb anzeigen"
92
+ "Show Button in Checkout","Button im Checkout anzeigen"
93
+ "No","Nein"
94
+ "Yes","Ja"
95
+ "Show ""Buy with Masterpass"" Button in Cart","""Buy with Masterpass"" Button im Warenkorb anzeigen."
96
+ "Show ""Buy with Masterpass"" in Mini Cart","""Buy with Masterpass"" Button im Mini-Warenkorb anzeigen."
97
+ "Show ""Buy with Masterpass"" in Checkout","""Buy with Masterpass"" Button im Checkout anzeigen."
98
+ "Additional Checkout Info","Zusätzlicher Checkout-Text"
99
+ "A custom text can be displayed in checkout to promote Masterpass Full Checkout.","Es kann ein zusätzlicher Text für Masterpass Full Checkout im Checkout angezeigt werden."
100
+ "Show Logo","Logo anzeigen"
101
+ "Show Masterpass Logo for Payment Method.","Masterpass Logo für Zahlungsart anzeigen."
102
+ "Show ""Learn More"" Link" next to logo.","""Learn More"" Link neben Logo anzeigen."
103
+ "With MasterPass, you can use the stored payment and shipping information from your MasterPass account to buy quickly, safely and easily. If you do not have a MasterPass Wallet yet, please contact your bank.","Mit MasterPass können Sie die in Ihrem Masterpass-Account hinterlegten Zahlungs- und Versandinformationen nutzen, um schnell, sicher und einfach einzukaufen. Wenn Sie noch kein MasterPass Wallet haben kontaktieren Sie bitte Ihre Hausbank."
104
+ "Learn more...","Erfahre mehr..."
105
+ "Pay with Masterpass","Zahlen mit MasterPass"
106
+ "Masterpass FullCheckout is not allowed for billing country. Please choose another payment method.","Masterpass Fullcheckout ist für Land nicht verfügbar. Bitte wählen Sie eine andere Zahlungsart."
107
+ "Invalid response from Expercash. Please use default checkout.","Fehlerhafte Antwort von Expercash. Bitte verwenden Sie den normalen Checkoutprozess."
108
+ "Operation canceled.","Operation abgebrochen."
109
+ "Display Credit Card Data in Checkout","Kreditkartendaten im Checkout anzeigen"
110
+ "If set to ""Yes"", masked credit card data will be displayed in the payment step.","Wenn ""Ja"" gewählt wurde, werden die maskierten Kreditkartendaten aus dem Wallet bei der Zahlart angezeigt."
111
+ "maskedPan:","Karten-/Kontonummer:"
112
+ "cardScheme:","Kartensystem:"
113
+ "Show Link","Zeige Link"
114
+ "Enabled = Directsale / Disabled = authorization","Aktiviert = Direktbelastung / Deaktiviert = Authorisierung"
115
+
app/locale/en_US/Expercash_Expercash.csv ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "owner: %s","card-/account-owner: %s"
2
+ "maskedPan: %s","card-/account-number: %s"
3
+ "cardScheme: %s","card system: %s"
4
+ "validThru: %s","card expiration date: %s"
5
+ "panCountry: %s","card country: %s"
6
+ "ipCountry: %s","ip country: %s"
7
+ "attemptsTotal: %s","transaction attempts total: %s"
8
+ "attemptsSameAction: %s","transaction attempts payment: %s"
9
+ "3dsStatus: %s","3D-Secure Status: %s"
10
+ "3dsecureValue_0","not available"
11
+ "3dsecureValue_1","attempted"
12
+ "3dsecureValue_2","fully authenticated"
13
+ "ExperCash (PC)","ExperCash (Pay Cash)"
14
+ "Payment from Applicable Countries","Payment from Applicable Countries"
15
+ "Payment from Specific Countries","Payment from Specific Countries"
16
+ "send mail after automatic invoice creation", "send mail after automatic invoice creation"
17
+ "Masterpass FullCheckout is not allowed for billing country.Please choose another payment method.","Masterpass FullCheckout is not allowed for billing country.Please choose another payment method."
18
+ "Invalid response from Expercash. Please use default checkout.","Invalid response from Expercash. Please use default checkout."
19
+ "-OR-","--OR--"
20
+ "Learn more...","Learn more..."
21
+ "With MasterPass, you can pass the stored payment use and shipping information from your MasterPass-Account to buy quickly, safely and easily. If you do not have a MasterPass Wallet yet, please contact your bank.","With MasterPass, you can pass the stored payment use and shipping information from your MasterPass-Account to buy quickly, safely and easily. If you do not have a MasterPass Wallet yet, please contact your bank."
22
+ "Show ""Buy with Masterpass"" in Checkout","Show ""Buy with Masterpass"" in Checkout"
23
+ "Additional Checkout Info","Additional Checkout Info"
24
+ "A custom text can be displayed in checkout to promote Masterpass Full Checkout.","A custom text can be displayed in checkout to promote Masterpass Full Checkout."
25
+ "Display Credit Card Data in Checkout","Display Credit Card Data in Checkout"
26
+ "If set to ""Yes"", masked credit card data will be displayed in the payment step.","If set to ""Yes"", obfuscated credit card data will be displayed in the payment step."
27
+ "maskedPan:","Credit card number:"
28
+ "cardScheme:","Card type:"
29
+ "Show Link","Show Link"
30
+ "Enabled = Directsale / Disabled = authorization","Enabled = Directsale / Disabled = authorization"
app/skin/frontend/base/default/images/expercash/masterpass.png ADDED
Binary file
doc/Expercash_Expercash/.gitkeep ADDED
File without changes
doc/Expercash_Expercash/Benutzerdokumentation.pdf ADDED
@@ -0,0 +1,6953 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ %PDF-1.4
2
+ %���� ReportLab Generated PDF document http://www.reportlab.com
3
+ % 'BasicFonts': class PDFDictionary
4
+ 1 0 obj
5
+ % The standard fonts dictionary
6
+ << /F1 2 0 R
7
+ /F2 4 0 R
8
+ /F3 50 0 R
9
+ /F4 59 0 R >>
10
+ endobj
11
+ % 'F1': class PDFType1Font
12
+ 2 0 obj
13
+ % Font Helvetica
14
+ << /BaseFont /Helvetica
15
+ /Encoding /WinAnsiEncoding
16
+ /Name /F1
17
+ /Subtype /Type1
18
+ /Type /Font >>
19
+ endobj
20
+ % 'FormXob.debfe39a01d8602d733fbbcad4ae132a': class PDFImageXObject
21
+ 3 0 obj
22
+ << /BitsPerComponent 8
23
+ /ColorSpace /DeviceCMYK
24
+ /Decode [ 1
25
+ 0
26
+ 1
27
+ 0
28
+ 1
29
+ 0
30
+ 1
31
+ 0 ]
32
+ /Filter [ /ASCII85Decode
33
+ /DCTDecode ]
34
+ /Height 189
35
+ /Length 160993
36
+ /Subtype /Image
37
+ /Type /XObject
38
+ /Width 855 >>
39
+ stream
40
+ s4IA=!%^r[Dffo=BQ%i41G1?]3'p22"76'g!!!!1!A"3N!!*'#!A"3N!!*'#s5?*qBQS?83\N.(F"Um3Ddm91@rH3;G[YPE0eP.5!'EJjE+*6lATT&(AS5^p4X0@,^EOe7A3D,<2,,c!E'n2MBh3PjAQ*nM<+C5i@l\'D5<]E:GWL(dE,B0.@3Bf3Ci4;TGWd6ZA8bpg3c9""D.Rft0-VN`3d>L\FDF#`6"FnCAKY)L:`r,DEb-@M/hnqf0JbU01c?sA2`EEN1+XP;EbQXcARZc;1E\G,0K1+/1cd?L3\`T:+<VdL+<VdN4piDT+?X[TAi`gX7NcqmCi4;TEb&cF,%u(?E&oX*GB\6`G;CjiEb@$[3B9)Q0JY::1+dNWAhA(LDKK<3/T,VS,!H>V+<VdL+?X[TAi`=kF(96)E-,f4DBNt1Aia@0Dfp.b+sI@:+<VdL+<VdL+<VeOD/=*23b2_`,%u(?E&oX*E-62;/oPcC04\QGASbppASuU20/5(60-WRe+<VdL+<VdL+?X1E3bE;ND..NMBl.9kAM7e;AS4+YA7IZ4DfT]'F?U$S+<VdL+<VdL4Chq_FD5i5ANgGD+<VdL+<VdL+<VdhEb&cC6#:X,$6UH6+<VdL+<VdL+<VdL4E=tE3c&LQG\q7XCgh3o4X,,&A7]@]F_l.D5"'F6@r"1[Eb&cCChZ'?+<VdL+<VdL+<VdL4>1_cAi`4oF?U$S+<VdL+<VdL4>15T3co(XCh5d;+<VdL+<Wd"Eb&cC6tLFLEbTK7Bl@lQ$6UH6+<VdhEb&cC6tLFLEbTK7Bl@l3Eb&cC@:F.tF?Lfl$6UH6+<VdL+<VdL+F%a>DK@j`@;n@RBQS?83\N.(F"Um3Ddm91@rH3;G[YPE0eP.5+poG8+<VdL+<VdL+<YoGCi4;TG[YP]8Sr*',%u(?E&oX*DK@F=A8bpg/n8g:06goE0/5(504uqPD.bLG4piDT+<VdL+<VdhG[YPP6ZQaHFDl2!Df9GU8Si3cF*)G2FDl1^06goE3^[q!@<?F.<,Z\k4piDT+<VdL+<VdhG[YPP6ZQaHFCdjKFCdWk0JGL=0JY470iTk]3\`BN0JP(30fh!B4>1qfE&p@,ART[l6t(1K4piDT+<VdL+<VdhG[YPP9lFQVApHdQFCdWk0JGL=0JY470iThe3\`BN0Jclp06goE3_aO'BkDWY@<?'E$6UH6+<VdL+<Wdk@;n8%ATV?k@<>pG@<?'E1,(CB/MJq30elW^0KLpD3\W9=0JPUB0K_"5@;n8%ATV?k@<>pG@<?'E$6UH6+<VdL+<Wdk@;n8,BQ\0$DII6qF$9pR+<VdL+<VdL+<VdhEb&cC6#:X,$6UH6+<VdL+<VdL+<VdL4E=tE3c&LQEb&cCE+*d.AQ3qoAN_58ATMd4EarZ)4piDT+<VdL+<VdL+<VdL+<VdL4Et:R7nIQ13d5:KFD*in2)[QMG[YP]8Sr*$GA1T0BKcbG+<VdL+<VdL+<VdL+<VdL+?XmWE(<K:B0'^;BkM+$4uG5\06goE7nIQ13bW)=B4uBN$6UH6+<VdL+<VdL+<VdL+<VdhG[YP]8Sr*$AoD^,@<=\*:dml:06goE7nIQ13bE;ND..NM$6UH6+<VdL+<VdL+<VdL+<VdhG[YP]8Sr*$Bl.9kANhb-C+hD05uCQr>"V\*5sdkM77'[67<:a\6n^Jr6$$$rBQdoV3I5+(3Hn%_9m'/r5r;GSCed8H0L7uj5s[e'5se725s[e&76r7FGX4DW;+5Ol5s[e&;*dN%.l9O[CIW)K1.l@K7oVc?5s[e&AhRUZ8Pqc?B2M)a5ug??B2qDfB5:"(;-?LYG@sE4B4jn+6#TC`GAg,$,BuL96pa166pZ#k6pZ#o6pWY+76rn/6paUI7RBsO7<j#c7sK)b89d++89d++89d++89[Kn6?cp76pWM077':C7qbn#7T+/:89d++-6mb$4%OTUAk7/+Ak7/+Ak7/+Ak7/+Ak7/+Ak7/+Ak7/+Ak7/+Ak7/+Ak7/+Ak7/+Ak7/+Ak7/+Ak7/+AhQ,05t+X`5u0d85s]]`;C3W55s%@u8Q%iO9i=8h01A088O5X.5tF:=77':;76s4*5s[e&5s[e&;+<iq8Ol'D5tF@/CJ.$=76s4P8OPjA77':;76s4*5s[e&5sZhBGX4DW;*dQ8G>UgrB4FM#;/],s5s[k(;,'GEB2M#_B4F=r5tOR4DG<G`B2)8j5s[t3;Fu+1<^fMI1.>ne=[c=bE(=S.GZT,eBi%,C,BuL9<HLcF9mBiU3($ShB6H^[;0l,>CN3!m=YilA:/t//CGnt7:2"0<>"DU\0QfrY8oIEr6YL+9BM)/l;K5Vh<ch);91!ZE1bVZo-6mb$4#'N10NqR[7VlL70mI52CcPR#12(W8D00i.=#G/(1K#r<DIbS8=E$32822W,1J^GQ=^aj88Sq+71jMi2D_"1j2,dOlE+N0h=sbJ=5s''qDFuZqDDb(%E(a8LE&MELEH-,BEa^kLDc/ke8OGd@8OPmB<CK5O=[b\D9giGf76s4Q779I078lo\77L9T:2!43>'O[`7<p4)GX4E0@Rt]49h8/=;bf\L<_@(9G"$^L6rHEcBOOh>Gun]_2bZS*1Jh"FAP,C(G[sfiG@sN8BP1L@C0F(sBk2!i7TD6(EDLn)H"V(C,BuL90IotGBM)3=FA5_72,I1eA6Du7E+2p=0kFHA;J]NRA8bmXE,oDX0m-q\;DD^"A2Ik"E&VB"0e6il:ISr"@7Y*(D+eS"Gtr*m-6mb$4"E^88lo)12/-62E-5Z.=uKu.EDL@h@:=%n95SZg2L0CbE@Z2c@6m2'6pX[96UajH;F*]16#/5u.p=r70ki:VF]p_<;,V4E=XGA<5s&48GXGAL=B\QgF>,X63(lbP.oCI]@T.JK@<?Nh:GciX:GR!.=ZBtb2Gct@3G!IhAnc'q=>_jGDKnop<dIFs=ZCCsD_XmY1eoABGX4Dg0h5kZ;+GLa0h"K2<(TnABkDEH:ip;Q13I:b84?<MAk[,6=CHAS@mW"T3&>D)G=,;2DL-VP6n;D@BNe7hA9r5rG&]Nd757F^,BuL90l:];=[kn;CNWHf8oHClC2I$36;]UW2D[[7:JG\GEbdLKCO1:d;+!9a3Ft'oC3E*?Ao2U89Ij1#D,P1B<bQG32*sfX89[U!-6mb$4).]+1NR/>0K*Yr2f(Ee.ofDk0fWoV2)R?JAMl/eGqi#p@r-6rD)Ga#=a<_\<DRU784[n`5tGlj@;\n47R]a[1K-2D7SHHR9I;!/5s'$E==[KE2+&ltG"[!r:fMOJG%>&qFZ3`T3FX^:A5H;a:,[/^CJf%r1,;O920)GkE\prk7nH0O2b68R2,S3_7oj\+0/\#X3,g2hGX4DnD/(S)=\qh7CH-$07rq(3@mX7"9Lr]=9Qi*F89%3s;)rhU>#8C>=]9'ZDJ`3m@qKgM6>B2.84du)02-OHF>@lKCO.X"8U,A),BuL91.?:FE&i&M@5_h&2gJLZA4\IUF`'2tH:]u50LT)W>#%Y$82NYY:btmN6rduGF\OkmG%F`e3&EX,=*.J&0kFlhEdD273&#D6-6mb$4*#:]E,J?l<-W8'E+rBEF=T:jH;77L1c9/2Dd$%RB1YuZ04QhMBP:%KC/&S^3AsSb20j$n1KSU/H:i-nD-&_N@o5-r8m,k:=!f/:5s$c8CKa;ICJ?Ks3,M\p6$R<d7k7Ir9R(eV;c?FM>%DPtCI:BU0N^5"07%A(@:=C<;_U"/=\`RFBQcC6F)O`,7:AJP8m#tF=&gRlGX4D_;b0;V85!ho2IU-;7oXS)G\pSC:NoQ-6ut=dB1-;g6U<@u=?(SL:2XlMH89YZDL+i`H!"Tl8n;g==ArCL94DHh6n<%f;0@+1,BuL9E].*4B1Y!]:/X#s0kG38CNq@%7:Iu\85s#3@nJ^LC1^@<06]g%9LEB&9N<`>B5)-b6!6luG"-1=01\Vj>$*OY:2jf3DDH!+-6mb$4&8@i:22S#H8oS7:0;@NH$WUO04J?K6t1@BH$+C0H"D&!=D18[AMmS!EG\f]FCmp39mBBD<*3ig@rQZ]F\HX4GqVcC3-J%t3$okp5s&g>9P#tLD_j:R3-6lb.s5WCAl!,]2IUQL.o9htF^];l@:rbI6"a1V6r[;gC2-XAG&:]61N4jbAo13l=YY#:D0%U[@rs_ACiq'LGX4De<\[6n<-)btGZ.Np<`iKj@T#0`1g5'4CM7C+@oZB$DH0P#Gr8Af;G^D2DDc&[CKb^2G=,I_C/-X*3-AXg:e>bEH"L-#8PXFU,BuL9:e,PK79<AXC19#>9m:SPEF`R(A5I;b2/m%oD`BOEH=9Z-BR!BHASj)967Z5^D_#=>6Zk=a=%Gc&E]-iM@<ksM6#^[SCd_c(-6mb$4'GNZ@r+e,:/PRn@l7mZDdcdO2*lIE7X7!bEC=SWG'ZMO026J5G[rR?GUmHL9PdEtEH+Kl9P@1=84ci_7SmQ'@r#7\:K_L0CaLBO5s$`9=E87s=(sHF2.]HiH?qt67VZF-3,L0&9Pn])DDsOT:f:muASX2;E*$au=(Q;P8p,/j='9W:='Bf;E`,q<FEUVt6>'5582V_=GX4E02K^`f2.9o\:2+c(3D"9jCLT_(:hjJnBN-m"<`r<N=)E"\7Vjr#C34K41HA)YC,nq%CG7V?6:sa'05<13H?X:=H<E[[92Kp],BuL976!"[Eb%'`11t$+8MF.5@SB6_8U>Vi=&q4g75&q#FA$1@7TNPdH"Sj590u6-A5uN$3(%jT8U5;G3H.i?@Q%dn:2r9^F)k\H-6mb$4*5"$Bll:N>&ZE;9/Aq]<)$;9>'Fk/7rU7B1e)%TAo)9[:G6TQ0ig/%>%L-FGY1O\Fa@^u3FactCLKhT6:,Tg@T6?(00r!P:F7<25s%D,H$VGh2)T820Mb5T>%fotCGJLS82=s?@nKU6Ao(pS=*@D8<bcSq2+930>%L\f9keECG\L0'9lNL38Q0J!G$.X<=*A[CA2kn\GX4E.2L'7:A3rsm1371c3Di.?<_5,m<_-nM8U3*YC,@e^:h<]u=(XihDKS?(CbSP.1Gs#/0fF#+G&UK$:iTMr9eT:G0g\Gu@lJQX,BuL99M%$aEC3]JH:UhMH!3dBGZmj/2)[s#=&CncCcPTN5tXscCH5NJ;IW+9FZ3JtG'ZVgE-QM7Ch@`d8hi=r7s-gb04A<ME_g7$-6mb$4)K%7<A76gA2A1892/PBE)9J-GA^&VDC]0m00r3(<-h4k13tf2.nN9+C/\_#F(Su;2JOa$Cc?&Y>%W%P3%HmR2,#uT==\;u1+"5j5s$c?1-'S_D)5p$94`#t9mLY-1iZ918RjQ!FYGdrF&>Lh2fVS^D/*g$<(]/BAQ)EOB/jd?@l[S+0Qp>qF[pRm=\!UP75.h_E],6hGX4E"F_O?ZEF^S"B6mK[3Clt89PZRh7WDR76rd620262,Ak"Y#3,LQgDe_U:@oI>)Chu[!2b&$_3)rjs1."PhF>lWG6r[?56u>OC,BuL99fOXsC1g[mBkUsr=@kG[=EuVZC3Xr$1MKZZ=`[GY.s+[&Dc'SV;eS]rB.l#D0h,&aBfL9WAS$!d0P+iOG'%aaG%O?$E]$]R-6mb$4)e7kBQmHb;aO8j1JL\*6"FeU06gE=1,:^r9NX;j6!AOaDgFrH9mL;`G;Nu#8SL_A00rDo5u1O)00qsB12AO&6"3Sk00r3,GpXb\5s$rG.sZ:sF"97*DIHX%6o.YL:eG>::jF^5Ai4".=A3I0A5dSj;b'AW9Lpm?Ci!!X79=b87l<1`A5@>VG"udg9MA#D82b3C2fg;jGX4E$9kR11;cGG=2/k6jFu;*0:eskG0Qg--FE2\.G\'N&91EAl7o`JX;J0QS3D)pu3+R(d@s0Y0DJqO,04?bU8iTdH=Z8!"9Pn5c,BuL906]f[=*?PhGVN#gDD+LI2(pe(88V$U<-`:>84ba>05)k/=YFT%.qLAL9R/EO6niLV:/b^^7QFXk8TT)jBJja02/Zo(@V\Uq-6mb$4&&F_EHFN_DJMs[<^ptG3Eg045s]C!2c;M23&4o?20(BH9NQ=.9k\TeD.H(0EB$I/7sJ'SE`G,ED0(#+E*5&.8i:a'C3`0LF!`,V5s&RoH#,!/>!Xf;G#Lb-;.XcZC1]8D8pG5N@5f\n:j4EL:M__.3'h.k1bWfZ2(ppH67ZP+75/n17WD4=G%5c?EADN,F%&Q8E^;#sGX4E:6=jSH3,3G.0i^kBE&TIs<b-))>#T]6=A_k>0m-JoB2UHX7o1^G<b>$$E*$mo@<cfQ0h3ouE,e3XB6/2mE&M?B9Pm[P=?14F,BuL9Eb@Zg:1JH+<dA=n;FjMW86RcCB1GiXE]6i`=&;_5ATUg(F^d=O2K!"o:fTA_Ao)]]9ef=_=EQ,\9QO6G<+]uD@oG:320X+%-6mb$4%3dW;FG_B1,D44DFmMm2F]MX.p#2?:+KL<D/N6`9lt8b=(*UrC3Xu"6W,U,CiiQJ6o@VW=`7kn@:WtJ==\8E0fMQTA2?qgGpXb\5s'*G6>0G<0Nghf7k[[hD)3q^.q2[U3EA^dF\5PB=*$)hEEGOq9i,\I3HdeXBPqEuH8p4m757Um2e>!G0gds0B1Z\c2-P/_Cb$hWGX4DI.sZ(o:I7`K@WF+f88W2sG=#2N0j/KU8N:KoGZnNR2/-]H2_];HAPQDpGZA6g<bk?C@Pr$jBJr>"Fu=+e<cW(W9R/F.CMccm,BuL9CG81m@6o-R6u.':6oegO=%d.A8hYI+9J8@k9h\/4GY1\/BLQK4ApQpi0m5KKH8/T+2fVE38T-OC;*e/Z68*"l=>su,AT]YL-6mb$4)&^hG'Z\IE-$/71NtQHGV;urC.L]G0KEfj=&jQ67:gC+<_,l'H:;d48P3r(8m-FN8QB1l8nV.57Wq.>Ft[`+7!UM+Ci*WXGpXb\5s'$C=\VU^69.YAC.;WV8U*0EC-bHXAoCgUFD*F392]nBFte&]:gm'q956q0D/CqD68^Y\1G;$dBOt7`A5dYp;(t"P=EA(7GVLNiGX4E06ps@@2L7o8GB$`#0/@!-9l3sHGVhBiECVZLA1qRP0P"9]AQ)?A@<X5E@l5tsC.0e%=t_jOE&DGbG=+,t:cLa#;,:@cCG0iX,BuL9=XuLO0h=;\9J]-t2(ppT:JYkE=EunaCH+%,C11O.=a2__F@98%=&2IjF@Kb>;K@%P6Vi#!:,+M=ChuI)9iP1QEHFN^C.hHG-6mb$4'6PSCbJI<2.gE!:eY[`3B;"hCNhO'1J1/?88W&u<_[$tE^jSbA9Cg:2/bHkDf/9M8MWhGGB\7F@R4s+ApS,M3H-iN3,D\t3@5tq5s%Lq:/l?o12Ul$:N()c<A/MgAOU$?F>u0HG&2#1G@aB^5rM,J0fEoE1h/maE]$1"3,gc2:eO_u@Rt6+0Qge`@<ae40f<N^778IIGX4DNFuVcg:Gd)KBl.BN9ljlBB/VJRDea!&G@P5`1GNi!;D2p.01L,#@5;CNCGe"jE,83E<D.1L9mK,e1J;:4G=+>gBM'pp2-P;Q,BuL913IeP88Bt<87XMnCO0Pa6S!(d:G4[n:KDWl5soKECG.Y5@SU#Y5tXt!203ncFuOIm3Hn7QG&^&q<&8f;06]]=Gq2rV=ZCR_-6mb$4&BreH>tr%B/)o%FE2M*1MTu_7TXJA=&N[OF)k_UF(&ZKCfa_\:K:Rg8O5+(@SKs.3(d(88l%9TFXp?CGq_3r.oU@W<)QCeE[E#U5s&RU6u$46F*_D:@oGZ`F@/&S5u9OW;*m3FEcWaMDJUhAF_#31;Kuq1BJafaH>IUTGVN#gDD+:BB6@f:8pE47.sY]+G%WX&@:gi2GX4DN:j?/I.o\/f:KB8/Ai=la=@['`CiO$#=#i!I=@H_=DKSK-3,M<7GtUda=_;_p6>]P>:0).FCe6rK@Q@1rB4G(:6"P'p88h9N,BuL9C,SP#H!t0$7WE6^=a4b";aX?(77MTK=Z:+V;e%OA3,<JM2+MpLCKY@CDe![0@PpJ3E`Y&6E]A8GF?t%O9iY^a3Fl/o;Ccu`-6mb$4)B"68jta91fmRE8k<PiDD=X]1cT)9:MaWS2FL#L76#0PATVm)2*k#QAQ<o"82!kYDJE*g9PH4rCeekZ9OpaRBehYc8RkA:E$cfS5s$SdCN;.L6UPg4:GPd%84IB>=DCN'6<?uUGBuY9:h`j#8S_6r964$O6:Z#]6;_YkG<n_R93QX.A1KW3BP'7l.qNoY1NuH"=>_EMGX4D[BQ,Y?3E'Tf00r*N7RT%I6#9MC@VJIjFDt]+=ZBQ&<FJg(G!]1u;eC/B96NZ_7PQeYC,dnG@5ouU.rS?G2+gh8BLt%&9N=A*,BuL90gg+ED07Th7RL?jA9L^K0f<Tb=[m6^@97__0k5?"BPq!uGZe$>D0',r<)e$TE_J-3D)#KX0f<NXF')1@9LDZs68*Rc9NGs_-6mb$4#CD^9iGkF7QFUQ<\IoW@T[\==@GVg=Z&K49.Nh[AnF>LGsjW:AkI/]DcLn&A62/f=)9Ql<Hh/K;Gq<s:j6\6Cf<_XGAgZ0.jcKc5s&1(E*,jg2,-D[7ne2006)2&1/:bK<E<1EGskYV8nDHbCcQGpCiN!_Bejd>1.GG+A2%gn;KOTb<^Tb8:I[`+2cigJDJW`P;bSM_GX4DL@8'X'<GQ>k2-<ah6rcs$7;"Vj6WZT-Ce?@+CeQKJ:eaVU06g)`8l9@ZG%FW5@PDLHCM.35Ci!`A82*_O:.JJY=EJ[PF(&T+,BuL9;JC/*DL"]/FEMVL128Lh<c;/EE]-KU=`S4S7mhQA:Ma*(11iC(@ma@3:c1%@CMn,nBjl$YE\hMi0kE3r9/pF,;_g="Ci4>e-6mb$4'56VG"-('6"EqhAnXaoAm/#>G#;[==(teo>"CA92cs$fG#Lh#Bk^=VCfiPg00r35.q*O$3&Y2GEGKZ2:g.:,E)n\_AQ1I$3$okp5s&OREHlR]7;7!k3+l#r9mLAADGak#>&n.S6VTpAF)+d"0PtZB>%_VN5q@+<20:Wh7Ws)XBl%T=9PSlE7R_&j;c$UrBLPojD+Z-"GX4DJ86J5^CLL3rG$-=UEI)=Y@s2?4<d&aC3&"oQ:e>5=1J_sF=(kMgCM\<+D),Nq@7sd)6YnJgD_u3L3(IF2<A\Vt=_C/W2I]W4,BuL9H>[Fh:d\/AE%an23&c"V=D_/dC2b\;@;7Z1=*J^EFtn/@F_>bP94`!,3,pm":JWo@6>^cu7qcR'6>K1p;)^m2EH$5>6!5m$-6mb$4#S`fC/n))Ao;cO5ttES;fkcU2f(KMF)Y#r12]O*Gsb2C=CY#u:026t7qQ4H02$4Z>'4Oo84I<7DIYVAGYV@c2,.mQ7qcs(3@5tq5s'7%Gqh!m@Q8FG3,2?$<cg$:GX=_k;H%CUG'J%';,9&d.o((q.q*!bE(P=*8i:a::I/P_G@a`21G;$]<\[^&8i97$05tB&FD*!GGX4E%;Dr-!H"L&O<De!>@oZZ+<bcG+7SkmNDH/?8Ci_C.FD+3=C3)gF:3SUB;b(CpA49"'F)EWs:jQqME,BPr=Dgr6DKK>d@:VhS,BuL90Jum);GqQm69/UW0QD#,<b-#l6"aY'<c^2sB2hH&:MM\+3-IkN8M<Y+Ci)sG;ep)U<`sE#9hRoD=*[)EB/r=R0h6.8G"Q@$-6mb$4)-c7F(7Kr7:p%";-HmRG&CD8DG,.PFA[0@<&f%k0m%ADB1bR%BPKtN:fDCZ3FtcX@WHO0;*f#-E@W_GCH,'WG#M4_=t=,cDC-TQ5s'+4F>[6CA3k<\9LpmP6[2Wd;diU#1dlG3CLL1P91retGr&36F(J9RCKb4$@s<0+EFVRS:dfS?1,!H;2)m=6H>ILS2eHKAE+^LBGX4DFF^[%J:f;%B6#0"`AOCQb04eTQ=*dn*G#W^2;aG,,A8#pAE,A9?E&]L_CMIfaEHc#49Q3][3G_M]6Z['&H#$t`0i_7r8p<oT,BuL9CM@Zd20DZ)9h7Q\.lTD22Ki#CCJB"JA1oiCDf.4(;f4Hr;djKN;Cc3:8TZ_'FuNPt6ud!:;`JW0BQ@$I<C()1DgFB806]^"-6mb$4#0o49QN!i3(c#"@s)O&@4tS>;)Ds4<+7Lu88<HoEHQ1X7qPFjFE^]/==\2Z:iTJpGu&U'12f`a9R0c@2,[IB0/doK5rDb"C*k0M5s&^J>%;&R;CabK0NV=RC3Oqn1fSWXH"KW&1M0T>E,&<.H;%+86Si7oFu!nkBkLsS1JU\Z9egs2E'eMU2/4XM3D=O10JZQ_;`#gGGX4E,Bh1`f0edB'<C(([7qbtG:j.(\Gskb0AMH)$02+&i2fqYl0hX$59gio@@S9ZiGt`$uFA$:GD_sC0E)JJL<AmTE=Z/`EA5me#,BuL9D,4_'CeAVi8RaA105+F*:G4JG=$^hODHAho=B0H7G"b5BAi<OU2G7")=_]cm3CHkC96O!@H$Eq$A55+0.qhag;g<LgBhh,h-6mb$4',<mDe*Ho<GO9KBm)0e<D%ElBK.MR@Ur"aGr]UiDeCt<88r$LG"$UG7RBspF(oH!BPBgh3Fc'1=#!2u3&)poE[sFL@R`%dE@)oT5s'-f@nUl7=Y!B#8o8*Y.n;HhGYpJ(0M#&V0N<<SD/N!&EDoJ"2cFui3H7qTChZ^TF&6=3Cc,rX=*/1h;(H*r<]+>t=&)%sFB9e6GX4E%7oa#CDKSij;)r&>GZS?PA5QB);g<D'B0f:<;d"EZ;`JnQ96#6#8S1[UG"t@r7rC%i;.FKACdqu7A9gmA;)r338n;XVF&lfu,BuL9Bl\8qA8-(*<b,obF&lgcEcY8lBl\8qA8-(*<b,obF&lgcEcY8lBl\8qA8-(*<b,obF&lgcEcY8lBl\8qA8-(*<b,obF&lgc-6mb$4*#CCA8-(*<`<aZAo_oM68_k"<*(be7X$A#1,*NgF%f>R6u51lBidSq9lkM8.o0;_1NQ9+.n<3.@r")H2/P<u;0lYE89/3ODC-TQ5s&.I@<c<M7mg'-CNX*)GuAK7CMdu[@7rmaF[o>AFB2LY=E[Y;<,$&U1h'9K:eZ%8Bk)7*Dc^sf9Ij:YCfFJ><GHS4@V\>B7oq#^GX4DKF)X`l;`/8f2/$Vt8m$0jAPH`VG]?Pn=>Y+MD*qlODFeY*1bq'LGC!/'Gq1anAo1L)=%7:DH?saF=))/S84H?a=###0=A;O;,BuL9G?Jl@3DW7$BOsn::NC_m6Vg933FQ&DCiD.&D_j7aAk-TZ2.]Zp=?(OY96N$[3H[2uE&UsB:i'iYF`L8h12^iL0l1u@AS5^4-6mb$4#]biEcauW1f$b]F[S32:NoSfH87!Z.o&TKAMnF=:ek_8<aeEIED0nR:/>d]<^^+I=a"FIF[SN?9i=r,<,5,n:In0&3Gq5A67*q%5s'*D0mZ<!CF_tM.nF/dATMI#:.@s#CG0U,1ML`B0f"#.G#i'R3-7#L8i1HFCfb+d0NEC:GrRK7F)kG[7r<5r9IjOM7m_N(<b*O%GX4DO8o-A23&NK^BJs[FASY@JG!\rD7s7j1G;:jg2,@[i1/W767nI,e<GZ,^8QSqm<D7O7CJ@Sn<(1asCe/\JCO%m35tF^gD)F:",BuL92doU'3+P!cEHF3BG"tYN=`dOr=$o\Y9l!a=DdkXoDFRH&D_PWg>#Am7>")Rd7r^CT0Lo#d6!._r=&qt'3-]U>F%:4HE-$([-6mb$4)n1s:h"ZK1I?1@06&[GF>Ru\6:adHG<&Dd8TJiME`Fo7=*6r?@9Q,RC0ErM;KZe882Y'l<]+u%@T-<FCfb+K@Q%^g1NYKiF=&5W5s&q,8U,Mh1KS+&79FP07s?h"3H6ln<-guB3-$N?ASu`q1K.=c;(m5_F?*;SEAD8`D)>9g=DV\+6TA4!D,k:#EAD&b9O_LE0i',@GX4Dd<E<.?9//@_>&H#OBiK:9FD*X49NbM>FD>E*FuVcj@8p]:Al)9=1.Z1l<-i1sGuS3_3EK-:FDlGDC27WS0g\6G6pkrEDgHCM,BuL96<.PUEG/uWH"0BGDG3\i6tnPRAhe=PE&DhnAS-3G13?Sd7VkV8:+nLpH=AWt<+0N70N*"38l%uE8O[,bF(oVjB/Mt.9M@9G-6mb$4'>K=F[\)`2E,/YAMJIUH"pApD.RQ;<&7-*00r<Q6o]<aE(s,J1,O/JFYR`A>!ktlH$+(08MYC6;d*@C0ksB[7RKg;:I7!@GpXb\5s&sDG"cUg0MlIRH?`RIAi<"i@VRlJ:eWlk@sV6O0eYt+79!3+@THVh=Yt(RCe\Gd:H2!D3'fo!6ZPUgDc'2R6?61;8jlWW8T?(%GX4E7<d7Vh:LR(3FB3@(2.eg&2H"R:CbnI_.s+<m1.4]U2-Me97<EWJ7Q,6G1jLcbEGmR&=CXlp3,M;g96P)P@ngTPGuI.DD.6Zq,BuL9GUls@:1\3C<d$B288N9"7Q,?BE`PUe8jR5IGB?JX6>8G\68:DV@OkJU6:Xm+Bhi8[@4t/B7S--$7V6R02/H>K3AjSdH?qni-6mb$4'+m-85+"oEbIC-H#tuZ3DEsa0PYiX@qnJ'AP#3f3H8n3<)c:c9i4f11H.p>D*hr/7:RubE\hSjD_"e->"M=UF\4T494`BN<[K&95s%nDFA,anDHBVZ=`\M!Ce\DK@n(HQ<]+?#BQ6a\:/"A8:N]etEFUt+3-$N:9//h\2`5)d8iL9SCc?!.0mQ>l<)lq?@V@\l6T$28GX4D_=%I4=EG0#fD-'"oG[rfm>";A+CLpUnG%NU+E*?CZD)"d9=\*@G9NOQ"=E7A;:,u`^<&I?`:GZj!1/g,I5t`sl1IH(`BM*Co,BuL99589b=Cl><@:a%=Ao)('=Emt)<,tqtG@jK.1N?MT:hXuDAR]Le9P$%h6X!r-A2dG10ka]^1/UqpD,=q$AP>X5@:W)3E&D91-6mb$4"F&\7or;X8n2`rF_+QD3C-5ZDbs&:G\1#d7nR;fG#LDG@PDe*Dc/JqGZ&3c.p-IaG^3mY;eBi*GBY]7;E-=F<E`reD-AenF=&5W5s&OW0QhPZ@r-I#1Mh(lAlDV_F>Z!lBNf%&@5Mgi;b^D5G@YDi5r3O<84e%[0R6Si2+Mh)1JMV$BgQEV=#2LR6Wu9].sQ1o@V$l2GX4E"2/Qkt>$4C=2g%VGDJXDt7<NfEB44kP787328Ol*62-G/XF*UG4<-E>%H;[(1F@%rEEcEmPE`b=g7Vkgd.q^YPC.<J,G'@aL,BuL93E&[V6Xae3<`!lk6VD<4G'HDa6>Ld)9hBVR2Jd&BF](b?GuRF,0euCEGZHRmFa-qYAl*Vb1NdeN;`S8?D0T)_G"aYFChRoF-6mb$4'=OD9QbGD<Glbl12^r#H9tG"7WNd!9lEHgECF\dG"HCL0mGQS7qjkn@5:T"E)nJuH;ud\A4\UI8n!$W6?#^n6;][XBl?U%0IA#h5s'?G=uS9\8S^(S8:"E077)2X8TAJqBM)#n3+lf49Mg!h2-4iXA2J=/<b+`TG#h:;2ek'5<bQVrF\,89F[JH+;-%pA0Lo2i0h!E6GX4DZ92\SXD,>LK:2!0f8Q%i4B1>Q`02,i$;Ia<X93G\63E'a::/<PoH=f']AM7+B@VI]AE]@/q3&acW=AVJ&7kmq=CJA[s>%^JT,BuL91Nm8GCf`>kB3AD>An+YY94MO901fbm;`-OZ2L9C[Cdpfc2E#Ai13$`3@X1m=6=XVG2G.mFDf&or3DFC.AP,NP2-+I<GXYM!-6mb$4#o!-AncO.BkpXG:H1m&9Qj-JCiXh^EADJh=*.k]7;Zfr3I#IN1.+WT0LSKJD_XOW:e,SP9K5X[FE^SQ5q>E>2cb0J2,.RX8L>[,5s&so@obR49K?O-BME>gFEB$L6!%q]AMu%n.nk4^<)t\.1J`0P>&d,U8n)^@7<((CCdTmdH?;c)Anu]e0i:_E:K2.M8MO7%2H(qIGX4De=Cl,JC1\u+6[:UMGtq(WFB:/!@9PuTA99J!794VRB4<cD@nL2`<cDVA=%cRi;fcA#757kAB6S<:=*7XrD/2^gF*TTS0Q_Fa,BuL9@8KBcEABskE[t6JDDEt$1,a2_AOfEqE-,5BG#rg$=Ca6CG=cO;@ko]3:.[6]C2?IT7<NiGG[b,s9lW[AG\^r00JQ.8GVrW--6mb$4"sQYF\YS>1Me^HFC?mWH?(lFFA-7?=*-6.2G7n*2JY9j<DcY<=&sK901/EI=)1uQ85a#33+GO*;JJ]jH8%0q89dce8o..#;C3W55s$l;2eR+\=EI%fH<<pC0i*(-F>Pgr963p*CFaB\=)^u/:KgM32G\B_@nB-uFYcO.75.#J1O2bp@p))gEFWN[2_]Jj>"*1FGVUTjGX4E(G"m-qE`R3OH"8d40Pk].FC]!$0iK_ZG@O$e6s!r@Gr%ij7RM>YF%TM51,LLW<-VSj>'Wq(:d[W1=YP)<Bh<#*0lq(d7kZeJ,BuL9=E&.q<-`:1D(eLN2)Snu3AGS29iY&37l)u"Guo$*9L2'FE&9O2CdL.'G@OEXBR)sC1G</o:KU/4;K#0(@ol3=<*46@3-88F-6mb$4)d)W6uZmL:iSgE9Q4!SCi2+%@TQW'DHCOm;.DCO6<.l?=)D#+=&2+t6"4nG1MqA.Ce8kD7TF%S7S,?pCF`mg@5_n4;gM5Y@4!4D5s%h:EADPjFF%jb7Q!2,@9$EFG@`IECLM3U2K*b4Ce&e\758^jFZ<r!85F279i>M(Gr9Y0C26XV@s2rO8n;FDCfiQ:Al2BE96_d.GX4E8D.@-Y3DM8K.lg'qE_^XeD)?&uAi3IVAT^sBEG0T!02tOoH#5ik;fQt=8P",<BjjbT=)V/XDJjboE^b7n9MAGC:/>VH7moWi,BuL9F'!HaD+/V?AMZ>'FA6su2*k_^=ZKAl1,(RS=[c:^2`<<fG;iPUH$:u!<FU23Ci3-=ARR6%<+0EXAh,hp@5LD=A4nj75se:f-6mb$4)@D_:j-\T6rm3"9/gcJAheB\0m$E:8kO8Q.sa0AAM7gTH=C<%7Ug4\@T?/lBJEIe2ec5i8PCfnG\q):8n^t'FZ3fH6qg*PCF19N5s$qqH=TuVBQuLF68Nb'@ngJl2g&PD84dANH9$.@6tKFQGqh94@:X=W0lgbr6oK'9<I/S'3*JUG3FbcDH:iE?Am.$;9K6*E9Q;C(GX4Do;bh'XAnH6B;JLDS5qdOm.lg!UCb&UDDIGDE8T[aN@TYNA7<EWj78Ic!03D%MF>lK@@8]HO2-2e==&NpI:2*6dF(%L*@;Spi,BuL9C2lsN:1l;)90%-*3-6lN93=bE3-Jt6C1_X!@9>C"F>$=3@5)jnG%ONEAT2ln=#i!*3Ho+QCb'R*;H-_96>KSG@PM>2;f,$"-6mb$4&]m=@VKmo@s0PE:iK6!1O1W^D/O0!3-KCF0Q]-H9JJq67s7ld20*an7s.RH@sV!DF)cIUCG9=;F(I^;78m\eDg$;L:KB>`;C3W55s%S<1eq.S0kPB.=ZB;LGXtMKAi<(83-?`N3F[&?<&e_s7X&Q6:f:n!2dom%0OmOc1eUn,Dg"*a04[h$Ch6R@7;5mq3)suL3G^#eGX4E+GXZ+=Ce&Yk=_r%h2-OR"A4^l<8S`/s3B:/@@8UlX2Jd>KG&_;?DE(6[2)SQ,=a<n>BmFqtF*L)EAo:I#H:`!oDc97aE\UWB,BuL97!CC@;Kl&S=BK!SA4gl^Fu<bf2,%pEDHD+)9NOkC<*+*2<(pCm@U_'7;fXltFEg56@S\a>7;u*u1K[:,@;SSP6#/,P>$*ac-6mb$4(E>(8S^XI6qMDm;eAd#Ch7'P:+L9=FDO9S1+RBc@9?$:Cc?)_EI(\HF_l1[9m1_V<cWCA6>&Y^1f\g=6WH]DD/j\ODIQd>9dV*05s&aQ;E$7Q6<#TuCHXd5G[YP]8Sr*$Bl.9kANgGD+<VdL+<VdL+<VdL+<Wd"Eb&cCChZ'?+<VdL+<VdL+<VdL4>1_cAi`4oF?U$S+<VdL+<VdL4>1qfE&ps3F_tT*@;0P!4piDT+<VdL4>1_cAi`=kF(96)E-,f4DE\CM+<VdL+?X[TAi`=kF(96)E-,f4DBNt1Aia@0Dfp.b+sI@:+<VdL+<VdL+<VeOD/=*23d>(P9hdbpBQS?83\N.(F"Um3Ddm91@rH3;G[YPE0eP.5D/CpM$6UH6+<VdL+<VdL+F%a>DK@j[FAc[^4X+Q]FDs8o05bh`@:X:cAM.J2D(g-BE%`pu0J@KHH#R=J;IsofF`Lu';IsGb,!H>V+<VdL+<VdL4Et:R9hdZ:De!p,ASuT]6p>a9Bk07o77K[57RJjr2F]\p6npDV2FB2f1-%'T1.+Jt2b#bh06goE9hdZ:De!p,ASuT]6p:r#+<VdL+<VdL4Et:R9hdZ?DKBo.DI[6L6p>a9Bk07o7Rfd67RJjr2F]\p6npDV2FB2f1-%'T1.+Jt2b#bh06goE9hdZ?DKBo.DI[6L6p:r#+<VdL+<VdL4Et:R9hdZ:ATDL.ARn8NDf$V;A7dlA@<-F#<-`Fo4X*d8F)Q2A@q?iJ$6UH6+<VdL+<VdL+?X^e;IsH$Bl8!6@;]Rd8OPabF_PAI0fCsV1,h0Z68_4m6praa3As5Z75?kX5r(er6T7Io4>1bt;IsH$Bl8!6@;]Rd8OP`L+<VdL+<VdL+<VdL4EGUBAS*u6De!p,ASuT]6p>a9Bk07Z2)dfV2`O,j2+BSo6npDV2FB2f1-%'T1.+Jt2b#bh06;55AS*u6De!p,ASuT]6p:r#+<VdL+<VdL4>1qfE(s%f6tLCQG%G2REc5eY$6UH6+<Vdh061T83^dP#@rc:&FD5Z24piDT+<VdL4E=tE3^dP#@rc:&FD5Z2+ED")3alK9F`]bj+poG8+<VdL+<VdL+<YoGCi4;TBl%U.F*)G2FDl1_,%u(?E&oX*DK@F=A8bpg/n8g:0556=F`VYF@<?F.0/5(50-WRe+<VdL+<VdL+?X@SCisf@Eaa'.E]R-@@<-I4E):RnAnc'm5#?96DKIuoBl%U.F*)G2FDl1\;flGgFEMP!Ec5Q(Ch5d;+<VdL+<Wd"Eb&cC6tLFLEbTK7Bl@lQ$6UH64>1_cAi`gX7Qq/A06fO&D/a?'FC@??+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL$6UH6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+:956+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<V"6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<Vd6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL$6UH6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+:956+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<V"6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<Vd6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL$6UH6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+:956+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<V"6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<Vd6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL$6UH6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+:956+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<V"6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<Vd6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL$6UH6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+:956+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<V"6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<Vd6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<Vd64?n(0@:O(aF<G.4A3D,\,!S9kmJm__A8bpg!+^T[!!!$!gAjS@!<E3%!<E3%!<E3%!<E3%!<E3%!<E3%!<E3%!<E3%!<E3%!<E3%!<E3&!WiE)!WiE)!WiH+!s8W-!s8W-s1eUK#QVO?<s/O9!!3`4!tbM9&HMjL!7CiI!!WK,!<<*"z!!!!(#R1G8#m1M9!<<K=!!30'"9AT,!WrN,!X8sR!<N?+&HrdO+U8Z)!!k:n5r'Z"#uO#)@3dWF;K77)@Z_s(Ts=)61i`p@_9k+fiDVXdnWKV7<-(Jt2b.@+<E<0>ZGP&LnmmApPD!MBZbt8P.6(r2FXfC484cEU=^#HOBkhg8G^4UhL51SAMNjBlQ^F20UnsrdW2Zf([C3QS\[o_u`lH0Bb1+tmf@\d1jQ5OekiqC)p%J.Tq>1-F!"K,4!!3-&!!E9%560U$hZ!Qsp\=Kr[qYQ-`T_f/T'UpHcVj/dWOHS97;Zm-eMQkVU6?OUUeB$rb@G60.XH>l8M#f#+&Y8jhYlnJYE7Ye)nS&K:EbSYH7CPCfr6Nad,sY6pt`d=3D*]5Ic@YLP^+:]Je^"uLad&8St*'n>FR>@^O,^\&X3$Oo#EC[C23`>GB?^uOc&0\1O!7VmjjeC$;<?YJsB:ioRN5roV_kQIeW;[p=oSkQcagTaa]BoqDim=rrB>hIeW;[p[@fl^/P%3hFmcsrrCHifY@BIqtIjPpU/m_G:1[Bhqe(@LXs/pnlL&']Yfk%M8],^@`[jB'bf2"e4I2\UrMFD",<DIU.D9A?W4OrIJ_p8qqf=W'7M%t%pLY>H@1PE2r3;f^*75@@+eD$(M$7k\1,e+M[i@FX#h$MihA=23n;7l21]:Q=b`=T^&-^#fVcK2pV2(LZ8qNoq2Kbir`bpf2fAPsm;-+Ma43[c*mN@trr=*YZb&.L6O8tH?$ER<kDq!_XOe^pbu3\r(QUAlp!n/h2j;p'q+pSuj6+<SK-t($f)25r1m=b6D9]I[UF!VJ[R-96m>KZp@OY3a/Q8XrA=:)01knD5RGa%ip<f8Q@k]aZX!LZJWP=<6l_pai0;8_<eE?\"'lV1rhnAsU5FAYP.u3;ka\C_kK(rhSrlK@T@WIUWLRSrK\$p:#mmsBlN3p!^j*9^k\SN>CUT3h$.E#V.@1cg<HCT^Z#.M92^0ps@_LT@#pHIQ*(\,4hp02jcK"32J8O6..ch;hKNg=`3'cWcbA>o&9]KJ+N38EQa:du)d'\.>g2m>Y0fm0%^8n*kNW^U;pW/b''Ci0[0]!<NLIZss2(1H[gbcgTorr@b6I$*`SbI=nbo-)f^T)SfUqV%rq%$,Z+[bS^cId>]AbPQ.Eb\ZV[=DkY8>\tW`nl!n6D>NpbUmP+]aJhkn:W$Q7;/^LAgs.-Yr6!d$*OE$9B82_YZh@uM)7DUWDoVd/P/qLq>%;_nn=kNXXpTK&9isaQH"n<M/O'Em2=O.uB;/S`E^4B^Gg[M?Jc=EBJKULRoDop&F7f4qIm`X`mlmKA/_&Mk]m:cMD>qlH?HU+#\@,`<gGKU>Mp,[DGp/;R.[[3@(qc_,Z5I@lW%0$hYK,53/N$K]e3tWu\$&m,O'd*+_:nj_eU+V9^%M[%`Pn5!H^b<tb<qDdQ(Bo=3MV>3L:WD>2hJ&qU,Zne.V!^9N]Bta7d<UgCAMUZ.-=-ZC4m3g1hQ%<Gl3*7b!h2L$BRORO+-dQqd0/`n)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"oah'&Km.pWq*XZcj-R\9a74Ynqbs1EgV:?Z`Y3H*qQkG/2KhGPLnWJ*f?rW![5`K$Be(UrWsP%9E`HJ/cb4_@iB_r9qnqIW:AfI_FFS(EY,TS3*m<@6biV9%mOX+KX35#;G-lBkoQBb8k(W(LiMelg=HFJo@@q.Bni4c3A=35IMDpj(A<EkQBURCZ"=k30O:T*Qd+eO@\,!O`hT!9:rrD9PhV\9RpT!-K3G7parrB^Nq$[3&UGm7DolmW]qq8NpkBiEm!7&-)kjNupn+_4dk2H=?HQ)^0rrAh3H[k_;hnS-n5F;u[jtFe_r>E5:rrB+5qto'W^ZTs-rrC?TJ*??Mp[@m'hr`nt!.,X[J,]MD_g?n+e).q!b<M@)rT5cS?i:kSS,WJh^&.][\\I<SPQ(X.\UWi3IeW=+HJdlDrr@Baq1&DEUVhG.p!_g5iQFHQ&,kWDaC"l`]:8g#X1eE-ft"l\H^"I0cFJGgmsb$"pj1i[iVrn))Ynm_!2IGYJ+_:J^Z!@#Qk0/X0?@N!)7uC<!3<g1qq8NpkBiEm!7&-)kjNuoFoMH-YOcu;BO-o$`dRr2cX;.pq+nYH*rc69YOPh-mqni0H]*,Zn/J9=m]Q37Qn?Fh1RQmdMpl2jq91^De?pu$V'Ujs7KaCkbBtuB@,EqfVp%qngH0TVXRAm&[<H9*DMd+PRr@Ec'6)O^F1Zo`g,iLTRDWSaVlXQHn_$$I<00lhK!Il4UfdM;_!ZWg;4YS?5%c)k1ZbmgbnJUJaWsbb6BXh'9po9(Jj1L;^&<2hr<E4gT76O2O8LL]48d%r-rBPSc#8Bp/\XdK+%p1u3_-gU#?l:gleC/eD!uEl;a8ksLE76J?7G*)H=P3K,:,O@C#c55j-S:ZCDPLAq>',9@!!tR=F?D/n_a;gfDTQJAa:tng3YK"B<`9^-Kd$fQ.ap&0sif))I^0*53j:n/Ye#4U8&^O;Fq4B-1dMSUW[-;<RfNXr^g0"'bVd3c0BO$d&ga<>tW.gF^N8bms7TU_q+hf2\5f<f?=0or>lp4rrB3nopl$^LFiF45PLP[+b0,rmVi*-p(Mq&2`L['Ee!o:0Dup[hV9hMcMRFK@IgqP]KaV1jaC[l]S.+j.Qk1ZDToO=W_+1sl;F*!Mls7TLF&"PU'ih@aRMtB.-acomTr-RS:<4dFaY#l5F;?A;^DlY2.BMF3tFJ]5s*N=PH6XK2-!OQ<mjU^VF[L`N^P0q&4lQ;GBW+<<Z0,<.`&4:1,>=<fp%X;9t:Mpn)"&X*s2FFm/I'VIh'1TI'hQKCBc<$3nFVJ13e[JAXY3Q]jY%th1r;)Bnqjc[SHb>jKU?]\<X#9WF]XNoHj:5hqNM>-c^+un(k>.MM&5.?8FTIO/I2a0O'i#I!4u59dH=@,hlP'L9cB&OQN03,tK<+@BraB0m#E(C_j1E,\8(c\OWB=Y(!5sQ'_H)^O%n'bR_0IIeW;[p[<S*76g:8cfSFro$mYE]DHd</]IW$jDT@o9@?$GV50Xq0nS2mM]YeKm-NFOoudU:0\MT==&RQcUo08:-8HHnRZVp*rbk"XV>+?d"*Nf#VITC6EH[SpFdGrg4K>q3<bjE]1n"=09YRJMro@q7SuN+>4@tfa.-)/2>p$cOk5g4(=C4L>@5O3,5,=?1-;&jb+)_nH+/Z^orI+S#b]Eb)\,!O`hT!9:rrD9PhV\9RpS>:r3G7parrB^Nq$[3&UGm7DolmVBqq8NpkBiEm!7&-)kjNuo-Zlih9E'*a+ZjnMH8DOLI/M+BI@8i:gMV05a4o+7hn?sr4it9UPh;L:;bV4D.Ol:uW=i1[b#TEaFEs]oN>[?&XaYAA1Ci4,*LG=R"6FaJbkC_eqjS&%[`0M`ZZe*Lgs0rO)@@nROOfYnV+G801s]jnKj$ti'o7uD\@6<t<BV?\B.5,q9[UZ`$FtR_8AS?i<J#gJ5<q7'mse]*N4i0$H8jmY:j",]m4ISYgZr;74:VaGp?uF&1-:D<FtW?CO_3ER[k!Zc9i53Vb\*iPQBn)tQAUX?9V.',hpAR'2BI(D3g[$n#3k#,PI#I&e_7O7?KUSph34q`mLA-bj/6%$\bbUFq'E&gOikj'_$_t3eE/_ldi/*>PSDPD;,Yk;;(Z&"_MKj<ma!HTJU&PR@S`uF+FXP;O+-d_q\23:p[<Drrr=inpfM.]q!m%nYOUB+?cK(W&$bu3HZ't5gtfNup%:9c\=h\?,;i]6o4td\dq7ZNhAb2VR<fa5.]Y@PC.lHeVj9=X`j3?;5N,!i?D661pS\!JoXp[.H#-4"\@,^ZYWH<sCf\fWgfnD;;hiDQ0$E"7M7@af2)5lO.aM%W_S>Kn6KmBY9=R&I3Z<mE**!$2H>04RP,>XE5UD-<2t=]tH"KcYnm4PYe).k(On'ar'SZJG^.2/`;_@SgH1`Kc\*b$$Cj^HH@(Jgs%h2)kTZ:r`PsIjlEqmJXEn0>fW["q&5]0:)pAY-aPl>/Ua#.>Xr/BF#!u"Vq=E'fs7>pIkEUh;%;,QMbeKm-GI/qqAUFA=)DB'^GLDAS4FOq;YPa7^Hm2ZP1+AdOq/4qBVfU!uC^"!p/I$sdRg_/,_gOC>m]<nH;=jjTn`pIX=^#c:eR*ln<WKVC9Z>VeR72i4^,W_k.i"'?SG^!M8FrSa[rrDGhc/19UXK,8HnDB_9F$2k8M]Bo%k-DCs.a8k8@+Wm.#D)8&5!lu`k,,_qUK-dGWL@V[K7>,RmQLI",O@2[&)Y('2G[t/:Kgi=Q0Y$Yh\uYF"\7CdOkDh&4gf(aWXuj'WJ\"c?U7O05c9a>eeg<".shmlWV4X2hKplS/%0Whh"sjT.DFe&c*O%bi+f$cn[(K%W5[<8b`d:AY+ToO,[SOJBPK"GaClri"pX%[Q/a"@f**$dmI/p!QfC%&-p.7=Hs!Pk2U;,tg-(G)1$oTHZ@5*k8)JZ:^E3dgikubLbtS-)_;erm;&\FLR+WZO#`bm,-g.<jRt(#9kc1Wr[sgqfS`>L#A67MK\Q#-%LT7/0F@VBL)qAu`K,I)rKa9F+e8C/;<J'!@/jF]#HuWL/<hc<GqSQQeobi5eHAus>O7nlDHhY4lJ!O16/2uVh!.F#'pJQJpY.qpQ=PpZ7W%hE2o@]D^9]*mlc<@NIWRq%)N6=)%n`cKDQ=pj[l72N4+uSsk='+FTNoskIK`;&AU)p3!Cn;lTr`s@j%ZB.G#q9P$qa55N=(M/c-!sM(KR\5[Z3I4HFi4^Z7&rH#)/OV[,dfL/EA&MjhsCb#f1Kl7.up$R<NM%FkZs%Sm]0Yt;97gb?`>TOhnAGtL<SX9(*aR(2Z?bsS\SlXZoOX'D[fuFPJh'Q)*1m#EOf=T8r?d8Z8gX!'^7Ff_XA2d3k@%D&&"&Zfc5HN+$l73=4(S6=\:/KN\`&CWe.i)OiQ'=Pr)M5'su:=2.[M61ohm"`lsSj##[_lfVYaQWp%Uhl5:U5AS#:mARTQ#^t]Opp[<!+k'Q4YhYlp"rU8V8!WN.RDuBV8q6f`;k+BZ<Qgp!q7sOYadbMSRU"pUb\^eBI\2Jd\0t<^\q\'T`=UH-;AMb-),E0Z/#F0ji'I^Gp*q_Gk!/1FNZM?6FrrD,P9PqM+mp=?*]EW/Hj3D5?q\s`j[e;p1Qok%dclA<V/j?!HVl_dTECJqr>=<3iJ9qJ^0/]'8AS<:.jD*o=P98k-VjZOFJ%:tiYYkL=.L5h]IeTiir&nuiE;opONI8M@!7Bc=^\[3_L&V/3b<M@)rT5cS?i:kSS,WJh]nZOehTa=F!'Au.rcQEa!(VD1^OO/Prr=tgqq0NDrrE!=)r(AmY+GUl!"N00^jkf-IR=&7kfqo?rE\mLhTa=F!'Au.rcQEa!(VD1^OO/Prr=tgqq0NDrrE!=)r(AmY+GUl!"N00^jkf-IR=&7kfqo?rE\mLhTa=F!'Au.rcQEa!(VD1^OO/Prr=tgqq0NDrrE!=)r(AmY+GUl!"N00^jkf-IR=&7kfqo?rE\mLhTa=F!'Au.rcQEa!(VD1^OO/Prr=tgqq0NDrrE!=)r(AmY+GUl!"N00^jkf-IR=&7kfqo?rE\mLhTa=F!'Au.rcQEa!(VD1]B&tlK\$/'1Jd-Fnl,@oF@T4&rrC9XOZgV5)=<XE<OnZUfNk2]pHI0MemQ(EG@g::27S%)FS'\h@ks9g<'ng)a"1uCOm^`6P6]?^QT`ao^j<>jqe+u.E-<SLb&*`sWl]*`h7b[j]H),a0<_hh6QJ$Z3ju%lH"<YPVb(AD&s=@^OmQ_a[g$`bEm`?:j_LlqhAXCIB;gtafVLE`UoP+7<Ylk<n)"&4^@u".55Y)]%r1f-g?H>Sm#KrZD-WPpWjWE,m#BTkb"odo-JI,,HR$)mXcK1H6hckhMoEhJMd#p%ZJ8dcd[T]N@=%*Hmk2K4D,e,o@VniY]X,jO#MiF`(MmP21O2HcV:QgEeI!344E9XlDddX4qnl8nFL:YhbC:6h1=%;0G4EG/,O$1Qku2$ZhYqtr2#dR7CL+'6YKUjUJ=d];cG81\VkqH-\&h5'hAbagRJ;[d6.PiS3KDei6R;o=WEG_GeF.akA+]ZJZfJ%^.:7O8C@X>[M>\fUg3@DV"Xa08GpM0,U8A^c3nd;h[PF(oHZ.J(DbAMio5QYd8bhueA\2EFbK#=W`sQi&VS&=/,Q1Nh6L,=Z5K2\*iU>Xr]C1gD\bt<u7b#p\fO$ghrr<X$;s0/0I7(R(kUjO@PNiTC;hsTE0#+1'dB$':eVd8LUXmZ@-CVPFq54/l0TP.]BAMGq]4W3[2jGI&f=AEfUCu)IQG"Qrm]r_D<;!W`NMb5-An<$X`ol%cZZtnai_90:e-=r%/:r^0J$N+:5T!`%hqu,uVYKPMeElGRX0R(*YWE2kl4U5aGK04/Ha7jqN@0`IQCC%#YE>h0NiH)\-W!q_"(jJ<qk&@VXmIW7]_ASrh:&aS:t'<1a-b2qeHiIT:=<]h.br7I4+Pr4"0fNfgC2Ui2$W^g'@(NCbq,$Io?H*\Skm+J&,i<;i:l\M-X1tVq$5AK1mOUthVH<(<Kn9r)QpO8rU$kiBWPqSqapM$Eu-DcNF^q>YPHfM!*%P^[Vp-Yhd"E%;qJ^Zf\7%5P2C%=c//>eCX#Rl287pP-;K9R\(jRO8H!E)W8:bop!fcU>0=Ec^SJ\C1aIKuL,W=b:]#WjpN.Jl5N,APc4Aq%FtO]:Oq$tPB&hT";mJS_i1TH?b!qN+?fc]m*;CT:'*WeMQZ<6b.^Y$T"^9"D,Pg*o!&3i$WhGH%j?:\q.2b8&A%V8NDhY>_<_r:GhNHm1(eLR,(hQ+$!4',E.]di%mX0:VCVKcoqSSC\;5d[Rc3dQYrgnOdqqg]>!6VAA'fkd4kMG.O>pnMhO7l@u8F?d5EHiI(nD&,RNgK*[ogFX298V="SP`1<P7+oVo`k'`N:e2-P"?mpUTMU:YZ%k5_&qj:n]0a?>79#QWK7&ZA`L=AcNOe.K5fs\aS!:<b09/['H:P/9+Ete\X\>Np2Tn3H>RQa"[,RbbS5ssF0RH&ViHqFItcLfPnmL);U4F?/2[PWR2Gl;_#Akhp[<Guqn.Df(Vb=k^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^dchW"ebrV3O<E;ItD+\L==15)N_-+8;R2G1sf$p\I#*%B0Kdqu@+tOSkWFM6hdT1"W-!:'%^&-UipCHj/q.ncnFXJQjR>m>^T3=[kqSm9@O,8Gp/0q*UZPQR=j2s_3(1CKU<!X`W.C['=pV2&%=\Qh>3EF]+XJSKB>iO(6Pc^q+<Oa[P&CiXYbqfGIN81o-@Xb-MpV2(L^9O)BXqmueYh;-n-Fu?(3m;/P9a+F.Ou\jt74aQp\n6e(=RaHDe.7$&msatHqQK).b>+e2V1$&4gTNVrVD^M[ITFS)Y]@Qup^3+#7^&l56%4=)Vkn?]N%T&;IeW;X%X\TYpqJL]E:&&P^o?$,qds991HEVU/@&@D>cf#H>Z;;.5s8b6.>,^f<:!M7T[d?cRF\6%Y,Ul=p[<8mn)"$3hYlp"rU8VAn)"$3hYlp"rU8V-5P_qhW8G9UreYs=W].rUf__F"r)\@8N1S\E:P[)O"[A>lD7TtQUld-6+-jpU8kC6Q+d.F(obABnn)"$2PQ(X9fD0Lf!-oU?+8QshrrDnrhnApE^!+NEj8!hXaACq6j=b7K)B-b5_+0XE)4Jct;5K[.'\1]r<<T=sS>M]aDB0$^p%Rp(p[<HiotL4?G%Y/uNl8cF4st_p9EsdT#p>SR:S#L(A<rZS!D&fDe/4uZ'p:s7^^rd*^O,^_YJ5GY^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O$:!UV&Y2j7^L6Fr+n2C/)6hUHT#aJ)AF^Ec2o=9n_9RW/7Rujm'd#<[bq^NETIg3+J+>pV2(L]la6Arr>"Wna'GZln:q-_:(J*][/s/n^1u2$Rn\>7@LD/<s8;h]P!0.&Pt`-.GU"8AH4[(HhY:%X8V/64dXg/10/>]_;;fTVH7IQ?.HMB=lZLB=\(iBXf5FL8;]a4$G&ZVYkRU8p[;cl8s%1fZB/(;+G('="EFc3rU8VAls\RS+a`+L.NtbC]uAZ/>enS,9o7_PqL!CRhob1`MYlPU<l4G(g,Yjh)>PK7++EtQIeRG;#Q3Y0Ve4LX@f+mbN:!1A9Q=$E0f59rWP7Sk(/n'PnG$^@^1]qP^Of']8S)dCWHn7,IeW;X..)ul0'h7rHZW*5A14Cc-4^c^USH"12$R*EQSCd%Of,(ud(;BeA0?c&/C>)(EWW&+HhY:%pUAItp[<S):qh8DrR%j`,BloNfm3LufA.9K-5(]$HO3h55:_b_IG_MIk)tb1SW[Y->$?b-@\d9LO.l=:IeW;WY(*d]o&p#C41INI36hI'oiJnTpV2(Lq`=`W/q<=7]7^+`6]Bq&!*+C?^O,^gYJ(`hNQ8_].eJ2Th:]H,j4p'IP=o,Ic=SQfY0#b*)R?ahVR!@JBkNir!%c'X%t=9AIeIHgqqo*ahnApE^&-^#qqo*ahQHkYbZEm:aKE,MOk`#W@WtmaD(V`Brr>RH_RB.?F_,R&S:C&=XP"Ipn$JgdW(:@o]TmTfaeTADb05,YhnApE]omm=FoGYG!8^4i#QBJr^](8-msb$"G#S==r^QY.CAaU*gDuL4]DhkYD<Ui.Fla8E\[O1a/WO(q-=:Q+9j4p3F3+umJh!`7?Io5!r;66'HhY45rVPKcqqe5Xbq%lS>Iuuk2qIboMuNdP:7',TD/<2T%dQcRhGbf"[smA=9gpN]C%>sj3gHjF.;?31@o4[nHhY:%XA=<>msb$"IeW;[p[<S*msat>4u7Rum!k8UO%%\!Imr@pMo/c22e?e\[KgF&>$i8[9VerXo$g=/P*1qE9j'0u\l!"$5C<.>HeXnI2oT+$poUi2g7<AA8'=rP:A_MIjJ%B7e%@FIVu-hBeuISr*<WWrXTTqaBgXUT1;'p7msb$"Al%<tqqo*ahRjrV&,m7FdN?V]B[l^0_M<%'8'S`rKj)0`e.U?^bI78r*L3@tP7cGQf2INtT!!hU>Xp@e!Xbr$`bm_9N_2o629A[ebjYA6FcX>/^Ga0eZ/RhijN_rf[2XIr?D_AQCq;\(BjVso].Rh)@Ap$BQ3eiq.Oj;sjO'3e5m)P`U,R8fUYBc,GX>ElUeA["F.rhGFO*ueJuSPO#^?2KHG045b0/mBb>46B2ER7Gp\2etdbLD"g)Hb\2-J0$nOH$(`PjCW;!kB_J=qdd"10tX.B4KW0pp[0=sscb/7G+&ZqTq+rpB^cP5UH1m>gYm3M$,_1QQ8@H!+!YZ1KIjP#Ge.(n+EV't:C]->)aDd6e'o>*u=)AgFruEcp&MW@N!(&ld@PolhV&]\5?-5Y.YSn>ZI0rTq)l#CXG_msb$"IeW;XNW0!q6iR.Sp?Lj[QAtgUHP^[%<ch]kM6beEYbT?O(h:/;j9>hm=dXqK3mFZc8fl^@ph.QGe"r$n@\4F`l!lrE@__\6Qd+mc<VPg,7G\o=l8lPjA?W&e'\1`Np3Sm0EEKf2KPulRDNse*rr<XkC'oc_hJA---#?8h5te;g"I+0bi01].Go]US)8._)U,2X!^flt.,^ruOptss-S%eW.p-3ou^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY2rrrD"r5P@_l#QFeo?onbr!.E?<ooT1RKf8r2b_u88rr@mgGQ.[3*uD/F[f6?eh2)(2W7h1NlTk45IlKZ=DgMQ!qqUOM2S1c.a5QQQm8oInf2?*uoVg04eCRc$7nZEKY:HD@dn_Hl/AXV7O?La[U8l=9dGq1"2&3Ol<:j.O.7IsNWhi68i`:5%;^AXK#p9WHII^Ajb).gq_,Pn^`k[)/-f;VnO8T0+r9]"&!]U,ZrerIirrDG]m`WB(Rf<AUO8\(0m/I(4]<"6o3;0HQiU5V!dnTiB;s=5]qPW5aqu2/ZrcZ'NJK+Uhrr>M)7t:6[p[@lh^ZK&+!-kER5P-So&,sj;qtl/\J*0NbrD03g!:$2*p[@q_oD.,?!8[isrrE!7>oiqFgIL/9iL9cHR?.=+T'ZIWd(?ADq`+?=mN1cq!1bt(ofeH:!31JEfuO(tJ&i<!^NAB)"SaM%rL*/IHgOS<lE?TT!#YSXYW#!WqWZ/6?+7*t2g0"scar`@1ml"tY/s[BiUAh<MMI4`$)_p)Lsb"3-84?Pnt#bgI<4u6ioa`g?]?"s"1*.uaM*hoHac"4\iT,N$oZemrKjs6H0hofoK1'm[WlfEWYoDZL++EVKHd`6$`4GGmWr-h*ibtK/9"O!1%W^7RZN?aL9;C>EY`]6.OdI]IJ_pPbMN'/b]ggK/)N3J.<X7f08dI+nOKu0<nZ<^Y]AJjI#+Y[Y,cAOLl3Rc\$do\<_0%2Ci/&q6^OMWF;h/-_d,h:&,@[$gHXcf7!=>Pn#1fl]pH,Wn.O:X;PJOc<9UF<]9\1!AOjjZNPe=\OJWG.RH]qnf&PM6<uhKP*EeB$+15/X6sA1s^Zp\V**qNg6P&].rU8_\ne7b0(ZQ<WG0e4#gV^H-Z?g/5DJm)C3:GX;ELGQ!8rRT:\Cor',@-#GUaoG4<3,&[UREWnP]\A98)'S=]K/Qi2tp/;r-?9M5.KEoXeE8'rFQY(_H0B#,u#A^M>(-+oSmL[S.-.\8<PRTJbDuWW9;4P<7'-tM<Q@M$!6Ys2C_=kau-=4j;\!jY]n`DmOu>%q??m!_CWEK)N#VuJ'3atk*X7UdX75A3%JW."W^!u]s$6R8qorpQ.99CHld$[M?RD-I(`/VZ^0?=rY&f4[*;7uIh"D,8=$&)gtbmD9WC@URHSU<PIKd_B`fj(:tX!W2)Iq@R;rrP/B!NR;jk5Ji22"Qra/&"rlHZ2>XIWCF>sC!Z1m^6pA<S@fZimArU8VAn)"%6rrDPd^ZIHccVN[f\oqE!bq;qgrZ=Lrk^Kt+P,HW`g`+7o.^F7frrAeAo$^.?rTB279g)/[crT-ar<5Of!1Z7PJ"P$Tjt'jh^1:k7hU]e#G?+QdO!W>'1.li)Zl*`":L:6X)m5Z'8IM\&ERClk1IT54S:2fN;>SVEe(?\.REin_0<1'K*f^:2e`@8>="r]fY#WmUi2QnJhY"q`:0u;]rU5*jpdWm+aStf"?GQPQh6480iALh,Y+GEqE`(L?2o\W4,mS@3?9/j8j_4A5fZC;NTrGE+Zd4r[TX@2o.CA:9-TC!Cn\*,X5&YAp0!&[6I$\/]@BE0S7d$nKH;;<5P]<!Z.>>W>N&<0;GU8Zi]g\co"\(,Hg\scVgbgh_+kKAIe3:1DQ)^chDu4O`N#k89hi[BareGsro_(4jpV2(L^O,^iL-P8:rrBA%q8N@6Mh1G+rr@O<p%S%Mq/u];ARG"Trr<fR\psJ8mU'N93WB'qXN1:A1*?C[2ns\erl`Wr^OGp]fCC<g6h:6W3B-CiadMrD+%#=#K$8B:,<J\[l_`S:ZZfDfl5eVb9b&H!DS<*+g[t+Mm8L0^@pI7,!$JMqD<(Fqrr=PSraRP6)4Zb-Vc@S_W6"?gG#fM5Sp+drE)4(0G6Lr#j37>c(-<0=,%-G1V#-n+9*i&B[D'u?hqk!<OmE"l)CL4Y/08LO1G"JAhFQ/uq#70mfBMb\p9qg;!5^+5QX)cjGW."ln!]Y]`7/Odfh<IFkfpkrM]aH*4\YVXrfZ'eeJ)k+qgo!n7,flSns973GKGgD!//bt5)U@2=e>*X.:8H!lEJlM1>Q;n`lD0SqHA/a<F'7,Wg]I.HGi.X(e<f\'C5?:Vc2Nj&LKjrcYaUAN>#=+V&GL`7K3?+^7V%D^O%?c,X:6!pg;r^/>pEnS(VB.PdI_[-Y3.4le3fWq3o*L`sm6)FgXpY?JU:GT3?)*OZJ7"8M"10PPu4ENW'_u?1IgQhEY[\J_G`mpBK$AQQ;6fdPOHm]lmrYeJO+c"6s,#Bf@">>d`1+,%tT.A_]f]VCLdDUS#>:L^KNirB"qHpSEAaO+H1;rrACXF'&!@b5SKdFggn!SE0/SnhbVdS%j.*Pf!^jlg<XrA\r?0^GMV'nl&.lUo7@lWf@Fbjb5Rrq(M8F]fmW`4]b^/f#>_sc,c!8geC]]Y1oGH%V.<5S_@;&ONEI-iad&&Sej.\bShAI.FI0PV_*YEi@9g.8tDW@g6'-L;^]p`"KUaO5M"m:%?DS/m%A\Y52,u4hW01UQXApF]=p(F-HlBp?RL&oG&u[[FD`QKZ-g1QFCe.fna!S=FV6upg[r#`q/t)-:M&YQ,GLWc\Y[5VVLl)gVhUro,b#YN!$e,uK=EsDZ*rQ.5473k=[&#8SAd)oX>>.EmiqEGqoR(0@rX2&e]Fh\@IHmCa\='A@g5.D,ZPG4A!XOX;sW8s/Ho*54G9g2qPOqQaWk0ZWa+4%%,?_TL,QNg>_4L7HhY:PYJ&QdO1tS]hYlp"rU8m*rr<F?rrBA$pnRihMLeS'!5G/5IHb>C!"*-6!4&ck?i4!(^\?f-O'j>OrrC%$)ufnQci,u(p[<E:He.f@<U\e`:6FcndeP!>)],8q:MA<thU_&+jBHP4D!ZR^.j%p(1NUGs6rXln\]XhV-CRGZRG1^6&P)*a=1>Th=`p>3mS3YfqS0-jrC6,1S'rf-)f+ip8t$)ZS@20pjdJ5$C3"H=3;?dSKoP2_2<4#j9dM)SI7uJ>OVt06*(LE&Wg@`4$4F/<i-n5kmrm=_!'oCj4(%m#NW0"Y!2Bps^\_^A5MttTJ'>t4nP==XkZua]rLA44rr@$4DuAjsrrB%jJ,N=7hYmHS5i-uP?i.WurrE'!UC3j3qe5m$r%h^O1&h6d;r+)B(NkN5!,!AOrPRI+o;8#VVpYMEohW>Lp\b2>r9]"&!]U,ZrerIirrDG]n)*WZJ'>t4nP==XkZua]rLA6/pCDHI!7%$OqO^:X!7a:3mdNI"4$Ui:q42mlrbB+khk)4o-Z7e@l5d(7H`J*WhRRL\e_,7"F`us5NRtZ/<:WlQNV/gc9%aWm65UEW9^8_;\Q&cj3W;hS!6]HGho@sPh.PHte'NGo@WhATDK]"q=)up\*K?/XUT2T*4SC-='@Phu7Sb5jY9R*g5boqF[Fg%Om9R!jVVoF2.SAKN2G.^diN$%FV5@Xt8pM!QR-&TRR=P-\pV3KL]uU)3T)J#KIk[Ml+CCX'po#8\^\>rj?Y/Qba8M0^aj9ldY3>lchf$&R[V!;6c'JA0[:OjeilgfIrYXMk?Co:U^O,^iHhY:%gWTCDrrBoBYeSE.inhoTPM<i'Eh-Rh)qT+KHj1Cg3od@l1OIuU/W[KKRn"]bb&>PL\7tFoIS'*4Bj(jgY^'Y&&gOd23&-tV^Quq24i[EOkhW`=1U)5s]4:3`bF./<XDZ,4gGYZO\YbF(B</K>AR0KEc/ms(@U<6nFH$thj"&$clHLM,-q)mjf;YC_7?smp2*;O7aHZ0Z*b4/oU1S,8E/Aa*?kKpHqtI_bTDfEer4![T9a*JtO.28L"csY8V#.'a.PT>jWa/1jJrcV)CM@</:^1`p^_L@Tl2b`s?hd>C_fLim.!r#Ub^">MC+H.+ojl_>A%\.1EG<sB<5@TfqO4]UE-UFI=WXKVkl=fH_u<c]7TBBfXIj#/rrA4C^O*!,R6U1u^A?J$>;<d>')\?UIJo8Ie&b`7:\NYqVs7RLP_KI#1`KeO;!o@AZ87okWGUXQ.8RD9eShIfi!(BT,<t-ESZB-e=WPKOT=_>`Yua@%e0eR@r!Zd7ES!\n&nu<3Y*Uf.gGqBdmqiZg7>@]AqPUh'V_Xf?=U]."-QsL?.)4Kd7Ob0LINtChib(K+_$Bc4pUr/j6`[g8V)o'/ofm<[Xi]0XQ*>=pRr<T=NSTJl_X9RtS"P0E1`8DmA9#p(J/*0A)!-V*8D0-UNjbG;A+'o7h:m]mp'06pm/?1Uns)1OagQBs"Sgcl+"'V5Au)Q(WC3%2!/=E]Z:<"%=]c:Ne5O[b4LEWn8HhL7A!S!3UW2Wm<`@*>!/Vcqm0E#/mgm0[qDEc>;uZih:@[f(Mtq,c]AGL#X0ae9h6"nK=m\B*Pc2]A?2_.=jW'PtMl*sQ>-uIWR,$FH#u;m@#?anTZW1FJlD\?;1_c[ZEF7ckr6P*RCR"U$ndfhBB6V?3%o\VSc1R^3R^Y/cn/-IqWQ]M1Ek\GW:.I7OZ&lY:/uDbm8b'&]"1"@d"N.-BmeLXJg^[(kP,:&hNiA/!8N]Ns,qP!m>"DJ)6>fBs&*Xo)^#QfmpZu/Zmsb$"IeW;[p[<S*msb$"IeQQDbie0VG=tk6F;I[575&@enVJmmh/m[eQ$)L&.8I0Gj0:?_]f,E+;+r<>NLq:^kq$>h4>OhCIeW;WbK2#n8L1U_o#iPjP05(+aWuncSk0rZB6RfV,i##@p[<S*_r&0)hn>$J:%>R(HdUUH'D5]#hK4T)5rN>1)JM+c4[T*]WjbGtkVhNK9u#M)<?mS7LBl_Mqqo)U.DM-Lc7#V[>4j4'Bs]+n2BKp)@pF_iXU@_3j.L%@)n)0e)gY-r?f(bMhTD1!I!P/jP`RP5ok*jL2"*,rLF\_.eI2Ue6.KWsG9&0_?n:BFPGT7d)V-gO*rYQarU47bjTj4DY'r7XG!8NZmIqE>B;Nn1,`P]qG';Ye]I)1,O;&=Pk,LE[k_WcN%<<!bkMH1+hX,[I^&-^#qqo*ahnApE^&-^#qqo*ahnA92oAd>NG5SN1Xk--D.^0b;lYKk,nZch=JD!Tn"tI2N`4+K5EYPoA!IJlgG[Jl^n)"$0SU:+GHhY:%pV2(L]r(f0PLjcEqsgDqY&!<]frgb!2->*uFq6"T>I!J&*o38T-ceQq2HH,$?p[4OMPe9`qqo*ah6QqP^O,^iHhY:%pV2(L^O,^iHhY:%pU')Ph3\Y,[5T0#h,t#g>AIs314+d<OdbA[nQ:Z/CTD*p[s;7eK]to/h5mUa&3]pJ^&-ZSIkNubmm!*YX-)8ll"]bC:E;#f40LPP<#;:_]5Yp,0[V,Q4PBY<_NSMFL!8"K'Smrf3;r=&rTpS3pV2(LZ+$RD3HniOCqW:WW&jqY1V>$-0oVtr"%eKf@Q_<C1:rGt;aH)0Q:/>1;GJR(<;=kBIJ_p8qqZd"IjQ8'<ESis531rZF\djirY&MJpLE7lLkL?\-9km>ik2AU`Xgm=ei@-HA++m@mpJ(eIk;1uh-WfPP,dfINTl7rfAt$G^.O</8lZ^fEUET=:"o-%)YFMfPuHrjg^ec+^O$@&+EVa%GPn#sri=4P-iOuAl&R.(k\B(>S`&56<(WV9'NKuF#GdZsK,jMVX_oU<&P+2%hnApE^$`B1:_c5q:]dQq!!'5'%KHUg^&-^#p[?u;n(u.c!:qE7!4!m=cho`qp\sn+?f/QohnA9hn)"$3hYlp"rU8V;5kkN_!+]m8li-qsr?)%%=8Va,HhXjtn)"$3hYlp"rU8VAn)"$3hXpgJrb3JJ?(L0Y!0k\,!.=6BHhY:%pU^A)p[<S*mrlPFRm68BEaSTspQtmIp4'i(pV2(/KAXB>hnA4oQ-%V>ZC*8h8p@8Ujf@]&FnILG4I$Yhob(8):F!J-ZcbJ4`0*\>POIB,n(uuLpV2(L^O,^iHhXd<V>>[fpWmF<I]V09++:Z.7<#/b8Mqe(.j"gM7T272SQ3DY(PncEk*`;QL!YCHA4H=.HhY4s^,::XfH1q+^Cf&O&s6G9WEZq-/OU/jRGIat=O^C6o$YIc2a=cG%]2j%AOr&V-(Ecin(u7n^O,^iHhY)drdCEaO(\Im.3FRLdHou2mgkc`eOPkDF;J9Em9>Ob;c0nY\_c92.MsXCWf(HU2Q7!O9m)X]QRPK@WT(uudFD%a=8la"GMi^$6G%>KpD:nWb,;D:lA_QCC76\Q1sI!X:;bo;YtYqs[dXK/[*[W9.?N"RQAI*RVakYWf,!)6*\A#clGG1f%Eb=Z%oYFj&I_b!I9j?&C*VU776R!jI=^1EJ\4'G[<IA`ljh)&%De4`>LRn9XHc7^E,JCdQ`,53L/TO_WcsnXM<96l$Anm-<)lfem,"5\G4mi]gfs5qmOYg6hHRH@=e4?;P<2o*6SFkNj<eU+l`7&KAs-;nOh\_45ZIhM!4,X(:K9Nb2);i9cKum_aMj`@@s2HoaX$cXZp1q<]KZ;_hYlp"rU8VAn)"$2rVllV2]i(t;s)Et3p>t_ZmrDO>HPU`mu<7r;n"h1'!WRp`N](o2LAiug1lMDV4sG>ft5!**^(rS416IePt6p+kiH/p^\jNa.;utarr=tR_`bK,b$_Yja5,(Lqk()ON]g6(Kh&OlE928?gkKOjl(lGiD8D077=^,)TM!=X1/k^V[+KV<S@7@NQ6PkJj!KMpVKMmYL-Y5r$/iKbWM\S<6Qa/=mse^eImY;iF5O\.hnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^$,e%!"4)P!4#`%5Q:_A!SCcVm\'<UL\rU1ra]BU0DnI)^]+:Ypq;?O\,QFDlpq"Dci3uK#JYW]_>D].fG3l3`"&[E!1Bh;TD4L+DuTBRheLu"rr=.tb5VIZ[r-]`ifDrB?hb:1rr=Y1rrB0Zn)"'<*r`6ic;23%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,e9J&9FEQLFQ`I!')n2=!pGS4?ue!!h`VP+TYV]enKu$]LGN&U#3g`3MqkhE@cqT5N4ZaCBf+_d]>VQEQiGrrD"JIgnVomX:#b?Y/6(j7dK]rikg?["jH]2E$FgoR4?P1^8%!@fo.P,,/_t'MXU]6$Xj=&a`7%M.sF&3dPDe7pi'?,t1%64+;TtWJmIBd(be5hXj//WunQihn>Ppjlu@9!-S2Gq5<c3jf[#.b)2d[m#4DTET*j2"YBPOYAusH^"Jl3:;PtGqqp$$I$Qd'AT8+-XI;^G4db\o^EKr@'`L\rpODT1!4\>4\_^HdSmrd807mHsdB+$j2m1pKONAU=K5'Bs.)W?pNM[4q<-rc)AL,0)W,ba?RT\2%5\st^Y*BT+rbfTs^YsZkp\+^@>N9IAG/i4+Q*BjZH^A79(=V$Mj(@^1F."cYrMdC_oQgDIR\>gnA>@<,1(_bF=C!0Whp[d(mX,N<gA>f6m;/%OB5DJP%NfcZbf(N:UrqV:q"fB@,:,tU)X6Rmol8-0nub-FG\2u1(oN)+OO"h>'T;fo3>=M6rr<7(#N*5E0D"i8@hdhDA,1-<mq6M(`-D:Pm:pom1ZQ_B;i'uuG!>fBjC,(F[&T'sN]s]$<7q]N9$#NLOJ8PIPc:]Vf>$o_q1fKu+,<"3^$usSV!S'U%%UbT:o'd8,2QP$L9`i6/./2oM6]&;'mWf@X$URcWSheZlZCGCc3t0iWhCA+>sS9Z&V!WUR94`)kPUo*ci#Hrr;66'NI/:Ym3IY9m`b+e`LYhAAnGX#ZS=Bank[#jZSO[!]/)N'AnE?WR>omfNQGX*-eVYsmq*g(8&d1+q4I4ZV>`&gmQGS2M;=Ze'sfSg1.q0UH>8WqDW0DsY5i:rgUf+Td8jiL;BiHd5smH.Ytt_@clF@E^.<H<>BFL`;@:+rfmBHGD;rcsm7WIo@eDa/p.N=B<5\+9/N$!a[F>sa8nf+D7?$SF5,0W88WKV`SuuX]07>5Z0.YeL*)V=4rmD=lHi%p_:AE)b?Oa_.FO.qoSAm03Y.@P@i\k*H9Mn5[Q(!hAX$+%8*Y9NbEGmGL='(a1bQ.7q.qY"B?N-CA$.>:jj.B%ga%,gQ#bfrMBsmL.CD<TW.P%<m<hCn4aS>+bAiCc?U8&l9+TDF'=&U@D!,L8q`m@ZDkUCNDX/64p<[@[HDI,fAe`CgSO6)5mmq*Bg]C'UPHhY:%pV2(MA,cN_YPTufS6u'$+!ppep[iB2IkP/q?hRM"!%5PO@CrH;!.I])p/(@QnTrE/g=%5F!4d/tpTf;8]_cL=msd^Npd:tWb.m'brr@lXj,a32S\OW3?hd;Rr-4herrDQUl/2Hgp(t!KW;ckU2KSk%d/O*s\t=HG^$!)+rJWr=n)"$3hYll+rrA\;o&n_6bZjmapHI+HEgFJQqFbSk?L@OP\=oZ2D@D!lfpI&+=\Y0AW/j@8NU<:OMjFTG9[%419_=TfNAVG4-#%ie%u6X(jqkq\aMA9I'j[NaGV%HYFS90)IjS?_F`"d4jK#`>*3!XUMgo1aAAue$'+(76HA5?E1dt<3cNb50#?M[kC?]5kY(c7e=e\g]&tc=qPZ!0_/j]>bn)"%%rr-u1b1FCTaUHVHb7sG=,SS!<9aoC\7k?F8_;gh1&?EhsDP4$3#U8<d3965?&m1^aQ7#f[Ou?j63>$lgUT"Z^Mua&#KC?$8+G)l`i/S'fkX#3^rU9,^r0MkAANk><!%a1f?R*$L8[@0)TBhWG4&7"UZdr[!40%lI5.'2"lLe[T'is_Gm:XXV!34)$>pQP/qGmOq/^KP:h^SO<F9cgK.h-spbA?.GpXNN-bu%WW[O+>MAaWg*:h<OgkOM_%aQXL;Q"shtO0`-"EfHI@ptGN_<::'LTo[a(.G:]_F8ZNN*j>7+hn@_kZc2<!n)"%WTCB:Mq_,.15PV/krrDrlqa]M/?gsp'q^V#frrC#aMuNd+7elZYG0g(mEPM4KrrD)ZO+-i#(VO`MKjO`Ghu<\<5Q/;hq0RVNJ&Hj)M`pLFrrA;`!<'QCi]$i_S:CP'o"NWN1]BS.-iHN<r<WE$n*KZ7kmQk-qtIjPpV2(L^O,^iHhY:%pV2(L^O,^iHhXgsr5*sMJUVS<!90Z!QN$sB0ti"%YEp@)8j=[fnQri&rr@J]jn@Arrr@s8>Q30<rrDqS0>Dl/@se#tHRN5!n)"$3hYlp/GQ.XL5lUhn-%'_4!5ng:j@B4L!$1UukQ1U85OI.[3WB)7B5deMn'BegbdUi,a/)*%!%k7dpG-Z9pTa2!OS69[msb$"IeW;W49#;tb5VI.2UgL<%G/A=T3uO6IOh]bPB(NsV!lJ(I1fIQ]fNWLeYXRp2_O$eKlkl-3r=?I9o,[3e4i(9i=SX37mfi\CD$RH$9%['JD;/H[!lY)4A@+3o'?5!,HpuJY*,2]PB-#,bttqKTpj.t)VUr2['r]EO+Gpi-)JfKG:?/d-qE!9.-71U4UN[b9-R;80GZFmb]H,qOnErG+\1UKqX=a)Hhk_Ze!nu+n(u%pO1jGbr\Shs:jdu_)ZKfr]n=b(OgDY]B[jZ<[*P5pRHbdb*>V7,,`1gUq)>&FC>*]UFYo9''7u7[Lj_kJgS^m[8$>!uACZ+"mH[L.[s,RDR@6DLAG4k\QRbj+=Ksu*5!$*N]JVC,VJ:At2?d38.Yb6FI:Y!Q3R]i36rag?D6>5r's7-u[>=a5DgqHT;<cBQgO7u/?!#i$3aY(tmI%I9rLpW3ng(qd\%hXV06Q47o#:`(jMkc*3e4PCj58@)Y.)+aZ[2LXG"1;ObI@?RB'kTHJsTZ_jMPlZ,n>8>-FEk]>nqZ)NXrIG92Q^82*Fo.nPm=>6tbh1k)En=a7WISrTm&JZM1!K^&-^#qq)#AJ%`*/)nJ7^p>/h0lK?pseYh0SW>L]V>H]V.A%(eVKd'=%QR,Ih;TX*>Ou['^T_nJuHhY3$[r1Ne46ptU%Hk>YPrZP&\h`sSh!S@JPgidr13G?P<`HRt8E14;LIrblENPKk:]U7)HhXoA^O,^iHa_hnX7-IWjAgU+_:u=3J*:fgA6OTnK+cEqrJe>NSi3[JH/d4N]1WT]'llY2[7sSE,Eqi$6MoZRqqfZo9HG-i@WD/P]8=PcY]uU=W,['04Uj;.(QP8AFMga=5t;nO[']?V$Ab^WqKqtOHhY!FIeW;[p>;.Rij7:kgbs3kO3HT=<:WptEEQHpClUEfQ;OM_C>'TIk,#)UQ$?i%=]g)B^O,^iHc:TQiO6`B'=Tmf/qXCZ_.0G6(gJsOQ5U`\.i48ENg>GB5t=\,"Z7SP1eNn)!33%!*rYQarU&4o^&-^#qqo*ahnApE^&-^#QLC02^cE_#GA[%Y2'SA?LYA#<rN@?*7k!3JNT8dJ@RsIIjJJ+uPD5d]4^Jt2Y+QOOp[<S*UkpCSAgNk%/B!]C-KL>8,bKP[msasYloq\sDiLCEHb,(pN>GN0Hp6r"0h0G7P:tR81M4Tug/YNEU"hM*A=ET?)k6BdhYlp"_V]h:msb"E^WJpR7pGnjU"Ruh64=BEmHfkWSRl9;na8FA4+h<K2Nr2\2,6>_Hor"A,&RYN?[MO^HeRrG^&-^#qqo*ahnApE^&-^#qqo*ahn@Kgo:54u]q*Pt0<&qkD,"0f]:sVQfT#i.m2_"i)(MX8!g)rSB'%.oj:$9TVNEDqCO=sPqqeUWrU8VAlpBuT]$#9[B5AWo_7,IS^@u4MCf=<#RV:n$/RJZ5:/6&aQ("$U9(,V/LpU#<^O,^iHel`?\r1'??X@TpZKo^s(k&s(.&3\*OiAn,Q/r\SL3#(GMQL0Pb>]pVU1WMSfEF]D?[MO^HP:i)hnApE^&-^#qq<J[j']j?gU#nmqg'=$Hkf-(Rs@AZV2'$>i+f9*.j`0bjJ%V`.k-0A1(o1:jtMKcWj;p(^O,^_YJ5GY^O,^iHhY:%,Q@bfMuLe]^H_5FgY_n`D1@$/msb#.rrBf\pV2(L^O,^iHeee^(]BK"a05D2oRHb/?glkMn(u=p^O,^iHhY:%pV2(L^O,^iHdhupq4rMnG'BSX;_S+@]m]A+rU8V/rrCriqqo*A#P)^2!4'/WJ)VR,?i.Igrr)<BrU4J3IeW;[p[eCbp[<S*msb$"IeW;[p[<S*ms@cY.IW/Dh*KLeG=Lf9Wcg=BA*L9U%9!NI>C3L.d]7:rTJ!(7PB5t^X[,F`Ye:r1LOe:=rU8V1S):pVhnAp>/b1j8qTn017!?nthW)m6hWl5NfX^t\!5*>\7($C=n2+$BN-6\7;Ed`:S#[.KA#U\:>0?,dTSs\L5n/1%[WY_?ok+3k5/kX&7`jtEYEn"6MRQ->J$Hsk4Mm,1T'Fjo>b+,PC-$M9b)30nM#h5kge-kcI!$H(F]7M%V1n&s^8FR2ku%DWF2F!;,S,@unONRe^H+H#q2Tj2m>mPRa&=6dXo4VDqbLnE>qKq1XSUfadaIK2\(cl3;arKg@h)LMR3@-e3=0G9k"iOgR@E?4o(1rZ@!ou_rVPK#M`\tBh0BYD")k#7eDk^Qc,VWV[Pi"CZ9j.u$'$-",0(S&X*L_@?Sq<d<&9r"SF0.M,ue^0255mGV*#(&0IP>u)Z<BbVBha)p[;XffkC*.n)"$3hYlp"rU8VAn(u&;O50uoT.)joY.d,B7`rnt(MrfJk+LFt1MYn/;a#"f\]L/?\uo(oM[b6T;+E3M9-[L`1g&H=H)dlUM?p#?6r'TDI_kJ:aP$MbeXL<gGAlmCR\dgebSE2>P,>O]M3=U5U-b*slrH08*i?6KGE/,POsqcHdO<q)W[]L"NEd/sE4#9q1'lm!I\i+TYrj3Q\Rm`,TTd1cmselojTYRdHI)CbHop%H*ql)_pEsP7Ul0SIJaFpJBk!R;HWq^^:BjRkMFttLYCgERH>$4pJY[CD77.<O8;1VTA<Qm/^R).@*L6+Qj1aF949JFBGHONtgtfBPBqUS6hL"grQ5HZ7VL!nfW4(Om(tOT[:<O`>Q7jb]W1K^<dd<%/:U`&u;+7>H*n&Wh!,k_4ao`6&&JSVe6,eAhe=6?kV0b>]e3<j"hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU39Apfl)CP/kE=!;oq/_Z'VnFU,Tj5N,>Oo-4/gJ)XVerrDr:`U"l;^\G9I5O(.VqTqD&hp)bhS)1raIeFn,2uLoq[/U-EJ[9k#UW313llZ$%p/h56]6!uPG8,Mtdf0<_RXb-O(]A/WIeWTHp[r%iEddiB^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qq5<OWUWWa^2\O#mlu[mW<0NRm`gBMg/I'$1j*qF@m!.^/Y0S[FRl_+->R+/q?e4U&9FMp;+;Jh80EE(:57I%!%3(;ZoT"O6k8&>]r>@hQEW]@'B(^E7:tB2ZnXWl5"f^0)G47g0Opp)9VJVu*o$7qkVDqub\]oLWjl4Vf"$e?!)ujpipR;U(k7A9msbm$qWU`On[lCpA"YnV(>*NCl(5cJ]kb8o1sR4;p<Uua@4S?+,cHHh9"[lGP^d[C:_4pI,dGLY7oFeGh5f+rYGSofIs![FTkno@l]'_mfpdk_9VODemHg*-19,(jRQ-mb$E'fmdnQVhcoO_,<X7;KXe_D;Y,7)MFAGOl[.:CYf+XApD?\RmE.9+)IeFEO5^SLZhYs@dn;uP""6@5fpr`M8hH?\Wm4X.IM@HJCNiI;NQ;aN%o_E@?eeRQCb[.8l[T]"R[t6qu.P,Hr*09BQ95col!"&2k>!&eE7<_/f4IE,*58j&)?msHK=fX'a[rol$QJ!!AV3&(MK<KnRL^P,SVPBl\<ouYL`-%AYn*l<sQ1%Y.O@5b6;c1bAl._EJNJ",N790?$rU3^Hpf1tu(k^t[o+K.:VSUOW!#+T=K[fhcSD3V_<P8+/_;!Lc$<b!YFjhPUeGfO0g&+8[gIFNP1ja=>N)FY1)ZG)u0d?EDo)>tt2Ps:=HHY>:3F9;8]fe_U6'gjUMRXqum.;bI_tt<fI6JNO5nYLdb,eW@lo=?Jkf[TWOr)Y?M%<4E2cm"1%:"PU_l/Xq5elL>^$?@"Oo:'lrU8s(rr<>Xr`NlKCgOsWB76hhiVk^f&EZ$+ir9#K.TDS+*O5,PC$7X"Z8&(ujB*bb)kRhVG)E.A'gu$RXJBC6(#H(,J)NE&$4[;VDVpq1mgUB//`e$DYBiG%?riSSCh)emV!JQP6mY>88Y"&PXra$R.5F1V>b&c3aPk[]J&MinJu19*TJ\Vl:uu+d,,TLmi5m2,"ES-m_>!DFgO%X]fYR%5rU8VAn)"$3hYlp"rYYY8bU`\9n)kMd/dKLJrV[\ehojX5fDUtaam].0DX%0$hikU!PW\.,?F(aI[)dab>i,GGTDL9*gAUp+d.@5Jl2L`=YPF$)i^!;!rrB^pDu8;@rY#b@!$3N2rrDsYH?]AhFT$p[DsBR^%@mFuQLmE7Y,C0jms4A9^LIehHhY:%pV2(L^O,^iHh]`$T%I#u=7TGR2crpSXu_WH43P(@'dc'hJlJG@g&(Y2\"KL!BiQUY>$/&G"%E>G>H"sCr3-"0C;[;<UUR[#2*0.6m,$+Hqc9;N?7?YU*PK&TfSHNWi!Tpo#t>UC!DU)affR8A.C']<i+Wa'<5K>Okn-VQ"igi$IJ_Y9lnA)DhnAtQrrD!o48-.'rr=T&kh/u-el3^%q3Sk\nD[Xj3^(0fHCLc&nBb%=<(S:T2^FepM,6\^A+!?JAnSR@^[R_0f2J(36eNDnY$-ZWchSTn+iam?BrUV?c%FUCB^'6QRG9dG]l_[N6p]s5$SsZ!+&u!FgXT.U-c)(<0D#Ps2'[W3qY:L@p-/HDDkD@_q\+DThoui6(=E-^AbGR`rr<c8TDnn@5A9rBbPi3lrr?V9d(f@Z;1J&Uh]BR.g&D&1c8YaQTDWh/n)!]RpT<V_X5CVFrrDTprrBOMIkPa<:\^"Ld:^/F?h0ih!4Rpb7fNJ,Z]G+dh-O1:T4WSndtI`$W7CnJTc`1*rLSH9+aofOIeW;[p[<S*msb$"IeW;[p[<S*msb$"IeHT&Qr![B0?t[;<"G/LqrTi@ZM!eKrlI[kkPd!`FFWbggqMN!?h%aOJ(h3Crr@%Mp[<S?DgsE9AIID/qqo*ahnAu+rrD"++84d!N^*;gr.t@QhrDF6r;]'DVu=4hVa'\;mJd1bq>6f;QKsV,oVb"9[<MW4:%-s44nit<f3\FEhYlp"rU-G1T2*JHp(-_9raD06_T()i*ut#MpOl0RP:uH$Z`M.>7Lar<;bFnqc#$'nN``B#"#<E?`mstaeTT1ImJ^C@0(E'EL'g\HcL,A``psYSfi8_Jb8<RAck,4`JV^@A+WAR)^aR=,isO,?o4[#MTU'$*rD_lk:WWObA)Fut?@Db,I?dTWp[<S*msb$)HN$2Lep[MpRt$d5G,D".VFhA[pjJC4<5t%kY][Bq4kEZ?lER[pVkg0CW>$q4:D,/h#p=X>J!C6"QZ`<./oQR!8Yq_cV<Vl?g(,qg3lSE\H!R$F5uj9hWSkTDEM':$TTBI)fr<YfRC9O9aX5M/(Hc[>490l4"EsP.G5^jGrMfbmhnApE^$E<.m!G==h9FK@#E>g'Yef@4m*4-V'Uk_f0p\!/!OX,M5X0.e'8r^.aoOWFP#H:qrU8VAmYH;ghnAp@a0.BjCU3]sc0NWb(md=tpHB+&ie&bg8R%_+e)R-nUW0CW8PIYU8Y4L(OdOc&IJ_p8qqgmL?.V/VW4MG0oq'O+8j0elYS7ooFD?@JFejg#S:st$Gq8HNN?q:mKU.puB6GQ*55js,rU"t#hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"k\L"JG6t(\oe/^CWf#&hXf^sWdnYi6`]k6H>B=Ju-B_\=C>/NSXGj$ujJ%XI6k)?Smsb#7-bk$&^O*`AjbNB*2tt5YPZ@Mt=N+Wp;<E2NDTbq/9JlWVD.Ei41J99k[#q6Sh!NAYq6?U&+\0:opV2'JWiBfk.[l5Ua<d^aUn1b)WbKkTSt;Y_)CaU52Z_s).8[&o!.lbMqqo*agZHi<=cJEQG/!Y(o`gUCZo8I6F5^k"?to2A*/ujT+"bm*XW:Ck'4MEaqqo*ahY"R/]eOqrYkDF3i6V:UhYU@T].p<r=^!j<_2G/4;o9l:!h#^AW$Cd_l9PF?n)"$3hUWbHn)"$3hYlp"rU8VAn)"$3>-I+/>uN+po_p`0-B=:iWb\8^_U6lo2g/d?\O$)K=L!qirr<2rmsb$"FK+`crU8UhDt;/B)[FY@LO?-Hd^Dqs_\&!7;j+*FD<4QK:fN(Lo('R1I1$Sq`ub3JhYln_5CW@qIeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S)8,iRW(]BIDIXg=k\%h[IgA_'>hYln;rr@NBmsb$"IeW;[pUUUF0Dcu$O'h[Ckl1YW3ksRcqqo)W%t=9AIeW;[p[<S*msb$"IeTc?!:rb]!4(t[5Q%Bcqr`;&hnApE^"<8a^O,^iHaXIGg&D%`F-?P'`':oLpNNtBqqo*ahUEVFn)"$3kPkPNhYlp"rU8VAn(u9L`(lR^+T=h&G?3$0YD(5=)"JWJijtNNL>IMup?#^>eS1k]`8dYjL-oo0-]A&DKg,8"IeUHK4ZtqK4;=$A6VC'F$rllKeF=duo^qVs`=*;F'!-&i$u-MW5ZLV\(AI9Hp[<C@qqo*ahnA6Krr<F!q<M=n]$m<:QY+7`2(`0O9R]6NeK#Z&,kW)]B]^VYFU$L>`0/3jicc1<!68Y,'#u1c;Qjn5aGdpE)Rk45P<N!ri&4q@Hp??\;[#YhOS7"8do4Jk/A"i!jBiqZQqGHN7qlWlqm)6o+X/t@=n%ZWV1E"Trmo;\WT^R*]o>V\g;"4G#b+O>Cd0EqlHT=@A)Futm="7#ljrjZIeW;[p[<S*msb$"@Rj7;#A<f2!,(YYQg&p\\2tqBq]g&WD1.VRG.ePjk-Ol`p-'sPGcm.We'l0p4\\W='eLFW;GTE;_]4ghbHEtuHhPJRgDt4`qdV4j\(:,n;df=Eftl,UXHm':<)/6X9<<,#'Pc(@1oud;^lL%LOe]FK91r,d;%4fs00N"s,DI&Sh;%u7huGb_fDmOKp[<T5^Z5_!Lc.KgV<XE7%c=,:qsW\qB]73"rrCpngZ<Dq9sgrq/Q-]j!*j'7;$5:KoZ9"</IYIi>.IZ[01SZ/?[Y0#48c1'a2$McgZ,N2_=!qZqr]!Yh4(!np"94qJ>k4t]m6r"-<1K^b6l@VYDjcCKh)f-eBgNaa6^L1%c!rYMP2$CHA/`t0<&Z\2EtsZ+2u4TKs`#l"5gfYC[U3\Y'p3)^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApDOFQc/TDKpqKDtrHYT8Gt!5@_/HH:TQRt'Qhr*o[+`3[)U!;DP4fLahInSZ9pe85-boq6[+^RQCZ2nacKrTlf7Du#imC&\0i"(qQ5mmiB2Xk5l.rTp`c4*KfdmO8%sV>gOH2#dRHhCn`X^A[NhEUW25m,\'<^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^RZbM/A(^qrr@'9;li3OIp-6-HZ-DYKljfFhr44b[mSjGD[S5p/Dlj+'$2<rq<U4#\2p&8a%oJ`h4[KKp"lf6J)Nm>%6qHDlXYClfm'V9DSu>][dGfULXAc.nCZ@lipNh])RKGD^QWEmUrH1\BSIrioW*$b=!2^$i-[Brq>,43\udfSg.0Sc2#dP&RB?Jh*FV9fr<@uRT76O0(VO.'KHC*[_uB_&\+:m6&*8T%rI`oh)'j7c3t%_YCS\78'iek7NZ%T:h07N+_uiY9P2n[QZZ14q_$j`alQaHn7HT1_\R\WenAFC$B7(oiNSW8N?Kie4GBH[\!:)\g=m,;'a"HSnZYb-0@g,KH=0hS&%Q>sXBi_0)8L_<7,t#1i^h9\@oj%03S@nJo1lS6_?=a#&IYR!VTi(4Q$:Vr4qqZX"e^[aO<7b2Ne5k1%e4j"I=][GF2-"d!1,RMr2)Q%'brnJd3HoZnR>E2PI?]&8M<a8qWiC?EC8tm/U8Ff^8"+a\k&uo%kF+kS-(7sRZSN6<`0,'+OHRPg&kO@3:!"cG8N`/3^O%tjbJW:7@=KugR/Iuo,H_H>Gs9a6Oji_mbM[[12EtO+l)2l$(AFu;1d4(3['@#[_%_S,AS?[\>KJo-A%j+6C#.Z"5"5."a8MH5R^[]XdN$PJ`6uK12NBC-Ene3IeQH'=(i@#X4L$,r'bqo@'^M#MFi!'Mc=JEoOBaY2[ZX9g6NR>\b^U_D&s>JYYl+Cm^UD`fo`nh$J*L@LkmjWG[!PTNHCnd9h1N!km0Y%'Mqa_2),H.0_X=@WWj5/EKU!8_H"q(7jcHg\1&>DQa'S-SVV!shXEG@#T)l7k(>HcE9s]YP<EQ2=pdurJ.&1BS;a!K:#^N7^][F,WjKfInSLlZ4<7"NA+GpM>Or.#D(-'enO7>+JT?6ir@UHOH]`.luhYlp"rU8VAn)"$3iK*oR^[/]6EI[!+I$aj5hpK,cr4RPbJ([p$T)Sf0L@1]4q)aqr6dC2#lS8D>CJ9N_jj!8Nao;@HoBia=^&8I+i=;LO.fTL9Qi86@N^*EdG5hQU]mnuphso]R^]+;O\#4`M:Y9!nrhKJnJD&9EDaXO)>3^P5hY3W8S+\Q5pV2(L^O,^fEm#./90Ddc$kUGLbquT.`=u1KGpSbH+X<"("LA^@!pAGI,`X;0=^<801he4u7L:&STIfO!`$urZ\L2njpmZ;K"-QI?hnAq-r^_2H*P(_c^:RR;VFoQ[cL-_@lmd>'TSAb9\2U;[cL+6'AYuAc)L?ZVO!Ga@6rZKhTE#53Q/?WMkdpr+qcA5644M0]]-i!okc/0N3$+eGagpu1R-/^&8E,?b>0t5g<E,Ff#9M";I,_$7[\Op1U9:A4_uXj/cQG+]!rBV-fIuSLpClGtrBL;^i>4Q_[r-[H0'M0"n5`JZ`VGk8l7h@)$9HGF[CVj(n.=4!X&I%`89Z>)>'X@E,\QM05ZUt#n%\@]D5gHhpd<^RQED]nNpuib]-bQ9/1ISR(d3N&pmC?G_1`l>bb]D:0R#nC:]dr1bTBhOA)#O3YTqJZS?MQ6*Ao#B3;WFQ&,%(Cmr+hF$2YBaqqoX3rYEo]!+kin8,iQ(!h]JmIm7WDd`_V(_>aLH?-p@]Y>Kf<aPS&S:>,XIMp=9\eXub^;=EB6_Y:1qYcHZpg]%9E#QFe5aaYs^r(m*KrR#8kfO+3ArrBNer'p\d`3YO)!8Us_g7Mu,a4#_A!3"HJ!21Ll^&=ONr?6TXT76P'IeW;[p[<S*msb$"IeW;[p[<S*msat,5F>7FO>"m$r)=2ihtuOpYHmilj8R.jjQHLmf5uN2\(n^P1LKZabCA6O^]+:RAbYYC$u^VK:Lspk^&-^#qqo*cDZ9^q-m/0DYDtjBJ,G-&!8lhN4oG@FOJi&h4/Y=4m-XfQrV?>_fp:rbq"1LLjgB=3k"Y=$p-&.j*nO`sn)"$3hYll9rrA[GrknE<no4S:>DkKe1!sN\4RO5B"&DfD;!'iD.>I-T]c,%&RoIi(%HC-ea'n+lXEp46TjL%/CN\[GBCb<_FdL6-Bh_a[3IRk=Q=0ibNr6'#ChuFn1!-FcbAJ^C'#VfO-.c1jRGLjo51e&kg<Du1,3Ia^Q<JCma--"O&'r";pqQ_%])*tkrU8VAn)"$3m</>lqNE5QrrC2cq1&(oAr$.fAs_O">40&K/ZDGZ7Q3!R=HV9>9RV=>"aI>;<Vs?uWq?fjV'IFPn*+E][Isc:=SrI"RC"_K^LNFZUpal^,=9`qBkXdkc@Bh*l:Ru\%$f>m>Ck4Lnn(oMPO-q=8nOjQGZYr"EK@#[f%)>BVk''5oh*ZbrrA+pHaE0RHeO,0^&-^#qqdZH4ZE;pPOeUbG6?>5RX,G;OP./+$sEhTC`)*`FMDS".'QYZ&Xr#o,Ke@*E_jCGhn>7MIeW;[pLle6-a+]M^Fuj;qR?[X]jn?,?M7_M#D;f29QYV?)QXn,kDE!boauXQl1L';j50b'hY+_Ymsb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<E>IkVAf*RF<&[l5lb=KB8Go=s'DZLQ!^VZ%%1,8^M]73Es`-=8>t<F2Qr5B]T%YTEQ-IeHK$/4-9dbWo/.P"@P3!QcVapV2(L^#2()ofD_pa*scK#,W*F%C<AqT?#mk7CQT25'qI^TWfU6/lJX.:Sa"H^O,^iHdtdbL%S7<+o-?;(cltm"s7ku^X=/*9R\B/*PUPQJu0GW_Q'Fb2`XrB7Y,t;.BGKMrU8VAm$7JB^O,^gWIL-;E/qa/__5BKeHrRQ1V)gppkbBNkA"m+-es&`Wb*OQ"_@EI.$sfc:oO5;pV2(L]3G$uIeW;[p[<S*msb$"IeW;Wn:*P0O&lhUkaonR-^'60JDFEN[WU/2UoVCDBX?@$V8)Duj<;iM)"$Ts9_[Hu^O,^iH_KnWp[<S)WS%*kE-:%.g=u46<h+X#g"H:(jMBDL\jM\!f#(caAr&4!l(1uYb7QdHN3Y=kM"g@ep[<I%Hs6>9f3^"Rh]KOTAjVrY4&&F@#5?eKe>)07DK\S'9h/=m#qYkoR::?5X]=mk69*F<b7oF"msatArVPKcqqo*ahnApE^&-^#qqo*ahnApE^&-^#qq3(jA7,$uSb`9cLAp'0!8caOqtIjPpUrNaqqo*ahnApE^&-[M*rs(BNIF$?i]j4<!8Ql>!.O\2IeI_Dqqo*ahnApE^&-^#qqo*ahOjfJbp352Zb6;<nsP!rSa5`np[<S*?iL#mhYllp5EfaYQ-N&&!"f/#rrCm3chHmWp[<H*HhY:%pV3@#!5EmT^O,^iHhY:%]FX(_fC@r!5IpYLU7IeNUU'AN6Q\.IhA*'Ifnt`Z>`_$dC7qBU@2Q,h7o2LUEN@spn)!b'p[<S*msb$"IeW;[p[PQh!/1s]OfeF>r8IWjDM):B?3@;+1/Erm7[(n>Ur?e(%YC%KZOl/%(;1brI,HdU;KXb%q&(&dKiEH^J",>9eG!nQ&c!rI2/c?Kfj!"<LMt#18P_^7lC(7%<^o+s"g:^`h"[t)H/sT0A!O?]!F+Frk97DlZ>-sLch9((W)]So#7LM?1-9ughYll-4k?gDT>,aI^O,^iHa(9Hl27]5AcD`d^<U&qpp&B"RES\eZB>[ogRF]#pAY+eolVQZ7R^qah^45`SdNA/k%HJ+&Qe-GU5dliMK'Vi:#ElbK7>,[DJsO$\gq:?AEYGAC#[rsJXc8jHL#(ic;9CXcah:X6o!2Y=NM9]/9P)fW7@=DBgO_EbT>T_mL#!Z3h3LT!c"\ePdKBJAt$X?DF1:7,NoZQHhs63!%5PBBCTp98F.R.[:>9,IS]CE3m`%gaSjA<V4u46do6ZWX*/Dc@D'#*kkhO%AKj[pWDQT$OHij=lD_^Dd8OsTr4G7ZpI>&\g4lX2WRsAkT#V14mG*!"F;3CWiKqA,:>FNim<)dl/YFR9="l2S<E7,6l=Z>,0u@BX^<jo;W,EdR:-qsg7=9mnODITe-/66>a3s%RqNJn3md7^@O0rW8HhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2('&,m@9rr?T7n:1H<('CeUpYA.(=V(:+Du@\kN*l@GGCTV^nTtR(DuM?@O8=j.rj32bp[a%3VY@;Fhn?%u/nU/^Dge1dEWTjG_!\><RB@7fZ;_`)?=&Z'Ud5q^CF$n:)bQDm>/K=cmJC[0WUTeWDIr+OL6E@D`+5m$.NVMa6]e4GQpcnS*^^o;80e7d,MlO-7l4+$oVAb(>O,j>9u"]chnAtVJ*8X`jWFL&4Qjof!<!R8-iX1TpV#R9kT_22rVljYIuqGA/p>S@!,N`h'E'@sTCj'dr8ik:!31JEhnSA1:ZW\u!'KGfrrE!2>:9FN[eIOdcpg7Cqu1^;!$Qja>j\0_fKT95Pd\p7N1^)i`W#qg55js-oGK%IO8f3OF63E%re[b@rrCf#hnSA"+6EJ$!'5Uk^\TR+ci3u]++F4i8m>s,7Sj$a3F`!glCWP"EIZ.nq60^&rbL7-Z[3)>r<I(6@!\Gg@Q&,f:=IpAIA`0j0:KeeDN1o#pjLW&A#l@=BLBDR'.`PdNd]QP_QTQE+7mrsmqpn.oUG-0'sMcSrOJG(omk*@.c2D4a#6\`W$04EF/`#3.@8Q.nW;O.rI(\")j;;Q+fM"S.KWO@Yt=[%/5<+q=OIsV!>bFuG%L%+H[keYIeW;[p[<S*msb$"AM`LN`(n#Aj7+5*4sbAm7ip@ONJE\OPkgM8Q'E:UG1/Q6SVOrLeBZ.!AMu16`_^6Gd?l2bd=ckA0H_1S:QLu8j\NqreE@q>W0g?$g9m;mE[CshRr;ruB_"5dFO@tE<_Db_\S.rmiDN"SdtMS<0J0hoA/UnKAi?F^h-;NKCL"h$ZbnPZb<mb[&+L_>n)>AE>qsu=*;br,H5F"DP&8Lel0\;X3p1kKS@cg3\Fu4pWst4K<A,=Y^DBg3+e"Fj#E#[M8EPkqFXQ<Gg&5j$\pL]kcW+oMA)[0[?1+fVcJ7(7/BL\T^gnh4ef&7j,8F06929#qSO\]b*@*sOJL)eOP'S%HMCOk\e5FO:'/0!&R%mdRWC[m2kXRi8lmqd`pD`#'qqo*ahnAtD5N*]Vb;9(tr*eDGbT!mm;8LsN/*R!5]=gEE6BB0Ng4(1;hJ/]XP^pu?e5AlmgVXr;`CcAe&W"EU7/AB8*S(/iiB4j^J'gbWk<<*gHs/tQHg7*q5@-i]:St`)e9GeoU.XXnMR(^G@."pV<'^\!a5cAqNO6p]+*ts.p/q,H<=*E1OO6`=HD7*mc_t35pJS/tnPrIN^A[MA%so;n'`Ipd^&-^#qqo*ahnApE^&-^#qqo:5q1X=OIJi+)!6)bL0E2$eUO)h5HMkAS!4&g(4oYM?%Ga8GnolamLReAEMq2D;esR'IbF@D&PQ(VokM'@YHhne5_Atl'<W<%R0Dn?_*.R^QmJd05HN*u^@DCj@q1&DELMorf!:HJ`]oDt\rr<)+TCUiorjC8QpV$#Ym5OB?p[<S*msb$"HN&E2N5(esao5Tg!BVrLiHJQ95:=0>m2aC">oC#JEYPRc0iYcc),l.D]tYj"Be$'c4a2I[RH^aj-AkLhe26&S,\ZIMq8@[=gKtN+-gs_E2a'eUGB[ZVc#rb^?n#jK)9N4@Zr:H.04@!qhKj!=d)B!Ud*rod2p068&(01,07<1)Y]s?-dT%.lpnXd^N%jfNO\/8FVs4lt-H=Wf<.98mhoI>*cX5@8p[<ANL0BFCJdA0DH/qM)L(n>JRTUIQECCcMGpJO)"],LNfR)d$E_R`H&j3JBlPsoaXR\q-YZ+"Z"eFJ*!!.+gp&QE=#pe.(aX$fb+4oD`rNAGLB>^b<J\TAmi`F.5_2iDEr7`6-%d`RD3L2I&7G>GMPfWQ*@,^D678LO4YISj^pkWHCrN-2p4Xp]OV4[>@q!1lK>N&pSoYt'rd;H$4bE"m%WMBl9.C\1/Y,pKL[iJ<qWqjpN24g-V)kMEkOcQ.Vc$n6_S2LHe5jP:\l,8herC'FJ2+6_*kJnj%8,+M,mri^;m<_ZVpV3.Er%4]CbNn/Kr[J(9rr.AopSF5S.>.WB]:j`E?D@H"hiYW9J=X%H!#M/DrMr0XlD*7Ml%SS1cXBniHU!#&e)\8LHoV+6*u'0"p=pUMVldO;[-0H7n:PCa.<@S>>X^P,.7YT@Z$!T.73ue`QE`!(<5PG<ea1oc)"*ren^lmC6[+"Z!08oobj0-=8\"L'>C)/8NbS%Q;--]-j/?^.1%8/lGq'TPdmbp<ID'LOpb@',DF18B@&0b7as'[QBaVc+V3DX7rC=VLqB1:7A=q"/rcuhVrrDmB[SQo'D=;h!J'^YLbPV9\rr=3loN^dUrn'ESrrD\f[XZe;rrDYV0E.sFmsb9:TZKE_J,Jo10E2%E9l-I$gYVo/!'qJ%!&*g:e,4q"!7>krJ,<XNp\IeB5O("Rq9'TS!*&ji^OOU@T?9CtH-_iW!;\%N:]CE3msb9:TT"Aep\a:T6N7&L\_B@IY^QEI.;b^M)*e&\MuNdWIJ_juHk#njdiZe8j%dnq=jRkpg5i<o``mZGYdF@_K:ptgV(216kK3*RafWMA1L#Hk#[8a7PetUCjl.c..4%EeHrg&+f)G_(H<Y:]a&>:7C%b$ZYM;,(Cg4Lf8VbSC7bZ,<i%cXVJr:qAVi!C8TTI/]lrlI`!B(<J5$jF55o*(K8h&n:<<UAfP4;)j4k3]NodR@7:O`"WI@-XET)J#KIk[Ml+CCX'po#8\^\>rj?Y/Qba8M0^aj9ldY3>lchf$&R[V!;6c'JA0[:OjeilgfIrYXMk?Co:U^O,^iHhY:%qVD/O_GEJaa^6$;nG`La&cVjGa*`71!.Q.fqf[0YJ)T)8rrDrfpHPu9f,sPI:k-Z'n,:J"hnAB'mc6O6^&-^#qqo*ahM"2`ZG5O-ZTl!+GPn[k^N!05pUsVmgR[$gC\Un=9UeBOLrNEDof$#c]FrBpk-n?6@<Xk?*24pO.SP"0U<OH>:VB`BiC;]]p?20_BRCuV)2L$eSp]rJZMUilC)07mfW9K8o5#G2P4:WR10N>4JBcSB8.oZPH9?SfV-<a#qbKEmL(1mmiMJA#='qc\`/:A>;n\%\aN`cgncGfe2ns_8mebLTfI-.Em;MeSrr=YLh>GTJH$)&3dGh2KWGi_I*m4:!\YBhW7CKd'C?9+Uh"6Y5"L(TnSDR7<%c>5"Mb9BGS9'qa;q*pBbP?((2V]B5IT5YTWMZAfD1RPHV;@c`RmATIfNtr$=40[0VeW0+N_"2[U.:7X6(kQd?#%M``>#D29rW]1E+Wg__On8+'c#/<B^$aLA6Xspju,[.!,?<J!Vc&4Bf[.N/7fP;2]G7[O2kbpC$94Y-u%\:U7n<WM'/XiUSWMdJsr!o#h:/Z'i>Q.!!2QQ02"r4786QJ7o':7*@)4pdS`u^*#-o0cpk9+:JV*cO[B7++B1c1<BpOgfrG*$$D8lI!E9%!!*B4+!!2QFja5>B^Nen0.X7e]H"2F3,C-/TB3=/J.+Gnmb9N9Cj,Fb=@R'ouqtIjPpUpej*bqTnDB/*(XM<TSo/TLp<S85fc;qN&l0cY-.*'Lkj<=^$;=sVOIeW;IhYlp"rU0L]!0Ou&3VO'*c-5+&Z']F9_*GtGcQ7,=H=SMB^7cE![bcX5Ys+l&+('Bh^O+UGhnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE]pFeG4hSHAn^FqY699ZnPhXqb[LK\EP(10Uer+J69-\qV8G<<dS`Bbai^Q-tIJ_p8qqdGFmj#3&1HW3)]=Si&FsWQER$,\3gloiDrU8VAm+hLMl;?@Z/,F=#eC'ee,nB*nH#@/+b`o5[fb(s]X/)o&,q1W+j'p&ma0)O0+HT+,qqo*TMsoO$n)!71q;$0b[nM!o'd0_@DQ_c[T`sjPgT+sRcE!n):2KcdLDK`YIeW;[pTO>+HhY:%[1D@2ggB:2jW&Uc^9>A(mTm;/[9Y&E`Cdb7%$GK[Y?)hncVYg[XN/,k;^Om5anP7Qp[<H2HhY:%pV2(L^O,^iHhY:%pTfYILZ=9iTD8)k3r4CVL@WAI)nW:gWgR=R*T)L,U[;b@SUhLEB5uI%39_\PR$OqsDkMIO^O,^g1:#Q&Sd-^,_Ii?2R%2/;\uQ^6`T/K0Up%gLBP2X+ar8u:eL%/nV5T666uX#H80\'3n)"$1^Yca%hn?2hj0Q?"W-;MOpZkQ.RG"(-)G$aK@;8Ik4>&pcNjbNJQB*DRW6tgUeM56C0G\b=a1luq^O*V#O.X^^"NPBZ!0V[@R>6foDT(k>f@2CGC@bXZ[WMVR"4&h.?&dUX7P#,JhnApCfQB]+oj;u][,%9K^2Q0g$i;GS/g@=gfX[nLGc<KdMNk$^i2`C[Y_'.d,q:M_h#$i\HhXd4hnApE^&-^#qqo*ahnApE]oi<pk!f:MA4b[Npi#QgrU)SY^O,^iHddK%^&-^#qqo*ahnAAFnRqZnHthi[O*smUqmqEdUthFmC=D.J&n1LB-F4Q>O]9k)`f@'IcUTPUka5MA,WGXJpV2(LZ2=MA:Z=>2l[+9a!'o<err?XPrU8VAn)*X*IhBHY>ML=s#2qfD0_b$bp[<S2!/Hd5NW/u>hVeD6co2:2!83.BHhY:%TRWF/bHu^`r1!&uh:RkP+kiEpqjI@34T,s2r3H>&!UK]`[O])[Ngd8f(iPSSb[]*PlA2J[&la58^&-Jap[<S*mrlPFRm68BEaSTspQtmIp4'i(pV2(/KAXB>hn@M%GlIak%Yrq;=dSCO_k$&)gqm2m%RdqLA'7\kaqZYa9'A2<-r`l^P86V[GS#oV23]Qa^O,^dSF(gf?h4)q?EU1FZEaA)K;W<3QKqe_=_ajjP%)/XaX/6Ta\^&ABhq5qLti5DAj5tXIeRTlag8002T+hZl:pBJoD:mpeTP7T*ES$OqgTcuZOp,F2T6[.m56e&RZb>&kKHU7=TY?&[k-D7n)"$2jF-p_^&-^#qqo*ahnAq+r^H7FT)&0ehV6X?r`mb<mS;*a3I*L*09[cn2n!cZ?N*OQ8Yjs<<p*Df1&@&/55nTr_jmmbrO:KbQR:GW>DKJm^2kFnSb:TG[l.!qXgQ<t,O1koNS'O]P#&B+?R&9N=Y'(6e^R.1lfrbdS!21JqtIGSnJD!Irr=lORrp^4\i\mVC*q<LID!\U*M&&e!(6]k1%UdUAE\60AA6g=DL-VRV%PmM?fH3eLX?Km!AsfV++KT+c7bA;;+]=\*k0SblJE;6^%\o>qE3EiP$J6lBt#G\Cc*8O(h8Xh7udE"K"n0@2BL^0RnI_^MOI4E5`)Rkih:hPT1T%1b<LqV#Q$ucrZ;%,EI[*+rr<>Il0c3c_fcjf+RSjj>jX%?ec,WB/s<<k4%$!BW/ZEm0(8/l\8Y`;]r5L3jpYNBeS(aRC+<_&T(XT-Jc>]V_X"n/;3'Ji14':MQ<")&8,=Y"3fLf0fEj;Ebm*+_eIgg8T&ul3:GG\^Jhak./BCH\'QAJ'9*&2e[6Joqa6]c5`Cpg7Q?!U`L\N9YrH%GapI"3URHe.?rHl#"T;4O*AbA8km5d(tgUe\<mG)=+gR,J_&RFA8ii218P-V$`\r)=He5XRaP.S=^*Kdr-Xu6ehD&baVlQ)J'p(kie;lqYsD!anb()%3G&uquhFArgh'3%_.<3nPuAo_3IAgEL>R[0D""K%uH.VL"A87=rI2':bV!4i$"WV>jj?a[)Mrr)<BrU8VAlltk8rolY-gM7hB44CSq02uf4cJlb.r"`(UDEMe?2\ti:'dAhF[5Qi(D"6(o/^9W\3bbkk;9r<%Q7Eg[`!>+ZgDsqUpf]hug,nb=lmt%f0ok#@]%t]"UW"imE+Pm\pq.(T)OXKu0:KsUD%.dH92R!l<$2eu<E@OE`j4/p6VSL\`/QU2RcSU$N\F2a7R'<X-f;Uq^;M+6IJ_p8qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahN36V\"EODO+[H4pokcmrrBdu%sl<H_OH&;7JpWp!5u4UrrDeSMqCVUJ+7EpJ(/<7!;3"3pV34?]f3WU?N'?LrU8VAn)"$3hYlp"rU8VAn)"$3hYlp,q>UF#LAq7Z=S]f5!/gm0^\dGspULh4-;4>K?ch4'905N@!-n<fNkJ$a!#Fq9rC4X'!*ToJHen;Mc2P\sIeW;[p[<S*msb$"IeW;[p[<S*nrNeNKlpt@2<B=WB&OaQ(1,;+o^?$or_qD.A>X_X=)_&8<\=S%0d2]ceVrcOgU+M(&i;"FVgtLA6!(*S5PS&DInSDkrl^>,!V`uD?0p8dor4[1)\YGEe%nj8;5oOJ^35F<c6<Vh%V&EW;/'1mW4?p7`h71krr?d5!!3q%"iut;K2_m!rk+.^TJtn]5+qfI]j:Tahluk4^&-^#qqo*cS3N,0cE3T-oD)tqG3mEV/dDQmHH0d[IQmK)b1j:fGg'L?m#IjViNO!3N5EpeFBD3Hl.X/oT>jaF$rhK<Zo#S`Ku!OLIk)%oHZS;(_N(8F\<o!Q]u@92<#nQ_HYX-f:I@LYGF)[rZ.Q$bU;kW];e%Obg_lg/;,]qHFOYI'_@ENs"&ZD2&SA6]2$ad?Vi>AiU-KH&Ss^/r<#d)R*g]\eMSO[(qq]2;YqKjQIeW;[p[<S*msb$"IeW;[p[<S*nAkN:?hRiV35>!&5"knUn*&WBra*>l^[/$#:OhBAG>J59S]gAnk<Iu!R/[/oVF1@`Ep!,bAH)Y_H1okYhY)9q!/0rn4YDNh:O?m<p=SfiS*eMHK>"U^AY-a!HEM[bdbuM)1`O=S;+6bCh7;paP"1[0fAoMsSW%.i-8Vi'?/P4/rb/uHr4F_sh1P(>\a0do(MVth<`^/AZ";[E9OsVjPAnrE9j^Q'1:VIKXBbJ,OuZX<MT$(+W.VB7Kbi=%+WXi?<C!X1*?(EdkjY[26S,D_lLK?hr-S1OSEk[`CL>6t3XMV&I!GJI<KgNP;pj1hkJt^P$#2H4;e0;309W8c&^RRnA8XV%4C,'br$c"3)Uc_!I7*S"HJo\q;q11EUnji4Ge-IL(Ne5&'RsIdJ^=3hYlOL3hm(WtR4\1<$7-Mg!#?FV,Q5*dH`d;JPs=cHmH^+UAM>26rYjbh?='Kh@A)u5OW3"Ki?\VJ/<Lh7qPRb"mJ7O>;]udi/Onp)V-/<]d`iUYjP.A_iCpkM+cNSBr,2;kO5"pdP"=h]YA`iAgeUP*#ER%<_qL2]Bi_e[,"SMr2cB^>_;LFV%)n@rWEC)n=J^l#$W11gQVHm#.A7#)&#^gA0DIa0mn7S`5:ZXur6Xk+bMV2)4%F=7heMS_$ond=\>FgeTuGEdc&UQ5Esn%\NsE(9^*i=oqcn#"R[T,(aR#%DG@oFT]K>#Zr^c`@CUQ=6HtIU%qp+usX3B]OM,KXoSB,C5phXdm<;=ZQ%YMq'$7\#CVMMi!5g70#3?4<->,k3MKg_1`10>?>=]Aa%EM@uG`jao+!'U54HhJ'KKC@[k1&h6,[Jp4ONS3k]\Fr_i)#5tolS-'m\m'2QmV[^4)ifNUL48d^c+R0fB&DH%FEK9+p\e1ER<TLOecu#!Y'-6P7.\5jOc=NGr^L8<$U<EPMmg?/G@'+(`q7keAmil+:(oET;,&]Wp')_83h/\!Vl-+7rp+%[]S&VEe6g+#P_M.6b7lgi"\u_a'%^,NS]F2sJsJ\K'QPX$=]0neQi[JlBH*H>)8I5BhYlp-O7.3uA*:URpV2(L^O,dNJ&9o(m(U1^rrD&O;uZjdkNs@;=b";U5O>G^(]OIMl7`,3)roQWgHY4R`r?%mZi:#cW]g79QsTHup(_rK^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^THDk,m4/%Q1;op!"])0OWXJuGK7Ik#P&T/!4QT_kPcKm^]+;K5BH]Wh/WGp*gI!.[]]W1gr[8,hT*@u6e^k`]p'&i'E8&C$hK/R!#5Us\,Q2_lg2<4\GlQ7;>E6P!/gI*+8bI"0=K*Vr)p>_p8kIt!8L_*qqo:1hojL%6MKqtp[<S*msdT0peTfF-p.6=r"]38h,j,JjQBrp5/?OpJ\(`"09q]]WAf:sgGSVMca%W([gLcH[`bMne4Cloo8']S75[#aBOkF>NMP;jq+L_f2ZEc2^D?eelqWB)h;,`PT(q#bm_HnF4[-[:4-'\L9t<3S;fH5A59[Jnb=q>;Ef)+U6OnqtEQHL3C"Z_F!JeJ>A$Qco"[iu&ZW`f#@pprVb*lKFkOcMJ"-N'/mTXc4!5c0/P26EU;3JnB(N8bWaFDJ%rNX]iO%G\=oLSu^jR[:PB%"JuW<3(dFC(gdNC6n2Du'B^/Z_u:>1sJ)ln-CZ+6^Z%3h(C\OJqfXIajjIMf7U1.Mqh/;jJM`OK+MM[\>3^X/V>ElpjK@)#jT;AQY/p\bGQ7(];+aiFi+?fK3/!f3c^rU,(OQfrA55(&7sh'5a;XfiVumQ"9cOS^cDCUN1MVgtYl_6&rQ+R,#'WOd&\CW_Mo[^0CU;_N?chm_NIXJ&BR5aE=7gTUM*gf4i?\bO8,@'*>mb]<H91k'!%40b(:n2;&u!(30R,AQ_0k1OZ;\dC^;G2l&&3qqB@8c@Gn'VF)U7j8-)Q5K!*]hXl9RHdd4_54.-pqlk9Fink^<Gil:nPBQC8h3uFQ/^_-'#%"0!gob]_T$,V`jYHXJNF^9bobA+]/@%!B@Sa[IG:)G,>K^ttG@'[^ju5KfgfZ,Nc@9hO%$bF73Le4Q-[M6JSm*_,R\I87?Wg5N4L3,u,I&MWI=uXa/FpnFnjt[d]1FQZ]1F9.`pE-[9/A:bPL%!jZ+oD:r1Et-rr=l=nO\?-jjho2]l?].Nf/42JDZUe*P'V1*YjqQZrZV7Tr:&:4\C_O@Bd"IEm+f$JK`Vp*++HXbKo8<c7R?H0;itN<#[_&`2;=\[CW'5_f`-7N&n(3WR%#9^Pq8^<k-1[A#leKL+t6*UfZ=ef?<S"Jl'pY:)_R3bSiN57JXT^5"?^[&2Sfi\bGQB=$Pe6r2>',Ijol.+6[L;^?]r\IG%Uh\3$b&[fmH[S%#f7D'Tc\8NcX,9iVDRg,jHbWF3VPTU&,^@?O2-P+o7VY-+OImt#riqM3uV;#^NjNk"]DpGRJHCq!u!<a(qAI/a&ie&<S3o#jfCPJr=3pir]]Z.S92j/%akh<(Z)H0$dXF)FhAWZSUD]TU?'e^_/2>+%Vu&cj."5Y+9Ib!2jNT6mq@B8bJrhnApE^&-N5G(7Q5\\IXkbl7\2\u4H!qqo*N5O[J-n)"$3hYlp"p)s?)+7\XoMZ3[oK<@H5?+`>thnApCn9aoEHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY)srcW_,-oSP5oM.HG$D#(uXR)M*!\mhV'nf2<%b?MA)bEVaak(&KdWcDbOT#L"HhY:%f5'9Wqqo*ETCPJ:;)NiCpQ]k\,*!(E=)GO#Tnf5@dr(`5!H'-J(a6d#/'1AQ)\:KfIeW;X#5e/0HhXgKr5/</G43@EiPF!l$B39c^ji.2!>1`7,KT4C=)c[07iI!*=-LJJekmOiPP7HT8GDS%p[<EBHhY:%pU*K3h:[h'hKr%HD<\dl4gT>Z'6N31k=g.`%SE3>7*Z&&O7"Gu;#2s&*Y6#4pV2(3[pj7a:LS(!T>,=t?OOPj`X?qK=d^<1!/GG#>qT0?A8'(\.R@%-^cX:qhnApE]rM&.hnApE^&-^#qqo*ahnApC9RQj=>?JY&9j??m4>C&U\mVBgRDm[#kV,/j*B\)@V0uIp%O6/9$@(L4FYM<qOOY%A[1N5m^&-ZlHfJQ'5.'+u/XsNKc=^hYN'tB2L(cX92$Ie4^Q)ks<%UNb6B+gf&U7nS)&\ZjIIH%km3V5XrU8VAn)"$3hS^J@m;Bo-^"5WbqSRMhG&HH8+@hR3e<kq`)V*oBajJ0TU!)IDA0+oXW2?JU_bqEaIeW;[pTs>(n)cR;ISZe!>]qA0h4*78e?_eD77^_o\\IAWTG(=,D3)8sBrLW&d%ecaN-CD;-te+lN(fK8p[<S*BO:Z+hYlp"rU8VAm#V/H1,&MK:Ak+l_gcTSmr>c6qqo*ahOFNCn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU/<&P@siZc:e0;&H;8#!8ZMXp[<S*ms@lXpV2(L]j*`Drr=pZa6?3DB#F&:I%P1sXWg,&O3@LE8_AAbN]dun%44EQA:nu5WF>uV/SpQq(t,\>/4d";HhY:%fS?:e7eF12Hlqn8UYj^0e<%QfffVB;[1;?8lRJ>ZRqj.2frSraM+*_$IbnZ>`?^B,p[<S*mpgRVHhY:%pV2(L^O,^iHhY:%pTh'RIg3V'F;@mJr?^tij+gTO8TGJUW]*D`l!CsTql[+Q;,Ge`jQj9E-Z7CGl`psrqLm<s]Rmp#!e:9b^\GS6\#Lt5/_5=RdsDT]-!Z`,B/ZYkm/.oNU:sd!U.X.@jTZn;[8g@pYN1jYEF8gO!&mhc0iVsqP8ce^+_&G^.3OX;`8%V[,7[oW!0Vd-fr+O)HZAfKIeW;[p[<S*msb$"AFnodo)\Vnn5jFse+1]CIol9M1mDiaN54jdr,l68ERQ/>D#6`)YYjMo"*a!l#]J[hg8u,:["(\"rVc<5j*/Jd.F.\NEbp35L$@<kM\VZ',l=Vu$F:mm^U#Y1?b86$QVn@I;,=(0<IcIOAkP"=_oLi[=4>S!2(D/kRR):Le-W.#H2dkBVr,2POo3&1iFpUUF8H(8CiiY"1Ta,1TB&5XW^rC_5,rhLCn?s/j<bNtM40%&5F,-A0AU'(C5^rY5:um8iCPG-b3_EJ4^B1mK[c--pMa'(&KYCrmBbBrb..Y0hmlBYQEL9/5(%>gPLrs+m87MK"%I4OMX'09r+_+O%mSP[DtVT:^$6i%q1%sZk+BrfNd\>+UV$C*]D(DWa:=q:>d!eF8QS3.UT3[_[63*$S[N5FO)&Q[^=06iNl+^jcm.A4&4o(YntZ!gh;9LW;fqI,mr$D+]q)a2m@M'p/,(qnkG?,G:VAHfacG2d>'6aZD2_&NC(tpXC0FVT6su5F10g\D/XW62aOSU<0s.=Z9(u9hU,#at`M8,?rKI>4_r&0+\ip!KrL6T3p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb#,+8d_RrlJ[.rrE$L#@W,N\qAkF+7Q/bq2p.D^[WlCrrE#Xiq=".hu$]`+8$R;rFd8Nn)jrE:%)Ik^O'%)r[*Cb^G\gp-Q>d>c#2pXM9&#H8IN^/Oj)3Me]+p`b:H?V9Y`EFb"]^e[0G'PV985.Z\tqQ,o0-m@Ak[9=*WFk>0N6h4[L]U<T>YFKE_PkocE\>U$%+KQ$Hk?+%q?-%mQ'b^O,gsrrCCo+3?&4n]-.Z!9lmqO8f2m*r"Um!/;3e=l8i62eW,Lrm1TEm%;snrr>P.9E%m;rrC@0chdV/hYmHS5bNTPYPZ?\rrE'!V%MQKrLA6/r%P&>cMmm:3P.NJDt\\\!+c*-rf/n'r2<?i!1hZ4p&!X[qu2.3r^gJkN][7@rr>Y9]RTf<p[@lc:Z\/I!'YIIJ*>eVrrE&?rVQO5D(k]]S,WIMX$>qE^O*=PJA98`iWo&!g)L%l@f/OE3R*2bq_rP*2eMQSc0r@+^?*FJnJK9`d+#m5]Q6)jRL%oG@\u+f,@g!]Spd1PME_G34a\^5gTt\nHJ4cMWJ99_ROnHtVoeA/`O]T\alDS[3gOHZ2\nn.2(Bn&'e((OZ/gi?:uSVq]ED/#Mh0fHU.(5Ao1M!><RM..]9W$g!)J(;I_D3M!,k("n)"$3hYlp"rU8VAm"^'H+.V(9q/Uj0mpDBMa7sLoB3oFXWOhP5A?$O^hn?A+S+npHm%fXJi3/T90=gA@CkGY%RZeBo>ue71\HQ@&YK@<^nE8h%B_UrSq^SV*Tn8FJTn0;1UKuKdZKM"#c.bjQ9,1EfA2A;HeRfG)Jq?#G[[<G:I/[G'(+-@6/s9UuLa-DJ2,!cgMh26E+W@K(:f$-/^&1Sd9=$RtFS9'LpBP;ClShmSp6P@+h1NGN/jY&icYhRtRB4a&%(/QTZ)!Z<9)3#GTH\.!TI9p"bm/Z8D9plsf66j/oug<IGD>qKRD%Ff1K@s(S?@?\jD&_gCAG5eWqBBBDYd<9>M&oU*m/=o7+HDnePnPlHC8<8Bb/bTQ-6c]p"909ZlcZY]KZ;_hYlp"rU4D1pe%IU-%CVUbSM5FHiF(b[QgHLCGlj+F(no\A&N5Uk^os[l##E\8+>!9:Gn<6gJoj_-]:&+o.`iods(flaG]1rHu&Op7F`?`/nk*ZjJg.84IXeq;]g\ZLo6J[[c/Ib`sJli<m-2b]doj+P/qaoXb8=;c[Q;H/JRZNM_1ZoY'i%TJpu-TkVY.5chnaro_7g(=-%^lq_?t+n)"$3hYlp"rU8VAn)"$3hYlp%O8Ql0m(WI=J)]C6Qi@'CdCju+]ma7:fiS*CrrC#mm[sIR4."Vfc@<h!1&h5h9S`W/c0sN2rrB@rmB>E\qqo*ahnApE^&-^#b+bT3ajsC#n[*FA$Mql>Vk]r[Vj=KkWhNN%'GT'D,a2"\N,5Mo=J)8\SsG\>[\=[43dL#Ul=="2l"ORhU7up<kt%M&-$^f!afnbJPOGnW`%$A_9nK;hPPkJ$POIAq+6)b[8cEHh0Iu[uFQ^NDlAG\+ASCi<!,$/JH=sArOE3R4)qVK)B]1a$d\YWk`lVFajCjQ$OG#!FUVE+5cG,IkFE.!*`kKTV'3[aMm,%MO3oai[EQkgfDI)tjIi4B/"luL!eBZXnOgC.G7??/,O!`!uEA_/DrS:<gUk7Ki'%H]AJH#U`\bGQ>S,WI=YP:VK;KT?cDg*;p,2ZUSj>QYK<)@/2+!(4IAL[I3)3C_(<1iCgF64o+4.ipUNdi+OA5lZI7];n>TAl*a(tW9t!/$p5SaO8YCn;lVIV%r;:N(,EI+4GVrh.sH\fS&LX+Z>]qqmmae'M_$iZu*R7$Q?ZI]1pHqrhQ="\l\\oX'XD=kStLAKd@o%76%VF8PM^=Xn^rc&mLYTRH^ole$#3,AuKq>CUSNZ+)=h$QDHf_I5.J1q:b!)\J%*MMiF2`FESUJr:Y/a&,*`_#u0K6P:jmK`HJQCE8GUiUQOWN(!mc0,9D>V8m(#R-Id%EVSmK$jfWs5s[q5O],-);:@q<`>!'d)CSSc!'Q5)Wf!a4W/.-E'EqK:(0+?M$E=8[+&@@ZjmHcq?N'?LrU8VAn)fK,!"3K?!4)IrU]1=OJPZ:G^Rql]l"0kp$=Nl6ZEECur)]i3pZ-7R?mfdj!6++?rr?f[r]7"Pms8Dhf(7Non)!D,q+?$]lJIlab_P0ga%l!<<c1+#mCq>qm61&na6'\>G-`KJW5W>JV5C08i9I7]f\%0X<'Ei"N^7Ge`;;M9!4n5$GL+L:O'Op%Gfkub_s@lKUVLc+>p`1Y&Q;nmRYJP%+bqG(SsLTik"$3PMF:lkYIDca78K)m@jl*=a\>]3Z-7dP$R&Or#=>N)O2:SZInGdu"U"QHJ)30RrrE!GNq*,Lm,Qsd+7R.>b<,]Nk3W*JdD+B7!<&,Y*l$+Bdf0<4$,?)CZi7^dpV24)-m-P]rpe$YrrD:OGE;b(B-.$O!":=SZbP\KDU88#rLa)ifg!6$UQ),M!%JY3kB1G9IeW;[rrA]g5E]+Hj,X->rrCK'miVPS4o>3q;u('Uc^`g`qD\:9rrB?SIfBC<)b^00-N=(klHf>*n)!JRiRbuMK_QM5RpY2G`f70bg"f$%Z<NeMJ\^BV2W3Eae@"&GE+CmkG"FL%T-9EB<38o*-T$^d9Zn'Q<<5?+m"=?%a'Pb?XjoBpQK`3+B&2e?]31W,`F>n>H#:Gt"]"%"<T`k4q+TUMDFSV07^befj<4QP[K$hQXBmN;%n.KB"Dnl)9d:i=O!t97BcNJ%REaQKkMNtA+(L)8%t=4K5F>7FO>"m$r)=2ihtuOpYHmilj8R.jjQHLmf5uN2\(n^P1LKZabCA6O^]+:RAbYYC$u^VK:Lspk^&-^#qqo*@YAo%D*TOO,!0rV`5N[6r;^J(%Nn)ul[F;hT8YB#m]Bh,Mg:PrGf)(7?fZb2^hn)r(1$m.%L5R^D7?V.-;P#0trJC$MEF:s;r-\=P[?e9PZa\fNhu.cQ:h^Q%Tt@Njo5`l7DIVhd8FTie"[XXTPS)AT.$QQBl_-S>Wk_7Kgr=4KFZ^BoeC)nYYC^HQAkI>5YE!;J:\5(1m6fdEeQ9%"m5OLj`U8?"FKR"&3mPM$DV<lN_kJ@2fU2PGDtW8NV:th7Y@LVWp:8>:Tpi.)ALJ\V=K4s;AL(3k@&fY!Jk(YDBi%.]MU&W&m%'DAgiuQ6\9bGD_*FLa'=9OA@/!@l@X3>=8[e=bWfFZV/B%cTVP9YBA+<>?676;F0!_FEO_X.7^,]c"'!L)d%O7@X9q9/`=9hZ?!>ZqbhnAttIMI@LJ%q+Ph:Xr0hjl4dMdu[>gUm2si4&^&lu(q@gV:BZp>t#_P93Md^fSR^2l:>rX<sik8sO?@^b%mZ'UY1OX1n&BYN7S<Y&PCnB(iuCFI(SHgd^VI@^ft!hE?k.2\0P1F'(QL*#T_j>&BhPP,R%H7+Cf4!V&Ka`2n^Y!gt$'bLuF)"_B#E)W[>DRMkCeQE_]q71P8#RE[mN5O'p#IJ_k!i351(XbOg^c*N,BmEN=sTr,h<E&]Ck*[;,M`mM`/dUVfl]R2R.3;OOq:aC$L)FfSa:^=UA`F?)s/8Yk9$&tUqi\?\%d,T+JW]GNV2]kI`Ji\3M)B)0*V50r>2%#JcWf!Od!UXKTOfG3lW/(ML,)'#o^f=A7-j/s%qqJTjrqUp8^O,^iHhY:%pV2'-PG([A2^+0D7Yrl720:K$!+%L_VimUH:tugP-,;WMhnApE^$$nF9g'4c73,?>.[irjVPo<9-7Rl8U6[Q6ZBC@o(Bfa]qqo*ah@G)0msb"\J&p5$Ma,<([k+;r/6uJMU4UdE;?u*d)*(>p9Y`MS+9KM_rr@XrpV2(L]n(V/hnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApDRK!92'=bg+?ct(RgiSg2Fgq),A,RKdAk@C"_[3VkiM<HIP4iWQ`bm9MJm4<,^OGqGIeHG5qqo*ahW;MqgSmtDr($$7"][R\c0d\;ln-'p8l,@\I*);0SdLk0N-.,(,u#C!YLFJ.H,%+@pV2&9If8`lrU11a4;Du0dT&XT75\%"e'pZ=#pPrIOe\?_;1Vf/8D'sF_$Al2qqo*NamoP8VWk8Nm67\8AJ"4!n"7I,A=Si8<Xp&4A_Yb\8S5\(#;&(9P(.PEIJ_p8qq+4'hYlp"p9=Nn*QA#?IP+-qX6TWYm[Dprqc2'9I'l\W1G:*7g@]IfDNs[[b055@oF^,6*"RMmmsb"G*rYQarU8VAn)"$3hYlp"rU8VAn)"$0*:?%Ph)XBf+h,()@,SMR*(_@$<`VKX\_K8<bK5Cl=SXC%R!3/IDmu[)A@7p]j57QIhn@G3aSu8$a.C4>?+GD?mb'N^,\nu!FjBlaUSHTE%8LX2p?[A</3Zdd2OL/@L5;QWWiB,_qqo*ah'-aMV7H:PiQ?"#kI:$Z?ZTX*>*COicHoPN16`LS<Ph__eOLV#,`U@%XenYA16SFHmsb$"C%$NFmsb!!JC!AdY&b2cG2?-+$(o#oB_(q7^,gJ8YK#Y%-VBggg.I1BGc.I22.\$'4o=-MqqgM.$[tQDr1Nib!44g7DZi/%!B/Qr$4:aO'd!%a7o#I4@>P^s$;Au,n78NX>s]AY&i.Fg^&-^#qq8+Gmsb$"A:OE;J(YHYkPcFtHiF(mNN_g-rU8V8htQSgp[<S*msb$"HRjJ8r`gNYHXGfW:j+bjfX\)DleU;bT.QS9Vr%<_*=Y_bPuVfdOjR"ei2!5JOY<Rg<TE?4hYlp"bZF^!pVK`%pD\bb!(J=1rrDBJ^O,^iHh[FppVK`%pD\bb!(J=1rrDBJ^O,^iHh[FppVK`%pD\bb!(J=1rrDBJ^O,^iHe2WfB2e/WNql]/I9Y;_g5JMFgA_0.O5S[eXGqC,H@Ot'F0mkA6ckG3:K(IpjiZ]JENRt^YYes3%t"&cHRSmln)"$2fKYR4rKYZ$rr<W0o)A^GhTtrbIeW;X:j_rOHhY:IrrBf\pV2'$gY7p3D&g51i7aUsf%A=/V"8*fH[@2IL!.h9@Q_#C/8Xt/['Efg;EC:opV2(L]BfH!+$TRoZoa;3U:[aV6+jJUh5Qp6AS,t-b^D\=:!'l=LGA]fY:i0V(\)fDS[V1QQ/8N$lAVr;BlrVFhYlp"n*f/Iqqo*ahnApE^&-Ihq%`hU5F7/DSaBe8T-QU.FFR-\2D1U6=cq?@ZZoD9]VqcMoHPZ:YGp85Bj$m_+-E6@8EV]%8s/DL!0ob+q9/:9TJn`7bO/`!h.,'K_M0%Y7:t&qmMKHhFO\uI;-T']RgDit)'l#ZV'48c(Q<r+jEkLAgc.u<V@*6t*A$IiZnb5VTK(G[@i'*c5;p!cH`XC!rr@aQrr=>t[YC_i5"b8"h9"*^d_6[$3]FOJk*>r"3gaXGF'IO9CgEf72+#Fs'Zh3PO;*tTARGg.qYkiVb>2_?361b_i9VB7,;.X9Mq.cY;'_.[8Y_"KQKHs!?Z479b90V^YbF*-,9[0o$D,5jFPuE)8Q*J''\%7nScJgRYsT*MrrD?!fD"`Una\(,(@BTgfP9V6-[[6,D<4bAaW2/\q$FgEhd"RU82'#&Rq-ZkI@X6(L$V$;BCX1H^:T:An*U_];dWj.7o;q+Ii8!@j.4)a2KQ>d?5mNUd^[#JUtZhO2mh6dg;EXa!/f13O6Y`D04!=3WX@d+1Wk1[<m;TaIu0$`:gAL)[J0-9mJO6h!/3sn2t)uNjDamSou$]8fm+)h51fSE[M,k8CD/KU1l9p(WpSKp1_l8E3E#YMr<+l1emc52U7aU:q;m)[^@>CNG!E?Rh''5lr2SC5OMWWuXpE""0"^-i<M/V=8sj's$W:Q8@s0nlG6t)VP3b?XOjo4iR.u[@!,ir$KtkP'U"W\H+FgA5+5u\Fp&3]NZZU3"`L#EXhfEZEjh#^?A)q^cUNL0h4,7ffne-XZ/$eu`]hN*3-!;Fj%4or>O9NtAR*TF:];IBFgcM,cQJ?c`[6mu+F.)B[Am[9VX)J0kA28E:W[hk"*%8G?m)IpiBW3;@Bc:-MH"D&rjH8-VF8]7oQ=Kp/^O&cRC%oO&]pK=e^\1Y,!#e)l?oi*'!.HQUp+5h`r6J-(rrC!Df0B/b@D0q*rrC$XKDqW[J*VK2rU91En*4iXiVWAaHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pUq^L!9%i\p.HJ4rrDRs3t)&gIFK>2OT,<72ZEd$Mtk9k!/Y?4rrDL0(U0+3rrD'7M#RIRg&D'<5kj_s3'V_-HNLnXfR_Q0o//SXrr<Z9c2Re#NuRIjY^b^1fjFMtmEbad;>\[4rr<+7rrD/n?hL[Pqqp8jhpme@anP7Qp[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;\0e`<'^[j./P!:P&*s9+/2RP\4nF!l6m_tM7<+V`Y^Ee"-,q8F?e:_G3R<jL$f!Z1m!mOH)aQB1[:_Ds?5Q2?Co23,d^[XN'p1?umf:O(`V5iA_8NDs#5MWeq"cFRg"YC.8YAeV3)&7bF%=Mh\2n00'rrCa*rrBgU-5m-&/hE<\8\3)OlXgCkIb$<JIR>oPIeTb<]m'F/rr)9KrrAC(nnd_Ijob+fq1F((fhI]_Qf:MBd+.fDhkQuMJ(!dti[Q[0qm&,6,_daYWMnO!+[K<hFDtonWQf&Ek_5.q7^?BVrrC63Ys)=gDY\5.qe4SO%mXtm>)eT"Vl(/WU^c^PRYQ%S/\Op@,^H9&oo17kM,+nTk/h0(b+u#!=]^70eQJtSD^Q<n0sH:*J:GA'Ke#:U%LpX(JFGQOli'*Hm[$)ff<hHjH]^m$<C'VZ>shOf79r>Z%:'uc,goUk;H6XdZW#B&<'n\`'bF&idEmVK!.kLNR\$7"8`6VFSn`#?BqqW(WMbm;St:14A;5=UNL!,4MF@rTUb].W)uJt7Ub\)=+G(&Y,EP22Je,VCq_3LDDrsQMrau01bM0&oK/8gJYIqI3(clHnIQX"XXBsK2\=@6)G8aK1V]4<6$G&@l0,jf%F4XAh,8[/?0@A,A>5ZR=q6TT1@Wie^^,h;#g%!&54i^)c,tdXN\Nr\2g]deVe6CB8;,*=8OaJT09XO(X;of!;g%jab(eSP??u"U$QFV7Tgr-7=/cMVh+iiU'O2o"^\IWj:m8<?/rU8VAn)"$3hYlp"rYYY8bU`\9n)kMd/dKLJrV[\ehojX5fDUtaam].0DX%0$hikU!PW\.,?F(aI[)dab>i,GGTDL9*gAUp+d#\/<+1F0%jm#Y()bIR/3*j?n#@i.$W.LKtMkS;B_bpBcmO5a<6XKuda#B#J>sJVB`*UL@gjeg]S2MTLfDbh'i6:2c\S*2D4ZP>qjQL;nif7C(SVWk>j/Ru98Mi.?J-NrQ@rG8>8P>N_MVqH1O<$[gI!%R(K?q;Zh-p:3HsDff8No%S'>(S4]CbPtZb*Inbfng`Q=_K)Sk8[^ZZJ,q]/.2qFZVZ>AnLA2TZkX"m**K[8RbICfWG'1*WH*h'OU[Z#Q9#Dmp\3#lRo[4\4o1pp%HJZ[,s@m0Pp-SJ_MlGVOUW1&W6r]6A@L88!0+gBD!<kp9<;`-Y@2ibWAI2m>\:U7uYErE&apEAiV1/aFu@5PfodmL:.l&DGNIW78F$fcpJ3dqF);l3B'&EO3bRf>Ph@rbO=<dn)"$3hYlp"rU8VAn)"$3hYlp"rU8VBBV4e&O8CT6MEgm7'`S11q>3\=Q='-Y&,RjEL&V.lHAhe'IRa,+!d;of??*aRXT&:\WfMW'VAHpa4b[5@mbe$EO?`]X9DNpaid\mrmYa6r_Z'V#rrE#1BAtlL-(KJalLM[=q_S48S1"8)YPeb+rU9+En*(5HeGK!THhY:%pV2(L^O,^iHhY:%pV2(L^O,^\Jc*B7m"'V)rrD&OI$Xd4h_DfmQ`l_tp.@Os5Oi'lU]1=B^?,(ARf<AG2I$12Q2^j]M_Dhlpg\[HH@%&HrU8VAn)"$3lC%YP$.Sb?e\<ZMiApc[j*,Y5q"H^KG9pV<rK4_^9Yr9A7?d/amV-^OWkBtYh8-S+EC#]+egKn5j=+N/1*/:tHS=IUe2nVaJ!7n*l(6&9VJfu<2+MlXS\m]fM1mg*AaXUCI0B6q8!_(o`t_l#6MfrHi/Ub[O<8'f@o1Y8[PTfUC#l1l3='2'U!hJ4=d8pdA^RU%I\D9UrU8nar5:c/G*hd_q0h%*'0BYP.WX?d\/i#Tlrm2l`qD>qk!@+**lGlbZW0>VH_YK''XL`>dl'D'C+,os4Z'1MEdYUr_7k@>I"^i]K&<Nu=7#:[2?u@KID$]lfsrWaD,&oJ;'b\65'%;]D^7t$L6AK09d=plO8pdkLoA.$.^?BDZk%DX[?c,_og:e27AN7&/p+MAe/s/58j/K$D*IpeHf+ThL\$/tkO(S0C@@6'UINkl)%=gRpk-(t'cLJrD^rf,c0nu#HF]Zg#![@RB?afrJh#m$FXUrMaAKgd:4L-.rrAF1pNn^qaJWlf1uS*C?:QsEmk9fld:2hj6VWa!SRU+^2Me=k'DZZNPr_1OIFJ:h9"K8s@d>Vlj+$LaCnJ0[Gqj>"i?U@-B^U>$?<oeL[1B5=hnAsurU&k9DYNUKp[<S*msb$"IeW;[p[<S*msb$"IeTVhb&*Ck?$qe'/Xk&mTu-M`o1X0)^`54LEjI'DP=oqnCc,`57E>Y6#ooRapV2%U4o=-Mqq\Q--Op"af(iC/g/W8Z-p&r]pDss%SB7HS1Un?nDXO<;-%a5a=BmIH.'Y[ODpA7LhYlnWc[PWWIeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S)?9VKbo(5_u:>5(@l30@MDf$uV2V\("rq>MY/\e\ENW*oBg_i_.O8r(5)#XL0msb$"H:0j-Nm^JBmd/6elri/sQ=a`<9/@6%:F,i3^O,^f['M&A9g(n/crNX>nP&S??@TD`8>K=%C6,flR]!t]>qb6$2ptHe;dqoYhYllu+T?K?-u!(DR[^JZ4]Bg.`>fTan805aM?k>]"E?d;;>-a)'N%>n<E&sk=F9eWHhY1fnFaOFrrD55q#:?o!2-N)rrDcCp[<S*msb9:LTUAJrr>.la8Z/<"a_'c!4K)GHhY:%Y5\Ka*VI!-9(n!@[eHX(B](g5D]ab-b/(CIEu=gLBu/ig`DK]0:Ro_u.aPggg/qd,'`p.PV2uX[msb$"@"5q<pV2'_^Z>LO-a3MF9@rk07N<LkD2R/`,%_,]h0X$"pE&%gR>Duk7g;G?-2uE%b!*Q<n)"$3C0uGamsb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[pKi?n-fMMeq(^D;]u>]CdaND0_nt$ep0Mp."cg>^:QC$!g7=4gOt`cIO"c\O;&Mq^Ff_a)OhC!-^&-^#l5/pGrU8VAn)"$3hX@68+7GYsoDS./P>9Fm>DLq%k9!C:Zr9t7.r4VlM;eWa)R_3)$HQ!g;l.3`hnApE^$IKBhYlp"aSu83,6%YK,k'(W2tm"FpD[Js^&-^#l+c]DrU8VAn)"$3hY0;1"oeR5C[p`j!"o/Oro[A[pV2(LZ[qT%rU8VAn)"$3hYlp"rU8V8rrE%4+80!2kPkOHbPqQimpCG9^O,^drrDf^IeW;S_>Kcem&kA9pkSU1rpKK0^O,^iHeO,0^&-^#r;Qcqqqo*ahnApE^&-O`!33XI3RiJ@Z+E)7Oo0!(mX.LcTnVQ@Trg;saJpW-eN*nQZH?(GdnTm(Tp:DrhnApE^$d,r]C0Y2I`C)ILU=)cIbNY'$teM:eG;RfO!dR@8jcMqZhQ%b=j0g_:8k$Z7eJ2OrU8VAm:5VArU8VAmm)s/>.;=olAtXBrrAFHcGTIVk\/l6-[/Ned_<:`g:&rQqIahM$><QO4LI'$M\T;t;T`$0`D\9F\CG^_rr@a&HsNbAr="(ggUR7`,s<hAFJ!0g:BP@07]FLIDRdp@GU"\HH)e1b'@b5l=#;U_FXj=EgA#];_`8@b./k;h5l(OgC0;"$dcJuBrmEt,hp;2VVOkVBIeW;[p[<S*msb$"IeW;[p[<S*msb$"IeI/5-N=)!;uC>/!6'KQYPn7.F4dhGTCY3,>Q4[9cWpJMmpUtF2]Mbs(E*h\NMZXTXmu;_^UqP$WP>cpn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"oRm/DKtREcfdqLmrrC#glnA>3:j^b\rY4,e!&?4f(]G_Ohu<\hHsXZbg]%83FsI!]BE%t6"5gfii;MoRljELU@L#h]bgbrSr(%bcrr@@-DmaK!rrA,KAUi[n[m0V,8+/Sor!B;$!1*/)f#@CPIs[6+<^14EhnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#e_ftWraH]TjbrUM\Gf.I/Ib3[[0lTY61*C`%#MNA_g>9_dd4L*UT".(L*pb,93&KBOBl%+:*-AHKT(GDhrZBYq\/I_ig4-K9Wq)InMI"RohHR+`p9)[mE8:*#2;]ujn)R"@$1iee^7YrPSj5H::=B)[mk?qrYhg[ChL5/N\g\$X->;o&:UZ#Mm3,ZT76P)A_`c95J21UIs5eCc:`.pNRO?=DEZ+O1GtBW1E#!IEk6Xi@l'CRWHft/Z<9;L<0PWbN6a&Xbf#Z?^RH9W1R?g!N3;*bA8?6(bjJ*81RZGIC*fq%AMVq"WG?N7)Z%"4k,PPdXI\I=7jX_YP"@j[S<?"?4L.%2Oul5[YpGsrQ?Qe`/Bi!-^O,\/gR6mV\?HoFCLV(cgRE<IZ$UP0@'PeV<_G<@c.>7?`+!`YZ%F>sG"3]U*&0pWmj!?C55g5Rj`_JM't<[3'j4euG9oV3_rBlhC$TeB>b+hn=S`@q&/Ue8ZEA;01`Wj+"5fl5jcLaH=lb^r3711Jh8iSr+-pLs*rYQpOo21B#]9SAjiR!6TRJ:d6]7u"gIl7>kAOufnOE"ccJm]d2W="m]2]RYjRM_PCS)W-P&&.KH5]>!=HuD)oAFQ+N).?pMHs$)[*d7HS%rDrM=qESOV+>6p*SmEbO7QES?J*aOt<G.;:3%CA]I]ta24JLf^6mD@'J-_eI#iE/Ti\\8SY*pcM.1@lT/)H!8.@$4o=-ZbPCi2!&(\V\GlPs=*O<9hS_<*V`PBf456Dp+se47=4p^rX\;r:Ki!6S04&Q*IU?s1*1<B,9QNApTUc`\R^^5!nE8qhB(bR:*n3>q]B<MLl>Wc(9ch:1Fd:EGL8>5?&8_lq8W^h4@Us/N&k9Wt&m]^I'DN>hY*g)#/EcIM^S%KqR/"_s5q96Oo480un)!<0h/[j7qtIdj^YpbOb_uF^TB7GOl94s7rYa'I1r"Q_[eBU@T+3)`G(@Y5J"Z3);6?UF+19obHB#[<1p7o_2EPp.<D#fZ93k'Y1&718b5VIbr*Nh!XKU<"5KQ.K?#@-$k&2;*&&&3Phrqt#9rX:(r#*_3\='.98>2j'90@n&<m1KSc[Q5G,qRB>M_1Zh>FR0d3fhugIfoE^Tg(d^PP"V<Ip&t%oQr>WrU8VAn)"$3hYlp"rU8^+r5-58^A`,%io#3NrrCs(]m]glIU.HV=8\Zi!6']\TDeRIQe=aOJ&U_.rr?h.L]6D[n(u1d!4)4`YM[%l%mT"_TCXQ4!19,P,S,o"qp'Bb!56'qi@s0ZidAN@!5l:DJ+lak?H2u>rr@T&chVKHrr?6fIJ_mqT(\ZI0`1UZHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iROA"bU]/I&ifF'g"[E"cIaRndQi&:brlVjHJ+6j>rrCr=^-.";Zi:"AS8\A,5PXN=hnA9.mp"+H=20*krrD*jrr?u#ra+LWTCF$#U<e1j^Z@][!,ibMNW0!8B-7-R]"G5S50X$,O/E<a!)]fs!(&obHi#r&qEk':55js,rU8VAn)"$3hYlp"rU8VAn)"$3hYlf6Ik[Ml+CCX'po#8\^\>rj?Y/Qba8M0^aj9ldY3>lchf$&R[V!;6c'JA0[:OjeilgfIrYXMk?Co:U^O,^iHhY:%qVD/O_GEJaa^6$;nG`La&cVjGa*`71!.Q.fqf[0YJ)T)8rrDrfpHPu9f,sPI:k-Z'n,:J"hn=^C!:ZsPjX^>VVo0DI2:MG@pkR"!L`:h(\ZrN/g22+qd-/Qok.;;0_FGkLA9/]!32PCi(pqdfeIYd.d_ob?PO/POo0*2)ZW6P_]<AClhfmq,*jI^feJ14]3jLj-X3e:JGO5C/kk1>`,"Ete'UG%cROXb.&BS0Q\D;qK^Pq2:rg#]M*+D$f'RHc.5@!]-<d;F2K9L7>(N4csnsoHJkHa4<hVU62k1j/kEp`8UZu^LeZb&,]Etc*m`oFnde73Q(IrSk3l12>hhB*t5nPs)iR&lQ(;q'&+/<NRDZB.=8h(Y80^=ph@2]ghtf3raq%&F/H#FWS2b=.T4jmc>j=(?8qqT'O%UopAmJL-1Q@.D<hJHU>_*0NZ7El@>bYr]uHLe>6LN#<X<EZ%ta+7&CPrkoo"A,3H=5FV>a*)?.]F]b/XakiG%:L<scg%5IUFZZ"ikA@]]pfqPuQBu:Y[PK!_A.,(TUrq.sBHo8Y'$W)W)u3M3qS`=(ptq.f\XDY0qmW^;#1;k0]h2ae*8.3NiO?NZM-F4(Ist6m8Pp&IW<IB$Pc.l%KT9_(G2uB>MHQILj=,2eOGRcYP/kU>Mti1+<0@+r1B&rqhX:!kRsS35pV2(L^O,^iHhY:%pV2(L^O+MKq8`.ZgG@on,I8h5>qk*NZa'1E<VX^)qm0kS:UY=$OcV\A@b^G3k$rg.l5J]5c0p,Umr]Z>hYlp"`=A.!m&*MMhd,rY*?&\KM7YJ=JZ0BAIhABMW__X,QZ1#H*6'GiV3$9=M2d>fqtIjPpV#Xr[cYEp?*h$7L=sX8Q.rpK$]Nk#/=edJ)Z3'6MB%@7Xuh0MB;MP-YlK^7J:7=P^&-RY^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iH_PHABA:HK[/-8eEV1GK\FR'+NOb`Q.k9R51!>1'&BY%Pb"Rgg,@<$Y\!J.kl95%%^&-Zu*rYQarTn=a^Q+l8nd9f]:Xco\-b^n\d:6eD+(8<.U5p(XLTO6_SnuD:*=7&C`m:>UR>?QVX=s&!rU8U`?heKqRt(%fpBU\N4!4J&ZB'J/msb$"pheoXJ+MUm#QBB<+9)>HO+-ilIeW=+D;Uh4oAK?Jre*?TrrB?cIeW;[p42MeL#49SDeI\jm`OfWhU^BTWTYe:3Qd;Pg97BJQR>oG5(HU$M9Y*2UIq!?LuMJjkgo#*"HS$+msat3^&-^#qqAMeml\WrDiL=&pABM)k/lER/_,\iAm!>G!L'D';P`"PAqF0b6HHo26:'Q,pV2(L^$BiJm)8A;S[CDr!ae,%GjW-bl,1bg-<sl,),6BhE`A=Re?s(=IXV+N^&-NQhnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*N>M(%8J%qK-pb7\HrrCpCao!Sr=%JYsr+<G)6qJL6,\!*0OMEOl?@D_.^&-MRhnApE^"k@48:kIBIbUi(gsa6lMZg?i4uA_'GjX0,NLT,Q<2PbUr.I;`hnApE^$N5shYlp"aSu83,6%YK,k'(W2tm"FpD[Js^&-^#l+c]DrU8VAn)"$3hY0;1"oeR5C[p`j!"o/Oro[A[pV2(LZ[qT%rU8VAn)"$3hYlp"rU8V8rrE%4+80!2kPkOHbPqQimpCG9^O,^drrDf^IeW;S_>Kcem&kA9pkSU1rpKK0^O,^iHeO,0^&-^#kQ9u<]14'N3\r"UWE2Sf<L&i".`t294G3+ZrU8V<qtIjPpV2(L^O,^eiVlY\0<+G`Zi!q_q*>/gC::/te2\H#eKC^5<AC+)Z*h=P1K'OAa0!ld?ee.pP+iZbmsb$"HOp#J^O,^iHS"&0IO]K,c2Rd%rRLF6\1&>k@<YJgaDFV1>VO2]Ibi/'+Na"VjbAe-=FZBJS^idqb>@Lc544Fo@'.6K5"9W`an[mD*L5"MLJH<8?HLqZGT+_\UIf4j(#%ZL_/:fEa@(NsG1Li"R_G+ce+XQuWp=V3AMM^1CjfVNW*UCP=uIVu,B2&Q^[6#3TniE(IeW@lq2=c-[sej8QL3Rf4l_6[%G74=].5f56:Hc2`pPrNXEFDEHYqF_!U@,-pY/\i\Qj6P#AQl<eu9d6?^`@`SqQGPN*Xob4VufHa2[QH^<b<g.bmMX7@D1M>-&e-_n:LVpcZlUW.MU@6Y:(Yf2,NWTVl?U[5a,!<][?>cV#]RCdQ48=QYYD!*JBBL0sF6rTplf"b!lWpV2(L^O,^iHhY:%pV2(L^O,^])=[AB>F,)'nS8l!VinA0PPH*E3;NtQ5VgkjeokZXVPU2H&cn/@jAfEHan@FdGbh=[GQ.Y4:f5+&'pZJOel7m@n^trH9htAu6NeeD!5,VI;>qrulro^sj-<'dX/Qh!r0'tp"9")NmsfN,Io?:HB+*V1qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnA7Zrr<FPrrB?,pcncYMZMI;qsL-OXG?^&\,KoF`\76_42:dqGket*S[\V!(@4Qi7aM)7=pMfhq8)sWHe9)%hS]o$rrAIdet;`!2K/TeGi*8lKDtonhTGiu_maN5mc';aH=-F\:]CDHir9"\MsoO%pE'=8Ia1a(HhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(N:]CF3XZr5Hq5<hu?]Da5\L,CFIeZo$GHTn.)Q,Q#iSSbmCJW^^]Hg7Vf>G$HEV0-;J`TH+9oH0GRR7QN[:k!dq#5&iP(+qAl(+0/P-:j62+a%cnHrFOj*)#L9fRp4[fBOd@]POr2'c9r<crm2:t82Hq!-/!kLfV1!91PMYc!Sj(*pO4+%3N4g8[s4hD1f[rA:c!2ns^iTA:?2%fQ:]fO+-1hrWhrbtl[.c]u-*%39Xhr#VWPDb:/R;L)q7#Cc+)ZP4EQ6O0#V-Bho91Ej=<coI8E-&]b<(I_6Yqg[QhIh9BDYKI95q:un;WpB,4<7DkMQ"oR]PaQF@gbIl(Fp0F'5cZ-sFeYq^)'WP^[BqbOf1b2`7p4e8Lus^iA\BuE/?>^T?FE\r9EkF0&?R8!l"+5fn)"&@hY3f=@QjVFV]YE2TB5]/:j`8`r2\L1<NPSKKUHTBiK@qH+oD2h6LQ?XGeVV!OhrBo/$l:TZ($^]P*kJ^1&3I@)(H*Z5Q2?/nL+8pHqgF*IC"nJ)u&AMI9,=/C3ZKM]U)W92kcr&1p4Yq8XF>Edns]k]BFj4P-[KAQ]U+20YbO[UE^CXV\7!MYSVUGFKJ+5Vo1pDp#/ocYJ5G[B7&$Ufm!2ZGp/V[H"*?OA:f%O8YMRhB]XtNfK=2n+r,@`NRS\N5m1G>k8]XP,"iT^;T.lHE^n997j9WtFEJahd=<?lE..Ed";"*Hg_%@*I0`'hhnAuL5N+j,!6h8=!&H:iiR^5P]X(Gq^-QlM_khfM7+*4!=7;-L5tLcVrr>.bQ<&dIG(iX+>$7.JVuA7oI5EksX`'rcns]BGIVX<tg"XPejJ/jE^:og0)YX)Fl72)n4pmUHZ+I;DXrPKqG4a;7miY&Sn(t&]mN=DEHS7P[Ig6-FXr=a9rM=K2RA0jX`*W/9Lk`[n<hMXJrU0):fq5Zb^O,^iHhY:%pga=(0X(@,^RS[+\0!$s!;H,(?[j_9QXBGdrr=F]nR9&-rr@LCjn;OBTCI6OJ(i?prrBTNHhXgqm(E42p[<T!chKl*r5ue:-3!t%"65IAo:<YbDdW952uIom0E2%AmHNO,e+OT_^Sq/4i&5ZU>L<BMf".K&pV#b'VYuH;rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8m*rr<F?rrBA$pnRihMLeS'!5G/5IHb>C!"*-6!4&ck?i4!(^\?f-O'j>OrrC%$)ufnQci,u(p[<E:He.f@<U\f3rrDisrrCg7^R)G/-i?L6kd0.40DSED!8GMB,Ce]Ua8Z/-Y:K!9ZTmL7_LL'MrrCE,n)"&i55pYXbtl*$pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%-m-Y\rl>o=&,n$`a`%.L)qWbhq/QE7A>A^:rr<f"\j,rDmU'h!YP>G8^[502rrBR7qtIj[2nt]WZA%c(rU8VAn)"&QJ+/[5qf5cY+8eA&7"=[qh]DcI+37C[h4<#epi^i\!<2opcg8hta8C6_+7e-trr@*ep[<GMqmd5QYC?6:D>sTi3e&Scphp*3R54MD;=2-Wh\:NDAMa54A&4/%d>.$?eQKm^ZFZPO;Fm2A=fJT0ecIUkn:(kKP(o5BEDs*gF8=R<!ri73#NTCg?XMd+c_5^b].LQO`)KRta)%=A-2YsMYX5+rdEn;]QR.JTYf6<9022MPTTQpRm_IRa_(qX.9-0U@9qGI=O%hc3oi+jlI[%H[:S?-,+/Jf.]k2]@Qa@"4HaFmV$2htn#PhGKe*I#6Oo&["Z[I%$bHZEkY,J-j4bqLSg?LWPGj8CDSsl$aXh-_I3K+Zu/1VcBL)B#n8Ms1^Se'rMo1O9)'_s,`]8m4J14)3\Y1E!"T1nQfhq)"'Wb0IQ5od2J#gVDjJinc?7X2dO;T=kYJk;*S4(CK=h9*W@*iFS(B!q\hcdK?B^]]5LN.B!!eIHgOhnAuZ\sp*Rqn2dG@!=8&mYl&WlTW\L3$%[sG@i#ZCjpkLmTalu<tURGAk8q9g3PfFnj>0&4;%jY<(RghI3>s.qq=3,Z8S=bCb4Z`jk3kuDrS5qf$EC0RZf7Sbu)GeO0"..Z-<lHSn6LnMNYpP7oa\C#,[i`$G(IsWME[rl68fnPs7p^,)0,7YnmZ/GolqN62%JUS):pVhnApE^&-^#qqZ]#!&Ca<Ps6EU2.r7oA,cK.Is%;Jlj]Ws0c;K^1#lt[MfWb3;O<[0bMXY2iIsW:lY3>]f<HCkmsb#0+2<0s^O,^iHhY:%^#.pUo>_6FkbrqcG91WQ?5?`?O&Kr_X[5C8``2$aA>lN\fp^T^A##j%aA2>:B9\'PVNRL;#,b>eIeW;X&c;=;HhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY33^R1($T'5ucg3L85UJl]s=Z,M^YX8YP0j>ft`R`4*,*F4IamNNNXc8)>.YkccpV2&#T)J-7rU4KnjTF"b@=29@m]r*%bkDV5b&0F(:phZemJ/$^)g[Zc83S?#TZC/$Ec./rL[)@`HhY:%[=<Z"msb$"IeW;[p[<S*msas<r/9k(H`NmQ>H;:p3@EZf-T@"&R8'HSgelM-DV2(?<pPh%<0X`Ci#`uQqqo*ahMm`84Y62'<5U:N9g#^I;,9;m'_"m3R,s'9U^JGG`?LRY?j`$+n)"$3hXPse^O,^gY5\KdLN&j+poQoiX6PZ>m[W&m*LSt2_5\d8Q0`]!euER6_O;BZK_Y=e#>R86+4T0Amsb"E^A[NWrU$XES\f66<Gm##jme]H-8m#27kpF7V8d!7n/"Xnp"9]*@AK]L4Fe61eOB9trU8VAmD^$<W/<%^Q9!lp1n#;UFcn2JO[I/?;B]S63>$gC"G.*'^O,^iHcba5rU8VAn)"$3hT7Fs09k*"N*RC4ngTd#*LFFDGs/XfGW=tg1/hecBoOCmS%s^&\=KH2:og$h.Qkl`5.,[_qtIjPpUrJ5qqo*ahnApE^&-[,hoR[SlEK)agO6o"ViidK2^TVZD>'A82<+=8/S/g'\s2]j;V,Kh,1El>BlV@kenb0?^&-XEHhY:%pTd$]aM7(u47iIP%K4!?!56D(p[<S*ms8pLpV2(L^O,^iHhY5#4op/d)Z4p]!5s@WrrBU[rr)<BrTrHhpV2(L^O,^iHhY:%pV2(L]g)MsRRd=CB6jLWjYHi9h`KHHrU8VAm_A_thnApCY^\"Gq^\2'rZV7%rrB[ETC:Y8n)!c2p[<S*ms8Mlp#oYAa7#3tM72,pl1VRKbLZ.,LK(N>;:OuMdp#b4L5M8KHHt?f4S[S_aa-ZgV:;,apV2&%hYlp"rU8VAn)"$2>m5Y"._:NeN2rqujKZ+7ebK";3M`ORTrt/Y.Ock3.Nr>gSu.s$e`1cqOd$DC*rYQarU4OJjl>se&+XXRdWP"dj=%:(n[:0gCT6)Z7gEJ^-t61neUrcVLumZRF_)tr"31)6K`hh+#JL#l^"L`HHhY:%pUt4SiC;_GnsB0HFH$fSF>bco7It_s[f'_U*@-f+*DPBRG9$99>5ju:ALci<VP)44=4GK#[Hm*h'XZE^<)M!%K-9i/FKPK#rrA?1+#pjWQa6IfL6A%ef2Z9p,23Il9h,G$m0&SeqS'M_f2P<E1q>RqVNRtb=#5XUWfh+BF@B6\'^..?Zps#M>.QRkb>FrEhT@>+\RS7u8.+=40sTXk+Rmu(p[WpkRr<7^mDY^O)n-'<gH2HNk-CIpF)ASh5-#?fgY7>c>s:&#K?[l+U4TupQGhj`A:g\MA4^3u2FgTZO*VOQE7oZMR*+g_r\D4pT#"s<Yh?ZI<g%b;VB[aPWg8DdN6+oH,ZQ[$oG*HM;aVb1OiW5Y!XSL(jGi/]iftEB,Bf)<h+G7>'!@7l`E?;FK?-7Tm?cRG^)m7AhYlp"rU8VAn)"$3@k[UMn%bL9o.0X2FY@6*i@?5=YD2jH:WU8jga8H72D*goWue17G+<]\5rB5!B6u7kQQif_B:fijaLl%?>(sop!$hLDMKthV^GrY+nYsN-8_5%)/#YObGid-XBTmCCl<8)3^a2Xm,r!JQ2l/VOJek[a6&_mV+Jls@YAhp$2[qW16h\$e>3Xo#T.FUHOb7+#]g*$Fb+j=X^TKN1TKfb7n)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"oRm/DKtREcfdqLmrrC#glnA>3:j^b\rY4,e!&?4f(]G_Ohu<\hHsXZbg]%83FsI!]BE%t6"5gfii;MoRljELUDqe>QqdX^7c-%+_eiqs:@Io=Hneb9(nMpr&oqlGg,V^k4T1NFl<#aKg4hBRWNJ#MbZV(S&Cd(o@PZi6O)U@"3\8&r6+BL:S9KGgKg@qlHc6r/(*1"@!dI$S?Q47X/05l=6]`/!1#8c*$pTDblrrAl;\A.o:HeKS@JpH6<pP8WArr>P9A,cP:kHTO80%>BrNZ\2fJ,Z;=msb9:T]5iArq4sK5P1`F(]OJLmsb9:TUpARrSdb)rrCHgR/[0RH10YTG,,%YE;oq$HiF*=0>Dl.r<F.m?h^_JJc>_H+1T)_:ODj7"S9?Wmgo,arf0[mrr?i\IfBC@[3,"8L]7?9hu<\UIJ_]QpkSkL$QAAmPJ8Yt0RRZ=p`6XuI2Bt3OSp]WeXO"2^N8(sXfkCP4d3=_'h72[`(ecak]4'J89<pi.A!7;SY?C#5h^b'nal_o<P5rU^A:3o._[G#NP/'@]t`.3@8WYpm<l'+HlO+&H/WqBfnaY=Ce?\Qk/KoW1Ft+76;iA-W&fUuB5#VQa^aNE)CU;^FX7oi<kFa<9_#u1$>G_Z5kh\*rVPIFT(\HC0RNQ*=oNiabd*T2A,cN^DTqJGZ(.`4I"L`VkNTa@PZhRqY(s;A<<Z"Gn$qU-NhS25lFjAAAp;?o'U2MV.B'3-rr@VK)Rb-aa3>NPKYJ,.Y4oeE+f"G<oTJn!9N,(?WfMF<BdOQVV''lJ520Q)d\A7o=PfJ2i23B8rWK/K?0.XsIgJtL)hkDm]e'<T:Y\L<o37h]4El6CXoL[nIeWB?X/i8(Wi</(WMlr%Xf.\kZEgWI.Vc!KWaohD.V`]FB:=.'k&TnX9/@2P,l@D^e5T4F4S;]Qbu7V@1mJe52%i%#e5%m-P>=<h1J'.GaMjR7Q=_D+Iq<;V`3U(J,a(mD-^%%`P#&i>`sa`Q9,%q+,kK>+6OYZD8M&<2_'=gccnichNkd,p8LD@4#ih(^&h&n(Q<.2KN\tI48KEDW+t,#1lp(OYPOH:"5QHsAJ/j_JciO)nqqp)]q%s&205/+da7A6S/re.cWTZF!G1"Feh]Sp3"bs0dhX!j,$I#(K\\PlKFlqJT`bh!)oZEP>-ih>:r?/k?ho'4-)#QAZ5-W/U_b&LMJt;c\[cLVW3f,p'GLOu>f4+#I$d/?6%o5WI=8GItmiV^8p1cL?&7BHVP]!10U`X__D.77X$<[o4n/tj5!67P,qq]#6YeOq&IeK>gqb(dEmAINR0(ZtWmQI2UG4'9_DS<`IMpIC/D6:j<WPdn<fa'4EC)j*'Z</DGND[5-g,BKD%D)$Hc)nMG[(210\T%?q#($qf+-qg8L<NLhNlkjHijePWf20u='T7E;M"ebgj-htOPlnuT4E;ZeY8iF"d>-d<Oq5<SplBn\^P'4[q02c%q%N9S4879-Y-m.eP4dCQ+Cf_gf@5/=34ChImV7TO7&6"mPM%s"5N2tYj/0qp9g//;hYq+O2a0%[4s9cumJ_^[IFRm.1NZU1cH9/NBsZWFRmbNfCu!H,WrlDRm@*<Y]3+L*eu[8*nXjAGE8k40R'+HBb/#ed4*"l.PP6Ne,]TfW@B95^a5c'jOKW4ogGclof_bX]#Q2ZXfaIdgqdX%&XS;5!O5DYk!.jclAUWZ9K+GH#]hV1,oI\^<HJ0inIt6trUmR%>R@PIq`,5qILVJ[_E^.YVk$S!8^G,/H;fq,Ma/OMUIgkW`kP#X7Z.P&\4_t&tUM\gaWKJ+5Kl.gla3QT$YuB]ReM=Q1CLuC1B>9(3,D'RW7?l1k4jB*9/:Q#ga9+i4Um&Sq-h6Z^rjQ5.rrDb(IJ_p8qqo*ahnpQ3Kn%d(r8R_V`PD:&rrBg/HMdMar4;n.ZEO'err@rdh*:f-G;$7WSGrSIemn^1R1K8>S):oCrr?WngL%^BqAt.'*C&[drr=c,r(%nLJ+oK#rr@ClrrBoE^Z39.J,]M(Dbg<4m[p_sNVuBI!!0Euo%o0$[FG*J^$e,O2sauImsb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msd/ipfg8eQe01ur)=#QrVZVhmn5>/;[<8dG=)<0ik7e\!5Bb+HN?3@r\$7gqc84:eORB$dgP$AT#.[[p2)u"r2Rhc+8L91Ik:,:/s!7m*>?1:2oR,caCaShP^AQs=rQZLNi:6%j)Ymo,B6mkaL&8cVV6=h55\UQHG>Dg+ZcC5BQi2qn#Pa0ePEb!gGO7:0\"dD+Ju09'Q[h/U<(MGN%/bJ@$$:p4h5"l-P;Q:aXfc%UR4^u/n5Mr&Yup</+rmshnAFkrr>@(p6YaDZXA:I8+&&0e)'d?rrA^`GL-6HrmUlIdE.dU!:>'u;#^Mg[3,"8L]7?9hu<\UIJ_p:kW$<)rrB`UC_-ImrPed:g3__lkU2qmrr@:n[/U-uEb7Q5?@2GC?)[c'SK'lihZ!TS9CLa9rr>@(p6YaDZXA:I8+&&0e)(''!'ra9TDQP)VuHalP;3(;g@O4:dd9R&ki)OAcM.>=l<f#7Aj=EcrY6<brrAJ5cAo:,H^skP[(:l/^\7,,B-uM\T'+=9)Veih4c,`d;,]u8XQuFj"]FEW_hrVI</)]\\-tiiFaob0o>fZO2Z?Qi^Q07.Nk9eEB_PgTH"A8W1`_^@gf61*[<AuWECU@FW]#;M.E-)_KLLjcTK]"XXC(\I@846en7(8k*@f;Rn)df^PcofXQJ)d1@-Z3ZY9*Z2E3FU!q\/r*fg,OF5P@@W3.LHp5"gCoR,5R#f?96P,p/>CpoduNrrBdjEr0[tJ&Rm/rr?fVrrE#:Qf#LS0tmLu4d7UKp[<S*msb$(]DhkaTRY^Z^,Z,miVroK,Q@anNqiA@!<,<Wp?_4;rrBsC\,QI&kO*h3>HU3Nd\-U?QIXmiR5_m-f_=4CHX2!mZ5NS`IKXe[o.'NRgOBn61[X_mH",AWf:11P)R?]O4'upH4^Q"_punK=St]$=q+1upeFC]oYJer@dBeYo?eJKUV=@>lr6Y6'^\SUipo)3mTc"<7\Jh!f<:%<qM-4ROY3_oOGc#uLe]_O'M&nHS5rD(c@$<OXI.eJN4c?;Ze6.1"WYoYp:K!N5beHO/D@#9#P!;//n)CJ,I2U_Q)7ufQr]bTbgSighV:6I540\In!hkokUX!6tA>>`")T_pYams\(N+fUU26`CEXeM75iF[s8A+NgiDQhpQ.G6f?WI#]r2W*CTHato$=*%h^@3DGhii6=V=Xe)!p8`2`LoWZj9P'rtVNE0`Z9".JCM;ufolUsK;4-VtAU%fSc(,<#;tOU=Wfb+#&b"Sn5@OQl\A%q1H,',Fht)eU[GI._b0/iej]MBZ!3u,uD!/a=c'kda%ajXU][C@M+%ip5P6u&@%qO6Jq(*LWj3bDJWM`afCqN(TTmu#c?d)BUB&nU&^MW+bD(Xe2YK?DHD^A@`4hnZc&iFiBX\=um#[t\j3eK#%/JgmHb=r6T8W\m#0D24+n4GV+CnJ$q1ZKa%`)Eom,pg[;8^5pQk2jW0KtZs=]C0^R@unBOpV2(L^O,^iHhY:%pV2(L]ifiQkJA_*N8JdVe(9tD,jF.b!1&eK-VZs'9HADk135Rc=Ls=I:E:e:c;clk*@I^4ATjjmFMMM_^O,^dRJ60!p[<S*msb$"BB,]#R6Si3KZ;C+b\$48hqL@7*)uPL?aAn\G83;&Os/jX>[D<:^DXU2WF1J&"[Cm-,RTDA&>6#s^O,^]HRJEsmNY16/skllaEXHaVG+/WP)R[Cq.(0i=VTjC+ge0&'"8Zh[m'QTIeHQachW`OX7)!iB&Cf#8kk/Lnd*WED2torW7pm/n2_EIVQ\3:?^';gPZ,N>AYsj+V3tG@Ll2<&IeW;X$@aWkl>Gk]RBU>F<LUVGf-5+7gohs/bk#[B.9CH<9_,g?4LLYFZQ/P[`;(m1]TNf?HhY:%*r])]m!TQ;n$Y;Rbo@Jq@qaKo!-aC7Umn\Dj2(+2=['#/]8n71*"GA_O5o-2qqo*O!@3h&,a-=qb:KgE9.Z%J,a(5)GpIPZS_],JPB)*KhnApAcIgm^:#EL)p=$jopK>2WSAagM4ZBG>UFD\9VoIcToH]LpeTE:Q.irp?hnApE^$f=Zq]?R(I=8C^mfnT8SWC04)chKb@P9;s$Q2Zu>+#p;-@3!nAW_g]GoX.'8LNBnn(uX0rU8VAn)"$3hYlp"rU8VAn)"$3hYln:rrD0leGfO4Hf`:dmJ:R9[_hG@p\I/0\g-`D[P*$H]7O^0j13W3Mp58Pd&7]rV)A<XhnApE]orBqIeW;[pM@UdlaTF$q(H+,2>'9U06:uFX?9@l'Su25VNkAHDTsDiirnAn.n^eb"m2jS;feeKn)"$3Bto,kmsb",J'M-+:<_o2[FD_?cOO<kpI&qaKc)bVbh3LuRE-o2q-j/kb>F-(GS3LdaiMspqqo*ah&(6pc+fH,+)0tZI<F6=GkT**[!OTKa%s9iUi@?>VkM)lj/Y.1S^+,3+!i/<I9>:^hYlp"ci2YtG5^#_$k_paT^*TqZ05>g_:J%6Ygj)l_`*U^+hAnUB3dG=B[dlP!/4d,pV2&ihg`qP^@RR('O)6RHL#"a3Ftml@qIZS:6%(m/Om-hic+ntEio;>ki[nb4Eok5hnApC;YEn"p(q]9])D0P]=Tl3pJ+95UFVb3o!D5KGE.S'9+o32M8iK$NT$_1MAg.oZ6G;lqqo*ag'cfOqqo)FI2gVhhrGSdD2t^M)#(,VmOH^YMT1ZGa)1`2:5:F31K-aRgL;l/XCRU2</mb'_p'H?hY6JfpU]6Woj6;8*jF<\;mTnGG4s%oe)De45QsT)7]@m.\Veb0Vst2X?D`&&NAaQpn"^,k*r#,Pp*G([^O,^\5Q&U;m"mgqrr<N,^&J)G`n0tRIeW;WDu9:DHhY:%pV2(L^!JqDJ(Yb<HN*u`In0M=\^g]Xn)"$0i-Y45HhY:%pV2(L^O,^iHhY3<rrAKXrKh/BrrD.9rrCq<fA?JphYllWrVPKcqq\K+-I;Q>S<s3urT4%Z]=jj*hYlp"p7V0KIeW;B46?4TI>RO\Y#B$%BoWRC?tZ)XYrBWJ,ZRtfZ]h>E,HHDu=lF1O"#1cMV/7<;0e\D5'p_s2Fn`XtpUsNi6$tc_mu:Ibb$N'>fd>IXc(]ut2Z5L>B4>F]Amkh(kMW4>Z.0Kj,Z<5G/RSRB(7R&Q^O,^\^[L%Xn)"$3hYlp"hR;S,cg;//-Zj3Ac:`(n//<7E4>q*g=Zlsb).-"q81Nih.@rPmRPl-#,3+<l55js,rU4>OK:gC-Bm1"E,HSNS+c4kmY*$UfMqt_,Z$S^>VGZB/aXa[Em@Dd,W\r8HdEtt>:YM2i8EgrIrU8V2'ApM#hnApDWSc%>rY'dc5FB\"HfY2,`7cfHe\=&A.HRbgPZ7oM0#m]E91;,U2)ZP$e;'':C\D<r'N)o0ggpU'A,MN@Ga]!+FV"KP26Z)q[/ON4AUD%^l*,LRjP;@?=.,qQVDi;b>SP\M_[\bJc`&@4HdWb1OXRO>7!"FAY.S?rW^,lqCfiKnq$^qsRkCH'&#(%o$33XndQ2m`VGEo^2\mq4IkVAhl2K,p0$2rJ4l'<MFENXXC`LD`#C('5j,'bPmL1.3T1aF/W9TL=Pk?^k9heIsH@!/:,FTF3.1t<**l@6fo@3Z`E:r+"D+s*5h]#K=/h:o.NQ4=K2_BriL;u^Se#JahBUNCcA1\5Z]#bmRDQHLe<@pWRo$Z(+,s=XI;HRL.Nf63$5Ctm#kXQkYIeF`X7f1$jhX3&mDLWl1!9OOabVr9#qR<EpSSup+Fd1.\r^q@j)_JGnWtg@EYMW>s8rDnKI$\P[,)5).Foj_2kBOsNe5Ykd1"`DA:ZZfkfB/rO'\aS1ns_G:.OnjeNp#<plMLk)TZ6;)\t9'V<%unlS>:/p*?HLV5BW&e8PKj9PuE7eq7QW^p@Q[,7S*)OeLO'`WVJ:(#,lls'`mL_5j.%<rE6n$O7M!!p\_/m1N!-lNa2mNW3'[1:!)*0R@ApFhAs/Z[59_I=`*91bV(M(']p<%VoIa>F%_FbN?LY7L2)S>`V<U*bGbCLFJ^F`3i8'TP%ItEptiP@j'BXV)o?>l.BE1a@)gM5,Xsh;L5q-<0Mp2l`hhS7/>b3(JYLoOoUqpVH1Fp63$)7kb(.p^DA62U<,eL7qNLAk&+&'JHhZuXp[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*ms7;"!5dTBm$9gGrrD&oFr1/TW'0Girr<CCrrAH'nVdDI'$ftG!8]mm@4,pl!6)P^rr>p&rrCW$n)"%_Ie;Lj"ag!YHhY:%pV2(L^O,^iHhY:%pV2(L^O,^]rrDtpJ*lL8b>8-<(]OKo^]+9:='YV\?NNIY\pbHFin8^#rrCrmZb=%h^\IT.+83:brrDJ/*rYQpoC(qWm+Zm]^QEI4.>.GbrrBrlIk[G<[C-:uVp,'Upm3=OV7L\p?!lDrG@'3Z^6j*4Bi7Y>eJ)$2mg\03=r_rr1R`(&"qqq:!7JqmkMQ4&5&>_TH1L,WK%bKpE]l5*:R16`\sA)Gc]-7^U8rrj#5Nj=P$2UbgcL7@;USN2`Yse22NCf!glg("[g2H9glXq^W%j"j.8$)*Op3"N:cU"QZEBH;Jr$>^^$E#mTDbIsqqfC9n<\Xdj?@U61;0<pGErtaI3J+>*)D(X#d'hIX@?uP:h:%u.C&0oUR$_\Qeq@OR?F#4=rQ1&h6)E`X51mI,JT%ejSo5)*P8oW*]7_ZbN#CCrn-&$VO=@&jL6umEJpqWbj85"@jXQa;]L]_0JV)(iTd0\hqIP&E1b,@nP:WLUr<M>Rc<W(#.5^HJhGL]G!$LuO+-ir\G*c4ZRbM$rU8VAn)"$3hYlp"oQC06Kq//C08%$N;l>,4f#,?UgQSB^W-UtIC2$ZO77U8E>jTu]Bt5aDChom#SXGnE`g\uNRrq2BR,MXO@K->d808Ghlg%<Xq2)M!JkXKlcV)i;UGN=PBsn6-b"4M7bgcInW&EN*aNHtf`Q?E!Yt2u5O0p[5H:hH/.=!>_UoYg+Br66mkPQO&Ekh8<r&sr7c:?`]rkQ9tp[<S*msb$))ufnkm!gcDpi53Qa4D8_H0;r#r.FeCp72`O^Nic?b[tqN<u4O.c0Unf.t,rLqFoQo8R5=s;'D8h(/>^L.?2&tJ'%TM?i)h_!"O0i>B4;)Lj%rZrP)A+^YDQEaQ0Y:.MtC^S'Ip9H0>2'm?:=E4[E)-nu5h3E=)>P2ElK_mKs2aoiBIDNje*:mi%6$kOO)])\RUgo`=^ZmruD3ds\;\qqo:5q1X=OIJi+)!6)bL0E2$eUO)h5HMkAS!4&g(4oYM?%Ga8GnolamLReAEMq2D;esR'IbF@D&PQ(VokM'@YHhne5_Atl'<W<%R0Dn?_*.R^QmJd05HN*u^@DCj@q1&DELMorf!:HJ`]oDt\rr<)+TCUiorjC8QpV$#Ym5OB?p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<Sg:\\-arKl-T+8f(FJ,T<DU[Li/peqFrQ$5Rp!91[\rrBeYI!YlUBDsPDhtpH(n^U.EHd`AZ\":I?IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeU,Ar$;:BrnhM]bPqPSrrC-$rULobh8oTr+[>jLO&#]TiMG</!;l,l2mqOIrrC*m6iR-;/&1fk?[hbB](`u>!4+3EhT?)p$3("2"o6(9!/c?u>Q4\N`qB%3^0H0@./]V8!6'9PO8\eLQeQ+fr[c`@qc6eu!:DDPrU8^)n)`g#TmQOKHhY:%pV3ifr$;IEgm.EMrr<T0!0JB#r--2rTEk$%rrBN@FQ`WDS\P1)^HZf:1>QsM!$7C1r3id.!8P]0qqfB-mR,^ohnApE^&-^#kh#h7$N0m$^Zd8P1#L4lU\<T3IJ$&_%C5t4i\<:AWncE1*6F/mIBb%08?Z*ZlWX.`YusX2)/#-8=&1ZV'eUMf]jO(`6GEN8^7.HMk8.7Z]UPs1:uf"AHXl7_]_T6qOt@I(hp2opC$W35<9Z\RlPu)%.X5KI8280;7G6F2mN>fQ8K[D".`INM*6Cp'0iZeR?Cd+BqOIa2U3lXLSDV"A]n)dRmF)<0bjCqO+*)5RY!WB&2Z?VsS&&_,207gK\9uROXr@4M<uG@;nPmnH1%hp<1c%VE,]Y#=+Fnmc`T6SL9U7arLT[\sjma)8R64eNJtcF@r,tP]U,o:ml7/_M-Dmi>WJP/G6t"+$#U#1UOkr$",A'G8=%?.gOjo+d;E5/]>T\Fhp(I?i^WiA[r7-64i\q)1alD@U:XP<`HM?Klh1@U7h^=jL;_H\hXBn("0giGI:E>F`V3Wrq.SS)F6BX=H0LG>Y%tBi<cb+JImu>ud[c+?aO1dTf0tTrdYn86\m9>eOBa,)td*b@[3:RsQNfH\gU82a=@B4qn7hfe%IqERtgj#ZY<`,!Td04o,_c,4_l;^=T.MYPSJV+K+*rYO!^"P-IJ%p@)^O,^iHhY:%pU360[W_Z@g\Hi.](#Ln_7'(B5,T-a_W>L,X2j;+ol6A!.;GjD%$F+)2u;fU5m.;YhYlp"ot^BUr1pgY`37@&YDj7H]Dhk?9(`qjouWKaGNRD7M3--C]^e1sitVR(KiPmG.d2i3<5Ia9HhY:%VOXM6.>,^m@P_-?r'jm444;a@16cnur/D.ZB$sW/;,tXG9f2C4e;gQHnicm-^&-RqIeW;[p[<S*msb#&R[0hZU'`qBH0X\[AOn8LBqgc:MM^G&Oi%;6/'BKL3<<,G,b#<np[<S*Z=i`bq#0b:VQ'G7EV="tQXf^G@,eCHiV)-iGprEP:?'/jch;XX[iPdR_.+Q%PH'A1<ja5YZ7H,DnYhRun)"$13W/5*MtgW#lHY@.e`j*i=c0r0h!i98R9'^(,Ei_KBr[m3nknLi3?"l_r!BW9rC=VLpV2(,5Ms0Ohn@]%ntt\JoUYR=CM%?2epJiDiUYfeORgAj(WasZ0Y:d?OcbbV+P_7BHJ$7H<f+uuRu_pj^O+^NhnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^!I#U]'>JsR-sf#6""`h?+DIP$f$TJ<mHDi=&C$/g%?9o/bM=+n)"$3?giI<msau:l^dR5lTP7JZF^bMjYL*_FPsW/1jKubQELITVTD>&1T4bsWm*bc<?[XfG#ASk++*asHeu)BmX/(/g7)Sti2&:J:#3:_]:TNm!#`%EltnX^+"72o#"hLp4;'[Kmsb$"F=I.?4tZ]&m1.[@mCf:%.Q[m;0KV3.[]qg:Q=nD/NP)X)<oiiE3Gk`94F&uraCTBJ0W:X:eQQX\':?/,qtIjPpUV!:V5^2fSrU+JH:kb_?4*-)R&#>.Sp6WuOO"'0P/Sti#\@BL,0/TSqqo*Fp[<S*msb$"IeW;[p[<S*mq1V?QbktK?RG>#7q:oNbYHEO62/'T]'8ML]./u7A5o,`Z80n9]8Em<^jWXP3iS@*A.bZoIIH%kmqG"C*tLE]i\noB!ORLB[si0CV;C$\PGEd=cK)$W/sOl4`mY>SgnL((dSM3pM"MOL8Z"'iHf)O6fsUSCIeW;[p[<S*mppqDOal$sGN\rEqg8>CH]>5thYlp"o\]E3IeW;[p[<S*msC^T!ri8+2>HkE!/UW8rr@,@rVPKcqq8dZmsb$"IeW;[p[<S*msb$"H@Pqp1lqMdcL_&9b%:SQ^3?coqqo*ah1,=r^O,^e@/`lmp/a7-r'UA)rr@7i5Ms0OhnADCn)"$3hYlp"rU8V<\g3*ZaK"IhaQVn,*>fN&ARIkU"(DcDHhY:%pTUs8U3]0S;_;l[VY[>:=YU+q]'d5b20C[9/.Al2LltmH+4Qp3p[<S*'E+9#K)YhC*Rk#gqCOU4rr?2Mqqo*ahnRijkV)c%h*:o>U=3]R!;2]9^&-^#qu)kaK)YhC*Rk#gqCOU4rr?2Mqqo*afX"4D9gqcP77BuU,on6C;USH@`>q*!/N#Y+'GU3/7&^kS6P9Pj:_cq0!!D,lqqo*Mp[<S*msas5G(7K7N.'NRUtn2[n^!pkGB;,?iPEn/50rL8^>IW/4=r]j?#;bHP:sN@p0/\9Mh87KH'4^D&M17Z_*^9s(2nY\kq:3&_4BqQSa+M:c-jtZN2Fg;I_ON?Y:E>,L2)U5Z1)9[fS]O8BO[p?Q:6X87^"&@(Lg'!N-tk6M(5H;l=<m#Y>J"&c4CUTL63@*K#HF.cbFg#m=0f(%(8?'/G@6]NU_p?B4+Ptk-i#kF]RDC6@rlc!l^;?m7L!le5TAe-%gcN'u$[RA\n:Wpu/Y3j3$bmO52+kZB5-lA?^J\Yq\-+W00/ma&t]ZVl2j,Kc7eB;M4WEhDk$b\6(jqgjDj\Nu]6%0]X8m@gD9^qq7P62Z%Ifmsb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;>B5.!F8U$aj'oDA8Sa*rK`SddDaPekeVq8ORY]9GSKhN\ZU:V.1]5\^7I!oPtj2UZ,W9g+=8E8D?I<Ba:p4Xdr#A/,8`U$2:>sssFat<:nE#ZBP*EP(()60VaZhXHO1mJ]j1c*.Obe+U-EU"u%.b.S&QCb'PQ:7a,3L*^)&u%g&UlXd/hSDGODf:0@pOh?75P1CjA,cP5Y@4@+./s8]J+"6R4b)[^l[SoR]u9mXLAq7E:,DnM3%9@Cf=u\,r&;+#?i.\.L`cIf4Ycs:fN5h;ZB+NGrpc'0fD^VU\,QHpCYumYiP4PSN;in'$=EZ&n)"$C!"J>b(]NoNiWoIH:J?93(%:&HU\n!h!5)h:p&>#d?`j>.q\o4ti4*_$eDidbJsZJMHhY:)_g?b7rrB\QpjrGFUsmd7rIoUmq^DIE'S#Qgr]PbpQg9/#`kD9E/fXe437%N\V>gP!?N'?MnD<%'J+!WV+FiW4oZ-t3@:&p3b!3ieqo1j]?hu)Fhu<\]YC?HYLAq7E:,DnM3%9@Cf=uZWgYW26'($\<%s@88LL1fT`p)4qN+V&'>F08UI-OrhIrAuh[BO2GfutLM)mj=b31Ru9,>B1I2,-2qbllFpUFR`9`t@igj$)AD@e84oNnkM)c=&Ib=aVi;&_*9P)j\ERZ*c;eA$VK7N?6u3Z@aAf=UIe)nN'5ULodZp"7MC^0ek^\*\SNROg;W?,o&0r3Y9Htb7J5r@;n^ZqtIEe/5]1WYYPsS5r<Kod)q7l;T0iEOssm[;Fok86R`-LCjh=!7i\eH;PH_sLsa<aMB4c&E)k<5JQG??@LiTgE?b<%6/[Ckp[;Z,rYsVM0E'i'`"2enSs]NXlmpb;rr?UPifF&u+31S`')cbK!8,o3ceu<Oq:+Fho7E>.]mKLgJ&?V\"oeS8*r(<d!2S)m+8pn?p\QB=!#0qO)#c[Jka1Ubrl2YKpb!NbFZ@_Fi2-GRY?q1oB^3<dkh_2nbY[qm9Q`Qp;!o6Z9"b*E<V=qile5V*<<RA16W9AMg,OIJ3BE$GC1Kl,E:"Rb_+4uP,]$5UlMdr=,>6TnDm6h<RkHW^7TuEnD#M&S@*289P"//'7NK7(a2_CA1ik^tdY9.iJ3YL;Wd6]u0Z'!=RZof9`B4_t*3I"-,#o%:4C@!ZMZ25AjSS\dHhY:%pV2(L^O,^^cLKS740`tK@q>9Ce(ZtMAo9)*Z.p9gGi3RgT58.RKX&fNo,&J'/TrWl8gf<7a#m+ccl64#CqGUBmG6`SaR-+aJAU`6\X.s9Enc(`@]4?m9Vj\1-2W(M.jkKp"`,5^e[.sg/u8d("5Z%IMKmi(UQ0#X=lP\^8DIPFA8kP&a5hUAZH`CL%INX$rpY9o#QBo_9RlaNlkKI"AKTomrSo!?YPf+4DuTgif=2p=E8U8d`dd.T0E$4kmsb9:LA(BMrr@:,nH8dk8Z/FMq[3)dp/1f;rrCn1r-JACd4a)N!<%n(p[DEHr9A9oq8#`(!+*A9fY,g"*]aCt)`mp>d@EGL:V%>\S!j,NXL;29[c1OHY;g[M[a;m"c<YE[.9(#88!#uNA^REspCMKi;"ZbJ2Gq'+X8;:f><"$t1trOPD69JaKuY+,O'JC5prma!$3OQuKM/Mfk']/=f98ot77XQK.4JtYRXC`E:D=`>C=BB)MlTUJC],l6qq/gQ7/&4h]p1.p_#FCe]8n\3gcL;MVo:4TIligrbi^dMT8rk;Pg!`\)+plDZ<:G89"S`^>ER$<CM.pjSnE=\Q.auO&q,<++,_3XZPa,J^0fo]6Y/$`9%pA,:FD:i%_f*eA9&F6]hN?lI;Ma9QDUsrZDLZc=_),i*K)WtPO5pMpmE"jnTa5@@d`\R9[)kAQ=aV=/Bgi14Ho6jgOJ1q^&n<7h@G!!rrCJ]l&Yh\]u'dLAKTomrSo!?YPf+4DuTgif=jJcE8U8d`dd.T0E$4kmpe:VF<<qn9g3<UUcM_ZH>]'i9gqphWOf.5G(3gskGg89;\hEAe2p/0LlWuC5!$fO#+S63/?T\;c#Fh7F[oMUCfr/IbH82`>euhkRV]Vu'5)1<UD?m6-(-1Ca[`i1f^u>0OXalR1nfk;7LO'&nu:j:kei9M>&$nX"iWS95THouQOt_4.s#M)4o<m<m="Cu^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O$'p9B-i.^@BD,pBPj=HKaeTcf-[S%>rF(QW%]Q^rtam!ii!%@^5_\fmq7Hd:5U^<3pfoFc4Ef^7@qh$ocL'oZ(V*.5Ljee6QM8H!Gb/a&$=@cGA5([in2$'?a9%.4]K7S:sZp&?25]nKTN!G&(?HmNk=dJut='kc$&&=%^.p1c$nhajR:80ai&LHhXbbrYsVM0E'i'`"2enSs]NXlmpd;rKMeh5PL+d*l%>?otUM,@p\3q!!U8icDMQ[!1Xb<p$:MKqu.Phi%P&epV[U@-D$V)!:25n^Y)-PU]1==a78Kq!(=S+rrDaMn)(s#ht*heJ*-tgrHe5,IfBD&p@o$q!-gZs"9/?mVku]U$MX#_;>r!D!8]I.HN*um0@p.'rJc0un6@pMl>`Hl_+Xe.?G66n^Yul?!ri8W%t$YB!7GTGO8d#0qu)b/MEgioIicAs9D-("!+T@6r"fhB!'6W_rbtd8!8"E'p[@lqDh,UsKAR5)oU:)9rrB:,IfBCZ+6&@[iuc=Fr=]'IrrC^'^OHF)J'Or0rrAQ'^\-pM]rem?iX`uQUtmk3kGitaI!4g-l]$Y-T,kR*pS@Z;AaYuoI$H7i3>a0R#2@llgpJ[joJ=-9/9<;a'=';A8G8n659@BDYOe"5ULEeE:[FXq73,&YH\Z;-VT[_>b"/QUP*WC'Cpk8j7:-1?<3ilO.S'Z]`EM2^mjo="D)?iZCjcaTWX)a8Uk1#q@:fQ#NE?5kO$?Ehp0rH/*p7nE[bT.I&\,(`?,*m(=PW<H4,pD\B(24W)I/jY1Pj0$b=.T5AT>,_:IUDcjCkH9B7aZ=VMWtH8s2?TaQ'Q$N.$."00r$k`FUHtZ.V6O7[=DJIRbJc"4L;t=4(!C[+1C@PgZpZ`?MTYN)bE3O*k)1eWJBf*D3ms%'6N]b0"T>=;qg#^A[DtJ&?V\"oeS8*r(<d!2S)m+8pn?!Pd;XpnRihGfT@?rr>I%>Q4]s2=8$N/fXe437%N\V>gP!?N'?MnD<%'J+!WV+FiW4oZ-t3@:&p3b!3ieqo1j]?hu)Fhu<\]YC?HYLAq7E:,DnM3%9@Cf=uYe4aYbnF4?[_Mdpm)^tCk^ZE]Toe75q:?L:u5bM(VFN0RYUq&/D)rnF*cib<#.Y+=^CUP2lS?(Hg]:U,Ocm(JtApc<8qYkF[BffNr+8suXOp<g]cp>-:B>05j*XHo=hL8CW;JkE&B>"KSV"ls.;E_6!d(a,]76Ve+inL5bnL,=cF/5%]((f^a,h!rM\mqZiV?[7(shnApE^&-PjEsIESfNc/FgmF%,i7kkr(QcJrn/9Gu-<gkI_W@aCTZU_!pq$7#-urG&Pmp-Ce5OU2`AC?2l;WjQjRJVmhDZU4bi@o-pjBaa?8F*hajO,>j)TCuqKXN*Z2"_FW9'kXTrk/VUR!>DUQRMb^k,(j/r:c/E[nX]Z8t%$7n*Yb=]c6X^t=:U*rYH*J&?V\"oeS8*r(<d!2S)m+8pn?!^G@.pnRihGfT@?rr>I%>Q4]s2=8$N/fXe437%N\V>gP!?N'?MnD<%'J+!WV+FiW4oZ-t3@:&p3b!3ieqo1j]?hu)Fhu<\]YC?HYLAq7E:,DnM3%9@Cf=uYH3k+-&`nl]tjKlNKnaiP;HT.A5XsYlilJAGkI=7C'ig-Gk`PuGo)c$KjX00LF>R;g5=(oO.X_g<FCOM2jI5TRjopJR^l;"VMbaq:c:h2=C)e!ShV-dRp-;&hX=]^-mA*PPC"[l!+NS0M!L:+f\jAXE%;DUH^'dYB9l"6ijL)+@13a&4H-#PASIeG_t'>;T`msb$"IeW;[p[<S*msb$"IeW;[p[<S)(%sj]o]L/0OS4H3m!\M7N5\Lm\Mi:t-'P'^g?XgC9ho_rm8i;a1h;V0qqo*afgX&5.dr#c3i8p<WGAb-obemkp((TL9('pI?!sYeokOf`_.(e/!*Mh,HhY:%kDB1=56p_$+)q0I=-dtWd79Mh%`Fs1-='\;DbmrY+IkE/<b7D<('EI-qqo)UcF3NJ!7F"pBBpV<fUF4g6Upl6(>HjWk2qZM7e,!k9FmPk7SX5PFquJ%T76P'IeGGlpV2(LZkhiiY-6^X#kH`rXnEOub/6dk"?AWkZhF*B+VbD@cTG0(f&^o%FYV<54\Um@L'Xt-&2)!%p[<S)SGrS#l_)#Ua)q=]rejL;rrCVWIeW;[p8lu]DqB=K>06J-_V'8oI#N$^OIL"PC`_H!\ghlIJh"ks'Js`.*%rNN="G&j,1f$Wn)"$1C%'pWn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn(uOjQYGhmkDfHM]Je'mh3a85MQceUjhkT7\DOlJ3l+bg3D+%d?atf$@#q3`L,M/dIeW;[p)j;7ZLuROoAdE3rr>KbbPqS.0>Dl.^O,_P03nb]!'WKBrrD[pCqotTqtIjPpT[4)MT+NDe6%)N2M2Nr`m[@HNlC#Al1+Q8I2iM;Js)"GOuR0TBq[d,,E5]&$N]_QrU8V+qtIjPpTV!.3]j4N=<I1#eXHYgbYgFK[rZC[/mB\)`%;h%b14n]P+sG$W%gnt.4b$9++*asHRh,FjbN>X5:!SWdZ@q<AN05=GGej.,E-o>AeAP;G>dE30p&U:#J-asC_^gUIeW;FOo2-V&V:>TI/<n0.XMhVfml:SV`LqirWF<lp[<S)2Jb$uIh;J-U)M:Wd$kSI;`L)3[rPBuDlUro6O-2^WqXb]j/AlI2A]Fa='rcbrU8VAm+=fJE5rqq7Zg+P/9+)sW^e%BTi*kt5ZC-J!!$+3IeW;[pWqa1qqo*ahnApE^&-^#qqo)pB(/nsc&/U=DG2r=E+(L-Ok8R`Gkt+:._7V$Nd0Tca4J4+8Q(\s'"Wif!Rq_&*rYQarTlB@!+kJh^ZWXZrrE%V9pbk[emEn#msb$"p0P<<rd8ocrrD8ifmis3p[<S*mp^G^%>W]jauh9Y'og&gZ-\AUIO>Xn98pke;lM;jUS+?=$<gP!0d0C/DLS2Un)"$1bMU#1hnApE^&-^#qqo*ahn=d?rgW0nf9WJ`mZ+=5IEA%`n9t"G5I%Z:@kCpY[*[3!IGRI=Ml<_Uqg(;Jif@<7&OrcOWW;e.HhXsup0P<<rd8ocrrD8ifmis3p[<S*mqNlLeK%l"nh$6^h.s5QSmA=lUMQg\g"U]QO_Qo53@:P:ls;`=Usi$,UGR;(Ys:k<HhY:%pU1#$^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(LZ6f#'q3h-sra7`<q2"fmndfX4G"\oME#C8%97u!2mf`N6Mfd:1V8-&0^@L!iDE='(c\/;u'^[D"K^/sPgoYsHq5s12jdg;Sa8C2LbWf^jCmnU'B'FpaLYXqu`)C:pYCdQ@c+'u[A=-CjN1;;PaB-B(!HE:1?@NQUBpTW?*EuHqBn@VPTL`0.5$680MBA\oT)J$Lq_Z%D4o=-Mqqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-Jpq-ik:j%mM*YG^fLQ(=t4l0bdUh,p53:V1[-S^!RtPB>u$o!S7_5bm%X9`@j_=\".FF`RP>6mOPi<"N!Br^HIg`XRtFAG=+@T^0:R5'DQp`Lk7KB(ApiSB=d^<R>6p4p)[gXqF^_j!S6S+W(f\YTs;Q-'Y(@;i85I9%)1V(*P30N'*+;WnK:Q\Hm[#j57PQ3X<F2KB4IWCnCRg4mbVhh*ouG2;'RH]lCD>N,9&NLDuW%mJ?+*H6'h^`+CILT.u/$J;NNb@aPeh;@-:p5AYK*H$/9&m;AoYe@Wc)[uDt>DVEmQ<4Nns>cfRn7^Eb./6'/p4FTaGM^+:O+shpL-qFIP:0K.$>_O_/P]Ekte#@#W:s'b.1(j\hYd5buO+-dVq[l!6p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[;WcY!8>H_1(28;7sUUp!:]B]=Io=p%<M!`pXtCV;&WMQSF,plfl.@Ggk!+a_b35X#j_OoZ1IEQ"9mpFdMf&[VsE/MnO\u]8tu9cgAq?DnPe/<o]t1?$uo!FMX*Z<:)+s>DakM24,k0'W2fr$tH;VrrC\'m@Fac,,ZY<-48DdaM;@iBgPK6$msDSbnuE'rr</ihTp,H9C:cs^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^$@QU!"*68BjWDUQ+'51A`)AZ1A`.*\9h#[2g3R(P&H>H8%e(u_dU!$H)`-`V6$Yn=t56/@Tl2GZLR@IrrATsc>NOS2:_XQ])!3d[P@T+otP\ThTrq!gN;25#r/sW]U:6\V1PRX<gmGrf.I@TEU<kC[h_VSdGsB/Zmt_`1;tE*+Xeb$CDI&2)uKB@i9A"=?gt<1qW]-&mln)DO,3Ul\F+gTf_r),q0KBo=F.'OaR!3;Mr#CO,u]ZBp*D=a(K"IhbYu[Vob#5,%)jJlFW_?H\aC"';'0QGp;H>-Q*\1hjE>HPCu)A2G*YIir=e5SY1l%U#t)4A23ZBfmeA;GAu`g\@WmK:8Rc9]l51-#MO(l].qr^u.H&3&'lZN="!=jId*EWR)\m(>.4E)daS5.M%=]gC\+=O]Fl.&Xr7cD8<UGgcLO*ABW8QsPNJ15jWnC+!G0S9s3t$#q)E"Tijcp!:a!QkAQ06u8qua/%?krQ+J%s>--H*c>#koZ#HN#LS0%H8NIC+!1EcP6PX-_#YMM92T09q[lr;do8>A^7mXT_MpQ9&^B&uXIk@gN>k*jXW=EIE>gT76K%5Eh0!Abi>']RFYo]D3Q>1Zoam,Wbh8E1<J<m<u"FNW/uaS).;,hdbS'[P,/fCDF@QT\>lZYqS/]Aj[RJ-7IuK8FtB'.`e@_R0q:2l2FpP,sEK"Q2(U=S\t#Dqj2#?IPWp=_;L&8G#[Ps*_.TjEEeleZ$6-N@QI0m,Br.GW2f(AJq2IkX-KXRe4-(=m2KDJAT4&RSTT*`f>1Rp,]W+:]WC_#b>hHDB[V!&AH?oa=lauoqqfL[mZ6)nhnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahn@X6o2PLMgtt+U#ktOB/qEBS^-;7_ARfoF52Y]m=h&J(j%kBb\30b3B^QjpducR8%b]`A4Cpu+^03srd[mSKe($nJVNdg&mH>V3q*4C^[!G6A]/EE[hcnNe%h9t2MN#4h+,:f-`as1;IkOlRFj/:mG=F?FCjf9IlROMD#?3M"Xr/*9(,i?LLTJPD<LOhpKg:jXeSMOd]M?k'il<f'<[.G`Tc>/$&,uWnGJX:Rra('WqY0#7aPQ`"O?Jl<G8BZ&'jH9A^N!iY[`ud/9Tmt'Fl(0_mcnV;kKE6t)l0l=cW`t/rr@1K3_)s[.2)MLIkH50IAu`MimuNA?K1?LgKW,;R+s]9o(82MN.q^X:hFKDU6B8-S<i)fP;eT>@bG(0QDU7A]_,1&`0%&1GW)uSZO)D=K"A;WC*S"/a:#@p/<+WP:FHi4C!!mfP'@)d^"R,*dHsBkhYlp"rU8VAn)"$3hYqbln:sg8RU=97rr<H<NZ\/GG7VARrrD"3hspXB_#FDP:T"-lpMni7_&f?N!.c$6q-u_j!(5:`pV3EZ]tHRghYlgt]f28/l`H_i3sU.Fk]Y7ofUHM:]XN@MaiMk>G5g+J(qQg*i6C=/<Ha7T'oAWQGut,K36AH!bIKPQ%qk:brpAM:3a=;kg=TZ5j4lY`k:t@nE-Otmnp,&B>_-"R/Hl;/P/om6+s&o-Q<<(&8Z$Wj-t@O6Oc>VNND$mgr$nWjqtIcB[f6@!Z2SqH!7"g0DejLAnlk?#\*.aj]i?:T<qhYli-(u=0hXfqRk$k7G<Z$,gg,bnh)dt5SDFk)R`o[!_JQs"8qeIRe4j.C%+D)WfT50#r62pChf3SZSc#q)7a1/#T%Ippl?bb"0j#Ee7LE>P/*V#`^"8Y.'H,`?Nll5SV>H]4%Q=iYXef!<1mKc8,cVG'm+n/.\u#q9:JXJJ9PeJoOuHbcY`;;HFcn"q5e=stZOUkD"T.r*A,]d2qu.:jZ2S9McAqm7*HCVq[JhfHXgc$N>DqRo>Z:$I$LOaQgGhd$gUNbFfN"D1's-2;MP?!#m'AcGSa%Z$Q?mkR1ipUUj5LR8rc7mGjC[04&",L<Vg%T"B5lV#-^a>8Rgp4"WrZ:U`^ol^$3R\N2Z.>fR*82t&)1X!&@A[`,d>QXhH7pe#<)I7.2<nI$4<;NOj*9UV\,t!dAQB3pe4$F83jLL/dWZi8&'E(A)5Q0?@2F]HhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^g:qtt"TD%LI\c2YfJ(%d%`:ir:(B4Ag)#jTj^Td_<poqGQrrB^X@/CEq9E%)=rrBHt0E#Xbp[;bp!<*XYrr?q/p_!N+M#RIZJ+r^2LU1RiRm6;nh\<ipdbV\8o686aXc*2Z*hF>M=AAeq\TJtlmdIjB^U8!pHhY:%pV2(L^O,^iHhY:%pV2&$?d'>LO%+UNhi"!$j\LA:C6NE"'rJrec)lbI6b9lWIqDTVqlSJ^3h!KlGUddffkDapRFjqu6VgW`0j#m$AM&B`^/T6)_bQ3III5c(PHG:3X>CcA(-SYBGBrVhMG=!ZB^OGeAVqqB\Q>\kb;0Fgl!^$T66_.R%9]dO*X`uH7^\&4.k4#snkV&K`rnYh$b7AF!!tain)!^:!9bNe<W<%+HN%lKgP`ZC!12kUFDo-*MjVcF=+f6hK6M2#]rp,cDrGsi*de,\o^5B_p>#V5QD(3GUs%imcJQZP@@PFQXX.(;?$X#Rk(iQ>raGJ&Nm%3_[(=#H3];n8<+>?bD8D%^2)q')!3rYcji#?Q3u8XBZ[:-7Q5)7P$J[6\Nf#hS`YP.bWhGCfHa#FpHFtdCGhd>^;E'ja./I/41=[Yu<%o:J7Z*l/_>!DF$@aJ<_>\W2D:RLVA,P)-Q_j2]DS<sSMZ0F?%^i:jOOs3G=)uf&j3D/S5@\?sHVUIT[cm4Zoa`B&DHG7c<PkW)W[ZLkHZT0nS%&3]=6Fp#A:4CWfH"gg`pFahfrFB;cIm9tj/V"Eq5LYkPGAn^?S,K5RYM>JNE2I9LC[Af[1TBqFHem\D6l.eBe(Y,/N"_'$ON]2V^ZqXOM8-O$aaJT$.#FR,]H'0hXuU%='t\=(X?ss5Q5_RmdJsUr#Pe;\;%^oJ)T)OKDtpp?Gl0Drr=i>0E2#(ZMsps2ns_9*W+U?f\Q#QrU8VAn)"$3hYlp"rU8VAn)"$3hYlp"or.jjT?3SbQbi\%k"YF<jsPJ&i,85Q?LslW8e%u/,0Y3FB&qdugX!.043MR1rn,)*#jHM-hp6*i9a+6#$s9FMW;\(ue'CNYjJST9ILQ5V/h`B;)#e.FKD?275:7DWFpD\Ymg<;@eW1reW\Z_gVfH\o%EF=\480VY=>nGP/%%,(P>]jU"'5NtOpGWsLK%0Ep@d([i\T7MV.O*'.B<U23($GI7[A1^-)a>@..F7%)KgM(@L!.pp/h!1?IteIn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAmn80*;Qo]Hq60_$5$N,I5^Z;MotDLe])F`eG7O:-j0*/USQ/C-ip=CsfiV*=;d2C9FB%a.p#SZAd@@O+fI50P>>OELr6kR;HmA+ZYj-+Xa_]aT(42sYHP:Fjca7E\,kG#J2m2T'=OBc)<0/C_0h&Gr\goKdf3ga&K!"p_1>@:)7n&D^'kF!Q;gG#KP%:M_,dAUs!<Mr`HVjV]q&tanJai9k2p)P<e%iZ[dX?Dn\N1'q$oi+ITA+H&)nU!>XR"s%H`-<\*mDN-0sMsqGH^Op\S/]EI!=gMn"Non?I8"4UV&*k?m*LLc"4-/ZYg1?__UPqB7B!*X@UkJYs-*"7=+%bGl30GIH;^fZB(_NnYqd<f8`M-q[\/L8ACb:o*O5[b<,N>p:&-BZ`([Yh)0PKYI`&V+l)kf1>"XYot:#V/=@AknT2qdaK?>^YkdXS5W*guTiGqX?:6?:bpVVuHf8&DSb_'1.Vr(4Pu4"(>:Zgcc-f$fMjnhV4PUHM,ukAZ7On[%BB-;*Wt<%.kuCHBZR\f?c,kLP<7fT`qm.P)oR]=G%+<3L=\8:"JR,DR\%d87+7P]Uk/Hn0q5/8[aumG]b5Ifmlop[$/X;.1eEjl>%a(N,B^]f=OK,%NXiF@&o^rsGB/[1aN4qY+M%s/m.[DUBa]IZ?G'rN>Nq188buWW$h>M'%G1Jl"2VZukmAa^Oqj.If4Z,As*"=/KeO>\<eWTe%l#<Ia$<a!/mS&ApUrY_j`7*.6`/8#^`&pr;8-MGu+ldKipTn5=YkGj+msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;WZMsnaDs)W@>N"-)5575;^,eblFY(.+jF[;Dh-G`fqqiL*pBL)Zg\nPN:OI9XiS+/j'18A.D<strG[67T9T<jk+r[`:?q*PNh%tPq+6IS!58X<;Hsuf4eltpX8V6@rdeV_T^%XB2@kY?+EBF1#\[Oe/jm[V@+%qm=@ONTtDV4M3AP-!bC)@5@WkYe0F7/>k7cD9o.3PKBfDUAde4_-5<@VeHV0M!"F@A56^8%apo_7g$9maPq@NW@3pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%dLZ<moD\f$Z1*8C!#>[@^\?PMmo^1r;fDTT^PlOpQ?RiXnaUr44)b*MfT5lgTDl2.IeU2;nt#d\[on245Q"=gLAq8O%_ZrOmsYChfaE0[rrC#4puhYW^40dB&9ct/HajU`;W@]VpBD.Wp4*%105k1qmn!HYpeG2f%/I$rZh^U#!&0G#q%N<TYkr4:HG='8`^?s':@#"%e7!O&AeX6;g=hpoN*K>lqH9SVLMkYa8=H*O'9I*WpT2^3Fnp7P=2$kAI(8Kki9i2S^\0S+gO&XtBl0C59dI7('i$QpYh0j#W)<sn,Y+]Ke3,kXB)T/&Spc:H(H7Z%DCjTqF`d:5o^Pm;&P,lsALip$.qJid%DUKgmsMn/:I!((q1=!8q31=ZiHN3.OS.KP[ZAKn[bFq:bF[G_*PB"eZZg>:i7qUV5ufi;XMX).?JiWYW:>sAZ/K;gSXnkV*`M'#q0tK0RNF,mGN<DW^Q#uL4*ms+[f6>Em*%>!CFb%V@Kq.RE,KR1b\Z!9jP89FgALXl)igeiM8Eb5V3RI=ZUs?em_I02kVAOL<\Co07pQ77,K>lA%'nDG$@Jq7+sM^_U;u0)N;JD0'@Ha6l1SD+iS'pnUX,C>Id;i[4cR9q*Q@R[DKQD;Do-8<D-'Aiq)Q$%0c1Rk3_a^@3nOTSkl)&ZGgo:-rr=INjp_gTWQX4LS:AXcLLnKMQ(u=[o,Y;qle9"DN79HqV<Ifc4&M'X*/W*Y;\r@KgPnG8luWP0Z?J!Y]R/rqeRR1/moksWp:lRNa@K;grcA`jm/-Ocn+]Xro8i^"hd7[Y6[pUnjsOFUo_BBplCY>]2XbH]dc'`nU9>`hHg_j'h3ldil#toAK+5@I(^usRh;`QC(oh=bkj'"m>+&%s(gkD>q2>0+m9]#Dhh+-I.[+ms(K!Q4B#JW@i5\`..Ot;XFO=pLl`di`_bj<AZT0""F\gdijFhO!1c4k,V<3lXrqb:%UFB>Q?+4m.93jk3.8iL6K[S)Oob>l"eP\k+CTH)#!PQakqq]eP284hEBtkg7pI]6tjf@saYPokYE]]J-;Z)[740&BXPMN-KbDsKiD(;^"ac3..ZFKh/%SDnq3f#2R(K"5`<9O%1/25AUfiQKPX81/tR#\Q-^C33eBlk(1AnO11EpenS-5t\>!;CKsnabTcg%D+YkA0<4WG<sJP%^h`L2)?'5NQiS*26G>j.kC0Z-l!ja[(neP!NG3L`0V4<ABj[`?Ql`")p)\EU!NCqqW7ccghqPGF`BNo%gLr5Ob><QMo.d]2jt?].ojLfGX,@g&6',ZS^1^=Wd(G12OG@cI(?&Z;o,`BgYOXgQH#YRRm@RL(u!b$\*XU^ZKC=[]P#Wl@7sLncQ0Z9*J*sT;'sWZRa]jHY;b_N%e%1r!nHRro)`RIKug5ID%0HfQYBZ,H$XO`X\5m:<hV%n?kt+ouY`b7N+^mSa)r$AcT<"F]VO1/pIDYWB\aVpTpq#!"#P%EF#dGdWu#*G!F*`i3bcs4tc$,IPZ4d]KR6lCF<][?2jmt\:;):]-Fa=nBk]"S%Bc1fst9+`-C!^H3=UG._u3dq#-UVjLP3,p[?CFVX.$^h4MSsmbWuHmHQ:@T#Y??n4UGQ^?gJ*qu^n=@4<FuTVC3UR4YsV99Dgp@AR6dmNRLbdI#[sDMk"(79(*j6-*Q--'gtc+.a@&pn_ZR"^+42b/$=b6XbInpJnuS#Pit$1G&:lT]ohF;t3*6[S,W#=n`:$IbPPuLLtD9/LKDNh#58p2$Q]pkBEaT2GV,XQO^?:L5-_2a$ATKETGS(&O5E!o%3$4=8A!OYJC^%n+t=efj0?G98'.bmCY>8T.Nd,lriDGXNfic,SX%dUk9^6]Mu7<ZuIcsW,&btSDC`gqsLIY\W+]NFZigZ7O3jJ&d^%E%3s"0bX-a[ZB+apIeI=L(]G*Dr8dQA?.SHsNW0!4%Xc[jcL]eXgn&-jYkoemGFmCO:%=a23G5#>V^Gd@>Ht-8gbTK3Fdg&WQ)'^TY49t2I02\&r_jo_B5Hr2S]B:\!6s]fQM'Vb4WSE1+16<aip@-ib1ueL8L:1MrT.+&D]3FKEY$k:<TEE0hEi*C"MU;qm(LjV#$O1YQDgmE=k4JPXH&lbjK*P_o8(6Z?'U-D!2mSY(k:L"+3oYU^R2aimlub\1+KR)YEL%I..CGr+2=Mcj7]p&Z23c2PH3F5V;@\W%nf3BV;@bg\uD[.CF^h_W8atXb0l+q`Cq!]'ga;=9`ARNX7H].g)VL113uW\F`bSd0/#o.j2Ou)Z?sc-e^i5Xnj@G+Z-ZD/@,.5=4U_m$<)^\1*E4oc#)Gtfda'FODQ:qAFdW*+<le)?EA0h@kCK#?r`IMM'#>[jO8pGZ(Bg@W<.DcGJ";X8rr=]7:JuR-pgHlmP52f^C5sj:(G`KM*T)tDSV*-Pc*MTE@rL`3Ps':PE:tYimlG3bG2J1WP.HMoN3/7XGEC7R5(>R'k$>_#,#EF^!6;j6d)0)YDn>2nXiBFV/sgP-loh7NQ'6)oZ5B.G=Ue@P?[(s%aUIfdPb&5^BZ1]ZaV-[b2GNkV.WC;=N5YeMI"2WbTM!_\Z^@M0M1Ja"U/4iB#T?FXe).j'0"1aK+7Pq>T3flgB(,_Ih;tn*:0,`jm]'TKXPR7=^3W-]\8!IllY6($m+fA?6$@B51ip.\f>U&-R>b*cUPK\k+s"k`bl1\9c).s`dWSsTrbFZh[<o?ZQ5o6S=&ZW@2fs2-#$ttPWJ:YKc$t0Hh1dt):PPu#2MO\T*EY]Z,9`J\T4i.4Kkf`+FcbYi&dgE@>h!NL![Ek(\a]Y1%Aj>:l#H1Km>q(jpCGG#L;1fB\9gRThYCnNQlT&T^Cp&UX1u),57b2<F$5_Pn#h;qSZTK3rZ[769npMpGEC)2OXXb87"UH.`Y9#7BA`NJp)ea2ErK(0LV>MAVdE0h)e!R.J]Hr#@r,%QYdHJ3k?lrV;73mqG8!8:5n5so7C\(J+KGQBWl7\2TE%FZWAe*`9,Fq7WYVjo:7;T+a]f+RAZ':s-u*9]$5F=^D8j!ihn?dS_Jqb0GE9o8jZ1_:g%$f%[jQ%d[c?4mh2fj"S_5k`7W0SC[sN1?@.9ER1=FWL_U7C`1bc`dOBOW_mWnNlr1#j0ZhrqD5?E#8E:6KH?uO9/jQtSoVWc@L%,!\qCe%lN$t_74Uk0F..7]GqN[1og.M$q#/TkAmD:-nc<(U"e,dh(COFlg3W`25S!.%X1p[;[;j[\mXrck%ir_RfN6F6L-jLu]56AKnf9C_1[HtM*%Ntp?qC`:sjo!J1_ml&21oS-(\fP0VG1up.\??05hVL!eh:CG2F!WD?RL\[M=MXM%uX/Z)-[D*bH4ib*GI\OXMV?\hA]p!0[UfHp2DJ;#C:TUTd6Q7SrLt0hCaiR@fBnT>Qb7S[6mJYk*aAoM$/W7UT8YV+b'<OcXfn.FVH:A<rl-s6jg@cUaIeQON4Z;d#^]+:elHdu;/hs!BpThQ$DoN7.g/sBLhn(]*Khh?eb]?p7DHh*XD&i9'ltub&gc8%<h;!6<TiVsmj4ep5)d>m@(e9/mWE#n"&!_Bhk&L<kA_93i.)'Tf:R@UqRGU"&V7O+uEmM::P(++c;:jqZ[f0>9]Q\!sf4+7FN*bD?N\&0h/Or`8<16u=`5-%Xk#6HiF%qj(_,6`Ca\]4f'mZ(iVH.hrdWt,G&k%Q/j)lN[*:rWGaa@4d#IOJ4Hu/#-P<0PKU5*IWa&D>2eAGar-;'0n*#m@Ect=][fdYp@.&G('g:FgCC7,bZW2G&+>Md]^(#*sCqrs-Bm_,e4e@6"<fNVR.j(N1<=_dJhDG32?:/")mW0,+HFs;6fVOXZ?1;qc'hSn8mCj@K;3qtuQel+q6MG;5"UK>g_O&?X$rZg=6k^WU4#^$(HRAKi"rrDQ(pu25Q]bbYbeVF,;%K?DMcccpt2#;.j!-]H=llG@Ep^s%r!1#G`oK?9jHhnc[gXFg2n)!A[q8%4BA9PHQ\,#LESOZ87an?M6pq,9;3#jOh#HQ'd1llHR<b?NX.ZQ42f&X;@#+DS5":,F"92qj?ZN9E^Ik^8b]XR@GYEbSEYNb@gGBS&&\+M@()ifcT1)Z?N,t19n"[Pn6a\uE7`BcX,;(+(Bc4rVjHXbe":K+a/0N/0ijMt5Q6l0Q%CmKoCjKtimJb^\N^$;Bm!!pF:^[[M#oV['6)r@(9C@"`Yqoe%XB63b.4*4P6n<JF>[.b)7Flph.:M!VY/.8sH2T<j^rEWs$JNHn(9:7XOO@^ELdR?Pgn=.afSL:mme$T*.DGA<+g>0l\qf\mC2ME2mWfn;tfQ[h=bM!nKi&9+c6GtY4Xfl*=Vl4ufPgm&X'.l=AOjuR&cW+P]nPWCs-'gN+jfUI[/;6pN7.ft;j+s1?OqrS=2nbg@E,G&jkBkpTfZ3I;oj@_!KjoGSq+'qLiLe.BrUE[ppSUN"*S9k&%AC;@%`t]FV9!6AbB70#k*lf\oosU([2I+rl0#9IFi:rl4jd'smeIs]?Q+AQo]GK'I`pN;@CYpbgD8YiAbO@?n5\O'Xg'g68E6]gVOjVY3Nf'1>6#/3a$.DTaNER`33!k$eT0'\-9suf#m$JZ[[m%0K>s_mrJ/.7]cZ@P^\=(1rr=\_JUOBIgP6ra]*kpY(joTGqsS[hSiJR<T6Y?-O4`3FFD`(gO[g*]ONhD.1XsWK<D8R=!$$?m?\[=AEUVe@?PRe1n]TJN%Ge]]2frs(h)Xco=0Km:4ic,8?SS(of"*,?eTi^:A@"fnW%R5JHWT.&QDXtBW1DXFl7lE*VNJVmP06E)aR*bhS_0.phXt4N7Jt%eCM`J7<DQ>:0\[Zo3tD_hCHoK25@a:*,tD+!?'gYJh#/1Mgj/aBMJ'uC@?2q/RAsi*_X]S'LE>Z[]Y7\LQ.qqWF07\ci;8FVj*EL3\N6%?,M$te1lJfBl*Hph6^Z%a1_!"+"Y6m!1s]k>h!o;khFBMjMm6tN;:eR1kE^s2O;7:>P)qbW1uHgFrr?DTpL&L?WNYFho!A.?r#k8Fg[QYsJ'g1KmB;TcI:Kg3[2.WRq;'(YZk$I2S^CM1[\_d3gr;P`OKQZ4C"97oV_sRS)o3dPFb=K-oR9tfa2G0?SU7k-"*snHE-F5?!:?5'PFC:6fSi:$0h]"$d+nH=i58-TUWCkmlKYD>;(GVA-DEKgics,@%pb$\aPeifdc2_PBrYrLSk4MY]#ETr66l%O.PigiD/_\)p[;X>ilCUurb&tq4skZ%q.DAY.!OkBcKlX7r<q,i+L/O>QTs6t4aj^g]168rm_ZkY.dV!ga]qOM?Q4`T2&-j:dGsJbX(6L)bU]&P@d(#W^%6H]\dPH`p.siDo#GY9mb[62J_P9NFptig9sejs>N9I-2g.,ueBq3=70P;1M]Ej23bjKaOr3Hk[%D4<(s>B1C@2Lj2MWQ%^1o+_W9L?`+S@&eR\CLe+t>+n=]8E*klC_`:WL4s<IZLUk6(=FTKeh+iVlL-c3l4Vh`\p28MH\Onl$2fNM(.GQE8j5qm0ekF*6,o52!mBc(EZn7e0r.:QMBu6^MB(jWg(kBg0N1i1KTMq*ENf1%P>EbB*K6j=u"VYo:1CSR(%C'U3]pE9&K'0k^4"2^_Uda'iX;qg3X+rr?@U,h.q:j2_t0Y#h2bqcpaWF62VlZ>E=]aYd,$'Qr]@^/cX-M&`P8Z:-l\UZi7-daok-HT](4W3;cL./s:6kOS&n*Mr9RZ<O=*,I)\slqWqmmlG<r[J)"SMdl)aU[LA1RARd?]5[T$Ag8m1Q.QcV[IM_7\p/Uo#DtuR'[QdZ4E$J?jmak\%b';u!PH^ohHRn2[^TK%pEV_G*bQWj[IW.'g)H5#"t;A'm%kI]^7rAVdO;+dIc;4;pmE.TX1r(TE]?`42)r_Wg3N6Cd_);6jC&GF<_D<RW9UHf($=*Ml#2%F=s"2<PQ(XS62@#>rrAb,@atDX_M(1$lor8]#Ltn/\oCpqLN)tS?X@SAh:IL[cJeKIFupf:6NrIlj(T7V.^t$J8P^t9,*8qT6<j!#q0Dnrq&f.iWkLnrr7q9QD-buPHOk&g9b,gPbOuB7d(n/oZ1)<ZfNP:9:?9CA=4's$=R$eS.X5L9+1EHZbS[Ie\2(S:/>:qRW+W60MQL;gWA$eQ5j9.`>`-ZW@q>Z?!)J(;[f0C$c.hE"`?45<P5\,3c51NZq_,00)2rapq#0c8L7XE_D8V[ai<F)$0fb2p((Y<#^UAW.j,?si>cg^7)hN]^3QG\0i^mMPC7!m$o*+q_d,-X[J!T9h&'\SXY3j<kB^ksnhA!4ndn,q1al<RuBM`5Tl*6V3pKl_6e7BfCf?I#*>*gk]Njm1%2qd?JqjT=#cSj;/&g]s4b*6$D$GJuOf)e#:N(k<bfHUqI8a1#Sl1_IOrYA**!,dkPTD5no2?*Zh:N(Rp^YqXHp@%?4r[]^-rrDLDfKSG@Qi)1Zrr?gq?i&;On(u)\jRKMPA$Wl.2#S)m\f6*23lATh+3$M@U?UM6!4Q^:U<;k@d9b2eg7<q]Nd?t(50\:F'WG,oAX8J>6HcE+'RuHuf\a<eq(?f%fBU'"PM$tIRHZ?SVX(qKLRpPAr#YW=n(9F59%9/7d=&Uh,(XB-Y]q&:iqF*E]JVPc%ZVGfSt<)YI:CXMKEdI3cVe1eSh),grrCPqpTerA!!t^cBKmbkBl2ap]`[jF[^VT<pLd9>m?uV=>;=d69"VAlNOpTS[U/7QX%a$55,Od(@W("i9.\K8(hfpn!?Y4T(LQ5Ho7OT&8R_TeF[*sLrrBS'k@Skni7iUr"d.Xn!7.OocdL?\]^?)6Ngc,EBm-q7D8@KS+p/h<H[SHdYH@O.ITAS-(/h#5MRlr"Si31s?OWrDOulf;&BbWu`s)G=g%#(BKf/l10Rh"??_>MR]0F]4lRCFkrrCmr\_$dSef2eMeBu7GG)\@*<EE[K^!D[mZC\3J.GJP&H17"g@rDb<@UMQf50ZUhYk`:O4sbS3WloO6kcWV;Z.[ra[.X^Fgj"+Dj3;H9@%)N(\oVsje3uK<&_m1l>\&jkptI58(2YGR`r?%`c\0*?dEKs<e^VK2:FZt;L]V4X70F3@'I>u]=SM9-"8nq!+!U74bELq/>NMbnmk32e&&5]b(YZQh]!pa_[cXKkm5g-,qh3Z`$@$:L@A96"m9KSo(.a`KrTXW"]<`,e5F:e&\7kj]oHf!9mle_+4*u,:C*!&^1V9X5k+Sj5;U;rE]7-n2ids4*2QdE>99"2H8+'9]+&`j?lYS4oi3BDISm%TIWKs9Q8\`OTW$Z&3J,fZ[DA2tkp[<8cm,NG@p[<Smn+^!<E,VqAhol2\a7AEHGtFdL;!hPh\poK'oe/U:g]%7!4!qSAG5Gk@YQ/\Y>@VL9qH56(f'u2"W^ucMAC[U@r$ZWjpIB.LZhV6'mqpZIR/1&'$Tn&qdkr^Y@<X'iWnDWLOJ@]QY'_Q4Da;gsl=<SalBX1g_#DZ[R_(G4_*l=7N]D4QUt&OG2*?2LI\Rm&$\*f$IeUUT5kKh=HtqmeW;-AmeMp`<^XlaOY]e&nD&ch4&O7SZD2_IQ1)da=$E0uJAKD&UXf6_I<Rskqd^.%?Z.fYcqTESp^KGA:VV$.G0cN?[[\a^OD>G/qUPL6]#sf"7FVPrO4SABl&Y>k3]T^i9niJY>0cB2S+J>O-U8C2;;SsId-ieR':nX;+=fl^nUmq8UZ$4iQmSCTEq0M^`>("BXn+]i]!7-\>pbUg>5N=,6mN1QeKhGM&gV[c)De7XnHJ=1IDco!DgTJ?TW,)-]<=:'o#%:'-3G2NqGnhFXO*_s[r/9npkC<'3Bma:TICmpUQ^@'"ORQ&uqhG7`jqnQ%EmkK?pfoCG.k=7o\>Q/QPeKFY&W'pY:)1I/b'JH3=(,]K`)aj<X*Uk72,_@>n\M1"HuYBidZOBECO]4MhX1=CkF_>>rdQ$5_rL1aq6SNlcM+mK;TmG^3r[Lmrj(D82^c!^Bsoo3>:$q']5MHPc2HJSGJ,EuSiIk+Y9/n#`Bl:9eLpr;@u?Rf$i*`k+8N-g6L%:unmAO!!1CT4GFS83/usA<I?V4Mj_b8.G.o\7[rLL`fI[$gm*267.I\$deT9/>;U@r-&BrO.6qAS&Ah]_##t7$]PBPJe9c>lX76Jqa^kFpL]Q)%N>S;kEe5_*[+PW@fmru8=KKkn`J,-8F'$'`Z@pnf<GJ#ucIqJOe\nO(Q/G'lo27i9:D8!K">LRJ"W[_d2`oD8Le_O1[cVA%^VohM4'NTc/*pkcZ;gdZKr:Kcl8_JI2(QH?+G0A]e5.BmIHn5oY@<,N;<]^n]T\Po\3Mrd=Nf-&OcI0fc3n[uF8q`5P.M$:mS%)gG@FhT'8F#I%H:kFZ.iZQcOt<l;,c\s+J<>:!p>b&DQg^P2bMW-Gr64tBfJL9-r7(!1&H!1?&%'rjYh_CJZD5*IZZ9mkAKLY@eUGfElV59\UQ]erD+,IMS)TsW'[arA$uH7)8eV')plG?q^.3Cum=VTkG/Nj6in*\d!83b-]%coX!9m)qS*g&%D:"\#]t7.Io(BB7S6D>[l5t)a;'\P%<&&Zi*bu(no!oWl0&me-5)B+C9+ua3EtYS.g*9AZ%$r+4Ks1..rr)8JrrAE^`F%enr/J:hr:fIek7ui<27e:?pK#Y]G36^<*B*cL:uH=4bB2dQL>S<+A9O;RG?3GR4'+#DZP5C!qTNeo"#i_.8f9&h"d5mWZbB]::\-gM=;qhLXR"3p-e\M"-$o/qkB?MG?u962PB>q3`FJW`G)pQNA?"<FkBuu()``MRb[`/9.]OnsEB-(*.q<f<!;"'jc/Z9^d&-du9=cVDe?DLWeAGU)P=!G:`0Z@UU9,]#Ui<-/7g4U]W;"!@5F/e'D86"eILc:#q2)TMCULq+(<reYgq-91R^O69^\47K0sQ'ADUI$-Z.)h6EEhUBj<C7qRQ..DTFf>pTp&%"A)W3b>YiQ3N'0Q!-PMCT0D(+1-E,0s(3<Is#BjKqfc@9/0_EmJWARBR#3Wj'V(C%?E_f:POc`<$!d4f"RES)0;%q"E;%k3Ve0CD@BP38F$!!EP!1OTPIJ_m(T?)rdL4%SJ,Q.8MR-2Kgo_BBWI@8KR;mSYpA30%XpFTu@D7?mQ2D<9\T\+T\UD!ep5+83+0KVK\=c\27O(ruq#3Nj$cgnC;GOehGJ!s`gDOTr6inaL`X7dUhq$U91p/Yq*P$Bp&WS7@P,'ruumJ3\)L6<F:nQU>h;+VP$CIK`UF3h)bBBJd8qo:ca=^=0Z*Agnd"[%K4E>W_\Yf'KE#LO3M+5hSEgZSJaPPL_ro_<dh57r?(Hp@(GcA(*PnZk(`?[:gXf&,5&md,sF\&AR"`((=,bMb6[h6W$4Ju$I_+fO[sfTqf<<"=E(?fot_YE']hnb8p[4SG=9<T8@(Ch9mkP:M@*iM>6DR3p_]]71lamOX)O-'Z9ndR>m3r&iG'bXlGT!fh\c\2-+U]O_:"YgK:X:=?dh)3pT5Yp^6r43"90rAHn#n(u#5rrDgi5P&oDT3\"arr@`pr7\.<4]:EU0_/k*5iR*a>bY/RWV6!^U\R>a=%eC>.(4HcnFAu3c(ng?g0&Pur1\\.'5cI)X<5_XjM]l4WU_m5kK7u!5@H]q66q<u5MPpl<C@N6<iqsm1!^cTD>#Ps1ks[FQc.0.hH8<W[9[pS9rceND3-"lDoc-eq`auG&,uV9p&8o;2ReIdY5A2q5Kp<Md.TtSo^(D)O4ZV*nRE5TbI`(!E1@_QosWr)@-B>TcG@BL@Nh3uJ^6J92?*Yp5uK20X\-0#ZV5it5NWpU@rV@5m;M+Zo1(H,]XpD2jPJCU;m7,f=$7m[X`DGu]CoiL+cE1lU><?5S:#A<Yut+^3klC\_KdV3H@NECZF<#$>d\J&caqG*8nnJd<aR#5On;EPN/FYk(%n?S)Zt+u/an%WHeAMRVsiL@n)"$3hYqgCbcBe&(\8mO!/4,8T8<:INd;_Xn8GQm\Bc^:0&>;eO5QXFDiVNVM.33:'U*EX=*<JBB[p!P'0JT>P/SPL76YC-/N:ngkFoIN5Lm&498E;Y]Cn1Kd_cT_b^<XP>G#Tj"GohmCA<5?fiZtiC#..A">=5h!)GaG1YmmG0oaaH4S8BWq6uP";_0S@5M^D2UN?G8)Y`]Dg&D$Xr:q:=fUp?.I=,JZZIMkAc\=U]]s]cpHF\.L@<O;9<Rg^p!G]MU=Q]V`82ZmJO2TZ?/H>e8ZD%9t!/0q;'jgA(Bt?>q54cV%^,Pc*k1]Cc.[JUEh64LA-JfT%;6/92IsYoh"[7[UN)G08XK&,_)WmXo2Ek#,fW*Vu."8-(jNa+l!2mh6rr=2=pTT#D'Lu(Tc#;`qr0op8^*s!]&\r;0fM@]Zmt+Hf8QDuCEn.[e.b^(cFN[O6lL)7M=]o8fcQ-12gIq?p^ZPJWT-\r)rr=ZYJ<U<-0ff41^"M+aYY=@He"t,bcp^#pl:=r\B#iU%_8pZ@a\]aGDrchicgbki[C4fcP"MA+'oDUr.`F]_e'h(qrr?ElrnlST-i>6J,:?H?0i-sInXcV'53a-T#"E8QC0BYe:5\KmgXm1c/PSAY7e/hmBA&5B7h_:DU-KHg0;$;eZ1]!X+6Fs!ZV(4Ans#E&73R7aOnuPo2u_9l=.0s51WK=K`5a&k`UBY:,o\nq^=tZZBF3`jX?j,k!.]3W:m5iY\(lElp[<HMIkkkpoBW]r11[hko%WS]\`eO+Fo0p*`>8I>ll?:K!D1nN<V#0obZ')1p4!":`TF,_/*"]<;u@]F@[&W6!i5EX,&@e]2em`ChL-bUJbWm2)`t(sT!*2%`(ejsnT;<(9g6srY"C:kPlC`1\$oX+%SE=UW@HnspjGhiBjN4<AW\!$]^.YHna.A)WX:f\Q7G[+MWc07VJBq(@'14/#>+boEddiA^DXf]:Zq>3b\d3ikqDr_lfGqMR5ANLg=YXObA?gubs<:BQj+LZjJ=^k/e2(X9m'<MD\n%(2DRO7m\M[gb%(7+A8sEn8O&_ha8ssiUEprgNVbpJf*<T71lI59'AW)p%PgY\\u/4<O2Z5u07RZ5fmBRBb'2E4mf*8hNIL:V?!q#.P.UdK^HOl[p3lhq^Yq>Jc*-8jB7-u[0Dq\3R4`+g^&CM!C8]rED'%DEZ.-CLEDP)RdiYgk"(CUYr%/+3&&3KhjXIM1/F([4f2lHiX-U%p`f_2ap[X=>qsmC,GMdOj"o4XNU"oUeddZ[[g\^oF*#Y9ZRfd\/D-bi&F#A3r8h>/NnYL=f$sle=MQ3\6.Z#W]TX8U.ffPNN;3K";]^m\^oE&MC:S^Q0gIe]p$^=X_Xf+!<JLUsbqYU#o5Q!#fq4i>qp^pTt(Tb=opJ#9kik)g?G:mg=F8KlnD/0%4PWLfKf@\jo58Ul>*ZHt@[A`"hb>Tq5Mu,Qg,ggo0!eiB,rB>7LSbT$Ga5)sLo<N*lb(I$>h2RWT)/M2M"]`)`Nng_i<-YuH*8Y0GP,Z8r`jr(>Sql^u?1cuZ+K<?54,5JD36HV[=eo6.X*NP]j(V`9cmgNe+utSm+oO;`j6tjUc2RbMkPf@!Rm+/=OoGE8+8jiR\0d"+SMhE)SbW@VeSsX0V[jgU=_YTI;cYe'U:)bX>o"=j*)&rDb!ANqTB-aa^oDSF7T-SgaS_E3`0*?uLE/gJmAb#[*^VhR-8"'qn:md<-)j-JWA2eSNJTK05uu2-akWa;mCr/KF@Mq'orCb+&(#0T"JJ'6dQ%6Jp[;O/nf%LF^H3inQqqZ#!%+?#Bt<L*GIP"%6aUggD;:0$F)HZeh*VWPCN=7X[Vh!0K5SNXqm0hnX)n%ek!fVt0Lnk]W:Ru0%!_D/nu_n!T.+Kg>]q4[jS>pILTl+5C/s_]DTqHZ2"Ke\E-:MgjKgpk^F)a7`]!5=)==h%;jG>`.jC$!&jdh4b*0i0OnNt\bRE<.f$DDeC7o<qK!0eSP+(b`:>ll2%$;u\FofR`DfM]3p(mXArBpM+H`s>no4.e#/AI=\GO_0,ZJCoP%rcISrIUfdbt$7U>A$/I6G$oA.Q2bQWhA/^>E5#$(h0;6Ju54l):lBX5[Ed+k>u#<dd4][g,ig'7rdo+Q/1!fegb"Dh0Z=A9j8o&?;H9t]j4[qX.+"pRH\dWfn_(%N]8IsRT-4t>,m&aAm9.&D"V'b&E#(3a3N38<DP@S,*^+/N'tW>&d\Vi!eP@`(AI9>8%np&iBR>BcC5KSlZ^rcJ&7(l=`46/Tj"PZ#0#DdT(q!06(6"L2'eE5H0_EC7rN\^7Pu]*SQ]_cX^*MF9,KK^#i*O&H^jh*Ikl<Y"]"=8hp)VE2\0QLM=Qn#><e8;9t/`B/:`>CWNcn2:#()aP939%.4?r8#,2E)7(kE\(qMnJQb(a(1`PU(/RZ2HAST;c?*#TD>3V;O)tW)4gi,FRf]2u3$*=,Frr=9mH../!pkA<qj6M.rHqpW7So*R!-P*\mS+gO8T#b`Mdn.5,>B23A[[YaJGG[P23m.AJ1t:1cI&/HoIc:\!C4uTejMCc4H]-ub*Q.F9jS.A-pYS;39e;co3Xg0V-b?bGASUqiG+WeanECE#G:(MgP`\no<Dl<q2/u\`Gl4g>2"L>]kcW-elt0Tra^[lSTiE.I[Brg<;D9=.e&n<rTEYfa\0Ut(h>[H^&H6h,S,$B5moOVG`iZY*hu<[7^.h=+9@e?8VE.GjNpE70'kCNs])o`^;9ZG[T6"Xh9l,(!Xc&<*b.>"gaf5cScl*hM2u0t51<e@dmA$qtgSODh)meVGG"GU:ai@I\2I;GWD<.[W&9htt#+e+ZS'>M#Ppo.STlp6IWgKe3PfU5/R\jEah3)X=.HtLj=n:5I763-RYX`Z(G)RB^,KR]2?_\0(rAHk59fg>j)ufn!:B(=HfT+_^IJiuV@e<HDmsIh^?ZC3)a6_s\a7\V#<S#WIe9cM95-jV%V<e&FCDeEgNkb?9)NPr'7aY.6eNtL[@cObDQ4NR5m@CGAhu<["J""F!Y-%(cbs;P$1"Y5SPh_LM7qU(G&"PEfVTJ2<J[F``<)5E0YMkl&H:<r6+e!Ym9Np]SNp<a#C3#fe.7[MjL6A!Zj]EWN?cIQOWgX-7^T0[)^X/+h^O%V`n=*eI(];(\)u6!$c2Luj.Xk64Dj0!gn^";KikKF"T#8J+.X/83kG>m^oiFjVSu1?XX_.0g$b5]\Y.An`\NHH\@$e`>Q!#AHJj8>@o'>D7nbKN^5N1dPGE-INp/b#UT%'dYkBDA9MJ^TbkNd$GfR7`\<ZT(#W8)6Lb[Y_E;TVF5>?iA%)+Oj8aTl9eo2G&cXpZJ:P9E^f:KgXfd7hPp9)<:!ia-3Ckoh?UR`=._!+1)ZJ+ui1o8`4qJ97=onIOSBho>+<T3j9mf^(h)79bhmDBJLn\+?)dP@Eq(`C[H..enG4]Xn8me34sl;re\`@\SmgHF/rOd[Hiqrr=sljt54M'C#A"j6+FP72FqZ?1K'\7ul77eC%3*rrBV)S>LH=YD:=fJB4d$ZQ"sKDL%]lLPDlf#aV'V=k6#q@?j-lG=>7@;<'AZZKAHQWD3f$p^uQuUPR[R,dY^:7N9fq8\M3Rm$:S",!Y7c\[p'Mgt^fVTJ)HiF6.j<)bmo@l0MI5mOE^HfWEZQ;GALWWQjhEhoB,b,qIh/QQo#)RY:l^WJmcF=[?kVq-!^t1gJVS:;G-S!&f;f_tV\e*')\5mXmCLOS&J]FON@3[AV,T]*aH4p'XpBY?=Z/>*VF[XV@d8_bf%`^.8E$S(>;9P:2OA/(Ft1P2GCp7oH=`rrCaag\mrHIJ_]Srr@`DIlL5dIk<V*aH,H5r5#=Gi;(^h#,?3t[dK02#D]GJD6L6([!d)3BX_:qD:?o"M"eqnD^t#j=_k9^a%;`?f>BS(9i"Vb<\T"OO6.P>4oMrRJ)Tk>H>$d`6h0GXaKOA*98pnjmi3D%grm%u<Ao%CL5)<+S"F9[.[jH\WeD(X,tV/XU+moL9g%g,\a-P"=((W-%)sj?W_a9:6ublXQq4K5(n(b%"Kd<W")EKa]oauC;Kq^MraMEur6#!]IkKW6rr=B$?Q6F$aPNfY$N-KBC#O$<H_L<M\irIShb6P,aR@Zt=7;)Ch8*SZ]`bB/LT."X-^mQral2b)TBA6+'BTeBq4mKGiVrnuT'EEAXf^A_#HV\+EjuNq2P2t`_m2@JYWCSq'q;:7lF/n\*u@:sUih;12)-cFG4IkY`m)7S\]Saf0*dEV2$>f/e7G4.5pr8,\u(Zi9r-"<U;j(Q8*B3W^$NURDtm,#o7>Yc/q)'r^[S!?RCfZ7nSm#iYrd07[i^%W3eKYbBP3Kt"d4$(+5$/BnKt,%7]UnP@PE_=A(Kq$/nY+`P`PDE_elr*HQ2dur/f6JD%(L;csc['B=2`mH'QI<j`kcfN'!5J^+t>biCu[KngG2e'SD*BdVQ&2OVoVBc;mQF].-SKM+[/FA8h&7oI^(C3Zn>/n)!>Bi\0n-rr@`Srr=gWf>i@hIA>QQ;t8o/7oe]`>*J$^b6mX;KZEf304T-*D]?$l:+![`*B$Q*VXE2#St]BlWnOu*%$"f"C+Ilqi.iJ<W$&hsIX-E$T:-_mPPKUnrkd<96eg?/-,1o+VnVH#=NXA:7CDh1:60;UBI]aq_c_Rs_1g.XoV-^J'd[H]Gq#pq8JH;iF!e/]O*]uh7bNg%RYJDAl:+,d@mO"sdlPGlOFa.sUk_\)<G!LsTJI[:2?*[#"8QDU44!#fn]uOZl0.U!Vt.mhmR*[fUORHB=a!8=ZZ2@nm\MO:SbE?OgA<s\G?9'4NpECn1pni:=bY%.WF-RS3i@jL>fT1kf?6C3J'?O'G>@R5P^R'>dC]"^CHAJODS>SG\!;F9U<!96!J8$%bNA;@GBJ()BC)/U/f"bI77K2LJd@&>4RF,O0hPJec#*F6JYAPf8%^T[#,5H^76O";.epmjE^phoFd2G&_7<$31kT7dT)J+e?fXHLbk(i7bu`g=f_GWan<dGcEU8\X\N36lBf=a&dV[3grrCa)S[5g>F5WuH>"N_@40N=9/65)0;"@%H><MCCm2Sdehu<\ALWsY=cL6VB:>4Nkb\ef5G0]<qoq,dDiFA/^4^RL0Zl!&Rk4*PW1W`'YT%i"WK!!r>n\J-TYp0rKm;]J=n$qklf$&r8;,&>_=H!h2:D1\H6jDa@O\2`o_'FC%\paQjJ'Aqqa32fk;bR%S^Q^)1`q;gng5sE(amYIZ#tljNcMJT)00?f0Y^)(FR?uTR=06Jq3bh?c7ZI`!jS's(ii%hcMcG1NI,"J;o!d[%bkODgcgphUd;1DXJW8R!]?4]9kM*ae7miNr1t^$2PZ\dVGV,=R>7E`<AMd,GXj#(t1u8<UWhdYmgc:mrG\p0],1B7'^-a)\9NG/=<?"SUUOcMO?o><H8@?#&Yb1#qntH&.rr<$[4*Q(lprWI(IT$*EhjkXmEda5**@ooF)tP5^2^[22YZ,K\j'/g4Y@_tX!-iYcjJp/Wkp2][(./T?f$dR?Pgq+Si1lD<h`h2B!1G"JhQYcW,.^SGSp-fRm]Nb0<prc;f"HtolDqg7E0r&MbO-jNZ[puHL"X(60g,_%#Ea"KGj*kY(nG*&b0a/#Cl[<,pf^70R/Pj'aN[3o<)6(ek%Nh90P$Ec*CW\-/lb?W'c-t)HOkT"I36Q!q52Mg2K+7n?M;TNEI0dY2AYMZl<aGBpfEs[%4>RlnQ:ao4.g6)>;Y"]G(05@RE@XG/5rpQL8jICrd(>-eM>jVo#1@O8b;9.2E/"K33""2fc*jM<NnPlDdusHiDf]d)*s>*8"7:a;^@WjmHr5Tb#?j+P*\#3[.KqmbqYYUNmZWT\T''#aK\`4,?%X]Qd@*K8+K)h>K&F:(glKE[l1ek]iR9cjaZl?rb+OB-finM^ZmK7-+pr1FUqUJ:OQV/Y#D>Ym!EWZDX7k1YC(`#ffamhZF_'"md-JoUTB`mR[P)V/C;'cfmV7;q<tNL!V:s>TD)^0%_hag\GeJ\p;u0>X,4YoCb.VUWc8tV@+@CbZ)u`&)f']d*Pkq[<Y&,uL,>."NM.+p@GOCGEpaCoOPA:<a`1:eo@>1(9c->jBoS1R'+FHS_tqFXrg*<IAr#NhnsTK#+3X!1pAY-gQ1:LBlhnNn.@U&%Z1;1k^Ug2N[g-Kf6'g4$,*Hfb^,I+e_tF=VpNKt^HAja$)V(IqEqjEL;:AK6[?JcX;Tq,uQhUsdbC1`00'rBQd_F$Sj>V/@\qb*&mqp[\],r]>,c.^!gL?aJcKED[ESIh*4#:S_k/UtFR\TXY6QKm?iL(IY=*9*b%(=mGQs(s0R/Q!.YBh$hU2"GPS?'U71/.5>eQ$QZ<>PEK3<8W!LYhIZrY+Vqe[J'??2-]EB(j4t",H[Se%>K#e=F[mAsd'^)ksnP:+pX)?GaV<^>c-]<4f&HAl9P9@3L;8nb'"ZYu<J5a(BhD:Zm1JkGQ<k2n&^Z`FJd\Y.%\C_!GK_KMc3bPu1@Sk&=P:*K0L6fVgU9N/GY<+cKnS8Q'"($'$iCm&e;TjMVsoPshaNRAm3>@nK9YXHCf-F.c'b@Qp6Fg;:bb^$*Z;k^FoWeEPlR3Uk@m458q1F6"]qp80M'^1X=W6=_uY?ud80J_qP!qbM!MhVFpB*:?)SA*ZkLMlb1D+K0q\*jisue#;R+r5e^JjJQ:51(TC.FkV<oEh0bpHgZfj10ntUQ$[5MFa[\Uh#6]UYZjI*98Y`%Z]RtI\>X-tB`;\Xbu.H_D+#Q'GhfDRlbucQAfeCdV.a1u\Y7C"Bf8SX3"RFFeb8R5J#L'Zqqoclq.G(Nq5NmO@s2bHq5<hj3V0FrDU$jjbj;IbSCpWBjk,q=/3?\h2XD-[S^.3#Gq=L]-;ALE,1\tcH[:&hkYIA4$+9N9,NPK>>c5_<k'oUVa_e-Y;f+GIPA=X,Z->pCLPc;YANo3+.`e!kUp1]EkLeU@`oV3Ee0\6Nq2$A^?7B2&$&&H6O:?,V:!^S$ZS,rqg]%8gHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2('&,m@9rr?T7n:1H<('CeUpYA.(=V(:+Du@\kN*l@GGCTV^nTtR(DuM?@O8=j.rj32bp;-6VrY$OUT)KQ(6gmhGFH;q4IK#[a0D$&srr@#HSpSA_G";BulCFic5IqeG+7Ca%/\ea/N;]"SkY3n\T[H#qg3tgW!$on_Xms$`k@jkqZcho\Bn)qMOQqi(rRAVo4ErHarUJNb%E8;&_T2Rh/Jt!2nK53:)HP5'U;Q6aL*No$pD&Xgrp]%-qn.=l:PL7(E;AanQc0g4%n(a15JVX?]s3'Ra2<E#6G>&<YDiJ]l)1gN5lUh*EuWFWrffKRX7&!]C]!##ZFcaqnl,MKG,fpKnP?Qi*^aTb;9./Ap\[PVkPiW%7d[@Crr>VPbI50tR2sCVrV59VrPn!AIs?%bq7jD?QgQ?26]V'4"?s/*UL0qJfTCj+rr<8D6]_,Tl[2DWIDndjcfLFfZQ#JL<JU>[IeTYir$<`iha@=hJ+18Aci+:-U[MA.j>Hr;D^,"trr@eGAcDc!pqV4_qW%Q=Xi(/=/8Dro@irI4p\ZMqrng*@Y.sJAks,.Sh;.PWc^4Xf7IYBu!"D-!rrCsHTD.corrA+\Dh#qK?iAX!n)"&!IeNF-2gb;6Sd4hoL+#:F?lqDW(o)d(Yl8dh;C#Aob>GbjH0$N+"!mKZcL(:;@SOs.oa(=K*-(uY_M16NXD!`qh>[I(,V"Z_)(!G4ZFL;B0-m]'O4:E[npQ*OG[%NFp>bnQkP`$JrrBMlrU4JCk5kMI^,pfmXd-4:hYV)-G;mSQgS`1ge/\Xslfmr-D#G\1VNuh3Ec2E-2',paPI&P4[Q6r/I`fC6+]]kKMNXb%lJA-*^R/[*0'WB9jnH3lgj>LuQL'(Shsjc>f=atglCjrnAY>]b$;%QcLG:)4HL7iJpXLci']3b-;cbr#VPfp$:sb#fT6=&uQt#YVoi8C\^=J/W$LSUYA<oP$_\T"TCrMI^)]O.[IdAWKr$mom[LS(s+e.EIo!d6jMN'.[p<MM600e0_+YibNU`t1t:?C4lRi0pa@Z*6B!"D(<9Pqr;=-6sj`h]Xb7T/rW;u,d-Q,Za?f];hDn7ub#.FtO3[l5)Wb4!("UrV(V-)-kdL!<J5S0^'g(l#"tXVcAO)8pSn/;i_OYeOZ/O_,]P2Y7J:,Z;SR28NC#9TdE(&VgJR)obCpXmb`8l9kO_@g5htjCe'SV9W.4Pg*-:3_g+':)G4PM^+IAI<TLQ$L"I`N[UmeX/f<a;,L<q=9&N<fDbjK-H7P!4,`8I)*4Rra[8MJO^otPM'.ha\inNqM-!Z<`f\:K<)a'@Wi?aP!!fm_</).BLc]?j.0D7>eA>tF9jtiJp[;f\k)96>EIiKTrrBt:!8u3&mesA;ir9"gL;#>@!9)W$J,]Ll?L_nTq3h#=q/(rf!27+'hpCiKhO_aUIeWHPrr@_JrrCg;J!r%i(`h<0!5VmHIHhXHL;3-:?TA&cnC-a=rVlj7%q(H'J&g*LJ)uYkrp4.hmqf`mb4e^0/MF#F*rW+YcaPs9[=0UCZs_+f1fUN]r\86HOOsmW<d4'@lAj'3bp=PcK3$;=JS+#Qj?[+orr@a"Fk5+!F4!X9fR*(],2;WuQl9X>D=ikDmHdh(CFa'5;f>?gND?8A<6CL1O$%HTjaF7(%)m<e<+CSbre&1NMR``%p5MG/Iu3pgImm^kK6nS$qqV8P!5bMGmDU/-^[g'mpb;\2ql.?nOoGE![eW5h!0gF^!.lGp4ehfar]L+nr^6\cpM!(bhU!A6PRmY3=2uE\5Q4'#n+#9VdXT>:rnX-oTD3SQrrE&rrQjpC>^sej62pp:X2"BaDgqBdr13ifKar;#B7.AJ5Ki*_1&OY=q7H2>A(G9ISUoQ8j#L%lq!kTSp9mCDS"d1>)3rqhmQHoFo<g=#<UL4=agU`G=,!Nl2Fm27AoQ52J"+blmr+;5hh`GuJ"UNT9m6NgW6.tTcGSH58[5rr[;)pgMi>q\0VP\e8X\=XCo#0I;3n0)iM`QP!ZEjtkCQ0[OP]Xf)*'C?<uNjed$Io#V/heS1i8sRFL5XNUN9o,8CX4I<PeFuFSl(<$3KLrkGo-ag<]J:o+h'knIDInhmE6W3r]2>*ud8hV<2(2Q-3]-h5\P>:@-YYmE&$"f8u;a)Eaj-4[Y258W\3=]RQD7`;XH?r%lLaJ!aO%na^S,D>19_X/3C;APCOTEk8uh@HX]JH2Y3BR=k8ZP%9TE\tU(3e#l+XfeL0S[s5^%7WTf51r"*+H3t"#rc+@=AZ@&5A0*tV$pjmn++EslDt426!4Old!&&9g=8Y;^mk`hhHhgJ;!8G&u,Ce]"a8Z/-djscRfq7g#@6a#`J*;+Nms:[W_Atl'Bn%j%r%L;oJ+#h]53Q5M'+OsA+4&.Ar&"7grr@6`L[7"c0DH-LrrA?A+7q]t^O,etqqKTPh='5!n)"$3hXqfdB`A)%P2D1)0Xl5tn"5Ctj8G3;pY@\AgP7Sk<t$ll*VYT^W1Bt9arRsL'Ut#\nenI<(tM[FA?<eG>$/$N@l)B5f?R1Q&(.!mpBK^G?]SE`rKkgYcHT@UaR.Nu%$se./\s9@VFom'Tb(fo/RD%n@o5-Al6qq",%LP*7Z]I^4`-5%9.aa2DrHtE'-kPq>n"$&Eo&[[e$G[G9<[MQmsf\`+6=78e\@JAo!SI-4+$cgrr=ilbIK\NY;[h<D#TUP\K14O?[:hG@s<)&a2QP4_dIXg>b%\Wkl()Jr*;Fl)&f[_+!"9#<>s6+7p1nS+<SeqkBG+1K-)kR+3W-q`bRBC2MPjgmG>1eeo#m$DG6s4mL@qEM:_W[C%"`PqqUpJmY8n]`:UI$pp'IT,kU)al09]I'3f*hk4\Lk2TF[<8`5bVW?Z+fo"?T\g[1hlU&@m:c)jF%fbE4F`D=2"^\f[Url>c4O8^a82u`W%de7XpiCk?e8f\B@!/h9srqgR(mIRc9ildA^!4AL"!8L2=IeU,9nt#d\[on245Q"=gLAq8O%_ZrOj?<]rfaE0[rrC#4puhYW^40dB?#@@OpM_5JV8`H7mL108mn>s6+86[<62prDrrDSErr@Vn%I[NYOe;@\:K2i&g!Uu>kHWm\]W_7X=tf\gO8f48(&.00rrE$6ci3uU$1UOc!#G^+rr@G]BmVaFn>6`n,n>\0!6'\Jrr@JUq=aL95Oi=*J(i8!mNkZDHeA)g:B(=KXM:'nr[8#hJ,T[Z\bC+d!^H%*^)):YVYkN8!8g#I]rng$r-PpaqblGR!;?[.IeT[Gr$ml4I]iZpJ'1?lFr!-5S$?tHH1Bp9;H;Y,;s!S^LTc/-DlfPXRKck@8TU-h/<E4\a!??`L,5eQNCL=jcXM0C2tK**=kK3ANbCA*(=;=deNHAQ/3+((^<uD/d9F*@N/6Orahoi8UQpu!9#cVO)CPr>'UjI+J?";oSRJ4R'X21o1/bJIEFRkq&,P24hn@aQr%2.Ph.=r_pqQc1rrBk#nuLI3rr@a&J(Y3P8,b*+`W#qq5Mk8H?*F8.*pjdBY,VF$pBMr3hX:CDq'l=DgS@'#0E*F#!(VP-%uU*o+3RU^h>[KEli-r"kH$oBR%a5Vg7Rp&@)))18,iQm=5U^UrVlj)ifF$UIl4FkQ/7ufjM^aL-H+Rne)hck"%?5?59ajO7a.u;.7H+-XN0FH9hTaog4BUIBIe/-2uG'15Ij!@^(^4#gh3;:2#CKnb76udiaeZipB:<:\PaIL%7mFnYKfgaq(<@(>rljj*m=Q`-et2?Z7eo2(eAYe1tBT:NQ$n-Ud(K#pMaL/Z;:@>Ibar'`P:Z@rSi0Nh1pKsN.:6PfRNg$?Fg(9hIj'@WV]?f4d>sH[@JuLC8psrBE%u2'79`ZDG'[9rr@lT!3gtIp\'BKAc/#^mFgA2^[T\-^\dVHa1&1/rr=+3)u`r6rrBTP*rYP2NiBnq!5hK[_S#L;(+@dPFI2S"QZ2s)!(CV$W9S@E.jLC,?mp$E!")]%a*b>K%tUO9$&TW\Ir@jQV5<"'NW/uh(]G*jQJ0`Z_tBYF8M^;G_Ne;,C$*J1_F_9m<7I.u&1eNDrrBK3'i'WY7o(5%:\h5IVbca<B"TA98Xn:0l2b.LjZom=ZK0sm5G8#VD=??"cfaO$hos.:p\t4F:ZYf5P&0!ml@m(Brp@\R8ei`tm!@B'ea>Dt+[Qd@Z%!^=^Dg6E,gF8q<fI1V(s98cCU$J&=8Arq0DHoRGqs_J@16K$m)g/Ob=NK>WJ>oq.TAg3.o/O]4!'9RS`MssGsr+BQd<=\cgNChge5::g1IB^IY)Si.Y7M'BIT1(r`f;GpV$*+MC9[+#U59G+cR\#(m/<c.&0V$`=ute7iZ1B<<*"&LV9WrN]<e)U-t"id:81re0K%RJ1;`eJ>e9u^^^A<0`c.s!,qr9HhY1Eq>9p$HhjT>!5aDOHM@CQeaW`gme)>W[Hb'T!Oq@Feu`T<bI'8.!-5La04-rt#jU-0$N6`,)u(8`TjXZ\"&#9KjJ-Dg!':,[O'A5qM!6U7j?>![[Ag,?+)^in:LbA^6E4D%#s!SeXhRhpi]=1ZdWKL/?1%M.rr<il[TL^]B=Y^gBih!qgRAD(^7Wm3^&9KFmZ$RZp[<S*msb$"IlpNgFoMG]JUHV[!5ng:k;WD.rTY3gGQ-S?q*G#\LM+a?rRlN#G5(pYr4i0<bPqRhhYlnacfW4H!,f+AAY8aj+#6(U*IAa^aBq+1!:5ERB`A(lVYlDQ!8g#RI>XMXr]T':!<&m;TDO7*^O+Q?rXgmb!+ZE,]DhjI!iQ%uI(r_ZVZ-Yk9`G+kP)"Gb!91mjrrBdf@s^Q82uHg!5PDHKqh\&9hTi=r"TJIU#A-$3jfAC]/^NOPnV8F^]B<AL<a[j54`c+g\qd?\2&83XR63Z[,tTC77dS66)G&'>2/JT7_r*gkWlqME4]O$;=66p_Doh9orbmO`$T^bdjYt=J<DeUsdOn>j?XIVseMS:I<o^KnO?=1hX*4G&(<ckbLW<kYV4Sm:`B4_oB"+g>jM-7R1$tCQ>bm:]74g?IFY_%T`^Yo9^JZP1>2Xu#Fa*c@qVV8d3P.MA#KhMKq9eahi?)(l,pq*pH!\McZ16_S/%7G!c/NC&NK6A]gGOD3]_;&BX)Cs7DOR"dl".j%Ckem&ZjN.&*Y:hkQsS#9D`RgtKH9Bn^/9(j`bgXa0OQRLqo>H-K4e1rZ["S<GF$mXa5L[egQ)r2T+Nq=G%u>k*eu[UGi@'t@-ne,DKn+Q]72&(Q`e8*;2Cu]n^K6LOuaK>$Q5O8EeHtL3b3+5fCA=dmCW?1Jc>^f9).HH!/LRSaH-<!46,#o!<,<Wp?_4;rrBsC\,QI&kO*h7?F^"8O%P'(>??=BAD[:QJ:HN9J+jRGo3VFs_ZT('rr<:j7=2#KjNIQ'Dj^@brr@eGb!5k4T!%dFfUq^5DGU(<R/[0Bboa]Ip\ZRprlaX'C&\1lJW]s4hp7#Nn+]b(rKVlLhu#=rrrDfSj1Y>sJ)^-OrrA?4rr@)ghnAsurU&k9DYNUL4>2GfM>mP`7dn;b<!TXV:q6q,6$YXTk+n,q!"D]i=J)Q<POD>ON[h+0!")<bE2jTmgYOMn!"D`Qq'K^Xr3I#-r0-IZ`IH+^XoABefan%uDgqHQ4nlFhZ+Jo,qqo*ahnA6Ir2XQWn%\WurrDXim7@PSQ`%8na;qN]=Ks]f7@ic$_W\aon70\)eA*3*CfVo0An7<#VKF@*X/<#6"Q`t@rr@`Qr9`BZ4Krtjg?kse2'E@IR8'Hg]"=j!Ub7j!,+-_elZk!'Zn/dS+d=,(VsescER^RK/2`QBo`=!>Ndre4=Qr<S^JB=P,_%FX:Z^L6!",.n@D<8IPP?e4r:/J9T(D7FE'lpPb\p+bFnlo3Vo)E8MGoGdf\OU$3+sO9)@[!TaAj_U08F;7&:^:,bKl2drrBr[5K\ttOmNU=8#4R2A9T=f6b%.*j.I;u1colA1VE8*+Anr_fa(DAB>OTJ\3@jV@`d"nR>ItYf%O-d,O^jFqItdsW)<Qp"o%J$J)t/rI/X'FKd_F.+.]eD4O72Y3SSP$<9agpO\:\,ca@fd/KT+Q<uE<!MEL#+W->C27Z>%#jpu^3GiE:!_.akMO7Sq<fCG5E)(h3Ff*n2\f<kWhP)bkYeO*_CjRC\GUbbs20n"DZCE0$`rr<uIF@JgHD7Y4VDp?=i2L9aU@iJ$iZEL=rK>rBaP*T&H!)Gi1p[;Xnq+anLLAq7-FFQ&0[rW!6G=><OWbQilQ1W4C[q0A_PB>fP.cI4cbd;UBE06n$imo>eKPP&In/c#gJ+0+\R<pZIE%bbJnhq>X1,bI\RsFCMm"`Hc&]!Np9oETjMF&Y_KqfQE:>8!GfpV%fT6>7*$iPJ'&EF"u@s]T`nbsU.mr*.,?i8/t2Ld4FNt_GAq%o1;<j#LX]1]8Pf4Voi?,+!AHVHq-OH0LQ.''BsBP?r2qANG7alMb7L5R-ITJJ`)e?maF#lN3JYL=Qs3egtomMa</9%W,n"(gi4]+m2(leadi8nk<S(P\feW26>gUnji<VQI#"Oud>K5eAl$5n(VJIm66.BME>b1">&>.H1B*W0Dnf,6W]$<*blQ'Rtr>qqW97T?GRU;NLE5g=WRfpsIK]%fZNpho8sjO'TTQ>JoN?pVX<6Mg+Q)X@@"ii5B,#+"^-P`R`F0"\q7a]4LBP/;+LJ@%+*e88hUYC%;f1c[=Tcd.T+cFaqG]L4(G[W<QR<DB@j;nF']&g__O%nmf!#qBM'B6'.e>VKeu6SuZ_eWN+rr1f@*Wa6b*CPM_j]26*=E`Sbb,W-W`)r3[8[`kq$c/sZpB81Idk_[\sVhYll15Eg!9mp2.W!",h'&%-j\p4a*hHg_9L^-pBBLM:V-YDq4;*U1+a\iX5$Eqlc;LW8<C\4SPM,Z-*I;a^kNj;'#0i;R!V0%/K]c[3.*?.lp]I?WC;bVsK>mu?pm_9m,$<ohMTGOUbeOJ'F"W3Pu>b&7BV/85N#BXn8/8lKLq=VkRL8!'ZA]#9W=<)c@+`0/7%N0[Sr<DZnX>Mm,r5N-U3o/+4KBDr_i,Q@c<U?V,]:\[l7r-ppArrDQ;mSEf:Fm$En]Dhj40RrZ5^]'"bp[<T!^O(9R)nl.+cO6i%'E/daP#PFHHO%!LKi"GTT?B<AaWh>s)P,Nc5>k'#hP".&<I`t'25*tt41B^IPQ3R*_QCo'efU2e8O&AdJhV\uh/E++;uZj1r4`-uD855`r8<#^Ijg>FgYIY?oQe^WfY*JOR)O0n8Sn6\3^(sE=Ui+U5$c!fWlsI(9RbOFHXlia&BSK0NhPEHaCBgjWbE4nJ)<J?Qu>ZJ0:o\lDXPTDb&4??]]q7/*HBYWG$8X.md@-oa%7U][X<d:H9;tt_LE,o't)I8bo9VOO[D6k,PEF$?-bgFBi98]o1qAXV5/ou,j^(TZ"EXK'RGM22mpVU4F?h6Xm3(Err@a?rr=`)Z\Ij1MmNBsIk0BDhDFjbNL`AiRt#SSB?3[<Sk7AALG<#@1H:rsM2rf3'867!hBuu9Z?lN$4_Xi9T#Bt+kD/WW$]a+K?Z,dUpc[4JMAf`[h5'BW:4%<\jL>QJ>+/]U:'W(2\`a[/8nJIhaj=o#b5/aWWE\)"R]!B2;5HZ8@WqDqTKGkFP13PMgQc7f/>s#m%^@,Fp[<5"rr<@$`:(nTo;;M$=>&(YFF3J_Ye(R\nNDrI1"`Kg(-d(_b]h5.VanAn>n.Mi7ut^Lkk>kNL8(t'==N0_SL+rEBW;bJO7F?bh,plC:%Ohj^9c>dVgIHI[q=!**R@5C:Q)%(H`E.@YS?ti4\La0Vkg-/;s!T?btsKj'N)`Q"B81t$')Q!PBH:=WK9hNO]ALS.YLr:>a/]#![q&6mKp)t$iB\45;o@!jA5\)lf6;mmjT$e!R_q=isc1oO"QPf5u/!,kW06>\@O.Loh$Ka?15>$R00JGY%H]gM<j6?Vf7.&OEu[lmPYe^Y-Qir,>!`ia<Y[s'RNcY.=:33R[l(ij*f1@P!oc_l6L7!@X?30?.tN"o(&#cj4+698FY"8P(EVFdXS_irU8rkmr'jhGJAM#id\g]rrDI4O64.U!/:a(YPo%bMYF&Vnn%h$\'06lrrBr4jWFL&"]&3H"El0jJ")Z$=QVjBF%>]Ud=9DJjQ>7]O8)a_<qdt[Fn]]r:<*(j[JFn:pK;TubbXT3eBCmqa8GZ&g"?7iZh"!oC!^C+.(a,=/kT^jd!_`Gbu0['9c&P+hp2f"_t@[6o@Ua9fK2`Tp.j9)g_X6S,@pJ5gS`mIlQ\1X2HOp9g.f&cZ5MF,/S.X7rnPB!67S`!66qt/RRH[=MfIejO0WK"WaMg,L5%0`'_ILol<+"LP/OUndRL<,9\POO_WJf+II@#/o@*\L?*`c,`GbNIQd+p<79Zefh9kd`Ej*KaA&>&l'!<]Ye(31l:0*[XL02Z<(2bPS=*7#s`5/QkrZ)s?<rQML7/m69+-Uu=C66\/SF0Y)oXto-\n5-!Vp9,4b^FRH;S$OPaeBXjK!Y6nAY8_34&a-\AEDkWoZ:G_a0!(Kg.3)`&:`6br-7u)A=r[(Ik2,m]86H1gX#\pr3H+fe\;jm-ZDoUh+))MQItW=O4cN1X7s'=Nt"I;`5T(S]A4uGaD[SC%U,`2YCjjKmHFZb>(-tZ+Sk8_rb!12kAPfl%`[_7Xk7a-ra"osYaq,h2k=K%H^eas3gPq[2XXLb/PL;6U4SiJB54sK*EM)(b>-pKqi,f9]8n7*:QC1/C/%,ZF`CA7Bjh>`Hqu?39VING>Q*U>]ofMn;J5sHOo2/-nA+fLrrBmshS./4!:uZZ!4U1"$i^4E:ZCR;!!Q/3qe+f9nc!C?q.#3[!8Yn4^O,etqqKTPh='5"Gb<(Kro1TiC-VKCrr=h3rX:>:]gD`!Q7)XGVrqFd*M51'p`]1A_&]<N!&G^:rrC5YrrE&c'ApLjqu#bEmF!*#C]=AKrrB]]pP6ogfN\0:rrCfgraPm-ik4u7rppl]`9l1V!$9^8rmc.`oqfA!h#RHT_BqM6JNd.bio!f9!:Q9>hfUmX!"#:t!4#GiTDVf*^\?K!DeQk^rr@s08,h(prr@$f^&-V-rr=F]ju8(jC])Z]!1IPJDZ9]prr=R`@/$"0n#k9s4')IQF/u9e.r\EFj7s:sGK4)kmb).+<*=XaM9KN"=JJ[cZl(Ys/NF:a&LimJrrAC@b\VdL0:b<fqbqJ+Isl^"m/G/`47`i3`:RrfK6h+&3KDt>mX<he\0QI82FA-DOKHLKG^L45^/p,FnbC^>95E]l(V$phA@VQ';Qd0;R,^k_0W8uo\k/bShF2,*R24?_H[[R8hY(L85L$8)bC#>cB==GQDtm*uFCOa/QPX"^QS7pQ]^QpiCN3Kl-\f@!-*arQf]oH753!;SaBSH8dklb1W\U]!=c]2ib\t#]3Euebrr=IMaIpObW+rTCA39Ci0g08dBJL:H*F'>k?Zk<c*0e0RI)S\V.WibnD5dePoBoo5>`Tm8aK&9_.U+3%*@96kW&-;#:.<\4!3>tnpU3lm9?6V%q8N98[[533B?XU%c.[FAm)sK?A$'pWfADr)oj*X#m##]=T\oG<anFAe`R)%cO)\PCS0`#CO_N_%&OW\0q&Xnoq*"4s!V.RqjA%LK?n"/j+k;u$Q\*'AXA7uZUoiB*Fr_prWldth'@>0rb'_2T@1-!lYmYN):9GUa[kdi,/>D5A.+YN!hOZ^h8W'lAUeK'3l88k\gn1LZH`)ATFoMG]JUHV[!5ng:k;WD.rRYu(htr4FjTkc*T-uquAaM.[^ZK1jrrD/h?iGfSmsDcu0VA4b?^s@UW#m>#pWRP_HT1l4rrB?%q)SHTMY5dIqsF,2Z#;N"!#BC[rMqIK!;@79IeTiYr$!*Za^aK=r[\:\rrDN!TA9kS!5`9]k!f3=rrC!DZp4;GQe66+TCHgBrrCPb+8)<(pTfAM!")F"!4\1VPn3j2*sI/h4M04uHN%tmpA'c#J,!aU>lOf^WU1dES+$>@c+!]Q/9(Uhqmig&msd^>H[:#X^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-ZJJ+0q>q^%;UrrDhu*JOLn^?Q5TaFD'rJ*'2t@fHGHZb-5;pQ(6b8_\abDT%%SD#XM.TR6FHT7<*orOU2JC&\1mJ:'<U!8r"cT6GYO,Q>bgiHP8NDoY*@oD:W%K=:d[j5%M#g6WWU!4X_0pTsl"m+H`3p[<So:\[OXrP"'_UAk5PJ_csr'tZumTmt.!rn^*8O8f1h50Ns+hsl6j#kc79I9VL+=Ohoh`]nqHn+]nlrP"'_?%:gadXV00]=Zt8T.g/UMr<dt)LZ?"!5IPYn(j')!$>7urrA?A^\b:"hnAsurU&k9DYNUL4AY']rr@%iI-1G/_uB`"2u`7Dl5/r6ro+jl62pq?B?Cb`fm<jFp\`85^\kO`rrCF&rU6*Eb1q4PO5KH*5CbsA5#]p)61M-!8b$#*@Q/aZ(9H5W*OW2"(N[E]c8u<07%rpa`Mm\A:6cSeR%RkIM8%s\r4e[!@h[A,cNiHRDKi0;;KTSl*>=j]mL5n'VZVgnm@E4*M^=Qr,F);rB($&\.9d.[boBD'#^in3p@"+l]*f!POVXTeNc^Q*j%/1$5jj*0&5IAPqLQuRHhY:JSf`8pmDH<0p\"]4D4Kb-aPfVLa7!7sHP_n"<Vpp<9krjipDjuJfQsVL;5op_,g?@GC=T5SHYd3d-Jcl'.CWV25D@5HC<UA8dV`<=<ee'a<JN7HOd2ff;bo#,HtfG^:HHR+co#RI5/sFb-]C`^7e!^/(0,Kjb$+YZJlJSW^$T`epRsPD,9CNu5#D7Z26#N"3T-GhIV<>IejuZq:;cN:N``)DaWtmO!iu\2)io<CrrBoTA<(!dq;j/&P!pSfm#fC/#ED@4GP6A.UT#a,l>?mcO'q-O)rrq$*.hlq,P1g*T)J$]r6^#^0JA&Cpj`2ZrrCm4['.b.qhT%IrrE$=T,7M-pLWdtiVrnGT8<LIQIq8p)rJ@-%fPeZlu)RdIlpO%8l,E"L\[\E!9&LbTDTG98)BqhaD:e37IuT?!"D-8rrCsHJG'9Aa8C?iL]1E+J*t<@IeUn^'Y2ioS,Bnu!1_BQ0BVr5p:a0af3<kbds6A\<sXpComNabFj]5n2d0b_$L\HNHP<2pZnYDo0YL)tP%]FD8R-E9l#rZlpk/LbIQ2g2NOOPBbA?OR9<N:QM;o)QF75^"W_+hnbH7fRdEi?[eoXlj9N]<`"KX>1i-$1!YZ,$):+LD))a"W&XWd\cW1uCaJWKMPoSP6m]pdhSIeUD!=oSIZJ*#57h#WE/27GbZI!s$--:;Ug\agVDh:c'hBkFfD7[=C=bSKj)g"b+)i7e(?(F;CHe7,GWd^2uZ`f[fp4aS:;YFY[n%sR28d!&e<jB#5VljCBLB'S^V#5R##IjKYA"B/9/pEgD"P,HK2pB:rKYt[SJ.oI^*791t.Kh?d6K;kSMKR$09VJ*o%Uo9.uN*$^U`pOm.<q\"3n*f-!YPo6d\?K2Tq#c#bh7I#G6_<$oV[N#bEGaLn13BP9k-/"'QG4HGG`9'pW\S(`Tuc9ZUREVGQ$D'r_=g\)!1eRK(V"sZrrC-QrXQZ/.tl2XH5eSob#$6ed:BM-55sgCgjOSrkXnQB=\1YG)ibdQ&abX/\kB@bP"*UaaI(RL;g!20SI6qs*#3$D*rYFUrr@_g:i8CnndOfRB$RRY)8!17&!aL@>:&SW_tP0YC\B>D%_D2]j.H75-R;T9C*5^3,Yuo$T?.G,1L9pWp)Oq)Wr!gQ=]aK;\16B;q'K^KId[P^Q!T?:2ZEb)X`T"=M"1>noa'B$Z8Tq'=IW!cE_@@$WK>Y*&\b=<Dt+nImZ9Zl(]C&W4ZhHV5/&uLr^.4Irr=MBQ:%V8p:f,8ZIA4>jgf(da!KI7?H:]c82F/mf#tW_QK?Fj9p*@^U:+W_.?6fjQ)X'orY'Fg3r?)W+6@uHFqn=FB(rIgXR#YcGWjXIiccGY%?Xf.0tYJA@jB)e'hk%>#&>^lQ'h1FVEj!)NjR)@8Te$%2(_jDJuOnAN3,buNa`W("Zo\Zn=X4sOsq@d;9A\63;:%Xrr@b#jRKULald_TWj3<qfaP@2*g02s%7OPb245hdb@N0((EZ?sM`#!B;^ml,)R5;WWN8,SA3]RW9%kbEjklN%T!"@t])LFL25-k4U+#:W>+31:HA//Gh.<Q>68c8<F>"uYg8hQJ7b<_7!G^=_+HQt6R%"VcYkRU0)uP:PmENDhg]%6grr<T0!5$JLZ[)JHrrDHAh\!Wn'4_%BpM#odpTm*Ef"upd')qsYn*f-+6N7%=3e,B%raLBP@!lqn!8`XDIF,J$-6)qKT9p_qC%U<^mQ1s3ER\@b,<>c(/8.93HEVeloK2fVVm3kk]n\bagO4.iSQXU9g"Y8YLLbOO<,CC.^\@`paMV:`8[nDbf#C\O1O1=@`R<B"Z;X%V9)^;43dQ\+\TG^l;U"AE,Pqjum-^k*]>(ZK#<PSeFuI7mR=3c#2[*`7;o+=+@&R\YjQfMt$l)e8Z:.CgGi5KWC5M$#*)XA-Wc1qe_+.9a>tg.c4Z#qkd^@.ej&41R:g&SVkQ)su"o\>O8D;tGA,0_T4cK\W?p9'f5+?1ZNGP\a/<@kiXh[rsl!pSo\Y@@,[g)!6mL?poVLcRPNk1OJZ4]EIQ&$L)rX7nE_O\`TinepPQ9QE9gTj[6He-bkm`*2p;F$>#j\27!/XrHW@V[-DJWcJ%#\kS0#!dG,gE,Cj9*hIieh"a@<i3$t6DE'TdH"@u"6p-pHhY2W]>M)HrrC@ArY5A4n`+V:5bY:8*BhocO3fSPb,*$X;,_(QMrP<4VsLS5mC\BXe<KO`E:s#UC[nn`.tfK[Y87dQkGq3pW[DFtr-.`krcd0cR/$>I;4QscJ\8Rc1VFpOePehtlgBn]7D/B/rrB-\WX*..a&U\^<CMglTc'l\6A-nt$P3MWl;Mm"%1D13P*VD[+nl".%o&+L<)chdJYa6@<%%?bIjX%Nmf'u[B,sXWGL,itlE8%ZGl#XM/#E5ICjj48es;<YNt&J*G@1&=`i%UWeO_'d.-\44D\%l7+]k!YT!cuKgCO31rr?G>pIE(`M7`9,PngYHD;SQ-0=jOcm4)Ub)hVkn4g,W5Wc`7NH?aW\:EN0NOO@2`WGQ6Mp8'UPD<cE,;ThXpL.SI"VC<[eKLens$!gX36MKql1]2tkI=,Q#$iI-@*FX-KEHTeIqWK#^4]Tk"YHW'EY6Ta:q^Z^Z`luADb>i15r_Fl/)LP<AU"`FTW%3Ig9$1n1;3fR3@Q:"&YN9t"G438>Nk!k'@VkmXdFA+`Ykk8Hm7`7])3!?4CGj]_D]c<EffV]?En3TDR\dltD'`2p'bJRrONR+5qm1?'qX(nQ=R)Om;,G_=<5R'-9+7&hX;>tje.t=kV*@9WqYpH^<ZdGeQ.K<Frr<EUk\\l#g[f%N51WKZq!ioPbHU_!)g?/ZS(la$N5]H"$(AY1j>!rNY^'DdBe(?09U)q^4>MVQ)+><b#5$UGoDTG<eQM:#]!gbl_63\#$rP8d>h1iQ@R#_/3hhLe/!!r$-Dmr&lZ%(:]G2$60*LLd\5u^-*S47V;qb2K;p?$HrP]+h+d"'FBh#,gXU?bW@:DG+O+-h8^[S[]q]J[l5PV`&htuO49A.qs!/3+VfdLr$r[]ljqsCl=\,P(\!/iHkrml`%!-'K:qq_7$/?[^l]n?6U^R(R#n".\S4$-m<:Oq=9.JH=(h&F+Ii-)!RWPNt.fMH2EZ[7<ROJTp*lEM#MboKK!b)ZYClJNC">9C_ArrB<IVt0NUM7[t$o\,dYC>aOhoFs=1adh-GS5p".2D;#;Uff*$H"uWS-n&`Kb=s2)P";\g,6e."4fpX@9ftLI#rL,K'J\QdU.Jm\&i;%)#[m)E'hXV5cQ<&R9T@H1hu4<Grr<C3lAaKE<0`rRiO?\HcEDVn@asFN9s'fIhiGD0-.t;;`GIb+&9su=?Js+0@.7kQ3=;iN<BX<d`t^0oFLpDn1N!'GrrATJ_U%mt4[sYUT>o$5OO^t[C+33fOmB`Wh"A;*,E\s[BVP$pBm(OmUDJkj#-N>qnBU6S"NpdH,bNtBrCnj\11IL8S@%BRNTk,RC"\:bJ&'4).%f3A62V[Kh7\<Te\CM&>mLB0MuNe-TDT26._XJ!r$bSDaBPZ/nSGWerqZQep875,q"JI:m<)5)!4Y$2IeRfRamZV5a(0ZH?\'0fH1j/6g,gBhHpd09[s%AuqnI(-2Q#&l$aMM)0coB1=^6Y-,6oP@`;]gX.V=LQV!HK>m_f&)Q\P@i4(nA.r)2?4PBcJ#^U?&ha3MAZE,IepiPa`[3%6SoArL8!0pf)EVoRg=JB$Gc4G[IpF^!YP)e,P5/Zj_q=lG5TZ#m]OA<dceoKp.^].d45DJj^nms9EV%e.L<!5aT-iCJA6^E2TZ>J&kO`&N)*O*1.tn@In%\")_YP2D\1cJKSHVsZ!3Ht=sLDuB4oHi]X'olSVZeML.%SRL-:Yr<C6o76g\SQn49QEtQ.G51eQcDT!,5I%2C%?oEbB=bBQgN2Q?o2D`t:j*W@b-hfojA@Ks02FSr?RUjfWg.eJqkO$"dc0e+!A+(<NTmDhHASFV(K"0gpsT)&A&gM%]>4FHKp$r?U\<mM/cPfFJ+"'*hX';%'P%.CDZ7QR!91lgci3N!KC)ms?h*K\rN,75lW$`qHU%N1n=/>4E`^&;r($^<rrBgKZosm3jOsP5DU/$Rrr@e>mJd1DS%_&!CgZu0nDEfRDuIkXp[<4Qrr<E?q"_LEcX-Msral%!P%-R0icfQUG$\s'd6Sb[)!k#XajKem<Gm2NQ#(I;+1*p^;a@A"ofJVdX:D2pPPu7he9Th%dJ2,\;m4a8\$&,AAJX%BAa,p\-)7-Wf$eNmM4:Wu3MbCkj(k#k!/o*jYll#?>I5fSNXS[3QKqD,XB:n+j]4iRWT7jp!+m.*Cd5p8IeF\0_Ii<u^ZH4-c@;86o9ekQ%:pSF41[0f>LN.h\0.f<!';,E9:BZK5!kdQ0\d[GdT\A@i$XgK5&+?gT;.mM^QPDt:Z]pIYFC$cF*?QC.B,(jb.WeceCcgUSkMrS`i]`4`ktjiBKqDk5-s!g9N8;@5"IGgphjU.'n"kfE,MZ%Km=+b+E.WQ1C)8DENYan.+"+L&+ABLTD,]WZ$YBAqqo*ahnA8=rr<EGr`n40\b][2J!a#.@&l(FMrOFp0<ffKRgi.=fuQ3U4-`OZ[<LtS#+C[0lJ:bXGchYS*ZBIFeW&U@NhShA-i>BriSN\_Njn>XQT]\RWQAa55*I.t4$jp/:F8gh[E;RR@g0Hj`G(&k@r>F!`E%sm*'&XJF@At]J>9Jj;cV7Dk35^TR,H?AKH@BhmB/I'\^O8)mr+kGr;lZ]G)uQlJ"OKnhjscI(cpe#jR97Tl#2m".r4*%Vf[(-D/[+iYUfHklb[,qBX0dff(/6FN[Bs5m60bd%?P7:RVJo]7*eG(JPli4PKEa75FVTPa,cJ`+g[s1?Id^,D;X)`#E6Il:<qboV['TopBGs^6No>Zo\$N^X!fFk"p8nf&Z]U0N0E:uOeA71=JhWV[J-7G1QR1VX"!9g;+?\ue'uV^/L79f2"5c.7'T@4<Ym5[O5QXW\*f4NU%()&me#l&^A-s`,H1L_FnFKRe>_fW*i\#+D=p?)j5/\67b_,%p=uXgD>K]YaYqCcEl1UO1ph;=;PdiG7;E:rrrA3F#Mm"UHYkC,mJaler:aI6JY.8:loiOOh)*aegu$'T)/=3%H)gBj9iCaiV0Lsj8L`LJ1C2Zu17jOWNQ=ai%1RG;A<`fE:ar54KO/ME4\lr+,l$,E8J^IFrU32T!9JA'!-*R;k5PG!rrD4@rpKaMn*kQ#iYqVYrr@geaq+I(HO)P(r65)Rr3jfK!79U$mrQh;`W#pUZMnF-pn/]a5PQ7G)rAYC4oYNKKt_7#!90mRN;in85J2E%S!3h7h#@BQWH+X.K0R+tf*hQi1&h5a$1b_.!#G^7rr@G]<r8co!;K7f!<&(9I/a3+_bL.2^>!.E6M3;8=`Qb#Zp4GE:%-s)F8ci*fK1><0D!lr@m*c]mluT[T-X:PVn)ZmB5S3uSdiG7]/p$W6;[*@l*R\J4Pa^-k;t:'>$T?6-(8c3o[rPMb:>Cn@VPb0[r0m`:Zdr6'4Lfkb@@uiF)Mr.,A:rL^@7F>9_nY@]t$k-gmALeG#"j$EdQ4_+N[L#,a8"V1jYpB$'30HZ"Jt:]JHqJ2cskY2,H^4OG6oPpdm#Mc?X_d"/rc](Q7g5HeM9p'VCT/j1gb$cA;$/$5s4+]/QoJR)nSCl02P"P*<I<iiYCl!m`&JATQ;Ibp\H4;AeD:!m8GfBChXqU8.]k5:D\tY*P@=[cYr2U.Ul1TPDX$m#@Jq;GsU!VP:&_Vieo3G:8DeAMt+oj!sFY`hii;0WNoZWP7X"UgND'%j0d!hSAUT8dG=*/)u]i+9)<b5POsAO(!h7'`S0BB6<>9*M'tF!5Ca>qhNcFn``l"bA-MEba[M'ck$%$ci2oprbLEd@!q8>!9!G3YB;f%R=FVq+$DjXe+lN6!5VUahU-Z`r]eZLrr=Tk+8`UDp[<S2!/6MafmS?%5Q!2j5Pt9G^A\'3$82>YZEO%-rr@eE?iKtnGJA<^r*HTLo#1P.mTOu3^S0Pu]fhA3rU8p+nDF6*8+4e%5Q4H.n2Y*/l50!:ro-N:J,DAi^]+:]p.*a[MZ3[EX'>T(/[?JqK&6Ipk]cK6:LeU`HhY:%pV2(%e,BtO=VlA`!&.432tEnH8!.Z5]PnUJjNNjR'%OtY^"M7JNqE]TPN8R/3n(<67VJg`M9&T>.IjpuBDDO,VeCIdraYop-;);&DCeLS<pQZKl4^T&0=1D29X:b-Y9Hr:W30;bM'HM>>#.KcF0/6pB(o=qqRhubeSoI$[<7\ipM8[(p`t4\[I=#Cd[Paa-i&VsYl=]m^J*[%B&29G\?h_`\tuB_WMoA$m<ZA#`9[B0OKOV8W?d7Dm>]B)W2;<p1b_6'V!;)-<W<%_3-T#TO-)X4rrAEF>Z!d6iRk]"T3Q#8BZr<`EoAJtGCIuX<Ri?nX2h`SRD%!B+a#+kUD@!3ZEAYr'4Q!OIrj&:1=JedZ<r.%11u>"2BpSi,f'E[62c6/h2VF7_Fskbf(?0:U;6L5k_?*3rUUE+],SI?R68$GD8B/[..T+cQHY73>>W(U=%e^OfX3a)B6TW:)<[6tjXR/Eq#p>t:KmZ)`HESK3T"uWL[6&Ag6kS"JWa9Fpj.8*fir;D.V9`:LasqJ]\-CiRR6$ac<BX$IHtVM8[d'I9:>@9;qAQ<bENJ0nS2RU$m@5e^TRS:T76N+]u*l74T>Duft.1`F_bf"+1F1)>>eD:iT]TB:N:b0K;L"cHH_@*=V\-tE_AGrLe>o@'J`5m7b+3bPlmt7iCj&D4ftZ&h1;-MPjq5ZTn9*6-cUtRi`%L,=U]G2<OuL.<m>3SZD;C.W\R2FrJtd20BlZ>+96fjqlETIITQfeh#@AXq"O5mchL^VhV>C(+6B?6F-p5+B;G&855j6jPO)V`E=hPCQ$5pa?OKe0%(+O:h"L$e==VY%@l.+[(-882^f.iK=8XM.&XlD._VNb,`oV5HB901^Hq%o=>,5ZgbuRhe`_!GA9,s&28!VBX0m+RQ9Sk$o7km=59LaKa8N#EQFEaNNX[t*m5"7AiTTDE?OsDsJk=PZErU4t!NnrC9T-=&D@!9l9rU$obmnN50[tq$:=e1=NNh6DFMZ+PcoXG[0`t]P3.=n@Z3bk`in^H%K-B-F"$rTR9]/Xp4!+pA'Dfs(Khq^6%G2DNMSE:b452++q>)G=[<:h8F:=*I0/K"X"?&F3])<`A;C+*Uk%'dh9<!uY_FEQ*;eBlGSe?VQ@-\SHa\j_e*qABMA9o>MJ*rYOs+6DaN`o]ME@imN_3/iP$=!'Hu-BQhhC?b&_k'Cm6ZtX7j.[jKdL.8)?L#[+hP`ZhXLa1c[*t^#:Z9RiQT9;(!qRTkq8PaE/F]<Jq<E$ucmE>\H.Sg/Z:1BYM7KE9f83DOk+i6"DB]VjJ_#=95.R>%C&3Pt4,N$20J)PBso/+4KBDr_i,Q@c<U?V,\htU-rr-ppArrDQ;mSEf:Fm$DC]Dhj40RrZ5^]'"bp[<T!^O(9R)nl.+cP*F1mPrFOrZD*BrrBpZhHoj_fmi`0eS"k%S+lp_J>7,]"CV60RC_;Hg8"ZJH22mcgUI)1G+tV/rrAU^ntl-_h\]U`Do@#-f'$:sd3S?_AFN`:I]*!U\p(@!/1iJ83+r-DP'*A[gZGL>7sX'mJTS@'gP>CLQ5th[bPh_>cY?s*.XjVAE*ZHrETO'\[hiB]_XHjRjmB-c'T3[?F'-%)3JfQ1'q/7eM0,Af^0QO`2XK1@[>;j?OjTRLV3-Hi8kEep$QHS0aHn!18&'E.b@>]S?hSZa_000jmsV+JqX\f;l1YD;h`F>I@^circ=#q1'i8JHH\3&5<K"!"a\Hu8A!N6ReGIu&C[W:?]sc3>H>MunJ_`CT2i`eJLYVcV/OPl?AFX`Z-]9-8QD'mr)Oa0LlLHHj\*)Di%.Mb7PJJek5p?PoBUrHg67s-]8Q)@5IJ_lT^[RX`l7AS!kPfFg/8\rN6QM8cq(H#>?UI[*>nqJs?d,ST74i'k<BJ;+9eB$O/&rhi,GP;H#MuJqaZc_n\,!%R0`'KQLaqWRiU3/79"J/8W2?SlW;.BiQ3rLpib+-^-AfVbW@H%V"G?%\fE=,'h(5?W\)3HY5m/1-O?jit8&'Chrr@`hltuFn]"afN_;FDV6*t^fT;49TMl%fe>_Y:lpk3bdf;>U<DXWR;*;)/qN5OeeY=(`R-3Vgi:+@c.l_KIug.^KRo7kurUZ(t=1AJid_^Td.=#\\j9ZLAZ]IN.054'NK]lR.m)kUjjZV7`.r0HI0aPhMDRGee._c#b1gW79mq1`],m)3dm'?N`7;L-qs<McO/'1*!d<TU!aMq[56k^E?bnsq<%Zf?PVSsR@mLZs9Ql^e%UdeTsr5'eit_sWIc_.)WkJL6\PFA#\49fCAC@bJs_q#$j`f44)Ci2MG[OjS?%lX'AN^>S=)GAhW5ASh=sf%DTj3EZ#n4#oV^F>WR,Z91.fW0S;Zp.C12a&P]9[.RC^.n):/,-lcCP9WG#8sRnkE)0$g*);YLK`kY;/jY?Gqb#FN4:i%<HdKh4'/?#omVhktGOn;ZRr:$>gcK_!ok2ONjo[i#aAQTR\]c[1k<D;bij0JLXT[/g3@nK/L8$]-l62;LRO;0+.R?+rrr=>rSi8V+iP'>EE7kR<^)o#5IS=;B=^5ND4ao=;NN`.FeQ#R/%"37LP1%q.f$_^H74`9&aVtF^5mQ%&Y[&O34,QS^>ooUjkifjFdBaO'XK84P<X.KB#l!dsfDI(%YPUicH@IjqK-/BcY;T*ukNbYo?"J`V`lC@6;p3ga7@)%ojYiF`c:&D_Kl5Z/b^s<o1<co?nF`k?/5$gerr>)#V7qC&rr=`+Mr2a6B^M7ihTC_^AE.m5UPY_!pO?OOejE`Po(b8mU;ie?lMAJnTTVRY[Q^M`KOG"cqZTG&EoHat&N#a2WR@P4Yk-="#)V3f:V*<<.t@4>hnAFon[J=^Hk,s^eJKq"l$nr20:LV*N'0(&^E&d0*NQUBQHYM&VYc<1rrC`_gpIpUft#=D79jh."`t=cDQOjL'TpK6&+n2mDi4MhYd&V9f%oN?q(*:O*=bE9O!VDW=?XX4)F]G+Nnp1G.pl#:gR1)OB3=8QVBd(J8f'uf@60$*LWNI@<@11tj)bc2ViEcH]rn\0llINPCdA0\]nu\<o1.eIaUZ,QDQ`d5nh6p<YC1O?05P6I)[Y'Lk68S$C=$l+N85fela"-CY9AUgU0=,$<?4aE<6J-(iZV9_RYlSEj/mc%F;Jucc/Z(?QahA5ZF<>2d,?`A`u2.k7PAhA'dhq0-O)$"X75csGhFF,CddSG;,&=CXe8Foq4ZCeQRe&uRX090l<:`tQ8Y9_k"33p;W0JiAX;DN\-D!bCQEr=UAk5k.5Ut_8H)RQpgAIarrD!JmpCCQrr>'_qg?H"^\fqf/q<@ip5cG1IK';fq6p;'jc1G_!-^;lrU8romr)!3GJAM#idW3!qhk"@W;ckVrrDu?J+t_%hXq9U=J,<dT:LK,G'qa<!8rXPqZM)'r60T0rr=XWrrDr':O`&In+3X\!4PLK0sCLRrpg!ghB+9:@;k:0rr?s:!;VQQ!/gC$rrDr?=*kUi?i57RhtpF)J(Bq[mrS[3!!ntl!3ub'?2jn_JQ)RK^0dpheDL0NJ,[PW^45Z]VZ-YRD6^dKqO@I8\KC]P+8s-Tp[<7(f,^DLrr<Aerr@a!I#kH+'9C:Q%u/suAF+X?+(3RUno\/L"4k0=^G3F*ZaYB-M\SlJAm17mq\'o$e'(<X*47W15Bfr.8kh:0QgEPq9DkL`!1_)M<;-8:G2E#Wnk$<M?8HcBMliTZMV4Pe\u>Ach:t!dC)A7qYGUWfha]!q+H[nn"Y\Y)Yt91-Yea/J,CW^_j_1o%D`]6'(rhY;bdB/rTgdU3cDDqraBP,T4o=+3)#jT*T+&$;,*T>&h^s:6<V>0j**EVCo+u^qJ_F%"9`V2RTm$On!u<+<k?5HlbOr?XW9HK>r,Ajo2#G^^^UdUDBN8!O=&6CPm2_:-'%9JbSL,4aS.m+T-W_oO5/,#_b@90;:q8%X!<@tjnt3id(C+<2:Xf5iqqA[BkK/1)q-C5)4%nUXD/>g.l^D\@\TUp??GF_#T%fEGD51EWg$Ei6;O[6cX%PHCMKi;sC:\+gW2Ge\-&P2hFXM;(7t#5W\'IcerNk0=3ZRR#D)UM0=W$_>B?b;iYHuC!_-IT<</;hMaXh#^Sf&/CS`5bPZI)b$A>(jp'en1R,a'f3%N[h[9r6>ni7S$!";"'+HhY2_J!JXa`Wbt'rr<T0!1_sD]D&>W_;G-GCZPg#*M4`EpLW\2gY_TYo)A^\gFrR,6[SR@h`mK(rK&\X+8f(KP2H0!2m9oar`js+./]V8!6'9PO8\eLQe8d9rr@s8>Q30<rrDqS0>Dka$iU_Irr?T7o7R&C('CaipYAX5Kn&&:?h5K@:B(=R=kXtpa33g.l;.2aAcDbq2@oZ2IJ_\Krr@aMjVObCSqlmWq'j(WEgY^Ug:^YZZRM!l'_F02`DF5so)lA/pLI+\,>CCPPhXr"G@Kh_JI]:n_Dp+0QI"`t>WUL4U3n9TNRpg/8(X+[MpiEkH,usqSiMR0I"pN?YBa$n,2;OdYo#X?6SlZY<N;hjC*)*@&\c_=D>](GQBjRX#&+(NrmN;n1uUsdOuZLrr("MKq?(kiEqKreD><j<9_PAhp=@i])B+G+(Kt`o\%Zg@%Si:)Z-n+9gGpgU&6e?H'#f&98C"'AkMFnh+0k\:ZZ.Fdl](SD\,Hk.l"+,>bM9UEd>Tg2^pR-[pXi*lg0cD0Qq8=QeqW4G@nf*d2-P8SC*9L:K<CeJk"@DX^8T_?,E_HOl:Wr5!"&f,?C3D.6V%'XX0]L3rgg)KhCGRT^MrP@A=Xr>gf_Nb9oA5)NRW/Emdn%?o6CU]ITZ(P@T+QO#H_#85lo(,!&f=_\A+G2rr<;hZCBnQ.F`78%>"KBO)7`Y=i8m[5IQ<!@S<9k3kKq*l7u@Zd-F@uj4:WN9i@c+-D,Tm'0J2E4\+?HQCH)B?aLPDD)B7.-^VtYK)U`j\A,e*]5Mk&m9/o7rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"a=klCjdGW@q3c(/J['Z2C`MU:gO3YD14-??dG[%@n^s#bo6G^miTmLVX4c0r4\^<EcmVa2bjh\*!"V99LW](>+!/.3D=+7/r^-!GT'O:1SBYr$DU[W)<oVi];Io>4,99c@[2X<7NgcpgPsU.dR8i_\rNg*T(qfcC_j#`8Nh/_'+HoG.QY"T:0fg*Brr?DTp2%<]WV/hKoab'pB3F800\p`t*H/4ZT<Ic"GoH%g<\%^'f%@t.rMbdUb@N'$a^lqME&`/gSt_r^-_6L7N6]A(pTCq?g$5`SfUZBTW92-:hRD1M@ps4*I77^J6@'*IZga2@HNQbqI<;gHf1enqa$bnDcLT+WZa!t8[jkQpB^)Lpl-uLCYX;+dQ=_WU&Zej/AgNgt:bGJg^O$SVXM*fkmrb8loD(h&(\f01]smQ"j&]CO*M;(LiJl/mHQ,&3m#ChQW3Z%WQ[$nrbe/&-4jBS?i\<#^\T..5X\B4@)D@(@6<Dhjq!\-p^+T=cm2j(2:7'X:ICm8+3fbdW]Q0;7bB7\0CkXc_EDpbFJjG@?j_Jl.#$f\&8.75H<>l%*OmRc;[W)"fb*qT&GD`9&?"\>PBgW1Q'/0_;Z7Y,Ri-Y45I)Gq\?NpFQpTIJBOSLEXH\ZihcU[#731d\+ik$FaD&Oro%bfbs]CQUT<Y'$0Z'^KV;smnDZSPRu,=mgS@Sd7&mu\^8lf.BUIaRK\jR/"mQeYgBXD%-')`oK7]XLr!VT7.oG83m;a/&LS-<?$H?=M/Z]S+NKQ;aI45T]lggGjT"AMnUY43LPlW3A>/1dONMR?SDFeJcjTnicm+R!Ulchu3H.BD!YCMYJjPrr=r=#Pj&GcWTZU8'5/aa`[kmGjfCMaPWD%5!llfkPLh1,TANcSuLG.$]pjFef$q[J#$M$P.n^1?XFUqa5ju%q/`n9<aQs*Heu)PfBt6654[N0q!,G]mk:/M4Bl^0.lITn<QWC>i)(<a/a\.ZCuOV6dq7O9Fi`&hbq-k[R97rXb!\qc-.VtsO+-d\r6b9GnJh:XFe(HiI(SW[\(eMr(Kj\$gGN"&AT1k_AS*FM8pZH1aklo,^CRq7]k(/^`%"fNZ8a@4,`\lbU/7H"c]VWL5!OG*fhh#WOF:u#ll6`L7+Kp]lK#+ekP!IrU*YP1L=tA7>.f$.#?*ZQJmhGOO]8DsPGF!kqj3Sc@l&5dRjUcJ<,,&q>>e$+&Rs,3)-LGrgt7-oc2IOq(&n9\+Wnjt@&V%3]09cSm7OIhnS,F"4njb<VXO76e1E2t2dA4>YbK!sM-bA+d#*4j5TeferrCD/^B;DPcps`()&<F&rrBftCrb8^nUY<DUrrj<*LtTkC*Q[fd[H.F&!L,Gm32If[cNDB14g_(N'DX&0<OW>_10MVp\t48IeRj^!!5BMT>C!XT==Pi'B/rk9Z,JIg\)U<?%KWYS"k.F?0T'&!5$L;Hn`iYpMOUq/2Xm41:7W-,mmMr`q)8C!LT'[^D-YTr*oG&M9]U[4S?X>6E>6!NK88N)XQU9EpcZHr#r)p*&<per_"C(_+=7j1j&Aj:J-Tk'oWc$[72*R@PA*4@d+""@"NZ-8L9[@*j$@;=(>gkGSV:t4o<r?[f6>l=2B@Tq6AQ/bU9[,cZ&"F;Y>c;YO^F0HW'Q,r5@Rap"a%@h!F8QfpLRf2Unp8I,)fL;EE<U,Rs.)YWnK+`SSo90=8GumgYPKaEO5sXP-\OGB1O4[oEVnP,Dh`k1d'lgS;p/JZBKJEl(?a9DuL"a&BEcom(4lF47a3C"a>[@6D]4C!GWa-#jT4rr<YW^O*9tB2dRb!5El^rr@hHat)Db_%-/*^QKZW]$G?^rn6`KDL3&Lg"`cADp@*,Q_E3H`f#:Wj/'T[D"^X:M/&$nO,@L`BOb`'Htkt\^<'a&J*$@nGN-YVp'5V[^<4Xdh>Q$VH!1[;PcrqJX)M!J.C369Rrm^($taE.>E>F4k,AtY@>tVmcn(uRC`'jlLVq\Bf2,DY<Af["41+TO(eH-DJ4UcDD]ldshn>O%Oae<2-fr*?DSCl$,M!f@\%7cLe&;OMft4DQBkZXpRR'(@:E*Y04Vh[KD@B61'2`<1eMOfD):V;T1i`T3_flVbol#?Qp3Wh:QXjM$#@MFO@uE"L1XJ]>4HBl,BksZIWMQK5i\K!s!@9U?*7.^6aofU,3!\37FTigYRS#X;Gj;9)!'F/;K4B%8+GNBbaCQNGj<&jFY3dn?,Q%9ue*dS:1tZ/uFkB[92F4qFX1V^rI'ejV7Li&E/ZD7T`[q8m*HR-C?nY>Naf%0`iB6#@\fJ`"WA2*4<K12EX#iXscXkk7:.ZZIeMPnsIForI)[9Q?WNbM_Dfdu)*Ng^Z'X)&tX2&K]Ll_3F&W*mp!6BBa!$?[aGobB''B7>dr%`3PrrBgFl>QAqQY,o??VtsCh;'$JDB)^%l)am1gmrM;`bp09?7j]%9=M2g%i,nonYMZmIiPQTmMaE`-fTnMp92L@pmJ_eI%TU>D9\-KWO?+T3M"'V*P'c^D7c4hfW$LY(.(.M&7R.JXUU?HQ]a=M8Be0e=4Q97e[Vg@ZbcY$HrTSBFHT2e`CfY_#dPre!0*[ZcQI;thUN\X^)_;C^tsaurr<s$1i7W+cKZF@P2+`,%L4Sr[g)<(V68YOK-@esZ:UVBq$`j(V.t&h3M]Z<Alt=MW!WOuq=3(sY>kF#lC8qhFLD[cDY<_ZXNfAVYuUV4[c+3;Vf:ato6EiRVJ`QG,<2;?>9e[h&:j"L!!g0(]Nl9oME2(Mg+$3n7RUr3;@K_V3A2U5S%Bcg^O*-0SfdHnhrT@c_`J)Pgg/+P)6K7])hG!CFS<18DYie4gq18aOMr5HmDLS?@q"dfe&A./b#RDsb=`Oh`q<%GEMAZs!0nYK45gFf^"luHSWD@t/[sCN@gUG!cEl:@><b!T=qo>IkOIjR7r%0A9U8b_W5h&KLkq$N6q(-=`lZug\_='dOeSn'Gq*MSBI&n\f9JU7A:O<IV7?BVhn>8VYQ"S//H/NarR4?Kq\("@Dn^\G3d;mdG43LX_*0HMC#u=bBV)Q6Z!DdgKc<fec=:+:Y,dWgVpk_)rrA-Fo)A]ccI:r8KcbJ]Vq\"%-8VlQG:bBS5mtpedksVCT\<PR:=@G3;/6nboX3FPCjg0/KRueI+^&R\PuZ6IYdq1#=<t<#qQGABYpWEA+'S:i=mW;\l.qh_le\l3X:66'ffLj)_"?8r]n<!e.B"YiP"DN^%.*EQ43K16cKriqNP>)[?gPM,fir6pHL#HYG)jYspo8]gg"Ub-RN-Jq(J53mQC/cSOFYPXRG".eM_c+oQ+]%44WQXa[':kjn0!`>UD?6`oM@^JfbF2^r1^n5rr=Td^LlXm*qc,`fGQ=!`pJ.KqjTV!)tSM2:5<I^B'V,_dmLdSfpK%H90V=7/C`Z;PW0.D<O#g(S,C"70)R$:Deu>lI?g/QFe+4VK:q$UAN,q?h+LsH[qEh4@ZhT&*`jPM7L=,,Q8&LqW!9tuApc5a_sR/rHsJhLeOph)??rEt+tc[m/%Ae$&(BFLfnZo5mJd1D]nN$5dTolD6`Kh37e_AT`V(ZXp0J57\\9t.Aa<dFB<^u%%8!CbUD[-!P,+6jWbCLOC3ed0)5C8me^P.am,#)$S]S+F7p#D-gS*I#$[Q:C_esn3P%pBJo!mp0MIQdQ;,9hf"33MQ,]Z7'ElT@S,:`a^HFc^`l=m3^i`YNG&B?V'I4g2*@T8(%Mh23WqtId@pL!hCg\F&$/F@mn&P)D9@Un^NH"lu\eF)U*bSDWFfp84]UO6mKjgh1A2.3*-A85Y\Mm52fRPWjjSfd(SQc`=h1%a;V[AbW$B86_Cm+<dBF:-79+f(TKm@D:eGgIB34_2lH0#ZP0*1^NGh:\'6&?.c^*EX`)i211aP2GT1p[<;dn2'lIr$),D]0e6ZINnEU+0Xuh9QY!^p\%@o-+eLcI=6`1P]:ShpUKLho5ipU-^EeG),0\TRTX0FJsJ<=/S"e\'n-\kAb]WAZ5=[E]kNM\FZIC<?-TtHC9)O_p>%rH=m=Bq\oSP8jQ3)5Q:?+tTkJ*^OkHI[)46[i)fO_T0f3"T7"EBt1sB-,M7!4DP=Sj!Jo29*5s,2:hTfJ;p!1GAm>JRP_mHjqg[#unhcMr<[CiqCn&/(9p<Mg9jPac&nQDAO7N(EjW9PRE<RBBK_TW#b4*YT/WRs::4gI#lh8=-tT=T#b=C&tU[gkTk.tu5WX(*ka:h4S=OipI!9embiPh=WH&.c6Qi.e*H.I&+;GU>n?=J\jaaG_[mlG/,WHhY3f\**Z7&,AA,*Rg;/=Bm5prj'T*W[+NuAo'Zs=n]9KaXiSlEDP4+7t'fZVd4UKB?AJr;uug./afh;:KR,Ugf`A/`]"djRjsT0B::uo[<jGtK#d2$Etndpc+gi2CC9@2=_hTSJ-WFqh.*kSOebCJVcG(!TrYhAF*fR/3Ma.\m!\cahtT53!"&/o<o3m9mb[@!Rcp8rlgB2!,>Ya0B=W5XGHnV@goP79.?7>F@HusIli"Sg8EPCC6AGqE?Oj@dR0OeWkJeV*+7Nq&DX55a(L2)o?@/t3%V<Lqm`+%-:#hb]e<lgL^;ON],c'.=N2!,-U99h%%9.Y6M%jssh\!0&mM9?5V5#eG8'H*5;S;QD[C%3`&>T7*[42A&fAF9jO8LT%rl>c4O8^a82u`W%de@$3n>6`n,n>\0!6'\Jrr@JUq=^-ATD5_P^[5]!pCaC]^#A`Brr<@0r`+FmIN*YXq'3ZErr=3V\"@Yf9).#m4c+aES\gc]SY"]oL"#ohH#D@.UTE1;/]!:?b%EMo0W1\f;o8`H;ADG+nbc_m7/m5iH]-pN`_PXOP^U.Rj6U*&l$`R3]CB!P`*,=9Q/'!`Y;ZC?g_EIX;1Yjm:dJBNaiM=;C=o;<1ot+NkH$mRD9D3G,/.Wj'%LJ?.VD<;[)DO]9,+\>N,7bsh!c-]q"O6(8c1dI3UoVt5?El:plX"::StQ_eVTL6_h23K95s=C_F+%]S)2oGEE?a2L@`VX:]"!gAF$7kJcHsMUe7R=1ZQNq%Ya\SZ,^/JJ*U>E>]#<I(:te,/619_o@Xk>_RVhQ\MEh\%E#_3.1bgAe[8>g;#qY_@g\kr`aU[4C4EY2;FO4foe9%FaO[f1V/k#,p>YF1"-9@pHe-7:(9RT:DR/Ijr*TH)rrCu"q,QjMrrD"MTCtV-;?$WSA[-aZchFoU+)ClVa1Fe?!,JTarP?SPpTQILFoMHY>X+Lob27gn$[teC<?K:C%K"nP*VuP93s-;+]64The'@B@`O70MRC]f!a_a/k?PQ@uX.>*%Nk1fAPhI7G*l@pWLYp2-i88p0?MN:2>LK.Q.<f-,o`i:hqmM7\fJ-4\17?A+&sBjS3mq'e10Fr$C?d*SA#H>`&/ua!EA2fd[rOHU<II3bM5mLgVk%=tdi6CSC<gq.Cs!&K5Y&S9g=P;m^u'tjbPSCfl@4W',II;kC"Lj5=)KIl"!NudHdaE7PK-=^h`L"@<os(9n]4TS<3&^g)X<$OMH5V*@Z&5[PN/:SDianu'/j(]+-4*JJEs9?<7'0-,fbeRr:]3SVccn)rR&24'fc`B\E`>0Gnq0sWK^>VP_;OKVq?ue_rEGXk*m5['eDb)qDC*mYe?K>Ub+.!/o@PV%L%X&H].KRi,?W-jt"mp]`I]1B4\Qm=AeO'+(8+,E8/-Km$b<;4*#s2N5X;;cI9npEfCJAH\/5#'.Jd]K$$]b(d:`C<p=Oi4`:R(GK/IBh"r:fEoQh8=PS)Yc0_Nbc=,rm<)aS[,ClnhY%ZgmbK^N.:E(&PJj?eJHp%[SOATP_BrT%M0L_9uO-23>Vd)ot^iRK^n(u!DMn^-UJ)SF7Fk=X)K>:Q*I\H&.DG(YKYW49.B62YaW,gSh[cX`QUH>t91)Z%'9:4"(a;T>pQ!>^\;uj5fmZd%`Nh'+TqHKt>2-<&VfT]CC)f$0kQ,r+QB^'='faQ\799dV!e`:KRjDo<$Bk1ZT"WRLFN-tj^/rg8G,Vd`r.kF6:neDT#+hP9tCU9Y4p[<2?rr<DPq+\)>-i$F(hOiS*bWb(Drr=X[`lRG9K7V.#VegBj/^&q:D:@-17*cjY8$aX&AMaro)8.Y4/!"i^[o675ceH,+T2p=Bh0jR9U;pki2h17DZ`s.p._$b$NGoc:G5TX'jecWm*B)_;gkI5R;g:&4e;Q[tJrK&dN&5lrH=p6@>a2JA6B,KQa!0$T4hp.+LfjWoQf#KGJ+udb`(9kIrr=JI!/d79+c?78^3b?F^WBg(njLi*<,Q%28mTnsLF5dhH<d?(lTah:)PT-rUmTRI#.Oj>q*4e*:QD'jqk?"I>n>TUNl&WAFDj<U@]5VNfrG<u'ch*Bl@QV[ZG2(QV*eirU*5&&JEO3-T>L<Q2Bo_EWJg6.r"CA^V*MrfdD;Ler"n8(h:K7qp8n#WIeW;[p[<*;W+`JY<LDR,*A0]"OJSnLYFr%rMQViJMQS=YWfFBNFHR!">*pRGOuHE37Nd9n]G4DQe[3j@Fd2AqdFH&b/R9Z%;9qs:9g!8,o^rbfY8#>X':!ZI<KrS6^%=Qt<IeXg6R`"e#dFLR#UA6?l](HWrXtXsT0>MYr1@FrF^J\O2Ffc-4aq0bI"(EZZaMGt6D]<-;aI^u-3JR2rM^;KRS4tdaope,!0U&:G5(PJra%aq].:@D)\[Mi?"Qu[C@YJeV;;;lm<XZ#LbCV<g<AQ#-78m;*)klBU8;15&1!l]>4/rTos6L7RX-l4=ji1W'IAgiXA4qSA,Hldrr<RYpL$5/YPC8-&,oW:]'K>Cop0Y0^%^q9LMuXQbhjAoEURc5\aXjtk/gHZB9OQA(>?W8iiaP-M\D)j,t*S/9I+<3.W#)+IkKW:*sU=[=4"Q0-][!:Y8p>oh##]EmVKo*gtB>G*Drr8a3+(?&`I_oOjt$g7mTR5ZT>(I3CG@kKA-*K^#V0,G=cCCP>k1+P>*5OC'mTS#b_/3<rW/lIeMmQT?8\B^IS4SllY@'f0*cVE??WV5:+r"D<&=0]-Dc9Yk\Xoc_'WLN0%l"Q?oHD:bG(P@p!FWC&X6KpG];U!12<VhQcl0]7+#OrKW_ipR_,\h6m-<EmMD-<IR!3VgHVLgeS^?XNJe=U_RojU,WiUrJQ$jRr%'J1=KjnVfg)11sISkH'qda)p1QBjsARW"-7p)H971ep.'OR%r-3!An,R34`T9UDn\9)YV?i[)XKUf=(HJ,fZJ%/f8ZZN@csT0@d5JJ3JrWUU7PKMJXAQ9Y+UD9fXhN-p9.hA^9?D#F(BH4A8L)JYd\L6T!GC=4au)@(eX2/Sth%SL0,s>Au`g\AOW%(8Ra4g(bc3L`Dn`PPgqU5$=4(<-Dm>$17!Z>g*m^kONL0M(C&pW]p8TtJR?TYicjtBl]'rT*t^C`CLM%Mq7WE)[k9a$^%Z^HW3"f.K#DN7Xc"F:1AQgm3)1h+9co*;=LB;h3gc'8r)EH2d!lFHG2h/(+*P@kC@.SB\XReTW:G;-E,M(Y1TcSUiJgNRRu8GPWi(pQIP)?)UF^Uef"!'8iNQG>$kh$!+_Y;QD`ipK9//198FNQ[EX%aJ%R'^BEW0?QaOBs'Ikn^]HQ2$q8^pZ4+iVl<?b6*CF(K[dZ0SZ^l8(edVqb8h`h.'c=YWm4$oF12EHsU&8pY`]iK5S@`'M_8T?@&iYK\'?hEB!3P/5ejL7]C?Qa*l>gI$6d;,Pf2=t"G*;)GdWb4IOV*-Cc5-u3FmL(oM(=BELMB"!F%4XZi8OG^.`545"3Jo[kBTuu4PFH-BE@K<XmO+-h1(dIddkOP%;bMfMrV+8]-g;MpKerq2_]+a6G>OC'W6dhU8Jk_T>[V"NlV_HOM74E6klf1)-b)D$!)?0[Cr:gX06QK1;B()l%!'uNr;poO]iS/JaLlMJ^*t1rRn9]429*pUYRUE1PBKo.D.a";r[_j=ar(<e^=^mu5ZiS2L`>hc(j7'tD^$HX,_rG)mr']eoU!Ol#]%[>:rB[\3Y(ph0]tE#)kpW/QOfHUdCMNECMVOeE23uDH/#B2EXfe\'X/VOSdR_F7[e/HNFa(m_]%c%8dp"UCY^6%Z7o^TDD;l"0[.MUK=[#0`VP:CA;d5I-=4^MQaXm*B;pA/rN`k2![B0lA*\s$2.L6ZUQ4QH(--.!lZP(JbfpR[BP"@k9m%A`0r_[#+rYk^1mOstk"4hgSCNo5pj*M.IfmBVCfc0O(j)YntUY)&_[.ff,Rq$F#Z5\9)fa[2Rkc,kB>'QL-36Y6bNS-mLkg/A`nTX#[H$1j^cDT>uHl$SlV&o&thO2OBjgqd?=W2/I]C?j+EMYi409rTVA'J?@_:))4#Z/Hq@neAj93si!iUM13XK<4!a'2ZPX[J.2dOU33d\]hcOkCOMZ%Kh-qKqtOI,Y'%?NpH0R&=G:?Yb%ilTN/"2m5nbA]49@7h+,jo4:k[W+O>k\Km35*OPFjRN/(B[5(=RTd4$@:%Xp%pW;=Sp$m7g#4^?8o=d+`?ZYXQ\"e6YV-/i8>H;U05tr\(/B]<gGRU\X/TEcV<UV]RYg`7)hm3,l&"K5[V^"t.9h;j'AY*ReNFGNqM:=J_IXV+LR!Ulchu3H.BC(-0(%>S5^34BYk!QO;cZ%8/[,$!Zfp9nOWOjC(<oIe/\%^IdB5T.Cf_'OS[Z*>ui+a;Z<23HMNjJi+rK=k!r4]ltm/I'MR?*b<*L2tfn(dSJI_R8AADUOjV].Kgk/'d#Et4[KUFR\KKN)EXA5KYk7`SE[\b<iLfu(XnP<0dHN0LFh4N;Z(P;I_94qd!$F>iu8n)!EKg!o`q!:Se(f2<oC'jV6ReNk3m/O^qK:t8NAf#![a4>/94FX3(!;:S.>Giae58DFDI#RB2nWcb>=W24^0,cQB!GES8;Bkh-\UM/?Fl<nl"VO[fp,Xtj)Ylk[-U+Q`4>S4dpo>^u9KDn(5m_=2NIk,Gl?csN%fsi\j]m64%(uF,kD1&ehLH4!+f7#nY]4Y%(kjU?+c+LAcR;o9##2uQj[,s61\1S(fYtOk]n7Ud:_H_Q``Var63F/OOfN#FBrR2fdG&CU8e[8V)%%TR2iKJ9BZ7eTgM_@&$LnK/][HoHfL"k7^^6K"_J`'^tNM[4KdqUTA$"GL"Rg2/RIeG&bi:n>_QhcM\]H%%D^LL;_rj&?VQnH4L`FHA@in>7g*S\%OZP_J(>)PJMZ8er!1m):W"`6?$bS!H]*EWl$XSttB=6Vr:4`)!6GLkBEh4#a`Eanc[2$G%>0t424F81&tN?&IV2H'i`6]d#MO"F9D.``@bR?`=.hL*$Z+.T,@=XZu9i`)9paWsP*N&%F=NKo3_aSPiG^O%$5CT-q;5kQ4$oP[`;f55Z&:[B*uep@W%[8hA:LtWdm"[faWr=%@!K[i(&SQ$H=F@'`BR:W@sQW19&aR$iFl^klFSPRl7-`cqf/TA<PY;W6[ASk+3SpI/mgY6?W98CI6a]V[jeTJ4;6UlZ!k'*8,]?&4_8Xi@I%2C``,r0`0l!]I@'Y/&m6@q%"9M7)IUQS25T76K'42:S[Hl)Sfo/E_aIeIDWmMauI4Zehm4LW>gGTOr`RoYE<];[_'S"!t\R+hFa4c\:/KkW'50\!4A4Nh"u"YAY(!0>f>m,-ptnTVHk8*k/[44e%Tl?gRSlS_alg"eWijgqZQd8]f<?1V97ni/a$<f[cX&61rT@8dT/VO.W8eIW&ST!)thla!nnWeu!\)HNbLAkD-D"&.iJMoQd<DdmO#%EA^7IeI`07JpucT9fFE])!B,O'$7JhWdi$:D=b'B(!65V5'J_Ba"&G4DfK\oN@`u\1oi`9gt8d<79hUB2L6CdDuCl%GX*&e\1t_f@fSmmTks-llCYf@?)nQgs883Pk$ph-)Ic=Whu)O,DaN>9E^U1Zu\N79.1;bLu9@mQ.-Ln.VU<sl/Se@PQ:5G/e*fjP_'bn:EbsW#EXB2hRpBPpdh%JT6uCST5%te?1l2JFDHdZZaNYZ`?*_i%(.f:.E:K&)j`XNa28'kZ)Zk8Wuj`g$QVrfLogUVK_kTRC:qcX*080(SVtd.9$OuV]4DW_Bj#%:TjaDE3NT'",]QdE!EW9!g0K8>W8/*BB=@J(@VhP@-OgbI[Z=3JTA5;oAH7kX-f;Vj&&=7eKD`4Y!1)4'PHt0BoQ=1n[qES=2WXhG^:2,OhqR&`*`/d)$uS0%mTrVm[iqkE_G8arD%*faJ?lM[!$&2"J'0(q\&1AEqpV@P_KmiNQQ'"]Q`rDDkM0:FF8l4JY0luc<.DkB%tqj@;Q(@3Tq\B/PLCa1YkIsKg/om7^3k>H>*=i!VJ2lqD%6?,Fh*MdIl^P9oC(Pf+$]c*PZP\Nk&ZmT/Eb50ZeRYB!%$,3h9h)3P@484IV^m];"#=(-"_TeR!*@o%2MO8Vq]^t>+eF6"<e$Zf2MUQra0"KIViUR:/g4Cb004qcFp!u:i0o$HcpPK<MHAG;r]>_WAJsC.um6N4Lg1SR7!4e6JGAO>h7TGmKTS:V)uuPX!5DYH(iY4-sR>tTPKq8fAF9pLU3uIrrCriep].F7=5ohI/a25q4-LAcZ$kp%W%G@/LLJtDTL^ui6?FlW[kY^-Qq&>B:ELeS$-ifdKTM2.4]\n$%RM9Y(QOuHsObiZ@A?CRk$-6aGDE&2=J-rH#BP!R[gOuWp<j?rp%3smD("$23L30gK@eW7AKstYV+VHY&!pM[-f]'RCrNEZsDpU,9IE1(GIQc:\";YpTl+8hr0X9+.[gQ?.&ZP/,Fa2pE*Yjeh1!e(S=mr/>h7K`Cj,u:UrB,l,$J1pI<H`Pgji^6C%>gb$(D?dR7?Z,GP[^+?haVO311J<Rs>+f9eb@g!pfF>m1^;<Dut-nqdMAd:RRiEu@hBSD1TAC$K5gC8e-TS&ZbI@ZJTDjKVhb`A:BPWFMrYSO$T@Oh`)2'Sod\U]?OV82`[1mXj_Ri?<]nQ%ib''=n*OmB*X_Xu3VV-O8Ore_6nH'1YagR6J:*f@IhNJHEMj9gqL5D]p58<-*Q+Hp.cIOep+\r^C77R6%*A;7:ImY=?#HlAVer:Kt2AC8td&7%cC.9eDT8aT23-T!R1CYcj:O2f"dY[!;TN**JtI+C"D.p[<:Gn,rJQHj'FO:Uotf&is1(G4j^:=SD1Rm#B3#pNHDjH^=sPFXB\"'ffRIR)i.a0eH`u"OBYtVP'`NBG*gpUeopo^Vo$kmI<R&4(^"W5P;;9]9dPJ;\-D4Q>:I-%F_n0=NKcAlPCX#IWH`89okr)FHK2FoIs0.nj]e'=C9dC$at$,%;h'"nOk?FQ?adBBr"!]Be:P`<O`7U'O6&Lqq9Ng:5.r9P?h>&qFeU"gM-B5<,[(BW4,79hO(fn\4iE7oat6Oe;3!UoJoTNI6;X/<OC1A=[c='9a%`DMVuX#O&^>CG&1FX=n^.b^i01,\`o9H3OUjm%!D@!e:qZ%Br20iAYlQ'X,/1#WJ.+GVO\JnSK1^_[:L@1I6=m%YX_Vd0[h:&W+99A+TDF<b.nQWLa(lOIeU#%Hi=Xjr0)([N5&k8[RY6&]oRf>Xj1Oe``(qnkf3;8'+9^RA[6IS4i*AID_->aK,[SO;,KN*<Z4tP):ccl<"<"*"oeQS$s#kA]Q1VsY]/?,),!nlal+b^IlTs(EL>H#FnN.b\SC:HNfo![MC&tZ/m'ZD.:U,JY_R\9g1]k8_c%O'$bU=^._pkSVC_(]WhDp.^B<B,d4bDC9<Ru;GPSQE!&=K;kfb&j46*3^l7U'A^:QZ_F_)=!BD1N19r5GtK*POdR&mI8:L*c5VQ*$9;`+*gP`mrP1kS_,Vu.pkBPlP&c_$UGPL]HNW]m$/I=8adL<i]h2&+]f]@\.MJBrB+18:fo;,rdFWOBQH:#fr`Q<.78%$&ZU8+iAa531$id@j_\WMb=X8Q:SI^,]n(ZP)?oBaq4:2E1C!ImEG]l)q#]#M,BVVYe-3G+WLAB)KWV+*VNqm=qC]mG-M.ROX[gk(^0%(-9ZfFZ`Y\Pqa-@BWC$KU'W'5394AQ3u>%X+)Yns_:Li@Zu?uM@d^63a)2?g\ZsZ[9Kl4<aHK'TV5ZsaW2-DL-`<LlbtV%R9,"+WX9P,n>&)c:BklRdU7PrD/2F/GFgrXRr`"D6qLU=[p[<Fan"9AG#P*/rgRBL]_;Ti6oq"(UB9j!rZ+IX9p<FdCNrC#7h1rB3p?OE2E1g1l.L9#ohW3-lkl1X9oRAL\_4.RM@kk[?ZDd'LBd2<$?aG4A$',M=hE!)EIKO`UN+5k<R^ur.*;sc/S#geGZ884V;l^jnTrYhArX*:uBeB=r++Es!5KiBg4+%/0=LEL>5OgD*1)jSLDb[tfe_XSq](aM>h]'m]mHCi4H"=hB9qTX/@'LR?P/kC#_i17]N`dMpE5b*JYMr@KmJ*=CP+sgukUsQL_="GIM+e]FhKeM9\@4Z_bi08@T"T.7ad1"@MoX6ag.8&Rk\4a.hDHi$JaGm[gA"sfA:/5CNbM<[/FlLdd`?ulBdMQ/Y+Q5g$esRPcM:-2U:q$5b5"WX^G:05XS34hn(rf=p$O302bl<;2s/c4iTPU"Yr<2-m+CUs`no$OpAS@&qpTXfe4A+ho!Ll+#c'$j.Z%Hor4]ltr/L.t](m5u)_3S4m=)+2g,'a%3CUTi<YC<29sOGA?[Ze0W5<"![$Zf'UthB\R@MS2R8Ln@W>$cL+gu@c9T:Z*[[lK]UKA;'7@n2C"[)6P&2D2iNM]hbj;\%\qq[Wd3hG7-qqYoW#P*cI0Cb7g05pdYl0bn53"M2.l&tF-[q'Cqm`=:RlqUm!\i78BLY*5;m0q9dZYX)P/%TGXGa=ea-)EofKHt2+Z<,QU!6a]fmn*G6ln=VeH*XaNT'>V\c1bSX[hVs7h-!niKhl5sBX`HXGW,7c.oV,AMYufk.L7._!f[fV:-GgYD4EdS.92b3Vf],DC6kGi4O1$CVA%6C:?FFa+MS#>a1ls^rUJ<!GOeP,4$TB"Et_QFlOMn,4+j_\mM:^2P/1/[2R_ehc&BkD;e@`V1jMc*eJ*)1XOQg]/7dR=+(e`b3m2115?mT*VsF`so"--O2U5N?m]:7_I:b++]*4\"P)CPZ%S%Tu4`qI&;p)mI'T""IE'a3b=\/dF/O^CHQ`$j;i0a[&(61g5i&VFl83]phn(u6C^ouk=nN6P\ou?OeO,08A26aMar8,cP>F-A"hYXp5<*!n'_.#=W<lL3X)19DG*%)DPVN8V.XBL^oSP2TZr[N:TkWad54)o($O1SaF[<Bj\gs*I;<-^XQ\2R*h):ldenA_=dc,GdcePjNd58OZOd?ZknCL!$1iNQG>$kh$!+_Y;QD`ipK9//198FNQ[EX%aJ%R'^CVrhp5O,2];)m(RcTB56-m=+$JGfn/!HZ!YiR9V*)fpQT>L,tj-ako0i+bec79!Y]NU0=b*Y(A^eU0+EnBSMRd^E`_,r-nH[ZJjG#+SsChfU*!qM/.(Y=$:^_4gus(=OLsOZaqiUGhp>hWMiorBDYl"P,/agAWedGhFt'k)4H(SAEb>=M+MCRC.TUZ?s5"SA<nEVcB9jV^V>,hGX(.-^WI$+d)np5b*o=B>pWY.F8&uUE32n+]Sh_)de2ESiqjQmJh%2u;H62c=g#cEUAk4Hm=-d&nj9nE]r.\A:Jc#Yp0KRc9MFfiKZaSGLG/A+WR;'P'57O='66sFX7j>G?g^=?ha+;K2ZEbUE<(?8Z+p)2pUg(mBCKj!ht$^1'@D:BHErU2qV$A6=1bb_H@5_Wh%dKFgQBNcYrOD\S'Q"(k2=NqZPE95,pY,3;5%HsN\j^p'h,;'EVRAt^Cn-QoliZ;>()+2--K)o.risJZan5KSpmi&L4Z`jPKIc*Sm*RFOfG4s;o[&0km7tPWiE(QShC\:_UACS17V9AQSPiOP!\`FWjIfW]=TjK!VQA;pTP%)5Eo6cIZO<0fK[S-Y'SE5i]^96IS6n#gW+Y@G"2DQ@Ib/hT0M-")'IV#/G2cfTNm0*`j!l8e,:L!lmV3"!9NnDGH?6dmba?m5@nErrTCl[2f4$'gp?H$eR+?;WS[4A[hH`hlS>eSBa%b3W/_#nIq%9n;f/$f-<b6@'^iLML7+m*cSI'iK6^"ESA`"R^iAi"cdu`Nmagd>\_m?a^1aCcm&nUd40,Q/L,tp7Y8^?#g=t'[?af\4'H%eq@'6/kWtUYb24>=Q@V-%-(^'-VmnKR0lj]Mt2BM(ZP.,:HD7,qg4,/b6RHWb5_<t!&<Z<Vb'kJqY<Dpq%"`0"#7`uthWCS-RDc=Oo9G:@K$Umo,ONO5]/KC^!E#D2X-!9^u*rYGrr!!(&T+F5QDU@;<(ZGq@c>4N1ft3Fc]/PEbDgh'ppF\flLrM=oL8G<kj-e+jcpnfQ'f!SI)]qo[oBa'd;>=#YletUqh4%d3f$qh/9K)Ugd:`1g5#6<=/^l"P:EMoCe?_S@\?\+4WDP*HWCY]BO!J)e?5ip'^dU(>\/kq@,ZuE(1p^q>>p+bM\R//)p[;i]SKH%qi]$HNlDd%?q/t3>rlNo>9Ve*DTpLBXQ.nCT@V=i$'XMBEDXuQ4Gl6tF9#qS[Y*_iR)$GgSX/DL579?+G?P'q9I)ss)rH[rA@+&sU2DVi6]6b\9AUY;5m;/kd#UIK.c,YX=Urq_(U*Wg<KLjV#C5B808uSD(bMb1Dg0mX<VHSf'[D]nM3FQqZ=t*:KTd/hUB)I;MhU%n<YPDH$:&\35)mK25idM8]@B_ng].s3+G<Y`W\Lm'-WlsD+n_l4g8Prb5&^\qSdAn9"`YmW&/Be0L9)LmJ2pd$Y[_D4a4UI&%R-[lKcdH\o^tY?!eo"*jne;r&`_nBNeO^BOe&+iudYJ8eP/R2`iPFpJDVg+m0rZWK7&qlQBj+OgX.a?(J,jrjYfA-hPJ<H->Nb)io.$j+]&rfO8%>KV_Ulc>2[hbPI`TLfQOf/DWfFhd_1I*s9hc$p#staMA0G.MJZH1XZ6m'VB`(0;I'BOETi'E!8%YbkoXgVnVW#_=[3a[/1a=)6]]Rp`:bcmuiJ'1N8-"4@j'&=9eQu`+[[mr76Tf'YnGql-Y:GE&lFIaP%J4p2+((k`m='K\h6;5ihUJ.qn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAmnk2%=KX$KErQ+E4u#F\HhXkXrr<'9b3F7l=Y?iA4fd?UMVQ8K+mcQM3=Htqm`pfd`a_^V9./Q9OK4_jM'(L:F"DY5rrBomkW7`InUmWHm(M#a[[&4$jqj\mf\M%/lo]ts6iA(p723.Sbl7ZSon>7<(Y]fLcBWM_X]7JA@d"^'K$lP!*\-<NJNntmX\DG/;\o76NYs.DUC+HE3f1W3hnA@er3,%o;h$A@jkie?13ni0eu/9tnL>!URG9b_/[:qk?m=ee^Q/hfc>BY#iSE/R]pQ"D/997ee)dlsdS0$@<Re#TT%a/S`JKB/B>bX+27X]m$87=n!>ZIrQc7E^1=c/eqP.c%3k$PlU<Ds34@Vf?N$OV8`Eumc4KQr47*;5n>4(7#!J:t?]OMJ3&\F]qf``'N)<4e`;;$4;1B;[1qYU#ncg9$UGPCQPV16@uZ$f!*r`VH,:#.noZ8Mp<:RqAt4U,Q"qQ"FUp3ro']`mtA3a?6.g>/=AdMV6h4P8mJV38AEeItA.0gmH9=e9:TDuLG26eAaG!"1j)*m*47bA#n$jUTJ"P9[@+-53Vhdq+lG409X"W5@`0)m!`;ERI^sni]n&bpl@+EJesC)G#LPcWXAb;@9t7+HQ<:3EN,UNiC5#Q9r`(QE#p2'tM&QD?..)*qs]iamu'?;L^2Mjo5<RZEkG9_6fm1UXLr7bhhR<R/N_go!iepR))-qS(cMce\3c*%$a3\1pi?V1/UC!WmjWFULSes_Ajjd_1.<'D6/In/[sa'DR`A(:H=0*gY%J^HL8iu93%1lct@Pc(+-J'XCQo6NG:r&_IisJ<:,5RgUL)o42`k\JiAiMMFLq[fXtuFb)Aj?#%0Zpp[<8km,\%lp[<S*msb$"IeW;[p[<D/J&8Fo*BRX+_S-F[r7C>-rn<t_,4"T7fc*khIQZu"^tKOQ;"h:Yr/*KE^taDe]$GA*p\%)WG5QKWO)3BG;;t%p853)UW/,2,r;1IsG?=A$ipBghD>i3+*gTNs8,_,VllMnU>ISP$;THNqDW!C!ZSUFl.ka9$lS1mBPp2\*;%5A_Tm4fQ)3=q@OHcl:_mWaG[Q4EjpnO^[MKkKqOn[S-P9E]e1FA%61'6^Jc,[SGhkpeY(\fU-qmZJVqn)bZ+8cB=-ea%RrX8F^Igc5fp)i?[_Z%TrpAQ/fnS-D8\%SrLT>Q/5j8T+3I?3lYZ)%@6r%l1e2u%<C5I(20p:o\'A+mK]?9d37gJ8UY18^$=j3sbqkg=5c/2ZV?`g_B.`P)0'Vn([[HhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L]gi#%iD<Woc-,O)JtM7BZ9Ob,?[#3k6b2@D1%5FDnK#M;T&$99@?&*ahCZ/4rrAfUO(iKc`Vl99X!rdA)UojTWD"W8LA.n/o=r<6Ckd#jfD7Ma?SqJCAAMF$no^W#S^s2-`2CcG!tNj!C/)WcS[6lFMh''S&)3OFLdk!mdf%6h6i!5(C"Ok2dUE.+I/F^fWm)p\>"#A$-)&nqq!2VYU4"r))V7^YqYU$#@(oiQ5Ft;F9kC:gR(mHe2uFK/YI?se/GK#pG[8ukrR)A+UiU_)dDUF%fpJu%nkg-b=LUJ4m*d'm2j'm_<MV8H`;]fnl2'PV&"%_<q1[i-2>C!cm&B84DL.fI!1&mJ:&BI]pL`0Rqa[M,j@nE+m?Xh'1Gb3P5KP8@1p/X"4.S)arr=He6BVioa#,Ru67(*!YEAJ7hnAH+rr<A"Mtpr#n."@U>LhKo-Oa55VE^32*q%!TE.9&^]2^;%crKdg(Mm]-(>$N6C,X_$[bX+[^:+O]4M%WBjG$OWaFD<C4qpHU4eqdh<Os\jO)iI8`EClY(p%(_eShjIe<M!1)hc;p0Q\/bE5<J&%Q:Jf)]^)5'"q\U@Oc1Ihua@'$(6=2rUX$h-#oon#,*8SNDRZ6(e,ninlo21He=D8^O'2^pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV6a]~>endstream
41
+ endobj
42
+ % 'F2': class PDFType1Font
43
+ 4 0 obj
44
+ % Font Helvetica-Bold
45
+ << /BaseFont /Helvetica-Bold
46
+ /Encoding /WinAnsiEncoding
47
+ /Name /F2
48
+ /Subtype /Type1
49
+ /Type /Font >>
50
+ endobj
51
+ % 'FormXob.ccf2ce60accb2f71ebb323971f816d0f': class PDFImageXObject
52
+ 5 0 obj
53
+ << /BitsPerComponent 8
54
+ /ColorSpace /DeviceRGB
55
+ /Filter [ /ASCII85Decode
56
+ /FlateDecode ]
57
+ /Height 76
58
+ /Length 8199
59
+ /Subtype /Image
60
+ /Type /XObject
61
+ /Width 214 >>
62
+ stream
63
+ Gb"/l>>S@%QH()FWZP,%aWr[5e4cJ1Be!,.a?q_J1=Jga8_[`$e!90>/sGRB6<@6g;HD5cFAct&i@60`gHgWS:t-=Z_17@Yn4I@^6kP6"5s`EsTFjWR"6#a,GEsj?qjd9JTr:Q5?F>\Ph`:S>p0Rd4/pm&.LdiCFEob<(,=db63HF3%OX!AV*'&'#aH7];NZ:'"jN*H.7ueQLEob<(,=db63HF3%OX!AV*'&'#aH7];NZ:'"jN*H.7ueQLEob<h&!]n^3E*8.DhX6qm+f-ogU?fSmJ\:3"'7E_*]hm'26)B`p0:a,Z?O.=W[6tSLS`eVQ2@&R[9-:QN1YEgT7PNnmVe5(e4fh'aFO)no=LS729gVVZ"nA\Bi<)W8T1LC:!;3h\>AUef>TF]2c^pJecQT1'lRq+)B,nNVW$b']_-WKAoFI[D3<DKXo@gh`.tCkVl+]Fm=qgY>.\YmWH`hGib1O,I.cc4r.;snNpki<]=Oko[(icH^V<#'7bcYN[Vans>LFq%;cRI3J=lpt[R09ImLH<0L,Bo(lg=)IqFFg.ZXtM]Us)M-2Ue;uns@SRZROY\f4WW:FeJD]p[[bpTD[1<adfo7CiF?H!E!SlH2ccZ)*e,Ro_Y5J&XNFT5<d4n=X!SA3LTp;kudq3SsoAk)qgQ1gWWp4f_bI0TCVWHINC$:LX`_af-(1g5+MAtUT_o?a`FFD-/JIB%'>V,]"h7;fQ$>BTA,\s=T5'CVik!$qH;qEppV'.Gkbb>IdYQQBoBa57>pndc&m8CX3&Q-FruQ*:t1=+q!5S<+rC5Ni]8YS4YK%7USB&/fgUf8:RaORMmTq$-6f"%kKg=a/54C2YZg,Vm#OA;=&]<+bkrk;5U+lpmU/sl@'p]5CfH[_QA3!"8"d+pq=5CZB7dp%R@.Y25EB3oh`Ka.)r^<Cq>8Nl1kleq>C%EN::-Ynp]$dO.E[hQop=nR4Ibofs"u>N<^e-qPe9K>+orNKCt4@d'$4$'1SX./%FLgf@1W/3gOH,biP>h7>ekmZ!'FY>$U?K8Xdj=!cWE()G3UP\Pbq%AAoS4F_4*Fc-VhhE-Ik`WKI*'#jraLiN"`e?"ZeY[PaM#qCXsUE^aA(!+sf)]TqnQ^E=GH43Eh(K6_Go-8sP[.O!knrbatF98>I@;M'A\([*Ect&BGh7K5u538FX"_ZD<.Ga@"59['Lccob#?4DHb[+Sl*7b8AqO.qpL`gB+uOC).?+A+oV4qnuBSPp+\TJJHCQ4mjtoqe%bq,KNWGG/+U9+^h8j.+D-=irW+\Q(jHAt0mr+^FS/!Bl3'=i9OD(Lkg\kBmZV9:n;)oG30CLsnD&`@AoS301h<l6SOp0>RgArbPiWE<Rk3%IOdE@3loKCNeG7R!(P+M$"^V'[c_X1-9T9c+CAgN<*(LU?>Q>_kT:_=b9n]fkd3>B=%ZE4*_4*u#&m1l-I)?E#E^0Hf>,bZ2-peRd2f59=9Opn9/kTsOQ7Z.:>=9T>TG?2O_iG+[1LnsfF7nfg.tO<b6k_N:rM1]6#F.scU'_Gd,=>[911eW$Msi=2s4J>^0U5X8H+ch?RbLSeB/XBH&<+k:[_q)05Ob?Qf/+b7R'gJ*q,@qSQ/b4+\[<]`#R"j8V4llI8b7eAa'P5_'8d3'qlTnUX/\kgAUaP3G?"Crd2b5n1ecItcO7\pMt.R!-?>/W[B2nQPQ9#4!4ELVc6!PO+p.!:YZEu;XnC1Cq"Hk!6\@a"pA6s^B-krV?YnL6Vh7SW!`;RHPTg)>q^)6lPe!W2s%6Y5W;um?bsW\u>6#=G=p`Dd!ZctrWK/S5[\(5e,--Sd9`MVug`E*>R_@u*\faA\Kr"unHTn%m$,@4"E=q><Kb5qE>"47f)V(`h"gipt5o2+'-p[D+,QNq!@mB)]PSk8Sq-lWdF<X=-+aT[YS+$Mi3cNdhM3Ob*s82C;ofT54<(AM+_H;^Q&N<"5#p,d.&.!0mN?fI2pGJMk7hu.X"WKuW+qOo1D$`k$mFYFD94a"1LdMgn+-X-tPu/)qccO<rEIm9]c`/V>b6u3&0e>M[^n.k,AdPn'jp2B2SO(/af'pLL(rn"R2a9!X%&B@[@+8,-C+]MqRKW5[$BWrW*:]@f"G(@3%Qn^d`,gLmVN5U"!o#fJFTeYu*!(n)`@jj%FSZ=(,r-d?!3t@iE2!uE1JkPGB0/-[FX7QS_BLA[gt3g4.Gt_[KUAZgmN:q.0MSAu,2G'W;1le0pKr-LL]WkV=,U/+?\/QX,_)d]&6QN=;.(r:^baJ1[f_3"5t!,Y5]jV%11OFVZ%D)\'=9;_/M/Ou:a@ZE""q9S=75G-\MLHhB31Fu8niM"l@d^)Qm.VS-)II;ie3<RqM>BjYU/9_\nM:6BIAJ6ScJG^B=R6m?nX>K"G1/=j^\IN4)15WdHs1ATeQa?")u]rfBh=o!p(VGCT&M?aRJ]GHn<j2D^m8+qP`!CV+Un"0nDgfr9S48Ml2IO)]KH/D@@,%TYB8i4E(0>opj:b(ZS_DBGAYe65BX[S5GYu=[HY!K:kYd#\KZX2r>^f$RLD?5L(^?%T4J&BPB]/O%]\N\?**,5T15c`EO;>=m+(sgDfbs?D"BpTXa8+)PWuMN&]+SR,Id#3>,(2DR$FNPaRAs%4k_r^0%WC!\"3M!tCtr('9Q+*"U8jrUM0EjK$m`*Y.g'Lb]ZqU*]T&Pe9IpJ^KX;5[r';J,`[>l:NiE(Mp-9)HOM`lECK3aq&)@/H:M36mJ[*A4D(ke*ndfW<$s9ggh.,FNM,M4h\a69h.V0DuR+1lD-H<=L7ecX&b(r`#dpNKqTfOE:YhI;4?VUV2+=L.EBi:&j]/E+s80&hm,JcE/3hg7>E+L,-l^]VnDqT>ob[4-nCqFUllTOBBlQQ8X;GW[*T>B(h8KE'k["L+_sl,$icOJUtP(OMG$dIJHJdS__;so5L+Qt<M@;fQD&q9=IWmQMR9cGGL'4:J>G+:mI`^Hc^-9Yc!4'l^+5YBZ?tk4Qt7!^if]^V#Dj#U&j1][rH1'3fra#;M$a=@b6eTnMA(N%_2M'uVF%!Z*X/!N'7jWVFYD'7$>fa68CZ,:i#M+nDuO<hJm8Kef`<%>2G?U/Q!eTATgmfiNs>'q,sUm8MP_IY3Apfqp9^>aWftD>`nBZ:&bt:;2"6gBYUjR$`RO76fP\Op_q4VuB.p[c6dW!k%;m&L3!c>*7ph[BOsJWX@e9T+7HO:rZ9\nFM5:&5bcN"L_'f#S39%rJRG4\Xa)isS-=L6@`7NZ?3E]L88hm)#,WtT9AIF'pH07t3#`M.qiiGJ!6UTAlO1[+=>eqrm]JrZ2HUg!r75]cZ@jY?jE`g*nhTI9t#>'FKlP<P!=BcT\brn>qMB`q'haF-iI6:UEV8*D)"G'gA_%4;Z%tVO9A9Hn-]N7=$g%jGX\L7M*l)=kjJSf^g<s'cO-aJHA3'4m(dPr/%YP<LAq'aZUTFO2:_(<U*LU\12$AM:27D_[V,Zl6K&P1AE!TJ<Q6Aq;E1F</XoOK(t:V<SP<S+^SYF+Q&0#TJ$3:bLKM*NU(H?Dblcq*+g&F[gmf!n_!-"m]cK,+OM+9\>]M=JPb6`Ds`4WRY[MF;D%7q>U3#hm*6$pS\oF<YS'3#L;0&BMEE#C?5W<-#h)WX5i2WNi%4gpBWt@O+.sQ3SlRRgop&UC7D[o\OmFS<KEm#@e+mX?"q_eDEKr&n;[sC$f00[Yh;R+_?Zie;+k$0NnU>Fu?.oZ-<ECiX5ALG'["n&JK^<!Bb2$4B,9d:Vu5j[eWT:+#8/c]5f%`E(^El<&]F!%/h,(8nKVjq/Z!s_[R4JOeYFYLK!TS>'$B!61%9XKDJIW1-90gS9,MJBfE8f&Q`HfH3/tT?"V$DNd'jgp*9[[L\&6s'&ib]Ls2^+4+k=-B,$4)7!ZL$I5U02<%i4S04IEq"i3j;@<Ci$J_XC3;PT9<]cemm6>.3W4j\Zo-&b*Rg29<;0BZ-nc<$N!@Z0^ap$@QccXP,M"4n7kBThqd_[fI4,p<X#&E@?5@<W-2=FAMC,ZG+q"'t23akjD><$LXZETkscLqe_I`a+g'D-=je>K1SuD,o0q\M%.!30E,OlCAVhjf.G>b[`bWEL*L#eCW<-X/76j15?)i@uEV*bP!Ug&<%1=l+U/*]%mWK:F;_7?[P(]6kFhJKe//h`r,8[>t:Qh#FZUt0[0J\>AQlaMaYiKK2OjDQ][[B\d00m.F#f%q)LGB,V)uW6Y7#WTsT)Ms)so+#X"'.]=Kb:?eAV\\?-%TH+S(Aq%p$AC.D+"Yq!.-V:\:[^*a2>Duf<Sk(YIZS/&7/)DqR'n[fFe)NHC;HVlJkbatGD]nN/5T<IsQRVVWb*O.7p0/V6I$Y^IrkX0F=GYB:n'7nRD^H[Pn`2PZ@M#%]S@$8ShqG!Ij,X+QHM-+JJl[eB1#oeY<YPK,U<ph%F5E7;sDrl@SpSBC_W]1WB[MXiG,INnYNY<h?$'peB@G1/-oE^b4`?oCIbmKK46ORCE7QP,U)/5rSYk5+^ieE;G!tg?D%%G`^=fX:0f&#9)jl$NFR0/$B</fea0.F%^.jQT'h]ea\F!?PX!cd()S&!Te[5VP`drBQmkQp/:otW[H0&BK,VT4rjZ^$c@&o7,cK_>7i<L%G>b?hD$2l%FCX\[9bpfFT4WN>/po<Do_YXg$kU15gk8c&+D>o>pU#B'K'&_aYL'-VuVJ%m`l.^*Ja#tZ]C+W]uTasW.L4V=j;]p45BBr4C-R9NL6bspWH9Uq=p#c&3,U6*V,q>%rJfePDrY/SLb+]&d\=kl47g:X6B21b4Q"RZXnR9Q\2ES.W%!%97:V,tTj"iSK6S8$HMl['gmD/G,VGI@<_9nfH`Pr$if$]<;pW#u_\JHUDW$(RYrXn_#/&La3HnoPE,MF4BIK`7nqHdt'*5rBgKAQ&R'B@CKG.#ZPoP6?FI)S:%>?mYDM\_&@pnM;Ho`dJ1VL,po!PIda7f<jlenA4Dr,gT1-:_g(IgL?G^itYZ%e3f1D"Ep<I"DII>,mH/EN>``=,g:Jo6lF-OEfss-%t,iC8Ao3VVbYQ),C5&`CcfrF!Ipmg`?*WM6K\'TE]8chW-:/$XLt&OQl9@"'/P53LK_,I<P5`uOdE@a4V3H(StKOlmgBdDhWJa5KdB0\a9sG<PJ;\3n=_)/SUs#1Ts?p%p.c[&&+B*r$C5F*(FD1AKO4Xcq)qMJMo2R-X_EMtcbGr&7:>o\f0Ar#NENN[((Q$Ent>ISh+R)W%NZN[?IG&I<nZ\,;?XY244suG*[7f_-91;T3`.ltNu^R.aH0?L*??.'b@!]`&nl@WOsZ\%^@TWug(hC'`@qE1Y:l2XEq1Am4WJT7!(+2+-B(-2%eu?cNjX"\__8JXi(GG<ABlHJ-Y>MQ96W4I--SNFML*="M0AQhIRq:NDur[qP9RU&%stZ0bu',nNSsSb$Irkn'2N>rS>9P!MX\*flEGd1R&s$n*J)'ZFkDC%##IDYlg!sA#m!TL6%n+Kg+$#BDqUB,Lr]=chLYUE`^\(rKk]]1],?8C3/#^"mF$<NC/M!7>9!j_\XC]l"NuoP7ueQLEob<(,=db63HF3%OX!AVmL1E4IT,6+"`?sRC$i"):Zs$tUS:[-h;qXl'0JZ4eC&e`6r'\"<-:5?(%knthcOl;e^s[*9(u@.3,u%%ld_%sqEN2N'@c2nhD"GL`9a>TJ+KQQf$0*+@t4Bg@WUY)S"9]#>8nW1D-kl\X%I$9/hSTUc<J'HgkEp%2UoJ=_=IBsVe0k+o6F?0rr1P?]_)ZbeBH6,?Lt^cFQ$]tOV=:0Ru;'c>J;noGk*4.i"4O?*G?H,22Lr.IY#+a=Xu"O4*?g6LSk+CXdlaejWDeFC:"q<8u4Tf++O7<p]t[rFai+M3IaS*91(RrD1u3Z7Q_=:E:gMR9#dQbF-h@Hgl:b&"7M!lUn7"eRBK`J0j:fi.OfYfh<#pT&^_tU2d_j,g!5MdX",nc+;5V9WAeH(MB;*]Xp8gZcREp.A[5h:J1c+4YC+6;BQ/deW4k7q4+T-<R(4_qrNhf+V6b*<(Wf.NKg;kWI40>i;nK]\6mZo?mD-B_,5b7>Xi#50_iifCS5jmF-2+JE#c'*RR-#Y)(]Y;J/qRO1hIb8!l3$V=)uJ&X)Nnu9D7fQ5qqA=XEX3X@6"cBZf$=&,ZZRMqPQH=1-sd.\4ShsA]X!E4k9i6U&)7V!*F,mfGH@Cs2:qtu0<i85o&s.jRZ;UiED?g!oqUqgL=e]l87!M_;/&,j*IO$$Rrk1C.B`9OV`2I8cjM2.1dNeUrs2/emRpWQIlAI5&bt>E4%Y#h\q?@SLP?X&7Zr=s7ha`^N+C<Kni^X6NgaS@:8d/abST-ZB7.dQ9Rf2OB$6S=#S^/(rUsctJ)H/BZFAFBUK>8]:h8!O-SiQm=pW%p1U_V>Pi8?QeGDiEm"&@FRBfqSV'S"Zhd1Q<2^3Oo:,L*6-ILH&1m'd2)0k]MAb*]"Qnc?<6QS"MNkrktqkt:GK)n"Cr0V0PpDg$!FA9L0`*YOlL:jGrB';4,?k+Cm"_LFkC*:n?3f$kQUUigj(_-7n8QtAhgkX;9!mksX-5n99EaXio8CR3KihS^-:^X?B_in^dn-I$ASe4Fu7GAd?LJfu-nAG_pKJ>_?o8>U1J.^&%g$@l.GGp;=8:L-F.T797!^`<TGEH'(Sq$Bt\I:7"M;FrKkU?d*IHepm%$V`L!=t,(P7%sj]l3n+io2:5V,Q1$Z`JeNAn03KB3"m:]J$OQ^tZ03N"nk`*qH^(;uqtJ4Z?AIo%gP9TYA=\*P<rm`W4.%b2U[o(A10\>fe5%@%Lb:(5UK4%N7U4A\LuAZkh9A:#Q+uV<>ng9HPP_K4DS+bq)+]!sA=/\ks4HV;I_TpHg.f7I%aqhVO(Z^eZGH491Ns0Of:eF<<3[I@quU7o&,s3=pO'pN`RjkGPQSX3&PPK6/24U8XKaj-"F[09hW\gG:M(0>7/[=CJ';.ZTYS64kX4Ttt-(&OZSk:Cnom9O<_]JYL'H)Po\,3V=fYi8>_:5rD,bS-VQR4d82?J\G3[cr=O`3eMT*&a@K*RV3_`lF/(9>uLkg!r7F5-3>dAXF["-`aM(lhe4&\M]pH:$Z`VD4u+5d;7\3>1(bof6,UG]7gSIt!98T=60A7+bl$l!Ifo`^%&:(A-tX,U":C=fq<fUVFI\k+cpq98#o'.`X+rbZ&8(,<fd&+8DkI2d4inr2)n(k@^gin^J`oIU*QWe'A0H_HRH$%cWADB:L>Q#E"R9'<_[snBU-%@Kj1rifE3Kn0k^eD`"(aS`SRUNeK8\a@JP$?Apg&J:UuU'X<'gd^#6J'K,`P3r52pikoqS?XXU)B_!`>,&1Xj5\\gVP$dN!k9&k3)u"V7=T\PTp>*e7uLOImX2fHUHsLU+8p=8F(1eUc<:!GX;"JLCcm`h4J%boDO)]^bHC%`Hi3$>\.gINW#3SHApZ"kf8;!!s?j&Eu7s61%1U=+2P4Hdca.*ekIVi6mE'=C'gA+V7qdVu?g9T`aPkpl.lGN)E1U*smcpKFZ4f3%d?"AFpEcjp]8.%B`M/N%0$*Ige<j&mpdFQb<n01+DW5T.HS$8[(h38:_.2/nU2aJnP)(93JV0r/a+u'F-V_r<FG;"6K,lZtRRA9#SDr8JsGu&t<d*qtMZl5:@N$,OE6sGVrkAkgBW(O.MMiNo4`s<+UsGmu?r:C'6pG65TjD=936;?WtLq,*]#b2.YjD?%F1B6lX$"!i<E"PV,TMI$J]CA@Z:rQsWM#PD&X^>Q*]*qq2@5!!<QL"C2Y"1'6Ylr**8l^!"0J!&-1pBMS&B2&=?QU5YF'=O']i&&J?.(os?<-h/tWKr7l[ZkuKu5tWlPd/a$(Gf2s:cr:2*5Tg'"#"$fQVda;+5p2PW4'8>X(I@(a8`UhS>uIiu*A&Ff774";M%N-%!aoD*&-6CY$/L8CdI:fpq3j>H,p.5_8Mc$q7u1J`0mlUObcHq?"g1[hJ;nON'(gld']/m]XRnuF\H<O[P\atoA*XQI>Y:-B3P4,EN\RUj)R:-0]_44Re8Lpt+j-4CN+CGe)[nn48:CR\_^LBY5`..gbOcJlb#@olZ&\b#$oPdS*Z]-Qr5@'[P^q)7r#eO_GKdXQ5E>.a@8AJm=&`KZ!KiuYY/^J,PMZNC:^H!Q&of.a@VFoOI_ajgm3%'kI2nM6-UYV9+=l_e\A<TK$-6QC1$E4+E<k_-!TqkiP5~>endstream
64
+ endobj
65
+ % 'Page1': class PDFPage
66
+ 6 0 obj
67
+ % Page dictionary
68
+ << /Contents 94 0 R
69
+ /MediaBox [ 0
70
+ 0
71
+ 595.2756
72
+ 841.8898 ]
73
+ /Parent 93 0 R
74
+ /Resources << /Font 1 0 R
75
+ /ProcSet [ /PDF
76
+ /Text
77
+ /ImageB
78
+ /ImageC
79
+ /ImageI ]
80
+ /XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R
81
+ /FormXob.debfe39a01d8602d733fbbcad4ae132a 3 0 R >> >>
82
+ /Rotate 0
83
+ /Trans << >>
84
+ /Type /Page >>
85
+ endobj
86
+ % 'Annot.NUMBER1': class LinkAnnotation
87
+ 7 0 obj
88
+ << /Border [ 0
89
+ 0
90
+ 0 ]
91
+ /Contents ()
92
+ /Dest [ 51 0 R
93
+ /XYZ
94
+ 62.69291
95
+ 748.0687
96
+ 0 ]
97
+ /Rect [ 62.69291
98
+ 706.8187
99
+ 124.9329
100
+ 718.8187 ]
101
+ /Subtype /Link
102
+ /Type /Annot >>
103
+ endobj
104
+ % 'Annot.NUMBER2': class LinkAnnotation
105
+ 8 0 obj
106
+ << /Border [ 0
107
+ 0
108
+ 0 ]
109
+ /Contents ()
110
+ /Dest [ 51 0 R
111
+ /XYZ
112
+ 62.69291
113
+ 748.0687
114
+ 0 ]
115
+ /Rect [ 527.0227
116
+ 706.8187
117
+ 532.5827
118
+ 718.8187 ]
119
+ /Subtype /Link
120
+ /Type /Annot >>
121
+ endobj
122
+ % 'Annot.NUMBER3': class LinkAnnotation
123
+ 9 0 obj
124
+ << /Border [ 0
125
+ 0
126
+ 0 ]
127
+ /Contents ()
128
+ /Dest [ 51 0 R
129
+ /XYZ
130
+ 62.69291
131
+ 631.0687
132
+ 0 ]
133
+ /Rect [ 62.69291
134
+ 688.8187
135
+ 159.9429
136
+ 700.8187 ]
137
+ /Subtype /Link
138
+ /Type /Annot >>
139
+ endobj
140
+ % 'Annot.NUMBER4': class LinkAnnotation
141
+ 10 0 obj
142
+ << /Border [ 0
143
+ 0
144
+ 0 ]
145
+ /Contents ()
146
+ /Dest [ 51 0 R
147
+ /XYZ
148
+ 62.69291
149
+ 631.0687
150
+ 0 ]
151
+ /Rect [ 527.0227
152
+ 688.8187
153
+ 532.5827
154
+ 700.8187 ]
155
+ /Subtype /Link
156
+ /Type /Annot >>
157
+ endobj
158
+ % 'Annot.NUMBER5': class LinkAnnotation
159
+ 11 0 obj
160
+ << /Border [ 0
161
+ 0
162
+ 0 ]
163
+ /Contents ()
164
+ /Dest [ 51 0 R
165
+ /XYZ
166
+ 62.69291
167
+ 598.0687
168
+ 0 ]
169
+ /Rect [ 82.69291
170
+ 670.8187
171
+ 148.8329
172
+ 682.8187 ]
173
+ /Subtype /Link
174
+ /Type /Annot >>
175
+ endobj
176
+ % 'Annot.NUMBER6': class LinkAnnotation
177
+ 12 0 obj
178
+ << /Border [ 0
179
+ 0
180
+ 0 ]
181
+ /Contents ()
182
+ /Dest [ 51 0 R
183
+ /XYZ
184
+ 62.69291
185
+ 598.0687
186
+ 0 ]
187
+ /Rect [ 527.0227
188
+ 670.8187
189
+ 532.5827
190
+ 682.8187 ]
191
+ /Subtype /Link
192
+ /Type /Annot >>
193
+ endobj
194
+ % 'Annot.NUMBER7': class LinkAnnotation
195
+ 13 0 obj
196
+ << /Border [ 0
197
+ 0
198
+ 0 ]
199
+ /Contents ()
200
+ /Dest [ 54 0 R
201
+ /XYZ
202
+ 62.69291
203
+ 748.0687
204
+ 0 ]
205
+ /Rect [ 62.69291
206
+ 652.8187
207
+ 129.3829
208
+ 664.8187 ]
209
+ /Subtype /Link
210
+ /Type /Annot >>
211
+ endobj
212
+ % 'Annot.NUMBER8': class LinkAnnotation
213
+ 14 0 obj
214
+ << /Border [ 0
215
+ 0
216
+ 0 ]
217
+ /Contents ()
218
+ /Dest [ 54 0 R
219
+ /XYZ
220
+ 62.69291
221
+ 748.0687
222
+ 0 ]
223
+ /Rect [ 527.0227
224
+ 652.8187
225
+ 532.5827
226
+ 664.8187 ]
227
+ /Subtype /Link
228
+ /Type /Annot >>
229
+ endobj
230
+ % 'Annot.NUMBER9': class LinkAnnotation
231
+ 15 0 obj
232
+ << /Border [ 0
233
+ 0
234
+ 0 ]
235
+ /Contents ()
236
+ /Dest [ 56 0 R
237
+ /XYZ
238
+ 62.69291
239
+ 748.0687
240
+ 0 ]
241
+ /Rect [ 62.69291
242
+ 634.8187
243
+ 142.1429
244
+ 646.8187 ]
245
+ /Subtype /Link
246
+ /Type /Annot >>
247
+ endobj
248
+ % 'Annot.NUMBER10': class LinkAnnotation
249
+ 16 0 obj
250
+ << /Border [ 0
251
+ 0
252
+ 0 ]
253
+ /Contents ()
254
+ /Dest [ 56 0 R
255
+ /XYZ
256
+ 62.69291
257
+ 748.0687
258
+ 0 ]
259
+ /Rect [ 527.0227
260
+ 634.8187
261
+ 532.5827
262
+ 646.8187 ]
263
+ /Subtype /Link
264
+ /Type /Annot >>
265
+ endobj
266
+ % 'Annot.NUMBER11': class LinkAnnotation
267
+ 17 0 obj
268
+ << /Border [ 0
269
+ 0
270
+ 0 ]
271
+ /Contents ()
272
+ /Dest [ 56 0 R
273
+ /XYZ
274
+ 62.69291
275
+ 631.0687
276
+ 0 ]
277
+ /Rect [ 82.69291
278
+ 616.8187
279
+ 178.3029
280
+ 628.8187 ]
281
+ /Subtype /Link
282
+ /Type /Annot >>
283
+ endobj
284
+ % 'Annot.NUMBER12': class LinkAnnotation
285
+ 18 0 obj
286
+ << /Border [ 0
287
+ 0
288
+ 0 ]
289
+ /Contents ()
290
+ /Dest [ 56 0 R
291
+ /XYZ
292
+ 62.69291
293
+ 631.0687
294
+ 0 ]
295
+ /Rect [ 527.0227
296
+ 616.8187
297
+ 532.5827
298
+ 628.8187 ]
299
+ /Subtype /Link
300
+ /Type /Annot >>
301
+ endobj
302
+ % 'Annot.NUMBER13': class LinkAnnotation
303
+ 19 0 obj
304
+ << /Border [ 0
305
+ 0
306
+ 0 ]
307
+ /Contents ()
308
+ /Dest [ 57 0 R
309
+ /XYZ
310
+ 62.69291
311
+ 748.0687
312
+ 0 ]
313
+ /Rect [ 82.69291
314
+ 598.8187
315
+ 190.5329
316
+ 610.8187 ]
317
+ /Subtype /Link
318
+ /Type /Annot >>
319
+ endobj
320
+ % 'Annot.NUMBER14': class LinkAnnotation
321
+ 20 0 obj
322
+ << /Border [ 0
323
+ 0
324
+ 0 ]
325
+ /Contents ()
326
+ /Dest [ 57 0 R
327
+ /XYZ
328
+ 62.69291
329
+ 748.0687
330
+ 0 ]
331
+ /Rect [ 527.0227
332
+ 598.8187
333
+ 532.5827
334
+ 610.8187 ]
335
+ /Subtype /Link
336
+ /Type /Annot >>
337
+ endobj
338
+ % 'Annot.NUMBER15': class LinkAnnotation
339
+ 21 0 obj
340
+ << /Border [ 0
341
+ 0
342
+ 0 ]
343
+ /Contents ()
344
+ /Dest [ 61 0 R
345
+ /XYZ
346
+ 62.69291
347
+ 748.0687
348
+ 0 ]
349
+ /Rect [ 102.6929
350
+ 580.8187
351
+ 198.8629
352
+ 592.8187 ]
353
+ /Subtype /Link
354
+ /Type /Annot >>
355
+ endobj
356
+ % 'Annot.NUMBER16': class LinkAnnotation
357
+ 22 0 obj
358
+ << /Border [ 0
359
+ 0
360
+ 0 ]
361
+ /Contents ()
362
+ /Dest [ 61 0 R
363
+ /XYZ
364
+ 62.69291
365
+ 748.0687
366
+ 0 ]
367
+ /Rect [ 521.4627
368
+ 580.8187
369
+ 532.5827
370
+ 592.8187 ]
371
+ /Subtype /Link
372
+ /Type /Annot >>
373
+ endobj
374
+ % 'Annot.NUMBER17': class LinkAnnotation
375
+ 23 0 obj
376
+ << /Border [ 0
377
+ 0
378
+ 0 ]
379
+ /Contents ()
380
+ /Dest [ 62 0 R
381
+ /XYZ
382
+ 62.69291
383
+ 718.0687
384
+ 0 ]
385
+ /Rect [ 102.6929
386
+ 562.8187
387
+ 201.0829
388
+ 574.8187 ]
389
+ /Subtype /Link
390
+ /Type /Annot >>
391
+ endobj
392
+ % 'Annot.NUMBER18': class LinkAnnotation
393
+ 24 0 obj
394
+ << /Border [ 0
395
+ 0
396
+ 0 ]
397
+ /Contents ()
398
+ /Dest [ 62 0 R
399
+ /XYZ
400
+ 62.69291
401
+ 718.0687
402
+ 0 ]
403
+ /Rect [ 521.4627
404
+ 562.8187
405
+ 532.5827
406
+ 574.8187 ]
407
+ /Subtype /Link
408
+ /Type /Annot >>
409
+ endobj
410
+ % 'Annot.NUMBER19': class LinkAnnotation
411
+ 25 0 obj
412
+ << /Border [ 0
413
+ 0
414
+ 0 ]
415
+ /Contents ()
416
+ /Dest [ 64 0 R
417
+ /XYZ
418
+ 62.69291
419
+ 748.0687
420
+ 0 ]
421
+ /Rect [ 62.69291
422
+ 544.8187
423
+ 128.2629
424
+ 556.8187 ]
425
+ /Subtype /Link
426
+ /Type /Annot >>
427
+ endobj
428
+ % 'Annot.NUMBER20': class LinkAnnotation
429
+ 26 0 obj
430
+ << /Border [ 0
431
+ 0
432
+ 0 ]
433
+ /Contents ()
434
+ /Dest [ 64 0 R
435
+ /XYZ
436
+ 62.69291
437
+ 748.0687
438
+ 0 ]
439
+ /Rect [ 521.4627
440
+ 544.8187
441
+ 532.5827
442
+ 556.8187 ]
443
+ /Subtype /Link
444
+ /Type /Annot >>
445
+ endobj
446
+ % 'Annot.NUMBER21': class LinkAnnotation
447
+ 27 0 obj
448
+ << /Border [ 0
449
+ 0
450
+ 0 ]
451
+ /Contents ()
452
+ /Dest [ 64 0 R
453
+ /XYZ
454
+ 62.69291
455
+ 715.0687
456
+ 0 ]
457
+ /Rect [ 82.69291
458
+ 526.8187
459
+ 237.2129
460
+ 538.8187 ]
461
+ /Subtype /Link
462
+ /Type /Annot >>
463
+ endobj
464
+ % 'Annot.NUMBER22': class LinkAnnotation
465
+ 28 0 obj
466
+ << /Border [ 0
467
+ 0
468
+ 0 ]
469
+ /Contents ()
470
+ /Dest [ 64 0 R
471
+ /XYZ
472
+ 62.69291
473
+ 715.0687
474
+ 0 ]
475
+ /Rect [ 521.4627
476
+ 526.8187
477
+ 532.5827
478
+ 538.8187 ]
479
+ /Subtype /Link
480
+ /Type /Annot >>
481
+ endobj
482
+ % 'Annot.NUMBER23': class LinkAnnotation
483
+ 29 0 obj
484
+ << /Border [ 0
485
+ 0
486
+ 0 ]
487
+ /Contents ()
488
+ /Dest [ 64 0 R
489
+ /XYZ
490
+ 62.69291
491
+ 553.0687
492
+ 0 ]
493
+ /Rect [ 82.69291
494
+ 508.8187
495
+ 289.4529
496
+ 520.8187 ]
497
+ /Subtype /Link
498
+ /Type /Annot >>
499
+ endobj
500
+ % 'Annot.NUMBER24': class LinkAnnotation
501
+ 30 0 obj
502
+ << /Border [ 0
503
+ 0
504
+ 0 ]
505
+ /Contents ()
506
+ /Dest [ 64 0 R
507
+ /XYZ
508
+ 62.69291
509
+ 553.0687
510
+ 0 ]
511
+ /Rect [ 521.4627
512
+ 508.8187
513
+ 532.5827
514
+ 520.8187 ]
515
+ /Subtype /Link
516
+ /Type /Annot >>
517
+ endobj
518
+ % 'Annot.NUMBER25': class LinkAnnotation
519
+ 31 0 obj
520
+ << /Border [ 0
521
+ 0
522
+ 0 ]
523
+ /Contents ()
524
+ /Dest [ 64 0 R
525
+ /XYZ
526
+ 62.69291
527
+ 361.0687
528
+ 0 ]
529
+ /Rect [ 62.69291
530
+ 490.8187
531
+ 129.9529
532
+ 502.8187 ]
533
+ /Subtype /Link
534
+ /Type /Annot >>
535
+ endobj
536
+ % 'Annot.NUMBER26': class LinkAnnotation
537
+ 32 0 obj
538
+ << /Border [ 0
539
+ 0
540
+ 0 ]
541
+ /Contents ()
542
+ /Dest [ 64 0 R
543
+ /XYZ
544
+ 62.69291
545
+ 361.0687
546
+ 0 ]
547
+ /Rect [ 521.4627
548
+ 490.8187
549
+ 532.5827
550
+ 502.8187 ]
551
+ /Subtype /Link
552
+ /Type /Annot >>
553
+ endobj
554
+ % 'Annot.NUMBER27': class LinkAnnotation
555
+ 33 0 obj
556
+ << /Border [ 0
557
+ 0
558
+ 0 ]
559
+ /Contents ()
560
+ /Dest [ 65 0 R
561
+ /XYZ
562
+ 62.69291
563
+ 748.0687
564
+ 0 ]
565
+ /Rect [ 62.69291
566
+ 472.8187
567
+ 109.9329
568
+ 484.8187 ]
569
+ /Subtype /Link
570
+ /Type /Annot >>
571
+ endobj
572
+ % 'Annot.NUMBER28': class LinkAnnotation
573
+ 34 0 obj
574
+ << /Border [ 0
575
+ 0
576
+ 0 ]
577
+ /Contents ()
578
+ /Dest [ 65 0 R
579
+ /XYZ
580
+ 62.69291
581
+ 748.0687
582
+ 0 ]
583
+ /Rect [ 521.4627
584
+ 472.8187
585
+ 532.5827
586
+ 484.8187 ]
587
+ /Subtype /Link
588
+ /Type /Annot >>
589
+ endobj
590
+ % 'Annot.NUMBER29': class LinkAnnotation
591
+ 35 0 obj
592
+ << /Border [ 0
593
+ 0
594
+ 0 ]
595
+ /Contents ()
596
+ /Dest [ 65 0 R
597
+ /XYZ
598
+ 62.69291
599
+ 691.0687
600
+ 0 ]
601
+ /Rect [ 82.69291
602
+ 454.8187
603
+ 216.6329
604
+ 466.8187 ]
605
+ /Subtype /Link
606
+ /Type /Annot >>
607
+ endobj
608
+ % 'Annot.NUMBER30': class LinkAnnotation
609
+ 36 0 obj
610
+ << /Border [ 0
611
+ 0
612
+ 0 ]
613
+ /Contents ()
614
+ /Dest [ 65 0 R
615
+ /XYZ
616
+ 62.69291
617
+ 691.0687
618
+ 0 ]
619
+ /Rect [ 521.4627
620
+ 454.8187
621
+ 532.5827
622
+ 466.8187 ]
623
+ /Subtype /Link
624
+ /Type /Annot >>
625
+ endobj
626
+ % 'Annot.NUMBER31': class LinkAnnotation
627
+ 37 0 obj
628
+ << /Border [ 0
629
+ 0
630
+ 0 ]
631
+ /Contents ()
632
+ /Dest [ 66 0 R
633
+ /XYZ
634
+ 62.69291
635
+ 748.0687
636
+ 0 ]
637
+ /Rect [ 62.69291
638
+ 436.8187
639
+ 142.1629
640
+ 448.8187 ]
641
+ /Subtype /Link
642
+ /Type /Annot >>
643
+ endobj
644
+ % 'Annot.NUMBER32': class LinkAnnotation
645
+ 38 0 obj
646
+ << /Border [ 0
647
+ 0
648
+ 0 ]
649
+ /Contents ()
650
+ /Dest [ 66 0 R
651
+ /XYZ
652
+ 62.69291
653
+ 748.0687
654
+ 0 ]
655
+ /Rect [ 521.4627
656
+ 436.8187
657
+ 532.5827
658
+ 448.8187 ]
659
+ /Subtype /Link
660
+ /Type /Annot >>
661
+ endobj
662
+ % 'Annot.NUMBER33': class LinkAnnotation
663
+ 39 0 obj
664
+ << /Border [ 0
665
+ 0
666
+ 0 ]
667
+ /Contents ()
668
+ /Dest [ 66 0 R
669
+ /XYZ
670
+ 62.69291
671
+ 494.0687
672
+ 0 ]
673
+ /Rect [ 82.69291
674
+ 418.8187
675
+ 244.4429
676
+ 430.8187 ]
677
+ /Subtype /Link
678
+ /Type /Annot >>
679
+ endobj
680
+ % 'Annot.NUMBER34': class LinkAnnotation
681
+ 40 0 obj
682
+ << /Border [ 0
683
+ 0
684
+ 0 ]
685
+ /Contents ()
686
+ /Dest [ 66 0 R
687
+ /XYZ
688
+ 62.69291
689
+ 494.0687
690
+ 0 ]
691
+ /Rect [ 521.4627
692
+ 418.8187
693
+ 532.5827
694
+ 430.8187 ]
695
+ /Subtype /Link
696
+ /Type /Annot >>
697
+ endobj
698
+ % 'Annot.NUMBER35': class LinkAnnotation
699
+ 41 0 obj
700
+ << /Border [ 0
701
+ 0
702
+ 0 ]
703
+ /Contents ()
704
+ /Dest [ 67 0 R
705
+ /XYZ
706
+ 62.69291
707
+ 748.0687
708
+ 0 ]
709
+ /Rect [ 82.69291
710
+ 400.8187
711
+ 173.8629
712
+ 412.8187 ]
713
+ /Subtype /Link
714
+ /Type /Annot >>
715
+ endobj
716
+ % 'Annot.NUMBER36': class LinkAnnotation
717
+ 42 0 obj
718
+ << /Border [ 0
719
+ 0
720
+ 0 ]
721
+ /Contents ()
722
+ /Dest [ 67 0 R
723
+ /XYZ
724
+ 62.69291
725
+ 748.0687
726
+ 0 ]
727
+ /Rect [ 521.4627
728
+ 400.8187
729
+ 532.5827
730
+ 412.8187 ]
731
+ /Subtype /Link
732
+ /Type /Annot >>
733
+ endobj
734
+ % 'Annot.NUMBER37': class LinkAnnotation
735
+ 43 0 obj
736
+ << /Border [ 0
737
+ 0
738
+ 0 ]
739
+ /Contents ()
740
+ /Dest [ 67 0 R
741
+ /XYZ
742
+ 62.69291
743
+ 532.0687
744
+ 0 ]
745
+ /Rect [ 82.69291
746
+ 382.8187
747
+ 153.2929
748
+ 394.8187 ]
749
+ /Subtype /Link
750
+ /Type /Annot >>
751
+ endobj
752
+ % 'Annot.NUMBER38': class LinkAnnotation
753
+ 44 0 obj
754
+ << /Border [ 0
755
+ 0
756
+ 0 ]
757
+ /Contents ()
758
+ /Dest [ 67 0 R
759
+ /XYZ
760
+ 62.69291
761
+ 532.0687
762
+ 0 ]
763
+ /Rect [ 521.4627
764
+ 382.8187
765
+ 532.5827
766
+ 394.8187 ]
767
+ /Subtype /Link
768
+ /Type /Annot >>
769
+ endobj
770
+ % 'Annot.NUMBER39': class LinkAnnotation
771
+ 45 0 obj
772
+ << /Border [ 0
773
+ 0
774
+ 0 ]
775
+ /Contents ()
776
+ /Dest [ 67 0 R
777
+ /XYZ
778
+ 62.69291
779
+ 322.0687
780
+ 0 ]
781
+ /Rect [ 62.69291
782
+ 364.8187
783
+ 204.9529
784
+ 376.8187 ]
785
+ /Subtype /Link
786
+ /Type /Annot >>
787
+ endobj
788
+ % 'Annot.NUMBER40': class LinkAnnotation
789
+ 46 0 obj
790
+ << /Border [ 0
791
+ 0
792
+ 0 ]
793
+ /Contents ()
794
+ /Dest [ 67 0 R
795
+ /XYZ
796
+ 62.69291
797
+ 322.0687
798
+ 0 ]
799
+ /Rect [ 521.4627
800
+ 364.8187
801
+ 532.5827
802
+ 376.8187 ]
803
+ /Subtype /Link
804
+ /Type /Annot >>
805
+ endobj
806
+ % 'Annot.NUMBER41': class LinkAnnotation
807
+ 47 0 obj
808
+ << /Border [ 0
809
+ 0
810
+ 0 ]
811
+ /Contents ()
812
+ /Dest [ 68 0 R
813
+ /XYZ
814
+ 62.69291
815
+ 718.0687
816
+ 0 ]
817
+ /Rect [ 82.69291
818
+ 346.8187
819
+ 220.5329
820
+ 358.8187 ]
821
+ /Subtype /Link
822
+ /Type /Annot >>
823
+ endobj
824
+ % 'Annot.NUMBER42': class LinkAnnotation
825
+ 48 0 obj
826
+ << /Border [ 0
827
+ 0
828
+ 0 ]
829
+ /Contents ()
830
+ /Dest [ 68 0 R
831
+ /XYZ
832
+ 62.69291
833
+ 718.0687
834
+ 0 ]
835
+ /Rect [ 521.4627
836
+ 346.8187
837
+ 532.5827
838
+ 358.8187 ]
839
+ /Subtype /Link
840
+ /Type /Annot >>
841
+ endobj
842
+ % 'Page2': class PDFPage
843
+ 49 0 obj
844
+ % Page dictionary
845
+ << /Annots [ 7 0 R
846
+ 8 0 R
847
+ 9 0 R
848
+ 10 0 R
849
+ 11 0 R
850
+ 12 0 R
851
+ 13 0 R
852
+ 14 0 R
853
+ 15 0 R
854
+ 16 0 R
855
+ 17 0 R
856
+ 18 0 R
857
+ 19 0 R
858
+ 20 0 R
859
+ 21 0 R
860
+ 22 0 R
861
+ 23 0 R
862
+ 24 0 R
863
+ 25 0 R
864
+ 26 0 R
865
+ 27 0 R
866
+ 28 0 R
867
+ 29 0 R
868
+ 30 0 R
869
+ 31 0 R
870
+ 32 0 R
871
+ 33 0 R
872
+ 34 0 R
873
+ 35 0 R
874
+ 36 0 R
875
+ 37 0 R
876
+ 38 0 R
877
+ 39 0 R
878
+ 40 0 R
879
+ 41 0 R
880
+ 42 0 R
881
+ 43 0 R
882
+ 44 0 R
883
+ 45 0 R
884
+ 46 0 R
885
+ 47 0 R
886
+ 48 0 R ]
887
+ /Contents 95 0 R
888
+ /MediaBox [ 0
889
+ 0
890
+ 595.2756
891
+ 841.8898 ]
892
+ /Parent 93 0 R
893
+ /Resources << /Font 1 0 R
894
+ /ProcSet [ /PDF
895
+ /Text
896
+ /ImageB
897
+ /ImageC
898
+ /ImageI ]
899
+ /XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
900
+ /Rotate 0
901
+ /Trans << >>
902
+ /Type /Page >>
903
+ endobj
904
+ % 'F3': class PDFType1Font
905
+ 50 0 obj
906
+ % Font Helvetica-BoldOblique
907
+ << /BaseFont /Helvetica-BoldOblique
908
+ /Encoding /WinAnsiEncoding
909
+ /Name /F3
910
+ /Subtype /Type1
911
+ /Type /Font >>
912
+ endobj
913
+ % 'Page3': class PDFPage
914
+ 51 0 obj
915
+ % Page dictionary
916
+ << /Contents 96 0 R
917
+ /MediaBox [ 0
918
+ 0
919
+ 595.2756
920
+ 841.8898 ]
921
+ /Parent 93 0 R
922
+ /Resources << /Font 1 0 R
923
+ /ProcSet [ /PDF
924
+ /Text
925
+ /ImageB
926
+ /ImageC
927
+ /ImageI ]
928
+ /XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
929
+ /Rotate 0
930
+ /Trans << >>
931
+ /Type /Page >>
932
+ endobj
933
+ % 'Page4': class PDFPage
934
+ 52 0 obj
935
+ % Page dictionary
936
+ << /Contents 97 0 R
937
+ /MediaBox [ 0
938
+ 0
939
+ 595.2756
940
+ 841.8898 ]
941
+ /Parent 93 0 R
942
+ /Resources << /Font 1 0 R
943
+ /ProcSet [ /PDF
944
+ /Text
945
+ /ImageB
946
+ /ImageC
947
+ /ImageI ]
948
+ /XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
949
+ /Rotate 0
950
+ /Trans << >>
951
+ /Type /Page >>
952
+ endobj
953
+ % 'Annot.NUMBER43': class PDFDictionary
954
+ 53 0 obj
955
+ << /A << /S /URI
956
+ /Type /Action
957
+ /URI (http://www.magentocommerce.com/magento-connect/mage-expercash.html) >>
958
+ /Border [ 0
959
+ 0
960
+ 0 ]
961
+ /Rect [ 89.02291
962
+ 294.8187
963
+ 424.6929
964
+ 306.8187 ]
965
+ /Subtype /Link
966
+ /Type /Annot >>
967
+ endobj
968
+ % 'Page5': class PDFPage
969
+ 54 0 obj
970
+ % Page dictionary
971
+ << /Annots [ 53 0 R ]
972
+ /Contents 98 0 R
973
+ /MediaBox [ 0
974
+ 0
975
+ 595.2756
976
+ 841.8898 ]
977
+ /Parent 93 0 R
978
+ /Resources << /Font 1 0 R
979
+ /ProcSet [ /PDF
980
+ /Text
981
+ /ImageB
982
+ /ImageC
983
+ /ImageI ]
984
+ /XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
985
+ /Rotate 0
986
+ /Trans << >>
987
+ /Type /Page >>
988
+ endobj
989
+ % 'Annot.NUMBER44': class PDFDictionary
990
+ 55 0 obj
991
+ << /A << /S /URI
992
+ /Type /Action
993
+ /URI (https://) >>
994
+ /Border [ 0
995
+ 0
996
+ 0 ]
997
+ /Rect [ 468.6147
998
+ 298.8187
999
+ 501.4147
1000
+ 310.8187 ]
1001
+ /Subtype /Link
1002
+ /Type /Annot >>
1003
+ endobj
1004
+ % 'Page6': class PDFPage
1005
+ 56 0 obj
1006
+ % Page dictionary
1007
+ << /Annots [ 55 0 R ]
1008
+ /Contents 99 0 R
1009
+ /MediaBox [ 0
1010
+ 0
1011
+ 595.2756
1012
+ 841.8898 ]
1013
+ /Parent 93 0 R
1014
+ /Resources << /Font 1 0 R
1015
+ /ProcSet [ /PDF
1016
+ /Text
1017
+ /ImageB
1018
+ /ImageC
1019
+ /ImageI ]
1020
+ /XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
1021
+ /Rotate 0
1022
+ /Trans << >>
1023
+ /Type /Page >>
1024
+ endobj
1025
+ % 'Page7': class PDFPage
1026
+ 57 0 obj
1027
+ % Page dictionary
1028
+ << /Contents 100 0 R
1029
+ /MediaBox [ 0
1030
+ 0
1031
+ 595.2756
1032
+ 841.8898 ]
1033
+ /Parent 93 0 R
1034
+ /Resources << /Font 1 0 R
1035
+ /ProcSet [ /PDF
1036
+ /Text
1037
+ /ImageB
1038
+ /ImageC
1039
+ /ImageI ]
1040
+ /XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
1041
+ /Rotate 0
1042
+ /Trans << >>
1043
+ /Type /Page >>
1044
+ endobj
1045
+ % 'Page8': class PDFPage
1046
+ 58 0 obj
1047
+ % Page dictionary
1048
+ << /Contents 101 0 R
1049
+ /MediaBox [ 0
1050
+ 0
1051
+ 595.2756
1052
+ 841.8898 ]
1053
+ /Parent 93 0 R
1054
+ /Resources << /Font 1 0 R
1055
+ /ProcSet [ /PDF
1056
+ /Text
1057
+ /ImageB
1058
+ /ImageC
1059
+ /ImageI ]
1060
+ /XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
1061
+ /Rotate 0
1062
+ /Trans << >>
1063
+ /Type /Page >>
1064
+ endobj
1065
+ % 'F4': class PDFType1Font
1066
+ 59 0 obj
1067
+ % Font Helvetica-Oblique
1068
+ << /BaseFont /Helvetica-Oblique
1069
+ /Encoding /WinAnsiEncoding
1070
+ /Name /F4
1071
+ /Subtype /Type1
1072
+ /Type /Font >>
1073
+ endobj
1074
+ % 'Page9': class PDFPage
1075
+ 60 0 obj
1076
+ % Page dictionary
1077
+ << /Contents 102 0 R
1078
+ /MediaBox [ 0
1079
+ 0
1080
+ 595.2756
1081
+ 841.8898 ]
1082
+ /Parent 93 0 R
1083
+ /Resources << /Font 1 0 R
1084
+ /ProcSet [ /PDF
1085
+ /Text
1086
+ /ImageB
1087
+ /ImageC
1088
+ /ImageI ]
1089
+ /XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
1090
+ /Rotate 0
1091
+ /Trans << >>
1092
+ /Type /Page >>
1093
+ endobj
1094
+ % 'Page10': class PDFPage
1095
+ 61 0 obj
1096
+ % Page dictionary
1097
+ << /Contents 103 0 R
1098
+ /MediaBox [ 0
1099
+ 0
1100
+ 595.2756
1101
+ 841.8898 ]
1102
+ /Parent 93 0 R
1103
+ /Resources << /Font 1 0 R
1104
+ /ProcSet [ /PDF
1105
+ /Text
1106
+ /ImageB
1107
+ /ImageC
1108
+ /ImageI ]
1109
+ /XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
1110
+ /Rotate 0
1111
+ /Trans << >>
1112
+ /Type /Page >>
1113
+ endobj
1114
+ % 'Page11': class PDFPage
1115
+ 62 0 obj
1116
+ % Page dictionary
1117
+ << /Contents 104 0 R
1118
+ /MediaBox [ 0
1119
+ 0
1120
+ 595.2756
1121
+ 841.8898 ]
1122
+ /Parent 93 0 R
1123
+ /Resources << /Font 1 0 R
1124
+ /ProcSet [ /PDF
1125
+ /Text
1126
+ /ImageB
1127
+ /ImageC
1128
+ /ImageI ]
1129
+ /XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
1130
+ /Rotate 0
1131
+ /Trans << >>
1132
+ /Type /Page >>
1133
+ endobj
1134
+ % 'Annot.NUMBER45': class PDFDictionary
1135
+ 63 0 obj
1136
+ << /A << /S /URI
1137
+ /Type /Action
1138
+ /URI (http://www.youtube.com/user/ExpercashDE) >>
1139
+ /Border [ 0
1140
+ 0
1141
+ 0 ]
1142
+ /Rect [ 128.2929
1143
+ 286.8187
1144
+ 321.1429
1145
+ 298.8187 ]
1146
+ /Subtype /Link
1147
+ /Type /Annot >>
1148
+ endobj
1149
+ % 'Page12': class PDFPage
1150
+ 64 0 obj
1151
+ % Page dictionary
1152
+ << /Annots [ 63 0 R ]
1153
+ /Contents 105 0 R
1154
+ /MediaBox [ 0
1155
+ 0
1156
+ 595.2756
1157
+ 841.8898 ]
1158
+ /Parent 93 0 R
1159
+ /Resources << /Font 1 0 R
1160
+ /ProcSet [ /PDF
1161
+ /Text
1162
+ /ImageB
1163
+ /ImageC
1164
+ /ImageI ]
1165
+ /XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
1166
+ /Rotate 0
1167
+ /Trans << >>
1168
+ /Type /Page >>
1169
+ endobj
1170
+ % 'Page13': class PDFPage
1171
+ 65 0 obj
1172
+ % Page dictionary
1173
+ << /Contents 106 0 R
1174
+ /MediaBox [ 0
1175
+ 0
1176
+ 595.2756
1177
+ 841.8898 ]
1178
+ /Parent 93 0 R
1179
+ /Resources << /Font 1 0 R
1180
+ /ProcSet [ /PDF
1181
+ /Text
1182
+ /ImageB
1183
+ /ImageC
1184
+ /ImageI ]
1185
+ /XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
1186
+ /Rotate 0
1187
+ /Trans << >>
1188
+ /Type /Page >>
1189
+ endobj
1190
+ % 'Page14': class PDFPage
1191
+ 66 0 obj
1192
+ % Page dictionary
1193
+ << /Contents 107 0 R
1194
+ /MediaBox [ 0
1195
+ 0
1196
+ 595.2756
1197
+ 841.8898 ]
1198
+ /Parent 93 0 R
1199
+ /Resources << /Font 1 0 R
1200
+ /ProcSet [ /PDF
1201
+ /Text
1202
+ /ImageB
1203
+ /ImageC
1204
+ /ImageI ]
1205
+ /XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
1206
+ /Rotate 0
1207
+ /Trans << >>
1208
+ /Type /Page >>
1209
+ endobj
1210
+ % 'Page15': class PDFPage
1211
+ 67 0 obj
1212
+ % Page dictionary
1213
+ << /Contents 108 0 R
1214
+ /MediaBox [ 0
1215
+ 0
1216
+ 595.2756
1217
+ 841.8898 ]
1218
+ /Parent 93 0 R
1219
+ /Resources << /Font 1 0 R
1220
+ /ProcSet [ /PDF
1221
+ /Text
1222
+ /ImageB
1223
+ /ImageC
1224
+ /ImageI ]
1225
+ /XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
1226
+ /Rotate 0
1227
+ /Trans << >>
1228
+ /Type /Page >>
1229
+ endobj
1230
+ % 'Page16': class PDFPage
1231
+ 68 0 obj
1232
+ % Page dictionary
1233
+ << /Contents 109 0 R
1234
+ /MediaBox [ 0
1235
+ 0
1236
+ 595.2756
1237
+ 841.8898 ]
1238
+ /Parent 93 0 R
1239
+ /Resources << /Font 1 0 R
1240
+ /ProcSet [ /PDF
1241
+ /Text
1242
+ /ImageB
1243
+ /ImageC
1244
+ /ImageI ]
1245
+ /XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
1246
+ /Rotate 0
1247
+ /Trans << >>
1248
+ /Type /Page >>
1249
+ endobj
1250
+ % 'R69': class PDFCatalog
1251
+ 69 0 obj
1252
+ % Document Root
1253
+ << /Outlines 71 0 R
1254
+ /PageLabels 110 0 R
1255
+ /PageMode /UseNone
1256
+ /Pages 93 0 R
1257
+ /Type /Catalog >>
1258
+ endobj
1259
+ % 'R70': class PDFInfo
1260
+ 70 0 obj
1261
+ << /Author ()
1262
+ /CreationDate (D:20150506161333-01'00')
1263
+ /Creator (\(unspecified\))
1264
+ /Keywords ()
1265
+ /Producer (ReportLab PDF Library - www.reportlab.com)
1266
+ /Subject (\(unspecified\))
1267
+ /Title () >>
1268
+ endobj
1269
+ % 'R71': class PDFOutlines
1270
+ 71 0 obj
1271
+ << /Count 28
1272
+ /First 72 0 R
1273
+ /Last 91 0 R
1274
+ /Type /Outlines >>
1275
+ endobj
1276
+ % 'Outline.0': class OutlineEntryObject
1277
+ 72 0 obj
1278
+ << /Dest [ 51 0 R
1279
+ /XYZ
1280
+ 62.69291
1281
+ 748.0687
1282
+ 0 ]
1283
+ /Next 73 0 R
1284
+ /Parent 71 0 R
1285
+ /Title (\376\377\0001\000\240\000\240\000\240\000E\000i\000n\000l\000e\000i\000t\000u\000n\000g) >>
1286
+ endobj
1287
+ % 'Outline.1': class OutlineEntryObject
1288
+ 73 0 obj
1289
+ << /Count 1
1290
+ /Dest [ 51 0 R
1291
+ /XYZ
1292
+ 62.69291
1293
+ 631.0687
1294
+ 0 ]
1295
+ /First 74 0 R
1296
+ /Last 74 0 R
1297
+ /Next 75 0 R
1298
+ /Parent 71 0 R
1299
+ /Prev 72 0 R
1300
+ /Title (\376\377\0002\000\240\000\240\000\240\000V\000o\000r\000a\000u\000s\000s\000e\000t\000z\000u\000n\000g\000e\000n) >>
1301
+ endobj
1302
+ % 'Outline.22.0': class OutlineEntryObject
1303
+ 74 0 obj
1304
+ << /Dest [ 51 0 R
1305
+ /XYZ
1306
+ 62.69291
1307
+ 598.0687
1308
+ 0 ]
1309
+ /Parent 73 0 R
1310
+ /Title (\376\377\0002\000.\0001\000\240\000\240\000\240\000A\000l\000l\000g\000e\000m\000e\000i\000n) >>
1311
+ endobj
1312
+ % 'Outline.2': class OutlineEntryObject
1313
+ 75 0 obj
1314
+ << /Dest [ 54 0 R
1315
+ /XYZ
1316
+ 62.69291
1317
+ 748.0687
1318
+ 0 ]
1319
+ /Next 76 0 R
1320
+ /Parent 71 0 R
1321
+ /Prev 73 0 R
1322
+ /Title (\376\377\0003\000\240\000\240\000\240\000I\000n\000s\000t\000a\000l\000l\000a\000t\000i\000o\000n) >>
1323
+ endobj
1324
+ % 'Outline.3': class OutlineEntryObject
1325
+ 76 0 obj
1326
+ << /Count 4
1327
+ /Dest [ 56 0 R
1328
+ /XYZ
1329
+ 62.69291
1330
+ 748.0687
1331
+ 0 ]
1332
+ /First 77 0 R
1333
+ /Last 78 0 R
1334
+ /Next 81 0 R
1335
+ /Parent 71 0 R
1336
+ /Prev 75 0 R
1337
+ /Title (\376\377\0004\000\240\000\240\000\240\000K\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n) >>
1338
+ endobj
1339
+ % 'Outline.23.0': class OutlineEntryObject
1340
+ 77 0 obj
1341
+ << /Dest [ 56 0 R
1342
+ /XYZ
1343
+ 62.69291
1344
+ 631.0687
1345
+ 0 ]
1346
+ /Next 78 0 R
1347
+ /Parent 76 0 R
1348
+ /Title (\376\377\0004\000.\0001\000\240\000\240\000\240\000Z\000a\000h\000l\000u\000n\000g\000s\000d\000i\000e\000n\000s\000t\000e) >>
1349
+ endobj
1350
+ % 'Outline.23.1': class OutlineEntryObject
1351
+ 78 0 obj
1352
+ << /Count 2
1353
+ /Dest [ 57 0 R
1354
+ /XYZ
1355
+ 62.69291
1356
+ 748.0687
1357
+ 0 ]
1358
+ /First 79 0 R
1359
+ /Last 80 0 R
1360
+ /Parent 76 0 R
1361
+ /Prev 77 0 R
1362
+ /Title (\376\377\0004\000.\0002\000\240\000\240\000\240\000Z\000a\000h\000l\000u\000n\000g\000s\000m\000e\000t\000h\000o\000d\000e\000n) >>
1363
+ endobj
1364
+ % 'Outline.24.0': class OutlineEntryObject
1365
+ 79 0 obj
1366
+ << /Dest [ 61 0 R
1367
+ /XYZ
1368
+ 62.69291
1369
+ 748.0687
1370
+ 0 ]
1371
+ /Next 80 0 R
1372
+ /Parent 78 0 R
1373
+ /Title (\376\377\0004\000.\0002\000.\0001\000\240\000\240\000\240\000Z\000a\000h\000l\000u\000n\000g\000s\000t\000y\000p\000e\000n) >>
1374
+ endobj
1375
+ % 'Outline.24.1': class OutlineEntryObject
1376
+ 80 0 obj
1377
+ << /Dest [ 62 0 R
1378
+ /XYZ
1379
+ 62.69291
1380
+ 718.0687
1381
+ 0 ]
1382
+ /Parent 78 0 R
1383
+ /Prev 79 0 R
1384
+ /Title (\376\377\0004\000.\0002\000.\0002\000\240\000\240\000\240\000Z\000a\000h\000l\000u\000n\000g\000s\000s\000t\000a\000t\000u\000s) >>
1385
+ endobj
1386
+ % 'Outline.4': class OutlineEntryObject
1387
+ 81 0 obj
1388
+ << /Count 2
1389
+ /Dest [ 64 0 R
1390
+ /XYZ
1391
+ 62.69291
1392
+ 748.0687
1393
+ 0 ]
1394
+ /First 82 0 R
1395
+ /Last 83 0 R
1396
+ /Next 84 0 R
1397
+ /Parent 71 0 R
1398
+ /Prev 76 0 R
1399
+ /Title (\376\377\0005\000\240\000\240\000\240\000B\000e\000d\000i\000e\000n\000u\000n\000g) >>
1400
+ endobj
1401
+ % 'Outline.25.0': class OutlineEntryObject
1402
+ 82 0 obj
1403
+ << /Dest [ 64 0 R
1404
+ /XYZ
1405
+ 62.69291
1406
+ 715.0687
1407
+ 0 ]
1408
+ /Next 83 0 R
1409
+ /Parent 81 0 R
1410
+ /Title (\376\377\0005\000.\0001\000\240\000\240\000\240\000R\000e\000c\000h\000n\000u\000n\000g\000s\000e\000r\000s\000t\000e\000l\000l\000u\000n\000g\000/\000C\000a\000p\000t\000u\000r\000e) >>
1411
+ endobj
1412
+ % 'Outline.25.1': class OutlineEntryObject
1413
+ 83 0 obj
1414
+ << /Dest [ 64 0 R
1415
+ /XYZ
1416
+ 62.69291
1417
+ 553.0687
1418
+ 0 ]
1419
+ /Parent 81 0 R
1420
+ /Prev 82 0 R
1421
+ /Title (\376\377\0005\000.\0002\000\240\000\240\000\240\000B\000e\000s\000o\000n\000d\000e\000r\000h\000e\000i\000t\000e\000n\000 \000M\000a\000s\000t\000e\000r\000P\000a\000s\000s\000 \000F\000u\000l\000l\000c\000h\000e\000c\000k\000o\000u\000t) >>
1422
+ endobj
1423
+ % 'Outline.5': class OutlineEntryObject
1424
+ 84 0 obj
1425
+ << /Dest [ 64 0 R
1426
+ /XYZ
1427
+ 62.69291
1428
+ 361.0687
1429
+ 0 ]
1430
+ /Next 85 0 R
1431
+ /Parent 71 0 R
1432
+ /Prev 81 0 R
1433
+ /Title (\376\377\0006\000\240\000\240\000\240\000S\000c\000r\000e\000e\000n\000c\000a\000s\000t) >>
1434
+ endobj
1435
+ % 'Outline.6': class OutlineEntryObject
1436
+ 85 0 obj
1437
+ << /Count 1
1438
+ /Dest [ 65 0 R
1439
+ /XYZ
1440
+ 62.69291
1441
+ 748.0687
1442
+ 0 ]
1443
+ /First 86 0 R
1444
+ /Last 86 0 R
1445
+ /Next 87 0 R
1446
+ /Parent 71 0 R
1447
+ /Prev 84 0 R
1448
+ /Title (\376\377\0007\000\240\000\240\000\240\000D\000e\000s\000i\000g\000n) >>
1449
+ endobj
1450
+ % 'Outline.26.0': class OutlineEntryObject
1451
+ 86 0 obj
1452
+ << /Dest [ 65 0 R
1453
+ /XYZ
1454
+ 62.69291
1455
+ 691.0687
1456
+ 0 ]
1457
+ /Parent 85 0 R
1458
+ /Title (\376\377\0007\000.\0001\000\240\000\240\000\240\000M\000a\000s\000t\000e\000r\000P\000a\000s\000s\000 \000F\000u\000l\000l\000c\000h\000e\000c\000k\000o\000u\000t) >>
1459
+ endobj
1460
+ % 'Outline.7': class OutlineEntryObject
1461
+ 87 0 obj
1462
+ << /Count 3
1463
+ /Dest [ 66 0 R
1464
+ /XYZ
1465
+ 62.69291
1466
+ 748.0687
1467
+ 0 ]
1468
+ /First 88 0 R
1469
+ /Last 90 0 R
1470
+ /Next 91 0 R
1471
+ /Parent 71 0 R
1472
+ /Prev 85 0 R
1473
+ /Title (\376\377\0008\000\240\000\240\000\240\000D\000e\000i\000n\000s\000t\000a\000l\000l\000a\000t\000i\000o\000n) >>
1474
+ endobj
1475
+ % 'Outline.27.0': class OutlineEntryObject
1476
+ 88 0 obj
1477
+ << /Dest [ 66 0 R
1478
+ /XYZ
1479
+ 62.69291
1480
+ 494.0687
1481
+ 0 ]
1482
+ /Next 89 0 R
1483
+ /Parent 87 0 R
1484
+ /Title (\376\377\0008\000.\0001\000\240\000\240\000\240\000P\000e\000r\000 \000M\000a\000g\000e\000n\000t\000o\000 \000C\000o\000n\000n\000e\000c\000t\000 \000M\000a\000n\000a\000g\000e\000r) >>
1485
+ endobj
1486
+ % 'Outline.27.1': class OutlineEntryObject
1487
+ 89 0 obj
1488
+ << /Dest [ 67 0 R
1489
+ /XYZ
1490
+ 62.69291
1491
+ 748.0687
1492
+ 0 ]
1493
+ /Next 90 0 R
1494
+ /Parent 87 0 R
1495
+ /Prev 88 0 R
1496
+ /Title (\376\377\0008\000.\0002\000\240\000\240\000\240\000A\000u\000f\000 \000D\000a\000t\000e\000i\000e\000b\000e\000n\000e) >>
1497
+ endobj
1498
+ % 'Outline.27.2': class OutlineEntryObject
1499
+ 90 0 obj
1500
+ << /Dest [ 67 0 R
1501
+ /XYZ
1502
+ 62.69291
1503
+ 532.0687
1504
+ 0 ]
1505
+ /Parent 87 0 R
1506
+ /Prev 89 0 R
1507
+ /Title (\376\377\0008\000.\0003\000\240\000\240\000\240\000D\000a\000t\000e\000n\000b\000a\000n\000k) >>
1508
+ endobj
1509
+ % 'Outline.8': class OutlineEntryObject
1510
+ 91 0 obj
1511
+ << /Count 1
1512
+ /Dest [ 67 0 R
1513
+ /XYZ
1514
+ 62.69291
1515
+ 322.0687
1516
+ 0 ]
1517
+ /First 92 0 R
1518
+ /Last 92 0 R
1519
+ /Parent 71 0 R
1520
+ /Prev 87 0 R
1521
+ /Title (\376\377\0009\000\240\000\240\000\240\000M\000i\000g\000r\000a\000t\000i\000o\000n\000 \000a\000u\000f\000 \000n\000e\000u\000e\000 \000V\000e\000r\000s\000i\000o\000n) >>
1522
+ endobj
1523
+ % 'Outline.28.0': class OutlineEntryObject
1524
+ 92 0 obj
1525
+ << /Dest [ 68 0 R
1526
+ /XYZ
1527
+ 62.69291
1528
+ 718.0687
1529
+ 0 ]
1530
+ /Parent 91 0 R
1531
+ /Title (\376\377\0009\000.\0001\000\240\000\240\000\240\000A\000l\000t\000e\000 \000V\000e\000r\000s\000i\000o\000n\000 \000d\000e\000i\000n\000s\000t\000a\000l\000l\000i\000e\000r\000e\000n) >>
1532
+ endobj
1533
+ % 'R93': class PDFPages
1534
+ 93 0 obj
1535
+ % page tree
1536
+ << /Count 16
1537
+ /Kids [ 6 0 R
1538
+ 49 0 R
1539
+ 51 0 R
1540
+ 52 0 R
1541
+ 54 0 R
1542
+ 56 0 R
1543
+ 57 0 R
1544
+ 58 0 R
1545
+ 60 0 R
1546
+ 61 0 R
1547
+ 62 0 R
1548
+ 64 0 R
1549
+ 65 0 R
1550
+ 66 0 R
1551
+ 67 0 R
1552
+ 68 0 R ]
1553
+ /Type /Pages >>
1554
+ endobj
1555
+ % 'R94': class PDFStream
1556
+ 94 0 obj
1557
+ % page stream
1558
+ << /Length 5341 >>
1559
+ stream
1560
+ 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
1561
+ q
1562
+ 1 0 0 1 62.69291 742.0687 cm
1563
+ Q
1564
+ q
1565
+ 1 0 0 1 62.69291 730.0687 cm
1566
+ q
1567
+ 0 0 0 rg
1568
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1569
+ Q
1570
+ Q
1571
+ q
1572
+ 1 0 0 1 62.69291 718.0687 cm
1573
+ q
1574
+ 0 0 0 rg
1575
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1576
+ Q
1577
+ Q
1578
+ q
1579
+ 1 0 0 1 62.69291 706.0687 cm
1580
+ q
1581
+ 0 0 0 rg
1582
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1583
+ Q
1584
+ Q
1585
+ q
1586
+ 1 0 0 1 62.69291 706.0687 cm
1587
+ Q
1588
+ q
1589
+ 1 0 0 1 62.69291 677.7223 cm
1590
+ n 0 14.17323 m 469.8898 14.17323 l S
1591
+ Q
1592
+ q
1593
+ 1 0 0 1 62.69291 659.7223 cm
1594
+ q
1595
+ 0 0 0 rg
1596
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Magento Extension zur Einbindung von Zahlungsmethoden f\374r den Zahlungsdienstleister Expercash) Tj T* ET
1597
+ Q
1598
+ Q
1599
+ q
1600
+ 1 0 0 1 62.69291 631.3758 cm
1601
+ n 0 14.17323 m 469.8898 14.17323 l S
1602
+ Q
1603
+ q
1604
+ 1 0 0 1 62.69291 625.3758 cm
1605
+ Q
1606
+ q
1607
+ 1 0 0 1 62.69291 613.3758 cm
1608
+ q
1609
+ 0 0 0 rg
1610
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1611
+ Q
1612
+ Q
1613
+ q
1614
+ 1 0 0 1 62.69291 601.3758 cm
1615
+ q
1616
+ 0 0 0 rg
1617
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1618
+ Q
1619
+ Q
1620
+ q
1621
+ 1 0 0 1 62.69291 589.3758 cm
1622
+ q
1623
+ 0 0 0 rg
1624
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1625
+ Q
1626
+ Q
1627
+ q
1628
+ 1 0 0 1 62.69291 577.3758 cm
1629
+ q
1630
+ 0 0 0 rg
1631
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1632
+ Q
1633
+ Q
1634
+ q
1635
+ 1 0 0 1 62.69291 565.3758 cm
1636
+ q
1637
+ 0 0 0 rg
1638
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1639
+ Q
1640
+ Q
1641
+ q
1642
+ 1 0 0 1 62.69291 553.3758 cm
1643
+ q
1644
+ 0 0 0 rg
1645
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1646
+ Q
1647
+ Q
1648
+ q
1649
+ 1 0 0 1 62.69291 541.3758 cm
1650
+ q
1651
+ 0 0 0 rg
1652
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1653
+ Q
1654
+ Q
1655
+ q
1656
+ 1 0 0 1 62.69291 529.3758 cm
1657
+ q
1658
+ 0 0 0 rg
1659
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1660
+ Q
1661
+ Q
1662
+ q
1663
+ 1 0 0 1 62.69291 517.3758 cm
1664
+ q
1665
+ 0 0 0 rg
1666
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1667
+ Q
1668
+ Q
1669
+ q
1670
+ 1 0 0 1 62.69291 505.3758 cm
1671
+ q
1672
+ 0 0 0 rg
1673
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1674
+ Q
1675
+ Q
1676
+ q
1677
+ 1 0 0 1 62.69291 505.3758 cm
1678
+ Q
1679
+ q
1680
+ 1 0 0 1 85.03937 411.3849 cm
1681
+ q
1682
+ 425.1969 0 0 93.99088 0 0 cm
1683
+ /FormXob.debfe39a01d8602d733fbbcad4ae132a Do
1684
+ Q
1685
+ Q
1686
+ q
1687
+ 1 0 0 1 62.69291 405.3849 cm
1688
+ Q
1689
+ q
1690
+ 1 0 0 1 62.69291 393.3849 cm
1691
+ q
1692
+ 0 0 0 rg
1693
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1694
+ Q
1695
+ Q
1696
+ q
1697
+ 1 0 0 1 62.69291 381.3849 cm
1698
+ q
1699
+ 0 0 0 rg
1700
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1701
+ Q
1702
+ Q
1703
+ q
1704
+ 1 0 0 1 62.69291 369.3849 cm
1705
+ q
1706
+ 0 0 0 rg
1707
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1708
+ Q
1709
+ Q
1710
+ q
1711
+ 1 0 0 1 62.69291 357.3849 cm
1712
+ q
1713
+ 0 0 0 rg
1714
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1715
+ Q
1716
+ Q
1717
+ q
1718
+ 1 0 0 1 62.69291 345.3849 cm
1719
+ q
1720
+ 0 0 0 rg
1721
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1722
+ Q
1723
+ Q
1724
+ q
1725
+ 1 0 0 1 62.69291 333.3849 cm
1726
+ q
1727
+ 0 0 0 rg
1728
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1729
+ Q
1730
+ Q
1731
+ q
1732
+ 1 0 0 1 62.69291 321.3849 cm
1733
+ q
1734
+ 0 0 0 rg
1735
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1736
+ Q
1737
+ Q
1738
+ q
1739
+ 1 0 0 1 62.69291 309.3849 cm
1740
+ q
1741
+ 0 0 0 rg
1742
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1743
+ Q
1744
+ Q
1745
+ q
1746
+ 1 0 0 1 62.69291 297.3849 cm
1747
+ q
1748
+ 0 0 0 rg
1749
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1750
+ Q
1751
+ Q
1752
+ q
1753
+ 1 0 0 1 62.69291 285.3849 cm
1754
+ q
1755
+ 0 0 0 rg
1756
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1757
+ Q
1758
+ Q
1759
+ q
1760
+ 1 0 0 1 62.69291 273.3849 cm
1761
+ q
1762
+ 0 0 0 rg
1763
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1764
+ Q
1765
+ Q
1766
+ q
1767
+ 1 0 0 1 62.69291 261.3849 cm
1768
+ q
1769
+ 0 0 0 rg
1770
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1771
+ Q
1772
+ Q
1773
+ q
1774
+ 1 0 0 1 62.69291 249.3849 cm
1775
+ q
1776
+ 0 0 0 rg
1777
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1778
+ Q
1779
+ Q
1780
+ q
1781
+ 1 0 0 1 62.69291 237.3849 cm
1782
+ q
1783
+ 0 0 0 rg
1784
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1785
+ Q
1786
+ Q
1787
+ q
1788
+ 1 0 0 1 62.69291 225.3849 cm
1789
+ q
1790
+ 0 0 0 rg
1791
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1792
+ Q
1793
+ Q
1794
+ q
1795
+ 1 0 0 1 62.69291 213.3849 cm
1796
+ q
1797
+ 0 0 0 rg
1798
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
1799
+ Q
1800
+ Q
1801
+ q
1802
+ 1 0 0 1 62.69291 213.3849 cm
1803
+ Q
1804
+ q
1805
+ 1 0 0 1 62.69291 207.3849 cm
1806
+ Q
1807
+ q
1808
+ 1 0 0 1 62.69291 192.3849 cm
1809
+ 0 0 0 rg
1810
+ BT /F1 10 Tf 12 TL ET
1811
+ q
1812
+ 1 0 0 1 6 3 cm
1813
+ q
1814
+ 0 0 0 rg
1815
+ BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 4.69937 0 Td (Modulversion:) Tj T* -4.69937 0 Td ET
1816
+ Q
1817
+ Q
1818
+ q
1819
+ 1 0 0 1 91.03937 3 cm
1820
+ q
1821
+ 0 0 0 rg
1822
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (15.05.06) Tj T* ET
1823
+ Q
1824
+ Q
1825
+ q
1826
+ Q
1827
+ Q
1828
+ q
1829
+ 1 0 0 1 62.69291 177.3849 cm
1830
+ 0 0 0 rg
1831
+ BT /F1 10 Tf 12 TL ET
1832
+ q
1833
+ 1 0 0 1 6 3 cm
1834
+ q
1835
+ 0 0 0 rg
1836
+ BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 42.47937 0 Td (Firma:) Tj T* -42.47937 0 Td ET
1837
+ Q
1838
+ Q
1839
+ q
1840
+ 1 0 0 1 91.03937 3 cm
1841
+ q
1842
+ BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Netresearch GmbH & Co.KG) Tj T* ET
1843
+ Q
1844
+ Q
1845
+ q
1846
+ Q
1847
+ Q
1848
+ q
1849
+ 1 0 0 1 62.69291 162.3849 cm
1850
+ 0 0 0 rg
1851
+ BT /F1 10 Tf 12 TL ET
1852
+ q
1853
+ 1 0 0 1 6 3 cm
1854
+ q
1855
+ 0 0 0 rg
1856
+ BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 31.37937 0 Td (Autoren:) Tj T* -31.37937 0 Td ET
1857
+ Q
1858
+ Q
1859
+ q
1860
+ 1 0 0 1 91.03937 3 cm
1861
+ q
1862
+ 0 0 0 rg
1863
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Sebastian Ertner, Michael L\374hr) Tj T* ET
1864
+ Q
1865
+ Q
1866
+ q
1867
+ Q
1868
+ Q
1869
+ q
1870
+ 1 0 0 1 62.69291 147.3849 cm
1871
+ 0 0 0 rg
1872
+ BT /F1 10 Tf 12 TL ET
1873
+ q
1874
+ 1 0 0 1 6 3 cm
1875
+ q
1876
+ 0 0 0 rg
1877
+ BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 38.59937 0 Td (Datum:) Tj T* -38.59937 0 Td ET
1878
+ Q
1879
+ Q
1880
+ q
1881
+ 1 0 0 1 91.03937 3 cm
1882
+ q
1883
+ 0 0 0 rg
1884
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (06.05.2015) Tj T* ET
1885
+ Q
1886
+ Q
1887
+ q
1888
+ Q
1889
+ Q
1890
+ q
1891
+ 1 0 0 1 62.69291 147.3849 cm
1892
+ Q
1893
+ q
1894
+ 1 0 0 1 411.0236 768.242 cm
1895
+ q
1896
+ 127.5591 0 0 45.30135 0 0 cm
1897
+ /FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
1898
+ Q
1899
+ Q
1900
+ q
1901
+ 1 0 0 1 56.69291 56.69291 cm
1902
+ 0 0 0 rg
1903
+ BT /F1 10 Tf 12 TL ET
1904
+ q
1905
+ 1 0 0 1 6 3 cm
1906
+ q
1907
+ 0 0 0 rg
1908
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
1909
+ Q
1910
+ Q
1911
+ q
1912
+ 1 0 0 1 246.9449 3 cm
1913
+ q
1914
+ 0 0 0 rg
1915
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 209.4849 0 Td (1/16) Tj T* -209.4849 0 Td ET
1916
+ Q
1917
+ Q
1918
+ q
1919
+ Q
1920
+ Q
1921
+
1922
+ endstream
1923
+ endobj
1924
+ % 'R95': class PDFStream
1925
+ 95 0 obj
1926
+ % page stream
1927
+ << /Length 6064 >>
1928
+ stream
1929
+ 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
1930
+ q
1931
+ 1 0 0 1 62.69291 727.0687 cm
1932
+ q
1933
+ BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 .533333 .603922 rg (Expercash - Benutzerdokumentation) Tj T* ET
1934
+ Q
1935
+ Q
1936
+ q
1937
+ 1 0 0 1 62.69291 343.0687 cm
1938
+ 0 0 0 rg
1939
+ BT /F1 10 Tf 12 TL ET
1940
+ q
1941
+ 1 0 0 1 0 363 cm
1942
+ q
1943
+ BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (1 Einleitung) Tj T* ET
1944
+ Q
1945
+ Q
1946
+ q
1947
+ 1 0 0 1 397.8898 363 cm
1948
+ q
1949
+ 0 0 .501961 rg
1950
+ 0 0 .501961 RG
1951
+ BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 66.44 0 Td (3) Tj T* -66.44 0 Td ET
1952
+ Q
1953
+ Q
1954
+ q
1955
+ 1 0 0 1 0 345 cm
1956
+ q
1957
+ BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (2 Voraussetzungen) Tj T* ET
1958
+ Q
1959
+ Q
1960
+ q
1961
+ 1 0 0 1 397.8898 345 cm
1962
+ q
1963
+ 0 0 .501961 rg
1964
+ 0 0 .501961 RG
1965
+ BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 66.44 0 Td (3) Tj T* -66.44 0 Td ET
1966
+ Q
1967
+ Q
1968
+ q
1969
+ 1 0 0 1 0 327 cm
1970
+ q
1971
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (2.1 Allgemein) Tj T* ET
1972
+ Q
1973
+ Q
1974
+ q
1975
+ 1 0 0 1 397.8898 327 cm
1976
+ q
1977
+ 0 0 .501961 rg
1978
+ 0 0 .501961 RG
1979
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (3) Tj T* -66.44 0 Td ET
1980
+ Q
1981
+ Q
1982
+ q
1983
+ 1 0 0 1 0 309 cm
1984
+ q
1985
+ BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (3 Installation) Tj T* ET
1986
+ Q
1987
+ Q
1988
+ q
1989
+ 1 0 0 1 397.8898 309 cm
1990
+ q
1991
+ 0 0 .501961 rg
1992
+ 0 0 .501961 RG
1993
+ BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 66.44 0 Td (5) Tj T* -66.44 0 Td ET
1994
+ Q
1995
+ Q
1996
+ q
1997
+ 1 0 0 1 0 291 cm
1998
+ q
1999
+ BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (4 Konfiguration) Tj T* ET
2000
+ Q
2001
+ Q
2002
+ q
2003
+ 1 0 0 1 397.8898 291 cm
2004
+ q
2005
+ 0 0 .501961 rg
2006
+ 0 0 .501961 RG
2007
+ BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 66.44 0 Td (6) Tj T* -66.44 0 Td ET
2008
+ Q
2009
+ Q
2010
+ q
2011
+ 1 0 0 1 0 273 cm
2012
+ q
2013
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.1 Zahlungsdienste) Tj T* ET
2014
+ Q
2015
+ Q
2016
+ q
2017
+ 1 0 0 1 397.8898 273 cm
2018
+ q
2019
+ 0 0 .501961 rg
2020
+ 0 0 .501961 RG
2021
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (6) Tj T* -66.44 0 Td ET
2022
+ Q
2023
+ Q
2024
+ q
2025
+ 1 0 0 1 0 255 cm
2026
+ q
2027
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.2 Zahlungsmethoden) Tj T* ET
2028
+ Q
2029
+ Q
2030
+ q
2031
+ 1 0 0 1 397.8898 255 cm
2032
+ q
2033
+ 0 0 .501961 rg
2034
+ 0 0 .501961 RG
2035
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (7) Tj T* -66.44 0 Td ET
2036
+ Q
2037
+ Q
2038
+ q
2039
+ 1 0 0 1 0 237 cm
2040
+ q
2041
+ BT 1 0 0 1 40 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.2.1 Zahlungstypen) Tj T* ET
2042
+ Q
2043
+ Q
2044
+ q
2045
+ 1 0 0 1 397.8898 237 cm
2046
+ q
2047
+ 0 0 .501961 rg
2048
+ 0 0 .501961 RG
2049
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (10) Tj T* -60.88 0 Td ET
2050
+ Q
2051
+ Q
2052
+ q
2053
+ 1 0 0 1 0 219 cm
2054
+ q
2055
+ BT 1 0 0 1 40 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.2.2 Zahlungsstatus) Tj T* ET
2056
+ Q
2057
+ Q
2058
+ q
2059
+ 1 0 0 1 397.8898 219 cm
2060
+ q
2061
+ 0 0 .501961 rg
2062
+ 0 0 .501961 RG
2063
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (11) Tj T* -60.88 0 Td ET
2064
+ Q
2065
+ Q
2066
+ q
2067
+ 1 0 0 1 0 201 cm
2068
+ q
2069
+ BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (5 Bedienung) Tj T* ET
2070
+ Q
2071
+ Q
2072
+ q
2073
+ 1 0 0 1 397.8898 201 cm
2074
+ q
2075
+ 0 0 .501961 rg
2076
+ 0 0 .501961 RG
2077
+ BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 60.88 0 Td (12) Tj T* -60.88 0 Td ET
2078
+ Q
2079
+ Q
2080
+ q
2081
+ 1 0 0 1 0 183 cm
2082
+ q
2083
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (5.1 Rechnungserstellung/Capture) Tj T* ET
2084
+ Q
2085
+ Q
2086
+ q
2087
+ 1 0 0 1 397.8898 183 cm
2088
+ q
2089
+ 0 0 .501961 rg
2090
+ 0 0 .501961 RG
2091
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (12) Tj T* -60.88 0 Td ET
2092
+ Q
2093
+ Q
2094
+ q
2095
+ 1 0 0 1 0 165 cm
2096
+ q
2097
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (5.2 Besonderheiten MasterPass Fullcheckout) Tj T* ET
2098
+ Q
2099
+ Q
2100
+ q
2101
+ 1 0 0 1 397.8898 165 cm
2102
+ q
2103
+ 0 0 .501961 rg
2104
+ 0 0 .501961 RG
2105
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (12) Tj T* -60.88 0 Td ET
2106
+ Q
2107
+ Q
2108
+ q
2109
+ 1 0 0 1 0 147 cm
2110
+ q
2111
+ BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (6 Screencast) Tj T* ET
2112
+ Q
2113
+ Q
2114
+ q
2115
+ 1 0 0 1 397.8898 147 cm
2116
+ q
2117
+ 0 0 .501961 rg
2118
+ 0 0 .501961 RG
2119
+ BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 60.88 0 Td (12) Tj T* -60.88 0 Td ET
2120
+ Q
2121
+ Q
2122
+ q
2123
+ 1 0 0 1 0 129 cm
2124
+ q
2125
+ BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (7 Design) Tj T* ET
2126
+ Q
2127
+ Q
2128
+ q
2129
+ 1 0 0 1 397.8898 129 cm
2130
+ q
2131
+ 0 0 .501961 rg
2132
+ 0 0 .501961 RG
2133
+ BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 60.88 0 Td (13) Tj T* -60.88 0 Td ET
2134
+ Q
2135
+ Q
2136
+ q
2137
+ 1 0 0 1 0 111 cm
2138
+ q
2139
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (7.1 MasterPass Fullcheckout) Tj T* ET
2140
+ Q
2141
+ Q
2142
+ q
2143
+ 1 0 0 1 397.8898 111 cm
2144
+ q
2145
+ 0 0 .501961 rg
2146
+ 0 0 .501961 RG
2147
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (13) Tj T* -60.88 0 Td ET
2148
+ Q
2149
+ Q
2150
+ q
2151
+ 1 0 0 1 0 93 cm
2152
+ q
2153
+ BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (8 Deinstallation) Tj T* ET
2154
+ Q
2155
+ Q
2156
+ q
2157
+ 1 0 0 1 397.8898 93 cm
2158
+ q
2159
+ 0 0 .501961 rg
2160
+ 0 0 .501961 RG
2161
+ BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 60.88 0 Td (14) Tj T* -60.88 0 Td ET
2162
+ Q
2163
+ Q
2164
+ q
2165
+ 1 0 0 1 0 75 cm
2166
+ q
2167
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (8.1 Per Magento Connect Manager) Tj T* ET
2168
+ Q
2169
+ Q
2170
+ q
2171
+ 1 0 0 1 397.8898 75 cm
2172
+ q
2173
+ 0 0 .501961 rg
2174
+ 0 0 .501961 RG
2175
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (14) Tj T* -60.88 0 Td ET
2176
+ Q
2177
+ Q
2178
+ q
2179
+ 1 0 0 1 0 57 cm
2180
+ q
2181
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (8.2 Auf Dateiebene) Tj T* ET
2182
+ Q
2183
+ Q
2184
+ q
2185
+ 1 0 0 1 397.8898 57 cm
2186
+ q
2187
+ 0 0 .501961 rg
2188
+ 0 0 .501961 RG
2189
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (15) Tj T* -60.88 0 Td ET
2190
+ Q
2191
+ Q
2192
+ q
2193
+ 1 0 0 1 0 39 cm
2194
+ q
2195
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (8.3 Datenbank) Tj T* ET
2196
+ Q
2197
+ Q
2198
+ q
2199
+ 1 0 0 1 397.8898 39 cm
2200
+ q
2201
+ 0 0 .501961 rg
2202
+ 0 0 .501961 RG
2203
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (15) Tj T* -60.88 0 Td ET
2204
+ Q
2205
+ Q
2206
+ q
2207
+ 1 0 0 1 0 21 cm
2208
+ q
2209
+ BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (9 Migration auf neue Version) Tj T* ET
2210
+ Q
2211
+ Q
2212
+ q
2213
+ 1 0 0 1 397.8898 21 cm
2214
+ q
2215
+ 0 0 .501961 rg
2216
+ 0 0 .501961 RG
2217
+ BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 60.88 0 Td (15) Tj T* -60.88 0 Td ET
2218
+ Q
2219
+ Q
2220
+ q
2221
+ 1 0 0 1 0 3 cm
2222
+ q
2223
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (9.1 Alte Version deinstallieren) Tj T* ET
2224
+ Q
2225
+ Q
2226
+ q
2227
+ 1 0 0 1 397.8898 3 cm
2228
+ q
2229
+ 0 0 .501961 rg
2230
+ 0 0 .501961 RG
2231
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (16) Tj T* -60.88 0 Td ET
2232
+ Q
2233
+ Q
2234
+ q
2235
+ Q
2236
+ Q
2237
+ q
2238
+ 1 0 0 1 62.69291 343.0687 cm
2239
+ Q
2240
+ q
2241
+ 1 0 0 1 411.0236 768.242 cm
2242
+ q
2243
+ 127.5591 0 0 45.30135 0 0 cm
2244
+ /FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
2245
+ Q
2246
+ Q
2247
+ q
2248
+ 1 0 0 1 56.69291 56.69291 cm
2249
+ 0 0 0 rg
2250
+ BT /F1 10 Tf 12 TL ET
2251
+ q
2252
+ 1 0 0 1 6 3 cm
2253
+ q
2254
+ 0 0 0 rg
2255
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
2256
+ Q
2257
+ Q
2258
+ q
2259
+ 1 0 0 1 246.9449 3 cm
2260
+ q
2261
+ 0 0 0 rg
2262
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 209.4849 0 Td (2/16) Tj T* -209.4849 0 Td ET
2263
+ Q
2264
+ Q
2265
+ q
2266
+ Q
2267
+ Q
2268
+
2269
+ endstream
2270
+ endobj
2271
+ % 'R96': class PDFStream
2272
+ 96 0 obj
2273
+ % page stream
2274
+ << /Length 6306 >>
2275
+ stream
2276
+ 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
2277
+ q
2278
+ 1 0 0 1 62.69291 727.0687 cm
2279
+ q
2280
+ BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 .533333 .603922 rg (1 Einleitung) Tj T* ET
2281
+ Q
2282
+ Q
2283
+ q
2284
+ 1 0 0 1 62.69291 715.0687 cm
2285
+ Q
2286
+ q
2287
+ 1 0 0 1 62.69291 703.0687 cm
2288
+ q
2289
+ 0 0 0 rg
2290
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
2291
+ Q
2292
+ Q
2293
+ q
2294
+ 1 0 0 1 62.69291 703.0687 cm
2295
+ Q
2296
+ q
2297
+ 1 0 0 1 62.69291 661.0687 cm
2298
+ q
2299
+ 0 0 0 rg
2300
+ BT 1 0 0 1 0 26 Tm /F1 10 Tf 12 TL 2.694976 Tw (Mit der Expercash Extension bietet der Payment-Service-Provider Expercash ein Zahlungsmodul f\374r) Tj T* 0 Tw 4.843307 Tw (Magento an. Es werden momentan die Zahlungsarten Lastschriftverfahren, Kreditkarte, Giropay,) Tj T* 0 Tw (Masterpass, Sofort\374berweisung und Barzahlen unterst\374tzt.) Tj T* ET
2301
+ Q
2302
+ Q
2303
+ q
2304
+ 1 0 0 1 62.69291 655.0687 cm
2305
+ Q
2306
+ q
2307
+ 1 0 0 1 62.69291 643.0687 cm
2308
+ q
2309
+ 0 0 0 rg
2310
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
2311
+ Q
2312
+ Q
2313
+ q
2314
+ 1 0 0 1 62.69291 643.0687 cm
2315
+ Q
2316
+ q
2317
+ 1 0 0 1 62.69291 610.0687 cm
2318
+ q
2319
+ BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 .533333 .603922 rg (2 Voraussetzungen) Tj T* ET
2320
+ Q
2321
+ Q
2322
+ q
2323
+ 1 0 0 1 62.69291 580.0687 cm
2324
+ q
2325
+ BT 1 0 0 1 0 3 Tm 18 TL /F2 15 Tf 0 .533333 .603922 rg (2.1 Allgemein) Tj T* ET
2326
+ Q
2327
+ Q
2328
+ q
2329
+ 1 0 0 1 62.69291 568.0687 cm
2330
+ Q
2331
+ q
2332
+ 1 0 0 1 62.69291 556.0687 cm
2333
+ q
2334
+ 0 0 0 rg
2335
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
2336
+ Q
2337
+ Q
2338
+ q
2339
+ 1 0 0 1 62.69291 556.0687 cm
2340
+ Q
2341
+ q
2342
+ 1 0 0 1 62.69291 550.0687 cm
2343
+ Q
2344
+ q
2345
+ 1 0 0 1 62.69291 550.0687 cm
2346
+ Q
2347
+ q
2348
+ 1 0 0 1 62.69291 538.0687 cm
2349
+ 0 0 0 rg
2350
+ BT /F1 10 Tf 12 TL ET
2351
+ q
2352
+ 1 0 0 1 6 -3 cm
2353
+ q
2354
+ 0 0 0 rg
2355
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
2356
+ Q
2357
+ Q
2358
+ q
2359
+ 1 0 0 1 23 -3 cm
2360
+ q
2361
+ 0 0 0 rg
2362
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (PHP 5.2+) Tj T* ET
2363
+ Q
2364
+ Q
2365
+ q
2366
+ Q
2367
+ Q
2368
+ q
2369
+ 1 0 0 1 62.69291 532.0687 cm
2370
+ Q
2371
+ q
2372
+ 1 0 0 1 62.69291 520.0687 cm
2373
+ 0 0 0 rg
2374
+ BT /F1 10 Tf 12 TL ET
2375
+ q
2376
+ 1 0 0 1 6 -3 cm
2377
+ q
2378
+ 0 0 0 rg
2379
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
2380
+ Q
2381
+ Q
2382
+ q
2383
+ 1 0 0 1 23 -3 cm
2384
+ q
2385
+ 0 0 0 rg
2386
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Ein Magento der Version) Tj T* ET
2387
+ Q
2388
+ Q
2389
+ q
2390
+ Q
2391
+ Q
2392
+ q
2393
+ 1 0 0 1 62.69291 520.0687 cm
2394
+ Q
2395
+ q
2396
+ 1 0 0 1 62.69291 514.0687 cm
2397
+ Q
2398
+ q
2399
+ 1 0 0 1 62.69291 502.0687 cm
2400
+ q
2401
+ 0 0 0 rg
2402
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
2403
+ Q
2404
+ Q
2405
+ q
2406
+ 1 0 0 1 62.69291 502.0687 cm
2407
+ Q
2408
+ q
2409
+ 1 0 0 1 62.69291 490.0687 cm
2410
+ Q
2411
+ q
2412
+ 1 0 0 1 62.69291 341.0687 cm
2413
+ .960784 .960784 .862745 rg
2414
+ n 0 149 469.8898 -149 re f*
2415
+ 0 0 0 rg
2416
+ BT /F1 10 Tf 12 TL ET
2417
+ BT 1 0 0 1 6 123 Tm T* ET
2418
+ q
2419
+ 1 0 0 1 16 118 cm
2420
+ q
2421
+ 0 .533333 .603922 rg
2422
+ BT 1 0 0 1 0 2.5 Tm /F3 12.5 Tf 15 TL (Note) Tj T* ET
2423
+ Q
2424
+ Q
2425
+ q
2426
+ 1 0 0 1 16 94 cm
2427
+ q
2428
+ 0 0 0 rg
2429
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Modul mit Versionsnummer 15.05.06) Tj T* ET
2430
+ Q
2431
+ Q
2432
+ q
2433
+ 1 0 0 1 16 16 cm
2434
+ q
2435
+ 0 0 0 rg
2436
+ BT 1 0 0 1 0 62 Tm /F1 10 Tf 12 TL 1.007251 Tw (Das Modul mit Versionsnummer 15.05.06 ist ein spezielles Release des Payment-Moduls. Diese) Tj T* 0 Tw .324976 Tw (Version des Moduls wurde auch technisch dahingehend angepasst, dass es R\374ckw\344rtskompatibel) Tj T* 0 Tw .707126 Tw (zu \344lteren Versionen des Magento-Shops \(s.u.\) ist. Bitte beachten Sie jedoch, dass Tests auf die) Tj T* 0 Tw .423307 Tw (folgenden, als kompatibel geltenden Magento-Shop-Versionen nur mit exakt dieser Modul-Version) Tj T* 0 Tw 7.152196 Tw (durchgef\374hrt wurden \(d.h. selbst neuere Modul-Versionen k\366nnen ggf. mit folgenden) Tj T* 0 Tw (Shop-Versionen nicht mehr kompatibel sein\):) Tj T* ET
2437
+ Q
2438
+ Q
2439
+ q
2440
+ 1 J
2441
+ 1 j
2442
+ .662745 .662745 .662745 RG
2443
+ .5 w
2444
+ n 0 149 m 469.8898 149 l S
2445
+ n 0 0 m 469.8898 0 l S
2446
+ n 0 0 m 0 149 l S
2447
+ n 469.8898 0 m 469.8898 149 l S
2448
+ Q
2449
+ Q
2450
+ q
2451
+ 1 0 0 1 62.69291 335.0687 cm
2452
+ Q
2453
+ q
2454
+ 1 0 0 1 62.69291 317.0687 cm
2455
+ q
2456
+ 0 0 0 rg
2457
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (CE:) Tj T* ET
2458
+ Q
2459
+ Q
2460
+ q
2461
+ 1 0 0 1 62.69291 311.0687 cm
2462
+ Q
2463
+ q
2464
+ 1 0 0 1 62.69291 203.0687 cm
2465
+ 0 0 0 rg
2466
+ BT /F1 10 Tf 12 TL ET
2467
+ BT 1 0 0 1 0 2 Tm T* ET
2468
+ q
2469
+ 1 0 0 1 20 102 cm
2470
+ Q
2471
+ q
2472
+ 1 0 0 1 20 102 cm
2473
+ Q
2474
+ q
2475
+ 1 0 0 1 20 90 cm
2476
+ 0 0 0 rg
2477
+ BT /F1 10 Tf 12 TL ET
2478
+ q
2479
+ 1 0 0 1 6 -3 cm
2480
+ q
2481
+ 0 0 0 rg
2482
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
2483
+ Q
2484
+ Q
2485
+ q
2486
+ 1 0 0 1 23 -3 cm
2487
+ q
2488
+ 0 0 0 rg
2489
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Community Edition 1.4.x) Tj T* ET
2490
+ Q
2491
+ Q
2492
+ q
2493
+ Q
2494
+ Q
2495
+ q
2496
+ 1 0 0 1 20 84 cm
2497
+ Q
2498
+ q
2499
+ 1 0 0 1 20 72 cm
2500
+ 0 0 0 rg
2501
+ BT /F1 10 Tf 12 TL ET
2502
+ q
2503
+ 1 0 0 1 6 -3 cm
2504
+ q
2505
+ 0 0 0 rg
2506
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
2507
+ Q
2508
+ Q
2509
+ q
2510
+ 1 0 0 1 23 -3 cm
2511
+ q
2512
+ 0 0 0 rg
2513
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Community Edition 1.5.x) Tj T* ET
2514
+ Q
2515
+ Q
2516
+ q
2517
+ Q
2518
+ Q
2519
+ q
2520
+ 1 0 0 1 20 66 cm
2521
+ Q
2522
+ q
2523
+ 1 0 0 1 20 54 cm
2524
+ 0 0 0 rg
2525
+ BT /F1 10 Tf 12 TL ET
2526
+ q
2527
+ 1 0 0 1 6 -3 cm
2528
+ q
2529
+ 0 0 0 rg
2530
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
2531
+ Q
2532
+ Q
2533
+ q
2534
+ 1 0 0 1 23 -3 cm
2535
+ q
2536
+ 0 0 0 rg
2537
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Community Edition 1.6.x) Tj T* ET
2538
+ Q
2539
+ Q
2540
+ q
2541
+ Q
2542
+ Q
2543
+ q
2544
+ 1 0 0 1 20 48 cm
2545
+ Q
2546
+ q
2547
+ 1 0 0 1 20 36 cm
2548
+ 0 0 0 rg
2549
+ BT /F1 10 Tf 12 TL ET
2550
+ q
2551
+ 1 0 0 1 6 -3 cm
2552
+ q
2553
+ 0 0 0 rg
2554
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
2555
+ Q
2556
+ Q
2557
+ q
2558
+ 1 0 0 1 23 -3 cm
2559
+ q
2560
+ 0 0 0 rg
2561
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Community Edition 1.7.x) Tj T* ET
2562
+ Q
2563
+ Q
2564
+ q
2565
+ Q
2566
+ Q
2567
+ q
2568
+ 1 0 0 1 20 30 cm
2569
+ Q
2570
+ q
2571
+ 1 0 0 1 20 18 cm
2572
+ 0 0 0 rg
2573
+ BT /F1 10 Tf 12 TL ET
2574
+ q
2575
+ 1 0 0 1 6 -3 cm
2576
+ q
2577
+ 0 0 0 rg
2578
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
2579
+ Q
2580
+ Q
2581
+ q
2582
+ 1 0 0 1 23 -3 cm
2583
+ q
2584
+ 0 0 0 rg
2585
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Community Edition 1.8.x) Tj T* ET
2586
+ Q
2587
+ Q
2588
+ q
2589
+ Q
2590
+ Q
2591
+ q
2592
+ 1 0 0 1 20 12 cm
2593
+ Q
2594
+ q
2595
+ 1 0 0 1 20 0 cm
2596
+ 0 0 0 rg
2597
+ BT /F1 10 Tf 12 TL ET
2598
+ q
2599
+ 1 0 0 1 6 -3 cm
2600
+ q
2601
+ 0 0 0 rg
2602
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
2603
+ Q
2604
+ Q
2605
+ q
2606
+ 1 0 0 1 23 -3 cm
2607
+ q
2608
+ 0 0 0 rg
2609
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Community Edition 1.9.x) Tj T* ET
2610
+ Q
2611
+ Q
2612
+ q
2613
+ Q
2614
+ Q
2615
+ q
2616
+ 1 0 0 1 20 0 cm
2617
+ Q
2618
+ q
2619
+ Q
2620
+ Q
2621
+ q
2622
+ 1 0 0 1 62.69291 203.0687 cm
2623
+ Q
2624
+ q
2625
+ 1 0 0 1 62.69291 185.0687 cm
2626
+ q
2627
+ 0 0 0 rg
2628
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (EE:) Tj T* ET
2629
+ Q
2630
+ Q
2631
+ q
2632
+ 1 0 0 1 62.69291 179.0687 cm
2633
+ Q
2634
+ q
2635
+ 1 0 0 1 411.0236 768.242 cm
2636
+ q
2637
+ 127.5591 0 0 45.30135 0 0 cm
2638
+ /FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
2639
+ Q
2640
+ Q
2641
+ q
2642
+ 1 0 0 1 56.69291 56.69291 cm
2643
+ 0 0 0 rg
2644
+ BT /F1 10 Tf 12 TL ET
2645
+ q
2646
+ 1 0 0 1 6 3 cm
2647
+ q
2648
+ 0 0 0 rg
2649
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
2650
+ Q
2651
+ Q
2652
+ q
2653
+ 1 0 0 1 246.9449 3 cm
2654
+ q
2655
+ 0 0 0 rg
2656
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 209.4849 0 Td (3/16) Tj T* -209.4849 0 Td ET
2657
+ Q
2658
+ Q
2659
+ q
2660
+ Q
2661
+ Q
2662
+
2663
+ endstream
2664
+ endobj
2665
+ % 'R97': class PDFStream
2666
+ 97 0 obj
2667
+ % page stream
2668
+ << /Length 2232 >>
2669
+ stream
2670
+ 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
2671
+ q
2672
+ 1 0 0 1 62.69291 658.0687 cm
2673
+ 0 0 0 rg
2674
+ BT /F1 10 Tf 12 TL ET
2675
+ BT 1 0 0 1 0 2 Tm T* ET
2676
+ q
2677
+ 1 0 0 1 20 84 cm
2678
+ Q
2679
+ q
2680
+ 1 0 0 1 20 84 cm
2681
+ Q
2682
+ q
2683
+ 1 0 0 1 20 72 cm
2684
+ 0 0 0 rg
2685
+ BT /F1 10 Tf 12 TL ET
2686
+ q
2687
+ 1 0 0 1 6 -3 cm
2688
+ q
2689
+ 0 0 0 rg
2690
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
2691
+ Q
2692
+ Q
2693
+ q
2694
+ 1 0 0 1 23 -3 cm
2695
+ q
2696
+ 0 0 0 rg
2697
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Enterprise Edition 1.10.x) Tj T* ET
2698
+ Q
2699
+ Q
2700
+ q
2701
+ Q
2702
+ Q
2703
+ q
2704
+ 1 0 0 1 20 66 cm
2705
+ Q
2706
+ q
2707
+ 1 0 0 1 20 54 cm
2708
+ 0 0 0 rg
2709
+ BT /F1 10 Tf 12 TL ET
2710
+ q
2711
+ 1 0 0 1 6 -3 cm
2712
+ q
2713
+ 0 0 0 rg
2714
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
2715
+ Q
2716
+ Q
2717
+ q
2718
+ 1 0 0 1 23 -3 cm
2719
+ q
2720
+ 0 0 0 rg
2721
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Enterprise Edition 1.11.x) Tj T* ET
2722
+ Q
2723
+ Q
2724
+ q
2725
+ Q
2726
+ Q
2727
+ q
2728
+ 1 0 0 1 20 48 cm
2729
+ Q
2730
+ q
2731
+ 1 0 0 1 20 36 cm
2732
+ 0 0 0 rg
2733
+ BT /F1 10 Tf 12 TL ET
2734
+ q
2735
+ 1 0 0 1 6 -3 cm
2736
+ q
2737
+ 0 0 0 rg
2738
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
2739
+ Q
2740
+ Q
2741
+ q
2742
+ 1 0 0 1 23 -3 cm
2743
+ q
2744
+ 0 0 0 rg
2745
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Enterprise Edition 1.12.x) Tj T* ET
2746
+ Q
2747
+ Q
2748
+ q
2749
+ Q
2750
+ Q
2751
+ q
2752
+ 1 0 0 1 20 30 cm
2753
+ Q
2754
+ q
2755
+ 1 0 0 1 20 18 cm
2756
+ 0 0 0 rg
2757
+ BT /F1 10 Tf 12 TL ET
2758
+ q
2759
+ 1 0 0 1 6 -3 cm
2760
+ q
2761
+ 0 0 0 rg
2762
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
2763
+ Q
2764
+ Q
2765
+ q
2766
+ 1 0 0 1 23 -3 cm
2767
+ q
2768
+ 0 0 0 rg
2769
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Enterprise Edition 1.13.x) Tj T* ET
2770
+ Q
2771
+ Q
2772
+ q
2773
+ Q
2774
+ Q
2775
+ q
2776
+ 1 0 0 1 20 12 cm
2777
+ Q
2778
+ q
2779
+ 1 0 0 1 20 0 cm
2780
+ 0 0 0 rg
2781
+ BT /F1 10 Tf 12 TL ET
2782
+ q
2783
+ 1 0 0 1 6 -3 cm
2784
+ q
2785
+ 0 0 0 rg
2786
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
2787
+ Q
2788
+ Q
2789
+ q
2790
+ 1 0 0 1 23 -3 cm
2791
+ q
2792
+ 0 0 0 rg
2793
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Enterprise Edition 1.14.x) Tj T* ET
2794
+ Q
2795
+ Q
2796
+ q
2797
+ Q
2798
+ Q
2799
+ q
2800
+ 1 0 0 1 20 0 cm
2801
+ Q
2802
+ q
2803
+ Q
2804
+ Q
2805
+ q
2806
+ 1 0 0 1 62.69291 658.0687 cm
2807
+ Q
2808
+ q
2809
+ 1 0 0 1 62.69291 658.0687 cm
2810
+ Q
2811
+ q
2812
+ 1 0 0 1 411.0236 768.242 cm
2813
+ q
2814
+ 127.5591 0 0 45.30135 0 0 cm
2815
+ /FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
2816
+ Q
2817
+ Q
2818
+ q
2819
+ 1 0 0 1 56.69291 56.69291 cm
2820
+ 0 0 0 rg
2821
+ BT /F1 10 Tf 12 TL ET
2822
+ q
2823
+ 1 0 0 1 6 3 cm
2824
+ q
2825
+ 0 0 0 rg
2826
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
2827
+ Q
2828
+ Q
2829
+ q
2830
+ 1 0 0 1 246.9449 3 cm
2831
+ q
2832
+ 0 0 0 rg
2833
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 209.4849 0 Td (4/16) Tj T* -209.4849 0 Td ET
2834
+ Q
2835
+ Q
2836
+ q
2837
+ Q
2838
+ Q
2839
+
2840
+ endstream
2841
+ endobj
2842
+ % 'R98': class PDFStream
2843
+ 98 0 obj
2844
+ % page stream
2845
+ << /Length 7280 >>
2846
+ stream
2847
+ 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
2848
+ q
2849
+ 1 0 0 1 62.69291 727.0687 cm
2850
+ q
2851
+ BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 .533333 .603922 rg (3 Installation) Tj T* ET
2852
+ Q
2853
+ Q
2854
+ q
2855
+ 1 0 0 1 62.69291 715.0687 cm
2856
+ Q
2857
+ q
2858
+ 1 0 0 1 62.69291 703.0687 cm
2859
+ q
2860
+ 0 0 0 rg
2861
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
2862
+ Q
2863
+ Q
2864
+ q
2865
+ 1 0 0 1 62.69291 703.0687 cm
2866
+ Q
2867
+ q
2868
+ 1 0 0 1 62.69291 691.0687 cm
2869
+ Q
2870
+ q
2871
+ 1 0 0 1 62.69291 548.0687 cm
2872
+ .960784 .960784 .862745 rg
2873
+ n 0 143 469.8898 -143 re f*
2874
+ 0 0 0 rg
2875
+ BT /F1 10 Tf 12 TL ET
2876
+ BT 1 0 0 1 6 117 Tm T* ET
2877
+ q
2878
+ 1 0 0 1 16 112 cm
2879
+ q
2880
+ 0 .533333 .603922 rg
2881
+ BT 1 0 0 1 0 2.5 Tm /F3 12.5 Tf 15 TL (Note) Tj T* ET
2882
+ Q
2883
+ Q
2884
+ q
2885
+ 1 0 0 1 16 88 cm
2886
+ q
2887
+ 0 0 0 rg
2888
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Bitte beachten! \304nderung der Konfiguration ab Modul-Version: 14.04.10) Tj T* ET
2889
+ Q
2890
+ Q
2891
+ q
2892
+ 1 0 0 1 16 82 cm
2893
+ Q
2894
+ q
2895
+ 1 0 0 1 16 70 cm
2896
+ q
2897
+ 0 0 0 rg
2898
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
2899
+ Q
2900
+ Q
2901
+ q
2902
+ 1 0 0 1 16 70 cm
2903
+ Q
2904
+ q
2905
+ 1 0 0 1 16 16 cm
2906
+ q
2907
+ 0 0 0 rg
2908
+ BT 1 0 0 1 0 38 Tm /F1 10 Tf 12 TL 1.103059 Tw (Bitte beachten Sie, dass sich die Konfiguration des Moduls ver\344ndert hat. Die Zugangsdaten f\374r) Tj T* 0 Tw 1.559069 Tw (die Expercash API werden nun nicht mehr pro Zahlungsmethode konfiguriert, sondern einmalig) Tj T* 0 Tw .860888 Tw (unter "Zahlungsdienste". Ebenfalls sind die Konfigurations-Optionen f\374r das Iframe nun an dieser) Tj T* 0 Tw (Stelle.) Tj T* ET
2909
+ Q
2910
+ Q
2911
+ q
2912
+ 1 J
2913
+ 1 j
2914
+ .662745 .662745 .662745 RG
2915
+ .5 w
2916
+ n 0 143 m 469.8898 143 l S
2917
+ n 0 0 m 469.8898 0 l S
2918
+ n 0 0 m 0 143 l S
2919
+ n 469.8898 0 m 469.8898 143 l S
2920
+ Q
2921
+ Q
2922
+ q
2923
+ 1 0 0 1 62.69291 542.0687 cm
2924
+ Q
2925
+ q
2926
+ 1 0 0 1 62.69291 530.0687 cm
2927
+ Q
2928
+ q
2929
+ 1 0 0 1 62.69291 363.0687 cm
2930
+ .960784 .960784 .862745 rg
2931
+ n 0 167 469.8898 -167 re f*
2932
+ 0 0 0 rg
2933
+ BT /F1 10 Tf 12 TL ET
2934
+ BT 1 0 0 1 6 141 Tm T* ET
2935
+ q
2936
+ 1 0 0 1 16 136 cm
2937
+ q
2938
+ 0 .533333 .603922 rg
2939
+ BT 1 0 0 1 0 2.5 Tm /F3 12.5 Tf 15 TL (Note) Tj T* ET
2940
+ Q
2941
+ Q
2942
+ q
2943
+ 1 0 0 1 16 112 cm
2944
+ q
2945
+ 0 0 0 rg
2946
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Bitte beachten! \304nderung am Namespace des Moduls ab Modul-Version: 13.07.04) Tj T* ET
2947
+ Q
2948
+ Q
2949
+ q
2950
+ 1 0 0 1 16 106 cm
2951
+ Q
2952
+ q
2953
+ 1 0 0 1 16 94 cm
2954
+ q
2955
+ 0 0 0 rg
2956
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
2957
+ Q
2958
+ Q
2959
+ q
2960
+ 1 0 0 1 16 94 cm
2961
+ Q
2962
+ q
2963
+ 1 0 0 1 16 16 cm
2964
+ q
2965
+ 0 0 0 rg
2966
+ BT 1 0 0 1 0 62 Tm /F1 10 Tf 12 TL 3.189147 Tw (Es gab \304nderungen am Namespace des Moduls. Dieser hat sich von Mage_Expercash zu) Tj T* 0 Tw 2.049976 Tw (Expercash_Expercash ge\344ndert. Sollten Sie Expercash in einer Version mit altem Namespace) Tj T* 0 Tw .622196 Tw (einsetzen \(falls der Ordner "app/code/community/Mage/Expercash/" vorhanden ist, nutzen Sie die) Tj T* 0 Tw 2.643828 Tw (Variante mit altem Namespace\) und auf eine neue Version updaten wollen, ist es zwingend) Tj T* 0 Tw .12229 Tw (erforderlich die alte Version zu deinstallieren, bevor Sie die neue Version installieren. Beachten sie) Tj T* 0 Tw (hierzu den Punkt "Migration auf neue Version" am Ende dieser Dokumentation.) Tj T* ET
2967
+ Q
2968
+ Q
2969
+ q
2970
+ 1 J
2971
+ 1 j
2972
+ .662745 .662745 .662745 RG
2973
+ .5 w
2974
+ n 0 167 m 469.8898 167 l S
2975
+ n 0 0 m 469.8898 0 l S
2976
+ n 0 0 m 0 167 l S
2977
+ n 469.8898 0 m 469.8898 167 l S
2978
+ Q
2979
+ Q
2980
+ q
2981
+ 1 0 0 1 62.69291 357.0687 cm
2982
+ Q
2983
+ q
2984
+ 1 0 0 1 62.69291 351.0687 cm
2985
+ Q
2986
+ q
2987
+ 1 0 0 1 62.69291 339.0687 cm
2988
+ q
2989
+ 0 0 0 rg
2990
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
2991
+ Q
2992
+ Q
2993
+ q
2994
+ 1 0 0 1 62.69291 327.0687 cm
2995
+ q
2996
+ 0 0 0 rg
2997
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
2998
+ Q
2999
+ Q
3000
+ q
3001
+ 1 0 0 1 62.69291 327.0687 cm
3002
+ Q
3003
+ q
3004
+ 1 0 0 1 62.69291 321.0687 cm
3005
+ Q
3006
+ q
3007
+ 1 0 0 1 62.69291 321.0687 cm
3008
+ Q
3009
+ q
3010
+ 1 0 0 1 62.69291 297.0687 cm
3011
+ 0 0 0 rg
3012
+ BT /F1 10 Tf 12 TL ET
3013
+ q
3014
+ 1 0 0 1 6 9 cm
3015
+ q
3016
+ 0 0 0 rg
3017
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (1.) Tj T* -5.66 0 Td ET
3018
+ Q
3019
+ Q
3020
+ q
3021
+ 1 0 0 1 23 -3 cm
3022
+ q
3023
+ BT 1 0 0 1 0 14 Tm 17.80854 Tw 12 TL /F1 10 Tf 0 0 0 rg (Kopieren Sie den "Extension Key" von der MagentoCommerce-Webseite) Tj T* 0 Tw (\() Tj 0 0 .501961 rg (http://www.magentocommerce.com/magento-connect/mage-expercash.html) Tj 0 0 0 rg (\)) Tj T* ET
3024
+ Q
3025
+ Q
3026
+ q
3027
+ Q
3028
+ Q
3029
+ q
3030
+ 1 0 0 1 62.69291 291.0687 cm
3031
+ Q
3032
+ q
3033
+ 1 0 0 1 62.69291 279.0687 cm
3034
+ 0 0 0 rg
3035
+ BT /F1 10 Tf 12 TL ET
3036
+ q
3037
+ 1 0 0 1 6 -3 cm
3038
+ q
3039
+ 0 0 0 rg
3040
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (2.) Tj T* -5.66 0 Td ET
3041
+ Q
3042
+ Q
3043
+ q
3044
+ 1 0 0 1 23 -3 cm
3045
+ q
3046
+ 0 0 0 rg
3047
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Melden Sie sich in Ihrem Magento Backend an) Tj T* ET
3048
+ Q
3049
+ Q
3050
+ q
3051
+ Q
3052
+ Q
3053
+ q
3054
+ 1 0 0 1 62.69291 273.0687 cm
3055
+ Q
3056
+ q
3057
+ 1 0 0 1 62.69291 261.0687 cm
3058
+ 0 0 0 rg
3059
+ BT /F1 10 Tf 12 TL ET
3060
+ q
3061
+ 1 0 0 1 6 -3 cm
3062
+ q
3063
+ 0 0 0 rg
3064
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (3.) Tj T* -5.66 0 Td ET
3065
+ Q
3066
+ Q
3067
+ q
3068
+ 1 0 0 1 23 -3 cm
3069
+ q
3070
+ BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Navigieren Sie zu "System" -) Tj (> "Magento Connect" -) Tj (> "Magento Connect Manager") Tj T* ET
3071
+ Q
3072
+ Q
3073
+ q
3074
+ Q
3075
+ Q
3076
+ q
3077
+ 1 0 0 1 62.69291 255.0687 cm
3078
+ Q
3079
+ q
3080
+ 1 0 0 1 62.69291 243.0687 cm
3081
+ 0 0 0 rg
3082
+ BT /F1 10 Tf 12 TL ET
3083
+ q
3084
+ 1 0 0 1 6 -3 cm
3085
+ q
3086
+ 0 0 0 rg
3087
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (4.) Tj T* -5.66 0 Td ET
3088
+ Q
3089
+ Q
3090
+ q
3091
+ 1 0 0 1 23 -3 cm
3092
+ q
3093
+ 0 0 0 rg
3094
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Melden Sie sich im "Magento Connect Manager" an) Tj T* ET
3095
+ Q
3096
+ Q
3097
+ q
3098
+ Q
3099
+ Q
3100
+ q
3101
+ 1 0 0 1 62.69291 237.0687 cm
3102
+ Q
3103
+ q
3104
+ 1 0 0 1 62.69291 225.0687 cm
3105
+ 0 0 0 rg
3106
+ BT /F1 10 Tf 12 TL ET
3107
+ q
3108
+ 1 0 0 1 6 -3 cm
3109
+ q
3110
+ 0 0 0 rg
3111
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (5.) Tj T* -5.66 0 Td ET
3112
+ Q
3113
+ Q
3114
+ q
3115
+ 1 0 0 1 23 -3 cm
3116
+ q
3117
+ 0 0 0 rg
3118
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (W\344hlen Sie den Tab "Extensions") Tj T* ET
3119
+ Q
3120
+ Q
3121
+ q
3122
+ Q
3123
+ Q
3124
+ q
3125
+ 1 0 0 1 62.69291 219.0687 cm
3126
+ Q
3127
+ q
3128
+ 1 0 0 1 62.69291 195.0687 cm
3129
+ 0 0 0 rg
3130
+ BT /F1 10 Tf 12 TL ET
3131
+ q
3132
+ 1 0 0 1 6 9 cm
3133
+ q
3134
+ 0 0 0 rg
3135
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (6.) Tj T* -5.66 0 Td ET
3136
+ Q
3137
+ Q
3138
+ q
3139
+ 1 0 0 1 23 -3 cm
3140
+ q
3141
+ 0 0 0 rg
3142
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 1.14248 Tw (Tragen Sie den kopierten Key von der MagentoCommerce-Webseite in das Feld "Paste extension) Tj T* 0 Tw (key to install" ein und w\344hlen Sie "Install") Tj T* ET
3143
+ Q
3144
+ Q
3145
+ q
3146
+ Q
3147
+ Q
3148
+ q
3149
+ 1 0 0 1 62.69291 189.0687 cm
3150
+ Q
3151
+ q
3152
+ 1 0 0 1 62.69291 165.0687 cm
3153
+ 0 0 0 rg
3154
+ BT /F1 10 Tf 12 TL ET
3155
+ q
3156
+ 1 0 0 1 6 9 cm
3157
+ q
3158
+ 0 0 0 rg
3159
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (7.) Tj T* -5.66 0 Td ET
3160
+ Q
3161
+ Q
3162
+ q
3163
+ 1 0 0 1 23 -3 cm
3164
+ q
3165
+ 0 0 0 rg
3166
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 2.020751 Tw (Unter Umst\344nden m\374ssen Sie danach die Installation mit einem Klick auf den Button "Proceed") Tj T* 0 Tw (best\344tigen.) Tj T* ET
3167
+ Q
3168
+ Q
3169
+ q
3170
+ Q
3171
+ Q
3172
+ q
3173
+ 1 0 0 1 62.69291 159.0687 cm
3174
+ Q
3175
+ q
3176
+ 1 0 0 1 62.69291 135.0687 cm
3177
+ 0 0 0 rg
3178
+ BT /F1 10 Tf 12 TL ET
3179
+ q
3180
+ 1 0 0 1 6 9 cm
3181
+ q
3182
+ 0 0 0 rg
3183
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (8.) Tj T* -5.66 0 Td ET
3184
+ Q
3185
+ Q
3186
+ q
3187
+ 1 0 0 1 23 -3 cm
3188
+ q
3189
+ 0 0 0 rg
3190
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 3.426976 Tw (In der schwarzen Installations-Konsole sollte anschlie\337end die Meldung "Package ... installed) Tj T* 0 Tw (successfully" zu sehen sein. Das Modul ist nun korrekt installiert.) Tj T* ET
3191
+ Q
3192
+ Q
3193
+ q
3194
+ Q
3195
+ Q
3196
+ q
3197
+ 1 0 0 1 62.69291 135.0687 cm
3198
+ Q
3199
+ q
3200
+ 1 0 0 1 62.69291 135.0687 cm
3201
+ Q
3202
+ q
3203
+ 1 0 0 1 411.0236 768.242 cm
3204
+ q
3205
+ 127.5591 0 0 45.30135 0 0 cm
3206
+ /FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
3207
+ Q
3208
+ Q
3209
+ q
3210
+ 1 0 0 1 56.69291 56.69291 cm
3211
+ 0 0 0 rg
3212
+ BT /F1 10 Tf 12 TL ET
3213
+ q
3214
+ 1 0 0 1 6 3 cm
3215
+ q
3216
+ 0 0 0 rg
3217
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
3218
+ Q
3219
+ Q
3220
+ q
3221
+ 1 0 0 1 246.9449 3 cm
3222
+ q
3223
+ 0 0 0 rg
3224
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 209.4849 0 Td (5/16) Tj T* -209.4849 0 Td ET
3225
+ Q
3226
+ Q
3227
+ q
3228
+ Q
3229
+ Q
3230
+
3231
+ endstream
3232
+ endobj
3233
+ % 'R99': class PDFStream
3234
+ 99 0 obj
3235
+ % page stream
3236
+ << /Length 6564 >>
3237
+ stream
3238
+ 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
3239
+ q
3240
+ 1 0 0 1 62.69291 727.0687 cm
3241
+ q
3242
+ BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 .533333 .603922 rg (4 Konfiguration) Tj T* ET
3243
+ Q
3244
+ Q
3245
+ q
3246
+ 1 0 0 1 62.69291 715.0687 cm
3247
+ Q
3248
+ q
3249
+ 1 0 0 1 62.69291 703.0687 cm
3250
+ q
3251
+ 0 0 0 rg
3252
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
3253
+ Q
3254
+ Q
3255
+ q
3256
+ 1 0 0 1 62.69291 703.0687 cm
3257
+ Q
3258
+ q
3259
+ 1 0 0 1 62.69291 685.0687 cm
3260
+ q
3261
+ 0 0 0 rg
3262
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (An dieser Stelle wird erl\344utert wie Sie das Expercash-Zahlungsmodul konfigurieren.) Tj T* ET
3263
+ Q
3264
+ Q
3265
+ q
3266
+ 1 0 0 1 62.69291 679.0687 cm
3267
+ Q
3268
+ q
3269
+ 1 0 0 1 62.69291 667.0687 cm
3270
+ q
3271
+ 0 0 0 rg
3272
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
3273
+ Q
3274
+ Q
3275
+ q
3276
+ 1 0 0 1 62.69291 655.0687 cm
3277
+ q
3278
+ 0 0 0 rg
3279
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
3280
+ Q
3281
+ Q
3282
+ q
3283
+ 1 0 0 1 62.69291 643.0687 cm
3284
+ q
3285
+ 0 0 0 rg
3286
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
3287
+ Q
3288
+ Q
3289
+ q
3290
+ 1 0 0 1 62.69291 643.0687 cm
3291
+ Q
3292
+ q
3293
+ 1 0 0 1 62.69291 613.0687 cm
3294
+ q
3295
+ BT 1 0 0 1 0 3 Tm 18 TL /F2 15 Tf 0 .533333 .603922 rg (4.1 Zahlungsdienste) Tj T* ET
3296
+ Q
3297
+ Q
3298
+ q
3299
+ 1 0 0 1 62.69291 601.0687 cm
3300
+ Q
3301
+ q
3302
+ 1 0 0 1 62.69291 589.0687 cm
3303
+ q
3304
+ 0 0 0 rg
3305
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (In nachfolgender Tabelle sehen Sie die Konfigurations-Optionen f\374r Zahlungsdienste.) Tj T* ET
3306
+ Q
3307
+ Q
3308
+ q
3309
+ 1 0 0 1 62.69291 577.0687 cm
3310
+ q
3311
+ 0 0 0 rg
3312
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Hier m\374ssen unter anderem die Expercash Zugangsdaten hinterlegt werden.) Tj T* ET
3313
+ Q
3314
+ Q
3315
+ q
3316
+ 1 0 0 1 62.69291 577.0687 cm
3317
+ Q
3318
+ q
3319
+ 1 0 0 1 62.69291 571.0687 cm
3320
+ Q
3321
+ q
3322
+ 1 0 0 1 62.69291 559.0687 cm
3323
+ q
3324
+ 0 0 0 rg
3325
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
3326
+ Q
3327
+ Q
3328
+ q
3329
+ 1 0 0 1 62.69291 559.0687 cm
3330
+ Q
3331
+ q
3332
+ 1 0 0 1 62.69291 553.0687 cm
3333
+ Q
3334
+ q
3335
+ 1 0 0 1 62.69291 529.0687 cm
3336
+ q
3337
+ 0 .533333 .603922 rg
3338
+ BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 195.2149 0 Td (Zahlungsdienste) Tj T* -195.2149 0 Td ET
3339
+ Q
3340
+ Q
3341
+ q
3342
+ 1 0 0 1 62.69291 295.0687 cm
3343
+ 1 1 1 rg
3344
+ n 0 228 469.8898 -18 re f*
3345
+ .878431 .878431 .878431 rg
3346
+ n 0 210 469.8898 -18 re f*
3347
+ 1 1 1 rg
3348
+ n 0 192 469.8898 -18 re f*
3349
+ .878431 .878431 .878431 rg
3350
+ n 0 174 469.8898 -30 re f*
3351
+ 1 1 1 rg
3352
+ n 0 144 469.8898 -30 re f*
3353
+ .878431 .878431 .878431 rg
3354
+ n 0 114 469.8898 -18 re f*
3355
+ 1 1 1 rg
3356
+ n 0 96 469.8898 -30 re f*
3357
+ .878431 .878431 .878431 rg
3358
+ n 0 66 469.8898 -18 re f*
3359
+ 1 1 1 rg
3360
+ n 0 48 469.8898 -18 re f*
3361
+ .878431 .878431 .878431 rg
3362
+ n 0 30 469.8898 -30 re f*
3363
+ .960784 .960784 .862745 rg
3364
+ n 0 228 469.8898 -18 re f*
3365
+ 0 .533333 .603922 rg
3366
+ BT /F1 10 Tf 12 TL ET
3367
+ q
3368
+ 1 0 0 1 6 213 cm
3369
+ q
3370
+ .960784 .960784 .862745 rg
3371
+ n 0 0 116.1518 12 re f*
3372
+ Q
3373
+ q
3374
+ 0 .533333 .603922 rg
3375
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 28.61588 0 Td (Konfiguration) Tj T* -28.61588 0 Td ET
3376
+ Q
3377
+ Q
3378
+ q
3379
+ 1 0 0 1 134.1518 213 cm
3380
+ q
3381
+ .960784 .960784 .862745 rg
3382
+ n 0 0 329.738 12 re f*
3383
+ Q
3384
+ q
3385
+ 0 .533333 .603922 rg
3386
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 134.299 0 Td (Beschreibung) Tj T* -134.299 0 Td ET
3387
+ Q
3388
+ Q
3389
+ 0 0 0 rg
3390
+ q
3391
+ 1 0 0 1 6 195 cm
3392
+ q
3393
+ 0 0 0 rg
3394
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Popup-ID) Tj T* ET
3395
+ Q
3396
+ Q
3397
+ q
3398
+ 1 0 0 1 134.1518 195 cm
3399
+ q
3400
+ 0 0 0 rg
3401
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Die Popup-ID entnehmen Sie bitte Ihren Expercash Zugangsdaten) Tj T* ET
3402
+ Q
3403
+ Q
3404
+ q
3405
+ 1 0 0 1 6 177 cm
3406
+ q
3407
+ 0 0 0 rg
3408
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Profil-ID) Tj T* ET
3409
+ Q
3410
+ Q
3411
+ q
3412
+ 1 0 0 1 134.1518 177 cm
3413
+ q
3414
+ 0 0 0 rg
3415
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Die Profil-ID entnehmen Sie bitte Ihren Expercash Zugangsdaten) Tj T* ET
3416
+ Q
3417
+ Q
3418
+ q
3419
+ 1 0 0 1 6 147 cm
3420
+ q
3421
+ 0 0 0 rg
3422
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Sicherheitsschl\374ssel) Tj T* (IFrame) Tj T* ET
3423
+ Q
3424
+ Q
3425
+ q
3426
+ 1 0 0 1 134.1518 147 cm
3427
+ q
3428
+ 0 0 0 rg
3429
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Den Sicherheitsschl\374ssel IFrame entnehmen Sie bitte Ihren Expercash) Tj T* (Zugangsdaten) Tj T* ET
3430
+ Q
3431
+ Q
3432
+ q
3433
+ 1 0 0 1 6 117 cm
3434
+ q
3435
+ 0 0 0 rg
3436
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Sicherheitsschl\374ssel) Tj T* (Gateway) Tj T* ET
3437
+ Q
3438
+ Q
3439
+ q
3440
+ 1 0 0 1 134.1518 117 cm
3441
+ q
3442
+ 0 0 0 rg
3443
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Den Sicherheitsschl\374ssel Gateway entnehmen Sie bitte Ihren Expercash) Tj T* (Zugangsdaten) Tj T* ET
3444
+ Q
3445
+ Q
3446
+ q
3447
+ 1 0 0 1 6 99 cm
3448
+ q
3449
+ 0 0 0 rg
3450
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Project-ID) Tj T* ET
3451
+ Q
3452
+ Q
3453
+ q
3454
+ 1 0 0 1 134.1518 99 cm
3455
+ q
3456
+ 0 0 0 rg
3457
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Den Project-ID entnehmen Sie bitte Ihren Expercash Zugangsdaten) Tj T* ET
3458
+ Q
3459
+ Q
3460
+ q
3461
+ 1 0 0 1 6 81 cm
3462
+ q
3463
+ 0 0 0 rg
3464
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (IFrame-CSS-Klasse) Tj T* ET
3465
+ Q
3466
+ Q
3467
+ q
3468
+ 1 0 0 1 134.1518 69 cm
3469
+ q
3470
+ 0 0 0 rg
3471
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Hier haben Sie die M\366glichkeit dem Iframe eine eigene CSS-Klasse zu) Tj T* (geben) Tj T* ET
3472
+ Q
3473
+ Q
3474
+ q
3475
+ 1 0 0 1 6 51 cm
3476
+ q
3477
+ 0 0 0 rg
3478
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (IFrame-Breite) Tj T* ET
3479
+ Q
3480
+ Q
3481
+ q
3482
+ 1 0 0 1 134.1518 51 cm
3483
+ q
3484
+ 0 0 0 rg
3485
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Hier k\366nnen Sie die Breite des Iframes in Pixel angeben) Tj T* ET
3486
+ Q
3487
+ Q
3488
+ q
3489
+ 1 0 0 1 6 33 cm
3490
+ q
3491
+ 0 0 0 rg
3492
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (IFrame-H\366he) Tj T* ET
3493
+ Q
3494
+ Q
3495
+ q
3496
+ 1 0 0 1 134.1518 33 cm
3497
+ q
3498
+ 0 0 0 rg
3499
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Hier k\366nnen Sie die H\366he des Iframes in Pixel angeben) Tj T* ET
3500
+ Q
3501
+ Q
3502
+ q
3503
+ 1 0 0 1 6 15 cm
3504
+ q
3505
+ 0 0 0 rg
3506
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (CSS-URL \(https!\)) Tj T* ET
3507
+ Q
3508
+ Q
3509
+ q
3510
+ 1 0 0 1 134.1518 3 cm
3511
+ q
3512
+ BT 1 0 0 1 0 14 Tm 12 TL /F1 10 Tf 0 0 0 rg (Der Pfad zur custom CSS Datei \(Achtung: Falls Ihr Checkout per) Tj T* (SSL-Zertifikat gesichert ist, geben Sie hier bitte eine URL mit ) Tj 0 0 .501961 rg (https:// ) Tj 0 0 0 rg (an\)) Tj T* ET
3513
+ Q
3514
+ Q
3515
+ q
3516
+ 1 J
3517
+ 1 j
3518
+ 0 0 0 RG
3519
+ .25 w
3520
+ n 0 210 m 469.8898 210 l S
3521
+ n 0 192 m 469.8898 192 l S
3522
+ n 0 174 m 469.8898 174 l S
3523
+ n 0 144 m 469.8898 144 l S
3524
+ n 0 114 m 469.8898 114 l S
3525
+ n 0 96 m 469.8898 96 l S
3526
+ n 0 66 m 469.8898 66 l S
3527
+ n 0 48 m 469.8898 48 l S
3528
+ n 0 30 m 469.8898 30 l S
3529
+ n 128.1518 0 m 128.1518 228 l S
3530
+ n 0 228 m 469.8898 228 l S
3531
+ n 0 0 m 469.8898 0 l S
3532
+ n 0 0 m 0 228 l S
3533
+ n 469.8898 0 m 469.8898 228 l S
3534
+ Q
3535
+ Q
3536
+ q
3537
+ 1 0 0 1 62.69291 295.0687 cm
3538
+ Q
3539
+ q
3540
+ 1 0 0 1 62.69291 289.0687 cm
3541
+ Q
3542
+ q
3543
+ 1 0 0 1 62.69291 277.0687 cm
3544
+ q
3545
+ 0 0 0 rg
3546
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
3547
+ Q
3548
+ Q
3549
+ q
3550
+ 1 0 0 1 62.69291 265.0687 cm
3551
+ q
3552
+ 0 0 0 rg
3553
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
3554
+ Q
3555
+ Q
3556
+ q
3557
+ 1 0 0 1 62.69291 265.0687 cm
3558
+ Q
3559
+ q
3560
+ 1 0 0 1 62.69291 265.0687 cm
3561
+ Q
3562
+ q
3563
+ 1 0 0 1 411.0236 768.242 cm
3564
+ q
3565
+ 127.5591 0 0 45.30135 0 0 cm
3566
+ /FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
3567
+ Q
3568
+ Q
3569
+ q
3570
+ 1 0 0 1 56.69291 56.69291 cm
3571
+ 0 0 0 rg
3572
+ BT /F1 10 Tf 12 TL ET
3573
+ q
3574
+ 1 0 0 1 6 3 cm
3575
+ q
3576
+ 0 0 0 rg
3577
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
3578
+ Q
3579
+ Q
3580
+ q
3581
+ 1 0 0 1 246.9449 3 cm
3582
+ q
3583
+ 0 0 0 rg
3584
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 209.4849 0 Td (6/16) Tj T* -209.4849 0 Td ET
3585
+ Q
3586
+ Q
3587
+ q
3588
+ Q
3589
+ Q
3590
+
3591
+ endstream
3592
+ endobj
3593
+ % 'R100': class PDFStream
3594
+ 100 0 obj
3595
+ % page stream
3596
+ << /Length 7786 >>
3597
+ stream
3598
+ 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
3599
+ q
3600
+ 1 0 0 1 62.69291 730.0687 cm
3601
+ q
3602
+ BT 1 0 0 1 0 3 Tm 18 TL /F2 15 Tf 0 .533333 .603922 rg (4.2 Zahlungsmethoden) Tj T* ET
3603
+ Q
3604
+ Q
3605
+ q
3606
+ 1 0 0 1 62.69291 718.0687 cm
3607
+ Q
3608
+ q
3609
+ 1 0 0 1 62.69291 706.0687 cm
3610
+ q
3611
+ 0 0 0 rg
3612
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
3613
+ Q
3614
+ Q
3615
+ q
3616
+ 1 0 0 1 62.69291 706.0687 cm
3617
+ Q
3618
+ q
3619
+ 1 0 0 1 62.69291 700.0687 cm
3620
+ Q
3621
+ q
3622
+ 1 0 0 1 62.69291 688.0687 cm
3623
+ q
3624
+ 0 0 0 rg
3625
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Das Expercash Modul unterst\374tzt momentan sieben verschiedene Zahlungsarten:) Tj T* ET
3626
+ Q
3627
+ Q
3628
+ q
3629
+ 1 0 0 1 62.69291 664.0687 cm
3630
+ q
3631
+ 0 0 0 rg
3632
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 5.601627 Tw (Lastschriftverfahren, Kreditkarte, Giropay, Sofort\374berweisung, Barzahlen, Masterpass, Masterpass) Tj T* 0 Tw (Fullcheckout) Tj T* ET
3633
+ Q
3634
+ Q
3635
+ q
3636
+ 1 0 0 1 62.69291 664.0687 cm
3637
+ Q
3638
+ q
3639
+ 1 0 0 1 62.69291 658.0687 cm
3640
+ Q
3641
+ q
3642
+ 1 0 0 1 62.69291 646.0687 cm
3643
+ q
3644
+ 0 0 0 rg
3645
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
3646
+ Q
3647
+ Q
3648
+ q
3649
+ 1 0 0 1 62.69291 634.0687 cm
3650
+ q
3651
+ 0 0 0 rg
3652
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
3653
+ Q
3654
+ Q
3655
+ q
3656
+ 1 0 0 1 62.69291 634.0687 cm
3657
+ Q
3658
+ q
3659
+ 1 0 0 1 62.69291 592.0687 cm
3660
+ q
3661
+ 0 0 0 rg
3662
+ BT 1 0 0 1 0 26 Tm /F1 10 Tf 12 TL 4.228863 Tw (F\374r die Zahlungsarten Lastschrift, Masterpass, Masterpass Fullcheckout sowie Kreditkarte stehen) Tj T* 0 Tw 8.301085 Tw (Direktbelastung und Autorisierung als Zahlungsvorg\344nge zur Verf\374gung. F\374r Giropay und) Tj T* 0 Tw (Sofort\374berweisung steht zahlartenbedingt nur Direktbelastung als Zahlungsvorgangstyp zu Verf\374gung.) Tj T* ET
3663
+ Q
3664
+ Q
3665
+ q
3666
+ 1 0 0 1 62.69291 586.0687 cm
3667
+ Q
3668
+ q
3669
+ 1 0 0 1 62.69291 574.0687 cm
3670
+ q
3671
+ 0 0 0 rg
3672
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
3673
+ Q
3674
+ Q
3675
+ q
3676
+ 1 0 0 1 62.69291 562.0687 cm
3677
+ q
3678
+ 0 0 0 rg
3679
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
3680
+ Q
3681
+ Q
3682
+ q
3683
+ 1 0 0 1 62.69291 562.0687 cm
3684
+ Q
3685
+ q
3686
+ 1 0 0 1 62.69291 532.0687 cm
3687
+ q
3688
+ 0 0 0 rg
3689
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL .948863 Tw (In nachfolgender Tabelle sehen Sie die Konfigurations-Optionen der Zahlungsmethoden, ausgenommen) Tj T* 0 Tw (Masterpass Fullcheckout - welche ein paar Besonderheiten aufweist und separat erl\344utert wird.) Tj T* ET
3690
+ Q
3691
+ Q
3692
+ q
3693
+ 1 0 0 1 62.69291 526.0687 cm
3694
+ Q
3695
+ q
3696
+ 1 0 0 1 62.69291 514.0687 cm
3697
+ q
3698
+ 0 0 0 rg
3699
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
3700
+ Q
3701
+ Q
3702
+ q
3703
+ 1 0 0 1 62.69291 514.0687 cm
3704
+ Q
3705
+ q
3706
+ 1 0 0 1 62.69291 508.0687 cm
3707
+ Q
3708
+ q
3709
+ 1 0 0 1 62.69291 484.0687 cm
3710
+ q
3711
+ 0 .533333 .603922 rg
3712
+ BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 188.8299 0 Td (Zahlungsmethoden) Tj T* -188.8299 0 Td ET
3713
+ Q
3714
+ Q
3715
+ q
3716
+ 1 0 0 1 62.69291 118.0687 cm
3717
+ 1 1 1 rg
3718
+ n 0 360 469.8898 -18 re f*
3719
+ .878431 .878431 .878431 rg
3720
+ n 0 342 469.8898 -18 re f*
3721
+ 1 1 1 rg
3722
+ n 0 324 469.8898 -66 re f*
3723
+ .878431 .878431 .878431 rg
3724
+ n 0 258 469.8898 -30 re f*
3725
+ 1 1 1 rg
3726
+ n 0 228 469.8898 -30 re f*
3727
+ .878431 .878431 .878431 rg
3728
+ n 0 198 469.8898 -30 re f*
3729
+ 1 1 1 rg
3730
+ n 0 168 469.8898 -30 re f*
3731
+ .878431 .878431 .878431 rg
3732
+ n 0 138 469.8898 -66 re f*
3733
+ 1 1 1 rg
3734
+ n 0 72 469.8898 -30 re f*
3735
+ .878431 .878431 .878431 rg
3736
+ n 0 42 469.8898 -42 re f*
3737
+ .960784 .960784 .862745 rg
3738
+ n 0 360 469.8898 -18 re f*
3739
+ 0 .533333 .603922 rg
3740
+ BT /F1 10 Tf 12 TL ET
3741
+ q
3742
+ 1 0 0 1 6 345 cm
3743
+ q
3744
+ .960784 .960784 .862745 rg
3745
+ n 0 0 116.1518 12 re f*
3746
+ Q
3747
+ q
3748
+ 0 .533333 .603922 rg
3749
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 28.61588 0 Td (Konfiguration) Tj T* -28.61588 0 Td ET
3750
+ Q
3751
+ Q
3752
+ q
3753
+ 1 0 0 1 134.1518 345 cm
3754
+ q
3755
+ .960784 .960784 .862745 rg
3756
+ n 0 0 329.738 12 re f*
3757
+ Q
3758
+ q
3759
+ 0 .533333 .603922 rg
3760
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 134.299 0 Td (Beschreibung) Tj T* -134.299 0 Td ET
3761
+ Q
3762
+ Q
3763
+ 0 0 0 rg
3764
+ q
3765
+ 1 0 0 1 6 327 cm
3766
+ q
3767
+ 0 0 0 rg
3768
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Aktiviert) Tj T* ET
3769
+ Q
3770
+ Q
3771
+ q
3772
+ 1 0 0 1 134.1518 327 cm
3773
+ q
3774
+ 0 0 0 rg
3775
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stellen Sie diese Option auf "Ja" um diese Zahlungsmethode zu aktivieren) Tj T* ET
3776
+ Q
3777
+ Q
3778
+ q
3779
+ 1 0 0 1 6 297 cm
3780
+ q
3781
+ 0 0 0 rg
3782
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Status neuer) Tj T* (Bestellungen) Tj T* ET
3783
+ Q
3784
+ Q
3785
+ q
3786
+ 1 0 0 1 134.1518 261 cm
3787
+ q
3788
+ 0 0 0 rg
3789
+ BT 1 0 0 1 0 50 Tm /F1 10 Tf 12 TL (Hier haben Sie die M\366glichkeit den Status einer erfolgreichen Bestellung) Tj T* (festzulegen. Die zur Verf\374gung stehenden Statusm\366glichkeiten sind:) Tj T* (Pending \(Ausstehend\), Processing \(Verarbeitung\), Complete) Tj T* (\(Vollst\344ndig\), Closed \(Geschlossen\), Canceled \(Storniert\), On Hold) Tj T* (\(Zur\374ckgestellt\)) Tj T* ET
3790
+ Q
3791
+ Q
3792
+ q
3793
+ 1 0 0 1 6 231 cm
3794
+ q
3795
+ 0 0 0 rg
3796
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Bezeichung im) Tj T* (Shop-Frontend) Tj T* ET
3797
+ Q
3798
+ Q
3799
+ q
3800
+ 1 0 0 1 134.1518 231 cm
3801
+ q
3802
+ 0 0 0 rg
3803
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Hier haben Sie die M\366glichkeit den Titel der Zahlungsart im Frontend zu) Tj T* (bestimmen) Tj T* ET
3804
+ Q
3805
+ Q
3806
+ q
3807
+ 1 0 0 1 6 213 cm
3808
+ q
3809
+ 0 0 0 rg
3810
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Erlaubte L\344nder) Tj T* ET
3811
+ Q
3812
+ Q
3813
+ q
3814
+ 1 0 0 1 134.1518 201 cm
3815
+ q
3816
+ 0 0 0 rg
3817
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Hier k\366nnen Sie konfigurieren, f\374r welche L\344nder die Zahlungsart zur) Tj T* (Verf\374gung steht) Tj T* ET
3818
+ Q
3819
+ Q
3820
+ q
3821
+ 1 0 0 1 6 183 cm
3822
+ q
3823
+ 0 0 0 rg
3824
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Erlaubte W\344hrungen) Tj T* ET
3825
+ Q
3826
+ Q
3827
+ q
3828
+ 1 0 0 1 134.1518 171 cm
3829
+ q
3830
+ 0 0 0 rg
3831
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Hier k\366nnen Sie konfigurieren, f\374r welche W\344hrungen die Zahlungsart zur) Tj T* (Verf\374gung steht) Tj T* ET
3832
+ Q
3833
+ Q
3834
+ q
3835
+ 1 0 0 1 6 153 cm
3836
+ q
3837
+ 0 0 0 rg
3838
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (URL) Tj T* ET
3839
+ Q
3840
+ Q
3841
+ q
3842
+ 1 0 0 1 134.1518 141 cm
3843
+ q
3844
+ 0 0 0 rg
3845
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Die URL der Seite, welche im Iframe erscheint Bitte nur bei expliziter) Tj T* (Aufforderung durch Expercash \344ndern) Tj T* ET
3846
+ Q
3847
+ Q
3848
+ q
3849
+ 1 0 0 1 6 111 cm
3850
+ q
3851
+ 0 0 0 rg
3852
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Autorisierung /) Tj T* (Direktbelastung) Tj T* ET
3853
+ Q
3854
+ Q
3855
+ q
3856
+ 1 0 0 1 134.1518 75 cm
3857
+ q
3858
+ 0 0 0 rg
3859
+ BT 1 0 0 1 0 50 Tm /F1 10 Tf 12 TL (Hier k\366nnen Sie den Typ des Zahlungsvorgangs konfigurieren. Im Modus) Tj T* ("Autorisierung" wird das Geld vom Kunden vor-autorisiert, aber noch nicht) Tj T* (eingezogen. Im Modus "Direktbelastung" wird das Geld bei einer) Tj T* (erfolgreichen Zahlung sofort abgebucht. Beachten Sie hierzu auch den) Tj T* (Punkt Zahlungstypen) Tj T* ET
3860
+ Q
3861
+ Q
3862
+ q
3863
+ 1 0 0 1 6 45 cm
3864
+ q
3865
+ 0 0 0 rg
3866
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Rechnungserstellung bei) Tj T* (Belastung) Tj T* ET
3867
+ Q
3868
+ Q
3869
+ q
3870
+ 1 0 0 1 134.1518 45 cm
3871
+ q
3872
+ 0 0 0 rg
3873
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Hier haben Sie die M\366glichkeit die automatische Rechnungserstellung zu) Tj T* (aktivieren.) Tj T* ET
3874
+ Q
3875
+ Q
3876
+ q
3877
+ 1 0 0 1 6 15 cm
3878
+ q
3879
+ 0 0 0 rg
3880
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Rechnungs-Email) Tj T* (automatisch versenden) Tj T* ET
3881
+ Q
3882
+ Q
3883
+ q
3884
+ 1 0 0 1 134.1518 3 cm
3885
+ q
3886
+ 0 0 0 rg
3887
+ BT 1 0 0 1 0 26 Tm /F1 10 Tf 12 TL (Hier k\366nnen Sie einstellen ob automatisch eine Rechnungs-Email) Tj T* (versendet werden soll \( Nur bei Direktbelastung sowie der Zahlart) Tj T* (Barzahlen und in Verbindung mit "Rechnungserstellung bei Belastung"\)) Tj T* ET
3888
+ Q
3889
+ Q
3890
+ q
3891
+ 1 J
3892
+ 1 j
3893
+ 0 0 0 RG
3894
+ .25 w
3895
+ n 0 342 m 469.8898 342 l S
3896
+ n 0 324 m 469.8898 324 l S
3897
+ n 0 258 m 469.8898 258 l S
3898
+ n 0 228 m 469.8898 228 l S
3899
+ n 0 198 m 469.8898 198 l S
3900
+ n 0 168 m 469.8898 168 l S
3901
+ n 0 138 m 469.8898 138 l S
3902
+ n 0 72 m 469.8898 72 l S
3903
+ n 0 42 m 469.8898 42 l S
3904
+ n 128.1518 0 m 128.1518 360 l S
3905
+ n 0 360 m 469.8898 360 l S
3906
+ n 0 0 m 469.8898 0 l S
3907
+ n 0 0 m 0 360 l S
3908
+ n 469.8898 0 m 469.8898 360 l S
3909
+ Q
3910
+ Q
3911
+ q
3912
+ 1 0 0 1 62.69291 118.0687 cm
3913
+ Q
3914
+ q
3915
+ 1 0 0 1 62.69291 118.0687 cm
3916
+ Q
3917
+ q
3918
+ 1 0 0 1 411.0236 768.242 cm
3919
+ q
3920
+ 127.5591 0 0 45.30135 0 0 cm
3921
+ /FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
3922
+ Q
3923
+ Q
3924
+ q
3925
+ 1 0 0 1 56.69291 56.69291 cm
3926
+ 0 0 0 rg
3927
+ BT /F1 10 Tf 12 TL ET
3928
+ q
3929
+ 1 0 0 1 6 3 cm
3930
+ q
3931
+ 0 0 0 rg
3932
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
3933
+ Q
3934
+ Q
3935
+ q
3936
+ 1 0 0 1 246.9449 3 cm
3937
+ q
3938
+ 0 0 0 rg
3939
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 209.4849 0 Td (7/16) Tj T* -209.4849 0 Td ET
3940
+ Q
3941
+ Q
3942
+ q
3943
+ Q
3944
+ Q
3945
+
3946
+ endstream
3947
+ endobj
3948
+ % 'R101': class PDFStream
3949
+ 101 0 obj
3950
+ % page stream
3951
+ << /Length 6938 >>
3952
+ stream
3953
+ 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
3954
+ q
3955
+ 1 0 0 1 62.69291 742.0687 cm
3956
+ Q
3957
+ q
3958
+ 1 0 0 1 62.69291 718.0687 cm
3959
+ q
3960
+ 0 .533333 .603922 rg
3961
+ BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 130.7549 0 Td (Zahlungsmethode Masterpass Fullcheckout) Tj T* -130.7549 0 Td ET
3962
+ Q
3963
+ Q
3964
+ q
3965
+ 1 0 0 1 62.69291 250.0687 cm
3966
+ 1 1 1 rg
3967
+ n 0 462 469.8898 -18 re f*
3968
+ .878431 .878431 .878431 rg
3969
+ n 0 444 469.8898 -18 re f*
3970
+ 1 1 1 rg
3971
+ n 0 426 469.8898 -66 re f*
3972
+ .878431 .878431 .878431 rg
3973
+ n 0 360 469.8898 -30 re f*
3974
+ 1 1 1 rg
3975
+ n 0 330 469.8898 -30 re f*
3976
+ .878431 .878431 .878431 rg
3977
+ n 0 300 469.8898 -30 re f*
3978
+ 1 1 1 rg
3979
+ n 0 270 469.8898 -30 re f*
3980
+ .878431 .878431 .878431 rg
3981
+ n 0 240 469.8898 -30 re f*
3982
+ 1 1 1 rg
3983
+ n 0 210 469.8898 -30 re f*
3984
+ .878431 .878431 .878431 rg
3985
+ n 0 180 469.8898 -30 re f*
3986
+ 1 1 1 rg
3987
+ n 0 150 469.8898 -30 re f*
3988
+ .878431 .878431 .878431 rg
3989
+ n 0 120 469.8898 -30 re f*
3990
+ 1 1 1 rg
3991
+ n 0 90 469.8898 -90 re f*
3992
+ .960784 .960784 .862745 rg
3993
+ n 0 462 469.8898 -18 re f*
3994
+ 0 .533333 .603922 rg
3995
+ BT /F1 10 Tf 12 TL ET
3996
+ q
3997
+ 1 0 0 1 6 447 cm
3998
+ q
3999
+ .960784 .960784 .862745 rg
4000
+ n 0 0 116.1518 12 re f*
4001
+ Q
4002
+ q
4003
+ 0 .533333 .603922 rg
4004
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 28.61588 0 Td (Konfiguration) Tj T* -28.61588 0 Td ET
4005
+ Q
4006
+ Q
4007
+ q
4008
+ 1 0 0 1 134.1518 447 cm
4009
+ q
4010
+ .960784 .960784 .862745 rg
4011
+ n 0 0 329.738 12 re f*
4012
+ Q
4013
+ q
4014
+ 0 .533333 .603922 rg
4015
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 134.299 0 Td (Beschreibung) Tj T* -134.299 0 Td ET
4016
+ Q
4017
+ Q
4018
+ 0 0 0 rg
4019
+ q
4020
+ 1 0 0 1 6 429 cm
4021
+ q
4022
+ 0 0 0 rg
4023
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Aktiviert) Tj T* ET
4024
+ Q
4025
+ Q
4026
+ q
4027
+ 1 0 0 1 134.1518 429 cm
4028
+ q
4029
+ 0 0 0 rg
4030
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stellen Sie diese Option auf "Ja" um diese Zahlungsmethode zu aktivieren) Tj T* ET
4031
+ Q
4032
+ Q
4033
+ q
4034
+ 1 0 0 1 6 399 cm
4035
+ q
4036
+ 0 0 0 rg
4037
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Status neuer) Tj T* (Bestellungen) Tj T* ET
4038
+ Q
4039
+ Q
4040
+ q
4041
+ 1 0 0 1 134.1518 363 cm
4042
+ q
4043
+ 0 0 0 rg
4044
+ BT 1 0 0 1 0 50 Tm /F1 10 Tf 12 TL (Hier haben Sie die M\366glichkeit den Status einer erfolgreichen Bestellung) Tj T* (festzulegen. Die zur Verf\374gung stehenden Statusm\366glichkeiten sind:) Tj T* (Pending \(Ausstehend\), Processing \(Verarbeitung\), Complete) Tj T* (\(Vollst\344ndig\), Closed \(Geschlossen\), Canceled \(Storniert\), On Hold) Tj T* (\(Zur\374ckgestellt\)) Tj T* ET
4045
+ Q
4046
+ Q
4047
+ q
4048
+ 1 0 0 1 6 333 cm
4049
+ q
4050
+ 0 0 0 rg
4051
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Bezeichung im) Tj T* (Shop-Frontend) Tj T* ET
4052
+ Q
4053
+ Q
4054
+ q
4055
+ 1 0 0 1 134.1518 333 cm
4056
+ q
4057
+ 0 0 0 rg
4058
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Hier haben Sie die M\366glichkeit den Titel der Zahlungsart im Frontend zu) Tj T* (bestimmen) Tj T* ET
4059
+ Q
4060
+ Q
4061
+ q
4062
+ 1 0 0 1 6 315 cm
4063
+ q
4064
+ 0 0 0 rg
4065
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Erlaubte L\344nder) Tj T* ET
4066
+ Q
4067
+ Q
4068
+ q
4069
+ 1 0 0 1 134.1518 303 cm
4070
+ q
4071
+ 0 0 0 rg
4072
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Hier k\366nnen Sie konfigurieren, f\374r welche L\344nder die Zahlungsart zur) Tj T* (Verf\374gung steht) Tj T* ET
4073
+ Q
4074
+ Q
4075
+ q
4076
+ 1 0 0 1 6 285 cm
4077
+ q
4078
+ 0 0 0 rg
4079
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Erlaubte W\344hrungen) Tj T* ET
4080
+ Q
4081
+ Q
4082
+ q
4083
+ 1 0 0 1 134.1518 273 cm
4084
+ q
4085
+ 0 0 0 rg
4086
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Hier k\366nnen Sie konfigurieren, f\374r welche W\344hrungen die Zahlungsart zur) Tj T* (Verf\374gung steht) Tj T* ET
4087
+ Q
4088
+ Q
4089
+ q
4090
+ 1 0 0 1 6 243 cm
4091
+ q
4092
+ 0 0 0 rg
4093
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Button im Warenkorb) Tj T* (anzeigen) Tj T* ET
4094
+ Q
4095
+ Q
4096
+ q
4097
+ 1 0 0 1 134.1518 243 cm
4098
+ q
4099
+ 0 0 0 rg
4100
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Anzeige des Masterpass Button/Links im Warenkorb) Tj T* (aktivieren/deaktivieren.) Tj T* ET
4101
+ Q
4102
+ Q
4103
+ q
4104
+ 1 0 0 1 6 213 cm
4105
+ q
4106
+ 0 0 0 rg
4107
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Button im Mini Warenkorb) Tj T* (anzeigen) Tj T* ET
4108
+ Q
4109
+ Q
4110
+ q
4111
+ 1 0 0 1 134.1518 213 cm
4112
+ q
4113
+ 0 0 0 rg
4114
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Anzeige des Masterpass Button/Links im Mini-Warenkorb) Tj T* (aktivieren/deaktivieren.) Tj T* ET
4115
+ Q
4116
+ Q
4117
+ q
4118
+ 1 0 0 1 6 183 cm
4119
+ q
4120
+ 0 0 0 rg
4121
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Button im Checkout) Tj T* (anzeigen) Tj T* ET
4122
+ Q
4123
+ Q
4124
+ q
4125
+ 1 0 0 1 134.1518 183 cm
4126
+ q
4127
+ 0 0 0 rg
4128
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Anzeige des Masterpass Button/Links und Textes im Login-Step des) Tj T* (Checkouts aktivieren/deaktivieren.) Tj T* ET
4129
+ Q
4130
+ Q
4131
+ q
4132
+ 1 0 0 1 6 153 cm
4133
+ q
4134
+ 0 0 0 rg
4135
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Zus\344tzlicher) Tj T* (Checkout-Text) Tj T* ET
4136
+ Q
4137
+ Q
4138
+ q
4139
+ 1 0 0 1 134.1518 153 cm
4140
+ q
4141
+ 0 0 0 rg
4142
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Text welcher im Login-Step des Checkouts angezeigt wird. \(nur wenn) Tj T* (Button im Checkout anzeigen aktiviert ist\)) Tj T* ET
4143
+ Q
4144
+ Q
4145
+ q
4146
+ 1 0 0 1 6 135 cm
4147
+ q
4148
+ 0 0 0 rg
4149
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Link anzeigen) Tj T* ET
4150
+ Q
4151
+ Q
4152
+ q
4153
+ 1 0 0 1 134.1518 123 cm
4154
+ q
4155
+ 0 0 0 rg
4156
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Anzeige des "Erfahre mehr..." Links neben dem Masterpass Logo) Tj T* (aktivieren/deaktivieren) Tj T* ET
4157
+ Q
4158
+ Q
4159
+ q
4160
+ 1 0 0 1 6 93 cm
4161
+ q
4162
+ 0 0 0 rg
4163
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Kreditkartendaten im) Tj T* (Checkout anzeigen) Tj T* ET
4164
+ Q
4165
+ Q
4166
+ q
4167
+ 1 0 0 1 134.1518 93 cm
4168
+ q
4169
+ 0 0 0 rg
4170
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Wenn aktiviert werden die maskierte Kreditkartennummer und der) Tj T* (Creditkartentyp im Abschnit Zahlungsmethoden angezeigt.) Tj T* ET
4171
+ Q
4172
+ Q
4173
+ q
4174
+ 1 0 0 1 6 63 cm
4175
+ q
4176
+ 0 0 0 rg
4177
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Rechnungserstellung bei) Tj T* (Kauf) Tj T* ET
4178
+ Q
4179
+ Q
4180
+ q
4181
+ 1 0 0 1 134.1518 63 cm
4182
+ q
4183
+ 0 0 0 rg
4184
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Hier haben Sie die M\366glichkeit die automatische Rechnungserstellung zu) Tj T* (aktivieren) Tj T* ET
4185
+ Q
4186
+ Q
4187
+ q
4188
+ 1 0 0 1 134.1518 39 cm
4189
+ q
4190
+ 0 0 0 rg
4191
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Wichtig: Diese Option steuert auch gleichzeitig den verwendeten) Tj T* (Zahlungsvorgangstyp) Tj T* ET
4192
+ Q
4193
+ Q
4194
+ q
4195
+ 1 0 0 1 134.1518 27 cm
4196
+ q
4197
+ 0 0 0 rg
4198
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Aktiviert = Direktbelastung) Tj T* ET
4199
+ Q
4200
+ Q
4201
+ q
4202
+ 1 0 0 1 134.1518 15 cm
4203
+ q
4204
+ 0 0 0 rg
4205
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Deaktiviert = Autorisierung) Tj T* ET
4206
+ Q
4207
+ Q
4208
+ q
4209
+ 1 0 0 1 134.1518 3 cm
4210
+ q
4211
+ 0 0 0 rg
4212
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Beachten Sie hierzu auch den Punkt "Zahlungstypen") Tj T* ET
4213
+ Q
4214
+ Q
4215
+ q
4216
+ 1 J
4217
+ 1 j
4218
+ 0 0 0 RG
4219
+ .25 w
4220
+ n 0 444 m 469.8898 444 l S
4221
+ n 0 426 m 469.8898 426 l S
4222
+ n 0 360 m 469.8898 360 l S
4223
+ n 0 330 m 469.8898 330 l S
4224
+ n 0 300 m 469.8898 300 l S
4225
+ n 0 270 m 469.8898 270 l S
4226
+ n 0 240 m 469.8898 240 l S
4227
+ n 0 210 m 469.8898 210 l S
4228
+ n 0 180 m 469.8898 180 l S
4229
+ n 0 150 m 469.8898 150 l S
4230
+ n 0 120 m 469.8898 120 l S
4231
+ n 0 90 m 469.8898 90 l S
4232
+ n 128.1518 0 m 128.1518 462 l S
4233
+ n 0 462 m 469.8898 462 l S
4234
+ n 0 0 m 469.8898 0 l S
4235
+ n 0 0 m 0 462 l S
4236
+ n 469.8898 0 m 469.8898 462 l S
4237
+ Q
4238
+ Q
4239
+ q
4240
+ 1 0 0 1 62.69291 250.0687 cm
4241
+ Q
4242
+ q
4243
+ 1 0 0 1 62.69291 238.0687 cm
4244
+ Q
4245
+ q
4246
+ 1 0 0 1 411.0236 768.242 cm
4247
+ q
4248
+ 127.5591 0 0 45.30135 0 0 cm
4249
+ /FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
4250
+ Q
4251
+ Q
4252
+ q
4253
+ 1 0 0 1 56.69291 56.69291 cm
4254
+ 0 0 0 rg
4255
+ BT /F1 10 Tf 12 TL ET
4256
+ q
4257
+ 1 0 0 1 6 3 cm
4258
+ q
4259
+ 0 0 0 rg
4260
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
4261
+ Q
4262
+ Q
4263
+ q
4264
+ 1 0 0 1 246.9449 3 cm
4265
+ q
4266
+ 0 0 0 rg
4267
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 209.4849 0 Td (8/16) Tj T* -209.4849 0 Td ET
4268
+ Q
4269
+ Q
4270
+ q
4271
+ Q
4272
+ Q
4273
+
4274
+ endstream
4275
+ endobj
4276
+ % 'R102': class PDFStream
4277
+ 102 0 obj
4278
+ % page stream
4279
+ << /Length 1784 >>
4280
+ stream
4281
+ 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
4282
+ q
4283
+ 1 0 0 1 62.69291 599.0687 cm
4284
+ .960784 .960784 .862745 rg
4285
+ n 0 149 469.8898 -149 re f*
4286
+ 0 0 0 rg
4287
+ BT /F1 10 Tf 12 TL ET
4288
+ BT 1 0 0 1 6 123 Tm T* ET
4289
+ q
4290
+ 1 0 0 1 16 118 cm
4291
+ q
4292
+ 0 .533333 .603922 rg
4293
+ BT 1 0 0 1 0 2.5 Tm /F3 12.5 Tf 15 TL (Note) Tj T* ET
4294
+ Q
4295
+ Q
4296
+ q
4297
+ 1 0 0 1 16 94 cm
4298
+ q
4299
+ 0 0 0 rg
4300
+ BT 1 0 0 1 0 2 Tm /F4 10 Tf 12 TL (Hinweis:) Tj T* ET
4301
+ Q
4302
+ Q
4303
+ q
4304
+ 1 0 0 1 16 16 cm
4305
+ q
4306
+ 0 0 0 rg
4307
+ BT 1 0 0 1 0 62 Tm /F1 10 Tf 12 TL .035529 Tw (Da letztlich die drei Zahlungsmethoden "MasterPass", "MasterPass Fullcheckout" und "Kreditkarte") Tj T* 0 Tw 1.753314 Tw (alle zu Kreditkartentransaktionen f\374hren, ist es sehr empfehlenswert, dass auch alle diese drei) Tj T* 0 Tw 6.954961 Tw (Zahlungsarten auf den gleichen Zahlungsvorgangstyp \("Autorisierung/Reservierung" bzw.) Tj T* 0 Tw 2.119976 Tw ("Direktbelastung"\) konfiguriert werden. Ansonsten wird es f\374r Sie sp\344ter deutlich komplizierter,) Tj T* 0 Tw 2.491647 Tw (denn Sie m\374sste dann je nach Zahlungsart wissen, ob nun separat die Buchungstransaktion) Tj T* 0 Tw (\(Capture\) ausgel\366st werden muss oder nicht.) Tj T* ET
4308
+ Q
4309
+ Q
4310
+ q
4311
+ 1 J
4312
+ 1 j
4313
+ .662745 .662745 .662745 RG
4314
+ .5 w
4315
+ n 0 149 m 469.8898 149 l S
4316
+ n 0 0 m 469.8898 0 l S
4317
+ n 0 0 m 0 149 l S
4318
+ n 469.8898 0 m 469.8898 149 l S
4319
+ Q
4320
+ Q
4321
+ q
4322
+ 1 0 0 1 62.69291 593.0687 cm
4323
+ Q
4324
+ q
4325
+ 1 0 0 1 62.69291 593.0687 cm
4326
+ Q
4327
+ q
4328
+ 1 0 0 1 411.0236 768.242 cm
4329
+ q
4330
+ 127.5591 0 0 45.30135 0 0 cm
4331
+ /FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
4332
+ Q
4333
+ Q
4334
+ q
4335
+ 1 0 0 1 56.69291 56.69291 cm
4336
+ 0 0 0 rg
4337
+ BT /F1 10 Tf 12 TL ET
4338
+ q
4339
+ 1 0 0 1 6 3 cm
4340
+ q
4341
+ 0 0 0 rg
4342
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
4343
+ Q
4344
+ Q
4345
+ q
4346
+ 1 0 0 1 246.9449 3 cm
4347
+ q
4348
+ 0 0 0 rg
4349
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 209.4849 0 Td (9/16) Tj T* -209.4849 0 Td ET
4350
+ Q
4351
+ Q
4352
+ q
4353
+ Q
4354
+ Q
4355
+
4356
+ endstream
4357
+ endobj
4358
+ % 'R103': class PDFStream
4359
+ 103 0 obj
4360
+ % page stream
4361
+ << /Length 6811 >>
4362
+ stream
4363
+ 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
4364
+ q
4365
+ 1 0 0 1 62.69291 733.0687 cm
4366
+ q
4367
+ BT 1 0 0 1 0 2.5 Tm 15 TL /F3 12.5 Tf 0 .533333 .603922 rg (4.2.1 Zahlungstypen) Tj T* ET
4368
+ Q
4369
+ Q
4370
+ q
4371
+ 1 0 0 1 62.69291 721.0687 cm
4372
+ Q
4373
+ q
4374
+ 1 0 0 1 62.69291 709.0687 cm
4375
+ q
4376
+ 0 0 0 rg
4377
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
4378
+ Q
4379
+ Q
4380
+ q
4381
+ 1 0 0 1 62.69291 709.0687 cm
4382
+ Q
4383
+ q
4384
+ 1 0 0 1 62.69291 703.0687 cm
4385
+ Q
4386
+ q
4387
+ 1 0 0 1 62.69291 679.0687 cm
4388
+ q
4389
+ 0 .533333 .603922 rg
4390
+ BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 199.3849 0 Td (Zahlungstypen) Tj T* -199.3849 0 Td ET
4391
+ Q
4392
+ Q
4393
+ q
4394
+ 1 0 0 1 62.69291 385.0687 cm
4395
+ 1 1 1 rg
4396
+ n 0 288 469.8898 -18 re f*
4397
+ .878431 .878431 .878431 rg
4398
+ n 0 270 469.8898 -30 re f*
4399
+ 1 1 1 rg
4400
+ n 0 240 469.8898 -18 re f*
4401
+ .878431 .878431 .878431 rg
4402
+ n 0 222 469.8898 -30 re f*
4403
+ 1 1 1 rg
4404
+ n 0 192 469.8898 -18 re f*
4405
+ .878431 .878431 .878431 rg
4406
+ n 0 174 469.8898 -30 re f*
4407
+ 1 1 1 rg
4408
+ n 0 144 469.8898 -18 re f*
4409
+ .878431 .878431 .878431 rg
4410
+ n 0 126 469.8898 -18 re f*
4411
+ 1 1 1 rg
4412
+ n 0 108 469.8898 -18 re f*
4413
+ .878431 .878431 .878431 rg
4414
+ n 0 90 469.8898 -30 re f*
4415
+ 1 1 1 rg
4416
+ n 0 60 469.8898 -30 re f*
4417
+ .878431 .878431 .878431 rg
4418
+ n 0 30 469.8898 -30 re f*
4419
+ .960784 .960784 .862745 rg
4420
+ n 0 288 469.8898 -18 re f*
4421
+ 0 .533333 .603922 rg
4422
+ BT /F1 10 Tf 12 TL ET
4423
+ q
4424
+ 1 0 0 1 6 273 cm
4425
+ q
4426
+ .960784 .960784 .862745 rg
4427
+ n 0 0 88.69066 12 re f*
4428
+ Q
4429
+ q
4430
+ 0 .533333 .603922 rg
4431
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 17.94533 0 Td (Zahlungsart) Tj T* -17.94533 0 Td ET
4432
+ Q
4433
+ Q
4434
+ q
4435
+ 1 0 0 1 106.6907 273 cm
4436
+ q
4437
+ .960784 .960784 .862745 rg
4438
+ n 0 0 88.69066 12 re f*
4439
+ Q
4440
+ q
4441
+ 0 .533333 .603922 rg
4442
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 36.01033 0 Td (Typ) Tj T* -36.01033 0 Td ET
4443
+ Q
4444
+ Q
4445
+ q
4446
+ 1 0 0 1 207.3813 273 cm
4447
+ q
4448
+ .960784 .960784 .862745 rg
4449
+ n 0 0 256.5084 12 re f*
4450
+ Q
4451
+ q
4452
+ 0 .533333 .603922 rg
4453
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 97.68422 0 Td (Beschreibung) Tj T* -97.68422 0 Td ET
4454
+ Q
4455
+ Q
4456
+ 0 0 0 rg
4457
+ q
4458
+ 1 0 0 1 6 255 cm
4459
+ q
4460
+ 0 0 0 rg
4461
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Kreditkarte) Tj T* ET
4462
+ Q
4463
+ Q
4464
+ q
4465
+ 1 0 0 1 106.6907 255 cm
4466
+ q
4467
+ 0 0 0 rg
4468
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Autorisierung) Tj T* ET
4469
+ Q
4470
+ Q
4471
+ q
4472
+ 1 0 0 1 207.3813 243 cm
4473
+ q
4474
+ 0 0 0 rg
4475
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Reservierung des Betrages auf der Kreditkarte \(zum) Tj T* (sp\344teren Einzug\)) Tj T* ET
4476
+ Q
4477
+ Q
4478
+ q
4479
+ 1 0 0 1 6 225 cm
4480
+ q
4481
+ 0 0 0 rg
4482
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Kreditkarte) Tj T* ET
4483
+ Q
4484
+ Q
4485
+ q
4486
+ 1 0 0 1 106.6907 225 cm
4487
+ q
4488
+ 0 0 0 rg
4489
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Direktbelastung) Tj T* ET
4490
+ Q
4491
+ Q
4492
+ q
4493
+ 1 0 0 1 207.3813 225 cm
4494
+ q
4495
+ 0 0 0 rg
4496
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Direkte Belastung der Kreditkarte) Tj T* ET
4497
+ Q
4498
+ Q
4499
+ q
4500
+ 1 0 0 1 6 207 cm
4501
+ q
4502
+ 0 0 0 rg
4503
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Lastschrift) Tj T* ET
4504
+ Q
4505
+ Q
4506
+ q
4507
+ 1 0 0 1 106.6907 207 cm
4508
+ q
4509
+ 0 0 0 rg
4510
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Autorisierung) Tj T* ET
4511
+ Q
4512
+ Q
4513
+ q
4514
+ 1 0 0 1 207.3813 195 cm
4515
+ q
4516
+ 0 0 0 rg
4517
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Pr\374fung und Speicherung von Kontodaten \(zum sp\344teren) Tj T* (Einzug\)) Tj T* ET
4518
+ Q
4519
+ Q
4520
+ q
4521
+ 1 0 0 1 6 177 cm
4522
+ q
4523
+ 0 0 0 rg
4524
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Lastschrift) Tj T* ET
4525
+ Q
4526
+ Q
4527
+ q
4528
+ 1 0 0 1 106.6907 177 cm
4529
+ q
4530
+ 0 0 0 rg
4531
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Direktbelastung) Tj T* ET
4532
+ Q
4533
+ Q
4534
+ q
4535
+ 1 0 0 1 207.3813 177 cm
4536
+ q
4537
+ 0 0 0 rg
4538
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Direkte Ausl\366sung einer Lastschrift) Tj T* ET
4539
+ Q
4540
+ Q
4541
+ q
4542
+ 1 0 0 1 6 159 cm
4543
+ q
4544
+ 0 0 0 rg
4545
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Barzahlen) Tj T* ET
4546
+ Q
4547
+ Q
4548
+ q
4549
+ 1 0 0 1 106.6907 159 cm
4550
+ q
4551
+ 0 0 0 rg
4552
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Autorisierung) Tj T* ET
4553
+ Q
4554
+ Q
4555
+ q
4556
+ 1 0 0 1 207.3813 147 cm
4557
+ q
4558
+ 0 0 0 rg
4559
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Kunde geht mit "Zahlschein" zu einer) Tj T* (Barzahlen-Annahmestelle und zahlt dort) Tj T* ET
4560
+ Q
4561
+ Q
4562
+ q
4563
+ 1 0 0 1 6 129 cm
4564
+ q
4565
+ 0 0 0 rg
4566
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Giropay) Tj T* ET
4567
+ Q
4568
+ Q
4569
+ q
4570
+ 1 0 0 1 106.6907 129 cm
4571
+ q
4572
+ 0 0 0 rg
4573
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Direktbelastung) Tj T* ET
4574
+ Q
4575
+ Q
4576
+ q
4577
+ 1 0 0 1 207.3813 129 cm
4578
+ q
4579
+ 0 0 0 rg
4580
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Direkte Belastung des angegebenen Kunden-Kontos) Tj T* ET
4581
+ Q
4582
+ Q
4583
+ q
4584
+ 1 0 0 1 6 111 cm
4585
+ q
4586
+ 0 0 0 rg
4587
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Sofort\374berweisung) Tj T* ET
4588
+ Q
4589
+ Q
4590
+ q
4591
+ 1 0 0 1 106.6907 111 cm
4592
+ q
4593
+ 0 0 0 rg
4594
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Direktbelastung) Tj T* ET
4595
+ Q
4596
+ Q
4597
+ q
4598
+ 1 0 0 1 207.3813 111 cm
4599
+ q
4600
+ 0 0 0 rg
4601
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Direkte Belastung des angegebenen Kunden-Kontos) Tj T* ET
4602
+ Q
4603
+ Q
4604
+ q
4605
+ 1 0 0 1 6 93 cm
4606
+ q
4607
+ 0 0 0 rg
4608
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Masterpass) Tj T* ET
4609
+ Q
4610
+ Q
4611
+ q
4612
+ 1 0 0 1 106.6907 93 cm
4613
+ q
4614
+ 0 0 0 rg
4615
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Direktbelastung) Tj T* ET
4616
+ Q
4617
+ Q
4618
+ q
4619
+ 1 0 0 1 207.3813 93 cm
4620
+ q
4621
+ 0 0 0 rg
4622
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Direkte Belastung der Kreditkarte) Tj T* ET
4623
+ Q
4624
+ Q
4625
+ q
4626
+ 1 0 0 1 6 75 cm
4627
+ q
4628
+ 0 0 0 rg
4629
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Masterpass) Tj T* ET
4630
+ Q
4631
+ Q
4632
+ q
4633
+ 1 0 0 1 106.6907 75 cm
4634
+ q
4635
+ 0 0 0 rg
4636
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Autorisierung) Tj T* ET
4637
+ Q
4638
+ Q
4639
+ q
4640
+ 1 0 0 1 207.3813 63 cm
4641
+ q
4642
+ 0 0 0 rg
4643
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Reservierung des Betrages auf der Kreditkarte \(zum) Tj T* (sp\344teren Einzug\)) Tj T* ET
4644
+ Q
4645
+ Q
4646
+ q
4647
+ 1 0 0 1 6 33 cm
4648
+ q
4649
+ 0 0 0 rg
4650
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Masterpass) Tj T* (Fullcheckout) Tj T* ET
4651
+ Q
4652
+ Q
4653
+ q
4654
+ 1 0 0 1 106.6907 45 cm
4655
+ q
4656
+ 0 0 0 rg
4657
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Direktbelastung) Tj T* ET
4658
+ Q
4659
+ Q
4660
+ q
4661
+ 1 0 0 1 207.3813 45 cm
4662
+ q
4663
+ 0 0 0 rg
4664
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Direkte Belastung der Kreditkarte) Tj T* ET
4665
+ Q
4666
+ Q
4667
+ q
4668
+ 1 0 0 1 6 3 cm
4669
+ q
4670
+ 0 0 0 rg
4671
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Masterpass) Tj T* (Fullcheckout) Tj T* ET
4672
+ Q
4673
+ Q
4674
+ q
4675
+ 1 0 0 1 106.6907 15 cm
4676
+ q
4677
+ 0 0 0 rg
4678
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Autorisierung) Tj T* ET
4679
+ Q
4680
+ Q
4681
+ q
4682
+ 1 0 0 1 207.3813 3 cm
4683
+ q
4684
+ 0 0 0 rg
4685
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Reservierung des Betrages auf der Kreditkarte \(zum) Tj T* (sp\344teren Einzug\)) Tj T* ET
4686
+ Q
4687
+ Q
4688
+ q
4689
+ 1 J
4690
+ 1 j
4691
+ 0 0 0 RG
4692
+ .25 w
4693
+ n 0 270 m 469.8898 270 l S
4694
+ n 0 240 m 469.8898 240 l S
4695
+ n 0 222 m 469.8898 222 l S
4696
+ n 0 192 m 469.8898 192 l S
4697
+ n 0 174 m 469.8898 174 l S
4698
+ n 0 144 m 469.8898 144 l S
4699
+ n 0 126 m 469.8898 126 l S
4700
+ n 0 108 m 469.8898 108 l S
4701
+ n 0 90 m 469.8898 90 l S
4702
+ n 0 60 m 469.8898 60 l S
4703
+ n 0 30 m 469.8898 30 l S
4704
+ n 100.6907 0 m 100.6907 288 l S
4705
+ n 201.3813 0 m 201.3813 288 l S
4706
+ n 0 288 m 469.8898 288 l S
4707
+ n 0 0 m 469.8898 0 l S
4708
+ n 0 0 m 0 288 l S
4709
+ n 469.8898 0 m 469.8898 288 l S
4710
+ Q
4711
+ Q
4712
+ q
4713
+ 1 0 0 1 62.69291 385.0687 cm
4714
+ Q
4715
+ q
4716
+ 1 0 0 1 62.69291 385.0687 cm
4717
+ Q
4718
+ q
4719
+ 1 0 0 1 411.0236 768.242 cm
4720
+ q
4721
+ 127.5591 0 0 45.30135 0 0 cm
4722
+ /FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
4723
+ Q
4724
+ Q
4725
+ q
4726
+ 1 0 0 1 56.69291 56.69291 cm
4727
+ 0 0 0 rg
4728
+ BT /F1 10 Tf 12 TL ET
4729
+ q
4730
+ 1 0 0 1 6 3 cm
4731
+ q
4732
+ 0 0 0 rg
4733
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
4734
+ Q
4735
+ Q
4736
+ q
4737
+ 1 0 0 1 246.9449 3 cm
4738
+ q
4739
+ 0 0 0 rg
4740
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 203.9249 0 Td (10/16) Tj T* -203.9249 0 Td ET
4741
+ Q
4742
+ Q
4743
+ q
4744
+ Q
4745
+ Q
4746
+
4747
+ endstream
4748
+ endobj
4749
+ % 'R104': class PDFStream
4750
+ 104 0 obj
4751
+ % page stream
4752
+ << /Length 4485 >>
4753
+ stream
4754
+ 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
4755
+ q
4756
+ 1 0 0 1 62.69291 742.0687 cm
4757
+ Q
4758
+ q
4759
+ 1 0 0 1 62.69291 730.0687 cm
4760
+ q
4761
+ 0 0 0 rg
4762
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
4763
+ Q
4764
+ Q
4765
+ q
4766
+ 1 0 0 1 62.69291 730.0687 cm
4767
+ Q
4768
+ q
4769
+ 1 0 0 1 62.69291 703.0687 cm
4770
+ q
4771
+ BT 1 0 0 1 0 2.5 Tm 15 TL /F3 12.5 Tf 0 .533333 .603922 rg (4.2.2 Zahlungsstatus) Tj T* ET
4772
+ Q
4773
+ Q
4774
+ q
4775
+ 1 0 0 1 62.69291 691.0687 cm
4776
+ Q
4777
+ q
4778
+ 1 0 0 1 62.69291 679.0687 cm
4779
+ q
4780
+ 0 0 0 rg
4781
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
4782
+ Q
4783
+ Q
4784
+ q
4785
+ 1 0 0 1 62.69291 679.0687 cm
4786
+ Q
4787
+ q
4788
+ 1 0 0 1 62.69291 649.0687 cm
4789
+ q
4790
+ 0 0 0 rg
4791
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 1.26748 Tw (Sie haben die M\366glichkeit f\374r jeder Zahlungsmethode folgende Status zu konfigurieren. Bitte bedenken) Tj T* 0 Tw (Sie hier eine sinnvolle Konfiguration vornehmen.) Tj T* ET
4792
+ Q
4793
+ Q
4794
+ q
4795
+ 1 0 0 1 62.69291 643.0687 cm
4796
+ Q
4797
+ q
4798
+ 1 0 0 1 62.69291 619.0687 cm
4799
+ q
4800
+ 0 .533333 .603922 rg
4801
+ BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 200.7749 0 Td (Zahlungstatus) Tj T* -200.7749 0 Td ET
4802
+ Q
4803
+ Q
4804
+ q
4805
+ 1 0 0 1 62.69291 457.0687 cm
4806
+ 1 1 1 rg
4807
+ n 0 156 469.8898 -18 re f*
4808
+ .878431 .878431 .878431 rg
4809
+ n 0 138 469.8898 -18 re f*
4810
+ 1 1 1 rg
4811
+ n 0 120 469.8898 -18 re f*
4812
+ .878431 .878431 .878431 rg
4813
+ n 0 102 469.8898 -18 re f*
4814
+ 1 1 1 rg
4815
+ n 0 84 469.8898 -18 re f*
4816
+ .878431 .878431 .878431 rg
4817
+ n 0 66 469.8898 -30 re f*
4818
+ 1 1 1 rg
4819
+ n 0 36 469.8898 -18 re f*
4820
+ .878431 .878431 .878431 rg
4821
+ n 0 18 469.8898 -18 re f*
4822
+ .960784 .960784 .862745 rg
4823
+ n 0 156 469.8898 -18 re f*
4824
+ 0 .533333 .603922 rg
4825
+ BT /F1 10 Tf 12 TL ET
4826
+ q
4827
+ 1 0 0 1 6 141 cm
4828
+ q
4829
+ .960784 .960784 .862745 rg
4830
+ n 0 0 116.1518 12 re f*
4831
+ Q
4832
+ q
4833
+ 0 .533333 .603922 rg
4834
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 24.17088 0 Td (Zahlungsstatus) Tj T* -24.17088 0 Td ET
4835
+ Q
4836
+ Q
4837
+ q
4838
+ 1 0 0 1 134.1518 141 cm
4839
+ q
4840
+ .960784 .960784 .862745 rg
4841
+ n 0 0 329.738 12 re f*
4842
+ Q
4843
+ q
4844
+ 0 .533333 .603922 rg
4845
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 134.299 0 Td (Beschreibung) Tj T* -134.299 0 Td ET
4846
+ Q
4847
+ Q
4848
+ 0 0 0 rg
4849
+ q
4850
+ 1 0 0 1 6 123 cm
4851
+ q
4852
+ 0 0 0 rg
4853
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Closed/Geschlossen) Tj T* ET
4854
+ Q
4855
+ Q
4856
+ q
4857
+ 1 0 0 1 134.1518 123 cm
4858
+ q
4859
+ 0 0 0 rg
4860
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (berechnet und gut geschrieben) Tj T* ET
4861
+ Q
4862
+ Q
4863
+ q
4864
+ 1 0 0 1 6 105 cm
4865
+ q
4866
+ 0 0 0 rg
4867
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Canceled/Abgebrochen) Tj T* ET
4868
+ Q
4869
+ Q
4870
+ q
4871
+ 1 0 0 1 134.1518 105 cm
4872
+ q
4873
+ 0 0 0 rg
4874
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (storniert oder Zahlung vom Kunden abgebrochen) Tj T* ET
4875
+ Q
4876
+ Q
4877
+ q
4878
+ 1 0 0 1 6 87 cm
4879
+ q
4880
+ 0 0 0 rg
4881
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Complete/Vollst\344ndig) Tj T* ET
4882
+ Q
4883
+ Q
4884
+ q
4885
+ 1 0 0 1 134.1518 87 cm
4886
+ q
4887
+ 0 0 0 rg
4888
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (berechnet und versendet) Tj T* ET
4889
+ Q
4890
+ Q
4891
+ q
4892
+ 1 0 0 1 6 69 cm
4893
+ q
4894
+ 0 0 0 rg
4895
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Pending/Wartend) Tj T* ET
4896
+ Q
4897
+ Q
4898
+ q
4899
+ 1 0 0 1 134.1518 69 cm
4900
+ q
4901
+ 0 0 0 rg
4902
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (wartend, d.h. Nachnahme oder Vorkasse) Tj T* ET
4903
+ Q
4904
+ Q
4905
+ q
4906
+ 1 0 0 1 6 39 cm
4907
+ q
4908
+ 0 0 0 rg
4909
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Pending Payment/Warte) Tj T* (auf Zahlung) Tj T* ET
4910
+ Q
4911
+ Q
4912
+ q
4913
+ 1 0 0 1 134.1518 39 cm
4914
+ q
4915
+ 0 0 0 rg
4916
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (warte auf Zahlung, Zahlung nicht abgeschlossen, wenn der Status l\344nger) Tj T* (besteht) Tj T* ET
4917
+ Q
4918
+ Q
4919
+ q
4920
+ 1 0 0 1 6 21 cm
4921
+ q
4922
+ 0 0 0 rg
4923
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Processing/Verarbeitung) Tj T* ET
4924
+ Q
4925
+ Q
4926
+ q
4927
+ 1 0 0 1 134.1518 21 cm
4928
+ q
4929
+ 0 0 0 rg
4930
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Verarbeitung, d.h. Ware bezahlt und/oder Rechnung erstellt) Tj T* ET
4931
+ Q
4932
+ Q
4933
+ q
4934
+ 1 0 0 1 6 3 cm
4935
+ q
4936
+ 0 0 0 rg
4937
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (On Hold/Zur\374ckgestellt) Tj T* ET
4938
+ Q
4939
+ Q
4940
+ q
4941
+ 1 0 0 1 134.1518 3 cm
4942
+ q
4943
+ 0 0 0 rg
4944
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Zur\374ckgestellt) Tj T* ET
4945
+ Q
4946
+ Q
4947
+ q
4948
+ 1 J
4949
+ 1 j
4950
+ 0 0 0 RG
4951
+ .25 w
4952
+ n 0 138 m 469.8898 138 l S
4953
+ n 0 120 m 469.8898 120 l S
4954
+ n 0 102 m 469.8898 102 l S
4955
+ n 0 84 m 469.8898 84 l S
4956
+ n 0 66 m 469.8898 66 l S
4957
+ n 0 36 m 469.8898 36 l S
4958
+ n 0 18 m 469.8898 18 l S
4959
+ n 128.1518 0 m 128.1518 156 l S
4960
+ n 0 156 m 469.8898 156 l S
4961
+ n 0 0 m 469.8898 0 l S
4962
+ n 0 0 m 0 156 l S
4963
+ n 469.8898 0 m 469.8898 156 l S
4964
+ Q
4965
+ Q
4966
+ q
4967
+ 1 0 0 1 62.69291 457.0687 cm
4968
+ Q
4969
+ q
4970
+ 1 0 0 1 62.69291 457.0687 cm
4971
+ Q
4972
+ q
4973
+ 1 0 0 1 411.0236 768.242 cm
4974
+ q
4975
+ 127.5591 0 0 45.30135 0 0 cm
4976
+ /FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
4977
+ Q
4978
+ Q
4979
+ q
4980
+ 1 0 0 1 56.69291 56.69291 cm
4981
+ 0 0 0 rg
4982
+ BT /F1 10 Tf 12 TL ET
4983
+ q
4984
+ 1 0 0 1 6 3 cm
4985
+ q
4986
+ 0 0 0 rg
4987
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
4988
+ Q
4989
+ Q
4990
+ q
4991
+ 1 0 0 1 246.9449 3 cm
4992
+ q
4993
+ 0 0 0 rg
4994
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 203.9249 0 Td (11/16) Tj T* -203.9249 0 Td ET
4995
+ Q
4996
+ Q
4997
+ q
4998
+ Q
4999
+ Q
5000
+
5001
+ endstream
5002
+ endobj
5003
+ % 'R105': class PDFStream
5004
+ 105 0 obj
5005
+ % page stream
5006
+ << /Length 5356 >>
5007
+ stream
5008
+ 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
5009
+ q
5010
+ 1 0 0 1 62.69291 727.0687 cm
5011
+ q
5012
+ BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 .533333 .603922 rg (5 Bedienung) Tj T* ET
5013
+ Q
5014
+ Q
5015
+ q
5016
+ 1 0 0 1 62.69291 697.0687 cm
5017
+ q
5018
+ BT 1 0 0 1 0 3 Tm 18 TL /F2 15 Tf 0 .533333 .603922 rg (5.1 Rechnungserstellung/Capture) Tj T* ET
5019
+ Q
5020
+ Q
5021
+ q
5022
+ 1 0 0 1 62.69291 685.0687 cm
5023
+ Q
5024
+ q
5025
+ 1 0 0 1 62.69291 673.0687 cm
5026
+ q
5027
+ 0 0 0 rg
5028
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
5029
+ Q
5030
+ Q
5031
+ q
5032
+ 1 0 0 1 62.69291 673.0687 cm
5033
+ Q
5034
+ q
5035
+ 1 0 0 1 62.69291 583.0687 cm
5036
+ q
5037
+ BT 1 0 0 1 0 74 Tm .959982 Tw 12 TL /F1 10 Tf 0 0 0 rg (F\374r Zahlarten wo Sie Autorisierung konfiguriert haben wird der Betrag erst bei der Rechnungserstellung) Tj T* 0 Tw 1.385984 Tw (erfasst. Um eine Rechnung zu erstellen und das Capture des Betrages zu veranlassen gehen Sie wie) Tj T* 0 Tw .794692 Tw (folgt vor. Gehen Sie auf "Verk\344ufe" -) Tj (> "Bestellungen" und klicken Sie auf die Bestellung f\374r die Sie eine) Tj T* 0 Tw .019147 Tw (Rechnungserstellung veranlassen m\366chten. Um die Rechnung zu erstellen und das Capture des Betrages) Tj T* 0 Tw 2.345366 Tw (auszul\366sen klicken Sie oben auf "Rechnung". Vergewissern Sie sich dass unten rechts bei "Betrag") Tj T* 0 Tw .163984 Tw (Capture online ausgew\344hlt ist, dies ist standardm\344\337ig der Fall. Klicken Sie nun auf Rechnung erstellen. In) Tj T* 0 Tw (der Bestellhistorie sollten Sie nun einen Vermerk sehen, dass der Betrag Captured wurde.) Tj T* ET
5038
+ Q
5039
+ Q
5040
+ q
5041
+ 1 0 0 1 62.69291 577.0687 cm
5042
+ Q
5043
+ q
5044
+ 1 0 0 1 62.69291 565.0687 cm
5045
+ q
5046
+ 0 0 0 rg
5047
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
5048
+ Q
5049
+ Q
5050
+ q
5051
+ 1 0 0 1 62.69291 565.0687 cm
5052
+ Q
5053
+ q
5054
+ 1 0 0 1 62.69291 535.0687 cm
5055
+ q
5056
+ BT 1 0 0 1 0 3 Tm 18 TL /F2 15 Tf 0 .533333 .603922 rg (5.2 Besonderheiten MasterPass Fullcheckout) Tj T* ET
5057
+ Q
5058
+ Q
5059
+ q
5060
+ 1 0 0 1 62.69291 523.0687 cm
5061
+ Q
5062
+ q
5063
+ 1 0 0 1 62.69291 373.0687 cm
5064
+ 0 0 0 rg
5065
+ BT /F1 10 Tf 12 TL ET
5066
+ BT 1 0 0 1 0 2 Tm T* ET
5067
+ q
5068
+ 1 0 0 1 20 144 cm
5069
+ Q
5070
+ q
5071
+ 1 0 0 1 20 144 cm
5072
+ Q
5073
+ q
5074
+ 1 0 0 1 20 132 cm
5075
+ 0 0 0 rg
5076
+ BT /F1 10 Tf 12 TL ET
5077
+ q
5078
+ 1 0 0 1 6 -3 cm
5079
+ q
5080
+ 0 0 0 rg
5081
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
5082
+ Q
5083
+ Q
5084
+ q
5085
+ 1 0 0 1 23 -3 cm
5086
+ q
5087
+ 0 0 0 rg
5088
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (F\374r den MasterPass Fullcheckout muss der Shop HTTPS benutzen) Tj T* ET
5089
+ Q
5090
+ Q
5091
+ q
5092
+ Q
5093
+ Q
5094
+ q
5095
+ 1 0 0 1 20 126 cm
5096
+ Q
5097
+ q
5098
+ 1 0 0 1 20 114 cm
5099
+ 0 0 0 rg
5100
+ BT /F1 10 Tf 12 TL ET
5101
+ q
5102
+ 1 0 0 1 6 -3 cm
5103
+ q
5104
+ 0 0 0 rg
5105
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
5106
+ Q
5107
+ Q
5108
+ q
5109
+ 1 0 0 1 23 -3 cm
5110
+ q
5111
+ 0 0 0 rg
5112
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Die "MasterPass Fullcheckout"-Buttons werden nur den nicht-eingeloggten K\344ufern angezeigt.) Tj T* ET
5113
+ Q
5114
+ Q
5115
+ q
5116
+ Q
5117
+ Q
5118
+ q
5119
+ 1 0 0 1 20 108 cm
5120
+ Q
5121
+ q
5122
+ 1 0 0 1 20 84 cm
5123
+ 0 0 0 rg
5124
+ BT /F1 10 Tf 12 TL ET
5125
+ q
5126
+ 1 0 0 1 6 9 cm
5127
+ q
5128
+ 0 0 0 rg
5129
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
5130
+ Q
5131
+ Q
5132
+ q
5133
+ 1 0 0 1 23 -3 cm
5134
+ q
5135
+ 0 0 0 rg
5136
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL .017251 Tw (Ggf. muss f\374r "MasterPass Fullcheckout" der Gast-Checkout im Shop zugelassen werden \(wenn) Tj T* 0 Tw (dies bspw. durch Drittmodule konfiguriert wird\)) Tj T* ET
5137
+ Q
5138
+ Q
5139
+ q
5140
+ Q
5141
+ Q
5142
+ q
5143
+ 1 0 0 1 20 78 cm
5144
+ Q
5145
+ q
5146
+ 1 0 0 1 20 42 cm
5147
+ 0 0 0 rg
5148
+ BT /F1 10 Tf 12 TL ET
5149
+ q
5150
+ 1 0 0 1 6 21 cm
5151
+ q
5152
+ 0 0 0 rg
5153
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
5154
+ Q
5155
+ Q
5156
+ q
5157
+ 1 0 0 1 23 -3 cm
5158
+ q
5159
+ 0 0 0 rg
5160
+ BT 1 0 0 1 0 26 Tm /F1 10 Tf 12 TL .475366 Tw (Der Kauf von Download-Produkten ist in Magento nur mit einem registrierten Account m\366glich -) Tj T* 0 Tw 3.415529 Tw (aus diesem Grund werden keine "MasterPass Fullcheckout"-Buttons angezeigt wenn sich) Tj T* 0 Tw (Download-Produkte im Warenkorb befinden) Tj T* ET
5161
+ Q
5162
+ Q
5163
+ q
5164
+ Q
5165
+ Q
5166
+ q
5167
+ 1 0 0 1 20 36 cm
5168
+ Q
5169
+ q
5170
+ 1 0 0 1 20 0 cm
5171
+ 0 0 0 rg
5172
+ BT /F1 10 Tf 12 TL ET
5173
+ q
5174
+ 1 0 0 1 6 21 cm
5175
+ q
5176
+ 0 0 0 rg
5177
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
5178
+ Q
5179
+ Q
5180
+ q
5181
+ 1 0 0 1 23 -3 cm
5182
+ q
5183
+ 0 0 0 rg
5184
+ BT 1 0 0 1 0 26 Tm /F1 10 Tf 12 TL 2.073615 Tw (Verwenden Sie eigene Themes, dann sind ggf. weitere Anpassungen erforderlich damit der) Tj T* 0 Tw 1.923615 Tw (R\374cksprung in den Shop wie erwartet funktioniert \(\334bernahme Adressdaten\) - beachten Sie) Tj T* 0 Tw (hierzu die Details unter dem Punkt 7 "Design") Tj T* ET
5185
+ Q
5186
+ Q
5187
+ q
5188
+ Q
5189
+ Q
5190
+ q
5191
+ 1 0 0 1 20 0 cm
5192
+ Q
5193
+ q
5194
+ Q
5195
+ Q
5196
+ q
5197
+ 1 0 0 1 62.69291 373.0687 cm
5198
+ Q
5199
+ q
5200
+ 1 0 0 1 62.69291 340.0687 cm
5201
+ q
5202
+ BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 .533333 .603922 rg (6 Screencast) Tj T* ET
5203
+ Q
5204
+ Q
5205
+ q
5206
+ 1 0 0 1 62.69291 328.0687 cm
5207
+ Q
5208
+ q
5209
+ 1 0 0 1 62.69291 316.0687 cm
5210
+ q
5211
+ 0 0 0 rg
5212
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
5213
+ Q
5214
+ Q
5215
+ q
5216
+ 1 0 0 1 62.69291 316.0687 cm
5217
+ Q
5218
+ q
5219
+ 1 0 0 1 62.69291 286.0687 cm
5220
+ q
5221
+ BT 1 0 0 1 0 14 Tm 3.469976 Tw 12 TL /F1 10 Tf 0 0 0 rg (Hinweise zur Installation, Konfiguration sowie einem erfolgreichen Zahlungsvorgang finden Sie auf) Tj T* 0 Tw (Youtube unter ) Tj 0 0 .501961 rg (http://www.youtube.com/user/ExpercashDE) Tj T* ET
5222
+ Q
5223
+ Q
5224
+ q
5225
+ 1 0 0 1 62.69291 286.0687 cm
5226
+ Q
5227
+ q
5228
+ 1 0 0 1 411.0236 768.242 cm
5229
+ q
5230
+ 127.5591 0 0 45.30135 0 0 cm
5231
+ /FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
5232
+ Q
5233
+ Q
5234
+ q
5235
+ 1 0 0 1 56.69291 56.69291 cm
5236
+ 0 0 0 rg
5237
+ BT /F1 10 Tf 12 TL ET
5238
+ q
5239
+ 1 0 0 1 6 3 cm
5240
+ q
5241
+ 0 0 0 rg
5242
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
5243
+ Q
5244
+ Q
5245
+ q
5246
+ 1 0 0 1 246.9449 3 cm
5247
+ q
5248
+ 0 0 0 rg
5249
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 203.9249 0 Td (12/16) Tj T* -203.9249 0 Td ET
5250
+ Q
5251
+ Q
5252
+ q
5253
+ Q
5254
+ Q
5255
+
5256
+ endstream
5257
+ endobj
5258
+ % 'R106': class PDFStream
5259
+ 106 0 obj
5260
+ % page stream
5261
+ << /Length 5048 >>
5262
+ stream
5263
+ 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
5264
+ q
5265
+ 1 0 0 1 62.69291 727.0687 cm
5266
+ q
5267
+ BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 .533333 .603922 rg (7 Design) Tj T* ET
5268
+ Q
5269
+ Q
5270
+ q
5271
+ 1 0 0 1 62.69291 715.0687 cm
5272
+ Q
5273
+ q
5274
+ 1 0 0 1 62.69291 703.0687 cm
5275
+ q
5276
+ 0 0 0 rg
5277
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
5278
+ Q
5279
+ Q
5280
+ q
5281
+ 1 0 0 1 62.69291 703.0687 cm
5282
+ Q
5283
+ q
5284
+ 1 0 0 1 62.69291 673.0687 cm
5285
+ q
5286
+ BT 1 0 0 1 0 3 Tm 18 TL /F2 15 Tf 0 .533333 .603922 rg (7.1 MasterPass Fullcheckout) Tj T* ET
5287
+ Q
5288
+ Q
5289
+ q
5290
+ 1 0 0 1 62.69291 619.0687 cm
5291
+ q
5292
+ 0 0 0 rg
5293
+ BT 1 0 0 1 0 38 Tm /F1 10 Tf 12 TL 1.87498 Tw (Beim MasterPass Fullcheckout w\344hlt der K\344ufer seine Adressdaten bei MasterPass aus. Damit diese) Tj T* 0 Tw .956136 Tw (nach dem R\374cksprung in den Shop auch \374bernommen werden, behinhaltet das Modul eine angepasste) Tj T* 0 Tw 4.13816 Tw ("onepage.phtml" Diese "onepage.phtml" kommt immer nur dann zum Einsatz, wenn nach einem) Tj T* 0 Tw (MasterPass Fullchekout der R\374cksprung in den Shop erfolgte.) Tj T* ET
5294
+ Q
5295
+ Q
5296
+ q
5297
+ 1 0 0 1 62.69291 553.0687 cm
5298
+ q
5299
+ 0 0 0 rg
5300
+ BT 1 0 0 1 0 50 Tm /F1 10 Tf 12 TL 6.541797 Tw (Falls Sie ein Custom-Theme benutzen, m\374ssen die mit dem Modul ausgelieferten Dateien) Tj T* 0 Tw .205953 Tw ("/expercash/checkout/onepage/js.phtml" und "/expercash/checkout/onepage.phtml" in das Custom-Theme) Tj T* 0 Tw 3.40998 Tw (kopiert werden. An der bestehende "onepage.phtml" des Themes muss nichts ge\344ndert werden -) Tj T* 0 Tw 2.421976 Tw (stattdessen \374bernehmen Sie ggf. existierende Unterschiede der bestehenden "onepage.phtml" in die) Tj T* 0 Tw (eben neu kopierte.) Tj T* ET
5301
+ Q
5302
+ Q
5303
+ q
5304
+ 1 0 0 1 62.69291 535.0687 cm
5305
+ q
5306
+ 0 0 0 rg
5307
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Beispiel: kopieren der mit dem Modul ausgelieferten Dateien von:) Tj T* ET
5308
+ Q
5309
+ Q
5310
+ q
5311
+ 1 0 0 1 62.69291 523.0687 cm
5312
+ Q
5313
+ q
5314
+ 1 0 0 1 62.69291 440.0687 cm
5315
+ .960784 .960784 .862745 rg
5316
+ n 0 83 469.8898 -83 re f*
5317
+ 0 0 0 rg
5318
+ BT /F1 10 Tf 12 TL ET
5319
+ BT 1 0 0 1 6 57 Tm T* ET
5320
+ q
5321
+ 1 0 0 1 16 52 cm
5322
+ q
5323
+ 0 .533333 .603922 rg
5324
+ BT 1 0 0 1 0 2.5 Tm /F3 12.5 Tf 15 TL (Note) Tj T* ET
5325
+ Q
5326
+ Q
5327
+ q
5328
+ 1 0 0 1 16 16 cm
5329
+ q
5330
+ 0 0 0 rg
5331
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (/app/design/frontend/base/default/template/expercash/checkout/onepage/js.phtml) Tj T* (/app/design/frontend/base/default/template/expercash/checkout/onepage.phtml) Tj T* ET
5332
+ Q
5333
+ Q
5334
+ q
5335
+ 1 J
5336
+ 1 j
5337
+ .662745 .662745 .662745 RG
5338
+ .5 w
5339
+ n 0 83 m 469.8898 83 l S
5340
+ n 0 0 m 469.8898 0 l S
5341
+ n 0 0 m 0 83 l S
5342
+ n 469.8898 0 m 469.8898 83 l S
5343
+ Q
5344
+ Q
5345
+ q
5346
+ 1 0 0 1 62.69291 434.0687 cm
5347
+ Q
5348
+ q
5349
+ 1 0 0 1 62.69291 404.0687 cm
5350
+ q
5351
+ 0 0 0 rg
5352
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 2.274651 Tw (einf\374gen in ihr Theme - bitte bachten Sie, dass ihre Order-Struktur ggf. anders aussehen kann und) Tj T* 0 Tw (folgendes nur beispielhaft ist:) Tj T* ET
5353
+ Q
5354
+ Q
5355
+ q
5356
+ 1 0 0 1 62.69291 392.0687 cm
5357
+ Q
5358
+ q
5359
+ 1 0 0 1 62.69291 309.0687 cm
5360
+ .960784 .960784 .862745 rg
5361
+ n 0 83 469.8898 -83 re f*
5362
+ 0 0 0 rg
5363
+ BT /F1 10 Tf 12 TL ET
5364
+ BT 1 0 0 1 6 57 Tm T* ET
5365
+ q
5366
+ 1 0 0 1 16 52 cm
5367
+ q
5368
+ 0 .533333 .603922 rg
5369
+ BT 1 0 0 1 0 2.5 Tm /F3 12.5 Tf 15 TL (Note) Tj T* ET
5370
+ Q
5371
+ Q
5372
+ q
5373
+ 1 0 0 1 16 16 cm
5374
+ q
5375
+ BT 1 0 0 1 0 14 Tm 12 TL /F1 10 Tf 0 0 0 rg (/app/design/frontend/default/) Tj (<) Tj (Ihr_Theme) Tj (>) Tj (/template/expercash/checkout/onepage/js.phtml) Tj T* (/app/design/frontend/default/) Tj (<) Tj (Ihr_Theme) Tj (>) Tj (/template/expercash/checkout/onepage.phtml) Tj T* ET
5376
+ Q
5377
+ Q
5378
+ q
5379
+ 1 J
5380
+ 1 j
5381
+ .662745 .662745 .662745 RG
5382
+ .5 w
5383
+ n 0 83 m 469.8898 83 l S
5384
+ n 0 0 m 469.8898 0 l S
5385
+ n 0 0 m 0 83 l S
5386
+ n 469.8898 0 m 469.8898 83 l S
5387
+ Q
5388
+ Q
5389
+ q
5390
+ 1 0 0 1 62.69291 303.0687 cm
5391
+ Q
5392
+ q
5393
+ 1 0 0 1 62.69291 285.0687 cm
5394
+ q
5395
+ 0 0 0 rg
5396
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (oder bspw:) Tj T* ET
5397
+ Q
5398
+ Q
5399
+ q
5400
+ 1 0 0 1 62.69291 273.0687 cm
5401
+ Q
5402
+ q
5403
+ 1 0 0 1 62.69291 190.0687 cm
5404
+ .960784 .960784 .862745 rg
5405
+ n 0 83 469.8898 -83 re f*
5406
+ 0 0 0 rg
5407
+ BT /F1 10 Tf 12 TL ET
5408
+ BT 1 0 0 1 6 57 Tm T* ET
5409
+ q
5410
+ 1 0 0 1 16 52 cm
5411
+ q
5412
+ 0 .533333 .603922 rg
5413
+ BT 1 0 0 1 0 2.5 Tm /F3 12.5 Tf 15 TL (Note) Tj T* ET
5414
+ Q
5415
+ Q
5416
+ q
5417
+ 1 0 0 1 16 16 cm
5418
+ q
5419
+ BT 1 0 0 1 0 14 Tm 12 TL /F1 10 Tf 0 0 0 rg (/app/design/frontend/) Tj (<) Tj (Ihr_Theme) Tj (>) Tj (/default/template/expercash/checkout/onepage/js.phtml) Tj T* (/app/design/frontend/) Tj (<) Tj (Ihr_Theme) Tj (>) Tj (/default/template/expercash/checkout/onepage.phtml) Tj T* ET
5420
+ Q
5421
+ Q
5422
+ q
5423
+ 1 J
5424
+ 1 j
5425
+ .662745 .662745 .662745 RG
5426
+ .5 w
5427
+ n 0 83 m 469.8898 83 l S
5428
+ n 0 0 m 469.8898 0 l S
5429
+ n 0 0 m 0 83 l S
5430
+ n 469.8898 0 m 469.8898 83 l S
5431
+ Q
5432
+ Q
5433
+ q
5434
+ 1 0 0 1 62.69291 184.0687 cm
5435
+ Q
5436
+ q
5437
+ 1 0 0 1 62.69291 166.0687 cm
5438
+ q
5439
+ 0 0 0 rg
5440
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Ggf. muss im Anschluss der Cache gel\366scht werden.) Tj T* ET
5441
+ Q
5442
+ Q
5443
+ q
5444
+ 1 0 0 1 62.69291 166.0687 cm
5445
+ Q
5446
+ q
5447
+ 1 0 0 1 411.0236 768.242 cm
5448
+ q
5449
+ 127.5591 0 0 45.30135 0 0 cm
5450
+ /FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
5451
+ Q
5452
+ Q
5453
+ q
5454
+ 1 0 0 1 56.69291 56.69291 cm
5455
+ 0 0 0 rg
5456
+ BT /F1 10 Tf 12 TL ET
5457
+ q
5458
+ 1 0 0 1 6 3 cm
5459
+ q
5460
+ 0 0 0 rg
5461
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
5462
+ Q
5463
+ Q
5464
+ q
5465
+ 1 0 0 1 246.9449 3 cm
5466
+ q
5467
+ 0 0 0 rg
5468
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 203.9249 0 Td (13/16) Tj T* -203.9249 0 Td ET
5469
+ Q
5470
+ Q
5471
+ q
5472
+ Q
5473
+ Q
5474
+
5475
+ endstream
5476
+ endobj
5477
+ % 'R107': class PDFStream
5478
+ 107 0 obj
5479
+ % page stream
5480
+ << /Length 5170 >>
5481
+ stream
5482
+ 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
5483
+ q
5484
+ 1 0 0 1 62.69291 727.0687 cm
5485
+ q
5486
+ BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 .533333 .603922 rg (8 Deinstallation) Tj T* ET
5487
+ Q
5488
+ Q
5489
+ q
5490
+ 1 0 0 1 62.69291 715.0687 cm
5491
+ Q
5492
+ q
5493
+ 1 0 0 1 62.69291 703.0687 cm
5494
+ q
5495
+ 0 0 0 rg
5496
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
5497
+ Q
5498
+ Q
5499
+ q
5500
+ 1 0 0 1 62.69291 703.0687 cm
5501
+ Q
5502
+ q
5503
+ 1 0 0 1 62.69291 673.0687 cm
5504
+ q
5505
+ 0 0 0 rg
5506
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 3.029147 Tw (Sollten Sie die Erweiterung nicht mehr ben\366tigen, k\366nnen Sie diese aus Ihrer Magento-Installation) Tj T* 0 Tw (entfernen.) Tj T* ET
5507
+ Q
5508
+ Q
5509
+ q
5510
+ 1 0 0 1 62.69291 661.0687 cm
5511
+ Q
5512
+ q
5513
+ 1 0 0 1 62.69291 530.0687 cm
5514
+ .960784 .960784 .862745 rg
5515
+ n 0 131 469.8898 -131 re f*
5516
+ 0 0 0 rg
5517
+ BT /F1 10 Tf 12 TL ET
5518
+ BT 1 0 0 1 6 105 Tm T* ET
5519
+ q
5520
+ 1 0 0 1 16 100 cm
5521
+ q
5522
+ 0 .533333 .603922 rg
5523
+ BT 1 0 0 1 0 2.5 Tm /F3 12.5 Tf 15 TL (Note) Tj T* ET
5524
+ Q
5525
+ Q
5526
+ q
5527
+ 1 0 0 1 16 76 cm
5528
+ q
5529
+ 0 0 0 rg
5530
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Bitte beachten!) Tj T* ET
5531
+ Q
5532
+ Q
5533
+ q
5534
+ 1 0 0 1 16 70 cm
5535
+ Q
5536
+ q
5537
+ 1 0 0 1 16 58 cm
5538
+ q
5539
+ 0 0 0 rg
5540
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
5541
+ Q
5542
+ Q
5543
+ q
5544
+ 1 0 0 1 16 58 cm
5545
+ Q
5546
+ q
5547
+ 1 0 0 1 16 16 cm
5548
+ q
5549
+ 0 0 0 rg
5550
+ BT 1 0 0 1 0 26 Tm /F1 10 Tf 12 TL 2.955814 Tw (Sollte es bereits Bestellungen geben die mit Expercash bezahlt wurden, ist dringend davon) Tj T* 0 Tw 1.655529 Tw (abzuraten das Expercash Modul zu deinstallieren, da die bestehenden Expercash-Bestellungen) Tj T* 0 Tw (sonst nicht mehr ge\366ffnet werden k\366nnen.) Tj T* ET
5551
+ Q
5552
+ Q
5553
+ q
5554
+ 1 J
5555
+ 1 j
5556
+ .662745 .662745 .662745 RG
5557
+ .5 w
5558
+ n 0 131 m 469.8898 131 l S
5559
+ n 0 0 m 469.8898 0 l S
5560
+ n 0 0 m 0 131 l S
5561
+ n 469.8898 0 m 469.8898 131 l S
5562
+ Q
5563
+ Q
5564
+ q
5565
+ 1 0 0 1 62.69291 524.0687 cm
5566
+ Q
5567
+ q
5568
+ 1 0 0 1 62.69291 518.0687 cm
5569
+ Q
5570
+ q
5571
+ 1 0 0 1 62.69291 506.0687 cm
5572
+ q
5573
+ 0 0 0 rg
5574
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
5575
+ Q
5576
+ Q
5577
+ q
5578
+ 1 0 0 1 62.69291 506.0687 cm
5579
+ Q
5580
+ q
5581
+ 1 0 0 1 62.69291 476.0687 cm
5582
+ q
5583
+ BT 1 0 0 1 0 3 Tm 18 TL /F2 15 Tf 0 .533333 .603922 rg (8.1 Per Magento Connect Manager) Tj T* ET
5584
+ Q
5585
+ Q
5586
+ q
5587
+ 1 0 0 1 62.69291 464.0687 cm
5588
+ Q
5589
+ q
5590
+ 1 0 0 1 62.69291 452.0687 cm
5591
+ q
5592
+ 0 0 0 rg
5593
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
5594
+ Q
5595
+ Q
5596
+ q
5597
+ 1 0 0 1 62.69291 452.0687 cm
5598
+ Q
5599
+ q
5600
+ 1 0 0 1 62.69291 422.0687 cm
5601
+ q
5602
+ 0 0 0 rg
5603
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL .681984 Tw (Sofern Sie das Modul mittels des Magento Connect Managers installiert haben, gehen Sie bitte wie folgt) Tj T* 0 Tw (vor.) Tj T* ET
5604
+ Q
5605
+ Q
5606
+ q
5607
+ 1 0 0 1 62.69291 416.0687 cm
5608
+ Q
5609
+ q
5610
+ 1 0 0 1 62.69291 404.0687 cm
5611
+ q
5612
+ 0 0 0 rg
5613
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
5614
+ Q
5615
+ Q
5616
+ q
5617
+ 1 0 0 1 62.69291 404.0687 cm
5618
+ Q
5619
+ q
5620
+ 1 0 0 1 62.69291 398.0687 cm
5621
+ Q
5622
+ q
5623
+ 1 0 0 1 62.69291 398.0687 cm
5624
+ Q
5625
+ q
5626
+ 1 0 0 1 62.69291 386.0687 cm
5627
+ 0 0 0 rg
5628
+ BT /F1 10 Tf 12 TL ET
5629
+ q
5630
+ 1 0 0 1 6 -3 cm
5631
+ q
5632
+ 0 0 0 rg
5633
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (1.) Tj T* -5.66 0 Td ET
5634
+ Q
5635
+ Q
5636
+ q
5637
+ 1 0 0 1 23 -3 cm
5638
+ q
5639
+ 0 0 0 rg
5640
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Melden Sie sich in Ihrem Magento Backend an) Tj T* ET
5641
+ Q
5642
+ Q
5643
+ q
5644
+ Q
5645
+ Q
5646
+ q
5647
+ 1 0 0 1 62.69291 380.0687 cm
5648
+ Q
5649
+ q
5650
+ 1 0 0 1 62.69291 368.0687 cm
5651
+ 0 0 0 rg
5652
+ BT /F1 10 Tf 12 TL ET
5653
+ q
5654
+ 1 0 0 1 6 -3 cm
5655
+ q
5656
+ 0 0 0 rg
5657
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (2.) Tj T* -5.66 0 Td ET
5658
+ Q
5659
+ Q
5660
+ q
5661
+ 1 0 0 1 23 -3 cm
5662
+ q
5663
+ BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Navigieren Sie zu "System" -) Tj (> "Magento Connect" -) Tj (> "Magento Connect Manager") Tj T* ET
5664
+ Q
5665
+ Q
5666
+ q
5667
+ Q
5668
+ Q
5669
+ q
5670
+ 1 0 0 1 62.69291 362.0687 cm
5671
+ Q
5672
+ q
5673
+ 1 0 0 1 62.69291 350.0687 cm
5674
+ 0 0 0 rg
5675
+ BT /F1 10 Tf 12 TL ET
5676
+ q
5677
+ 1 0 0 1 6 -3 cm
5678
+ q
5679
+ 0 0 0 rg
5680
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (3.) Tj T* -5.66 0 Td ET
5681
+ Q
5682
+ Q
5683
+ q
5684
+ 1 0 0 1 23 -3 cm
5685
+ q
5686
+ 0 0 0 rg
5687
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Melden Sie sich im "Magento Connect Manager" an) Tj T* ET
5688
+ Q
5689
+ Q
5690
+ q
5691
+ Q
5692
+ Q
5693
+ q
5694
+ 1 0 0 1 62.69291 344.0687 cm
5695
+ Q
5696
+ q
5697
+ 1 0 0 1 62.69291 332.0687 cm
5698
+ 0 0 0 rg
5699
+ BT /F1 10 Tf 12 TL ET
5700
+ q
5701
+ 1 0 0 1 6 -3 cm
5702
+ q
5703
+ 0 0 0 rg
5704
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (4.) Tj T* -5.66 0 Td ET
5705
+ Q
5706
+ Q
5707
+ q
5708
+ 1 0 0 1 23 -3 cm
5709
+ q
5710
+ 0 0 0 rg
5711
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (W\344hlen Sie den Tab "Extensions") Tj T* ET
5712
+ Q
5713
+ Q
5714
+ q
5715
+ Q
5716
+ Q
5717
+ q
5718
+ 1 0 0 1 62.69291 326.0687 cm
5719
+ Q
5720
+ q
5721
+ 1 0 0 1 62.69291 302.0687 cm
5722
+ 0 0 0 rg
5723
+ BT /F1 10 Tf 12 TL ET
5724
+ q
5725
+ 1 0 0 1 6 9 cm
5726
+ q
5727
+ 0 0 0 rg
5728
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (5.) Tj T* -5.66 0 Td ET
5729
+ Q
5730
+ Q
5731
+ q
5732
+ 1 0 0 1 23 -3 cm
5733
+ q
5734
+ 0 0 0 rg
5735
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL .891647 Tw (W\344hlen Sie f\374r die Expercash-Extension die Aktion "Uninstall" und bet\344tigen Sie anschlie\337end den) Tj T* 0 Tw (Button "Commit Changes") Tj T* ET
5736
+ Q
5737
+ Q
5738
+ q
5739
+ Q
5740
+ Q
5741
+ q
5742
+ 1 0 0 1 62.69291 302.0687 cm
5743
+ Q
5744
+ q
5745
+ 1 0 0 1 62.69291 296.0687 cm
5746
+ Q
5747
+ q
5748
+ 1 0 0 1 62.69291 284.0687 cm
5749
+ q
5750
+ 0 0 0 rg
5751
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
5752
+ Q
5753
+ Q
5754
+ q
5755
+ 1 0 0 1 62.69291 284.0687 cm
5756
+ Q
5757
+ q
5758
+ 1 0 0 1 62.69291 284.0687 cm
5759
+ Q
5760
+ q
5761
+ 1 0 0 1 411.0236 768.242 cm
5762
+ q
5763
+ 127.5591 0 0 45.30135 0 0 cm
5764
+ /FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
5765
+ Q
5766
+ Q
5767
+ q
5768
+ 1 0 0 1 56.69291 56.69291 cm
5769
+ 0 0 0 rg
5770
+ BT /F1 10 Tf 12 TL ET
5771
+ q
5772
+ 1 0 0 1 6 3 cm
5773
+ q
5774
+ 0 0 0 rg
5775
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
5776
+ Q
5777
+ Q
5778
+ q
5779
+ 1 0 0 1 246.9449 3 cm
5780
+ q
5781
+ 0 0 0 rg
5782
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 203.9249 0 Td (14/16) Tj T* -203.9249 0 Td ET
5783
+ Q
5784
+ Q
5785
+ q
5786
+ Q
5787
+ Q
5788
+
5789
+ endstream
5790
+ endobj
5791
+ % 'R108': class PDFStream
5792
+ 108 0 obj
5793
+ % page stream
5794
+ << /Length 8900 >>
5795
+ stream
5796
+ 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
5797
+ q
5798
+ 1 0 0 1 62.69291 730.0687 cm
5799
+ q
5800
+ BT 1 0 0 1 0 3 Tm 18 TL /F2 15 Tf 0 .533333 .603922 rg (8.2 Auf Dateiebene) Tj T* ET
5801
+ Q
5802
+ Q
5803
+ q
5804
+ 1 0 0 1 62.69291 718.0687 cm
5805
+ Q
5806
+ q
5807
+ 1 0 0 1 62.69291 706.0687 cm
5808
+ q
5809
+ 0 0 0 rg
5810
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
5811
+ Q
5812
+ Q
5813
+ q
5814
+ 1 0 0 1 62.69291 706.0687 cm
5815
+ Q
5816
+ q
5817
+ 1 0 0 1 62.69291 688.0687 cm
5818
+ q
5819
+ 0 0 0 rg
5820
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Um das Modul manuell zu deinstallieren, l\366schen Sie bitte die folgenden Dateien und Ordner:) Tj T* ET
5821
+ Q
5822
+ Q
5823
+ q
5824
+ 1 0 0 1 62.69291 682.0687 cm
5825
+ Q
5826
+ q
5827
+ 1 0 0 1 62.69291 670.0687 cm
5828
+ q
5829
+ 0 0 0 rg
5830
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
5831
+ Q
5832
+ Q
5833
+ q
5834
+ 1 0 0 1 62.69291 670.0687 cm
5835
+ Q
5836
+ q
5837
+ 1 0 0 1 62.69291 664.0687 cm
5838
+ Q
5839
+ q
5840
+ 1 0 0 1 62.69291 664.0687 cm
5841
+ Q
5842
+ q
5843
+ 1 0 0 1 62.69291 652.0687 cm
5844
+ 0 0 0 rg
5845
+ BT /F1 10 Tf 12 TL ET
5846
+ q
5847
+ 1 0 0 1 6 -3 cm
5848
+ q
5849
+ 0 0 0 rg
5850
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
5851
+ Q
5852
+ Q
5853
+ q
5854
+ 1 0 0 1 23 -3 cm
5855
+ q
5856
+ 0 0 0 rg
5857
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (app/code/community/Expercash/Expercash/) Tj T* ET
5858
+ Q
5859
+ Q
5860
+ q
5861
+ Q
5862
+ Q
5863
+ q
5864
+ 1 0 0 1 62.69291 646.0687 cm
5865
+ Q
5866
+ q
5867
+ 1 0 0 1 62.69291 634.0687 cm
5868
+ 0 0 0 rg
5869
+ BT /F1 10 Tf 12 TL ET
5870
+ q
5871
+ 1 0 0 1 6 -3 cm
5872
+ q
5873
+ 0 0 0 rg
5874
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
5875
+ Q
5876
+ Q
5877
+ q
5878
+ 1 0 0 1 23 -3 cm
5879
+ q
5880
+ 0 0 0 rg
5881
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (app/etc/modules/Expercash_Expercash.xml) Tj T* ET
5882
+ Q
5883
+ Q
5884
+ q
5885
+ Q
5886
+ Q
5887
+ q
5888
+ 1 0 0 1 62.69291 628.0687 cm
5889
+ Q
5890
+ q
5891
+ 1 0 0 1 62.69291 616.0687 cm
5892
+ 0 0 0 rg
5893
+ BT /F1 10 Tf 12 TL ET
5894
+ q
5895
+ 1 0 0 1 6 -3 cm
5896
+ q
5897
+ 0 0 0 rg
5898
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
5899
+ Q
5900
+ Q
5901
+ q
5902
+ 1 0 0 1 23 -3 cm
5903
+ q
5904
+ 0 0 0 rg
5905
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (app/locale/de_DE/Expercash_Expercash.csv) Tj T* ET
5906
+ Q
5907
+ Q
5908
+ q
5909
+ Q
5910
+ Q
5911
+ q
5912
+ 1 0 0 1 62.69291 610.0687 cm
5913
+ Q
5914
+ q
5915
+ 1 0 0 1 62.69291 598.0687 cm
5916
+ 0 0 0 rg
5917
+ BT /F1 10 Tf 12 TL ET
5918
+ q
5919
+ 1 0 0 1 6 -3 cm
5920
+ q
5921
+ 0 0 0 rg
5922
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
5923
+ Q
5924
+ Q
5925
+ q
5926
+ 1 0 0 1 23 -3 cm
5927
+ q
5928
+ 0 0 0 rg
5929
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (app/design/adminhtml/default/default/template/expercash) Tj T* ET
5930
+ Q
5931
+ Q
5932
+ q
5933
+ Q
5934
+ Q
5935
+ q
5936
+ 1 0 0 1 62.69291 592.0687 cm
5937
+ Q
5938
+ q
5939
+ 1 0 0 1 62.69291 580.0687 cm
5940
+ 0 0 0 rg
5941
+ BT /F1 10 Tf 12 TL ET
5942
+ q
5943
+ 1 0 0 1 6 -3 cm
5944
+ q
5945
+ 0 0 0 rg
5946
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
5947
+ Q
5948
+ Q
5949
+ q
5950
+ 1 0 0 1 23 -3 cm
5951
+ q
5952
+ 0 0 0 rg
5953
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (app/design/frontend/default/default/layout/expercash.xml) Tj T* ET
5954
+ Q
5955
+ Q
5956
+ q
5957
+ Q
5958
+ Q
5959
+ q
5960
+ 1 0 0 1 62.69291 574.0687 cm
5961
+ Q
5962
+ q
5963
+ 1 0 0 1 62.69291 562.0687 cm
5964
+ 0 0 0 rg
5965
+ BT /F1 10 Tf 12 TL ET
5966
+ q
5967
+ 1 0 0 1 6 -3 cm
5968
+ q
5969
+ 0 0 0 rg
5970
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
5971
+ Q
5972
+ Q
5973
+ q
5974
+ 1 0 0 1 23 -3 cm
5975
+ q
5976
+ 0 0 0 rg
5977
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (app/design/frontend/default/default/template/expercash/) Tj T* ET
5978
+ Q
5979
+ Q
5980
+ q
5981
+ Q
5982
+ Q
5983
+ q
5984
+ 1 0 0 1 62.69291 562.0687 cm
5985
+ Q
5986
+ q
5987
+ 1 0 0 1 62.69291 556.0687 cm
5988
+ Q
5989
+ q
5990
+ 1 0 0 1 62.69291 544.0687 cm
5991
+ q
5992
+ 0 0 0 rg
5993
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
5994
+ Q
5995
+ Q
5996
+ q
5997
+ 1 0 0 1 62.69291 544.0687 cm
5998
+ Q
5999
+ q
6000
+ 1 0 0 1 62.69291 514.0687 cm
6001
+ q
6002
+ BT 1 0 0 1 0 3 Tm 18 TL /F2 15 Tf 0 .533333 .603922 rg (8.3 Datenbank) Tj T* ET
6003
+ Q
6004
+ Q
6005
+ q
6006
+ 1 0 0 1 62.69291 502.0687 cm
6007
+ Q
6008
+ q
6009
+ 1 0 0 1 62.69291 490.0687 cm
6010
+ q
6011
+ 0 0 0 rg
6012
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
6013
+ Q
6014
+ Q
6015
+ q
6016
+ 1 0 0 1 62.69291 490.0687 cm
6017
+ Q
6018
+ q
6019
+ 1 0 0 1 62.69291 460.0687 cm
6020
+ q
6021
+ 0 0 0 rg
6022
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 1.962126 Tw (Bitte f\374hren Sie sowohl bei der manuellen Deinstallation als auch bei der Deinstallation per Magento) Tj T* 0 Tw (Connect Manager folgende SQL-Befehle aus:) Tj T* ET
6023
+ Q
6024
+ Q
6025
+ q
6026
+ 1 0 0 1 62.69291 454.0687 cm
6027
+ Q
6028
+ q
6029
+ 1 0 0 1 62.69291 454.0687 cm
6030
+ Q
6031
+ q
6032
+ 1 0 0 1 62.69291 442.0687 cm
6033
+ 0 0 0 rg
6034
+ BT /F1 10 Tf 12 TL ET
6035
+ q
6036
+ 1 0 0 1 6 -3 cm
6037
+ q
6038
+ 0 0 0 rg
6039
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
6040
+ Q
6041
+ Q
6042
+ q
6043
+ 1 0 0 1 23 -3 cm
6044
+ q
6045
+ BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (ALTER TABLE ) Tj /F4 10 Tf (sales_flat_quote_payment ) Tj /F1 10 Tf (DROP COLUMN ) Tj /F4 10 Tf (expercash_gutid) Tj /F1 10 Tf (;) Tj T* ET
6046
+ Q
6047
+ Q
6048
+ q
6049
+ Q
6050
+ Q
6051
+ q
6052
+ 1 0 0 1 62.69291 436.0687 cm
6053
+ Q
6054
+ q
6055
+ 1 0 0 1 62.69291 424.0687 cm
6056
+ 0 0 0 rg
6057
+ BT /F1 10 Tf 12 TL ET
6058
+ q
6059
+ 1 0 0 1 6 -3 cm
6060
+ q
6061
+ 0 0 0 rg
6062
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
6063
+ Q
6064
+ Q
6065
+ q
6066
+ 1 0 0 1 23 -3 cm
6067
+ q
6068
+ BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (ALTER TABLE ) Tj /F4 10 Tf (sales_flat_quote_payment ) Tj /F1 10 Tf (DROP COLUMN ) Tj /F4 10 Tf (expercash_transaction_id) Tj /F1 10 Tf (;) Tj T* ET
6069
+ Q
6070
+ Q
6071
+ q
6072
+ Q
6073
+ Q
6074
+ q
6075
+ 1 0 0 1 62.69291 418.0687 cm
6076
+ Q
6077
+ q
6078
+ 1 0 0 1 62.69291 406.0687 cm
6079
+ 0 0 0 rg
6080
+ BT /F1 10 Tf 12 TL ET
6081
+ q
6082
+ 1 0 0 1 6 -3 cm
6083
+ q
6084
+ 0 0 0 rg
6085
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
6086
+ Q
6087
+ Q
6088
+ q
6089
+ 1 0 0 1 23 -3 cm
6090
+ q
6091
+ BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (ALTER TABLE ) Tj /F4 10 Tf (sales_flat_quote_payment ) Tj /F1 10 Tf (DROP COLUMN ) Tj /F4 10 Tf (expercash_gutid_capture) Tj /F1 10 Tf (;) Tj T* ET
6092
+ Q
6093
+ Q
6094
+ q
6095
+ Q
6096
+ Q
6097
+ q
6098
+ 1 0 0 1 62.69291 400.0687 cm
6099
+ Q
6100
+ q
6101
+ 1 0 0 1 62.69291 388.0687 cm
6102
+ 0 0 0 rg
6103
+ BT /F1 10 Tf 12 TL ET
6104
+ q
6105
+ 1 0 0 1 6 -3 cm
6106
+ q
6107
+ 0 0 0 rg
6108
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
6109
+ Q
6110
+ Q
6111
+ q
6112
+ 1 0 0 1 23 -3 cm
6113
+ q
6114
+ BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (ALTER TABLE ) Tj /F4 10 Tf (sales_flat_quote_payment ) Tj /F1 10 Tf (DROP COLUMN ) Tj /F4 10 Tf (expercash_paymenttype) Tj /F1 10 Tf (;) Tj T* ET
6115
+ Q
6116
+ Q
6117
+ q
6118
+ Q
6119
+ Q
6120
+ q
6121
+ 1 0 0 1 62.69291 382.0687 cm
6122
+ Q
6123
+ q
6124
+ 1 0 0 1 62.69291 370.0687 cm
6125
+ 0 0 0 rg
6126
+ BT /F1 10 Tf 12 TL ET
6127
+ q
6128
+ 1 0 0 1 6 -3 cm
6129
+ q
6130
+ 0 0 0 rg
6131
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
6132
+ Q
6133
+ Q
6134
+ q
6135
+ 1 0 0 1 23 -3 cm
6136
+ q
6137
+ BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (ALTER TABLE ) Tj /F4 10 Tf (sales_flat_quote_payment ) Tj /F1 10 Tf (DROP COLUMN ) Tj /F4 10 Tf (expercash_epi_payment_id) Tj /F1 10 Tf (;) Tj T* ET
6138
+ Q
6139
+ Q
6140
+ q
6141
+ Q
6142
+ Q
6143
+ q
6144
+ 1 0 0 1 62.69291 364.0687 cm
6145
+ Q
6146
+ q
6147
+ 1 0 0 1 62.69291 352.0687 cm
6148
+ 0 0 0 rg
6149
+ BT /F1 10 Tf 12 TL ET
6150
+ q
6151
+ 1 0 0 1 6 -3 cm
6152
+ q
6153
+ 0 0 0 rg
6154
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
6155
+ Q
6156
+ Q
6157
+ q
6158
+ 1 0 0 1 23 -3 cm
6159
+ q
6160
+ BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (ALTER TABLE ) Tj /F4 10 Tf (sales_flat_quote_payment ) Tj /F1 10 Tf (DROP COLUMN ) Tj /F4 10 Tf (expercash_request_type) Tj /F1 10 Tf (;) Tj T* ET
6161
+ Q
6162
+ Q
6163
+ q
6164
+ Q
6165
+ Q
6166
+ q
6167
+ 1 0 0 1 62.69291 352.0687 cm
6168
+ Q
6169
+ q
6170
+ 1 0 0 1 62.69291 346.0687 cm
6171
+ Q
6172
+ q
6173
+ 1 0 0 1 62.69291 334.0687 cm
6174
+ q
6175
+ 0 0 0 rg
6176
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
6177
+ Q
6178
+ Q
6179
+ q
6180
+ 1 0 0 1 62.69291 334.0687 cm
6181
+ Q
6182
+ q
6183
+ 1 0 0 1 62.69291 301.0687 cm
6184
+ q
6185
+ BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 .533333 .603922 rg (9 Migration auf neue Version) Tj T* ET
6186
+ Q
6187
+ Q
6188
+ q
6189
+ 1 0 0 1 62.69291 289.0687 cm
6190
+ Q
6191
+ q
6192
+ 1 0 0 1 62.69291 277.0687 cm
6193
+ q
6194
+ 0 0 0 rg
6195
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
6196
+ Q
6197
+ Q
6198
+ q
6199
+ 1 0 0 1 62.69291 277.0687 cm
6200
+ Q
6201
+ q
6202
+ 1 0 0 1 62.69291 223.0687 cm
6203
+ q
6204
+ BT 1 0 0 1 0 38 Tm 6.389979 Tw 12 TL /F1 10 Tf 0 0 0 rg (Im Zuge der Verbesserung des Expercash-Moduls wurde der Namespace des Moduls von) Tj T* 0 Tw .574147 Tw /F2 10 Tf (Mage_Expercash ) Tj /F1 10 Tf (auf ) Tj /F2 10 Tf (Expercash_Expercash ) Tj /F1 10 Tf (ge\344ndert. Dies hat zur Folge das Sie f\374r die einwandfreie) Tj T* 0 Tw 1.899982 Tw (Funktion des Moduls, die alte Version deinstallieren m\374ssen, bevor Sie die neue Version installieren.) Tj T* 0 Tw (F\374hren Sie f\374r die Deinstallation des alten Moduls die nachfolgenden Schritte aus.) Tj T* ET
6205
+ Q
6206
+ Q
6207
+ q
6208
+ 1 0 0 1 62.69291 217.0687 cm
6209
+ Q
6210
+ q
6211
+ 1 0 0 1 62.69291 205.0687 cm
6212
+ q
6213
+ 0 0 0 rg
6214
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
6215
+ Q
6216
+ Q
6217
+ q
6218
+ 1 0 0 1 62.69291 205.0687 cm
6219
+ Q
6220
+ q
6221
+ 1 0 0 1 62.69291 193.0687 cm
6222
+ Q
6223
+ q
6224
+ 1 0 0 1 62.69291 98.06873 cm
6225
+ .960784 .960784 .862745 rg
6226
+ n 0 95 469.8898 -95 re f*
6227
+ 0 0 0 rg
6228
+ BT /F1 10 Tf 12 TL ET
6229
+ BT 1 0 0 1 6 69 Tm T* ET
6230
+ q
6231
+ 1 0 0 1 16 64 cm
6232
+ q
6233
+ 0 .533333 .603922 rg
6234
+ BT 1 0 0 1 0 2.5 Tm /F3 12.5 Tf 15 TL (Note) Tj T* ET
6235
+ Q
6236
+ Q
6237
+ q
6238
+ 1 0 0 1 16 16 cm
6239
+ q
6240
+ 0 0 0 rg
6241
+ BT 1 0 0 1 0 26 Tm /F1 10 Tf 12 TL 2.558443 Tw (Bei einer Migration auf die neue Modulversion ist es nicht erforderlich die bestehenden, von) Tj T* 0 Tw 1.839974 Tw (Expercash angelegten Datenbanfelder zu l\366schen. Alle bisher get\344tigten Transaktionen bleiben) Tj T* 0 Tw (erhalten.) Tj T* ET
6242
+ Q
6243
+ Q
6244
+ q
6245
+ 1 J
6246
+ 1 j
6247
+ .662745 .662745 .662745 RG
6248
+ .5 w
6249
+ n 0 95 m 469.8898 95 l S
6250
+ n 0 0 m 469.8898 0 l S
6251
+ n 0 0 m 0 95 l S
6252
+ n 469.8898 0 m 469.8898 95 l S
6253
+ Q
6254
+ Q
6255
+ q
6256
+ 1 0 0 1 62.69291 94.86614 cm
6257
+ Q
6258
+ q
6259
+ 1 0 0 1 411.0236 768.242 cm
6260
+ q
6261
+ 127.5591 0 0 45.30135 0 0 cm
6262
+ /FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
6263
+ Q
6264
+ Q
6265
+ q
6266
+ 1 0 0 1 56.69291 56.69291 cm
6267
+ 0 0 0 rg
6268
+ BT /F1 10 Tf 12 TL ET
6269
+ q
6270
+ 1 0 0 1 6 3 cm
6271
+ q
6272
+ 0 0 0 rg
6273
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
6274
+ Q
6275
+ Q
6276
+ q
6277
+ 1 0 0 1 246.9449 3 cm
6278
+ q
6279
+ 0 0 0 rg
6280
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 203.9249 0 Td (15/16) Tj T* -203.9249 0 Td ET
6281
+ Q
6282
+ Q
6283
+ q
6284
+ Q
6285
+ Q
6286
+
6287
+ endstream
6288
+ endobj
6289
+ % 'R109': class PDFStream
6290
+ 109 0 obj
6291
+ % page stream
6292
+ << /Length 5981 >>
6293
+ stream
6294
+ 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
6295
+ q
6296
+ 1 0 0 1 62.69291 742.0687 cm
6297
+ Q
6298
+ q
6299
+ 1 0 0 1 62.69291 730.0687 cm
6300
+ q
6301
+ 0 0 0 rg
6302
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
6303
+ Q
6304
+ Q
6305
+ q
6306
+ 1 0 0 1 62.69291 730.0687 cm
6307
+ Q
6308
+ q
6309
+ 1 0 0 1 62.69291 700.0687 cm
6310
+ q
6311
+ BT 1 0 0 1 0 3 Tm 18 TL /F2 15 Tf 0 .533333 .603922 rg (9.1 Alte Version deinstallieren) Tj T* ET
6312
+ Q
6313
+ Q
6314
+ q
6315
+ 1 0 0 1 62.69291 688.0687 cm
6316
+ Q
6317
+ q
6318
+ 1 0 0 1 62.69291 676.0687 cm
6319
+ q
6320
+ 0 0 0 rg
6321
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
6322
+ Q
6323
+ Q
6324
+ q
6325
+ 1 0 0 1 62.69291 676.0687 cm
6326
+ Q
6327
+ q
6328
+ 1 0 0 1 62.69291 670.0687 cm
6329
+ Q
6330
+ q
6331
+ 1 0 0 1 62.69291 670.0687 cm
6332
+ Q
6333
+ q
6334
+ 1 0 0 1 62.69291 658.0687 cm
6335
+ 0 0 0 rg
6336
+ BT /F1 10 Tf 12 TL ET
6337
+ q
6338
+ 1 0 0 1 6 -3 cm
6339
+ q
6340
+ 0 0 0 rg
6341
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (1.) Tj T* -5.66 0 Td ET
6342
+ Q
6343
+ Q
6344
+ q
6345
+ 1 0 0 1 23 -3 cm
6346
+ q
6347
+ 0 0 0 rg
6348
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Melden Sie sich in Ihrem Magento Backend an) Tj T* ET
6349
+ Q
6350
+ Q
6351
+ q
6352
+ Q
6353
+ Q
6354
+ q
6355
+ 1 0 0 1 62.69291 652.0687 cm
6356
+ Q
6357
+ q
6358
+ 1 0 0 1 62.69291 640.0687 cm
6359
+ 0 0 0 rg
6360
+ BT /F1 10 Tf 12 TL ET
6361
+ q
6362
+ 1 0 0 1 6 -3 cm
6363
+ q
6364
+ 0 0 0 rg
6365
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (2.) Tj T* -5.66 0 Td ET
6366
+ Q
6367
+ Q
6368
+ q
6369
+ 1 0 0 1 23 -3 cm
6370
+ q
6371
+ BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Navigieren Sie zu "System" -) Tj (> "Magento Connect" -) Tj (> "Magento Connect Manager") Tj T* ET
6372
+ Q
6373
+ Q
6374
+ q
6375
+ Q
6376
+ Q
6377
+ q
6378
+ 1 0 0 1 62.69291 634.0687 cm
6379
+ Q
6380
+ q
6381
+ 1 0 0 1 62.69291 622.0687 cm
6382
+ 0 0 0 rg
6383
+ BT /F1 10 Tf 12 TL ET
6384
+ q
6385
+ 1 0 0 1 6 -3 cm
6386
+ q
6387
+ 0 0 0 rg
6388
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (3.) Tj T* -5.66 0 Td ET
6389
+ Q
6390
+ Q
6391
+ q
6392
+ 1 0 0 1 23 -3 cm
6393
+ q
6394
+ 0 0 0 rg
6395
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Melden Sie sich im "Magento Connect Manager" an) Tj T* ET
6396
+ Q
6397
+ Q
6398
+ q
6399
+ Q
6400
+ Q
6401
+ q
6402
+ 1 0 0 1 62.69291 616.0687 cm
6403
+ Q
6404
+ q
6405
+ 1 0 0 1 62.69291 604.0687 cm
6406
+ 0 0 0 rg
6407
+ BT /F1 10 Tf 12 TL ET
6408
+ q
6409
+ 1 0 0 1 6 -3 cm
6410
+ q
6411
+ 0 0 0 rg
6412
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (4.) Tj T* -5.66 0 Td ET
6413
+ Q
6414
+ Q
6415
+ q
6416
+ 1 0 0 1 23 -3 cm
6417
+ q
6418
+ 0 0 0 rg
6419
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (W\344hlen Sie den Tab "Extensions") Tj T* ET
6420
+ Q
6421
+ Q
6422
+ q
6423
+ Q
6424
+ Q
6425
+ q
6426
+ 1 0 0 1 62.69291 598.0687 cm
6427
+ Q
6428
+ q
6429
+ 1 0 0 1 62.69291 574.0687 cm
6430
+ 0 0 0 rg
6431
+ BT /F1 10 Tf 12 TL ET
6432
+ q
6433
+ 1 0 0 1 6 9 cm
6434
+ q
6435
+ 0 0 0 rg
6436
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (5.) Tj T* -5.66 0 Td ET
6437
+ Q
6438
+ Q
6439
+ q
6440
+ 1 0 0 1 23 -3 cm
6441
+ q
6442
+ 0 0 0 rg
6443
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL .891647 Tw (W\344hlen Sie f\374r die Expercash-Extension die Aktion "Uninstall" und bet\344tigen Sie anschlie\337end den) Tj T* 0 Tw (Button "Commit Changes") Tj T* ET
6444
+ Q
6445
+ Q
6446
+ q
6447
+ Q
6448
+ Q
6449
+ q
6450
+ 1 0 0 1 62.69291 574.0687 cm
6451
+ Q
6452
+ q
6453
+ 1 0 0 1 62.69291 568.0687 cm
6454
+ Q
6455
+ q
6456
+ 1 0 0 1 62.69291 556.0687 cm
6457
+ q
6458
+ 0 0 0 rg
6459
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
6460
+ Q
6461
+ Q
6462
+ q
6463
+ 1 0 0 1 62.69291 556.0687 cm
6464
+ Q
6465
+ q
6466
+ 1 0 0 1 62.69291 526.0687 cm
6467
+ q
6468
+ 0 0 0 rg
6469
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 2.54816 Tw (Es empfiehlt sich anschlie\337end trotzdem zu \374berpr\374fen, ob alle Expercash-Dateien entfernt wurden.) Tj T* 0 Tw (Sollten noch Dateien des alten Moduls vorhanden sein, l\366schen Sie diese von Hand.) Tj T* ET
6470
+ Q
6471
+ Q
6472
+ q
6473
+ 1 0 0 1 62.69291 520.0687 cm
6474
+ Q
6475
+ q
6476
+ 1 0 0 1 62.69291 508.0687 cm
6477
+ q
6478
+ 0 0 0 rg
6479
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
6480
+ Q
6481
+ Q
6482
+ q
6483
+ 1 0 0 1 62.69291 508.0687 cm
6484
+ Q
6485
+ q
6486
+ 1 0 0 1 62.69291 502.0687 cm
6487
+ Q
6488
+ q
6489
+ 1 0 0 1 62.69291 502.0687 cm
6490
+ Q
6491
+ q
6492
+ 1 0 0 1 62.69291 490.0687 cm
6493
+ 0 0 0 rg
6494
+ BT /F1 10 Tf 12 TL ET
6495
+ q
6496
+ 1 0 0 1 6 -3 cm
6497
+ q
6498
+ 0 0 0 rg
6499
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
6500
+ Q
6501
+ Q
6502
+ q
6503
+ 1 0 0 1 23 -3 cm
6504
+ q
6505
+ 0 0 0 rg
6506
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (app/code/community/Mage/Expercash/) Tj T* ET
6507
+ Q
6508
+ Q
6509
+ q
6510
+ Q
6511
+ Q
6512
+ q
6513
+ 1 0 0 1 62.69291 484.0687 cm
6514
+ Q
6515
+ q
6516
+ 1 0 0 1 62.69291 472.0687 cm
6517
+ 0 0 0 rg
6518
+ BT /F1 10 Tf 12 TL ET
6519
+ q
6520
+ 1 0 0 1 6 -3 cm
6521
+ q
6522
+ 0 0 0 rg
6523
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
6524
+ Q
6525
+ Q
6526
+ q
6527
+ 1 0 0 1 23 -3 cm
6528
+ q
6529
+ 0 0 0 rg
6530
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (app/etc/modules/Mage_Expercash.xml) Tj T* ET
6531
+ Q
6532
+ Q
6533
+ q
6534
+ Q
6535
+ Q
6536
+ q
6537
+ 1 0 0 1 62.69291 466.0687 cm
6538
+ Q
6539
+ q
6540
+ 1 0 0 1 62.69291 454.0687 cm
6541
+ 0 0 0 rg
6542
+ BT /F1 10 Tf 12 TL ET
6543
+ q
6544
+ 1 0 0 1 6 -3 cm
6545
+ q
6546
+ 0 0 0 rg
6547
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
6548
+ Q
6549
+ Q
6550
+ q
6551
+ 1 0 0 1 23 -3 cm
6552
+ q
6553
+ 0 0 0 rg
6554
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (app/locale/de_DE/Mage_Expercash.csv) Tj T* ET
6555
+ Q
6556
+ Q
6557
+ q
6558
+ Q
6559
+ Q
6560
+ q
6561
+ 1 0 0 1 62.69291 448.0687 cm
6562
+ Q
6563
+ q
6564
+ 1 0 0 1 62.69291 436.0687 cm
6565
+ 0 0 0 rg
6566
+ BT /F1 10 Tf 12 TL ET
6567
+ q
6568
+ 1 0 0 1 6 -3 cm
6569
+ q
6570
+ 0 0 0 rg
6571
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
6572
+ Q
6573
+ Q
6574
+ q
6575
+ 1 0 0 1 23 -3 cm
6576
+ q
6577
+ 0 0 0 rg
6578
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (app/design/adminhtml/default/default/template/experCash) Tj T* ET
6579
+ Q
6580
+ Q
6581
+ q
6582
+ Q
6583
+ Q
6584
+ q
6585
+ 1 0 0 1 62.69291 430.0687 cm
6586
+ Q
6587
+ q
6588
+ 1 0 0 1 62.69291 418.0687 cm
6589
+ 0 0 0 rg
6590
+ BT /F1 10 Tf 12 TL ET
6591
+ q
6592
+ 1 0 0 1 6 -3 cm
6593
+ q
6594
+ 0 0 0 rg
6595
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
6596
+ Q
6597
+ Q
6598
+ q
6599
+ 1 0 0 1 23 -3 cm
6600
+ q
6601
+ 0 0 0 rg
6602
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (app/design/frontend/base/default/layout/expercash.xml) Tj T* ET
6603
+ Q
6604
+ Q
6605
+ q
6606
+ Q
6607
+ Q
6608
+ q
6609
+ 1 0 0 1 62.69291 412.0687 cm
6610
+ Q
6611
+ q
6612
+ 1 0 0 1 62.69291 400.0687 cm
6613
+ 0 0 0 rg
6614
+ BT /F1 10 Tf 12 TL ET
6615
+ q
6616
+ 1 0 0 1 6 -3 cm
6617
+ q
6618
+ 0 0 0 rg
6619
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
6620
+ Q
6621
+ Q
6622
+ q
6623
+ 1 0 0 1 23 -3 cm
6624
+ q
6625
+ 0 0 0 rg
6626
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (app/design/frontend/base/default/template/expercash/) Tj T* ET
6627
+ Q
6628
+ Q
6629
+ q
6630
+ Q
6631
+ Q
6632
+ q
6633
+ 1 0 0 1 62.69291 400.0687 cm
6634
+ Q
6635
+ q
6636
+ 1 0 0 1 62.69291 394.0687 cm
6637
+ Q
6638
+ q
6639
+ 1 0 0 1 62.69291 382.0687 cm
6640
+ q
6641
+ 0 0 0 rg
6642
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
6643
+ Q
6644
+ Q
6645
+ q
6646
+ 1 0 0 1 62.69291 382.0687 cm
6647
+ Q
6648
+ q
6649
+ 1 0 0 1 62.69291 382.0687 cm
6650
+ Q
6651
+ q
6652
+ 1 0 0 1 411.0236 768.242 cm
6653
+ q
6654
+ 127.5591 0 0 45.30135 0 0 cm
6655
+ /FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
6656
+ Q
6657
+ Q
6658
+ q
6659
+ 1 0 0 1 56.69291 56.69291 cm
6660
+ 0 0 0 rg
6661
+ BT /F1 10 Tf 12 TL ET
6662
+ q
6663
+ 1 0 0 1 6 3 cm
6664
+ q
6665
+ 0 0 0 rg
6666
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
6667
+ Q
6668
+ Q
6669
+ q
6670
+ 1 0 0 1 246.9449 3 cm
6671
+ q
6672
+ 0 0 0 rg
6673
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 203.9249 0 Td (16/16) Tj T* -203.9249 0 Td ET
6674
+ Q
6675
+ Q
6676
+ q
6677
+ Q
6678
+ Q
6679
+
6680
+ endstream
6681
+ endobj
6682
+ % 'R110': class PDFPageLabels
6683
+ 110 0 obj
6684
+ % Document Root
6685
+ << /Nums [ 0
6686
+ 111 0 R
6687
+ 1
6688
+ 112 0 R
6689
+ 2
6690
+ 113 0 R
6691
+ 3
6692
+ 114 0 R
6693
+ 4
6694
+ 115 0 R
6695
+ 5
6696
+ 116 0 R
6697
+ 6
6698
+ 117 0 R
6699
+ 7
6700
+ 118 0 R
6701
+ 8
6702
+ 119 0 R
6703
+ 9
6704
+ 120 0 R
6705
+ 10
6706
+ 121 0 R
6707
+ 11
6708
+ 122 0 R
6709
+ 12
6710
+ 123 0 R
6711
+ 13
6712
+ 124 0 R
6713
+ 14
6714
+ 125 0 R
6715
+ 15
6716
+ 126 0 R ] >>
6717
+ endobj
6718
+ % 'R111': class PDFPageLabel
6719
+ 111 0 obj
6720
+ % None
6721
+ << /S /D
6722
+ /St 1 >>
6723
+ endobj
6724
+ % 'R112': class PDFPageLabel
6725
+ 112 0 obj
6726
+ % None
6727
+ << /S /D
6728
+ /St 2 >>
6729
+ endobj
6730
+ % 'R113': class PDFPageLabel
6731
+ 113 0 obj
6732
+ % None
6733
+ << /S /D
6734
+ /St 3 >>
6735
+ endobj
6736
+ % 'R114': class PDFPageLabel
6737
+ 114 0 obj
6738
+ % None
6739
+ << /S /D
6740
+ /St 4 >>
6741
+ endobj
6742
+ % 'R115': class PDFPageLabel
6743
+ 115 0 obj
6744
+ % None
6745
+ << /S /D
6746
+ /St 5 >>
6747
+ endobj
6748
+ % 'R116': class PDFPageLabel
6749
+ 116 0 obj
6750
+ % None
6751
+ << /S /D
6752
+ /St 6 >>
6753
+ endobj
6754
+ % 'R117': class PDFPageLabel
6755
+ 117 0 obj
6756
+ % None
6757
+ << /S /D
6758
+ /St 7 >>
6759
+ endobj
6760
+ % 'R118': class PDFPageLabel
6761
+ 118 0 obj
6762
+ % None
6763
+ << /S /D
6764
+ /St 8 >>
6765
+ endobj
6766
+ % 'R119': class PDFPageLabel
6767
+ 119 0 obj
6768
+ % None
6769
+ << /S /D
6770
+ /St 9 >>
6771
+ endobj
6772
+ % 'R120': class PDFPageLabel
6773
+ 120 0 obj
6774
+ % None
6775
+ << /S /D
6776
+ /St 10 >>
6777
+ endobj
6778
+ % 'R121': class PDFPageLabel
6779
+ 121 0 obj
6780
+ % None
6781
+ << /S /D
6782
+ /St 11 >>
6783
+ endobj
6784
+ % 'R122': class PDFPageLabel
6785
+ 122 0 obj
6786
+ % None
6787
+ << /S /D
6788
+ /St 12 >>
6789
+ endobj
6790
+ % 'R123': class PDFPageLabel
6791
+ 123 0 obj
6792
+ % None
6793
+ << /S /D
6794
+ /St 13 >>
6795
+ endobj
6796
+ % 'R124': class PDFPageLabel
6797
+ 124 0 obj
6798
+ % None
6799
+ << /S /D
6800
+ /St 14 >>
6801
+ endobj
6802
+ % 'R125': class PDFPageLabel
6803
+ 125 0 obj
6804
+ % None
6805
+ << /S /D
6806
+ /St 15 >>
6807
+ endobj
6808
+ % 'R126': class PDFPageLabel
6809
+ 126 0 obj
6810
+ % None
6811
+ << /S /D
6812
+ /St 16 >>
6813
+ endobj
6814
+ xref
6815
+ 0 127
6816
+ 0000000000 65535 f
6817
+ 0000000113 00000 n
6818
+ 0000000247 00000 n
6819
+ 0000000453 00000 n
6820
+ 0000161729 00000 n
6821
+ 0000161945 00000 n
6822
+ 0000170379 00000 n
6823
+ 0000170788 00000 n
6824
+ 0000171029 00000 n
6825
+ 0000171270 00000 n
6826
+ 0000171511 00000 n
6827
+ 0000171753 00000 n
6828
+ 0000171995 00000 n
6829
+ 0000172237 00000 n
6830
+ 0000172479 00000 n
6831
+ 0000172721 00000 n
6832
+ 0000172964 00000 n
6833
+ 0000173207 00000 n
6834
+ 0000173450 00000 n
6835
+ 0000173693 00000 n
6836
+ 0000173936 00000 n
6837
+ 0000174179 00000 n
6838
+ 0000174422 00000 n
6839
+ 0000174665 00000 n
6840
+ 0000174908 00000 n
6841
+ 0000175151 00000 n
6842
+ 0000175394 00000 n
6843
+ 0000175637 00000 n
6844
+ 0000175880 00000 n
6845
+ 0000176123 00000 n
6846
+ 0000176366 00000 n
6847
+ 0000176609 00000 n
6848
+ 0000176852 00000 n
6849
+ 0000177095 00000 n
6850
+ 0000177338 00000 n
6851
+ 0000177581 00000 n
6852
+ 0000177824 00000 n
6853
+ 0000178067 00000 n
6854
+ 0000178310 00000 n
6855
+ 0000178553 00000 n
6856
+ 0000178796 00000 n
6857
+ 0000179039 00000 n
6858
+ 0000179282 00000 n
6859
+ 0000179525 00000 n
6860
+ 0000179768 00000 n
6861
+ 0000180011 00000 n
6862
+ 0000180254 00000 n
6863
+ 0000180497 00000 n
6864
+ 0000180740 00000 n
6865
+ 0000180967 00000 n
6866
+ 0000181701 00000 n
6867
+ 0000181889 00000 n
6868
+ 0000182234 00000 n
6869
+ 0000182594 00000 n
6870
+ 0000182865 00000 n
6871
+ 0000183246 00000 n
6872
+ 0000183459 00000 n
6873
+ 0000183825 00000 n
6874
+ 0000184171 00000 n
6875
+ 0000184519 00000 n
6876
+ 0000184699 00000 n
6877
+ 0000185046 00000 n
6878
+ 0000185393 00000 n
6879
+ 0000185754 00000 n
6880
+ 0000185999 00000 n
6881
+ 0000186367 00000 n
6882
+ 0000186714 00000 n
6883
+ 0000187061 00000 n
6884
+ 0000187408 00000 n
6885
+ 0000187755 00000 n
6886
+ 0000187915 00000 n
6887
+ 0000188163 00000 n
6888
+ 0000188289 00000 n
6889
+ 0000188537 00000 n
6890
+ 0000188870 00000 n
6891
+ 0000189108 00000 n
6892
+ 0000189381 00000 n
6893
+ 0000189704 00000 n
6894
+ 0000189990 00000 n
6895
+ 0000190323 00000 n
6896
+ 0000190609 00000 n
6897
+ 0000190897 00000 n
6898
+ 0000191200 00000 n
6899
+ 0000191546 00000 n
6900
+ 0000191944 00000 n
6901
+ 0000192207 00000 n
6902
+ 0000192495 00000 n
6903
+ 0000192803 00000 n
6904
+ 0000193131 00000 n
6905
+ 0000193477 00000 n
6906
+ 0000193773 00000 n
6907
+ 0000194026 00000 n
6908
+ 0000194399 00000 n
6909
+ 0000194711 00000 n
6910
+ 0000194954 00000 n
6911
+ 0000200394 00000 n
6912
+ 0000206557 00000 n
6913
+ 0000212962 00000 n
6914
+ 0000215293 00000 n
6915
+ 0000222672 00000 n
6916
+ 0000229336 00000 n
6917
+ 0000237223 00000 n
6918
+ 0000244262 00000 n
6919
+ 0000246147 00000 n
6920
+ 0000253059 00000 n
6921
+ 0000257645 00000 n
6922
+ 0000263102 00000 n
6923
+ 0000268251 00000 n
6924
+ 0000273522 00000 n
6925
+ 0000282523 00000 n
6926
+ 0000288609 00000 n
6927
+ 0000288921 00000 n
6928
+ 0000289000 00000 n
6929
+ 0000289079 00000 n
6930
+ 0000289158 00000 n
6931
+ 0000289237 00000 n
6932
+ 0000289316 00000 n
6933
+ 0000289395 00000 n
6934
+ 0000289474 00000 n
6935
+ 0000289553 00000 n
6936
+ 0000289632 00000 n
6937
+ 0000289712 00000 n
6938
+ 0000289792 00000 n
6939
+ 0000289872 00000 n
6940
+ 0000289952 00000 n
6941
+ 0000290032 00000 n
6942
+ 0000290112 00000 n
6943
+ trailer
6944
+ << /ID
6945
+ % ReportLab generated PDF document -- digest (http://www.reportlab.com)
6946
+ [(\272B;\\\272J\223\276l\023S#\364\217\312\332) (\272B;\\\272J\223\276l\023S#\364\217\312\332)]
6947
+
6948
+ /Info 70 0 R
6949
+ /Root 69 0 R
6950
+ /Size 127 >>
6951
+ startxref
6952
+ 290161
6953
+ %%EOF
doc/Expercash_Expercash/ChangeLog.pdf ADDED
@@ -0,0 +1,860 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ %PDF-1.4
2
+ %���� ReportLab Generated PDF document http://www.reportlab.com
3
+ % 'BasicFonts': class PDFDictionary
4
+ 1 0 obj
5
+ % The standard fonts dictionary
6
+ << /F1 2 0 R
7
+ /F2 3 0 R
8
+ /F3 4 0 R >>
9
+ endobj
10
+ % 'F1': class PDFType1Font
11
+ 2 0 obj
12
+ % Font Helvetica
13
+ << /BaseFont /Helvetica
14
+ /Encoding /WinAnsiEncoding
15
+ /Name /F1
16
+ /Subtype /Type1
17
+ /Type /Font >>
18
+ endobj
19
+ % 'F2': class PDFType1Font
20
+ 3 0 obj
21
+ % Font Helvetica-Bold
22
+ << /BaseFont /Helvetica-Bold
23
+ /Encoding /WinAnsiEncoding
24
+ /Name /F2
25
+ /Subtype /Type1
26
+ /Type /Font >>
27
+ endobj
28
+ % 'F3': class PDFType1Font
29
+ 4 0 obj
30
+ % Font Helvetica-BoldOblique
31
+ << /BaseFont /Helvetica-BoldOblique
32
+ /Encoding /WinAnsiEncoding
33
+ /Name /F3
34
+ /Subtype /Type1
35
+ /Type /Font >>
36
+ endobj
37
+ % 'Page1': class PDFPage
38
+ 5 0 obj
39
+ % Page dictionary
40
+ << /Contents 9 0 R
41
+ /MediaBox [ 0
42
+ 0
43
+ 595.2756
44
+ 841.8898 ]
45
+ /Parent 8 0 R
46
+ /Resources << /Font 1 0 R
47
+ /ProcSet [ /PDF
48
+ /Text
49
+ /ImageB
50
+ /ImageC
51
+ /ImageI ] >>
52
+ /Rotate 0
53
+ /Trans << >>
54
+ /Type /Page >>
55
+ endobj
56
+ % 'R6': class PDFCatalog
57
+ 6 0 obj
58
+ % Document Root
59
+ << /Outlines 10 0 R
60
+ /PageLabels 11 0 R
61
+ /PageMode /UseNone
62
+ /Pages 8 0 R
63
+ /Type /Catalog >>
64
+ endobj
65
+ % 'R7': class PDFInfo
66
+ 7 0 obj
67
+ << /Author ()
68
+ /CreationDate (D:20150506161335-01'00')
69
+ /Creator (\(unspecified\))
70
+ /Keywords ()
71
+ /Producer (ReportLab PDF Library - www.reportlab.com)
72
+ /Subject (\(unspecified\))
73
+ /Title (Expercash Payment Modul) >>
74
+ endobj
75
+ % 'R8': class PDFPages
76
+ 8 0 obj
77
+ % page tree
78
+ << /Count 1
79
+ /Kids [ 5 0 R ]
80
+ /Type /Pages >>
81
+ endobj
82
+ % 'R9': class PDFStream
83
+ 9 0 obj
84
+ % page stream
85
+ << /Length 10537 >>
86
+ stream
87
+ 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
88
+ q
89
+ 1 0 0 1 62.69291 769.3701 cm
90
+ q
91
+ 0 .533333 .603922 rg
92
+ BT 1 0 0 1 0 4 Tm /F2 20 Tf 24 TL 107.6849 0 Td (Expercash Payment Modul) Tj T* -107.6849 0 Td ET
93
+ Q
94
+ Q
95
+ q
96
+ 1 0 0 1 62.69291 739.3701 cm
97
+ q
98
+ 0 .533333 .603922 rg
99
+ BT 1 0 0 1 0 3 Tm /F2 15 Tf 18 TL 193.6949 0 Td (ChangeLog) Tj T* -193.6949 0 Td ET
100
+ Q
101
+ Q
102
+ q
103
+ 1 0 0 1 62.69291 723.3701 cm
104
+ Q
105
+ q
106
+ 1 0 0 1 62.69291 699.3701 cm
107
+ q
108
+ 0 .533333 .603922 rg
109
+ BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 209.1099 0 Td (Changelog) Tj T* -209.1099 0 Td ET
110
+ Q
111
+ Q
112
+ q
113
+ 1 0 0 1 62.69291 225.3701 cm
114
+ 1 1 1 rg
115
+ n 0 468 469.8898 -18 re f*
116
+ .878431 .878431 .878431 rg
117
+ n 0 450 469.8898 -156 re f*
118
+ 1 1 1 rg
119
+ n 0 294 469.8898 -60 re f*
120
+ .878431 .878431 .878431 rg
121
+ n 0 234 469.8898 -42 re f*
122
+ 1 1 1 rg
123
+ n 0 192 469.8898 -120 re f*
124
+ .878431 .878431 .878431 rg
125
+ n 0 72 469.8898 -36 re f*
126
+ 1 1 1 rg
127
+ n 0 36 469.8898 -36 re f*
128
+ .960784 .960784 .862745 rg
129
+ n 0 468 469.8898 -18 re f*
130
+ 0 .533333 .603922 rg
131
+ BT /F1 10 Tf 12 TL ET
132
+ q
133
+ 1 0 0 1 6 453 cm
134
+ q
135
+ .960784 .960784 .862745 rg
136
+ n 0 0 46.73622 12 re f*
137
+ Q
138
+ q
139
+ 0 .533333 .603922 rg
140
+ BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 2.52811 0 Td (Revision) Tj T* -2.52811 0 Td ET
141
+ Q
142
+ Q
143
+ q
144
+ 1 0 0 1 64.73622 453 cm
145
+ q
146
+ .960784 .960784 .862745 rg
147
+ n 0 0 46.73622 12 re f*
148
+ Q
149
+ q
150
+ 0 .533333 .603922 rg
151
+ BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 7.81311 0 Td (Datum) Tj T* -7.81311 0 Td ET
152
+ Q
153
+ Q
154
+ q
155
+ 1 0 0 1 123.4724 453 cm
156
+ q
157
+ .960784 .960784 .862745 rg
158
+ n 0 0 340.4173 12 re f*
159
+ Q
160
+ q
161
+ 0 .533333 .603922 rg
162
+ BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 136.8687 0 Td (Beschreibung) Tj T* -136.8687 0 Td ET
163
+ Q
164
+ Q
165
+ 0 0 0 rg
166
+ q
167
+ 1 0 0 1 6 435 cm
168
+ q
169
+ 0 0 0 rg
170
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (15.05.06) Tj T* ET
171
+ Q
172
+ Q
173
+ q
174
+ 1 0 0 1 64.73622 435 cm
175
+ q
176
+ 0 0 0 rg
177
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (06.05.2015) Tj T* ET
178
+ Q
179
+ Q
180
+ q
181
+ 1 0 0 1 123.4724 435 cm
182
+ q
183
+ 0 0 0 rg
184
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Bugfix:) Tj T* ET
185
+ Q
186
+ Q
187
+ q
188
+ 1 0 0 1 123.4724 429 cm
189
+ Q
190
+ q
191
+ 1 0 0 1 123.4724 351 cm
192
+ 0 0 0 rg
193
+ BT /F1 10 Tf 12 TL ET
194
+ BT 1 0 0 1 0 2 Tm T* ET
195
+ q
196
+ 1 0 0 1 20 72 cm
197
+ Q
198
+ q
199
+ 1 0 0 1 20 72 cm
200
+ Q
201
+ q
202
+ 1 0 0 1 20 60 cm
203
+ 0 0 0 rg
204
+ BT /F1 10 Tf 12 TL ET
205
+ q
206
+ 1 0 0 1 6 -3 cm
207
+ q
208
+ 0 0 0 rg
209
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
210
+ Q
211
+ Q
212
+ q
213
+ 1 0 0 1 23 -3 cm
214
+ q
215
+ 0 0 0 rg
216
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (template header comments no longer shown in invoice pdf) Tj T* ET
217
+ Q
218
+ Q
219
+ q
220
+ Q
221
+ Q
222
+ q
223
+ 1 0 0 1 20 54 cm
224
+ Q
225
+ q
226
+ 1 0 0 1 20 30 cm
227
+ 0 0 0 rg
228
+ BT /F1 10 Tf 12 TL ET
229
+ q
230
+ 1 0 0 1 6 9 cm
231
+ q
232
+ 0 0 0 rg
233
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
234
+ Q
235
+ Q
236
+ q
237
+ 1 0 0 1 23 -3 cm
238
+ q
239
+ 0 0 0 rg
240
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 2.539703 Tw (shipping address fields now have the correct values prefilled if) Tj T* 0 Tw (billing and shipping address are not equal) Tj T* ET
241
+ Q
242
+ Q
243
+ q
244
+ Q
245
+ Q
246
+ q
247
+ 1 0 0 1 20 24 cm
248
+ Q
249
+ q
250
+ 1 0 0 1 20 0 cm
251
+ 0 0 0 rg
252
+ BT /F1 10 Tf 12 TL ET
253
+ q
254
+ 1 0 0 1 6 9 cm
255
+ q
256
+ 0 0 0 rg
257
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
258
+ Q
259
+ Q
260
+ q
261
+ 1 0 0 1 23 -3 cm
262
+ q
263
+ 0 0 0 rg
264
+ BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 4.384665 Tw (generating the params for hash validation now uses correct) Tj T* 0 Tw (arg_seperator on all systems) Tj T* ET
265
+ Q
266
+ Q
267
+ q
268
+ Q
269
+ Q
270
+ q
271
+ 1 0 0 1 20 0 cm
272
+ Q
273
+ q
274
+ Q
275
+ Q
276
+ q
277
+ 1 0 0 1 123.4724 351 cm
278
+ Q
279
+ q
280
+ 1 0 0 1 123.4724 339 cm
281
+ q
282
+ 0 0 0 rg
283
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Feature:) Tj T* ET
284
+ Q
285
+ Q
286
+ q
287
+ 1 0 0 1 123.4724 333 cm
288
+ Q
289
+ q
290
+ 1 0 0 1 123.4724 297 cm
291
+ 0 0 0 rg
292
+ BT /F1 10 Tf 12 TL ET
293
+ BT 1 0 0 1 0 2 Tm T* ET
294
+ q
295
+ 1 0 0 1 20 30 cm
296
+ Q
297
+ q
298
+ 1 0 0 1 20 30 cm
299
+ Q
300
+ q
301
+ 1 0 0 1 20 18 cm
302
+ 0 0 0 rg
303
+ BT /F1 10 Tf 12 TL ET
304
+ q
305
+ 1 0 0 1 6 -3 cm
306
+ q
307
+ 0 0 0 rg
308
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
309
+ Q
310
+ Q
311
+ q
312
+ 1 0 0 1 23 -3 cm
313
+ q
314
+ 0 0 0 rg
315
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (make module compatible with old CE and EE versions) Tj T* ET
316
+ Q
317
+ Q
318
+ q
319
+ Q
320
+ Q
321
+ q
322
+ 1 0 0 1 20 12 cm
323
+ Q
324
+ q
325
+ 1 0 0 1 20 0 cm
326
+ 0 0 0 rg
327
+ BT /F1 10 Tf 12 TL ET
328
+ q
329
+ 1 0 0 1 6 -3 cm
330
+ q
331
+ 0 0 0 rg
332
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
333
+ Q
334
+ Q
335
+ q
336
+ 1 0 0 1 23 -3 cm
337
+ q
338
+ 0 0 0 rg
339
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (extend documentation regarding masterpass) Tj T* ET
340
+ Q
341
+ Q
342
+ q
343
+ Q
344
+ Q
345
+ q
346
+ 1 0 0 1 20 0 cm
347
+ Q
348
+ q
349
+ Q
350
+ Q
351
+ q
352
+ 1 0 0 1 123.4724 297 cm
353
+ Q
354
+ q
355
+ 1 0 0 1 6 279 cm
356
+ q
357
+ 0 0 0 rg
358
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (15.04.13) Tj T* ET
359
+ Q
360
+ Q
361
+ q
362
+ 1 0 0 1 64.73622 279 cm
363
+ q
364
+ 0 0 0 rg
365
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (13.04.2015) Tj T* ET
366
+ Q
367
+ Q
368
+ q
369
+ 1 0 0 1 123.4724 279 cm
370
+ q
371
+ 0 0 0 rg
372
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Feature:) Tj T* ET
373
+ Q
374
+ Q
375
+ q
376
+ 1 0 0 1 123.4724 273 cm
377
+ Q
378
+ q
379
+ 1 0 0 1 123.4724 237 cm
380
+ 0 0 0 rg
381
+ BT /F1 10 Tf 12 TL ET
382
+ BT 1 0 0 1 0 2 Tm T* ET
383
+ q
384
+ 1 0 0 1 20 30 cm
385
+ Q
386
+ q
387
+ 1 0 0 1 20 30 cm
388
+ Q
389
+ q
390
+ 1 0 0 1 20 18 cm
391
+ 0 0 0 rg
392
+ BT /F1 10 Tf 12 TL ET
393
+ q
394
+ 1 0 0 1 6 -3 cm
395
+ q
396
+ 0 0 0 rg
397
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
398
+ Q
399
+ Q
400
+ q
401
+ 1 0 0 1 23 -3 cm
402
+ q
403
+ 0 0 0 rg
404
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (add payment method Masterpass) Tj T* ET
405
+ Q
406
+ Q
407
+ q
408
+ Q
409
+ Q
410
+ q
411
+ 1 0 0 1 20 12 cm
412
+ Q
413
+ q
414
+ 1 0 0 1 20 0 cm
415
+ 0 0 0 rg
416
+ BT /F1 10 Tf 12 TL ET
417
+ q
418
+ 1 0 0 1 6 -3 cm
419
+ q
420
+ 0 0 0 rg
421
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
422
+ Q
423
+ Q
424
+ q
425
+ 1 0 0 1 23 -3 cm
426
+ q
427
+ 0 0 0 rg
428
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (add payment method Masterpass Fullcheckout) Tj T* ET
429
+ Q
430
+ Q
431
+ q
432
+ Q
433
+ Q
434
+ q
435
+ 1 0 0 1 20 0 cm
436
+ Q
437
+ q
438
+ Q
439
+ Q
440
+ q
441
+ 1 0 0 1 123.4724 237 cm
442
+ Q
443
+ q
444
+ 1 0 0 1 6 219 cm
445
+ q
446
+ 0 0 0 rg
447
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (14.04.14) Tj T* ET
448
+ Q
449
+ Q
450
+ q
451
+ 1 0 0 1 64.73622 219 cm
452
+ q
453
+ 0 0 0 rg
454
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (14.04.2014) Tj T* ET
455
+ Q
456
+ Q
457
+ q
458
+ 1 0 0 1 123.4724 219 cm
459
+ q
460
+ 0 0 0 rg
461
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Feature:) Tj T* ET
462
+ Q
463
+ Q
464
+ q
465
+ 1 0 0 1 123.4724 213 cm
466
+ Q
467
+ q
468
+ 1 0 0 1 123.4724 195 cm
469
+ 0 0 0 rg
470
+ BT /F1 10 Tf 12 TL ET
471
+ BT 1 0 0 1 0 2 Tm T* ET
472
+ q
473
+ 1 0 0 1 20 12 cm
474
+ Q
475
+ q
476
+ 1 0 0 1 20 12 cm
477
+ Q
478
+ q
479
+ 1 0 0 1 20 0 cm
480
+ 0 0 0 rg
481
+ BT /F1 10 Tf 12 TL ET
482
+ q
483
+ 1 0 0 1 6 -3 cm
484
+ q
485
+ 0 0 0 rg
486
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
487
+ Q
488
+ Q
489
+ q
490
+ 1 0 0 1 23 -3 cm
491
+ q
492
+ 0 0 0 rg
493
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (add support for Enterprise Edition) Tj T* ET
494
+ Q
495
+ Q
496
+ q
497
+ Q
498
+ Q
499
+ q
500
+ 1 0 0 1 20 0 cm
501
+ Q
502
+ q
503
+ Q
504
+ Q
505
+ q
506
+ 1 0 0 1 123.4724 195 cm
507
+ Q
508
+ q
509
+ 1 0 0 1 6 177 cm
510
+ q
511
+ 0 0 0 rg
512
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (14.04.10) Tj T* ET
513
+ Q
514
+ Q
515
+ q
516
+ 1 0 0 1 64.73622 177 cm
517
+ q
518
+ 0 0 0 rg
519
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (10.04.2014) Tj T* ET
520
+ Q
521
+ Q
522
+ q
523
+ 1 0 0 1 123.4724 177 cm
524
+ q
525
+ 0 0 0 rg
526
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Feature:) Tj T* ET
527
+ Q
528
+ Q
529
+ q
530
+ 1 0 0 1 123.4724 171 cm
531
+ Q
532
+ q
533
+ 1 0 0 1 123.4724 171 cm
534
+ Q
535
+ q
536
+ 1 0 0 1 123.4724 159 cm
537
+ 0 0 0 rg
538
+ BT /F1 10 Tf 12 TL ET
539
+ q
540
+ 1 0 0 1 6 -3 cm
541
+ q
542
+ 0 0 0 rg
543
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
544
+ Q
545
+ Q
546
+ q
547
+ 1 0 0 1 23 -3 cm
548
+ q
549
+ 0 0 0 rg
550
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (include Barzahlen payment method) Tj T* ET
551
+ Q
552
+ Q
553
+ q
554
+ Q
555
+ Q
556
+ q
557
+ 1 0 0 1 123.4724 153 cm
558
+ Q
559
+ q
560
+ 1 0 0 1 123.4724 141 cm
561
+ 0 0 0 rg
562
+ BT /F1 10 Tf 12 TL ET
563
+ q
564
+ 1 0 0 1 6 -3 cm
565
+ q
566
+ 0 0 0 rg
567
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
568
+ Q
569
+ Q
570
+ q
571
+ 1 0 0 1 23 -3 cm
572
+ q
573
+ 0 0 0 rg
574
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (use Expercash iFrame session web service for increased security) Tj T* ET
575
+ Q
576
+ Q
577
+ q
578
+ Q
579
+ Q
580
+ q
581
+ 1 0 0 1 123.4724 135 cm
582
+ Q
583
+ q
584
+ 1 0 0 1 123.4724 123 cm
585
+ 0 0 0 rg
586
+ BT /F1 10 Tf 12 TL ET
587
+ q
588
+ 1 0 0 1 6 -3 cm
589
+ q
590
+ 0 0 0 rg
591
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
592
+ Q
593
+ Q
594
+ q
595
+ 1 0 0 1 23 -3 cm
596
+ q
597
+ 0 0 0 rg
598
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (group Expercash payment methods in configuration) Tj T* ET
599
+ Q
600
+ Q
601
+ q
602
+ Q
603
+ Q
604
+ q
605
+ 1 0 0 1 123.4724 117 cm
606
+ Q
607
+ q
608
+ 1 0 0 1 123.4724 105 cm
609
+ 0 0 0 rg
610
+ BT /F1 10 Tf 12 TL ET
611
+ q
612
+ 1 0 0 1 6 -3 cm
613
+ q
614
+ 0 0 0 rg
615
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
616
+ Q
617
+ Q
618
+ q
619
+ 1 0 0 1 23 -3 cm
620
+ q
621
+ 0 0 0 rg
622
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (add multistore functionality) Tj T* ET
623
+ Q
624
+ Q
625
+ q
626
+ Q
627
+ Q
628
+ q
629
+ 1 0 0 1 123.4724 105 cm
630
+ Q
631
+ q
632
+ 1 0 0 1 123.4724 93 cm
633
+ q
634
+ 0 0 0 rg
635
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Bugfix:) Tj T* ET
636
+ Q
637
+ Q
638
+ q
639
+ 1 0 0 1 123.4724 87 cm
640
+ Q
641
+ q
642
+ 1 0 0 1 123.4724 87 cm
643
+ Q
644
+ q
645
+ 1 0 0 1 123.4724 75 cm
646
+ 0 0 0 rg
647
+ BT /F1 10 Tf 12 TL ET
648
+ q
649
+ 1 0 0 1 6 -3 cm
650
+ q
651
+ 0 0 0 rg
652
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
653
+ Q
654
+ Q
655
+ q
656
+ 1 0 0 1 23 -3 cm
657
+ q
658
+ 0 0 0 rg
659
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (broken checkout template due to PHP shorttags) Tj T* ET
660
+ Q
661
+ Q
662
+ q
663
+ Q
664
+ Q
665
+ q
666
+ 1 0 0 1 123.4724 75 cm
667
+ Q
668
+ q
669
+ 1 0 0 1 6 57 cm
670
+ q
671
+ 0 0 0 rg
672
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (13.09.26) Tj T* ET
673
+ Q
674
+ Q
675
+ q
676
+ 1 0 0 1 64.73622 57 cm
677
+ q
678
+ 0 0 0 rg
679
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (26.09.2013) Tj T* ET
680
+ Q
681
+ Q
682
+ q
683
+ 1 0 0 1 123.4724 57 cm
684
+ q
685
+ 0 0 0 rg
686
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Feature:) Tj T* ET
687
+ Q
688
+ Q
689
+ q
690
+ 1 0 0 1 123.4724 51 cm
691
+ Q
692
+ q
693
+ 1 0 0 1 123.4724 51 cm
694
+ Q
695
+ q
696
+ 1 0 0 1 123.4724 39 cm
697
+ 0 0 0 rg
698
+ BT /F1 10 Tf 12 TL ET
699
+ q
700
+ 1 0 0 1 6 -3 cm
701
+ q
702
+ 0 0 0 rg
703
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
704
+ Q
705
+ Q
706
+ q
707
+ 1 0 0 1 23 -3 cm
708
+ q
709
+ 0 0 0 rg
710
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (send mail after automatically invoice creation) Tj T* ET
711
+ Q
712
+ Q
713
+ q
714
+ Q
715
+ Q
716
+ q
717
+ 1 0 0 1 123.4724 39 cm
718
+ Q
719
+ q
720
+ 1 0 0 1 6 21 cm
721
+ q
722
+ 0 0 0 rg
723
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (13.07.04) Tj T* ET
724
+ Q
725
+ Q
726
+ q
727
+ 1 0 0 1 64.73622 21 cm
728
+ q
729
+ 0 0 0 rg
730
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (04.07.2013) Tj T* ET
731
+ Q
732
+ Q
733
+ q
734
+ 1 0 0 1 123.4724 21 cm
735
+ q
736
+ 0 0 0 rg
737
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Other:) Tj T* ET
738
+ Q
739
+ Q
740
+ q
741
+ 1 0 0 1 123.4724 15 cm
742
+ Q
743
+ q
744
+ 1 0 0 1 123.4724 15 cm
745
+ Q
746
+ q
747
+ 1 0 0 1 123.4724 3 cm
748
+ 0 0 0 rg
749
+ BT /F1 10 Tf 12 TL ET
750
+ q
751
+ 1 0 0 1 6 -3 cm
752
+ q
753
+ 0 0 0 rg
754
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
755
+ Q
756
+ Q
757
+ q
758
+ 1 0 0 1 23 -3 cm
759
+ q
760
+ 0 0 0 rg
761
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Initial Release) Tj T* ET
762
+ Q
763
+ Q
764
+ q
765
+ Q
766
+ Q
767
+ q
768
+ 1 0 0 1 123.4724 3 cm
769
+ Q
770
+ q
771
+ 1 J
772
+ 1 j
773
+ 0 0 0 RG
774
+ .25 w
775
+ n 0 450 m 469.8898 450 l S
776
+ n 0 294 m 469.8898 294 l S
777
+ n 0 234 m 469.8898 234 l S
778
+ n 0 192 m 469.8898 192 l S
779
+ n 0 72 m 469.8898 72 l S
780
+ n 0 36 m 469.8898 36 l S
781
+ n 58.73622 0 m 58.73622 468 l S
782
+ n 117.4724 0 m 117.4724 468 l S
783
+ n 0 468 m 469.8898 468 l S
784
+ n 0 0 m 469.8898 0 l S
785
+ n 0 0 m 0 468 l S
786
+ n 469.8898 0 m 469.8898 468 l S
787
+ Q
788
+ Q
789
+ q
790
+ 1 0 0 1 62.69291 225.3701 cm
791
+ Q
792
+ q
793
+ 1 0 0 1 62.69291 225.3701 cm
794
+ Q
795
+ q
796
+ 1 0 0 1 56.69291 56.69291 cm
797
+ 0 0 0 rg
798
+ BT /F1 10 Tf 12 TL ET
799
+ q
800
+ 1 0 0 1 6 3 cm
801
+ q
802
+ BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Stand: 06/05/2015) Tj T* ET
803
+ Q
804
+ Q
805
+ q
806
+ 1 0 0 1 246.9449 3 cm
807
+ q
808
+ 0 0 0 rg
809
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 215.0449 0 Td (1/1) Tj T* -215.0449 0 Td ET
810
+ Q
811
+ Q
812
+ q
813
+ Q
814
+ Q
815
+
816
+ endstream
817
+ endobj
818
+ % 'R10': class PDFOutlines
819
+ 10 0 obj
820
+ << /Count 0
821
+ /Type /Outlines >>
822
+ endobj
823
+ % 'R11': class PDFPageLabels
824
+ 11 0 obj
825
+ % Document Root
826
+ << /Nums [ 0
827
+ 12 0 R ] >>
828
+ endobj
829
+ % 'R12': class PDFPageLabel
830
+ 12 0 obj
831
+ % None
832
+ << /S /D
833
+ /St 1 >>
834
+ endobj
835
+ xref
836
+ 0 13
837
+ 0000000000 65535 f
838
+ 0000000113 00000 n
839
+ 0000000233 00000 n
840
+ 0000000398 00000 n
841
+ 0000000573 00000 n
842
+ 0000000760 00000 n
843
+ 0000001037 00000 n
844
+ 0000001193 00000 n
845
+ 0000001459 00000 n
846
+ 0000001564 00000 n
847
+ 0000012202 00000 n
848
+ 0000012285 00000 n
849
+ 0000012378 00000 n
850
+ trailer
851
+ << /ID
852
+ % ReportLab generated PDF document -- digest (http://www.reportlab.com)
853
+ [(&\325Y\272\204\233c\353+_\332\233\033\247\3779) (&\325Y\272\204\233c\353+_\332\233\033\247\3779)]
854
+
855
+ /Info 7 0 R
856
+ /Root 6 0 R
857
+ /Size 13 >>
858
+ startxref
859
+ 12425
860
+ %%EOF
package.xml ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?xml version="1.0"?>
2
+ <package><name>Expercash</name><version>15.05.06</version><stability>stable</stability><license>OSL3</license><channel>community</channel><extends></extends><summary>some text</summary><description>some description</description><notes>test release</notes><authors><author><name>Sebastian Ertner</name><user>sebastianertner</user><email>sebastian.ertner@netresearch.de</email></author></authors><date>2015-05-06</date><time>7:13:37</time><compatible></compatible><dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies><contents><target name="mage"><dir name="doc"><dir name="Expercash_Expercash"><file name="Benutzerdokumentation.pdf" hash="eaadbbe9a64916e44b46fe140ddc9bb2"/><file name="ChangeLog.pdf" hash="d443b4928e2c17dc3e51fc731e28d2ba"/></dir></dir><dir name="skin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><file name="expercash.css" hash="6113641bea3bc89a39672cfd976a2ce7"/></dir><dir name="images"><dir name="expercash"><file name="mp_buy_with_button.png" hash="5ed1fe8cc333e939cfdcdd894e16ef08"/><file name="mp_ident.png" hash="2253e27fe9bfeb20c7289c7dc9cc26ab"/></dir></dir><dir name="js"><file name="expercashopc.js" hash="ff8a0156b04323478e79d3d42d8a1cbf"/></dir></dir></dir></dir></dir><dir name="app"><dir name="locale"><dir name="de_DE"><file name="Expercash_Expercash.csv" hash="3a1d11e3bab24fb9aa9fd5bab33a05cf"/></dir><dir name="en_US"><file name="Expercash_Expercash.csv" hash="08397d083bc51174b54d863c35aa19f1"/></dir></dir><dir name="skin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="images"><dir name="expercash"><file name="masterpass.png" hash="988dd21889981f9f765cd920d9e572b1"/></dir></dir></dir></dir></dir></dir><dir name="design"><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="expercash"><file name="expercash.phtml" hash="3975416632a3f49154b6b86bbff0bb83"/><file name="expercasherror.phtml" hash="6a4056679aa05d3386de4864d33b2764"/><dir name="checkout"><file name="onepage.phtml" hash="056bbc6d9b779663edd770a2388f0fa7"/><dir name="ce15"><file name="onepage.phtml" hash="73acc169ccebdc9686d39e758e8dbe1b"/></dir><dir name="onepage"><file name="js.phtml" hash="9da0a81649cbcb0212c5a35daacdcded"/></dir></dir><dir name="info"><file name="expercash.phtml" hash="7debefc23e99803112ecc6aa634504e4"/><dir name="pdf"><file name="expercash.phtml" hash="c6be54fed275a07ddd5dffc24b9b3c12"/></dir></dir><dir name="masterpass"><dir name="fullcheckout"><file name="checkout.phtml" hash="872bb6a52b0166d7053bcf0541633eca"/><file name="shortcut.phtml" hash="294692b7e6c576d6b7362f502ec91752"/></dir></dir><dir name="payment"><dir name="masterpass"><file name="cc.phtml" hash="728959a1b3f510006d38fc655c4e8a1f"/></dir><dir name="logo"><file name="logo.phtml" hash="b6b43e823aae87ee66de75ffb715d376"/></dir></dir><dir name="form"><file name="expercashiframe.phtml" hash="3e991b2bb584801d43ff0deb2506d508"/></dir></dir></dir><dir name="layout"><file name="expercash.xml" hash="4705199e041da18aaf2c310830736ba9"/></dir></dir></dir><dir name="rwd"><dir name="default"><dir name="template"><dir name="expercash"><dir name="checkout"><file name="onepage.phtml" hash="1f07267037c504a038219918838e311a"/></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="expercash"><dir name="info"><file name="expercash.phtml" hash="3d6f29786f0b271b90d8c9b989837f56"/><dir name="pdf"><file name="expercash.phtml" hash="c6be54fed275a07ddd5dffc24b9b3c12"/></dir></dir></dir></dir></dir></dir></dir></dir><dir name="code"><dir name="community"><dir name="Expercash"><dir name="Expercash"><dir name="sql"><dir name="expercash_setup"><file name="mysql4-install-1.0.0.php" hash="38c0cd64205e9bbcc1fa2b2a6e3d2a48"/></dir></dir><dir name="Test"><dir name="Controller"><file name="ExpercashControllerTest.php" hash="1882c06d9ea1570dda3ee487273cc71e"/><dir name="ExpercashControllerTest"><dir name="fixtures"><file name="orders.yaml" hash="16fa377e0aa408a83ca300b42295df59"/></dir><dir name="expectations"><file name="orders.yaml" hash="5303d2b0d9fb1b9a91d99bf10cfc98c3"/></dir></dir></dir><dir name="Helper"><file name="DataTest.php" hash="74db3d71d4eebdb34266df21366b383a"/><file name="MasterpassTest.php" hash="1436f27d0aad0489b606009f7091791a"/><file name="PaymentTest.php" hash="fa0b8047332cace90dc52b42081b241b"/><dir name="PaymentTest"><dir name="fixtures"><file name="orders.yaml" hash="56a7ac11d5c2bffb3b7cef807b798490"/></dir></dir></dir><dir name="Model"><file name="ConfigTest.php" hash="cd9cf9c1bddde58aa2435fa20540e5f3"/><file name="ExpercashTest.php" hash="c74034a3f66dcb50f6829bf4e726cafc"/><file name="ExpercashccTest.php" hash="7fa68cdd8fb98fbe770212a18eb881b4"/><file name="ExpercashelvTest.php" hash="83685901e621e8209ac9997c2b2e0097"/><file name="ExpercashgpTest.php" hash="df4f7f94db8338bc0e5c16c717fdba6f"/><file name="ExpercashmpTest.php" hash="19b528ec264d9a95c58c595e35a482d0"/><file name="ExpercashmpfTest.php" hash="0781c35fb2065f5a954641f04ea87e6d"/><file name="ExpercashpcTest.php" hash="99f2e5eaea76700ff82d678f349b7c6f"/><file name="ExpercashppTest.php" hash="92e3b211091d6487029c3fd0057b56ae"/><file name="ExpercashsoTest.php" hash="600bf5716950a6de8b11c7c47583b0ea"/><dir name="ExpercashmpfTest"><dir name="fixtures"><file name="quote.yaml" hash="5e08cf2b5ef1c65eae4269d4d9240aee"/></dir></dir><dir name="Api"><file name="AbstractTest.php" hash="9fa3e989d26d2ab5e5c26604eb1084df"/><file name="ApiTest.php" hash="254a3779b78d372cd23e9e7d27fc8cde"/><file name="CaptureTest.php" hash="2633f371d6a4283e95e75d9e4d0f2a6b"/><dir name="ApiTest"><dir name="TestFiles"><file name="FailedTransaction.xml" hash="37851e225e15329588460482e7d78ec8"/><file name="ResponseParamsMissing.xml" hash="71a3977ddc1a2e6468c64ec1d4d27b0f"/><file name="SuccessFullResponse.xml" hash="9534f76edabf6edd8fb066874749882a"/></dir></dir><dir name="CaptureTest"><dir name="fixtures"><file name="orders.yaml" hash="37e75e93a6f658d5fac188f1d0b53d8e"/></dir></dir></dir><dir name="ExpercashpcTest"><dir name="fixtures"><file name="quote.yaml" hash="654b1ea6f862693b1265ff640354dc41"/></dir></dir><dir name="Request"><file name="IframeTest.php" hash="72a12161b78a1ca1fdfca75c15669b49"/><file name="TokenTest.php" hash="235808b49e1d95cd92bcbf2e79ced263"/><dir name="Token"><file name="IframeTest.php" hash="67e7f221b29e4bb51f69ef40bb3590b6"/><dir name="IframeTest"><dir name="fixtures"><file name="order.yaml" hash="012db55a0b44bcd20adabe55b34f1336"/></dir></dir></dir><dir name="TokenTest"><dir name="fixtures"><file name="order.yaml" hash="012db55a0b44bcd20adabe55b34f1336"/></dir></dir><dir name="IframeTest"><dir name="fixtures"><file name="order.yaml" hash="bb7bb8e01994ef4da869aca5abbbd709"/></dir></dir></dir></dir><dir name="Block"><file name="ExpercashTest.php" hash="a164a0542a6fe702ca11593996db17e5"/><dir name="Masterpass"><file name="FormTest.php" hash="50eba5e92488cb1d0a1df039dee04bc3"/><dir name="Fullcheckout"><file name="ShortcutTest.php" hash="57a55b87a6e1520b4080d70ba2e3628c"/></dir></dir><dir name="ExpercashTest"><dir name="fixtures"><file name="orders.yaml" hash="5410ce49a826596a7acd638f8615b74f"/></dir><dir name="expectations"><file name="orders.yaml" hash="a9bd2f7d6df351f28cbfe20837f014d5"/></dir></dir></dir><dir name="var"><dir name="fixtures"><file name="orders.yaml" hash="e34886b7e3379b866a1baf5d8791ee5c"/><file name="quote.yaml" hash="a32028834c19c5b29b1cedcfa6dddf06"/></dir><dir name="expectations"><file name="orders.yaml" hash="5303d2b0d9fb1b9a91d99bf10cfc98c3"/></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="340e9e3548972cda79b79bcb128ca039"/><file name="Masterpass.php" hash="4fce435a0bc20ea4cf23bd6073433579"/><file name="Payment.php" hash="b6f11019c9ebfc682a38d48197052de4"/></dir><dir name="Model"><file name="Config.php" hash="505efd4d4561961446356ea6f58db93a"/><file name="Expercash.php" hash="b0565568a61899837c40ec51132112c3"/><file name="Expercashcc.php" hash="b633a0ee42552c9ded4086954c1af16c"/><file name="Expercashelv.php" hash="a68f9e6e9d0c75fcbf7d6c045390ed66"/><file name="Expercashgp.php" hash="16f9b2145eb48cc343436b98fb8afb78"/><file name="Expercashmp.php" hash="ebda9826d73b1d25f07cd47e2591f8d2"/><file name="Expercashmpf.php" hash="84a2e7a96384274978a6fb7691f57c47"/><file name="Expercashpc.php" hash="752717db870d53bac8f25029d4c3e872"/><file name="Expercashpp.php" hash="413f3e0ada0449a3c2737fb7c8327c7e"/><file name="Expercashso.php" hash="a0803d48640c4a1d76a583aa9e5b0358"/><file name="Observer.php" hash="6f6709225e6e4f51ce84a3ddb99d2e05"/><dir name="Entity"><file name="Setup.php" hash="92e67cfecc9602a4f991350b3955a5bc"/></dir><dir name="Source"><file name="Paymenttypecc.php" hash="7904509a589ba3616b6548ef4e0c3aba"/><file name="Paymenttypeelv.php" hash="18adea86b9a693f3327d7f95b3fff843"/><file name="Paymenttypegp.php" hash="12b0278f54c8831c23c2a612115dec82"/><file name="Paymenttypemp.php" hash="210c923e158840ecc8c1ea242515f01d"/><file name="Paymenttypempf.php" hash="ee36fc7e4b965da64b4f3106957ea336"/><file name="Paymenttypeso.php" hash="cafd1ba2e25a269a3ebcc1e7fbd54d3a"/></dir><dir name="Directory"><file name="Region.php" hash="eac40cbc2fc2faf379d140e4b9813256"/></dir><dir name="Masterpass"><file name="Config.php" hash="c5343c7a0f15b5fe98436a9a2bf80399"/></dir><dir name="Api"><file name="Abstract.php" hash="66edf7a42e50f9066b7b3c70a9dedb4a"/><file name="Api.php" hash="c8a6aa460c70f44cd4b80489bf9c0098"/><file name="Capture.php" hash="22a930d5bd4ce1c1ce63d29cfa638bef"/><dir name="Masterpass"><file name="Capture.php" hash="b14f293a73cb0a3fbd0bbc6fd5f62d2e"/><file name="Epi.php" hash="a4af87a6e8847dd14d963f216cc66eea"/></dir></dir><dir name="Resource"><dir name="Directory"><file name="Region.php" hash="b37149cbdf1b99858ff6c9b4e65fee51"/></dir></dir><dir name="Request"><file name="Iframe.php" hash="9d538a27439397903329734f877b7e3b"/><file name="Token.php" hash="82bb5f16b9b1c8efaf135bd16b78546b"/><dir name="Token"><file name="Iframe.php" hash="8956cd7280a8d0800485b676d1ac8d27"/></dir><dir name="Masterpass"><file name="Epi.php" hash="ed2e6673e99be7ecd9b8027caefaa77f"/></dir></dir></dir><dir name="controllers"><file name="ExpercashController.php" hash="f18d38a99b907c9940f75c734b243d31"/><file name="FullcheckoutController.php" hash="3ba6450f465a965c5b4b0ea20b0ebb5a"/><dir name="Checkout"><file name="OnepageController.php" hash="c6d7a8e0043064a066194ab76b9e3d9c"/></dir></dir><dir name="Block"><file name="Expercash.php" hash="49799c4503c7ad0f8abeb98d0fc4ea17"/><file name="Form.php" hash="f4289d179cfccb2a97e01f793e31ee77"/><file name="Info.php" hash="ae54106dce146aa50cb58b9a84c1ddb8"/><dir name="Form"><file name="Expercash.php" hash="6e54e89302c484ef1543e4c43f5ab374"/></dir><dir name="Masterpass"><file name="Form.php" hash="400e99712e8360d80d9e61bc464cbb58"/><dir name="Fullcheckout"><file name="Cc.php" hash="f9de0ca7a02a450f0df71553819e0452"/><file name="Shortcut.php" hash="32d53199f349572babd755e8732404c9"/></dir></dir><dir name="Info"><file name="Expercash.php" hash="b2f86b96593a6731283d59292e737b62"/></dir></dir><dir name="etc"><file name="config.xml" hash="f3116b5989287a6270cf65d9e20cc668"/><file name="system.xml" hash="1433bc2c03ea31e94fabf6a557eb286f"/></dir></dir></dir></dir></dir><dir name="etc"><dir name="modules"><file name="Expercash_Expercash.xml" hash="e3ab647d614795211758975d8a58bdd7"/></dir></dir></dir></target></contents></package>
skin/frontend/base/default/css/expercash.css ADDED
@@ -0,0 +1,167 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .masterpass-checkout h3 {
2
+ font-weight: bold;
3
+
4
+ }
5
+
6
+ .masterpass-checkout h3, .masterpass-checkout p {
7
+ text-align: left;
8
+
9
+ }
10
+
11
+ .masterpass-checkout .masterpass-info {
12
+ font-size: 14px;
13
+ }
14
+
15
+
16
+ .masterpass-links a {
17
+ margin: 10px;
18
+ width: auto;
19
+ text-decoration: none;
20
+ }
21
+
22
+ .masterpass-links .learn_more_link {
23
+ text-decoration: underline;
24
+ }
25
+
26
+ .masterpass-links .learn_more_link:hover {
27
+ text-decoration: none;
28
+ }
29
+
30
+ .masterpass-logo a img {
31
+
32
+ }
33
+
34
+ .top .masterpass-logo {
35
+ height: 40px;
36
+ padding-right: 40px;
37
+ text-align: center;
38
+ text-transform: uppercase;
39
+ vertical-align: middle;
40
+ }
41
+
42
+ .masterpass-logo a {
43
+ text-decoration: none;
44
+ }
45
+
46
+ .masterpass-checkout-wrapper {
47
+ width: 100%;
48
+ height: 70px;
49
+ }
50
+
51
+ .masterpass-checkout-left {
52
+ float: left;
53
+ width: 50%;
54
+ }
55
+
56
+ .masterpass-checkout-right {
57
+ float: right;
58
+ width: 50%;
59
+ }
60
+
61
+ .masterpass_checkout-logo {
62
+ float:right;
63
+ margin: 20px 20px 0 0;
64
+ }
65
+
66
+ .masterpass-checkout-link {
67
+ float: right;
68
+ padding: 10px 0 0 0;
69
+ }
70
+
71
+ #masterpass_payment_method {
72
+ height: auto;
73
+ width: auto;
74
+ max-width: 135px;
75
+ max-height: 135px;
76
+ }
77
+
78
+ .masterpass-wrapper {
79
+ width: 240px;
80
+ overflow: hidden;
81
+ display: inline-block;
82
+ }
83
+
84
+ .masterpass-fullcheckout {
85
+ float:left;
86
+ display: inline-block;
87
+ max-width: 67%;
88
+ }
89
+ .masterpass-or-top {
90
+ text-align: center;
91
+ line-height: 37px;
92
+ color: #636363;
93
+ }
94
+
95
+ .masterpass-or-bottom {
96
+ margin: 0 0 2em 0;
97
+ color: #636363;
98
+ }
99
+
100
+ .or-divider {
101
+ line-height: 0.5;
102
+ text-align: center;
103
+ }
104
+
105
+ .masterpass-wrapper-bottom {
106
+ width: 100%;
107
+ }
108
+
109
+ .or-divider span {
110
+ display: inline-block;
111
+ position: relative;
112
+ }
113
+
114
+ .or-divider span:before,
115
+ .or-divider span:after {
116
+ /*content: "";*/
117
+ /*position: absolute;*/
118
+ /*height: 5px;*/
119
+ /*border-bottom: 1px solid #e6e6e6;*/
120
+ /*border-top: 1px solid #e6e6e6;*/
121
+ /*width: 60px;*/
122
+ }
123
+
124
+ .or-divider span:before {
125
+ right: 100%;
126
+ margin-right: 15px;
127
+ }
128
+
129
+ .or-divider span:after {
130
+ left: 100%;
131
+ margin-left: 15px;
132
+ }
133
+
134
+ .masterpass-fullcheckout-bottom {
135
+ padding: 0 0 10px 0;
136
+ }
137
+
138
+ .masterpass-link {
139
+ padding: 3px 0 0 0;
140
+ }
141
+
142
+ .masterpass-checkout {
143
+ height: 180px;
144
+ }
145
+
146
+ .masterpass-wrapper-mini-cart {
147
+ width: 100%;
148
+ }
149
+
150
+ .masterpass-fullcheckout-mini-cart {
151
+ width: 50%;
152
+ margin: 0 auto;
153
+ }
154
+
155
+ #masterpass-cc-data {
156
+ color: #636363;
157
+ border-spacing: 1px;
158
+ }
159
+
160
+ #masterpass-cc-data .label {
161
+ font-weight: bold;
162
+ padding-right: 1em;
163
+ }
164
+
165
+ #masterpass-cc-data .value {
166
+ font-style: italic;
167
+ }
skin/frontend/base/default/images/expercash/mp_buy_with_button.png ADDED
Binary file
skin/frontend/base/default/images/expercash/mp_ident.png ADDED
Binary file
skin/frontend/base/default/js/expercashopc.js ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Expercash Expercash
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL 3.0)
7
+ * that is bundled with this package in the file LICENSE.txt.
8
+ * It is also available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ *
11
+ * DISCLAIMER
12
+ *
13
+ * Do not edit or add to this file if you wish to upgrade this extension to
14
+ * newer versions in the future.
15
+ *
16
+ * @category Expercash
17
+ * @package Expercash_Expercash
18
+ * @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
19
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
20
+ */
21
+ var ExpercashOpc = Class.create(Checkout, {
22
+ initialize: function($super, accordion, urls) {
23
+ this.addressesUrl = urls.addresses;
24
+ this.validateAddressesUrl = urls.validateAddresses;
25
+ this.onAddressLoad = this.fillForm.bindAsEventListener(this);
26
+ this.shippingMethodsUrl = urls.shippingMethods;
27
+ $super(accordion, urls);
28
+ },
29
+ setGuestCheckout: function() {
30
+ $('login:guest').checked = true;
31
+ this.setMethod();
32
+ },
33
+ fillForm: function(transport) {
34
+ var billingElementValues = {};
35
+ var shippingElementValues = {};
36
+ var steps = {};
37
+
38
+ if (transport && transport.responseText){
39
+ try{
40
+ steps = eval('(' + transport.responseText + ')');
41
+ billingElementValues = steps.billing;
42
+ shippingElementValues = steps.shipping;
43
+ }
44
+ catch (e) {
45
+ billingElementValues = {};
46
+ shippingElementValues = {};
47
+ }
48
+ }
49
+
50
+ var arrBillingElements = billingForm.form.getElements().sortBy(function(element) {
51
+ return element.id;
52
+ });
53
+ for (var elemIndex in arrBillingElements) {
54
+ if (arrBillingElements[elemIndex].id) {
55
+ var fieldName = arrBillingElements[elemIndex].id.replace(/^billing:/, '');
56
+
57
+ if (arrBillingElements[elemIndex].type == 'radio') {
58
+ arrBillingElements[elemIndex].checked = billingElementValues[fieldName] ? billingElementValues[fieldName] : '';
59
+ } else {
60
+ arrBillingElements[elemIndex].value = billingElementValues[fieldName] ? billingElementValues[fieldName] : '';
61
+ }
62
+
63
+ if (fieldName == 'country_id') {
64
+ billingRegionUpdater.update();
65
+ }
66
+ }
67
+ }
68
+ var arrShippingElements = shippingForm.form.getElements().sortBy(function(element) {
69
+ return element.id;
70
+ });
71
+ for (var elemIndex in arrShippingElements) {
72
+ if (arrShippingElements[elemIndex].id) {
73
+ var fieldName = arrShippingElements[elemIndex].id.replace(/^shipping:/, '');
74
+ arrShippingElements[elemIndex].value = shippingElementValues[fieldName] ? shippingElementValues[fieldName] : '';
75
+ if (fieldName == 'country_id') {
76
+ shippingRegionUpdater.update();
77
+ }
78
+ }
79
+ }
80
+
81
+ // validate Address
82
+ this.validateAddresses();
83
+ },
84
+ validateAddresses: function() {
85
+ var section = 'shipping_method';
86
+ var request = new Ajax.Request(this.validateAddressesUrl, {
87
+ method: 'get',
88
+ onFailure: this.ajaxFailure.bind(this),
89
+ onSuccess: function(transport) {
90
+ if (transport.responseJSON.error === true) {
91
+ section = transport.responseJSON.goto_section;
92
+
93
+ // call form validator so the fields get highlighted
94
+ // section needs to be opened prior to validation
95
+ if (section == 'shipping') {
96
+ this.gotoSection(section, false);
97
+ shippingForm.validator.validate();
98
+ } else if (section == 'billing') {
99
+ this.gotoSection(section, false);
100
+ billingForm.validator.validate();
101
+ }
102
+
103
+ } else {
104
+ // in case everything is fine, shipping address step is skipped, reload it
105
+ this.reloadProgressBlock('shipping');
106
+ this.fetchShippingMethods();
107
+ }
108
+
109
+ this.gotoSection(section, true);
110
+ }.bind(this)
111
+ });
112
+ },
113
+ fetchAddresses: function() {
114
+ var request = new Ajax.Request(this.addressesUrl, {
115
+ method: 'get',
116
+ onFailure: this.ajaxFailure.bind(this),
117
+ onSuccess: this.onAddressLoad
118
+ });
119
+ },
120
+ fetchShippingMethods: function() {
121
+ var request = new Ajax.Request(this.shippingMethodsUrl, {
122
+ method: 'get',
123
+ onFailure: this.ajaxFailure.bind(this),
124
+ onSuccess: shipping.onSave
125
+ });
126
+ }
127
+ });