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.
- meerk40t/__init__.py +1 -1
- meerk40t/balormk/balor_params.py +167 -167
- meerk40t/balormk/clone_loader.py +457 -457
- meerk40t/balormk/controller.py +1566 -1512
- meerk40t/balormk/cylindermod.py +64 -0
- meerk40t/balormk/device.py +966 -1959
- meerk40t/balormk/driver.py +778 -591
- meerk40t/balormk/galvo_commands.py +1195 -0
- meerk40t/balormk/gui/balorconfig.py +237 -111
- meerk40t/balormk/gui/balorcontroller.py +191 -184
- meerk40t/balormk/gui/baloroperationproperties.py +116 -115
- meerk40t/balormk/gui/corscene.py +845 -0
- meerk40t/balormk/gui/gui.py +179 -147
- meerk40t/balormk/livelightjob.py +466 -382
- meerk40t/balormk/mock_connection.py +131 -109
- meerk40t/balormk/plugin.py +133 -135
- meerk40t/balormk/usb_connection.py +306 -301
- meerk40t/camera/__init__.py +1 -1
- meerk40t/camera/camera.py +514 -397
- meerk40t/camera/gui/camerapanel.py +1241 -1095
- meerk40t/camera/gui/gui.py +58 -58
- meerk40t/camera/plugin.py +441 -399
- meerk40t/ch341/__init__.py +27 -27
- meerk40t/ch341/ch341device.py +628 -628
- meerk40t/ch341/libusb.py +595 -589
- meerk40t/ch341/mock.py +171 -171
- meerk40t/ch341/windriver.py +157 -157
- meerk40t/constants.py +13 -0
- meerk40t/core/__init__.py +1 -1
- meerk40t/core/bindalias.py +550 -539
- meerk40t/core/core.py +47 -47
- meerk40t/core/cutcode/cubiccut.py +73 -73
- meerk40t/core/cutcode/cutcode.py +315 -312
- meerk40t/core/cutcode/cutgroup.py +141 -137
- meerk40t/core/cutcode/cutobject.py +192 -185
- meerk40t/core/cutcode/dwellcut.py +37 -37
- meerk40t/core/cutcode/gotocut.py +29 -29
- meerk40t/core/cutcode/homecut.py +29 -29
- meerk40t/core/cutcode/inputcut.py +34 -34
- meerk40t/core/cutcode/linecut.py +33 -33
- meerk40t/core/cutcode/outputcut.py +34 -34
- meerk40t/core/cutcode/plotcut.py +335 -335
- meerk40t/core/cutcode/quadcut.py +61 -61
- meerk40t/core/cutcode/rastercut.py +168 -148
- meerk40t/core/cutcode/waitcut.py +34 -34
- meerk40t/core/cutplan.py +1843 -1316
- meerk40t/core/drivers.py +330 -329
- meerk40t/core/elements/align.py +801 -669
- meerk40t/core/elements/branches.py +1844 -1507
- meerk40t/core/elements/clipboard.py +229 -219
- meerk40t/core/elements/element_treeops.py +4561 -2837
- meerk40t/core/elements/element_types.py +125 -105
- meerk40t/core/elements/elements.py +4329 -3617
- meerk40t/core/elements/files.py +117 -64
- meerk40t/core/elements/geometry.py +473 -224
- meerk40t/core/elements/grid.py +467 -316
- meerk40t/core/elements/materials.py +158 -94
- meerk40t/core/elements/notes.py +50 -38
- meerk40t/core/elements/offset_clpr.py +933 -912
- meerk40t/core/elements/offset_mk.py +963 -955
- meerk40t/core/elements/penbox.py +339 -267
- meerk40t/core/elements/placements.py +300 -83
- meerk40t/core/elements/render.py +785 -687
- meerk40t/core/elements/shapes.py +2618 -2092
- meerk40t/core/elements/trace.py +651 -563
- meerk40t/core/elements/tree_commands.py +415 -409
- meerk40t/core/elements/undo_redo.py +116 -58
- meerk40t/core/elements/wordlist.py +319 -200
- meerk40t/core/exceptions.py +9 -9
- meerk40t/core/laserjob.py +220 -220
- meerk40t/core/logging.py +63 -63
- meerk40t/core/node/blobnode.py +83 -86
- meerk40t/core/node/bootstrap.py +105 -103
- meerk40t/core/node/branch_elems.py +40 -31
- meerk40t/core/node/branch_ops.py +45 -38
- meerk40t/core/node/branch_regmark.py +48 -41
- meerk40t/core/node/cutnode.py +29 -32
- meerk40t/core/node/effect_hatch.py +375 -257
- meerk40t/core/node/effect_warp.py +398 -0
- meerk40t/core/node/effect_wobble.py +441 -309
- meerk40t/core/node/elem_ellipse.py +404 -309
- meerk40t/core/node/elem_image.py +1082 -801
- meerk40t/core/node/elem_line.py +358 -292
- meerk40t/core/node/elem_path.py +259 -201
- meerk40t/core/node/elem_point.py +129 -102
- meerk40t/core/node/elem_polyline.py +310 -246
- meerk40t/core/node/elem_rect.py +376 -286
- meerk40t/core/node/elem_text.py +445 -418
- meerk40t/core/node/filenode.py +59 -40
- meerk40t/core/node/groupnode.py +138 -74
- meerk40t/core/node/image_processed.py +777 -766
- meerk40t/core/node/image_raster.py +156 -113
- meerk40t/core/node/layernode.py +31 -31
- meerk40t/core/node/mixins.py +135 -107
- meerk40t/core/node/node.py +1427 -1304
- meerk40t/core/node/nutils.py +117 -114
- meerk40t/core/node/op_cut.py +462 -335
- meerk40t/core/node/op_dots.py +296 -251
- meerk40t/core/node/op_engrave.py +414 -311
- meerk40t/core/node/op_image.py +755 -369
- meerk40t/core/node/op_raster.py +787 -522
- meerk40t/core/node/place_current.py +37 -40
- meerk40t/core/node/place_point.py +329 -126
- meerk40t/core/node/refnode.py +58 -47
- meerk40t/core/node/rootnode.py +225 -219
- meerk40t/core/node/util_console.py +48 -48
- meerk40t/core/node/util_goto.py +84 -65
- meerk40t/core/node/util_home.py +61 -61
- meerk40t/core/node/util_input.py +102 -102
- meerk40t/core/node/util_output.py +102 -102
- meerk40t/core/node/util_wait.py +65 -65
- meerk40t/core/parameters.py +709 -707
- meerk40t/core/planner.py +875 -785
- meerk40t/core/plotplanner.py +656 -652
- meerk40t/core/space.py +120 -113
- meerk40t/core/spoolers.py +706 -705
- meerk40t/core/svg_io.py +1836 -1549
- meerk40t/core/treeop.py +534 -445
- meerk40t/core/undos.py +278 -124
- meerk40t/core/units.py +784 -680
- meerk40t/core/view.py +393 -322
- meerk40t/core/webhelp.py +62 -62
- meerk40t/core/wordlist.py +513 -504
- meerk40t/cylinder/cylinder.py +247 -0
- meerk40t/cylinder/gui/cylindersettings.py +41 -0
- meerk40t/cylinder/gui/gui.py +24 -0
- meerk40t/device/__init__.py +1 -1
- meerk40t/device/basedevice.py +322 -123
- meerk40t/device/devicechoices.py +50 -0
- meerk40t/device/dummydevice.py +163 -128
- meerk40t/device/gui/defaultactions.py +618 -602
- meerk40t/device/gui/effectspanel.py +114 -0
- meerk40t/device/gui/formatterpanel.py +253 -290
- meerk40t/device/gui/warningpanel.py +337 -260
- meerk40t/device/mixins.py +13 -13
- meerk40t/dxf/__init__.py +1 -1
- meerk40t/dxf/dxf_io.py +766 -554
- meerk40t/dxf/plugin.py +47 -35
- meerk40t/external_plugins.py +79 -79
- meerk40t/external_plugins_build.py +28 -28
- meerk40t/extra/cag.py +112 -116
- meerk40t/extra/coolant.py +403 -0
- meerk40t/extra/encode_detect.py +198 -0
- meerk40t/extra/ezd.py +1165 -1165
- meerk40t/extra/hershey.py +835 -340
- meerk40t/extra/imageactions.py +322 -316
- meerk40t/extra/inkscape.py +630 -622
- meerk40t/extra/lbrn.py +424 -424
- meerk40t/extra/outerworld.py +284 -0
- meerk40t/extra/param_functions.py +1542 -1556
- meerk40t/extra/potrace.py +257 -253
- meerk40t/extra/serial_exchange.py +118 -0
- meerk40t/extra/updater.py +602 -453
- meerk40t/extra/vectrace.py +147 -146
- meerk40t/extra/winsleep.py +83 -83
- meerk40t/extra/xcs_reader.py +597 -0
- meerk40t/fill/fills.py +781 -335
- meerk40t/fill/patternfill.py +1061 -1061
- meerk40t/fill/patterns.py +614 -567
- meerk40t/grbl/control.py +87 -87
- meerk40t/grbl/controller.py +990 -903
- meerk40t/grbl/device.py +1081 -768
- meerk40t/grbl/driver.py +989 -771
- meerk40t/grbl/emulator.py +532 -497
- meerk40t/grbl/gcodejob.py +783 -767
- meerk40t/grbl/gui/grblconfiguration.py +373 -298
- meerk40t/grbl/gui/grblcontroller.py +485 -271
- meerk40t/grbl/gui/grblhardwareconfig.py +269 -153
- meerk40t/grbl/gui/grbloperationconfig.py +105 -0
- meerk40t/grbl/gui/gui.py +147 -116
- meerk40t/grbl/interpreter.py +44 -44
- meerk40t/grbl/loader.py +22 -22
- meerk40t/grbl/mock_connection.py +56 -56
- meerk40t/grbl/plugin.py +294 -264
- meerk40t/grbl/serial_connection.py +93 -88
- meerk40t/grbl/tcp_connection.py +81 -79
- meerk40t/grbl/ws_connection.py +112 -0
- meerk40t/gui/__init__.py +1 -1
- meerk40t/gui/about.py +2042 -296
- meerk40t/gui/alignment.py +1644 -1608
- meerk40t/gui/autoexec.py +199 -0
- meerk40t/gui/basicops.py +791 -670
- meerk40t/gui/bufferview.py +77 -71
- meerk40t/gui/busy.py +170 -133
- meerk40t/gui/choicepropertypanel.py +1673 -1469
- meerk40t/gui/consolepanel.py +706 -542
- meerk40t/gui/devicepanel.py +687 -581
- meerk40t/gui/dialogoptions.py +110 -107
- meerk40t/gui/executejob.py +316 -306
- meerk40t/gui/fonts.py +90 -90
- meerk40t/gui/functionwrapper.py +252 -0
- meerk40t/gui/gui_mixins.py +729 -0
- meerk40t/gui/guicolors.py +205 -182
- meerk40t/gui/help_assets/help_assets.py +218 -201
- meerk40t/gui/helper.py +154 -0
- meerk40t/gui/hersheymanager.py +1430 -846
- meerk40t/gui/icons.py +3422 -2747
- meerk40t/gui/imagesplitter.py +555 -508
- meerk40t/gui/keymap.py +354 -344
- meerk40t/gui/laserpanel.py +892 -806
- meerk40t/gui/laserrender.py +1470 -1232
- meerk40t/gui/lasertoolpanel.py +805 -793
- meerk40t/gui/magnetoptions.py +436 -0
- meerk40t/gui/materialmanager.py +2917 -0
- meerk40t/gui/materialtest.py +1722 -1694
- meerk40t/gui/mkdebug.py +646 -359
- meerk40t/gui/mwindow.py +163 -140
- meerk40t/gui/navigationpanels.py +2605 -2467
- meerk40t/gui/notes.py +143 -142
- meerk40t/gui/opassignment.py +414 -410
- meerk40t/gui/operation_info.py +310 -299
- meerk40t/gui/plugin.py +494 -328
- meerk40t/gui/position.py +714 -669
- meerk40t/gui/preferences.py +901 -650
- meerk40t/gui/propertypanels/attributes.py +1461 -1131
- meerk40t/gui/propertypanels/blobproperty.py +117 -114
- meerk40t/gui/propertypanels/consoleproperty.py +83 -80
- meerk40t/gui/propertypanels/gotoproperty.py +77 -0
- meerk40t/gui/propertypanels/groupproperties.py +223 -217
- meerk40t/gui/propertypanels/hatchproperty.py +489 -469
- meerk40t/gui/propertypanels/imageproperty.py +2244 -1384
- meerk40t/gui/propertypanels/inputproperty.py +59 -58
- meerk40t/gui/propertypanels/opbranchproperties.py +82 -80
- meerk40t/gui/propertypanels/operationpropertymain.py +1890 -1638
- meerk40t/gui/propertypanels/outputproperty.py +59 -58
- meerk40t/gui/propertypanels/pathproperty.py +389 -380
- meerk40t/gui/propertypanels/placementproperty.py +1214 -383
- meerk40t/gui/propertypanels/pointproperty.py +140 -136
- meerk40t/gui/propertypanels/propertywindow.py +313 -181
- meerk40t/gui/propertypanels/rasterwizardpanels.py +996 -912
- meerk40t/gui/propertypanels/regbranchproperties.py +76 -0
- meerk40t/gui/propertypanels/textproperty.py +770 -755
- meerk40t/gui/propertypanels/waitproperty.py +56 -55
- meerk40t/gui/propertypanels/warpproperty.py +121 -0
- meerk40t/gui/propertypanels/wobbleproperty.py +255 -204
- meerk40t/gui/ribbon.py +2468 -2210
- meerk40t/gui/scene/scene.py +1100 -1051
- meerk40t/gui/scene/sceneconst.py +22 -22
- meerk40t/gui/scene/scenepanel.py +439 -349
- meerk40t/gui/scene/scenespacewidget.py +365 -365
- meerk40t/gui/scene/widget.py +518 -505
- meerk40t/gui/scenewidgets/affinemover.py +215 -215
- meerk40t/gui/scenewidgets/attractionwidget.py +315 -309
- meerk40t/gui/scenewidgets/bedwidget.py +120 -97
- meerk40t/gui/scenewidgets/elementswidget.py +137 -107
- meerk40t/gui/scenewidgets/gridwidget.py +785 -745
- meerk40t/gui/scenewidgets/guidewidget.py +765 -765
- meerk40t/gui/scenewidgets/laserpathwidget.py +66 -66
- meerk40t/gui/scenewidgets/machineoriginwidget.py +86 -86
- meerk40t/gui/scenewidgets/nodeselector.py +28 -28
- meerk40t/gui/scenewidgets/rectselectwidget.py +589 -346
- meerk40t/gui/scenewidgets/relocatewidget.py +33 -33
- meerk40t/gui/scenewidgets/reticlewidget.py +83 -83
- meerk40t/gui/scenewidgets/selectionwidget.py +2952 -2756
- meerk40t/gui/simpleui.py +357 -333
- meerk40t/gui/simulation.py +2431 -2094
- meerk40t/gui/snapoptions.py +208 -203
- meerk40t/gui/spoolerpanel.py +1227 -1180
- meerk40t/gui/statusbarwidgets/defaultoperations.py +480 -353
- meerk40t/gui/statusbarwidgets/infowidget.py +520 -483
- meerk40t/gui/statusbarwidgets/opassignwidget.py +356 -355
- meerk40t/gui/statusbarwidgets/selectionwidget.py +172 -171
- meerk40t/gui/statusbarwidgets/shapepropwidget.py +754 -236
- meerk40t/gui/statusbarwidgets/statusbar.py +272 -260
- meerk40t/gui/statusbarwidgets/statusbarwidget.py +268 -270
- meerk40t/gui/statusbarwidgets/strokewidget.py +267 -251
- meerk40t/gui/themes.py +200 -78
- meerk40t/gui/tips.py +591 -0
- meerk40t/gui/toolwidgets/circlebrush.py +35 -35
- meerk40t/gui/toolwidgets/toolcircle.py +248 -242
- meerk40t/gui/toolwidgets/toolcontainer.py +82 -77
- meerk40t/gui/toolwidgets/tooldraw.py +97 -90
- meerk40t/gui/toolwidgets/toolellipse.py +219 -212
- meerk40t/gui/toolwidgets/toolimagecut.py +25 -132
- meerk40t/gui/toolwidgets/toolline.py +39 -144
- meerk40t/gui/toolwidgets/toollinetext.py +79 -236
- meerk40t/gui/toolwidgets/toollinetext_inline.py +296 -0
- meerk40t/gui/toolwidgets/toolmeasure.py +160 -216
- meerk40t/gui/toolwidgets/toolnodeedit.py +2088 -2074
- meerk40t/gui/toolwidgets/toolnodemove.py +92 -94
- meerk40t/gui/toolwidgets/toolparameter.py +754 -668
- meerk40t/gui/toolwidgets/toolplacement.py +108 -108
- meerk40t/gui/toolwidgets/toolpoint.py +68 -59
- meerk40t/gui/toolwidgets/toolpointlistbuilder.py +294 -0
- meerk40t/gui/toolwidgets/toolpointmove.py +183 -0
- meerk40t/gui/toolwidgets/toolpolygon.py +288 -403
- meerk40t/gui/toolwidgets/toolpolyline.py +38 -196
- meerk40t/gui/toolwidgets/toolrect.py +211 -207
- meerk40t/gui/toolwidgets/toolrelocate.py +72 -72
- meerk40t/gui/toolwidgets/toolribbon.py +598 -113
- meerk40t/gui/toolwidgets/tooltabedit.py +546 -0
- meerk40t/gui/toolwidgets/tooltext.py +98 -89
- meerk40t/gui/toolwidgets/toolvector.py +213 -204
- meerk40t/gui/toolwidgets/toolwidget.py +39 -39
- meerk40t/gui/usbconnect.py +98 -91
- meerk40t/gui/utilitywidgets/buttonwidget.py +18 -18
- meerk40t/gui/utilitywidgets/checkboxwidget.py +90 -90
- meerk40t/gui/utilitywidgets/controlwidget.py +14 -14
- meerk40t/gui/utilitywidgets/cyclocycloidwidget.py +343 -340
- meerk40t/gui/utilitywidgets/debugwidgets.py +148 -0
- meerk40t/gui/utilitywidgets/handlewidget.py +27 -27
- meerk40t/gui/utilitywidgets/harmonograph.py +450 -447
- meerk40t/gui/utilitywidgets/openclosewidget.py +40 -40
- meerk40t/gui/utilitywidgets/rotationwidget.py +54 -54
- meerk40t/gui/utilitywidgets/scalewidget.py +75 -75
- meerk40t/gui/utilitywidgets/seekbarwidget.py +183 -183
- meerk40t/gui/utilitywidgets/togglewidget.py +142 -142
- meerk40t/gui/utilitywidgets/toolbarwidget.py +8 -8
- meerk40t/gui/wordlisteditor.py +985 -931
- meerk40t/gui/wxmeerk40t.py +1444 -1169
- meerk40t/gui/wxmmain.py +5578 -4112
- meerk40t/gui/wxmribbon.py +1591 -1076
- meerk40t/gui/wxmscene.py +1635 -1453
- meerk40t/gui/wxmtree.py +2410 -2089
- meerk40t/gui/wxutils.py +1769 -1099
- meerk40t/gui/zmatrix.py +102 -102
- meerk40t/image/__init__.py +1 -1
- meerk40t/image/dither.py +429 -0
- meerk40t/image/imagetools.py +2778 -2269
- meerk40t/internal_plugins.py +150 -130
- meerk40t/kernel/__init__.py +63 -12
- meerk40t/kernel/channel.py +259 -212
- meerk40t/kernel/context.py +538 -538
- meerk40t/kernel/exceptions.py +41 -41
- meerk40t/kernel/functions.py +463 -414
- meerk40t/kernel/jobs.py +100 -100
- meerk40t/kernel/kernel.py +3809 -3571
- meerk40t/kernel/lifecycles.py +71 -71
- meerk40t/kernel/module.py +49 -49
- meerk40t/kernel/service.py +147 -147
- meerk40t/kernel/settings.py +383 -343
- meerk40t/lihuiyu/controller.py +883 -876
- meerk40t/lihuiyu/device.py +1181 -1069
- meerk40t/lihuiyu/driver.py +1466 -1372
- meerk40t/lihuiyu/gui/gui.py +127 -106
- meerk40t/lihuiyu/gui/lhyaccelgui.py +377 -363
- meerk40t/lihuiyu/gui/lhycontrollergui.py +741 -651
- meerk40t/lihuiyu/gui/lhydrivergui.py +470 -446
- meerk40t/lihuiyu/gui/lhyoperationproperties.py +238 -237
- meerk40t/lihuiyu/gui/tcpcontroller.py +226 -190
- meerk40t/lihuiyu/interpreter.py +53 -53
- meerk40t/lihuiyu/laserspeed.py +450 -450
- meerk40t/lihuiyu/loader.py +90 -90
- meerk40t/lihuiyu/parser.py +404 -404
- meerk40t/lihuiyu/plugin.py +101 -102
- meerk40t/lihuiyu/tcp_connection.py +111 -109
- meerk40t/main.py +231 -165
- meerk40t/moshi/builder.py +788 -781
- meerk40t/moshi/controller.py +505 -499
- meerk40t/moshi/device.py +495 -442
- meerk40t/moshi/driver.py +862 -696
- meerk40t/moshi/gui/gui.py +78 -76
- meerk40t/moshi/gui/moshicontrollergui.py +538 -522
- meerk40t/moshi/gui/moshidrivergui.py +87 -75
- meerk40t/moshi/plugin.py +43 -43
- meerk40t/network/console_server.py +102 -57
- meerk40t/network/kernelserver.py +10 -9
- meerk40t/network/tcp_server.py +142 -140
- meerk40t/network/udp_server.py +103 -77
- meerk40t/network/web_server.py +390 -0
- meerk40t/newly/controller.py +1158 -1144
- meerk40t/newly/device.py +874 -732
- meerk40t/newly/driver.py +540 -412
- meerk40t/newly/gui/gui.py +219 -188
- meerk40t/newly/gui/newlyconfig.py +116 -101
- meerk40t/newly/gui/newlycontroller.py +193 -186
- meerk40t/newly/gui/operationproperties.py +51 -51
- meerk40t/newly/mock_connection.py +82 -82
- meerk40t/newly/newly_params.py +56 -56
- meerk40t/newly/plugin.py +1214 -1246
- meerk40t/newly/usb_connection.py +322 -322
- meerk40t/rotary/gui/gui.py +52 -46
- meerk40t/rotary/gui/rotarysettings.py +240 -232
- meerk40t/rotary/rotary.py +202 -98
- meerk40t/ruida/control.py +291 -91
- meerk40t/ruida/controller.py +138 -1088
- meerk40t/ruida/device.py +672 -231
- meerk40t/ruida/driver.py +534 -472
- meerk40t/ruida/emulator.py +1494 -1491
- meerk40t/ruida/exceptions.py +4 -4
- meerk40t/ruida/gui/gui.py +71 -76
- meerk40t/ruida/gui/ruidaconfig.py +239 -72
- meerk40t/ruida/gui/ruidacontroller.py +187 -184
- meerk40t/ruida/gui/ruidaoperationproperties.py +48 -47
- meerk40t/ruida/loader.py +54 -52
- meerk40t/ruida/mock_connection.py +57 -109
- meerk40t/ruida/plugin.py +124 -87
- meerk40t/ruida/rdjob.py +2084 -945
- meerk40t/ruida/serial_connection.py +116 -0
- meerk40t/ruida/tcp_connection.py +146 -0
- meerk40t/ruida/udp_connection.py +73 -0
- meerk40t/svgelements.py +9671 -9669
- meerk40t/tools/driver_to_path.py +584 -579
- meerk40t/tools/geomstr.py +5583 -4680
- meerk40t/tools/jhfparser.py +357 -292
- meerk40t/tools/kerftest.py +904 -890
- meerk40t/tools/livinghinges.py +1168 -1033
- meerk40t/tools/pathtools.py +987 -949
- meerk40t/tools/pmatrix.py +234 -0
- meerk40t/tools/pointfinder.py +942 -942
- meerk40t/tools/polybool.py +940 -940
- meerk40t/tools/rasterplotter.py +1660 -547
- meerk40t/tools/shxparser.py +989 -901
- meerk40t/tools/ttfparser.py +726 -446
- meerk40t/tools/zinglplotter.py +595 -593
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7010.dist-info}/LICENSE +21 -21
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7010.dist-info}/METADATA +150 -139
- meerk40t-0.9.7010.dist-info/RECORD +445 -0
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7010.dist-info}/WHEEL +1 -1
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7010.dist-info}/top_level.txt +0 -1
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7010.dist-info}/zip-safe +1 -1
- meerk40t/balormk/elementlightjob.py +0 -159
- meerk40t-0.9.3001.dist-info/RECORD +0 -437
- test/bootstrap.py +0 -63
- test/test_cli.py +0 -12
- test/test_core_cutcode.py +0 -418
- test/test_core_elements.py +0 -144
- test/test_core_plotplanner.py +0 -397
- test/test_core_viewports.py +0 -312
- test/test_drivers_grbl.py +0 -108
- test/test_drivers_lihuiyu.py +0 -443
- test/test_drivers_newly.py +0 -113
- test/test_element_degenerate_points.py +0 -43
- test/test_elements_classify.py +0 -97
- test/test_elements_penbox.py +0 -22
- test/test_file_svg.py +0 -176
- test/test_fill.py +0 -155
- test/test_geomstr.py +0 -1523
- test/test_geomstr_nodes.py +0 -18
- test/test_imagetools_actualize.py +0 -306
- test/test_imagetools_wizard.py +0 -258
- test/test_kernel.py +0 -200
- test/test_laser_speeds.py +0 -3303
- test/test_length.py +0 -57
- test/test_lifecycle.py +0 -66
- test/test_operations.py +0 -251
- test/test_operations_hatch.py +0 -57
- test/test_ruida.py +0 -19
- test/test_spooler.py +0 -22
- test/test_tools_rasterplotter.py +0 -29
- test/test_wobble.py +0 -133
- test/test_zingl.py +0 -124
- {test → meerk40t/cylinder}/__init__.py +0 -0
- /meerk40t/{core/element_commands.py → cylinder/gui/__init__.py} +0 -0
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7010.dist-info}/entry_points.txt +0 -0
meerk40t/balormk/clone_loader.py
CHANGED
@@ -1,457 +1,457 @@
|
|
1
|
-
"""
|
2
|
-
This code initializes the FPGA on cloned boards.
|
3
|
-
"""
|
4
|
-
import hashlib
|
5
|
-
import struct
|
6
|
-
|
7
|
-
import usb.core
|
8
|
-
from usb.util import (
|
9
|
-
CTRL_OUT,
|
10
|
-
CTRL_RECIPIENT_DEVICE,
|
11
|
-
CTRL_TYPE_VENDOR,
|
12
|
-
build_request_type,
|
13
|
-
)
|
14
|
-
|
15
|
-
VENDER_ID = 0x9588
|
16
|
-
PRODUCT_ID = 0x9980
|
17
|
-
|
18
|
-
request = build_request_type(CTRL_OUT, CTRL_TYPE_VENDOR, CTRL_RECIPIENT_DEVICE)
|
19
|
-
|
20
|
-
|
21
|
-
init = [
|
22
|
-
(3654, b"\x00\x01\x02\x02\x03\x03\x04\x04\x05\x05"),
|
23
|
-
(818, b"\xe4\xf5,\xf5+\xf5*\xf5)\xc2\x03\xc2\x00\xd2\x02\xc2"),
|
24
|
-
(834, b"\x01\x12\x07\xf7~\x0c\x7f\x00\x8e\n\x8f\x0bu\x12\x0cu"),
|
25
|
-
(850, b"\x13\x12u\x08\x0cu\t\x1cu\x10\x0cu\x11Ju\x14"),
|
26
|
-
(866, b"\x0cu\x15\x86\xeeT\xc0p\x03\x02\x045u-\x00u"),
|
27
|
-
(882, b".\x80\x8e/\x8f0\xc3t\xa8\x9f\xfft\x0c\x9e\xcf$"),
|
28
|
-
(898, b"\x02\xcf4\x00\xfe\xe4\x8f(\x8e'\xf5&\xf5%\xf5$"),
|
29
|
-
(914, b"\xf5#\xf5\"\xf5!\xaf(\xae'\xad&\xac%\xab$"),
|
30
|
-
(930, b'\xaa#\xa9"\xa8!\xc3\x12\r\xa9P5\xae#\xaf$'),
|
31
|
-
(946, b"\xe50/\xf5\x82\xe5/>\xf5\x83\xe0\xfd\xe5./\xf5"),
|
32
|
-
(962, b"\x82\xe5->\xf5\x83\xed\xf0\xe4\xfa\xf9\xf8\xef$\x01\xf5"),
|
33
|
-
(978, b'$\xea>\xf5#\xe95"\xf5"\xe85!\xf5!\x80'),
|
34
|
-
(994, b"\xb5\x85-\n\x85.\x0bt\x00$\x80\xfft\x0c4\xff"),
|
35
|
-
(1010, b"\xfe\xc3\xe5\x13\x9f\xf5\x13\xe5\x12\x9e\xf5\x12\xc3\xe5\r\x9f"),
|
36
|
-
(1026, b"\xf5\r\xe5\x0c\x9e\xf5\x0c\xc3\xe5\x0f\x9f\xf5\x0f\xe5\x0e\x9e"),
|
37
|
-
(1042, b"\xf5\x0e\xc3\xe5\t\x9f\xf5\t\xe5\x08\x9e\xf5\x08\xc3\xe5\x11"),
|
38
|
-
(1058, b"\x9f\xf5\x11\xe5\x10\x9e\xf5\x10\xc3\xe5\x15\x9f\xf5\x15\xe5\x14"),
|
39
|
-
(1074, b"\x9e\xf5\x14\xd2\xe8C\xd8 \x90\xe6h\xe0D\t\xf0\x90"),
|
40
|
-
(1090, b"\xe6\x82\xe0D\x10\xf0\x90\xe6\\\xe0D=\xf0\xd2\xaf\xd2"),
|
41
|
-
(1106, b"\x07\x12\x0c\xe0S\x8e\xf8\xc2\x03\x12\x04\x950\x01\x05\x12"),
|
42
|
-
(1122, b"\x00\x80\xc2\x010\x03\xf2\x12\x08\xfdP\xed\xc2\x03\x12\r"),
|
43
|
-
(1138, b"\xba \x00\x16\x90\xe6\x82\xe00\xe7\x04\xe0 \xe1\xef\x90"),
|
44
|
-
(1154, b"\xe6\x82\xe00\xe6\x04\xe0 \xe0\xe4\x12\r<\x12\x0e\\"),
|
45
|
-
(1170, b"\x80\xc7"),
|
46
|
-
(1172, b'"'),
|
47
|
-
(3643, b'\x90\xe5\r\xe00\xe4\x02\xc3"\xd3"'),
|
48
|
-
(128, b"\x90\xe6\xb9\xe0p\x03\x02\x01j\x14p\x03\x02\x02\x13$"),
|
49
|
-
(144, b"\xfep\x03\x02\x02\xa9$\xfbp\x03\x02\x01d\x14p\x03"),
|
50
|
-
(160, b"\x02\x01^\x14p\x03\x02\x01R\x14p\x03\x02\x01X$"),
|
51
|
-
(176, b"\x05`\x03\x02\x03\x1e\x12\x0e^@\x03\x02\x03*\x90\xe6"),
|
52
|
-
(192, b"\xbb\xe0$\xfe`;\x14`V$\xfd`\x16\x14`@"),
|
53
|
-
(208, b"$\x06pt\xe5\n\x90\xe6\xb3\xf0\xe5\x0b\x90\xe6\xb4\xf0"),
|
54
|
-
(224, b"\x02\x03*\x12\x0e;P\x0f\xe5\x12\x90\xe6\xb3\xf0\xe5\x13"),
|
55
|
-
(240, b"\x90\xe6\xb4\xf0\x02\x03*\x90\xe6\xa0\xe0D\x01\xf0\x02\x03"),
|
56
|
-
(256, b"*\xe5\x0c\x90\xe6\xb3\xf0\xe5\r\x90\xe6\xb4\xf0\x02\x03*"),
|
57
|
-
(272, b"\xe5\x0e\x90\xe6\xb3\xf0\xe5\x0f\x90\xe6\xb4\xf0\x02\x03*\x90"),
|
58
|
-
(288, b"\xe6\xba\xe0\xff\x12\rh\xaa\x06\xa9\x07{\x01\xeaI`"),
|
59
|
-
(304, b"\r\xee\x90\xe6\xb3\xf0\xef\x90\xe6\xb4\xf0\x02\x03*\x90\xe6"),
|
60
|
-
(320, b"\xa0\xe0D\x01\xf0\x02\x03*\x90\xe6\xa0\xe0D\x01\xf0\x02"),
|
61
|
-
(336, b"\x03*\x12\x0e\x1d\x02\x03*\x12\x0eP\x02\x03*\x12\x0b"),
|
62
|
-
(352, b"\xf8\x02\x03*\x12\x0e\x0b\x02\x03*\x12\x0e`@\x03\x02"),
|
63
|
-
(368, b"\x03*\x90\xe6\xb8\xe0$\x7f`+\x14`<$\x02`"),
|
64
|
-
(384, b"\x03\x02\x02\t\xa2\x00\xe43\xff%\xe0\xff\xa2\x02\xe43"),
|
65
|
-
(400, b"O\x90\xe7@\xf0\xe4\xa3\xf0\x90\xe6\x8a\xf0\x90\xe6\x8bt"),
|
66
|
-
(416, b"\x02\xf0\x02\x03*\xe4\x90\xe7@\xf0\xa3\xf0\x90\xe6\x8a\xf0"),
|
67
|
-
(432, b"\x90\xe6\x8bt\x02\xf0\x02\x03*\x90\xe6\xbc\xe0T~\xff"),
|
68
|
-
(448, b"~\x00\xe0\xd3\x94\x80@\x06|\x00}\x01\x80\x04|\x00"),
|
69
|
-
(464, b"}\x00\xecN\xfe\xedO$F\xf5\x82t\x0e>\xf5\x83"),
|
70
|
-
(480, b"\xe4\x93\xff3\x95\xe0\xfe\xef$\xa1\xff\xee4\xe6\x8f\x82"),
|
71
|
-
(496, b"\xf5\x83\xe0T\x01\x90\xe7@\xf0\xe4\xa3\xf0\x90\xe6\x8a\xf0"),
|
72
|
-
(512, b"\x90\xe6\x8bt\x02\xf0\x02\x03*\x90\xe6\xa0\xe0D\x01\xf0"),
|
73
|
-
(528, b"\x02\x03*\x12\x0eb@\x03\x02\x03*\x90\xe6\xb8\xe0$"),
|
74
|
-
(544, b"\xfe`\x1d$\x02`\x03\x02\x03*\x90\xe6\xba\xe0\xb4\x01"),
|
75
|
-
(560, b"\x05\xc2\x00\x02\x03*\x90\xe6\xa0\xe0D\x01\xf0\x02\x03*"),
|
76
|
-
(576, b"\x90\xe6\xba\xe0pY\x90\xe6\xbc\xe0T~\xff~\x00\xe0"),
|
77
|
-
(592, b"\xd3\x94\x80@\x06|\x00}\x01\x80\x04|\x00}\x00\xec"),
|
78
|
-
(608, b"N\xfe\xedO$F\xf5\x82t\x0e>\xf5\x83\xe4\x93\xff"),
|
79
|
-
(624, b"3\x95\xe0\xfe\xef$\xa1\xff\xee4\xe6\x8f\x82\xf5\x83\xe0"),
|
80
|
-
(640, b"T\xfe\xf0\x90\xe6\xbc\xe0T\x80\xff\x13\x13\x13T\x1f\xff"),
|
81
|
-
(656, b"\xe0T\x0f/\x90\xe6\x83\xf0\xe0D \xf0\x02\x03*\x90"),
|
82
|
-
(672, b"\xe6\xa0\xe0D\x01\xf0\x02\x03*\x12\x0edP|\x90\xe6"),
|
83
|
-
(688, b"\xb8\xe0$\xfe` $\x02p[\x90\xe6\xba\xe0\xb4\x01"),
|
84
|
-
(704, b"\x04\xd2\x00\x80e\x90\xe6\xba\xe0d\x02`]\x90\xe6\xa0"),
|
85
|
-
(720, b"\xe0D\x01\xf0\x80T\x90\xe6\xbc\xe0T~\xff~\x00\xe0"),
|
86
|
-
(736, b"\xd3\x94\x80@\x06|\x00}\x01\x80\x04|\x00}\x00\xec"),
|
87
|
-
(752, b"N\xfe\xedO$F\xf5\x82t\x0e>\xf5\x83\xe4\x93\xff"),
|
88
|
-
(768, b"3\x95\xe0\xfe\xef$\xa1\xff\xee4\xe6\x8f\x82\xf5\x83\xe0"),
|
89
|
-
(784, b"D\x01\xf0\x80\x15\x90\xe6\xa0\xe0D\x01\xf0\x80\x0c\x12\r"),
|
90
|
-
(800, b"\x0fP\x07\x90\xe6\xa0\xe0D\x01\xf0\x90\xe6\xa0\xe0D\x80"),
|
91
|
-
(816, b"\xf0"),
|
92
|
-
(817, b'"'),
|
93
|
-
(51, b"\x02\x0eX"),
|
94
|
-
(3672, b"S\xd8\xef2"),
|
95
|
-
(3072, b"\x12\x01\x00\x02\x00\x00\x00@\x88\x95\x99\x98\x00\x00\x01\x02"),
|
96
|
-
(3088, b"\x00\x01\n\x06\x00\x02\x00\x00\x00@\x01\x00\t\x02.\x00"),
|
97
|
-
(3104, b"\x01\x01\x00@\x05\t\x04\x00\x00\x04\xff\x00\x00\x00\x07\x05"),
|
98
|
-
(3120, b"\x01\x02\x00\x02\x00\x07\x05\x81\x02\x00\x02\x00\x07\x05\x02\x02"),
|
99
|
-
(3136, b"\x00\x02\x00\x07\x05\x88\x02\x00\x02\x00\t\x02<\x00\x01\x01"),
|
100
|
-
(3152, b"\x00@\x05\t\x04\x00\x00\x06\xff\x00\x00\x00\x07\x05\x01\x02"),
|
101
|
-
(3168, b"@\x00\x00\x07\x05\x81\x02@\x00\x00\x07\x05\x02\x02@\x00"),
|
102
|
-
(3184, b"\x00\x07\x05\x04\x02@\x00\x00\x07\x05\x06\x02@\x00\x00\x07"),
|
103
|
-
(3200, b"\x05\x88\x02@\x00\x00\x04\x03\t\x04\x0c\x03B\x00J\x00"),
|
104
|
-
(3216, b"J\x00C\x00Z\x00\x12\x03U\x00S\x00B\x00L\x00"),
|
105
|
-
(3232, b"M\x00C\x00V\x002\x00\x00\x00"),
|
106
|
-
(3388, b"\x90\xe6\x82\xe00\xe0\x04\xe0 \xe6\x0b\x90\xe6\x82\xe00"),
|
107
|
-
(3404, b"\xe1\x19\xe00\xe7\x15\x90\xe6\x80\xe0D\x01\xf0\x7f\x14~"),
|
108
|
-
(3420, b'\x00\x12\x0b\x18\x90\xe6\x80\xe0T\xfe\xf0"'),
|
109
|
-
(3296, b"0\x07\t\x90\xe6\x80\xe0D\n\xf0\x80\x07\x90\xe6\x80\xe0"),
|
110
|
-
(3312, b"D\x08\xf0\x7f\xdc~\x05\x12\x0b\x18\x90\xe6]t\xff\xf0"),
|
111
|
-
(3328, b'\x90\xe6_\xf0S\x91\xef\x90\xe6\x80\xe0T\xf7\xf0"'),
|
112
|
-
(3432, b"\xa9\x07"),
|
113
|
-
(3434, b"\xae\x14\xaf\x15\x8f\x82\x8e\x83\xa3\xe0d\x03p\x17\xad\x01"),
|
114
|
-
(3450, b'\x19\xedp\x01"\x8f\x82\x8e\x83\xe0|\x00/\xfd\xec>'),
|
115
|
-
(3466, b"\xfe\xaf\x05\x80\xdf\xe4\xfe\xff"),
|
116
|
-
(3474, b'"'),
|
117
|
-
(3514, b"\x90\xe6\x82\xe0D\xc0\xf0\x90\xe6\x81\xf0C\x87\x01\x00\x00"),
|
118
|
-
(3530, b'\x00\x00\x00"'),
|
119
|
-
(2840, b"\x8e1\x8f2\x90\xe6\x00\xe0T\x18p\x12\xe52$\x01"),
|
120
|
-
(2856, b"\xff\xe451\xc3\x13\xf51\xef\x13\xf52\x80\x15\x90\xe6"),
|
121
|
-
(2872, b"\x00\xe0T\x18\xff\xbf\x10\x0b\xe52%\xe0\xf52\xe51"),
|
122
|
-
(2888, b"3\xf51\xe52\x152\xae1p\x02\x151N`\x05"),
|
123
|
-
(2904, b'\x12\r\xce\x80\xee"'),
|
124
|
-
(3534, b"t\x00\xf5\x86\x90\xfd\xa5|\x05\xa3\xe5\x82E\x83p\xf9"),
|
125
|
-
(3550, b'"'),
|
126
|
-
(67, b"\x02\t\x00"),
|
127
|
-
(83, b"\x02\t\x00"),
|
128
|
-
(2304, b"\x02\x08\xe5\x00\x02\r\xf5\x00\x02\r\xdf\x00\x02\x0b\xe0\x00"),
|
129
|
-
(2320, b"\x02\x0c\xaa\x00\x02\x0b\xa3\x00\x02\x08\xff\x00\x02\x0ef\x00"),
|
130
|
-
(2336, b"\x02\x0eg\x00\x02\x0eh\x00\x02\x0ei\x00\x02\x0ej\x00"),
|
131
|
-
(2352, b"\x02\x0ek\x00\x02\x0el\x00\x02\x0em\x00\x02\x0en\x00"),
|
132
|
-
(2368, b"\x02\x0eo\x00\x02\x0ef\x00\x02\x0ep\x00\x02\x0eq\x00"),
|
133
|
-
(2384, b"\x02\x0er\x00\x02\x0es\x00\x02\x0et\x00\x02\x0eu\x00"),
|
134
|
-
(2400, b"\x02\x0ev\x00\x02\x0ef\x00\x02\x0ef\x00\x02\x0ef\x00"),
|
135
|
-
(2416, b"\x02\x0ew\x00\x02\x0ex\x00\x02\x0ey\x00\x02\x0ez\x00"),
|
136
|
-
(2432, b"\x02\x0e{\x00\x02\x0e|\x00\x02\x0e}\x00\x02\x0e~\x00"),
|
137
|
-
(2448, b"\x02\x0e\x7f\x00\x02\x0e\x80\x00\x02\x0e\x81\x00\x02\x0e\x82\x00"),
|
138
|
-
(2464, b"\x02\x0e\x83\x00\x02\x0e\x84\x00\x02\x0e\x85\x00\x02\x0e\x86\x00"),
|
139
|
-
(2480, b"\x02\x0e\x87\x00\x02\x0e\x88\x00"),
|
140
|
-
(2488, b"\xe4\xf59\xf5:\x90\xe6x\xe0 \xe0/\xae9\xaf:"),
|
141
|
-
(2504, b"\xe4\xfc\xfd{\xe8z\xfd\xf9\xf8\xd3\x12\r\x93@\x1c\x00"),
|
142
|
-
(2520, b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"),
|
143
|
-
(2536, b"\x00\x05:\xe5:p\x02\x059\x80\xca\x90\xe6x\xe00"),
|
144
|
-
(2552, b'\xe2\x03\x7f\x01"\xae9\xaf:\xe4\xfc\xfd{\xe8z\xfd'),
|
145
|
-
(2568, b'\xf9\xf8\xd3\x12\r\x93P\x03\x7f\x04"0\x07Q\xe4\xf5'),
|
146
|
-
(2584, b"9\xf5:\x90\xe6x\xe0 \xe1/\xae9\xaf:\xe4\xfc"),
|
147
|
-
(2600, b"\xfd{Pz\xc3\xf9\xf8\xd3\x12\r\x93@\x1c\x00\x00\x00"),
|
148
|
-
(2616, b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05"),
|
149
|
-
(2632, b":\xe5:p\x02\x059\x80\xca\xae9\xaf:\xe4\xfc\xfd"),
|
150
|
-
(2648, b'{Pz\xc3\xf9\xf8\xd3\x12\r\x93P\x03\x7f\x04"\x7f'),
|
151
|
-
(2664, b"\x00"),
|
152
|
-
(2665, b'"'),
|
153
|
-
(2910, b"\xe4\xf59\xf5:\x90\xe6x\xe00\xe2#\xae9\xaf:"),
|
154
|
-
(2926, b"\xe4\xfc\xfd{Pz\xc3\xf9\xf8\xd3\x12\r\x93@\x10\x00"),
|
155
|
-
(2942, b"\x00\x00\x00\x00\x00\x05:\xe5:p\x02\x059\x80\xd6\xae"),
|
156
|
-
(2958, b"9\xaf:\xe4\xfc\xfd{Pz\xc3\xf9\xf8\xd3\x12\r\x93"),
|
157
|
-
(2974, b'P\x01"\xc3'),
|
158
|
-
(2978, b'"'),
|
159
|
-
(2666, b"\x8f2\x8d3\x8b4"),
|
160
|
-
(2672, b"\xe4\xf55\xf56\xf57u8\x04\x90\xe6x\xe0D\x80"),
|
161
|
-
(2688, b'\xf0\x12\x0b^P\x03\xaf8"\xe52T\xfe\x90\xe6y'),
|
162
|
-
(2704, b"\xf0\xd2\x07\x12\t\xb8\x8f8\xe58\xd3\x94\x00@\x08\xe5"),
|
163
|
-
(2720, b"8d\x01p:\x80\xd3\xe4\xf57\xe57\xc3\x954P"),
|
164
|
-
(2736, b"+\xe53%7$\x80\xf5\x82\xe44\xe7\xf5\x83\xe0\x90"),
|
165
|
-
(2752, b"\xe6y\xf0\xd2\x07\x12\t\xb8\x8f8\xe58\xd3\x94\x00@"),
|
166
|
-
(2768, b"\x07\xe58\xb4\x01\x06\x80\xa2\x057\x80\xce\xe4\xf58\x90"),
|
167
|
-
(2784, b"\xe6x\xe0D@\xf0\xe4\xf55\xf56\x90\xe6x\xe00"),
|
168
|
-
(2800, b"\xe6#\xae5\xaf6\xe4\xfc\xfd{Pz\xc3\xf9\xf8\xd3"),
|
169
|
-
(2816, b"\x12\r\x93@\x10\x00\x00\x00\x00\x00\x00\x056\xe56p"),
|
170
|
-
(2832, b"\x02\x055\x80\xd6\xaf8"),
|
171
|
-
(2839, b'"'),
|
172
|
-
(1791, b"u6\x04\x90\xe6x\xe0D\x80\xf0\x12\x0b^P\x03\xaf"),
|
173
|
-
(1807, b'6"\x90\xe6yt\xa0\xf0\xd2\x07\x12\t\xb8\x8f6\xe5'),
|
174
|
-
(1823, b"6\xd3\x94\x00@\x0b\xe56d\x01`\x03\x02\x07\xf4\x80"),
|
175
|
-
(1839, b"\xd2\xe4\x90\xe6y\xf0\xd2\x07\x12\t\xb8\x8f6\xe56\xd3"),
|
176
|
-
(1855, b"\x94\x00@\x0b\xe56d\x01`\x03\x02\x07\xf4\x80\xb4\x90"),
|
177
|
-
(1871, b"\xe6x\xe0D\x80\xf0\xd2\x07\x12\t\xb8\x8f6\xe56\xd3"),
|
178
|
-
(1887, b"\x94\x00@\x0b\xe56d\x01`\x03\x02\x07\xf4\x80\x94\x90"),
|
179
|
-
(1903, b"\xe6y\xe0\x90\xe7\xc0\xf0\xc2\x07\x12\t\xb8\x8f6\xe56"),
|
180
|
-
(1919, b"\xd3\x94\x00@\t\xe56d\x01pj\x02\x07\x02\xe4\xf5"),
|
181
|
-
(1935, b"4\xf55\xc3\xe55\x94?\xe54\x94\x00PA\xe55"),
|
182
|
-
(1951, b"d>E4p\x07\x90\xe6x\xe0D \xf0\x90\xe6y"),
|
183
|
-
(1967, b"\xe0\xfft\xc0%5\xf5\x82\xe44\xe7\xf5\x83\xef\xf0\xc2"),
|
184
|
-
(1983, b"\x07\x12\t\xb8\x8f6\xe56\xd3\x94\x00@\x08\xe56\xb4"),
|
185
|
-
(1999, b"\x01\r\x02\x07\x02\x055\xe55p\x02\x054\x80\xb4\x90"),
|
186
|
-
(2015, b"\xe6x\xe0D@\xf0\x90\xe6y\xe0\x90\xe7\xff\xf0\xc2\x07"),
|
187
|
-
(2031, b"\x12\t\xb8\x8f6\xaf6"),
|
188
|
-
(2038, b'"'),
|
189
|
-
(1485, b"u3\x04\x90\xe6x\xe0D\x80\xf0\x12\x0b^P\x03\xaf"),
|
190
|
-
(1501, b'3"\x90\xe6x\xe0D\x80\xf0\x90\xe6yt\xef\xf0\xd2'),
|
191
|
-
(1517, b"\x07\x12\t\xb8\x8f3\xe53\xd3\x94\x00@\x0b\xe53d"),
|
192
|
-
(1533, b"\x01`\x03\x02\x06\xfc\x80\xcb\x90\xe6y\xe0\x90\xe7\xc0\xf0"),
|
193
|
-
(1549, b"\xc2\x07\x12\t\xb8\x8f3\xe53\xd3\x94\x00@\x0b\xe53"),
|
194
|
-
(1565, b"d\x01`\x03\x02\x06\xfc\x80\xaa\x90\xe6y\xe0\x90\xe7\xc0"),
|
195
|
-
(1581, b"\xf0\xc2\x07\x12\t\xb8\x8f3\xe53\xd3\x94\x00@\x0b\xe5"),
|
196
|
-
(1597, b"3d\x01`\x03\x02\x06\xfc\x80\x89\x90\xe6y\xe0\x90\xe7"),
|
197
|
-
(1613, b"\xc1\xf0\xc2\x07\x12\t\xb8\x8f3\xe53\xd3\x94\x00@\x0c"),
|
198
|
-
(1629, b"\xe53d\x01`\x03\x02\x06\xfc\x02\x05\xd0\x90\xe7\xc0\xe0"),
|
199
|
-
(1645, b"\xd3\x94>P\x06\xa3\xe0\x94\x00@\x06\x90\xe7\xc0t>"),
|
200
|
-
(1661, b"\xf0\x90\xe7\xc0\xe0\xd3\x94\x01@G\xe4\xf52\x90\xe7\xc0"),
|
201
|
-
(1677, b"\xe0\x14\xff\xe52\xc3\x9fP8\xe0\x14\xb52\x07\x90\xe6"),
|
202
|
-
(1693, b"x\xe0D \xf0\x90\xe6y\xe0\xfft\xc2%2\xf5\x82"),
|
203
|
-
(1709, b"\xe44\xe7\xf5\x83\xef\xf0\xc2\x07\x12\t\xb8\x8f3\xe53"),
|
204
|
-
(1725, b"\xd3\x94\x00@\x08\xe53\xb4\x01\x07\x02\x05\xd0\x052\x80"),
|
205
|
-
(1741, b"\xbc\x90\xe6x\xe0D@\xf0\x90\xe7\xc0\xe0\xd3\x94\x00@"),
|
206
|
-
(1757, b"\x1e\xe0$\x01\xff\xe43\x90\xe6y\xe0\xfdt\xc0/\xf5"),
|
207
|
-
(1773, b"\x82\xe44\xe7\xf5\x83\xed\xf0\xc2\x07\x12\t\xb8\x8f3\xaf"),
|
208
|
-
(1789, b"3"),
|
209
|
-
(1790, b'"'),
|
210
|
-
(2039, b"\x90\xe6\x00\xe0T\xe7D\x10\xf0\x00\x00\x00\x90\xe6\x01t"),
|
211
|
-
(2055, b"\x8b\xf0\x00\x00\x00\x90\xe6\x10t\xa0\xf0\x90\xe6\x11\xf0\x00"),
|
212
|
-
(2071, b"\x00\x00\x90\xe6\x0bt\x03\xf0\x00\x00\x00\x90\xe6\x12t\xab"),
|
213
|
-
(2087, b"\xf0\x00\x00\x00\x90\xe6\x15t\xe2\xf0\x00\x00\x00\x90\xe6\x04"),
|
214
|
-
(2103, b"t\x80\xf0\x00\x00\x00t\x02\xf0\x00\x00\x00t\x04\xf0\x00"),
|
215
|
-
(2119, b"\x00\x00t\x06\xf0\x00\x00\x00t\x08\xf0\x00\x00\x00\xe4\xf0"),
|
216
|
-
(2135, b"\x00\x00\x00\x90\xe6It\x82\xf0\x00\x00\x00\xf0\x00\x00\x00"),
|
217
|
-
(2151, b"\xf0\x00\x00\x00\x90\xe6Ht\x88\xf0\x00\x00\x00\xf0\x00\x00"),
|
218
|
-
(2167, b"\x00\x90\xe6\x18t\x11\xf0\x00\x00\x00\x90\xe6\x1bt\t\xf0"),
|
219
|
-
(2183, b"\x00\x00\x00\xe4\x90\xe6&\xf0\x00\x00\x00\x90\xe6't\x08"),
|
220
|
-
(2199, b"\xf0\x00\x00\x00\xe4\x90\xe6\x02\xf0\x00\x00\x00\x90\xe6\x03\xf0"),
|
221
|
-
(2215, b"\x00\x00\x00\x90\xe6pt@\xf0\x00\x00\x00\xe4\x90\xe6\t"),
|
222
|
-
(2231, b"\xf0\x00\x00\x00\x90\xe66t\x80\xf0\x00\x00\x00\xe4\x90\xe6"),
|
223
|
-
(2247, b"7\xf0C\xb2\x03\x00\x00\x00\xc2\x80\x00\x00\x00\xd2\x81\x00"),
|
224
|
-
(2263, b'\x00\x00\xc2\x06\xc2\x05\xc2\x04u\xaf\x07\xd2\x00"'),
|
225
|
-
(1173, b" \x05\x030\x043\x90\xe6\xa2\xe00\xe1\x03\x02\x05\xcc"),
|
226
|
-
(1189, b"0\x05\x17\x12\x06\xff\xefp\x08\x90\xe7\xfft\x04\xf0\x80"),
|
227
|
-
(1205, b"\x05\xe4\x90\xe7\xff\xf0\xc2\x05\x80\x05\x12\x05\xcd\xc2\x04\x00"),
|
228
|
-
(1221, b'\x00\x00\x90\xe6\x8ft@\xf0"0\x06<\x90\xe6\xa2\xe0'),
|
229
|
-
(1237, b"0\xe1\x03\x02\x05\xcc\xe4\xff\xfet\x00/\xf5\x82\xe44"),
|
230
|
-
(1253, b" \xf5\x83\xe0\xfdt\xc0/\xf5\x82\xe44\xe7\xf5\x83\xed"),
|
231
|
-
(1269, b"\xf0\x0f\xbf\x00\x01\x0e\xefd\nNp\xdd\x00\x00\x00\x90"),
|
232
|
-
(1285, b'\xe6\x8ft\x08\xf0\xc2\x06"\x90\xe6\xa1\xe00\xe1\x03\x02'),
|
233
|
-
(1301, b"\x05\xcc\x90\xe6\x8d\xe0\xc3\x94\x02@\x06\x90\xe7\x81\xe0`"),
|
234
|
-
(1317, b'\x06\xe4\x90\xe6\x8d\xf0"\x90\xe7\x80\xe0\x90 \x00\xf0\x90'),
|
235
|
-
(1333, b"\xe7\x81\xe0\x90 \x01\xf0\x90\xe7\x82\xe0\x90 \x02\xf0\x90"),
|
236
|
-
(1349, b"\xe7\x83\xe0\x90 \x03\xf0\xe4\xa3\xf0\xa3\xf0\x90\xe7\x80\xe0"),
|
237
|
-
(1365, b"d\x07p$\x90\xe7\x82\xe0p\x12{\t}\x04\x7f\xa0"),
|
238
|
-
(1381, b"\x12\nj\x90 \x04\xef\xf0\xd2\x06\x80V\x90\xe7\x82\xe0"),
|
239
|
-
(1397, b"d\x01pN\xd2\x05\x80J\x90\xe7\x80\xe0\xb4\x08\x17\x90"),
|
240
|
-
(1413, b"\xe6\x8d\xe0$\xfe\xfb}\x02\x7f\xee\x12\nj\x90 \x04"),
|
241
|
-
(1429, b"\xef\xf0\xd2\x06\x80,\x90\xe7\x80\xe0\xb4\t\x04\xd2\x04\x80"),
|
242
|
-
(1445, b"!\x90\xe7\x80\xe0d\np\x19\x90\xe7\x82\xe0p\x07\xc2"),
|
243
|
-
(1461, b"\x81\x00\x00\x00\x80\n\xc2\x80\x00\x00\x00\xd2\x81\x00\x00\x00"),
|
244
|
-
(1477, b"\xd2\x06\xe4\x90\xe6\x8d\xf0"),
|
245
|
-
(1484, b'"'),
|
246
|
-
(2301, b'\xd3"'),
|
247
|
-
(3676, b'\xd3"'),
|
248
|
-
(3678, b'\xd3"'),
|
249
|
-
(3064, b'\x90\xe6\xba\xe0\xf5\x17\xd3"'),
|
250
|
-
(3595, b"\x90\xe7@\xe5\x17\xf0\xe4\x90\xe6\x8a\xf0\x90\xe6\x8b\x04\xf0"),
|
251
|
-
(3611, b'\xd3"'),
|
252
|
-
(3664, b'\x90\xe6\xba\xe0\xf5\x16\xd3"'),
|
253
|
-
(3613, b"\x90\xe7@\xe5\x16\xf0\xe4\x90\xe6\x8a\xf0\x90\xe6\x8b\x04\xf0"),
|
254
|
-
(3629, b'\xd3"'),
|
255
|
-
(3680, b'\xd3"'),
|
256
|
-
(3682, b'\xd3"'),
|
257
|
-
(3684, b'\xd3"'),
|
258
|
-
(3343, b"\x90\xe6\xb9\xe0$/`\x12\x04p\x1e\x90\xe6\x04\xe0\xff"),
|
259
|
-
(3359, b"C\x07\x80\x00\x00\x00\xef\xf0\x80\x11\x90\xe6\x04\xe0\xffS"),
|
260
|
-
(3375, b'\x07\x7f\x00\x00\x00\xef\xf0\x80\x02\xd3"\xc3'),
|
261
|
-
(3387, b'"'),
|
262
|
-
(2277, b"\xc0\xe0\xc0\x83\xc0\x82\xd2\x01S\x91\xef\x90\xe6]t\x01"),
|
263
|
-
(2293, b"\xf0\xd0\x82\xd0\x83\xd0\xe02"),
|
264
|
-
(3551, b"\xc0\xe0\xc0\x83\xc0\x82S\x91\xef\x90\xe6]t\x04\xf0\xd0"),
|
265
|
-
(3567, b"\x82\xd0\x83\xd0\xe02"),
|
266
|
-
(3573, b"\xc0\xe0\xc0\x83\xc0\x82S\x91\xef\x90\xe6]t\x02\xf0\xd0"),
|
267
|
-
(3589, b"\x82\xd0\x83\xd0\xe02"),
|
268
|
-
(3242, b"\xc0\xe0\xc0\x83\xc0\x82\x85\x10\x0c\x85\x11\r\x85\r\x82\x85"),
|
269
|
-
(3258, b"\x0c\x83\xa3t\x02\xf0\x85\x08\x0e\x85\t\x0f\x85\x0f\x82\x85"),
|
270
|
-
(3274, b"\x0e\x83\xa3t\x07\xf0S\x91\xef\x90\xe6]t\x10\xf0\xd0"),
|
271
|
-
(3290, b"\x82\xd0\x83\xd0\xe02"),
|
272
|
-
(3040, b"\xc0\xe0\xc0\x83\xc0\x82\xd2\x03S\x91\xef\x90\xe6]t\x08"),
|
273
|
-
(3056, b"\xf0\xd0\x82\xd0\x83\xd0\xe02"),
|
274
|
-
(2979, b"\xc0\xe0\xc0\x83\xc0\x82\x90\xe6\x80\xe00\xe7 \x85\x08\x0c"),
|
275
|
-
(2995, b"\x85\t\r\x85\r\x82\x85\x0c\x83\xa3t\x02\xf0\x85\x10\x0e"),
|
276
|
-
(3011, b"\x85\x11\x0f\x85\x0f\x82\x85\x0e\x83\xa3t\x07\xf0S\x91\xef"),
|
277
|
-
(3027, b"\x90\xe6]t \xf0\xd0\x82\xd0\x83\xd0\xe02"),
|
278
|
-
(2303, b"2"),
|
279
|
-
(3686, b"2"),
|
280
|
-
(3687, b"2"),
|
281
|
-
(3688, b"2"),
|
282
|
-
(3689, b"2"),
|
283
|
-
(3690, b"2"),
|
284
|
-
(3691, b"2"),
|
285
|
-
(3692, b"2"),
|
286
|
-
(3693, b"2"),
|
287
|
-
(3694, b"2"),
|
288
|
-
(3695, b"2"),
|
289
|
-
(3696, b"2"),
|
290
|
-
(3697, b"2"),
|
291
|
-
(3698, b"2"),
|
292
|
-
(3699, b"2"),
|
293
|
-
(3700, b"2"),
|
294
|
-
(3701, b"2"),
|
295
|
-
(3702, b"2"),
|
296
|
-
(3703, b"2"),
|
297
|
-
(3704, b"2"),
|
298
|
-
(3705, b"2"),
|
299
|
-
(3706, b"2"),
|
300
|
-
(3707, b"2"),
|
301
|
-
(3708, b"2"),
|
302
|
-
(3709, b"2"),
|
303
|
-
(3710, b"2"),
|
304
|
-
(3711, b"2"),
|
305
|
-
(3712, b"2"),
|
306
|
-
(3713, b"2"),
|
307
|
-
(3714, b"2"),
|
308
|
-
(3715, b"2"),
|
309
|
-
(3716, b"2"),
|
310
|
-
(3717, b"2"),
|
311
|
-
(3718, b"2"),
|
312
|
-
(3719, b"2"),
|
313
|
-
(3720, b"2"),
|
314
|
-
(0, b"\x02\x0e/"),
|
315
|
-
(3631, b"x\x7f\xe4\xf6\xd8\xfdu\x81:\x02\x032"),
|
316
|
-
(3475, b"\xeb\x9f\xf5\xf0\xea\x9eB\xf0\xe9\x9dB\xf0\xecd\x80\xc8"),
|
317
|
-
(3491, b'd\x80\x98E\xf0"'),
|
318
|
-
(3497, b"\xeb\x9f\xf5\xf0\xea\x9eB\xf0\xe9\x9dB\xf0\xe8\x9cE\xf0"),
|
319
|
-
(3513, b'"'),
|
320
|
-
]
|
321
|
-
|
322
|
-
|
323
|
-
def _firmware(device, start):
|
324
|
-
"""
|
325
|
-
Start and end packet sending data.
|
326
|
-
@param device:
|
327
|
-
@param start:
|
328
|
-
@return:
|
329
|
-
"""
|
330
|
-
device.ctrl_transfer(
|
331
|
-
request,
|
332
|
-
bRequest=0xA0,
|
333
|
-
wValue=0xE600,
|
334
|
-
wIndex=0x0,
|
335
|
-
data_or_wLength=b"\x01" if start else b"\x00",
|
336
|
-
)
|
337
|
-
|
338
|
-
|
339
|
-
def _parse(f):
|
340
|
-
"""Parses the clone board sys file, for the FPGA code."""
|
341
|
-
while True:
|
342
|
-
data = f.read(22)
|
343
|
-
if data is None or len(data) != 22:
|
344
|
-
break
|
345
|
-
length, _, value, end, payload, _ = struct.unpack("BBHB16sB", data)
|
346
|
-
if end != 0:
|
347
|
-
break
|
348
|
-
yield value, payload[:length]
|
349
|
-
|
350
|
-
|
351
|
-
def _write_chunks(device, chunks):
|
352
|
-
"""
|
353
|
-
Write chunks to the FPGA.
|
354
|
-
|
355
|
-
@param device:
|
356
|
-
@param chunks:
|
357
|
-
@return:
|
358
|
-
"""
|
359
|
-
_firmware(device, start=True)
|
360
|
-
for value, payload in chunks:
|
361
|
-
device.ctrl_transfer(
|
362
|
-
request, bRequest=0xA0, wValue=value, wIndex=0x0, data_or_wLength=payload
|
363
|
-
)
|
364
|
-
_firmware(device, start=False)
|
365
|
-
|
366
|
-
|
367
|
-
def get_offset_by_hash(hash):
|
368
|
-
if hash == "b86bc139a88592a4d71e64990133e86f":
|
369
|
-
return 0x4440, "LMCV2U2"
|
370
|
-
if hash == "f775f53d0cf8c9b3e7855837561a4e6c":
|
371
|
-
return 0x11DE0, "LMCUSB2009"
|
372
|
-
if hash == "cd408e29768af505d671fb5c216fcdcc":
|
373
|
-
return 0x9F60, "LMCUSBdSYS"
|
374
|
-
if hash == "2dd5017f569ac9efc292e6c085b08f36":
|
375
|
-
return 0x4440, "LMCdotSYS"
|
376
|
-
if hash == "48bcb097a38fdd84df43f6ee6e7f0195":
|
377
|
-
return 0x5190, "LMCV2U2"
|
378
|
-
if hash == "3a5e33b366f6a7af0f530a5ef68f137b":
|
379
|
-
return 0x1390, "LMCV4"
|
380
|
-
return 0x4440, "Unknown"
|
381
|
-
|
382
|
-
|
383
|
-
def _send_device_sys(device, sys_file, channel=None):
|
384
|
-
"""
|
385
|
-
Open the file, write the parsed chunks.
|
386
|
-
|
387
|
-
@param device:
|
388
|
-
@param sys_file:
|
389
|
-
@param offset:
|
390
|
-
@return:
|
391
|
-
"""
|
392
|
-
if isinstance(sys_file, str):
|
393
|
-
with open(sys_file, "rb") as f:
|
394
|
-
contents = f.read()
|
395
|
-
f.seek(0)
|
396
|
-
|
397
|
-
h = hashlib.md5(contents)
|
398
|
-
offset, name = get_offset_by_hash(h.hexdigest())
|
399
|
-
if channel:
|
400
|
-
channel(
|
401
|
-
f"{sys_file} has hash:{h.hexdigest()} is {name} with offset {offset}"
|
402
|
-
)
|
403
|
-
f.seek(offset)
|
404
|
-
_write_chunks(device, _parse(f))
|
405
|
-
else:
|
406
|
-
_write_chunks(device, _parse(sys_file))
|
407
|
-
|
408
|
-
|
409
|
-
def load_sys(sys_file, channel=None):
|
410
|
-
"""
|
411
|
-
Find devices, send sys_file to the needed boards.
|
412
|
-
|
413
|
-
@param sys_file:
|
414
|
-
@param channel:
|
415
|
-
@return:
|
416
|
-
"""
|
417
|
-
try:
|
418
|
-
devices = list(
|
419
|
-
usb.core.find(idVendor=VENDER_ID, idProduct=PRODUCT_ID, find_all=True)
|
420
|
-
)
|
421
|
-
if channel:
|
422
|
-
channel(f"{len(devices)} devices need initializing.")
|
423
|
-
for i, device in enumerate(devices):
|
424
|
-
if channel:
|
425
|
-
channel(f"Clone board #{i+1} detected. Sending Initialize.")
|
426
|
-
_send_device_sys(device, sys_file, channel=channel)
|
427
|
-
except usb.core.USBError as e:
|
428
|
-
channel(str(e))
|
429
|
-
raise ConnectionRefusedError
|
430
|
-
|
431
|
-
|
432
|
-
def load_chunks(chunks=None, channel=None):
|
433
|
-
"""
|
434
|
-
Find devices, send chunks to the needed boards.
|
435
|
-
@param chunks:
|
436
|
-
@param channel:
|
437
|
-
@return:
|
438
|
-
"""
|
439
|
-
if chunks is None:
|
440
|
-
chunks = init
|
441
|
-
try:
|
442
|
-
devices = list(
|
443
|
-
usb.core.find(idVendor=VENDER_ID, idProduct=PRODUCT_ID, find_all=True)
|
444
|
-
)
|
445
|
-
if channel:
|
446
|
-
channel(f"{len(devices)} devices need initializing.")
|
447
|
-
for i, device in enumerate(devices):
|
448
|
-
if channel:
|
449
|
-
channel(f"Clone board #{i+1} detected. Sending Initialize.")
|
450
|
-
_write_chunks(device, chunks)
|
451
|
-
except usb.core.USBError as e:
|
452
|
-
channel(str(e))
|
453
|
-
raise ConnectionRefusedError
|
454
|
-
|
455
|
-
|
456
|
-
if __name__ == "__main__":
|
457
|
-
load_sys("Lmcv2u.sys", channel=print)
|
1
|
+
"""
|
2
|
+
This code initializes the FPGA on cloned boards.
|
3
|
+
"""
|
4
|
+
import hashlib
|
5
|
+
import struct
|
6
|
+
|
7
|
+
import usb.core
|
8
|
+
from usb.util import (
|
9
|
+
CTRL_OUT,
|
10
|
+
CTRL_RECIPIENT_DEVICE,
|
11
|
+
CTRL_TYPE_VENDOR,
|
12
|
+
build_request_type,
|
13
|
+
)
|
14
|
+
|
15
|
+
VENDER_ID = 0x9588
|
16
|
+
PRODUCT_ID = 0x9980
|
17
|
+
|
18
|
+
request = build_request_type(CTRL_OUT, CTRL_TYPE_VENDOR, CTRL_RECIPIENT_DEVICE)
|
19
|
+
|
20
|
+
|
21
|
+
init = [
|
22
|
+
(3654, b"\x00\x01\x02\x02\x03\x03\x04\x04\x05\x05"),
|
23
|
+
(818, b"\xe4\xf5,\xf5+\xf5*\xf5)\xc2\x03\xc2\x00\xd2\x02\xc2"),
|
24
|
+
(834, b"\x01\x12\x07\xf7~\x0c\x7f\x00\x8e\n\x8f\x0bu\x12\x0cu"),
|
25
|
+
(850, b"\x13\x12u\x08\x0cu\t\x1cu\x10\x0cu\x11Ju\x14"),
|
26
|
+
(866, b"\x0cu\x15\x86\xeeT\xc0p\x03\x02\x045u-\x00u"),
|
27
|
+
(882, b".\x80\x8e/\x8f0\xc3t\xa8\x9f\xfft\x0c\x9e\xcf$"),
|
28
|
+
(898, b"\x02\xcf4\x00\xfe\xe4\x8f(\x8e'\xf5&\xf5%\xf5$"),
|
29
|
+
(914, b"\xf5#\xf5\"\xf5!\xaf(\xae'\xad&\xac%\xab$"),
|
30
|
+
(930, b'\xaa#\xa9"\xa8!\xc3\x12\r\xa9P5\xae#\xaf$'),
|
31
|
+
(946, b"\xe50/\xf5\x82\xe5/>\xf5\x83\xe0\xfd\xe5./\xf5"),
|
32
|
+
(962, b"\x82\xe5->\xf5\x83\xed\xf0\xe4\xfa\xf9\xf8\xef$\x01\xf5"),
|
33
|
+
(978, b'$\xea>\xf5#\xe95"\xf5"\xe85!\xf5!\x80'),
|
34
|
+
(994, b"\xb5\x85-\n\x85.\x0bt\x00$\x80\xfft\x0c4\xff"),
|
35
|
+
(1010, b"\xfe\xc3\xe5\x13\x9f\xf5\x13\xe5\x12\x9e\xf5\x12\xc3\xe5\r\x9f"),
|
36
|
+
(1026, b"\xf5\r\xe5\x0c\x9e\xf5\x0c\xc3\xe5\x0f\x9f\xf5\x0f\xe5\x0e\x9e"),
|
37
|
+
(1042, b"\xf5\x0e\xc3\xe5\t\x9f\xf5\t\xe5\x08\x9e\xf5\x08\xc3\xe5\x11"),
|
38
|
+
(1058, b"\x9f\xf5\x11\xe5\x10\x9e\xf5\x10\xc3\xe5\x15\x9f\xf5\x15\xe5\x14"),
|
39
|
+
(1074, b"\x9e\xf5\x14\xd2\xe8C\xd8 \x90\xe6h\xe0D\t\xf0\x90"),
|
40
|
+
(1090, b"\xe6\x82\xe0D\x10\xf0\x90\xe6\\\xe0D=\xf0\xd2\xaf\xd2"),
|
41
|
+
(1106, b"\x07\x12\x0c\xe0S\x8e\xf8\xc2\x03\x12\x04\x950\x01\x05\x12"),
|
42
|
+
(1122, b"\x00\x80\xc2\x010\x03\xf2\x12\x08\xfdP\xed\xc2\x03\x12\r"),
|
43
|
+
(1138, b"\xba \x00\x16\x90\xe6\x82\xe00\xe7\x04\xe0 \xe1\xef\x90"),
|
44
|
+
(1154, b"\xe6\x82\xe00\xe6\x04\xe0 \xe0\xe4\x12\r<\x12\x0e\\"),
|
45
|
+
(1170, b"\x80\xc7"),
|
46
|
+
(1172, b'"'),
|
47
|
+
(3643, b'\x90\xe5\r\xe00\xe4\x02\xc3"\xd3"'),
|
48
|
+
(128, b"\x90\xe6\xb9\xe0p\x03\x02\x01j\x14p\x03\x02\x02\x13$"),
|
49
|
+
(144, b"\xfep\x03\x02\x02\xa9$\xfbp\x03\x02\x01d\x14p\x03"),
|
50
|
+
(160, b"\x02\x01^\x14p\x03\x02\x01R\x14p\x03\x02\x01X$"),
|
51
|
+
(176, b"\x05`\x03\x02\x03\x1e\x12\x0e^@\x03\x02\x03*\x90\xe6"),
|
52
|
+
(192, b"\xbb\xe0$\xfe`;\x14`V$\xfd`\x16\x14`@"),
|
53
|
+
(208, b"$\x06pt\xe5\n\x90\xe6\xb3\xf0\xe5\x0b\x90\xe6\xb4\xf0"),
|
54
|
+
(224, b"\x02\x03*\x12\x0e;P\x0f\xe5\x12\x90\xe6\xb3\xf0\xe5\x13"),
|
55
|
+
(240, b"\x90\xe6\xb4\xf0\x02\x03*\x90\xe6\xa0\xe0D\x01\xf0\x02\x03"),
|
56
|
+
(256, b"*\xe5\x0c\x90\xe6\xb3\xf0\xe5\r\x90\xe6\xb4\xf0\x02\x03*"),
|
57
|
+
(272, b"\xe5\x0e\x90\xe6\xb3\xf0\xe5\x0f\x90\xe6\xb4\xf0\x02\x03*\x90"),
|
58
|
+
(288, b"\xe6\xba\xe0\xff\x12\rh\xaa\x06\xa9\x07{\x01\xeaI`"),
|
59
|
+
(304, b"\r\xee\x90\xe6\xb3\xf0\xef\x90\xe6\xb4\xf0\x02\x03*\x90\xe6"),
|
60
|
+
(320, b"\xa0\xe0D\x01\xf0\x02\x03*\x90\xe6\xa0\xe0D\x01\xf0\x02"),
|
61
|
+
(336, b"\x03*\x12\x0e\x1d\x02\x03*\x12\x0eP\x02\x03*\x12\x0b"),
|
62
|
+
(352, b"\xf8\x02\x03*\x12\x0e\x0b\x02\x03*\x12\x0e`@\x03\x02"),
|
63
|
+
(368, b"\x03*\x90\xe6\xb8\xe0$\x7f`+\x14`<$\x02`"),
|
64
|
+
(384, b"\x03\x02\x02\t\xa2\x00\xe43\xff%\xe0\xff\xa2\x02\xe43"),
|
65
|
+
(400, b"O\x90\xe7@\xf0\xe4\xa3\xf0\x90\xe6\x8a\xf0\x90\xe6\x8bt"),
|
66
|
+
(416, b"\x02\xf0\x02\x03*\xe4\x90\xe7@\xf0\xa3\xf0\x90\xe6\x8a\xf0"),
|
67
|
+
(432, b"\x90\xe6\x8bt\x02\xf0\x02\x03*\x90\xe6\xbc\xe0T~\xff"),
|
68
|
+
(448, b"~\x00\xe0\xd3\x94\x80@\x06|\x00}\x01\x80\x04|\x00"),
|
69
|
+
(464, b"}\x00\xecN\xfe\xedO$F\xf5\x82t\x0e>\xf5\x83"),
|
70
|
+
(480, b"\xe4\x93\xff3\x95\xe0\xfe\xef$\xa1\xff\xee4\xe6\x8f\x82"),
|
71
|
+
(496, b"\xf5\x83\xe0T\x01\x90\xe7@\xf0\xe4\xa3\xf0\x90\xe6\x8a\xf0"),
|
72
|
+
(512, b"\x90\xe6\x8bt\x02\xf0\x02\x03*\x90\xe6\xa0\xe0D\x01\xf0"),
|
73
|
+
(528, b"\x02\x03*\x12\x0eb@\x03\x02\x03*\x90\xe6\xb8\xe0$"),
|
74
|
+
(544, b"\xfe`\x1d$\x02`\x03\x02\x03*\x90\xe6\xba\xe0\xb4\x01"),
|
75
|
+
(560, b"\x05\xc2\x00\x02\x03*\x90\xe6\xa0\xe0D\x01\xf0\x02\x03*"),
|
76
|
+
(576, b"\x90\xe6\xba\xe0pY\x90\xe6\xbc\xe0T~\xff~\x00\xe0"),
|
77
|
+
(592, b"\xd3\x94\x80@\x06|\x00}\x01\x80\x04|\x00}\x00\xec"),
|
78
|
+
(608, b"N\xfe\xedO$F\xf5\x82t\x0e>\xf5\x83\xe4\x93\xff"),
|
79
|
+
(624, b"3\x95\xe0\xfe\xef$\xa1\xff\xee4\xe6\x8f\x82\xf5\x83\xe0"),
|
80
|
+
(640, b"T\xfe\xf0\x90\xe6\xbc\xe0T\x80\xff\x13\x13\x13T\x1f\xff"),
|
81
|
+
(656, b"\xe0T\x0f/\x90\xe6\x83\xf0\xe0D \xf0\x02\x03*\x90"),
|
82
|
+
(672, b"\xe6\xa0\xe0D\x01\xf0\x02\x03*\x12\x0edP|\x90\xe6"),
|
83
|
+
(688, b"\xb8\xe0$\xfe` $\x02p[\x90\xe6\xba\xe0\xb4\x01"),
|
84
|
+
(704, b"\x04\xd2\x00\x80e\x90\xe6\xba\xe0d\x02`]\x90\xe6\xa0"),
|
85
|
+
(720, b"\xe0D\x01\xf0\x80T\x90\xe6\xbc\xe0T~\xff~\x00\xe0"),
|
86
|
+
(736, b"\xd3\x94\x80@\x06|\x00}\x01\x80\x04|\x00}\x00\xec"),
|
87
|
+
(752, b"N\xfe\xedO$F\xf5\x82t\x0e>\xf5\x83\xe4\x93\xff"),
|
88
|
+
(768, b"3\x95\xe0\xfe\xef$\xa1\xff\xee4\xe6\x8f\x82\xf5\x83\xe0"),
|
89
|
+
(784, b"D\x01\xf0\x80\x15\x90\xe6\xa0\xe0D\x01\xf0\x80\x0c\x12\r"),
|
90
|
+
(800, b"\x0fP\x07\x90\xe6\xa0\xe0D\x01\xf0\x90\xe6\xa0\xe0D\x80"),
|
91
|
+
(816, b"\xf0"),
|
92
|
+
(817, b'"'),
|
93
|
+
(51, b"\x02\x0eX"),
|
94
|
+
(3672, b"S\xd8\xef2"),
|
95
|
+
(3072, b"\x12\x01\x00\x02\x00\x00\x00@\x88\x95\x99\x98\x00\x00\x01\x02"),
|
96
|
+
(3088, b"\x00\x01\n\x06\x00\x02\x00\x00\x00@\x01\x00\t\x02.\x00"),
|
97
|
+
(3104, b"\x01\x01\x00@\x05\t\x04\x00\x00\x04\xff\x00\x00\x00\x07\x05"),
|
98
|
+
(3120, b"\x01\x02\x00\x02\x00\x07\x05\x81\x02\x00\x02\x00\x07\x05\x02\x02"),
|
99
|
+
(3136, b"\x00\x02\x00\x07\x05\x88\x02\x00\x02\x00\t\x02<\x00\x01\x01"),
|
100
|
+
(3152, b"\x00@\x05\t\x04\x00\x00\x06\xff\x00\x00\x00\x07\x05\x01\x02"),
|
101
|
+
(3168, b"@\x00\x00\x07\x05\x81\x02@\x00\x00\x07\x05\x02\x02@\x00"),
|
102
|
+
(3184, b"\x00\x07\x05\x04\x02@\x00\x00\x07\x05\x06\x02@\x00\x00\x07"),
|
103
|
+
(3200, b"\x05\x88\x02@\x00\x00\x04\x03\t\x04\x0c\x03B\x00J\x00"),
|
104
|
+
(3216, b"J\x00C\x00Z\x00\x12\x03U\x00S\x00B\x00L\x00"),
|
105
|
+
(3232, b"M\x00C\x00V\x002\x00\x00\x00"),
|
106
|
+
(3388, b"\x90\xe6\x82\xe00\xe0\x04\xe0 \xe6\x0b\x90\xe6\x82\xe00"),
|
107
|
+
(3404, b"\xe1\x19\xe00\xe7\x15\x90\xe6\x80\xe0D\x01\xf0\x7f\x14~"),
|
108
|
+
(3420, b'\x00\x12\x0b\x18\x90\xe6\x80\xe0T\xfe\xf0"'),
|
109
|
+
(3296, b"0\x07\t\x90\xe6\x80\xe0D\n\xf0\x80\x07\x90\xe6\x80\xe0"),
|
110
|
+
(3312, b"D\x08\xf0\x7f\xdc~\x05\x12\x0b\x18\x90\xe6]t\xff\xf0"),
|
111
|
+
(3328, b'\x90\xe6_\xf0S\x91\xef\x90\xe6\x80\xe0T\xf7\xf0"'),
|
112
|
+
(3432, b"\xa9\x07"),
|
113
|
+
(3434, b"\xae\x14\xaf\x15\x8f\x82\x8e\x83\xa3\xe0d\x03p\x17\xad\x01"),
|
114
|
+
(3450, b'\x19\xedp\x01"\x8f\x82\x8e\x83\xe0|\x00/\xfd\xec>'),
|
115
|
+
(3466, b"\xfe\xaf\x05\x80\xdf\xe4\xfe\xff"),
|
116
|
+
(3474, b'"'),
|
117
|
+
(3514, b"\x90\xe6\x82\xe0D\xc0\xf0\x90\xe6\x81\xf0C\x87\x01\x00\x00"),
|
118
|
+
(3530, b'\x00\x00\x00"'),
|
119
|
+
(2840, b"\x8e1\x8f2\x90\xe6\x00\xe0T\x18p\x12\xe52$\x01"),
|
120
|
+
(2856, b"\xff\xe451\xc3\x13\xf51\xef\x13\xf52\x80\x15\x90\xe6"),
|
121
|
+
(2872, b"\x00\xe0T\x18\xff\xbf\x10\x0b\xe52%\xe0\xf52\xe51"),
|
122
|
+
(2888, b"3\xf51\xe52\x152\xae1p\x02\x151N`\x05"),
|
123
|
+
(2904, b'\x12\r\xce\x80\xee"'),
|
124
|
+
(3534, b"t\x00\xf5\x86\x90\xfd\xa5|\x05\xa3\xe5\x82E\x83p\xf9"),
|
125
|
+
(3550, b'"'),
|
126
|
+
(67, b"\x02\t\x00"),
|
127
|
+
(83, b"\x02\t\x00"),
|
128
|
+
(2304, b"\x02\x08\xe5\x00\x02\r\xf5\x00\x02\r\xdf\x00\x02\x0b\xe0\x00"),
|
129
|
+
(2320, b"\x02\x0c\xaa\x00\x02\x0b\xa3\x00\x02\x08\xff\x00\x02\x0ef\x00"),
|
130
|
+
(2336, b"\x02\x0eg\x00\x02\x0eh\x00\x02\x0ei\x00\x02\x0ej\x00"),
|
131
|
+
(2352, b"\x02\x0ek\x00\x02\x0el\x00\x02\x0em\x00\x02\x0en\x00"),
|
132
|
+
(2368, b"\x02\x0eo\x00\x02\x0ef\x00\x02\x0ep\x00\x02\x0eq\x00"),
|
133
|
+
(2384, b"\x02\x0er\x00\x02\x0es\x00\x02\x0et\x00\x02\x0eu\x00"),
|
134
|
+
(2400, b"\x02\x0ev\x00\x02\x0ef\x00\x02\x0ef\x00\x02\x0ef\x00"),
|
135
|
+
(2416, b"\x02\x0ew\x00\x02\x0ex\x00\x02\x0ey\x00\x02\x0ez\x00"),
|
136
|
+
(2432, b"\x02\x0e{\x00\x02\x0e|\x00\x02\x0e}\x00\x02\x0e~\x00"),
|
137
|
+
(2448, b"\x02\x0e\x7f\x00\x02\x0e\x80\x00\x02\x0e\x81\x00\x02\x0e\x82\x00"),
|
138
|
+
(2464, b"\x02\x0e\x83\x00\x02\x0e\x84\x00\x02\x0e\x85\x00\x02\x0e\x86\x00"),
|
139
|
+
(2480, b"\x02\x0e\x87\x00\x02\x0e\x88\x00"),
|
140
|
+
(2488, b"\xe4\xf59\xf5:\x90\xe6x\xe0 \xe0/\xae9\xaf:"),
|
141
|
+
(2504, b"\xe4\xfc\xfd{\xe8z\xfd\xf9\xf8\xd3\x12\r\x93@\x1c\x00"),
|
142
|
+
(2520, b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"),
|
143
|
+
(2536, b"\x00\x05:\xe5:p\x02\x059\x80\xca\x90\xe6x\xe00"),
|
144
|
+
(2552, b'\xe2\x03\x7f\x01"\xae9\xaf:\xe4\xfc\xfd{\xe8z\xfd'),
|
145
|
+
(2568, b'\xf9\xf8\xd3\x12\r\x93P\x03\x7f\x04"0\x07Q\xe4\xf5'),
|
146
|
+
(2584, b"9\xf5:\x90\xe6x\xe0 \xe1/\xae9\xaf:\xe4\xfc"),
|
147
|
+
(2600, b"\xfd{Pz\xc3\xf9\xf8\xd3\x12\r\x93@\x1c\x00\x00\x00"),
|
148
|
+
(2616, b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05"),
|
149
|
+
(2632, b":\xe5:p\x02\x059\x80\xca\xae9\xaf:\xe4\xfc\xfd"),
|
150
|
+
(2648, b'{Pz\xc3\xf9\xf8\xd3\x12\r\x93P\x03\x7f\x04"\x7f'),
|
151
|
+
(2664, b"\x00"),
|
152
|
+
(2665, b'"'),
|
153
|
+
(2910, b"\xe4\xf59\xf5:\x90\xe6x\xe00\xe2#\xae9\xaf:"),
|
154
|
+
(2926, b"\xe4\xfc\xfd{Pz\xc3\xf9\xf8\xd3\x12\r\x93@\x10\x00"),
|
155
|
+
(2942, b"\x00\x00\x00\x00\x00\x05:\xe5:p\x02\x059\x80\xd6\xae"),
|
156
|
+
(2958, b"9\xaf:\xe4\xfc\xfd{Pz\xc3\xf9\xf8\xd3\x12\r\x93"),
|
157
|
+
(2974, b'P\x01"\xc3'),
|
158
|
+
(2978, b'"'),
|
159
|
+
(2666, b"\x8f2\x8d3\x8b4"),
|
160
|
+
(2672, b"\xe4\xf55\xf56\xf57u8\x04\x90\xe6x\xe0D\x80"),
|
161
|
+
(2688, b'\xf0\x12\x0b^P\x03\xaf8"\xe52T\xfe\x90\xe6y'),
|
162
|
+
(2704, b"\xf0\xd2\x07\x12\t\xb8\x8f8\xe58\xd3\x94\x00@\x08\xe5"),
|
163
|
+
(2720, b"8d\x01p:\x80\xd3\xe4\xf57\xe57\xc3\x954P"),
|
164
|
+
(2736, b"+\xe53%7$\x80\xf5\x82\xe44\xe7\xf5\x83\xe0\x90"),
|
165
|
+
(2752, b"\xe6y\xf0\xd2\x07\x12\t\xb8\x8f8\xe58\xd3\x94\x00@"),
|
166
|
+
(2768, b"\x07\xe58\xb4\x01\x06\x80\xa2\x057\x80\xce\xe4\xf58\x90"),
|
167
|
+
(2784, b"\xe6x\xe0D@\xf0\xe4\xf55\xf56\x90\xe6x\xe00"),
|
168
|
+
(2800, b"\xe6#\xae5\xaf6\xe4\xfc\xfd{Pz\xc3\xf9\xf8\xd3"),
|
169
|
+
(2816, b"\x12\r\x93@\x10\x00\x00\x00\x00\x00\x00\x056\xe56p"),
|
170
|
+
(2832, b"\x02\x055\x80\xd6\xaf8"),
|
171
|
+
(2839, b'"'),
|
172
|
+
(1791, b"u6\x04\x90\xe6x\xe0D\x80\xf0\x12\x0b^P\x03\xaf"),
|
173
|
+
(1807, b'6"\x90\xe6yt\xa0\xf0\xd2\x07\x12\t\xb8\x8f6\xe5'),
|
174
|
+
(1823, b"6\xd3\x94\x00@\x0b\xe56d\x01`\x03\x02\x07\xf4\x80"),
|
175
|
+
(1839, b"\xd2\xe4\x90\xe6y\xf0\xd2\x07\x12\t\xb8\x8f6\xe56\xd3"),
|
176
|
+
(1855, b"\x94\x00@\x0b\xe56d\x01`\x03\x02\x07\xf4\x80\xb4\x90"),
|
177
|
+
(1871, b"\xe6x\xe0D\x80\xf0\xd2\x07\x12\t\xb8\x8f6\xe56\xd3"),
|
178
|
+
(1887, b"\x94\x00@\x0b\xe56d\x01`\x03\x02\x07\xf4\x80\x94\x90"),
|
179
|
+
(1903, b"\xe6y\xe0\x90\xe7\xc0\xf0\xc2\x07\x12\t\xb8\x8f6\xe56"),
|
180
|
+
(1919, b"\xd3\x94\x00@\t\xe56d\x01pj\x02\x07\x02\xe4\xf5"),
|
181
|
+
(1935, b"4\xf55\xc3\xe55\x94?\xe54\x94\x00PA\xe55"),
|
182
|
+
(1951, b"d>E4p\x07\x90\xe6x\xe0D \xf0\x90\xe6y"),
|
183
|
+
(1967, b"\xe0\xfft\xc0%5\xf5\x82\xe44\xe7\xf5\x83\xef\xf0\xc2"),
|
184
|
+
(1983, b"\x07\x12\t\xb8\x8f6\xe56\xd3\x94\x00@\x08\xe56\xb4"),
|
185
|
+
(1999, b"\x01\r\x02\x07\x02\x055\xe55p\x02\x054\x80\xb4\x90"),
|
186
|
+
(2015, b"\xe6x\xe0D@\xf0\x90\xe6y\xe0\x90\xe7\xff\xf0\xc2\x07"),
|
187
|
+
(2031, b"\x12\t\xb8\x8f6\xaf6"),
|
188
|
+
(2038, b'"'),
|
189
|
+
(1485, b"u3\x04\x90\xe6x\xe0D\x80\xf0\x12\x0b^P\x03\xaf"),
|
190
|
+
(1501, b'3"\x90\xe6x\xe0D\x80\xf0\x90\xe6yt\xef\xf0\xd2'),
|
191
|
+
(1517, b"\x07\x12\t\xb8\x8f3\xe53\xd3\x94\x00@\x0b\xe53d"),
|
192
|
+
(1533, b"\x01`\x03\x02\x06\xfc\x80\xcb\x90\xe6y\xe0\x90\xe7\xc0\xf0"),
|
193
|
+
(1549, b"\xc2\x07\x12\t\xb8\x8f3\xe53\xd3\x94\x00@\x0b\xe53"),
|
194
|
+
(1565, b"d\x01`\x03\x02\x06\xfc\x80\xaa\x90\xe6y\xe0\x90\xe7\xc0"),
|
195
|
+
(1581, b"\xf0\xc2\x07\x12\t\xb8\x8f3\xe53\xd3\x94\x00@\x0b\xe5"),
|
196
|
+
(1597, b"3d\x01`\x03\x02\x06\xfc\x80\x89\x90\xe6y\xe0\x90\xe7"),
|
197
|
+
(1613, b"\xc1\xf0\xc2\x07\x12\t\xb8\x8f3\xe53\xd3\x94\x00@\x0c"),
|
198
|
+
(1629, b"\xe53d\x01`\x03\x02\x06\xfc\x02\x05\xd0\x90\xe7\xc0\xe0"),
|
199
|
+
(1645, b"\xd3\x94>P\x06\xa3\xe0\x94\x00@\x06\x90\xe7\xc0t>"),
|
200
|
+
(1661, b"\xf0\x90\xe7\xc0\xe0\xd3\x94\x01@G\xe4\xf52\x90\xe7\xc0"),
|
201
|
+
(1677, b"\xe0\x14\xff\xe52\xc3\x9fP8\xe0\x14\xb52\x07\x90\xe6"),
|
202
|
+
(1693, b"x\xe0D \xf0\x90\xe6y\xe0\xfft\xc2%2\xf5\x82"),
|
203
|
+
(1709, b"\xe44\xe7\xf5\x83\xef\xf0\xc2\x07\x12\t\xb8\x8f3\xe53"),
|
204
|
+
(1725, b"\xd3\x94\x00@\x08\xe53\xb4\x01\x07\x02\x05\xd0\x052\x80"),
|
205
|
+
(1741, b"\xbc\x90\xe6x\xe0D@\xf0\x90\xe7\xc0\xe0\xd3\x94\x00@"),
|
206
|
+
(1757, b"\x1e\xe0$\x01\xff\xe43\x90\xe6y\xe0\xfdt\xc0/\xf5"),
|
207
|
+
(1773, b"\x82\xe44\xe7\xf5\x83\xed\xf0\xc2\x07\x12\t\xb8\x8f3\xaf"),
|
208
|
+
(1789, b"3"),
|
209
|
+
(1790, b'"'),
|
210
|
+
(2039, b"\x90\xe6\x00\xe0T\xe7D\x10\xf0\x00\x00\x00\x90\xe6\x01t"),
|
211
|
+
(2055, b"\x8b\xf0\x00\x00\x00\x90\xe6\x10t\xa0\xf0\x90\xe6\x11\xf0\x00"),
|
212
|
+
(2071, b"\x00\x00\x90\xe6\x0bt\x03\xf0\x00\x00\x00\x90\xe6\x12t\xab"),
|
213
|
+
(2087, b"\xf0\x00\x00\x00\x90\xe6\x15t\xe2\xf0\x00\x00\x00\x90\xe6\x04"),
|
214
|
+
(2103, b"t\x80\xf0\x00\x00\x00t\x02\xf0\x00\x00\x00t\x04\xf0\x00"),
|
215
|
+
(2119, b"\x00\x00t\x06\xf0\x00\x00\x00t\x08\xf0\x00\x00\x00\xe4\xf0"),
|
216
|
+
(2135, b"\x00\x00\x00\x90\xe6It\x82\xf0\x00\x00\x00\xf0\x00\x00\x00"),
|
217
|
+
(2151, b"\xf0\x00\x00\x00\x90\xe6Ht\x88\xf0\x00\x00\x00\xf0\x00\x00"),
|
218
|
+
(2167, b"\x00\x90\xe6\x18t\x11\xf0\x00\x00\x00\x90\xe6\x1bt\t\xf0"),
|
219
|
+
(2183, b"\x00\x00\x00\xe4\x90\xe6&\xf0\x00\x00\x00\x90\xe6't\x08"),
|
220
|
+
(2199, b"\xf0\x00\x00\x00\xe4\x90\xe6\x02\xf0\x00\x00\x00\x90\xe6\x03\xf0"),
|
221
|
+
(2215, b"\x00\x00\x00\x90\xe6pt@\xf0\x00\x00\x00\xe4\x90\xe6\t"),
|
222
|
+
(2231, b"\xf0\x00\x00\x00\x90\xe66t\x80\xf0\x00\x00\x00\xe4\x90\xe6"),
|
223
|
+
(2247, b"7\xf0C\xb2\x03\x00\x00\x00\xc2\x80\x00\x00\x00\xd2\x81\x00"),
|
224
|
+
(2263, b'\x00\x00\xc2\x06\xc2\x05\xc2\x04u\xaf\x07\xd2\x00"'),
|
225
|
+
(1173, b" \x05\x030\x043\x90\xe6\xa2\xe00\xe1\x03\x02\x05\xcc"),
|
226
|
+
(1189, b"0\x05\x17\x12\x06\xff\xefp\x08\x90\xe7\xfft\x04\xf0\x80"),
|
227
|
+
(1205, b"\x05\xe4\x90\xe7\xff\xf0\xc2\x05\x80\x05\x12\x05\xcd\xc2\x04\x00"),
|
228
|
+
(1221, b'\x00\x00\x90\xe6\x8ft@\xf0"0\x06<\x90\xe6\xa2\xe0'),
|
229
|
+
(1237, b"0\xe1\x03\x02\x05\xcc\xe4\xff\xfet\x00/\xf5\x82\xe44"),
|
230
|
+
(1253, b" \xf5\x83\xe0\xfdt\xc0/\xf5\x82\xe44\xe7\xf5\x83\xed"),
|
231
|
+
(1269, b"\xf0\x0f\xbf\x00\x01\x0e\xefd\nNp\xdd\x00\x00\x00\x90"),
|
232
|
+
(1285, b'\xe6\x8ft\x08\xf0\xc2\x06"\x90\xe6\xa1\xe00\xe1\x03\x02'),
|
233
|
+
(1301, b"\x05\xcc\x90\xe6\x8d\xe0\xc3\x94\x02@\x06\x90\xe7\x81\xe0`"),
|
234
|
+
(1317, b'\x06\xe4\x90\xe6\x8d\xf0"\x90\xe7\x80\xe0\x90 \x00\xf0\x90'),
|
235
|
+
(1333, b"\xe7\x81\xe0\x90 \x01\xf0\x90\xe7\x82\xe0\x90 \x02\xf0\x90"),
|
236
|
+
(1349, b"\xe7\x83\xe0\x90 \x03\xf0\xe4\xa3\xf0\xa3\xf0\x90\xe7\x80\xe0"),
|
237
|
+
(1365, b"d\x07p$\x90\xe7\x82\xe0p\x12{\t}\x04\x7f\xa0"),
|
238
|
+
(1381, b"\x12\nj\x90 \x04\xef\xf0\xd2\x06\x80V\x90\xe7\x82\xe0"),
|
239
|
+
(1397, b"d\x01pN\xd2\x05\x80J\x90\xe7\x80\xe0\xb4\x08\x17\x90"),
|
240
|
+
(1413, b"\xe6\x8d\xe0$\xfe\xfb}\x02\x7f\xee\x12\nj\x90 \x04"),
|
241
|
+
(1429, b"\xef\xf0\xd2\x06\x80,\x90\xe7\x80\xe0\xb4\t\x04\xd2\x04\x80"),
|
242
|
+
(1445, b"!\x90\xe7\x80\xe0d\np\x19\x90\xe7\x82\xe0p\x07\xc2"),
|
243
|
+
(1461, b"\x81\x00\x00\x00\x80\n\xc2\x80\x00\x00\x00\xd2\x81\x00\x00\x00"),
|
244
|
+
(1477, b"\xd2\x06\xe4\x90\xe6\x8d\xf0"),
|
245
|
+
(1484, b'"'),
|
246
|
+
(2301, b'\xd3"'),
|
247
|
+
(3676, b'\xd3"'),
|
248
|
+
(3678, b'\xd3"'),
|
249
|
+
(3064, b'\x90\xe6\xba\xe0\xf5\x17\xd3"'),
|
250
|
+
(3595, b"\x90\xe7@\xe5\x17\xf0\xe4\x90\xe6\x8a\xf0\x90\xe6\x8b\x04\xf0"),
|
251
|
+
(3611, b'\xd3"'),
|
252
|
+
(3664, b'\x90\xe6\xba\xe0\xf5\x16\xd3"'),
|
253
|
+
(3613, b"\x90\xe7@\xe5\x16\xf0\xe4\x90\xe6\x8a\xf0\x90\xe6\x8b\x04\xf0"),
|
254
|
+
(3629, b'\xd3"'),
|
255
|
+
(3680, b'\xd3"'),
|
256
|
+
(3682, b'\xd3"'),
|
257
|
+
(3684, b'\xd3"'),
|
258
|
+
(3343, b"\x90\xe6\xb9\xe0$/`\x12\x04p\x1e\x90\xe6\x04\xe0\xff"),
|
259
|
+
(3359, b"C\x07\x80\x00\x00\x00\xef\xf0\x80\x11\x90\xe6\x04\xe0\xffS"),
|
260
|
+
(3375, b'\x07\x7f\x00\x00\x00\xef\xf0\x80\x02\xd3"\xc3'),
|
261
|
+
(3387, b'"'),
|
262
|
+
(2277, b"\xc0\xe0\xc0\x83\xc0\x82\xd2\x01S\x91\xef\x90\xe6]t\x01"),
|
263
|
+
(2293, b"\xf0\xd0\x82\xd0\x83\xd0\xe02"),
|
264
|
+
(3551, b"\xc0\xe0\xc0\x83\xc0\x82S\x91\xef\x90\xe6]t\x04\xf0\xd0"),
|
265
|
+
(3567, b"\x82\xd0\x83\xd0\xe02"),
|
266
|
+
(3573, b"\xc0\xe0\xc0\x83\xc0\x82S\x91\xef\x90\xe6]t\x02\xf0\xd0"),
|
267
|
+
(3589, b"\x82\xd0\x83\xd0\xe02"),
|
268
|
+
(3242, b"\xc0\xe0\xc0\x83\xc0\x82\x85\x10\x0c\x85\x11\r\x85\r\x82\x85"),
|
269
|
+
(3258, b"\x0c\x83\xa3t\x02\xf0\x85\x08\x0e\x85\t\x0f\x85\x0f\x82\x85"),
|
270
|
+
(3274, b"\x0e\x83\xa3t\x07\xf0S\x91\xef\x90\xe6]t\x10\xf0\xd0"),
|
271
|
+
(3290, b"\x82\xd0\x83\xd0\xe02"),
|
272
|
+
(3040, b"\xc0\xe0\xc0\x83\xc0\x82\xd2\x03S\x91\xef\x90\xe6]t\x08"),
|
273
|
+
(3056, b"\xf0\xd0\x82\xd0\x83\xd0\xe02"),
|
274
|
+
(2979, b"\xc0\xe0\xc0\x83\xc0\x82\x90\xe6\x80\xe00\xe7 \x85\x08\x0c"),
|
275
|
+
(2995, b"\x85\t\r\x85\r\x82\x85\x0c\x83\xa3t\x02\xf0\x85\x10\x0e"),
|
276
|
+
(3011, b"\x85\x11\x0f\x85\x0f\x82\x85\x0e\x83\xa3t\x07\xf0S\x91\xef"),
|
277
|
+
(3027, b"\x90\xe6]t \xf0\xd0\x82\xd0\x83\xd0\xe02"),
|
278
|
+
(2303, b"2"),
|
279
|
+
(3686, b"2"),
|
280
|
+
(3687, b"2"),
|
281
|
+
(3688, b"2"),
|
282
|
+
(3689, b"2"),
|
283
|
+
(3690, b"2"),
|
284
|
+
(3691, b"2"),
|
285
|
+
(3692, b"2"),
|
286
|
+
(3693, b"2"),
|
287
|
+
(3694, b"2"),
|
288
|
+
(3695, b"2"),
|
289
|
+
(3696, b"2"),
|
290
|
+
(3697, b"2"),
|
291
|
+
(3698, b"2"),
|
292
|
+
(3699, b"2"),
|
293
|
+
(3700, b"2"),
|
294
|
+
(3701, b"2"),
|
295
|
+
(3702, b"2"),
|
296
|
+
(3703, b"2"),
|
297
|
+
(3704, b"2"),
|
298
|
+
(3705, b"2"),
|
299
|
+
(3706, b"2"),
|
300
|
+
(3707, b"2"),
|
301
|
+
(3708, b"2"),
|
302
|
+
(3709, b"2"),
|
303
|
+
(3710, b"2"),
|
304
|
+
(3711, b"2"),
|
305
|
+
(3712, b"2"),
|
306
|
+
(3713, b"2"),
|
307
|
+
(3714, b"2"),
|
308
|
+
(3715, b"2"),
|
309
|
+
(3716, b"2"),
|
310
|
+
(3717, b"2"),
|
311
|
+
(3718, b"2"),
|
312
|
+
(3719, b"2"),
|
313
|
+
(3720, b"2"),
|
314
|
+
(0, b"\x02\x0e/"),
|
315
|
+
(3631, b"x\x7f\xe4\xf6\xd8\xfdu\x81:\x02\x032"),
|
316
|
+
(3475, b"\xeb\x9f\xf5\xf0\xea\x9eB\xf0\xe9\x9dB\xf0\xecd\x80\xc8"),
|
317
|
+
(3491, b'd\x80\x98E\xf0"'),
|
318
|
+
(3497, b"\xeb\x9f\xf5\xf0\xea\x9eB\xf0\xe9\x9dB\xf0\xe8\x9cE\xf0"),
|
319
|
+
(3513, b'"'),
|
320
|
+
]
|
321
|
+
|
322
|
+
|
323
|
+
def _firmware(device, start):
|
324
|
+
"""
|
325
|
+
Start and end packet sending data.
|
326
|
+
@param device:
|
327
|
+
@param start:
|
328
|
+
@return:
|
329
|
+
"""
|
330
|
+
device.ctrl_transfer(
|
331
|
+
request,
|
332
|
+
bRequest=0xA0,
|
333
|
+
wValue=0xE600,
|
334
|
+
wIndex=0x0,
|
335
|
+
data_or_wLength=b"\x01" if start else b"\x00",
|
336
|
+
)
|
337
|
+
|
338
|
+
|
339
|
+
def _parse(f):
|
340
|
+
"""Parses the clone board sys file, for the FPGA code."""
|
341
|
+
while True:
|
342
|
+
data = f.read(22)
|
343
|
+
if data is None or len(data) != 22:
|
344
|
+
break
|
345
|
+
length, _, value, end, payload, _ = struct.unpack("BBHB16sB", data)
|
346
|
+
if end != 0:
|
347
|
+
break
|
348
|
+
yield value, payload[:length]
|
349
|
+
|
350
|
+
|
351
|
+
def _write_chunks(device, chunks):
|
352
|
+
"""
|
353
|
+
Write chunks to the FPGA.
|
354
|
+
|
355
|
+
@param device:
|
356
|
+
@param chunks:
|
357
|
+
@return:
|
358
|
+
"""
|
359
|
+
_firmware(device, start=True)
|
360
|
+
for value, payload in chunks:
|
361
|
+
device.ctrl_transfer(
|
362
|
+
request, bRequest=0xA0, wValue=value, wIndex=0x0, data_or_wLength=payload
|
363
|
+
)
|
364
|
+
_firmware(device, start=False)
|
365
|
+
|
366
|
+
|
367
|
+
def get_offset_by_hash(hash):
|
368
|
+
if hash == "b86bc139a88592a4d71e64990133e86f":
|
369
|
+
return 0x4440, "LMCV2U2"
|
370
|
+
if hash == "f775f53d0cf8c9b3e7855837561a4e6c":
|
371
|
+
return 0x11DE0, "LMCUSB2009"
|
372
|
+
if hash == "cd408e29768af505d671fb5c216fcdcc":
|
373
|
+
return 0x9F60, "LMCUSBdSYS"
|
374
|
+
if hash == "2dd5017f569ac9efc292e6c085b08f36":
|
375
|
+
return 0x4440, "LMCdotSYS"
|
376
|
+
if hash == "48bcb097a38fdd84df43f6ee6e7f0195":
|
377
|
+
return 0x5190, "LMCV2U2"
|
378
|
+
if hash == "3a5e33b366f6a7af0f530a5ef68f137b":
|
379
|
+
return 0x1390, "LMCV4"
|
380
|
+
return 0x4440, "Unknown"
|
381
|
+
|
382
|
+
|
383
|
+
def _send_device_sys(device, sys_file, channel=None):
|
384
|
+
"""
|
385
|
+
Open the file, write the parsed chunks.
|
386
|
+
|
387
|
+
@param device:
|
388
|
+
@param sys_file:
|
389
|
+
@param offset:
|
390
|
+
@return:
|
391
|
+
"""
|
392
|
+
if isinstance(sys_file, str):
|
393
|
+
with open(sys_file, "rb") as f:
|
394
|
+
contents = f.read()
|
395
|
+
f.seek(0)
|
396
|
+
|
397
|
+
h = hashlib.md5(contents)
|
398
|
+
offset, name = get_offset_by_hash(h.hexdigest())
|
399
|
+
if channel:
|
400
|
+
channel(
|
401
|
+
f"{sys_file} has hash:{h.hexdigest()} is {name} with offset {offset}"
|
402
|
+
)
|
403
|
+
f.seek(offset)
|
404
|
+
_write_chunks(device, _parse(f))
|
405
|
+
else:
|
406
|
+
_write_chunks(device, _parse(sys_file))
|
407
|
+
|
408
|
+
|
409
|
+
def load_sys(sys_file, channel=None):
|
410
|
+
"""
|
411
|
+
Find devices, send sys_file to the needed boards.
|
412
|
+
|
413
|
+
@param sys_file:
|
414
|
+
@param channel:
|
415
|
+
@return:
|
416
|
+
"""
|
417
|
+
try:
|
418
|
+
devices = list(
|
419
|
+
usb.core.find(idVendor=VENDER_ID, idProduct=PRODUCT_ID, find_all=True)
|
420
|
+
)
|
421
|
+
if channel:
|
422
|
+
channel(f"{len(devices)} devices need initializing.")
|
423
|
+
for i, device in enumerate(devices):
|
424
|
+
if channel:
|
425
|
+
channel(f"Clone board #{i+1} detected. Sending Initialize.")
|
426
|
+
_send_device_sys(device, sys_file, channel=channel)
|
427
|
+
except usb.core.USBError as e:
|
428
|
+
channel(str(e))
|
429
|
+
raise ConnectionRefusedError
|
430
|
+
|
431
|
+
|
432
|
+
def load_chunks(chunks=None, channel=None):
|
433
|
+
"""
|
434
|
+
Find devices, send chunks to the needed boards.
|
435
|
+
@param chunks:
|
436
|
+
@param channel:
|
437
|
+
@return:
|
438
|
+
"""
|
439
|
+
if chunks is None:
|
440
|
+
chunks = init
|
441
|
+
try:
|
442
|
+
devices = list(
|
443
|
+
usb.core.find(idVendor=VENDER_ID, idProduct=PRODUCT_ID, find_all=True)
|
444
|
+
)
|
445
|
+
if channel:
|
446
|
+
channel(f"{len(devices)} devices need initializing.")
|
447
|
+
for i, device in enumerate(devices):
|
448
|
+
if channel:
|
449
|
+
channel(f"Clone board #{i+1} detected. Sending Initialize.")
|
450
|
+
_write_chunks(device, chunks)
|
451
|
+
except usb.core.USBError as e:
|
452
|
+
channel(str(e))
|
453
|
+
raise ConnectionRefusedError
|
454
|
+
|
455
|
+
|
456
|
+
if __name__ == "__main__":
|
457
|
+
load_sys("Lmcv2u.sys", channel=print)
|