// Path: honeybadger-java/src/main/java/io/honeybadger/reporter/config/ConfigContext.java
// public interface ConfigContext {
//     /** @return name of environment */
//     String getEnvironment();
// 
//     /** @return Honeybadger URL to use */
//     URI getHoneybadgerUrl();
// 
//     /** @return Honeybadger API key to use */
//     String getApiKey();
// 
//     /** @return Set of system properties to not include */
//     Set<String> getExcludedSysProps();
// 
//     /** @return Set of parameters to not include */
//     Set<String> getExcludedParams();
// 
//     /** @return Set of exception classes to ignore */
//     Set<String> getExcludedClasses();
// 
//     /** @return String that maps a package to an application */
//     String getApplicationPackage();
// 
//     /** @return Honeybadger Read API key */
//     String getHoneybadgerReadApiKey();
// 
//     /** @return Do we display the feedback form? */
//     Boolean isFeedbackFormDisplayed();
// 
//     /** @return The path to the feedback form template */
//     String getFeedbackFormPath();
// 
//     /** @return Host of proxy server to send traffic through */
//     String getHttpProxyHost();
// 
//     /** @return Port of proxy server to send traffic through */
//     Integer getHttpProxyPort();
// 
//     /** @return Optional configuration parameter to adjust number of attempts to retry sending an error
//      * report in the event of a network timeout or other transmission exception. Defaults to 3. */
//     Integer getMaximumErrorReportingRetries();
// 
//     /** @return Timeout for socket connection within HTTP client */
//     Integer getSocketTimeout();
// 
//     /** @return Timeout for initial connect within HTTP client */
//     Integer getConnectTimeout();
// }


import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import io.honeybadger.reporter.config.ConfigContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.lang.management.ManagementFactory;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Objects;
import java.util.TimeZone;
        final String jvmName = ManagementFactory.getRuntimeMXBean().getName();
        final int index = jvmName.indexOf('@');

        if (index < 1) {
            // part before '@' empty (index = 0) / '@' not found (index = -1)
            return null;
        }

        try {
            return Integer.parseInt(jvmName.substring(0, index));
        } catch (NumberFormatException e) {
            return null;
        }
    }

    /**
     * @return The current time in ISO-8601 format.
     */
    public static String time() {
        TimeZone tz = TimeZone.getTimeZone("UTC");
        DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");
        formatter.setTimeZone(tz);
        return formatter.format(new Date());
    }

    @Override
    public boolean equals(final Object o) {
        if (this == o) return true;
        if (o == null || !(o instanceof ServerDetails)) return false;
        ServerDetails that = (ServerDetails) o;
// Path: honeybadger-java/src/main/java/io/honeybadger/reporter/config/ConfigContext.java
// public interface ConfigContext {
//     /** @return name of environment */
//     String getEnvironment();
// 
//     /** @return Honeybadger URL to use */
//     URI getHoneybadgerUrl();
// 
//     /** @return Honeybadger API key to use */
//     String getApiKey();
// 
//     /** @return Set of system properties to not include */
//     Set<String> getExcludedSysProps();
// 
//     /** @return Set of parameters to not include */
//     Set<String> getExcludedParams();
// 
//     /** @return Set of exception classes to ignore */
//     Set<String> getExcludedClasses();
// 
//     /** @return String that maps a package to an application */
//     String getApplicationPackage();
// 
//     /** @return Honeybadger Read API key */
//     String getHoneybadgerReadApiKey();
// 
//     /** @return Do we display the feedback form? */
//     Boolean isFeedbackFormDisplayed();
// 
//     /** @return The path to the feedback form template */
//     String getFeedbackFormPath();
// 
//     /** @return Host of proxy server to send traffic through */
//     String getHttpProxyHost();
// 
//     /** @return Port of proxy server to send traffic through */
//     Integer getHttpProxyPort();
// 
//     /** @return Optional configuration parameter to adjust number of attempts to retry sending an error
//      * report in the event of a network timeout or other transmission exception. Defaults to 3. */
//     Integer getMaximumErrorReportingRetries();
// 
//     /** @return Timeout for socket connection within HTTP client */
//     Integer getSocketTimeout();
// 
//     /** @return Timeout for initial connect within HTTP client */
//     Integer getConnectTimeout();
// }


// Path: honeybadger-java/src/main/java/io/honeybadger/reporter/dto/ServerDetails.java
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import io.honeybadger.reporter.config.ConfigContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.lang.management.ManagementFactory;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Objects;
import java.util.TimeZone;

        final String jvmName = ManagementFactory.getRuntimeMXBean().getName();
        final int index = jvmName.indexOf('@');

        if (index < 1) {
            // part before '@' empty (index = 0) / '@' not found (index = -1)
            return null;
        }

        try {
            return Integer.parseInt(jvmName.substring(0, index));
        } catch (NumberFormatException e) {
            return null;
        }
    }

    /**
     * @return The current time in ISO-8601 format.
     */
    public static String time() {
        TimeZone tz = TimeZone.getTimeZone("UTC");
        DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");
        formatter.setTimeZone(tz);
        return formatter.format(new Date());
    }

    @Override
    public boolean equals(final Object o) {
        if (this == o) return true;
        if (o == null || !(o instanceof ServerDetails)) return false;
        ServerDetails that = (ServerDetails) o;
        return Objects.equals(getEnvironmentName(), that.getEnvironmentName()) &&