contracts/cash/CashManager.sol

707:  function completeRedemptions(
708:    address[] calldata redeemers,
709:    address[] calldata refundees,
710:    uint256 collateralAmountToDist,
711:    uint256 epochToService,
712:    uint256 fees
713;  ) external override updateEpoch onlyRole(MANAGER_ADMIN) {
714:    _checkAddressesKYC(redeemers);
715:    _checkAddressesKYC(refundees);
716:    if (epochToService >= currentEpoch) {
717:      revert MustServicePastEpoch();
718:    }
719:    // Calculate the total quantity of shares tokens burned w/n an epoch
720:    uint256 refundedAmt = _processRefund(refundees, epochToService);
721:    uint256 quantityBurned = redemptionInfoPerEpoch[epochToService]
722:      .totalBurned - refundedAmt;
723:    uint256 amountToDist = collateralAmountToDist - fees;
724:    _processRedemption(redeemers, amountToDist, quantityBurned, epochToService);
725:    collateral.safeTransferFrom(assetSender, feeRecipient, fees);
726:    emit RedemptionFeesCollected(feeRecipient, fees, epochToService);
727:  }
743:  function _processRedemption
755:  uint256 collateralAmountDue = (amountToDist * cashAmountReturned) /
756:        quantityBurned;
