Permit2 moves no ETH, but the swap decoder read the zero address in a
PERMIT2_TRANSFER_FROM as ETH, with an ETH figure. Such a move now names
the zero address as its token and gives its amount in base units. The
token is named on `Token moved` and `Token moved into the router`, and
the amount is on `Moved from the sender` and `Paid to`.
The zero-address check the permit lines already made is now one function,
permit2TokenInfo(), which the move lines share. tokenMovedLine() takes
the token's info instead of its address.
A V4 step of ETH that states no amount still gets its own lines beside
such a move. A test covers that case.
Model: opus-5-5