#Signature file v4.1
#Version 0.13

CLSS public java.lang.Object
cons public init()
meth protected java.lang.Object clone() throws java.lang.CloneNotSupportedException
meth protected void finalize() throws java.lang.Throwable
meth public boolean equals(java.lang.Object)
meth public final java.lang.Class<?> getClass()
meth public final void notify()
meth public final void notifyAll()
meth public final void wait() throws java.lang.InterruptedException
meth public final void wait(long) throws java.lang.InterruptedException
meth public final void wait(long,int) throws java.lang.InterruptedException
meth public int hashCode()
meth public java.lang.String toString()

CLSS public final org.netbeans.modules.java.nativeimage.debugger.api.NIDebugRunner
meth public static org.netbeans.modules.nativeimage.api.debug.NIDebugger attach(java.io.File,long,java.lang.String,org.netbeans.api.project.Project,java.util.function.Consumer<org.netbeans.api.debugger.DebuggerEngine>)
 anno 0 java.lang.Deprecated()
meth public static org.netbeans.modules.nativeimage.api.debug.NIDebugger start(java.io.File,java.util.List<java.lang.String>,java.lang.String,org.netbeans.api.project.Project,java.lang.String,org.netbeans.api.extexecution.ExecutionDescriptor,java.util.function.Consumer<org.netbeans.api.debugger.DebuggerEngine>)
 anno 0 java.lang.Deprecated()
meth public static org.netbeans.modules.nativeimage.api.debug.NIDebugger start(java.io.File,org.netbeans.modules.nativeimage.api.debug.StartDebugParameters,org.netbeans.api.project.Project,java.util.function.Consumer<org.netbeans.api.debugger.DebuggerEngine>)
supr java.lang.Object

