class CronofyService extends OAuth20Service {

    private final DefaultApi20 api;

    /**
     * <p>Constructor for CronofyService.</p>
     *
     * @param api a {@link DefaultApi20} object
     * @param apiKey a {@link String} object
     * @param apiSecret a {@link String} object
     * @param callback a {@link String} object
     * @param defaultScope a {@link String} object
     * @param responseType a {@link String} object
     * @param debugStream a {@link OutputStream} object
     * @param userAgent a {@link String} object
     * @param httpClientConfig a {@link HttpClientConfig} object
     * @param httpClient a {@link HttpClient} object
     */
    public CronofyService(final DefaultApi20 api, final String apiKey, final String apiSecret, final String callback,
                          final String defaultScope, final String responseType, final OutputStream debugStream,
                          final String userAgent, final HttpClientConfig httpClientConfig, final HttpClient httpClient) {
        super(api, apiKey, apiSecret, callback, defaultScope, responseType, debugStream, userAgent, httpClientConfig, httpClient);
        this.api = api;
    }

    /** {@inheritDoc} */
    protected OAuthRequest createAccessTokenRequest(AccessTokenRequestParams params) {<FILL_FUNCTION_BODY>}
}

        final OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint());

        final Map<String, String> map = new HashMap<>();
        map.put("client_id", getApiKey());
        map.put("client_secret", getApiSecret());
        map.put(OAuthConstants.GRANT_TYPE, OAuthConstants.AUTHORIZATION_CODE);
        map.put(OAuthConstants.CODE, params.getCode());
        map.put(OAuthConstants.REDIRECT_URI, getCallback());
        final String json;
        try {
            json = JsonHelper.getMapper().writeValueAsString(map);
        } catch (final JsonProcessingException e) {
            throw new TechnicalException(e);
        }
        request.setPayload(json);

        request.addHeader("Content-Type", "application/json; charset=utf-8");

        logRequestWithParams("access token", request);
        return request;
    
