anchor.diff:  %% @hidden
   rate1(Protocol, Service, Product, Buckets, Timestamp, Address, Direction,
   		#offer{specification = undefined, bundle = Bundle}, Flag,
  -		DebitAmounts, ReserveAmounts, ServiceType, State, ChargingKey) ->
  +		DebitAmounts, ReserveAmounts, ServiceType, State, ChargingKey, ServiceNetwork) ->
   	try
   		F = fun(#bundled_po{name = OfferId}, Acc) ->
   				case mnesia:read(offer, OfferId, read) of
  
positive.code: 			throw(table_lookup_failed)
  	end;
  rate4(Protocol, Service, Product, Buckets, Price,
  		Flag, DebitAmounts, ReserveAmounts, State, ChargingKey) ->
  	charge(Protocol, Service, Product, Buckets, Price,
  			Flag, DebitAmounts, ReserveAmounts, State, ChargingKey).
  %% @hidden
  
negative.code: 					((ServiceType == ?DIAMETERSMS) and ((Spec == "10") orelse (Spec == "11"))))) ->
  			rate2(Protocol, Service, Product, Buckets, Timestamp, Address,
  					Direction, Offer, Flag, DebitAmounts, ReserveAmounts,
  					State#state{rated = #rated{product = OfferName}},
  					ChargingKey, ServiceNetwork);
  		_ ->
  			throw(invalid_service_type)
  	end.
  rate2(Protocol, Service, Product, Buckets, Timestamp, Address, Direction,
  		#offer{specification = ProdSpec, price = Prices} = _Offer,
  		Flag, DebitAmounts, ReserveAmounts, State,
  		ChargingKey, ServiceNetwork)
  		when ProdSpec == "10"; ProdSpec == "11" ->
  	F = fun(#price{type = usage, units = messages}) ->
  				true;
  