function approveOrder(Order memory order, bool orderbookInclusionDesired)
        internal
    {
        

        
        require(msg.sender == order.maker);

        
        bytes32 hash = hashToSign(order);

        
        require(!approvedOrders[hash]);

        
    
        
        approvedOrders[hash] = true;
  
        
        {
            emit OrderApprovedPartOne(hash, order.exchange, order.maker, order.taker, order.makerRelayerFee, order.takerRelayerFee, order.makerProtocolFee, order.takerProtocolFee, order.feeRecipient, order.feeMethod, order.side, order.saleKind, order.target);
        }
        {   
            emit OrderApprovedPartTwo(hash, order.howToCall, order.calldata, order.replacementPattern, order.staticTarget, order.staticExtradata, order.paymentToken, order.basePrice, order.extra, order.listingTime, order.expirationTime, order.salt, orderbookInclusionDesired);
        }
    }