<NA>
<NA>
function outboundTransfer(
        address _l1Token,
        address _to,
        uint256 _amount,
        uint256 _maxGas,
        uint256 _gasPriceBid,
        bytes calldata _data
    ) public payable virtual override returns (bytes memory res) {
        address _from;
        uint256 seqNum;
        {
            uint256 _maxSubmissionCost;
            bytes memory extraData;
            (_from, _maxSubmissionCost, extraData) = parseOutboundData(_data);

            require(_l1Token.isContract(), "L1_NOT_CONTRACT");
            // this validates if the l1 token was set correctly
            address l2Token = _calculateL2TokenAddress(_l1Token);

            outboundEscrowTransfer(_l1Token, _from, _amount);

            seqNum = createOutboundTx(
                _l1Token,
                _from,
                _to,
                _amount,
                _maxGas,
                _gasPriceBid,
                _maxSubmissionCost,
                extraData
            );
        }

        emit OutboundTransferInitiated(_l1Token, _from, _to, seqNum, _amount, _data);
        return abi.encode(seqNum);
    }
//  * @param maxSubmissionCost Max gas deducted from user's L2 balance to cover base submission fee