[{"data":1,"prerenderedAt":75},["ShallowReactive",2],{"docs-nav":3,"doc:tuning-table-generators":56},[4,12,30,42,50],{"title":5,"items":6},"Getting Started",[7,10],{"path":8,"title":9},"\u002Fdocs\u002Finstallation","Installation",{"path":11,"title":5},"\u002Fdocs\u002Fgetting-started",{"title":13,"items":14},"User Documentation",[15,18,21,24,27],{"path":16,"title":17},"\u002Fdocs\u002Fuser-guide","User Guide",{"path":19,"title":20},"\u002Fdocs\u002Fsupported-ecu-formats","Supported ECU Formats",{"path":22,"title":23},"\u002Fdocs\u002Funit-conversion","Unit Conversion",{"path":25,"title":26},"\u002Fdocs\u002Ffield-normalization","Field Normalization",{"path":28,"title":29},"\u002Fdocs\u002Ftuning-table-generators","Tuning Table Generators",{"title":31,"items":32},"Support",[33,36,39],{"path":34,"title":35},"\u002Fdocs\u002Ftroubleshooting","Troubleshooting",{"path":37,"title":38},"\u002Fdocs\u002Ffaq","Frequently Asked Questions",{"path":40,"title":41},"\u002Fdocs\u002Fprivacy","Privacy & Analytics",{"title":43,"items":44},"Development",[45,47],{"path":46,"title":43},"\u002Fdocs\u002Fdevelopment",{"path":48,"title":49},"\u002Fdocs\u002Fcontributing","Contributing",{"title":51,"items":52},"Legal",[53],{"path":54,"title":55},"\u002Fdocs\u002Flegal","Legal Notices",{"slug":57,"name":58,"title":29,"html":59,"toc":60,"editUrl":73,"sourceUrl":74},"tuning-table-generators","Tuning-Table-Generators","\u003Cp>UltraLog 2.15 adds two tools that mine your logs for events and turn them into tuning tables: \u003Cstrong>Lambda Delay\u003C\u002Fstrong> and \u003Cstrong>Accel Enrichment\u003C\u002Fstrong>. They sit beside Log Viewer, Scatter Plots and Histogram in the tool switcher (\u003Ccode>⌘4\u003C\u002Fcode> \u002F \u003Ccode>⌘5\u003C\u002Fcode> on macOS, \u003Ccode>Ctrl+4\u003C\u002Fcode> \u002F \u003Ccode>Ctrl+5\u003C\u002Fcode> elsewhere).\u003C\u002Fp>\n\u003Cp>Both tools share one workflow:\u003C\u002Fp>\n\u003Col>\n\u003Cli>Load a log and pick the tool.\u003C\u002Fli>\n\u003Cli>Check the channel roles in the \u003Cstrong>Tool Properties\u003C\u002Fstrong> panel (auto-detected; \u003Ccode>⚠\u003C\u002Fcode> marks a near-tie you should confirm).\u003C\u002Fli>\n\u003Cli>Adjust the axes if your ECU table uses different breakpoints.\u003C\u002Fli>\n\u003Cli>Click \u003Cstrong>Run on current file\u003C\u002Fstrong>. The table appears in the center panel.\u003C\u002Fli>\n\u003Cli>Load more logs and click \u003Cstrong>Add current file to table\u003C\u002Fstrong> to fill sparse cells.\u003C\u002Fli>\n\u003Cli>Export as CSV, copy for paste, or export PNG\u002FPDF.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>Tables are session-level, not per-file: switching tabs or tools does not lose a table. The active tab only decides which file \u003Cem>Run\u003C\u002Fem> reads.\u003C\u002Fp>\n\u003Chr>\n\u003Ch2 id=\"reading-a-table\">Reading a table\u003C\u002Fh2>\n\u003Cp>Each cell shows the \u003Cstrong>median\u003C\u002Fstrong> of every accepted event that landed in that RPM × load cell. The small badge in the corner is the sample count, colored by confidence:\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Confidence\u003C\u002Fth>\n\u003Cth>Rule\u003C\u002Fth>\n\u003Cth>Display\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>Empty\u003C\u002Ftd>\n\u003Ctd>no events\u003C\u002Ftd>\n\u003Ctd>dark cell\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Low\u003C\u002Ftd>\n\u003Ctd>fewer than 3 events, or spread (MAD) more than half the median\u003C\u002Ftd>\n\u003Ctd>value in italics, red badge\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Medium\u003C\u002Ftd>\n\u003Ctd>3 or more events\u003C\u002Ftd>\n\u003Ctd>amber badge\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>High\u003C\u002Ftd>\n\u003Ctd>8 or more events with a tight spread\u003C\u002Ftd>\n\u003Ctd>green badge\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>Empty and low cells are never interpolated. Export leaves them blank by default (&quot;Blank low-confidence cells&quot;); untick that to export everything.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Hover\u003C\u002Fstrong> a cell for median, spread, count and confidence. \u003Cstrong>Click\u003C\u002Fstrong> a cell to open the event inspector: every event in that cell with its time, source log and diagnostic note. \u003Cstrong>Jump\u003C\u002Fstrong> switches to Log Viewer at that moment so you can see what the sensors did.\u003C\u002Fp>\n\u003Cp>Below the toolbar, each log reports what it found and why events were rejected, for example \u003Ccode>208 events found · 206 rejected: 109 unsteady, 93 overlap, 4 wrong direction\u003C\u002Fcode>. This tells you what kind of driving to log next.\u003C\u002Fp>\n\u003Chr>\n\u003Ch2 id=\"lambda-delay\">Lambda Delay\u003C\u002Fh2>\n\u003Cp>Measures the time between an injector pulse-width step and the wideband&#39;s response, binned by RPM × load (MAP or TPS). This is the number your ECU&#39;s closed-loop O2 control wants in its delay table.\u003C\u002Fp>\n\u003Ch3 id=\"what-to-log\">What to log\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>Open loop.\u003C\u002Fstrong> With closed-loop O2 correction active, the ECU&#39;s own trims cause pulse-width steps and contaminate the measurement. Map a correction or closed-loop state channel and the tool rejects contaminated events; leave it unmapped and the report warns that results assume open loop.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Warm engine.\u003C\u002Fstrong> Map coolant temperature and events below the threshold are rejected.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Trim bumps.\u003C\u002Fstrong> Hold a steady RPM and load, then bump fuel by 8–10 % up and back down. Each bump is one event. A driving log works too with the \u003Cem>relaxed\u003C\u002Fem> profile, but expect most events to be rejected as unsteady.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"channel-roles\">Channel roles\u003C\u002Fh3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Role\u003C\u002Fth>\n\u003Cth>Required\u003C\u002Fth>\n\u003Cth>Notes\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>Engine speed\u003C\u002Ftd>\n\u003Ctd>yes\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Manifold pressure \u002F Throttle position\u003C\u002Ftd>\n\u003Ctd>one of them\u003C\u002Ftd>\n\u003Ctd>Choose the load axis with the \u003Cstrong>Load axis\u003C\u002Fstrong> toggle\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Injector pulse width\u003C\u002Ftd>\n\u003Ctd>yes\u003C\u002Ftd>\n\u003Ctd>Per-injector on time, average PW, or duty cycle all work: the step test is relative\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Lambda \u002F AFR\u003C\u002Ftd>\n\u003Ctd>yes\u003C\u002Ftd>\n\u003Ctd>λ or AFR is detected from the data. Prefer a single sensor over a bank average, which smears the response\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Fuel cut flag\u003C\u002Ftd>\n\u003Ctd>no\u003C\u002Ftd>\n\u003Ctd>Events during DFCO are rejected\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Closed-loop correction\u003C\u002Ftd>\n\u003Ctd>no\u003C\u002Ftd>\n\u003Ctd>See \u003Cem>What to log\u003C\u002Fem>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Coolant temperature\u003C\u002Ftd>\n\u003Ctd>no\u003C\u002Ftd>\n\u003Ctd>Events below \u003Cstrong>Min coolant temp\u003C\u002Fstrong> (default 60 °C) are rejected\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Clutch state\u003C\u002Ftd>\n\u003Ctd>no\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch3 id=\"measures\">Measures\u003C\u002Fh3>\n\u003Cp>Switch the measure dropdown to view any of these over the same events:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Dead time\u003C\u002Fstrong> (ms) — first significant deflection. The primary value for an O2 delay table.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>T63\u003C\u002Fstrong> (ms) — time to 63 % of the settled response. Useful for judging sensor speed.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Response magnitude\u003C\u002Fstrong> and \u003Cstrong>step size\u003C\u002Fstrong> — diagnostics.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>The measured dead time includes about half an engine cycle of injection scheduling and about one cycle of exhaust transport. That is what the ECU&#39;s delay table should contain, so it is reported, not subtracted.\u003C\u002Fp>\n\u003Ch3 id=\"units-on-export\">Units on export\u003C\u002Fh3>\n\u003Cp>Delay exports in \u003Cstrong>milliseconds\u003C\u002Fstrong>, \u003Cstrong>engine cycles\u003C\u002Fstrong> (\u003Ccode>ms × RPM \u002F 120000\u003C\u002Fcode>, four-stroke) or \u003Cstrong>ignition events\u003C\u002Fstrong> (cycles × cylinders ÷ 2). Set \u003Cstrong>Cylinders\u003C\u002Fstrong> when using ignition events. Conversion uses each cell&#39;s center RPM.\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>ECU\u003C\u002Fth>\n\u003Cth>Table unit\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>MegaSquirt MS3 EGO delay, AEM Infinity, MoTeC M1, Link, Emerald\u003C\u002Ftd>\n\u003Ctd>ms\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Haltech O2 control, Speeduino EGO delay\u003C\u002Ftd>\n\u003Ctd>engine cycles or ignition events (check your ECU)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch3 id=\"parameters\">Parameters\u003C\u002Fh3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Parameter\u003C\u002Fth>\n\u003Cth>Default\u003C\u002Fth>\n\u003Cth>What it does\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>Gating profile\u003C\u002Ftd>\n\u003Ctd>strict\u003C\u002Ftd>\n\u003Ctd>Strict: RPM ±200, 600 ms spacing. Relaxed: RPM ±400, 400 ms; cells fed by relaxed events cap at Medium confidence\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Min PW step (%)\u003C\u002Ftd>\n\u003Ctd>8\u003C\u002Ftd>\n\u003Ctd>Minimum relative pulse-width change to count as a step\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Step window (ms)\u003C\u002Ftd>\n\u003Ctd>150\u003C\u002Ftd>\n\u003Ctd>The step must complete within this\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Event spacing (ms)\u003C\u002Ftd>\n\u003Ctd>600\u003C\u002Ftd>\n\u003Ctd>Closer steps are rejected as overlapping\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Response k\u003C\u002Ftd>\n\u003Ctd>3\u003C\u002Ftd>\n\u003Ctd>Response threshold as a multiple of the sensor&#39;s measured noise\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Min response (λ)\u003C\u002Ftd>\n\u003Ctd>0.005\u003C\u002Ftd>\n\u003Ctd>Floor for the threshold (×14.7 for AFR channels)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Response timeout (ms)\u003C\u002Ftd>\n\u003Ctd>1500\u003C\u002Ftd>\n\u003Ctd>No response by then → rejected\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>PW floor\u003C\u002Ftd>\n\u003Ctd>1.0\u003C\u002Ftd>\n\u003Ctd>Pulse width below this is treated as fuel cut\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Injector dead time (ms)\u003C\u002Ftd>\n\u003Ctd>0\u003C\u002Ftd>\n\u003Ctd>Subtracted before the step test when your PW channel includes dead time (Haltech \u003Ccode>Injector 1 On Time\u003C\u002Fcode> does)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Steady RPM \u002F MAP \u002F TPS bands\u003C\u002Ftd>\n\u003Ctd>±200 \u002F ±8 \u002F ±5\u003C\u002Ftd>\n\u003Ctd>The window must stay inside these\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Closed-loop movement\u003C\u002Ftd>\n\u003Ctd>1 %\u003C\u002Ftd>\n\u003Ctd>Correction movement around the step that rejects the event\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch3 id=\"sample-rate\">Sample rate\u003C\u002Fh3>\n\u003Cp>The tool measures the wideband&#39;s \u003Cem>effective\u003C\u002Fem> update rate, which is often lower than the log rate (a CAN wideband updating at 10 Hz inside a 100 Hz log). Delays are interpolated between sensor updates, and the report warns when the update rate limits resolution. Logs below 10 Hz get a warning; below 4 Hz the run refuses.\u003C\u002Fp>\n\u003Chr>\n\u003Ch2 id=\"accel-enrichment\">Accel Enrichment\u003C\u002Fh2>\n\u003Cp>Detects tip-ins, shifts the lambda window by the measured delay, and measures the lean or rich excursion against target, binned by RPM × throttle rate. It suggests a starting correction per cell.\u003C\u002Fp>\n\u003Ch3 id=\"channel-roles-1\">Channel roles\u003C\u002Fh3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Role\u003C\u002Fth>\n\u003Cth>Required\u003C\u002Fth>\n\u003Cth>Notes\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>Engine speed\u003C\u002Ftd>\n\u003Ctd>yes\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Throttle position\u003C\u002Ftd>\n\u003Ctd>yes\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Throttle rate\u003C\u002Ftd>\n\u003Ctd>no\u003C\u002Ftd>\n\u003Ctd>A native derivative channel (\u003Ccode>TPS DOT\u003C\u002Fcode>, \u003Ccode>Throttle Position Derivative\u003C\u002Fcode>, \u003Ccode>TPS Delta\u003C\u002Fcode>) is preferred; otherwise it is computed. The detected scale is shown\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Manifold pressure\u003C\u002Ftd>\n\u003Ctd>no\u003C\u002Ftd>\n\u003Ctd>MAP-rate fallback trigger when there is no TPS\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Lambda \u002F AFR\u003C\u002Ftd>\n\u003Ctd>yes\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Lambda \u002F AFR target\u003C\u002Ftd>\n\u003Ctd>no\u003C\u002Ftd>\n\u003Ctd>Reference for the excursion; else the pre-event baseline\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>ECU accel enrichment\u003C\u002Ftd>\n\u003Ctd>no\u003C\u002Ftd>\n\u003Ctd>See \u003Cem>Additional vs absolute\u003C\u002Fem>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Clutch state, Coolant temperature\u003C\u002Ftd>\n\u003Ctd>no\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch3 id=\"additional-vs-absolute\">Additional vs absolute\u003C\u002Fh3>\n\u003Cp>If you map an ECU accel-enrichment activity channel (Haltech transient throttle, rusEFI \u003Ccode>Fuel: TPS AE Active\u003C\u002Fcode>, Speeduino\u002FMegaSquirt \u003Ccode>Accel Enrich\u003C\u002Fcode>), the ECU was already adding fuel during the event, so the measured excursion is the \u003Cem>residual\u003C\u002Fem>. The suggested correction is then a \u003Cstrong>multiplier on your current AE value\u003C\u002Fstrong>, and the table is labelled \u003Cem>additional\u003C\u002Fem>. Events with no ECU activity are rejected so one cell never mixes the two kinds.\u003C\u002Fp>\n\u003Cp>With no activity channel mapped the table is \u003Cem>absolute\u003C\u002Fem>: the suggestion is the whole enrichment.\u003C\u002Fp>\n\u003Cp>For ECUs whose AE table is in \u003Cstrong>ms added\u003C\u002Fstrong> (MegaSquirt MS2\u002FMS3), multiply the cell&#39;s base pulse width by the factor rather than pasting a percent.\u003C\u002Fp>\n\u003Ch3 id=\"measures-1\">Measures\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>Suggested correction (%)\u003C\u002Fstrong> — signed: negative means the ECU is over-enriching.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Depth (λ)\u003C\u002Fstrong> — peak deviation from reference.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Duration (ms)\u003C\u002Fstrong> — time outside the lean band.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Area-based correction (%)\u003C\u002Fstrong> — dose over the accel time, for ECUs that apply enrichment as a decaying dose.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Excursion area\u003C\u002Fstrong> and \u003Cstrong>delay compensation\u003C\u002Fstrong> — diagnostics.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"lambda-delay-compensation\">Lambda-delay compensation\u003C\u002Fh3>\n\u003Cp>If a Lambda Delay table exists in the session, each tip-in uses the matching cell&#39;s delay when that cell is Medium or High confidence. Otherwise it uses the \u003Cstrong>Assumed lambda delay (ms)\u003C\u002Fstrong> parameter and the event note says so. Generate the lambda delay table first for best results.\u003C\u002Fp>\n\u003Chr>\n\u003Ch2 id=\"export-formats\">Export formats\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Format\u003C\u002Fth>\n\u003Cth>Contents\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>CSV\u003C\u002Ftd>\n\u003Ctd>Value grid, sample-count grid and spread grid with \u003Ccode>#\u003C\u002Fcode> comment headers; blank cells stay blank\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Copy for paste\u003C\u002Ftd>\n\u003Ctd>Bare tab-separated value grid for tuning software\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>PDF\u003C\u002Ftd>\n\u003Ctd>Values, counts, confidence markers (\u003Ccode>*\u003C\u002Fcode> medium, \u003Ccode>?\u003C\u002Fcode> low) and axis labels\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>PNG\u003C\u002Ftd>\n\u003Ctd>Colored cells and grid lines only\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>All four honour the same blanking and unit options.\u003C\u002Fp>\n",[61,64,67,70],{"id":62,"text":63},"reading-a-table","Reading a table",{"id":65,"text":66},"lambda-delay","Lambda Delay",{"id":68,"text":69},"accel-enrichment","Accel Enrichment",{"id":71,"text":72},"export-formats","Export formats","https:\u002F\u002Fgithub.com\u002FClassicMiniDIY\u002FUltraLog\u002Fwiki\u002FTuning-Table-Generators\u002F_edit","https:\u002F\u002Fgithub.com\u002FClassicMiniDIY\u002FUltraLog\u002Fwiki\u002FTuning-Table-Generators",1792894561058]