```\n/// @notice Closes an auction and purchases the signer bonds. Payout to buyer, funder, then signers if not fraud\n/// @dev For interface, reading auctionValue will give a past value. the current is better\n/// @param \_d deposit storage pointer\nfunction purchaseSignerBondsAtAuction(DepositUtils.Deposit storage \_d) public {\n    bool \_wasFraud = \_d.inFraudLiquidationInProgress();\n    require(\_d.inSignerLiquidation(), "No active auction");\n\n    \_d.setLiquidated();\n    \_d.logLiquidated();\n\n    // send the TBTC to the TDT holder. If the TDT holder is the Vending Machine, burn it to maintain the peg.\n    address tdtHolder = \_d.depositOwner();\n\n    TBTCToken \_tbtcToken = TBTCToken(\_d.TBTCToken);\n\n    uint256 lotSizeTbtc = \_d.lotSizeTbtc();\n    require(\_tbtcToken.balanceOf(msg.sender) >= lotSizeTbtc, "Not enough TBTC to cover outstanding debt");\n\n    if(tdtHolder == \_d.VendingMachine){\n        \_tbtcToken.burnFrom(msg.sender, lotSizeTbtc);  // burn minimal amount to cover size\n    }\n    else{\n        \_tbtcToken.transferFrom(msg.sender, tdtHolder, lotSizeTbtc);\n    }\n\n    // Distribute funds to auction buyer\n    uint256 \_valueToDistribute = \_d.auctionValue();\n    msg.sender.transfer(\_valueToDistribute);\n\n    // Send any TBTC left to the Fee Rebate Token holder\n    \_d.distributeFeeRebate();\n\n    // For fraud, pay remainder to the liquidation initiator.\n    // For non-fraud, split 50-50 between initiator and signers. if the transfer amount is 1,\n    // division will yield a 0 value which causes a revert; instead, \n    // we simply ignore such a tiny amount and leave some wei dust in escrow\n    uint256 contractEthBalance = address(this).balance;\n    address payable initiator = \_d.liquidationInitiator;\n\n    if (initiator == address(0)){\n        initiator = address(0xdead);\n    }\n    if (contractEthBalance > 1) {\n        if (\_wasFraud) {\n            initiator.transfer(contractEthBalance);\n        } else {\n            // There will always be a liquidation initiator.\n            uint256 split = contractEthBalance.div(2);\n            \_d.pushFundsToKeepGroup(split);\n            initiator.transfer(split);\n        }\n    }\n}\n```\n