meerk40t 0.9.3001__py2.py3-none-any.whl → 0.9.7010__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (445) hide show
  1. meerk40t/__init__.py +1 -1
  2. meerk40t/balormk/balor_params.py +167 -167
  3. meerk40t/balormk/clone_loader.py +457 -457
  4. meerk40t/balormk/controller.py +1566 -1512
  5. meerk40t/balormk/cylindermod.py +64 -0
  6. meerk40t/balormk/device.py +966 -1959
  7. meerk40t/balormk/driver.py +778 -591
  8. meerk40t/balormk/galvo_commands.py +1195 -0
  9. meerk40t/balormk/gui/balorconfig.py +237 -111
  10. meerk40t/balormk/gui/balorcontroller.py +191 -184
  11. meerk40t/balormk/gui/baloroperationproperties.py +116 -115
  12. meerk40t/balormk/gui/corscene.py +845 -0
  13. meerk40t/balormk/gui/gui.py +179 -147
  14. meerk40t/balormk/livelightjob.py +466 -382
  15. meerk40t/balormk/mock_connection.py +131 -109
  16. meerk40t/balormk/plugin.py +133 -135
  17. meerk40t/balormk/usb_connection.py +306 -301
  18. meerk40t/camera/__init__.py +1 -1
  19. meerk40t/camera/camera.py +514 -397
  20. meerk40t/camera/gui/camerapanel.py +1241 -1095
  21. meerk40t/camera/gui/gui.py +58 -58
  22. meerk40t/camera/plugin.py +441 -399
  23. meerk40t/ch341/__init__.py +27 -27
  24. meerk40t/ch341/ch341device.py +628 -628
  25. meerk40t/ch341/libusb.py +595 -589
  26. meerk40t/ch341/mock.py +171 -171
  27. meerk40t/ch341/windriver.py +157 -157
  28. meerk40t/constants.py +13 -0
  29. meerk40t/core/__init__.py +1 -1
  30. meerk40t/core/bindalias.py +550 -539
  31. meerk40t/core/core.py +47 -47
  32. meerk40t/core/cutcode/cubiccut.py +73 -73
  33. meerk40t/core/cutcode/cutcode.py +315 -312
  34. meerk40t/core/cutcode/cutgroup.py +141 -137
  35. meerk40t/core/cutcode/cutobject.py +192 -185
  36. meerk40t/core/cutcode/dwellcut.py +37 -37
  37. meerk40t/core/cutcode/gotocut.py +29 -29
  38. meerk40t/core/cutcode/homecut.py +29 -29
  39. meerk40t/core/cutcode/inputcut.py +34 -34
  40. meerk40t/core/cutcode/linecut.py +33 -33
  41. meerk40t/core/cutcode/outputcut.py +34 -34
  42. meerk40t/core/cutcode/plotcut.py +335 -335
  43. meerk40t/core/cutcode/quadcut.py +61 -61
  44. meerk40t/core/cutcode/rastercut.py +168 -148
  45. meerk40t/core/cutcode/waitcut.py +34 -34
  46. meerk40t/core/cutplan.py +1843 -1316
  47. meerk40t/core/drivers.py +330 -329
  48. meerk40t/core/elements/align.py +801 -669
  49. meerk40t/core/elements/branches.py +1844 -1507
  50. meerk40t/core/elements/clipboard.py +229 -219
  51. meerk40t/core/elements/element_treeops.py +4561 -2837
  52. meerk40t/core/elements/element_types.py +125 -105
  53. meerk40t/core/elements/elements.py +4329 -3617
  54. meerk40t/core/elements/files.py +117 -64
  55. meerk40t/core/elements/geometry.py +473 -224
  56. meerk40t/core/elements/grid.py +467 -316
  57. meerk40t/core/elements/materials.py +158 -94
  58. meerk40t/core/elements/notes.py +50 -38
  59. meerk40t/core/elements/offset_clpr.py +933 -912
  60. meerk40t/core/elements/offset_mk.py +963 -955
  61. meerk40t/core/elements/penbox.py +339 -267
  62. meerk40t/core/elements/placements.py +300 -83
  63. meerk40t/core/elements/render.py +785 -687
  64. meerk40t/core/elements/shapes.py +2618 -2092
  65. meerk40t/core/elements/trace.py +651 -563
  66. meerk40t/core/elements/tree_commands.py +415 -409
  67. meerk40t/core/elements/undo_redo.py +116 -58
  68. meerk40t/core/elements/wordlist.py +319 -200
  69. meerk40t/core/exceptions.py +9 -9
  70. meerk40t/core/laserjob.py +220 -220
  71. meerk40t/core/logging.py +63 -63
  72. meerk40t/core/node/blobnode.py +83 -86
  73. meerk40t/core/node/bootstrap.py +105 -103
  74. meerk40t/core/node/branch_elems.py +40 -31
  75. meerk40t/core/node/branch_ops.py +45 -38
  76. meerk40t/core/node/branch_regmark.py +48 -41
  77. meerk40t/core/node/cutnode.py +29 -32
  78. meerk40t/core/node/effect_hatch.py +375 -257
  79. meerk40t/core/node/effect_warp.py +398 -0
  80. meerk40t/core/node/effect_wobble.py +441 -309
  81. meerk40t/core/node/elem_ellipse.py +404 -309
  82. meerk40t/core/node/elem_image.py +1082 -801
  83. meerk40t/core/node/elem_line.py +358 -292
  84. meerk40t/core/node/elem_path.py +259 -201
  85. meerk40t/core/node/elem_point.py +129 -102
  86. meerk40t/core/node/elem_polyline.py +310 -246
  87. meerk40t/core/node/elem_rect.py +376 -286
  88. meerk40t/core/node/elem_text.py +445 -418
  89. meerk40t/core/node/filenode.py +59 -40
  90. meerk40t/core/node/groupnode.py +138 -74
  91. meerk40t/core/node/image_processed.py +777 -766
  92. meerk40t/core/node/image_raster.py +156 -113
  93. meerk40t/core/node/layernode.py +31 -31
  94. meerk40t/core/node/mixins.py +135 -107
  95. meerk40t/core/node/node.py +1427 -1304
  96. meerk40t/core/node/nutils.py +117 -114
  97. meerk40t/core/node/op_cut.py +462 -335
  98. meerk40t/core/node/op_dots.py +296 -251
  99. meerk40t/core/node/op_engrave.py +414 -311
  100. meerk40t/core/node/op_image.py +755 -369
  101. meerk40t/core/node/op_raster.py +787 -522
  102. meerk40t/core/node/place_current.py +37 -40
  103. meerk40t/core/node/place_point.py +329 -126
  104. meerk40t/core/node/refnode.py +58 -47
  105. meerk40t/core/node/rootnode.py +225 -219
  106. meerk40t/core/node/util_console.py +48 -48
  107. meerk40t/core/node/util_goto.py +84 -65
  108. meerk40t/core/node/util_home.py +61 -61
  109. meerk40t/core/node/util_input.py +102 -102
  110. meerk40t/core/node/util_output.py +102 -102
  111. meerk40t/core/node/util_wait.py +65 -65
  112. meerk40t/core/parameters.py +709 -707
  113. meerk40t/core/planner.py +875 -785
  114. meerk40t/core/plotplanner.py +656 -652
  115. meerk40t/core/space.py +120 -113
  116. meerk40t/core/spoolers.py +706 -705
  117. meerk40t/core/svg_io.py +1836 -1549
  118. meerk40t/core/treeop.py +534 -445
  119. meerk40t/core/undos.py +278 -124
  120. meerk40t/core/units.py +784 -680
  121. meerk40t/core/view.py +393 -322
  122. meerk40t/core/webhelp.py +62 -62
  123. meerk40t/core/wordlist.py +513 -504
  124. meerk40t/cylinder/cylinder.py +247 -0
  125. meerk40t/cylinder/gui/cylindersettings.py +41 -0
  126. meerk40t/cylinder/gui/gui.py +24 -0
  127. meerk40t/device/__init__.py +1 -1
  128. meerk40t/device/basedevice.py +322 -123
  129. meerk40t/device/devicechoices.py +50 -0
  130. meerk40t/device/dummydevice.py +163 -128
  131. meerk40t/device/gui/defaultactions.py +618 -602
  132. meerk40t/device/gui/effectspanel.py +114 -0
  133. meerk40t/device/gui/formatterpanel.py +253 -290
  134. meerk40t/device/gui/warningpanel.py +337 -260
  135. meerk40t/device/mixins.py +13 -13
  136. meerk40t/dxf/__init__.py +1 -1
  137. meerk40t/dxf/dxf_io.py +766 -554
  138. meerk40t/dxf/plugin.py +47 -35
  139. meerk40t/external_plugins.py +79 -79
  140. meerk40t/external_plugins_build.py +28 -28
  141. meerk40t/extra/cag.py +112 -116
  142. meerk40t/extra/coolant.py +403 -0
  143. meerk40t/extra/encode_detect.py +198 -0
  144. meerk40t/extra/ezd.py +1165 -1165
  145. meerk40t/extra/hershey.py +835 -340
  146. meerk40t/extra/imageactions.py +322 -316
  147. meerk40t/extra/inkscape.py +630 -622
  148. meerk40t/extra/lbrn.py +424 -424
  149. meerk40t/extra/outerworld.py +284 -0
  150. meerk40t/extra/param_functions.py +1542 -1556
  151. meerk40t/extra/potrace.py +257 -253
  152. meerk40t/extra/serial_exchange.py +118 -0
  153. meerk40t/extra/updater.py +602 -453
  154. meerk40t/extra/vectrace.py +147 -146
  155. meerk40t/extra/winsleep.py +83 -83
  156. meerk40t/extra/xcs_reader.py +597 -0
  157. meerk40t/fill/fills.py +781 -335
  158. meerk40t/fill/patternfill.py +1061 -1061
  159. meerk40t/fill/patterns.py +614 -567
  160. meerk40t/grbl/control.py +87 -87
  161. meerk40t/grbl/controller.py +990 -903
  162. meerk40t/grbl/device.py +1081 -768
  163. meerk40t/grbl/driver.py +989 -771
  164. meerk40t/grbl/emulator.py +532 -497
  165. meerk40t/grbl/gcodejob.py +783 -767
  166. meerk40t/grbl/gui/grblconfiguration.py +373 -298
  167. meerk40t/grbl/gui/grblcontroller.py +485 -271
  168. meerk40t/grbl/gui/grblhardwareconfig.py +269 -153
  169. meerk40t/grbl/gui/grbloperationconfig.py +105 -0
  170. meerk40t/grbl/gui/gui.py +147 -116
  171. meerk40t/grbl/interpreter.py +44 -44
  172. meerk40t/grbl/loader.py +22 -22
  173. meerk40t/grbl/mock_connection.py +56 -56
  174. meerk40t/grbl/plugin.py +294 -264
  175. meerk40t/grbl/serial_connection.py +93 -88
  176. meerk40t/grbl/tcp_connection.py +81 -79
  177. meerk40t/grbl/ws_connection.py +112 -0
  178. meerk40t/gui/__init__.py +1 -1
  179. meerk40t/gui/about.py +2042 -296
  180. meerk40t/gui/alignment.py +1644 -1608
  181. meerk40t/gui/autoexec.py +199 -0
  182. meerk40t/gui/basicops.py +791 -670
  183. meerk40t/gui/bufferview.py +77 -71
  184. meerk40t/gui/busy.py +170 -133
  185. meerk40t/gui/choicepropertypanel.py +1673 -1469
  186. meerk40t/gui/consolepanel.py +706 -542
  187. meerk40t/gui/devicepanel.py +687 -581
  188. meerk40t/gui/dialogoptions.py +110 -107
  189. meerk40t/gui/executejob.py +316 -306
  190. meerk40t/gui/fonts.py +90 -90
  191. meerk40t/gui/functionwrapper.py +252 -0
  192. meerk40t/gui/gui_mixins.py +729 -0
  193. meerk40t/gui/guicolors.py +205 -182
  194. meerk40t/gui/help_assets/help_assets.py +218 -201
  195. meerk40t/gui/helper.py +154 -0
  196. meerk40t/gui/hersheymanager.py +1430 -846
  197. meerk40t/gui/icons.py +3422 -2747
  198. meerk40t/gui/imagesplitter.py +555 -508
  199. meerk40t/gui/keymap.py +354 -344
  200. meerk40t/gui/laserpanel.py +892 -806
  201. meerk40t/gui/laserrender.py +1470 -1232
  202. meerk40t/gui/lasertoolpanel.py +805 -793
  203. meerk40t/gui/magnetoptions.py +436 -0
  204. meerk40t/gui/materialmanager.py +2917 -0
  205. meerk40t/gui/materialtest.py +1722 -1694
  206. meerk40t/gui/mkdebug.py +646 -359
  207. meerk40t/gui/mwindow.py +163 -140
  208. meerk40t/gui/navigationpanels.py +2605 -2467
  209. meerk40t/gui/notes.py +143 -142
  210. meerk40t/gui/opassignment.py +414 -410
  211. meerk40t/gui/operation_info.py +310 -299
  212. meerk40t/gui/plugin.py +494 -328
  213. meerk40t/gui/position.py +714 -669
  214. meerk40t/gui/preferences.py +901 -650
  215. meerk40t/gui/propertypanels/attributes.py +1461 -1131
  216. meerk40t/gui/propertypanels/blobproperty.py +117 -114
  217. meerk40t/gui/propertypanels/consoleproperty.py +83 -80
  218. meerk40t/gui/propertypanels/gotoproperty.py +77 -0
  219. meerk40t/gui/propertypanels/groupproperties.py +223 -217
  220. meerk40t/gui/propertypanels/hatchproperty.py +489 -469
  221. meerk40t/gui/propertypanels/imageproperty.py +2244 -1384
  222. meerk40t/gui/propertypanels/inputproperty.py +59 -58
  223. meerk40t/gui/propertypanels/opbranchproperties.py +82 -80
  224. meerk40t/gui/propertypanels/operationpropertymain.py +1890 -1638
  225. meerk40t/gui/propertypanels/outputproperty.py +59 -58
  226. meerk40t/gui/propertypanels/pathproperty.py +389 -380
  227. meerk40t/gui/propertypanels/placementproperty.py +1214 -383
  228. meerk40t/gui/propertypanels/pointproperty.py +140 -136
  229. meerk40t/gui/propertypanels/propertywindow.py +313 -181
  230. meerk40t/gui/propertypanels/rasterwizardpanels.py +996 -912
  231. meerk40t/gui/propertypanels/regbranchproperties.py +76 -0
  232. meerk40t/gui/propertypanels/textproperty.py +770 -755
  233. meerk40t/gui/propertypanels/waitproperty.py +56 -55
  234. meerk40t/gui/propertypanels/warpproperty.py +121 -0
  235. meerk40t/gui/propertypanels/wobbleproperty.py +255 -204
  236. meerk40t/gui/ribbon.py +2468 -2210
  237. meerk40t/gui/scene/scene.py +1100 -1051
  238. meerk40t/gui/scene/sceneconst.py +22 -22
  239. meerk40t/gui/scene/scenepanel.py +439 -349
  240. meerk40t/gui/scene/scenespacewidget.py +365 -365
  241. meerk40t/gui/scene/widget.py +518 -505
  242. meerk40t/gui/scenewidgets/affinemover.py +215 -215
  243. meerk40t/gui/scenewidgets/attractionwidget.py +315 -309
  244. meerk40t/gui/scenewidgets/bedwidget.py +120 -97
  245. meerk40t/gui/scenewidgets/elementswidget.py +137 -107
  246. meerk40t/gui/scenewidgets/gridwidget.py +785 -745
  247. meerk40t/gui/scenewidgets/guidewidget.py +765 -765
  248. meerk40t/gui/scenewidgets/laserpathwidget.py +66 -66
  249. meerk40t/gui/scenewidgets/machineoriginwidget.py +86 -86
  250. meerk40t/gui/scenewidgets/nodeselector.py +28 -28
  251. meerk40t/gui/scenewidgets/rectselectwidget.py +589 -346
  252. meerk40t/gui/scenewidgets/relocatewidget.py +33 -33
  253. meerk40t/gui/scenewidgets/reticlewidget.py +83 -83
  254. meerk40t/gui/scenewidgets/selectionwidget.py +2952 -2756
  255. meerk40t/gui/simpleui.py +357 -333
  256. meerk40t/gui/simulation.py +2431 -2094
  257. meerk40t/gui/snapoptions.py +208 -203
  258. meerk40t/gui/spoolerpanel.py +1227 -1180
  259. meerk40t/gui/statusbarwidgets/defaultoperations.py +480 -353
  260. meerk40t/gui/statusbarwidgets/infowidget.py +520 -483
  261. meerk40t/gui/statusbarwidgets/opassignwidget.py +356 -355
  262. meerk40t/gui/statusbarwidgets/selectionwidget.py +172 -171
  263. meerk40t/gui/statusbarwidgets/shapepropwidget.py +754 -236
  264. meerk40t/gui/statusbarwidgets/statusbar.py +272 -260
  265. meerk40t/gui/statusbarwidgets/statusbarwidget.py +268 -270
  266. meerk40t/gui/statusbarwidgets/strokewidget.py +267 -251
  267. meerk40t/gui/themes.py +200 -78
  268. meerk40t/gui/tips.py +591 -0
  269. meerk40t/gui/toolwidgets/circlebrush.py +35 -35
  270. meerk40t/gui/toolwidgets/toolcircle.py +248 -242
  271. meerk40t/gui/toolwidgets/toolcontainer.py +82 -77
  272. meerk40t/gui/toolwidgets/tooldraw.py +97 -90
  273. meerk40t/gui/toolwidgets/toolellipse.py +219 -212
  274. meerk40t/gui/toolwidgets/toolimagecut.py +25 -132
  275. meerk40t/gui/toolwidgets/toolline.py +39 -144
  276. meerk40t/gui/toolwidgets/toollinetext.py +79 -236
  277. meerk40t/gui/toolwidgets/toollinetext_inline.py +296 -0
  278. meerk40t/gui/toolwidgets/toolmeasure.py +160 -216
  279. meerk40t/gui/toolwidgets/toolnodeedit.py +2088 -2074
  280. meerk40t/gui/toolwidgets/toolnodemove.py +92 -94
  281. meerk40t/gui/toolwidgets/toolparameter.py +754 -668
  282. meerk40t/gui/toolwidgets/toolplacement.py +108 -108
  283. meerk40t/gui/toolwidgets/toolpoint.py +68 -59
  284. meerk40t/gui/toolwidgets/toolpointlistbuilder.py +294 -0
  285. meerk40t/gui/toolwidgets/toolpointmove.py +183 -0
  286. meerk40t/gui/toolwidgets/toolpolygon.py +288 -403
  287. meerk40t/gui/toolwidgets/toolpolyline.py +38 -196
  288. meerk40t/gui/toolwidgets/toolrect.py +211 -207
  289. meerk40t/gui/toolwidgets/toolrelocate.py +72 -72
  290. meerk40t/gui/toolwidgets/toolribbon.py +598 -113
  291. meerk40t/gui/toolwidgets/tooltabedit.py +546 -0
  292. meerk40t/gui/toolwidgets/tooltext.py +98 -89
  293. meerk40t/gui/toolwidgets/toolvector.py +213 -204
  294. meerk40t/gui/toolwidgets/toolwidget.py +39 -39
  295. meerk40t/gui/usbconnect.py +98 -91
  296. meerk40t/gui/utilitywidgets/buttonwidget.py +18 -18
  297. meerk40t/gui/utilitywidgets/checkboxwidget.py +90 -90
  298. meerk40t/gui/utilitywidgets/controlwidget.py +14 -14
  299. meerk40t/gui/utilitywidgets/cyclocycloidwidget.py +343 -340
  300. meerk40t/gui/utilitywidgets/debugwidgets.py +148 -0
  301. meerk40t/gui/utilitywidgets/handlewidget.py +27 -27
  302. meerk40t/gui/utilitywidgets/harmonograph.py +450 -447
  303. meerk40t/gui/utilitywidgets/openclosewidget.py +40 -40
  304. meerk40t/gui/utilitywidgets/rotationwidget.py +54 -54
  305. meerk40t/gui/utilitywidgets/scalewidget.py +75 -75
  306. meerk40t/gui/utilitywidgets/seekbarwidget.py +183 -183
  307. meerk40t/gui/utilitywidgets/togglewidget.py +142 -142
  308. meerk40t/gui/utilitywidgets/toolbarwidget.py +8 -8
  309. meerk40t/gui/wordlisteditor.py +985 -931
  310. meerk40t/gui/wxmeerk40t.py +1444 -1169
  311. meerk40t/gui/wxmmain.py +5578 -4112
  312. meerk40t/gui/wxmribbon.py +1591 -1076
  313. meerk40t/gui/wxmscene.py +1635 -1453
  314. meerk40t/gui/wxmtree.py +2410 -2089
  315. meerk40t/gui/wxutils.py +1769 -1099
  316. meerk40t/gui/zmatrix.py +102 -102
  317. meerk40t/image/__init__.py +1 -1
  318. meerk40t/image/dither.py +429 -0
  319. meerk40t/image/imagetools.py +2778 -2269
  320. meerk40t/internal_plugins.py +150 -130
  321. meerk40t/kernel/__init__.py +63 -12
  322. meerk40t/kernel/channel.py +259 -212
  323. meerk40t/kernel/context.py +538 -538
  324. meerk40t/kernel/exceptions.py +41 -41
  325. meerk40t/kernel/functions.py +463 -414
  326. meerk40t/kernel/jobs.py +100 -100
  327. meerk40t/kernel/kernel.py +3809 -3571
  328. meerk40t/kernel/lifecycles.py +71 -71
  329. meerk40t/kernel/module.py +49 -49
  330. meerk40t/kernel/service.py +147 -147
  331. meerk40t/kernel/settings.py +383 -343
  332. meerk40t/lihuiyu/controller.py +883 -876
  333. meerk40t/lihuiyu/device.py +1181 -1069
  334. meerk40t/lihuiyu/driver.py +1466 -1372
  335. meerk40t/lihuiyu/gui/gui.py +127 -106
  336. meerk40t/lihuiyu/gui/lhyaccelgui.py +377 -363
  337. meerk40t/lihuiyu/gui/lhycontrollergui.py +741 -651
  338. meerk40t/lihuiyu/gui/lhydrivergui.py +470 -446
  339. meerk40t/lihuiyu/gui/lhyoperationproperties.py +238 -237
  340. meerk40t/lihuiyu/gui/tcpcontroller.py +226 -190
  341. meerk40t/lihuiyu/interpreter.py +53 -53
  342. meerk40t/lihuiyu/laserspeed.py +450 -450
  343. meerk40t/lihuiyu/loader.py +90 -90
  344. meerk40t/lihuiyu/parser.py +404 -404
  345. meerk40t/lihuiyu/plugin.py +101 -102
  346. meerk40t/lihuiyu/tcp_connection.py +111 -109
  347. meerk40t/main.py +231 -165
  348. meerk40t/moshi/builder.py +788 -781
  349. meerk40t/moshi/controller.py +505 -499
  350. meerk40t/moshi/device.py +495 -442
  351. meerk40t/moshi/driver.py +862 -696
  352. meerk40t/moshi/gui/gui.py +78 -76
  353. meerk40t/moshi/gui/moshicontrollergui.py +538 -522
  354. meerk40t/moshi/gui/moshidrivergui.py +87 -75
  355. meerk40t/moshi/plugin.py +43 -43
  356. meerk40t/network/console_server.py +102 -57
  357. meerk40t/network/kernelserver.py +10 -9
  358. meerk40t/network/tcp_server.py +142 -140
  359. meerk40t/network/udp_server.py +103 -77
  360. meerk40t/network/web_server.py +390 -0
  361. meerk40t/newly/controller.py +1158 -1144
  362. meerk40t/newly/device.py +874 -732
  363. meerk40t/newly/driver.py +540 -412
  364. meerk40t/newly/gui/gui.py +219 -188
  365. meerk40t/newly/gui/newlyconfig.py +116 -101
  366. meerk40t/newly/gui/newlycontroller.py +193 -186
  367. meerk40t/newly/gui/operationproperties.py +51 -51
  368. meerk40t/newly/mock_connection.py +82 -82
  369. meerk40t/newly/newly_params.py +56 -56
  370. meerk40t/newly/plugin.py +1214 -1246
  371. meerk40t/newly/usb_connection.py +322 -322
  372. meerk40t/rotary/gui/gui.py +52 -46
  373. meerk40t/rotary/gui/rotarysettings.py +240 -232
  374. meerk40t/rotary/rotary.py +202 -98
  375. meerk40t/ruida/control.py +291 -91
  376. meerk40t/ruida/controller.py +138 -1088
  377. meerk40t/ruida/device.py +672 -231
  378. meerk40t/ruida/driver.py +534 -472
  379. meerk40t/ruida/emulator.py +1494 -1491
  380. meerk40t/ruida/exceptions.py +4 -4
  381. meerk40t/ruida/gui/gui.py +71 -76
  382. meerk40t/ruida/gui/ruidaconfig.py +239 -72
  383. meerk40t/ruida/gui/ruidacontroller.py +187 -184
  384. meerk40t/ruida/gui/ruidaoperationproperties.py +48 -47
  385. meerk40t/ruida/loader.py +54 -52
  386. meerk40t/ruida/mock_connection.py +57 -109
  387. meerk40t/ruida/plugin.py +124 -87
  388. meerk40t/ruida/rdjob.py +2084 -945
  389. meerk40t/ruida/serial_connection.py +116 -0
  390. meerk40t/ruida/tcp_connection.py +146 -0
  391. meerk40t/ruida/udp_connection.py +73 -0
  392. meerk40t/svgelements.py +9671 -9669
  393. meerk40t/tools/driver_to_path.py +584 -579
  394. meerk40t/tools/geomstr.py +5583 -4680
  395. meerk40t/tools/jhfparser.py +357 -292
  396. meerk40t/tools/kerftest.py +904 -890
  397. meerk40t/tools/livinghinges.py +1168 -1033
  398. meerk40t/tools/pathtools.py +987 -949
  399. meerk40t/tools/pmatrix.py +234 -0
  400. meerk40t/tools/pointfinder.py +942 -942
  401. meerk40t/tools/polybool.py +940 -940
  402. meerk40t/tools/rasterplotter.py +1660 -547
  403. meerk40t/tools/shxparser.py +989 -901
  404. meerk40t/tools/ttfparser.py +726 -446
  405. meerk40t/tools/zinglplotter.py +595 -593
  406. {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7010.dist-info}/LICENSE +21 -21
  407. {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7010.dist-info}/METADATA +150 -139
  408. meerk40t-0.9.7010.dist-info/RECORD +445 -0
  409. {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7010.dist-info}/WHEEL +1 -1
  410. {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7010.dist-info}/top_level.txt +0 -1
  411. {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7010.dist-info}/zip-safe +1 -1
  412. meerk40t/balormk/elementlightjob.py +0 -159
  413. meerk40t-0.9.3001.dist-info/RECORD +0 -437
  414. test/bootstrap.py +0 -63
  415. test/test_cli.py +0 -12
  416. test/test_core_cutcode.py +0 -418
  417. test/test_core_elements.py +0 -144
  418. test/test_core_plotplanner.py +0 -397
  419. test/test_core_viewports.py +0 -312
  420. test/test_drivers_grbl.py +0 -108
  421. test/test_drivers_lihuiyu.py +0 -443
  422. test/test_drivers_newly.py +0 -113
  423. test/test_element_degenerate_points.py +0 -43
  424. test/test_elements_classify.py +0 -97
  425. test/test_elements_penbox.py +0 -22
  426. test/test_file_svg.py +0 -176
  427. test/test_fill.py +0 -155
  428. test/test_geomstr.py +0 -1523
  429. test/test_geomstr_nodes.py +0 -18
  430. test/test_imagetools_actualize.py +0 -306
  431. test/test_imagetools_wizard.py +0 -258
  432. test/test_kernel.py +0 -200
  433. test/test_laser_speeds.py +0 -3303
  434. test/test_length.py +0 -57
  435. test/test_lifecycle.py +0 -66
  436. test/test_operations.py +0 -251
  437. test/test_operations_hatch.py +0 -57
  438. test/test_ruida.py +0 -19
  439. test/test_spooler.py +0 -22
  440. test/test_tools_rasterplotter.py +0 -29
  441. test/test_wobble.py +0 -133
  442. test/test_zingl.py +0 -124
  443. {test → meerk40t/cylinder}/__init__.py +0 -0
  444. /meerk40t/{core/element_commands.py → cylinder/gui/__init__.py} +0 -0
  445. {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7010.dist-info}/entry_points.txt +0 -0
