// Path: src/main/java/com/lob/Lob.java
// public class Lob {
// 
//     public static final String API_BASE_URL = "https://api.lob.com/v1/";
//     public static final String VERSION = "7.0.0";
// 
//     public static String apiKey;
//     public static String apiVersion;
// 
//     public static void init(final String apiKey) {
//         Lob.apiKey = apiKey;
//         Lob.apiVersion = null;
//     }
// 
//     public static void init(final String apiKey, final String apiVersion) {
//         Lob.apiKey = apiKey;
//         Lob.apiVersion = apiVersion;
//     }
// 
// }
// 
// Path: src/main/java/com/lob/exception/APIException.java
// public class APIException extends LobException {
// 
//     private static final long serialVersionUID = 1L;
// 
//     @JsonCreator
//     public APIException(@JsonProperty("error") final Map<String, Object> error) {
//         super((String)error.get("message"), (Integer)error.get("status_code"));
//     }
// 
// }
// 
// Path: src/main/java/com/lob/exception/AuthenticationException.java
// public class AuthenticationException extends LobException {
// 
//     private static final long serialVersionUID = 1L;
// 
//     public AuthenticationException(String message, Integer statusCode) {
//         super(message, statusCode);
//     }
// 
// }
// 
// Path: src/main/java/com/lob/exception/InvalidRequestException.java
// public class InvalidRequestException extends LobException {
//     
//     private static final long serialVersionUID = 1L;
// 
//     @JsonCreator
//     public InvalidRequestException(@JsonProperty("error") final Map<String, Object> error) {
//         super((String)error.get("message"), (Integer)error.get("status_code"));
//     }
// 
// }
// 
// Path: src/main/java/com/lob/exception/RateLimitException.java
// public class RateLimitException extends LobException {
// 
//     private static final long serialVersionUID = 1L;
// 
//     @JsonCreator
//     public RateLimitException(@JsonProperty("error") final Map<String, Object> error) {
//         super((String)error.get("message"), (Integer)error.get("status_code"));
//     }
// 
// }
// 
// Path: src/main/java/com/lob/net/APIResource.java
// public static final String CHARSET = "UTF-8";


import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.lob.Lob;
import com.lob.exception.APIException;
import com.lob.exception.AuthenticationException;
import com.lob.exception.InvalidRequestException;
import com.lob.exception.RateLimitException;
import org.apache.commons.codec.binary.Base64;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.time.ZonedDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import static com.lob.net.APIResource.CHARSET;
import static com.lob.net.APIResource.RequestMethod.DELETE;
import static com.lob.net.APIResource.RequestMethod.POST;
        java.net.HttpURLConnection conn = createDefaultConnection(getURL, options);

        conn.setRequestMethod("GET");

        return conn;
    }

    private static java.net.HttpURLConnection createPostConnection(String url, String data, String query, RequestOptions options) throws IOException {
        String getURL = query.isEmpty() ? url : String.format("%s?%s", url, query);
        java.net.HttpURLConnection conn = createDefaultConnection(getURL, options);

        conn.setDoOutput(true);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", String.format("application/x-www-form-urlencoded;charset=%s", APIResource.CHARSET));

        try (OutputStream output = conn.getOutputStream()) {
            output.write(data.getBytes(APIResource.CHARSET));
        }
        return conn;
    }

    private static java.net.HttpURLConnection createJsonPostConnection(String url, String data, String query, RequestOptions options) throws IOException {
        String getURL = query.isEmpty() ? url : String.format("%s?%s", url, query);
        java.net.HttpURLConnection conn = createDefaultConnection(getURL, options);

        conn.setDoOutput(true);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", String.format("application/json;charset=%s", APIResource.CHARSET));

        try (OutputStream output = conn.getOutputStream()) {
// Path: src/main/java/com/lob/Lob.java
// public class Lob {
// 
//     public static final String API_BASE_URL = "https://api.lob.com/v1/";
//     public static final String VERSION = "7.0.0";
// 
//     public static String apiKey;
//     public static String apiVersion;
// 
//     public static void init(final String apiKey) {
//         Lob.apiKey = apiKey;
//         Lob.apiVersion = null;
//     }
// 
//     public static void init(final String apiKey, final String apiVersion) {
//         Lob.apiKey = apiKey;
//         Lob.apiVersion = apiVersion;
//     }
// 
// }
// 
// Path: src/main/java/com/lob/exception/APIException.java
// public class APIException extends LobException {
// 
//     private static final long serialVersionUID = 1L;
// 
//     @JsonCreator
//     public APIException(@JsonProperty("error") final Map<String, Object> error) {
//         super((String)error.get("message"), (Integer)error.get("status_code"));
//     }
// 
// }
// 
// Path: src/main/java/com/lob/exception/AuthenticationException.java
// public class AuthenticationException extends LobException {
// 
//     private static final long serialVersionUID = 1L;
// 
//     public AuthenticationException(String message, Integer statusCode) {
//         super(message, statusCode);
//     }
// 
// }
// 
// Path: src/main/java/com/lob/exception/InvalidRequestException.java
// public class InvalidRequestException extends LobException {
//     
//     private static final long serialVersionUID = 1L;
// 
//     @JsonCreator
//     public InvalidRequestException(@JsonProperty("error") final Map<String, Object> error) {
//         super((String)error.get("message"), (Integer)error.get("status_code"));
//     }
// 
// }
// 
// Path: src/main/java/com/lob/exception/RateLimitException.java
// public class RateLimitException extends LobException {
// 
//     private static final long serialVersionUID = 1L;
// 
//     @JsonCreator
//     public RateLimitException(@JsonProperty("error") final Map<String, Object> error) {
//         super((String)error.get("message"), (Integer)error.get("status_code"));
//     }
// 
// }
// 
// Path: src/main/java/com/lob/net/APIResource.java
// public static final String CHARSET = "UTF-8";


// Path: src/main/java/com/lob/net/ResponseGetter.java
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.lob.Lob;
import com.lob.exception.APIException;
import com.lob.exception.AuthenticationException;
import com.lob.exception.InvalidRequestException;
import com.lob.exception.RateLimitException;
import org.apache.commons.codec.binary.Base64;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.time.ZonedDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import static com.lob.net.APIResource.CHARSET;
import static com.lob.net.APIResource.RequestMethod.DELETE;
import static com.lob.net.APIResource.RequestMethod.POST;

        java.net.HttpURLConnection conn = createDefaultConnection(getURL, options);

        conn.setRequestMethod("GET");

        return conn;
    }

    private static java.net.HttpURLConnection createPostConnection(String url, String data, String query, RequestOptions options) throws IOException {
        String getURL = query.isEmpty() ? url : String.format("%s?%s", url, query);
        java.net.HttpURLConnection conn = createDefaultConnection(getURL, options);

        conn.setDoOutput(true);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", String.format("application/x-www-form-urlencoded;charset=%s", APIResource.CHARSET));

        try (OutputStream output = conn.getOutputStream()) {
            output.write(data.getBytes(APIResource.CHARSET));
        }
        return conn;
    }

    private static java.net.HttpURLConnection createJsonPostConnection(String url, String data, String query, RequestOptions options) throws IOException {
        String getURL = query.isEmpty() ? url : String.format("%s?%s", url, query);
        java.net.HttpURLConnection conn = createDefaultConnection(getURL, options);

        conn.setDoOutput(true);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", String.format("application/json;charset=%s", APIResource.CHARSET));

        try (OutputStream output = conn.getOutputStream()) {
            output.write(data.getBytes(APIResource.CHARSET));