Browse Source

Merge branch 'dev'

Conflicts:
	issue_template.md
master v1.3.1
Duke 1 year ago
parent
commit
047c2a0682
  1. 15
      .gitignore
  2. 2
      .travis.yml
  3. 30
      README.md
  4. 73
      application-sdx.qrc
  5. 103
      application.qrc
  6. 24
      build-sdx.sh
  7. 20
      build.sh
  8. 64
      doc/release-process.md
  9. 32
      doc/relnotes/README.md
  10. 7
      issue_template.md
  11. 42
      res-drgx/Info.plist
  12. BIN
      res-drgx/Ubuntu-R.ttf
  13. 13
      res-drgx/appdmg.json
  14. BIN
      res-drgx/connected.gif
  15. BIN
      res-drgx/connectoverinternetcheckbox.png
  16. BIN
      res-drgx/dmgbg.png
  17. BIN
      res-drgx/hush-3.6.0.png
  18. BIN
      res-drgx/hush-dark.png
  19. BIN
      res-drgx/icon.ico
  20. BIN
      res-drgx/liblibsodium.a
  21. BIN
      res-drgx/libsodium.a
  22. BIN
      res-drgx/libsodium.lib
  23. 64
      res-drgx/libsodium/buildlibsodium.sh
  24. BIN
      res-drgx/libsodiumd.lib
  25. BIN
      res-drgx/loading.gif
  26. BIN
      res-drgx/lock_closed.png
  27. BIN
      res-drgx/lock_open.png
  28. BIN
      res-drgx/logo.icns
  29. BIN
      res-drgx/logobig.gif
  30. 38
      res-drgx/mkicns.sh
  31. BIN
      res-drgx/paymentreq.gif
  32. 712
      res-drgx/qt5.natvis
  33. BIN
      res-drgx/remove.png
  34. 6
      res-drgx/resize.sh
  35. BIN
      res-drgx/send.png
  36. BIN
      res-drgx/silentdragon-animated-dark.gif
  37. BIN
      res-drgx/silentdragon-animated-loop-dark.gif
  38. BIN
      res-drgx/silentdragon-animated-loop.gif
  39. BIN
      res-drgx/silentdragon-animated-startup-dark.gif
  40. BIN
      res-drgx/silentdragon-animated-startup.gif
  41. BIN
      res-drgx/silentdragon-animated.gif
  42. 385
      res-drgx/silentdragon.xpm
  43. BIN
      res-drgx/silentdragon_be.qm
  44. 2690
      res-drgx/silentdragon_be.ts
  45. BIN
      res-drgx/silentdragon_bg.qm
  46. 2560
      res-drgx/silentdragon_bg.ts
  47. BIN
      res-drgx/silentdragon_de.qm
  48. 2917
      res-drgx/silentdragon_de.ts
  49. BIN
      res-drgx/silentdragon_es.qm
  50. 2898
      res-drgx/silentdragon_es.ts
  51. BIN
      res-drgx/silentdragon_fi.qm
  52. 2911
      res-drgx/silentdragon_fi.ts
  53. BIN
      res-drgx/silentdragon_fil.qm
  54. 2751
      res-drgx/silentdragon_fil.ts
  55. BIN
      res-drgx/silentdragon_fr.qm
  56. 2945
      res-drgx/silentdragon_fr.ts
  57. BIN
      res-drgx/silentdragon_hr.qm
  58. 2754
      res-drgx/silentdragon_hr.ts
  59. BIN
      res-drgx/silentdragon_id.qm
  60. 2464
      res-drgx/silentdragon_id.ts
  61. BIN
      res-drgx/silentdragon_it.qm
  62. 2897
      res-drgx/silentdragon_it.ts
  63. BIN
      res-drgx/silentdragon_nl.qm
  64. 2686
      res-drgx/silentdragon_nl.ts
  65. BIN
      res-drgx/silentdragon_pl.qm
  66. 2689
      res-drgx/silentdragon_pl.ts
  67. BIN
      res-drgx/silentdragon_pt.qm
  68. 2885
      res-drgx/silentdragon_pt.ts
  69. BIN
      res-drgx/silentdragon_ro.qm
  70. 2752
      res-drgx/silentdragon_ro.ts
  71. BIN
      res-drgx/silentdragon_ru.qm
  72. 2691
      res-drgx/silentdragon_ru.ts
  73. BIN
      res-drgx/silentdragon_sr.qm
  74. 2754
      res-drgx/silentdragon_sr.ts
  75. 1779
      res-drgx/silentdragon_template.ts
  76. BIN
      res-drgx/silentdragon_tr.qm
  77. 2902
      res-drgx/silentdragon_tr.ts
  78. BIN
      res-drgx/silentdragon_uk.qm
  79. 3152
      res-drgx/silentdragon_uk.ts
  80. BIN
      res-drgx/silentdragon_zh.qm
  81. 3037
      res-drgx/silentdragon_zh.ts
  82. BIN
      res-drgx/synced.png
  83. BIN
      res-drgx/transaction0.png
  84. BIN
      res-drgx/transaction2.png
  85. BIN
      res-drgx/transaction_abandoned.png
  86. BIN
      res-drgx/transaction_conflicted.png
  87. BIN
      res-drgx/tropical-hush-square.png
  88. BIN
      res-drgx/tropical-hush.png
  89. BIN
      res-drgx/tx_inout.png
  90. BIN
      res-drgx/tx_input.png
  91. BIN
      res-drgx/tx_mined.png
  92. BIN
      res-drgx/tx_output.png
  93. BIN
      res-drgx/verify.png
  94. BIN
      res-drgx/warning.png
  95. 0
      res-drgx/wormholeconnect.png
  96. BIN
      res-drgx/wxsbanner.bmp
  97. BIN
      res-drgx/wxsdialog.bmp
  98. BIN
      res-drgx/zcashdlogo.gif
  99. 2
      res/css/dark.css
  100. 114
      res/css/dragonx.css
  101. 2
      res/css/light.css
  102. 21
      res/css/midnight.css
  103. BIN
      res/hushdlogo.png
  104. BIN
      res/lock_closed.png
  105. BIN
      res/lock_open.png
  106. BIN
      res/remove.png
  107. BIN
      res/send.png
  108. 811
      res/silentdragon.xpm
  109. BIN
      res/silentdragon_be.qm
  110. 1960
      res/silentdragon_be.ts
  111. 1417
      res/silentdragon_bg.ts
  112. BIN
      res/silentdragon_de.qm
  113. 1561
      res/silentdragon_de.ts
  114. BIN
      res/silentdragon_es.qm
  115. 1503
      res/silentdragon_es.ts
  116. BIN
      res/silentdragon_fi.qm
  117. 1502
      res/silentdragon_fi.ts
  118. BIN
      res/silentdragon_fil.qm
  119. 1429
      res/silentdragon_fil.ts
  120. BIN
      res/silentdragon_fr.qm
  121. 1496
      res/silentdragon_fr.ts
  122. BIN
      res/silentdragon_hr.qm
  123. 1445
      res/silentdragon_hr.ts
  124. BIN
      res/silentdragon_id.qm
  125. 1008
      res/silentdragon_id.ts
  126. BIN
      res/silentdragon_it.qm
  127. 1507
      res/silentdragon_it.ts
  128. BIN
      res/silentdragon_nl.qm
  129. 1485
      res/silentdragon_nl.ts
  130. BIN
      res/silentdragon_pl.qm
  131. 1455
      res/silentdragon_pl.ts
  132. BIN
      res/silentdragon_pt.qm
  133. 1502
      res/silentdragon_pt.ts
  134. BIN
      res/silentdragon_ro.qm
  135. 1435
      res/silentdragon_ro.ts
  136. BIN
      res/silentdragon_ru.qm
  137. 1960
      res/silentdragon_ru.ts
  138. BIN
      res/silentdragon_sr.qm
  139. 1445
      res/silentdragon_sr.ts
  140. 99
      res/silentdragon_template.ts
  141. BIN
      res/silentdragon_tr.qm
  142. 1496
      res/silentdragon_tr.ts
  143. BIN
      res/silentdragon_uk.qm
  144. 1568
      res/silentdragon_uk.ts
  145. BIN
      res/silentdragon_zh.qm
  146. 1520
      res/silentdragon_zh.ts
  147. BIN
      res/synced.png
  148. BIN
      res/transaction0.png
  149. BIN
      res/transaction2.png
  150. BIN
      res/transaction_abandoned.png
  151. BIN
      res/transaction_conflicted.png
  152. BIN
      res/tropical-hush-square.png
  153. BIN
      res/tropical-hush.png
  154. BIN
      res/tx_inout.png
  155. BIN
      res/tx_input.png
  156. BIN
      res/tx_mined.png
  157. BIN
      res/tx_output.png
  158. BIN
      res/verify.png
  159. BIN
      res/warning.png
  160. 4
      run-after-build-sdx.sh
  161. 2
      run-after-build.sh
  162. 13
      silentdragon.pro
  163. 162
      silentdragonx.pro
  164. 2
      src/about.ui
  165. 13
      src/addressbook.cpp
  166. 2
      src/addressbook.h
  167. 2
      src/addresscombo.cpp
  168. 2
      src/addresscombo.h
  169. 28
      src/balancestablemodel.cpp
  170. 2
      src/balancestablemodel.h
  171. 11
      src/bannedpeerstablemodel.cpp
  172. 3
      src/bannedpeerstablemodel.h
  173. 296
      src/connection.cpp
  174. 2
      src/connection.h
  175. 32
      src/connection.ui
  176. 25
      src/createhushconfdialog.ui
  177. 23
      src/fillediconlabel.cpp
  178. 2
      src/fillediconlabel.h
  179. 20
      src/guiconstants.h
  180. 2
      src/logger.cpp
  181. 2
      src/logger.h
  182. 32
      src/main.cpp
  183. 1043
      src/mainwindow.cpp
  184. 41
      src/mainwindow.h
  185. 730
      src/mainwindow.ui
  186. 2
      src/memoedit.cpp
  187. 2
      src/memoedit.h
  188. 16
      src/mobileappconnector.cpp
  189. 24
      src/mobileappconnector.h
  190. 214
      src/mobileappconnector.ui
  191. 47
      src/peerstablemodel.cpp
  192. 2
      src/peerstablemodel.h
  193. 2
      src/precompiled.h
  194. 90
      src/qrcode.ui
  195. 10
      src/qrcodelabel.cpp
  196. 2
      src/qrcodelabel.h
  197. 2
      src/recurring.cpp
  198. 2
      src/recurring.h
  199. 17
      src/requestdialog.cpp
  200. 2
      src/requestdialog.h
  201. 2
      src/requestdialog.ui
  202. 91
      src/rescandialog.ui
  203. 439
      src/rpc.cpp
  204. 28
      src/rpc.h
  205. 2
      src/scripts/docker/Dockerfile
  206. 2
      src/scripts/dotranslations.sh
  207. 62
      src/scripts/dounifiedbuild.ps1
  208. 2
      src/scripts/make-binary-tarball.sh
  209. 86
      src/scripts/make-deb.sh
  210. 2
      src/scripts/make-only-deb.sh
  211. 4
      src/scripts/mkmacdmg.sh
  212. 48
      src/scripts/mkrelease.sh
  213. 2
      src/scripts/signbinaries.sh
  214. 10
      src/scripts/silentdragon.wxs
  215. 5
      src/sd.h
  216. 74
      src/sendtab.cpp
  217. 10
      src/senttxstore.cpp
  218. 2
      src/senttxstore.h
  219. 86
      src/settings.cpp
  220. 23
      src/settings.h
  221. 432
      src/settings.ui
  222. 127
      src/txtablemodel.cpp
  223. 8
      src/txtablemodel.h
  224. 2
      src/validateaddress.cpp
  225. 2
      src/validateaddress.h
  226. 2
      src/version.h
  227. 2
      src/viewalladdresses.cpp
  228. 2
      src/viewalladdresses.h
  229. 910
      src/websockets.cpp
  230. 175
      src/websockets.h
  231. 170
      src/zboard.ui
  232. 24
      win-build-sdx.sh
  233. 38
      win-build.sh

15
.gitignore

@ -6,10 +6,8 @@ docs/website/public
.DS_Store
hushd
IDEWorkspaceChecks.plist
komodo-cli
komodod
hush-cli
hushd
dragonxd
*.mak
Makefile
Makefile.*
@ -19,8 +17,11 @@ release/
res/libsodium.a
res/libsodium.a
res/libsodium/libsodium*
res-drgx/libsodium.a
res-drgx/libsodium.a
res-drgx/libsodium/libsodium*
silentdragon
silentdragon
silentdragonx
silentdragon.pro.user
*.sln
src/precompiled.h.cpp
@ -32,6 +33,6 @@ workspace.code-workspace
x64/
*.xcsettings
*.zip
# compiled translation files can be ignored
*.qm
core
qrc_application-sdx.cpp
silentdragon_plugin_import.cpp

2
.travis.yml

@ -14,7 +14,7 @@ before_install:
# TODO: I usually make builds with 5.14 - Duke
- sudo add-apt-repository ppa:beineri/opt-qt591-trusty -y
- sudo apt-get update -qq
- sudo apt-get install qt59base qt59websockets
- sudo apt-get install qt59base
- source /opt/qt59/bin/qt59-env.sh
- chmod +x res/libsodium/buildlibsodium.sh

30
README.md

@ -34,7 +34,6 @@ bits of data.
* dexstats.info for address utilities
* Address Asset Viewer menu action (optional)
* Convert Address menu action (optional)
* wormhole.hush.is for Wormhole services (optional)
This means your IP address is known to these servers. Enable Tor setting
in SilentDragon to prevent this, or better yet, use TAILS: https://tails.boum.org/
@ -86,7 +85,7 @@ sudo apt-get -y install libglu1-mesa-dev freeglut3-dev mesa-common-dev
You can install the pre-reqs and build on Ubuntu 18.04 & 20.04 with:
```shell script
sudo apt-get -y install qt5-default qt5-qmake libqt5websockets5-dev qtcreator
sudo apt-get -y install qt5-default qt5-qmake qtcreator
git clone https://git.hush.is/hush/SilentDragon
cd SilentDragon
./build.sh linguist
@ -99,7 +98,7 @@ cd SilentDragon
You can install the pre-reqs and build on Arch Linux with:
```shell script
sudo pacman -S qt5-base qt5-tools qtcreator qt5-websockets rust
sudo pacman -S qt5-base qt5-tools qtcreator rust
git clone https://git.hush.is/hush/SilentDragon
cd SilentDragon
./build.sh linguist
@ -142,6 +141,18 @@ make
./SilentDragon.app/Contents/MacOS/SilentDragon
```
### Building SilentDragonX
```
git clone https://git.hush.is/hush/SilentDragon
cd SilentDragon
./build-sdx.sh
./build-sdx.sh linguist # update translations, might not be needed
```
The binary will be called `silentdragonx`
### Emulating the embedded node
In binary releases, SilentDragon will use node binaries in the current directory to sync a node from scratch.
@ -155,7 +166,16 @@ ln -s ../hush3/src/hush-cli
The above assumes silentdragon and hush3 git repos are in the same directory. File names on Windows will need to be tweaked.
### Support
## Where is my wallet stored?
Linux: `~/.hush/HUSH3`
Windows 10: `C:\Documents and Settings\%user\Application Data\Hush` or `C:\Users\%user\AppData\Roaming\Hush`
## Support
For support or other questions, join us on [Telegram](https://hush.is/telegram), or toot at our [Mastodon](https://fosstodon.org/@myhushteam) or join [Telegram Support](https://hush.is/telegram_support) or [file an issue](https://git.hush.is/hush/SilentDragon/issues).
For support or other questions, join us on [Telegram](https://hush.is/telegram), or tweet at [@MyHushTeam](https://twitter.com/MyHushTeam), or toot at our [Mastodon](https://fosstodon.org/@myhushteam) or join [Telegram Support](https://hush.is/telegram_support) or [file an issue](https://git.hush.is/hush/SilentDragon/issues).
## License
GPLv3 or later

73
application-sdx.qrc

@ -0,0 +1,73 @@
<RCC>
<qresource prefix="/fonts">
<file alias="Ubuntu-R.ttf">res-drgx/Ubuntu-R.ttf</file>
</qresource>
<qresource prefix="/icons">
<file alias="connected.gif">res-drgx/connected.gif</file>
<file alias="loading.gif">res-drgx/loading.gif</file>
<file alias="paymentreq.gif">res-drgx/paymentreq.gif</file>
<file alias="icon.ico">res-drgx/icon.ico</file>
<file alias="warning.png">res-drgx/warning.png</file>
<file alias="verify.png">res-drgx/verify.png</file>
<file alias="tx_output.png">res-drgx/tx_output.png</file>
<file alias="tx_mined.png">res-drgx/tx_mined.png</file>
<file alias="tx_input.png">res-drgx/tx_input.png</file>
<file alias="transaction_conflicted.png">res-drgx/transaction_conflicted.png</file>
<file alias="transaction_abandoned.png">res-drgx/transaction_abandoned.png</file>
<file alias="transaction2.png">res-drgx/transaction2.png</file>
<file alias="transaction0.png">res-drgx/transaction0.png</file>
<file alias="synced.png">res-drgx/synced.png</file>
<file alias="send.png">res-drgx/send.png</file>
<file alias="remove.png">res-drgx/remove.png</file>
<file alias="lock_open.png">res-drgx/lock_open.png</file>
<file alias="tx_inout.png">res-drgx/tx_inout.png</file>
<file alias="lock_closed.png">res-drgx/lock_closed.png</file>
</qresource>
<qresource prefix="/img">
<file alias="hushdlogo.png">res/hushdlogo.png</file>
<file alias="logobig.gif">res-drgx/logobig.gif</file>
<file alias="silentdragon-animated.gif">res-drgx/silentdragon-animated.gif</file>
<file alias="silentdragon-animated-dark.gif">res-drgx/silentdragon-animated-dark.gif</file>
<file alias="silentdragon-animated-startup.gif">res-drgx/silentdragon-animated-startup.gif</file>
<file alias="silentdragon-animated-startup-dark.gif">res-drgx/silentdragon-animated-startup-dark.gif</file>
</qresource>
<qresource prefix="/translations">
<file alias="silentdragon_be.qm">res-drgx/silentdragon_be.qm</file>
<file alias="silentdragon_bg.qm">res-drgx/silentdragon_bg.qm</file>
<file alias="silentdragon_de.qm">res-drgx/silentdragon_de.qm</file>
<file alias="silentdragon_es.qm">res-drgx/silentdragon_es.qm</file>
<file alias="silentdragon_fi.qm">res-drgx/silentdragon_fi.qm</file>
<file alias="silentdragon_fil.qm">res-drgx/silentdragon_fil.qm</file>
<file alias="silentdragon_fr.qm">res-drgx/silentdragon_fr.qm</file>
<file alias="silentdragon_hr.qm">res-drgx/silentdragon_hr.qm</file>
<file alias="silentdragon_it.qm">res-drgx/silentdragon_it.qm</file>
<file alias="silentdragon_id.qm">res-drgx/silentdragon_id.qm</file>
<file alias="silentdragon_nl.qm">res-drgx/silentdragon_nl.qm</file>
<file alias="silentdragon_pl.qm">res-drgx/silentdragon_pl.qm</file>
<file alias="silentdragon_pt.qm">res-drgx/silentdragon_pt.qm</file>
<file alias="silentdragon_ro.qm">res-drgx/silentdragon_ro.qm</file>
<file alias="silentdragon_ru.qm">res-drgx/silentdragon_ru.qm</file>
<file alias="silentdragon_sr.qm">res-drgx/silentdragon_sr.qm</file>
<file alias="silentdragon_tr.qm">res-drgx/silentdragon_tr.qm</file>
<file alias="silentdragon_uk.qm">res-drgx/silentdragon_uk.qm</file>
<file alias="silentdragon_zh.qm">res-drgx/silentdragon_zh.qm</file>
</qresource>
<qresource prefix="/css">
<file alias="blue.css">res/css/blue.css</file>
<file alias="dark.css">res/css/dark.css</file>
<file alias="default.css">res/css/default.css</file>
<file alias="light.css">res/css/light.css</file>
<file alias="midnight.css">res/css/midnight.css</file>
<file alias="dragonx.css">res/css/dragonx.css</file>
</qresource>
<qresource prefix="/images/blue">
<file alias="unchecked.png">res/images/blue/unchecked.png</file>
<file alias="checked.png">res/images/blue/checked.png</file>
<file alias="blue_downArrow.png">res/images/blue/blue_downArrow.png</file>
<file alias="blue_downArrow_small.png">res/images/blue/blue_downArrow_small.png</file>
<file alias="blue_upArrow_small.png">res/images/blue/blue_upArrow_small.png</file>
<file alias="blue_leftArrow_small.png">res/images/blue/blue_leftArrow_small.png</file>
<file alias="blue_rightArrow_small.png">res/images/blue/blue_rightArrow_small.png</file>
<file alias="blue_qtreeview_selected.png">res/images/blue/blue_qtreeview_selected.png</file>
</qresource>
</RCC>

103
application.qrc

@ -1,58 +1,73 @@
<RCC>
<qresource prefix="/fonts">
<file>res/Ubuntu-R.ttf</file>
<file alias="Ubuntu-R.ttf">res/Ubuntu-R.ttf</file>
</qresource>
<qresource prefix="/icons">
<file>res/connected.gif</file>
<file>res/loading.gif</file>
<file>res/paymentreq.gif</file>
<file>res/icon.ico</file>
<file alias="connected.gif">res/connected.gif</file>
<file alias="loading.gif">res/loading.gif</file>
<file alias="paymentreq.gif">res/paymentreq.gif</file>
<file alias="icon.ico">res/icon.ico</file>
<file alias="warning.png">res/warning.png</file>
<file alias="verify.png">res/verify.png</file>
<file alias="tx_output.png">res/tx_output.png</file>
<file alias="tx_mined.png">res/tx_mined.png</file>
<file alias="tx_input.png">res/tx_input.png</file>
<file alias="transaction_conflicted.png">res/transaction_conflicted.png</file>
<file alias="transaction_abandoned.png">res/transaction_abandoned.png</file>
<file alias="transaction2.png">res/transaction2.png</file>
<file alias="transaction0.png">res/transaction0.png</file>
<file alias="synced.png">res/synced.png</file>
<file alias="send.png">res/send.png</file>
<file alias="remove.png">res/remove.png</file>
<file alias="lock_open.png">res/lock_open.png</file>
<file alias="tx_inout.png">res/tx_inout.png</file>
<file alias="lock_closed.png">res/lock_closed.png</file>
</qresource>
<qresource prefix="/img">
<file>res/tropical-hush.png</file>
<file>res/tropical-hush-square.png</file>
<file>res/logobig.gif</file>
<file>res/silentdragon-animated.gif</file>
<file>res/silentdragon-animated-dark.gif</file>
<file>res/silentdragon-animated-startup.gif</file>
<file>res/silentdragon-animated-startup-dark.gif</file>
<file alias="hushdlogo.png">res/hushdlogo.png</file>
<file alias="logobig.gif">res/logobig.gif</file>
<file alias="silentdragon-animated.gif">res/silentdragon-animated.gif</file>
<file alias="silentdragon-animated-dark.gif">res/silentdragon-animated-dark.gif</file>
<file alias="silentdragon-animated-startup.gif">res/silentdragon-animated-startup.gif</file>
<file alias="silentdragon-animated-startup-dark.gif">res/silentdragon-animated-startup-dark.gif</file>
</qresource>
<qresource prefix="/translations">
<file>res/silentdragon_be.qm</file>
<file>res/silentdragon_bg.qm</file>
<file>res/silentdragon_de.qm</file>
<file>res/silentdragon_es.qm</file>
<file>res/silentdragon_fi.qm</file>
<file>res/silentdragon_fil.qm</file>
<file>res/silentdragon_fr.qm</file>
<file>res/silentdragon_hr.qm</file>
<file>res/silentdragon_it.qm</file>
<file>res/silentdragon_id.qm</file>
<file>res/silentdragon_nl.qm</file>
<file>res/silentdragon_pl.qm</file>
<file>res/silentdragon_pt.qm</file>
<file>res/silentdragon_ro.qm</file>
<file>res/silentdragon_ru.qm</file>
<file>res/silentdragon_sr.qm</file>
<file>res/silentdragon_tr.qm</file>
<file>res/silentdragon_uk.qm</file>
<file>res/silentdragon_zh.qm</file>
<file alias="silentdragon_be.qm">res/silentdragon_be.qm</file>
<file alias="silentdragon_bg.qm">res/silentdragon_bg.qm</file>
<file alias="silentdragon_de.qm">res/silentdragon_de.qm</file>
<file alias="silentdragon_es.qm">res/silentdragon_es.qm</file>
<file alias="silentdragon_fi.qm">res/silentdragon_fi.qm</file>
<file alias="silentdragon_fil.qm">res/silentdragon_fil.qm</file>
<file alias="silentdragon_fr.qm">res/silentdragon_fr.qm</file>
<file alias="silentdragon_hr.qm">res/silentdragon_hr.qm</file>
<file alias="silentdragon_it.qm">res/silentdragon_it.qm</file>
<file alias="silentdragon_id.qm">res/silentdragon_id.qm</file>
<file alias="silentdragon_nl.qm">res/silentdragon_nl.qm</file>
<file alias="silentdragon_pl.qm">res/silentdragon_pl.qm</file>
<file alias="silentdragon_pt.qm">res/silentdragon_pt.qm</file>
<file alias="silentdragon_ro.qm">res/silentdragon_ro.qm</file>
<file alias="silentdragon_ru.qm">res/silentdragon_ru.qm</file>
<file alias="silentdragon_sr.qm">res/silentdragon_sr.qm</file>
<file alias="silentdragon_tr.qm">res/silentdragon_tr.qm</file>
<file alias="silentdragon_uk.qm">res/silentdragon_uk.qm</file>
<file alias="silentdragon_zh.qm">res/silentdragon_zh.qm</file>
</qresource>
<qresource prefix="/css">
<file>res/css/blue.css</file>
<file>res/css/dark.css</file>
<file>res/css/default.css</file>
<file>res/css/light.css</file>
<file>res/css/midnight.css</file>
<file alias="blue.css">res/css/blue.css</file>
<file alias="dark.css">res/css/dark.css</file>
<file alias="default.css">res/css/default.css</file>
<file alias="light.css">res/css/light.css</file>
<file alias="midnight.css">res/css/midnight.css</file>
<file alias="dragonx.css">res/css/dragonx.css</file>
</qresource>
<qresource prefix="/images/blue">
<file>res/images/blue/unchecked.png</file>
<file>res/images/blue/checked.png</file>
<file>res/images/blue/blue_downArrow.png</file>
<file>res/images/blue/blue_downArrow_small.png</file>
<file>res/images/blue/blue_upArrow_small.png</file>
<file>res/images/blue/blue_leftArrow_small.png</file>
<file>res/images/blue/blue_rightArrow_small.png</file>
<file>res/images/blue/blue_qtreeview_selected.png</file>
<file alias="unchecked.png">res/images/blue/unchecked.png</file>
<file alias="checked.png">res/images/blue/checked.png</file>
<file alias="blue_downArrow.png">res/images/blue/blue_downArrow.png</file>
<file alias="blue_downArrow_small.png">res/images/blue/blue_downArrow_small.png</file>
<file alias="blue_upArrow_small.png">res/images/blue/blue_upArrow_small.png</file>
<file alias="blue_leftArrow_small.png">res/images/blue/blue_leftArrow_small.png</file>
<file alias="blue_rightArrow_small.png">res/images/blue/blue_rightArrow_small.png</file>
<file alias="blue_qtreeview_selected.png">res/images/blue/blue_qtreeview_selected.png</file>
</qresource>
</RCC>

24
build-sdx.sh

@ -0,0 +1,24 @@
#!/bin/bash
# Copyright 2018-2023 The Hush Developers
# Released under the GPLv3
# This builds a binary called "silentdragonx"
set -e
# TODO: not ideal, hushd.exe should only be looked for on windoze
if [ -e "dragonxd" ]; then
echo "Found dragonxd binary"
elif [ -e "hushd.exe" ]; then
echo "Found hushd.exe binary"
else
echo "dragonxd could not be found!"
echo "Either copy the binary to this dir or make a symlink."
echo "This command will create a symlink to it if this repo is in the same directory as your hush3.git: "
echo "ln -s ../hush3/src/dragonxd"
echo "For windoze you should copy hushd.exe to this directory"
exit 1
fi
# Use a modified QT project file with same build.sh
SDCONF=silentdragonx.pro ./build.sh $@

20
build.sh

@ -1,5 +1,5 @@
#!/bin/bash
# Copyright 2018-2021 The Hush Developers
# Copyright 2018-2022 The Hush Developers
# Released under the GPLv3
set -e
@ -15,15 +15,13 @@ else
JOBS=1
fi
# Check if qmake is installed on system and exits if it is not
if ! [ -x "$(command -v qmake)" ]; then
echo 'Error: qmake is not installed. Install qmake and try again.' >&2
exit 1
fi
VERSION=$(cat src/version.h |cut -d\" -f2)
echo "Compiling SilentDragon $VERSION with $JOBS threads..."
CONF=silentdragon.pro
CONF=${SDCONF:-silentdragon.pro}
WALLET="SilentDragon"
if [ "$CONF" == "silentdragonx.pro" ] ; then
WALLET="SilentDragonX"
fi
echo "Compiling $WALLET $VERSION with $JOBS threads..."
if ! command -v qmake &> /dev/null
then
@ -31,12 +29,14 @@ then
exit 1
fi
qmake --version
if ! command -v make &> /dev/null
then
echo "make could not be found. Please install it and try again."
exit 1
fi
make --version
qbuild () {
qmake $CONF -spec linux-clang CONFIG+=debug

64
doc/release-process.md

@ -0,0 +1,64 @@
# SilentDragon Release Process
## High-Level Philosophy
Beware of making high-risk changes too close to a new release, because they will not get as much testing as they should. Don't merge large branches which haven't undergone lots of testing just before a release.
It is best to keep doc/relnotes/README.md up to date as changes and bug fixes are made. It's more work to summarize all changes and bugfixes just before the release.
## Check for changes on master that should be on dev
See https://git.hush.is/hush/hush3/src/branch/master/doc/release-process.md#check-for-changes-on-master-that-should-be-on-dev , there is no sense repeating the exact same thing here.
## Dealing with merge conflicts
SD very often has merge conflicts in generated translation files, because QT embeds line numbers in XML. So even if you don't change translations, but add or remove even a single line from SD source code, it can change the XML. If there are actual changes to translations on both master and dev, you are out of luck and they need to be manually dealt with. But if you want to just use whatever is on master, you can do this:
```
git checkout dev
# this assumes you are using the remote called "origin"
git pull origin dev # make sure it is up to date
git merge --no-ff -X theirs master
```
The last command uses the "theirs" merge strategy option to the "recursive" merge strategy, which is default. See "git help merge" for more details.
If you have a messed up merge or you don't want to deal with conflicts right now, you can do `git merge --abort` to cancel a merge.
## Git Issues
Look for Git issues that should be fixed in the next release: https://git.hush.is/hush/SilentDragon/issues Especially low-risk and simple things and like documentation changes, improvements to error messages. Take note that changing strings in the source code, such as adding a new string or changing an existing one, will affect translations.
## Translations
...
```
# update generated translation data
./build.sh linguist
git commit -am "update translations"
git push
```
## Release process
* Update version in src/version.h
* Sometimes the `dev` branch already has the new version and this is done already
* Verify a full build works correctly: `./build.sh clean; ./build.sh`
* Merge dev branch into master
* Make a new Gitea release from master branch
* There is an option for Gitea to automate making a new Git tag as well
* SD requires a staticly compiled version of QT for release binaries
* If it isn't, the binary will resort to using the system QT which is usually a different version and the binary will not work
* Make linux binaries:
```
# QT_STATIC is a directory with a staticly compiled qt5.x
# HUSH_DIR is a directory containing hushd/hush-cli binaries
# APP_VERSION is the version being released in git tag format (prepended v), such as v1.3.1
QT_STATIC=$HOME/src/qt5 APP_VERSION=vX.Y.Z HUSH_DIR=$HOME/git/hush3 src/scripts/mkrelease.sh
```
* Make linux binary tarball: `./src/scripts/make-binary-tarball.sh`
* Upload to gitea release
* Make debian package with `./src/scripts/make-deb.sh`
* Upload to gitea release

32
doc/relnotes/README.md

@ -10,6 +10,38 @@ and no longer on Github, since they banned Duke Leto and
also because they censor many people around the world and work with
evil organizations.
# SilentDragon 1.3.1 "Omnicompetent Okapi"
```
233 files changed, 77483 insertions(+), 16095 deletions(-)
```
* SD is now able to be a GUI wallet for DragonX, which is called SilentDragonX (SDX).
* This is the very first GUI wallet for a Hush Smart Chain and we believe DragonX users will really enjoy it.
* SDX also includes a Mining tab which allows users to mine via a GUI, no more CLI required to mine!
* The mining tab has been translated into:
* Chinese (ZH)
* German (DE)
* Russian (RU)
* Spanish (ES)
* Ukrainian (UK)
* You now can choose a language translation while the wallet is running in Settings. You no longer need to use the same language as the operating system uses. All currently supported translations are options in a dropdown list.
* New icons for for different kinds of transactions in the Transaction tab
* Previously only port 9050 was supported for proxying via Tor. This would not work with any custom port, or with Tor Browser which uses port 9150. SD now supports a custom proxy port and supports being used with the Tor proxy provided with Tor Browser. This means users can install Tor via a GUI use a Hush GUI wallet with Tor, without ever using the CLI
* SD now gives options to view or copy link to a transaction on a Tor block explorer
* A customized Tor explorer URL can now be set in Settings
* Rescan progress will now be reported in the status bar
* Pairing to the old SilentDragonAndroid (SDA) app has been removed. The new SDA does not need to pair to a desktop wallet.
* Various fixes to support Mac systems with embedded hushd
* Rescan from an arbitrary block height without restarting
* Get a QR code by right-clicking on a zaddr and optionally save to disk
* Make it easier to reply to a memo
* Fix coredump when going to Settings during a rescan
* Ability to manually ban a node, unban a node, or unban all nodes
* More efficiently check for new transactions
* Add HUSH logo to QR codes
* "Report a Bug" menu item now goes to our Telegram Support group
# SilentDragon 1.3.0 "Berserk Bonnacon"
```

7
issue_template.md

@ -7,8 +7,8 @@ assignees: ''
---
Please make sure you have the latest SilentDragonLite and let us
know if you have any non-default settings.
Let us know which version of SilentDragon you have and if you have any non-default settings.
Also let us know if you compiled it yourself, or you are using Debian package or official binaries.
**Describe the bug**
A clear and concise description of what the bug is.
@ -24,7 +24,8 @@ Steps to reproduce the behavior:
A clear and concise description of what you expected to happen.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- OS: [e.g. Linux/Windows/Mac]
- OS version
**Additional context**
Add any other context about the problem here.

42
res-drgx/Info.plist

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>SilentDragonX</string>
<key>CFBundleGetInfoString</key>
<string>Created by Qt/QMake</string>
<key>CFBundleIconFile</key>
<string>logo.icns</string>
<key>CFBundleIdentifier</key>
<string>com.hush.silentdragonx</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>LSMinimumSystemVersion</key>
<string>10.11</string>
<key>NOTE</key>
<string>This file was generated by Qt/QMake.</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>NSSupportsAutomaticGraphicsSwitching</key>
<true/>
<key>NSRequiresAquaSystemAppearance</key>
<string>YES</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>drgx URI</string>
<key>CFBundleURLSchemes</key>
<array>
<string>drgx</string>
</array>
</dict>
</array>
<key>NSUIElement</key>
<true/>
</dict>
</plist>

BIN
res-drgx/Ubuntu-R.ttf

Binary file not shown.

13
res-drgx/appdmg.json

@ -0,0 +1,13 @@
{
"title": "silentdragon-vRELEASE_VERSION",
"icon": "logo.icns",
"background": "dmgbg.png",
"window" : {
"size" : { "width" : 600, "height" : 100},
"position" : { "x" : 200, "y" : 200}
},
"contents": [
{ "x": 448, "y": 80, "type": "link", "path": "/Applications" },
{ "x": 152, "y": 80, "type": "file", "path": "silentdragon.app" }
]
}

BIN
res-drgx/connected.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
res-drgx/connectoverinternetcheckbox.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
res-drgx/dmgbg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
res-drgx/hush-3.6.0.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
res-drgx/hush-dark.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
res-drgx/icon.ico

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
res-drgx/liblibsodium.a

Binary file not shown.

BIN
res-drgx/libsodium.a

Binary file not shown.

BIN
res-drgx/libsodium.lib

Binary file not shown.

64
res-drgx/libsodium/buildlibsodium.sh

@ -0,0 +1,64 @@
#!/bin/bash
# Copyright (c) 2019-2021 The Hush developers
# Released under the GPLv3
VERSION=1.0.18
LIB="libsodium"
DIR="$LIB-$VERSION"
FILE="$DIR.tar.gz"
URL=https://github.com/MyHush/libsodium/releases/download/${VERSION}/${FILE}
SHA=6f504490b342a4f8a4c4a02fc9b866cbef8622d5df4e5452b46be121e46636c1
# First thing to do is see if libsodium.a exists in the res folder. If it does, then there's nothing to do
if [ -f res/${LIB}.a ]; then
exit 0
fi
echo "Building $LIB"
# Go into the libsodium directory
cd res/$LIB
if [ ! -f $FILE ]; then
curl -LO $URL
fi
echo "$SHA $FILE" | shasum -a 256 --check
# TWO SPACES or sadness sometimes:
# https://unix.stackexchange.com/questions/139891/why-does-verifying-sha256-checksum-with-sha256sum-fail-on-debian-and-work-on-u
echo "$SHA $FILE" | shasum -a 256 --check --status
if [ $? -ne 0 ]; then
FOUNDSHA=$(shasum -a 256 $FILE)
echo "SHA256 mismatch on $FILE!"
echo "$FOUNDSHA did not match $SHA . Aborting..."
exit 1
fi
if [ ! -d $DIR ]; then
tar xf $FILE
fi
# Try to use full core count to build
if [ "$UNAME" == "Linux" ] ; then
JOBS=$(nproc)
elif [ "$UNAME" == "FreeBSD" ] ; then
JOBS=$(nproc)
elif [ "$UNAME" == "Darwin" ] ; then
JOBS=$(sysctl -n hw.ncpu)
else
JOBS=4
fi
# Now build it
cd $DIR
LIBS="" ./configure
make clean
echo "Building $LIB with $JOBS cores..."
if [[ "$OSTYPE" == "darwin"* ]]; then
make CFLAGS="-mmacosx-version-min=10.11" CPPFLAGS="-mmacosx-version-min=10.11" -j$JOBS
else
make -j$JOBS
fi
cd ..
# copy the library to the parents's res/ folder
cp $DIR/src/libsodium/.libs/libsodium.a ../

BIN
res-drgx/libsodiumd.lib

Binary file not shown.

BIN
res-drgx/loading.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

BIN
res-drgx/lock_closed.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

BIN
res-drgx/lock_open.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
res-drgx/logo.icns

Binary file not shown.

BIN
res-drgx/logobig.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

38
res-drgx/mkicns.sh

@ -0,0 +1,38 @@
#!/usr/bin/env bash
###
# Adapted from: https://stackoverflow.com/a/20703594
###
if [ -z "${1+set}" ]; then
echo "Pass path to the inkscape command as first argument"
exit 1
fi
if [ -z "${2+set}" ]; then
echo "Pass svg file as second argument"
exit 1
fi
if [ -z "${3+set}" ]; then
echo "Pass output name (w/o .icns) as third argument"
exit 1
fi
inkscape=$1
svg_file=$2
output_name=$3
set -e
mkdir $output_name.iconset
$inkscape -z -e "$PWD/$output_name.iconset/icon_16x16.png" -w 16 -h 16 -y 0 "$PWD/$svg_file"
$inkscape -z -e "$PWD/$output_name.iconset/icon_16x16@2x.png" -w 32 -h 32 -y 0 "$PWD/$svg_file"
$inkscape -z -e "$PWD/$output_name.iconset/icon_32x32.png" -w 32 -h 32 -y 0 "$PWD/$svg_file"
$inkscape -z -e "$PWD/$output_name.iconset/icon_32x32@2x.png" -w 64 -h 64 -y 0 "$PWD/$svg_file"
$inkscape -z -e "$PWD/$output_name.iconset/icon_128x128.png" -w 128 -h 128 -y 0 "$PWD/$svg_file"
$inkscape -z -e "$PWD/$output_name.iconset/icon_128x128@2x.png" -w 256 -h 256 -y 0 "$PWD/$svg_file"
$inkscape -z -e "$PWD/$output_name.iconset/icon_256x256.png" -w 256 -h 256 -y 0 "$PWD/$svg_file"
$inkscape -z -e "$PWD/$output_name.iconset/icon_256x256@2x.png" -w 512 -h 512 -y 0 "$PWD/$svg_file"
$inkscape -z -e "$PWD/$output_name.iconset/icon_512x512.png" -w 512 -h 512 -y 0 "$PWD/$svg_file"
$inkscape -z -e "$PWD/$output_name.iconset/icon_512x512@2x.png" -w 1024 -h 1024 -y 0 "$PWD/$svg_file"
iconutil -c icns "$output_name.iconset"
rm -R "$output_name.iconset"

BIN
res-drgx/paymentreq.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

712
res-drgx/qt5.natvis

@ -0,0 +1,712 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt VS Tools.
**
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************
-->
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<Type Name="QPoint">
<AlternativeType Name="QPointF"/>
<DisplayString>{{ x = {xp}, y = {yp} }}</DisplayString>
<Expand>
<Item Name="[x]">xp</Item>
<Item Name="[y]">yp</Item>
</Expand>
</Type>
<Type Name="QRect">
<DisplayString>{{ x = {x1}, y = {y1}, width = {x2 - x1 + 1}, height = {y2 - y1 + 1} }}</DisplayString>
<Expand>
<Item Name="[x]">x1</Item>
<Item Name="[y]">y1</Item>
<Item Name="[width]">x2 - x1 + 1</Item>
<Item Name="[height]">y2 - y1 + 1</Item>
</Expand>
</Type>
<Type Name="QRectF">
<DisplayString>{{ x = {xp}, y = {yp}, width = {w}, height = {h} }}</DisplayString>
<Expand>
<Item Name="[x]">xp</Item>
<Item Name="[y]">yp</Item>
<Item Name="[width]">w</Item>
<Item Name="[height]">h</Item>
</Expand>
</Type>
<Type Name="QSize">
<AlternativeType Name="QSizeF"/>
<DisplayString>{{ width = {wd}, height = {ht} }}</DisplayString>
<Expand>
<Item Name="[width]">wd</Item>
<Item Name="[height]">ht</Item>
</Expand>
</Type>
<Type Name="QLine">
<AlternativeType Name="QLineF"/>
<DisplayString>{{ start point = {pt1}, end point = {pt2} }}</DisplayString>
<Expand>
<Synthetic Name="[start point]">
<DisplayString>{pt1}</DisplayString>
<Expand>
<ExpandedItem>pt1</ExpandedItem>
</Expand>
</Synthetic>
<Synthetic Name="[end point]">
<DisplayString>{pt2}</DisplayString>
<Expand>
<ExpandedItem>pt2</ExpandedItem>
</Expand>
</Synthetic>
</Expand>
</Type>
<Type Name="QPolygon">
<DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
<Expand>
<Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
<ArrayItems>
<Size>d-&gt;size</Size>
<ValuePointer>(QPoint*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)</ValuePointer>
</ArrayItems>
</Expand>
</Type>
<Type Name="QPolygonF">
<DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
<Expand>
<Item Name="[closed]">
d-&gt;size &gt; 0
&amp;&amp; ((((QPointF*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)[0]).xp
== (((QPointF*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)[d-&gt;size - 1]).xp)
&amp;&amp; ((((QPointF*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)[0]).yp
== (((QPointF*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)[d-&gt;size - 1]).yp)
</Item>
<Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
<ArrayItems>
<Size>d-&gt;size</Size>
<ValuePointer>(QPointF*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)</ValuePointer>
</ArrayItems>
</Expand>
</Type>
<Type Name ="QVector2D">
<DisplayString>{{ x = {xp}, y = {yp} }}</DisplayString>
<Expand>
<Item Name="[x]">xp</Item>
<Item Name="[y]">yp</Item>
</Expand>
</Type>
<Type Name ="QVector3D">
<DisplayString>{{ x = {xp}, y = {yp}, z = {zp} }}</DisplayString>
<Expand>
<Item Name="[x]">xp</Item>
<Item Name="[y]">yp</Item>
<Item Name="[z]">zp</Item>
</Expand>
</Type>
<Type Name ="QVector4D">
<DisplayString>{{ x = {xp}, y = {yp}, z = {zp}, w = {wp} }}</DisplayString>
<Expand>
<Item Name="[x]">xp</Item>
<Item Name="[y]">yp</Item>
<Item Name="[z]">zp</Item>
<Item Name="[w]">wp</Item>
</Expand>
</Type>
<Type Name ="QMatrix">
<DisplayString>
{{ m11 = {_m11}, m12 = {_m12}, m21 = {_m21}, m22 = {_m22}, ... }}
</DisplayString>
<Expand>
<Item Name="[m11]">_m11</Item>
<Item Name="[m12]">_m12</Item>
<Item Name="[m21]">_m21</Item>
<Item Name="[m22]">_m22</Item>
<Item Name="[dx]">_dx</Item>
<Item Name="[dy]">_dy</Item>
</Expand>
</Type>
<Type Name ="QMatrix4x4">
<DisplayString>
{{ m11 = {m[0][0]}, m12 = {m[1][0]}, m13 = {m[2][0]}, m14 = {m[3][0]}, ... }}
</DisplayString>
<Expand>
<Item Name="[m11]">m[0][0]</Item>
<Item Name="[m12]">m[1][0]</Item>
<Item Name="[m13]">m[2][0]</Item>
<Item Name="[m14]">m[3][0]</Item>
<Item Name="[m21]">m[0][1]</Item>
<Item Name="[m22]">m[1][1]</Item>
<Item Name="[m23]">m[2][1]</Item>
<Item Name="[m24]">m[3][1]</Item>
<Item Name="[m31]">m[0][2]</Item>
<Item Name="[m32]">m[1][2]</Item>
<Item Name="[m33]">m[2][2]</Item>
<Item Name="[m34]">m[3][2]</Item>
<Item Name="[m41]">m[0][3]</Item>
<Item Name="[m42]">m[1][3]</Item>
<Item Name="[m43]">m[2][3]</Item>
<Item Name="[m44]">m[3][3]</Item>
</Expand>
</Type>
<Type Name="QSizePolicy">
<DisplayString>
{{ horizontal = {static_cast&lt;Policy&gt;(bits.horPolicy)}, vertical = {static_cast&lt;Policy&gt;(bits.verPolicy)}, type = {ControlType(1 &lt;&lt; bits.ctype)} }}
</DisplayString>
<Expand>
<Synthetic Name="[vertical policy]">
<DisplayString>QSizePolicy::Policy::{static_cast&lt;Policy&gt;(bits.verPolicy)}</DisplayString>
</Synthetic>
<Synthetic Name="[horizontal policy]">
<DisplayString>QSizePolicy::Policy::{static_cast&lt;Policy&gt;(bits.horPolicy)}</DisplayString>
</Synthetic>
<Synthetic Name="[control type]">
<DisplayString>QSizePolicy::ControlType::{ControlType(1 &lt;&lt; bits.ctype)}</DisplayString>
</Synthetic>
<Synthetic Name="[expanding directions]">
<DisplayString
Condition="(static_cast&lt;Policy&gt;(bits.verPolicy) &amp; ExpandFlag)">
Qt::Vertical (2)
</DisplayString>
<DisplayString
Condition="(static_cast&lt;Policy&gt;(bits.horPolicy) &amp; ExpandFlag)">
Qt::Horizontal (1)
</DisplayString>
</Synthetic>
<Item Name="[vertical stretch]">static_cast&lt;int&gt;(bits.verStretch)</Item>
<Item Name="[horizontal stretch]">static_cast&lt;int&gt;(bits.horStretch)</Item>
<Item Name="[has height for width]">bits.hfw == 1</Item>
<Item Name="[has width for height]">bits.wfh == 1</Item>
</Expand>
</Type>
<Type Name="QChar">
<DisplayString>{ucs,c}</DisplayString>
<StringView>ucs,c</StringView>
<Expand>
<Item Name="[latin 1]">ucs > 0xff ? '\0' : char(ucs),c</Item>
<Item Name="[unicode]">ucs,c</Item>
</Expand>
</Type>
<Type Name="QString">
<DisplayString>{((reinterpret_cast&lt;unsigned short*&gt;(d)) + d->offset / 2),sub}</DisplayString>
<StringView>((reinterpret_cast&lt;unsigned short*&gt;(d)) + d->offset / 2),sub</StringView>
<Expand>
<Item Name="[size]">d-&gt;size</Item>
<Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
<ArrayItems>
<Size>d-&gt;size</Size>
<ValuePointer>((reinterpret_cast&lt;unsigned short*&gt;(d)) + d->offset / 2),c</ValuePointer>
</ArrayItems>
</Expand>
</Type>
<Type Name="QByteArray">
<DisplayString>{((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset),sb}</DisplayString>
<StringView>((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset),sb</StringView>
<Expand>
<Item Name="[size]">d-&gt;size</Item>
<Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
<ArrayItems>
<Size>d-&gt;size</Size>
<ValuePointer>((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset),c</ValuePointer>
</ArrayItems>
</Expand>
</Type>
<Type Name="QBitArray">
<DisplayString>{{ size = {(d.d-&gt;size &lt;&lt; 3) - *((reinterpret_cast&lt;char*&gt;(d.d)) + d.d-&gt;offset)} }}</DisplayString>
<Expand>
<Item Name="[referenced]">d.d-&gt;ref.atomic._q_value</Item>
<IndexListItems>
<Size>(d.d-&gt;size &lt;&lt; 3) - *((reinterpret_cast&lt;char*&gt;(d.d)) + d.d-&gt;offset)</Size>
<ValueNode>
(*(reinterpret_cast&lt;const unsigned char*&gt;((reinterpret_cast&lt;char*&gt;(d.d)) + d.d-&gt;offset) + 1
+ ($i &gt;&gt; 3)) &amp; (1 &lt;&lt; ($i &amp; 7))) != 0
</ValueNode>
</IndexListItems>
</Expand>
</Type>
<Type Name="QVarLengthArray&lt;*&gt;">
<AlternativeType Name="QVarLengthArray&lt;*, int&gt;"/>
<DisplayString>{{ size = {s} }}</DisplayString>
<Expand>
<Item Name="[capacity]">a</Item>
<ArrayItems>
<Size>s</Size>
<ValuePointer>ptr</ValuePointer>
</ArrayItems>
</Expand>
</Type>
<Type Name="QDate">
<DisplayString>{{ julian day = {jd} }}</DisplayString>
<Expand></Expand>
</Type>
<Type Name="QTime">
<DisplayString
Condition="mds == 1">{{ millisecond = {mds} }}</DisplayString>
<DisplayString
Condition="mds != 1">{{ milliseconds = {mds} }}</DisplayString>
<Expand>
<Item Name="[hour]"
Condition="(mds / 3600000) == 1">mds / 3600000, d</Item>
<Item Name="[hours]"
Condition="(mds / 3600000) != 1">mds / 3600000, d</Item>
<Item Name="[minute]"
Condition="((mds % 3600000) / 60000) == 1">(mds % 3600000) / 60000, d</Item>
<Item Name="[minutes]"
Condition="((mds % 3600000) / 60000) != 1">(mds % 3600000) / 60000, d</Item>
<Item Name="[second]"
Condition="((mds / 1000) % 60) == 1">(mds / 1000) % 60, d</Item>
<Item Name="[seconds]"
Condition="((mds / 1000) % 60) != 1">(mds / 1000) % 60, d</Item>
<Item Name="[millisecond]"
Condition="(mds % 1000) == 1">mds % 1000, d</Item>
<Item Name="[milliseconds]"
Condition="(mds % 1000) != 1">mds % 1000, d</Item>
</Expand>
</Type>
<Type Name="QRegularExpression">
<DisplayString>{d.pattern}</DisplayString>
</Type>
<Type Name="QSharedData">
<Expand>
<Item Name="[referenced]">ref._q_value</Item>
</Expand>
</Type>
<Type Name="QSharedPointer&lt;*&gt;">
<DisplayString>strong reference to shared pointer of type {"$T1"}</DisplayString>
<Expand>
<Item Name="[is null]">value == 0</Item>
<Item Name="[weak referenced]">d-&gt;weakref._q_value</Item>
<Item Name="[strong referenced]">d-&gt;strongref._q_value</Item>
</Expand>
</Type>
<Type Name="QSharedDataPointer&lt;*&gt;">
<DisplayString>pointer to implicit shared object of type {"$T1"}</DisplayString>
<Expand>
<ExpandedItem>d</ExpandedItem>
</Expand>
</Type>
<Type Name="QExplicitlySharedDataPointer&lt;*&gt;">
<DisplayString>pointer to explicit shared object of type {"$T1"}</DisplayString>
<Expand>
<ExpandedItem>d</ExpandedItem>
</Expand>
</Type>
<Type Name="QPointer&lt;*&gt;">
<DisplayString>guarded pointer to subclass of QObject of type {"$T1"}</DisplayString>
<Expand>
<Item Name="[is null]">wp.d == 0 || wp.d-&gt;strongref._q_value == 0 || wp.value == 0</Item>
</Expand>
</Type>
<Type Name="QWeakPointer&lt;*&gt;">
<DisplayString>weak reference to shared pointer of type {"$T1"}</DisplayString>
<Expand>
<Item Name="[is null]">d == 0 || d-&gt;strongref._q_value == 0 || value == 0</Item>
<Item Name="[weak referenced]">d-&gt;weakref._q_value</Item>
<Item Name="[strong referenced]">d-&gt;strongref._q_value</Item>
</Expand>
</Type>
<Type Name="QScopedPointer&lt;*&gt;">
<DisplayString>scoped pointer to a dynamically allocated object of type {"$T1"}</DisplayString>
<Expand>
<Item Name="[is null]">!d</Item>
</Expand>
</Type>
<Type Name="QScopedArrayPointer&lt;*&gt;">
<DisplayString>scoped pointer to dynamically allocated array of objects of type {"$T1"}</DisplayString>
<Expand>
<Item Name="[is null]">!d</Item>
</Expand>
</Type>
<Type Name="QPair&lt;*,*&gt;">
<DisplayString>({first}, {second})</DisplayString>
<Expand>
<Item Name="[first]">first</Item>
<Item Name="[second]">second</Item>
</Expand>
</Type>
<Type Name="QVector&lt;*&gt;">
<AlternativeType Name="QStack&lt;*&gt;"></AlternativeType>
<DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
<Expand>
<Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
<ArrayItems>
<Size>d-&gt;size</Size>
<ValuePointer>($T1*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)</ValuePointer>
</ArrayItems>
</Expand>
</Type>
<Type Name="QList&lt;*&gt;">
<AlternativeType Name="QStringList"></AlternativeType>
<AlternativeType Name="QQueue&lt;*&gt;"></AlternativeType>
<DisplayString>{{ size = {d-&gt;end - d-&gt;begin} }}</DisplayString>
<Expand>
<Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
<IndexListItems>
<Size>d-&gt;end - d-&gt;begin</Size>
<ValueNode>*reinterpret_cast&lt;$T1*&gt;((sizeof($T1) &gt; sizeof(void*))
? reinterpret_cast&lt;Node*&gt;(d->array + d->begin + $i)->v
: reinterpret_cast&lt;$T1*&gt;(d->array + d->begin + $i))
</ValueNode>
</IndexListItems>
</Expand>
</Type>
<Type Name="QLinkedList&lt;*&gt;">
<DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
<Expand>
<Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
<LinkedListItems>
<Size>d-&gt;size</Size>
<HeadPointer>d-&gt;n</HeadPointer>
<NextPointer>n</NextPointer>
<ValueNode>(*(QLinkedListNode&lt;$T1&gt;*)this).t</ValueNode>
</LinkedListItems>
</Expand>
</Type>
<Type Name="QMapNode&lt;*,*&gt;">
<DisplayString>({key}, {value})</DisplayString>
<Expand>
<Item Name="[key]">key</Item>
<Item Name="[value]">value</Item>
</Expand>
</Type>
<Type Name="QMap&lt;*,*&gt;">
<AlternativeType Name="QMultiMap&lt;*,*&gt;"/>
<DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
<Expand>
<Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
<TreeItems>
<Size>d-&gt;size</Size>
<HeadPointer>d-&gt;header.left</HeadPointer>
<LeftPointer>left</LeftPointer>
<RightPointer>right</RightPointer>
<ValueNode>*((QMapNode&lt;$T1,$T2&gt;*)this)</ValueNode>
</TreeItems>
</Expand>
</Type>
<Type Name="QHashNode&lt;*,*&gt;">
<DisplayString Condition="next == 0">(empty)</DisplayString>
<DisplayString Condition="next != 0">({key}, {value})</DisplayString>
<Expand>
<Item Name="[key]" Condition="next != 0">key</Item>
<Item Name="[value]" Condition="next != 0">value</Item>
</Expand>
</Type>
<Type Name="QHash&lt;*,*&gt;">
<AlternativeType Name="QMultiHash&lt;*,*&gt;"/>
<DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
<Expand>
<Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
<IndexListItems>
<Size>d-&gt;numBuckets</Size>
<ValueNode>*((QHashNode&lt;$T1,$T2&gt;*)d-&gt;buckets[$i])</ValueNode>
</IndexListItems>
</Expand>
</Type>
<Type Name="QHashNode&lt;*,QHashDummyValue&gt;">
<DisplayString Condition="next == 0">(empty)</DisplayString>
<DisplayString Condition="next != 0">({key})</DisplayString>
<Expand>
<Item Name="[key]" Condition="next != 0">key</Item>
</Expand>
</Type>
<Type Name="QSet&lt;*&gt;">
<DisplayString>{{ size = {q_hash.d-&gt;size} }}</DisplayString>
<Expand>
<ExpandedItem>q_hash</ExpandedItem>
</Expand>
</Type>
<Type Name="QCache&lt;*,*&gt;::Node">
<DisplayString>({*keyPtr}, {*t})</DisplayString>
<Expand>
<Item Name="[key]">*keyPtr</Item>
<Item Name="[value]">*t</Item>
</Expand>
</Type>
<Type Name="QCache&lt;*,*&gt;">
<DisplayString>{{ size = {hash.d-&gt;size} }}</DisplayString>
<Expand>
<Item Name="[max coast]">mx</Item>
<Item Name="[total coast]">total</Item>
<Item Name="[referenced]">hash.d-&gt;ref.atomic._q_value</Item>
<LinkedListItems>
<Size>hash.d-&gt;size</Size>
<HeadPointer>f</HeadPointer>
<NextPointer>n</NextPointer>
<ValueNode>*((Node*)this)</ValueNode>
</LinkedListItems>
</Expand>
</Type>
<Type Name="QVariant">
<!--Region DisplayString QVariant-->
<DisplayString Condition="d.type == QMetaType::UnknownType">Invalid</DisplayString>
<DisplayString Condition="d.type == QMetaType::Bool">{d.data.b}</DisplayString>
<DisplayString Condition="d.type == QMetaType::Int">{d.data.i}</DisplayString>
<DisplayString Condition="d.type == QMetaType::UInt">{d.data.u}</DisplayString>
<DisplayString Condition="d.type == QMetaType::LongLong">{d.data.ll}</DisplayString>
<DisplayString Condition="d.type == QMetaType::ULongLong">{d.data.ull}</DisplayString>
<DisplayString Condition="d.type == QMetaType::Double">{d.data.d}</DisplayString>
<DisplayString Condition="d.type == QMetaType::QChar">{d.data.c}</DisplayString>
<DisplayString Condition="d.type == QMetaType::QVariantMap">
{*((QMap&lt;QString,QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
</DisplayString>
<DisplayString Condition="d.type == QMetaType::QVariantList">
{*((QList&lt;QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
</DisplayString>
<DisplayString Condition="d.type == QMetaType::QString">
{*((QString*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
</DisplayString>
<DisplayString Condition="d.type == QMetaType::QStringList">
{*((QStringList*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
</DisplayString>
<DisplayString Condition="d.type == QMetaType::QByteArray">
{*((QByteArray*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
</DisplayString>
<DisplayString Condition="d.type == QMetaType::QBitArray">
{*((QBitArray*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
</DisplayString>
<DisplayString Condition="d.type == QMetaType::QDate">
{*((QDate*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
</DisplayString>
<DisplayString Condition="d.type == QMetaType::QTime">
{*((QTime*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
</DisplayString>
<DisplayString Condition="d.type == QMetaType::QDateTime">DateTime</DisplayString>
<DisplayString Condition="d.type == QMetaType::QUrl">Url</DisplayString>
<DisplayString Condition="d.type == QMetaType::QLocale">Locale</DisplayString>
<DisplayString Condition="d.type == QMetaType::QRect">
{*((QRect*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
</DisplayString>
<DisplayString Condition="d.type == QMetaType::QRectF">
{*((QRectF*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
</DisplayString>
<DisplayString Condition="d.type == QMetaType::QSize">
{*((QSize*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
</DisplayString>
<DisplayString Condition="d.type == QMetaType::QSizeF">
{*((QSizeF*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
</DisplayString>
<DisplayString Condition="d.type == QMetaType::QLine">
{*((QLine*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
</DisplayString>
<DisplayString Condition="d.type == QMetaType::QLineF">
{*((QLineF*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
</DisplayString>
<DisplayString Condition="d.type == QMetaType::QPoint">
{*((QPoint*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
</DisplayString>
<DisplayString Condition="d.type == QMetaType::QPointF">
{*((QPointF*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
</DisplayString>
<DisplayString Condition="d.type == QMetaType::QRegExp">RegExp</DisplayString>
<DisplayString Condition="d.type == QMetaType::QRegularExpression">RegularExpression</DisplayString>
<DisplayString Condition="d.type == QMetaType::QVariantHash">
{*((QHash&lt;QString,QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
</DisplayString>
<DisplayString Condition="d.type == QMetaType::QEasingCurve">EasingCurve</DisplayString>
<DisplayString Condition="d.type == QMetaType::QUuid">Uuid</DisplayString>
<DisplayString Condition="d.type == QMetaType::QModelIndex">ModelIndex</DisplayString>
<DisplayString Condition="d.type == QMetaType::LastCoreType">LastCoreType</DisplayString>
<DisplayString Condition="d.type == QMetaType::QFont">Font</DisplayString>
<DisplayString Condition="d.type == QMetaType::QPixmap">Pixmap</DisplayString>
<DisplayString Condition="d.type == QMetaType::QBrush">Brush</DisplayString>
<DisplayString Condition="d.type == QMetaType::QColor">Color</DisplayString>
<DisplayString Condition="d.type == QMetaType::QPalette">Palette</DisplayString>
<DisplayString Condition="d.type == QMetaType::QImage">Image</DisplayString>
<DisplayString Condition="d.type == QMetaType::QPolygon">Polygon</DisplayString>
<DisplayString Condition="d.type == QMetaType::QRegion">Region</DisplayString>
<DisplayString Condition="d.type == QMetaType::QBitmap">Bitmap</DisplayString>
<DisplayString Condition="d.type == QMetaType::QCursor">Cursor</DisplayString>
<DisplayString Condition="d.type == QMetaType::QKeySequence">KeySequence</DisplayString>
<DisplayString Condition="d.type == QMetaType::QPen">Pen</DisplayString>
<DisplayString Condition="d.type == QMetaType::QTextLength">TextLength</DisplayString>
<DisplayString Condition="d.type == QMetaType::QTextFormat">TextFormat</DisplayString>
<DisplayString Condition="d.type == QMetaType::QMatrix">Matrix</DisplayString>
<DisplayString Condition="d.type == QMetaType::QTransform">Transform</DisplayString>
<DisplayString Condition="d.type == QMetaType::QMatrix4x4">Matrix4x4</DisplayString>
<DisplayString Condition="d.type == QMetaType::QVector2D">Vector2D</DisplayString>
<DisplayString Condition="d.type == QMetaType::QVector3D">Vector3D</DisplayString>
<DisplayString Condition="d.type == QMetaType::QVector4D">Vector4D</DisplayString>
<DisplayString Condition="d.type == QMetaType::QQuaternion">Quaternion</DisplayString>
<DisplayString Condition="d.type == QMetaType::QPolygonF">PolygonF</DisplayString>
<DisplayString Condition="d.type == QMetaType::QIcon">Icon</DisplayString>
<DisplayString Condition="d.type == QMetaType::LastGuiType">LastGuiType</DisplayString>
<DisplayString Condition="d.type == QMetaType::QSizePolicy">SizePolicy</DisplayString>
<DisplayString Condition="d.type == QMetaType::User">UserType</DisplayString>
<DisplayString Condition="d.type == 0xffffffff">LastType</DisplayString>
<!--End region DisplayString QVariant-->
<!--Region DisplayView QVariant-->
<StringView Condition="d.type == QMetaType::QChar">d.data.c</StringView>
<StringView Condition="d.type == QMetaType::QString">
*((QString*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
</StringView>
<StringView Condition="d.type == QMetaType::QByteArray">
*((QByteArray*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
</StringView>
<!--End region DisplayView QVariant-->
<!--Region Expand QVariant-->
<Expand>
<ExpandedItem Condition="d.type == QMetaType::QVariantMap">
*((QMap&lt;QString,QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
</ExpandedItem>
<ExpandedItem Condition="d.type == QMetaType::QVariantList">
*((QList&lt;QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
</ExpandedItem>
<ExpandedItem Condition="d.type == QMetaType::QString">
*((QString*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
</ExpandedItem>
<ExpandedItem Condition="d.type == QMetaType::QStringList">
*((QStringList*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
</ExpandedItem>
<ExpandedItem Condition="d.type == QMetaType::QByteArray">
*((QByteArray*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
</ExpandedItem>
<ExpandedItem Condition="d.type == QMetaType::QBitArray">
*((QBitArray*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
</ExpandedItem>
<ExpandedItem Condition="d.type == QMetaType::QDate">
*((QDate*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
</ExpandedItem>
<ExpandedItem Condition="d.type == QMetaType::QTime">
*((QTime*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
</ExpandedItem>
<ExpandedItem Condition="d.type == QMetaType::QRect">
*((QRect*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
</ExpandedItem>
<ExpandedItem Condition="d.type == QMetaType::QRectF">
*((QRectF*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
</ExpandedItem>
<ExpandedItem Condition="d.type == QMetaType::QSize">
*((QSize*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
</ExpandedItem>
<ExpandedItem Condition="d.type == QMetaType::QSizeF">
*((QSizeF*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
</ExpandedItem>
<ExpandedItem Condition="d.type == QMetaType::QLine">
*((QLine*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
</ExpandedItem>
<ExpandedItem Condition="d.type == QMetaType::QLineF">
*((QLineF*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
</ExpandedItem>
<ExpandedItem Condition="d.type == QMetaType::QPoint">
*((QPoint*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
</ExpandedItem>
<ExpandedItem Condition="d.type == QMetaType::QPointF">
*((QPointF*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
</ExpandedItem>
<ExpandedItem Condition="d.type == QMetaType::QVariantHash">
*((QHash&lt;QString,QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
</ExpandedItem>
</Expand>
<!--End region Expand QVariant-->
</Type>
</AutoVisualizer>

BIN
res-drgx/remove.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

6
res-drgx/resize.sh

@ -0,0 +1,6 @@
#!/bin/bash
for size in 16 32 48 128 256; do
inkscape -z -e $size.png -w $size -h $size logo.svg >/dev/null 2>/dev/null
done
convert 16.png 32.png 48.png 128.png 256.png -colors 256 icon.ico
rm 16.png 32.png 48.png 128.png 256.png

BIN
res-drgx/send.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
res-drgx/silentdragon-animated-dark.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

BIN
res-drgx/silentdragon-animated-loop-dark.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 556 KiB

BIN
res-drgx/silentdragon-animated-loop.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 538 KiB

BIN
res-drgx/silentdragon-animated-startup-dark.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

BIN
res-drgx/silentdragon-animated-startup.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 986 KiB

BIN
res-drgx/silentdragon-animated.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

385
res-drgx/silentdragon.xpm

@ -0,0 +1,385 @@
/* XPM */
static char *c71bf0c12e1a4d3fcb8972d6277bf3abRHr7XrgX2PiRUZpA[] = {
/* columns rows colors chars-per-pixel */
"256 256 123 2 ",
" c black",
". c #1D1E1E",
"X c #101621",
"o c #141A25",
"O c #171D28",
"+ c #181E29",
"@ c #1C222D",
"# c #1F2630",
"$ c #232424",
"% c #202631",
"& c #242A34",
"* c #282E38",
"= c #2C323C",
"- c #30363F",
"; c #313740",
": c #343B44",
"> c #383E47",
", c #393F48",
"< c #3D434C",
"1 c #40464F",
"2 c #464848",
"3 c #414750",
"4 c #454B53",
"5 c #484F57",
"6 c #4B515A",
"7 c #51575F",
"8 c #595B5B",
"9 c #555B63",
"0 c #585E66",
"q c #5C636A",
"w c #61676E",
"e c #62686F",
"r c #656C73",
"t c #686F75",
"y c #697076",
"u c #6E747B",
"i c #717474",
"p c #70767C",
"a c #71787E",
"s c #757B82",
"d c #797F85",
"f c #7A8086",
"g c #7D8489",
"h c #81878D",
"j c #83898F",
"k c #858B91",
"l c #888F94",
"z c #8B9196",
"x c #8E9499",
"c c #90979C",
"v c #92999D",
"b c #969CA1",
"n c #989FA4",
"m c #9BA2A6",
"M c #9EA5A9",
"N c #A1A7AB",
"B c #A3AAAE",
"V c #A6ADB1",
"C c #A8AFB2",
"Z c #ABB2B5",
"A c #AEB5B8",
"S c #B1B6B6",
"D c #B0B7BA",
"F c #B3BABD",
"G c #B6BDC0",
"H c #B8BFC2",
"J c #BCC2C4",
"K c #BFC5C8",
"L c #C1C7CA",
"P c #C4CBCD",
"I c #C7CED0",
"U c #C8CFD1",
"Y c #CCD3D5",
"T c #CFD6D8",
"R c #D0D7D9",
"E c #D4DBDD",
"W c #D7DEE0",
"Q c #D8DFE1",
"! c #D8DFE1",
"~ c #DAE1E2",
"^ c #DBE2E3",
"/ c #DCE3E4",
"( c #DDE4E5",
") c #DEE5E6",
"_ c #DFE5E7",
"` c #DFE6E7",
"' c #DDE4E5",
"] c #E0E7E8",
"[ c #E0E7E8",
"{ c #E1E8E9",
"} c #E2E9EA",
"| c #E3EAEB",
" . c #E4EBEC",
".. c #E5ECED",
"X. c #E6EDEE",
"o. c #E7EEEE",
"O. c #E5ECED",
"+. c #E8EFEF",
"@. c #E8EFEF",
"#. c #E9EFF0",
"$. c #E9EFF0",
"%. c #E9F0F1",
"&. c #EAF1F2",
"*. c #EBF2F3",
"=. c #ECF3F4",
"-. c #EDF4F5",
";. c #EEF5F5",
":. c #EFF6F6",
">. c #EBF2F3",
",. c #F0F7F7",
"<. c #F0F7F7",
"1. c #F1F8F8",
"2. c #F2F9F9",
"3. c #F3FAFA",
"4. c #F3FAFB",
"5. c #F4FBFB",
"6. c #F4FBFC",
"7. c #F5FCFC",
"8. c #F6FDFD",
"9. c #F7FEFE",
"0. c #F4FBFB",
"q. c #F8FFFF",
"w. c #F8FFFF",
/* pixels */
" $ i C E 3.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.2.E Z i $ ",
" 2 J q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.J 2 ",
" . S q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.S . ",
" 2 o.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.@.2 ",
" 8 5.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.5.8 ",
" 2 5.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.5.2 ",
" . o.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.@.. ",
" S q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.S ",
" 2 q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.q.q.q.q.q.q.2 ",
" J q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.q.q.q.q.q.q.J ",
"$ w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.$ ",
"i w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.i ",
"S q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.<.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.<.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.C ",
"E q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.T q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.R q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.q.q.w.E ",
"1.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.F q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.F q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.3.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.v q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.v q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.s q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.s q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.<.q q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w 2.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.P y q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.y I q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.v d q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.d v q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w k q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.k w q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.* l q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.l = q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.[ X v q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.v X { q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.N X v q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.v X B q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.r X m q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.m X t q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.* X N q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.N X * q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.R X X N q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.N X X R q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.z X X Z q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.Z X X z q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.< X X N q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.N X X 4 q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.E X X X N q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.N X X X E q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.g X X X M q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.M X X X h q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.5.& X X X v q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.v X X X * 5.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.N X X X X v q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.v X X X X V 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.: X X X X c q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.v X X X X : 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.C X X X X X k q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.k X X X X X C q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.<.= X X X X X s q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.s X X X X X = <.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.k X X X X X X t q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.r X X X X X X z 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.E o X X X X X X 0 q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.q X X X X X X o E q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.8.3 X X X X X X X 5 q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.5 X X X X X X X 4 8.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.! q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.g X X X X X X X X , q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q., X X X X X X X X g q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.^ w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.v q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.F X X X X X X X X X * q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.* X X X X X X X X X D q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.v w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.5 5.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.R @ X X X X X X X X X O q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.X X X X X X X X X X @ R q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.7.5 w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.4 G q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.[ * X X X X X X X X X X X .q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q. .X X X X X X X X X X X = ] q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.F 4 w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q r q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.&., X X X X X X X X X X X X Y q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.Y X X X X X X X X X X X X > &.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.r 0 w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.p + ;.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.&.3 X X X X X X X X X X X X X D q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.D X X X X X X X X X X X X X 3 &.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.1.+ p q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.z X M q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.8.4 X X X X X X X X X X X X X X b q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.m X X X X X X X X X X X X X X 4 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.N o l q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.C X < q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.l X X X X X X X X X X X X X X g q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.g X X X X X X X X X X X X X X l 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.1 X N q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.L X X I q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.5 X X X X X X X X X X X X X w q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.9.w X X X X X X X X X X X X X 5 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.U . X L 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.@.X X r q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q./ @ X X X X X X X X X X X X < q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.&.*.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.1 . X X X X X X X X X X X @ _ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.r X X @.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.& X O @.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.v X X X X X X X X X X X X @ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.P P q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.@ X X X X X X X X X X X X v q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.@.+ X & q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.5 X . l q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.8.: X X X X X X X X X X X X _ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.m m q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.[ X X X X X X X X X X X X : 8.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.z X X 5 q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.p X X & 3.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.D X X X X X X X X X X X X H q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.a a q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.H X X X X X X X X X X X X D q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.5.& X X p q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.M X X X m q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.< X X X X X X X X X X X v q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.6 5 q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.v X X X X X X X X X X X < q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.m X X X M q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.Y X X X ; 8.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.C X X X X X X X X X X X p q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.% % q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.p X X X X X X X X X X X C q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.; X X X Y q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.8.+ X X X A q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.5.% X X X X X X X X X X 4 q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q._ X X [ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.4 X X X X X X X X X X & 2.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.Z X X X + 8.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.4 X X X < 7.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.f X X X X X X X X X X O 5.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.D X X D q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.+ X X X X X X X X X X d q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.8.< X X X 4 q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.d X X X X C 9.9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.P X X X X X X X X X X X T q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.l X X l q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.T X X X X X X X X X X X I q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.C X X X X d q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.G X X X X ; 8.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.* X X X X X X X X X X m q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.0 X X 0 q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.M X X X X X X X X X X & q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.8.- X X X X F q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.=.o X X X X M q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w X X X X X X X X X X u 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.= X X = q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.p X X X X X X X X X X w q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.N X X X X o =.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.4 X X X X * <.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.v X X X X X X X X X X < q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.&.X X X X #.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.< X X X X X X X X X X v q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.<.* X X X X 4 q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.j X X X X X k 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.L X X X X X X X X X X X ;.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.L X X X X L q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.<.o X X X X X X X X X X L q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.k X X X X X j q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.L X X X X X O ^ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.^ X X X X X X X X X X X G q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.v X X X X v q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.H X X X X X X X X X X X ^ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.^ o X X X X X P q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.% X X X X X q q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.5.X X X X X X X X X X X f q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.r X X X X t q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.g X X X X X X X X X X X 2.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q X X X X X % 8.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.t X X X X X X J q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.X X X X X X X X X X X < q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.< X X X X < q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.3 X X X X X X X X X X X q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.J X X X X X X t q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.D X X X X X X ; <.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.X X X X X X X X X X X X &.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.5.o X X X X o 5.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.*.o X X X X X X X X X X X q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.<.- X X X X X X F q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.2.@ X X X X X X s q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.5.X X X X X X X X X X X X D q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.U X X X X X X Y q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.F X X X X X X X X X X X X 8.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.s X X X X X X @ 2.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.y X X X X X X X P q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q._ X X X X X X X X X X X X s q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.m X X X X X X b q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.s X X X X X X X X X X X X _ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.P X X X X X X X t q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.K X X X X X X X : <.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.H X X X X X X X X X X X X = q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.t X X X X X X t q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.; X X X X X X X X X X X X H q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.<.: X X X X X X X J q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.= X X X X X X X u q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.z X X X X X X X X X X X X X T 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.> X X X X X X > q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.R X X X X X X X X X X X X X z q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.u X X X X X X X = q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.j X X X X X X X X Z q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.6 X X X X X X X X X X X X X l 9.q.q.q.q.q.q.q.q.q.q.q.q.q.;.X X X X X X X X <.q.q.q.q.q.q.q.q.q.q.q.q.q.q.z X X X X X X X X X X X X X 6 q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.Z X X X X X X X X k q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q._ o X X X X X X X # _ 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.@.o X X X X X X X X X X X X X < q.q.q.q.q.q.q.q.q.q.q.q.q.q.L X X X X X X X X L q.q.q.q.q.q.q.q.q.q.q.q.q.q.4 X X X X X X X X X X X X X o @.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q._ @ X X X X X X X X [ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.q X X X X X X X X 3 2.9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.b X X X X X X X X X X X X X X X { q.q.q.q.q.q.q.q.q.q.q.q.q.c X X X X X X X X z q.q.q.q.q.q.q.q.q.q.q.q.q. .o X X X X X X X X X X X X X X v q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.2.3 X X X X X X X X q q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.K X X X X X X X X X r q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.8.- X X X X X X X X X X X X X X X n q.q.q.q.q.q.q.q.q.q.q.q.q.0 X X X X X X X X 0 q.q.q.q.q.q.q.q.q.q.q.q.q.m X X X X X X X X X X X X X X X - 5.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.r X X X X X X X X X K q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.< X X X X X X X X X v q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.M X X X X X X X X X X X X X X X X 4 q.q.q.q.q.q.q.q.q.q.q.q.q.% X X X X X X X X & q.q.q.q.q.q.q.q.q.q.q.q.q.6 X X X X X X X X X X X X X X X X N q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.v X X X X X X X X X < q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.Z X X X X X X X X X o G q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.*.& X X X X X X X X X X X X X X X X X ^ q.q.q.q.q.q.q.q.q.q.q.E X X X X X X X X X X E q.q.q.q.q.q.q.q.q.q.q.[ X X X X X X X X X X X X X X X X X * =.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.G o X X X X X X X X X Z q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.- X X X X X X X X X + U q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.u X X X X X X X X X X X X X X X X X X l q.q.q.q.q.q.q.q.q.q.q.B X X X X X X X X X X N q.q.q.q.q.q.q.q.q.q.q.c X X X X X X X X X X X X X X X X X X u q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.U + X X X X X X X X X - 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.B X X X X X X X X X X % W q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.;.% X X X X X X X X X X X X X X X X X X > q.q.q.q.q.q.q.q.q.q.q.u X X X X X X X X X X u q.q.q.q.q.q.q.q.q.q.q.1 X X X X X X X X X X X X X X X X X X % =.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.W % X X X X X X X X X X B q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.: X X X X X X X X X X = [ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.J o X X X X X X X X X X X X X X X X X X Y q.q.q.q.q.q.q.q.q.q.; X X X X X X X X X X ; q.q.q.q.q.q.q.q.q.q.E X X X X X X X X X X X X X X X X X X X J q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q._ = X X X X X X X X X X : 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.Z X X X X X X X X X X X - [ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.h X X X X X X X X X X X X X X X X X X s q.q.q.q.q.q.q.q.q./ X X X X X X X X X X X X / q.q.q.q.q.q.q.q.q.f X X X X X X X X X X X X X X X X X X h q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.[ - X X X X X X X X X X X Z q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.4 X X X X X X X X X X X - _ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.4 X X X X X X X X X X X X X X X X X % <.q.q.q.q.q.q.q.q.m X X X X X X X X X X X X m q.q.q.q.q.q.q.q.5.& X X X X X X X X X X X X X X X X X 4 8.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.[ - X X X X X X X X X X X 4 q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.U X X X X X X X X X X X X = E q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q./ + X X X X X X X X X X X X X X X X X N q.q.q.q.q.q.q.6.0 X X . X X X X X X X X X q q.q.q.q.q.q.q.q.Z X X X X X X X X X X X X X X X X X @ / q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.E = X X X X X X X X X X X X U q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.r X X X X X X X X X X X X & U q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.v X X X X X X X X X X X X X X X X X 4 q.q.q.q.q.q.q.6.# X X X X X X X X X X X X % 7.q.q.q.q.q.q.q.6 X X X X X X X X X X X X X X X X X v q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.U % X X X X X X X X X X X X t q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.o.% X X X X X X X X X X X X + F q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.> X X X X X X X X X X X X X X X X X T q.q.q.q.q.q.K X X X X X X X X X X X X X X L q.q.q.q.q.q.E X X X X X X X X X X X X X X X X X > 8.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.F + X X X X X X X X X X X X % X.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.N X X X X X X X X X X X X X o z q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.G X X X X X X X X X X X X X X X X X u q.q.q.q.q.q.s X X X X X X X X X X X X X X a q.q.q.q.q.q.f X X X X X X X X X X X X X X X X X G q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.z X X X X X X X X X X X X X X N q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.6 X X X X X X X X X X X X X X w =.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.4 X X X X X X X X X X X X X X X X @ o.q.q.q.q.2.% X X X X X X X X X X X X X X & 2.q.q.q.q.;.% . X X X X X X X X X X X X X X X 4 q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.<.w X X X X X X X X X X X X X X 7 q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q._ % X X X X X X X X X X X X X X : Y q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.F X X X X X X X X X X X X X X X X X l q.q.q.q.J X X X X X X X X X X X X X X X X J q.q.q.q.v X X X X X X X X X X X X X X X X X F q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.Y : X X X X X X X X X X X X X X # [ 8.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.C X X X X X X X X X X X X X X X o b q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.* X X X X X X X X X X X X X X X X & 2.q.q.9.6.; X X X X X X X X X X X X X X = 8.9.9.9.6.* X X X X X X X X X X X X X X X X = q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.b o X X X X X X X X X X X X X X . B q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.r X X X X X X X X X X X X X X X X 5 ^ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.g X X X X X X X X X X X X X X X X X M q.q.9.9.m X X X X X X X X X X X X X X n q.9.9.9.C X X X X X X X X X X X X X X X X X f q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q./ 5 X X X X X X X X X X X X X X X X r q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.=.: . X X X X X X X X X X X X X X X + c 8.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.R X X X X X X X X X X X X X X X X X > 9.q.q.q.5.= X X X X X X X X X X X X & <.q.q.q.q.3 X X X X X X X X X X X X X X X X X R q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.5.c + X X X X X X X X X X X X X X X X : -.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.6.W @ X X X X X X X X X X X X X X X X X > J q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.0 X X X X X X X X X X X X X X X X X A q.q.q.q.b X X X X X X X X X X X X z q.q.q.9.K X X X X X X X X X X X X X X X X X 0 q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.J > X X X X X X X X X X X X X X X X X + W q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.q.q.F o X X X X X X X X X X X X X X X X X X 9 T q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.I X X X X X X X X X X X X X X X X X < 9.q.q.q.5.* X X X X X X X X X X & ;.q.q.q.q.5 X X X X X X X X X X X X X X X X X P q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.T 9 X X X X X X X X X X X X X X X X X X o D q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.v X X X X X X X X X X X X X X X X X X X X r R q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.7 X X X X X X X X X X X X X X X X X A q.q.q.q.M X X X X X X X X X X b q.q.q.q.K X X X X X X X X X X X X X X X X X 7 q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.R r X X X X X X X X X X X X X X X X X X X X v q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.s X X X X X X X X X X X X X X X X X X X X X 0 L q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.P X X X X X X X X X X X X X X X X X < 9.9.q.q.5.- X X X X X X X X = 2.9.q.9.9.6 X X X X X X X X X X X X X X X X X P q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.L 0 X X X X X X X X X X X X X X X X X X X X X s q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w X X X X X X X X X X X X X X X X X X X X . X , n &.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9 X X X X X X X X X X X X X X X X X A q.q.q.q.V X X X X X X X X M q.q.q.9.K X X X X X X X X X X X X X X X X X 9 q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.&.n , X X X X X X X X X X X X X X X X X X X X X X w q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.5.0 X X X X X X X X X X X X X X X X X X X X X X X O q A <.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.Y X X X X X X X X X X X X X X X X X < 9.q.q.q.9.1 X X X X X X < 9.q.q.q.q.6 X X X X X X X X X X X X X X X X X Y q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.<.A q O X X X X X X X X X X X X X X X X X X X X X X X 0 5.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.5.0 X X X X X X X X X X X X X X X X X X X X X X X X X + 9 b R 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q X X X X X X X X X X X X X X X X X B q.q.q.q.L X X X X X X G q.q.q.q.F X X X X X X X X X X X X X X X X X q q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.R b 9 + X X X X X X X X X X X X X X X X X X X X X X X X X 0 5.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.5.w X X X X X X X X X X X X X X X X X X X X X X X X X X X X % q z G ] q.q.q.q.q.q.q.q.! v q.q.q.q.W o X X X X X X X X X X X X X X X X = 2.q.q.q.q.9 X X X X 7 q.q.q.q.9.< . X X X X X X X X X X X X X X X o E q.q.q.q.v ! q.q.q.q.q.q.q.q.[ F z w % X X X X X X X X X X X X X X X X X X X X X X X X X X X X w 5.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.5.u X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X @ > 9 u s k j f @ O [ q.q.q.q.u X X X X X X X X X X X X X X X X X x 9.q.q.q.E o X X X R q.q.q.q.N X X X X X X X X X X X X X X X X X u q.q.q.q._ O @ f k k s u 9 > @ X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X u 7.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.l X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X u q.q.q.q.] + X X X X X X X X X X X X X X X X @ #.q.q.q.q.f X X d q.q.q.q.<.= X X X X X X X X X X X X X X X X O ` q.q.q.q.u X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X z 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.A + X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X o ! q.q.q.q.h X X X X X X X X X X X X X X X X X d q.q.q.q.*.& & &.q.q.q.q.z X X X X X X X X X X X X X X X X X g 9.q.q.q.E O X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X + Z q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.Y = X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X r q.q.q.q.=.& X X X X X X X X X X X X X X X X O E q.q.q.q.N N q.q.q.q.{ @ X X X X X X X X X X X X X X X X % =.q.q.q.q.r X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X = Y q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.@.q X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X R q.q.q.q.m X X X X X X X X X X X X X X X X X 7 q.q.q.q.q.q.q.q.q.q.r X X X X X X X X X X X X X X X X X b q.q.q.q.R X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X q #.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.b + X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X 9 q.q.q.q.8.: X X X X X X X X X X X X X X X X X D q.q.q.q.q.q.q.q.P X X X X X X X X X X X X X X X X X ; 6.q.q.q.q.9 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X O b q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.E 5 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X J q.q.q.q.F X X X X X X X X X X X X X X X X X = <.q.q.q.q.q.q.q.< X X X X X X X X X X X X X X X X X A 9.q.q.q.J X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X 5 E q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.b @ X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X , 9.q.q.q.q.9 X X X X X X X X X X X X X X X X X j q.q.q.q.q.q.m X X X X X X X X X X X X X X X X X 7 q.q.q.q.9.< X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X @ b q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.] r X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X N q.q.q.q.E o X X X X X X X X X X X X X X X X O E q.q.q.q. .% X X X X X X X X X X X X X X X X o R q.q.q.q.N X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X r _ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.U 4 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X * ;.q.q.q.q.g X X X X X X X X X X X X X X X X X 6 9.q.q.q.e X X X X X X X X X X X X X X X X X s q.q.q.q.;.& X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X 4 Y q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.D 3 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X k 9.q.q.q.=.& X X X X X X X X X X X X X X X X X N q.q.H X X X X X X X X X X X X X X X X X & &.q.q.q.q.l X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X 3 A q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.G 4 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X + _ q.q.q.q.B X X X X X X X X X X X X X X X X X @ { <.= X X X X X X X X X X X X X X X X X m q.q.q.q._ O X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X 4 H q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.I q O X X X X X X X X X X X X X X X X X X X X X X X X X X X X q q.q.q.q.q.3 X X X X X X X X X X X X X X X X X q f X X X X X X X X X X X X X X X X X < 9.q.q.q.q.q X X X X X X X X X X X X X X X X X X X X X X X X X X . X X w L q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.9.{ g # X X X X X X X X X X X X X X X X X X X X X X X X X X X J q.q.q.q.Y o X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X P q.q.q.9.J X X X X X X X X X X X X X X X X X X X X X X X X X X X % g ] 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.9.-.c # X X X X X X X X X X X X X X X X X X X X X X X X X : 8.q.q.q.q.s X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X p q.q.q.9.6.: X X X X X X X X X X X X X X X X X X X X X X X X X & v <.9.9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.5.b & X X X X X X X X X X X X X X X X X X X X X X X X z 9.9.9.9.&.* X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X & #.q.q.q.q.c X X X X X X X X X X X X X X X X X X X X X X X X & b 5.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.;.k + X X X X X X X X X X X X X X X X X X X X X . @ } 9.q.9.q.Z X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X N q.q.q.q. .@ X X X X X X X X X X X X X X X X X X X X X X + j ;.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q./ 9 X X X X X X X X X X X X X X X X X X X X X X r q.q.q.q.q.9 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X . 4 q.q.q.q.q.r X X X X X X X X X X X X X X X X X X X X X X 7 / q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.V @ X X X X X X X X X X X X X X X X X X X X X L q.q.q.q.W O X X X X X X X X X X X X X X X X X X X X X X X X X X X X o R q.q.q.q.L X X X X X X X X X X X X X X X X X X X X X % B q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q./ < X X X X X X X X X X X X X X X X X X X X : 2.q.q.q.9.l X X X X X X X X X X X X X X X X X X X X X X X X X X X X h q.q.q.q.2.: X X X X X X X X X X X X X X X X X X X X < / q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.<.9 X X X X X X X X X X X X X X X X X X X X k q.q.q.q.2.< X X X X X X X X X X X X X X X X X X X X X X X X X X : <.q.q.q.q.k X X X X X X X X X X X X X X X X X X X X 9 <.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.q X X X X X X X X X X X X X X X X X X X o E q.q.q.q.U o X X X X X X X X X X X X X X X X X X X X X X X X X L q.q.q.q.R o X X X X X X X X X X X X X X X X X X X q 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.2.< X X X X X X X X X X X X X X X X X X X 5 q.q.q.q.q.f X X X X X X X X X X X X X X X X X X X X X X X X p q.q.q.q.q.5 X X X X X X X X X X X X X X X X X X X < 5.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.E o X X X X X X X X X X X X X X X X X X X m q.q.q.q.<.; X X X X X X X X X X X X X X X X X X X X X X * *.q.q.q.q.m X X X X X X X X X X X X X X X X X X X o E q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.a X X X X X X X X X X X X X X X X X X X @ { q.q.q.q.L X X X X X X X X X X X X X X X X X X X X X X F q.q.q.q.{ @ X X X X X X X X X X X X X X X X X X X p q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.I X X X X X X X X X X X X X X X X X X X X q q.q.q.q.q.p X X X X X X X X X X X X X X X X X X X X e q.q.q.q.q.q X X X X X X X X X X X X X X X X X X X X P q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.8.X X X X X X X X X X X X X X X X X X X X X L q.q.q.q.=.& X X X X X X X X X X X X X X X X X X @ @.q.q.q.q.L X X X X X X X X X X X X X X X X X X X X X 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.o X X X X X X X X X X X X X X X X X X X 4 2.q.q.q.q.J X X X X X X X X X X X X X X X X X X X X D q.q.q.q.5.4 X X X X X X X X X X X X X X X X X X X o q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.W X X X X X X X X X X X X X X X X X X X & { q.q.q.q.[ & X X X X X X X X X X X X X X X X X X X X @ E q.q.q.q.{ & X X X X X X X X X X X X X X X X X X X ! q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.l X X X X X X X X X X X X X X X X X X o P q.q.q.q.5.4 X X X X X X X X X X X X X X X X X X X X X X > ;.q.q.q.q.P O X X X X X X X X X X X X X X X X X X l q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.@.% X X X X X X X X X X X X X X X X X X m q.q.q.q.q.a X X X X X X X X X X X X X X X X X X X X X X X X e q.q.q.q.q.m X X X X X X X X X X X X X X X X X X % @.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.9 X X X X X X X X X X X X X X X X X X u q.q.q.q.q.B X X X X X X X X X X X X X X X X X X X X X X X X X X b q.q.q.q.q.u X X X X X X X X X X X X X X X X X X 9 6.9.9.9.9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.p X X X X X X X X X X X X X X X X X X 4 2.q.q.q.q.Y @ X X X X X X X X X X X X X X X X X X X X X X X X X X o L 9.q.q.q.5.4 X X X X X X X X X X X X X X X X X . a 6.9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.<.e X X X X X X X X X X X X X X X X X X * { q.q.q.q.o.= X X X X X X X X X X X X X X X X X X X X X X X X X X X X & _ q.q.q.q.{ = X X X X X X X X X X X X X X X X X X r <.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.E < X X X X X X X X X X X X X X X X X X + Y q.q.q.q.5.5 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X < <.q.q.q.q.T @ X X X X X X X X X X X X X X X X X X < E q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.2.z + X X X X X X X X X X X X X X X X X X X D q.q.q.q.q.u X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X w 9.q.q.q.q.D o X X X X X X X X X X X X X X X X X X O z 2.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.D : X X X X X X X X X X X X X X X X X X X X z q.q.q.q.q.m X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X z q.q.q.q.q.c X X X X X X X X X X X X X X X X X X X X : D q.9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.G 4 X X X X X X X X X X X X X X X X X X X X X r q.q.q.q.q.L o X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X F q.q.q.q.q.u X X X X X X X X X X X X X X X X X X X X X 4 G 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.5.V , X X X X X X X X X X X X X X X X X X X X X . 5 5.q.q.q.q.^ & X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X @ E q.q.q.q.2.5 X X X X X X X X X X X X X X X X X X X X X X < V 2.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q./ g & X X X X X X X X X X X X X X X X X X X X X X X ; } 9.q.q.q.=.: X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X = .q.q.q.q.@.: X X X X X X X X X X X X X X X X X X X X X X X % g / q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.&.N 5 X X X X X X X X X X X X X X X X X X X X X X X X X # W 9.9.q.q.8.6 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X 4 <.q.q.q.q.^ & X X X X X X X X X X X X X X X X X X X X X X X X X 6 N &.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q._ s , X X X X X X X X X X X X X X X X X X X X X X X X X o L q.9.q.9.q.p X X X X X X X X X X X X X X X X X X X X l l X X X X X X X X X X X X X X X X X X X X w 9.q.q.q.q.P + X X X X X X X X X X X X X X X X X X X X X X X X X < a _ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.o.B 0 + X X X X X X X X X X X X X X X X X X X X X V q.q.q.q.9.b X X X X X X X X X X X X X X X X X X X X 7 9.6.7 X X X X X X X X X X X X X X X X X X X X k q.q.q.q.q.A X X X X X X X X X X X X X X X X X X X X X O q B .q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.;.B 5 X X X X X X X X X X X X X X X X X X z q.q.q.q.q.F o X X X X X X X X X X X X X X X X X X X & .q.9.} & X X X X X X X X X X X X X X X X X X X X C q.q.q.q.q.v X X X X X X X X X X X X X X X X X X 4 B ;.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.R u o X X X X X X X X X X X X X X u q.q.q.q.9.Y + X X X X X X X X X X X X X X X X X X X o K q.q.q.q.K X X X X X X X X X X X X X X X X X X X X o L q.q.q.q.q.a X X X X X X X X X X X X X X o u R q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q._ u o X X X X X X X X X X X 9 7.q.q.9.9._ & X X X X X X X X X X X X X X X X X X X X k 9.q.q.q.q.q.k X X X X X X X X X X X X X X X X X X X X % E q.q.q.q.9.0 X X X X X X X X X X X O u _ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q._ w X X X X X X X X X 3 ;.q.q.q.q.&.> X X X X X X X X X X X X X X X X X X X X 6 9.q.q.q.q.q.q.9.9 X X X X X X X X X X X X X X X X X X X X = { q.q.q.q.<.4 X X X X X X X X X q _ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.L : X X X X X X : o.q.q.q.q.2.6 X X X X X X X X X X X X X X X X X X X X = @.q.q.q.9.q.q.q.q.@.= X X X X X X X X X X X X X X X X X X X X 1 <.q.q.q.q.o.: X X X X X X : L 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.<.f X X X X & ! 9.q.q.q.9.r X X X X X X X X X X X X X X X X X X X X o U q.q.q.q.8.8.q.q.q.q.U o X X X X X X X X X X X X X X X X X X X X 9 9.q.q.q.q.^ & X X X X f 2.9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.J & X @ Y q.q.q.q.q.h X X X X X X X X X X X X X X X X X X X X X m q.q.q.q.q.s s q.q.q.q.q.M X X X X X X X X X X X X X X X X X X X X X p 9.q.q.q.q.Y @ X & J q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q._ 4 H q.q.q.q.q.b X X X X X X X X X X X X X X X X X X X X X r q.q.q.q.q.C X X V q.q.q.q.q.t X X X X X X X X X X X X X X X X X X X X X l q.q.q.q.q.J 4 _ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.Z o X X X X X X X X X X X X X X X X X X X X < 2.q.q.q.q.T + X X O T 9.q.q.q.<.< X X X X X X X X X X X X X X X X X X X X X M q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.9.L o X X X X X X X X X X X X X X X X X X X X & / q.q.q.q.&.- X X X X = @.q.q.q.q._ & X X X X X X X X X X X X X X X X X X X X o D q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.T @ X X X X X X X X X X X X X X X X X X X X o L q.q.q.q.9.9 X X X X X X 9 9.9.q.q.q.L O X X X X X X X X X X X X X X X X X X X X + P q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q./ * X X X X X X X X X X X X X X X X X X X X X m q.q.q.q.q.k X X X X X X X X h q.q.q.q.q.m X X X X X X X X X X X X X X X X X X X X X % R q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.o.: X X X X X X X X X X X X X X X X X X X X X u q.q.q.q.q.D X X X X X X X X X X A 9.q.q.q.q.p X X X X X X X X X X X X X X X X X X X X X * ' 9.9.9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.;.3 X X X X X X X X X X X X X X X X X X X X X 5 5.q.q.q.q.R @ X X X X X X X X X X + Y q.q.q.q.5.6 X X X X X X X X X X X X X X X X X X X X X : =.9.9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.9 X X X X X X X X X X X X X X X X X X X X X = o.q.q.q.q.o.= X X X X X X X X X X X X * { q.q.q.q.@.; X X X X X X X X X X X X X X X X X X X X X 4 2.9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.r X X X X X X X X X X X X X X X X X X X X X @ E q.q.q.q.5.5 X X X X X X X X X X X X X X 4 2.q.q.q.q.E % X X X X X X X X X X X X X X X X X X X X X q 5.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.g X X X X X X X X X X X X X X X X X X X X X o J 9.q.q.q.q.u X X X X X X X X X X X X X X X X r q.q.q.q.q.K o X X X X X X X X X X X X X X X X X X X X . p q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.v X X X X X X X X X X X X X X X X X X X X X X m q.q.q.q.q.v X X X X X X X X X X X X X X X X X X x q.q.q.q.q.N X X X X X X X X X X X X X X X X X X X X X X l q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.C X X X X X X X X X X X X X X X X X X X X X X d q.q.q.q.q.G X X X X X X X X X X X X X X X X X X X X D 9.q.q.q.q.g X X X X X X X X X X X X X X X X X X X X X X n q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.G O X X X X X X X X X X X X X X X X X X X X X 0 8.q.q.q.9.T @ X X X X X X X X X X X X X X X X X X X X @ Y q.q.q.q.9.q X X X X X X X X X X X X X X X X X X X X X X C q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.P + X X X X X X X X X X X X X X X X X X X X X 4 ;.q.q.q.q._ * X X X X X X X X X X X X X X X X X X X X X X * / q.q.q.q.5.5 X X X X X X X X X X X X X X X X X X X X X o J q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.R % X X X X X X X X X X X X X X X X X X X X X : @.q.q.q.q.&.< X X X X X X X X X X X X X X X X X X X X X X X X : =.q.q.q.q.#.> X X X X X X X X X X X X X X X X X X X X X + P q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.^ * X X X X X X X X X X X X X X X X X X X X X * / q.q.q.q.5.7 X X X X X X X X X X X X X X X X X X X X X X X X X X 6 2.q.q.q.q./ * X X X X X X X X X X X X X X X X X X X X X & E q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.9.o.; X X X X X X X X X X X X X X X X X X X X X @ Y q.q.q.q.q.t X X X X X X X X X X X X X X X X X X X X X X X X X X X X r q.q.q.q.q.R @ X X X X X X X X X X X X X X X X X X X X X * [ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.&.< X X X X X X X X X X X X X X X X X X X X X o J q.q.q.q.q.l X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X k q.q.q.q.q.L o X X X X X X X X X X X X X X X X X X X X X : .q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.2.6 X X X X X X X X X X X X X X X X X X X X X X Z q.q.q.q.q.N X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X N q.q.q.q.q.D X X X X X X X X X X X X X X X X X X X X X X 1 =.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.0 X X X X X X X X X X X X X X X X X X X X X X m q.q.q.q.q.D X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X o D q.q.q.q.q.N X X X X X X X X X X X X X X X X X X X X X X 6 5.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.t X X X X X X X X X X X X X X X X X X X X X X x q.q.q.q.q.K O X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X O J q.q.q.q.q.v X X X X X X X X X X X X X X X X X X X X X X q 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.g X X X X X X X X X X X X X X X X X X X X X X g q.q.q.9.9.Y @ X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X @ U q.q.q.q.q.j X X X X X X X X X X X X X X X X X X X X X X u q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.9.v X X X X X X X X X X X X X X X X X X X X X X u q.q.q.q.9.W & X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X & E q.q.q.q.q.s X X X X X X X X X X X X X X X X X X X X X X k q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.Z X X X X X X X X X X X X X X X X X X X X X X e 5.q.q.q.q.' * . X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X = ] q.q.q.q.q.r X X X X X X X X X X X X X X X X X X X X X X N q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.K X X X X X X X X X X X X X X X X X X X X X X w 9.q.q.q.9.o.; X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X : @.q.q.q.q.5.r X X X X X X X X X X X X X X X X X X X X X o F q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.R % . X X X X X X X X X X X X X X X X X X X X q 8.q.q.q.q.q.c X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X c q.q.q.q.q.8.w X X X X X X X X X X X X X X X X X X X X X @ U q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.{ = X X X X X X X X X X X X X X X X X X X X X 9 5.q.q.q.q.q.q.F X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X F q.q.q.q.q.q.5.q X X X X X X X X X X X X X X X X X X X X X & [ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.5.4 X X X X X X X X X X X X X X X X X X X X X 9 5.q.q.q.q.q.q.9.^ X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X / q.q.q.q.q.q.q.5.9 X X X X X X X X X X X X X X X X X X X X X 1 <.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.t X X X X X X X X X X X X X X X X X X X X X 9 2.q.q.q.q.q.q.q.q.9.@ X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X + q.q.q.q.q.q.q.q.q.5.0 X X X X X X X X X X X X X X X X X X X X X w q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.M X X X X X X X X X X X X X X X X X X X X X 9 9.q.q.q.q.q.q.q.q.q.q.: X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X : q.q.q.q.q.q.q.q.q.q.2.9 X X X X X X X X X X X X X X X X X X X X X b q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.Y + X X X X X X X X X X X X X X X X X X X X q 2.9.q.q.q.q.q.q.q.q.q.q.6 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X 6 q.q.q.q.q.q.q.q.q.q.q.8.q . X X X X X X X X X X X X X X X X X X X o U q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.;.- X X X X X X X X X X X X X X X X X X X X w 9.q.q.q.q.q.q.q.q.q.q.q.q.w X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X w q.q.q.q.q.q.q.q.q.q.q.q.5.r X X X X X X X X X X X X X X X X X X X X = #.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.y X X X X X X X X X X X X X X X X X X X X u 7.q.q.q.q.q.q.q.q.q.q.q.q.q.s X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X s q.q.q.q.q.q.q.q.q.q.q.q.q.q.u X X X X X X X X X X X X X X X X X X X X r q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.D X X X X X X X X X X X X X X X X X X X X a 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.j X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X j q.q.q.q.q.q.q.q.q.q.q.q.q.q.8.s X X X X X X X X X X X X X X X X X X X X A q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.o.% X X X X X X X X X X X X X X X X X X X l q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.k X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X k q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.9.k X X X X X X X X X X X X X X X X X X X % ] q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.r X X X X X X X X X X X X X X X X X X @ C 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.l X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X l q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.C + X X X X X X X X X X X X X X X X X X q q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.J X X X X X X X X X X X X X X X X X X @ L q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.v X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X v q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.9.P @ X X X X X X X X X X X X X X X X X X G q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.2.; X X X X X X X X X X X X X X X X X % Y q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.v X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X v q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.T & X X X X X X X X X X X X X X X X X ; <.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.l X X X X X X X X X X X X X X X X X % T q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.k X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X k q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.R % X X X X X X X X X X X X X X X X X k q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q. .@ X X X X X X X X X X X X X X X X @ R q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.d X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X d q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.T % X X X X X X X X X X X X X X X X + { q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.p X X X X X X X X X X X X X X X X O L q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.p X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X u q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.P + X X X X X X X X X X X X X X X X p q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.E o X X X X X X X X X X X X X X X X Z q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.r X X X X X X X & e 5 X X X X X X X X X X X X X X X X X X X X X X 5 r & X X X X X X X r q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.A X X X X X X X X X X X X X X X X o E q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.e X X X X X X X X X X X X X X X X z q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.H * X X X X X : #.q.q.R 5 X X X X X X X X X X X X X X X X X X 4 R q.q.#.> X X X X X * H q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.z X X X X X X X X X X X X X X X X w q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.! o X X X X X X X X X X X X X X X q q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.#.r X X X X D q.q.q.q.q.p X X X X X X X X X X X X X X X X p 8.q.q.q.q.D X X X X t #.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.r X X X X X X X X X X X X X X X X E q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.u X X X X X X X X X X X X X X X > ;.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.D & X @ 8.q.q.q.q.q.5.4 X X X X X X X X X X X X X X 4 8.q.q.q.q.q.8.+ X & D q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.<.< X X X X X X X X X X X X X X X u q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.{ O X X X X X X X X X X X X X X @ E q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.@.w 5 q.q.q.q.q.q.q.H X X X X X X X X X X X X X X J q.q.q.q.q.q.q.4 e o.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.E @ X X X X X X X X X X X X X X O ] q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.g X X X X X X X X X X X X X X X N q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.E q.q.q.q.q.q.q.<.o X X X X X X X X X X X X o 2.q.q.q.q.q.q.q.E q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.V X X X X X X X X X X X X X X X f q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.8.& X X X X X X X X X X X X X X q q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.<.X X X X X X X X X X X X X X 2.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.r X X X X X X X X X X X X X X % 2.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.Z X X X X X X X X X X X X X X * @.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.Z X X X X X X X X X X X X X X Z q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.&.= X X X X X X X X X X X X X X Z q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.6 X X X X X X X X X X X X X X F q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.*.; X X X X X X X X X X X X X X : *.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.J X X X X X X X X X X X X X X 6 q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.^ X X X X X X X X X X X X X X r q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.7 X X X X X X X X X X X X X X X X 9 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.u X X X X X X X X X X X X X X E q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.l X X X X X X X X X X X X X & o.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.D o X X X X X X X X X X X X X X X A q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.*.& X X X X X X X X X X X X X l q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.> X X X X X X X X X X X X X N q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.n X X X X X X X X X X X X X X b q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.V X X X X X X X X X X X X X > q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.E X X X X X X X X X X X X X 3 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.p X X X X X X X X X X X X p q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.5 X X X X X X X X X X X X X E q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.z X X X X X X X X X X X X X U 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.5.3 X X X X X X X X X X 3 2.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.Y o X X X X X X X X X X X X l q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.< X X X X X X X X X X X X u q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.[ @ X X X X X X X X @ _ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.s X X X X X X X X X X X X < q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q._ X X X X X X X X X X X X @ @.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.V X X X X X X X X C q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.9.&.% X X X X X X X X X X X X / q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.N X X X X X X X X X X X X z q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q X X X X X X q q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.v X X X X X X X X X X X X N q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w X X X X X X X X X X X * <.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.[ + X X X X + [ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.2.= X X X X X X X X X X X w q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.& X X X X X X X X X X X m q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.l X X X X l q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.N X X X X X X X X X X X * q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.W X X X X X X X X X X X : 8.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.<.& X X & <.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.> X X X X X X X X X X X E q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.N X X X X X X X X X X X C q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.c X X c q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.D X X X X X X X X X X X N q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.p X X X X X X X X X X : 6.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.&.+ + &.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.< X X X X X X X X X X u q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.3 X X X X X X X X X . C 9.9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.r r q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.A X X X X X X X X X X 1 q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.2.o X X X X X X X X X - 6.9.9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.D D q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9.: X X X X X X X X X o 2.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.R X X X X X X X X X X N q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.&.&.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.V X X X X X X X X X X E q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.Z X X X X X X X X X = 5.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.5.- X X X X X X X X X Z q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.k X X X X X X X X X c q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.b X X X X X X X X X h q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.r X X X X X X X X @ *.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.;.% X X X X X X X X r q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.3 X X X X X X X X s q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.g X X X X X X X X 3 q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.% X X X X X X X X ^ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q._ o X X X X X X X % q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.2.X X X X X X X X q 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w X X X X X X X X 2.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.^ X X X X X X X X K q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.P X X X X X X X X ^ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.L X X X X X X X > 9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.> X X X X X X X L q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.A X X X X X X X v q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.b X X X X X X X A q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.M X X X X X X O #.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.=.+ X X X X X X M q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.z X X X X X X r q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.u X X X X X X z q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.g X X X X X X L q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.P X X X X X X h w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.s X X X X X ; q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.: X X X X X s w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.t X X X X X l q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.z X X X X X t w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.r X X X X X _ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.] X X X X X r w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.0 X X X X 6 q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.7 X X X X 0 q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.0 X X X X N q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.B X X X X 0 q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.0 X X X o &.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.=.O X X X 0 q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.0 X X X q q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.0 X X . 0 q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q X X X Z q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.Z X X X 0 w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.r X X + <.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.2.@ X X r w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.r X X q q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q X X r w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.u X X C q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.Z X X p w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.d X o ;.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.;.O X f w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.l X 7 q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.9 X k w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.v X n q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.b X v w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.B X [ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q._ X B w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.F < q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.< F q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.",
"2.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.U h q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.h U q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.2.",
"E q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q._ L q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.L _ q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.E ",
"Z q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.2.8.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.8.2.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.Z ",
"i q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.i ",
"$ q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.$ ",
" J q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.J ",
" 2 q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.2 ",
" S q.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.S ",
" . @.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.@.. ",
" 2 7.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.5.2 ",
" 8 7.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.5.8 ",
" 2 @.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.@.2 ",
" . S w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.S . ",
" 2 J w.w.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.J 2 ",
" $ i C E 3.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.3.E Z i $ "
};

BIN
res-drgx/silentdragon_be.qm

Binary file not shown.

2690
res-drgx/silentdragon_be.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_bg.qm

Binary file not shown.

2560
res-drgx/silentdragon_bg.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_de.qm

Binary file not shown.

2917
res-drgx/silentdragon_de.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_es.qm

Binary file not shown.

2898
res-drgx/silentdragon_es.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_fi.qm

Binary file not shown.

2911
res-drgx/silentdragon_fi.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_fil.qm

Binary file not shown.

2751
res-drgx/silentdragon_fil.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_fr.qm

Binary file not shown.

2945
res-drgx/silentdragon_fr.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_hr.qm

Binary file not shown.

2754
res-drgx/silentdragon_hr.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_id.qm

Binary file not shown.

2464
res-drgx/silentdragon_id.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_it.qm

Binary file not shown.

2897
res-drgx/silentdragon_it.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_nl.qm

Binary file not shown.

2686
res-drgx/silentdragon_nl.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_pl.qm

Binary file not shown.

2689
res-drgx/silentdragon_pl.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_pt.qm

Binary file not shown.

2885
res-drgx/silentdragon_pt.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_ro.qm

Binary file not shown.

2752
res-drgx/silentdragon_ro.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_ru.qm

Binary file not shown.

2691
res-drgx/silentdragon_ru.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_sr.qm

Binary file not shown.

2754
res-drgx/silentdragon_sr.ts

File diff suppressed because it is too large

1779
res-drgx/silentdragon_template.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_tr.qm

Binary file not shown.

2902
res-drgx/silentdragon_tr.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_uk.qm

Binary file not shown.

3152
res-drgx/silentdragon_uk.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_zh.qm

Binary file not shown.

3037
res-drgx/silentdragon_zh.ts

File diff suppressed because it is too large

BIN
res-drgx/synced.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
res-drgx/transaction0.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

BIN
res-drgx/transaction2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

BIN
res-drgx/transaction_abandoned.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
res-drgx/transaction_conflicted.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

BIN
res-drgx/tropical-hush-square.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
res-drgx/tropical-hush.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
res-drgx/tx_inout.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
res-drgx/tx_input.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
res-drgx/tx_mined.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
res-drgx/tx_output.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
res-drgx/verify.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
res-drgx/warning.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

0
res/wormholeconnect.png → res-drgx/wormholeconnect.png

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 67 KiB

BIN
res-drgx/wxsbanner.bmp

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
res/zecwallet.xpm → res-drgx/wxsdialog.bmp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 539 KiB

After

Width:  |  Height:  |  Size: 451 KiB

BIN
res-drgx/zcashdlogo.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

2
res/css/dark.css

@ -1,5 +1,5 @@
QWidget, QMainWindow, QMenuBar, QMenu, QDialog, QTabWidget, QTableView, QTableView::item, QScrollArea, QGroupBox, QPlainTextEdit, QLineEdit, QLabel, MainWindow
QWidget, QMainWindow, QMenuBar, QMenu, QDialog, QTabWidget, QTableView, QScrollArea, QGroupBox, QPlainTextEdit, QLineEdit, QLabel, MainWindow
{
background-color: #303335;
color: #ffffff;

114
res/css/dragonx.css

@ -0,0 +1,114 @@
QWidget, QMainWindow, QMenuBar, QMenu, QDialog, QTabWidget, QTableView, QScrollArea, QGroupBox, QPlainTextEdit, QLineEdit, QLabel, MainWindow {
background-color: #232834;
color: #91a4b8;
}
QTabWidget QTabBar::tab {
padding-left:20px;
padding-right:20px;
padding-top:5px;
padding-bottom:5px;
border: 1px solid #343F4B;
background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #343F4B, stop: 1 #232834);
}
QTabWidget QTabBar::tab:selected {
min-height: 10px;
background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #343F4B, stop: 1 #232834);
color:#91a4b8;
border: 1px ridge #91a4b8;
}
QTabWidget QTabBar::tab:hover {
background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #343F4B, stop: 1 #232834);
color:#91a4b8;
border: 1px ridge #91a4b8;
min-height: 20px
}
QHeaderView {
/* Table Header */
background-color:#232834;
}
QHeaderView::section {
/* Table Header Sections */
qproperty-alignment:center;
background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #343F4B, stop: 1 #232834);
color:#91a4b8;
min-height:25px;
font-weight:bold;
font-size:11px;
outline:0;
border:1px solid #343F4B;
border-right:1px solid #91a4b8;
border-left:1px solid #91a4b8;
padding-left:5px;
padding-right:5px;
padding-top:2px;
padding-bottom:2px;
}
QHeaderView::section:last {
border-right: 0px solid #d7d7d7;
}
QScrollArea {
background:transparent;
border:0px;
}
QTableView {
/* Table - has to be selected as a class otherwise it throws off QCalendarWidget */
background:#232834;
}
QTableView::item {
/* Table Item */
background-color:#232834;
border:1px solid #91a4b8;
font-size:12px;
}
QTableView::item:selected {
/* Table Item Selected */
background-color:#91a4b8;
color:#232834;
}
QMenuBar {
background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #343F4B, stop: 1 #232834);
color: #91a4b8;
}
QMenuBar::item {
background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #343F4B, stop: 1 #232834);
color: #91a4b8;
}
QMenuBar::item:selected {
background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #343F4B, stop: 1 #232834);
}
QPushButton#startmining {
background-color: #343F4B;
border-color: #91A4B8;
padding: 10px;
}
QPushButton#startmining:hover {
background-color: #232834;
}
QPushButton#startmining:pressed {
background-color: #232834;
}
QPushButton#startmining:disabled {
background-color: #232834;
}
QPushButton#stopmining {
background-color: #343F4B;
border-color: #91A4B8;
padding: 10px;
margin-top: 7px;
}
QPushButton#stopmining:hover {
background-color: #232834;
}
QPushButton#stopmining:pressed {
background-color: #232834;
}
QPushButton#stopmining:disabled {
background-color: #232834;
}
QComboBox#genproclimit{
font-size: 24px;
height: 40px;
}
QMenu::item:selected{
background-color: #343F4B
}

2
res/css/light.css

@ -1,4 +1,4 @@
QWidget, QMainWindow, QMenuBar, QMenu, QDialog, QTabWidget, QTableView, QTableView::item, QScrollArea, QGroupBox, QWidget, QPlainTextEdit, QLineEdit, QLabel, MainWindow
QWidget, QMainWindow, QMenuBar, QMenu, QDialog, QTabWidget, QTableView, QScrollArea, QGroupBox, QWidget, QPlainTextEdit, QLineEdit, QLabel, MainWindow
{
background-color: #dadada;
color: #000000;

21
res/css/midnight.css

@ -9,7 +9,7 @@ Website: https://www.csharpe.me
License: https://opensource.org/licenses/MIT
*/
QWidget, QMainWindow, QMenuBar, QMenu, QDialog, QTabWidget, QTableView, QTableView::item, QScrollArea, QGroupBox, QPlainTextEdit, QLineEdit, QLabel, MainWindow, QPixmap, QHBoxLayout, QVBoxLayout, QGridLayout, QAbstractItemView, QFrame
QWidget, QMainWindow, QMenuBar, QMenu, QDialog, QTabWidget, QTableView, QScrollArea, QGroupBox, QPlainTextEdit, QLineEdit, QLabel, MainWindow, QPixmap, QHBoxLayout, QVBoxLayout, QGridLayout, QAbstractItemView, QFrame
{
background-color: #111;
color: #fff;
@ -23,6 +23,7 @@ QPushButton:hover {
background: #222;
}
/*
QLineEdit, QRadioButton::indicator::unchecked, QCheckBox::indicator::unchecked {
background: #222;
border: 1px solid #333;
@ -35,19 +36,24 @@ font-size: 12px;
QLineEdit:focus {
border: 1px solid #9d8400;
}
}*/
/*
QWidget QLabel {
font-size: 11pt;
}
*/
QWidget QCheckBox {
font-weight: bold;
}
QTabWidget QTabBar::tab {
min-height: 15px;
padding: 15px 25px;
/*min-height: 15px;*/
padding-left:20px;
padding-right:20px;
padding-top:5px;
padding-bottom:5px;
border: 1px ridge #222;
left: 1px; /* Fix 1px alignment */
background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #333, stop: 1 #111);
@ -62,6 +68,7 @@ border-bottom: 0px; /* Overwrites border-bottom */
QTabWidget QTabBar::tab:hover {
background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #555, stop: 1 #111);
min-height: 20px
}
QHeaderView { /* Table Header */
@ -74,7 +81,7 @@ background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #333, st
color:#fff;
min-height:25px;
font-weight:bold;
font-size:12px;
font-size:11px;
outline:0;
border:1px ridge #222;
padding: 2px 5px;
@ -112,8 +119,8 @@ color: #fff;
QMenuBar::item {
background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #222, stop: 1 #111);
color: #fff;
padding: 5px 7px;
margin: 0px;
/*padding: 5px 7px;
margin: 0px;*/
}
QMenuBar::item:selected {

BIN
res/hushdlogo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
res/lock_closed.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
res/lock_open.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
res/remove.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
res/send.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

811
res/silentdragon.xpm

@ -0,0 +1,811 @@
/* XPM */
static char * silentdragon_xpm[] = {
"256 256 552 2",
" c None",
". c #FDFDFD",
"+ c #FEFEFE",
"@ c #FFFFFF",
"# c #EFEEEF",
"$ c #BABABA",
"% c #EBEAEB",
"& c #C1C0C1",
"* c #C4C2C4",
"= c #EAE9EA",
"- c #949394",
"; c #B8B7B8",
"> c #A0A0A0",
", c #C8C7C8",
"' c #C3C3C3",
") c #6D6C6E",
"! c #EDEDED",
"~ c #DEDEDE",
"{ c #AAA9AA",
"] c #A09EA0",
"^ c #8C8B8C",
"/ c #8A898A",
"( c #656566",
"_ c #E5E5E5",
": c #D6D5D6",
"< c #9C9B9C",
"[ c #878687",
"} c #5F5F60",
"| c #525253",
"1 c #6E6E6F",
"2 c #D2D1D2",
"3 c #919091",
"4 c #A3A1A3",
"5 c #434344",
"6 c #A4A3A4",
"7 c #BCBBBC",
"8 c #3E3E3F",
"9 c #636364",
"0 c #E3E2E3",
"a c #C6C5C6",
"b c #807F80",
"c c #8C8A8C",
"d c #383738",
"e c #929292",
"f c #F0EFF0",
"g c #797879",
"h c #323232",
"i c #616062",
"j c #E9E8E9",
"k c #BEBEBE",
"l c #6F6F6F",
"m c #999899",
"n c #353536",
"o c #4A4A4B",
"p c #E7E6E7",
"q c #464647",
"r c #2E2E2F",
"s c #676667",
"t c #B7B6B7",
"u c #605F60",
"v c #343435",
"w c #ADADAD",
"x c #3A3A3A",
"y c #5D5D5E",
"z c #ABABAC",
"A c #535353",
"B c #848486",
"C c #727273",
"D c #2F2F30",
"E c #5F5E60",
"F c #A2A2A3",
"G c #4C4B4C",
"H c #999999",
"I c #333334",
"J c #2D2D2E",
"K c #444445",
"L c #D5D4D5",
"M c #464646",
"N c #5B5A5C",
"O c #9A9A9A",
"P c #454546",
"Q c #838384",
"R c #ACACAD",
"S c #959595",
"T c #303031",
"U c #989898",
"V c #404040",
"W c #6F6F70",
"X c #5A5A5B",
"Y c #D0D0D0",
"Z c #767676",
"` c #3C3C3D",
" . c #777778",
".. c #484849",
"+. c #CAC9CA",
"@. c #C8C8C8",
"#. c #3B3B3C",
"$. c #565657",
"%. c #6A696A",
"&. c #3A3A3B",
"*. c #CCCBCC",
"=. c #7F7F80",
"-. c #313132",
";. c #303030",
">. c #9B9B9B",
",. c #888788",
"'. c #2E2E2E",
"). c #545455",
"!. c #CCCCCC",
"~. c #DADADA",
"{. c #5E5E5F",
"]. c #363637",
"^. c #737374",
"/. c #323233",
"(. c #575758",
"_. c #585859",
":. c #4C4C4C",
"<. c #CBCBCB",
"[. c #CECECE",
"}. c #505051",
"|. c #B0B0B1",
"1. c #6E6D6E",
"2. c #404041",
"3. c #BFBFBF",
"4. c #B8B8B8",
"5. c #4E4E4F",
"6. c #A6A6A7",
"7. c #757576",
"8. c #7E7E7E",
"9. c #484748",
"0. c #B0B0B0",
"a. c #B9B8B9",
"b. c #383839",
"c. c #9C9C9C",
"d. c #5D5C5E",
"e. c #4F4F50",
"f. c #E8E7E8",
"g. c #DCDBDC",
"h. c #B1B0B1",
"i. c #8D8C8D",
"j. c #6D6C6D",
"k. c #A6A4A6",
"l. c #A6A6A6",
"m. c #383838",
"n. c #A7A7A7",
"o. c #AAAAAA",
"p. c #6E6E6E",
"q. c #585858",
"r. c #6A6A6B",
"s. c #3F3F40",
"t. c #868586",
"u. c #DFDFDF",
"v. c #DDDCDD",
"w. c #D4D3D4",
"x. c #3D3D3E",
"y. c #706F70",
"z. c #4C4C4D",
"A. c #D3D2D3",
"B. c #545454",
"C. c #949494",
"D. c #39393A",
"E. c #CECDCE",
"F. c #BCBCBC",
"G. c #A8A8A9",
"H. c #909090",
"I. c #686768",
"J. c #5B5B5C",
"K. c #3E3E3E",
"L. c #9C9C9D",
"M. c #626162",
"N. c #7E7D7E",
"O. c #B6B5B6",
"P. c #4D4D4E",
"Q. c #A1A1A1",
"R. c #474748",
"S. c #6B6B6C",
"T. c #464546",
"U. c #444444",
"V. c #545354",
"W. c #909091",
"X. c #D6D6D6",
"Y. c #535254",
"Z. c #C1C1C1",
"`. c #363536",
" + c #8D8D8D",
".+ c #C4C4C4",
"++ c #343334",
"@+ c #8C8C8C",
"#+ c #373638",
"$+ c #C2C2C2",
"%+ c #B4B4B4",
"&+ c #626263",
"*+ c #BDBDBD",
"=+ c #B3B3B3",
"-+ c #828182",
";+ c #959596",
">+ c #626262",
",+ c #A4A4A5",
"'+ c #9A999A",
")+ c #C0BFC0",
"!+ c #5C5C5C",
"~+ c #79797A",
"{+ c #B2B0B2",
"]+ c #4A4A4A",
"^+ c #49494A",
"/+ c #858586",
"(+ c #4B4B4C",
"_+ c #343434",
":+ c #B6B6B6",
"<+ c #747475",
"[+ c #585758",
"}+ c #424242",
"|+ c #747474",
"1+ c #A9A7A9",
"2+ c #3B3A3C",
"3+ c #A3A3A3",
"4+ c #787879",
"5+ c #AEADAE",
"6+ c #535354",
"7+ c #6B6A6B",
"8+ c #363636",
"9+ c #575658",
"0+ c #989899",
"a+ c #A4A4A4",
"b+ c #69696A",
"c+ c #EBEBEC",
"d+ c #616162",
"e+ c #656465",
"f+ c #757475",
"g+ c #3E3E40",
"h+ c #979797",
"i+ c #373738",
"j+ c #D2D2D2",
"k+ c #CDCCCD",
"l+ c #5D5C5D",
"m+ c #DEDDDE",
"n+ c #727272",
"o+ c #A8A8A8",
"p+ c #515051",
"q+ c #CFCECF",
"r+ c #8F8F8F",
"s+ c #616061",
"t+ c #C6C6C6",
"u+ c #C7C6C7",
"v+ c #4D4C4D",
"w+ c #757474",
"x+ c #343436",
"y+ c #D9D8D9",
"z+ c #505050",
"A+ c #989698",
"B+ c #DAD9DA",
"C+ c #A9A9A9",
"D+ c #7A797A",
"E+ c #3C3C3C",
"F+ c #C9C8C9",
"G+ c #E1E0E1",
"H+ c #BBBABB",
"I+ c #4F4E50",
"J+ c #ACAAAC",
"K+ c #555556",
"L+ c #606061",
"M+ c #969596",
"N+ c #D4D4D4",
"O+ c #AEAEAF",
"P+ c #D8D7D8",
"Q+ c #696869",
"R+ c #414042",
"S+ c #747374",
"T+ c #818182",
"U+ c #565556",
"V+ c #D7D6D7",
"W+ c #444446",
"X+ c #C0C0C0",
"Y+ c #515151",
"Z+ c #898989",
"`+ c #3A3A3C",
" @ c #5D5D5D",
".@ c #B9B9B9",
"+@ c #414142",
"@@ c #424243",
"#@ c #535253",
"$@ c #484848",
"%@ c #868686",
"&@ c #E8E7E7",
"*@ c #474648",
"=@ c #9E9C9E",
"-@ c #646464",
";@ c #9E9E9E",
">@ c #434244",
",@ c #929192",
"'@ c #3F3E3F",
")@ c #F0EFEF",
"!@ c #525252",
"~@ c #949495",
"{@ c #4B4A4B",
"]@ c #BDBCBD",
"^@ c #646465",
"/@ c #838383",
"(@ c #C2C1C2",
"_@ c #B8B8B9",
":@ c #B2B2B2",
"<@ c #6F6E6F",
"[@ c #515152",
"}@ c #737373",
"|@ c #525152",
"1@ c #EAE9E9",
"2@ c #555455",
"3@ c #838283",
"4@ c #A0A0A1",
"5@ c #4B4A4C",
"6@ c #5E5E5E",
"7@ c #727172",
"8@ c #666667",
"9@ c #E2E1E2",
"0@ c #5A5A5A",
"a@ c #666566",
"b@ c #49484A",
"c@ c #676768",
"d@ c #767677",
"e@ c #A2A1A2",
"f@ c #4F4E4F",
"g@ c #CACACA",
"h@ c #333234",
"i@ c #808080",
"j@ c #5F5F5F",
"k@ c #9C9C9E",
"l@ c #7C7B7C",
"m@ c #D0CFD0",
"n@ c #5C5C5D",
"o@ c #929092",
"p@ c #B8B6B8",
"q@ c #636263",
"r@ c #C3C2C3",
"s@ c #C5C5C5",
"t@ c #555456",
"u@ c #848384",
"v@ c #6D6D6E",
"w@ c #595859",
"x@ c #AFADAF",
"y@ c #676668",
"z@ c #B0AFB0",
"A@ c #6C6C6C",
"B@ c #69686A",
"C@ c #5B5B5B",
"D@ c #B6B6B7",
"E@ c #DBDADB",
"F@ c #838183",
"G@ c #B5B4B5",
"H@ c #D1D0D1",
"I@ c #ABAAAB",
"J@ c #7A7A7A",
"K@ c #757476",
"L@ c #7C7C7C",
"M@ c #989798",
"N@ c #9F9E9F",
"O@ c #DCDCDC",
"P@ c #555555",
"Q@ c #4E4E50",
"R@ c #D8D8D8",
"S@ c #9E9D9E",
"T@ c #7D7D7D",
"U@ c #737274",
"V@ c #A8A7A8",
"W@ c #767576",
"X@ c #565656",
"Y@ c #7B7A7B",
"Z@ c #B2B2B3",
"`@ c #908F90",
" # c #EFEFEF",
".# c #F2F2F2",
"+# c #E1E1E1",
"@# c #BBBBBB",
"## c #3C3C3E",
"$# c #59595A",
"%# c #AEAEAE",
"&# c #EDEDEE",
"*# c #7D7C7D",
"=# c #F6F6F6",
"-# c #FAFAFA",
";# c #848484",
"># c #3B3B3B",
",# c #4E4E4E",
"'# c #C4C3C4",
")# c #424142",
"!# c #818081",
"~# c #E4E3E4",
"{# c #FCFCFC",
"]# c #BEBDBE",
"^# c #E4E4E4",
"/# c #EBEBEB",
"(# c #5B5A5B",
"_# c #A1A0A1",
":# c #ADACAD",
"<# c #F3F3F3",
"[# c #E8E8E8",
"}# c #A7A6A7",
"|# c #AFAEAF",
"1# c #D9D9D9",
"2# c #59585A",
"3# c #6C6C6D",
"4# c #F8F7F8",
"5# c #9F9FA0",
"6# c #828282",
"7# c #979798",
"8# c #ABABAB",
"9# c #787778",
"0# c #848485",
"a# c #3E3D3E",
"b# c #9F9F9F",
"c# c #878788",
"d# c #D1D1D1",
"e# c #8F8E8F",
"f# c #737273",
"g# c #909092",
"h# c #EEEEEE",
"i# c #E5E4E5",
"j# c #B4B3B4",
"k# c #F0F0F0",
"l# c #E0E0E0",
"m# c #9B9A9B",
"n# c #A5A4A5",
"o# c #939293",
"p# c #DFDEDF",
"q# c #868687",
"r# c #E2E2E2",
"s# c #3F3E40",
"t# c #828283",
"u# c #717071",
"v# c #7C7C7D",
"w# c #646364",
"x# c #B9B9BA",
"y# c #515052",
"z# c #A5A5A6",
"A# c #858485",
"B# c #9D9D9D",
"C# c #3D3C3E",
"D# c #CBCACB",
"E# c #BEBCBE",
"F# c #ACACAC",
"G# c #7B7B7B",
"H# c #6F6E70",
"I# c #F4F3F4",
"J# c #7E7E7F",
"K# c #E3E3E3",
"L# c #D7D7D7",
"M# c #ECEBEC",
"N# c #A7A7A8",
"O# c #929293",
"P# c #474747",
"Q# c #5A595A",
"R# c #717172",
"S# c #666666",
"T# c #7B7B7C",
"U# c #8C8C8D",
"V# c #5E5D5E",
"W# c #B2B1B2",
"X# c #F6F5F6",
"Y# c #B4B4B5",
"Z# c #8B8B8C",
"`# c #A09FA0",
" $ c #6C6B6C",
".$ c #BDBDBE",
"+$ c #4F4F4F",
"@$ c #434243",
"#$ c #646264",
"$$ c #6B6A6C",
"%$ c #494849",
"&$ c #ADADAE",
"*$ c #717072",
"=$ c #8F8D8F",
"-$ c #A9A9AA",
";$ c #6A6A6A",
">$ c #EEEDEE",
",$ c #AAAAAB",
"'$ c #F4F4F4",
")$ c #575657",
"!$ c #89898A",
"~$ c #969696",
"{$ c #8A8A8B",
"]$ c #919191",
"^$ c #A3A3A4",
"/$ c #A2A2A2",
"($ c #F1F1F1",
"_$ c #C4C4C5",
":$ c #979697",
"<$ c #4D4C4E",
"[$ c #808081",
"}$ c #9D9D9E",
"|$ c #686869",
"1$ c #BFBEBF",
"2$ c #7A7A7B",
"3$ c #CDCDCD",
"4$ c #E7E7E7",
"5$ c #757575",
"6$ c #EAEAEA",
"7$ c #F8F8F8",
"8$ c #8E8D8E",
"9$ c #8F8F90",
"0$ c #868486",
"a$ c #C9C9C9",
"b$ c #B5B5B5",
"c$ c #C7C7C7",
"d$ c #E5E5E6",
"e$ c #7F7F7F",
"f$ c #A6A5A6",
"g$ c #606060",
"h$ c #4E4D4E",
"i$ c #E6E5E6",
"j$ c #8B8A8B",
"k$ c #B5B3B5",
"l$ c #8E8E8E",
"m$ c #C1C1C2",
"n$ c #444344",
"o$ c #323234",
"p$ c #454445",
"q$ c #707071",
"r$ c #8A8A8A",
"s$ c #9E9E9F",
"t$ c #DDDDDD",
"u$ c #C5C4C5",
"v$ c #4A494A",
"w$ c #363638",
"x$ c #7F7E7F",
"y$ c #ECECEC",
"z$ c #B3B3B4",
"A$ c #919192",
"B$ c #B3B2B3",
"C$ c #E0DFE0",
"D$ c #B7B7B7",
"E$ c #686868",
"F$ c #504F50",
"G$ c #858585",
"H$ c #707070",
"I$ c #EDECED",
"J$ c #777677",
"K$ c #414141",
"L$ c #595959",
"M$ c #AFAFB0",
"N$ c #C9C8C8",
"O$ c #8D8D8E",
"P$ c #E6E6E6",
"Q$ c #5F5E5F",
"R$ c #ACABAC",
"S$ c #BEBEBF",
"T$ c #686668",
"U$ c #C7C6C6",
"V$ c #DBDBDB",
"W$ c #898889",
"X$ c #7B7B7D",
"Y$ c #C3C3C4",
"Z$ c #7E7E80",
"`$ c #D9D9DA",
" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ $ % @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ & @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ = - = @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ; @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ > , @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ ' ) ! @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ~ { @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ] ^ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ / ( _ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ : < @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ [ } @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! | 1 ! @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 2 3 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 4 5 6 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 7 8 9 0 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ a b @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ c d e @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ f g h i j @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ k l @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ m n o p @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # q r s j @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ t u @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ m n v w @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 6 x r y p @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ z A @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ c n r B # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! C D r E j @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ F G @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ H I J K L @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ _ M J r N 2 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ O P @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # Q n J v R @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ S T J r } p @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ U V # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ H v J r i # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! W r J r X Y @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ Z ` : @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # .v J J ..+.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @.#.J J r $.0 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # %.&.*.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! =.-.J J ;.>.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,.r J J '.).!.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ~.{.].k @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! ^./.J J r (.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! _.'.J J r :.<.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ [.}.I |.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j 1.T J J J 2.3.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 4.#.J J J '.5.[.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ a M ;.6.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % 7.h J J J ;.b @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 8.r J J J r 9.0.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ a.b.J c.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ p d.T J J J J e.% @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ f.M J J J J J q g.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ h.r J i.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ _ j.r J J J J v k.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ l.m.J J J J '.5 n.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ o.J J p.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ p q.r J J J J r ^.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ p r.r J J J J J s.3.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ t.J J } @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ u.{.J J J J J J 2.v.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ w.x.J J J J J J s.k.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # ! @ @ @ @ @ @ @ @ @ @ y.J J z.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ A.B.r J J J J J -.C.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ e T J J J J J J D.] @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ E.F.G.H.I.}.2.} # @ @ @ @ @ @ @ @ @ J.J J K.@ @ @ @ @ @ @ @ @ @ L.M.N.6.O.+.! @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *.P.J J J J J J r d.# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j J.J J J J J J J #.Q.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j < .q.R.&.h r J J J S.@ @ @ @ @ @ @ @ @ @ T.J J h ~ @ @ @ @ @ @ @ @ @ o.J '.-.b.U.V.y.W.X.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ +.Y.r J J J J J J ` $ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ Z.&.J J J J J J J `. +# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % .+] y.q ++;.D '.J J J J J J '.@+@ @ @ @ @ @ @ @ @ @ #+J J J $+@ @ @ @ @ @ @ @ @ %+].J J J J '.'.;.h 2.&+U *+j @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ =+s.'.J J J J J J D -+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 1.J J J J J J J J v U # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ Y ;+>+U.h J J J J J J J J J J J J ;.,+@ @ @ @ @ @ @ @ @ % I J J J '+@ @ @ @ @ @ @ @ @ )+U.J J J J J J J J J J r ` !+~+a # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ {+]+J J J J J J J J R.p @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j ^+J J J J J J J J v W ! @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # @./+(+].;.J J J J J J J J J J J J J J J _+:+@ @ @ @ @ @ @ @ @ @.;.J J J <+@ @ @ @ @ @ @ @ @ A.[+J J J J J J J J J J J J J D I }+|+.+g.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 1+2+'.J J J J J J J m.3+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ S n J J J J J J J J D 4+p @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ X.5+( &.r J J J J J J J J J J J J J J J J J J &.+.@ @ @ @ @ @ @ @ @ :+;.J J J 6+@ @ @ @ @ @ @ @ @ ! 7+J J J J J J J J J J J J J J J J J 8+9+0+, @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ a+` J J J J J J J J r b+p @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ c+d+'.J J J J J J J J T e+! @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ k f+2.h J J J J J J J J J J J J J J J J J J J J J V ! @ @ @ @ @ @ @ @ @ F r J J J g+@ @ @ @ @ @ @ @ @ @ h+J J J J J J J J J J J J J J J J J J J T D.9 0.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ / i+J J J J J J J J J x j+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ k+D.J J J J J J J J J J l+m+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % h.9 /.J J J J J J J J J J J J J J J J J J J J J J J J (+@ @ @ @ @ @ @ @ @ @ n+J J J J ].j @ @ @ @ @ @ @ @ @ o+;.J J J J J J J J J J J J J J J J J J J J J r p+U q+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j r+I J J J J J J J J J T -+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ <+r J J J J J J J J J r [+0 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # n.(.].'.J J J J J J J J J J J J J J J J J J r ;.h &.K y g :+@ @ @ @ @ @ @ @ @ g.s+J J J J _+t+@ @ @ @ @ @ @ @ @ u+v+` _+;.r '.J J J J J J J J J J J J J J J J J J I o @+p @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ w+x+J J J J J J J J J '.B.y+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
". @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ Y V.'.J J J J J J J J J r R.@.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ w.m ^+-.'.J J J J J J J J J J J J J J J J J ;.` z+1.A+k B+@ @ @ @ @ @ @ @ @ @ @ @ @ .+o J J J J ;.C+@ @ @ @ @ @ @ @ @ @ @ % .+o.D+[+}+h J J J J J J J J J J J J J J J J J '.D E+-+F+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ G+S.T J J J J J J J J J J i+H+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . ",
"+ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ Q.h J J J J J J J J J J r I+:+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # J+K+_+J J J J J J J J J J J J J J J J J r &.L+M+*+N+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ O+D.J J J J '.O @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ P+.+< Q+R+D J J J J J J J J J J J J J J J J J T o m j @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % e+h J J J J J J J J J J J s+# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ l+J J J J J J J J J J J '.D.w @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ P+Y./.J J J J J J J J J J J J J J J r b.P.S+:+! @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ F r J J J J J S.# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ !.T+U+8 ;.J J J J J J J J J J J J J J J ;...> % @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ u.6+r J J J J J J J J J J J V V+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ :+` J J J J J J J J J J J J x.>.@ @ @ @ @ @ @ @ @ @ @ @ @ @ X.y T J J J J J J J J J J J J J D W+n+:+_ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ <+J J J J J J 6+E.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j X+N.Y+/.J J J J J J J J J J J J J J J I N.# @ @ @ @ @ @ @ @ @ @ @ @ @ @ +.K+r J J J J J J J J J J J -.Z+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ N.;.J J J J J J J J J J J J ].t.@ @ @ @ @ @ @ @ @ @ @ @ @ @ % S+h J J J J J J J J J D `+ @< ! @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 5.J J J J J J ` H+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ f .@b++@-.J J J J J J J J J J J r e.Y @ @ @ @ @ @ @ @ @ @ @ @ @ @ .@@@r J J J J J J J J J J J '.#@X.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ G+$@J J J J J J J J J J J J J -.%@&@@ @ @ @ @ @ @ @ @ @ @ @ @ @ Z+E+J J J J J J D *@%@.+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ n J J J J J J r =@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j+r+K+h J J J J J J J J T -@G+@ @ @ @ @ @ @ @ @ @ @ @ @ @ ;@>@J J J J J J J J J J J J J n w @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,@r J J J J J J J J J J J J J I b+% @ @ @ @ @ @ @ @ @ @ @ @ @ # n.'@'.J J h (+[ N+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ X.'.J J J J J J J S+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j l.q./.'.J J J J /.<+f.@ @ @ @ @ @ @ @ @ @ @ @ @ @ Q.&.J J J J J J J J J J J J J r d+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ )@d.r J J J J J J J J J J J J J r d.*.@ @ @ @ @ @ @ @ @ @ @ @ @ @ u+!@].$.;@! @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ~@J J J J J J J J {@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ]@^@x J J +@U @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! /@i+J J J J J J J J J J J J J J T.(@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ _@x J J J J J J J J J J J J J J r 6+2 @ @ @ @ @ @ @ @ @ @ @ @ @ @ g.:@0 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ <@J J J J J J J J i+# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j 4.[@V o.@ @ @ @ @ @ @ @ @ @ @ @ @ @ % 7.v J J J J J J J J J J J J J J D Z+# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ }@D J J J J J J J J J J J J J J r q J+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j |@J J J J J J J J ;..+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # @ @ @ @ @ @ @ @ @ @ @ @ @ @ w.} D J J J J J J J J J J J J J J J ..1@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 0 K.J J J J J J J J J J J J J J J J x.l.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $ 8 J J J J J J J J D S @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ m+2@r J J J J J J J J J J J J J J J -.>.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 3@h J J J J J J J J J J J J J J J J ].S @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 4@;.J J J J J J J J J Q+# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 0.5@r J J J J J J J J J J J J J J J r 6@% @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ G+q.'.J J J J J J J J J J J J J J J J h 7@_ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ^@J J J J J J J J J J ..$+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # Q.D.J J J J J J J J J J J J J J J J J i+k @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ n./.J J J J J J J J J J J J J J J J J -.8@9@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # g+J J J J J J J J J J h 6.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ e D.J J J J J J J J J J J J J J J J J J ( @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 0@J J J J J J J J J J J J J J J J J J r P.(@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ :+r J J J J J J J J J J J a@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ G+%.h J J J J J J J J J J J J J J J J J J x._ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 0.D.J J J J J J J J J J J J J J J J J J '.b@o.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ c@J J J J J J J J J J J J K.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ Y L+T J J J J J J J J J J J J J J J J J J -./@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ d@r J J J J J J J J J J J J J J J J J J '.i+[ ! @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j D.J J J J J J J J J J J J r e@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ :+P r J J J J J J J J J J J J J J J J J J J f@Y @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ g@#.J J J J J J J J J J J J J J J J J J J J h@i@_ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ =+h J J J J J J J J J J J J J j@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ U +@J J J J J J J J J J J J J J J J J J J J ;.k@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ l@r J J J J J J J J J J J J J J J J J J J J ;.6+_ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 1 J J J J J J J J J J J J J J E+*.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % D+n J J J J J J J J J J J J J J J J J J J J J v+# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j P J J J J J J J J J J J J J J J J J J J J J '.$@Q.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ m@K.J J J J J J J J J J J J J J D e @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ !.n@T J J J J J J J J J J J J J J J J J J J J J m.] @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ o@h J J J J J J J J J J J J J J J J J J J J J J ` / # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ t.r J J J J J J J J J J J J J J J K+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ p@G r J J J J J J J J J J J J J J J J J J J J J '.9 j @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 0 | '.J J J J J J J J J J J J J J J J J J J J J J h q@E.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j '@J J J J J J J J J J J J J J J J T =+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % r+D.'.J J J J J J J J J J J J J J J J J J J J J J n r@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 4 ;.J J J J J J J J J J J J J J J J J J J J J J J r A s@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ a+D J J J J J J J J J J J J J J J J J t@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ u.^.v J J J J J J J J J J J J J J J J J J J J J J J J 6@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 6+J J J J J J J J J J J J J J J J J J J J J J J J '.D.u@! @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ !.6+J J J J J J J J J J J J J J J J J J /._@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ p@..r J J J J J J J J J J J J J J J J J J J J J J J J x.@.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ < ].J J J J J J J J J J J J J J J J J J J J J J J J J /.v@v.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ [ -.J J J J J J J J J J J J J J J J J J J u 0 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! r+s.J J J J J J J J J J J J J J J J J J J J J J J J J r W # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j M.'.J J J J J J J J J J J J J J J J J J J J J J J J J r K w @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ p i+J J J J J J J J J J J J J J J J J J J J -.e @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ A.w@-.J J J J J J J J J J J J J J J J J J J J J J J J J J #.a @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ x@/.J J J J J J J J J J J J J J J J J J J J J J J J J J J n W j+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j y@J J J J J J J J J J J J J J J J J J J J J J &.u.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! S V J J J J J J J J J J J J J J J J J J J J J J J J J J J J 1 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 6+J J J J J J J J J J J J J J J J J J J J J J J J J J J J r 5.z@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ S ].J J J J J J J J J J J J J J J J J J J J J J r A@p @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ Y B@v J J J J J J J J J J J J J J J J J J J J J J J J J J J J x .+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ o.n J J J J J J J J J J J J J J J J J J J J J J J J J J J J '.n ( +.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ n.i+J J J J J J J J J J J J J J J J J J J J J J J J -.7+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 0 S E+r J J J J J J J J J J J J J J J J J J J J J J J J J J J J r n+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j C@'.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J r :.S ! @ @ @ @ @ @ @ @ @ @ @ @ @ @ O.s.J J J J J J J J J J J J J J J J J J J J J J J J J J /.U # @ @ @ @ @ @ @ @ @ @ @ @ @ @ ]@!+I J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J 8 *+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ D@v J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ;.(+] % @ @ @ @ @ @ @ @ @ @ @ Q.x.J J J J J J J J J J J J J J J J J J J J J J J J J J J J v W E@@ @ @ @ @ @ @ @ @ @ @ :+9 v '.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J r W @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j I+J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J -.U+>.L @ @ @ @ @ @ @ ' F@v J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J r ).$ # @ @ @ @ @ @ # G@p.b.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J n k @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # ~.H@I@c.^ b J@|+K@L@u@M@a.A.! @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ e r J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J h }+W N@: O@: J+b+#.r J J J J J J J J J J J J -.x.A $.K v '.J J J J J J J J J J J J J J ].P@C.E.O@~.g@N.Q@v r J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J y @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # R@F.S@/ T@4+U@g T@[ M@V@[.: ~ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # w.k |.A+W@M.o 2.b.;.r J J J J J J J J J r _+2.X@Y@Z@N+@ @ @ @ @ @ @ @ @ @ @ @ @ % W+J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J D v `+n r J J J J J J J J J J J J J J #.`@*. #.#+#l.p+J J J J J J J J J J J J J J J J '.I &.m.T J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ].k.@ @ @ @ @ @ @ @ @ @ @ @ @ = @#o@M.K i+;.J J J J J J J J J r T I ##9.$#7@`@%#@#*.&#@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ l.l@).s.v T J J J J J J J J J J J J J J J J J J J r i+G ^.F.@ @ @ @ @ @ @ @ @ @ @ @ *#D J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ].H =#@ @ @ @ -#[.:.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J [+P+@ @ @ @ @ @ @ @ @ @ @ j ;#q.` h J J J J J J J J J J J J J J J J J J J r /.>#,#v@'+~.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ y+@#-+6@V T J J J J J J J J J J J J J J J J J J J J I X 4 % @ @ @ @ @ @ @ @ @ '#)#J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J r !#.#@ @ @ @ @ @ @ 5+K.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J -.;@@ @ @ @ @ @ @ @ @ @ r@b+i+J J J J J J J J J J J J J J J J J J J J r x }.^.h.E.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ~ )+>.C@#.;.J J J J J J J J J J J J J J J J J J '.i+b+' @ @ @ @ @ @ @ @ # ^@'.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ].]@@ @ @ @ @ @ @ @ +#9 J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J E+w.@ @ @ @ @ @ @ @ ~#@+@@r J J J J J J J J J J J J J J J J J J D /.f@N.@#N+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j / X@b.'.J J J J J J J J J J J J J J J J J r ].^.0 @ @ @ @ @ @ @ 0.h J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J 8 m+@ @ @ @ @ @ @ @ {#8.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J b+@ @ @ @ @ @ @ = Q.@@D J J J J J J J J J J J J J J J J J J h (+Z *.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j Z@( i+J J J J J J J J J J J J J J J J J J r 5.k.@ @ @ @ @ @ % 2.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J n ..Q@@@r J J J J J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J J J J J D @@z.@@h J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J h o.@ @ @ @ @ @ !.9 x+J J J J J J J J J J J J J J J J J J D X@S j+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j+-@#.r J J J J J J J J J J J J J J J J J ].D+f.@ @ @ @ @ A@J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J n 7@]#^#/#~.N@e.r J J J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J J J r ).l.~./#~ :+(#-.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J q w.@ @ @ @ @ _#5 r J J J J J J J J J J J J J J J J J h Y.:#@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ '#&+].J J J J J J J J J J J J J J J J J r e.(@@ @ @ @ ] h J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J 8+,.<#@ @ @ @ {#y+6+r J J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J J J {.E@@ @ @ @ @ [#Z /.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J '.%.@ @ @ @ G+y.h J J J J J J J J J J J J J J J J J T z+Q.% @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! }#$@D J J J J J J J J J J J J J J J J J M ;@@ @ @ )+8 J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J r v@_ @ @ @ @ @ @ @ |#V J J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J J V [.@ @ @ @ @ @ @ 1#V.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ;.F @ @ @ k 2#-.J J J J J J J J J J J J J J J J r b.b _ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % %@` J J J J J J J J J J J J J J J J J D 3#0 @ w.}.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ].O.@ @ @ @ @ @ @ @ ! ^.'.J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J r b 4#@ @ @ @ @ @ @ @ >.;.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J _+%+@ % >.m.J J J J J J J J J J J J J J J J J h -@@.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! 1+}+r J J J J J J J J J J J J J J J J T q@Y P+_.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ` : @ @ @ @ @ @ @ @ {#`@D J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J h 5#@ @ @ @ @ @ @ @ @ t+h J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J b.k ! %@x J J J J J J J J J J J J J J J J '.i+ .p @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ Y 9 -.J J J J J J J J J J J J J J J J r @@6#..J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J h D+l+D J J J J J J J J J J J J J J J J '.$@z@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ p 1.T J J J J J J J J J J J J J J J J J -.r J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J '.;.r J J J J J J J J J J J J J J J J r [@a @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # -+n J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J r l+w.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ S v J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J r E p @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ~+I J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J r (#2 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! W@r J J J J J J J J J J J J J J J J J J J J J J J J J J J J J '.;.;.r J J J J J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J J J J J '.;.;.D J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J z.0 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ~@S = @ @ @ @ @ @ @ @ @ @ @ @ @ p [@r J J J J J J J J J J J J J J J J J J J J J J J J J J r s.9#>.Q.0#z+;.J J J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J J J r a#d@0+b#c#z+D J J J J J J J J J J J J J J J J J J J J J J J J J J J 8 w @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % T.r ]+.@@ @ @ @ @ @ @ @ @ @ @ @ @ '#9.J J J J J J J J J J J J J J J J J J J J J J J J J T W d#{#@ @ @ % 3@&.J J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J J T 9 Y {#@ @ @ % e#&.J J J J J J J J J J J J J J J J J J J J J J J J J v ;@@ @ @ @ @ @ @ @ @ @ @ @ @ 0 f#E.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ O.v J J @@g#@ @ @ @ @ @ @ @ @ @ @ @ @ >.h J J J J J J J J J J J J J J J J J J J J J J J J K+G+@ @ @ @ @ @ h#-+D J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J V _ @ i#F.>.>.j#G+@ @ /@J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J J [@V+@ @ @ @ @ @ k#,.D J J J J J J J J J J J J J J J J J J J J J J J J d.% @ @ @ @ @ @ @ @ @ @ @ @ X+5.T o@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ <+'.J J J h 9#% @ @ @ @ @ @ @ @ @ @ @ @ (.J J J J J J J J J J J J J J J J J J J J J J J v { @ @ @ @ @ @ @ @ : 8 J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J V l#& Y.b.I I ].^+m#<#/@J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J D n#@ @ @ @ @ @ @ @ O@M J J J J J J J J J J J J J J J J J J J J J J J E+N+@ @ @ @ @ @ @ @ @ @ @ @ k.a#J J B.w.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ m@K J J J J J T } j @ @ @ @ @ @ @ @ @ @ @ =+D.J J J J J J J J J J J J J J J J J J J J J J z.V+@ @ @ @ @ @ @ @ 4#9 J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J x.o#@@J J J J J J -.Q 3#J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J K.p#@ @ @ @ @ @ @ @ 4#7@J J J J J J J J J J J J J J J J J J J J J J -.q#@ @ @ @ @ @ @ @ @ @ @ @ r+m.J J J ].k.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ a+T J J J J J J T 6 @ @ @ @ @ @ @ @ @ @ @ ! ( '.J J J J J J J J J J J J J J J J J J J J J $#r#@ @ @ @ @ @ @ @ @ ~+J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J -.8 r J J J J J J J x &.J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J 9./#@ @ @ @ @ @ @ @ -#3@J J J J J J J J J J J J J J J J J J J J J J 5 a @ @ @ @ @ @ @ @ @ @ @ a+i+J J J J '.1.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ (.J J J J J J J #.j @ @ @ @ @ @ @ @ @ @ @ @ F.].J J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J J D *#@ @ @ @ @ @ @ @ @ @ @ a+x J J J J J J s## @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j D.J J J J J J J } @ @ @ @ @ @ @ @ @ @ @ @ @ % {@J J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J J x+k @ @ @ @ @ @ @ @ @ @ @ S ;.J J J J J J h 4.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ Z@;.J J J J J J v G.@ @ @ @ @ @ @ @ @ @ @ @ @ @ t#J J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J J z+@ @ @ @ @ @ @ @ @ @ @ @ (@}+J J J J J J D u#@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ C r J J J J J J M , @ @ @ @ @ @ @ @ @ @ @ @ @ @ $+/.J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J '.v#@ @ @ @ @ @ @ @ @ @ @ @ % w#'.J J J J J J e.p @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ Y ,#J J J J J J J a@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # q J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J ].%+@ @ @ @ @ @ @ @ @ @ @ @ @ 0+;.J J J J J J &.x#@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ :+].J J J J J J J n.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ q@J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J U.t+@ @ @ @ @ @ @ @ @ @ @ @ @ E.i+J J J J J J r o@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ -+r J J J J J J _+X.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ D+'.J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J J J J J r -./.;.J J J J J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J ).w.@ @ @ @ @ @ @ @ @ @ @ @ @ @ ..J J J J J J J q@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 6+J J J J J J J y#@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ z#;.J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J J J r | A#z@O.B#-@/.J J J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J d+# @ @ @ @ @ @ @ @ @ @ @ @ @ @ D+J J J J J J J E+% @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # C#J J J J J J J W@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ o+-.J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J J r $.D#.#@ @ -#m+-+h J J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J r.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ w h J J J J J J r E#@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ D#;.J J J J J J ].%+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ F#_+J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J J X@X.@ @ @ @ @ @ -#G#T J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J H#@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 2 }+J J J J J J J =.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ^ ;.J J J J J J q t+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ o+-.J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J h > -#@ @ @ @ @ @ @ g@5.J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J A@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # J.J J J J J J J n@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 8@'.J J J J J J u ! @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,+;.J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J ` w.@ @ @ @ @ @ @ @ I#7.J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J i # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ J#;.J J J J J J )## @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ = }.J J J J J J '.N.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ l@'.J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J V K#@ @ @ @ @ @ @ @ @ /@J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J ).L#@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ R h J J J J J J &.@.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @.}+J J J J J J ;.|.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ I.J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J M @.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ (@&.J J J J J J _+%+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ Z@].J J J J J J ;.+.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # ..J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J b.:+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ M#$@J J J J J J D e@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ N#h J J J J J J b.g.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ X.n J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J b.8#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J r O#@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ P@J J J J J J J .@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ N.J J J J J J J P#@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ e#J J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J _+_#@ @ @ @ @ @ @ @ @ g@I J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J J Q#@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ R#J J J J J J J } # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ S#J J J J J J J l+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @J J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J r T#-#@ @ @ @ @ @ @ @ >.;.J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J J &.p @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,@J J J J J J J z.R@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ y#J J J J J J J T#@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ +.`+J J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J J }+w.@ @ @ @ @ @ @ 9@$.J J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J J ;.e#@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ g@r J J J J J J x.!.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @@J J J J J J r m @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ U#D J J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J J J y g.@ @ @ @ @ /#|+-.J J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J J J X@p @ @ @ @ @ @ @ @ @ @ @ @ @ @ R@i+J J J J J J h .+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ m.J J J J J J h $+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ P+v+J J J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J J J r V#W#/#X#/#(@7+v J J J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J J J b.Y#@ @ @ @ @ @ @ @ @ @ @ @ @ @ # K.J J J J J J r J+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ~.;.J J J J J J D.g@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ !#r J J J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J J J J J T K...8 /.J J J J J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J J J J 2@# @ @ @ @ @ @ @ @ @ @ @ @ @ @ ..J J J J J J J Z#@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $+J J J J J J J 8 2 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j P J J J J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J J J J v 0.@ @ @ @ @ @ @ @ @ @ @ @ @ @ K+J J J J J J J *#@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ `#J J J J J J J ..~.@ @ @ @ @ @ @ @ @ @ @ @ @ @ ! 9#D J J J J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J J J J J R.G+@ @ @ @ @ @ @ @ @ @ @ @ @ I.J J J J J J J $@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ - J J J J J J J |@~ @ @ @ @ @ @ @ @ @ @ @ @ @ @ .$2.J J J J J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J V _ @ @ @ @ @ @ @ @ @ /@J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J J J J J T e @ @ @ @ @ @ @ @ @ @ @ @ @ 7@J J J J J J J L+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ %@J J J J J J J n@@ @ @ @ @ @ @ @ @ @ @ @ @ @ # f@J J J J J J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J V K#@ @ @ @ @ @ @ @ @ /@J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J J J J J J x a.@ @ @ @ @ @ @ @ @ @ @ @ N.;.J J J J J J (.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ g J J J J J J J 9 @ @ @ @ @ @ @ @ @ @ @ @ @ # N.r J J J J J J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J ].%#-#@ @ @ @ @ @ @ @ /@J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J J J J J J J e.p @ @ @ @ @ @ @ @ @ @ @ ,.;.J J J J J J +$@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ U@J J J J J J J b+@ @ @ @ @ @ @ @ @ @ @ @ @ %+@@` @$}.$##$$$$$} (.%$` n h r J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J J 5 ]#@ @ @ @ @ @ @ @ /@J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J '.;._+&.@$6+} y@$$&$@ @ @ ##&.N.@ @ @ @ @ @ @ @ @ @ @ ,+;.J J J J J J $@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ v@J J J J J J J *$@ @ @ @ @ @ @ @ @ @ @ @ @ B+g.@ @ @ @ @ @ @ @ @ @ @ w.D@=$B.x+J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J J J R.y+@ @ @ @ @ @ @ /@J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J r ..<+z@*.f @ @ @ @ @ @ @ @ @ @ # : # @ @ @ @ @ @ @ @ @ @ o+;.J J J J J J @@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $J J J J J J J U@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ Y ] ]+D J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J J J r S+p#@ @ @ @ @ @ /@J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J r D.b a @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ -$h J J J J J J V @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ;$J J J J J J J U@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % e ].J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J J J J r >+>$@ @ @ @ @ /@J J J J J J J J J J J J J J J ;.r J J J J J J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J r w#u.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,$_+J J J J J J g+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ %.J J J J J J J U@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ M#w+r J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 ~ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J J J J J -.m#'$@ @ @ @ /@J J J J J J J J J J J J T )$!$~${$9 n J J J J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J (+A.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,$_+J J J J J J g+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $J J J J J J J U@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ p+J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J &.D#@ @ @ @ @ @ @ @ 4#c#r J J J J J J J J J J J J J b.]${#@ @ @ /@J J J J J J J J J J J D.Q.f {#@ @ 4#)+R.r J J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J x.7 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ -$_+J J J J J J g+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ v@J J J J J J J *$@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ >.v J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J h < -#@ @ @ @ @ @ @ B+V#J J J J J J J J J J J J J J J ].^$-#@ -#T@J J J J J J J J J J _+/${#@ @ @ @ @ @ $ 2.J J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J r W # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ o+;.J J J J J J @@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ n+J J J J J J J r.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @.5 J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J J 5.!.@ @ @ @ @ @ {#!$v J J J J J J J J J J J J J J J J i+c..#a.z.J J J J J J J J J J &+($@ @ @ @ @ @ @ 4#J#;.J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J ;.|.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,+;.J J J J J J ^+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ g J J J J J J J &+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! ).J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J J J Y+_$'$@ @ @ ~#:$n J J J J J J J J J J J J J J J J J J T `+/.J J J J J J J J J J h ~@{#@ @ @ @ @ @ @ @ ]#h J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J _+@.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,.;.J J J J J J 5.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ u@J J J J J J J X @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $#J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J J J r <$[$%#:+}$|$x J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J _+z#@ @ @ @ @ @ @ @ @ j+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J _+[.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ N.;.J J J J J J (.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ - J J J J J J J | ~ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # 9+J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J J J J J D ;.;.;.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J _+g@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ C J J J J J J J L+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ _#J J J J J J J ..~.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ R@z.J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J I k @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ I.J J J J J J J $@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ * J J J J J J J 8 2 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 1$8 J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J ;.0+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ (.J J J J J J J 2$@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ~.;.J J J J J J &.g@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 8#h J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J r W @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ..J J J J J J J @+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ].J J J J J J I $+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J :.k+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # g+J J J J J J '.J+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @@J J J J J J r M@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j K.J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J v =@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ R@m.J J J J J J h .+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 5.J J J J J J J *#@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ M+r J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J C@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ D#r J J J J J J ` 3$@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ I.J J J J J J J l+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j I+J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J J J J J J J J J J J J J J J J J J J J J J r o s @@'.J J J J J J J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J I 3.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,@J J J J J J J ,#R@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ l@J J J J J J J ^+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ a.v J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ].%#4$}#%$J J J J J J J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J 5$@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ W@J J J J J J J d.! @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 6.-.J J J J J J b.g.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j w@J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J J J J r x 5.}.R.v J J J J J J J J J J J J R+4$@ {#t+` J J J J J J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J ` ]@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ (.J J J J J J J 7.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ %+].J J J J J J ;.+.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ] I J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J J J -.v@F#g.9@+.]$..J J J J J J J J J J J @@6$@ @ {#e x J J J J J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J r |$@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! $@J J J J J J D ^$@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ a }+J J J J J J ;.:@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % q J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J J T q#<#@ @ @ @ {#V+K '.J J J J J J J J J @@6$@ @ @ <#]$T J J J J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J /.4.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @.&.J J J J J J I :@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % }.J J J J J J '.N.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # Z+D J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J r <+M#@ @ @ @ @ @ @ :@@@J J J J J J J J J @@6$@ @ @ @ 7$T+;.J J J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J P.0 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ &$h J J J J J J &.@.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 9 '.J J J J J J >+! @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ k K.J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J ].O.@ @ @ @ @ @ @ @ = y.J J J J J J J J J @@6$@ @ @ @ @ 6$S.r J J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J -.U#@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ +;.J J J J J J )#! @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 8$;.J J J J J J q t+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j e.J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J 8 m+@ @ @ @ @ @ @ @ @ 9$D J J J J J J J J @@6$@ @ @ @ @ @ G+6@J J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J x w @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # !+J J J J J J J J.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ .@-.J J J J J J b.:+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ S T J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J V ^#@ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J @@6$@ @ @ @ @ @ @ F+s.J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J 9+% @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ w.K J J J J J J J l@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ K.J J J J J J '.4+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 4 &.J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J @@6$@ @ @ @ @ @ @ @ F.:.J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J D 4+! @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 0.h J J J J J J r F.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ q.J J J J J J J ,#@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ _ ]+J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J @@6$@ @ @ @ @ @ @ @ 7$T@J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J x ;@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ D+J J J J J J J C#% @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ b '.J J J J J J _+B+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! C@J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J @@6$@ @ @ @ @ @ @ @ @ /@J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J s.j+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ :.J J J J J J J L+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ :+].J J J J J J J 6 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # 0$-.J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J @@6$@ @ @ @ @ @ @ @ @ /@J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J '.9+m+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ !.i+J J J J J J r `@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ E.:.J J J J J J J $@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ a+m.J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J @@6$@ @ @ @ @ @ @ @ @ /@J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J T 7+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ < ;.J J J J J J D.:+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ C r J J J J J J q , @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ =+m.J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J @@6$@ @ @ @ @ @ @ @ @ /@J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J r D+# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % ^@'.J J J J J J e.p @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ Q.;.J J J J J J v o.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ a$,#'.J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J @@6$@ @ @ @ @ @ @ @ @ /@J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J i+4 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ .+K J J J J J J r y.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j D.J J J J J J J L+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ _ z.r J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J @@6$@ @ @ @ @ @ @ @ @ /@J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J &.a+@ @ @ @ @ @ @ @ @ @ @ @ @ @ >.;.J J J J J J ;.b$@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ (.J J J J J J J #.j @ @ @ @ @ @ @ @ @ @ @ @ @ @ G+s+r J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J @@6$@ @ @ @ @ @ @ @ @ /@J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J x.c$@ @ @ @ @ @ @ @ @ @ @ @ @ p@,#'.J J J J J x.# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ M+r J J J J J r 8 w.@ @ @ @ @ @ @ @ @ @ @ @ @ ! d+;.J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J @@6$@ @ @ @ @ @ @ @ @ /@J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J '.b@$+@ @ @ @ @ @ @ @ @ @ @ @ @ d$).r J J J J A@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ m@K J J J J J V.(@@ @ @ @ @ @ @ @ @ @ @ @ @ _ %.'.J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J R+4$@ @ @ @ @ @ @ @ {#e$J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J J M g@@ @ @ @ @ @ @ @ @ @ @ @ @ _ J@T J J ].Y#@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ W J J J r (._ @ @ @ @ @ @ @ @ @ @ @ @ @ >$}@T J J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J 8 g.@ @ @ @ @ @ @ @ ($n+J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J J r B.[.@ @ @ @ @ @ @ @ @ @ @ @ @ % N.I J ,#m@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ _@v J D.U j @ @ @ @ @ @ @ @ @ @ @ @ @ p b+D J J J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J I f${#@ @ @ @ @ @ @ u+P.J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J J J r ]+g@@ @ @ @ @ @ @ @ @ @ @ @ @ @ w |@r+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j K P Q.@ @ @ @ @ @ @ @ @ @ @ @ @ @ p 9#-.J J J J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J '.g$~ @ @ @ @ @ @ -#T@T J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J J J J J h$g.@ @ @ @ @ @ @ @ @ @ @ @ @ @ E.G+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @.j @ @ @ @ @ @ @ @ @ @ @ @ @ @ j g$T J J J J J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J J r >+E@7$@ @ {#i$j$h J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J J J J J '.^+k$@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ u.y@D J J J J J J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J J J r X@l$:+$ 5#c@T J J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J J J J J J J P s@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ p B.r J J J J J J J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J J J J J D n n -.J J J J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J J J J J J J '.2.6 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ m$]+J J J J J J J J J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J J J J J J J J J i+m ! @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ n.n$r J J J J J J J J J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J i+l@# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ _ r+n J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J._ @ @ @ @ @ @ @ @ @ b J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J ]+! @ @ @ @ @ @ @ @ -#,.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J D j@m+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % b+x+J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J $#9@@ @ @ @ @ @ @ @ @ ~+J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J q /#@ @ @ @ @ @ @ @ -#t#J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J r B.:+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ J+z.r J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ..A.@ @ @ @ @ @ @ @ =#J.J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J &.X.@ @ @ @ @ @ @ @ =#s J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J b.S j @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ p U##.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J I `#@ @ @ @ @ @ @ @ [.#.J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J r U @ @ @ @ @ @ @ @ : }+J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J o$q@[.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ k &+p$K q ..z.6+6+6+6+6+z.]+q @@s.#.b.I ;.D J J J J J J J J J J J J J J J J J o : {#@ @ @ @ @ ^#q$D J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J J q +.{#@ @ @ @ @ j 7.D J J J J J J J J J J J J J J J J r ;.h ].&.s.)#q ..]+!@6+6+6+6+,#(+q P @@| M+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # g@Y ~.G+@ @ @ @ @ @ @ @ @ @ @ ~ : g@k F#F r$3#).2.h r J J J J J J J J J J J J r J.Z@f {#. =#q+3#v J J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J I K r J J J J J J J 8 @@'.J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J J r 6+0.! {#@ =#q+|+v J J J J J J J J J J J J '.h #.,#a@~+s$G.a.u+A.t$# @ @ @ @ @ @ @ @ @ @ # t$w.g@B+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! w.u$`@b+K ].;.'.J J J J J J J J r x.9 3@[ S.v$D J J J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J }+V@P.D J J J J J w$M+2$r J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J J J '.` M.x$[ y...T J J J J J J J J J ;._+8 n@Q )+Y g.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ E.o.;$q h J J J J J J J J '.;.;.r J J J J J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J U.6$L C o ]._+8 ^@%#-#c#r J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J J J J J J ;.;.r J J J J J J J J r ` u i.r@% @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ >$@.A+$.I J J J J J J J J J J J J J J J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J U.! @ y$m@Y#z$(@+#{#@ c#r J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J J J J J J J J J J J J J J J r q @+F.j @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j+D+R.h J J J J J J J J J J J J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J U.! @ @ @ @ @ @ @ @ @ c#r J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J J J J J J J J J J J J r ` I.:@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *.i.K J J J J J J J J J J J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J U.! @ @ @ @ @ @ @ @ @ c#r J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J J J J J J J J J J J n y.$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % 9#s.r J J J J J J J J J J J J J J J V _ @ @ @ @ @ @ @ @ @ 7#;.J J J J J J J J U.! @ @ @ @ @ @ @ @ @ c#r J J J J J J J J _+N#@ @ @ @ @ @ @ @ @ N+_+J J J J J J J J J J J J J J J J J 8+L+3.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @.9 o$J J J J J J J J J J J J J J 8 m+@ @ @ @ @ @ @ @ @ A$;.J J J J J J J J U.! @ @ @ @ @ @ @ @ @ c#r J J J J J J J J _+_#@ @ @ @ @ @ @ @ @ Y _+J J J J J J J J J J J J J J J r G B$# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! >.V '.J J J J J J J J J J J J b.1$@ @ @ @ @ @ @ @ f .'.J J J J J J J J U.! @ @ @ @ @ @ @ @ @ c#r J J J J J J J J ;.;#{#@ @ @ @ @ @ @ @ o.;.J J J J J J J J J J J J J J /.<+0 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # C$G+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ Y E T J J J J J J J J J J J r D+>$@ @ @ @ @ @ @ D$..J J J J J J J J J U.! @ @ @ @ @ @ @ @ @ c#r J J J J J J J J J z.O@@ @ @ @ @ @ @ f.d+'.J J J J J J J J J J J J '.:.Q.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # C$# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ !.I.L+n@{.q@a@%.7@~+S m+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ G+W ;.J J J J J J J J J J J E+`#-#@ @ @ @ @ i#y r J J J J J J J J J U.! @ @ @ @ @ @ @ @ @ c#r J J J J J J J J J r ~+y$@ @ @ @ @ 4#M+m.J J J J J J J J J J J J r ^+a @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % 1$%#A+*#C 3#s w#L+u m#@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ E$r J J J J J J '.;.B.0 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ b &.J J J J J J J J J J J n t.D#4$6$l#%#X r J J J J J J J J J J U.! @ @ @ @ @ @ @ @ @ c#r J J J J J J J J J J T S.k i$/#i$m@J#n J J J J J J J J J J J J T >+i$@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # $/.;.;.D J J J J '.5.j @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ G+[@J J J J J J J J r L+j @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! S n J J J J J J J J J J J r 5 i I.(.i+J J J J J J J J J J J J U.! @ @ @ @ @ @ @ @ @ c#r J J J J J J J J J J J J K.d.b+} W+r J J J J J J J J J J J J '.w#G+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ u@-.J J J J J J J J 2.o.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ r@a#J J J J J J J J D ^.% @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,.n J J J J J J J J J J J J J J J J J J J J J J J J J J J J U.! @ @ @ @ @ @ @ @ @ c#r J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ;.n@! @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ m n J J J J J J J J I ;@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ _#v J J J J J J J J -.<@# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ c I J J J J J J J J J J J J J J J J J J J J J J J J J J J U.! @ @ @ @ @ @ @ @ @ c#r J J J J J J J J J J J J J J J J J J J J J J J J J J J J J d.u.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ >.D.J J J J J J J J r n+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ .h J J J J J J J J h 3@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % s r J J J J J J J J J J J J J J J J J J J J J J J J J J U.! @ @ @ @ @ @ @ @ @ c#r J J J J J J J J J J J J J J J J J J J J J J J J J J J J 2.0 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ F##.J J J J J J J J r y p @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j v@r J J J J J J J J v /@# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % V.r J J J J J J J J J J J J J J J J J J J J J J J J J U.! @ @ @ @ @ @ @ @ @ c#r J J J J J J J J J J J J J J J J J J J J J J J J J J J n$w @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ =@s.J J J J J J J J J F$u.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ _ }.r J J J J J J J J v u@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ J+s.J J J J J J J J J J J J J J J J J J J J J J J J J U.! @ @ @ @ @ @ @ @ @ c#r J J J J J J J J J J J J J J J J J J J J J J J J J J D `@# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ F#s.J J J J J J J J '.s.:+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ !.V.r J J J J J J J J I ~+% @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ i.D J J J J J J J J J J J J J J J J J J J J J J J J >@/#@ @ @ @ @ @ @ @ @ G$'.J J J J J J J J J J J J J J J J J J J J J J J J J '.K+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ >.#.J J J J J J J J J +@w @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ +.}+J J J J J J J J J I 7@% @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! 5.J J J J J J J J J J J J J J J J J J J J J J J J x.P+@ @ @ @ @ @ @ @ ! H$J J J J J J J J J J J J J J J J J J J J J J J J J J #.=+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ >.D.J J J J J J J J J n 6 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ :+5 '.J J J J J J J J -.y@_ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 4.x J J J J J J J J J J J J J J J J J J J J J J J h H -#@ @ @ @ @ @ @ ]@R.J J J J J J J J J J J J J J J J J J J J J J J J J ;.l@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # -+n J J J J J J J J J b.U @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ =+@@J J J J J J J J J r ).!.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! ^.r J J J J J J J J J J J J J J J J J J J J J J J $@H+@ @ @ @ @ @ r#E J J J J J J J J J J J J J J J J J J J J J J J J J J U.u.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ _ $T J J J J J J J J J n >.# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 0.K.'.J J J J J J J J r ,#{+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ , I J J J J J J J J J J J J J J J J J J J J J J J r o t I$-#-#I#g@a@T J J J J J J J J J J J J J J J J J J J J J J J J J '.b @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 2 -@-.J J J J J J J J J n -+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ {+%$'.J J J J J J J J '.D.m % @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ s+J J J J J J J J J J J J J J J J J J J J J J J J '.n z+J$2$u D.r J J J J J J J J J J J J J J J J J J J J J J J J J J +@% @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ x@M r J J J J J J J J J &.>.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ =+}+'.J J J J J J J J J ].q#p @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 0.v J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J D C @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ U +@'.J J J J J J J J J ].U # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ , B.r J J J J J J J J J D P.F.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! !+'.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J 8 k @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 0 ( h J J J J J J J J J '.+@6 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ v.!@r J J J J J J J J J '.}+r+# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ S h J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J M.! @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ { 5.r J J J J J J J J J J K$]@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ p 9 h J J J J J J J J J J h -@w.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ E.8 J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J '.M@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j *#b.J J J J J J J J J J r F$:+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j 2$v J J J J J J J J J J J x.M+j @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ C@J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J n 1@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ >$_@P.r J J J J J J J J J J T y u.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ o##.'.J J J J J J J J J J v &+k @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 8$J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J p+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j C E+J J J J J J J J J J J I W p @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ , 5.r J J J J J J J J J J J v .+.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ X.v J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J D @+@ @ @ @ @ @ @ @ @ @ @ @ @ @ X.o#K.J J J J J J J J J J J r 2._#@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ g@q@/.J J J J J J J J J J J T :.> j @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ..J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J b.5+@ @ @ @ @ @ @ @ @ @ @ @ # .$_.v J J J J J J J J J J J D e.F#@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,.s.r J J J J J J J J J J '.h ^+l.j @ @ @ @ @ @ @ @ @ @ @ @ @ S.r J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ,#@.@ @ @ @ @ @ @ @ @ @ ! .+L$n '.J J J J J J J J J J J m.A@% @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ k A r J J J J J J J J J J J J -.[+;@% @ @ @ @ @ @ @ @ @ @ @ o#;.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ^@% @ @ @ @ @ @ @ @ @ '#^@m.J J J J J J J J J J J J J @@> % @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! W@D.'.J J J J J J J J J J J J h z+W.@ @ @ @ @ @ @ @ @ @ |.b.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J '.b @ @ @ @ @ @ @ @ @ @ B.r J J J J J J J J J J J J ++L+s@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 3.2@T J J J J J J J J J J J J J ;.0.@ @ @ @ @ @ @ @ @ t+U.J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ;.M$@ @ @ @ @ @ @ @ @ P+8 J J J J J J J J J J J r ..] ! @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ _ 3@x r J J J J J J J J J J J ;.!#@ @ @ @ @ @ @ @ @ R@F$J J J J J J J i+!+3@y.K h J J J J J J J J J J J J J J J J J J J J J J J J r D.d+=.n+V r J J J J J J ;.(@@ @ @ @ @ @ @ @ @ )+].J J J J J J J J J r I v@Y @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ [.W x J J J J J J J J J J '.>+@ @ @ @ @ @ @ @ @ @ {.J J J J J J n z@<#@ @ r#- v$J J J J J J J J J J J J J J J J J J J J J J ].*#N${#@ @ k+z+'.J J J J J v w.@ @ @ @ @ @ @ @ @ F#h J J J J J J J J I g$0.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % n.[@/.J J J J J J J J J X@# @ @ @ @ @ @ @ @ @ %.J J J J J J C@=#@ @ @ @ =#7 M r J J J J J J J J J J J J J J J J J J J &.u@M#@ @ @ @ {#7#;.J J J J J b.# @ @ @ @ @ @ @ @ @ e@D J J J J J J ;.M M+_ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # n.,#v J J J J J J J ]+w.@ @ @ @ @ @ @ @ @ l@J J J J J J O$@ @ @ @ @ @ @ ]#U+'.J J J J J J J J J J J J J J J J J ].> <#@ @ @ @ @ @ A._+J J J J J ##@ @ @ @ @ @ @ @ @ @ Y@J J J J J -.q 3@j @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ G+U (+r J J J J J }+@.@ @ @ @ @ @ @ @ @ !$J J J J J J < @ @ @ @ @ @ @ -#@#i+J J J J J J J J J J J J J J J J r T+=#@ @ @ @ @ @ @ g._+J J J J J K @ @ @ @ @ @ @ @ @ @ E$J J J r K.@+F+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ M#W.:.I '.J J 8 k @ @ @ @ @ @ @ @ @ ~$J J J J J J !$@ @ @ @ @ @ @ @ -#t.r J J J J J J J J J J J J J J J w@P$@ @ @ @ @ @ @ @ E.I J J J J J }.@ @ @ @ @ @ @ @ @ # E J h @@u@p @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
". @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! W#( i+J #.H+@ @ @ @ @ @ @ @ @ `#J J J J J J Q${#@ @ @ @ @ @ @ @ v.Y.J J J J J J J J J J J J J J v R$@ @ @ @ @ @ @ @ @ `#;.J J J J J n@@ @ @ @ @ @ @ @ @ ~ y 9+>.X.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ >$=+v@..H+@ @ @ @ @ @ @ @ @ =+J J J J J J x.r#@ @ @ @ @ @ @ @ -#@+D J J J J J J J J J J J J J ]+[#@ @ @ @ @ @ @ @ =#S.r J J J J J a@@ @ @ @ @ @ @ @ @ @ *.g.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % j @ @ @ @ @ @ @ @ @ '#J J J J J J ;.S@7$@ @ @ @ @ @ @ @ D#].J J J J J J J J J J J J J [ @ @ @ @ @ @ @ @ @ S$V J J J J J J T$@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ '#J J J J J J J J.j+@ @ @ @ @ @ @ @ f ##J J J J J J J J J J J J D k @ @ @ @ @ @ @ @ -#l@;.J J J J J J T$@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $+J J J J J J J r 7@=#@ @ @ @ @ @ @ {#e.J J J J J J J J J J J J ;.r#@ @ @ @ @ @ @ {#:@++J J J J J J J a@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ `#J J J J J J J J n a+7$@ @ @ @ @ @ {#5.J J J J J J J J J J J J ;.l#@ @ @ @ @ @ {#!.]+J J J J J J J J y @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ U J J J J J J J J J x.e@4#@ @ @ @ @ /###J J J J J J J J J J J J r 4.@ @ @ @ @ {#a 9+r J J J J J J J J !@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ O$J J J J J J J J J J i+c#E@{#@ @ 7$< h J J J J J J J J J J J J J l+P$@ @ @ = F#K J J J J J J J J J J P#@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ v#J J J J J J J J J J J I (#C.U$, ,@n$J J J J J J J J J J J J J J -.S+k g@z@E$K.'.J J J J J J J J J J g+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 1.J J J J J J J J J J J J J J T T J J J J J J J J J J J J J J J J J J T /.r J J J J J J J J J J J J J `+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 9 J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J 8+g.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! t@J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ;.a$@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ E...J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ;.:+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ' p+@@` &.].h r J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J '.;._+D.` 2.@@|.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ~ V$: *.*+F#@+d.E+r J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ].}.9#6.a.t+L ~.t$# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! @.W$q h '.J J J J J J J J J J J J J J J J J J J J J J J J J J J D x.v@:+R@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # H+l+/.J J J J J J J J J J J J J J J J J J J J J J J J ;.q >.0 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ X.@+8 '.J J J J J J J J J J J J J J J J J J J J J /.1 r@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ _ 6+T J J J J J J J J J J J J J J J J J J '.n$m @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ g.X$r J J J J J J J J J J J J J J J J J M Y$@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 7@T J J J J J J J J J J J J J J r f@% @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % Z$r J J J J J J J J J J J J J ^+`$@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ p ).'.J J J J J J J J J J J 2+g@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j F$J J J J J J J J J J 8 a+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ a+E+J J J J J J J J r Z+% @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ -+'.J J J J J J J R.# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ j +@J J J J J J ].U @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ A+I J J J J '.p.! @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 9@V#J J J J v m$@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 6 ;.J J J 2@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ f +@J J I Z.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ C J J p+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ k K.r a+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ p L+b.(@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 4@o @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ a x$@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ [.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ X.2 >$@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . "};

BIN
res/silentdragon_be.qm

Binary file not shown.

1960
res/silentdragon_be.ts

File diff suppressed because it is too large

1417
res/silentdragon_bg.ts

File diff suppressed because it is too large

BIN
res/silentdragon_de.qm

Binary file not shown.

1561
res/silentdragon_de.ts

File diff suppressed because it is too large

BIN
res/silentdragon_es.qm

Binary file not shown.

1503
res/silentdragon_es.ts

File diff suppressed because it is too large

BIN
res/silentdragon_fi.qm

Binary file not shown.

1502
res/silentdragon_fi.ts

File diff suppressed because it is too large

BIN
res/silentdragon_fil.qm

Binary file not shown.

1429
res/silentdragon_fil.ts

File diff suppressed because it is too large

BIN
res/silentdragon_fr.qm

Binary file not shown.

1496
res/silentdragon_fr.ts

File diff suppressed because it is too large

BIN
res/silentdragon_hr.qm

Binary file not shown.

1445
res/silentdragon_hr.ts

File diff suppressed because it is too large

BIN
res/silentdragon_id.qm

Binary file not shown.

1008
res/silentdragon_id.ts

File diff suppressed because it is too large

BIN
res/silentdragon_it.qm

Binary file not shown.

1507
res/silentdragon_it.ts

File diff suppressed because it is too large

BIN
res/silentdragon_nl.qm

Binary file not shown.

1485
res/silentdragon_nl.ts

File diff suppressed because it is too large

BIN
res/silentdragon_pl.qm

Binary file not shown.

1455
res/silentdragon_pl.ts

File diff suppressed because it is too large

BIN
res/silentdragon_pt.qm

Binary file not shown.

1502
res/silentdragon_pt.ts

File diff suppressed because it is too large

BIN
res/silentdragon_ro.qm

Binary file not shown.

1435
res/silentdragon_ro.ts

File diff suppressed because it is too large

BIN
res/silentdragon_ru.qm

Binary file not shown.

1960
res/silentdragon_ru.ts

File diff suppressed because it is too large

BIN
res/silentdragon_sr.qm

Binary file not shown.

1445
res/silentdragon_sr.ts

File diff suppressed because it is too large

99
res/silentdragon_template.ts

@ -457,11 +457,6 @@
<source>&amp;Export all private keys</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="1486"/>
<source>&amp;z-board.net</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="1489"/>
<source>Ctrl+A, Ctrl+Z</source>
@ -893,60 +888,6 @@ doesn&apos;t look like a z-address</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MobileAppConnector</name>
<message>
<location filename="../src/mobileappconnector.ui" line="14"/>
<source>Connect Mobile App</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mobileappconnector.ui" line="36"/>
<source>Scan this QRCode in SilentDragonAndroid to connect your device</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mobileappconnector.ui" line="43"/>
<source>QR Code</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mobileappconnector.ui" line="49"/>
<source>Connection String</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mobileappconnector.ui" line="84"/>
<source>Allow connections over the internet via SilentDragon wormhole</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mobileappconnector.ui" line="94"/>
<source>SilentDragonAndroid</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mobileappconnector.ui" line="106"/>
<source>Disconnect</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mobileappconnector.ui" line="126"/>
<location filename="../src/mobileappconnector.ui" line="160"/>
<source>TextLabel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mobileappconnector.ui" line="136"/>
<source>Last seen:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mobileappconnector.ui" line="153"/>
<source>Connection type:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PrivKey</name>
<message>
@ -1313,26 +1254,6 @@ Would you like to visit the releases page?</source>
<source>Amount</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/websockets.cpp" line="370"/>
<source>Connected directly</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/websockets.cpp" line="373"/>
<source>Connected over the internet via SilentDragon wormhole service</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/websockets.cpp" line="667"/>
<source>Node is still syncing.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/websockets.cpp" line="691"/>
<source>No addresses with enough balance to spend! Try sweeping funds into one address</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RecurringDialog</name>
@ -1594,12 +1515,12 @@ Would you like to visit the releases page?</source>
</message>
<message>
<location filename="../src/settings.ui" line="411"/>
<source>Testnet Tx Explorer URL</source>
<source>Onion Tx Explorer URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/settings.ui" line="437"/>
<source>Testnet Address Explorer URL</source>
<source>Onion Address Explorer URL</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -1762,42 +1683,42 @@ Would you like to visit the releases page?</source>
<context>
<name>createHushConf</name>
<message>
<location filename="../src/createzcashconfdialog.ui" line="14"/>
<location filename="../src/createhushconfdialog.ui" line="14"/>
<source>Configure HUSH3.conf</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/createzcashconfdialog.ui" line="61"/>
<location filename="../src/createhushconfdialog.ui" line="61"/>
<source>Show Advanced Configuration</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/createzcashconfdialog.ui" line="86"/>
<location filename="../src/createhushconfdialog.ui" line="86"/>
<source>Your Hush node will be configured for you automatically</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/createzcashconfdialog.ui" line="102"/>
<location filename="../src/createhushconfdialog.ui" line="102"/>
<source>Use custom datadir</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/createzcashconfdialog.ui" line="109"/>
<location filename="../src/createhushconfdialog.ui" line="109"/>
<source>Please choose a directory to store your wallet.dat and blockchain</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/createzcashconfdialog.ui" line="118"/>
<location filename="../src/createhushconfdialog.ui" line="118"/>
<source>Choose directory</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/createzcashconfdialog.ui" line="154"/>
<location filename="../src/createhushconfdialog.ui" line="154"/>
<source>Connect over Tor</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/createzcashconfdialog.ui" line="161"/>
<location filename="../src/createhushconfdialog.ui" line="161"/>
<source>Please note that you&apos;ll need to already have a Tor service configured on port 9050</source>
<translation type="unfinished"></translation>
</message>

BIN
res/silentdragon_tr.qm

Binary file not shown.

1496
res/silentdragon_tr.ts

File diff suppressed because it is too large

BIN
res/silentdragon_uk.qm

Binary file not shown.

1568
res/silentdragon_uk.ts

File diff suppressed because it is too large

BIN
res/silentdragon_zh.qm

Binary file not shown.

1520
res/silentdragon_zh.ts

File diff suppressed because it is too large

BIN
res/synced.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
res/transaction0.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
res/transaction2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
res/transaction_abandoned.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
res/transaction_conflicted.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
res/tropical-hush-square.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

BIN
res/tropical-hush.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

BIN
res/tx_inout.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
res/tx_input.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
res/tx_mined.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
res/tx_output.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
res/verify.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
res/warning.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

4
run-after-build-sdx.sh

@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Copyright 2019-2023 The Hush Developers
./build-sdx.sh && ./silentdragonx

2
run-after-build.sh

@ -1,4 +1,4 @@
#!/bin/bash
# Copyright 2019-2021 The Hush Developers
# Copyright 2019-2022 The Hush Developers
./build.sh && ./silentdragon

13
silentdragon.pro

@ -1,4 +1,4 @@
# Copyright 2018-2021 The Hush Developers
# Copyright 2018-2022 The Hush Developers
# Released under the GPLv3
# Project created by QtCreator 2018-10-05T09:54:45
@ -9,7 +9,6 @@ CONFIG += precompile_header
PRECOMPILED_HEADER = src/precompiled.h
QT += widgets
QT += websockets
TARGET = silentdragon
@ -58,14 +57,13 @@ SOURCES += \
src/logger.cpp \
src/addresscombo.cpp \
src/validateaddress.cpp \
src/websockets.cpp \
src/mobileappconnector.cpp \
src/recurring.cpp \
src/requestdialog.cpp \
src/memoedit.cpp \
src/viewalladdresses.cpp
HEADERS += \
src/guiconstants.h \
src/mainwindow.h \
src/precompiled.h \
src/rpc.h \
@ -85,8 +83,6 @@ HEADERS += \
src/logger.h \
src/addresscombo.h \
src/validateaddress.h \
src/websockets.h \
src/mobileappconnector.h \
src/recurring.h \
src/requestdialog.h \
src/memoedit.h \
@ -94,6 +90,8 @@ HEADERS += \
FORMS += \
src/mainwindow.ui \
src/qrcode.ui \
src/rescandialog.ui \
src/settings.ui \
src/about.ui \
src/confirm.ui \
@ -106,8 +104,7 @@ FORMS += \
src/connection.ui \
src/addressbook.ui \
src/viewalladdresses.ui \
src/mobileappconnector.ui \
src/createzcashconfdialog.ui \
src/createhushconfdialog.ui \
src/recurringdialog.ui \
src/newrecurring.ui \
src/requestdialog.ui

162
silentdragonx.pro

@ -0,0 +1,162 @@
# Copyright 2018-2023 The Hush Developers
# Released under the GPLv3
QT += core gui network
CONFIG += precompile_header
PRECOMPILED_HEADER = src/precompiled.h
QT += widgets
TARGET = silentdragonx
TEMPLATE = app
# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += \
QT_DEPRECATED_WARNINGS
INCLUDEPATH += src/3rdparty/
INCLUDEPATH += src/
mac: LIBS+= -Wl,-dead_strip
mac: LIBS+= -Wl,-dead_strip_dylibs
mac: LIBS+= -Wl,-bind_at_load
RESOURCES = application-sdx.qrc
MOC_DIR = bin
OBJECTS_DIR = bin
UI_DIR = src
CONFIG += c++14
SOURCES += \
src/main.cpp \
src/mainwindow.cpp \
src/rpc.cpp \
src/balancestablemodel.cpp \
src/3rdparty/qrcode/BitBuffer.cpp \
src/3rdparty/qrcode/QrCode.cpp \
src/3rdparty/qrcode/QrSegment.cpp \
src/settings.cpp \
src/sendtab.cpp \
src/senttxstore.cpp \
src/txtablemodel.cpp \
src/peerstablemodel.cpp \
src/bannedpeerstablemodel.cpp \
src/qrcodelabel.cpp \
src/connection.cpp \
src/fillediconlabel.cpp \
src/addressbook.cpp \
src/logger.cpp \
src/addresscombo.cpp \
src/validateaddress.cpp \
src/recurring.cpp \
src/requestdialog.cpp \
src/memoedit.cpp \
src/viewalladdresses.cpp
HEADERS += \
src/guiconstants.h \
src/mainwindow.h \
src/precompiled.h \
src/rpc.h \
src/balancestablemodel.h \
src/3rdparty/qrcode/BitBuffer.hpp \
src/3rdparty/qrcode/QrCode.hpp \
src/3rdparty/qrcode/QrSegment.hpp \
src/settings.h \
src/txtablemodel.h \
src/peerstablemodel.h \
src/bannedpeerstablemodel.h \
src/senttxstore.h \
src/qrcodelabel.h \
src/connection.h \
src/fillediconlabel.h \
src/addressbook.h \
src/logger.h \
src/addresscombo.h \
src/validateaddress.h \
src/recurring.h \
src/requestdialog.h \
src/memoedit.h \
src/viewalladdresses.h
FORMS += \
src/mainwindow.ui \
src/qrcode.ui \
src/rescandialog.ui \
src/settings.ui \
src/about.ui \
src/confirm.ui \
src/privkey.ui \
src/viewkey.ui \
src/memodialog.ui \
src/viewalladdresses.ui \
src/validateaddress.ui \
src/viewalladdresses.ui \
src/connection.ui \
src/addressbook.ui \
src/viewalladdresses.ui \
src/createhushconfdialog.ui \
src/recurringdialog.ui \
src/newrecurring.ui \
src/requestdialog.ui
TRANSLATIONS = res-drgx/silentdragon_be.ts \
res-drgx/silentdragon_bg.ts \
res-drgx/silentdragon_de.ts \
res-drgx/silentdragon_es.ts \
res-drgx/silentdragon_fi.ts \
res-drgx/silentdragon_fil.ts \
res-drgx/silentdragon_fr.ts \
res-drgx/silentdragon_hr.ts \
res-drgx/silentdragon_id.ts \
res-drgx/silentdragon_it.ts \
res-drgx/silentdragon_nl.ts \
res-drgx/silentdragon_pl.ts \
res-drgx/silentdragon_pt.ts \
res-drgx/silentdragon_ro.ts \
res-drgx/silentdragon_ru.ts \
res-drgx/silentdragon_sr.ts \
res-drgx/silentdragon_tr.ts \
res-drgx/silentdragon_uk.ts \
res-drgx/silentdragon_zh.ts
include(singleapplication/singleapplication.pri)
DEFINES += QAPPLICATION_CLASS=QApplication _FORTIFY_SOURCE=2
QMAKE_INFO_PLIST = res-drgx/Info.plist
win32: RC_ICONS = res-drgx/icon.ico
ICON = res-drgx/logo.icns
libsodium.target = $$PWD/res/libsodium.a
libsodium.commands = res/libsodium/buildlibsodium.sh
QMAKE_EXTRA_TARGETS += libsodium
QMAKE_CLEAN += res/libsodium.a
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/res/ -llibsodium
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/res/ -llibsodiumd
else:unix: LIBS += -L$$PWD/res/ -lsodium
INCLUDEPATH += $$PWD/res
DEPENDPATH += $$PWD/res
win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/res/liblibsodium.a
else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/res/liblibsodium.a
else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/res/libsodium.lib
else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/res/libsodiumd.lib
else:unix: PRE_TARGETDEPS += $$PWD/res/libsodium.a

2
src/about.ui

@ -53,7 +53,7 @@
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Ubuntu'; font-size:12pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8.1pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Copyright(c) 2019-2021 The Hush developers (GPLv3)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Copyright(c) 2019-2022 The Hush developers (GPLv3)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Copyright (c) 2019 Duke Leto, Jane Mercer and Aditya Kulkarni. (MIT License)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Special thanks to:&lt;/span&gt;&lt;/p&gt;

13
src/addressbook.cpp

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#include "addressbook.h"
#include "ui_addressbook.h"
@ -7,6 +7,7 @@
#include "mainwindow.h"
#include "rpc.h"
extern bool isdragonx;
AddressBookModel::AddressBookModel(QTableView *parent)
: QAbstractTableModel(parent) {
@ -274,13 +275,12 @@ void AddressBook::readFromStorage() {
file.close();
}
// Special.
// Add the default ZecWallet donation address if it isn't already present
// Add the default donation address if it isn't already present
// QList<QString> allAddresses;
// std::transform(allLabels.begin(), allLabels.end(),
// std::transform(allLabels.begin(), allLabels.end(),
// std::back_inserter(allAddresses), [=] (auto i) { return i.second; });
// if (!allAddresses.contains(Settings::getDonationAddr())) {
// allLabels.append(QPair<QString, QString>("ZecWallet donation", Settings::getDonationAddr()));
// allLabels.append(QPair<QString, QString>("SilentDragon donation", Settings::getDonationAddr()));
// }
}
@ -294,6 +294,9 @@ void AddressBook::writeToStorage() {
QString AddressBook::writeableFile() {
auto filename = QStringLiteral("addresslabels.dat");
if (isdragonx) {
filename = QStringLiteral("addresslabels-drgx.dat");
}
auto dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation));
if (!dir.exists())

2
src/addressbook.h

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#ifndef ADDRESSBOOK_H
#define ADDRESSBOOK_H

2
src/addresscombo.cpp

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#include "addresscombo.h"
#include "addressbook.h"

2
src/addresscombo.h

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#ifndef ADDRESSCOMBO_H
#define ADDRESSCOMBO_H

28
src/balancestablemodel.cpp

@ -1,8 +1,9 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#include "balancestablemodel.h"
#include "addressbook.h"
#include "settings.h"
#include "guiconstants.h"
BalancesTableModel::BalancesTableModel(QObject *parent)
@ -60,6 +61,10 @@ int BalancesTableModel::columnCount(const QModelIndex&) const
QVariant BalancesTableModel::data(const QModelIndex &index, int role) const
{
// Get current theme name
QString theme_name = Settings::getInstance()->get_theme_name();
QBrush b;
if (loading) {
if (role == Qt::DisplayRole)
return "Loading...";
@ -69,21 +74,26 @@ QVariant BalancesTableModel::data(const QModelIndex &index, int role) const
if (role == Qt::TextAlignmentRole && index.column() == 1) return QVariant(Qt::AlignRight | Qt::AlignVCenter);
if (role == Qt::ForegroundRole) {
if (role == Qt::ForegroundRole) {
// If any of the UTXOs for this address has zero confirmations, paint it in red
const auto& addr = std::get<0>(modeldata->at(index.row()));
for (auto utxo : *utxos) {
if (utxo.address == addr && utxo.confirmations == 0) {
QBrush b;
b.setColor(Qt::red);
b.setColor(COLOR_UNCONFIRMED_TX);
return b;
}
}
// Else, just return the default brush
QBrush b;
b.setColor(Qt::black);
return b;
if (theme_name == "dark" || theme_name == "midnight") {
b.setColor(COLOR_WHITE);
return b;
}else if (theme_name == "dragonx"){
b.setColor(COLOR_DRAGONX_TEXT);
return b;
}else{
b.setColor(COLOR_BLACK);
return b;
}
return b;
}
if (role == Qt::DisplayRole) {

2
src/balancestablemodel.h

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#ifndef BALANCESTABLEMODEL_H
#define BALANCESTABLEMODEL_H

11
src/bannedpeerstablemodel.cpp

@ -1,5 +1,6 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#include "bannedpeerstablemodel.h"
#include "settings.h"
#include "rpc.h"
@ -59,6 +60,7 @@ int BannedPeersTableModel::columnCount(const QModelIndex&) const
case 0: return dat.address;
case 1: return dat.subnet;
case 2: return QDateTime::fromSecsSinceEpoch(dat.banned_until).toLocalTime().toString();
case 3: return "AS" + QString::number(dat.asn);
}
}
@ -68,6 +70,7 @@ int BannedPeersTableModel::columnCount(const QModelIndex&) const
case 0: return "Network Address";
case 1: return "Subnet Mask";
case 2: return "Banned Until " + QDateTime::fromSecsSinceEpoch(dat.banned_until).toUTC().toString();
case 3: return "Autonomous System Number";
}
}
@ -77,7 +80,7 @@ int BannedPeersTableModel::columnCount(const QModelIndex&) const
if (!dat.memo.isEmpty()) {
// If the memo is a Payment URI, then show a payment request icon
if (dat.memo.startsWith("hush:")) {
QIcon icon(":/icons/res/paymentreq.gif");
QIcon icon(":/icons/paymentreq.gif");
return QVariant(icon.pixmap(16, 16));
} else {
// Return the info pixmap to indicate memo
@ -119,6 +122,10 @@ QString BannedPeersTableModel::getAddress(int row) const {
return modeldata->at(row).address.trimmed();
}
qint64 BannedPeersTableModel::getASN(int row) const {
return modeldata->at(row).asn;
}
QString BannedPeersTableModel::getSubnet(int row) const {
return modeldata->at(row).subnet;
}

3
src/bannedpeerstablemodel.h

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#ifndef BANNEDPEERSTABLEMODEL_H
#define BANNEDPEERSTABLEMODEL_H
@ -15,6 +15,7 @@ public:
QString getSubnet(int row) const;
QString getAddress(int row) const;
qint64 getASN(int row) const;
qint64 getBannedUntil(int row) const;
int rowCount(const QModelIndex &parent) const;

296
src/connection.cpp

@ -1,15 +1,18 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2023 The Hush developers
// Released under the GPLv3
#include "connection.h"
#include "mainwindow.h"
#include "settings.h"
#include "ui_connection.h"
#include "ui_createzcashconfdialog.h"
#include "ui_createhushconfdialog.h"
#include "rpc.h"
#include "precompiled.h"
#include "version.h"
extern bool isdragonx;
ConnectionLoader::ConnectionLoader(MainWindow* main, RPC* rpc) {
qDebug() << __func__;
this->main = main;
this->rpc = rpc;
@ -17,20 +20,17 @@ ConnectionLoader::ConnectionLoader(MainWindow* main, RPC* rpc) {
d->setWindowFlags(d->windowFlags() & ~(Qt::WindowCloseButtonHint | Qt::WindowContextHelpButtonHint));
connD = new Ui_ConnectionDialog();
connD->setupUi(d);
QMovie *movie1 = new QMovie(":/img/res/silentdragon-animated-startup.gif");;
QMovie *movie2 = new QMovie(":/img/res/silentdragon-animated-startup-dark.gif");;
if(isdragonx) {
d->setWindowTitle("SilentDragonX");
}
QMovie *movie1 = new QMovie(":/img/silentdragon-animated-startup-dark.gif");;
auto theme = Settings::getInstance()->get_theme_name();
auto size = QSize(512,512);
if (theme == "dark" || theme == "midnight") {
movie2->setScaledSize(size);
connD->topIcon->setMovie(movie2);
movie2->start();
} else {
movie1->setScaledSize(size);
connD->topIcon->setMovie(movie1);
movie1->start();
}
movie1->setScaledSize(size);
connD->topIcon->setMovie(movie1);
movie1->start();
main->logger->write("set animation");
qDebug() << "set animation";
}
@ -43,12 +43,14 @@ ConnectionLoader::~ConnectionLoader() {
}
void ConnectionLoader::loadConnection() {
qDebug() << __func__;
QTimer::singleShot(1, [=]() { this->doAutoConnect(); });
if (!Settings::getInstance()->isHeadless())
d->exec();
}
void ConnectionLoader::doAutoConnect(bool tryEhushdStart) {
qDebug() << __func__;
// Priority 1: Ensure all params are present.
if (!verifyParams()) {
qDebug() << "Cannot find sapling params!";
@ -66,7 +68,11 @@ void ConnectionLoader::doAutoConnect(bool tryEhushdStart) {
// Refused connection. So try and start embedded hushd
if (Settings::getInstance()->useEmbedded()) {
if (tryEhushdStart) {
this->showInformation(QObject::tr("Starting embedded hushd"));
if(isdragonx) {
this->showInformation(QObject::tr("Starting embedded dragonxd"));
} else {
this->showInformation(QObject::tr("Starting embedded hushd"));
}
if (this->startEmbeddedHushd()) {
// Embedded hushd started up. Wait a second and then refresh the connection
main->logger->write("Embedded hushd started up, trying autoconnect in 1 sec");
@ -74,12 +80,12 @@ void ConnectionLoader::doAutoConnect(bool tryEhushdStart) {
} else {
if (config->hushDaemon) {
// hushd is configured to run as a daemon, so we must wait for a few seconds
// to let it start up.
// to let it start up.
main->logger->write("hushd is daemon=1. Waiting for it to start up");
this->showInformation(QObject::tr("hushd is set to run as daemon"), QObject::tr("Waiting for hushd"));
QTimer::singleShot(5000, [=]() { doAutoConnect(/* don't attempt to start ehushd */ false); });
} else {
// Something is wrong.
// Something is wrong.
// We're going to attempt to connect to the one in the background one last time
// and see if that works, else throw an error
main->logger->write("Unknown problem while trying to start hushd!");
@ -87,7 +93,7 @@ void ConnectionLoader::doAutoConnect(bool tryEhushdStart) {
}
}
} else {
// We tried to start ehushd previously, and it didn't work. So, show the error.
// We tried to start ehushd previously, and it didn't work. So, show the error.
main->logger->write("Couldn't start embedded hushd for unknown reason");
QString explanation;
if (config->hushDaemon) {
@ -95,20 +101,37 @@ void ConnectionLoader::doAutoConnect(bool tryEhushdStart) {
"with SilentDragon\n\n."
"Please remove the following line from your HUSH3.conf and restart SilentDragon\n"
"daemon=1");
if (isdragonx) {
explanation = QString() % QObject::tr("You have dragonxd set to start as a daemon, which can cause problems "
"with SilentDragonX\n\n."
"Please remove the following line from your DRAGONX.conf and restart SilentDragonX\n"
"daemon=1");
}
} else {
explanation = QString() % QObject::tr("Couldn't start the embedded hushd.\n\n"
"Please try restarting.\n\nIf you previously started hushd with custom arguments, you might need to reset HUSH3.conf.\n\n"
"If all else fails, please run hushd manually.") %
explanation = QString() % QObject::tr("Couldn't start the embedded hushd.\n\n"
"Please try restarting.\n\nIf you previously started hushd with custom arguments, you might need to reset HUSH3.conf.\n\n"
"If all else fails, please run hushd manually.") %
(ehushd ? QObject::tr("The process returned") + ":\n\n" % ehushd->errorString() : QString(""));
if(isdragonx) {
explanation = QString() % QObject::tr("Couldn't start the embedded dragonxd.\n\n"
"Please try restarting.\n\nIf you previously started hushd with custom arguments, you might need to reset DRAGONX.conf.\n\n"
"If all else fails, please run dragonxd manually.") %
(ehushd ? QObject::tr("The process returned") + ":\n\n" % ehushd->errorString() : QString(""));
}
}
this->showError(explanation);
}
}
} else {
// HUSH3.conf exists, there's no connection, and the user asked us not to start hushd. Error!
main->logger->write("Not using embedded and couldn't connect to hushd");
QString explanation = QString() % QObject::tr("Couldn't connect to hushd configured in HUSH3.conf.\n\n"
QString explanation = QString() % QObject::tr("Couldn't connect to hushd configured in HUSH3.conf.\n\n"
"Not starting embedded hushd because --no-embedded was passed");
if(isdragonx) {
main->logger->write("Not using embedded and couldn't connect to dragonxd");
QString explanation = QString() % QObject::tr("Couldn't connect to dragonxd configured in DRAGONX.conf.\n\n"
"Not starting embedded dragonxd because --no-embedded was passed");
}
this->showError(explanation);
}
});
@ -120,7 +143,7 @@ void ConnectionLoader::doAutoConnect(bool tryEhushdStart) {
// Fall back to manual connect
doManualConnect();
}
}
}
}
QString randomPassword() {
@ -129,11 +152,17 @@ QString randomPassword() {
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";
const int passwordLength = 10;
// Assume we have low entropy randomness,
// so we generate a longer password than we probably need
const int passwordLength = 32;
char* s = new char[passwordLength + 1];
for (int i = 0; i < passwordLength; ++i) {
#ifdef Q_OS_LINUX
s[i] = alphanum[randombytes_uniform(sizeof(alphanum))];
#else
s[i] = alphanum[rand() % (sizeof(alphanum) - 1)];
#endif
}
s[passwordLength] = 0;
@ -142,7 +171,7 @@ QString randomPassword() {
/**
* This will create a new HUSH3.conf and download params if they cannot be found
*/
*/
void ConnectionLoader::createHushConf() {
main->logger->write(__func__);
@ -153,7 +182,7 @@ void ConnectionLoader::createHushConf() {
Ui_createHushConf ui;
ui.setupUi(&d);
QPixmap logo(":/img/res/tropical-hush-square.png");
QPixmap logo(":/img/hushdlogo.png");
ui.lblTopIcon->setBasePixmap(logo.scaled(512,512, Qt::KeepAspectRatio, Qt::SmoothTransformation));
ui.btnPickDir->setEnabled(false);
@ -182,9 +211,12 @@ void ConnectionLoader::createHushConf() {
// Show the dialog
QString datadir = "";
bool useTor = false;
QString torPort = "9050";
if (d.exec() == QDialog::Accepted) {
datadir = ui.lblDirName->text();
useTor = ui.chkUseTor->isChecked();
torPort = ui.torPort->text();
}
main->logger->write("Creating file " + confLocation);
@ -192,20 +224,30 @@ void ConnectionLoader::createHushConf() {
QFile file(confLocation);
if (!file.open(QIODevice::ReadWrite | QIODevice::Truncate)) {
main->logger->write("Could not create HUSH3.conf, returning");
QString explanation = QString() % (isdragonx ? QObject::tr("Could not create DRAGONX.conf.") : QObject::tr("Could not create HUSH3.conf.") );
main->logger->write(explanation);
QString explanation = QString() % QObject::tr("Could not create HUSH3.conf.");
this->showError(explanation);
return;
}
QTextStream out(&file);
out << "# Autogenerated by Hush SilentDragon " << APP_VERSION << " https://hush.is\n";
if(isdragonx) {
out << "# Autogenerated by Hush SilentDragonX " << APP_VERSION << " https://dragonx.is\n";
} else {
out << "# Autogenerated by Hush SilentDragon " << APP_VERSION << " https://hush.is\n";
}
out << "server=1\n";
out << "rpcuser=hush\n";
out << "rpcpassword=" % randomPassword() << "\n";
out << "rpcport=18031\n";
if(isdragonx) {
out << "rpcuser=dragonx\n";
out << "rpcport=21769\n";
} else {
out << "rpcuser=hush\n";
out << "rpcport=18031\n";
}
out << "txindex=1\n";
out << "addressindex=1\n";
out << "spentindex=1\n";
@ -224,7 +266,7 @@ void ConnectionLoader::createHushConf() {
out << "datadir=" % datadir % "\n";
}
if (useTor) {
out << "proxy=127.0.0.1:9050\n";
out << "proxy=127.0.0.1:" << torPort << "\n";
}
file.close();
@ -266,7 +308,7 @@ void ConnectionLoader::doNextDownload(std::function<void(void)> cb) {
}
// The downloaded file is written to a new name, and then renamed when the operation completes.
currentOutput = new QFile(QDir(paramsDir).filePath(filename + ".part"));
currentOutput = new QFile(QDir(paramsDir).filePath(filename + ".part"));
if (!currentOutput->open(QIODevice::WriteOnly)) {
main->logger->write("Couldn't open " + currentOutput->fileName() + " for writing");
@ -274,12 +316,12 @@ void ConnectionLoader::doNextDownload(std::function<void(void)> cb) {
}
main->logger->write("Downloading to " + filename);
qDebug() << "Downloading " << url << " to " << filename;
QNetworkRequest request(url);
request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
currentDownload = client->get(request);
downloadTime.start();
// Download Progress
QObject::connect(currentDownload, &QNetworkReply::downloadProgress, [=] (auto done, auto total) {
// calculate the download speed
@ -299,7 +341,7 @@ void ConnectionLoader::doNextDownload(std::function<void(void)> cb) {
QObject::tr("Downloading ") % filename % (filesRemaining > 1 ? " ( +" % QString::number(filesRemaining) % QObject::tr(" more remaining )") : QString("")),
QString::number(done/1024/1024, 'f', 0) % QObject::tr("MB of ") % QString::number(total/1024/1024, 'f', 0) + QObject::tr("MB at ") % QString::number(speed, 'f', 2) % unit);
});
// Download Finished
QObject::connect(currentDownload, &QNetworkReply::finished, [=] () {
// Rename file
@ -312,22 +354,22 @@ void ConnectionLoader::doNextDownload(std::function<void(void)> cb) {
if (currentDownload->error()) {
main->logger->write("Downloading " + filename + " failed");
this->showError(QObject::tr("Downloading ") + filename + QObject::tr(" failed. Please check the help site for more info"));
this->showError(QObject::tr("Downloading ") + filename + QObject::tr(" failed. Please check the help site for more info"));
} else {
doNextDownload(cb);
}
});
// Download new data available.
// Download new data available.
QObject::connect(currentDownload, &QNetworkReply::readyRead, [=] () {
currentOutput->write(currentDownload->readAll());
});
});
}
bool ConnectionLoader::startEmbeddedHushd() {
if (!Settings::getInstance()->useEmbedded())
if (!Settings::getInstance()->useEmbedded())
return false;
main->logger->write("Trying to start embedded hushd");
// Static because it needs to survive even after this method returns.
@ -336,36 +378,40 @@ bool ConnectionLoader::startEmbeddedHushd() {
if (ehushd != nullptr) {
if (ehushd->state() == QProcess::NotRunning) {
if (!processStdErrOutput.isEmpty()) {
QMessageBox::critical(main, QObject::tr("hushd error"), "hushd said: " + processStdErrOutput,
QMessageBox::critical(main, QObject::tr("hushd error"), "hushd said: " + processStdErrOutput,
QMessageBox::Ok);
}
return false;
} else {
return true;
}
}
}
QDir appPath(QCoreApplication::applicationDirPath());
#ifdef Q_OS_WIN64
auto hushdProgram = appPath.absoluteFilePath("hushd.exe");
// params for DRGX are handled below
#else
auto hushdProgram = appPath.absoluteFilePath("hushd");
if (isdragonx) {
hushdProgram = appPath.absoluteFilePath("dragonxd");
}
#endif
//if (!QFile(hushdProgram).exists()) {
if (!QFile::exists(hushdProgram)) {
qDebug() << "Can't find hushd at " << hushdProgram;
main->logger->write("Can't find hushd at " + hushdProgram);
qDebug() << "Can't find binary at " << hushdProgram;
main->logger->write("Can't find binary at " + hushdProgram);
return false;
} else {
qDebug() << "Found hushd at " << hushdProgram;
main->logger->write("Found hushd at " + hushdProgram);
qDebug() << "Found binary at " << hushdProgram;
main->logger->write("Found binary at " + hushdProgram);
}
ehushd = std::shared_ptr<QProcess>(new QProcess(main));
QObject::connect(ehushd.get(), &QProcess::started, [=] () {
qDebug() << "Embedded hushd started via " << hushdProgram;
qDebug() << "Embedded binary started via " << hushdProgram;
});
QObject::connect(ehushd.get(), QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
@ -399,6 +445,10 @@ bool ConnectionLoader::startEmbeddedHushd() {
qDebug() << "No ASN map file found";
}
*/
if(isdragonx) {
// dragonxd bash script cannot be used on windows, so specify exact chain params
params += " -ac_name=DRAGONX -ac_algo=randomx -ac_halving=3500000 -ac_reward=300000000 -ac_blocktime=36 -ac_private=1 -addnode=176.126.87.241";
}
QStringList arguments = params.split(" ");
@ -441,7 +491,7 @@ void ConnectionLoader::doManualConnect() {
auto connection = makeConnection(config);
refreshHushdState(connection, [=] () {
QString explanation = QString()
% QObject::tr("Could not connect to hushd configured in settings.\n\n"
% QObject::tr("Could not connect to hushd configured in settings.\n\n"
"Please set the host/port and user/password in the Edit->Settings menu.");
showError(explanation);
@ -454,7 +504,7 @@ void ConnectionLoader::doManualConnect() {
void ConnectionLoader::doRPCSetConnection(Connection* conn) {
rpc->setEHushd(ehushd);
rpc->setConnection(conn);
d->accept();
delete this;
@ -462,7 +512,7 @@ void ConnectionLoader::doRPCSetConnection(Connection* conn) {
Connection* ConnectionLoader::makeConnection(std::shared_ptr<ConnectionConfig> config) {
QNetworkAccessManager* client = new QNetworkAccessManager(main);
QUrl myurl;
myurl.setScheme("http");
myurl.setHost(config.get()->host);
@ -471,44 +521,50 @@ Connection* ConnectionLoader::makeConnection(std::shared_ptr<ConnectionConfig> c
QNetworkRequest* request = new QNetworkRequest();
request->setUrl(myurl);
request->setHeader(QNetworkRequest::ContentTypeHeader, "text/plain");
QString userpass = config.get()->rpcuser % ":" % config.get()->rpcpassword;
QString headerData = "Basic " + userpass.toLocal8Bit().toBase64();
request->setRawHeader("Authorization", headerData.toLocal8Bit());
request->setRawHeader("Authorization", headerData.toLocal8Bit());
return new Connection(main, client, request, config);
}
void ConnectionLoader::refreshHushdState(Connection* connection, std::function<void(void)> refused) {
main->logger->write("refreshing state");
qDebug() << __func__ << ": refreshing state";
QJsonObject payload = {
{"jsonrpc", "1.0"},
{"id", "someid"},
{"id", "42"},
{"method", "getinfo"}
};
connection->doRPC(payload,
[=] (auto) {
// Success
main->logger->write("hushd is online!");
qDebug() << __func__ << ": hushd is online!";
// Delay 1 second to ensure loading (splash) is seen at least 1 second.
QTimer::singleShot(1000, [=]() { this->doRPCSetConnection(connection); });
},
[=] (QNetworkReply* reply, const QJsonValue &res) {
// Failed, see what it is.
qDebug() << __func__ << ": failed to connect to hushd!";
// Failed, see what it is.
auto err = reply->error();
//qDebug() << err << res;
if (err == QNetworkReply::NetworkError::ConnectionRefusedError) {
if (err == QNetworkReply::NetworkError::ConnectionRefusedError) {
refused();
} else if (err == QNetworkReply::NetworkError::AuthenticationRequiredError) {
main->logger->write("Authentication failed");
QString explanation = QString() %
QString explanation = QString() %
QObject::tr("Authentication failed. The username / password you specified was "
"not accepted by hushd. Try changing it in the Edit->Settings menu");
if(isdragonx) {
explanation = QString() %
QObject::tr("Authentication failed. The username / password you specified was "
"not accepted by dragonxd. Try changing it in the Edit->Settings menu");
}
this->showError(explanation);
} else if (err == QNetworkReply::NetworkError::InternalServerError &&
} else if (err == QNetworkReply::NetworkError::InternalServerError &&
!res.isNull()) {
// The server is loading, so just poll until it succeeds
QString status = res["error"].toObject()["message"].toString();
@ -519,7 +575,11 @@ void ConnectionLoader::refreshHushdState(Connection* connection, std::function<v
if (dots > 3)
dots = 0;
}
this->showInformation(QObject::tr("Your hushd is starting up. Please wait."), status);
if(isdragonx) {
this->showInformation(QObject::tr("Your dragonxd is starting up. Please wait."), status);
} else {
this->showInformation(QObject::tr("Your hushd is starting up. Please wait."), status);
}
main->logger->write("Waiting for hushd to come online.");
// Refresh after one second
QTimer::singleShot(1000, [=]() { this->refreshHushdState(connection, refused); });
@ -532,9 +592,10 @@ void ConnectionLoader::refreshHushdState(Connection* connection, std::function<v
void ConnectionLoader::showInformation(QString info, QString detail) {
static int rescanCount = 0;
if (detail.toLower().startsWith("rescan")) {
qDebug() << "showInformation detail = " +detail.toLower();
rescanCount++;
}
if (rescanCount > 10) {
detail = detail + "\n" + QObject::tr("This may take several hours, grab some popcorn");
}
@ -547,9 +608,9 @@ void ConnectionLoader::showInformation(QString info, QString detail) {
}
/**
* Show error will close the loading dialog and show an error.
* Show error will close the loading dialog and show an error.
*/
void ConnectionLoader::showError(QString explanation) {
void ConnectionLoader::showError(QString explanation) {
rpc->setEHushd(nullptr);
rpc->noConnection();
@ -558,6 +619,21 @@ void ConnectionLoader::showError(QString explanation) {
}
QString ConnectionLoader::locateHushConfFile() {
// HSC's have no legacy locations
if (isdragonx) {
auto acname = "DRAGONX";
#ifdef Q_OS_LINUX
auto confLocation = QStandardPaths::locate(QStandardPaths::HomeLocation, QString(".hush/") + acname + "/" + acname + ".conf");
#elif defined(Q_OS_DARWIN)
auto confLocation = QStandardPaths::locate(QStandardPaths::HomeLocation, QString("Library/Application Support/Hush/") + acname + "/" + acname + ".conf");
#else
auto confLocation = QStandardPaths::locate(QStandardPaths::AppDataLocation, QString("../../Hush/") + acname + "/" + acname + ".conf");
#endif
qDebug() << "found conf at " << confLocation;
return QDir::cleanPath(confLocation);
}
#ifdef Q_OS_LINUX
auto confLocation = QStandardPaths::locate(QStandardPaths::HomeLocation, ".hush/HUSH3/HUSH3.conf");
if(!QFile(confLocation).exists()) {
@ -586,10 +662,19 @@ QString ConnectionLoader::locateHushConfFile() {
QString ConnectionLoader::hushConfWritableLocation() {
#ifdef Q_OS_LINUX
auto confLocation = QDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)).filePath(".hush/HUSH3/HUSH3.conf");
if(isdragonx) {
confLocation = QDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)).filePath(".hush/DRAGONX/DRAGONX.conf");
}
#elif defined(Q_OS_DARWIN)
auto confLocation = QDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)).filePath("Library/Application Support/Hush/HUSH3/HUSH3.conf");
if(isdragonx) {
confLocation = QDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)).filePath("Library/Application Support/Hush/DRAGONX/DRAGONX.conf");
}
#else
auto confLocation = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)).filePath("../../Hush/HUSH3/HUSH3.conf");
if(isdragonx) {
confLocation = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)).filePath("../../Hush/DRAGONX/DRAGONX.conf");
}
#endif
main->logger->write("HUSH3.conf writeable location at " + QDir::cleanPath(confLocation));
@ -642,7 +727,7 @@ bool ConnectionLoader::verifyParams() {
return true;
}
// this is to support SD on mac in /Applications1
// this is to support SD on mac in /Applications
if( QFile( QDir("/Applications").filePath("silentdragon.app/Contents/MacOS/sapling-output.params") ).exists() && QFile( QDir("/Applications").filePath("./silentdragon.app/Contents/MacOS/sapling-spend.params") ).exists() ) {
qDebug() << "Found params in /Applications/silentdragon.app/Contents/MacOS";
return true;
@ -654,6 +739,18 @@ bool ConnectionLoader::verifyParams() {
return true;
}
// this is to support SDX on mac in /Applications
if( QFile( QDir("/Applications").filePath("silentdragonx.app/Contents/MacOS/sapling-output.params") ).exists() && QFile( QDir("/Applications").filePath("./silentdragonx.app/Contents/MacOS/sapling-spend.params") ).exists() ) {
qDebug() << "Found params in /Applications/silentdragonx.app/Contents/MacOS";
return true;
}
// this is to support SDX on mac inside a DMG
if( QFile( QDir("./").filePath("silentdragonx.app/Contents/MacOS/sapling-output.params") ).exists() && QFile( QDir("./").filePath("./silentdragonx.app/Contents/MacOS/sapling-spend.params") ).exists() ) {
qDebug() << "Found params in ./silentdragonx.app/Contents/MacOS";
return true;
}
if (QFile(paramsDir.filePath("sapling-output.params")).exists() && QFile(paramsDir.filePath("sapling-spend.params")).exists()) {
qDebug() << "Found params in " << paramsDir;
return true;
@ -664,9 +761,10 @@ bool ConnectionLoader::verifyParams() {
}
/**
* Try to automatically detect a HUSH3/HUSH3.conf file in the correct location and load parameters
*/
std::shared_ptr<ConnectionConfig> ConnectionLoader::autoDetectHushConf() {
* Try to automatically detect a HUSH3/HUSH3.conf file
or DRAGONX/DRAGONX.conf in the correct location and load parameters
*/
std::shared_ptr<ConnectionConfig> ConnectionLoader::autoDetectHushConf() {
auto confLocation = locateHushConfFile();
if (confLocation.isNull()) {
@ -688,7 +786,7 @@ std::shared_ptr<ConnectionConfig> ConnectionLoader::autoDetectHushConf() {
hushconf->usingHushConf = true;
hushconf->hushDir = QFileInfo(confLocation).absoluteDir().absolutePath();
hushconf->hushDaemon = false;
Settings::getInstance()->setUsingHushConf(confLocation);
while (!in.atEnd()) {
@ -729,40 +827,51 @@ std::shared_ptr<ConnectionConfig> ConnectionLoader::autoDetectHushConf() {
}
// If rpcport is not in the file, and it was not set by the testnet=1 flag, then go to default
if (hushconf->port.isEmpty()) hushconf->port = "18031";
if (hushconf->port.isEmpty()) {
if(isdragonx) {
hushconf->port = "21769";
} else {
hushconf->port = "18031";
}
}
file.close();
// In addition to the HUSH3/HUSH3.conf file, also double check the params.
// Save to Qsettings
Settings::getInstance()->saveSettings(
hushconf->host,
hushconf->port,
hushconf->rpcuser,
hushconf->rpcpassword);
// In addition to the HUSH3/HUSH3.conf file, also double check the params.
return std::shared_ptr<ConnectionConfig>(hushconf);
}
// Load connection settings from the UI, which indicates an unknown, external hushd
std::shared_ptr<ConnectionConfig> ConnectionLoader::loadFromSettings() {
// Load from the QT Settings.
qDebug() << __func__ <<": Load data from the QT Settings";
QSettings s;
auto host = s.value("connection/host").toString();
auto port = s.value("connection/port").toString();
auto username = s.value("connection/rpcuser").toString();
auto password = s.value("connection/rpcpassword").toString();
if (username.isEmpty() || password.isEmpty())
if (username.isEmpty() || password.isEmpty()) {
qDebug() << __func__ <<": username or password empty, returning null!";
return nullptr;
}
auto uiConfig = new ConnectionConfig{ host, port, username, password, false, false,"","", "", "","", ConnectionType::UISettingsZCashD};
return std::shared_ptr<ConnectionConfig>(uiConfig);
}
/***********************************************************************************
* Connection Class
************************************************************************************/
Connection::Connection(MainWindow* m, QNetworkAccessManager* c, QNetworkRequest* r,
************************************************************************************/
Connection::Connection(MainWindow* m, QNetworkAccessManager* c, QNetworkRequest* r,
std::shared_ptr<ConnectionConfig> conf) {
this->restclient = c;
this->request = r;
@ -778,11 +887,16 @@ Connection::~Connection() {
void Connection::doRPC(const QJsonValue& payload, const std::function<void(QJsonValue)>& cb,
const std::function<void(QNetworkReply*, const QJsonValue&)>& ne) {
if (shutdownInProgress) {
// Ignoring RPC because shutdown in progress
qDebug() << __func__ << ": Ignoring RPC because shutdown in progress";
return;
}
qDebug() << "RPC:" << payload["method"].toString() << payload;
if(payload.isNull() || payload.isUndefined()) {
qDebug() << "no payload! ignoring";
return;
} else {
qDebug() << __func__ << ": " << payload["method"].toString() << payload;
}
QJsonDocument jd_rpc_call(payload.toObject());
QByteArray ba_rpc_call = jd_rpc_call.toJson();
@ -795,7 +909,7 @@ void Connection::doRPC(const QJsonValue& payload, const std::function<void(QJson
// Ignoring callback because shutdown in progress
return;
}
QJsonDocument jd_reply = QJsonDocument::fromJson(reply->readAll());
QJsonValue parsed;
@ -807,13 +921,13 @@ void Connection::doRPC(const QJsonValue& payload, const std::function<void(QJson
if (reply->error() != QNetworkReply::NoError) {
ne(reply, parsed);
return;
}
}
if (parsed.isNull()) {
ne(reply, "Unknown error");
}
cb(parsed["result"]);
cb(parsed["result"]);
});
}
@ -849,7 +963,7 @@ void Connection::showTxError(const QString& error) {
/**
* Prevent all future calls from going through
*/
*/
void Connection::shutdown() {
shutdownInProgress = true;
}

2
src/connection.h

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#ifndef CONNECTION_H
#define CONNECTION_H

32
src/connection.ui

@ -9,10 +9,28 @@
<rect>
<x>0</x>
<y>0</y>
<width>513</width>
<height>513</height>
<width>512</width>
<height>512</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>512</width>
<height>512</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>512</width>
<height>512</height>
</size>
</property>
<property name="windowTitle">
<string>SilentDragon</string>
</property>
@ -20,6 +38,9 @@
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="sizeConstraint">
<enum>QLayout::SetFixedSize</enum>
</property>
<property name="leftMargin">
<number>0</number>
</property>
@ -84,13 +105,6 @@
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>FilledIconLabel</class>
<extends>QLabel</extends>
<header>fillediconlabel.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>

25
src/createzcashconfdialog.ui → src/createhushconfdialog.ui

@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
<string>Configure HUSH3.conf</string>
<string>Configuration</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="1">
@ -40,7 +40,7 @@
</property>
</widget>
</item>
<item row="6" column="1">
<item row="7" column="1">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
@ -148,6 +148,7 @@
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QCheckBox" name="chkUseTor">
<property name="text">
@ -155,13 +156,31 @@
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Please note that you'll need to already have a Tor service configured on port 9050</string>
<string>Please note that you'll need to already have a Tor service configured</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_tor_port">
<property name="text">
<string>Tor Port</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QLineEdit" name="torPort">
<property name="text">
<string notr="true">9050</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>

23
src/fillediconlabel.cpp

@ -1,6 +1,8 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#include "fillediconlabel.h"
#include "settings.h"
#include "guiconstants.h"
FilledIconLabel::FilledIconLabel(QWidget* parent) :
QLabel(parent) {
@ -20,8 +22,25 @@ void FilledIconLabel::resizeEvent(QResizeEvent*) {
QPixmap scaled = basePm.scaled(sz, Qt::KeepAspectRatio, Qt::SmoothTransformation);
QString theme_name = Settings::getInstance()->get_theme_name();
QColor color;
if (theme_name == "blue"){
color = COLOR_BLUE_BG;
}else if(theme_name == "light"){
color = COLOR_LIGHT_BG;
}else if(theme_name == "dark"){
color = COLOR_DARK_BG;
}else if(theme_name =="midnight"){
color = COLOR_MIDNIGHT_BG;
}else if(theme_name =="dragonx"){
color = COLOR_DRAGONX_BG;
}else{
color = COLOR_DEFAULT_BG;
}
QPixmap p(sz);
p.fill(Qt::white);
p.fill(color);
QPainter painter(&p);
painter.drawPixmap((sz.width() - scaled.width()) / 2, (sz.height() - scaled.height()) / 2, scaled);

2
src/fillediconlabel.h

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#ifndef FILLEDICONLABEL_H
#define FILLEDICONLABEL_H

20
src/guiconstants.h

@ -0,0 +1,20 @@
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#ifndef GUICONSTANTS_H
#define GUICONSTANTS_H
// Generic colors
#define COLOR_BLACK QColor(0, 0, 0)
#define COLOR_WHITE QColor(255, 255, 255)
#define COLOR_UNCONFIRMED_TX QColor(255, 0, 0)
#define COLOR_DRAGONX_TEXT QColor(145, 164, 184)
// Theme background colors
#define COLOR_DEFAULT_BG QColor(229, 229, 229)
#define COLOR_BLUE_BG QColor(229, 229, 229)
#define COLOR_LIGHT_BG QColor(218, 218, 218)
#define COLOR_DARK_BG QColor(48, 51, 53)
#define COLOR_MIDNIGHT_BG QColor(17, 17, 17)
#define COLOR_DRAGONX_BG QColor(35, 40, 52)
#endif // GUICONSTANTS_H

2
src/logger.cpp

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#include "logger.h"

2
src/logger.h

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#ifndef LOGGER_H
#define LOGGER_H

32
src/main.cpp

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#include <singleapplication.h>
#include "precompiled.h"
@ -7,6 +7,8 @@
#include "settings.h"
#include "version.h"
bool isdragonx = 0;
class SignalHandler
{
public:
@ -140,6 +142,16 @@ public:
~Application() {}
int main(int argc, char *argv[]) {
fprintf(stderr,"%s: argv0 = %s\n", __func__, argv[0]);
QString binaryName(argv[0]);
binaryName = binaryName.toLower();
QStringList pathParts = binaryName.split(QLatin1Char('/'));
qDebug() << pathParts;
isdragonx = binaryName.endsWith("dragonx") || binaryName.endsWith("dragonx.exe") || binaryName.endsWith("dragonx.app");
qDebug() << "isdragonx=" << isdragonx;
QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
@ -173,22 +185,26 @@ public:
}
QCoreApplication::setOrganizationName("Hush");
QCoreApplication::setApplicationName("SilentDragon");
QCoreApplication::setApplicationName(isdragonx ? "SilentDragonX" : "SilentDragon");
QString locale = QLocale::system().name();
locale.truncate(locale.lastIndexOf('_')); // Get the language code
qDebug() << "Loading locale " << locale;
QTranslator translator;
translator.load(QString(":/translations/res/silentdragon_") + locale);
if(isdragonx) {
translator.load(QString(":/translations/silentdragon_") + locale);
} else {
translator.load(QString(":/translations/silentdragon_") + locale);
}
a.installTranslator(&translator);
QIcon icon(":/icons/res/icon.ico");
QIcon icon(":/icons/icon.ico");
QApplication::setWindowIcon(icon);
// TODO: update for SD
#ifdef Q_OS_LINUX
QFontDatabase::addApplicationFont(":/fonts/res/Ubuntu-R.ttf");
QFontDatabase::addApplicationFont(":/fonts/Ubuntu-R.ttf");
qApp->setFont(QFont("Ubuntu", 11, QFont::Normal, false));
#endif
@ -218,7 +234,11 @@ public:
}
w = new MainWindow();
w->setWindowTitle("SilentDragon v" + QString(APP_VERSION));
if(isdragonx) {
w->setWindowTitle("SilentDragonX v" + QString(APP_VERSION));
} else {
w->setWindowTitle("SilentDragon v" + QString(APP_VERSION));
}
// If there was a payment URI on the command line, pay it
if (parser.positionalArguments().length() > 0) {

1043
src/mainwindow.cpp

File diff suppressed because it is too large

41
src/mainwindow.h

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
@ -6,12 +6,11 @@
#include "precompiled.h"
#include "logger.h"
#include <memory>
#include "ui_settings.h"
// Forward declare to break circular dependency.
class RPC;
class Settings;
class WSServer;
class WormholeClient;
// Struct used to hold destination info when sending a Tx.
struct ToFields {
@ -49,11 +48,6 @@ public:
QString doSendTxValidations(Tx tx);
void setDefaultPayFrom();
void replaceWormholeClient(WormholeClient* newClient);
bool isWebsocketListening();
void createWebsocket(QString wormholecode);
void stopWebsocket();
void balancesReady();
void payHushURI(QString uri = "", QString myAddr = "");
@ -64,6 +58,7 @@ public:
void updateFromCombo();
Ui::MainWindow* ui;
Ui_Settings settings;
QLabel* statusLabel;
QLabel* statusIcon;
@ -72,10 +67,21 @@ public:
Logger* logger;
void doClose();
// loads a language by the given language shortcode (e.g. de, en)
void loadLanguage(QString& rLanguage);
protected:
// this event is called, when a new translator is loaded or the system language is changed
void changeEvent(QEvent* event);
protected slots:
// this slot is called by the language menu actions
void slotLanguageChanged(QString lang);
private:
void closeEvent(QCloseEvent* event);
void setupSendTab();
void setupPeersTab();
void setupTransactionsTab();
@ -84,9 +90,11 @@ private:
void setupHushTab();
void setupChatTab();
void setupMarketTab();
void setupMiningTab();
void slot_change_theme(const QString& themeName);
void slot_change_theme(QString& themeName);
void slot_change_currency(const QString& currencyName);
void setupTurnstileDialog();
void setupSettingsModal();
void setupStatusBar();
@ -113,37 +121,44 @@ private:
void memoButtonClicked(int number, bool includeReplyTo = false);
void fileUploadButtonClicked(int number);
void setMemoEnabled(int number, bool enabled);
void rescanButtonClicked(int number);
void donate();
void website();
void telegram();
void reportbug();
void addressBook();
void postToZBoard();
void importPrivKey();
void exportAllKeys();
void exportKeys(QString addr = "");
void getViewKey(QString addr = "");
void getQRCode(QString addr = "");
void backupWalletDat();
void exportTransactions();
void doImport(QList<QString>* keys);
void restoreSavedStates();
void retranslateMiningTab();
bool eventFilter(QObject *object, QEvent *event);
bool uiPaymentsReady = false;
QString pendingURIPayment;
WSServer* wsserver = nullptr;
WormholeClient* wormhole = nullptr;
RPC* rpc = nullptr;
QCompleter* labelCompleter = nullptr;
QRegExpValidator* amtValidator = nullptr;
QRegExpValidator* feesValidator = nullptr;
QMovie* loadingMovie;
// creates the language menu dynamically from the content of m_langPath
void createLanguageMenu(void);
QTranslator m_translator; // contains the translations for this application
QTranslator m_translatorQt; // contains the translations for qt
QString m_currLang; // contains the currently loaded language
QString m_langPath; // Path of language files
};
#endif // MAINWINDOW_H

730
src/mainwindow.ui

File diff suppressed because it is too large

2
src/memoedit.cpp

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#include "memoedit.h"

2
src/memoedit.h

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#ifndef MEMOEDIT_H
#define MEMOEDIT_H

16
src/mobileappconnector.cpp

@ -1,16 +0,0 @@
// Copyright 2019-2021 The Hush developers
// Released under the GPLv3
#include "mobileappconnector.h"
#include "ui_mobileappconnector.h"
MobileAppConnector::MobileAppConnector(QWidget *parent) :
QDialog(parent),
ui(new Ui::MobileAppConnector)
{
ui->setupUi(this);
}
MobileAppConnector::~MobileAppConnector()
{
delete ui;
}

24
src/mobileappconnector.h

@ -1,24 +0,0 @@
// Copyright 2019-2021 The Hush developers
// Released under the GPLv3
#ifndef MOBILEAPPCONNECTOR_H
#define MOBILEAPPCONNECTOR_H
#include <QDialog>
namespace Ui {
class MobileAppConnector;
}
class MobileAppConnector : public QDialog
{
Q_OBJECT
public:
explicit MobileAppConnector(QWidget *parent = nullptr);
~MobileAppConnector();
private:
Ui::MobileAppConnector *ui;
};
#endif // MOBILEAPPCONNECTOR_H

214
src/mobileappconnector.ui

@ -1,214 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MobileAppConnector</class>
<widget class="QDialog" name="MobileAppConnector">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>530</height>
</rect>
</property>
<property name="windowTitle">
<string>Connect Mobile App</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="4" column="1" colspan="2">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Close</set>
</property>
</widget>
</item>
<item row="0" column="0" colspan="3">
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Scan this QRCode in SilentDragonAndroid to connect your device</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>QR Code</string>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Connection String</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLineEdit" name="txtConnStr">
<property name="font">
<font>
<pointsize>9</pointsize>
</font>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QRCodeLabel" name="qrcode">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="styleSheet">
<string notr="true">background-color: #fff</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QCheckBox" name="chkInternetConn">
<property name="text">
<string>Allow connections over the internet via SilentDragon wormhole</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="2" rowspan="2">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>SilentDragonAndroid</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="5" column="0">
<widget class="QPushButton" name="btnDisconnect">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Disconnect</string>
</property>
</widget>
</item>
<item row="6" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="0">
<widget class="QLabel" name="lblLastSeen">
<property name="text">
<string>TextLabel</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Last seen:</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="lblRemoteName">
<property name="text">
<string notr="true">TextLabel</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Connection type:</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="lblConnectionType">
<property name="text">
<string>TextLabel</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>QRCodeLabel</class>
<extends>QLabel</extends>
<header>qrcodelabel.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>MobileAppConnector</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>MobileAppConnector</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

47
src/peerstablemodel.cpp

@ -1,8 +1,9 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#include "txtablemodel.h"
#include "peerstablemodel.h"
#include "settings.h"
#include "rpc.h"
#include "guiconstants.h"
PeersTableModel::PeersTableModel(QObject *parent)
: QAbstractTableModel(parent) {
@ -52,23 +53,29 @@ int PeersTableModel::columnCount(const QModelIndex&) const
}
QVariant PeersTableModel::data(const QModelIndex &index, int role) const
{
// Align column 4 (amount) right
//if (role == Qt::TextAlignmentRole && index.column() == 3) return QVariant(Qt::AlignRight | Qt::AlignVCenter);
QVariant PeersTableModel::data(const QModelIndex &index, int role) const
{
// Get current theme name
QString theme_name = Settings::getInstance()->get_theme_name();
QBrush b;
if (role == Qt::ForegroundRole) {
// peers with banscore >=50 will likely be banned soon, color them red
if (modeldata->at(index.row()).banscore >= 50) {
QBrush b;
b.setColor(Qt::red);
b.setColor(COLOR_UNCONFIRMED_TX);
return b;
}
// Else, just return the default brush
QBrush b;
b.setColor(Qt::black);
return b;
if (theme_name == "dark" || theme_name == "midnight") {
b.setColor(COLOR_WHITE);
return b;
}else if (theme_name == "dragonx"){
b.setColor(COLOR_DRAGONX_TEXT);
return b;
}else{
b.setColor(COLOR_BLACK);
return b;
}
return b;
}
auto dat = modeldata->at(index.row());
@ -86,7 +93,7 @@ int PeersTableModel::columnCount(const QModelIndex&) const
case 9: return dat.bytes_received;
case 10: return dat.bytes_sent;
}
}
}
if (role == Qt::ToolTipRole) {
switch (index.column()) {
@ -101,21 +108,21 @@ int PeersTableModel::columnCount(const QModelIndex&) const
case 8: return "Banscore";
case 9: return "Bytes received";
case 10: return "Bytes sent";
}
}
}
//TODO: show different icons for IP vs Tor vs other kinds of connections
/*
/*
if (role == Qt::DecorationRole && index.column() == 0) {
if (!dat.memo.isEmpty()) {
// If the memo is a Payment URI, then show a payment request icon
if (dat.memo.startsWith("hush:")) {
QIcon icon(":/icons/res/paymentreq.gif");
QIcon icon(":/icons/paymentreq.gif");
return QVariant(icon.pixmap(16, 16));
} else {
// Return the info pixmap to indicate memo
QIcon icon = QApplication::style()->standardIcon(QStyle::SP_MessageBoxInformation);
QIcon icon = QApplication::style()->standardIcon(QStyle::SP_MessageBoxInformation);
return QVariant(icon.pixmap(16, 16));
}
} else {
@ -128,7 +135,7 @@ int PeersTableModel::columnCount(const QModelIndex&) const
*/
return QVariant();
}
}
QVariant PeersTableModel::headerData(int section, Qt::Orientation orientation, int role) const

2
src/peerstablemodel.h

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#ifndef PEERSTABLEMODEL_H
#define PEERSTABLEMODEL_H

2
src/precompiled.h

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#if defined __cplusplus
/* Add C++ includes here */

90
src/qrcode.ui

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QRCode</class>
<widget class="QDialog" name="QRCode">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>320</width>
<height>344</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>QR Code</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="sizeConstraint">
<enum>QLayout::SetFixedSize</enum>
</property>
<item row="0" column="0" alignment="Qt::AlignTop">
<widget class="QRCodeLabel" name="qrcodeDisplayAddr">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>300</width>
<height>300</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="baseSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignHCenter|Qt::AlignTop</set>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="saveQRCodeBtn">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Save</string>
</property>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>QRCodeLabel</class>
<extends>QLabel</extends>
<header>qrcodelabel.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>

10
src/qrcodelabel.cpp

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#include "qrcodelabel.h"
@ -26,7 +26,7 @@ QPixmap QRCodeLabel::scaledPixmap() const {
pm.fill(Qt::white);
QPainter painter(&pm);
qrcodegen::QrCode qr = qrcodegen::QrCode::encodeText(str.toUtf8().constData(), qrcodegen::QrCode::Ecc::LOW);
qrcodegen::QrCode qr = qrcodegen::QrCode::encodeText(str.toUtf8().constData(), qrcodegen::QrCode::Ecc::HIGH);
const int s = qr.getSize()>0?qr.getSize():1;
const double w = pm.width();
const double h = pm.height();
@ -49,7 +49,11 @@ QPixmap QRCodeLabel::scaledPixmap() const {
}
}
}
// TODO: Maybe add logo if it doesn't break QR code - requires setting Ecc to HIGH
painter.drawPixmap((w/2)-50, (h/2)-50, 100, 100, QPixmap(":/img/logobig.gif"));
painter.end();
return pm;
}

2
src/qrcodelabel.h

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#ifndef QRCODELABEL_H
#define QRCODELABEL_H

2
src/recurring.cpp

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#include "recurring.h"

2
src/recurring.h

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#ifndef RECURRING_H
#define RECURRING_H

17
src/requestdialog.cpp

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#include "requestdialog.h"
#include "ui_requestdialog.h"
@ -7,8 +7,8 @@
#include "mainwindow.h"
#include "rpc.h"
#include "settings.h"
#include "precompiled.h"
extern bool isdragonx;
RequestDialog::RequestDialog(QWidget *parent) :
QDialog(parent),
@ -41,7 +41,7 @@ void RequestDialog::setupDialog(MainWindow* main, QDialog* d, Ui_RequestDialog*
}
req->cmbMyAddress->setCurrentText(main->getRPC()->getDefaultSaplingAddress());
QIcon icon(":/icons/res/paymentreq.gif");
QIcon icon(":/icons/paymentreq.gif");
req->lblPixmap->setPixmap(icon.pixmap(48, 48));
}
@ -49,8 +49,13 @@ void RequestDialog::setupDialog(MainWindow* main, QDialog* d, Ui_RequestDialog*
void RequestDialog::showPaymentConfirmation(MainWindow* main, QString paymentURI) {
PaymentURI payInfo = Settings::parseURI(paymentURI);
if (!payInfo.error.isEmpty()) {
QMessageBox::critical(main, tr("Error paying HUSH URI"),
if(isdragonx) {
QMessageBox::critical(main, tr("Error paying DRAGONX URI"),
tr("URI should be of the form 'drgx:<addr>?amt=x&memo=y") + "\n" + payInfo.error);
} else {
QMessageBox::critical(main, tr("Error paying HUSH URI"),
tr("URI should be of the form 'hush:<addr>?amt=x&memo=y") + "\n" + payInfo.error);
}
return;
}
@ -126,11 +131,11 @@ void RequestDialog::showRequestZcash(MainWindow* main) {
if (d.exec() == QDialog::Accepted) {
// Construct a Hush Payment URI with the data and pay it immediately.
QString memoURI = "hush:" + req.cmbMyAddress->currentText()
QString memoURI = (isdragonx ? "drgx:" : "hush:" ) + req.cmbMyAddress->currentText()
+ "?amt=" + Settings::getDecimalString(req.txtAmount->text().toDouble())
+ "&memo=" + QUrl::toPercentEncoding(req.txtMemo->toPlainText());
QString sendURI = "hush:" + AddressBook::addressFromAddressLabel(req.txtFrom->text())
QString sendURI = (isdragonx ? "drgx:" : "hush:" ) + AddressBook::addressFromAddressLabel(req.txtFrom->text())
+ "?amt=0.0001"
+ "&memo=" + QUrl::toPercentEncoding(memoURI);

2
src/requestdialog.h

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#ifndef REQUESTDIALOG_H
#define REQUESTDIALOG_H

2
src/requestdialog.ui

@ -216,7 +216,7 @@
<item row="0" column="2" colspan="2">
<widget class="QLabel" name="lblHeader">
<property name="text">
<string>Request payment from a Sapling address. You'll send a HUSH 0.0001 transaction to the address with a HUSH payment URI. The memo will be included in the transaction when the address pays you.</string>
<string>Request payment from a zaddr. You'll send a 0.0001 transaction to the address with a payment URI. The memo will be included in the transaction when the address pays you.</string>
</property>
<property name="wordWrap">
<bool>true</bool>

91
src/rescandialog.ui

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>RescanDialog</class>
<widget class="QDialog" name="RescanDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>542</width>
<height>108</height>
</rect>
</property>
<property name="windowTitle">
<string>Rescan</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="3" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="3" column="1" colspan="2">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
<item row="2" column="0" colspan="3">
<widget class="QLineEdit" name="rescanBlockheight"/>
</item>
<item row="0" column="0" colspan="3">
<widget class="QLabel" name="label">
<property name="text">
<string>Enter block height to rescan from:</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>RescanDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>RescanDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

439
src/rpc.cpp

@ -1,11 +1,14 @@
// Copyright 2019-2021 The Hush Developers
// Copyright 2019-2022 The Hush Developers
// Released under the GPLv3
#include <QLCDNumber>
#include "rpc.h"
#include "addressbook.h"
#include "settings.h"
#include "senttxstore.h"
#include "version.h"
#include "websockets.h"
#include "sd.h"
extern bool isdragonx;
RPC::RPC(MainWindow* main) {
auto cl = new ConnectionLoader(main, this);
@ -39,35 +42,58 @@ RPC::RPC(MainWindow* main) {
// Set up timer to refresh Price
priceTimer = new QTimer(main);
QObject::connect(priceTimer, &QTimer::timeout, [=]() {
qDebug() << "Refreshing price data";
refreshPrice();
});
priceTimer->start(Settings::priceRefreshSpeed);
qDebug() << __func__ << ": started price refresh at speed=" << Settings::priceRefreshSpeed;
// Set up a timer to refresh the UI every few seconds
qDebug() << "setting up timer for rescan data";
rescanTimer = new QTimer(main);
// PreciseTimer is needed for timely GUI updates
rescanTimer->setTimerType(Qt::PreciseTimer);
QObject::connect(rescanTimer, &QTimer::timeout, [=]() {
qDebug() << "Refreshing rescan data";
refreshRescan();
});
rescanTimer->start(10000);
qDebug() << __func__ << ": started rescanTimer";
qDebug() << __func__ << ": Setting up a timer to refresh the UI every few seconds";
timer = new QTimer(main);
QObject::connect(timer, &QTimer::timeout, [=]() {
//qDebug() << "Refreshing main UI";
qDebug() << "Refreshing main UI";
refresh();
});
timer->start(Settings::updateSpeed);
// PreciseTimer is needed for timely GUI updates
timer->setTimerType(Qt::PreciseTimer);
// Set up the timer to watch for tx status
qDebug() << __func__ << ": Set up the timer to watch for tx status";
txTimer = new QTimer(main);
QObject::connect(txTimer, &QTimer::timeout, [=]() {
//qDebug() << "Watching tx status";
watchTxStatus();
});
txTimer->start(Settings::updateSpeed);
qDebug() << __func__ << "Done settings up all timers";
usedAddresses = new QMap<QString, bool>();
auto lang = Settings::getInstance()->get_language();
qDebug() << __func__ << ": found lang="<< lang << " in config file";
main->loadLanguage(lang);
qDebug() << __func__ << ": setting UI to lang="<< lang << " found in config file";
}
RPC::~RPC() {
qDebug() << "Deleting stuff";
delete timer;
delete txTimer;
delete priceTimer;
delete transactionsTableModel;
delete balancesTableModel;
@ -87,6 +113,16 @@ void RPC::setEHushd(std::shared_ptr<QProcess> p) {
ehushd = p;
}
void RPC::pauseTimer() {
qDebug() << "pausing main timer";
timer->stop();
}
void RPC::restartTimer() {
qDebug() << "restarting main timer";
timer->start(Settings::updateSpeed);
}
// Called when a connection to hushd is available.
void RPC::setConnection(Connection* c) {
if (c == nullptr) return;
@ -110,17 +146,41 @@ void RPC::setConnection(Connection* c) {
refresh(true);
}
QJsonValue RPC::makePayload(QString method, QString params) {
QJsonValue RPC::makePayload(QString method, QString param, QString param2) {
// qDebug() << __func__ << ": method=" << method << " payload=" << param << ", " << param2;
QJsonObject payload = {
{"jsonrpc", "1.0"},
{"id", "42" },
{"method", method },
{"params", QJsonArray {param, param2}}
};
return payload;
}
QJsonValue RPC::makePayload(QString method, QString param) {
// qDebug() << __func__ << ": method=" << method << " " << "payload=" << param;
QJsonObject payload = {
{"jsonrpc", "1.0"},
{"id", "42" },
{"method", method },
{"params", QJsonArray {param}}
};
return payload;
}
QJsonValue RPC::makePayload(QString method, int param) {
// qDebug() << __func__ << ": method=" << method << " payload=" << param;
QJsonObject payload = {
{"jsonrpc", "1.0"},
{"id", "42" },
{"method", method },
{"params", QJsonArray {params}}
{"params", QJsonArray{param}}
};
return payload;
}
QJsonValue RPC::makePayload(QString method) {
// qDebug() << __func__ << ": method=" << method << " with no payload";
QJsonObject payload = {
{"jsonrpc", "1.0"},
{"id", "42" },
@ -129,12 +189,64 @@ QJsonValue RPC::makePayload(QString method) {
return payload;
}
//TODO: we can use listaddresses
void RPC::getTAddresses(const std::function<void(QJsonValue)>& cb) {
QString method = "getaddressesbyaccount";
QString params = "";
conn->doRPCWithDefaultErrorHandling(makePayload(method, ""), cb);
}
// full or partial rescan
void RPC::rescan(qint64 height, const std::function<void(QJsonValue)>& cb) {
QString method = "rescan";
conn->doRPCWithDefaultErrorHandling(makePayload(method, height), cb);
}
// get rescan info
void RPC::getRescanInfo(const std::function<void(QJsonValue)>& cb){
QString method = "getrescaninfo";
// do not show an error in case getrescaninfo doesn't exist in this hushd
conn->doRPCIgnoreError(makePayload(method), cb);
}
void RPC::getnetworksolps(const std::function<void(QJsonValue)>& cb){
QString method = "getnetworksolps";
conn->doRPCWithDefaultErrorHandling(makePayload(method), cb);
}
void RPC::getlocalsolps(const std::function<void(QJsonValue)>& cb){
QString method = "getlocalsolps";
conn->doRPCWithDefaultErrorHandling(makePayload(method), cb);
}
// get help
void RPC::help(const std::function<void(QJsonValue)>& cb){
QString method = "help";
conn->doRPCWithDefaultErrorHandling(makePayload(method), cb);
}
// add/remove a banned node. ip can include an optional netmask
void RPC::setban(QString ip, QString command, const std::function<void(QJsonValue)>& cb) {
QString method = "setban";
conn->doRPCWithDefaultErrorHandling(makePayload(method, ip, command), cb);
}
//unban all banned peer nodes
void RPC::clearBanned(const std::function<void(QJsonValue)>& cb) {
QString method = "clearbanned";
conn->doRPCWithDefaultErrorHandling(makePayload(method), cb);
}
void RPC::z_sweepstatus(const std::function<void(QJsonValue)>& cb) {
QString method = "z_sweepstatus";
conn->doRPCWithDefaultErrorHandling(makePayload(method), cb);
}
void RPC::z_consolidationstatus(const std::function<void(QJsonValue)>& cb) {
QString method = "z_consolidationstatus";
conn->doRPCWithDefaultErrorHandling(makePayload(method), cb);
}
void RPC::getZAddresses(const std::function<void(QJsonValue)>& cb) {
QString method = "z_listaddresses";
conn->doRPCWithDefaultErrorHandling(makePayload(method), cb);
@ -143,7 +255,7 @@ void RPC::getZAddresses(const std::function<void(QJsonValue)>& cb) {
void RPC::getTransparentUnspent(const std::function<void(QJsonValue)>& cb) {
QJsonObject payload = {
{"jsonrpc", "1.0"},
{"id", "someid"},
{"id", "42"},
{"method", "listunspent"},
{"params", QJsonArray {0}} // Get UTXOs with 0 confirmations as well.
};
@ -154,7 +266,7 @@ void RPC::getTransparentUnspent(const std::function<void(QJsonValue)>& cb) {
void RPC::getZUnspent(const std::function<void(QJsonValue)>& cb) {
QJsonObject payload = {
{"jsonrpc", "1.0"},
{"id", "someid"},
{"id", "42"},
{"method", "z_listunspent"},
{"params", QJsonArray {0}} // Get UTXOs with 0 confirmations as well.
};
@ -165,7 +277,7 @@ void RPC::getZUnspent(const std::function<void(QJsonValue)>& cb) {
void RPC::newZaddr(const std::function<void(QJsonValue)>& cb) {
QJsonObject payload = {
{"jsonrpc", "1.0"},
{"id", "someid"},
{"id", "42"},
{"method", "z_getnewaddress"},
{"params", QJsonArray { "sapling" }},
};
@ -179,6 +291,28 @@ void RPC::newTaddr(const std::function<void(QJsonValue)>& cb) {
conn->doRPCWithDefaultErrorHandling(makePayload(method), cb);
}
void RPC::setGenerate(int proclimit, const std::function<void(QJsonValue)>& cb) {
QString method = "setgenerate";
QJsonObject payload = {
{"jsonrpc", "1.0"},
{"id", "42" },
{"method", method },
{"params", QJsonArray {true, proclimit}}
};
conn->doRPCWithDefaultErrorHandling(payload, cb);
}
void RPC::stopGenerate(int proclimit, const std::function<void(QJsonValue)>& cb) {
QString method = "setgenerate";
QJsonObject payload = {
{"jsonrpc", "1.0"},
{"id", "42" },
{"method", method },
{"params", QJsonArray {false, proclimit}}
};
conn->doRPCWithDefaultErrorHandling(payload, cb);
}
void RPC::getZViewKey(QString addr, const std::function<void(QJsonValue)>& cb) {
QString method = "z_exportviewingkey";
conn->doRPCWithDefaultErrorHandling(makePayload(method, addr), cb);
@ -197,7 +331,7 @@ void RPC::getTPrivKey(QString addr, const std::function<void(QJsonValue)>& cb) {
void RPC::importZPrivKey(QString privkey, bool rescan, const std::function<void(QJsonValue)>& cb) {
QJsonObject payload = {
{"jsonrpc", "1.0"},
{"id", "someid"},
{"id", "42"},
{"method", "z_importkey"},
{"params", QJsonArray { privkey, (rescan ? "yes" : "no") }},
};
@ -215,7 +349,7 @@ void RPC::importTPrivKey(QString privkey, bool rescan, const std::function<void(
qDebug() << "Detected old-style HUSH WIF";
payload = {
{"jsonrpc", "1.0"},
{"id", "someid"},
{"id", "42"},
{"method", "importprivkey"},
{"params", QJsonArray { privkey, "", "false", "0", "128" }},
};
@ -223,7 +357,7 @@ void RPC::importTPrivKey(QString privkey, bool rescan, const std::function<void(
qDebug() << "Detected new-style HUSH WIF";
payload = {
{"jsonrpc", "1.0"},
{"id", "someid"},
{"id", "42"},
{"method", "importprivkey"},
{"params", QJsonArray { privkey, (rescan? "yes" : "no") }},
};
@ -242,7 +376,7 @@ void RPC::validateAddress(QString address, const std::function<void(QJsonValue)>
void RPC::getBalance(const std::function<void(QJsonValue)>& cb) {
QJsonObject payload = {
{"jsonrpc", "1.0"},
{"id", "someid"},
{"id", "42"},
{"method", "z_gettotalbalance"},
{"params", QJsonArray {0}} // Get Unconfirmed balance as well.
};
@ -305,7 +439,7 @@ void RPC::sendZTransaction(QJsonValue params, const std::function<void(QJsonValu
const std::function<void(QString)>& err) {
QJsonObject payload = {
{"jsonrpc", "1.0"},
{"id", "someid"},
{"id", "42"},
{"method", "z_sendmany"},
{"params", params}
};
@ -366,7 +500,7 @@ void RPC::getAllPrivKeys(const std::function<void(QList<QPair<QString, QString>>
[=] (auto addr) {
QJsonObject payload = {
{"jsonrpc", "1.0"},
{"id", "someid"},
{"id", "42"},
{"method", privKeyDumpMethodName},
{"params", QJsonArray { addr }},
};
@ -391,14 +525,14 @@ void RPC::getAllPrivKeys(const std::function<void(QList<QPair<QString, QString>>
// First get all the t and z addresses.
QJsonObject payloadT = {
{"jsonrpc", "1.0"},
{"id", "someid"},
{"id", "42"},
{"method", "getaddressesbyaccount"},
{"params", QJsonArray {""} }
};
QJsonObject payloadZ = {
{"jsonrpc", "1.0"},
{"id", "someid"},
{"id", "42"},
{"method", "z_listaddresses"}
};
@ -597,7 +731,6 @@ void RPC::refresh(bool force) {
getInfoThenRefresh(force);
}
void RPC::getInfoThenRefresh(bool force) {
//qDebug() << "getinfo";
if (conn == nullptr)
@ -615,7 +748,7 @@ void RPC::getInfoThenRefresh(bool force) {
// TODO: checkmark only when getinfo.synced == true!
// Connected, so display checkmark.
QIcon i(":/icons/res/connected.gif");
QIcon i(":/icons/connected.gif");
main->statusIcon->setPixmap(i.pixmap(16, 16));
static int lastBlock = 0;
@ -631,6 +764,10 @@ void RPC::getInfoThenRefresh(bool force) {
int blocks_until_halving= 2020000 - curBlock;
char halving_days[8];
int blocktime = 75; // seconds
if(isdragonx) {
blocks_until_halving= 3500000 - curBlock;
blocktime = 60;
}
sprintf(halving_days, "%.2f", (double) (blocks_until_halving * blocktime) / (60*60*24) );
QString ntzhash = reply["notarizedhash"].toString();
QString ntztxid = reply["notarizedtxid"].toString();
@ -638,9 +775,9 @@ void RPC::getInfoThenRefresh(bool force) {
Settings::getInstance()->setHushdVersion(version);
ui->longestchain->setText(QString::number(longestchain));
ui->notarizedhashvalue->setText( ntzhash );
ui->notarizedtxidvalue->setText( ntztxid );
ui->lagvalue->setText( QString::number(lag) );
// ui->notarizedhashvalue->setText( ntzhash );
// ui->notarizedtxidvalue->setText( ntztxid );
// ui->lagvalue->setText( QString::number(lag) );
ui->version->setText( QString::number(version) );
ui->protocolversion->setText( QString::number(protocolversion) );
ui->p2pport->setText( QString::number(p2pport) );
@ -672,13 +809,150 @@ void RPC::getInfoThenRefresh(bool force) {
ui->numconnections->setText(QString::number(connections) + " (" + QString::number(tlsconnections) + " TLS)" );
ui->tlssupport->setText(hasTLS ? "Yes" : "No");
/*
// Get network sol/s
QString method = "getnetworksolps";
conn->doRPCIgnoreError(makePayload(method), [=](const QJsonValue& reply) {
qint64 solrate = reply.toInt();
//TODO: format decimal
ui->solrate->setText(QString::number((double)solrate / 1000000) % " MegaSol/s");
if(isdragonx) {
ui->solrate->setText(QString::number((double)solrate) % " Hash/s");
} else {
ui->solrate->setText(QString::number((double)solrate / 1000000) % " MegaSol/s");
}
// find a QLCDNumber child of tabWidget named networkhashrate
auto hashrate = ui->tabWidget->findChild<QLCDNumber *>("networkhashrate");
qDebug() << "solrate=" << QString::number(solrate);
if(hashrate != nullptr) {
hashrate->display( QString::number( solrate, 'f', 2 ) );
} else {
qDebug() << "no widget named networkhashrate found";
}
// hashrate->display( QString::number( (double) solrate) );
});
// only look at local hashrate for dragonx
if(isdragonx) {
QString method = "getlocalsolps";
DEBUG("calling getlocalsolps");
conn->doRPCIgnoreError(makePayload(method), [=](const QJsonValue& reply) {
qDebug() << "reply=" << reply;
double solrate = reply.toDouble();
DEBUG("solrate=" % QString::number(solrate));
// find a QLCDNumber child of tabWidget named localhashrate
auto hashrate = ui->tabWidget->findChild<QLCDNumber *>("localhashrate");
if(hashrate != nullptr) {
hashrate->display( QString::number( (double) solrate, 'f', 2 ) );
} else {
qDebug() << "no widget named localhashrate found";
}
});
}
*/
// Get mining info
// This is better+faster than calling multiple RPCs such as getlocalsolps/getnetworksolps/getgenerate
// and getlocalsolps returns non-zero values even when not mining, which is not what we want
conn->doRPCIgnoreError(makePayload("getmininginfo"), [=](const QJsonValue& reply) {
QString localhashps = QString::number( reply["localhashps"].toDouble() );
QString networkhashps = QString::number( reply["networkhashps"].toDouble() );
QString generate = QString::number( reply["generate"].toBool() );
QString difficulty = QString::number( reply["difficulty"].toDouble() );
QString genproclimit = QString::number( reply["genproclimit"].toInt() );
// Update network hashrate in "Node Info" tab
if(isdragonx) {
ui->solrate->setText(QString::number(networkhashps.toDouble()) % " Hash/s");
} else {
ui->solrate->setText(QString::number(networkhashps.toDouble() / 1000000) % " MegaSol/s");
// The rest of this callback is for DRAGONX
return;
}
if ( genproclimit == "-1" ) {
// Showing users they are mining with -1 threads by default is confusing
genproclimit = QString::number(0);
}
auto stopbutton = ui->tabWidget->findChild<QPushButton *>("stopmining");
auto startbutton = ui->tabWidget->findChild<QPushButton *>("startmining");
if (stopbutton == nullptr) {
return;
}
if (startbutton == nullptr) {
return;
}
if(generate == "1") {
// already mining
stopbutton->setEnabled(true);
startbutton->setEnabled(false);
DEBUG("enabled stop mining button, disabled start mining button");
} else {
// not yet mining
startbutton->setEnabled(true);
stopbutton->setEnabled(false);
DEBUG("enabled start mining button, disabled stop mining button");
}
// find a QLCDNumber child of tabWidget named localhashrate
auto localhashrate = ui->tabWidget->findChild<QLCDNumber *>("localhashrate");
if(localhashrate != nullptr) {
localhashrate->display( QString::number( localhashps.toDouble(), 'f', 2 ) );
} else {
qDebug() << "no widget named localhashrate found";
}
// find a QLCDNumber child of tabWidget named networkhashrate
auto nethashrate = ui->tabWidget->findChild<QLCDNumber *>("networkhashrate");
if(nethashrate != nullptr) {
nethashrate->display( QString::number( networkhashps.toInt() ) );
} else {
qDebug() << "no widget named networkhashrate found";
}
// find a QLCDNumber child of tabWidget named difficulty
auto diff = ui->tabWidget->findChild<QLCDNumber *>("difficulty");
if(nethashrate != nullptr) {
diff->display( QString::number( difficulty.toDouble(), 'f', 2 ) );
} else {
qDebug() << "no widget named difficulty found";
}
// find a QLCDNumber child of tabWidget named miningthreads
auto miningthreads = ui->tabWidget->findChild<QLCDNumber *>("miningthreads");
if(miningthreads != nullptr) {
miningthreads->display( QString::number( genproclimit.toInt() ) );
} else {
qDebug() << "no widget named difficulty found";
}
// find a QLCDNumber child of tabWidget named luck
auto luck = ui->tabWidget->findChild<QLCDNumber *>("luck");
if(luck != nullptr) {
if( generate == "0" ) {
// not mining, luck is not applicable
luck->display( QString("-") );
} else {
// luck = current estimate of time to find a block given current localhash and nethash
//TODO: maybe use this as a tooltip
double percentOfNetHash = localhashps.toDouble() / networkhashps.toDouble();
DEBUG( "% of nethash=" << percentOfNetHash );
if (localhashps.toDouble() > 0) {
//TODO: this is only for DRAGONX
int blocktime = 36;
double luckInSeconds = (networkhashps.toDouble()/localhashps.toDouble())*blocktime;
double luckInHours = luckInSeconds / (60*60);
luck->display( QString::number( luckInHours , 'f', 2 ) );
}
}
} else {
qDebug() << "no widget named luck found";
}
});
// Get network info
@ -735,14 +1009,18 @@ void RPC::getInfoThenRefresh(bool force) {
ui->heightLabel->setText(QObject::tr("Block height"));
}
auto ticker_price = s->get_price(ticker);
QString extra = "";
if(ticker_price > 0 && ticker != "BTC") {
extra = QString::number( s->getBTCPrice() ) % "sat";
}
QString price = "";
if (ticker_price > 0) {
price = QString(", ") % "HUSH" % "=" % QString::number( (double)ticker_price,'f',8) % " " % ticker % " " % extra;
// No price data for dragonx for now
if (!isdragonx) {
auto ticker_price = s->get_price(ticker);
if(ticker_price > 0 && ticker != "BTC") {
extra = QString::number( s->getBTCPrice() ) % "sat";
}
if (ticker_price > 0) {
price = QString(", ") % "HUSH" % "=" % QString::number( (double)ticker_price,'f',8) % " " % ticker % " " % extra;
}
}
// Update the status bar
@ -752,21 +1030,20 @@ void RPC::getInfoThenRefresh(bool force) {
(s->isTestnet() ? QObject::tr("testnet:") : "") %
QString::number(blockNumber) %
(isSyncing ? ("/" % QString::number(progress*100, 'f', 2) % "%") : QString()) %
") " %
" Lag: " % QString::number(blockNumber - notarized) % price;
") ";
// % " Lag: " % QString::number(blockNumber - notarized) % price;
main->statusLabel->setText(statusText);
auto hushPrice = Settings::getUSDFormat(1);
QString tooltip;
if (connections > 0) {
tooltip = QObject::tr("Connected to hushd");
}
else {
tooltip = QObject::tr("hushd has no peer connections! Network issues?");
tooltip = QObject::tr("Connected");
} else {
tooltip = QObject::tr("No peer connections! Network issues?");
}
tooltip = tooltip % "(v" % QString::number(Settings::getInstance()->getHushdVersion()) % ")";
if (!hushPrice.isEmpty()) {
if (!isdragonx && !hushPrice.isEmpty()) {
tooltip = "1 HUSH = " % hushPrice % "\n" % tooltip;
}
main->statusLabel->setToolTip(tooltip);
@ -866,8 +1143,6 @@ void RPC::refreshBalances() {
auto balZ = reply["private"].toString().toDouble();
auto balTotal = reply["total"].toString().toDouble();
AppDataModel::getInstance()->setBalances(balT, balZ);
ui->balSheilded ->setText(Settings::getDisplayFormat(balZ));
ui->balTransparent->setText(Settings::getDisplayFormat(balT));
ui->balTotal ->setText(Settings::getDisplayFormat(balTotal));
@ -906,6 +1181,32 @@ void RPC::refreshBalances() {
});
}
void RPC::refreshRescan() {
qDebug() << __func__;
if (conn == nullptr) {
qDebug() << __func__ << ": no connection";
return noConnection();
}
getRescanInfo([=] (QJsonValue response){
qDebug() << "got getrescaninfo json=" << response;
auto rescanning = response.toObject().value("rescanning").toBool();
auto rescan_progress = response.toObject().value("rescan_progress").toString();
auto rescan_start_height = (qint64)response.toObject().value("rescan_start_height").toInt();
auto rescan_height = (qint64)response.toObject().value("rescan_height").toInt();
double percent = QString(rescan_progress).toDouble() * 100;
qDebug() << __func__ << ": getrescaninfo" << rescanning << " " << percent << " " << rescan_start_height << " " << rescan_height;
if(rescanning){
// pauseTimer();
qDebug() << __func__ << ": Rescanning at " << percent << "e";
ui->statusBar->showMessage(QObject::tr("Rescanning... ") + QString::number(percent)+ "% " + QObject::tr("at height") + " " + QString::number(rescan_height));
} else{
qDebug() << __func__ << ": not rescanning";
}
});
}
void RPC::refreshPeers() {
qDebug() << __func__;
if (conn == nullptr)
@ -928,11 +1229,12 @@ void RPC::refreshPeers() {
QList<BannedPeerItem> peerdata;
for (const auto& it : reply.toArray()) {
auto addr = it.toObject()["address"].toString();
auto asn = (qint64)it.toObject()["mapped_as"].toInt();
auto bantime = (qint64)it.toObject()["banned_until"].toInt();
auto parts = addr.split("/");
auto ip = parts[0];
auto subnet = parts[1];
BannedPeerItem peer { ip, subnet, bantime };
BannedPeerItem peer { ip, subnet, bantime, asn };
qDebug() << "Adding banned peer with address=" << addr;
peerdata.push_back(peer);
}
@ -980,6 +1282,9 @@ void RPC::refreshTransactions() {
if (conn == nullptr)
return noConnection();
// Show statusBar message
ui->statusBar->showMessage(QObject::tr("Transaction data is loading..."));
getTransactions([=] (QJsonValue reply) {
QList<TransactionItem> txdata;
@ -1006,7 +1311,11 @@ void RPC::refreshTransactions() {
}
// Update model data, which updates the table view
transactionsTableModel->addTData(txdata);
qDebug() << "refreshTransactions";
transactionsTableModel->addTData(txdata);
// Update statusBar message
ui->statusBar->showMessage(QObject::tr("Transaction data loaded"), 3 * 1000);
});
}
@ -1056,7 +1365,7 @@ void RPC::refreshSentZTrans() {
if (!error)
sentTx.confirmations = j["confirmations"].toInt();
}
transactionsTableModel->addZSentData(newSentZTxs);
delete txidList;
}
@ -1135,8 +1444,10 @@ void RPC::watchTxStatus() {
}
if (watchingOps.isEmpty()) {
txTimer->start(Settings::updateSpeed);
// Stop the timer
txTimer->stop();
} else {
// Keep polling for updates
txTimer->start(Settings::quickUpdateSpeed);
}
}
@ -1229,6 +1540,16 @@ void RPC::refreshPrice() {
if (conn == nullptr)
return noConnection();
if (isdragonx) {
return;
}
auto s = Settings::getInstance();
if (s->getAllowFetchPrices() == false) {
qDebug() << "Price fetching disabled";
return;
}
QString price_feed = "https://api.coingecko.com/api/v3/simple/price?ids=hush&vs_currencies=btc%2Cusd%2Ceur%2Ceth%2Cgbp%2Ccny%2Cjpy%2Cidr%2Crub%2Ccad%2Csgd%2Cchf%2Cinr%2Caud%2Cinr%2Ckrw%2Cthb%2Cnzd%2Czar%2Cvef%2Cxau%2Cxag%2Cvnd%2Csar%2Ctwd%2Caed%2Cars%2Cbdt%2Cbhd%2Cbmd%2Cbrl%2Cclp%2Cczk%2Cdkk%2Chuf%2Cils%2Ckwd%2Clkr%2Cpkr%2Cnok%2Ctry%2Csek%2Cmxn%2Cuah%2Chkd&include_market_cap=true&include_24hr_vol=true&include_24hr_change=true";
qDebug() << "Requesting price feed data via " << price_feed;
@ -1242,7 +1563,6 @@ void RPC::refreshPrice() {
QNetworkReply *reply = conn->restclient->get(req);
qDebug() << "Created QNetworkReply";
auto s = Settings::getInstance();
QObject::connect(reply, &QNetworkReply::finished, [=] {
reply->deleteLater();
@ -1357,24 +1677,25 @@ void RPC::shutdownHushd() {
d.setWindowFlags(d.windowFlags() & ~(Qt::WindowCloseButtonHint | Qt::WindowContextHelpButtonHint));
Ui_ConnectionDialog connD;
connD.setupUi(&d);
//connD.topIcon->setBasePixmap(QIcon(":/icons/res/icon.ico").pixmap(256, 256));
//connD.topIcon->setBasePixmap(QIcon(":/icons/icon.ico").pixmap(256, 256));
if(isdragonx) {
d.setWindowTitle("SilentDragonX");
}
QMovie *movie1 = new QMovie(":/img/res/silentdragon-animated.gif");;
QMovie *movie2 = new QMovie(":/img/res/silentdragon-animated-dark.gif");;
QMovie *movie1 = new QMovie(":/img/silentdragon-animated-dark.gif");;
auto theme = Settings::getInstance()->get_theme_name();
if (theme == "dark" || theme == "midnight") {
movie2->setScaledSize(QSize(512,512));
connD.topIcon->setMovie(movie2);
movie2->start();
movie1->setScaledSize(QSize(512,512));
connD.topIcon->setMovie(movie1);
movie1->start();
if(isdragonx) {
connD.status->setText(QObject::tr("Please enhance your calm and wait for SilentDragonX to exit"));
connD.statusDetail->setText(QObject::tr("Waiting for dragonxd to exit, y'all"));
} else {
movie1->setScaledSize(QSize(512,512));
connD.topIcon->setMovie(movie1);
movie1->start();
connD.status->setText(QObject::tr("Please enhance your calm and wait for SilentDragon to exit"));
connD.statusDetail->setText(QObject::tr("Waiting for hushd to exit, y'all"));
}
connD.status->setText(QObject::tr("Please enhance your calm and wait for SilentDragon to exit"));
connD.statusDetail->setText(QObject::tr("Waiting for hushd to exit, y'all"));
QTimer waiter(main);
// We capture by reference all the local variables because of the d.exec()

28
src/rpc.h

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#ifndef RPCCLIENT_H
#define RPCCLIENT_H
@ -27,6 +27,7 @@ struct BannedPeerItem {
QString address;
QString subnet;
qint64 banned_until;
qint64 asn;
};
struct PeerItem {
@ -64,13 +65,17 @@ public:
const QProcess* getEHushD() { return ehushd.get(); }
void refresh(bool force = false);
void pauseTimer();
void restartTimer();
void refreshAddresses();
void refreshPeers();
void refreshRescan();
void refreshPeers();
void setban(QString ip, QString command, const std::function<void(QJsonValue)>& cb);
void clearBanned(const std::function<void(QJsonValue)>& cb);
void checkForUpdate(bool silent = true);
void refreshPrice();
void getZboardTopics(std::function<void(QMap<QString, QString>)> cb);
void executeTransaction(Tx tx,
const std::function<void(QString opid)> submitted,
@ -97,6 +102,8 @@ public:
void newZaddr(const std::function<void(QJsonValue)>& cb);
void newTaddr(const std::function<void(QJsonValue)>& cb);
void setGenerate(int proclimit, const std::function<void(QJsonValue)>& cb);
void stopGenerate(int proclimit, const std::function<void(QJsonValue)>& cb);
void getZPrivKey(QString addr, const std::function<void(QJsonValue)>& cb);
void getZViewKey(QString addr, const std::function<void(QJsonValue)>& cb);
void getTPrivKey(QString addr, const std::function<void(QJsonValue)>& cb);
@ -115,6 +122,12 @@ public:
Connection* getConnection() { return conn; }
void rescan(qint64 height, const std::function<void(QJsonValue)>& cb);
void getRescanInfo(const std::function<void(QJsonValue)>& cb);
void help(const std::function<void(QJsonValue)>& cb);
void getnetworksolps(const std::function<void(QJsonValue)>& cb);
void getlocalsolps(const std::function<void(QJsonValue)>& cb);
private:
void refreshBalances();
@ -128,7 +141,9 @@ private:
void getInfoThenRefresh(bool force);
void getBalance(const std::function<void(QJsonValue)>& cb);
QJsonValue makePayload(QString method, QString params);
QJsonValue makePayload(QString method, QString param, QString param2);
QJsonValue makePayload(QString method, QString param);
QJsonValue makePayload(QString method, int param);
QJsonValue makePayload(QString method);
void getTransparentUnspent (const std::function<void(QJsonValue)>& cb);
@ -138,6 +153,8 @@ private:
void getPeerInfo (const std::function<void(QJsonValue)>& cb);
void getZAddresses (const std::function<void(QJsonValue)>& cb);
void getTAddresses (const std::function<void(QJsonValue)>& cb);
void z_sweepstatus (const std::function<void(QJsonValue)>& cb);
void z_consolidationstatus (const std::function<void(QJsonValue)>& cb);
Connection* conn = nullptr;
std::shared_ptr<QProcess> ehushd = nullptr;
@ -157,6 +174,7 @@ private:
QTimer* timer;
QTimer* txTimer;
QTimer* priceTimer;
QTimer* rescanTimer;
Ui::MainWindow* ui;
MainWindow* main;

2
src/scripts/docker/Dockerfile

@ -40,7 +40,7 @@ RUN cd /opt && rm qt-everywhere-src-5.11.2.tar.xz && rm -rf qt-everywhere-src-5.
RUN cd /opt && \
git clone https://github.com/mxe/mxe.git && \
cd /opt/mxe && \
make -j$(nproc) MXE_TARGETS=x86_64-w64-mingw32.static qtbase qtwebsockets
make -j$(nproc) MXE_TARGETS=x86_64-w64-mingw32.static qtbase
# Add rust
RUN apt install -y gcc-aarch64-linux-gnu

2
src/scripts/dotranslations.sh

@ -1,5 +1,5 @@
#!/bin/bash
# Copyright (c) 2019-2021 The Hush developers
# Copyright (c) 2019-2022 The Hush developers
# Released under the GPLv3
if [ -z $QT_STATIC ]; then

62
src/scripts/dounifiedbuild.ps1

@ -8,11 +8,11 @@ param (
)
Write-Host "[Initializing]"
Remove-Item -Force -ErrorAction Ignore ./artifacts/linux-binaries-zecwallet-v$version.tar.gz
Remove-Item -Force -ErrorAction Ignore ./artifacts/linux-deb-zecwallet-v$version.deb
Remove-Item -Force -ErrorAction Ignore ./artifacts/Windows-binaries-zecwallet-v$version.zip
Remove-Item -Force -ErrorAction Ignore ./artifacts/Windows-installer-zecwallet-v$version.msi
Remove-Item -Force -ErrorAction Ignore ./artifacts/macOS-zecwallet-v$version.dmg
Remove-Item -Force -ErrorAction Ignore ./artifacts/linux-binaries-silentdragon-v$version.tar.gz
Remove-Item -Force -ErrorAction Ignore ./artifacts/linux-deb-silentdragon-v$version.deb
Remove-Item -Force -ErrorAction Ignore ./artifacts/Windows-binaries-silentdragon-v$version.zip
Remove-Item -Force -ErrorAction Ignore ./artifacts/Windows-installer-silentdragon-v$version.msi
Remove-Item -Force -ErrorAction Ignore ./artifacts/macOS-silentdragon-v$version.dmg
Remove-Item -Force -ErrorAction Ignore ./artifacts/signatures-v$version.tar.gz
@ -38,26 +38,26 @@ Write-Host ""
Write-Host "[Building Linux + Windows]"
Write-Host -NoNewline "Copying files.........."
ssh $server "rm -rf /tmp/zqwbuild"
ssh $server "mkdir /tmp/zqwbuild"
scp -r src/ singleapplication/ res/ ./silentdragon.pro ./application.qrc ./LICENSE ./README.md ${server}:/tmp/zqwbuild/ | Out-Null
ssh $server "dos2unix -q /tmp/zqwbuild/src/scripts/mkrelease.sh" | Out-Null
ssh $server "dos2unix -q /tmp/zqwbuild/src/version.h"
ssh $server "rm -rf /tmp/sdbuild"
ssh $server "mkdir /tmp/sdbuild"
scp -r src/ singleapplication/ res/ ./silentdragon.pro ./application.qrc ./LICENSE ./README.md ${server}:/tmp/sdbuild/ | Out-Null
ssh $server "dos2unix -q /tmp/sdbuild/src/scripts/mkrelease.sh" | Out-Null
ssh $server "dos2unix -q /tmp/sdbuild/src/version.h"
Write-Host "[OK]"
ssh $server "cd /tmp/zqwbuild && APP_VERSION=$version PREV_VERSION=$prev bash src/scripts/mkrelease.sh"
ssh $server "cd /tmp/sdbuild && APP_VERSION=$version PREV_VERSION=$prev bash src/scripts/mkrelease.sh"
if (!$?) {
Write-Output "[Error]"
exit 1;
}
New-Item artifacts -itemtype directory -Force | Out-Null
scp ${server}:/tmp/zqwbuild/artifacts/* artifacts/ | Out-Null
scp -r ${server}:/tmp/zqwbuild/release . | Out-Null
scp ${server}:/tmp/sdbuild/artifacts/* artifacts/ | Out-Null
scp -r ${server}:/tmp/sdbuild/release . | Out-Null
Write-Host -NoNewline "Building Installer....."
ssh $winserver "Remove-Item -Path zqwbuild -Recurse" | Out-Null
ssh $winserver "New-Item zqwbuild -itemtype directory" | Out-Null
ssh $winserver "Remove-Item -Path sdbuild -Recurse" | Out-Null
ssh $winserver "New-Item sdbuild -itemtype directory" | Out-Null
# Note: For some mysterious reason, we can't seem to do a scp from here to windows machine.
# So, we'll ssh to windows, and execute an scp command to pull files from here to there.
@ -65,33 +65,33 @@ ssh $winserver "New-Item zqwbuild -itemtype directory" | Out-Null
# so we ssh to windows, and then scp push the file to here.
$myhostname = (hostname) | Out-String -NoNewline
# Powershell seems not to be able to remove this directory for some reason!
# Remove-Item -Path /tmp/zqwbuild -Recurse -ErrorAction Ignore | Out-Null
bash "rm -rf /tmp/zqwbuild" 2>&1 | Out-Null
New-Item -Path /tmp/zqwbuild -itemtype directory -Force | Out-Null
Copy-Item src /tmp/zqwbuild/ -Recurse -Force
Copy-Item res /tmp/zqwbuild/ -Recurse -Force
Copy-Item release /tmp/zqwbuild/ -Recurse -Force
# Remove-Item -Path /tmp/sdbuild -Recurse -ErrorAction Ignore | Out-Null
bash "rm -rf /tmp/sdbuild" 2>&1 | Out-Null
New-Item -Path /tmp/sdbuild -itemtype directory -Force | Out-Null
Copy-Item src /tmp/sdbuild/ -Recurse -Force
Copy-Item res /tmp/sdbuild/ -Recurse -Force
Copy-Item release /tmp/sdbuild/ -Recurse -Force
# Remove some unnecessary stuff from the tmp directory to speed up copying
Remove-Item -Recurse -ErrorAction Ignore /tmp/zqwbuild/res/libsodium
Remove-Item -Recurse -ErrorAction Ignore /tmp/sdbuild/res/libsodium
ssh $winserver "scp -r ${myhostname}:/tmp/zqwbuild/* zqwbuild/"
ssh $winserver "cd zqwbuild ; src/scripts/mkwininstaller.ps1 -version $version" >/dev/null
ssh $winserver "scp -r ${myhostname}:/tmp/sdbuild/* sdbuild/"
ssh $winserver "cd sdbuild ; src/scripts/mkwininstaller.ps1 -version $version" >/dev/null
if (!$?) {
Write-Output "[Error]"
exit 1;
}
ssh $winserver "scp zqwbuild/artifacts/* ${myhostname}:/tmp/zqwbuild/"
Copy-Item /tmp/zqwbuild/*.msi artifacts/
ssh $winserver "scp sdbuild/artifacts/* ${myhostname}:/tmp/sdbuild/"
Copy-Item /tmp/sdbuild/*.msi artifacts/
Write-Host "[OK]"
# Finally, test to make sure all files exist
Write-Host -NoNewline "Checking Build........."
if (! (Test-Path ./artifacts/linux-binaries-zecwallet-v$version.tar.gz) -or
! (Test-Path ./artifacts/linux-deb-zecwallet-v$version.deb) -or
! (Test-Path ./artifacts/Windows-binaries-zecwallet-v$version.zip) -or
! (Test-Path ./artifacts/macOS-zecwallet-v$version.dmg) -or
! (Test-Path ./artifacts/Windows-installer-zecwallet-v$version.msi) ) {
if (! (Test-Path ./artifacts/linux-binaries-silentdragon-v$version.tar.gz) -or
! (Test-Path ./artifacts/linux-deb-silentdragon-v$version.deb) -or
! (Test-Path ./artifacts/Windows-binaries-silentdragon-v$version.zip) -or
! (Test-Path ./artifacts/macOS-silentdragon-v$version.dmg) -or
! (Test-Path ./artifacts/Windows-installer-silentdragon-v$version.msi) ) {
Write-Host "[Error]"
exit 1;
}

2
src/scripts/make-binary-tarball.sh

@ -1,5 +1,5 @@
#!/bin/bash
# Copyright (c) 2019-2021 The Hush developers
# Copyright (c) 2019-2022 The Hush developers
# Released under the GPLv3
APP_VERSION=$(cat src/version.h | cut -d\" -f2)

86
src/scripts/make-deb.sh

@ -1,12 +1,12 @@
#!/bin/bash
# Copyright (c) 2019-2021 The Hush developers
# Copyright (c) 2019-2022 The Hush developers
# Thanks to Zecwallet for the original code
# Released under the GPLv3
DEBLOG=deb.log.$$
if [ -z $QT_STATIC ]; then
echo "QT_STATIC is not set. Please set it to the base directory of a statically compiled Qt";
echo "QT_STATIC is not set; to set it use -static for QT configuration. Please set it to the base directory of a statically compiled Qt";
exit 1;
fi
@ -15,7 +15,7 @@ if [ -z $APP_VERSION ]; then echo "APP_VERSION is not set"; exit 1; fi
#if [ -z $PREV_VERSION ]; then echo "PREV_VERSION is not set"; exit 1; fi
if [ -z $HUSH_DIR ]; then
echo "HUSH_DIR is not set. Please set it to the base directory of hush3.git"
echo "HUSH_DIR is not set. Please set it to the src directory of hush3.git"
exit 1;
fi
@ -34,7 +34,12 @@ if [ ! -f $HUSH_DIR/hush-tx ]; then
exit 1;
fi
echo -n "Cleaning..............."
if [ ! -f $HUSH_DIR/hush-smart-chain ]; then
echo "Couldn't find hush-smart-chain in $HUSH_DIR . Please build hush-smart-chain."
exit 1;
fi
echo "Cleaning..............."
rm -rf bin/*
rm -rf artifacts/*
make distclean >/dev/null 2>&1
@ -43,7 +48,7 @@ echo "[OK]"
echo ""
echo "[Building $APP_VERSION on" `lsb_release -r`" logging to $DEBLOG ]"
echo -n "Translations............"
echo "Translations............"
QT_STATIC=$QT_STATIC bash src/scripts/dotranslations.sh >/dev/null
echo -n "Configuring............"
$QT_STATIC/bin/qmake silentdragon.pro -spec linux-clang CONFIG+=release > /dev/null
@ -58,7 +63,7 @@ echo "[OK]"
# Test for Qt
echo -n "Static link............"
echo "Static link............"
if [[ $(ldd silentdragon | grep -i "Qt") ]]; then
echo "FOUND QT; ABORT";
exit 1
@ -66,34 +71,39 @@ fi
echo "[OK]"
echo -n "Packaging.............."
echo "Packaging.............."
APP=SilentDragon-v$APP_VERSION
DIR=bin/$APP
mkdir $DIR > /dev/null
strip silentdragon
cp silentdragon $DIR > /dev/null
cp $HUSH_DIR/artifacts/hushd $DIR > /dev/null
cp $HUSH_DIR/artifacts/hush-cli $DIR > /dev/null
cp $HUSH_DIR/artifacts/hush-tx $DIR > /dev/null
cp README.md $DIR > /dev/null
cp LICENSE $DIR > /dev/null
#Organizing all bins & essentials to centralized folder for tar.gz
echo "Organizing binaries & essentials.............."
cp silentdragon $DIR > /dev/null
cp README.md $DIR > /dev/null
cp LICENSE $DIR > /dev/null
cd bin && tar czf $APP.tar.gz $DIR/ > /dev/null
cd ..
echo "Stripping silentdragon.............."
cd $DIR
strip silentdragon
cd ../..
mkdir artifacts >/dev/null 2>&1
cp $DIR.tar.gz ./artifacts/$APP-linux.tar.gz
echo "[OK]"
echo "Compressing files.............."
cd bin/
tar -czf $APP.tar.gz ./$APP > /dev/null
echo "Copy compressed file.............."
mkdir artifacts >/dev/null 2>&1
cp $APP.tar.gz ./artifacts/$APP-linux.tar.gz
echo -n "[OK]"
echo "Verify Compressed File.............."
if [ -f artifacts/$APP-linux.tar.gz ] ; then
echo -n "Package contents......."
# Test if the package is built OK
if tar tf "artifacts/$APP-linux.tar.gz" | wc -l | grep -q "9"; then
if tar -tf "artifacts/$APP-linux.tar.gz" | wc -l | grep -q "4"; then
echo "[OK]"
else
echo "[ERROR] Wrong number of files does not match 9"
echo "[ERROR] Wrong number of files does not match 11"
exit 1
fi
else
@ -101,25 +111,37 @@ else
exit 1
fi
echo -n "Building deb..........."
debdir=bin/deb/silentdragon-v$APP_VERSION
echo "Building package..........."
debdir=deb/silentdragon-v$APP_VERSION
mkdir -p $debdir > /dev/null
mkdir $debdir/DEBIAN
mkdir -p $debdir/usr/local/bin
cat src/scripts/control | sed "s/RELEASE_VERSION/$APP_VERSION/g" > $debdir/DEBIAN/control
mkdir -p $debdir/usr/lib
mkdir -p $debdir/usr/share/pixmaps/
cat ../src/scripts/control | sed "s/RELEASE_VERSION/$APP_VERSION/g" > $debdir/DEBIAN/control
cp silentdragon $debdir/usr/local/bin/
cp $HUSH_DIR/artifacts/hushd $debdir/usr/local/bin/hushd
echo "Copying silentdragon bin..........."
cp ../silentdragon $debdir/usr/local/bin/
mkdir -p $debdir/usr/share/pixmaps/
cp res/silentdragon.xpm $debdir/usr/share/pixmaps/
echo "Copying core libraries from silentdragon binary..........."
# copy the required shared libs to the target folder
# create directories if required
for lib in `ldd $debdir/usr/local/bin/silentdragon | cut -d'>' -f2 | awk '{print $1}'` ; do
if [ -f "$lib" ] ; then
cp -v "$lib" $debdir/usr/lib/
fi
done
echo "Copying SilentDragon icon..........."
cp ../res/silentdragon.xpm $debdir/usr/share/pixmaps/
mkdir -p $debdir/usr/share/applications
cp src/scripts/desktopentry $debdir/usr/share/applications/silentdragon.desktop
cp ../src/scripts/desktopentry $debdir/usr/share/applications/silentdragon.desktop
dpkg-deb --build $debdir >/dev/null
cp $debdir.deb artifacts/$DIR.deb
echo "[OK]"
dpkg-deb --build --root-owner-group $debdir >/dev/null
echo "[Success! $APP .deb has been created in $APP/bin/deb]"
exit 0

2
src/scripts/make-only-deb.sh

@ -1,5 +1,5 @@
#!/bin/bash
# Copyright (c) 2019-2021 The Hush developers
# Copyright (c) 2019-2022 The Hush developers
# Released under the GPLv3
echo "Let There Be Debian Packages"

4
src/scripts/mkmacdmg.sh

@ -1,5 +1,5 @@
#!/bin/bash
# Copyright (c) 2019-2021 The Hush developers
# Copyright (c) 2019-2022 The Hush developers
# Released under the GPLv3
# Accept the variables as command line arguments as well
@ -114,8 +114,6 @@ rm -f artifcats/silentdragon.dmg >/dev/null 2>&1
rm -f artifacts/rw* >/dev/null 2>&1
cp $HUSH_DIR/src/hushd silentdragon.app/Contents/MacOS/
cp $HUSH_DIR/src/hush-cli silentdragon.app/Contents/MacOS/
cp $HUSH_DIR/src/komodod silentdragon.app/Contents/MacOS/
cp $HUSH_DIR/src/komodo-cli silentdragon.app/Contents/MacOS/
cp $HUSH_DIR/sapling-output.params silentdragon.app/Contents/MacOS/
cp $HUSH_DIR/sapling-spend.params silentdragon.app/Contents/MacOS/
$QT_PATH/bin/macdeployqt silentdragon.app

48
src/scripts/mkrelease.sh

@ -1,5 +1,5 @@
#!/bin/bash
# Copyright (c) 2019-2021 The Hush developers
# Copyright (c) 2019-2022 The Hush developers
# Thanks to Zecwallet for the original code
# Released under the GPLv3
@ -21,18 +21,18 @@ if [ -z $HUSH_DIR ]; then
exit 1;
fi
if [ ! -f $HUSH_DIR/komodod ]; then
echo "Couldn't find komodod in $HUSH_DIR . Please build komodod."
if [ ! -f $HUSH_DIR/hushd ]; then
echo "Couldn't find hushd in $HUSH_DIR . Please build hushd."
exit 1;
fi
if [ ! -f $HUSH_DIR/komodo-cli ]; then
echo "Couldn't find komodo-cli in $HUSH_DIR . Please build komodo-cli."
if [ ! -f $HUSH_DIR/hush-cli ]; then
echo "Couldn't find hush-cli in $HUSH_DIR . Please build hush-cli."
exit 1;
fi
if [ ! -f $HUSH_DIR/komodo-tx ]; then
echo "Couldn't find komodo-tx in $HUSH_DIR . Please build komodo-tx."
if [ ! -f $HUSH_DIR/hush-tx ]; then
echo "Couldn't find hush-tx in $HUSH_DIR . Please build hush-tx."
exit 1;
fi
@ -80,8 +80,8 @@ RELEASEFILE2=$RELEASEDIR-$OS-$ARCH.tar.gz
# this is equal to the number of files we package plus 1, for the directory
# that is created
NUM_FILES1=10
NUM_FILES2=12 # 2 additional param files
NUM_FILES1=6
NUM_FILES2=8 # 2 additional param files
echo "Packaging.............."
mkdir bin/$RELEASEDIR
@ -92,18 +92,18 @@ strip silentdragon
ls -la silentdragon
cp silentdragon bin/$RELEASEDIR > /dev/null
cp $HUSH_DIR/komodod bin/$RELEASEDIR > /dev/null
cp $HUSH_DIR/komodo-cli bin/$RELEASEDIR > /dev/null
cp $HUSH_DIR/komodo-tx bin/$RELEASEDIR > /dev/null
strip $HUSH_DIR/hushd
cp $HUSH_DIR/hushd bin/$RELEASEDIR > /dev/null
strip $HUSH_DIR/hush-cli
cp $HUSH_DIR/hush-cli bin/$RELEASEDIR > /dev/null
cp $HUSH_DIR/hush-tx bin/$RELEASEDIR > /dev/null
# I have yet to hear of somebody using this binary, it just bloats our archives
#cp $HUSH_DIR/hush-tx bin/$RELEASEDIR > /dev/null
cp README.md bin/$RELEASEDIR > /dev/null
cp LICENSE bin/$RELEASEDIR > /dev/null
cd bin && tar czf $RELEASEFILE1 $RELEASEDIR/ #> /dev/null
#ls -la $RELEASEDIR/
ls -la $RELEASEDIR/
echo "Created $RELEASEFILE1 [OK]"
cd ..
@ -121,7 +121,7 @@ else
fi
cd bin && tar czf $RELEASEFILE2 $RELEASEDIR/
#ls -la $RELEASEDIR/
ls -la $RELEASEDIR/
echo "Created $RELEASEFILE2 [OK]"
cd ..
@ -157,6 +157,8 @@ else
fi
cd bin
du -sh $RELEASEFILE1
du -sh $RELEASEFILE2
echo "DONE! Checksums:"
sha256sum $RELEASEFILE1
sha256sum $RELEASEFILE2
@ -177,7 +179,7 @@ cat src/scripts/control | sed "s/RELEASE_VERSION/$APP_VERSION/g" > $debdir/DEBIA
cp silentdragon $debdir/usr/local/bin/
# TODO: how does this interact with hushd deb ?
cp $HUSH_DIR/artifacts/komodod $debdir/usr/local/bin/hush-komodod
cp $HUSH_DIR/artifacts/hushd $debdir/usr/local/bin/hushd
mkdir -p $debdir/usr/share/pixmaps/
cp res/silentdragon.xpm $debdir/usr/share/pixmaps/
@ -202,14 +204,14 @@ if [ -z $MXE_PATH ]; then
exit 0;
fi
if [ ! -f $HUSH_DIR/artifacts/komodod.exe ]; then
echo "Couldn't find komodod.exe in $HUSH_DIR/artifacts/. Please build komodod.exe"
if [ ! -f $HUSH_DIR/artifacts/hushd.exe ]; then
echo "Couldn't find hushd.exe in $HUSH_DIR/artifacts/. Please build hushd.exe"
exit 1;
fi
if [ ! -f $HUSH_DIR/artifacts/komodo-cli.exe ]; then
echo "Couldn't find komodo-cli.exe in $HUSH_DIR/artifacts/. Please build komodod-cli.exe"
if [ ! -f $HUSH_DIR/artifacts/hush-cli.exe ]; then
echo "Couldn't find hush-cli.exe in $HUSH_DIR/artifacts/. Please build hushd-cli.exe"
exit 1;
fi
@ -234,10 +236,8 @@ echo "[OK]"
echo -n "Packaging.............."
mkdir release/silentdragon-v$APP_VERSION
cp release/silentdragon.exe release/silentdragon-v$APP_VERSION
cp $HUSH_DIR/artifacts/komodod.exe release/silentdragon-v$APP_VERSION > /dev/null
cp $HUSH_DIR/artifacts/komodo-cli.exe release/silentdragon-v$APP_VERSION > /dev/null
cp $HUSH_DIR/artifacts/hushd.bat release/silentdragon-v$APP_VERSION > /dev/null
cp $HUSH_DIR/artifacts/hush-cli.bat release/silentdragon-v$APP_VERSION > /dev/null
cp $HUSH_DIR/artifacts/hushd.exe release/silentdragon-v$APP_VERSION > /dev/null
cp $HUSH_DIR/artifacts/hush-cli.exe release/silentdragon-v$APP_VERSION > /dev/null
cp README.md release/silentdragon-v$APP_VERSION
cp LICENSE release/silentdragon-v$APP_VERSION
cd release && zip -r Windows-binaries-silentdragon-v$APP_VERSION.zip silentdragon-v$APP_VERSION/ > /dev/null

2
src/scripts/signbinaries.sh

@ -1,5 +1,5 @@
#!/bin/bash
# Copyright (c) 2019-2021 The Hush developers
# Copyright (c) 2019-2022 The Hush developers
# Released under the GPLv3
# Accept the variables as command line arguments as well

10
src/scripts/zec-qt-wallet.wxs → src/scripts/silentdragon.wxs

@ -6,8 +6,8 @@
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate EmbedCab="yes"/>
<Icon Id="zecqtwalleticon.exe" SourceFile="res/icon.ico"/>
<Property Id="ARPPRODUCTICON" Value="zecqtwalleticon.exe" />
<Icon Id="silentdragonicon.exe" SourceFile="res/icon.ico"/>
<Property Id="ARPPRODUCTICON" Value="silentdragonicon.exe" />
<Feature Id="ProductFeature" Title="silent-dragon" Level="1">
<ComponentGroupRef Id="ProductComponents" />
@ -57,12 +57,12 @@
<Component Id="ProductComponent" Guid="0D210F5A-53E0-4E7E-CAAD-15A26995505E">
<File Source="silentdragon.exe" KeyPath="yes">
<Shortcut Id="startMenuShotcut" Advertise="yes" Directory="ApplicationProgramsFolder"
Name="silentdragon" WorkingDirectory="INSTALLFOLDER" Icon="zecqtwalleticon.exe" >
Name="silentdragon" WorkingDirectory="INSTALLFOLDER" Icon="silentdragonicon.exe" >
</Shortcut>
</File>
<File Source="LICENSE" />
<File Source="komodod.exe" />
<File Source="komodo-cli.exe" />
<File Source="hushd.exe" />
<File Source="hush-cli.exe" />
<File Source="README.md" />
<RegistryKey Root="HKCR" Key="hush">

5
src/sd.h

@ -0,0 +1,5 @@
// Copyright 2019-2023 The Hush Developers
// Released under the GPLv3
#define DEBUG(x) (qDebug() << QString(__func__) << ": " << x)

74
src/sendtab.cpp

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#include "mainwindow.h"
#include "ui_mainwindow.h"
@ -14,7 +14,7 @@
void MainWindow::setupSendTab() {
// Create the validator for send to/amount fields
amtValidator = new QRegExpValidator(QRegExp("[0-9]{0,8}\\.?[0-9]{0,8}"));
amtValidator = new QRegExpValidator(QRegExp("[0-9]{0,9}\\.?[0-9]{0,8}"));
ui->Amount1->setValidator(amtValidator);
@ -251,51 +251,69 @@ void MainWindow::addAddressSection() {
Amount1->setPlaceholderText(tr("Amount"));
Amount1->setObjectName(QString("Amount") % QString::number(itemNumber));
Amount1->setBaseSize(QSize(200, 0));
Amount1->setAlignment(Qt::AlignRight);
Amount1->setMinimumWidth(200);
Amount1->setSizePolicy(QSizePolicy ::Preferred , QSizePolicy ::Preferred );
Amount1->setAlignment(Qt::AlignRight);
// Create the validator for send to/amount fields
Amount1->setValidator(amtValidator);
QObject::connect(Amount1, &QLineEdit::textChanged, [=] (auto text) {
this->amountChanged(itemNumber, text);
});
horizontalLayout_13->addWidget(Amount1);
auto AmtUSD1 = new QLabel(verticalGroupBox);
AmtUSD1->setObjectName(QString("AmtUSD") % QString::number(itemNumber));
AmtUSD1->setObjectName(QString("AmtUSD") % QString::number(itemNumber));
horizontalLayout_13->addWidget(AmtUSD1);
/* TODO: Fix so it updates amount on correct recipient row...or just remove. Added for UI consistency.
auto Max1 = new QCheckBox(verticalGroupBox);
Max1->setText(tr("Max Available"));
// Connect Max Available checkbox
QObject::connect(Max1, &QCheckBox::stateChanged, [=] () {
this->maxAmountChecked(Max1->checkState());
});
horizontalLayout_13->addWidget(Max1);
*/
auto horizontalSpacer_4 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
horizontalLayout_13->addItem(horizontalSpacer_4);
auto MemoBtn1 = new QPushButton(verticalGroupBox);
MemoBtn1->setObjectName(QString("MemoBtn") % QString::number(itemNumber));
MemoBtn1->setText(tr("Memo"));
// Connect Memo Clicked button
QObject::connect(MemoBtn1, &QPushButton::clicked, [=] () {
this->memoButtonClicked(itemNumber);
});
horizontalLayout_13->addWidget(MemoBtn1);
setMemoEnabled(itemNumber, false);
auto FileBtn = new QPushButton(verticalGroupBox);
FileBtn->setObjectName(QString("FileBtn") % QString::number(itemNumber));
FileBtn->setText(tr("File Upload"));
FileBtn->setText(tr("Upload File"));
// Connect File Upload button
QObject::connect(FileBtn, &QPushButton::clicked, [=] () {
this->fileUploadButtonClicked(itemNumber);
});
horizontalLayout_13->addWidget(FileBtn);
sendAddressLayout->addLayout(horizontalLayout_13);
auto horizontalLayout_20 = new QHBoxLayout();
horizontalLayout_20->setSpacing(6);
horizontalLayout_20->setAlignment(Qt::AlignTop);
auto MemoTxt1 = new QLabel(verticalGroupBox);
MemoTxt1->setObjectName(QString("MemoTxt") % QString::number(itemNumber));
MemoTxt1->setSizePolicy(QSizePolicy ::MinimumExpanding , QSizePolicy ::MinimumExpanding );
QFont font1 = Address1->font();
font1.setPointSize(font1.pointSize()-1);
MemoTxt1->setFont(font1);
MemoTxt1->setWordWrap(true);
sendAddressLayout->addWidget(MemoTxt1);
horizontalLayout_20->addWidget(MemoTxt1, 0, Qt::AlignTop);
auto MemoBtn1 = new QPushButton(verticalGroupBox);
MemoBtn1->setObjectName(QString("MemoBtn") % QString::number(itemNumber));
MemoBtn1->setText(tr("Memo"));
// Connect Memo Clicked button
QObject::connect(MemoBtn1, &QPushButton::clicked, [=] () {
this->memoButtonClicked(itemNumber);
});
horizontalLayout_20->addWidget(MemoBtn1, 0, Qt::AlignTop);
setMemoEnabled(itemNumber, false);
sendAddressLayout->addLayout(horizontalLayout_20);
ui->sendToLayout->insertWidget(itemNumber-1, verticalGroupBox);
@ -702,18 +720,11 @@ void MainWindow::sendButton() {
auto connD = new Ui_ConnectionDialog();
connD->setupUi(d);
QMovie *movie1 = new QMovie(":/img/res/silentdragon-animated.gif");;
QMovie *movie2 = new QMovie(":/img/res/silentdragon-animated-dark.gif");;
QMovie *movie1 = new QMovie(":/img/silentdragon-animated-dark.gif");;
auto theme = Settings::getInstance()->get_theme_name();
if (theme == "dark" || theme == "midnight") {
movie2->setScaledSize(QSize(512,512));
connD->topIcon->setMovie(movie2);
movie2->start();
} else {
movie1->setScaledSize(QSize(512,512));
connD->topIcon->setMovie(movie1);
movie1->start();
}
movie1->setScaledSize(QSize(512,512));
connD->topIcon->setMovie(movie1);
movie1->start();
//connD->topIcon->setBasePixmap(logo.scaled(256, 256, Qt::KeepAspectRatio, Qt::SmoothTransformation));
@ -729,7 +740,7 @@ void MainWindow::sendButton() {
qDebug() << "Computing opid: " << opid;
},
[=] (QString, QString txid) {
[=] (QString, QString txid) {
ui->statusBar->showMessage(Settings::txidStatusMessage + " " + txid);
connD->status->setText(tr("Done!"));
@ -744,7 +755,8 @@ void MainWindow::sendButton() {
// And switch to the balances tab
ui->tabWidget->setCurrentIndex(0);
});
// Force a UI update so we get the unconfirmed Tx
// Force a UI update so we get the unconfirmed Tx
rpc->refresh(true);
},
[=] (QString opid, QString errStr) {

10
src/senttxstore.cpp

@ -1,11 +1,16 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#include "senttxstore.h"
#include "settings.h"
extern bool isdragonx;
/// Get the location of the app data file to be written.
QString SentTxStore::writeableFile() {
auto filename = QStringLiteral("senttxstore.dat");
if (isdragonx) {
filename = QStringLiteral("senttxstore-drgx.dat");
}
auto dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation));
if (!dir.exists())
@ -14,6 +19,7 @@ QString SentTxStore::writeableFile() {
if (Settings::getInstance()->isTestnet()) {
return dir.filePath("testnet-" % filename);
} else {
qDebug() << "senttxstore file = " + dir.filePath(filename);
return dir.filePath(filename);
}
}
@ -45,7 +51,7 @@ QList<TransactionItem> SentTxStore::readSentTxFile() {
sentTx["address"].toString(),
sentTx["txid"].toString(),
sentTx["amount"].toDouble() + sentTx["fee"].toDouble(),
0, sentTx["from"].toString(), ""};
0, sentTx["from"].toString(), sentTx["memo"].toString()};
items.push_back(t);
}

2
src/senttxstore.h

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#ifndef SENTTXSTORE_H
#define SENTTXSTORE_H

86
src/settings.cpp

@ -1,7 +1,10 @@
// Copyright 2019-2021 Hush developers
// Copyright 2019-2022 Hush developers
// Released under the GPLv3
#include "mainwindow.h"
#include "settings.h"
#include "sd.h"
extern bool isdragonx;
Settings* Settings::instance = nullptr;
@ -25,7 +28,8 @@ void Settings::setCheckForUpdates(bool allow) {
}
bool Settings::getAllowFetchPrices() {
return QSettings().value("options/allowfetchprices", true).toBool();
// now defaults to OFF, used to be ON
return QSettings().value("options/allowfetchprices", false).toBool();
}
void Settings::setAllowFetchPrices(bool allow) {
@ -38,20 +42,39 @@ Explorer Settings::getExplorer() {
//TODO: make it easy for people to use other explorers
QString explorer = "https://explorer.hush.is";
auto txExplorerUrl = s.value("explorer/txExplorerUrl", explorer + "/tx/").toString();
auto addressExplorerUrl = s.value("explorer/addressExplorerUrl", explorer + "/address/").toString();
auto testnetTxExplorerUrl = s.value("explorer/testnetTxExplorerUrl").toString();
auto testnetAddressExplorerUrl = s.value("explorer/testnetAddressExplorerUrl").toString();
if(isdragonx) {
explorer = "https://explorer.dragonx.is";
}
QString onionExplorer = "http://jlqhwhak65kokg3pdjp3ufy6almf5spnhsfnugtjsc4z7wtapgozxyad.onion";
auto txExplorerUrl = s.value("explorer/txExplorerUrl", explorer + "/tx/").toString();
auto addressExplorerUrl = s.value("explorer/addressExplorerUrl", explorer + "/address/").toString();
auto onionTxExplorerUrl = s.value("explorer/onionTxExplorerUrl", onionExplorer + "/tx/").toString();
auto onionAddressExplorerUrl = s.value("explorer/onionAddressExplorerUrl", onionExplorer + "/address/").toString();
return Explorer{txExplorerUrl, addressExplorerUrl, testnetTxExplorerUrl, testnetAddressExplorerUrl};
// Some users have the old malicious explorer URL saved in their config file, help them out
if (txExplorerUrl == "https://explorer.myhush.org/tx/") {
txExplorerUrl = explorer + "/tx/";
saveExplorer(txExplorerUrl, addressExplorerUrl, onionTxExplorerUrl, onionAddressExplorerUrl);
}
if (addressExplorerUrl == "https://explorer.myhush.org/address/") {
addressExplorerUrl = explorer + "/address/";
saveExplorer(txExplorerUrl, addressExplorerUrl, onionTxExplorerUrl, onionAddressExplorerUrl);
}
//DEBUG("explorer values: " << txExplorerUrl << " " << addressExplorerUrl << " " << onionTxExplorerUrl << " " << onionAddressExplorerUrl );
DEBUG("onionTxExplorerUrl=" % onionTxExplorerUrl);
DEBUG("onionAddressExplorerUrl=" % onionAddressExplorerUrl);
return Explorer{txExplorerUrl, addressExplorerUrl, onionTxExplorerUrl, onionAddressExplorerUrl};
}
void Settings::saveExplorer(const QString& txExplorerUrl, const QString& addressExplorerUrl, const QString& testnetTxExplorerUrl, const QString& testnetAddressExplorerUrl) {
void Settings::saveExplorer(const QString& txExplorerUrl, const QString& addressExplorerUrl, const QString& onionTxExplorerUrl, const QString& onionAddressExplorerUrl) {
QSettings s;
s.setValue("explorer/txExplorerUrl", txExplorerUrl);
s.setValue("explorer/addressExplorerUrl", addressExplorerUrl);
s.setValue("explorer/testnetTxExplorerUrl", testnetTxExplorerUrl);
s.setValue("explorer/testnetAddressExplorerUrl", testnetAddressExplorerUrl);
s.setValue("explorer/onionTxExplorerUrl", onionTxExplorerUrl);
s.setValue("explorer/onionAddressExplorerUrl", onionAddressExplorerUrl);
//DEBUG("saving explorer values: " << txExplorerUrl << " " << addressExplorerUrl << " " << onionTxExplorerUrl << " " << onionAddressExplorerUrl );
}
Config Settings::getSettings() {
@ -246,10 +269,13 @@ void Settings::setAllowCustomFees(bool allow) {
QString Settings::get_theme_name() {
// Load from the QT Settings.
return QSettings().value("options/theme_name", false).toString();
QString theme_name = QSettings().value("options/theme_name", false).toString();
//qDebug() << __func__ << ": theme_name=" << theme_name;
return theme_name;
}
void Settings::set_theme_name(QString theme_name) {
qDebug() << __func__ << ": settings theme_name=" << theme_name;
QSettings().setValue("options/theme_name", theme_name);
}
@ -313,6 +339,9 @@ QString Settings::getHUSHUSDDisplayFormat(double bal) {
const QString Settings::txidStatusMessage = QString(QObject::tr("Transaction submitted (right click to copy) txid:"));
QString Settings::getTokenName() {
if (isdragonx) {
return "DRGX";
}
if (Settings::getInstance()->isTestnet()) {
return "TUSH";
} else {
@ -351,6 +380,21 @@ void Settings::set_currency_name(QString currency_name) {
QSettings().setValue("options/currency_name", currency_name);
}
QString Settings::get_language() {
// use the default system language if none is set
QString locale = QLocale::system().name();
// remove country data, i.e. en_US => en
locale.truncate( locale.lastIndexOf("_"));
auto lang = QSettings().value("options/language", locale).toString();
qDebug() << __func__ << ": found lang=" << lang << " in config file";
return lang;
}
void Settings::set_language(QString lang) {
qDebug() << __func__ << ": setting lang=" << lang << " in config file";
QSettings().setValue("options/language", lang);
}
bool Settings::removeFromHushConf(QString confLocation, QString option) {
if (confLocation.isEmpty())
@ -419,12 +463,26 @@ QString Settings::paymentURIPretty(PaymentURI uri) {
PaymentURI Settings::parseURI(QString uri) {
PaymentURI ans;
if (!uri.startsWith("hush:")) {
ans.error = "Not a HUSH payment URI";
return ans;
auto proto="";
if (isdragonx) {
proto ="drgx:";
if (!uri.startsWith(proto % QString(":"))) {
ans.error = "Not a DRGX payment URI";
return ans;
}
} else {
proto = "hush:";
if (!uri.startsWith(proto % QString(":"))) {
ans.error = "Not a HUSH payment URI";
return ans;
}
}
uri = uri.right(uri.length() - QString("hush:").length());
if(isdragonx) {
uri = uri.right(uri.length() - QString("drgx:").length());
}
QRegExp re("([a-zA-Z0-9]+)");
int pos;

23
src/settings.h

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#ifndef SETTINGS_H
#define SETTINGS_H
@ -15,8 +15,8 @@ struct Config {
struct Explorer {
QString txExplorerUrl;
QString addressExplorerUrl;
QString testnetTxExplorerUrl;
QString testnetAddressExplorerUrl;
QString onionTxExplorerUrl;
QString onionAddressExplorerUrl;
};
struct ToFields;
@ -38,7 +38,7 @@ public:
static Settings* getInstance();
Explorer getExplorer();
void saveExplorer(const QString& txExplorerUrl, const QString& addressExplorerUrl, const QString& testnetTxExplorerUrl, const QString& testnetAddressExplorerUrl);
void saveExplorer(const QString& txExplorerUrl, const QString& addressExplorerUrl, const QString& onionTxExplorerUrl, const QString& onionAddressExplorerUrl);
Config getSettings();
void saveSettings(const QString& host, const QString& port, const QString& username, const QString& password);
@ -89,6 +89,9 @@ public:
QString get_currency_name();
void set_currency_name(QString currency_name);
QString get_language();
void set_language(QString lang);
void setUsingHushConf(QString confLocation);
const QString& getHushdConfLocation() { return _confLocation; }
@ -129,9 +132,8 @@ public:
static QString getDonationAddr();
static double getMinerFee();
static double getZboardAmount();
static QString getZboardAddr();
//TODO: this could be an advanced setting too
static int getMaxMobileAppTxns() { return 30; }
static bool isValidAddress(QString addr);
@ -146,6 +148,10 @@ public:
static const int quickUpdateSpeed = 3 * 1000; // 3 sec
static const int priceRefreshSpeed = 15 * 60 * 1000; // 15 mins
protected:
// this event is called, when a new translator is loaded or the system language is changed
// void changeEvent(QEvent* event);
private:
// This class can only be accessed through Settings::getInstance()
Settings() = default;
@ -158,12 +164,11 @@ private:
bool _isTestnet = false;
bool _isSyncing = false;
int _blockNumber = 0;
int _hushdVersion = 0;
int _hushdVersion = 0;
bool _useEmbedded = false;
bool _headless = false;
int _peerConnections = 0;
double hushPrice = 0.0;
double hushPrice = 0.0;
double fiat_price = 0.0;
unsigned int btcPrice = 0;
std::map<QString, double> prices;

432
src/settings.ui

@ -22,11 +22,11 @@
<property name="modal">
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>3</number>
<number>1</number>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
@ -145,6 +145,139 @@
<string>Options</string>
</attribute>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0" colspan="2">
<widget class="QCheckBox" name="chkSaveTxs">
<property name="text">
<string>Remember shielded transactions</string>
</property>
</widget>
</item>
<item row="5" column="0" colspan="2">
<widget class="QCheckBox" name="chkAutoShield">
<property name="text">
<string>Shield change from t-Addresses to your sapling address</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QPushButton" name="btnClearSaved">
<property name="text">
<string>Clear History</string>
</property>
</widget>
</item>
<item row="12" column="0" colspan="2">
<widget class="QLabel" name="label_10">
<property name="text">
<string>Connect to the internet to fetch prices</string>
</property>
</widget>
</item>
<item row="14" column="0" colspan="2">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="15" column="1">
<widget class="QComboBox" name="comboBoxTheme">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string notr="true">default</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">blue</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">light</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">dark</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">midnight</string>
</property>
</item>
<item>
<property name="text">
<string>dragonx</string>
</property>
</item>
</widget>
</item>
<item row="18" column="1">
<widget class="QComboBox" name="comboBoxLanguage">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="8" column="0" colspan="2">
<widget class="QLabel" name="lblTor">
<property name="text">
<string>Connect to the Tor network via SOCKS proxy, which runs on 127.0.0.1:9050 by default or 127.0.0.1:9150 for Tor Browser. Please note that you'll have to install and run the Tor service externally.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QLabel" name="label_tor_port">
<property name="text">
<string>Tor Port</string>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="QLineEdit" name="torPort">
<property name="text">
<string notr="true">9050</string>
</property>
</widget>
</item>
<item row="2" column="0">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="15" column="0">
<widget class="QLabel" name="label_20">
<property name="sizePolicy">
@ -161,6 +294,54 @@
</property>
</widget>
</item>
<item row="4" column="0" colspan="2">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Allow overriding the default fees when sending transactions. Enabling this option may compromise your privacy since fees are transparent. </string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="10" column="0" colspan="2">
<widget class="QCheckBox" name="chkCheckUpdates">
<property name="text">
<string>Check git.hush.is for updates at startup</string>
</property>
</widget>
</item>
<item row="12" column="0" colspan="2">
<widget class="QCheckBox" name="chkFetchPrices">
<property name="text">
<string>Fetch prices</string>
</property>
</widget>
</item>
<item row="11" column="0" colspan="2">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Connect to git.hush.is on startup to check for updates</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QCheckBox" name="chkCustomFees">
<property name="text">
<string>Allow custom fees</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Shielded transactions are saved locally and shown in the transactions tab. If you uncheck this, shielded transactions will not appear in the transactions tab.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="16" column="0">
<widget class="QLabel" name="label_201">
<property name="sizePolicy">
@ -177,6 +358,29 @@
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QCheckBox" name="chkTor">
<property name="text">
<string>Connect via Tor</string>
</property>
</widget>
</item>
<item row="18" column="0">
<widget class="QLabel" name="langlabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Language</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="16" column="1">
<widget class="QComboBox" name="comboBoxCurrency">
<property name="sizePolicy">
@ -402,95 +606,6 @@
</item>
</widget>
</item>
<item row="15" column="1">
<widget class="QComboBox" name="comboBoxTheme">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>default</string>
</property>
</item>
<item>
<property name="text">
<string>blue</string>
</property>
</item>
<item>
<property name="text">
<string>light</string>
</property>
</item>
<item>
<property name="text">
<string>dark</string>
</property>
</item>
<item>
<property name="text">
<string>midnight</string>
</property>
</item>
</widget>
</item>
<item row="14" column="0" colspan="2">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="0">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="7" column="0">
<widget class="QCheckBox" name="chkTor">
<property name="text">
<string>Connect via Tor</string>
</property>
</widget>
</item>
<item row="9" column="0" colspan="2">
<widget class="QCheckBox" name="chkCheckUpdates">
<property name="text">
<string>Check git.hush.is for updates at startup</string>
</property>
</widget>
</item>
<item row="13" column="0" colspan="2">
<widget class="Line" name="line_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="QCheckBox" name="chkSaveTxs">
<property name="text">
<string>Remember shielded transactions</string>
</property>
</widget>
</item>
<item row="6" column="0" colspan="2">
<widget class="QLabel" name="label_7">
<property name="text">
@ -501,78 +616,6 @@
</property>
</widget>
</item>
<item row="4" column="0" colspan="2">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Allow overriding the default fees when sending transactions. Enabling this option may compromise your privacy since fees are transparent. </string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QPushButton" name="btnClearSaved">
<property name="text">
<string>Clear History</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Shielded transactions are saved locally and shown in the transactions tab. If you uncheck this, shielded transactions will not appear in the transactions tab.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QCheckBox" name="chkCustomFees">
<property name="text">
<string>Allow custom fees</string>
</property>
</widget>
</item>
<item row="5" column="0" colspan="2">
<widget class="QCheckBox" name="chkAutoShield">
<property name="text">
<string>Shield change from t-Addresses to your sapling address</string>
</property>
</widget>
</item>
<item row="8" column="0" colspan="2">
<widget class="QLabel" name="lblTor">
<property name="text">
<string>Connect to the Tor network via SOCKS proxy running on 127.0.0.1:9050. Please note that you'll have to install and run the Tor service externally.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="10" column="0" colspan="2">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Connect to git.hush.is on startup to check for updates</string>
</property>
</widget>
</item>
<item row="12" column="0" colspan="2">
<widget class="QLabel" name="label_10">
<property name="text">
<string>Connect to the internet to fetch HUSH prices</string>
</property>
</widget>
</item>
<item row="11" column="0" colspan="2">
<widget class="QCheckBox" name="chkFetchPrices">
<property name="text">
<string>Fetch HUSH prices</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_4">
@ -654,10 +697,10 @@
</rect>
</property>
<property name="text">
<string>Testnet Tx Explorer URL</string>
<string>Onion Tx Explorer URL</string>
</property>
</widget>
<widget class="QLineEdit" name="testnetTxExplorerUrl">
<widget class="QLineEdit" name="onionTxExplorerUrl">
<property name="geometry">
<rect>
<x>9</x>
@ -667,7 +710,7 @@
</rect>
</property>
<property name="text">
<string notr="true">https://explorer.testnet.z.cash/tx/</string>
<string notr="true">http://jlqhwhak65kokg3pdjp3ufy6almf5spnhsfnugtjsc4z7wtapgozxyad.onion/tx/</string>
</property>
</widget>
<widget class="QLabel" name="label_17">
@ -680,10 +723,10 @@
</rect>
</property>
<property name="text">
<string>Testnet Address Explorer URL</string>
<string>Onion Address Explorer URL</string>
</property>
</widget>
<widget class="QLineEdit" name="testnetAddressExplorerUrl">
<widget class="QLineEdit" name="onionAddressExplorerUrl">
<property name="geometry">
<rect>
<x>9</x>
@ -693,11 +736,14 @@
</rect>
</property>
<property name="text">
<string notr="true">https://explorer.testnet.hush.is/address/</string>
<string notr="true">http://jlqhwhak65kokg3pdjp3ufy6almf5spnhsfnugtjsc4z7wtapgozxyad.onion/tx/</string>
</property>
</widget>
</widget>
<widget class="QWidget" name="tab_3">
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<attribute name="title">
<string>Troubleshooting</string>
</attribute>
@ -717,32 +763,19 @@
<widget class="QLabel" name="label_9">
<property name="geometry">
<rect>
<x>9</x>
<y>38</y>
<x>10</x>
<y>10</y>
<width>583</width>
<height>51</height>
</rect>
</property>
<property name="text">
<string>Rescan the blockchain for any missing wallet transactions and to correct your wallet balance. This may take several hours. You need to restart SilentDragon for this to take effect</string>
<string>Rescan the blockchain for any missing wallet transactions and to correct your wallet balance. Click rescan to enter block height to rescan from. This may take several hours depending on submitted block height.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
<widget class="QCheckBox" name="chkRescan">
<property name="geometry">
<rect>
<x>9</x>
<y>9</y>
<width>73</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>Rescan</string>
</property>
</widget>
<widget class="Line" name="line_3">
<property name="geometry">
<rect>
@ -963,10 +996,35 @@
<string>MB</string>
</property>
</widget>
<widget class="QPushButton" name="rescanButton">
<property name="geometry">
<rect>
<x>310</x>
<y>60</y>
<width>281</width>
<height>34</height>
</rect>
</property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="text">
<string>Rescan</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
<property name="default">
<bool>true</bool>
</property>
<property name="flat">
<bool>false</bool>
</property>
</widget>
</widget>
</widget>
</item>
<item>
<item row="1" column="0">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>

127
src/txtablemodel.cpp

@ -1,8 +1,11 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#include "txtablemodel.h"
#include "settings.h"
#include "rpc.h"
#include "guiconstants.h"
extern bool isdragonx;
TxTableModel::TxTableModel(QObject *parent)
: QAbstractTableModel(parent) {
@ -72,7 +75,7 @@ bool TxTableModel::exportToCsv(QString fileName) const {
return true;
}
void TxTableModel::updateAllData() {
void TxTableModel::updateAllData() {
auto newmodeldata = new QList<TransactionItem>();
if (tTrans != nullptr) std::copy( tTrans->begin(), tTrans->end(), std::back_inserter(*newmodeldata));
@ -92,33 +95,63 @@ void TxTableModel::updateAllData() {
layoutChanged();
}
int TxTableModel::rowCount(const QModelIndex&) const
{
QImage TxTableModel::colorizeIcon(QIcon icon, QColor color) const{
QImage img(icon.pixmap(16, 16).toImage());
img = img.convertToFormat(QImage::Format_ARGB32);
for (int x = img.width(); x--; )
{
for (int y = img.height(); y--; )
{
const QRgb rgb = img.pixel(x, y);
img.setPixel(x, y, qRgba(color.red(), color.green(), color.blue(), qAlpha(rgb)));
}
}
return img;
}
int TxTableModel::rowCount(const QModelIndex&) const
{
if (modeldata == nullptr) return 0;
return modeldata->size();
}
}
int TxTableModel::columnCount(const QModelIndex&) const
{
int TxTableModel::columnCount(const QModelIndex&) const
{
return headers.size();
}
}
QVariant TxTableModel::data(const QModelIndex &index, int role) const
{
// Align column 4 (amount) right
// Get current theme name
QString theme_name = Settings::getInstance()->get_theme_name();
QBrush b;
QColor color;
if (theme_name == "dark" || theme_name == "midnight") {
color = COLOR_WHITE;
}else if(theme_name == "dragonx"){
color = COLOR_DRAGONX_TEXT;
}else{
color = COLOR_BLACK;
}
// Align column 4 (amount) right
if (role == Qt::TextAlignmentRole && index.column() == 3) return QVariant(Qt::AlignRight | Qt::AlignVCenter);
if (role == Qt::ForegroundRole) {
if (modeldata->at(index.row()).confirmations == 0) {
QBrush b;
b.setColor(Qt::red);
b.setColor(COLOR_UNCONFIRMED_TX);
return b;
}
if (theme_name == "dark" || theme_name == "midnight") {
b.setColor(color);
return b;
}else{
b.setColor(color);
return b;
}
// Else, just return the default brush
QBrush b;
b.setColor(Qt::black);
return b;
}
@ -161,18 +194,62 @@ void TxTableModel::updateAllData() {
}
if (role == Qt::DecorationRole && index.column() == 0) {
//qDebug() << "TX Type = " + dat.type;
if (!dat.memo.isEmpty()) {
// If the memo is a Payment URI, then show a payment request icon
if (dat.memo.startsWith("hush:")) {
QIcon icon(":/icons/res/paymentreq.gif");
return QVariant(icon.pixmap(16, 16));
} else {
// Return the info pixmap to indicate memo
QIcon icon = QApplication::style()->standardIcon(QStyle::SP_MessageBoxInformation);
return QVariant(icon.pixmap(16, 16));
if(isdragonx) {
if (dat.memo.startsWith("drgx:")) {
QIcon icon(":/icons/paymentreq.gif");
return QVariant(icon.pixmap(16, 16));
}
} else if (dat.memo.startsWith("hush:")) {
QIcon icon(":/icons/paymentreq.gif");
return QVariant(icon.pixmap(16, 16));
}
// Return the info pixmap to indicate memo
QIcon icon = QApplication::style()->standardIcon(QStyle::SP_MessageBoxInformation);
return QVariant(icon.pixmap(16, 16));
} else {
// Empty pixmap to make it align
// TODO: Add appropriate icons for types of txs instead of empty pixmap
//qDebug() << "Type = " +getType(index.row()) + "Address = " +getAddr(index.row()) + "From Address = " +getFromAddr(index.row());
// Send
if(this->getType(index.row()) == "send"){
QImage image = colorizeIcon(QIcon(":/icons/tx_output.png"), color);
QIcon icon;
icon.addPixmap(QPixmap::fromImage(image));
return QVariant(icon.pixmap(16, 16));
}
// Send T->Z - Untested
if(this->getType(index.row()) == "send" && !this->getFromAddr(index.row()).startsWith("zs1")){
QImage image = colorizeIcon(QIcon(":/icons/lock_closed.png"), color);
QIcon icon;
icon.addPixmap(QPixmap::fromImage(image));
return QVariant(icon.pixmap(16, 16));
}
// Receive
if(this->getType(index.row()) == "receive"){
QImage image = colorizeIcon(QIcon(":/icons/tx_input.png"), color);
QIcon icon;
icon.addPixmap(QPixmap::fromImage(image));
return QVariant(icon.pixmap(16, 16));
}
// Mined
if(this->getType(index.row()) == "generate"){
QImage image = colorizeIcon(QIcon(":/icons/tx_mined.png"), color);
QIcon icon;
icon.addPixmap(QPixmap::fromImage(image));
return QVariant(icon.pixmap(16, 16));
}
// Empty pixmap to make it align (old behavior)
QPixmap p(16, 16);
p.fill(Qt::white);
return QVariant(p);
@ -216,6 +293,10 @@ QString TxTableModel::getAddr(int row) const {
return modeldata->at(row).address.trimmed();
}
QString TxTableModel::getFromAddr(int row) const {
return modeldata->at(row).fromAddr.trimmed();
}
qint64 TxTableModel::getDate(int row) const {
return modeldata->at(row).datetime;
}

8
src/txtablemodel.h

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#ifndef STRINGSTABLEMODEL_H
#define STRINGSTABLEMODEL_H
@ -10,16 +10,17 @@ struct TransactionItem;
class TxTableModel: public QAbstractTableModel
{
public:
TxTableModel(QObject* parent);
TxTableModel(QObject* parent);
~TxTableModel();
void addTData (const QList<TransactionItem>& data);
void addZSentData(const QList<TransactionItem>& data);
void addZRecvData(const QList<TransactionItem>& data);
void addZRecvData(const QList<TransactionItem>& data);
QString getTxId(int row) const;
QString getMemo(int row) const;
QString getAddr(int row) const;
QString getFromAddr(int row) const;
qint64 getDate(int row) const;
QString getType(int row) const;
qint64 getConfirmations(int row) const;
@ -31,6 +32,7 @@ public:
int columnCount(const QModelIndex &parent) const;
QVariant data(const QModelIndex &index, int role) const;
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
QImage colorizeIcon(const QIcon icon, const QColor color) const;
private:
void updateAllData();

2
src/validateaddress.cpp

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#include "validateaddress.h"

2
src/validateaddress.h

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#ifndef VALIDATEADDRESS_H
#define VALIDATEADDRESS_H

2
src/version.h

@ -1 +1 @@
#define APP_VERSION "1.3.0"
#define APP_VERSION "1.3.1"

2
src/viewalladdresses.cpp

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#include "viewalladdresses.h"
#include "settings.h"

2
src/viewalladdresses.h

@ -1,4 +1,4 @@
// Copyright 2019-2021 The Hush developers
// Copyright 2019-2022 The Hush developers
// Released under the GPLv3
#ifndef VIEWALLADDRESSES_H
#define VIEWALLADDRESSES_H

910
src/websockets.cpp

@ -1,910 +0,0 @@
// Copyright 2019-2021 The Hush developers
// Released under the GPLv3
#include "websockets.h"
#include "rpc.h"
#include "settings.h"
#include "ui_mobileappconnector.h"
#include "version.h"
// Wrap the sendTextMessage to check if the connection is valid and that the parent WebServer didn't close this connection
// for some reason.
void ClientWebSocket::sendTextMessage(QString m) {
if (client) {
if (server && !server->isValidConnection(client)) {
return;
}
if (client->isValid())
client->sendTextMessage(m);
}
}
WSServer::WSServer(quint16 port, bool debug, QObject *parent) :
QObject(parent),
m_pWebSocketServer(new QWebSocketServer(QStringLiteral("Direct Connection Server"),
QWebSocketServer::NonSecureMode, this)),
m_debug(debug)
{
m_mainWindow = (MainWindow *) parent;
if (m_pWebSocketServer->listen(QHostAddress::AnyIPv4, port)) {
if (m_debug)
qDebug() << "SD WebSocketServer listening on port" << port;
connect(m_pWebSocketServer, &QWebSocketServer::newConnection,
this, &WSServer::onNewConnection);
connect(m_pWebSocketServer, &QWebSocketServer::closed, this, &WSServer::closed);
}
}
WSServer::~WSServer()
{
qDebug() << "Closing WebsocketServer";
m_pWebSocketServer->close();
qDeleteAll(m_clients.begin(), m_clients.end());
qDebug() << "Deleted all websocket clients";
}
void WSServer::onNewConnection()
{
qDebug() << "WebsocketServer: new connection";
QWebSocket *pSocket = m_pWebSocketServer->nextPendingConnection();
connect(pSocket, &QWebSocket::textMessageReceived, this, &WSServer::processTextMessage);
connect(pSocket, &QWebSocket::binaryMessageReceived, this, &WSServer::processBinaryMessage);
connect(pSocket, &QWebSocket::disconnected, this, &WSServer::socketDisconnected);
m_clients << pSocket;
}
void WSServer::processTextMessage(QString message)
{
QWebSocket *pClient = qobject_cast<QWebSocket *>(sender());
if (m_debug)
qDebug() << "Message received:" << message;
if (pClient) {
std::shared_ptr<ClientWebSocket> client = std::make_shared<ClientWebSocket>(pClient, this);
AppDataServer::getInstance()->processMessage(message, m_mainWindow, client, AppConnectionType::DIRECT);
}
}
void WSServer::processBinaryMessage(QByteArray message)
{
//QWebSocket *pClient = qobject_cast<QWebSocket *>(sender());
if (m_debug)
qDebug() << "Binary Message received:" << message;
}
void WSServer::socketDisconnected()
{
QWebSocket *pClient = qobject_cast<QWebSocket *>(sender());
if (m_debug)
qDebug() << "socketDisconnected:" << pClient;
if (pClient) {
m_clients.removeAll(pClient);
pClient->deleteLater();
}
}
//===============================
// WormholeClient
//===============================
WormholeClient::WormholeClient(MainWindow* p, QString wormholeCode) {
this->parent = p;
this->code = wormholeCode;
connect();
qDebug() << "New wormhole client after connect()";
}
WormholeClient::~WormholeClient() {
qDebug() << "WormholeClient destructor";
shuttingDown = true;
if (m_webSocket && m_webSocket->isValid()) {
qDebug() << "Wormhole closing!";
m_webSocket->close();
}
if (timer) {
qDebug() << "Wormhole timer stopping";
timer->stop();
}
qDebug() << "Wormhole client destroyed";
delete timer;
qDebug() << "Wormhole timer deleted";
}
void ws_error() {
qDebug() << "websocket error!";
}
void WormholeClient::sslerrors(const QList<QSslError> &)
{
//TODO: give more details. We only get semi-useful data and some errors
// should be ignored
qDebug() << "SSL errors occurred, lulz!";
//TODO: don't do this in prod
//m_webSocket->ignoreSslErrors();
}
void WormholeClient::connect() {
qDebug() << "Wormhole::connect";
delete m_webSocket;
m_webSocket = new QWebSocket();
QUrl wormhole = QUrl("wss://wormhole.hush.is:443");
if (m_webSocket) {
QObject::connect(m_webSocket, &QWebSocket::connected, this, &WormholeClient::onConnected);
QObject::connect(m_webSocket, &QWebSocket::disconnected, this, &WormholeClient::closed);
QObject::connect(m_webSocket, QOverload<const QList<QSslError>&>::of(&QWebSocket::sslErrors), this, &WormholeClient::sslerrors);
qDebug() << "Opening connection to the SilentDragonWormhole";
m_webSocket->open(wormhole);
qDebug() << "Opened connection to " << wormhole;
//TODO: use env var to over-ride
//m_webSocket->open(QUrl("ws://127.0.0.1:7070"));
} else {
qDebug() << "Invalid websocket object!";
}
}
void WormholeClient::retryConnect() {
QTimer::singleShot(5 * 1000 * pow(2, retryCount), [=]() {
if (retryCount < 10) {
qDebug() << "Retrying websocket connection, count=" << this->retryCount;
this->retryCount++;
connect();
} else {
qDebug() << "Retry count exceeded, will not attempt retry any more";
}
});
}
/*
void WormholeClient::retryConnect() {
int max_retries = 10;
qDebug() << "Websocket retryConnect, retryCount=" << retryCount;
if (retryCount>=0 && retryCount<=max_retries) {
QTimer::singleShot(5 * 1000 * pow(2, retryCount), [=]() {
if (retryCount < max_retries) {
this->retryCount++;
qDebug() << "Retrying websocket connection, retrycount=" << this->retryCount;
connect();
} else {
qDebug() << "Retry count of " << retryCount << " exceeded, will not attempt retry any more";
}
});
} else {
qDebug() << "Invalid retryCount=" << retryCount << " detected!";
}
}
*/
// Called when the websocket is closed. If this was closed without our explicitly closing it,
// then we need to try and reconnect
void WormholeClient::closed() {
qDebug() << "Closing websocket";
if (!shuttingDown) {
retryConnect();
}
}
void WormholeClient::onConnected()
{
retryCount = 0;
qDebug() << "WebSocket connected, retryCount=" << retryCount;
QObject::connect(m_webSocket, &QWebSocket::textMessageReceived, this, &WormholeClient::onTextMessageReceived);
auto payload = QJsonDocument( QJsonObject { {"register", code} }).toJson();
qDebug() << "Sending register";
if (m_webSocket && m_webSocket->isValid()) {
m_webSocket->sendTextMessage(payload);
qDebug() << "Sent registration message with code=" << code;
// On connected, we'll also create a timer to ping it every 4 minutes, since the websocket
// will timeout after 5 minutes
timer = new QTimer(parent);
qDebug() << "Created QTimer";
QObject::connect(timer, &QTimer::timeout, [=]() {
qDebug() << "Timer timeout!";
try {
if (!shuttingDown && m_webSocket && m_webSocket->isValid()) {
auto payload = QJsonDocument(QJsonObject { {"ping", "ping"} }).toJson();
qint64 bytes = m_webSocket->sendTextMessage(payload);
qDebug() << "Sent ping, " << bytes << " bytes";
}
} catch (...) {
qDebug() << "Websocket is invalid, no ping sent!";
}
});
unsigned int interval = 1*60*1000; // 1 minute
timer->start(interval);
qDebug() << "Started timer with interval=" << interval;
} else {
qDebug() << "Invalid websocket object onConnected!";
}
}
void WormholeClient::onTextMessageReceived(QString message)
{
qDebug() << "Websocket received msg: " << message;
AppDataServer::getInstance()->processMessage(message, parent, std::make_shared<ClientWebSocket>(m_webSocket), AppConnectionType::INTERNET);
}
// ==============================
// AppDataServer
// ==============================
AppDataServer* AppDataServer::instance = nullptr;
QString AppDataServer::getWormholeCode(QString secretHex) {
qDebug() << "AppDataServer::getWormholeCode";
unsigned char* secret = new unsigned char[crypto_secretbox_KEYBYTES];
sodium_hex2bin(secret, crypto_secretbox_KEYBYTES, secretHex.toStdString().c_str(), crypto_secretbox_KEYBYTES*2,
NULL, NULL, NULL);
unsigned char* out1 = new unsigned char[crypto_hash_sha256_BYTES];
crypto_hash_sha256(out1, secret, crypto_secretbox_KEYBYTES);
unsigned char* out2 = new unsigned char[crypto_hash_sha256_BYTES];
crypto_hash_sha256(out2, out1, crypto_hash_sha256_BYTES);
char* wmcode = new char[crypto_hash_sha256_BYTES*2 + 1];
sodium_bin2hex(wmcode, crypto_hash_sha256_BYTES*2 + 1, out2, crypto_hash_sha256_BYTES);
QString wmcodehex(wmcode);
delete[] wmcode;
delete[] out2;
delete[] out1;
delete[] secret;
qDebug() << "Created wormhole secretHex=" << wmcodehex;
return wmcodehex;
}
QString AppDataServer::getSecretHex() {
QSettings s;
return s.value("mobileapp/secret", "").toString();
}
void AppDataServer::saveNewSecret(QString secretHex) {
QSettings().setValue("mobileapp/secret", secretHex);
if (secretHex.isEmpty())
setAllowInternetConnection(false);
}
bool AppDataServer::getAllowInternetConnection() {
return QSettings().value("mobileapp/allowinternet", false).toBool();
}
void AppDataServer::setAllowInternetConnection(bool allow) {
QSettings().setValue("mobileapp/allowinternet", allow);
}
void AppDataServer::saveLastConnectedOver(AppConnectionType type) {
QSettings().setValue("mobileapp/lastconnectedover", type);
}
AppConnectionType AppDataServer::getLastConnectionType() {
return (AppConnectionType) QSettings().value("mobileapp/lastconnectedover", AppConnectionType::DIRECT).toInt();
}
void AppDataServer::saveLastSeenTime() {
QSettings().setValue("mobileapp/lastseentime", QDateTime::currentSecsSinceEpoch());
}
QDateTime AppDataServer::getLastSeenTime() {
return QDateTime::fromSecsSinceEpoch(QSettings().value("mobileapp/lastseentime", 0).toLongLong());
}
void AppDataServer::setConnectedName(QString name) {
QSettings().setValue("mobileapp/connectedname", name);
}
QString AppDataServer::getConnectedName() {
return QSettings().value("mobileapp/connectedname", "").toString();
}
bool AppDataServer::isAppConnected() {
return !getConnectedName().isEmpty() &&
getLastSeenTime().daysTo(QDateTime::currentDateTime()) < 14;
}
void AppDataServer::connectAppDialog(MainWindow* parent) {
QDialog d(parent);
ui = new Ui_MobileAppConnector();
ui->setupUi(&d);
Settings::saveRestore(&d);
qDebug() << "connectAppDialog";
updateUIWithNewQRCode(parent);
updateConnectedUI();
QObject::connect(ui->btnDisconnect, &QPushButton::clicked, [=] () {
qDebug() << "Disconnecting";
QSettings().setValue("mobileapp/connectedname", "");
saveNewSecret("");
updateConnectedUI();
});
QObject::connect(ui->txtConnStr, &QLineEdit::cursorPositionChanged, [=](int, int) {
ui->txtConnStr->selectAll();
});
QObject::connect(ui->chkInternetConn, &QCheckBox::stateChanged, [=] (int state) {
if (state == Qt::Checked) {
}
qDebug() << "Updating QR";
updateUIWithNewQRCode(parent);
});
// If we're not listening for the app, then start the websockets
if (!parent->isWebsocketListening()) {
qDebug() << "websocket not listening";
QString wormholecode = "";
if (getAllowInternetConnection()) {
wormholecode = AppDataServer::getInstance()->getWormholeCode(AppDataServer::getInstance()->getSecretHex());
qDebug() << "Generated wormholecode=" << wormholecode;
}
parent->createWebsocket(wormholecode);
} else {
qDebug() << "no websocket not listening";
}
d.exec();
// If there is nothing connected when the dialog exits, then shutdown the websockets
if (!isAppConnected()) {
qDebug() << "no app connected, stopping websockets";
parent->stopWebsocket();
}
// Cleanup
tempSecret = "";
delete tempWormholeClient;
tempWormholeClient = nullptr;
delete ui;
ui = nullptr;
qDebug() << "Destroyed tempWormholeClient and ui";
}
void AppDataServer::updateUIWithNewQRCode(MainWindow* mainwindow) {
// Get the address of the localhost
auto addrList = QNetworkInterface::allAddresses();
// Find a suitable address
QString ipv4Addr;
for (auto addr : addrList) {
if (addr.isLoopback() || addr.protocol() == QAbstractSocket::IPv6Protocol)
continue;
ipv4Addr = addr.toString();
break;
}
if (ipv4Addr.isEmpty())
return;
QString uri = "ws://" + ipv4Addr + ":8777";
qDebug() << "Websocket URI: " << uri;
// Get a new secret
unsigned char* secretBin = new unsigned char[crypto_secretbox_KEYBYTES];
randombytes_buf(secretBin, crypto_secretbox_KEYBYTES);
char* secretHex = new char[crypto_secretbox_KEYBYTES*2 + 1];
sodium_bin2hex(secretHex, crypto_secretbox_KEYBYTES*2+1, secretBin, crypto_secretbox_KEYBYTES);
QString secretStr(secretHex);
QString codeStr = uri + "," + secretStr;
if (ui->chkInternetConn->isChecked()) {
codeStr = codeStr + ",1";
}
registerNewTempSecret(secretStr, ui->chkInternetConn->isChecked(), mainwindow);
ui->qrcode->setQrcodeString(codeStr);
ui->txtConnStr->setText(codeStr);
qDebug() << "New QR="<<codeStr;
}
void AppDataServer::registerNewTempSecret(QString tmpSecretHex, bool allowInternet, MainWindow* main) {
qDebug() << "Registering new tempSecret, allowInternet=" << allowInternet;
tempSecret = tmpSecretHex;
delete tempWormholeClient;
tempWormholeClient = nullptr;
if (allowInternet) {
tempWormholeClient = new WormholeClient(main, getWormholeCode(tempSecret));
qDebug() << "Created new wormhole client";
}
}
QString AppDataServer::connDesc(AppConnectionType t) {
if (t == AppConnectionType::DIRECT) {
return QObject::tr("Connected directly");
}
else {
return QObject::tr("Connected over the internet via SilentDragon wormhole service");
}
}
void AppDataServer::updateConnectedUI() {
if (ui == nullptr)
return;
auto remoteName = getConnectedName();
ui->lblRemoteName->setText(remoteName.isEmpty() ? "(Not connected to any device)" : remoteName);
ui->lblLastSeen->setText(remoteName.isEmpty() ? "" : getLastSeenTime().toString(Qt::SystemLocaleLongDate));
ui->lblConnectionType->setText(remoteName.isEmpty() ? "" : connDesc(getLastConnectionType()));
ui->btnDisconnect->setEnabled(!remoteName.isEmpty());
}
QString AppDataServer::getNonceHex(NonceType nt) {
QSettings s;
QString hex;
if (nt == NonceType::LOCAL) {
// The default local nonce starts from 1, to always keep it odd
auto defaultLocalNonce = "01" + QString("00").repeated(crypto_secretbox_NONCEBYTES-1);
hex = s.value("mobileapp/localnoncehex", defaultLocalNonce).toString();
}
else {
hex = s.value("mobileapp/remotenoncehex", QString("00").repeated(crypto_secretbox_NONCEBYTES)).toString();
}
return hex;
}
void AppDataServer::saveNonceHex(NonceType nt, QString noncehex) {
QSettings s;
assert(noncehex.length() == crypto_secretbox_NONCEBYTES * 2);
if (nt == NonceType::LOCAL) {
s.setValue("mobileapp/localnoncehex", noncehex);
}
else {
s.setValue("mobileapp/remotenoncehex", noncehex);
}
s.sync();
}
// Encrypt an outgoing message with the stored secret key.
QString AppDataServer::encryptOutgoing(QString msg) {
// This padding size is ~50% larger than current largest
// message size and makes all current message types
// indistinguishable. If some new message type can
// be larger than this, the padding should probably be increased
int padding = 16*1024;
qDebug() << "Encrypt msg(pad="<<padding<<") prepad len=" << msg.length();
if (msg.length() % padding > 0) {
msg = msg + QString(" ").repeated(padding - (msg.length() % padding));
}
qDebug() << "Encrypt msg postpad len=" << msg.length();
QString localNonceHex = getNonceHex(NonceType::LOCAL);
unsigned char* noncebin = new unsigned char[crypto_secretbox_NONCEBYTES];
sodium_hex2bin(noncebin, crypto_secretbox_NONCEBYTES, localNonceHex.toStdString().c_str(), localNonceHex.length(),
NULL, NULL, NULL);
// Increment the nonce +2 and save
sodium_increment(noncebin, crypto_secretbox_NONCEBYTES);
sodium_increment(noncebin, crypto_secretbox_NONCEBYTES);
char* newLocalNonce = new char[crypto_secretbox_NONCEBYTES*2 + 1];
sodium_memzero(newLocalNonce, crypto_secretbox_NONCEBYTES*2 + 1);
sodium_bin2hex(newLocalNonce, crypto_secretbox_NONCEBYTES*2+1, noncebin, crypto_box_NONCEBYTES);
saveNonceHex(NonceType::LOCAL, QString(newLocalNonce));
unsigned char* secret = new unsigned char[crypto_secretbox_KEYBYTES];
sodium_hex2bin(secret, crypto_secretbox_KEYBYTES, getSecretHex().toStdString().c_str(), crypto_secretbox_KEYBYTES*2,
NULL, NULL, NULL);
int msgSize = strlen(msg.toStdString().c_str());
unsigned char* encrpyted = new unsigned char[ msgSize + crypto_secretbox_MACBYTES];
crypto_secretbox_easy(encrpyted, (const unsigned char *)msg.toStdString().c_str(), msgSize, noncebin, secret);
int encryptedHexSize = (msgSize + crypto_secretbox_MACBYTES) * 2 + 1;
char * encryptedHex = new char[encryptedHexSize];
sodium_memzero(encryptedHex, encryptedHexSize);
sodium_bin2hex(encryptedHex, encryptedHexSize, encrpyted, msgSize + crypto_secretbox_MACBYTES);
auto json = QJsonDocument(QJsonObject{
{"nonce", QString(newLocalNonce)},
{"payload", QString(encryptedHex)},
{"to", getWormholeCode(getSecretHex())}
});
delete[] noncebin;
delete[] newLocalNonce;
delete[] secret;
delete[] encrpyted;
delete[] encryptedHex;
return json.toJson();
}
/**
Attempt to decrypt a message. If the decryption fails, it returns the string "error", the decrypted message otherwise.
It will use the given secret to attempt decryption. In addition, it will enforce that the nonce is greater than the last seen nonce,
unless the skipNonceCheck = true, which is used when attempting decrytption with a temp secret key.
*/
QString AppDataServer::decryptMessage(QJsonDocument msg, QString secretHex, QString lastRemoteNonceHex) {
qDebug() << "Decrypting message";
// Decrypt and then process
QString noncehex = msg.object().value("nonce").toString();
QString encryptedhex = msg.object().value("payload").toString();
// Enforce limits on the size of the message
int MAX_LENGTH = 2*50*1024; // 50kb
if (noncehex.length() > ((int)crypto_secretbox_NONCEBYTES * 2) || encryptedhex.length() > MAX_LENGTH) {
qDebug() << "Encrypted hex size of " << encryptedhex.length() << " bytes is too large!";
return "error";
}
// Check to make sure that the nonce is greater than the last known remote nonce
unsigned char* lastRemoteBin = new unsigned char[crypto_secretbox_NONCEBYTES];
sodium_hex2bin(lastRemoteBin, crypto_secretbox_NONCEBYTES, lastRemoteNonceHex.toStdString().c_str(), lastRemoteNonceHex.length(),
NULL, NULL, NULL);
unsigned char* noncebin = new unsigned char[crypto_secretbox_NONCEBYTES];
sodium_hex2bin(noncebin, crypto_secretbox_NONCEBYTES, noncehex.toStdString().c_str(), noncehex.length(),
NULL, NULL, NULL);
assert(crypto_secretbox_KEYBYTES == crypto_hash_sha256_BYTES);
if (sodium_compare(lastRemoteBin, noncebin, crypto_secretbox_NONCEBYTES) != -1) {
// Refuse to accept a lower nonce, return an error
delete[] lastRemoteBin;
delete[] noncebin;
qDebug() << "Repeated nonce detected, potential attack or misconfiguration! Bailing out.";
return "error";
}
unsigned char* secret = new unsigned char[crypto_secretbox_KEYBYTES];
sodium_hex2bin(secret, crypto_secretbox_KEYBYTES, secretHex.toStdString().c_str(), crypto_secretbox_KEYBYTES*2,
NULL, NULL, NULL);
unsigned char* encrypted = new unsigned char[encryptedhex.length() / 2];
sodium_hex2bin(encrypted, encryptedhex.length() / 2, encryptedhex.toStdString().c_str(), encryptedhex.length(),
NULL, NULL, NULL);
int decryptedLen = encryptedhex.length() / 2 - crypto_secretbox_MACBYTES;
unsigned char* decrypted = new unsigned char[decryptedLen];
int result = crypto_secretbox_open_easy(decrypted, encrypted, encryptedhex.length() / 2, noncebin, secret);
QString payload;
if (result == -1) {
payload = "error";
} else {
// Update the last seen remote hex
saveNonceHex(NonceType::REMOTE, noncehex);
saveLastSeenTime();
char* decryptedStr = new char[decryptedLen + 1];
sodium_memzero(decryptedStr, decryptedLen + 1);
memcpy(decryptedStr, decrypted, decryptedLen);
payload = QString(decryptedStr);
delete[] decryptedStr;
}
delete[] secret;
delete[] lastRemoteBin;
delete[] noncebin;
delete[] encrypted;
delete[] decrypted;
qDebug() << "Returning decrypted payload="<<payload;
return payload;
}
// Process an incoming text message. The message has to be encrypted with the secret key (or the temporary secret key)
void AppDataServer::processMessage(QString message, MainWindow* mainWindow, std::shared_ptr<ClientWebSocket> pClient, AppConnectionType connType) {
qDebug() << "processMessage message";
//qDebug() << "processMessage message=" << message; // this can log sensitive info
auto replyWithError = [=]() {
auto r = QJsonDocument(QJsonObject{
{"error", "Encryption error"},
{"to", getWormholeCode(getSecretHex())}
}).toJson();
pClient->sendTextMessage(r);
return;
};
// First, extract the command from the message
auto msg = QJsonDocument::fromJson(message.toUtf8());
// Check if we got an error from the websocket
if (msg.object().contains("error")) {
qDebug() << "Error:" << msg.toJson();
return;
}
// If the message is a ping, just ignore it
if (msg.object().contains("ping")) {
return;
}
// Then, check if the message is encrpted
if (!msg.object().contains("nonce")) {
replyWithError();
return;
}
auto decrypted = decryptMessage(msg, getSecretHex(), getNonceHex(NonceType::REMOTE));
// If the decryption failed, maybe this is a new connection, so see if the dialog is open and a
// temp secret is in place
if (decrypted == "error") {
// If the dialog is open, then there might be a temporary, new secret key. Attempt to decrypt
// with that.
if (!tempSecret.isEmpty()) {
// Since this is a temp secret, the last seen nonce will be "0", so basically we'll accept any nonce
QString zeroNonce = QString("00").repeated(crypto_secretbox_NONCEBYTES);
decrypted = decryptMessage(msg, tempSecret, zeroNonce);
if (decrypted == "error") {
// Oh, well. Just return an error
replyWithError();
return;
}
else {
// This is a new connection. So, update the the secret. Note the last seen remote nonce has already been updated by
// decryptMessage()
saveNewSecret(tempSecret);
setAllowInternetConnection(tempWormholeClient != nullptr);
// Swap out the wormhole connection
mainWindow->replaceWormholeClient(tempWormholeClient);
tempWormholeClient = nullptr;
saveLastConnectedOver(connType);
processDecryptedMessage(decrypted, mainWindow, pClient);
// If the Connection UI is showing, we have to update the UI as well
if (ui != nullptr) {
// Update the connected phone information
updateConnectedUI();
// Update with a new QR Code for safety, so this secret isn't used by anyone else
updateUIWithNewQRCode(mainWindow);
}
return;
}
}
else {
replyWithError();
return;
}
} else {
saveLastConnectedOver(connType);
processDecryptedMessage(decrypted, mainWindow, pClient);
return;
}
}
// Decrypted method will be executed here.
void AppDataServer::processDecryptedMessage(QString message, MainWindow* mainWindow, std::shared_ptr<ClientWebSocket> pClient) {
//qDebug() << "processDecryptedMessage message=" << message;
// First, extract the command from the message
auto msg = QJsonDocument::fromJson(message.toUtf8());
if (!msg.object().contains("command")) {
auto r = QJsonDocument(QJsonObject{
{"errorCode", -1},
{"errorMessage", "Unknown JSON format"}
}).toJson();
pClient->sendTextMessage(encryptOutgoing(r));
return;
}
if (msg.object()["command"] == "getInfo") {
processGetInfo(msg.object(), mainWindow, pClient);
}
else if (msg.object()["command"] == "getTransactions") {
processGetTransactions(mainWindow, pClient);
}
else if (msg.object()["command"] == "sendTx") {
processSendTx(msg.object()["tx"].toObject(), mainWindow, pClient);
}
else {
auto r = QJsonDocument(QJsonObject{
{"errorCode", -1},
{"errorMessage", "Command not found:" + msg.object()["command"].toString()}
}).toJson();
pClient->sendTextMessage(encryptOutgoing(r));
}
}
// "sendTx" command. This method will actually send money, so be careful with everything
void AppDataServer::processSendTx(QJsonObject sendTx, MainWindow* mainwindow, std::shared_ptr<ClientWebSocket> pClient) {
qDebug() << "processSendTx with to=" << sendTx["to"].toString();
auto error = [=](QString reason) {
auto r = QJsonDocument(QJsonObject{
{"errorCode", -1},
{"errorMessage", "Couldn't send Tx:" + reason}
}).toJson();
pClient->sendTextMessage(encryptOutgoing(r));
return;
};
// Refuse to send if the node is still syncing
if (Settings::getInstance()->isSyncing()) {
error(QObject::tr("Node is still syncing."));
return;
}
// Create a Tx Object
Tx tx;
tx.fee = Settings::getMinerFee();
// Find a from address that has at least the sending amout
double amt = sendTx["amount"].toString().toDouble();
auto allBalances = mainwindow->getRPC()->getAllBalances();
QList<QPair<QString, double>> bals;
for (auto i : allBalances->keys()) {
// Filter out balances that don't have the requisite amount
// TODO: should this be amt+tx.fee?
if (allBalances->value(i) < amt)
continue;
bals.append(QPair<QString, double>(i, allBalances->value(i)));
}
if (bals.isEmpty()) {
error(QObject::tr("No addresses with enough balance to spend! Try sweeping funds into one address"));
return;
}
std::sort(bals.begin(), bals.end(), [=](const QPair<QString, double>a, const QPair<QString, double> b) -> bool {
// Sort z addresses first
return a.first > b.first;
});
tx.fromAddr = bals[0].first;
tx.toAddrs = { ToFields{ sendTx["to"].toString(), amt, sendTx["memo"].toString(), sendTx["memo"].toString().toUtf8().toHex()} };
// TODO: Respect the autoshield change setting
QString validation = mainwindow->doSendTxValidations(tx);
if (!validation.isEmpty()) {
error(validation);
return;
}
QJsonArray params;
mainwindow->getRPC()->fillTxJsonParams(params, tx);
//std::cout << std::setw(2) << params << std::endl;
// And send the Tx
mainwindow->getRPC()->executeTransaction(tx,
[=] (QString) {},
// Submitted Tx successfully
[=] (QString, QString txid) {
auto r = QJsonDocument(QJsonObject{
{"version", 1.0},
{"command", "sendTxSubmitted"},
{"txid", txid}
}).toJson();
pClient->sendTextMessage(encryptOutgoing(r));
},
// Errored while submitting Tx
[=] (QString, QString errStr) {
auto r = QJsonDocument(QJsonObject{
{"version", 1.0},
{"command", "sendTxFailed"},
{"err", errStr}
}).toJson();
pClient->sendTextMessage(encryptOutgoing(r));
}
);
auto r = QJsonDocument(QJsonObject{
{"version", 1.0},
{"command", "sendTx"},
{"result", "success"}
}).toJson();
pClient->sendTextMessage(encryptOutgoing(r));
}
// "getInfo" command
void AppDataServer::processGetInfo(QJsonObject jobj, MainWindow* mainWindow, std::shared_ptr<ClientWebSocket> pClient) {
auto connectedName = jobj["name"].toString();
if (mainWindow == nullptr || mainWindow->getRPC() == nullptr ||
mainWindow->getRPC()->getAllBalances() == nullptr) {
pClient->close(QWebSocketProtocol::CloseCodeNormal, "Not yet ready");
return;
}
// Max spendable safely from a z address and from any address
double maxZSpendable = 0;
double maxSpendable = 0;
for (auto a : mainWindow->getRPC()->getAllBalances()->keys()) {
if (Settings::getInstance()->isSaplingAddress(a)) {
if (mainWindow->getRPC()->getAllBalances()->value(a) > maxZSpendable) {
maxZSpendable = mainWindow->getRPC()->getAllBalances()->value(a);
}
}
if (mainWindow->getRPC()->getAllBalances()->value(a) > maxSpendable) {
maxSpendable = mainWindow->getRPC()->getAllBalances()->value(a);
}
}
setConnectedName(connectedName);
auto r = QJsonDocument(QJsonObject{
{"version", 1.0},
{"command", "getInfo"},
{"saplingAddress", mainWindow->getRPC()->getDefaultSaplingAddress()},
{"tAddress", mainWindow->getRPC()->getDefaultTAddress()},
{"balance", AppDataModel::getInstance()->getTotalBalance()},
{"maxspendable", maxSpendable},
{"maxzspendable", maxZSpendable},
{"tokenName", Settings::getTokenName()},
// changing this will break SDA
{"zecprice", Settings::getInstance()->getHUSHPrice()},
{"serverversion", QString(APP_VERSION)}
}).toJson();
pClient->sendTextMessage(encryptOutgoing(r));
}
void AppDataServer::processGetTransactions(MainWindow* mainWindow, std::shared_ptr<ClientWebSocket> pClient) {
QJsonArray txns;
auto model = mainWindow->getRPC()->getTransactionsModel();
qDebug() << "processGetTransactions";
// Manually add pending ops, so that computing transactions will also show up
auto wtxns = mainWindow->getRPC()->getWatchingTxns();
for (auto opid : wtxns.keys()) {
txns.append(QJsonObject{
{"type", "send"},
{"datetime", QDateTime::currentSecsSinceEpoch()},
{"amount", Settings::getDecimalString(wtxns[opid].tx.toAddrs[0].amount)},
{"txid", ""},
{"address", wtxns[opid].tx.toAddrs[0].addr},
{"memo", wtxns[opid].tx.toAddrs[0].txtMemo},
{"confirmations", 0}
});
}
// Add transactions
for (int i = 0; i < model->rowCount(QModelIndex()) && i < Settings::getMaxMobileAppTxns(); i++) {
txns.append(QJsonObject{
{"type", model->getType(i)},
{"datetime", model->getDate(i)},
{"amount", model->getAmt(i)},
{"txid", model->getTxId(i)},
{"address", model->getAddr(i)},
{"memo", model->getMemo(i)},
{"confirmations", model->getConfirmations(i)}
});
}
auto r = QJsonDocument(QJsonObject{
{"version", 1.0},
{"command", "getTransactions"},
{"transactions", txns}
}).toJson();
pClient->sendTextMessage(encryptOutgoing(r));
}
// ==============================
// AppDataModel
// ==============================
AppDataModel* AppDataModel::instance = nullptr;

175
src/websockets.h

@ -1,175 +0,0 @@
// Copyright 2019-2021 The Hush developers
// Released under the GPLv3
#ifndef WEBSOCKETS_H
#define WEBSOCKETS_H
#include "precompiled.h"
#include "mainwindow.h"
#include "ui_mobileappconnector.h"
QT_FORWARD_DECLARE_CLASS(QWebSocketServer)
QT_FORWARD_DECLARE_CLASS(QWebSocket)
class WSServer;
// We're going to wrap the websocket in this class, because the underlying QWebSocket might get closed
// or deleted while a callback is waiting to get the data back. Therefore, we write a custom "sendTextMessage"
// class that checks all this before sending.
class ClientWebSocket {
public:
ClientWebSocket(QWebSocket* c, WSServer* s = nullptr) { client = c; server = s; }
void sendTextMessage(QString m);
void close(QWebSocketProtocol::CloseCode code, const QString& msg) { client->close(code, msg); }
private:
QWebSocket* client;
WSServer* server;
};
class WSServer : public QObject
{
Q_OBJECT
public:
explicit WSServer(quint16 port, bool debug = false, QObject *parent = nullptr);
bool isValidConnection(QWebSocket* c) { return m_clients.contains(c); }
~WSServer();
Q_SIGNALS:
void closed();
private Q_SLOTS:
void onNewConnection();
void processTextMessage(QString message);
void processBinaryMessage(QByteArray message);
void socketDisconnected();
private:
QWebSocketServer *m_pWebSocketServer;
MainWindow *m_mainWindow;
QList<QWebSocket *> m_clients;
bool m_debug;
};
class WormholeClient : public QObject {
Q_OBJECT
private Q_SLOTS:
void onConnected();
void onTextMessageReceived(QString message);
void closed();
public:
WormholeClient(MainWindow* parent, QString wormholeCode);
~WormholeClient();
void connect();
void retryConnect();
void sslerrors(const QList<QSslError> &);
private:
MainWindow* parent = nullptr;
QWebSocket* m_webSocket = nullptr;
QTimer* timer = nullptr;
QString code;
unsigned int retryCount = 0;
bool shuttingDown = false;
};
enum NonceType {
LOCAL = 1,
REMOTE
};
enum AppConnectionType {
DIRECT = 1,
INTERNET
};
class AppDataServer {
public:
static AppDataServer* getInstance() {
if (instance == nullptr) {
instance = new AppDataServer();
}
return instance;
}
void connectAppDialog(MainWindow* parent);
void updateConnectedUI();
void updateUIWithNewQRCode(MainWindow* mainwindow);
void processSendTx(QJsonObject sendTx, MainWindow* mainwindow, std::shared_ptr<ClientWebSocket> pClient);
void processMessage(QString message, MainWindow* mainWindow, std::shared_ptr<ClientWebSocket> pClient, AppConnectionType connType);
void processGetInfo(QJsonObject jobj, MainWindow* mainWindow, std::shared_ptr<ClientWebSocket> pClient);
void processDecryptedMessage(QString message, MainWindow* mainWindow, std::shared_ptr<ClientWebSocket> pClient);
void processGetTransactions(MainWindow* mainWindow, std::shared_ptr<ClientWebSocket> pClient);
QString decryptMessage(QJsonDocument msg, QString secretHex, QString lastRemoteNonceHex);
QString encryptOutgoing(QString msg);
QString getWormholeCode(QString secretHex);
QString getSecretHex();
void saveNewSecret(QString secretHex);
void registerNewTempSecret(QString tmpSecretHex, bool allowInternet, MainWindow* main);
QString getNonceHex(NonceType nt);
void saveNonceHex(NonceType nt, QString noncehex);
bool getAllowInternetConnection();
void setAllowInternetConnection(bool allow);
void saveLastSeenTime();
QDateTime getLastSeenTime();
void setConnectedName(QString name);
QString getConnectedName();
bool isAppConnected();
QString connDesc(AppConnectionType t);
void saveLastConnectedOver(AppConnectionType type);
AppConnectionType getLastConnectionType();
private:
AppDataServer() = default;
static AppDataServer* instance;
Ui_MobileAppConnector* ui;
QString tempSecret;
WormholeClient* tempWormholeClient = nullptr;
};
class AppDataModel {
public:
static AppDataModel* getInstance() {
if (instance == NULL)
instance = new AppDataModel();
return instance;
}
double getTBalance() { return balTransparent; }
double getZBalance() { return balShielded; }
double getTotalBalance() { return balTotal; }
void setBalances(double transparent, double shielded) {
balTransparent = transparent;
balShielded = shielded;
balTotal = balTransparent + balShielded;
}
private:
AppDataModel() = default; // Private, for singleton
double balTransparent;
double balShielded;
double balTotal;
QString saplingAddress;
static AppDataModel* instance;
};
#endif // WEBSOCKETS_H

170
src/zboard.ui

@ -1,170 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>zboard</class>
<widget class="QDialog" name="zboard">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>588</width>
<height>431</height>
</rect>
</property>
<property name="windowTitle">
<string>Post to z-board.net</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="14" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Total Fee</string>
</property>
</widget>
</item>
<item row="14" column="1">
<widget class="QLabel" name="feeAmount">
<property name="text">
<string notr="true">feeamount</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="12" column="1">
<widget class="QLabel" name="memoSize">
<property name="text">
<string notr="true">0 / 512</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="16" column="0" colspan="2">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
<item row="12" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Memo</string>
</property>
</widget>
</item>
<item row="11" column="0" colspan="2">
<widget class="QLineEdit" name="postAs">
<property name="placeholderText">
<string>(optional)</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Send From</string>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Post As:</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="label_2">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;ZBoard: Fully anonymous and untraceable chat messages based on the ZCash blockchain. &lt;a href=&quot;http://www.z-board.net/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://www.z-board.net/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
<item row="13" column="0" colspan="2">
<widget class="QPlainTextEdit" name="memoTxt"/>
</item>
<item row="6" column="0" colspan="2">
<widget class="QComboBox" name="fromAddr"/>
</item>
<item row="15" column="0">
<widget class="QLabel" name="testnetWarning">
<property name="styleSheet">
<string notr="true">color:red;</string>
</property>
<property name="text">
<string>Warning</string>
</property>
</widget>
</item>
<item row="4" column="0" colspan="2">
<widget class="Line" name="line_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="topicsList"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Posting to Board</string>
</property>
</widget>
</item>
</layout>
</widget>
<tabstops>
<tabstop>fromAddr</tabstop>
<tabstop>postAs</tabstop>
<tabstop>memoTxt</tabstop>
</tabstops>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>zboard</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>zboard</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

24
win-build-sdx.sh

@ -0,0 +1,24 @@
#!/bin/bash
# Copyright 2018-2023 The Hush Developers
# Released under the GPLv3
# This builds a binary called "silentdragonx"
set -e
# TODO: not ideal, hushd.exe should only be looked for on windoze
if [ -e "dragonxd" ]; then
echo "Found dragonxd binary"
elif [ -e "hushd.exe" ]; then
echo "Found hushd.exe binary"
else
echo "dragonxd could not be found!"
echo "Either copy the binary to this dir or make a symlink."
echo "This command will create a symlink to it if this repo is in the same directory as your hush3.git: "
echo "ln -s ../hush3/src/dragonxd"
echo "For windoze you should copy hushd.exe to this directory"
exit 1
fi
# Use a modified QT project file with same build.sh
SDCONF=silentdragonx.pro ./win-build.sh $@

38
win-build.sh

@ -1,24 +1,40 @@
#!/bin/bash
# Copyright 2019-2021 The Hush Developers
# Copyright 2019-2022 The Hush Developers
# Released under the GPLv3
# This script will cross-compile windoze binaries, hopefully!
set -e
UNAME=$(uname)
if [ "$UNAME" == "Linux" ] ; then
JOBS=$(nproc)
elif [ "$UNAME" == "FreeBSD" ] ; then
JOBS=$(nproc)
elif [ "$UNAME" == "Darwin" ] ; then
JOBS=$(sysctl -n hw.ncpu)
else
#if [ "$UNAME" == "Linux" ] ; then
# JOBS=$(nproc)
#elif [ "$UNAME" == "FreeBSD" ] ; then
# JOBS=$(nproc)
#elif [ "$UNAME" == "Darwin" ] ; then
# JOBS=$(sysctl -n hw.ncpu)
#else
JOBS=1
fi
#fi
VERSION=$(cat src/version.h |cut -d\" -f2)
echo "Compiling SilentDragon $VERSION with $JOBS threads..."
CONF=silentdragon.pro
CONF=${SDCONF:-silentdragon.pro}
WALLET="SilentDragon"
if [ "$CONF" == "silentdragonx.pro" ] ; then
WALLET="SilentDragonX"
fi
echo "Compiling $WALLET $VERSION with $JOBS threads..."
if ! command -v qmake &> /dev/null
then
echo "qmake could not be found. Please install QT and try again."
exit 1
fi
if ! command -v make &> /dev/null
then
echo "make could not be found. Please install it and try again."
exit 1
fi
qbuild () {
x86_64-w64-mingw32.static-qmake-qt5 $CONF CONFIG+=debug

Loading…
Cancel
Save