meerk40t/gui/about.py CHANGED
@@ -1,296 +1,2042 @@
1
- import datetime
2
-
3
- import wx
4
-
5
- from ..main import APPLICATION_NAME, APPLICATION_VERSION
6
- from .icons import icon_about, icon_meerk40t
7
- from .mwindow import MWindow
8
- from .wxutils import ScrolledPanel, StaticBoxSizer
9
-
10
- _ = wx.GetTranslation
11
-
12
- HEADER_TEXT = (
13
- "MeerK40t is a free MIT Licensed open source project\n"
14
- + "for lasering on K40 Devices.\n\n"
15
- + "Participation in the project is highly encouraged.\n"
16
- + "Past participation, and continuing participation is graciously thanked.\n"
17
- + "This program is mostly the brainchild of Tatarize,\n"
18
- + "who sincerely hopes his contributions will be but\n"
19
- + "the barest trickle that becomes a raging river."
20
- )
21
-
22
-
23
- class AboutPanel(wx.Panel):
24
- def __init__(self, *args, context=None, **kwds):
25
- # begin wxGlade: MovePanel.__init__
26
- kwds["style"] = kwds.get("style", 0) | wx.TAB_TRAVERSAL
27
- wx.Panel.__init__(self, *args, **kwds)
28
- self.context = context
29
-
30
- self.bitmap_button_1 = wx.BitmapButton(
31
- self, wx.ID_ANY, icon_meerk40t.GetBitmap()
32
- )
33
-
34
- self.__set_properties()
35
- self.__do_layout()
36
-
37
- name = self.context.kernel.name
38
- version = self.context.kernel.version
39
- self.meerk40t_about_version_text.SetLabelText(f"{name}\nv{version}")
40
-
41
- def __set_properties(self):
42
- self.bitmap_button_1.SetSize(self.bitmap_button_1.GetBestSize())
43
- self.meerk40t_about_version_text = wx.StaticText(self, wx.ID_ANY, "MeerK40t")
44
- # end wxGlade
45
-
46
- def __do_layout(self):
47
- # begin wxGlade: About.__do_layout
48
- vsizer_main = wx.BoxSizer(wx.VERTICAL)
49
- hsizer_pic_info = wx.BoxSizer(wx.HORIZONTAL)
50
- vsizer_pic_iver = wx.BoxSizer(wx.VERTICAL)
51
- vsizer_pic_iver.Add(self.bitmap_button_1, 0, 0, 0)
52
- self.meerk40t_about_version_text.SetFont(
53
- wx.Font(
54
- 10,
55
- wx.FONTFAMILY_DEFAULT,
56
- wx.FONTSTYLE_NORMAL,
57
- wx.FONTWEIGHT_NORMAL,
58
- 0,
59
- "Segoe UI",
60
- )
61
- )
62
- vsizer_pic_iver.Add(self.meerk40t_about_version_text, 0, 0, 0)
63
- hsizer_pic_info.Add(vsizer_pic_iver, 0, wx.EXPAND, 0)
64
- hsizer_pic_info.AddSpacer(5)
65
- self.meerk40t_about_text_header = wx.StaticText(
66
- self,
67
- wx.ID_ANY,
68
- _(HEADER_TEXT),
69
- )
70
- self.meerk40t_about_text_header.SetFont(
71
- wx.Font(
72
- 10,
73
- wx.FONTFAMILY_DEFAULT,
74
- wx.FONTSTYLE_NORMAL,
75
- wx.FONTWEIGHT_NORMAL,
76
- 0,
77
- "Segoe UI",
78
- )
79
- )
80
- hsizer_pic_info.Add(self.meerk40t_about_text_header, 1, wx.EXPAND, 0)
81
- vsizer_main.Add(hsizer_pic_info, 1, wx.EXPAND, 0)
82
- # Simplify addition of future developers without need to translate every single time
83
- hall_of_fame = [
84
- "Sophist-UK",
85
- "tiger12506",
86
- "jpirnay",
87
- "frogmaster",
88
- "inspectionsbybob",
89
- ]
90
- meerk40t_about_text = wx.StaticText(
91
- self,
92
- wx.ID_ANY,
93
- _("Thanks go out to...\n")
94
- + _("* Li Huiyu for their controller.\n")
95
- + _("* Scorch for lighting our path.\n")
96
- + _(
97
- "* Alois Zingl for his brilliant Bresenham curve plotting algorithms.\n"
98
- )
99
- + "\n"
100
- + _(
101
- "* @joerlane for his hardware investigation wizardry into how the M2-Nano works.\n"
102
- )
103
- + _("* All the MeerKittens, {developer}. \n").format(
104
- developer=", ".join(hall_of_fame)
105
- )
106
- + _(
107
- "* Beta testers and anyone who reported issues that helped us improve things.\n"
108
- )
109
- + _(
110
- "* Translators who helped internationalise MeerK40t for worldwide use.\n"
111
- )
112
- + _(
113
- "* Users who have added to or edited the Wiki documentation to help other users.\n"
114
- )
115
- + "\n"
116
- + _(
117
- "* Icons8 (https://icons8.com/) for their great icons used throughout the project.\n"
118
- )
119
- + _(
120
- "* The countless developers who created other software that we use internally.\n"
121
- )
122
- + _("* Regebro for his svg.path module which inspired svgelements.\n")
123
- + _("* The SVG Working Group.\n")
124
- + _("* Hackers and tinkerers."),
125
- )
126
- meerk40t_about_text.SetFont(
127
- wx.Font(
128
- 10,
129
- wx.FONTFAMILY_DEFAULT,
130
- wx.FONTSTYLE_NORMAL,
131
- wx.FONTWEIGHT_NORMAL,
132
- 0,
133
- "Segoe UI",
134
- )
135
- )
136
- vsizer_main.Add(meerk40t_about_text, 4, wx.EXPAND, 0)
137
- self.SetSizer(vsizer_main)
138
- self.Layout()
139
- # end wxGlade
140
-
141
-
142
- class InformationPanel(ScrolledPanel):
143
- def __init__(self, *args, context=None, **kwds):
144
- # begin wxGlade: MovePanel.__init__
145
- kwds["style"] = kwds.get("style", 0) | wx.TAB_TRAVERSAL
146
- ScrolledPanel.__init__(self, *args, **kwds)
147
- self.context = context
148
- self.mk_version = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_READONLY)
149
- self.py_version = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_READONLY)
150
- self.wx_version = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_READONLY)
151
- self.config_path = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_READONLY)
152
- self.os_version = wx.TextCtrl(
153
- self, wx.ID_ANY, "", style=wx.TE_READONLY | wx.TE_MULTILINE
154
- )
155
- self.os_version.SetMinSize(wx.Size(-1, 5 * 25))
156
- self.info_btn = wx.Button(self, wx.ID_ANY, _("Copy to Clipboard"))
157
- self.Bind(wx.EVT_BUTTON, self.copy_debug_info, self.info_btn)
158
- self.update_btn = wx.Button(self, wx.ID_ANY, _("Check for Updates"))
159
- self.Bind(wx.EVT_BUTTON, self.check_for_updates, self.update_btn)
160
- self.__set_properties()
161
- self.__do_layout()
162
- self.SetupScrolling()
163
-
164
- def __set_properties(self):
165
- # Fill the content...
166
- import os
167
- import platform
168
- import socket
169
- import sys
170
-
171
- info = "wx"
172
- try:
173
- info = wx.version()
174
- except:
175
- pass
176
- self.wx_version.SetValue(info)
177
- self.py_version.SetValue(platform.python_version())
178
- uname = platform.uname()
179
- info = ""
180
- info += f"System: {uname.system}" + "\n"
181
- info += f"Node Name: {uname.node}" + "\n"
182
- info += f"Release: {uname.release}" + "\n"
183
- info += f"Version: {uname.version}" + "\n"
184
- info += f"Machine: {uname.machine}" + "\n"
185
- info += f"Processor: {uname.processor}" + "\n"
186
- info += f"Theme: {self.context.themes.theme}, Darkmode: {self.context.themes.dark}\n"
187
- try:
188
- info += f"Ip-Address: {socket.gethostbyname(socket.gethostname())}"
189
- except socket.gaierror:
190
- info += "Ip-Address: localhost"
191
- self.os_version.SetValue(info)
192
-
193
- info = f"{APPLICATION_NAME} v{APPLICATION_VERSION}"
194
- self.mk_version.SetValue(info)
195
- info = os.path.dirname(self.context.elements.op_data._config_file)
196
- # info = self.context.kernel.current_directory
197
- self.config_path.SetValue(info)
198
-
199
- def __do_layout(self):
200
- sizer_main = wx.BoxSizer(wx.VERTICAL)
201
-
202
- sizer_mk = StaticBoxSizer(self, wx.ID_ANY, "MeerK40t", wx.HORIZONTAL)
203
- sizer_mk.Add(self.mk_version, 1, wx.EXPAND, 0)
204
- sizer_main.Add(sizer_mk, 0, wx.EXPAND, 0)
205
-
206
- sizer_py = StaticBoxSizer(self, wx.ID_ANY, "Python", wx.HORIZONTAL)
207
- sizer_py.Add(self.py_version, 1, wx.EXPAND, 0)
208
- sizer_main.Add(sizer_py, 0, wx.EXPAND, 0)
209
-
210
- sizer_wx = StaticBoxSizer(self, wx.ID_ANY, "wxPython", wx.HORIZONTAL)
211
- sizer_wx.Add(self.wx_version, 1, wx.EXPAND, 0)
212
- sizer_main.Add(sizer_wx, 0, wx.EXPAND, 0)
213
-
214
- sizer_cfg = StaticBoxSizer(
215
- self, wx.ID_ANY, _("Configuration-Path"), wx.HORIZONTAL
216
- )
217
- sizer_cfg.Add(self.config_path, 1, wx.EXPAND, 0)
218
- sizer_main.Add(sizer_cfg, 0, wx.EXPAND, 0)
219
-
220
- sizer_os = StaticBoxSizer(self, wx.ID_ANY, "OS", wx.HORIZONTAL)
221
- sizer_os.Add(self.os_version, 1, wx.EXPAND, 0)
222
- sizer_main.Add(sizer_os, 1, wx.EXPAND, 0) # This one may grow
223
-
224
- button_sizer = wx.BoxSizer(wx.HORIZONTAL)
225
- button_sizer.Add(self.info_btn, 2, wx.EXPAND, 0)
226
- button_sizer.Add(self.update_btn, 1, wx.EXPAND, 0)
227
- sizer_main.Add(button_sizer, 0, wx.EXPAND, 0)
228
-
229
- sizer_main.Layout()
230
- self.SetSizer(sizer_main)
231
-
232
- def check_for_updates(self, event):
233
- self.context.setting(str, "last_update_check", None)
234
- now = datetime.date.today()
235
- if self.context.update_check == 1:
236
- command = "check_for_updates --verbosity 3\n"
237
- elif self.context.update_check == 2:
238
- command = "check_for_updates --beta --verbosity 3\n"
239
- self.context(command)
240
- self.context.last_update_check = now.toordinal()
241
-
242
- def copy_debug_info(self, event):
243
- if wx.TheClipboard.Open():
244
- msg = ""
245
- msg += self.mk_version.GetValue() + "\n"
246
- msg += self.py_version.GetValue() + "\n"
247
- msg += self.wx_version.GetValue() + "\n"
248
- msg += self.config_path.GetValue() + "\n"
249
- msg += self.os_version.GetValue() + "\n"
250
- # print (msg)
251
- wx.TheClipboard.SetData(wx.TextDataObject(msg))
252
- wx.TheClipboard.Close()
253
- else:
254
- # print ("couldn't access clipboard")
255
- wx.Bell()
256
-
257
-
258
- class About(MWindow):
259
- def __init__(self, *args, **kwds):
260
- from platform import system as _sys
261
-
262
- super().__init__(
263
- 480,
264
- 360,
265
- *args,
266
- style=wx.CAPTION
267
- | wx.CLOSE_BOX
268
- | wx.FRAME_FLOAT_ON_PARENT
269
- | wx.TAB_TRAVERSAL
270
- | (wx.RESIZE_BORDER if _sys() != "Darwin" else 0),
271
- **kwds,
272
- )
273
- self.notebook_main = wx.aui.AuiNotebook(
274
- self,
275
- -1,
276
- style=wx.aui.AUI_NB_TAB_EXTERNAL_MOVE
277
- | wx.aui.AUI_NB_SCROLL_BUTTONS
278
- | wx.aui.AUI_NB_TAB_SPLIT
279
- | wx.aui.AUI_NB_TAB_MOVE,
280
- )
281
-
282
- self.panel_about = AboutPanel(self, wx.ID_ANY, context=self.context)
283
- self.panel_info = InformationPanel(self, wx.ID_ANY, context=self.context)
284
- self.notebook_main.AddPage(self.panel_about, _("About"))
285
- self.notebook_main.AddPage(self.panel_info, _("System-Information"))
286
-
287
- self.add_module_delegate(self.panel_about)
288
- self.add_module_delegate(self.panel_info)
289
- _icon = wx.NullIcon
290
- _icon.CopyFromBitmap(icon_about.GetBitmap())
291
- self.SetIcon(_icon)
292
- self.SetTitle(_("About"))
293
-
294
- name = self.context.kernel.name
295
- version = self.context.kernel.version
296
- self.SetTitle(_("About {name} v{version}").format(name=name, version=version))
1
+ import datetime
2
+ from platform import system
3
+
4
+ import wx
5
+
6
+ from ..main import APPLICATION_NAME, APPLICATION_VERSION
7
+ from .icons import icon_about, icon_meerk40t
8
+ from .mwindow import MWindow
9
+ from .wxutils import (
10
+ ScrolledPanel,
11
+ StaticBoxSizer,
12
+ dip_size,
13
+ wxButton,
14
+ wxListCtrl,
15
+ wxStaticText,
16
+ TextCtrl,
17
+ )
18
+
19
+ _ = wx.GetTranslation
20
+
21
+ HEADER_TEXT = (
22
+ "MeerK40t is a free MIT Licensed open source project\n"
23
+ + "for lasering on K40 Devices.\n\n"
24
+ + "Participation in the project is highly encouraged.\n"
25
+ + "Past participation, and continuing participation is graciously thanked.\n"
26
+ + "This program is mostly the brainchild of Tatarize,\n"
27
+ + "who sincerely hoped his contributions would be but\n"
28
+ + "the barest trickle that becomes a raging river."
29
+ )
30
+ HEADER_TEXT_2 = "Since early 2024 jpirnay has taken on the role of lead developer\ntrying to fill in some awfully large shoes."
31
+
32
+ EULOGY_TEXT = (
33
+ "MeerK40t is the result of an incredible piece of work by David Olsen aka Tatarize.\n"
34
+ + "He created this program over 4 years allowing users across the world to get the best out of their K40 equipment (and additional lasertypes).\n\n"
35
+ + "Despite having no risk factors for getting cancer, he developed a tumor on his tongue that metastasized into his lungs before the doctors could stop it and passed away on July 26, 2024.\n"
36
+ + "He was a mentor, an inspiration and a friend - David you will be missed but you won't be forgotten.\n\n"
37
+ + "Please join the fight against cancer and consider donating to one of the many research and charity organisations across the world.\n\n"
38
+ + "If you are interested to read more about MeerK40t's development history then please refer to:\nhttps://github.com/meerk40t/meerk40t/wiki/History:-Major-Version-History,-Changes,-and-Reasons"
39
+ )
40
+
41
+ class AboutPanel(wx.Panel):
42
+ def __init__(self, *args, context=None, **kwds):
43
+ # begin wxGlade: MovePanel.__init__
44
+ kwds["style"] = kwds.get("style", 0) | wx.TAB_TRAVERSAL
45
+ wx.Panel.__init__(self, *args, **kwds)
46
+ self.context = context
47
+ self.context.themes.set_window_colors(self)
48
+
49
+ self.bitmap_button_1 = wx.BitmapButton(
50
+ self, wx.ID_ANY, icon_meerk40t.GetBitmap(resize=150)
51
+ )
52
+ # self.bitmap_button_1.SetBackgroundColour(wx.WHITE)
53
+
54
+ self.__set_properties()
55
+ self.__do_layout()
56
+
57
+ name = self.context.kernel.name
58
+ version = self.context.kernel.version
59
+
60
+ msg = f"v{version}"
61
+ self.meerk40t_about_version_text.SetLabelText(msg)
62
+
63
+ def __set_properties(self):
64
+ self.bitmap_button_1.SetSize(self.bitmap_button_1.GetBestSize())
65
+ self.meerk40t_about_version_text = wxStaticText(self, wx.ID_ANY, "MeerK40t")
66
+ # end wxGlade
67
+
68
+ def __do_layout(self):
69
+ # begin wxGlade: About.__do_layout
70
+ vsizer_main = wx.BoxSizer(wx.VERTICAL)
71
+ hsizer_pic_info = wx.BoxSizer(wx.HORIZONTAL)
72
+ vsizer_pic_iver = wx.BoxSizer(wx.VERTICAL)
73
+ vsizer_pic_iver.Add(self.bitmap_button_1, 0, 0, 0)
74
+ fontsize = 16 if system() == "Darwin" else 10
75
+ self.meerk40t_about_version_text.SetFont(
76
+ wx.Font(
77
+ fontsize,
78
+ wx.FONTFAMILY_DEFAULT,
79
+ wx.FONTSTYLE_NORMAL,
80
+ wx.FONTWEIGHT_NORMAL,
81
+ 0,
82
+ "Segoe UI",
83
+ )
84
+ )
85
+ vsizer_pic_iver.Add(self.meerk40t_about_version_text, 0, 0, 0)
86
+ hsizer_pic_info.Add(vsizer_pic_iver, 0, wx.EXPAND, 0)
87
+ hsizer_pic_info.AddSpacer(5)
88
+ self.meerk40t_about_text_header = wxStaticText(
89
+ self,
90
+ wx.ID_ANY,
91
+ _(HEADER_TEXT) + "\n" + _(HEADER_TEXT_2),
92
+ )
93
+
94
+ self.meerk40t_about_text_header.SetFont(
95
+ wx.Font(
96
+ fontsize,
97
+ wx.FONTFAMILY_DEFAULT,
98
+ wx.FONTSTYLE_NORMAL,
99
+ wx.FONTWEIGHT_NORMAL,
100
+ 0,
101
+ "Segoe UI",
102
+ )
103
+ )
104
+ hsizer_pic_info.Add(self.meerk40t_about_text_header, 1, wx.EXPAND, 0)
105
+ vsizer_main.Add(hsizer_pic_info, 1, wx.EXPAND, 0)
106
+ # Simplify addition of future developers without need to translate every single time
107
+ # Ordered by the amount of commits (as of Jan 2024)
108
+ # tatarize ~ 11.800
109
+ # jpirnay ~ 3.200
110
+ # Sophist-UK ~ 500
111
+ # tiger12506 ~ 90
112
+ # joerlane ~ 50
113
+ # jaredly ~ 15
114
+ # frogmaster ~ 10
115
+ hall_of_fame = [
116
+ "Sophist-UK",
117
+ "tiger12506",
118
+ "jaredly",
119
+ "frogmaster",
120
+ "inspectionsbybob",
121
+ "jondale",
122
+ ]
123
+ meerk40t_about_text = wxStaticText(
124
+ self,
125
+ wx.ID_ANY,
126
+ _("Thanks go out to...\n")
127
+ + _("* Li Huiyu for their controller.\n")
128
+ + _("* Scorch for lighting our path.\n")
129
+ + _(
130
+ "* Alois Zingl for his brilliant Bresenham curve plotting algorithms.\n"
131
+ )
132
+ + "\n"
133
+ + _(
134
+ "* @joerlane for his hardware investigation wizardry into how the M2-Nano works.\n"
135
+ )
136
+ + _("* All the MeerKittens, {developer}. \n").format(
137
+ developer=", ".join(hall_of_fame)
138
+ )
139
+ + _(
140
+ "* Beta testers and anyone who reported issues that helped us improve things.\n"
141
+ )
142
+ + _(
143
+ "* Translators who helped internationalise MeerK40t for worldwide use.\n"
144
+ )
145
+ + _(
146
+ "* Users who have added to or edited the Wiki documentation to help other users.\n"
147
+ )
148
+ + "\n"
149
+ + _(
150
+ "* Icons8 (https://icons8.com/) for their great icons used throughout the project.\n"
151
+ )
152
+ + _(
153
+ "* The countless developers who created other software that we use internally.\n"
154
+ )
155
+ + _("* Regebro for his svg.path module which inspired svgelements.\n")
156
+ + _("* The SVG Working Group.\n")
157
+ + _("* Hackers and tinkerers."),
158
+ )
159
+ meerk40t_about_text.SetFont(
160
+ wx.Font(
161
+ fontsize,
162
+ wx.FONTFAMILY_DEFAULT,
163
+ wx.FONTSTYLE_NORMAL,
164
+ wx.FONTWEIGHT_NORMAL,
165
+ 0,
166
+ "Segoe UI",
167
+ )
168
+ )
169
+ vsizer_main.AddSpacer(5)
170
+ vsizer_main.Add(meerk40t_about_text, 4, wx.EXPAND, 0)
171
+ if self.context.root.faulty_bitmap_scaling:
172
+ info = wxStaticText(self, wx.ID_ANY,
173
+ _(
174
+ "Your system is using a very high userscale value: {scale}% ! " +
175
+ "Unfortunately there is a bug in wxPython (the framework we are using) " +
176
+ "that will cause unwanted upscaling of images in this configuration. You will recognize this by looking at very pixely icons.\n" +
177
+ "As there is only so much we can do about it, we recommend lowering your userscale value to something below 150%."
178
+ ).format(scale=self.context.root.user_scale)
179
+ )
180
+ info.SetBackgroundColour(wx.YELLOW)
181
+ info.SetForegroundColour(wx.RED)
182
+ vsizer_main.Add(info, 1, wx.EXPAND, 0)
183
+ self.SetSizer(vsizer_main)
184
+ self.Layout()
185
+ # end wxGlade
186
+
187
+ class DavidPanel(ScrolledPanel):
188
+ def __init__(self, *args, context=None, **kwds):
189
+ # begin wxGlade: MovePanel.__init__
190
+ kwds["style"] = kwds.get("style", 0) | wx.TAB_TRAVERSAL
191
+ wx.Panel.__init__(self, *args, **kwds)
192
+ self.context = context
193
+ self.context.themes.set_window_colors(self)
194
+
195
+ from wx.lib.embeddedimage import PyEmbeddedImage
196
+
197
+ david_olsen = PyEmbeddedImage(
198
+ b'iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAIAAAAiOjnJAAAgAElEQVR4nDy76a6mR5LfF5F7'
199
+ b'Ptu7nnPq1Mpqskk1ZzRjS7LGtiDA9jX4iy/D33wXvgtfhD2QAHsgDGBbwKhnutkLySKr6qzv'
200
+ b'9qy5Z/oDbX+LAAJIBDKR/4hfIPB//l/++3EcM6BzjgnVNM393fOHDx+G47Db7V7fvPny/a9I'
201
+ b'oR9++PH4+PR8HphuU6H7tr3ebd/e3GrB7WVUUhJCnPeFim6/3b94SbW8TPPlfL7ZbPrDaZwG'
202
+ b'KWUOkVLadatpmoCQ3/7uHz789Mfn8+dmzdo1b1fsX//rf7VrN9Gn3/6n33XdmhL+93//f+YE'
203
+ b'r169IShSSpzzqqoQMYRAKNSyyTMwZM2q4YL0w2CtnRb39Nw/PZ6RSEBd1+1qveWcU0Eb3dDM'
204
+ b'sCBjzHtvjGua5vbl667rSkFCSEjZWgsAUkpCWEieamHdJBnddg0rfu6PNMe2IqtWSVkEJ7lY'
205
+ b'G6aQLCFIBBGUpZSMC9a7kglXkktBCPnww4/e25IS56TVVV1rrQSj4vh4iKFQXi/GPx8uqmnf'
206
+ b'vXtXtRUVOefABK0bDYQsy7IstgSnit1tO63r0cyX8zgs5jwu58F8/PSYQPW9j0W03U3KdJwc'
207
+ b'I266/LBq5b59/e7d+998/U7K8vmnH+4//mx6rwUgLk3tXr9prq/a5GGZnZsiQbnM4XxaloVq'
208
+ b'ta6rDaOyaTdCMN0IyvI0nx+fPj4f7gZzWWAJEBRV17vr1y/frNqNGZbj8cwIIZRSzNl7v8w2'
209
+ b'pUIpffXi5abZLIu/v3+gyLerrVKNrl16vpAEJSfv/TiOF13z9apZdbfXN6WUjIBcdZv1zas3'
210
+ b'1ap9Op0/fvxIU3r1+qW125xjVzc3NzfzbP7u7/7u493neZwYY5vN5uq23e5qpuI8m7XejsPy'
211
+ b'+HB8fuqbphW84pW0JpaSSykANMaSUpznGbHkCv1gJJPI41atr64307ScLp8Oh0POlABdbdZX'
212
+ b'+1sutHPOLN5O/bppo09KqaZtt9u9VFVK6dOnuxjj/vqGMTYMUyllf6U4paOJteQAUEoJIaTk'
213
+ b'QkiIGZFXWhOaECMC5UwKwbhkTHJSMMaYiwmxuBD85NJoUkqrbvd8eLTGIEqzuHEcBaNN05zP'
214
+ b'Z0rEdt/drm+bdlOQEkLGcUSSmq4SnMeQc47JJ2/8eDntWm1sCnE5nYfHw/O0mHHx8+J2u50P'
215
+ b'DLL1gUgKEUpX67Zu962Pflmv17/5+puvv357ePzZLbNdTF3VghRCshJYq/r2+qWWbX+Zn5/O'
216
+ b'QjY5kG5jh0uIgZZMfYou2Lpb72+um1aeL9rGKYKrcn2xQ78MOaJLOE5umU/jZRqGkR2en1Sl'
217
+ b'67p+Ohw//vxZqUrJmlLeNGutICx+Gm2056vd9ZdfXVNeAWUhRkkZ5mSMGQWjbccrRSklnAFy'
218
+ b'zjljTEulheSESiEY4vPxaZ7HblW9/+pdSeXh8dPv/vA7KTnnDJiudLPZbKSmyzj9x5/+yRn3'
219
+ b'/DRUVdPW+qsv/4JRcXf3cPf5MaWklKlrF0IYhoExstv4XauliikvLhCuVgAppkAIWa+2xoBg'
220
+ b'reTrEEqOpOJtKalr1wBZKYWM2sUM8xkRQ4ht2z49HxGxqpq2bQuhwzgvZnl4uqOs7FZdwxkn'
221
+ b'yJCU6K21wdecFya4EAyoTMmH5M3o67pFYIwSzrCk6GJw3jqXFBeMakp9ybQQAoV6n4dhapoq'
222
+ b'Z9BartedVNVivY9xmIZcPGJxxg7jJcWitY4x2Sn9fHlebGqaZrY5JlZASMkIVSWzEpNilJac'
223
+ b'g4kmEcoktryuphg5ElJg7i9Pn++fH+7H82lJUyXp9XW9bXetrrXsANTcH10ElIxLzStO7BSi'
224
+ b'tz54lyZrLDiimYny0h9Hs8i6udm/rpaZHp7Pp2F29NPzHN3oFpdiZOfD8dXbN7vt9nzuP8OD'
225
+ b'NYGSxFldMnnz+p2WerzMU2/2+5fffPPN+/ffnIajcy5Yd3x6XMZh/NzfEzovy7fffltyjsHm'
226
+ b'aZwWJ7Xqx/n59PSnP/2RUVyW6eZqQ9j7ApFQ/vbty6vrFWPs1D8F487HvkBqO3l/f//hTz8J'
227
+ b'qgmhm3XDWbPurhhTTw/jNDpjHOKitck5W2u1lpUI1c1uv20IJ4SQnKP3nlJ6dXUdvez7aVn8'
228
+ b'PHnnE2Niu7niHEMyiBCBlJBnFwCga9frjUqAS98TpKpqhKqHabxchhhdzplmyDnnnAljQqiE'
229
+ b'qWTo+4kxlIpUteCCpMKctYsLOcaMmCLDUjFRkKaUefBwPAyUqVpjykHpartepegvl4PxUykl'
230
+ b'lSilULrtCuYMq7n9+PGn6KI3duqn6GJQLsbc9+PpcvSB3NxwREZoxRkjmCjE46k3xiWXsZDk'
231
+ b'FjssGZC4qmoopCyQz8N45/rz4ZkBNEqZ3jHBXl69+PbrN21XoLD5afzhT5+ejeHVhRG5mGgm'
232
+ b'XzJhtGJCzMb0d8Pd00fKyjT31k03N9fNbqfqdR1wsng5Xcw4p5AFFZxztmpXUz+f2IVTtV3v'
233
+ b'x2khwNt6tV7tr69ut+ureBPvPj+mQkOiL168rmo9juf+cnmGch760+nknDsN/Ye7O0TkXNa6'
234
+ b'kqJCxJyhYL6/v+cCnZsJDR9++iOgb6r6crm8/9Xbvu8ZxRjz4fH09PSkK/H09MSB50SbboVR'
235
+ b'PHx67o+LkvXpuSdZQEy5lEwJpVxzLqnMiZ5PU61ku26lkExIIaKSumT8dDgvs+U8pFQACGOC'
236
+ b'UkoIicD64YKzW6/Xm92NlDKmMs6ztW6z2Va6Mc4ezvc5Z0IYZbDZtt4t1vqnp6PiVJDCEYCB'
237
+ b'i8Q6Ny1pnExVKyYpouZcX/pQgABAIZQxBjlCTjnaZV44pxSRUClEpesOcymlHA+WctRaK6UI'
238
+ b'VYQJRMoYs4vhAjnFq83GW9ef+7vDw+npEIFNc5KDRyxuWaxbvLfe+5JyMgsnrKobrPm2VaQQ'
239
+ b'wtilP4UIJWVJGSmWEWgqxUvRREnKKq4VVXFZ/Hk4P09mhn5Jbh6Cjf0451Aq3ez3XFa1ZGU8'
240
+ b'9MPpknJYltEHu1hrSq6uXyREXjVlMFOaSy6FAxGM/o//0//w/Hg8Pl9ShOjzMvvoc9Os3739'
241
+ b'1Xq9r3RNiLj7dP9//d//8eH+AZBwUuZ5GIbh+fn51J+NswWh3axUVSEldd1sNxuttPfBmSWE'
242
+ b'ICuhKnG+nA7H+2E8WzMBJAC4eXE9DuPhcByH4XzpvfOMC8VUXXVa6fVqy7k8Hs+PD0+Hw/l8'
243
+ b'6hEpIqGUCa44E5QwKBh8cMsyL9YY73wpmYZEvAMfIEQkKJRqdaWFlHVdNa0mjCChs7Epga5q'
244
+ b'XdWMi5Rgdk6qhlAeMxjrjYu5oNT1arXq+7NzzoeYUyFIKRdCCMYkZTIBSUCByIw0JrK4vJi0'
245
+ b'mOw9hACAnDPJhCoFc8acijFL9KmqKiW1tcE7TxnRlZBKSFG7EIfZIDDORQieceQUtOLrrmkq'
246
+ b'lbz185xTYrxiXJaQnTHW2BR9iaGkyCkyirvt6u3rV19+8eYvv/36r//q269//SWj3Pu0XV39'
247
+ b'+stfVRUfhye3jBQgmEgBBSXeLZfj0UwOSyWqNegamFqMH4ZpnBcbfEo5pBBSmM2UIalKSa0L'
248
+ b'gLXmMs625ERQN5VQshCMKSAjVAhW8XXXXEd/mmeTA9uurglSyXVwOcdy9/n++fn4/Ycff/jw'
249
+ b'4f7+fhwv79/eejcv1jwfDsO0xAK6qpvt7u27X5WcOaGVVJjQzsv5eHw4PheOROL59FxpxjlG'
250
+ b'CC7MUvMY/Tj2iCWlEmNumrarNpvN5nI+EEKEFohU1SKWaE2gEjmjiioAkmKOOQJAjDn5wJv6'
251
+ b'8BiXaRn6cmmibmoosuS03111DcRMCU26ItWKURmR8MPDkAuvmoqJajbJBK9VfXXVUcrO5/Ni'
252
+ b'jZSyXdU5Z8oEcml8EVxXlZScScG55IxTwshkFiSSM00QXSHR+nl21tpaKMiIpBQCWnFKpZAg'
253
+ b'Yw4hxpwQoqo6Qvk8jzE4yaFuSQjlfJl8HBmttF4JKWMMi7kEb5xxfkYsCeO060Ql95cFfMbo'
254
+ b'bc6OYSEUC2EBE+OEN/L29vr165e79WZ/fQ11C7MDQlW1ut6++uL923l+PjzV/YUss02QXr14'
255
+ b'efPiWrIEhSqhBWlJohPTgU3Oo/O55LNz7nQ5DlPPCAXIVVXVdc0JVVwMw7BEezg/LsXI6vX+'
256
+ b'Zo0sLea8LCNThf37f/f3QghC6tPh4Fz46quv2m7tvZ/6Sanh97///fd//kFr/e6LV3ZePn3+'
257
+ b'sAzPpOSM5HA+DPOSMCckPqbjcMECkjJE3K03dfUKSjLRns3Qj2M/9W13pSq1LNPT80NK6fj8'
258
+ b'w/c//NkYnxMgUMF1TjRnUErkEkO0KSUh6U6uvI+EsJxAyirFMgyTMQaRckIwM8ZbzChlRSgf'
259
+ b'pxCLF0KHCFJw3aiYAAir2kooGoLzyQld8VptupXQahjGvh+H0THBta6rdq0aHMYxh1zVNSH0'
260
+ b'PEy623OGiDiZ5TxMHKGulJaMIimQEBPjhDFApKnUwGRGmiGUVMCDCVBo8qF4nwuQVbeVimnF'
261
+ b'EEHm7L0/XcZ2fSOoRBCxRECWgU3GHg7PwU85mBwmG02JAZInECVnL7braQljXowxpaQc0uKM'
262
+ b'MfPL17dNo3abtql4Qj+bS5n7h8fD09PCubi9vcF1R+0zUrB2/unjTzeb12/evv3m6y8hmegG'
263
+ b'Z8PpyT0cL30JLiVG+KrdMmDTPFi7xBhHNwkhlBDJR8KRMd7WKw76Y//gsl91zX63kYpab4bp'
264
+ b'wgSyT5/Pv7TT0+RyjsscXt6usIEY4/VuL//5X/7Tf/qHdVfXjbY1PT6aGGMllXEBgBDKQ3T9'
265
+ b'MP3uu99fHQ+U0lbrq802Rb9fbaQWlKKQTIJMKR0Oh6YWXatTcN7F58fz6XT6/OnJu1iAnk+9'
266
+ b'jxkZEDIzXvppjDE2Tdc0bQUCgGhdV7p9fHyebXp3+1KrehzHHGkr9rXuYrKH05NzNhZQimag'
267
+ b'hCnGVd21uYCuGqHE6XC0Me92t1TUOabD8eJcYFwzJlLOSLgPWQihm8ZMxrhY11I3GySZEGKt'
268
+ b'NTkSLmRVUU7n4EvOlDIpORHcleK9BQBJ0WWbUowhmACpTMJS75dlHgjNtZIFSMqE0iJ1VQoS'
269
+ b'zgC1VionzJCrukPCn57PD48Pfjlf7eu208XHHGIla0lITvRyihKJyHj0YVkmwFwLqmX14mb7'
270
+ b'6s1rpdSn+5/7cRBCxZT6fg5BfvXlX67WLRAkFAokWcl/9u03tdgSzoBR6NZszCYMJsTny+Xz'
271
+ b'5WJLUoIJwZuqqpTw3o7jGJVOKUWfHu4eEfH29nbdrD8e7wVVizH3nx6Cjc45M1tEWgqySm1i'
272
+ b'8saYnAghytl0PveMka5r60q1ze1/+9/927/927+9vb1ZzHy+PL/86p931cqnyJViY9/PY8wp'
273
+ b'A/l8f79ZrUqK3trL6VDrikHhNVvuFmSotS7FPz8/9wMjhbTNpmvXKX4chiFlVLICyhCpEAKZ'
274
+ b'y8VQlqquur2+ElrZyS/Or9Za1zVloBu9btdcasrgdBybVfXw+a4fzlxSrSVQRjnfrq9KFnf3'
275
+ b'R6XJ/uqakGacnIusbVe58OQzItFVJ1XOuRBCkHLrPaUIBCiVquKEUiTMBm+cq2tNRatqGr13'
276
+ b'QCnVSnUEwXvvS4IkOKdM1SmHkALjFAqSQpEkn9EbH0OMCSqljXc2+KpWm02nFAdkzodxitY5'
277
+ b'QMGoyIUNSzwdTnf3T0LExvOuq+pVK4lWDCEGu4RVw7zNDJhgTYZaKKmaWla6WXUvXr0GxH4Z'
278
+ b'nk4OBXvzxZu/2lw7A117w1oJGGWjvv76qy9/9aqSVfI82BRi4MZf+suHn36++/l8GXzJEXNh'
279
+ b'BQWhEKmNgSSUXHGavffOuWlcvPEQyWq1cSY2zSpZYobwYI+UUsE1ZTJFYLura2utdY8+ZMHR'
280
+ b'Wp98uN7dxBSSD5fp/Pvf/eM0Xj4mo7V8+/aNktV+f005p0Iuzl+GgVHW6KrbvNhsNpDjcDnf'
281
+ b'Pd2fjoeSwnazz0AVEYqrlMEYb4wxGxdj0nWjqrppV0A4pdR6B6QQXq5f7EOagovdavXm1WvC'
282
+ b'6OP983I0yGC1qTebVX2ZlFCr9VYI9nw6jebgUi8ruHm5b9t2MT5mFgGrqot5IKSR6jpnFgND'
283
+ b'YDEpIMQFi4hCq4JofSilCIEhpBABCVOKEcqQURfjOCyzMz5kKTQSkgqLPmeIPiNDgiiFYlwp'
284
+ b'SjGEEJzLKTNaMjBkIDkrJTifoFCmGuOcYJxSmjJOs/chA1BZr0/PR4DABFmvOmRtCHG2xSfm'
285
+ b'ZnMeFyUK1IRXjDAKkBG9FqgIW7VbWWkmeKGEKa3rCjcbEBKsefHiha6rqulubm5YtwUTwVNw'
286
+ b'E/gFILWbNcg16BVkrU8j2CmHeQnmMveLn5EzQUg0LgaMlHjrrLWMoBY6ZygRjfd2CpdxdCFP'
287
+ b'i0tI0hJQSkZpiQQpq3TrvJ/nmem6ZpIty5SS44wSAjnnqqoeHu8/fvzp6fnh/tNnTmhwPkXf'
288
+ b'6fVQRsUuGcnxcDKLE1QQyYWQWujNqq1rzX/1JnjzT//02w8/fG+iFbTyLjIq9vut4DBPwzgs'
289
+ b'//jbPypZX4alattf2HeaUsx+NnO3vuGiDSExxmStpZTjNPNpPPbHzf5qveqUTwhE6qpqOySk'
290
+ b'anS3bhljhBAAaERLSE1IPQ1O6na1uQZQyxK4XCOJ4zSoKvkQYs7UBUSMMZdSnEuMc4AUQgRw'
291
+ b'qSAieu+HaUbChn4hxEopOaelFOdmAFh3K6VUQTYbvyyzc44QohhizqSg4poKkZPL1kMpjPHg'
292
+ b'EzLBlQCMxhcXM6GAhcbCo0+KEGR1Idp7U0hdtzcxipjS6WKWOfpGpFWtOCEodMVLAqmVWq1A'
293
+ b'SPAeCAUpoa5hmUsIu836+tUr0AoQIUeAADHkEAmTIAEKgrUwH8AxUC20LVlC1ajtfpUicQ6m'
294
+ b'yUzTMLvZO2ms995LqRSyGLPz4EJBKnXVEcqMjT6XwV7W+6vNrqOCIiUFgDEiJNC/+W++DdGG'
295
+ b'5OpK7vcbxmnwNnh3++LGLGZZlv3V1T/8w2+1VMu0LIslWZwv408ffr67v08xV1WlpCKEhOBX'
296
+ b'm+71m9uvf/PNu/dvC8su2m7dSVZFG0pOb9+++eLdeyX1+dj//nd/OJ7HeV4o4U3btKumXXe6'
297
+ b'VsjyZtt1645xMRsTUyZUxATOp36YcyaAPBfiXBrG5XwerAl13W62m81uK7SiXApVAQrj0jCH'
298
+ b'mEVdb12AYTRcaMqUDz5jLgApZWOs94EQBkhiTACYM2RAH+I8G+d8jMk7zxjPKaWYEAARoBQA'
299
+ b'BMDNepVS6vvL58+f7+8f5nmmlEopAHLOQIigjPvgx3lerIspMSFzhJhKKShExYWyvkyToYRl'
300
+ b'oEq1q/WesfqX+Qwi2e2vuODRJ2NcCoUgZygJcq3qVKAgZYRBLj5EQCSMgQtgHRYgnAMUsBZC'
301
+ b'AALpeDDjsPQGQ2IlQAxhnpZh7s+LLEiSK35JyYzjue9HH3yI4dKf52VK8RftCyFmF2Ax3roY'
302
+ b'QiZCrne7pltlAB9jQkooByypJBdDSJFxVnUV/cu/eXU6H8bpRCjUVUUJBruM46CkDCFc7a+V'
303
+ b'UtM4HQ6nZba1bmOinPKUilmWGBOjrK6rrmurRrdtrWqFDI798fPD5wjxxYuXu/ZqOI/H40FK'
304
+ b'1dS1lFrLhhKRC0kRXAhIcb3b7K93VSMA02rTtV2bEzkczv0wOZ+M8cY4RvUviQlROZd+/vnz'
305
+ b'6TQ1zQoLC6EgoW23abtNzPRymc4XUzfbxcScyWL9NM8+xZgDFyyXxBgtpVhrvY85Zx/isiwA'
306
+ b'JKWUS/HeL4tJKf3S00TnCAAjNOXgnS85CS60kjHGceovx9M8jZTQtq5rrQnBXHLOmAuElKzx'
307
+ b'8zQtszPGeBdjzjlBzOhDsj6FUGIsCFgAtW7bbgdULS4EnwjjgvOSIXrvrXfWRw/eZWuisdb6'
308
+ b'AIRRLguQEJL10btgp9k6jwQYY5Cym2Y7jGkcluE8ni7DYRyHIToDyUPOkEDSapnN4/3nfng2'
309
+ b'y+nT3cfHxycEQEatNTlnQklOGGJyAaZ5QeRIRSyAlLTdWtVVzCWWRAVLEHwKQEqhuWAEWphA'
310
+ b'+s2/2i1LX0okpDi7eLeUnEP0//jbfzyfzy9evIBMv3z/1YcPH/vLCIUS5G23rqsGETnjTdNs'
311
+ b't9vdfoMMY/KLn59Ojx9+/vHp/NSu67dv3vEoDvfPD3f34zD050vJ8PbNF1999U3TrXMu4zjl'
312
+ b'UqpGNa2WinIltru9EHoxvh+mxfjF+MW6EEvbbZRuS2HOFR9gHJ0Puak2++1rs5RxdD5CytTa'
313
+ b'5H1GKr3Pp1N/GcbLePHRhWScn7kk1pgYY85QCqSUnHPWOe99ziXGmAvGmJwLpUApEKwN3iPk'
314
+ b'nJIzcwqBMSI4h5IOz0/OmJKzEKxt2rpSCMVZ51zwIfkYUsiQC2WMM0EptdYzLgRXNsRpMLNx'
315
+ b'AFQIiZBSSICCMB0LWWzwLuaC4zTHEFLKwYWwRG+iM2VZ7OF4CDlxqbmqgDAf8zhOl3M/z8s8'
316
+ b'zsF5BsCReLOcD4fDw53mmH2CgAiEQiGl5BCyByXqFNLT46e7uw+Xy8M890qIN+/e6VozwRgT'
317
+ b'QGkIKRaaErpYdtcv2tUqltJPk4/R5+SSLyTH4ogoqmZcE+QBWCKqcIn0N3+9V4ze7jZrxZbj'
318
+ b'83I+lGCStdGF77//MRa8url9Ol6sjyHmeZ4Joblkay0gXt++ePvuTbvuCEVAjMkDgVLyOA7B'
319
+ b'x0rXNa/HQ398PJxOp3meHp6eF7u8fvXy9vbm11+9hxJ8mHVFN9t6vamvbrav37385b7nefE+'
320
+ b'QqExlpKIkq2S7e2Ld1jU4TDmRLVqKJW5CEa7VCRlmvMaqI6JGJuXOf7w46fj8XI+D/25pwSk'
321
+ b'EhAjgXI5n51xBEBLyShLMRYoSkmzLDlFAgg55+ghlxyDm6dKcizZmdlbwym0TUWx2GV2ZuEM'
322
+ b'pWBQcvIuOBuccc4txrrgU0xQitLVerVuu07XbVVVjAkfkg+xIBVSUSpSzl3deJ8WG0Is1oVp'
323
+ b'nhcze29jtIQAo5BLCtGnmDJiJjgsMwpJeBOBu8SMz8bEyfh+mIwx1rsYnDXTMp2X+RKcwZRK'
324
+ b'LIxKTilAMmY8nw5Pjw9aqqZS43T6+ec/TvNp1TZffvnVX/7zvxJcM6EQqA9xmW1ICQkHxDdv'
325
+ b'32y2W2/d/cN9PwzBuRATpVggdF3dtnXBaL1Fllebdrtf07/4Zr1V1aumauKClye2nCuMFaXX'
326
+ b'ty+pqr//9PiHD5+O48R0tdvvCKchOsIAOZG17na7/e3t9nqv23qz21aNHof+px8/0EL/5V/9'
327
+ b'y7/48i95Yj/84U+fPv2EpGTI1oZhXA6Hu9VKti3rWlyvqJBBqSwkyIo1tdpfrxc79kMfUzKz'
328
+ b'Q+D73cuSWFNdIeh5CmZOObOUEJE39f54CEJsuu6G8aa/uLu78/F5sbb88fc/9Jd56ufggjPO'
329
+ b'zoYWREDBWMrJmMWaBXLhjDLEEiOBIhBpSQyypEhyytYkb0oyJRlGEqeFE8zJB2eCM5yiZIwT'
330
+ b'QkouKZYUc4wxekIRAAokJAQBgVDGBJcqJchIckbCRNu0Vd0AEGs9ZERgMRazGMRSN6qqGKCL'
331
+ b'cTb2Yl2fi3dxWfxIFGm2HUgViUTZRqx7U1wSSyAPj+fn83kwE+NAWTbmzGhYrSsluWRVCBBS'
332
+ b'UBVbdarSAiABBO9HQCt4ysk4O1dKvri+auouZf7p88EYp6u6lGyspRS1Ftt1RxAoAYqFE6qF'
333
+ b'FIS6xVDCJBdKaSGUEEzV1Wa/2V3vWc20JmQt+NXu+ouOJe9ks8JqTbrbd4P7cvAR+fHS9/15'
334
+ b'1TXXV6vH+ztj7GJjQfQhjPOEgknFXr+83V99e3h6Y60d+6HV3be//gtW8Onjp4fPPy/LQild'
335
+ b'bRqzzI9P5//wH/53SNPti21bMdvwp9Px8fB5NVwxQQknuSRKsWkaRmu3JIJCKy54LXjLKUIx'
336
+ b'IUYoBJFYl2S9AlpNczTGzLPxngVPrLUEpXcuhyhrKQjPPtnFKeG7qybmnFLJOefgU06MMSGF'
337
+ b'zQkAKBQKhUChBCmjHEUsFnJKiVBKCSUMSMnFR4+JgCCKySKY92itNWYx1lKlVNNsVtvVaiWl'
338
+ b'zDGdLr21y9Vuz2WlZJWyQ8hIaauqVdv5ZeaMiCpbawByTFZQqrWMibiQFrNQjIiJ11W9WXX7'
339
+ b'rXNhGpen8+AfzzGQVdvVUrjClwDBLkrAbltXVVtp3jQ1ZNR852wMIeScfQwhBMLoarO+nE+E'
340
+ b'lu1qA/gFIWSahvu7Z+Po4zE8PJzN4pjglPJV087WxZgeHj8pVRFkba204CmlaZjnmLjkweXh'
341
+ b'vCQeC8uVqAjjlDL2q6/e02JlpTaburtuBUcuKkek5SuxprdEA9e//+6Pvz18TkvUevf29ZvT'
342
+ b'eTiexxjTsiwPDw/jMjdNdXt703Wrddfc3d396Q/fDcPw6e6Olvzdd9+dz2dE3Gw2dduVHIJf'
343
+ b'tl01jwt/9aKq5WwsJdOyHEM6b6/HerXmQkpVKdnudvXUeyyaoGRUMy6FSpQJHwoiApLgk5Ak'
344
+ b'RHeepvP5nEPknKcUjJl/85tvnp6e7LJorRmhxpgYvXPG2UAp5YSmAjGGkjMByimtZFVKAQBE'
345
+ b'JIAAhCIrhTqfAWPJSJFyKjgVMUbM2LQtpSz64GOIMUIplVRSyv2Lm2a11kpN0/TzTx+8dev1'
346
+ b'erfb5hCRUsoZEhG9c8557ykClEQJpYSX4GYzLcFIxbgoQDhSQYnMKecEkLFkhki7lng3Dv3Q'
347
+ b'X5aSmSCF5CqEYE0YzhOW0NR1aHVZCa2rWtdAalkTHuM8z+fxOM8zp0xrzfVmssUnG7IkvJvt'
348
+ b'OJm+n2jMLcUmxbQYx4WQorG+xOLMvNjFIFJKKeecEBA8aUl8DKWk5EvEQBVFScfBEDqwv/rP'
349
+ b'/zosfYOuVWWj2apWueBxdg/P90NgkWpRr9D2xM8A1o+kWu13221dt9O0DNNslsk7M1zo6fD4'
350
+ b'4/d/uL7ZXU7nw+H04w//69/+b/8ue1fMon6c7E0AACAASURBVITcrze6qjmXALnEmmDsL8Ph'
351
+ b'+cJ7NM7c3Lxc71/YEJVspKgIyYRYALbdXLc1mSe/TMm5wGhCoELo4IEQAoSmiM654N04jsuy'
352
+ b'lJhijFhACJFSopT+wreEEP+/MfS90rrSmjOGADkBAEDOUkoAgEIQf6EKJedcCiUUEAELAEFO'
353
+ b'GaUEShGMa6ViSs7axZhSSl3XTdNwKRgX4+V8cK4UrLhsVQUA58P5fD5KxZum6rq2qSXjMoTg'
354
+ b'vU3BASmEkJBiiDFEN0yhQKg0pwTbdkOgtmbKyZVMSwKpi6AB88xJrOpqu+mUUJ5TO/WG6+Dg'
355
+ b'cvFQRFVpyvdMNtOweG/neT6fz8P5knJsm44qsbt5+fNPH56fHxAxpZSw4ZRytbvZvAuJfPjw'
356
+ b'4aeff3bOF1JiAKSs4jJGX0qhDCjGGGPKtkAwDqlUhFIkGGIcR2Pz49PzgT0eHjrFaS18Xi6T'
357
+ b'IRCQMrPMz4+fT1M8DtZneHh46E+n5uaKJVm8uX35rmm7vh8fnp/6YZimqR8vlHRPD48pOm9N'
358
+ b'SXk4D8bMJfh/8Rffvnv9qlnvjPdDP83LOE72+Hh3vdtcjhfGCRX07bvX6/3V4/H8cHrqL2ay'
359
+ b'5qefHwSv6/pms75FkqbpOIxjCJxRKWQdI0UkpZQUorPB2pBDlIzbmKZpYoRqrbXWjDFvbQhB'
360
+ b'MK61ppTmnMdxLgkgASFEMomMEkIoIQQoIYRRTgghiDnnUkopOSbKGGFIQk6YS4ZCKUFB7bwA'
361
+ b'JRRQCgGQKYEYXMohzaPxLsbImEClAsAy23melRbRQ/Qpx5wywUwAOaEJUP4iy4QzVVfgYLws'
362
+ b'03yeRlCSrNtq1erteksx15WQlJQ4crSCeVLRV7fXb16/0bpNIWoluqaCkrfb7vb65v3793Xb'
363
+ b'LePl02N/ODzd39/3fU8KdF1H5UYF+tPd6U8/PNzf33POhRA557aWuijGV5Rzzo8+kMnMQBKl'
364
+ b'KCq9WTdCMKUkFxi8PR6f5+UcomV8req1qEQAZ6NxwS4XE3Ng//7/+Ltfvb399ouXHY9ghmHE'
365
+ b'Wikb86rVyFLI5XwZi18Uxk6yVlDdqNt9u7/ez5t607DDWf38KYyX5zDmwHE8luPxePh8H41j'
366
+ b'gMZHhnD74np/dft0Oh+fnk/PB8hZMFmrmhHR6Kpum67ebtbXuah+st/9/k9P5+P3f/65a/eV'
367
+ b'3slfb5VcVVU4HdxiQ6N0XXUUqxBCCAEAUgjBuhjjL9jJW5colVzM8ywYyznP4zSkpJSilCYf'
368
+ b'9vtrQlhJOUBghDMGjFLGGBYkSBmlnHNERKAAQCA7xzinlBAfXfQhQyKInLIQAgEASrBAKQlj'
369
+ b'9t7EnAgnWkmqtHOuP5xyzlrXN1dXWkughHOeUunPfYYshJCKMq5S9rkkTrkQghHwy2QXEu1y'
370
+ b'GY3tj3HXvthvdS1JzuPQK3ZRPL+83lZ68/7d1y9u3iDKELOU/KFrjJk3q/XLV6/q/Ut76X/3'
371
+ b'3c//9N1vHx/vn56eUkpds9p4GB2ox9Pz87MxlgJBoWMAa4OLLpPJ2I8I8jwuPuG4uAShqhRD'
372
+ b'7HbXTavaRiPEeR5jDtMyTREK36p2J7Vw0VA/0iyWMCdfWL8sD4fj9a5Zvdx1ra55abQihL1A'
373
+ b'6RJ+aaIP5f7z3el02q9XqqrletesayWy6ohmDSfz8cEX1w99FCXBbKbDIRnXqQogp3l++Pzp'
374
+ b'49V2mpZ+mD5/+Pnp6elX7794/823m7ZipFRKcapOhx6ZbrvNr979+vd/+tP9x6f7j73f4vd/'
375
+ b'/glL8/LF++AzY3KZPSOpETUiOmft4uZpdjYts/lltQYRlRSEEMgpOMtRaynpqgshcM6VUoww'
376
+ b'KIRSxghHSgggRcII45QzYMioIIwCRUBESgghBAggIYilJEyUkUIKBSyQBGWImHOMSHKJhJCc'
377
+ b'c4xxNnMwhjBW1/XrV7dCqBSLCz76FLM1pQAFSinnlDFOUOQQcoZSMP8C/gtoqWjXpkCtTZgs'
378
+ b'JJv8HFgoCFgG2ZrdbqXrbVvvr15cgVbggQt2vd/M4yXnUBCGaUz3d+fTeHc43D0fn4/nw3nM'
379
+ b'ObuIU4gPzxdEjDF23fpmf9U0bYyRLAsWMBHM6RwjxJxYrXyfx3m2mD3N63nymBbvQrTB2ZiA'
380
+ b'Si2qTOVKVi0VDBgFwXh2xdAYgDXrzejsw7l///b1zdubTSUrxTihz8eeuigVqZrV7dX+cjo3'
381
+ b'dc0E7bab0U7GDIwWVSUjg8gjcZeyxPExOaFLzFul2/WKQtGQlsvxu3/8B0KlrjtK8PWrl//6'
382
+ b'X/zL33zzdaXY508fp6Hvh+n77z9WP92/+/LXvNbvXn5xf/9YiQNF9nx/SPaPdgTGG4JyWUzJ'
383
+ b'gtFqmZbLeZzHaRxHRLpMZpomAGjbdt12hJDog9ZaCcE5T1zM8+ycC+iFZrkUSZjWFWPsl7fI'
384
+ b'ueCcM8KREEQEgFKwlEwIIUAVV6WklBJDhhwpRQDIKdiwcMGYkEgKASyYg/PWO05JwQKAKeX5'
385
+ b'Mix0IkQgpVrrfnTLsjBBq6qKmKdhnoZxt99iIZhLyiUHj5AazlG0FEQpgpbAeZIUJYlKUinr'
386
+ b'uqLbzUarDoBkY0hEKBTqBtHn4n22YQ6XsRdSCaa3+93t29cBy2UywzDEaapLqSoUQlgfVc5L'
387
+ b'zOADBUq4TilN3m/XjR0m5ESgzoyMzhhIpkT75x9Wq1YrnkukUBjFxcR+svtGFKSAhDKhCKGJ'
388
+ b'zcYEn+lf/9fvU8mY02rV3r64oYxdLpdLP/SXYZznGDIlWOtqvdqsum6/W2+uaokmuV7y+OrF'
389
+ b'+s3tvhZcAJwfH/vjqBl9c/tq0zS79eqrt2++evf6y/ev371501bNPC9t0/5Xf/M3/+Zv/uab'
390
+ b'r7589+b1F6/fMMo+fb777rs//e533x2O57pqXr56uWrb4PIyWUrkMvqhX1bdVomaIqMosKAz'
391
+ b'/vB87M89FHx+eoKUlBCMkuCdWWbvLJZMEJwx1iw5RcFZpRVjtKQsqUQov9RPBCmjjDPOKMUM'
392
+ b'hBJGBaOcUU4JLRlyTgSBUiaE5IwhYMkFATilgkvOGEFCkJCCOWdSkDJKKVJCGGWSi0pVSkoK'
393
+ b'NOc8jRMhhFFqrbmcL+M4OGODC23VVLLSXObgMEUtqCQlh5mBo9lJHruKVRK0KNtN/ep2c7Vb'
394
+ b'Mc68S8vknA2U0ALFTuM8j0IRXcthvNw9fESOL29f7K53BcHFePd4H0t68eKWMmqda7sWCgzj'
395
+ b'aJ2bl8VHH0tarCWMOG+P58PD4f44XJZgTI6ZIFVSde2h70/9ZFxwKScgQERCruo149KYhTK2'
396
+ b'v9obYx7u73Mp9J/9i1uAjJARwHt7Ojw/Pz1fLqdhGudxHsdxGKb+MlgTAAklBWI/D4/ejkrk'
397
+ b'3brWtZQlCwRvgkBY1d2L3W636V7d7F7e7NpavH558+LFzc3VlZaaAGxX6y/evLm9vqZNJbig'
398
+ b'KQ+X4e7u8f7uYTGeEPr25e3rV29qUR0Pl2VwlEhIOE1uvdoxJlPIx8P5eDzHGKGQ5KNWkjOG'
399
+ b'uUDOBIAzprnkjDFCCSGcUEYoA0KRCMalEBQJp5xTQgkTlDLGBWWMslKAIFJCCaWEUEREREIQ'
400
+ b'4ZdfDEoBhIKIFCmlNKUMABQI+X8DCfnlLIoUkRKKhBCkpWCKOaeklFZKKSmk1FWlpVQA2TsX'
401
+ b'fcohEgBBiaAoGTaabVdakNhosllVu22z7XRdy1WrmkZvNp3WDWMKgOVMgo/TNJxOh5Ss1nK7'
402
+ b'XelaCin21/sXL1+s1uvr25cZ8Hy5AELXrTKUxS6lYC5pXmbn3LzMxpqUE+N8s+3qRtlgRjOZ'
403
+ b'4Aojsqnr9aZZb5lUPpXF+dkF5yJSqapGVx3nVSnFOIsIQvJ5Ho+Hg3OOKcEp4RD90/ORZL/r'
404
+ b'dCt5o0UtRYIyD/P9/WPwsFpt9te325VaNSHYU4xzjtXS8Lpdbzv+6y9eVrT66cdHH9hms62a'
405
+ b'umk0l2xeRhNt9kkS3mj+6JbPP/34O60vTw8xOMhlGIbPP/08j/0yGeLj+fHxxz/86d/823/7'
406
+ b'X/5n/0VYyj/+/vthDNbDeOm9c6KIkkpwPjgfYwzWT9NESw7BpRhLKUIISlROJGNBShhjjCBC'
407
+ b'gRwJRU5RcpEiIAJFIAQIFgIFCyAU+v+5BDJBAgglkwIFEQFyzvkX3WSMEQAAYFgQCwEEyIgI'
408
+ b'+Ms+bSGUphRyhoIAhSQoyAkhVCkFBH0KkHOJiSBWStdCIdLoU/JB1pUWvJS55Ig5X+/3lDol'
409
+ b'oakpZ5lg4JwKLobRcymgMMpICtl7b5w1brn0tmCqO7m/WrddXdUt7TZQ6P2fPw7DxXsbo7fe'
410
+ b'WG+8t6UURByXkSEDgHmZjF06Z6qaM9YKQXQtM8NMWKEiZJisa1oVkJsI07BAyouHjHK3rknJ'
411
+ b'zhlrZ0IT5I4TKhn33rEvXr2kAMvcl2i6prm62m5qLRnWUgTr/GLGfphm6yMk4GMPb2/rEhZA'
412
+ b'z0g5H56jNZLW266Sb/Wm2RCU7WojBAOanZ+OZ+Of/fHUO5+WxZPoUynPd5/G06EEzxhBpAzK'
413
+ b'tms3rTYhJWd//P0fb1bb91/+sy9fvYkG/vzT/eKgajbJ+sPpcZmdccFMZhxHY1zJkUGBXDAX'
414
+ b'SilgyhhiLJmEViiSC5ZMCKFISAaIOYEHYIgESykpFiiZkEwpSYRSCojw/7D1Zr2SZMmZmC3n'
415
+ b'HF9juXHXrKyqrqruFpduDgENJEIDjR4FLaMfoCe9668JkN75JGgkLqA0JJtkd3U3u6qycr1L'
416
+ b'7L6dzUwPfrOagsZxgQxkxvXwhJubfd9nn1kAoAIq6FwvQZlRBGbtdM5Os8plrZ3fDDALE0Si'
417
+ b'gInIAAgRAgAiA7JaSCKqSsyIME1TmDyAFEXhnEPkEKbDYQLw9rJdrxfLalmVaimoMqL3U4qc'
418
+ b'mSQkGONkDCUFZs4JhtF3p3M3nGPyq1Ub/Pj48IGYEfl07MZvv9vthzf3+6ftAYCcK6MPfpxE'
419
+ b'BFFD8Joil0xEqtr3x7HvcpouVkvj7Mx1Y4yGC+OKgqCsFxemQrRZeeqHYzcp7GJMF4smTEPK'
420
+ b'3rm2bevC0TR29bE0P35xawz5cEGQXt5d3V2vNHo/nDSFnHyKE2gsi2K5XFZVJZKOxygxA4Rh'
421
+ b'mA6Hg2Va1Ku2uUiTcbZeLRerixat5jyYKQNY1NU0+IPvmsLdXV0RcVM4w4DA19fXm81liNmW'
422
+ b'1Tj4w+g/ub0zoPffvfKdX23uXl7dgNrzJFV7uT8OY989Puz6YZSkOWcmcrZsygI1a57vrhKq'
423
+ b'ITCGDKGqzIqnZWQCzTGkZNgpIqABQiCjggyoVgEKFAFSBTYAs5qVFQBAUBRUVVEJARQAAIgY'
424
+ b'RRFBFQAUEYgAgFACKc3vRWAkQiQDkHM2zhGXpSuWddWPXd/3u9Ph5uULSxx8/7Trcj674uZ6'
425
+ b'c9Uu3DTuVXNOEqIAZkTMElLyoqEsy6pcaNb+1B+PxxQ9klxtLiTAvj+M3gNxFuy78TQEW69f'
426
+ b'vvj07ublfr/98Pbd2/SWAeu6Pp/PWpZlWRKBKuaM0adp6A8pLRaLBHzc7vuQL27cyy8/W26u'
427
+ b'6nYtirvd7vH+4bDbPT3cT9N0PIPjFP1giJ2lwnFpm8uLDRMYm8NmvW6ai7qubm5WVWFOTw+p'
428
+ b'z9M0Zu8N6GrRuGp99+KFLRd+nMLY+wFVxLkEMKQwGtotm31bX66XmGXy05GyZBlyPhrW9aKs'
429
+ b'fvqlT5SynLtwf/+43+99luWiWTX11Xp56PrKmKvL9WeLiz/8wz80MW0fd4MXp3r34u72xeff'
430
+ b'v9++ef/0+OHDNCWJKfrAbNu2ZeAYpkVTQcwhhBgjKDgyTVVXZclEKAoARpGRCFBzTjmjAiIL'
431
+ b'ZiICUkTMzACQFQQIkaxYdIyIAIgqUZ6NWQAgIvj8DzgrZ6RAiABIRAyICIryUTtQAUFVZEDE'
432
+ b'oihERJM4y019sYjN0+P9NPX3Tx8Wi6Zqyhi0H/v7p0fnIMRq0RYMKGgyOwBRkDB05258/+FN'
433
+ b'WxeLdm3Z9eehP58Zoart09OhLF0I06k7J5mvy7TVCl21vrhsmsVhtU4+9X0fvC+KgonKomCE'
434
+ b'GCMRNc2aiBZ1U5qiKpvzOB32/Wnqxn7yY5Ck11e3imDZOmMvVitnePv4WBYUo5+mzhrT9+ft'
435
+ b'0wMpDN3JD6PZP7y7WldXq5u2LQ1od9z13REkV84ayMu2ROSivmjbWtBOY5omPJ2VmerFerW4'
436
+ b'CL5LPgAZY4xxLBCnmB2pQD/loyRs24sX119BtQCBdBr/7m9/sX188NP0yfXGWc4p+GmwjHe3'
437
+ b'15fXn3z1+Wc1mqf2YXfsxVQFm8IWFuCw3b19/TpkyEKFNcwsKYigZkGFnHIKUUWsMeVcYNhI'
438
+ b'FlBARM05AygRAZrnaEuAqMJgWFVUM4BRVdCUgRCRKM31LouklMkQIyPijLSYCBFVZ2ECsgIB'
439
+ b'KiAgASohCwAiqooqAAApERIBZtWcEyuiobqs7q5visb99S/+n/NYrJaLsmBHMEzjsR+qypZV'
440
+ b'RWhTyikbMkhECSCkviiXxpG1FQGn1A+9R1AAWDaEYHP2wUMMaYoJ1NQLa7I7UycRxn5CpUWz'
441
+ b'lCKrKtS6aFrH1HUdEV1dXVV12dbtdXMZg7x/eto3wzRBCvnD63f3D/ssxNb5cSCiy8sLwlwV'
442
+ b'XDr0563ELsd4POzC0Ktq8H6aJrPvJi+EpvCZnnbb/e4++6EpbFMXBMgVOghsypAppNRP09e/'
443
+ b'+fp82tU11M2Pbm5vm6YJ04iCtqyMc8DEzGVpACmqH2O01sKyATYQxSzry3W9rEzm6vB03xRG'
444
+ b'UwSlu9vr9fWlqxbM6Iwp68aM+XCe9ufXmcrdYchZl8vl0/5ERBcXFwBwPJ6cdXcvbzGEIKAi'
445
+ b'AFraonCOBWLwpIBEhCSqEiIRWWuttVkzAiMAgqAKARAooRrGLAoiqpJznLWrJBkIGNiYAmGu'
446
+ b'rYCKNEvuqjArFwCac0JEAVcgIcA8Za867/JhppRS4SzXlWpOKprVuPKyvP7xj3/8eHh42u6c'
447
+ b'wbo0IZZlXS0WCztGzWny3vvRWltULno7JsdmURSuajfO2AyFgLGEm/WiLGxZGVWSpSmKJiTx'
448
+ b'IRdlnQA1Snc+jeNIoG1T5ZzHsXdMTVu3bVsWThUuV+uiKCpXXF9ePT3t0ugleMdkiOIwjuf+'
449
+ b'7/7qr6tFw4y3t9e3V18WNxeOU+nseYuS49D1McZxHCELAOSU+L/7H/8bsc36+oWA+edvvk1J'
450
+ b'P//Rj9r1BVVtF+Tr797+6nfvXt8fpkRTwFevvn3/5le3N9UnL68Uct+dkcyiXVfNAsCEEHMG'
451
+ b'IpsjHA/j9r7fboeUNR4P3Hd6PoxP9zmM66Za1tX5cNzvdt3QC+Aw+WEcs2QfYt8PMaMX6iP4'
452
+ b'bDqvrz88fff6g8/K1rWLJue83+4RsKmaqR9SCCkFULWM1lhLyIAIYogcEQFIipIDoRKq5KxZ'
453
+ b'UJSAUEE0Q1bUGUFlVbXGGEbJKfgJQYrSWYMGEUFAM6sQCKEiCGgCyAxCKITCqMagMRBzFMyE'
454
+ b'yExMiICgCirGGhFJOWdFMta4wriSi+L2xZ2qppDZcFk2hauITMzoiqob/KmbDuf+YXu8f9r3'
455
+ b'YyK2zjhAB2iFXFIkZzdX1y8+eXl1c8vG5aTMrmibZrFYbNaX11c/+eLL8dwf91s/9TkHIs06'
456
+ b'DcP5eN5LjoUzjk23P03nnoVCNyKmbjxNYRQVQwgImLNKJMlh7JwB1OgKLBzFPF5fbyBhjtgP'
457
+ b'435/RCJXOR+DLS3/2X/9nwfBtm7LsiDk66vLuxefuKr+8LT9zTffv3pzvzv2w5S7IZ6Og5+G'
458
+ b'tpbr6+Xdi7vbm7vlalO4hk1puWyaJZI9nfr794/7wzkLA5Q5QdC83e9evfruzfevhmEorSmN'
459
+ b'RVBk7ofp1A0xC9vCFkVIebc7nPvxcB6GAEpFUrs/T4+783kYQ8wxxWmahqH3U1RVUFRNpMpE'
460
+ b'lTNmltIBDCETsQqCquScYs4RP/I8AsYZCwGRAhEaNkTIbBDnoqYqIpKJ0FpUyaDy/CMCoPOp'
461
+ b'SJUAnoNSBEBB54yXEGZQP5dCJSBAZKLZlAOIbCwRIxskUlIQdLYoikoFQsqWi7ppFSgLKjAa'
462
+ b'R2yAnQLnrLun3TiGjAymUCJkLquqauq2akOI4zgBgStcAk0gzhhLlpCenh4/fHhjS1vU9nDc'
463
+ b'PWw/xBxCnDRlVPBj2D/ttg9Px+M+QVJU5xwgjON4Pp/Gfgh+CsGTQSYd/cCo3vfb3aOqXrSX'
464
+ b'wafgQz8OWZKqZIllVZrvX3/nDDcM/MVnRiBF3T4du/7wi1/88u9/8Q+jD0nIgEW06PCLTz+t'
465
+ b'+GLZmLbd1HWbUur7/twPhYkv7hrmMuX+YXdGhU+pappK0HV9h4iD1+3j9vXrh+urq5c3Lxbt'
466
+ b'ynWxXQabtFyt1pvrarkcQnx82t8/HAGhqqlpVqmXU/e0PxyCT30/AmKIU87ZmAIRvfdkjRg0'
467
+ b'hS3LEhE1JBERTMY4iQIAIimlkFKa3QqIQoZAAQGEEgKiQM4RGEw2oCiACKRZARQUJeWcMz1b'
468
+ b'aWCWslBJlYRoRlWzeCqiAoAZgVREkee3z5pXBkAQJkKdR31AAIVRAQjUNtWS0UzTcCY7DJ0q'
469
+ b'B5+DU2PIGMNcVFUTJefgUw6b20+JxTUlOuvDMHRT3/dD1/vNmlWttY5MSGG32/VhqKtFvhZr'
470
+ b'CyFMgGRNSGHwU90sXr58MY2jZqhtZbk8HI7DcF6b1TCNZV05yyml4/G43W5FmYsCEIwxqoo4'
471
+ b'XxUzM4qWTVk15WLVLsfF+XyMkmV+fNs73u+2Enycxqf7+8eHx/1+v90dsujk4+bqdhymx+02'
472
+ b'TH4Yhrap7+5uqrIu3EKR/Sjb3eHd2/vvvn8bI+YMIjxMMUYFpBChn8ZRxFV1WTUx6ePTfrc9'
473
+ b'ZAFTVGwKMoWtalvUaB27Miv0o386dGSqoloCVY+77tWb9+8+bE9dvz8cEFE0E1FVVZo1heCs'
474
+ b'ravKOVtYBwCaRUQIgIhABBFFcoxxHrmZA4OJAXSWsmjWmggJGUEBkObC9axTADzvEcyqoJBB'
475
+ b'kUAAEGDORoJAAAIKqhkAVTOAAOIseKEiIc4qPj3/ibNFkZmZmJkQyYeQQlJAa6wxlpBTTmVR'
476
+ b'KwIgIxEbZ5xjNmQsWYvGorGCMEx+GHsALJwlpEVT11UTQ9jvj/fbx9PQp5xVuRuGkHPZliGH'
477
+ b'b79/deq7Fy8/+fxHn7myTCmPo+/7frfbC+jt3e3F5rJpF8jc9cP+cBqnMHftFQmYRKVdLm9u'
478
+ b'bouqLMry9uamcKWfJmOZLCWJIfnRj1kir1+aaRwxy9RP9+/e75/2xKZtlz/64iefffHlH/zR'
479
+ b'H3f98Pj0VFVlVZTLVbtuV027rtsLU9RZzTimN28ffvvP3w699xGQTc5w6sfD8XTshj5ENfY0'
480
+ b'jMM4ZUVA9jGPUzwPfrW+TMBR9Gl/fvX2/dt3H95+eHjz4bEbE5kGsHw8nF99f//m3cP2cDp3'
481
+ b'wzR5doYQEJGQgg855aqslm1rmFBBRHQe2wMVEQKcAyvnPMsERESqBB/vOgIiEBIjAoJIRpxx'
482
+ b'9++zkOREBKhCiKgCqgSKMBc6AZ0/RQAAUBCRGACAEA0SARICIRAQzQ0A0LnNjfAccMQsijGm'
483
+ b'6JOKMhnDRhFFVRQFVBWzZBHICjGmYZqm4MfJDyH043Q6nUc/lYVbLdefffrJarGKPnx4eHg6'
484
+ b'HFMWNMbash+m7X5XtfXqcvOwffjn736nBBdXF2VTIVHfD09PD4+7bTcOZV1e395WZcmGEQnJ'
485
+ b'snPWFYAYJQtokqwAZV2nlLqhW60vvvjRF0XhYg7LdbtYNaIy+PF4PnTD2RRFQYBsLSD5IGN3'
486
+ b'rppDu1i/+7C9urkkUxpXtqvlJ7d3L2/urq+ujFpbLjK6cQxhkkylqy/qxdVxzOWxN2Vt2YxZ'
487
+ b'h847pzXXfgyn7hhHX7nCkcFiMY7e78774z/evnh5c/fCeH367vVuf3R1Y6vGlC2XrVf68Pj0'
488
+ b'+t39/tiHmHOWsqmJCAFRNUw+pVi60jlLDCKSVFSVVAEg55xzJjbwQ5rC39cyhaxCQB/VKSVQ'
489
+ b'QmERESIhQFX4+P6kQgTApDkhIkBWItWsSqqigoIJBQHm2MrPuE3hWcEHANU5C4IqMeJcYyWp'
490
+ b'gGbGnEGxMs7U2E/9FCeRxGzZ0jRNZEvHhAhZxPsYpqHvz9bxFH3WoJBjGAlSXRYhaz9Jd9o9'
491
+ b'fHj/eP+UNCnzMMTH/dZZG3Mo0sKCgOH11QYNDsEH0dKZerWwxxq7vlzWVb1ImM/j4ENApJAE'
492
+ b'iZplA8baYUJnYhZTuKIs7x8fjDF/+Mc/v7m7G/vzMFWLxSJp7qdhe9pWp1IomS+++Hwax9pU'
493
+ b'RVHlMh674cP9nm1V709PhyOQfvvq+8P+1JTV7fWVD6FaLoeou+Nht9udTqfofQipWV/5MHrB'
494
+ b'0+CLAsAWbgEAEBS7bjr38bw/aYyLqrlYLI2tx2n67pvfdUHUlgrErrZVaupludhgtTLlYhzz'
495
+ b'sffb4+nYDTkLMltrQ5gKY43lnJMxZjaFTtPESICAiArz3VZVTSoA5mPxUUSdixRIJmRSQUB8'
496
+ b'LmoZNCMoikiMgomIZiszq6gkQNL5AxBVBJBBFQFIEfKz5DAnQCUiNKgAonPrBxFV03NsK7Ci'
497
+ b'CggCREWcCQZZawiNDwQyN44IGbIKMLG1gCISBXJSSZrCeRjGk5fgnDWWrLPMNiv/+rffjH13'
498
+ b'POxEpCjLcZp2pyFLXDValNz7Uc5q67pZrY/dsfPj4XQEAAKsFs0i+NKXzPY0DRUXHimGdB5G'
499
+ b'P0Uytqzay/aSSzf5aAtHxhzPp8vLq6+++nHbtq++/93j/kEoI8Pgz0l92VZFW5if/vSn796+'
500
+ b'7XfnU9/lKcYsPqbJp2bljqfhcNqezl2SfOzO/TgY45DraUzd8bTb7R4eHo7HIxPVdU2gyl6Z'
501
+ b'W4WqKqwz0zScui4RHc7+3YftcD59dvfJ5vKOELrjuV1evnn/8OHxUDWtdWW7XBOZw6lv7Sr2'
502
+ b'U3eOx1N/PA1d1yNb59w0+qE7aV06acWsiQAAIABJREFUuwQAy882TgninDOGiehZVRIBgJyF'
503
+ b'Zqvev8hYqgoIgDKL5oow2zoAhIgRRAVyzkpskAhp9snovEmNAEWVCUVnm8M8g6jPShbMTTdi'
504
+ b'VtVZ40IFBZUZbDETAAFk0XlQXyVhQmOMSM4pas7MaNgpaZA8K7eiSSUljaqZjJaO0ZocNY0J'
505
+ b'kgBz9HA6IeTkiE/HoR9yWVeK7uCn7FaXF02adkVTTNHnIaPBQ3d+/eb19fUl0tb7sW2aRd0s'
506
+ b'NxeqSkpj1/sukivAcpJ47I/AZmNNsawVJSQvrIXhsixffPry9vZ2HP3Xv/n6afvh9nRrC/P6'
507
+ b'7ffbww6J6mXDP/uzzy83lwwUJn+x3iwWK2Ndu1gmFXJm9OPpfEIAkZRjrOr23f3jm/cflGmM'
508
+ b'/h//8Zev375VxG7olOhwPJClpLlZtj4Fsnwex4BcN8t5nP327u7q6ma5Wn/11U8Wi1VZNwqc'
509
+ b'MsQok49Mrl1tIpVZ7fns7x+e9vtzzM/VjUDLsrDWqGYmY5jnkCisUc0zYGfEnLPmBKAgMstY'
510
+ b'M/6eAwsBmFBSSjmJZsNETAAgOc0aBCHNjGeOQ0RkYwiJZw74jJR0PpXO49IAhDgb5xGAEUBF'
511
+ b'c1bJs+7A9BFsISIA0RxxiqqiYh2DJsQMJCFO3XgOyZNBJDGOi8KEOPipXyxqa+jp8W1FuS54'
512
+ b'0RRlYQtLRekYYJqmaQoPT7sppXK5vn75+Y9/9q+q1eW3r18xB1cQMj1sH3/37e/O/ckVLqYA'
513
+ b'CD5E7wMZs7m8ur69W1ysV+tVaavgfZBkrBPSkHNSGf0w+unbV9/24xSzNIvFf/qv//XLTz9/'
514
+ b'eLr/9//X//76/fcPT4+7w25/2NvCbK4vyaC5vr4+7PYiqa7rECbNEEL4zT//dn19cfvipqyq'
515
+ b'um1UiqZy0U9/+/d/nzJ9+tmXf/TznwHAh/vHh/326bA3xvQ+1E1J+0MEefO371MOzHhxeXXz'
516
+ b'4gtRJFtmga7352FctqtmsS7KRtH6qCZkIpNS9iGcHh7d0ijjOPmcFdkUBSIySk45IM4JSVVz'
517
+ b'BiCIgCLCACIoIpIVcs4zH5zh/ByU8wualSR4NliJSIxRVYGEiHBWCJRIFRmfW9pzMmJCpNne'
518
+ b'jkwMM9LTH071/z/wXxy//8uZFigQwGy4IVDDAFlSjiIRMFuD5GzVlFOAYewYU9MWIP583BpD'
519
+ b'N5vVdVsUDoGom8b9+dQN/ehjDHm1uhBC4nJz8+LHf/jzdrPBD/cvh8PTq/8Qk7qiKCu3WLWK'
520
+ b'+XQ6dd0pCeQcDREZXm8uTOkM8QTUh4cu+pgiAAgDGhVKERSSlE05+G776vDllz9ul4uQ4te/'
521
+ b'/vWrN68Op23T1Jfm+vJ6c/Pihgy/efPGWDYP7z9EHws2T+/vUUlVv331zfXpbsrTYtGMPtal'
522
+ b'e/Hy8+z94fjLV6+/X19du6osy/LiclO3TU5ClgU0pjSm5EKsV4vz+fi4e3z39LQ/eVH88Pbd'
523
+ b'7vHhfDwd94fH28f9/tiU1fbx6XA8A5CzRUrS92MfpISlsHTdOI0BVRlmkpc0Z9GMBFmVCOYa'
524
+ b'N8cNogqmnOdMkSDLzO9EUBVzzqIZUJGMKsSU+NmCp5KSIjq2s0IjIggCAAQCiKogACiAqoJz'
525
+ b'dUOEuYB+vIAZRT3TSEXEpPJsEvwYWKQKqoRzRwj12b+qAISo0U/I4JxBhiQxhGkaumE6ry+W'
526
+ b'OOUUvSRWScEPBouLRd04qEsSY5J6M2SETCjWwDj2KSUGU5XN5dUNFIXPAoRZ8+h9kqiam6aZ'
527
+ b'MQOi9sMwPxtZD2yLkKS0Lnh/v30cu95a6ypn1URgUciYnXV//NUfMRXffPt9zOEffvlPv/z6'
528
+ b'N//nX/4fT4d93ZQXV5eL1bJdLTdXlwCw3T/NEwHi/ZQBfZiYuSzLdrUA1tEPZV1klcOp+/D+'
529
+ b'gURPx/O577/+za+RTF23//zdt0I08zUAGUKqGuND+u//h38nEn/729/++Z//+S9/9SvLzk9T'
530
+ b'jOl8PmcfjvvD09MTZRUBRuNswWwBgMgURZVSSjlMU5imyXsvSUUkhIkNMAJamGH1D4dAJsU5'
531
+ b'LEA054yic3L6wZKgz1YXmEUHZmYyMzxKKRkj/9Gs88zs5qFCUM0y7zoSRMrknNOPyWjmkfPr'
532
+ b'WdpQQkGdQZ/8fg4WBFFxLs2kmkEVRNGyNQTEhhkRY4w++ap0VVGy0XHoANP1xXrZNoXR64WT'
533
+ b'PJ6GbugO/fk0DaOPWQRUBlTNaepOu8P+KTM93r/fb5+MgZxDCGPOmYjY8Gq1Ksvy9etXUwwi'
534
+ b'4r1/fNyeTidmy6ASE7DatmwWNQ405THFDEDtuvnyxz968fLzT7/44hd//8u/+Ku/6Lvh2J1W'
535
+ b'F+vN1erm+ootAaIPwTpeLBbmfD4DQN/3jnBzvWnKKkPmks7jIJBtYS6qzf3b91//+ncS4ul0'
536
+ b'uLq53R+Pf/HXf+VciWDqetFWbUrpfD7f3Nx98uJWJLbLzWefvaia5d/94p9+9Y+/yjaBqnN2'
537
+ b'3rwbQtjtdpTROVeXTaacsxKZunKuaj05FEOooFlz1iw5pRQDE7Mhg+zYzBvbn0MHEVBmjft5'
538
+ b'zT8IEsJ82+eO8ccQQETnCmZGRE0phgSSwUcFsrYARFKcTS9EpAoiM/sDRJTZpDyzP0QR+Jir'
539
+ b'EAVxbnkDRomIKLOKphnwuf6qJlKiLM/XhUIMqlgUhZJKyiFETepMsWxNRglhbF2DkGP0bVNc'
540
+ b'rS4WbY0Qp3Du+/PjYbc9HHwM7LggSilJlLIpfNTt47tvfvMLWzfTcct5RFIGUNEkyYckoCo4'
541
+ b'j4L57VPyqa3aqqwVJIaUCJraAZhqUdnS5jEFiREzk8mcjsNpE6f19WZ1tf7NN9+eu269uWiW'
542
+ b'lpwM06hBS+vswdRNaQyZV69enc/nYexMXd3d3bRt/bTbjmlouCBLwFBXdd0ujrszZLy5+WS5'
543
+ b'WRlXns89KBZFXRa1IsUMZdH8m//i33714y/7/vg3//ffvnv//ne/+93Dw1NVliAqkkJIgrFo'
544
+ b'6rIsnXOVKef8AQDGuPlgoqosKRtrrSFmImQkIkZgo8aAsYw0m1JUREDVkvmYNuYen8w2kh8w'
545
+ b'0DNsR5yDYwrespmntX7IYfjREoPPavyMsYCIMCsyZ1KeB3QIn8N69sQoKP1HkJZ+LHeqSjhX'
546
+ b'7eerUhBFIKWPCU6IDDMbg8Zkzgmi5hjLooSsKSbLxpI9Hc5jd1607nB8GMbT/nzqx0FJjbXG'
547
+ b'IgEBsWUDEvr9w2//aayXrQeQ2KfQ2xLbthYph2Hqum4ap5jScrk8nU5hCsxmsVgw8zAMPkyj'
548
+ b'94KRJg7qOt9PeWS2VND+tK+293W7JC6HqY8SfAznvrPNogRKoin6vu/Pw/Fqs764uDAPDw8M'
549
+ b'uNlsNsvFclU3Te3TeB5OF9cbdtawCTkt2pXcSvSpaRovvmpqUXpeBBVPmiiEcHV1VTWrq5sX'
550
+ b'ZVf/L//r/6Z/E7fb7fbh4fNP7ngeuOs6FF2tF9eX15Z4FnJAEJ/NXGZOJIBIqARAICiZkdgY'
551
+ b'ZVCNzyQPJGtmJsBnhv9RKZ/jSvA5xn7QAX5/swEgS4bZJIxETHPP6wfENvsWCOjZdfyxOUjA'
552
+ b'z+QPnjVzFdXZHzMb5ZVUcB6Wn1PaD9FMz08CICKQIiA8a15ARGHyVW2NdYA2C0wp537qhmFt'
553
+ b'lkKASpYIM56PhyxBrlbN+sLUZTJmzHl33MXoUZRV6qIMgM4UyNIdH/ruyZQVcmCTLdu6dIiI'
554
+ b'qtM0EUUmQsXVam1MAUp9P9Z1TWQAYPRTxmgKa0tjCuMqp4oC2cd8//hBMgC612/fjdOUJO92'
555
+ b'T1jkK7e0hQPBlHMapiOjMczLF+yMvbm6WayWIaasmrKez30M2dlKMkCmzerqYnNdupZdOfkA'
556
+ b'Oi9NSN6HGLJIAtQQvUh0ztw/vP/Lv/z39w8fmrZatrXhXFe2LkuDaMhs1pvNamOZnTFNXTZ1'
557
+ b'a4wRUUDrXGPLJqnJCkM37Lb7c3dWUUZGmp/1POcAVGRiZ521ViXOdw8BsmSJCREsMagSETGp'
558
+ b'6uzNmvNQXTfWFYYZmBBQn/Wi7Kwjwzx76pCQiYmIjEEiNkyEz63oWfqU57WRH2kezh1pRPih'
559
+ b'JThP7jMzG2LS5w4izTtHmA0ZY4xlJjYWCGJKUZIiELGxdD4dqrJwhTVMzhgFZDJV26wvVkVR'
560
+ b'KGDX94fTcRx7Y7Cu3OPTh8kPzbJaX60UYoJoHZJJi9q6gog4pdQN4zD0IUVF9D60y0VV1d77'
561
+ b'oetRwRqDRMrKhlbr1cVm41wpgiHIOAbnmjdv3r969fbpad91A1tbtw0ZnMIIhCmkLNK27aJd'
562
+ b'pCyn44l/+vOXi8XKlFUS3Z/GX//2u9fffUB1kOzTu10a9fri9mpzW9ZLtC4p19W66wKia9sl'
563
+ b'KKqKtQSYnZUUh++++9Wb1/98cdEYI+NwKgoQ6ZiiZKnK5rMXP7q7ftkWVVNW0Y8xeoBUlpVx'
564
+ b'lQ84ThATm6KUrDnLw/394XAAhBBCSin5yMiaAUQtG1RNMaJmay2hMpExBCo5RRVBBWbkmd7P'
565
+ b'QqOIITbWIgLMXUJDxEyGyJj59gMZwxaNYTIw73NANGzm9wMjMpKZ0XwGBAWVWckUAZW5xedj'
566
+ b'RMNsDcykkpmYs6o1jo0hYkRCYEIzj8gaS8RKBslAljCFIeUAnInBWFLNCJhV/RTbxeqrr35y'
567
+ b'e31Tl+Xj/cOb168O+11Vmk8+va2XBRqd0jDp2Gzq9rLJkBKGxbJ0Ri/Wy7quBz/uD4fj0Puc'
568
+ b'g6ZhHHeHgxIpwGl/QsXlYgmqYHVzvbnYXFXlgrE6HobHD+euy/vtkKPJmfpu9DG1y0XdFApa'
569
+ b'VXUMMSWpqnqzvlosVs6VSM787Gc/Ow/9drs9950AKZAo7Xenkj0jbs+74TQ9PR3q5UKtravW'
570
+ b'FPazT7+o6iKl+O03v3n3fkwxEsli0bYLVxRWQVTz5eXq6mpdlfa0/7Df7TTGxc3l5eXlerGR'
571
+ b'KYzDab/fK0jTNMakwcvxFIgXF3VxOnZsjbV2sWy7bsg5n49DjHFRN6pzVw6fBSEQBJAcgShD'
572
+ b'JoC5CT0vAUUhAZmbJADwPFOacgJgVTKOZgiFaNAQGQRmmEsbwJzKlBBRUQEgIzAAkiLOli1U'
573
+ b'kI+Jcr4gzTnOfUJNWeC5FM6bSODZCPEM+WZhAmc3lkrSrAkzSkop5ej9EFIUBETLzAJAiu1y'
574
+ b'VbeLcYp1cE/bw3Z7kEyIfDoPxfZQrVyQPGiSYTLbhzVsoCKrTg0QmSwag+/G6TwNYwopqyKo'
575
+ b'49PpeDh3mvJ0HplIorDjtm2Xy/WiXQGY/nQa+uQnkUTJYxJRBRXMItM0MKMSeO917kdknKaA'
576
+ b'yLOZzbRtHXKYW2mr1epitTodzh9evx3G7mK5khQPxydhLbsmARZVuWiWq3ZxWS0Q+WKzmPwq'
577
+ b'S80MTJA0awwh+BCnpmkuLy/r0hiS/f7E1q02S1uYMYyYUkzJFuUwDMejn/w5RB4GcUURoydr'
578
+ b'BSGkNHrvU5y1b0AUhAzPbWadf55B1Xyj6aPjavZsyrPQoL+H5yAqKZvZzSDz+AMTEgHPt5wQ'
579
+ b'59kv0o8KJ+A8kTFzwed4nnVR1Tm+EZ9zl6oKJGKD+RmqExPmZzcFKRHyM5B/JqwEAMxWSWa3'
580
+ b'tDHOGsccIMVhGACgqgpEZGsXi8Visej7fnd6fPf+9Zu39wJMtj0dTrrtlrAIEV21Nha5qNE4'
581
+ b'WxYhTKdxGFKcvM8q2+Op9yGKZlQV9N6PMRhlY40trZIK6aKtV7ery+tNXbdDH067c45JYppt'
582
+ b'3jmG+b+fUuq6TkSIcRonIiKE4KdhsDHGnGMIwXz963+q2mZzvb795Prm7sUXn30epvj9N9/+'
583
+ b'4m/+7mK1smzOfTeEmLJPAMf77RbeVVW13b5rmjrnuFovrOWicKLp6elhHIeYQ47ZbaoXdy/X'
584
+ b'F8vjcvXu3YMfIjJP2eepT5Pvz4PlIiU/jj6kol0sLqoyRTic9peffBKT+BjGcQwhzGyRiIL3'
585
+ b'AD886/iRuCmIEgPOLxAZCVDxI7N7Tlc0T3OhKjCSIcvPVFBVclYVxNIyIzACKxAiITEy8swX'
586
+ b'9Ad2OZ/zB7f7D5Tz+YMADRjMzx1CQiABEkBGEFX8/Xl+/1sz8CdCJGtMU2rOmnMmHefYKgqb'
587
+ b'ieY9vNvD4e37V4d+P0W9vL6uVhfC1pbcLGvpjxfrmguIeQqZrLFEIH56//RUF6UgDOMYsiBb'
588
+ b'Qygioe9dWSyrRWFddzgqIjIs1+s5B4MSI1VVtVmtfR9SEgDaH48xRiUBgBTTNI4z15oNS4g4'
589
+ b'b0Tquul8PpuY+k+v7r76yY9tURjjrq5WjMaxbO/fN0V5fXm9Pxx++euvJefLq2vr4P2bt8Nw'
590
+ b'6LrdYjEvbCUydVFVZVk87bb9MCkKI7O1ddteXt2WRW3Lf3h4fLM7bKvCOme73n94ejRYSGTQ'
591
+ b'grhqFpt2uej78X67G8dRkJCpqMqyqpjZ5xRimH0IiEBMwKSIICAic9IARAWBrDxbWLLMeil8'
592
+ b'DMF5+TqqznQTdTbBIwDobN1jnUUvVCBCJrKEaCjP6ikKoKAQfuSczCQfW9DE8GyIQIMKs+eP'
593
+ b'5h5hBv041TrPHSKR/hCHAEmeAZsCCAIiz99F07bt8XiIk69coarn87nrumN39FnKdlUt1qvL'
594
+ b'DSJS2drCkIF61QPL7vi4PRyb1jUXq4v1qizLw+M2I8WcxpiCKJnZiq22KIgIGLKmpCmE1I1d'
595
+ b'ylGT8WNgnCpXf/HpF5v26sXtY9+Nu93BGNOPI7DGGH2cMuSUkmPOORNiXZQ3l1dt2z7uCu8j'
596
+ b'//F/dnv3yd1Pf/qTy+tLkZQkhmk67Lan42G5bH/06WdVXd4/3ndDV9als2YaRyIEUGOYCIfR'
597
+ b'q8JisVyult04Df0YQhQFY6y1BSKPg3983E5TTwasZWtZVL1PflQ2DZsaoECaF8DasqmTgiBp'
598
+ b'1sPxOE6eiWPK83Y9w0wI1tqyLIhIcgYQxmeQrlkwK6hClpQSP6tH/0JYAhBBJjs70JkZiWfN'
599
+ b'YSaC9Ax8iOZRxHkhw1w4Px4fK6w8p8wsAhlEcZ63RoYMkmXu4SCSgs7xB89RNTuyAACQCBjZ'
600
+ b'MBuLSHOBV9UUU4hRRIZxyFmqqnSuyDnlnIGxbOtmuRAkH1I/hinklHR/Oq/Wm/Mw3D/en89d'
601
+ b'u2xuPrmt20YkSZKyqKLoMEzTFAQAkQBUc551tnmmVkUkS0pxsWhjymEIRLReXlRVk7OkmEU0'
602
+ b'p8TMVVWWha2qyjnLRCoyO7/LstxcXi6Xyyziveef/OkypmCsQUIfp5mCd93p/u3bxaJp68o4'
603
+ b'RqK+P5/7k7W2cAWoppzLsrSuHIYpZ2hX6+VqU9UNovE+IpGxDgS9j0/bPSIZSyl70MDWADGA'
604
+ b'zZFVHVLJpgTADFLW7uL6UoCV2E/h/uHhdO6YKGcgopwSG8NM1tmycIgYcwIRi2SQEBBE8XmQ'
605
+ b'UFJKTDz3bxBR/sX4Ms383jhjLBtLzMRMhuXZCYMz3Xu2H6jM5s+Plr0feEN+tj+oKAgDzJva'
606
+ b'ZvFhjjxmIkOqoioCAgSKKgiKKrOTdb5A+ywGz10EZFSArHnou5RiTtlZW1YVAKpK1VRYsBKd'
607
+ b'TudhmGISEcoZDsejMa7ru3EajKF20RSO+/G83z1ln1UhhjQOU/BhDl9JOcXkyBbGODbGmNmW'
608
+ b'aNgg0XF/fHx4OJ96yNqf+9evXr/67lsmmvwEqMiECGwYCUUkxZRjnrwPPqScY4znrjudzuaP'
609
+ b'/ugPHrZP33//3eF8YGNWq1Vly+NxL5pjDG/evW7r5tNP7g6n/TevvquqYtmWYQp+PBdOqtqp'
610
+ b'0DDFvpseHnebzaZpV0SPmJWEh2GMMTKbonTG2ePZVyXakuKUu7E7jzn62FTl+nJd16WoF1Xk'
611
+ b'mUchGSbDzJxBZ0foD7hk1oZmqqWqhpBmYeC5JP5/QAwzA+G804MRgUnZKJMYUibl59+bvTAJ'
612
+ b'lUFUIYOQiCSZ1VNAAaUf3H6gagRUMgIoqkFARZQsKiLiXJ1UAAAYkEFAFRQRsiZVAEUBRSCe'
613
+ b'x7MJISVmRCARVVRGtmwqV3TEbb0Ypj7GNKeElAM5VtCsUVMui3qxWBVlpQhFXR1PWxEobB1T'
614
+ b'Oh+7aTooxRyDTKm0xUyUDRrN8+BHMsiVKxjQ+zH6IDkvVqvb29uQ4jT57nROUdeLjbNF13Wn'
615
+ b'00kVfYwAoAlCDsikmlNKRVFoltGH/f4whXg8npHZe8//0//8315dX6WUkDBL6rpzDvHp6TFM'
616
+ b'vj+fl4vlp5++FJHXb77fbbenU1eYsuu9s9V/+W//q5///E9fvvz8H/7xV/0QxiHs9wdGbtta'
617
+ b'Ux7689D3h/3+w/2H/f6JKN/dXi4Wzc3NzXHfHY/D4TgxVzEhW7verIFUIG+uLi8ub7thSiGl'
618
+ b'lB7uH8/nszNFjBEBjDEI6pxr6lpiGvuBEApmkEyqSEAIIllnH+Y8sGANMwMZZEZkIKSi4KK0'
619
+ b'ZcnWoWFBEBIhFRU0RIaUQDRnzQr6LJEjGCSVlFOUlEAFQVKKczLLKWgWZjSGETEDxJQAgZwB'
620
+ b'xphTVgFDCSSpZBAlAEPGWbbGzDHF89wLKWiMMUkylgF0fzzEFKuqSjnFGI0r2BBQXqxaw3YY'
621
+ b'hhwlxBimuGzb7ePjw/3b/f7RGm1qZwi8H/0wnvenFLKfQhgnAqydQ9EwDAz4+d2LqihJcbVc'
622
+ b'OevqqvzRF19UdT0M07u374ZhautWRY/HU0qpaVokSil1fXc8H4+n4zCMWTSGJArM1hjOWcdh'
623
+ b'8jGqgrm7e3F9d3s4Hv/h61++efu+rtsvvvjyT372r6ZT9+1vvomTX68uXFm8fv3661//NqVp'
624
+ b'hwdnSlMVzpaXFzebq0/ubv/D67dvEMmadVVVTbUsGI8W+vPh4Lu+O0yTFsWSuL28vHTOJc1Z'
625
+ b'U7Oon+6PcTqxs/QAIYwvPrm6ur1dLK77McYplmVZ13VK6dlDpzAvR0ghxsk755bLZZxG/LiX'
626
+ b'4/dUC4GIjLMw7wNWBWJiw9aSsUVTF2VdVpVzDlRz8DGK5EyGkqSUEwMys5mxG2RrHSMy6Sx4'
627
+ b'5Bxz0qTKzDSboCVrjklZc1DkorURVCEn8TlFETGFKyozxYAMSBnnbSOYkBkIC1vP+qxoQkFE'
628
+ b'ZVRRsMZY4qjPex+IiJ21lrAwpMCAzlhrCiBKUWIIhXU/+uyLzWUT5PTu/bc+ekn53as3lxdX'
629
+ b'OQpKRkHDjEnzGOIQvvqDLz97+bmq9sO5rtrRD6fT6Xg8C+h+d/Q+1lVx2B+Ph1PXDTHGaZqm'
630
+ b'ELqhPw+992OSrAgITIjWFNY6YwsT4+waImKTkqhgWdYqOH89s5/if/LVp3idWc3923d3d58s'
631
+ b'l8uHh6e//ft/GkavitaU3uff/vbb7VPXrNbeR2sLRmqa6mqzrCuHufe9DDLG6ViYrKRVWcxf'
632
+ b'X/T27fvD4WgKx6YoBx+jv9+9OY+H1XqRdPP+/kMU23Vd3/fjOD5Li/JsaxERawxkGYbhcrMp'
633
+ b'l8tehSXPaxZUFeahZUMoiMyqKkBEbJwr66osa1s4Lkq21jgzSwDCqBlBlS3lmHLOQEAMyEYg'
634
+ b'J1EFN3+fF4ASioCmFEWS4XLGJQSSspcMkpkM9wMkVGPM3HxKOSXvBYItCzJgDBmrbMSwEGdm'
635
+ b'IhYiJgZUNIKgxGIVBbCuqmoMY4zRZqcKcfIxY0lsLVelS6kah9idp5ylzOWf/smffP/222k8'
636
+ b'7w677eP++u5ivVk+fXgk4MJYyxVqjj740UefDJnCFs4UqjriOBuWlPrjqUPE3fEkimR4dzww'
637
+ b'c9su15ebrutEU0op5zwvTc1ZMkRNUJaEzAIQUhYRYwwYMq++e/3q9Vsk8/i4Dz4N/b4w1b/5'
638
+ b's+XVYtO4Zjr7GDNT8ZMv/+CzTz57+/7eukVOst/vh8l//+ptVbeHw6EsrGj8f7l6r15bt+Q8'
639
+ b'r6pG+tJMK+50YnezT3eTzaYkCiZA2ZZ+gGSAVwYM+K9JlwZ8YcOwaVmCJZsKlgxRYrPZJ5+z'
640
+ b'48ozf2mkKl98ax/SmncLC3tjLqAwRo2q931ePxzX6+s9pN3udjhuOR8JxsKAENROp+D328Pb'
641
+ b't1cpytMnl35kZijLmJm0cvWiySLffv9qvRm7dvDet23b9z3HJNpwyoZUTkk7q0mlGMPoi7kr'
642
+ b'rMt+eDSBAsjjdPtxLYiKtDa2KMq6KuuqLGs02pX15IkGFiFyzhTWKBTvvSLNTCiiEVmiiEiW'
643
+ b'vmcN+EjNB2GOAkmAgZMQKyJFnJAhZ0AWAYKkcHoCKiQCJQwpJ6HIBAY1ICAJcOIMCbWFlLOy'
644
+ b'E4neGKT3QjEAqKuq7Q4pxDB6VCSElnRMKGMgUFpZrUUplVIex/Hzzz/fHTfGQsogrA/b3tDy'
645
+ b'g+efbjf3s9lsMZtzSve3N4f9XiPN56ux6x8e1mPwm90GlRaU3o9a6+PxuN/v67quqmq/P6BA'
646
+ b'Xc8mqS0SkdEUFSTkNMk2FBhFugCywpxzjDnzFPSy2ezbvgejur4ffQwhpMRV1TyZPTtuDw8P'
647
+ b'mxw5B0BFIrjb7etGpSghBFdWzjltqCzdMLYV6fX6XXd4Yw2v5u5nP30xn/2oH9pf//avrm+O'
648
+ b'2/UNkVnMYxqzKUpjVFlXqODy6fny5Dx43O27LFjaOud8cXZW2+rm6jr5kHMW9ajXm+Sa1tq+'
649
+ b'893haJU2WkskARGWaTpPiDglRYlorWxVlnXlyloXjgkBZDoIM8fpHiMUEiCUlJJCNAoFJMWY'
650
+ b'cwQAJSAMCtBZjeAIMMUoKSMBiEIwhogMcQIfonAiZGVoGhaEQRlrlVJCiExjHMU5hIxiISki'
651
+ b'YqKotNKFtQUpURoUqfcLyAzAdV3Wfd0NA5FGJG3tbDljSkMYIDMoXVSNKeu+7/ftoW37ppmL'
652
+ b'JNLqk49/miUIpGVVd+3BOVcURY7RGKeV1QTOuQx4d79u+64LvXJFzKEbByIK3aCNffL02WI2'
653
+ b'70cfxvFwPB6Px+kPyTkzp5hSyImIlNYnq4ummc/nc9RqaLvNfnM4HPpx1AhGKdP2vh9iBsii'
654
+ b'bu82/8v/+k9/8sGn16/evPzk5c8sAAAgAElEQVT+zXDhNRYppfXdtt2348BV3SDJ8bg/tn1d'
655
+ b'165yOQFCjKFL47Cc6edPL/74j3/12U8+Fsl/9m+f//N/+Wfff3d3OMTuEMpqhpGvr6+fvXj6'
656
+ b'/KMnq+WpgNk8DKZXIERaV65YLBbI9CjHyyyZNdK0RZ7ebwrQe9933byuiEgedzxARII4veFE'
657
+ b'QBltnCWjs3A7PCpxg08ETIBIQjIJQzOnRALakFGEIjmmnCMiKsLalgQCYgEEWEIcScgYxayQ'
658
+ b'yNjCAOYYAgpzxgxDH4FQK2WIUCLHaYWejLPABUHC7EQp0kprTdpmgKQgRqUUglI5S0oxpaSM'
659
+ b'mdfNMAwxZyLKCCKilM6A2oIwjuPYdTsyWmttXfHpj39SFPb6+t3D9u58eaKd3m3Ww3Ak5XyK'
660
+ b'x67llEmrZj7jHH2KseMujCHGejk/e3IZgePNzX63IyStLU1JGTGGlHQIvR+998ZZYwwqIqO1'
661
+ b'QqWUtuXi5PT87PKDDz5crZbe+9dvXn7xxRfv3r3RVdVoZ8e0tZaH4P04Hne3X3/+9QcXTytb'
662
+ b'GCDOMI6Bmc/OLja7vY9Za21tDjHvDuvN9u6TTz5aLJuu3ZyuZrN6pnAMYXfcX3Na1rPZH/0X'
663
+ b'v4o5fvjs+vp2//LlTVk1Mef9YavuZH4yG8b93f3+uM8xGk45jKhPjaZdu28JoKnqliXnrJFE'
664
+ b'pCgKEBm7HhG0UhxTCMEYARFQBPDo/ZsEWZNoBREnWmnIiUWIyJKaBvIEkzQGASgDDn2bQw4C'
665
+ b'zGmCfEwnmSqZQNjGnCPn7P1glUUskiYS7SZPPOecQs5ZGe0UkVZAlFIau857nziLiB/IjC4O'
666
+ b'xXTrWeeqqsIClLHMKeUQInBWIpg5sWQF2hWuLEs79KQN5xRj9iElxWNM4zhuttu+H09PT5dl'
667
+ b'rXP66utvLp5eVvPFhTPD0G3v7w67PUMnlCgCg+SYUKSsq5xzjHG93SbOaLUuyubkxJVFJOpj'
668
+ b'7NebOIx3D+vZbBZSHkMEGKcJDhFZa0krW1SJMwCgspyBAbRxq9NTrbUgTIZT9Y/+279XNZUi'
669
+ b'Ms4c9sftZlvaGrIUplqtTheLJSCdnq2ef/DclPZhc1fUNmSvjPnok0/Ozi5ijHVdFIUqCvns'
670
+ b'Zx/+/GcfaRsf7l+33RoVJ46ZoJrVv/zV3/mdn/687UJRzZQymWGz33XdcH31sN12Oen9dtjv'
671
+ b'h8LWxrgYYtv2YYwIEH2KY5gUmYt5w5L6oTeGnDWIAgjW6h9MMY8rXkERIUJtjNaK8zS+G4Gz'
672
+ b'RpAwyjgkP+TggTMhE4EmMkYR4qS6UQAKCYFFJMQUc2ZgEfFh8KMnAGuMRnLGNU1TFdVkudeG'
673
+ b'itIxQOC02W2+f/Xqq++/fXt7e/SjF+68H3wYQxj8GEbPzBqAEArnEIAkK3iEdaEwAqScrDEh'
674
+ b'hBBjWRZaaQQomxoVvr159+13X99v7qtZ9ZPPPl2czLb7ze6wfXi4A5Tz83Nt7DgmnznFNPpj'
675
+ b'WThnqpw4J9HaWFdoY9fbrS1dUVWmdGVdl7MmCvthCMcBGU5PTp89fVoVJecMmQFFKbLOFoVz'
676
+ b'hTXWaqNBIQKF4BHEWioKYzTFMB6Pu3Hs1T/87/5IG5VSMFrVRZN9bg99346r09PlYrk6O9EO'
677
+ b'VaHR8nHYVQt39nShLP7u7/3yj//4v/r0kx+PQ3jz5ntXkNLD5ZPqw09WJ2dujIfb+5shBjer'
678
+ b'V09OF6enZ5cX2hXHcXz95nr0abW6nM8uHu6O282oaSapGDtxup41y9OzC+MqZ6r+2F+9ve72'
679
+ b'R0TMOReFFWQyqA2ENKY0aENFoYUFhQgfNzMigswI4qxBhuSD7wc/DhwDMWtJJgenoHK6Ko01'
680
+ b'RApFsoCkHHz0IDIOY9d3OSZEGMYQQPocxxD6cfB+FGYtigRLUzlTFq501hWFtU4n9v3Y7Yf+'
681
+ b'u1evfv3VlzfbLc0W1eVFD/R6u2lFtqO/vn84f/KUE5PAvG7ub276464gqIxROUkKhgQFgh81'
682
+ b'AgAbo5WiFNNjCUq+2159+e1f7Q73GX3IbblQRU3r/c133/yVK3QO3mhdVvXJ2eWnP/ppUVal'
683
+ b'LZpiJqwNVZIxJlHKtF2bhOtZVdc1kOyPh4f7u+PxoBj7zfFktvz57/zsZ7/zU2v05uHB+2E5'
684
+ b'n0nOs6Y2hd3utolTXVeZMyLPGjOfO8TAeSRK+/393e1VTqP23jMP4zgaXSxm5ccffjKr9+/e'
685
+ b'XsWQSJvl6QlzKis9P10Oqd8P+9Vs8bPf/UUKbr3bPjv/6MMPP3758suH9V1R+t2+7IdFVavl'
686
+ b'yWr0MYN52PYvEiiRh93+9au7q+vbbhi1KlfLC2uaqjh7uNlst4f90CmyZV0qMq6odpt99qEq'
687
+ b'y7PV2bA7eO9La0TyJBQA5EdQ4yT/nJRXAACgHj8aHicQUTJPTkNCJEZIyRjFaRzCyAMiaVaY'
688
+ b'GBNna20YPcekEXyIEVN7PA4xgnOMoBGcUo6wJGPRFKmIgVNiicAMyJBy9t4fu+6rb77vU6rq'
689
+ b'WWWtuGLf9Zu23R1aOvbPLy/KZnFx+WRhi367Hrpx0cxub6+Jc/ZjUTVlXVmlyJDVKgkjgEay'
690
+ b'2mQjiRkBk2SOfrWoQj7s+22f+fOvxrc3X439sDtcR98tZmfz+byeLed1Y2xdlYvyyaeVA+8H'
691
+ b'P3bHdpvCkHLf9qHtBm21dZBBRu9jToJADE+fPrs8Obu4uPQ+HvZtXZTLWTNfzK5vbwffo/Cs'
692
+ b'qRI8ytGM0c6p588vq7Lc7fdffXm/O+yv393sD0etqAh+8GPyMjJ7EH1xcaGV0doqpUBUUdgY'
693
+ b'wm7b9h2niPN69fzyw9vrw7uHt41pl/PlZz/9+fevfhvTw8Om/c1vvjk5nV2cX/zB3/qd9uiv'
694
+ b'rm76f/UXy5OT6On+rl0/tJJtZuKsdWlAKOSUmJ0zVdk0s8o6PfQtAgPnse8I5XS1PB6Pu92u'
695
+ b'qJwwA8uk4zQ4YRHkvd1Z3tsf1MQInehF02hqWgTlLJI5RUgp5CwZEUkHyaPP3vumaUQEhZ+e'
696
+ b'X+AQjaZ2jKjNMIYkrECyJjBaW8yCjBhSjJlD5pQZCGPmfvD7/VEBGiRlja6qpFQefEVGNw2h'
697
+ b'/slHnzxZnf7hr/5WgfSbP/9/r9+8Wy1mpih95s4HcqwYMGaFEUlzZhZRavKZUUg554wSrZa6'
698
+ b'0vLg+3bLml+/Xk96lcy57faL2ck4DOu7exG3WNkPP/i0cqAoXF29ffP6sN91AlEbAlFKOWEa'
699
+ b'h9j7vu1bVjifz5tm9tHlB5dn52VZXV29vXtYN/Plpz/68ORkpT///OtvvxnHwCDejzlnY6a7'
700
+ b'sSFdMutD62+vbraH/dAOGVArKkFyTmoYhuOhq6rml7/81d/523+42ey++eabw+FwdnamlOMM'
701
+ b's+akrptZXex3A2f14x99Fr08ffr06bOzH129+PWv/zXq/s3rm1cv3/3qV3/w4Qe/p2D8/Lfv'
702
+ b'9u3m+qrf78a+y8BuvxuPu217zBfnz7bbrVLm008/LUzlx6SUmzXN3e01CfCQ9tuN7w7WmNoV'
703
+ b'u+mEyog8JRU+xuKKgNKPRHWc1CmcYmYARlTMiZkFMoJmSSlA5hhHD4q0sqKRUx5DPLTdMAYh'
704
+ b'M3ETq/lif+wEMGQgY4AAUmKJOUMkyY/Sr0kOSIyUmZAlMY6Bu36sy+a4vj90e1vVRTMzIiUo'
705
+ b'qzCMMR17qZrh2I4x5SSuLGxR1It54gzagFKAKiQmYG0kA1AWZFDKWFCEKVASycvF7Gr7/dBv'
706
+ b'U+oF2FijlJLsC2vHzitiySnGKBlA8GR1/tnvvEihs9a2bXt/f++H0Vp3cnLRXw05I/iUQ0ZR'
707
+ b'lbHzZn62OqnrmQ9pvX7zzTdfdYfjTz/78cXFk5OT5evXrznl0A2J8xjD0rl5VRnrxj5+/cW3'
708
+ b'zDx43x3742FIKRVFoYMXP3Lf+WEYj8fO+5hSOr84c869e/dmHMPh0BpjZrOZIgiBFFY5pHmz'
709
+ b'+sO/80eHQ8ec3r77Him8ev0FqjqldHt7/ZvfvPFjbVXVtgbHPPru7nbrRynt4rD3KRJR1R6H'
710
+ b'upqfn59fXl4y093tw9COKYexPx52e/CsBCSnvh2E+eJk1Qf/1wpPnKydappvkUJEQZoWuTxx'
711
+ b'GYwynBM/igsS55x8HGOQyRRkDJCKMfkkGYmMPTm/KMvSabM8u9hsD8EPCUDhIwsSBLOgALIA'
712
+ b'CyYG0BaVFdSJERgENJJB1KTAAClBK1STKRAtCIu4xuqQ+93hu6+/Gdq2qcuPPv7UOXfo2uDH'
713
+ b'nNEnoAwobBBQEyAlJshiCJVSAMRICNm4OnuvAazBduybxfLy8rRt+9DFqnakZPTDyUn10x//'
714
+ b'pKhPgHk2XxI0qJXWehz7r778bdv5lPPY+5xzWdmmmp0UxjlXNrXVbr/f7/f7u5vr9cNd5Qpm'
715
+ b'btuWYxi6ToM0hRORpnDny5W19jj4/hiGmKYdmiFXuTqpJMz6pz/92W63Y4b1+j7GuF6v//2/'
716
+ b'/39ub6+Xy5N+6FLM+/3+9OT82dMXiOru5uqbr74rimK5gL7vLy/P7+/v/92/+3fH9oEZgs8i'
717
+ b'rihONg/Dv73/y8LMXVEd+y0ADn0W1hJEclGVZVUujaZJd9t1XVU1q5PF0PbffffVYjY/mdd5'
718
+ b'TP2ujX5UwkqrGLNTWiY10yRxQCLSKJA5CRDqCaI2wfoEGVOKzJxzEpGJmRWDjykaWwJQypJT'
719
+ b'8CHmnI1x1tH93bqqi7oojabNZhN96AavQjKFRqUUkzHaOVcUlXGFsSXpQukC0EwnFipbVPNm'
720
+ b'vnSKiFTd9gBEymhrz1ztqnK5XIqIK+2smnFMl0+ezefzvu8pJiWPpCIKmTQKMihQVgnLJP0i'
721
+ b'rUQyMqIoja4uZmcnZ3mX1tv7FH1dlYowmHi+eu5w9vbN+lrexN/tnz7/uBu6/X5rnSKiejZr'
722
+ b'mgYIvY8xjVpbTjGMvrCmckXTVLZwmvT9er1e37fHo7VmPmuI8/r25j6H7rCflUVVOiIi0lVV'
723
+ b'rdfr7fVdH3Q1Xy0XS4bc87GcFSxpf9zr3/3dn3vvRTIpbmZlyv7m9s39w9VisWzquTFu6MPl'
724
+ b'5eWnn356dnbRHY7/8//0P7787tXlRfqz//tffvjhx1dXb3/9l38eU79YFqPv+j54jynZ0XOf'
725
+ b'R6QkAM5ZZ2YgyuhqNitRaLPen1+cHNv+cDhYq1erU+fKMXofRqT5YjHPNhwfHoLvZkWjyQz9'
726
+ b'zlnLCBkABdRk7gOFyESoQJAzggBNaRCgFEWOAEzAPNFmhJVGgwYRJ347kjLGGFsQadTKkLLW'
727
+ b'VlWllDo5ORFOJ6tFSml/aImSFigKW5SVLUrjSm0doBJUDCokECJlymZ2koVDf6yaFBO3bc8h'
728
+ b'1UBlZSpTpMFXTV3Y0lp7fvl0eXY2jmNEIF1otDlnQUxMBjSSyQBqEt8zEmkilRJLksysjX5y'
729
+ b'8iKkvGuPhasJbYzRWruaLy/PLsYDA6RXr7/9V//6X/wRUzVrvv7mgFqGrl2v72/ub4igaaoQ'
730
+ b'JYbKD21OPoVRYgHJYlSSWeJYGDLLOVIuteXoh+M+xQHHodZqUTjn3KxutNbcHmI9u0uhRD1T'
731
+ b'VpBBetJoXVkR6vuH26oqQxz6/midXp3Uw3iMMQoEpRkpxzSmFDLHpqrOq9Xf//t//5/843+s'
732
+ b'Nb18+d319bv7h2vn9Hyx6vqds3WI0j90Q5/KYgnKHA9DUThOBpXRyp2snnz00UcI8ObNq7Zt'
733
+ b'icQaxcy3t7chBGPcxx9/vNus290Wxwggzig/9miKZd14zpkZ8NG/QEAKEUFpjSR/vaWeNoXT'
734
+ b'C3Fq5n9AzUybLp+SQtBGOVcaWyApAMogdVEyszEmDj3klGLIIR4PB6U1MinC99ZWzQAxS4Ek'
735
+ b'oDKDABCTUaaskCE/+AGVma4eBF3YEliGrluenMyb2Zjy0Pt6OR9iut1snCv7kABIhECAhJSy'
736
+ b'yjhjzCPe7T25dMJMhBRtWazml/fbHbE7WTwpSx0D68o0VT2M3X7fzebFsfNffPmXZVmeP312'
737
+ b'7LdEsD9sD7vtdvegUOaz0o89cEJgq1XtTGkUcRyOQ85ZMc8LS6UJwacwxBFBgwEOHJCT+MFa'
738
+ b'fT6rm6ZpCH/8TL+96fdtKFxVFHaGKiXfzGt7eaH+wT/8g5cvv9nt17vdQzMrnz49f/78KXP0'
739
+ b'fuyHTgRI4e3tzdXVVeaEmr/44rcxhCTxRz/+5MUHT09Ol9rAenMHBD6E/a7zY0Iw45Da3hNZ'
740
+ b'ZfR8foJkju1YV/UHH3xQVfU4+pcvv8k5aYN1U5+sVovFEpGGvttu10N3xMw5pv7QokhZVJNu'
741
+ b'XEAA0UzAFAEE1IqYI7zf2hLgJPsjIqPUJDWeIse11pOfVCtttTZTMJgIMkNmyWleVk4rjYCS'
742
+ b'OYbox+h7QCyLUpPSShXGOGuNtkY5rSwzOlcVRW2sQSQg0sZUdSWQlNFG26KojLUg7zm4gt0w'
743
+ b'ROEoMqS47/oM6GMEMTFJykLKFGXpitJaR6SUNu9JXUhIINAPw2F/LMsmJdzu990w3qzvgNBY'
744
+ b'2zTN3c3tfn8Yu7Hvx5gjSx6GLvPAEF++/Hocj2/efY8cYxi6fl8UOoVRKyFJ56eLj188S9Ef'
745
+ b'tpvK6dPloi6cATlfzudVkcfOEhQaa2fOTxYnTTNzRe3csmnOFovGVSfzJ8/On1cKZRwKRY1V'
746
+ b'paGTplJ/8t//vRhHVxjr1HzeLFezFx88vby8+PKrL0lRzvn+4e7771++eftqs3l4uL+rq1IA'
747
+ b'iMA5c3a+ev7iiXN29IMrCq3NOIS+8zkjiBbAiV2jlAYga+ysmQHAzc3Ny1ffde1eIMEjmkxN'
748
+ b'FmFldFM5BMkxhnGMg3fKFLYAgMeGY9L00mRyJkJQIvje/ULvnV6IqN675n9w18jjUIIJQSFN'
749
+ b'bmyrjdOmMEYypzD6oR/6No4jSrLGVEVB2iCCITQTB4CUQk1KG1U4V1dFpZSZ8jgUTWHAADQx'
750
+ b'QpRSRimjHiUWFRlH1pI2oLSQEgQAJaxRJiuGMcZZU2ijldJIpJSe0MrTiDjEGGNUqqyqRht9'
751
+ b'v12/effa1SWSxBi2281mvWZma1RmrptiuZz50FkLfX8Y+n2Ko1aikAEYOBRWoySQWDlbFgY5'
752
+ b'knBdullZni8XJ8vZvK7C2Pu+PV3Nnl1eNIXVABqxstYqxd5n70mMksKS1QBOkTVIkhTHwijt'
753
+ b'w+H7l98SkdaWlGDHStFmu2nbgzHO+9i2B8CUkt/t77fH1WxWl3VpHEUeD+0upPHYH4qqtK40'
754
+ b'utg8dCLbEHxOmJJk9EpJCL1z9XJxohyu9/cPt3e3d++IgD0gslJEpBpAZ+uyNHpWaq1Gezyg'
755
+ b'liFB4GlYRQSS4hR5ij/Y4x/NpRP0lgAJgBTQFHw6uW0YmZEz5KwIIBqlkQRhej0GpjS54lPi'
756
+ b'SfRsSRunBB7F0AZVEmRJBI8wt5QSYtSYYow+ZtJgptgUJCKsmzkRECpno/cx+pRzRlLKOCDF'
757
+ b'gEkAsygSAkOkSVA/witIo0Ke2MoaQab6BQCRLJIRxRiDLNbajz/+5PZ4+/n3f6VI9X2XmcjY'
758
+ b'cDhwkYQ4c4+kfNy8eXf1KXyaY795uLXWciZnnTUGJRZWDRGAuT8cbjk4qwtjtIjmrDlr0sxJ'
759
+ b'YsjBT0vG7cMaRAhwpN6SQYGUUo561rwwulIam8LVQHsOIaRCKX04rq+uXxVFeXn5FIDbtt3t'
760
+ b'9l9//bW1Rc75eDx672ez0hgnEIehe3t9NZstDGGU+ObN65cvX242m6aZnazOYszD4GPgEFKK'
761
+ b'nCOjAibPzEUcjEGlJWfph71IRJq87jzJx8ZxBNEiFgjmy9nJbLmoG51pe7sOcbSmeBQjZJ5U'
762
+ b'NI8WU5H3xmJ6fzwhTZZUJCIgIFHMWYjS1CZN+gVhfJRksUyWG2fcI7BfT3axlFJKwsLEmKcu'
763
+ b'TlJmxqQUSCaOo/XeR2sL/ciLVESgFGZb5YwKAmEiDDlnBhKkPLFLEz262JRWYDQqq40xhjQq'
764
+ b'VDIBc7XQ+0ucefoeiQisJWMlpm5enb148fzy8vLgt8c+GOdSirYsSGOGsSjRlZyh0zoQjMvG'
765
+ b'HTYwa9wwDIS6KhyBCX6UnFGkb7v+uFvMant2KilXtuCchxCqqjhdnXCOKaW3b95tN+vzk9PS'
766
+ b'uRASaWnKxu/bt+9u5o0iXTqnysoCpt3m3vuu6Uv99TefH9v9kydPPvrog/ns5HDoNutdimBN'
767
+ b'OeaR8w/Y1jz6ru12hG4yYAryfr9//e7d1bubppkbvHKuTCHnyARKOCEkYyj4VpQMPtw99PvD'
768
+ b'g1ImpZQxWGWQAChPBpXgE+chpDjTzlauwEIzxIsYOt9uDzFGQRLIgIzAhALIExELUAGyME6J'
769
+ b'ppOFYsrgQyRSCoCFULESjTCZG2AKiFAap4QFQ0TGWH50MuWJR+NMWaAM7cDTqQg8+akfZ2lE'
770
+ b'P+Bs3vvviQSQmZgMGjIKIYpQSIkEBUkx8hRBB0aJNmw0aY3akLHKAgEBTzuoCZv0g+ds+tJE'
771
+ b'pDQwdMK43YX98S7yGCWEHHovVsPl5TkBxzTWZRHSuN2ukXDWlKtmpYSttbe3tzknThmJcogE'
772
+ b'qJQNMSefogppSIyZSCtBW5QfvHhRNdXt3fX19bubmxshJ+TIVlaB1i4r7XM3RLh+9RpAi8Si'
773
+ b'NGVlQFJR6MoY3XXHsnTL1fz09PTTTz4Tplev3l1fbb7++lvvszElokqJmYM2KufMIDFkL0lE'
774
+ b'XFH96MefERZX767j2BcuWO2MLhXG6EefgxbNkK0FRZxSF7rB6MIY4wpyVjGzSM4cc87CCSZR'
775
+ b'u9FDTGHcq5DLul4sZ8OhSzEAKnksFgIAEoZHdON7oOeEtoJHQBEzEymFBDDFjzyiuR8fiTCR'
776
+ b'YIwibciAohwykFijefIOgghnZlZEejoBcWI9PPZwWmtFBh+7OgUAnIGzaASNCpTJCCiUNQpj'
777
+ b'BpwCOCe1tFJGkVGgSLTGKTQYpoolFGHOOVMC5iSCAlPahSABUh7G7bypX715+dtvf3v38AYL'
778
+ b'JCX74265aIyzwfc5RyFzHHb327tZ0UD2kNJqNvMpOqX7lEI/EJFRRmkjKRogJi05bh92QzEO'
779
+ b'fZ7N6svLy6KqV6uVj7HzoR0ji+oi5z6UrvJj2m83h+3OM4FV/Zj2+wNvx5Pl7PRscbJcLs4u'
780
+ b'9CeffmS0Oz09TYmbZnaqn66WT9b37W//6pu+C4i6cNaHDoCVUmPw1se6LpUujsdDHD2Aqqt5'
781
+ b'TnezZsF5QtQVCK7v2xREKymWdr6s5/UJMx0PwzhErW1ZlqV1bdvGwCEEjdFoTaitLXKWGMe4'
782
+ b'70yGCopJFzrZIkTylPxH8tdZE+8txQhAJERC0yRLk/qhCqePJkVaEWpBeI/imyz1CgAZRGll'
783
+ b'lNbWIIqPYRy65HsiUtMJh1M104S85cfLMjEzyRQJLQhgyCAyKRJEFIoqJ9I5y/S4Q1II0xmp'
784
+ b'FKlHE2PmjGmCSTx6E6dYjJxzJng/FAYAkZT4qK25uvlms31HJmUQ4ygxHrvDq7cj5ugKVTSm'
785
+ b'aaoPP3w2LxcEsNuuFZn79UMYAzBESUopXRhCFISycfOq7I6H3XY7DL5tb9tuFpNU8/nNw3qz'
786
+ b'3R77bggCtkIhZUtU9ti197vWj8kW1ceffnrsOnr3dru7j1pHrXrO6+NRz+fzk9Pz0s4f1uu3'
787
+ b'b66Wn1wuaPWLX/xiHP/J4bCrqurk9LxwF1VdLOYrVDplc3Z6OV80d9c3X3zxRd92OeeT5Vyr'
788
+ b'ojt2OSdFpbWmqQqFuZ6b8w+a+VlzefpEKXdzfX/97i4naRo3r2cieZ+6FHykoFVhtC5d0bcH'
789
+ b'RIk5Q8KRfRfGxMlqHf0IIopoYsJkEMEMpKbuahKRMsJknf/hYfjDk/DRkIhaafNDSRFOPCsF'
790
+ b'AE01m7htAiDCRGRdqRT6/e6RvM3ICIxMOQPFcRwFVOnLGKvkDD06n5UQImkSzEow42OYQE48'
791
+ b'EZdJlCZNoIgUKUSM00GXhBQDKgLSgkpQOAEryQqUvL8QIQOi0gDYtoeqLp6XJ3f7NRisXF0U'
792
+ b'xW67TiFV1onH2Xx+cXpRoF260/t3m5zCw92DMcYYJyIKcOx6sVoxNIvTDz980R0Pj7loioDw'
793
+ b'0B6/+e470mq/3zNCTkykz1ZnhVskH/suckZCB6xCCIhorS6Kom6q+WzpyoIBdVlVDLQ/HvfH'
794
+ b'8WGzPX7cMreg4uWz1WZ/c3pxmThWzSwGUGq5mK9CHCVnQ6oqyq493l5dI+Juu3n69KkxETEB'
795
+ b'9wTFYt4UzkTsM0RbEOh4enFqCoqpz1niGGMai9L6IVldDP1YFU0ch1TYs8XJq1ffD2334bPn'
796
+ b'htXy7HRzuxZmZ1T0AZPYwpExXnJSiIYk8sQwJkUMElJERcYYmph/P2A8ABgEmXVmYQRhQFFk'
797
+ b'tFbmMReJjTJoMAkzZEzyw4Hkx5g4E+nECZWyhoP3Qw41ylxmoBgUC1EGiFmSj9ZRJumP7Th0'
798
+ b'ktkQ42TDB1IAkiBJZpVYDCpFAACkCbWeKG9AkIGzQiWZJWdXVMeuPfZj3TTKaNAqMc6ai+uX'
799
+ b'v/Fy/NEH54ljN3a77b7WLmXl92k7tP6QLk716dNzSZiYHx4ejDE559JCM5sRgh/G7L2rqsVi'
800
+ b'NpvN5s1MBK+urqqqFuQQxpubm8SZiFLKQx8JNHfknjearPTksrNO+Rj2t9e2tKuqMFwTohLA'
801
+ b'BGMYdTf63WGMAcpifmj733z+WwVqv9+++ODZ6NuyrK+vHjYPX3I2YbD83Bgt94ebt69fHdtD'
802
+ b'd9gTgSIpSn08PFhrrTPCgUXVs6osi8OYy7JwhWHgvm+NVR9/8oEwbR7269tddxz9EKjUs6op'
803
+ b'jC3LorDm9uodsizm8xjj6EcAAUWucD52U26SZEZErXRAyZOjkIVFkAiVAgQRmdTAGd+TZX+g'
804
+ b'Zz9enKiQEFGTmvzIhGhQKUVAhCBJgInokY0FOefMgihESmlNRDElQE2QmEPOnpNjBGSNqIyz'
805
+ b'5JAiKY2SOYy9xJRSstoAaRBGzYAOFSNmhSQiCpGASYBgSkHBR/oXP8IvH7GDWXxKCNaZktCg'
806
+ b'0PPLi8uLk8ThzZtx3Q7c5vAAACAASURBVI+EpjINKuz7vh/a0VRhHq/vbrfbbdt2IXgUKY1p'
807
+ b'6moxm0/GpElwdHd3573fb3chBG3NMHQpBdRkjfIh5CyFdRwwjPH2+t4ARR+MspqIjHR+OJmf'
808
+ b'zmazYegHP2pNKXHfex087LYHrarf/72fP7t83nXD0PuHh41W9vTkEgBmTdwMLTC2h+Ou3J5d'
809
+ b'zDbb+7dv345jr1CMJURYrGZ+GF3ptNacMxGAYmfMzDVVYQ2VzpQa7TiGsR/LYvbs8qlT1dt4'
810
+ b'EwaJMVoD28N+HEPft/1wsNYiqvX6HhKcNnOGrBQaozkqSfxYGVMob5KJkD2VzjQUFZGJ7U5E'
811
+ b'Ct7Dsd7rl6dO6H33rZSaFtrTPTYNjfARyJx5svdPZrppgmmLYnoPEpFWAJJy8jkOCkUUkUB/'
812
+ b'6HRBWlBSyHFM48gpA0BIGZXSyioGNNNY5AesEdIjwo2njRROIzlkmRJ0JAvklEIIQRspnJGU'
813
+ b'HekXlx+8eHHJEEMX3n5/E8JYNlVZVqCCUbQoS80JOKFko0hbk3MGyX4Ye5yi+SClvF5v4+iH'
814
+ b'YcgxTfiTMYzzefP0xTNj1d3d3fphx5m0djnyzc2NhLSYzerKxRiBhBFcUa1OzuY5p5SMVSGl'
815
+ b'tjvqu9tt343LRf38+Yc/Ofvp3fDw6tWrb7/5frtbbzabcQzCSinDGdq2tc4wdNvt+u7uJsRx'
816
+ b'OZtpQ0VRXFycA8D05RB1COnQ7QpXLU6auqrm5aIqqxBCdxhyYFaMSo29PxzaYRiZsSxm3sfS'
817
+ b'OqWwLIuUUt93+/2+KStbFkohgzjnSEASK60JIE14IRFSiiH/4MXD99CiiTbzN0vqb/44rX3+'
818
+ b'JtkWEfFxXZ2BBXKSlFOI3vuUEiIqnAJ8lFIKHYCQJkaJHIcUlEIGTcRwdjInQgIeCGJ3OG66'
819
+ b'sR8UoDEOlRHNzIzCIlnAsdZa2wnVhUg4mfonmpdCfFTJPlK4mDnlSMg5+O3DGgXjmBUrrdTl'
820
+ b'ydNPXxw3D1ulbKlMNV9eXpycna3GcSytOQByDCKiBJIPu81mv9780HpOeZbMTIBKqZyz1WZW'
821
+ b'N+enK+dcjHHsxqEPlXMB88H74P1yPlNKcUpEKvh0t954H5VSi8VitVopa8qy1q9fXZdFvZwb'
822
+ b'YQOgL8qn8BGdnl5+9cXXwzikyE1TJZM3DxvII6d4f9cO4yGMXUyh16Ij1fPy6YundV1uNpv9'
823
+ b'Zt8OffDDmL2hQjtbu7lTjUQ6bg+S6GRxmrNsHvbbzWEYBkSa0GoxZtRIhhAx+MAxmcIaZ4BE'
824
+ b'WTPljjjn0IAQZhFg0FPw8g/wvcmz+v4zsWnpr1+O738LIoqFBEmQZBqMAYB6X14soAEzILFA'
825
+ b'zmEchJMyjohyjimMaAxwTpEDZK/JazSSNVRgFAlYcpkjCjgFThNxSuOQpvmpZIZpss75UQGb'
826
+ b'p5nbe04uiBCAmZjKk6ZwKi/ECVQpzHm33dzd3JpCXn3z2iAgQVEUv//Zr25vbrquC8NAKGfz'
827
+ b'eeP0/mF/XN+HrlPCWuuUEufIKVqt22MfQgDACWVgrQMAFHDOieRhGN68em2MGfw4dQ5EZK2q'
828
+ b'6sJocs5oq3jaNxm93uzu79ZVVaEyy1PGMXTdoLtjMkqNY/r8t1+FPhdFsd/vc+Ld7vDZZ5/9'
829
+ b'4he/++zph+uH3f/xT//lm5dvD4edtlFptVqtUg4Tebosy6oqFosFEeWc9/1BkGer+XK5Kspa'
830
+ b'k2u3YblcPj37YBj8erPZrNektHPlyeoMRRnjrHE555Tj6Ie+b3OOSpnVfJ7HdOiOxtnYey32'
831
+ b'kYfNiALqcXatp8CFx5rgx1ivH+rs/1dSIhmSQgvvPflasgiyJERUYB4hgQhEyEorBPUDz/0x'
832
+ b'nSDnnEOgR9FztEqSJTEoTqNIgWCQYxp7AiyMnVflvnCDgpxFchDRE2hLMgkFUYisgJWIBSSQ'
833
+ b'BEIwpVYTwhSDgADIE0BgWigqSjd31ykFlfTdzYPRWiQ/f/78bFXMikYxdJklD9H3+3Dcb9ah'
834
+ b'75+cnn700Sez2ez+/v7q5jpHJq20srvdrm27ieRjTSEiLKmuK63Ie9/fHqfzLGcJIRmKAFSW'
835
+ b'jgiGMKQ8skRBbIfx0PUppVM56Yb29u5uGPx2u9ZGN+3Rx3A7Dv/mL//TX43jeHNzc3V1pVD/'
836
+ b'8vf+4E/+mz+Z69U+dHdXmzSk77771jntjJo3S2s1KozJW2vX6+0Y4vF4vH9YH9peBCtXFGVd'
837
+ b'lrVW5WI2//3f//3Ly/PNZvfnf/Hn65v1MI4ApFAPwSttBz/awgmj0toYUxRWRJrFfOs3Mafl'
838
+ b'anXfX6MieCQUC+BEh1SchIV/6M2nPKaJrxcnDyipH67IaRiPZrpdMgvkPP1qoqHlCXxGwIAw'
839
+ b'kZinf5iFkaOAQUQA5pyD98ASUWJSIdqUTE6acylsFFUcBkGlCzeryrKwhBJTDJyVsSSsRRQy'
840
+ b'UgEZETWznoJQBHiin05bdWABBjRKZAqJTYhgjOrH8fs339rCxRy1KUefUOB4GNrdW4Sklcyq'
841
+ b'0hW1cDhst34cmqr66MMP/u4f/u0nT5589+3L//Trv7i7uY852cKNduiwjyEP6LNF1EoBHI/H'
842
+ b'wilj1bQFSCGGkMbRpyAIWqNm5n23JQJtMKa07fpjNyCic+bd9dvr26txDCkFbXS92WyCh6ZO'
843
+ b'8wqH3j/cbxDU6enZ+fnTSs9GCId9G8aotY4xHvapCMaclPPZSVkXIY6H7nj17k7b7dvrt/v9'
844
+ b'3hauLGo5dtbV82ZZufkf/q0/+gf/5X9NQADwy1/+6n+w9Z/+6Z8287lI2O+OfRe8j4vFgjMU'
845
+ b'RfHRhy8Y8uFwcGWhjC60m6+ah5sH0gZCzikLMxAiIuccOJP+zy9BBfh47DOjmhbY06N+6uLl'
846
+ b'sXMRERDmpJAEkTn89fGGjwPPCbo8vQZExBijlOKcQgClldKAKICJObAEyV6y/Tf/6v86Ho91'
847
+ b'UX/88cfzphFkay0gtodOcVbMgiAkSmFWApS1aAEUUVMMIvDUaU1ND4GQTEnXzIyACraH9cvX'
848
+ b'32ur2+3xZLnU1mmk4LMfWoTU1O7J09PLi+Vmc7fe3DCz02qa3yrA0rm6rKqqCiEMY1BKFa5i'
849
+ b'w8Y455wpXGH0frdOUbtCIcKEqY0xM0vXbkBwXi8RJSTvnHVFiTnMDIHTCtHWtvVd3/eKqGka'
850
+ b'ff+wZRaRcHt7O3Z9M6t+9tlnWuuT+Wp9u/n+9eunT5//+i/+4ssvvvj6qy8RIAVhTSlwzgCg'
851
+ b'+y7c3jz4MEwa2rKYMwiCbepV4eq+C17n508+0GAPoW1sdTo/n89WCNT3w7t31ylLjFJW1Wa7'
852
+ b'7/vhF7/4+er0BBGLohp6vzo/45Bu7x7KWR36qBCUVllkGkqxPDqep8P8h+vvceDOU2hYUkrB'
853
+ b'+5TK99oEFCQRJmIFSqFCRAGe/p8JszEMfQh+ynEFwuNxP4zjcrVSSr199+b6+l1T1avlfFaV'
854
+ b'RIBTXq8CRlmv12/fvr28ePL8+fNuGBigmc22h70g9H7UOZFWCnRMgQw57ZAEIYMkJK00KTsF'
855
+ b'JILWekxJKRVCmBxHh8OBKQSO87PVcX+8fP4MWZCUKwqUWNTValFXtWn74/qLm5RHVFTPmqGN'
856
+ b'tzc333/73e3t7Zdffr1er4H0ZrM5OT0vyxLJpJRQm9PT0+VyCTn5sY/Bw8iuMCJIpI2hGDgl'
857
+ b'f3F+aUwZwlg1TT8c48GfPTkDTp4CCpRzC0CJAoEq56XebvdFUaBTwzCgZECGSoxxV1c3+323'
858
+ b'vt+NQ/ji88+/+uqrw+HAzMIAoohGrQ5d6w/ttj94JqyaKuYMkhAEQMcgnEmXrq5n6+1+zKGx'
859
+ b'812/+d/+9z/9sz/7syRw/fptUdbLqokhM0hV1UYXu91+u9mXZelD7obBmsJpW9UziPiwvSlQ'
860
+ b'OTKgVYo5xUzaurKY6B3wPpZS3lONH3NW4W/sQ/6ztgsnqC1mAI2QEj4GdyHnLOGRXBCzwLRV'
861
+ b'jJzboTfGkNHz1bJyhSC0Q+8KQ3bpSpclH9rj3/7Dv9vMFynxruuo7QDAFeVS6cxAwxByCjlg'
862
+ b'REFlWGeOFvRkMUKYnhGTrYhEaOL0To2OUioDZE6iQUgSchZGQmtNUZWKHEHs/PFuu/NDG+NA'
863
+ b'CqqiqMsaxHRd9x//439kkJT45ORE26Lv+7ZtjTHNrOq7sRuHruuKojCEKbHRVoDHIWhDWpu+'
864
+ b'77uuL8uZcyWSlggxpwRslBKN56dnVOvu2HahY4YIkSQd+p0+Hjqttaqs1pizb9udH3oRFfq4'
865
+ b'3x+v3971bb9aLOq6qpw9Hjtlipxxv2v7bjDOJPEAUM0qZILMiEorEgY/+KEbKlsrpUKK33z/'
866
+ b'Xdt1/+e/+Of/7J/9s4l4MeG4QOjJs0s/xs1mo53pu/Af/sN/KsvSurJs6vncccgZoJzN3OxI'
867
+ b'QTghKY2QJYQsrN5PGf66tn7gvz/SJR+PMaUUIU6XGiICZcgqTzIupTJMugcBAUCKKfs4hhRD'
868
+ b'jFprUEQ+DL5fb3eIklIiZWxZMCcmSCAJxOecx1FEimZezOfBpwg48QdVUWSi+v/j6r16bNuy'
869
+ b'NKFhpllum9gRx16bNzM7s8t0VXerSwiKekAtmld44g/wtxA8I4FASM0j0CXUiK4qUkVl5r15'
870
+ b'3fEn/DbLTTcGDyvOyeyOt70jpGNi7rnG+Ox2K8x5OMWcFMWiYWtsNqUYLgjCS+0mSNbCWgp+'
871
+ b'KEtfDpa1VouUosf+MOcRGWzlLBlDnHOc4ggUpmEf02BY2dmc45zFFlitt+c7N47z8Xjc7Xaf'
872
+ b'f/llSqXv+2+/+8F7b5yb53kMMwAYQ5a48k23aqZpGIbesCWikgcRGKe5HwfnayFEZww4YBhj'
873
+ b'cBILSYA0x5nR2MoiYtRs6rpWLSLFV37RaoIAKB4O9//in//HX/6XP5nG+d2bN19//dtpGrqu'
874
+ b'6cekwqJ5UTooFGaGAnOYkxTrja88KOWY++PgyE5h3j3ane12N/vbt+/fn4ahbdubu9uqaWPI'
875
+ b'94fDan2migDGGnt33yNo13rDPkUZp1j7CsiK6ups198epnHwbKz3ljHGGFJk/AON6EO5t5ZS'
876
+ b'lhtruaY+wJCICiklRFVmlCLGipKIAiAZWmZ/KRhCmGNIORdQICRgY61GnkISKADgvRVi613d'
877
+ b'NOyrfp5DyrWvvPffv3odY3G+IlcRkfeVkskxuqapVDKUmOasijmLZJGcUljQWmOMUEYxKLIo'
878
+ b'pUQASoEFnWdrQEg5ppBLKiXnHAGlAKY5TePBea08nT961DRVKeVwOPWn8diPP/3y5//4F3+k'
879
+ b'pfz2m29KKe2q0wKff/nFze39/f39uN8TERpOOfTDEZQe7Z5s15tlSDWGQwiquNnuiGzTrmzl'
880
+ b'IYxhioWAGOeSXr1/O+cQYwYA4qW3CETE/NEf/7Lv90R5u91sVrWIoJK11V/+R//pH/3yTz95'
881
+ b'+kXXdU1V/eY3/99//9/9t//z//K/kqm9YzbkvWvqKkkIIZxOJwABhqpyja+IaBzHFKbDPagW'
882
+ b'Mni+O+eK/tEvf/7r3/5DCCmkOM2xrtswpx9/fKnIm812s9ntbw+M5mz7GAjfXL4/juHZs2eN'
883
+ b'r9IwobHkPNpUFFRS0aIMCFCKGOSPB+vjjQUP0AEug++Sf4uIpSQmwiWxFAUAl2L5LJhySinF'
884
+ b'lKeYpjAXUUQsWYGJrKvbBgCKZgCoa8/GuMr7tkM2Y0gpj7WPXbderTdV1TLZKIKKhFQZQ75R'
885
+ b'LRUCWjOPx2maiuSQo4m8kOUqViQTuI+T4gL5llJEIRcAZmOMU9NUNYNOY5+nxAp15SpvQOau'
886
+ b'bXdn3XrTisjp2DMaIhtz8L5+/ulnta9O03x5eRlSrmz99NknP/tHw9dffx2uY1VVxhgVmefJ'
887
+ b'sC+KMZVcFJBDzIdjL6JPLi5+9tNfrs92xtqXb17++rf/MJz2VeusNdM8hZRU0Bgzq56GAQCM'
888
+ b'Mfxf/zf/1Wa7urjYPnm6W6/qUtI4TuMwtb57+vSTZ08+2W63a7/a7Fa3t1evX70y7F3lVVWk'
889
+ b'0OLDMlhXXrUwo7eubqraeEDVWGKYRXWzXZPB2/u7r7/55nfffns89SmlEPLSalsK5CLMtmvX'
890
+ b'Z5vzMAdQUsWqaQD55u7usD8Ytm3VLt4QBJzmaZpnRTDOacqLKPhj5Ql94G2Wqesjzr7Yp5eE'
891
+ b'd8NoDC221wUlCmGewjTN8ximaQ4hJQFApkW8DohsrPMVMrOxrq6qqmFr2HhmykVCTrloVu3W'
892
+ b'Z67uiG0WLYDAZhFVFJVlPRXVVEIpKeUYU6isI+Kl02GhxIkNGRbAogpoikKMRQkBuWg49u9u'
893
+ b'by+n0wRFQMUQGpYUB0PFO0LM/fF0OJ7CXEAMAIPi2fnZdrPr1t3Zbuec64dxSS24vb2NMdZ1'
894
+ b'DQAhhKLCZFLUYRz74xBjCGEahgGI1qvtZ19+9dnnn3/185+5yr27ubw73LMldkYIM2ABUKJc'
895
+ b'ZI5JAMgY/hf/2T8x1liLMY6H/d3t7c311fXV1e3bV+9z1vVqSwAvXv74b//t//Wrv/ub129e'
896
+ b'rzdnxvqUwjj2OScA9d6sNh0RIkgpRUoiJEQtKU/z9OrVizmGw2H/+t2bu/u7+/3h8up6DqFq'
897
+ b'2pSL9bX3dVW1KhhjvthdrLutMbZq2/PHj4jtu3dvh2E8Oztr23azWndNU1Ie5iFLAXqI8Df4'
898
+ b'0GT5oI6H5WCh6gOL/HC2EBFgqWc1y2uAUkrOKeXQT/08hTmlmFIqUlSIjXWO2RpjEXHJNgYi'
899
+ b'Y12z7hbvj3UVGU65zDEAEFkbUiFr2Xk0xliHbBCJDC/DoIIgATMSk4BIzgaZkYw11tqF4V7C'
900
+ b'1nMRQCJjC8CUsggKYIx9P17t7y/TFA2RQfTGMKZpOs3zYZ5PQ38ah2GeYilkuKqr7tgfU87W'
901
+ b'2IsnT54+ey4KL1+9+va7725ur0/9yTA1bV1V3jpDCCHkec6nfpzDXLSolMWhEkKY5phSAeLj'
902
+ b'6fT28n0/D4I6hHkJE1sUm0jkm8Z5D4hcX5ihP93e3X73u9/98MP3fd+DMha6vT2+ef3++urm'
903
+ b'9atX//p/+9f/4//0P/zu26/Z2oVTKiXnnES0lCKiBNTUTUoyTmOYI4ASm5TDNM2E/P7y8vXL'
904
+ b'V/vTnkCub6/ev33TrVoVreuqabqhn5zzXbs6HE7TMIeQ2rZD5ru7u34YNuvNTz7/8vmzT+7v'
905
+ b'7i3bknUYhhCjYWKkHBMVXYRNC9S0HJhlDFdVAV1ENQ+sL4AhYABmXsTyqeSY4pzSOM2xSFIt'
906
+ b'CBlAmckath5Ul7B8NGwsG2fadXd+cXE87a13TdeQ4WkahnFkQ6tuPcZU1ZX1bskuISJirKrq'
907
+ b'oUCTwVhbtbWrPTMLagmJCJ2z1lq2vIheFbGoIhtjXQaYU8ogRSWmkUze7+9Ox1OKMadoDDlL'
908
+ b'oplwyfgLIeaYSASqqttszwjodH+8P+6ZiRkPx7tXr394//6NMWgMrlbNbrt+tNvtthtUOO4P'
909
+ b'RSjGDCpsiK2pmkpUb+/uTv14eXN1eX354s3Ld+/fpJIA9dgfUxEyRpFyEev8Zr01bMd5ZvHx'
910
+ b'6v3VuzdvD/dHw7ap1ljMPJW6as+25ze3d9999/3l9fthHIA0FymF+n6MMRnjSE2ci2QsQmEW'
911
+ b'JOtsQ2wAKUueYhzHWTJLBsPkPec05jI1tfXenO/O1l0b5zT2Y46lruquWY1zGMYQo8zzCIoX'
912
+ b'2+3F2c4Zk2OxpjK2zlljzJBLHKc0DxUxgkrOIsVaYwyLFFFBRmfNUmhjDCOjoiooE1LOBrGk'
913
+ b'VEqxzhWA0zgeh3E/TK7tbNNGALCm2WyrrhNQAHGOfeXYkjKYyvrKKIn3rlu11nJMIcyzihgk'
914
+ b'gWIrkyVO84isq3VXNQ6IFHROc9U2p75Hx2DsEELVtd75GOM0nIipW7WIAEhVXS9DgiDGHNkb'
915
+ b'IU2SXWWyxnEcXr9+k1NmRsVCVFJJbKyCc35T1MXEaLyx1ZKXufJtmML333/7m9/+w/c/fPP3'
916
+ b'v/7by6vXT5/vPvnk4idfPn/65HzTVpumtgAQY+18fiAmQVTmMKWcwZD1jh1bZ95dvj3s75Gg'
917
+ b'Px3DFIwxUwpFJcwzqLZNw8akVECBd883MaS6qj/77NPHj58xOW/qi/PH//Jf/uf/6l/9F3/5'
918
+ b'n/zlp599Oofp6vo9kDZtM45RRVWhZJW8VA8RLPrIpdMWtICqQEjzHKJBb9l6bwDSMB7nqa9q'
919
+ b'8+hid7Y7F4FpjDkLKKoiETtfDeMsCjkFRl21XVPXTExgFKmum8UFkGPIYYYQVDIB/aEWfpnf'
920
+ b'icgQP6zrDw+9pU+EPLEzZmnQKQj9OOyP/ZxTu9pkBCBqurbqVsoITFVdlxQMIy6t9Iacs2wZ'
921
+ b'ANgwqEpJmjOIECigqpSmrY1lVlCQpUcHVa01y95gnS2oxnDbtWTMerW2uHhDgA0b65zzzntj'
922
+ b'XUy5gBRVZQo5p5LZcCrxxYsf3r1/A6DWM0BGRpUCwE2z3e2eNM06JB3GOYSoCNba/d0RAAvm'
923
+ b'mONh2L+/fps1PHq6e/T4YnO27tqqrpv1auOtzamkLM16A8wiJaUUUlQAAZnnWUCRIKW46EyL'
924
+ b'FFTo52nKUQG9r6wzpZQ5hGma+743iCxFEXm93j59+li0kGDbrv7iL/7iH//yj7WAdfztd7+t'
925
+ b'G384DH1/muYMygAkIloIAFkxZymzqgoXEkyCSiRJcslauBDRHEM8JIFgDNRd5SqPiPM8zymy'
926
+ b's4rYj2NR3G6984ZZtZSHB3eORUAVja2995bNaM3DJI4sRcggAC4NNn/IPf/hkqgfi75VkRA+'
927
+ b'PBlDSn3fT/PAzm42qzEFRSACa9ksZYIEVVWZxWEGD/2/C4m22e2kFM2JjNu0XUl5nucQgkf0'
928
+ b'xhAwKFEqSBE8G0Iy3PdT27ZhmGLO3Fan0wlqt9nuPJm+71MWNo6tKaWgfSh5kiJLmxIiMltC'
929
+ b'3u/vp2mqvHkgprJoUZCcU3LOeV/h7d08RdGsKIbYkE8kwqYIRskRoGIOin1OZRjynI3yo23T'
930
+ b'XTxeBd0HkQSr1coYo6r91JdSLLiF3S9FgY0oxFR80zS+yvs7JFFDdbeylvu+BxGzrEW7T86Y'
931
+ b'ERClFGOp61aWzTCMABhDunx/9fr1q6ury8PxPuc4z9MUAgBaZ5u6NpZLyUvHWkxpUaFIyXlp'
932
+ b'i5LFtUACRUoIeVZJgpJTPJzGw/3x/dXtOAQmu2QAl1yQqW3qtq3btumapnImxjTNk4jUzapt'
933
+ b'OySchyGOQw5zyVE/SBsWvOrjdQUABLhQNMsyiB9KeBiRlkWPKZV8GgcFWG82dVt7Z5E4l2gM'
934
+ b'rlatszbNs7fG0Ick6rIkjIiKsEKag6RICpbYEoEIZCHV2jrH1hF564gYSpGSN6t1SYEZUZVI'
935
+ b'iTGnmGKovbfWFBW2brPdWutzUWIGImSTAchwAUBmX9W5pLfvXp5OdwiiJYd5ECklFxHISStf'
936
+ b'xVj6Uw8ITdsCaD+OTdsV0gylMIABMGRr7+pGAC9v777/4eXV9S2yZ1edxun+0L+/vrXGtW1b'
937
+ b'Stkf93MM1lrrfV037AwgF5BcdHt29vmXX3ab7WmYQ0pV1VS+SjEv/VzzFIxhx96K5Pv7Qy7x'
938
+ b'dBpq53PO0xTCnD7/7LNHj87/2T/787ZzP/z4u5evXv346q2z9fnu0W6zG07jq1dv++NASIBi'
939
+ b'jGnrGkhTiqnEIiIAIpmtQUOgCgzIFFIJw37s4zwDgi/CoCblnEuBIzrnnK9XbVc5g1LGcVbg'
940
+ b'qnJd11S1j3NkZni4sRA/CBCUHiISPoKlsWRZ5h4RMgQIC3WthtSQMCqBILAxjTPr9UpViNkg'
941
+ b'MTpnDEhJMY7TaRZ0bERknueUEhE5by2b+35CAEMo3oPLlhhTsYqdrZrF11PAA2DROc5hGEqI'
942
+ b'4zjsT8e6rZjZOF6v16fjNMdQ+6qqWwBUQIFlHCQFBELSxQdL8JCSBU1VO2ulxFxSTmIsSRaR'
943
+ b'6J3Z3x+XTfLLL786O9/u9/cv3726Pu1d7chSVgkxTikkAnM8UV2Nw3R5OOapBLXX+7HEMoZ5'
944
+ b'CoF5IAYkNcZgRFUEpSxgFNFYZ1nnZF21O3908ezTw1zKzTWAZ9M1LcpDfP7JWOsAS13XznNK'
945
+ b'0/X19dNHjz/77IuffvXzX/ziFz/76U+/fPq5Qvl3nz//P/5PPPaHizDtzh5/+ulnXbN69+ry'
946
+ b'+vq6P0opxVpb1/V6vTaGxnkahn4KQiAJtKpd3RhV7yvabFd1XZeM/+/f/YMxkiOGEBBkUU6K'
947
+ b'5L7fO4uNY/ItMTFD5ardxXnXNdZyjrgIA2fCjzj7R80xfFCQfvyWfAhseHgJi1OVCoKUIqrG'
948
+ b'WURYZPXzPANTU/uc8+tXb+/vDzlnKuitJ6KFDHZsvHfOWkNskbxhNSFb69gwEqNmKWMIIYRc'
949
+ b'tOlatn4Kc8iJ2J7m/ubutl23iOhr99VXXx2Ph65pPCh7L6WMMSmbylZKmHJhIZWHpqAFT0k5'
950
+ b'IikRwUOH64OyNKVS0izlIIDb7faTTz776mc/OZ0Om4vd1y++H+M0hSCYkF3lWLRc3eyBDQKz'
951
+ b'a0MY317f3d4Pbd2eddvdxfl4PN3e3oaUyLBxtoikMFNJXmvrXN02xGUK5djPZ49Wn37+s6zu'
952
+ b'dDoOYxZlIiKGttkYAJqniZk3m5X3NqXw+PHTP/3TP/2zf/JPnz17tlmvAeAQ7t+/f7s08z5+'
953
+ b'fPHpF58/e/zsdOjH6ZhKZEvL3fEhrHExxBXDbK2tHTVd6zwaW59frD/77JOm6WLMP3z/di9D'
954
+ b'jhk+RA4ZY5qmQpVxPBEkKbFtGiRdqoEBJcYYYyQi7z2hkQKMLCUtsRl/yC8vBx0R9UPs+zKB'
955
+ b'ZSkxI1tYyuoEFA2rSgihbisiUCkpTMfj8f27N/v7IyMasd5Xls0CtwpJzkVhjgoGMNBSGfZB'
956
+ b'l8AocbbWLuz15mxXd22SkqR0qw2rPDnfkTHH6cRMMYYljz+p1t5zkSwqgMBmDqkAAIsiICEq'
957
+ b'LOFxKSVdPD1kSog5Z9Xlh3iaYxZUASZzOg4x5NVq9fkXX0SDb6/f3d5exyzWG1f7lMLhcP/u'
958
+ b'/V3tPSgVNNMc0KCshgAAIABJREFU+yEiV0+7zng57O+O/fEho8eYVJboOsVUlEpnPRm429+/'
959
+ b'ePVK2IdAbFbWgzEkkk/jYZ57QDE552EYp3kAyE3r69p3XVfXdd/3fd+Pw/APdzd/87f/97/5'
960
+ b'N//7/f7aOLN+dH52vnW1u3+xf3v5dpoHYwyzkawppb7vVcs4j7lE733T1d12AwxFZmZcr7e7'
961
+ b'3QUAnI731ngpg4h657z3OWfnXNPUBFhS6E+HxUpPZHKJIU4iKGWOcxEozMuh+feKnz9StvoB'
962
+ b'KdUPavGPl5aIDHlGawgf2GhmzllijCEEa23KYb8/HA73lni77koSKrwk0hCRBWIiLaWkVBsH'
963
+ b'qlAK5kKoyAoMSgClOO+qtrPOXTx+vDk7F8YicnO4t2w+/fyzmAPdQbdeq+SqqhSwiLAx7CjN'
964
+ b'iYhE9TQOVd3wB5aTUBVx+cAsno6cci4yhrjUWFrjE0VCjiXfH08/vnxpKnNxsTO1XbXtrlwA'
965
+ b'wP3h7jQcU0quqrpu2x+OfZxVgZRVuGgRRWKO85xKVBTjrICWSZHBOK9AyBRzASImOg1T0ZvV'
966
+ b'2dPjAHW9ffb08935NpXw7Xe//f77b+YQzZIHl/J8Op18ZZj55ubmV7/61be/+z5nGU79+8u3'
967
+ b'Oc8ppxgzGW6a9nQ6gWCMcZ5nY0ztm/40MZlFFf7wS80qUHzjV9uVQIkJFZICGOsl6/E4pJSt'
968
+ b'9VXFxhgtAvLQ0lxV/hSmFGNT+c2q7cd5v7+/ur5fdbuL88cENqe03+/HcfTexzARszxoxhd9'
969
+ b'pyDh8p+CTPTB3YqIqpJTBID746Hxrm1bAJjnGZmsc7CYQSQBACN565yxmbImNEqYBQmQ0BL5'
970
+ b'2rvOVNbFaV43NYi2TdMfjqvVqq79PPVNV1vrC2jlfO0tWjeG+Xx79uz581hiKvHxxSMgJAJn'
971
+ b'LBMx2xDCUleBzEmS9zamwJUlxKapxhiGYbTeicjV7Q0Zs7TxNG2bU4q5ACRkM4UCgLWvD4fD'
972
+ b'r37190SgRqYcVmdba22ZcxxznjOKsdai8OFwQOR1tzLGOoYwxd/85jdUoqZkvd2eb7v16uZu'
973
+ b'f3V1I4rb3flpGOY53N3dsfW+anzVlKIp4qeff/bn//RPfvrTn8xhaJr2cH988+aVMcYQgfPc'
974
+ b'ddVms6kqJyLjMH/z9fcvX74E0c12tdutm6Zhc+4qO44zG3f17odvv/72dBqYbIplEXUsWQNA'
975
+ b'UDe+XVfWsvf+q6++qho/jMfLy3fTFH744cU8zu/eXscgCGyNZTTLrZNznqZpnucSU+V9VVVL'
976
+ b'3IorZKzdbDbAlOakIsZZskY1i4iU/Hsrzh/I/fSDT1UfIrsf7jNrraoKQiyZFqkg00Lm55zl'
977
+ b'wfGli6CAHIGCFgVRKSWLWiRSa5AMkqvq2leG2bHRtl34yqKCiN1m3bQts8mgMYRcymq1Imcx'
978
+ b'sSIULUkKEVTO0Ud6HOCjDXLROxCRgMYYUkoKJcb5NJ4AIJUyhjllIWM8G1WUQvMYl5DDVPLx'
979
+ b'lOY0xTRnCexs3/d128QY8xgUkcVgAw59xXUIIU6xqmgRWtTOdo0Xq9b6btOcne/I2aIyh+Rq'
980
+ b'50oOKaVSgGGZdJnt5myzXm+cq1Iqp9MwnEZCs93ujDFmqRFSVefcZrPZrFbbzQ6AXr9+Q4Sr'
981
+ b'bmOMbZqm65pxHipbOVMPx8v9/mRNbYyTkI0x/dw3Xeu9izmENEuWlW3rtmrb9tGTizlsSkm3'
982
+ b'N1ff/e676/e34xA0O0Jr2WqWnLKIpFIk5apqRAqAHYZJkmQFa6qu60TkeDzOp1Bb83GQyjnT'
983
+ b'w0SOH39BHx9/AA+r4gPV85DJpqpSCiwrHjDZyrm60lwQCyISGjaOgK3x6EC5QJIcllz3kjCn'
984
+ b'lBiwreqq9saQty6EQNZMIUxRfG0LQQEVRgWdS3G+vuhatlagKCEyFC0yT4jqnDPGLmSLQUAp'
985
+ b'qEVVi+RclCNFVJCYAclQSLHv+ynFOeaYSgE0pmLAGHPKKcSsYJi5ZEllDmUWiWxo6kdJOQ4z'
986
+ b'WSOppJKxKCsaayvj5zHEOdVVtQhu/bp5+vxRmIeYM1glo642vnZRCtGDn2r+oGgtRZEuv/jJ'
987
+ b'EwK4ubq+ev/m8urt6xc/1t4+vvjCAEBZksFVvfdnZ2ePLy4uzh+v19uXL1+lEIno+vq6lG23'
988
+ b'qg+HE5hKdCR0Z9tH0zCHcY5zMkYAqKgoCjuWTCLFVW673Zz6Q91WxPjo0ZPK+5vr/WKAbKvK'
989
+ b'2YaUxzjmLIRKQFoAREHQkA0hlFgEgSmTrUqOUyhpjLTeuCXZRxWJHjI5EH+vYkBExJwzADzU'
990
+ b'+H6IHBKRGKMu/ahEywXmva/rOk4zAORUVNEYt3wLRNmS5lL8Q2+FAATJEsQ5h4bjXDLoOA1V'
991
+ b'VQUtqoWAUXIfpjwsDZy+W682Z2fLbgiYrfWk2YQguDxzDZN5uLEApCRVlVREJSUqzCnPYKyx'
992
+ b'fhhOVzeX76+uRaJCsYaRTBZJRUIuSUG1JCmaRTC7ym+355vt6ubd5TxOkotlh2hLKTJrtqWt'
993
+ b'OtNwnEMqGUVzSQBQVbZZVVnHfuj7d+Nh6EVgf+ynOYSUrfG2cgIQcw4hDsM0zeX80aFub8f5'
994
+ b'/vLy3c3V21zC2W716PGZIQLr2Nhqte622/Vq3dZ1ba3NOd/e3g6nsW3rcToZY+rGd+1GEg4h'
995
+ b'nG0uGr/+4dsfhsPobMUGm7YFkGmaqs7tLs7IYt149qiqN1e3xtL5+W79tH1z9q6tO1DnuXHW'
996
+ b'S0YQ1ALGWWcNIsSYiMi7unYOkYvq6TTGfLfdPLLW+s6t12uYZyISROfcPCVBXHrnF6RhURw/'
997
+ b'DPWLWX3howUWrno5gh/R1CV2ORUZ5xBCIgJkw8xkXCnFOrs8WX3KJaYSE+RcRPscyow5xwZK'
998
+ b'yIFtg1R5Q8M0GFOjc+itq+q66cDY4zgtUzkAACEDMzOp8rJJq8BiywBgIgVgAus8MJE1OcYM'
999
+ b'RUu8ur169fbVu/eXxqL31jsTOaMCKBrrMUBRFSkpJ8BoqW5XzcXFBQvcvr8ZhmH5wNiiRMYY'
1000
+ b'55wDtnVdwzSUkmKayRJZGsI45XmY+nEcx3kyxk5TmmM+DuPZ9ty5phjJWZZ0P0N4PN5stq0p'
1001
+ b'PE/3OffGEEI6HW+Nc1Yhp5QXm9Hy1LDWVlWFiKfTyTlTV+0yeK23Z0U5l2JNQ7VX5VKwco4Z'
1002
+ b'd7td29VKkjWgAWQRyP14ujh/dnN9N4yn0+m4atpxnBCsCBTQIClHjTFL1sIFChEzo4kxpTke'
1003
+ b'QrDW1lWzADZ1Xbuqc2xXTXO6uSml5FJgmYZUH+Yb0I+b4B/OW/DgmF/EysL8e2HgYq+IMZay'
1004
+ b'cCdqbcVsF0NOEVFSNvhQlZhLiUlS0lwcsQIoSySFygYU9ka9Wa2qtmt90xnr0Xm0JqmUkKqq'
1005
+ b'AmJkAkUkcs4vxICkvOxZD3wnIhIJAjInKUgLSqeiue+Px+MRABS5FB3GWUpCRGe8s1VeukCZ'
1006
+ b'CFmBBCDJUuyyaM4QRZHZsjPOVrYKISmKiCCTqqLBtm2q1prKNKZbpRkdtVXrfW1c4HHe359K'
1007
+ b'WRCPNE3TOE5Mtl0BcU6lVyRfwfaszWWehv043JqUQwjTHIbjke/v7+vGe+Mr3xhjf/6zXxj0'
1008
+ b'49SL6DBM+/2+ub2zbk1kjrenYRjub+8lyzhOzPTlavPHf/KLdl29u3rdT6eqtcZgKaCq0zBc'
1009
+ b'vnv37vUbAjydhhJLipIBVKIW1KIGCQrkWAqXqlnPIU1TGIZT5bx75p1zm82W2TZNU7vKMT/Y'
1010
+ b'oTSD5o9D1fL1kTE0H8w5H98XUC0CIIYQiiiW8iAPxFIUka311vqqqkQREdlYJkwQhUEWnG4p'
1011
+ b'GXOGFAgxTDO7ShFd5aeUHDOgPnn6mBCVrBhKIBLnylbOuSxl2UVyzoiwkHE5Z8OMICAKS1qg'
1012
+ b'EgASiJQ8hcmwphQLkAiM0xBjNN4hk6hmiTlmRERgNqIICIiEjJwLpJTGcTgejzEEItM0nbVW'
1013
+ b'AEV0YbaKlHEeUkrEoKSVr7t1S5YFhQwax1VTbbeb1Woz9PN+3x/2fS5RZgghpTnMw2itzyl4'
1014
+ b'C+Nw13b1J5+c1/7p9fW7d29fT9Nk7u7viySAIiIhhP39scQy9FPXbX720584a3/1q7+LMfja'
1015
+ b'TWHuhynL/dnuYuj7/f1xvV6fnW9ijMxYte7J88fnj7e+YVPRl199AaDv3rz7/puXBFpSvrq6'
1016
+ b'mcbgXOW4zphTAhUlIGM9E4gUhaxIArioloCcsmPbGizOVapqma1hBkUQwwjWLuDnRzUf/vtG'
1017
+ b'nCVNefG6LMAtqEKRAoBAAABMig/poUsqBDMb6+McUk4gytawZwFQhVwEiiDI4tyf5nkI01I4'
1018
+ b'4Nsu9CeqKjIsYHLKzkHtmoVoVw228jlnsuYBeFMlMgAp58xdzQ/mehGRJUEkS/Gt1yKSckop'
1019
+ b'Fk1SDsdjPwwJgC1Zg0RkK2vQOFcZZ21OqioaS5ymOEJStmTQt8b7uvU1MHMIIZW0BIm1XTel'
1020
+ b'CYXYsUAhIgEap/k43iWdT/tTKdq1q50/r6Wa5xjyhBMyZQUkh2SBSJgxpZA0nJ+f/8mf/Omj'
1021
+ b'Rxff/PbXwzCJ3hlbW43F+zoXffXqXWWrn//kZ7uzi7quSynffvu7lKKihJyQ7RwGIDhM+5CD'
1022
+ b'W3N7XnlnTALv7dur71+/e2yrL42lTbd5+vhZ167PurPrF5evpuFwe6sxt9VKCo5zAbW+rgjN'
1023
+ b'qlmJ5tvrm3keN+tVt14djkfftuzrp2fndbVq66ZpOu9ryyZNYby7d4ZKmBeZXoxRkjzMUQBL'
1024
+ b'tgzxMssrImjJ+qEbjAl5magApJSIAMJFpSAo01yC76rKunkM/XBkQM+ESWMsgJhVAcA751wl'
1025
+ b'IjGFlGV7diEiwADGrLdnMUZiJ2qc9WEOKuPFxYVz9TwOYY6WSVI2xOR8yqEUMWQFciixqh0j'
1026
+ b'acpS8hJAA1LCNGDJ/SnWm9U8Dy9ev0JrL549ub8/AKlokBIBlRgEIasIZl+T9ZwS6wHCDJqt'
1027
+ b'ZD8VMaTGGGEURrCIltAqkLbrFkdIOVjn69pDwcN9H+SIVmzla2MKiKCsNk0upW7dNIybtZcC'
1028
+ b'kIqrzTzOMYck2rpNt7o4333x+NHTFz9c9wPe3QczzsN6vT4/20GRklPXrR8/evrJJ59U3v71'
1029
+ b'X//17779epwHRIRMdduA5TkkZmIGhZLLjJkBCrHZdGvRNPTHEFKcU1O9fPz4MRQ9Oztv6g6V'
1030
+ b'Q5hNKUCO0ABzynm1atdnazYIIOPoK2+N4/PH51VTV1XjrK/rlbfVPMWbq1st8uTi0dmqayu/'
1031
+ b'z7GyLtMEQB8upAXH+gOgQRbsAEGXOGtFAUEEWTZEVFBMFFKyKZFhtiZLCSHENOvS0F4kp1xE'
1032
+ b'kWjRpJMxKlBKUcV2vfHehzCVUmIuD89O61NU580SW5piQdLFE2GZRCSVD6ecmZkVGUAKFAZC'
1033
+ b'RDZIBFpUS1FAY4zJeRiG/WkfYiRDbE0uiqJAig/P5iV0ktu2TeU4hwGgVLUhZFXuT5MxGaEY'
1034
+ b'Y4xb0gYklTgM8iFYLuecFcBaWZJRva3RSFVV3vv1etO2bWWrnKXruhj38zynlKWQc05EFOHF'
1035
+ b'ixc/+ern1tSn43Rz/fXf/e3fX76/MtYbY3i16s7OtjnEcRhyzqf+cDy1L17e/z9/8+9evvxx'
1036
+ b'c7atqgqZ21W33x9N46y13plSEguUEAEkM/uda+vu+ZPnoHh7e/viux8v37yv69bZFds1UJ0k'
1037
+ b'akHDCITL1B3yPMWTE2sddVwxQZZ5HOcxUNuuznePvVt7j5atd5tVu15VTVvVbeXD0M9zCHM2'
1038
+ b'xoWY/gOi8AOCBUQLyfbwZlZlxcXpv4xctMyiy8FijjFKTotVetkfY4zARkUeQAwtOWcEqKxz'
1039
+ b'1hnizJxzjnNYYIuqqkoowFTZh0HQLEp5ACUsIpoTABADG8NIQFooGXyIS114glTyOM9JC9U+'
1040
+ b'iQQpRTM7pgjzPKeiSIs4bGEV0BQlAmc5CxOSMWwJNGqOJWkEyEUiZXLgvfeGbc55nsc5zYs+'
1041
+ b'2xjDzARMwIgao0oqmmMOqpks+aZqx2FyxleulgTOeOMdAEnWaRiJ7Tj0tzdvX750YU7H/Y2W'
1042
+ b'CMSmaRpVHYZh+STd7u+//uabm5ubt2/f3t/fL5qFx0+fbjYbtobozenQW8K6blVLLlESGGNr'
1043
+ b'W1XG71bbT559kpPcXd+9/PHNNIzWV02ze/d+P82AZF1V+bpGZBFh5hCmu/srAHXEXdd5a6aQ'
1044
+ b'd+fdHGfrtFv5pjUI2K2252cX23YznEZNuW1XS+53CnndNQlH+A8B92VP5I/vf5Q/qCIaBlUU'
1045
+ b'WZLO9EOM7HKSSD4GfmosOeTUOB9TyjmnlLBoSsl73zRN3/fGmEVjAEXAQmWdM3aaRhEBYgAo'
1046
+ b'khzVZEwIwYP7vbqVjXVLLpcYYiJB0SKiCoiaUgohZBAkEEtVW228mTDfnPansVdcouFQl2Bn'
1047
+ b'yKQRAKUUttR0K+d4PI3HchJl62pjQXMqRWKJHqwxdvk0laTee++dc5XzxloLADlLjDKF8SM+'
1048
+ b'cHt133WdKqqiN1VBkAKIXIoikOTk6+p0un/98oeSYlVVdcUX5+uYZkNE8zyXHL33DjnG+XQ6'
1049
+ b'dV23uzj7Gf10CmPOebVunz57DACWza///tco6r011udsuKHNZrNareq6TiF/+81311e3333z'
1050
+ b'3dvL9zlkITOGF7f7/jgGtrbqVtvt2nm7jNnHw/3UD/McQtKmcVXd1J1LMhtfee+JZekXXWyT'
1051
+ b'bw9vLZvKeEkZinjvc5UeMHeVxTqh9HuT6sM5e3hKfrgSPkCpSxjzR9lJ+fBlyBBzSSIpLyDY'
1052
+ b'sk2CFpUMiqgPSZNhGpcwjco60GIJrXnYQGOcARwAYEEPQIQxp2YRoJJjRmPtQ3ogLNctlZJz'
1053
+ b'EgJE0qIKhM47cAYtkeN56m/3N8f+sPxzRAEUEOkhOZMAgUuJZNSxWbUVFjnaPhYhLMYbMFZC'
1054
+ b'KppjiWiwgCYpS8baQj94axlYRHIspEazkQyqGnLI8/3YB2Z2zhkiUkTmMKcwzobI1dXpdEKE'
1055
+ b'/lS9h8zMhqHrWLU2VVU55+hhgUIAMMasVqvd+fZBNZGSMWaapmmaxnFcbzot0DSVcy6EyRhz'
1056
+ b'dna22WzCPL/48dXf/e2v3rx51/ejNc6gGWN/GHMUZWuqxtetb1bOOaMg/fFERqrOIkp/7I+n'
1057
+ b'fVP7zdl2OPSu8oRmGCZL/apzw/3tzdU3Ty6efPH8c0N8fX39/v17VGh8NU+DQVLQxful8vtI'
1058
+ b'I334go+Y1sMx0t/zcQCAi+l+gemLgDO/F0QAENHyZHzoJPkQArioDBZ03hiTcjDMRFRSqGuP'
1059
+ b'igsWuJBMS9GOfkxuNoYIgRZolEtJFh7ClQF00TAaS2wteJsl3+5vf/fDt9+8+jGpGMc6Z9Ul'
1060
+ b'vY0W3+QCOgJASPtpit3atJ3vVvUxpZTHxm7J18bZGKMi6JIGvmiKVOc55JxxGVMVS9EiCIBV'
1061
+ b'VVtrp2EIcZqmiZk1l7Zdde1qtdoM/fTmzTvJRQEQMkIueepPCQDONm1T+5yi6Zp2t9sVSYfD'
1062
+ b'QXMpIPfHw4vXr/an/c3NjfV+u9tZa2OMx+Px1atXjW9EpGo8GS6zxHnaHw9TmEHwcDhcvr/d'
1063
+ b'7w+I3LZWQFIR8twYtpbqrt6ctXXnUgrDcLo73MQ5WDbGuKWaYJ5jE/Xpky+QCICkYJghzPdl'
1064
+ b'lpzhyaOn1pjT/nB7c3M6HFNKBFJKXiygoLKo+hAR5AEvBXiIxFpOEhESIpQPT0Z6EKCq6hKY'
1065
+ b'm3NOSGDMwlLzgsozLfjTcha990tv2LI1W0YmyKJL3kzOuVuvUkrWG+/dEiuCzpA1SYSZkbCA'
1066
+ b'oiAgGAJi1kCMi4EetSRVVSiiGsPMVucUbu9vb+5vQwqm8lwyswIIcFEUJYHCSMoGvavCoYQ4'
1067
+ b'lOycsYYLYBLFkKaqa60zglpKEVQybL2b5/kDIksikGJGZBEwZAzZ2tdNUxkALQkADELXNVXl'
1068
+ b'K292Zytv3fXV1ZRjTnndNb4y3iJAASx13dUO78feMHPTNCGEUu5ABADeX12+fv266zpm3G63'
1069
+ b'jx49ssY5b1T1u+++e/f2kpkXfX8/jeM4HoceAC7OHw9zEEZbV5oxpsJMpvIaB/badO32rDk7'
1070
+ b'75zn436Oacg5HPu9IXe2uVivNqpsXaNicrTDOBnjVqtNmOJ4Gp9cPPvnf/YLz3Tz/v371288'
1071
+ b'w3rVTv1+GgbGAqhQfh+O9YfD1gKWfhyzAJYnoNJinX6AHx6ib5ezuDCJReTjZFZV1XIFLuTj'
1072
+ b'MpcsN9A8zw/6wZw/3gHLn7v8HUIIIQTVqoiwCC5RSqCLtIGXIHpjnLMECKJRSy5lqSCZ8lxX'
1073
+ b'GHMUKN26fV5TJnh7ecNGFIpiUtDyEL+bRRIxIymSiKSUS0yTgrBxx6EnZ6uqUoCcCmE2RAtS'
1074
+ b'U/lmoe8sMT/Azrpedzhj3fi69pLDPBsi8pX99LPn8xT743A8HsYhjGOvqsaQiDS+2mzXKYVx'
1075
+ b'OGiJTNYaNKdTP88/EFEIKYSAiHXdbjZmu92enZ2JyM3NleRSVdX97e393UGwNF173+8P47Gu'
1076
+ b'6yQlhrLb7VxbP3r+/Prq9rvvvh/nyMyOuWvqiw0IZV9r1YLzqhBC7mMOYxjruka1oLzdXjBV'
1077
+ b'aU7jUO7ujj++eBOmICKNb/7qr/7qz//sL/I83Vxe5yirtpv7Q5gGZymRZC2EuES6L5tzSbkA'
1078
+ b'IOLHfRgeApUZiHAp5Pmg9F20ymzBGDMMg4h0XXM8Hgl4s9mMw7BEzUwhrNfr/nCcwri7OCOi'
1079
+ b'fhhimB4UOCLr9aqu66UgMaVU13VRIcPG8TiOnWkF1FgLhA/lJiopllJYrPFIqiiIyESGyyJT'
1080
+ b'RHDeH4d+db45d/Ltmx9vDzdqeRyPKUuRzJSNMQxakBRSymEc5bPPPvnss1Xd0N3tdT+M0zSk'
1081
+ b'PKNtlpguARDAosDIRTOQiUW8QOMqVDj2/TzPSOpr27TV+fnZo0cXKVx8+903fX/abjfG8LPn'
1082
+ b'j/fV/vLy/TzlIuGwD+t1k1L68vMvzs92d/dXMyiiOmdXq9Ysq5/3npmsdQAqIqmoq5phGPb7'
1083
+ b'/fX1dZwDM+aQVfXx06fdevVAmxgzjmMphb1la45Df317c+hPdd1utzvDjk0pmqsavQfREJP5'
1084
+ b'KCtYr7cohOIr2xrTOVMdb29//OHF8VTWm4vnTz9//vz5H/3il199+UUM09s3N6wlhRQXiU9O'
1085
+ b'ULI1SK2PIesH2fsf3k/6B7PUx/d16QVf1qnl5YcotmVsekg0FQghAGIuBRFTzgtuDryE1eBH'
1086
+ b'FcUfDHPLfQnMuFxv4zguH9TlJ7MUyVKY2FktZU7RsWFGKZEQnHPW+gVzL6CxxKZtc9Fjf/ju'
1087
+ b'zY9v3r7q42SaqqQZiRgyYI4poy5aIc05V94gIrPdbLrNdlU3a2/fvXp7GxVUsGQUwaW6A4CW'
1088
+ b'LS/GOCwuN7Yh5ZSKoswpV+QAYBhPkqK1ZmkpPxzuRWQcR1W11jZNk5N477ebCyJXilRVFbyN'
1089
+ b'aZ7DaK01IaScBZHbtia2KYeYc1F98+5dmKY0h1JKzrKoo4hMFq2auuuaBTMcx3EcR1c1ddP0'
1090
+ b'05ylCAIwWe+ZOZd0PN09abe77drVFQLnXFCM5bpdNyWDJBPncjrGZ48fP3u6GnvDFNtmG2dF'
1091
+ b'rZ48/pSwOuzvNt3ZeLojJQayhoqhAAW0ECgvebD6MXhflx6l8mA2WM4UIzAoqSAyLWWtH3/l'
1092
+ b'mksW1Vx8VS9i+ZxljsE5F2OMOaQS5zhZaxncnCKiGmOIWQGyFkIqoAV0kYkJaNGsWmKcs4p1'
1093
+ b'NquMYXbqVNWiBdEiEmICh7UiKBZZ1D2whK8BITEfh6NaPAz7m9vrUqJ1iFicJ1QisIAoIpKg'
1094
+ b'JFgYdO+6aQr746lqzfZss909aro+lWsgLgVTKg+heUCiKIpsnGjKoiEVo7QkoAhoSqkIHE/D'
1095
+ b'3f4ONKUcC+gwTwCQUgkhpqzO+qZdgRpnG2uroZ+bpupWja63w3h////z9WZNjiRJmpgedrg7'
1096
+ b'gLgyIrMys86uqerume3p2R6SI8tdWVIo5AufKLIUoSwf+Ff5tC8Ucme6mztdXX3VnUfcAcAP'
1097
+ b'M1NVPpgDicoqDiQyEoEAPAA3dVW1Tz/99O6hbaNbdCtA9S4ye1GYxpxzdp5uru+QrAlx0XbR'
1098
+ b'RwDIlhStjc2zd54+fnxemV/9OLx+/Xq73RqI93xycrTpexEdpp6JUt4CgGTVYmxOlXKyJh4/'
1099
+ b'f/r41bfXebI2LprQsHKISyFD8CGQ93EYhtevr/70x788OjvJw7ZrfcUbq5sMIXjmVCTlkVzY'
1100
+ b'jSmszIA6WQ4Pu8EOb/uMaq/wrqI1f3LOVeb7zP9pGlUdxtEIi0jdEIopgkEpyARqYoo2K8tX'
1101
+ b'saRpmuqhAIARnHPjON7f369WKx8C4ByyyTt2TsCcC4ZUTFUlFxVVZI5d7NdDtnx9d9P3m8Wy'
1102
+ b'LaQCtli0COCJ2y4459YP4+uX9/3GlC1NOvTl9au7zWa9XHUGfHO77bc5dgstaipmBmrqsaqB'
1103
+ b'E3rvkYio4reI4NgTA9IwTHd3d5vtHbFFX0sCNBWRzXbosxlC6wlDiOQ5lozrh3XO6cnTY0Y1'
1104
+ b'xWlKxZQ/+OkHnh2yM7NxSsMwpFIMIMQ2huiclyJpyqUUUFSQn/30k1/96l///Oc/u7i4OD9/'
1105
+ b'FGK4urz8+suvpWSRQoDOuSaGxWIR2KVpJLP72/WwzTGsPC3SiFZ8G05UwnYtkhnN59HGId/d'
1106
+ b'rl+8eD2NuWka5+jh4e725sp7Wi07zZPmXKahTIPmhCoqOU9pGid2bsdAnqOczXLt8yRBBDJC'
1107
+ b'QzCkmbZVzco5x2xmpUiNhrWnw3svAFNO7Nw4TYDQLjokylJlDQwQpmmKTRST6he5TvQlqvt5'
1108
+ b'Q/AximkphYjGadpst2bmYiDHVSw2NDHECGCOiOtoDEJRTZKKFiVzDY9pfHH5YtuvydNUJil5'
1109
+ b'dbRchLbrmiePHz9955mjeHfTD1sJrjPE2DQGcn178/Ll5eXVw/o+9YMBeFMEQxVTVec8EZci'
1110
+ b'U+2RDBGn4FYrAAAgAElEQVSJc0kpZzMgx7FpU07r9bYfelEppYiC98H7dhjSw7rv+1KEVFmE'
1111
+ b'TVAybTb9MPRqhR21iy7Epqi6ioWULKKlqBB7Tw7R6lZbi45jKuMkkjWXXKbLV683d/f83rsn'
1112
+ b'x6fsedz2/f36u2+/GfqzGOPR6uTR2UnXdUerk74fv/4ahjVpwouTd3/1y//26ZP3v/rmxZ/+'
1113
+ b'8M3mIa3vVbInDmnCq9c3aRiXi8XZ2ZmI3d1dMzM5evXymzQ+lJ9++vTiomscQ5ssTf2oYp6D'
1114
+ b'Zw+KVkR3GToRqCruZi7s94Y7vUitn2ufhFVQ9HATBwAitfGYp2kSEQWOMY7jWKQQwWjmmXPO'
1115
+ b'q0oI2bViV5TVzGKM9bAV+SulFBHv/VSyn6a6aSDHFdwXUVYgQA7MXBVzNJWcNZlTRDg+Pg6d'
1116
+ b'm7DIqxe3m4c8jc4hI1oV48pQsklBISq9rFYUop8S3N31IkjQEbdSsGJpYGqGpgxAAFSyeu+Z'
1117
+ b'vZkUmSFTh2SGUtCUgu/YWSnJVCWiCg6DDL2UbDkNMSBTVNUyjiVruyAwF2O7Ol5M03hze89n'
1118
+ b'z8/VtIiZatO2R8fHTdOImWQpWUoupYgVK1Iki2q5vb7sN5ury9fXV1e319d/+dOffv/57x7u'
1119
+ b'btEAAVfLxcnR0apbdYtlzun61dV3X78cB120J+dnz8pEf/rjd3/8w7eXr+5fv7xzFI+PHi26'
1120
+ b'lQls+m1OmR0R6d39NaKdnR0z2u3N9d3tVb99WC7a4Cg60pxACyGWKfdDr2YIBlRtZ9+kqjNG'
1121
+ b'pXPeAwCIBFUUlKkySKVOG8S5ha6UEmNERCSuYdEAjCDEuNlukSgEn3Jids77EHwuRUWr8wNC'
1122
+ b'BDUwJq7xdBj69XajpiradZ3OREoNMYQQzEwNHRMbVLQMCFJO/bAZp7FYSWWKbTh7fPro4hEF'
1123
+ b't+m3w7BVUccejXKabm/Xr17dre/GlJwplwKxiRxIRKZJckaVaOLNjJG9C4RsgN5777yZFhHn'
1124
+ b'GYjEJJdiiMRITES+KoyrmSGJKhiwcwC87aec1MybOcSgytMowyaZWtvF5aptF9F732/711eX'
1125
+ b'rpgSEoCS86vV6vj0JKUkUjDEzeahH3uTrEUkT8zcto3k9IfPP//tb37Xdv78/DznPEzj0eJ0'
1126
+ b'ykJN9G5h4h/uh/W23N0+vHh5f3b24dCXu1v9T//pt9Not3frrjt69vT9k+OcUrq73bDDEMLJ'
1127
+ b'8dn15avXr1+fnhw9fnw+DMOLb7723q+Ol1bkL199iaDvP3vn0fFSiY2dI+SmIfa5jEZW2QGI'
1128
+ b's+pwJSfPbkoVjSvxAQlDCBVvyjmrCCL6QCEEU6zbGVX1TORdv35AxlRKLTmcHB0558Z+wAaX'
1129
+ b'y2Wdv7rfe9Yit1MY05SmqXqvUkrt6yLGSHG73RrC8fGxj2HoJ7DcNA2aGkIWzaLDOA25ZFN0'
1130
+ b'1IR2dbZqj5r1cH/18JpQgoNSUgiOmbZDf3uz3qyzaRObLk3imEVEExO2PmSRkjNrbdj1SI7N'
1131
+ b'DE2tjvdgD0BSTKGI5FIUUA1YQNUrEZNi32dEIwZgp+LKZJqBMLB3CJ7QoYGIxBiL5GEst7db'
1132
+ b'sTxMGVCZOv747362OjqOTTSznEuapqkfpnGU1KMJaM7TGmxqG2KWNG59CAgcgvcuTqmUDIiN'
1133
+ b'imdesOuQli4chXhsEqX4trtQPDE8SuKLxHZxdn7xrO2OpzGJWs4l5zGlpCLee2JnKpvNBtUY'
1134
+ b'GZFVDcwUTFQuL19PefIxrI5WoQlTzmNK6PlhfU1kCKigxOQ8m+mUhjqBhpAdOgJ25D1F5z2h'
1135
+ b'OUZTSdNYM6roAxPd391Vvl0MnhCmaQBVAJMiOScw8+yCj6hgJkerVb/Zdm3XNE0pknJCIgOc'
1136
+ b'Umq7BRM/rB/GafKeVUVVzBSIQgxm4GPwseXofdNut70W8T4o4FSSMt6s70ITv/r2q6PTo+5k'
1137
+ b'Sc5Wx+3d/fXvf//PKQ9NEyhwu1w0TZtL2WyH7bCVPCkU4oohhaZdgLnNZuiH0UwokI+eHNd9'
1138
+ b'Hzvn2HnvpmlCpEW70CIpjWAqpTQxgllJk6kSEhiAEihKtiZ2kiH48OTxk4uLCwDZPNz341bN'
1139
+ b'iuYsSc0MqB/K3e12vU78zqfP2ZFo2fbbcehLKWZiJa8Wi2nqp2m7XLTvvvf02dMnbRcQGS2Y'
1140
+ b'chEsYiVBymjKCjEXzsWJckk4TThNOk2WkjfrDDvvGucbJFeKlVRSLm0TRWQah3EcdTcBgAkJ'
1141
+ b'KaeUc9mV4URFYhsXXXtze311dQloTdsaYcpZTXO/NStIEIJnppKTqQQXShYwAEOr8cwIgESV'
1142
+ b'2Cprpu4EvfdMrKqVQFI5JCJlGsdxHFPOjhzOpC5jQGYmwlIKGIQQELGqF9W6YRX/F9WcUiml'
1143
+ b'goJVEyBLJkcI6JuGnBMzZmeqjLBYdEC47rfjNAJaNtuMG/SOPU1lSiVvt+svv/xSpfzNL35x'
1144
+ b'8fQdAb27vXlYr4N3p6enXdsgSCojEfoQoo+qpvPQJyii5BwT7woThMwGIFm8dzFGkYJmwXtT'
1145
+ b'I4LgAqKZoqrUCVFMgZCCb1WFOYTgGajyi9SsqNbGTANKuUxjyklVwW22t4BLQgdgRbKBIjgk'
1146
+ b'nHIqokBMLgB5A2bXxAbASE2LpiymYIakGIiaGDoXImMn6qcRiExhzhMb7zF6VS0p55xNipkN'
1147
+ b'276UUnuO51rIPvnNc+daFWXAXUWFyW82/e8/+zwN40cfvnt8fHyv+ejoaH2Xpn7y5GNwQK5+'
1148
+ b'TklSDFSKISGRoRQAUOXCgJWGgM4574MhVul5RAQiqVMnrULgRkRZpYbUlFLTNOxwvV63sakU'
1149
+ b'nVJyRe2D913X5ZwPcnkAAGIA1DRlH4NjN//W5oMzqpa869U258K333y53g4P/fby9noqg0Lx'
1150
+ b'LRu195vNts/nZ1HXt5OMHHB5fNTExfq+3wwPPgBSRkiqWU2IgBmHsZixJKxDg6CWVEkZPCI7'
1151
+ b'9sGFxKzOxeirwDQigu7GtoMBIhgZaMnK7AndNGUpKGpAjplzP7StjzECQJFUkdK2bV3Og0j0'
1152
+ b'DbddrAPWqM4LAXry7Hlg6vvtet3fP/QikhOkgaU0QE0bPLnAzD50IcS2WbAPwTfMzgxLKTUC'
1153
+ b'iCiQEu7ZKQVUzWRIAqgAwMyqZa/MriXXYS/b7RYA2rZlpHEc0jidHi+b4Dbr2y+++MK0PHvy'
1154
+ b'uGsXUU6m9XozbEfbNicni2ZR51a2sclSRijFVCErmqEhooDxbk7fPBtHtbZVVgcWwjwejFzl'
1155
+ b'vmFNxmOMFfoiwpwzGiwWC+diNfppmlJK3nsVc75WF94M7anNj5WZh6agwsRkUCSjo4eHB0SM'
1156
+ b'beOcG2X6+puXD9sH33p3x8hwefc6NEGwM1y9vu438s04rYEwRs8B2Wm3cBePj66u7kwzsSAm'
1157
+ b'yZNpJgQwY2QQEAAFQQMA8pWdjLxzz1JKCXEuJNR1qGeICFSLqJnpYFMIDhjGISEKgJaiOe9C'
1158
+ b'DbP3HjAAgPd1M+QZSauYdtO1RITAoHBxcfH++++fnZ6s1+vb29vtdn11dfXi5W1WRl60bbtc'
1159
+ b'Lttm4b13LnrvwciIEVhEi5RcZj1+RBXNJc9WpaqganV8nqScc84TqCKi99y2bZ8zM9Ylr/RO'
1160
+ b'RVDVGONms4lMy+Uy9f1nn312f3P9yU8+6Jw/OjopRfM09Jth2ZF3nokx0FiohjyZh/F6IjIj'
1161
+ b'FZg7xIxMMRWdsqSUAMC5EovWGrMBVT1mKwLE0XnnqUgq2SSXsZScUwzeMXvnwGyaBgANHKLv'
1162
+ b'yDkzD2pqpSa5Vee2GpmZIahaSWlkpTIlIkLHsWm6o6PYLq++/KaguTZ89PGHq+N4ef0aOIT4'
1163
+ b'ZMqxY+caiUaD9H2/SW5sfHN8tshlmkZpOxeD3/Y9mrTBS9tICYCsxcQUduwPJoo+BO8Baj9P'
1164
+ b'D1iKCCGWUkzADGsWoQq5aJFsY+kWjXeoVsDEeRIFNfQ+zFcOUc3Up2nabtd8+sGxquYkOQuh'
1165
+ b'a9vFcnm8WBwdHZ09On/y+OL58/c+/PSnf/PRT37qQzeO2LZPj0+enp49OT17slw9cqEjjogR'
1166
+ b'yUuhaZRxzNMoIgC1nxxBtJSc6zguVVWpDdpZpAo+I+1KwgjGRDknVasZzDAMUnIMTQxeSsol'
1167
+ b'V2qCqU0prR/ug3ch+q5p1WwaxpxKYN/EUAvQBiAgokVQobbgi9FuCmu92lLJVR2plhT3XYc4'
1168
+ b'X7RYg7L3HglyznXTB2BVen8ftQEs5+zZh+CcYwOhHcBWbT0Er2Y7XUEk5DyNUIp3ROxSKSHE'
1169
+ b'J0+fqdG3L15/9/Lq9n57/uTdn/2rvzu/eNfHI3SLJMDehnHYbkcpFmI8Pjo+Pjk5PlotV0dm'
1170
+ b'slwuu657WK+HvidmNER0CAigVlEYxOA5xNB1sXaZ3d3eDcMWDIpkAArcqNYBfTY32ZUiRXPO'
1171
+ b'1QGLKAAgzB2/ZlDPpPc+RF9rD+M48tHzY1UoGUpWVQDzgB4wTJONk2kh5Ma5ZUq4XqeUuVs+'
1172
+ b'6VaP2nYVYmfmUraUVQqIQEplnHIuAgqIhEAAJpJMBVRMtTpZUAWzaRxUxBHGEByhVrn1kj27'
1173
+ b'UjIiOMdErKoGSkgipYmBkNI0MOLRagUIVzfXqlIAXGzYOcmaUyLAGCKAErF3hIxmqiYASoBW'
1174
+ b'gLEKeAIAEjEYaFEfY9U0nxWLdXfeVNsuIkEpuTYrqwrz3F4BZiklAHWOETGlFJyrTBtVMTVE'
1175
+ b'C8yhCTmnECNaRdMAABw5ydmxmZbYNrHp2m7ZLlYnj57crfur200BT3758Sd//clPf3n66Ony'
1176
+ b'6Ilv2ofN+v5hc3fXq+LR8dmzZ8/fffe9J0+eIsD9/QMgex/v7+43my0wi5ojADMEQQBT0TqJ'
1177
+ b'2dNytRqnYRj67Xajpt57NWR2bVyoWK4Ki2Z18lXlSgKA1Li4s1PbzyqCqhJlpUjORYry4588'
1178
+ b'd64lDCI4DjIMebMtm/UEEMe+DKM+3E1ffPndZ5/95fLyHqjJhXOBnCVnSUlSLmYASNM4lSLV'
1179
+ b'JdaJDyKSc8plMlN8o7UnCMAOmUi1zKTgUmSGlHyexhBCjYN1sCwRbvtetKiKc+x8nc8xmqpv'
1180
+ b'w836fkgjEseuDS7klEW0qiJ7z94HIhTNKkJghAgKTHP4J6JKBK3nr8g8GbAy3EVEVQBktVoB'
1181
+ b'QN/3TBxCqOzQuVVaJOcMYH4XVrxzTRuIsZQEpkQUnG+bZtj2TRMRAIHUAMy8d2baRbfZrrtm'
1182
+ b'cfHknabttmM+e/R4yPaXL7+L3dHlzUNWvzh65OPy/PHzi3eevf/RR01c9tu8WadS1LmmiV0I'
1183
+ b'Td+PX3397Thl5+LDuh/HHGPj2GUpYLUYpQZFTYnBOV6uFuv1ehj6aZocu7ZtAdA73zatFKks'
1184
+ b'kv2QUUR0zs1Z8jwCa+6bb2Lce+sK+FVNTY5nZ6ZMGAhbcl2Iq6PlxfHq/Pz82XJ5FuMKMZo6'
1185
+ b'hKjC4yhmrpI1RWvOJCoiUhwRgIEpgFWpcAIjBEKhnScGmzNDU7EiTMhIYEpW2cMGaqAVrNZa'
1186
+ b'TlZVAIwxABiCaV1sVUADBAULq8VQ8vXd/Wa7jbE9PXuEBldXV8uuq6R253jRNsumBdPUD44b'
1187
+ b'MzOVueSjYqZIqCqSs9j8eHVLTdN4x2mcxmHMKasKM4NZ3/cnJyfTNDlHRLh9WDvmrm377ZYd'
1188
+ b'eu8ZKU2j5tI2cdG2hgYIBhhCDNEDoqiJaPDOJMUmLhYrHxsk50LzsJ4U3O395vp2CxDId013'
1189
+ b'vO1zFs7FEOPjx+9/+tO/ff7sI4BweXn/4sX1i5eX19f3CA7ADUMWBQVOWRXUMYglsWIoBlih'
1190
+ b'PvYOcW6RNbPqabzzzvna3zaXyHimYjvnFGxKk6h674loytkA2qaJoc7/2Ut1VkoRuyactm27'
1191
+ b'WKzaduFCG3zXxEUIDXFUNSlWsqiiKhC2bYCHfquwbwI1NKttxdM0wjxWSFQVbSc6oKomJnX7'
1192
+ b'LTVvJSJgqDOUiKhe2XZQ4wPYzx6sfARm8kZEKiZSx06oqhKMKVMIPsSplJc3N8MwnDTt+TtP'
1193
+ b'Hzbrk+WiDS2S5TwpyEm7XMTu+r43JE8MTLVWLbko2EyO0DdKfyGE6DyhTWWqdJoYQ30/XdcN'
1194
+ b'w5BScm7OzOpW1AeuqaGZOOeQtSbsZFi1MMjURMEQEQgB0WIMnjhG75xDcgYVDSF2jRQwcFIg'
1195
+ b'TaYIvJkWuHx1edW0/ngVT08+Pvu755vN1e3Ni+3m+re/+Uezyqx2KtGIwBUwdUGRTUTrHD8R'
1196
+ b'q8WlPEe7Wfxid8JtGHtERCTneRf35kjnHIuggIIiMRKRgJJjKMA8a0Xtl889fvJR1fGpM6sQ'
1197
+ b'vSmWzONDXzUUU8qykxpHxqzZUPfN7AyzAofK5JBqX1KWbKqASMwqRVVNy26AIFB9vhoCzDIx'
1198
+ b'UClSPxxW+ebmnDNAlGrSqAYGVkxT0RCiI05Jhu12mjKfcHNy7FpLhjYMgTk2ftE1IqVPKSes'
1199
+ b'wGUVDFdTMjAwIh88i0CWAgbR++gZyXDmpubasJBSYqIY4zBsSylt8E3TOE9qRTTHGOsUeFV0'
1200
+ b'rsIOZCZzRmUgIkZC6DxzYBfYddE755qmc86ZoewK57PKA8VSdJqyIJciHNvF4qLv+6/uH4LH'
1201
+ b'05NmuXj67PkjKf3PfvZfv3r97Vdfffni5bfrfp0SEEUfcMr3WkAKAgBz6JrYdV3bLEop7ELN'
1202
+ b'FFOaauzLZSKoczf93AmMisDEYKLOETCZCTF7x46DY04pSS4190LkHQMO3fmjp3W5c8Ihp2na'
1203
+ b'TKOkVCfeIs5bg91+DlRxqkaJiHWbRbu1F0Q00No6ZMWsJu+y32TNoI4p7MamkdXWUd1fN3vy'
1204
+ b'5/dSw1njChUNSMHcnHsDMKJkTQBmyC4UwJtNP47pnfNHuZZ9QVg5IBOZJ350djalNAxjPw2l'
1205
+ b'FAQjdszESBRYxdmkVptdzXLOjnifis0noZRSSoy+IkB7vo1q5QtgKQXUnK8tGFqbKHPOqorI'
1206
+ b'gcgFx+yC855dCKHKiiKRCIGiFsk5m2gphXyswGzd0a2SpFyKgmkYhjSN2xg2MSA7ayN1i+d/'
1207
+ b'+8sP/vZX0Pf9dy9ffPnll1eX3xUtAE5R5lVWNyVUy2iiWlSyqgCqD3WoKIOaahHJdVOMiGY5'
1208
+ b'i6kVdBwQDam6c2YGxc39pqQsokTE7PesODclKKWklEspWkyKSc5SZrIvzZlIzWqLWlHQvfgG'
1209
+ b'zh1Us6Ce1n0fKCLXjgQRYfI7szCQoqZa/V/lo5vty8X1qAZ18uMb1m/N/M0MbGb0mZmRQ0UA'
1210
+ b'RtNSCqh6Yh8DqA1ZhmFIUs5PVo+Ojx3ZUKa87dsmtMsVQu2/QgRJSGIFgYBAVciQiBxXKVk1'
1211
+ b'kVKKMYfgY/AVlQ7el5LGcexiIIOUxyLRszNREwWeNS8VIWrYfahKJjA1897NTDBPREAMMTS7'
1212
+ b'dvv5I1dgabvdmgmgMplpGqfMPpbU39yPoW3bEBH8NA2b7bjtwbM9MCAqR44xNs3R0+enF0/+'
1213
+ b'Kpfxz7//7ebh+ur15d39jYmuVouuO1quFmB5mvo0PeQ8OgODLBlKEUIsZkoQgo9NAwDboR/7'
1214
+ b'oTauOefmdjbvAcDKG/IR7po0ERgB3dXlbY24qopGROTQEaGKiJa6casVDkZU1MrpntOgg++I'
1215
+ b'JKYgaoTM1YkKiBoJGM0Z05yYmWpxu7rKzkQRwObh8W/GTHx/hAkY1mjPTEZE7EBzSs4cUh2u'
1216
+ b'YVWmxzXd1cO9EYLjVRcb79g5cqyGBObZcUfRu9qelXMuKlmziRJBdN7MoDI+GHLOdeF117S4'
1217
+ b'J2Dhrg0/OI+7uXYVszGDUpLUJ6OJMJFzRCHGJgbvPLPzzgV2NScjdEWriFcexv7h7vbm5ooJ'
1218
+ b'AdR7NpNxHI6CG6eh7YKCTmlQVTQgbpmZGLWIggzr9LCevJfYRe8DAf0P/+N/2N7fvHjx3cvv'
1219
+ b'vrm5uZrG7VT64eohejSbHLnj4+MYIaXh9ub1enN/sjpznsm54+Pj5dFKVa9urotMRkhs5MB7'
1220
+ b'Ju/qgrDHEIIWMyt7w6rhh5dPf5ZKUVERlSJS/9MSvKsdJQSKIITKpMygUsD0e1+Vq1LVeWYd'
1221
+ b'DtwN+cbaugCiWkRVVBVBEasuvu5ZVAhQKzwGCrV5E8B2TPBaBgYwmh+ogyaAkamYE0RDAiqi'
1222
+ b'RQoguuAAKUnZ9pspTT76btEhs+ZMgI7AO/bR++CcY+fYefbekSPn2AfnPAMCUcXDsObnRHtg'
1223
+ b'VQGAEJ1ztTOH5um63DQN8UwkRITa2VyJhzEG70MT26ZtQmic923bdV1bNwQGVNRS1jHly5u7'
1224
+ b'r7757k9ffkHOG+BqtWq79u7h4fjkOJUEDgoUQGDnvPMAnFLZblOMCwOfhMYE46RJaEowTfLF'
1225
+ b'H7+dBl0uHz17/sFHH3363rvvn548WnTdq1cv0jSKjKGhrovBQy5jSqNjRqTQhOVqsVotQ/B1'
1226
+ b'vnz9ToxNE33wROijb7vOIYPNopvO+bplB0CHUpiAiQ1BAFSSKCJon8dKm0CoNVkTk33CcxgK'
1227
+ b'a5Y3ZmFG5wIAqGatU4aqLodqTUEAgAiQyCGlMsJe03FuLq22RdXmAGYkkQHn5gdDg4r3KSKY'
1228
+ b'MRjU0lBVWkVEAMo5JynHq4XkPOXh+n6dc05FL07PlrElqVQHQlBm55DUsZkV05RSnYNaRAZT'
1229
+ b'AIjBd7WHWNF5MqNhGtG0a0JJ2UdPBGhqVjeSGIJDgqpUA2qimS3YjuPAjD6wZ+c8ee+qpH5R'
1230
+ b'KGYqmIuORYcE99vt9cPdZrtdnbYmysygVsaJAaahb1YLVJSSypQmZTAi4hjC9fV1bDoOPvqg'
1231
+ b'YKCax9SX1Pq43qS7h5dmsmjD6cni0aP3Lp6887e//PsXL/7yzVefb7fX0yiACHgUgvbDCDAV'
1232
+ b'S74xF4v3nknbtk2TjJrQyDkXg1PUEMLRYjVA9Oj7vgegOuwYU0IEfnTxAZRkUkAzmpIVMkUo'
1233
+ b'WpKZgCnXWZKAWFkBaqCqUlSKqYBqhdjRKnepqBSuib2qllKrAGhGCFw5Pqoq5VCvsW4HDUCt'
1234
+ b'ItNYBzIwMdcRSwCmswgMEgMhACmgIYylGJN5D8xGUKV90CxNSVWCj01si8Ddw2Y7JDA8Pzqu'
1235
+ b'aUIg5x1HpuhddBSZF9EfLRaLGD2RJ2xcaELwYCgJTD1b9Nx41wbXePaemMw7ahdN08bYhBi9'
1236
+ b'c0Si07AVKSH4JkTH3DTN0dERELZd17SRmENwy2UXPE+pZIgGLcV2PZXr+yEBvLi+/b/+6dcF'
1237
+ b'ODTd6dk5s5uGKbpQxkTI4ySBgyYtUyJikSwlLRZRJeUylNwTCFqRMplkRikyiiZRMbCcZdMP'
1238
+ b'Dw/D7f12s82nJ08+/OhfPX36iW/OxxRvb+zurhyfXJgVjkltfXv/ahrvGYOV4HHluQvcgMk4'
1239
+ b'9eysXbQOMXK8eX2Z0hg8xRhiZAUBVL548iGBoQmagRZTMS2mArUdZbdf291ApOy3b/vspyYW'
1240
+ b'UC2i9mDtrIUQ5g6D+c6bORGHO0GcU1c42GXu/0L9KwdT4wytDjOqTROOai8ogtXoi0gzmFpE'
1241
+ b'DSpKXHf769s7BOuWi6ZtDaCUZKaeuWsbx+yIgnMx+MbHtomLpgkOPbNz1ATfBB+8a0KITUQw'
1242
+ b'dhS8C947JkBABAYwE1Dzzi26rhIiEBmJvQ9t0zVN62OIIYQmMnEBLBqM4qvru4ftEBfLb15d'
1243
+ b'/j+//u3Nw9rQxW7BPpZiaNQ1XRM7Aq6dWwgABs5RXSnHJJZVC5hg7UDTYiZEMI2jWlFRVRXV'
1244
+ b'UjSlMiXNyS6v7q+v18Tdu+9//Oz5x0Ttej28+PbF+cXp0WlnkIiyqfXbMo1KGKtgvqGJiYGq'
1245
+ b'5H47rK/vckqEMOUxlck3DlG3/ZofPflobzXzdnpmJeD3DAq+J2i2yznmfG1f0N3Zx5tX0U4F'
1246
+ b'dG9Me6vZP2f/yPdMCeAt3Sv4/q3+lhAQiWszYdWNQkDEuo+r4wV4J8ctpfTDZsi5iCoZe+9C'
1247
+ b'ZEcICEhgxuyapu3aRdcumtB47xZdF3amUIXOY4yhiapaYWnnPTMzEjE75iZ2zK6OtHQ+MDvv'
1248
+ b'o4+xadu265q24xA8B2BnClMBEddPZdMP4Lifpv/yu9/94U9/VoDYdG3XEbk0ZSReLpfBh6mU'
1249
+ b'YkDOzeefqO7WAQwI96jQfKnX4T8iiEBAswadquaiRUrJ3jtAeNg8XL6+HKfx0fnjv/7rnz9/'
1250
+ b'9+nl5ethKKvVqWRkCsvVMpdUNAOoiOWigI6Yc85D30vW9cP9Ytl9+vOfPnp8+rC5Xw9r9sin'
1251
+ b'Fx++ZUCw1+PfmcjeLOpy0u72vWU/GHNaP95bdoa721uvOjSpf8GwdhDwoSuboSzE2ZhmPAIM'
1252
+ b'Eb13FbRg5h1oYmKCxEMeH7bbzTiIGXvnQ2DvayGCiBGIgRjJO+d9aLvOBxdCiD74GCqv1RGz'
1253
+ b'd46d8zPI6L1vY9N1y7ZpmQigtv47H5rFYrlYrUJsY9M6H4BYgUUhFZmyjQVv7texa8Xwn37z'
1254
+ b'28/+8CcBQnbtYkXOq6IBRh9DbE1tTAnY7afqVTup58EQDldwvpAqWZKAgdRsbgkAAAA1ZXaI'
1255
+ b'mFIaxiHloqKien726Gc//4UU/tMfvm6a1bvvfxCjA9JtvzawYchTFu+jD1EkF8n95uH45OhX'
1256
+ b'/82//vf/3b/zDX/2h8/W/f3ipOOT8/cqocJM6/mvnqje33/tH5k/0oEhVrPYm87hx5vBre8b'
1257
+ b'1lsGtzeUt6zqh4b1A9O0urskgJmtMKOmBgAV8a9VeRGV+RLGSYsQGXGfxvv1dtsPCujYtd3C'
1258
+ b'Oe/IqWopgoCeffAeHRG7EKL3wfsYQnTeO+fbbhFCdC4454MPzoemadu2LXnuaGRmH0LXLRer'
1259
+ b'k8XyCMmTD4BeFYthUUhiWalPkMSGKf3xiy/+8Z9+c7tet4sj5yP5OGVRgxjbpmkAsRQ1IAre'
1260
+ b'0Gp1TkoGsCq1BXowAxYA5skdmRFNRIuKlCruVs95yUVUVI2IYmyBaRymm9u7IsoUPvn4l2dn'
1261
+ b'713frEPTHZ00r15/m3UChCmJFIxxYWZTGgCKj/Qf//f/8B//j//tJ598eHN/VTB/9Mn7T56e'
1262
+ b'8SIipG4AACAASURBVMn5+4dredBP/MY3/NDNvOXh9r7n0KkcJmGHB/++1/kRe/pRw/rRUIgG'
1263
+ b'fPicGnwRELGUjIjMrgJkZkaExJwNBLAWyYpYymm76a9vrlPKRdSH0DRd03SuTls1FTNg9uzJ'
1264
+ b'e+9DaJoQIvsQQpzluWscBqz3t9se0QUf227RdaumW8S2IxfUyJAUWAGzYlEohsV4Oybk8Nnn'
1265
+ b'n//f//hPQ84hNArcLlfjWFIRJt91Cx8bUTBFDp6dK1oBMqoNsZV3MJ/eHasMK65WxBHNGGCt'
1266
+ b'hR0sjfeBiUV1O4wlqw/NYrV6uH9IxfoeH52/+zd//Qs1+errPwMbEYQYRRCQmHmaRtHx5Gzx'
1267
+ b'b//9r/6X//V//pv3ftZ1LbTlJ3/1wT/8279//OyCzy7eR9hf699fuV2gmX9VY+IunaqjP/e2'
1268
+ b'sw+dCMBEvLOhH36vFvlWJAWAtyz1XzCsN6HQgBBw51gPsi40QOb6NggJiJmJAZFCmLKknEGB'
1269
+ b'XUDCvh/u7u7vH9bbYch16jAhMCtCVqtH4VqpJCLneKfABkTMzvtAvO9ndmYU2261WrWLo9gu'
1270
+ b'OEQkp0YCpECKpMZJYExlmGRK8ury5ttXl7/7/PPrm9t2uQptl1WNaJgyO9+0rQ8BkascdNVd'
1271
+ b'kpw9s2euFha8LyUzuxmNVd0P3DNVT0RIWGMz0q4BExBZRLMqElXxvSyy3faro9VmO5aMFTJ/'
1272
+ b'/4MPH12cffvtd0dHq26xEDOVpJZy6c8vTv7+v/r5P/y7Xzx//0ybETBjUPJ6dLYoNvLZ4w9+'
1273
+ b'dF0PgxQceKn6YKVLVybkPtLt7+wzMDuoeL+V18+Sr9+3JDtgN/wLhvXmEYM5gTowOCZGnBua'
1274
+ b'YTdUtQZNURAFJnbkTSynlLM459uuy2JDmm5u715dX95v1kLEIVLwzOxcMGTRqtnGVVfDNy27'
1275
+ b'EEITm65pOvbR+ehDDLFdLI/axTLESD4geQUqBoDOgAydGKWsw5i247Qd0xdfv/jHX//67v5+'
1276
+ b'dXKqSHV8xN16Q+y6btF1y3rZMjOxqzsGEQkheO+zlFogyjl7H/bUZ91ftzta5e6sookWERFJ'
1277
+ b'ed7WiNo4TuM4IXLTREOJTSTyfT+OQypii8Xq45/81abvY4xT6ofpQaRHyp98+tF//z/9m4un'
1278
+ b'zbP3TgIRgV1vXn/78ptcpqub13zxzkdQ1e52Oojz8jCZWWWp7xL2nf9knjuJd2yvt3JG3Y2i'
1279
+ b'rGDVYVjUGQudn7a3rf1BiPbINe6r3Yizjz80eiIkJNAa6QCgtmfNlaJdTDh4X7UZWqCq1jCR'
1280
+ b'Iw+AIjJMU6kFJOZR5HazfnH1+tvXr16+ftk2CxVl50PTOOcNsJhVOpgaABIwk3MhNk3bhbZz'
1281
+ b'oUHiYphFi4IAATlgp8bFYJjKdkpZbJjSN998+8+///yff/d7JW67BTEbYlYdc0aik9Mz73zF'
1282
+ b'osVAVCvZSTQ7z5VVTAg007wCApjOmXm9j0COa0fF3DwCdVNPGGP0zqmKSGFE9p6ZTVVKJmfE'
1283
+ b'oFYAgYinIY8DOF6eXzx58d23v//8N6+vXj97dzmVdfDYHZHgDfoxLnjU7cuXL37z29/85je/'
1284
+ b'lZL56Oz5D5PrQyup72mfe5Uih+7hh69668G93Ry6mr1Xo90GBw/wi7cMaPfaHwATONd2duVG'
1285
+ b'QjAE3JFmZ1zN5prjTENjYo8zuGRoVSodiQzRiApAhpJFs1kGLWJ/+Pzzl68v1+ttnzMic9Ms'
1286
+ b'VkfLo+N+nGo/LLEzYgUsakWUXED26AI5D+QRSQCLwKYfyAfn/WY7/PnLr/7f3/3uT3/+y+XV'
1287
+ b'DYXQtF0IIatt+zGX3LTL07MzLbDHpOtHIGQkMxNEQKQ3p/QN8ge2q2ZiTe/1TQ5Ts65SSq70'
1288
+ b'jJJzTjP9WCWX+miSMhkKQHZM3kURLhOXwqvFqls2opsPPjxeHTkf9KsvL19d/Unp7uy8Ozpa'
1289
+ b'3d3ffvHFl69evAbF0+MzV/s26SDpe2v54ftRsrqow5ccuh/8Pvql+gYj+J5NHPx4+KpDEzz8'
1290
+ b'8cBQcB9SZwZgHYyzO9xbf8uMZtYEcC0yBmA0K4BqxsBKCkCGpGaKKqpScdyik07jmDr21w/b'
1291
+ b'm/s/wh//vOy6k7Ozi4uL4+Pj999/3zkXnEP2cxVB1VS3UyYicoGoKjdClpLFtuP49YtX3716'
1292
+ b'+fry+v7+fsolOL9YLcUgpbTdDsWU2DdN470XETM01aqMDJU4TYTq6txqeYPsIJuhOWQPOwIn'
1293
+ b'kgOAUoqIIvKuCLu7mDWr1FK5zC7PFGRuEp2GUayPnqBJHgMYlhLHnr74y92ji8Xf/e2/+auf'
1294
+ b'LpGv/vmz/3x/+3/e3eti0Z6enjrnbm8upyE9f+e9s9On77zzzO2x0IPFeGM3h2QsOAhhex8D'
1295
+ b'B44NDlDQ/dMOk/RDk9rr9B9a56Fj+xe83f7qnE1tJ2ULgGaGQAZSqTvV9gB2XhbAVMAQVSvB'
1296
+ b'cH46MjKqFkUA8+AUVARkKubIHBIxEdF6yttXly8ur5n51//ld7VWc3x8fHRUS0GRHDsOAKJQ'
1297
+ b'RKSfxqGf+r5PpVxf3b68fH1ze++caxfLZWzMrKhOOaepJNEQQtM0TdOY6dgP3kcyAlUjAhAz'
1298
+ b'hGoOaKAEO9ak2d5JzWfdzGoej7vpeUSukg0R0QdGCqolqwCiqlSkBitCiaQGMpaH7ZCaBNY0'
1299
+ b'wXnmEJq7+/ssm09+/qhtj84fn/36N/85xiA5PX/+3snxeUqyvh+OFueffvQ3Tx5/EHzrCGux'
1300
+ b'RcGkomxY33BdKps1u2wnN0UVJ1IDtNkZ6Kw6DHVekgHW51iVSPoRF3Xok+DtkPfGqg79WY14'
1301
+ b'33d4tRDNALtBTTsbmiVAkHcDUXavBQDRSuixOk0TYK7E1A9YUTxiJqeqBmU7Fu9cCM6zJyIB'
1302
+ b'KGYglrYD9uOr23vEb944UYCu6wDRbJZJmnLJOatCCEFMu66LbWNmfb/JKo5DFvFNWMaWmdWw'
1303
+ b'lELsQggzLdukAsPGUmnzgDQXPxh1p/lmZmSgavNSKc4dZkRmaCj7pwFibS+v+Hzt26l+g4jI'
1304
+ b'kUeepjwMadoWtFY6bhrnPJ6fn93e91/++Xocbj74qAVb/eTjvwZeD1u9ux4QyvZenp0/evfx'
1305
+ b'T47D400a3N4x6E7hqZ6m6lEOHUmN3aZ06LT+//zKj1rS4f0aPn74TN01Xv0g33rzzB/+rf3T'
1306
+ b'EJ1qIeBKv9kFzPl9IgCwmRoRmiFVlgMQIoqkOvEBwdiAsDI+XHPEpZR+yqUfwNB59i44z6mf'
1307
+ b'kICQidGxZ0eOPTF+9+oKmWZonpgcN91i/uuqInp3dzdNk5nFrvWda7hV2J9GhDp9Ok3MHojQ'
1308
+ b'CEB0V68horrt2+VYqKpEb84/7nS/bDdF1gycC2acy1SKGBQ0MVCqOSagioGJidXRlmBshWWC'
1309
+ b'grp92KQkjjeb7e1fffzp8fHp1dWaGBA2P//0H7K8j269PKFHJ89LhrMjPl2904bTCEfiG7cP'
1310
+ b'c9VtVpn8g3XCwzeNM7/K3iByu9sP06kfGtPhrQ7s+2Gd8ftW8uPA7PyWDn6JVveSBgBQd6wH'
1311
+ b'Od9ssggIqgZIWA2OFBUJjAyAgQEVARCUVNGMAY1wO4zkOHaLhScEFs0lyTilrluaiRmaSVEr'
1312
+ b'KSdUAF0eHRvMEw2yqBYxm+b3TfOl0iya2i42juPZ2bIfp2nqETnGlphFNJfcNIxar21QJFME'
1313
+ b'RREA4NruocqIZlpUCSBaRXbqQNDyJg/JUtg7xx6qQ7BKL0BEZEZGVoJiZpLBRJUa1xpTjzlL'
1314
+ b'Skmn8gBwP053ry7Do7PHJ0dPyabrV5cnp7I6abuO//6Xv3j66MmYS0fXp8uLFk4J2gZbXhw9'
1315
+ b'3lcu8UAPGKHywN+E7t064r5KXYU8Kx9BRODHbvQDz1Qto7ax7ws+bwz3INvbZ3LV6g5dmpmB'
1316
+ b'ISHVqAcGVu/RvAHUWW8Fd/guAlLNKmyHpRpWvo8CGAFUFBJqMmtQkxQOwYgrTyJLkUppRJrF'
1317
+ b'AM3U5t42ERG1KpZcexNk16hYzbpOrqlYeYwxhIaI+rEwuxg7Zley5lKYXdM0qrZnmGm9NmbG'
1318
+ b'IdaT75yrHgupTnxCJlelTUzflG6HcQjBhxCIEMCQjBGJMKUEYISMiCpaSm2ZgaPlkRlOKYlk'
1319
+ b'RAPNBqNzsHlYO+J3njwb+r6U6ebm6umzdz784MNHjy6WzQrAefJnp2cRwn2+fVhf8en5s1oo'
1320
+ b'BDDnPDMjcM0Ia75Uk1wFMxA1wdpgYVK57rvvIHU7VTOsKhINYGB7Lca3squ3DGtvQ7UcWfGN'
1321
+ b'/ZNV1QxUbYf577+ADN5UntEUQaFSO/ZpYDWpSqzBWser8nVzpxUA7joiEaFOywWiyiWamZMI'
1322
+ b'+y+kCvtVgZAK/nnnvPfBOQ4h+MDBx1qu9r6KWroQGkQCJCIGqH2FZoZmnl1E9KoISM4H56IR'
1323
+ b'Ox8QGAChCsBTHdJF9TKo10VtwTQwVcu5ECESixQzZaYKd5WSRbNqwdqWWbQO6qkofq1fz2V8'
1324
+ b'MxFxgbJMBsVApIwiGbLkIS3b7v7hxrFdnB+/ePHtoju5er15/vyTT3/y8cP6Hk2KjNvhCtot'
1325
+ b'8DrjHa9OLkSKasWr6ptnRJoHwSIgotZ8pXaY7xYadrDqQbR842neeKwDpOrw8RoL9onUIXjx'
1326
+ b'oxHwrZfPL6y8UoCdB9p7PtqzMPY5FoDt0db56xDC2LWqzv929SyYS/I/vL1B3fb330L35p8R'
1327
+ b'K865OxDv3gAaMpJ33FRrM0RmB+QIeR4OBLv3tN/E4FzPoDoPYc7HKzk4ELv6fmpKA1DHAKtI'
1328
+ b'hhnks6raQkAH23A0m5N49s6gTq4Vk6wiCEaIpqKlqCXn2bHvh5Qy5pQ//fj9i9OllBQjLJfc'
1329
+ b'TzeGA1DPq6NHpiqzocyNr0RoB+s9d0FAlUmphPm3jaaa2uF5hR8r6extsJZ0fswW3xzn4JP/'
1330
+ b'SM0R50UzfHOQN+a4M/pDg0YAq2vw5uU7E6z39zBs9Z+7Drfv34AR9kfm/XZzb2R7t2p1hDgS'
1331
+ b'GAGS7R6fbaLOXWHveK7GwMyymgtlAADzGMM3f4IqN3snPA4AVOea2f4qMECqHxMRfahtaoJI'
1332
+ b'wdcRnagmVK+3N01SsxwDETIzEwFAlaA1MQTKJTnnUk7s3NHx8v7+Ts2mcfPkvP35Jx8hlRh4'
1333
+ b'CW4oD8FjkcTLo/PKLQTA2uFT/ZYcEKp0LkCp2SzVUpPfaoY7NOvNoh4ayqE9fS/1PtgAHhrc'
1334
+ b'oVG+dcAfsa1acn7jIQ5ZXz+6c0TCPWQKu2HSb+pI8Aaj31U8f8Rd0Vv3Dz/pzpoZwADeOCc4'
1335
+ b'fCFUxjUjMqKnnSXZzFB4Myqsys3SrvJxeOEx8x5/R0SpUgeiWvcnRPWwzruKsgOAY+d9YHZM'
1336
+ b'bFphprqPIUQwRTWpIQhnsKjKJ9QDlxijaGEiH7ya5ZSWi6Z/uPzwg3dOT44Ii8CgNjqGbb/h'
1337
+ b'1fG5VbwJjJEcO3beOSel1AYUqMRBNVOpLIZqHrv0gnfwHNgP8m44wDnfuh1a1X4V64v2S/XW'
1338
+ b'0X7MsJBwtxtEqLnUDLRpze932B/u/AhUCR4Aq80Zs9+qL8Q3b4d3yjN4kF/VRG1vLvv3/OYR'
1339
+ b'IJ5Tut3SAhEg1jzNkJAYySERIiNUpWKeLzkEZjbAvadHettj1f/ryTd4c5FXk6rfEYwJidk5'
1340
+ b'Nt1NRpPDLRprUeLZj+58HqooOVKzOpi9ml3JKaWEBGaWSwKAVNKj8/NXr14dL9vN/SWDPX36'
1341
+ b'eLH4//r61mY5chw7PMjMet2XXj2e6emZceyGvf//l2z4qzccnrHXPf2QWtK9VZUkAfgDSCar'
1342
+ b'6qpTCkWpMiuTSYIH4AEIbI6n30TOpRzNcqA1G5iDSk20N5IOV9jzGhKsazoz6xeOP7kCpJFl'
1343
+ b'wEbQo6/aXqPa+8+tkfvo4qIXD+qXvdpIF79uxiEEpxjaBeyqbzTp6Ca8p29SGm7evjGE+iKM'
1344
+ b'aACrTBjV0puI5JQsGNUV7eWEhPFdfGgup1Y/2yJI0V1AHi6AiF7wx1M5+hozxuhr1ZwLADh9'
1345
+ b'yhQQ1NjXyCyCRIkIzbIBACHWKguMiCGEZTkVFWY0su1mk1L6+PG3P7zZ/o9//58//PCnx7f/'
1346
+ b'fd48LC9fU5H7hwd+fPO+vxoCMXOIEwfqNdfAwPcgIhAh1/SZegEzANDksvp6X4UZGo5v814X'
1347
+ b'YtFdEzBI8CgoBA0qoKvCtmCsBSfJx72KPlRIQv8DZBX4ailQRK90j11TXmFSe6kOWkzI9YP7'
1348
+ b'6dD/RaTg4c5G5NYLIfsOOPD1JwAhd1XoKgCJAcA39UNrercXvVVMkZARQL3ir7uqaoEgVJVS'
1349
+ b'sqmiYYjRnUXYttSSoaf2CyEgklXNyaqWS/HoFkd4MFMR8SqhoGaqpoiATPv9zje47eadiRXN'
1350
+ b'7//w4f3T06JnQNlMW356977xeYaEgSPHGEJwwaogNKyePJDG7FqwXN/3VcaVSI3I5DDuWv/K'
1351
+ b'8DKzFvcyilrFQriEohGE2n9XqONWi7APBjSsasLKowzjKpdYPUJAthptF1MFqzXW36vOFiOG'
1352
+ b'KoJYxcVtKSCHMxjuA+CqL65d5EkiLgWr376ZszX1MQ3RVwA99xC7AKWUVAUA/J5OR1cTrIjn'
1353
+ b'IW+BNHXdpqqlZESvYcYAoCJFBFSI4fn5OcYAqJ7wIkt59/adAZ6+Lg+Pb3799PHx7eNf/+XP'
1354
+ b'CpkiLiXz/f0jAqqaFAXEedpMYQIzJvbsENYiCypNbl7SnfzlewFITwsBLfyhx2yNGhCbUlMv'
1355
+ b'Nzq4jPrglJK7+dWWBdZyMV6IWr1ha19l3eq2MACPhAFTMy+v5dyVibm97k5Ng9Wygkq3YrfJ'
1356
+ b'iNjMk1XQNStG7LndDdCAzAcEAJAUSA3UOT1DREdVJzjYy/F4xmw15QtTnaDSSu6rIQ7Rbayu'
1357
+ b'nacQtaipxhCQSEQQIIZQR8oRBQGbCgHF08tRStluNtvNRkU8k28dl8AcggHkUgwgzpOnCpni'
1358
+ b'hGDn04mItvOU0jLPc0pLyZkDM7OaAejd3UOM+yUrRX4+fv3zX79/eHpKsCxS+P7hjYOFmgKi'
1359
+ b'R4YiUgjRH97+qYczDZ1u6PLR10ejTHT+0y5JdjOrM7KhyAAk9UNfFnSJvAIqWCkDHO/gdlK7'
1360
+ b'ZBXceg10oK0aE+pmRqyYskIUAPj28d9DLGg2FiICsuEa24hYs2D19tiIb9VxsQY2NlOLuvHu'
1361
+ b'jbVLeHZwYk/X3pKkSTMt8CLDKjHHUrJXG5nneb/fe1lG1xieT6ZPYFWNMaiKqRKHKQQiFMki'
1362
+ b'XhOoAFilokDnaZrm7bKAESvo/dP9jz//+K//9i+fnz/+9POvvLu7825VNVBg8nQVMYQ4vOog'
1363
+ b'HM2567DUUy1eCtbalV0y/HBxqdmbYTTL+gVrR39rATGMLjRKaTgFhEBtg+sFg4C1Cj1R27/v'
1364
+ b'smRoDat8ldSsbCSi4H4PxFXqoJrnjbKqzBYBAhIbNlOxCaWt7SdENEKvFsZEzuOuM8MtsOak'
1365
+ b'd06LG9tpjUesndOMGCLyIXG0ddPICXpTMPXM+Qsx7/c7T494zou1Dhs4I41zBMO0nBFxv9si'
1366
+ b'4nI+iZScszU4FKm5TInjPN8fz2divn/z8L/+/h9/+dsPHPD5+MKb3QGgMaAACBhicHeEEz2I'
1367
+ b'vpCqGtq6J26o+mctrGWMTeiStM62wcaCtv3wRldeWF19Jg0jusoWEdUaknAdYYGNOehn22yu'
1368
+ b'874tEOvTeuhzlyCq9Ob43PVFRuZ9FThEJL5CN7tQ3eSSX08hBA7cAAwHlOp0g6dq7B4wasug'
1369
+ b'3ofQwo57y3qPEWFO2TlPVc0leQrM7WZnbXNeF1MiYibREqe4pCWnNM8TE6Ulmef4BC8fpJ4C'
1370
+ b'DVCLwNv3f/j4+TNH2u3maebn0+e//e3Pm92Gt5stuKtGQQEIOYY4xYk5uBPAZzQYiFXB8pGw'
1371
+ b'lhy2Cfu1VPnL9zjBwbSvsjI6Crt2WIf68sABui6HrcJDxY6GFpXmpvYGvvTrOsuNngHPiENX'
1372
+ b'f52I8uut3rDintUUEQSIAPXKFZ8YPVONn3R+FRCMEag5i8AATEERMHCgLqBVOitiISLW3da1'
1373
+ b'k8FJAKTrb9aNX0Y1zN3RhUSrh5cIpZTlfDKweTPPm9mxp5RcVACBmOIUT6fjbrczhdPxhQk9'
1374
+ b'hb2nJFYtmouK+EuJliXl/e4uRjq9PMeIf/wvH/73P/7jv/3rXw93ez4c7pxStxb15nqQOfRB'
1375
+ b'dFHwmJ2aZqiVA7kVrHGKd5C/UoiIODqnO6fg748DJvXjVqQ6BoymWBdQaAFkV7/ldlB3I9O6'
1376
+ b'rYjw+hFrUMclPjU1fdFao7UF2EStWmO1KQPoEiIYY+jqwo1ZaX0LAM68wzCpvJ4Ph9XtUyek'
1377
+ b'CxljN/ah+rU4pVwkEyMhmxd0kTLVki1oLV203yfntNlsCKloQYUQOXJwr55qKSlrdWBCkZJT'
1378
+ b'UpO//OWHX3/9aYr05s398fnT0+Nht5356elN10hqgHVTIE/T3K0lrJvURAfj3V/ec+jCQDd0'
1379
+ b'awAG634ce+/WEYFHW4oGQnKUyFv0at/fCiL0W90KFmEgZOfkwG2karJDG3gcmTAPWelW1CDH'
1380
+ b'PCr8yqV5ZAcb4kqNKvYAHhzJryrS45ZbXy6sGYjRbay+fRkdrnyPpHllxvq9grhPnj3RbF9Z'
1381
+ b'e1oorMjrLNf5fMpSAGyKUwisJjkn5yIoRFMLzNMcTVRNIocQqJQC4oFAor7UFilSEOy7796n'
1382
+ b'fETUp8d7ZhE9HvY7LwCppSQxQ2QxLSq5FDNT98lD3WNvhKjYJ8rVcSUB2kLpxzitUc2NAHN1'
1383
+ b'arzGLlOJjLLVBXT83qyrrCZInnMLihu+puYJWw2k2pYIBhCat26FB+wmJqzcejtUoTes6cm6'
1384
+ b'HgRsFAYAQH0StYgxZ2yxrsWcjwc0jyQDrZuPQFWBkDwc1IXXzVkAdyz53Ja1x9BQCdkAANkg'
1385
+ b'exbOYrLZbAxhWZZlOU/T7CTF+Zye3r09bA8cYyllOZ1zTqWkx8fH5+fnw26/3+81l+NLEgLi'
1386
+ b'GZApbsKcsWST5L1OgKrpnz/+/XA4nE4vjFYEfvnx08sPZ97fPyKRGpSiahTnTZx2isxxIuY4'
1387
+ b'TcRcTLIUBUDGFiaF3XJv8sEjMq8jPcbZIBqAqIqIWwkjvPkdK0oSEXv0TiWWpN3BlxRO2ppB'
1388
+ b'ZyU68vmHGnai9a+32QwMhLhO8VxykQwIHLhGbjRzza204S90gTUEIGwsVfuXWuZBABP3vXp+'
1389
+ b'LyYMAAjqtb6YscZXuISZgQIhoMIa6tVMQzCnzxtXbwbETByIGYkNEAg5BGImZo7Bd0sjEgVm'
1390
+ b'DhSY0ESllOyIpVpz5U8xLufT+XgiwqfHp/u7Oyn5y28fI4NoYcYYJw4hJ81FQ4zzvFODJMW0'
1391
+ b'LoC1iEqiSEnS4e6wv9udzqfd4TDN219++RIaPHiCFOyOsJSyh18wMwZGZSumalZqiZURWn7n'
1392
+ b'6OExXaW6RT9qt/HzFYB1DBuFdfzJiFhjY2wg2WHItRRCcMFC5X5nItKbOzjqWJErZdpf5OZd'
1393
+ b'FQAB+FJTAwAQoDVbbj1bIVkB2/ZtuugTRFTfJ9m2SCGqiatxqiGAYNpdjeabXRDQTExRVC0Q'
1394
+ b'6bARC9EQGQCcJn0RAICSZLfb7Tbb7//4p3/+8v/2+y0APD9/iWF7//h4PJ4/ffr0eH+gOM3T'
1395
+ b'DkQRNKm4p9MUVCClNE0TcywZz6dznFo+CX+TzoQigNct0hjZa1ATC9aULTbEvK+/HRTcGPTX'
1396
+ b'B2Ds7maW1a7vvyUa/UKvH6MUfkuk+pUjfDqAOfHrga5exR4A6s6iQQ0OwrK6kkYzsW1hv1Du'
1397
+ b'V6/ZZmn1mVzbi3ZtTXpTvYu5tq0Sy25cI6JpYSRtOA3goRo1iNHpVlmXIB6Hqe3vSpScz2cA'
1398
+ b'UD2XL+l0Ot3f3z89Pd3d74u9fXn5mr583e12NJH7Ufb7PSJO0wS7HaOCZS2LG5qS1Qqcn5eZ'
1399
+ b'N/ObLSq/fDltNptgZp1GV0PQolqIakpHRyeklUkPRO5t71hyNeQ4JHEYBcsut3NddPEABr6B'
1400
+ b'tg9k/zwi08UPh2/GAe6geNVCs75Vev1Vv/hWaq+Qcvx+lOCrp7z6dr0fWld4TnKG4dQ48cxq'
1401
+ b'/EKfcv3VpNWk7cKqQz/7qUp7ii/3GKDvH66N8XWVqp6Xo34uZpby+f1371XLy/NZVVM+SzGi'
1402
+ b'8PT0cHp5maaJwdTylKeUpjBFlpJVStHj8zJNmSESRskGM/Nu/wCVSfdgPeRaOjiGGCopAgAA'
1403
+ b'RSXnNIfYVi1r6703+ps79YCNHe3TcZyyo5Bd9f74k953Omw4+53xu/rsNx9Q2bv+2t5/dXEw'
1404
+ b'CgV0d6SZea7USmZWYwgvD6KAOJiPw+rVzMA84NN/yAgwkhpOSUkzEp1u710XwoTYt21CDflt'
1405
+ b'wS3WcvmRm1/MWgozB568mlrndRu/4J9FVXJO5/OJ0Hbb7WazSynlIrvddp7mlBIhhsCEIJK1'
1406
+ b'iJkHACooEDGIAdLT/VOIczot07zl/eHBakrZajwRYSDezDNzdEbE+V9RdcFSk1biYg0ixdHn'
1407
+ b'1TDAzamrket019UMuxVBeO24lqcb4OxriNs7VBq1RQyM14/yhJey8mozer6TsVW08meM35B4'
1408
+ b'M89X3wO7PRhwfX3/0Nz/0M+2jlmTAgOuzo+rfZpNukmKMYcYI1OAFsHBzO7zsebDRUQn0Z6f'
1409
+ b'n0UkztNms53jbAgp5ZTSFJkZCbBtIAPJJecEVklqLTJN8xxnEWHiUPOVmBuWVopqEQ0KoB7x'
1410
+ b'540coxWsmVl4qenGHuyi00F7tMRV1X2FvY9GzXI12Ldjc/vf28NujPf+aGZ0C2Y0Fq/spNsX'
1411
+ b'gUux6y91JYteQ2hc7ULlxvx25OqhS63bRoGYmY1aInlPEVmZB6iLQjUwFRhzZ4ARFQRVmWkm'
1412
+ b'BAiEBKrY5jOEEJhj3xSOwJ5rMqXFDEWkmV/ePk4p/fLLL8uS33/4bp635/M55eRSS0QYcJ5n'
1413
+ b'MiW05fiCQISiqoSU0/Lbp48P93chRMmy7mio/QiiKrX+mxSkCQetBEBeYvAKh3Aw2K+G7SKT'
1414
+ b'XwAADWJJREFUn4dMRt1QG4d/tNWs8V5XmgUu9y2OUnVBbQyN6EW8+pCLiGpVAX5NXyp2lT1K'
1415
+ b'1dXEuDp7ZfMNP7neZTRe1jVgg59QpOZ7CiEYYd+KWG+CF3PVzMwKDGtnVdXiOVfjCHjeclX1'
1416
+ b'hGyIKAJ9FrnqBE+7j+Z1SQzEc15M07Qsy//9P/+4f3h89+5D3MyfP3/exAkRKeBkG/bg6Tg1'
1417
+ b'vBCiUIqcz0ePjxAR3t899cUQKiBADJFDAIAQIodoUCOEvH5FSQkRCKsH1FqMg9kYKgNd8aec'
1418
+ b'vZgRDET8OB6j4utxWpddaaNV2zuuYszl4PXrR6kdPzPXUA6rm2Ladre24avd1WGGpmlmDuNl'
1419
+ b'/YJ+B/eA+QVOr+iw68mf7mxWlyesdVzVN2zV1zFDAxx6ybSHIKDb7FIEzAg9j5yKiBt67hFh'
1420
+ b'r0IKqCIp55TyFGfEWhvbakgCImKoTqGayQwRPYQBDFRqwYYiknMKTA/3dynVgsUxxBi4lJxS'
1421
+ b'BhWzMkX28tglpxDCH7778Ntvn/hw/wSNswF1oxsICZzgQQJEpmBMUiSlBZ2ptnXpF6rvfR3a'
1422
+ b'0RvdBaiLGrXA1Ffn9O2pUTHBJVzBgFI3Kmk19sfVZY90ePW4bRW9xp+N73VlEY4fxt8ijG0Y'
1423
+ b'Xod4BGZs3sk+hYiq/6c9a+3Gsa2OBeOKx33hhOwRA4jWpLxmOQQAxMqtIiI6yevD3qoaOX7m'
1424
+ b'nA+HAwCUkgFhmuMUppzKy+klpxfTYqZEmHMJgQ+H/bKc+fDwxnsbsfKyAEZIUhTqLnYOISKT'
1425
+ b'iOacWmGBCwud2h43aHRR1xSjKTNC0fi5j8QoNKP5ggNPdisN42DfnhqHDV4THT8uhGCMtqi7'
1426
+ b'WhvtDn0JgO4ZdN/fGnxaoW54qNEgSeNngMqM4mCFQfU2DFRf9VzW1+wrUfOx8BQ/hGCe3gt8'
1427
+ b'byAxEVNA8OLt4uKoVmvPuC3Tb+8o7vLmvS3qkcmlSMk5AVic4nazJSKohWkMQU/HLwpCxCHG'
1428
+ b'lJOB7fZbYqqZOZxFrbQBIJiULJ5yBQMDrLNfh004XWg6PNjl4Qz9aD/dDvMV5Hxr4G3cnNOu'
1429
+ b'txs+bFB5fHWr3xHNfn3/eZ/6cslNXCHiq7eCyykEMMr9K1A9Wpn9573O4/ovXlNuTXDNQcXM'
1430
+ b'sPHsHhyAiEq2JJWiHBCBx8EaO4OIPIspFDGzogqi0jIti8iyLB8+fIjsuMgxzPs9lLx83u7t'
1431
+ b'KBg4xphSEbHTaXn79i1v7h47hUWgZooARCyiPk9DnKbNhmI0NSkiJXmkeNd3DbTHINe1g7pP'
1432
+ b'kNo+REe4/vM+3r2nbtUotmw2V2IEAHxpdfWjhz6P49eG+ZW/zDyYVh0pVosKqwMP8dIUq9sS'
1433
+ b'GxF48SK6rmmY4xVWtZiI9XoE6MhUuahRQK1t928BmFddVokDAFgVNBBRKcWRzCe7D5NvpuiG'
1434
+ b'IxEFnuIUGdGDns0f2dg7D2g+nk4l5/1u9/j4SIjn03k5n87LAkgAWETVIMbp/v6Bd3ePogpq'
1435
+ b'DOhbvRiRvaKcqiEQxzhveJrUUEVyOo+qEFavM3bQ6jDr/Xc7j6Gttjrk9ONq4n7r+/6Zvo1A'
1436
+ b'cIN/I+BdHSNcwQDG43Lh1ePqbIc6RPRe8s9csyqMs+X3IoJqr9JqqPk3nq+mb97B7ucYUgfY'
1437
+ b'RdsAAD1YuZH43Punvqm2vE5IgWoS865xfYu1Q6CZiYqZMREBhRjPy+n0csxZcipeZVDEtpsd'
1438
+ b'3z2+NTOva+Co2oxG9tIFHKZps6EQfFfJcjr6mroTaw5CLYIAoOnv3u7+kn3k7NLAv5l7cPU9'
1439
+ b'3jDvayfeKNNBvvVbd7s9RkTsLTFrdR9ujtG4HuWjRltgcK3XRYR5RFAaAf5WTPudGVtaplHa'
1440
+ b'6mqxBxKCma3hzmZSyti9XvOllKwqzr+LSA0EMgJDVXAGSVUCERJ6HccQCdETLIiZbjbzdrsD'
1441
+ b'gNPx/HI8quo8TfO0eT4ezymfl4wUkMM5LZ4Bka2xsN4X/tnTcWfVWIqIoLpLA+o43hgKo83R'
1442
+ b'Z3/nF8be9w++W/dKqn7/eBVvukBQY72h2XN1Kg+eJWtmn4/Wxb/YI4MRATxtkq5P9Jrh1Aop'
1443
+ b'KiJXgxPN9z07BYsUyDeyEJqhgqBRLa7sjCdh3xMNuGZ1VjPfPY0AisAem1ULgIKCMaAhlFLE'
1444
+ b'1ESBkFskBRGJqoOQiEixUkpnKrxMunudsVFcMQIRMQUAQKxVusGgSGbGGOcYUDQys0MOI0ku'
1445
+ b'hRdCJFRZTl8kn5+//O2//uXw8+F4PJ5OJw8nPp/Py7Lw4+OHGgEOUERUDYnjNImAYd0chxym'
1446
+ b'eSYmBMhp8fywTqt4NSxPYN+nyOgrBDTimtXCgw8949SQLAP6fxsEN4eMVWcZAsRQM7b2+e7L'
1447
+ b'cFGF0cDyGeJjTuSbYbAHbgAAsrrORzQFRQRDRWTfr6wmAKZgRIEDxYjMYiYKCoYciBnQ9+Ew'
1448
+ b'ECIHZM/XgIAMSAqAzIGDIoJ6DfhIIaroOeWSxZAQsJiaqhEGZgzMREZoagJmAApGREtOaurh'
1449
+ b'VsUUACgGMwMmZgYm727mKcRJ1eqO2MarmULJRc0AcJrmzWaLSKWIqsUYG2VY2Qf20tNlEc0c'
1450
+ b'CRBzKSGE/X5PiMv5DCaoGU0mhpmBrGg+5nRa8vL+u3ccwvF0NNDzclLTaY78+PRBVdFDk1V0'
1451
+ b'9QxaMVUBJZinTZwjI6tJPi3aBEtVfRHrZSCu7Guq95GOWCPfAzfqCZqJOmqifpmbCJ2Y7tS/'
1452
+ b'NTAbb3v7uX/Q0fKrQu2QhNCCZGrIXlU0HpbS415qqLvf1VvQQAcAwLcfi5rXK1a1GmmE4GDp'
1453
+ b'lhOi1/lkX+t5QUF/rl+fcjYzActSimez9U01bvw1E7A3oHUvjYaXm0TaMgDO8+yFd1JKvZNV'
1454
+ b'FVq4imjxdEZZcpHcPU/EoKlwgAkJtWjJVhKjRubPXz+fU3r37u39/d0vv/xcSr7b71NO/Pjm'
1455
+ b'Q22ambZGOOEppqWoAsQ4x2liDgqaz4to6QRpZUdU+6K6c1pVB3kCJ0+qQozu6xZx5qfDFpgn'
1456
+ b'DnzF4dgV6KgBx//eShUO5ks/W3scLjTyreTdiHvr3Esi9IrmHa4Zo2rXIFscqLjxrA9tTyuM'
1457
+ b'PRuZ+0+x6vowbMu57o3m0gaAHlJhPb8rgtcLYOYmWFZKLT/vJZU9Z4e/H5iWklP2VJcVO7a7'
1458
+ b'zcuXryFSQFItOWeVQgiAxlN8OR5Pp+OH9x++/9OfPn36+M///HG/3/Pj04VgddkHQDVTMUOM'
1459
+ b'cZ7mOYSooFrEBcuPRrub+/Mbm8DduIkxjAMJbVV8i2FtNUArejURsdciSEeZe/W/r16v3/75'
1460
+ b'7cXYvHtdGvpl3W7rsdF+QYfUqxnCr6UIgMusO/UsISL66s9DX0KjbPyhnbJpD+1bO+udemea'
1461
+ b'WZyi+3Ncdn0ZMc9zSqlrAM+1FmOMU2BCVckll1JSysUV4m77/OVrICTAUpKKEICppJxeji/v'
1462
+ b'3j2lZfn068enh4cP7z6UlJ6/PvPD43tradJdyqGCTVAwh8kuWIaGaqVk9wy6YHnCCReI1gvr'
1463
+ b'+2OrQjAKCg1ha9CdqfWaNQBLhxQPMKwJxoNunI9XgjLihAvW7TUwQN2VzPl44ZV/5nLr1aXA'
1464
+ b'1dpgntiiV7Pqj+g+ier7E+k3r7q9CWvOWUxdqvyyaZqs5cUYxL1nObg4asu4LiQ9/ZqITNO8'
1465
+ b'3W4v5R7a2PFm3nhmU1PLpaSUmCjGYKohkORyPh3NLAYG0yUtS1pEyhyntJx+/umn/Xb3/R+/'
1466
+ b'D4H5cP/GrO6Ha1uzvR9d/WMXLOYACKiWSwLDcfZAWyb26eXvFkJYlkVaqrk+QiEER+MrcQEA'
1467
+ b'ROqrG2ga58o5jYNiwst4m1Em8FL71E4cVNsVpN2iFyL27FRXj+jycSPWqx7syDG2xw9sW5hG'
1468
+ b'LtB/6KuNFnFwodzH566CCPjq012+ixRHo35P72FHxDbza1AJMW7mua2P0QeOEAHs7nAIjDml'
1469
+ b'4/EZpUxzYCKRtN1OKZ2Xl6OagcjnL1/Q7Icf/sr7wxMAcO0I68reEcsUgDCEKU4TERsYGSzp'
1470
+ b'rGKdRyAiVQ0h0hCP0Vf7y3LWIRaq92z/0i4JJ6gk+EXWmlGwrublFYD1Hu9yg5c6safl6Kf6'
1471
+ b'wF+JYMMVu3pQFxocWLT+7qVIl7ycc8/LPVIevQH9vXwSet1AaKTd3d3dvN04Vu12u2maXH/1'
1472
+ b'd2wdCDD4Ou3S7KtJFob4MBdoF7WqcLQnGiEfPw4B0ZMwkYGKlPvDXQyEBjkvjDBvJkLM+Vxy'
1473
+ b'+v77P55env/xj79PYd5s5uPzKeclaItP6jDTOrSmaRgnh3sVx2nXmztNU38ZtwpbnvtVnfn3'
1474
+ b'1Hw78JrdPX4zCkqX1AHbEDtdsTIda6sugKq7j/Cbj7tqyVUD+j39Al9e9anSB+np8a2/b855'
1475
+ b'WRZP6kJELy8v2GTaWmAjIk7T5DFFzLzdbpn5tJxFZLfbvXv3ThF++uknM7u7uzOzl5eX0SYb'
1476
+ b'mzdO0f4gIooxdmjs0uycU4xxnmciKlE7rZiXZZpCCGGaJikGAEs6lZJyStN+Puz3JZ9lOYfA'
1477
+ b'loukvDnM//zxPwHou/cfvn59Tinf3T18+vXj/wehjB8Hf7GHmwAAAABJRU5ErkJggg==')
1478
+
1479
+ self.david_picture = wx.BitmapButton(
1480
+ self, wx.ID_ANY, david_olsen.GetBitmap()
1481
+ )
1482
+ self.david_picture.SetSize(self.david_picture.GetBestSize())
1483
+ self.david_header = wxStaticText(self, wx.ID_ANY, "David Olsen (1982-2024)")
1484
+ eulogy:str = _(EULOGY_TEXT)
1485
+ if system() == "Darwin":
1486
+ # MacOS does not wrap labels around, so we need do it ourselves
1487
+ splitted = eulogy.split("\n")
1488
+ lines = []
1489
+ LINELEN = 45
1490
+ for l in splitted:
1491
+ words = l.split()
1492
+ start = ""
1493
+ for w in words:
1494
+ if len(w) + len(start) > LINELEN:
1495
+ if start:
1496
+ lines.append(start)
1497
+ start = w
1498
+ else:
1499
+ # Word is too long
1500
+ lines.append(w)
1501
+ start = ""
1502
+ else:
1503
+ if start:
1504
+ start += f" {w}"
1505
+ else:
1506
+ start = w
1507
+ if start:
1508
+ lines.append(start)
1509
+ eulogy = "\n".join(lines)
1510
+ self.david_text = wxStaticText(
1511
+ self,
1512
+ wx.ID_ANY,
1513
+ eulogy,
1514
+ )
1515
+
1516
+ self.__do_layout()
1517
+ self.david_text.Bind(wx.EVT_LEFT_DCLICK, self.on_eulogy)
1518
+
1519
+
1520
+ def __do_layout(self):
1521
+ fontsize = 16 if system() == "Darwin" else 10
1522
+
1523
+ self.david_header.SetFont(
1524
+ wx.Font(
1525
+ 8,
1526
+ wx.FONTFAMILY_DEFAULT,
1527
+ wx.FONTSTYLE_NORMAL,
1528
+ wx.FONTWEIGHT_NORMAL,
1529
+ 0,
1530
+ "Segoe UI",
1531
+ )
1532
+ )
1533
+ self.david_text.SetFont(
1534
+ wx.Font(
1535
+ fontsize,
1536
+ wx.FONTFAMILY_DEFAULT,
1537
+ wx.FONTSTYLE_NORMAL,
1538
+ wx.FONTWEIGHT_NORMAL,
1539
+ 0,
1540
+ "Segoe UI",
1541
+ )
1542
+ )
1543
+ self.david_text.SetMaxSize(dip_size(self, 400, -1))
1544
+ sizer_main = wx.BoxSizer(wx.HORIZONTAL)
1545
+ sizer_left = wx.BoxSizer(wx.VERTICAL)
1546
+ sizer_right = wx.BoxSizer(wx.VERTICAL)
1547
+ sizer_left.Add(self.david_picture, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
1548
+ sizer_left.AddSpacer(5)
1549
+ sizer_left.Add(self.david_header, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
1550
+ sizer_right.Add(self.david_text, 1, wx.EXPAND, 0)
1551
+ sizer_main.Add(sizer_left, 0, 0, 0)
1552
+ sizer_main.AddSpacer(5)
1553
+ sizer_main.Add(sizer_right, 1, wx.EXPAND, 0)
1554
+ self.SetSizer(sizer_main)
1555
+ self.Layout()
1556
+ # end wxGlade
1557
+
1558
+ def on_eulogy(self, event):
1559
+ import webbrowser
1560
+ url = "https://github.com/meerk40t/meerk40t/wiki/History:-Major-Version-History,-Changes,-and-Reasons"
1561
+ webbrowser.open(url, new=0, autoraise=True)
1562
+
1563
+ class InformationPanel(ScrolledPanel):
1564
+ def __init__(self, *args, context=None, **kwds):
1565
+ # begin wxGlade: MovePanel.__init__
1566
+ kwds["style"] = kwds.get("style", 0) | wx.TAB_TRAVERSAL
1567
+ ScrolledPanel.__init__(self, *args, **kwds)
1568
+ self.context = context
1569
+ self.context.themes.set_window_colors(self)
1570
+ self.mk_version = TextCtrl(self, wx.ID_ANY, "", style=wx.TE_READONLY)
1571
+ self.config_path = TextCtrl(self, wx.ID_ANY, "", style=wx.TE_READONLY)
1572
+ self.os_version = TextCtrl(
1573
+ self, wx.ID_ANY, "", style=wx.TE_READONLY | wx.TE_MULTILINE
1574
+ )
1575
+ self.os_version.SetMinSize(wx.Size(-1, 5 * 25))
1576
+ self.info_btn = wxButton(self, wx.ID_ANY, _("Copy to Clipboard"))
1577
+ self.Bind(wx.EVT_BUTTON, self.copy_debug_info, self.info_btn)
1578
+ self.update_btn = wxButton(self, wx.ID_ANY, _("Check for Updates"))
1579
+ self.Bind(wx.EVT_BUTTON, self.check_for_updates, self.update_btn)
1580
+ self.__set_properties()
1581
+ self.__do_layout()
1582
+ self.SetupScrolling()
1583
+
1584
+ def __set_properties(self):
1585
+ # Fill the content...
1586
+ import os
1587
+ import platform
1588
+ import socket
1589
+
1590
+ uname = platform.uname()
1591
+ info = ""
1592
+ info += f"System: {uname.system}" + "\n"
1593
+ info += f"Node Name: {uname.node}" + "\n"
1594
+ info += f"Release: {uname.release}" + "\n"
1595
+ info += f"Version: {uname.version}" + "\n"
1596
+ info += f"Machine: {uname.machine}" + "\n"
1597
+ info += f"Processor: {uname.processor}" + "\n"
1598
+ info += f"Theme: {self.context.themes.theme}, Darkmode: {self.context.themes.dark}\n"
1599
+ try:
1600
+ info += f"Ip-Address: {socket.gethostbyname(socket.gethostname())}"
1601
+ except socket.gaierror:
1602
+ info += "Ip-Address: localhost"
1603
+ self.os_version.SetValue(info)
1604
+
1605
+ info = f"{APPLICATION_NAME} v{APPLICATION_VERSION}"
1606
+ self.mk_version.SetValue(info)
1607
+ info = os.path.dirname(self.context.elements.op_data._config_file)
1608
+ # info = self.context.kernel.current_directory
1609
+ self.config_path.SetValue(info)
1610
+
1611
+ def __do_layout(self):
1612
+ sizer_main = wx.BoxSizer(wx.VERTICAL)
1613
+
1614
+ sizer_mk = StaticBoxSizer(self, wx.ID_ANY, "MeerK40t", wx.HORIZONTAL)
1615
+ sizer_mk.Add(self.mk_version, 1, wx.EXPAND, 0)
1616
+ sizer_main.Add(sizer_mk, 0, wx.EXPAND, 0)
1617
+
1618
+ sizer_cfg = StaticBoxSizer(
1619
+ self, wx.ID_ANY, _("Configuration-Path"), wx.HORIZONTAL
1620
+ )
1621
+ sizer_cfg.Add(self.config_path, 1, wx.EXPAND, 0)
1622
+ sizer_main.Add(sizer_cfg, 0, wx.EXPAND, 0)
1623
+
1624
+ sizer_os = StaticBoxSizer(self, wx.ID_ANY, "OS", wx.HORIZONTAL)
1625
+ sizer_os.Add(self.os_version, 1, wx.EXPAND, 0)
1626
+ sizer_main.Add(sizer_os, 1, wx.EXPAND, 0) # This one may grow
1627
+
1628
+ button_sizer = wx.BoxSizer(wx.HORIZONTAL)
1629
+ button_sizer.Add(self.info_btn, 2, wx.EXPAND, 0)
1630
+ button_sizer.Add(self.update_btn, 1, wx.EXPAND, 0)
1631
+ sizer_main.Add(button_sizer, 0, wx.EXPAND, 0)
1632
+
1633
+ sizer_main.Layout()
1634
+ self.SetSizer(sizer_main)
1635
+
1636
+ def check_for_updates(self, event):
1637
+ self.context.setting(str, "last_update_check", None)
1638
+ now = datetime.date.today()
1639
+ if self.context.update_check == 2:
1640
+ command = "check_for_updates --beta --verbosity 3\n"
1641
+ else:
1642
+ command = "check_for_updates --verbosity 3\n"
1643
+ self.context(command)
1644
+ self.context.last_update_check = now.toordinal()
1645
+
1646
+ def copy_debug_info(self, event):
1647
+ if wx.TheClipboard.Open():
1648
+ msg = ""
1649
+ msg += self.mk_version.GetValue() + "\n"
1650
+ msg += self.config_path.GetValue() + "\n"
1651
+ msg += self.os_version.GetValue() + "\n"
1652
+ # print (msg)
1653
+ wx.TheClipboard.SetData(wx.TextDataObject(msg))
1654
+ wx.TheClipboard.Close()
1655
+ else:
1656
+ # print ("couldn't access clipboard")
1657
+ wx.Bell()
1658
+
1659
+
1660
+ class ComponentPanel(ScrolledPanel):
1661
+ def __init__(self, *args, context=None, **kwds):
1662
+ # begin wxGlade: MovePanel.__init__
1663
+ kwds["style"] = kwds.get("style", 0) | wx.TAB_TRAVERSAL
1664
+ ScrolledPanel.__init__(self, *args, **kwds)
1665
+ self.context = context
1666
+ self.context.themes.set_window_colors(self)
1667
+ self.list_preview = wxListCtrl(
1668
+ self,
1669
+ wx.ID_ANY,
1670
+ style=wx.LC_HRULES | wx.LC_REPORT | wx.LC_VRULES | wx.LC_SINGLE_SEL,
1671
+ context=self.context, list_name="list_about",
1672
+ )
1673
+ self.info_btn = wxButton(self, wx.ID_ANY, _("Copy to Clipboard"))
1674
+ self.Bind(wx.EVT_BUTTON, self.copy_debug_info, self.info_btn)
1675
+ self.content = list()
1676
+ self.get_components()
1677
+ self.__set_properties()
1678
+ self.__do_layout()
1679
+ self.SetupScrolling()
1680
+
1681
+ def __set_properties(self):
1682
+ self.list_preview.AppendColumn(_("#"), format=wx.LIST_FORMAT_LEFT, width=55)
1683
+ self.list_preview.AppendColumn(
1684
+ _("Component"), format=wx.LIST_FORMAT_LEFT, width=100
1685
+ )
1686
+ self.list_preview.AppendColumn(
1687
+ _("Version"), format=wx.LIST_FORMAT_LEFT, width=120
1688
+ )
1689
+ self.list_preview.AppendColumn(
1690
+ _("Status"), format=wx.LIST_FORMAT_LEFT, width=120
1691
+ )
1692
+ self.list_preview.AppendColumn(
1693
+ _("Source"), format=wx.LIST_FORMAT_LEFT, width=200
1694
+ )
1695
+ for idx, entry in enumerate(self.content):
1696
+ list_id = self.list_preview.InsertItem(
1697
+ self.list_preview.GetItemCount(), f"#{idx + 1}"
1698
+ )
1699
+ self.list_preview.SetItem(list_id, 1, entry[0])
1700
+ self.list_preview.SetItem(list_id, 2, entry[1])
1701
+ self.list_preview.SetItem(list_id, 3, entry[2])
1702
+ self.list_preview.SetItem(list_id, 4, entry[3])
1703
+ self.list_preview.resize_columns()
1704
+
1705
+ def __do_layout(self):
1706
+ sizer_main = wx.BoxSizer(wx.VERTICAL)
1707
+ sizer_main.Add(self.list_preview, 1, wx.EXPAND, 0)
1708
+ sizer_main.Add(self.info_btn, 0, 0, 0)
1709
+ sizer_main.Layout()
1710
+ self.SetSizer(sizer_main)
1711
+
1712
+ def get_components(self):
1713
+ def get_python():
1714
+ import platform
1715
+
1716
+ entry = [
1717
+ "Python",
1718
+ platform.python_version(),
1719
+ _("Present"),
1720
+ "https://www.python.org",
1721
+ ]
1722
+ self.content.append(entry)
1723
+
1724
+ def get_wxp():
1725
+ entry = ["wxPython", "", "", "https://www.wxpython.org"]
1726
+ info = "??"
1727
+ status = _("Old")
1728
+ try:
1729
+ info = wx.version()
1730
+ status = _("Present")
1731
+ except:
1732
+ pass
1733
+ entry[1] = info
1734
+ entry[2] = status
1735
+ self.content.append(entry)
1736
+
1737
+ def get_numpy():
1738
+ entry = ["numpy", "", "", "https://numpy.org/"]
1739
+ try:
1740
+ import numpy as np
1741
+
1742
+ try:
1743
+ info = np.version.short_version
1744
+ except AttributeError:
1745
+ info = "??"
1746
+ status = _("Present")
1747
+ except ImportError:
1748
+ info = "??"
1749
+ status = _("Missing")
1750
+ entry[1] = info
1751
+ entry[2] = status
1752
+ self.content.append(entry)
1753
+
1754
+ def get_pillow():
1755
+ entry = ["pillow", "", "", "https://pillow.readthedocs.io/en/stable/"]
1756
+ try:
1757
+ import PIL
1758
+
1759
+ try:
1760
+ info = PIL.__version__
1761
+ except AttributeError:
1762
+ info = "??"
1763
+ status = _("Present")
1764
+ except ImportError:
1765
+ info = "??"
1766
+ status = _("Missing")
1767
+ entry[1] = info
1768
+ entry[2] = status
1769
+ self.content.append(entry)
1770
+
1771
+ def get_potrace():
1772
+ entry = ["potracer", "", "", "https://pypi.org/project/potracer/"]
1773
+ try:
1774
+ import potrace
1775
+
1776
+ # for e in vars(potrace):
1777
+ # print (f"var {e} - {getattr(potrace, e)}")
1778
+ if hasattr(potrace, "potracelib_version"):
1779
+ status = _("Present (fast)")
1780
+ entry[0] = "pypotrace"
1781
+ entry[3] = "https://pypi.org/project/pypotrace/"
1782
+ info = potrace.potracelib_version()
1783
+ else:
1784
+ status = _("Present (slow)")
1785
+ info = "??"
1786
+ if not hasattr(potrace, "Bitmap"):
1787
+ status = _("Faulty, please report")
1788
+ except ImportError:
1789
+ info = "??"
1790
+ status = _("Missing")
1791
+ entry[1] = info
1792
+ entry[2] = status
1793
+ self.content.append(entry)
1794
+
1795
+ def get_ezdxf():
1796
+ entry = ["ezdxf", "", "", "https://ezdxf.readthedocs.io/en/stable/"]
1797
+ try:
1798
+ import ezdxf
1799
+
1800
+ try:
1801
+ info = ezdxf.__version__
1802
+ except AttributeError:
1803
+ info = "??"
1804
+ status = _("Present")
1805
+ except ImportError:
1806
+ info = "??"
1807
+ status = _("Missing")
1808
+ entry[1] = info
1809
+ entry[2] = status
1810
+ self.content.append(entry)
1811
+
1812
+ def get_pyusb():
1813
+ entry = ["pyusb", "", "", "https://pypi.org/project/pyusb/"]
1814
+ try:
1815
+ import usb
1816
+
1817
+ try:
1818
+ info = usb.__version__
1819
+ except AttributeError:
1820
+ info = "??"
1821
+ status = _("Present")
1822
+ except ImportError:
1823
+ info = "??"
1824
+ status = _("Missing")
1825
+ entry[1] = info
1826
+ entry[2] = status
1827
+ self.content.append(entry)
1828
+
1829
+ def get_pyserial():
1830
+ entry = ["pyserial", "", "", "https://pypi.org/project/pyserial/"]
1831
+ try:
1832
+ import serial
1833
+
1834
+ try:
1835
+ info = serial.__version__
1836
+ except AttributeError:
1837
+ info = "??"
1838
+ status = _("Present")
1839
+ except ImportError:
1840
+ info = "??"
1841
+ status = _("Missing")
1842
+ entry[1] = info
1843
+ entry[2] = status
1844
+ self.content.append(entry)
1845
+
1846
+ def get_opencv():
1847
+ entry = ["opencv", "", "", "https://opencv.org/"]
1848
+ try:
1849
+ import cv2
1850
+
1851
+ try:
1852
+ info = cv2.__version__
1853
+ except AttributeError:
1854
+ info = "??"
1855
+ status = _("Present")
1856
+ except ImportError:
1857
+ info = "??"
1858
+ status = _("Missing")
1859
+ entry[1] = info
1860
+ entry[2] = status
1861
+ self.content.append(entry)
1862
+
1863
+ def get_barcode():
1864
+ entry = [
1865
+ "barcode-plugin",
1866
+ "",
1867
+ "",
1868
+ "https://pypi.org/project/meerk40t-barcodes/",
1869
+ ]
1870
+ has_barcodes = False
1871
+ try:
1872
+ import barcodes as mk
1873
+
1874
+ has_barcodes = True
1875
+ if hasattr(mk, "version"):
1876
+ info = mk.version
1877
+ elif hasattr(mk, "__version__"):
1878
+ info = mk.__version__
1879
+ else:
1880
+ info = "??"
1881
+ status = _("Present")
1882
+ except ImportError:
1883
+ info = "??"
1884
+ status = _("Missing")
1885
+ entry[1] = info
1886
+ entry[2] = status
1887
+ self.content.append(entry)
1888
+ if has_barcodes:
1889
+ try:
1890
+ import qrcode
1891
+
1892
+ info = "??"
1893
+ try:
1894
+ info = qrcode.__version__
1895
+ except AttributeError:
1896
+ pass
1897
+ entry = (
1898
+ "qrcode",
1899
+ info,
1900
+ _("Present"),
1901
+ "https://github.com/lincolnloop/python-qrcode",
1902
+ )
1903
+ self.content.append(entry)
1904
+ except ImportError:
1905
+ pass
1906
+ try:
1907
+ import barcode
1908
+
1909
+ info = "??"
1910
+ try:
1911
+ info = barcode.version
1912
+ except AttributeError:
1913
+ pass
1914
+ entry = (
1915
+ "barcodes",
1916
+ info,
1917
+ _("Present"),
1918
+ "https://github.com/WhyNotHugo/python-barcode",
1919
+ )
1920
+ self.content.append(entry)
1921
+ except ImportError:
1922
+ pass
1923
+
1924
+ def get_clipper():
1925
+ entry = ["clipper", "", "", "https://pypi.org/project/pyclipr/"]
1926
+ try:
1927
+ import pyclipr
1928
+
1929
+ try:
1930
+ info = pyclipr.__version__
1931
+ except AttributeError:
1932
+ info = "??"
1933
+ status = _("Present")
1934
+ except ImportError:
1935
+ info = "??"
1936
+ status = _("Missing")
1937
+ entry[1] = info
1938
+ entry[2] = status
1939
+ self.content.append(entry)
1940
+
1941
+ def get_numba():
1942
+ entry = ["numba", "", "", "https://numba.pydata.org/"]
1943
+ try:
1944
+ import numba
1945
+
1946
+ try:
1947
+ info = numba.__version__
1948
+ except AttributeError:
1949
+ info = "??"
1950
+ status = _("Present")
1951
+ except (ImportError, AttributeError):
1952
+ info = "??"
1953
+ status = _("Missing")
1954
+ entry[1] = info
1955
+ entry[2] = status
1956
+ self.content.append(entry)
1957
+
1958
+ self.content.clear()
1959
+ get_python()
1960
+ get_wxp()
1961
+ get_numpy()
1962
+ get_pillow()
1963
+ get_potrace()
1964
+ get_ezdxf()
1965
+ get_pyusb()
1966
+ get_pyserial()
1967
+ get_opencv()
1968
+ get_barcode()
1969
+ get_clipper()
1970
+ get_numba()
1971
+
1972
+ def copy_debug_info(self, event):
1973
+ if wx.TheClipboard.Open():
1974
+ msg = ""
1975
+ for entry in self.content:
1976
+ msg += f"{entry[0]}: {entry[1]}, {entry[2]} \n"
1977
+ # print (msg)
1978
+ wx.TheClipboard.SetData(wx.TextDataObject(msg))
1979
+ wx.TheClipboard.Close()
1980
+ else:
1981
+ # print ("couldn't access clipboard")
1982
+ wx.Bell()
1983
+
1984
+ def pane_show(self):
1985
+ self.list_preview.load_column_widths()
1986
+
1987
+ def pane_hide(self):
1988
+ self.list_preview.save_column_widths()
1989
+
1990
+ class About(MWindow):
1991
+ def __init__(self, *args, **kwds):
1992
+ from platform import system as _sys
1993
+
1994
+ super().__init__(
1995
+ 480,
1996
+ 360,
1997
+ *args,
1998
+ style=wx.CAPTION
1999
+ | wx.CLOSE_BOX
2000
+ | wx.FRAME_FLOAT_ON_PARENT
2001
+ | wx.TAB_TRAVERSAL
2002
+ | (wx.RESIZE_BORDER if system() != "Darwin" else 0),
2003
+ **kwds,
2004
+ )
2005
+ self.notebook_main = wx.aui.AuiNotebook(
2006
+ self,
2007
+ -1,
2008
+ style=wx.aui.AUI_NB_TAB_EXTERNAL_MOVE
2009
+ | wx.aui.AUI_NB_SCROLL_BUTTONS
2010
+ | wx.aui.AUI_NB_TAB_SPLIT
2011
+ | wx.aui.AUI_NB_TAB_MOVE,
2012
+ )
2013
+ self.window_context.themes.set_window_colors(self.notebook_main)
2014
+ bg_std = self.window_context.themes.get("win_bg")
2015
+ bg_active = self.window_context.themes.get("highlight")
2016
+ self.notebook_main.GetArtProvider().SetColour(bg_std)
2017
+ self.notebook_main.GetArtProvider().SetActiveColour(bg_active)
2018
+
2019
+ self.sizer.Add(self.notebook_main, 1, wx.EXPAND, 0)
2020
+
2021
+ self.panel_about = AboutPanel(self, wx.ID_ANY, context=self.context)
2022
+ self.panel_david = DavidPanel(self, wx.ID_ANY, context=self.context)
2023
+ self.panel_info = InformationPanel(self, wx.ID_ANY, context=self.context)
2024
+ self.panel_component = ComponentPanel(self, wx.ID_ANY, context=self.context)
2025
+ self.notebook_main.AddPage(self.panel_about, _("About"))
2026
+ self.notebook_main.AddPage(self.panel_david, _("In Memory of David Olsen"))
2027
+ self.notebook_main.AddPage(self.panel_info, _("System-Information"))
2028
+ self.notebook_main.AddPage(self.panel_component, _("MeerK40t-Components"))
2029
+
2030
+ self.add_module_delegate(self.panel_about)
2031
+ self.add_module_delegate(self.panel_david)
2032
+ self.add_module_delegate(self.panel_info)
2033
+ self.add_module_delegate(self.panel_component)
2034
+ _icon = wx.NullIcon
2035
+ _icon.CopyFromBitmap(icon_about.GetBitmap())
2036
+ self.SetIcon(_icon)
2037
+ self.SetTitle(_("About"))
2038
+
2039
+ name = self.context.kernel.name
2040
+ version = self.context.kernel.version
2041
+ self.SetTitle(_("About {name} v{version}").format(name=name, version=version))
2042
+ self.restore_aspect()