<methods>public void <init>(com.github.scribejava.core.builder.api.DefaultApi20, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.io.OutputStream, java.lang.String, com.github.scribejava.core.httpclient.HttpClientConfig, com.github.scribejava.core.httpclient.HttpClient) ,public com.github.scribejava.core.oauth.AuthorizationUrlBuilder createAuthorizationUrlBuilder() ,public com.github.scribejava.core.model.OAuth2Authorization extractAuthorization(java.lang.String) ,public com.github.scribejava.core.model.OAuth2AccessToken getAccessToken(java.lang.String) throws java.io.IOException, java.lang.InterruptedException, java.util.concurrent.ExecutionException,public com.github.scribejava.core.model.OAuth2AccessToken getAccessToken(com.github.scribejava.core.oauth.AccessTokenRequestParams) throws java.io.IOException, java.lang.InterruptedException, java.util.concurrent.ExecutionException,public Future<com.github.scribejava.core.model.OAuth2AccessToken> getAccessToken(com.github.scribejava.core.oauth.AccessTokenRequestParams, OAuthAsyncRequestCallback<com.github.scribejava.core.model.OAuth2AccessToken>) ,public Future<com.github.scribejava.core.model.OAuth2AccessToken> getAccessToken(java.lang.String, OAuthAsyncRequestCallback<com.github.scribejava.core.model.OAuth2AccessToken>) ,public Future<com.github.scribejava.core.model.OAuth2AccessToken> getAccessTokenAsync(java.lang.String) ,public Future<com.github.scribejava.core.model.OAuth2AccessToken> getAccessTokenAsync(com.github.scribejava.core.oauth.AccessTokenRequestParams) ,public com.github.scribejava.core.model.OAuth2AccessToken getAccessTokenClientCredentialsGrant() throws java.io.IOException, java.lang.InterruptedException, java.util.concurrent.ExecutionException,public com.github.scribejava.core.model.OAuth2AccessToken getAccessTokenClientCredentialsGrant(java.lang.String) throws java.io.IOException, java.lang.InterruptedException, java.util.concurrent.ExecutionException,public Future<com.github.scribejava.core.model.OAuth2AccessToken> getAccessTokenClientCredentialsGrant(OAuthAsyncRequestCallback<com.github.scribejava.core.model.OAuth2AccessToken>) ,public Future<com.github.scribejava.core.model.OAuth2AccessToken> getAccessTokenClientCredentialsGrant(java.lang.String, OAuthAsyncRequestCallback<com.github.scribejava.core.model.OAuth2AccessToken>) ,public Future<com.github.scribejava.core.model.OAuth2AccessToken> getAccessTokenClientCredentialsGrantAsync() ,public Future<com.github.scribejava.core.model.OAuth2AccessToken> getAccessTokenClientCredentialsGrantAsync(java.lang.String) ,public com.github.scribejava.core.model.OAuth2AccessToken getAccessTokenDeviceAuthorizationGrant(com.github.scribejava.core.model.DeviceAuthorization) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException, java.io.IOException,public Future<com.github.scribejava.core.model.OAuth2AccessToken> getAccessTokenDeviceAuthorizationGrant(com.github.scribejava.core.model.DeviceAuthorization, OAuthAsyncRequestCallback<com.github.scribejava.core.model.OAuth2AccessToken>) ,public Future<com.github.scribejava.core.model.OAuth2AccessToken> getAccessTokenDeviceAuthorizationGrantAsync(com.github.scribejava.core.model.DeviceAuthorization) ,public com.github.scribejava.core.model.OAuth2AccessToken getAccessTokenPasswordGrant(java.lang.String, java.lang.String) throws java.io.IOException, java.lang.InterruptedException, java.util.concurrent.ExecutionException,public com.github.scribejava.core.model.OAuth2AccessToken getAccessTokenPasswordGrant(java.lang.String, java.lang.String, java.lang.String) throws java.io.IOException, java.lang.InterruptedException, java.util.concurrent.ExecutionException,public Future<com.github.scribejava.core.model.OAuth2AccessToken> getAccessTokenPasswordGrantAsync(java.lang.String, java.lang.String) ,public Future<com.github.scribejava.core.model.OAuth2AccessToken> getAccessTokenPasswordGrantAsync(java.lang.String, java.lang.String, java.lang.String) ,public Future<com.github.scribejava.core.model.OAuth2AccessToken> getAccessTokenPasswordGrantAsync(java.lang.String, java.lang.String, OAuthAsyncRequestCallback<com.github.scribejava.core.model.OAuth2AccessToken>) ,public Future<com.github.scribejava.core.model.OAuth2AccessToken> getAccessTokenPasswordGrantAsync(java.lang.String, java.lang.String, java.lang.String, OAuthAsyncRequestCallback<com.github.scribejava.core.model.OAuth2AccessToken>) ,public com.github.scribejava.core.builder.api.DefaultApi20 getApi() ,public java.lang.String getAuthorizationUrl() ,public java.lang.String getAuthorizationUrl(java.lang.String) ,public java.lang.String getAuthorizationUrl(Map<java.lang.String,java.lang.String>) ,public java.lang.String getAuthorizationUrl(com.github.scribejava.core.pkce.PKCE) ,public java.lang.String getDefaultScope() ,public com.github.scribejava.core.model.DeviceAuthorization getDeviceAuthorizationCodes() throws java.lang.InterruptedException, java.util.concurrent.ExecutionException, java.io.IOException,public com.github.scribejava.core.model.DeviceAuthorization getDeviceAuthorizationCodes(java.lang.String) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException, java.io.IOException,public Future<com.github.scribejava.core.model.DeviceAuthorization> getDeviceAuthorizationCodes(OAuthAsyncRequestCallback<com.github.scribejava.core.model.DeviceAuthorization>) ,public Future<com.github.scribejava.core.model.DeviceAuthorization> getDeviceAuthorizationCodes(java.lang.String, OAuthAsyncRequestCallback<com.github.scribejava.core.model.DeviceAuthorization>) ,public Future<com.github.scribejava.core.model.DeviceAuthorization> getDeviceAuthorizationCodesAsync() ,public Future<com.github.scribejava.core.model.DeviceAuthorization> getDeviceAuthorizationCodesAsync(java.lang.String) ,public java.lang.String getResponseType() ,public java.lang.String getVersion() ,public com.github.scribejava.core.model.OAuth2AccessToken pollAccessTokenDeviceAuthorizationGrant(com.github.scribejava.core.model.DeviceAuthorization) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException, java.io.IOException,public com.github.scribejava.core.model.OAuth2AccessToken refreshAccessToken(java.lang.String) throws java.io.IOException, java.lang.InterruptedException, java.util.concurrent.ExecutionException,public com.github.scribejava.core.model.OAuth2AccessToken refreshAccessToken(java.lang.String, java.lang.String) throws java.io.IOException, java.lang.InterruptedException, java.util.concurrent.ExecutionException,public Future<com.github.scribejava.core.model.OAuth2AccessToken> refreshAccessToken(java.lang.String, OAuthAsyncRequestCallback<com.github.scribejava.core.model.OAuth2AccessToken>) ,public Future<com.github.scribejava.core.model.OAuth2AccessToken> refreshAccessToken(java.lang.String, java.lang.String, OAuthAsyncRequestCallback<com.github.scribejava.core.model.OAuth2AccessToken>) ,public Future<com.github.scribejava.core.model.OAuth2AccessToken> refreshAccessTokenAsync(java.lang.String) ,public Future<com.github.scribejava.core.model.OAuth2AccessToken> refreshAccessTokenAsync(java.lang.String, java.lang.String) ,public void revokeToken(java.lang.String) throws java.io.IOException, java.lang.InterruptedException, java.util.concurrent.ExecutionException,public void revokeToken(java.lang.String, com.github.scribejava.core.revoke.TokenTypeHint) throws java.io.IOException, java.lang.InterruptedException, java.util.concurrent.ExecutionException,public Future<java.lang.Void> revokeToken(java.lang.String, OAuthAsyncRequestCallback<java.lang.Void>) ,public Future<java.lang.Void> revokeToken(java.lang.String, OAuthAsyncRequestCallback<java.lang.Void>, com.github.scribejava.core.revoke.TokenTypeHint) ,public Future<java.lang.Void> revokeTokenAsync(java.lang.String) ,public Future<java.lang.Void> revokeTokenAsync(java.lang.String, com.github.scribejava.core.revoke.TokenTypeHint) ,public void signRequest(java.lang.String, com.github.scribejava.core.model.OAuthRequest) ,public void signRequest(com.github.scribejava.core.model.OAuth2AccessToken, com.github.scribejava.core.model.OAuthRequest) <variables>private static final java.lang.String VERSION,private final com.github.scribejava.core.builder.api.DefaultApi20 api,private final java.lang.String defaultScope,private final java.lang.String responseType