anchor.diff:      {ok, State}.
   
   %% Internal
  -do_push(RegIds, Message, Key, Retry) ->
  -    error_logger:info_msg("Sending message: ~p to reg ids: ~p. Retry number: ~p~n", [Message, RegIds, Retry]),
  +do_push(RegIds, Message, Key, Attempt) ->
  +    error_logger:info_msg("Sending message: ~p to reg ids: ~p. Attempt number: ~p~n", [Message, RegIds, Attempt]),
       case gcm_api:push(RegIds, Message, Key) of
           {ok, GCMResult} ->
               handle_result(GCMResult, RegIds);
           {error, {retry, RetryAfter}} ->
  -            do_backoff(RetryAfter, RegIds, Message, Key, Retry),
  +            do_backoff(RetryAfter, RegIds, Message, Key, Attempt),
               {error, retry};
           {error, Reason} ->
               {error, Reason}
  
positive.code:     {_MulticastId, _SuccessesNumber, _FailuresNumber, _CanonicalIdsNumber, Results} = GCMResult,
      lists:map(fun({Result, RegId}) -> {RegId, parse(Result)} end, lists:zip(Results, RegIds)).
  
  do_backoff(_, _, _, _, ?RETRY + 1) ->
      ok;
  
  do_backoff(RetryAfter, RegIds, Message, Key, Retry) ->
      case RetryAfter of
          no_retry ->
              ok;
  	_ ->
  	    timer:apply_after(RetryAfter * 1000, ?MODULE, do_push, [RegIds, Message, Key, Retry+1])
      end.
  
  parse(Result) ->
  
negative.code: push(Name, RegIds, Message) ->
      push(Name, RegIds, Message, 1).
  
  push(Name, RegIds, Message, Attempt) ->
      gen_server:cast(Name, {send, RegIds, Message, Attempt}).
  
  sync_push(Name, RegIds, Message) ->
      sync_push(Name, RegIds, Message, 1).
  
  sync_push(Name, RegIds, Message, Attempt) ->
      gen_server:call(Name, {send, RegIds, Message, Attempt}).
  
  %% OTP
  start_link(Name, Key) ->
  