/* automatically generated by rust-bindgen 0.71.1 */

#[doc = r" If Bindgen could only determine the size and alignment of a"]
#[doc = r" type, it is represented like this."]
#[derive(PartialEq, Copy, Clone, Debug, Hash)]
#[repr(C)]
pub struct __BindgenOpaqueArray<T: Copy, const N: usize>(pub [T; N]);
impl<T: Copy + Default, const N: usize> Default for __BindgenOpaqueArray<T, N> {
    fn default() -> Self {
        Self([<T as Default>::default(); N])
    }
}
#[repr(C)]
pub struct __BindgenUnionField<T>(::std::marker::PhantomData<T>);
impl<T> __BindgenUnionField<T> {
    #[inline]
    pub const fn new() -> Self {
        __BindgenUnionField(::std::marker::PhantomData)
    }
    #[inline]
    pub unsafe fn as_ref(&self) -> &T {
        ::std::mem::transmute(self)
    }
    #[inline]
    pub unsafe fn as_mut(&mut self) -> &mut T {
        ::std::mem::transmute(self)
    }
}
impl<T> ::std::default::Default for __BindgenUnionField<T> {
    #[inline]
    fn default() -> Self {
        Self::new()
    }
}
impl<T> ::std::clone::Clone for __BindgenUnionField<T> {
    #[inline]
    fn clone(&self) -> Self {
        *self
    }
}
impl<T> ::std::marker::Copy for __BindgenUnionField<T> {}
impl<T> ::std::fmt::Debug for __BindgenUnionField<T> {
    fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        fmt.write_str("__BindgenUnionField")
    }
}
impl<T> ::std::hash::Hash for __BindgenUnionField<T> {
    fn hash<H: ::std::hash::Hasher>(&self, _state: &mut H) {}
}
impl<T> ::std::cmp::PartialEq for __BindgenUnionField<T> {
    fn eq(&self, _other: &__BindgenUnionField<T>) -> bool {
        true
    }
}
impl<T> ::std::cmp::Eq for __BindgenUnionField<T> {}
pub const mjVERSION_HEADER: u32 = 337;
pub const mjMINVAL: f64 = 0.000000000000001;
pub const mjPI: f64 = 3.141592653589793;
pub const mjMAXVAL: f64 = 10000000000.0;
pub const mjMINMU: f64 = 0.00001;
pub const mjMINIMP: f64 = 0.0001;
pub const mjMAXIMP: f64 = 0.9999;
pub const mjMAXCONPAIR: u32 = 50;
pub const mjMAXTREEDEPTH: u32 = 50;
pub const mjMAXFLEXNODES: u32 = 27;
pub const mjNEQDATA: u32 = 11;
pub const mjNDYN: u32 = 10;
pub const mjNGAIN: u32 = 10;
pub const mjNBIAS: u32 = 10;
pub const mjNFLUID: u32 = 12;
pub const mjNREF: u32 = 2;
pub const mjNIMP: u32 = 5;
pub const mjNSENS: u32 = 3;
pub const mjNSOLVER: u32 = 200;
pub const mjNISLAND: u32 = 20;
pub const mjMAXTHREAD: u32 = 128;
pub const mjNGROUP: u32 = 6;
pub const mjMAXLIGHT: u32 = 100;
pub const mjMAXOVERLAY: u32 = 500;
pub const mjMAXLINE: u32 = 100;
pub const mjMAXLINEPNT: u32 = 1001;
pub const mjMAXPLANEGRID: u32 = 200;
pub const mjNAUX: u32 = 10;
pub const mjMAXTEXTURE: u32 = 1000;
pub const mjMAXMATERIAL: u32 = 1000;
pub const mjMAXUISECT: u32 = 10;
pub const mjMAXUIITEM: u32 = 200;
pub const mjMAXUITEXT: u32 = 300;
pub const mjMAXUINAME: u32 = 40;
pub const mjMAXUIMULTI: u32 = 35;
pub const mjMAXUIEDIT: u32 = 7;
pub const mjMAXUIRECT: u32 = 25;
pub const mjSEPCLOSED: u32 = 1000;
pub const mjPRESERVE: u32 = 2000;
pub const mjKEY_ESCAPE: u32 = 256;
pub const mjKEY_ENTER: u32 = 257;
pub const mjKEY_TAB: u32 = 258;
pub const mjKEY_BACKSPACE: u32 = 259;
pub const mjKEY_INSERT: u32 = 260;
pub const mjKEY_DELETE: u32 = 261;
pub const mjKEY_RIGHT: u32 = 262;
pub const mjKEY_LEFT: u32 = 263;
pub const mjKEY_DOWN: u32 = 264;
pub const mjKEY_UP: u32 = 265;
pub const mjKEY_PAGE_UP: u32 = 266;
pub const mjKEY_PAGE_DOWN: u32 = 267;
pub const mjKEY_HOME: u32 = 268;
pub const mjKEY_END: u32 = 269;
pub const mjKEY_F1: u32 = 290;
pub const mjKEY_F2: u32 = 291;
pub const mjKEY_F3: u32 = 292;
pub const mjKEY_F4: u32 = 293;
pub const mjKEY_F5: u32 = 294;
pub const mjKEY_F6: u32 = 295;
pub const mjKEY_F7: u32 = 296;
pub const mjKEY_F8: u32 = 297;
pub const mjKEY_F9: u32 = 298;
pub const mjKEY_F10: u32 = 299;
pub const mjKEY_F11: u32 = 300;
pub const mjKEY_F12: u32 = 301;
pub const mjKEY_NUMPAD_0: u32 = 320;
pub const mjKEY_NUMPAD_9: u32 = 329;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct std_basic_string {
    pub _address: u8,
}
pub type std_basic_string__Char_alloc_type = u8;
pub type std_basic_string__Alloc_traits = u8;
pub type std_basic_string_traits_type = u8;
pub type std_basic_string_value_type = u8;
pub type std_basic_string_allocator_type = u8;
pub type std_basic_string_size_type = u8;
pub type std_basic_string_difference_type = u8;
pub type std_basic_string_reference = u8;
pub type std_basic_string_const_reference = u8;
pub type std_basic_string_pointer = u8;
pub type std_basic_string_const_pointer = u8;
pub type std_basic_string_iterator = u8;
pub type std_basic_string_const_iterator = u8;
pub type std_basic_string_const_reverse_iterator = u8;
pub type std_basic_string_reverse_iterator = u8;
pub type std_basic_string___const_iterator = u8;
pub type std_basic_string___sv_type = u8;
pub type std_basic_string__If_sv = u8;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct std_basic_string___sv_wrapper {
    pub _address: u8,
}
#[repr(C)]
#[derive(Debug, Clone)]
pub struct std_basic_string__Alloc_hider {
    pub _address: u8,
}
pub const std_basic_string__S_local_capacity: std_basic_string__bindgen_ty_1 =
    std_basic_string__bindgen_ty_1::_S_local_capacity;
#[repr(i32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
pub enum std_basic_string__bindgen_ty_1 {
    _S_local_capacity = 0,
}
#[repr(C)]
#[repr(align(8))]
#[derive(Clone)]
pub struct std_basic_string__bindgen_ty_2 {
    pub _bindgen_opaque_blob: u64,
}
#[repr(C)]
#[derive(Debug, Clone)]
pub struct std_pair {
    pub _address: u8,
}
pub type std_pair_first_type = u8;
pub type std_pair_second_type = u8;
#[repr(u8)]
#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
pub enum std_byte {
    __bindgen_cannot_repr_c_on_empty_enum = 0,
}
pub type std_string = __BindgenOpaqueArray<u64, 4usize>;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct std_char_traits {
    pub _address: u8,
}
#[repr(C)]
#[derive(Debug, Clone)]
pub struct std_allocator {
    pub _address: u8,
}
pub type std_allocator_value_type = u8;
pub type std_allocator_size_type = u64;
pub type std_allocator_difference_type = u64;
pub type std_allocator_propagate_on_container_move_assignment = u8;
pub type std_allocator_is_always_equal = u8;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct std_vector {
    pub _address: u8,
}
pub type std_vector__Base = u8;
pub type std_vector__Tp_alloc_type = u8;
pub type std_vector__Alloc_traits = u8;
pub type std_vector_value_type = u8;
pub type std_vector_pointer = u8;
pub type std_vector_const_pointer = u8;
pub type std_vector_reference = u8;
pub type std_vector_const_reference = u8;
pub type std_vector_iterator = u8;
pub type std_vector_const_iterator = u8;
pub type std_vector_const_reverse_iterator = u8;
pub type std_vector_reverse_iterator = u8;
pub type std_vector_size_type = u64;
pub type std_vector_difference_type = u64;
pub type std_vector_allocator_type = u8;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct std_vector__Temporary_value {
    pub _address: u8,
}
#[repr(C)]
#[repr(align(1))]
#[derive(Clone)]
pub struct std_vector__Temporary_value__Storage {
    pub _bindgen_opaque_blob: u8,
}
pub type std_atomic_int = u32;
unsafe extern "C" {
    #[link_name = "\u{1}num"]
    pub static std_ratio_num: ::std::os::raw::c_long;
}
unsafe extern "C" {
    #[link_name = "\u{1}den"]
    pub static std_ratio_den: ::std::os::raw::c_long;
}
#[repr(C)]
#[derive(Debug, Clone)]
pub struct std_chrono_duration {
    pub _address: u8,
}
pub type std_chrono_duration___is_float = u8;
pub type std_chrono_duration___divide = u8;
pub type std_chrono_duration___is_harmonic = u8;
pub type std_chrono_duration_rep = u8;
pub type std_chrono_duration_period = u8;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct std_chrono_time_point {
    pub _address: u8,
}
pub type std_chrono_time_point_clock = u8;
pub type std_chrono_time_point_duration = u8;
pub type std_chrono_time_point_rep = u8;
pub type std_chrono_time_point_period = u8;
#[repr(C)]
#[repr(align(1))]
#[derive(Debug, Clone)]
pub struct std_chrono_steady_clock {
    pub _bindgen_opaque_blob: u8,
}
pub type std_chrono_steady_clock_duration = u64;
pub type std_chrono_steady_clock_rep = u64;
pub type std_chrono_steady_clock_period = u8;
pub type std_chrono_steady_clock_time_point = u64;
unsafe extern "C" {
    #[link_name = "\u{1}_ZNSt6chrono3_V212steady_clock3nowEv"]
    pub fn std_chrono_steady_clock_now() -> std_chrono_steady_clock_time_point;
}
impl std_chrono_steady_clock {
    #[inline]
    pub unsafe fn now() -> std_chrono_steady_clock_time_point {
        std_chrono_steady_clock_now()
    }
}
pub const std_chrono_steady_clock_is_steady: bool = true;
#[repr(C)]
#[repr(align(8))]
#[derive(Debug, Clone)]
pub struct std_condition_variable_any {
    pub _bindgen_opaque_blob: [u64; 8usize],
}
pub type std_condition_variable_any___clock_t = u8;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct std_condition_variable_any__Unlock {
    pub _address: u8,
}
#[repr(C)]
#[derive(Debug, Clone)]
pub struct std_default_delete {
    pub _address: u8,
}
#[repr(C)]
#[derive(Debug, Clone)]
pub struct std_unique_ptr {
    pub _address: u8,
}
pub type std_unique_ptr__DeleterConstraint = u8;
pub type std_unique_ptr_pointer = u8;
pub type std_unique_ptr_element_type = u8;
pub type std_unique_ptr_deleter_type = u8;
pub type std_unique_ptr___safe_conversion_up = u8;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct std_optional {
    pub _address: u8,
}
pub type std_optional__Base = u8;
pub type std_optional___not_self = u8;
pub type std_optional___not_tag = u8;
pub type std_optional__Requires = u8;
pub type std_optional_value_type = u8;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct std_unique_lock {
    pub _address: u8,
}
pub type std_unique_lock_mutex_type = u8;
#[repr(C)]
#[repr(align(8))]
#[derive(Debug, Clone)]
pub struct std_recursive_mutex {
    pub _bindgen_opaque_blob: [u64; 5usize],
}
pub type std_recursive_mutex_native_handle_type = u64;
pub type mjtNum = f64;
pub type mjtByte = ::std::os::raw::c_uchar;
pub type mjtSize = u64;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtDisableBit_ {
    mjDSBL_CONSTRAINT = 1,
    mjDSBL_EQUALITY = 2,
    mjDSBL_FRICTIONLOSS = 4,
    mjDSBL_LIMIT = 8,
    mjDSBL_CONTACT = 16,
    mjDSBL_SPRING = 32,
    mjDSBL_DAMPER = 64,
    mjDSBL_GRAVITY = 128,
    mjDSBL_CLAMPCTRL = 256,
    mjDSBL_WARMSTART = 512,
    mjDSBL_FILTERPARENT = 1024,
    mjDSBL_ACTUATION = 2048,
    mjDSBL_REFSAFE = 4096,
    mjDSBL_SENSOR = 8192,
    mjDSBL_MIDPHASE = 16384,
    mjDSBL_EULERDAMP = 32768,
    mjDSBL_AUTORESET = 65536,
    mjDSBL_NATIVECCD = 131072,
    mjDSBL_ISLAND = 262144,
    mjNDISABLE = 19,
}
pub use self::mjtDisableBit_ as mjtDisableBit;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtEnableBit_ {
    mjENBL_OVERRIDE = 1,
    mjENBL_ENERGY = 2,
    mjENBL_FWDINV = 4,
    mjENBL_INVDISCRETE = 8,
    mjENBL_MULTICCD = 16,
    mjNENABLE = 5,
}
pub use self::mjtEnableBit_ as mjtEnableBit;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtJoint_ {
    mjJNT_FREE = 0,
    mjJNT_BALL = 1,
    mjJNT_SLIDE = 2,
    mjJNT_HINGE = 3,
}
pub use self::mjtJoint_ as mjtJoint;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtGeom_ {
    mjGEOM_PLANE = 0,
    mjGEOM_HFIELD = 1,
    mjGEOM_SPHERE = 2,
    mjGEOM_CAPSULE = 3,
    mjGEOM_ELLIPSOID = 4,
    mjGEOM_CYLINDER = 5,
    mjGEOM_BOX = 6,
    mjGEOM_MESH = 7,
    mjGEOM_SDF = 8,
    mjNGEOMTYPES = 9,
    mjGEOM_ARROW = 100,
    mjGEOM_ARROW1 = 101,
    mjGEOM_ARROW2 = 102,
    mjGEOM_LINE = 103,
    mjGEOM_LINEBOX = 104,
    mjGEOM_FLEX = 105,
    mjGEOM_SKIN = 106,
    mjGEOM_LABEL = 107,
    mjGEOM_TRIANGLE = 108,
    mjGEOM_NONE = 1001,
}
pub use self::mjtGeom_ as mjtGeom;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtCamLight_ {
    mjCAMLIGHT_FIXED = 0,
    mjCAMLIGHT_TRACK = 1,
    mjCAMLIGHT_TRACKCOM = 2,
    mjCAMLIGHT_TARGETBODY = 3,
    mjCAMLIGHT_TARGETBODYCOM = 4,
}
pub use self::mjtCamLight_ as mjtCamLight;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtLightType_ {
    mjLIGHT_SPOT = 0,
    mjLIGHT_DIRECTIONAL = 1,
    mjLIGHT_POINT = 2,
    mjLIGHT_IMAGE = 3,
}
pub use self::mjtLightType_ as mjtLightType;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtTexture_ {
    mjTEXTURE_2D = 0,
    mjTEXTURE_CUBE = 1,
    mjTEXTURE_SKYBOX = 2,
}
pub use self::mjtTexture_ as mjtTexture;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtTextureRole_ {
    mjTEXROLE_USER = 0,
    mjTEXROLE_RGB = 1,
    mjTEXROLE_OCCLUSION = 2,
    mjTEXROLE_ROUGHNESS = 3,
    mjTEXROLE_METALLIC = 4,
    mjTEXROLE_NORMAL = 5,
    mjTEXROLE_OPACITY = 6,
    mjTEXROLE_EMISSIVE = 7,
    mjTEXROLE_RGBA = 8,
    mjTEXROLE_ORM = 9,
    mjNTEXROLE = 10,
}
pub use self::mjtTextureRole_ as mjtTextureRole;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtColorSpace_ {
    mjCOLORSPACE_AUTO = 0,
    mjCOLORSPACE_LINEAR = 1,
    mjCOLORSPACE_SRGB = 2,
}
pub use self::mjtColorSpace_ as mjtColorSpace;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtIntegrator_ {
    mjINT_EULER = 0,
    mjINT_RK4 = 1,
    mjINT_IMPLICIT = 2,
    mjINT_IMPLICITFAST = 3,
}
pub use self::mjtIntegrator_ as mjtIntegrator;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtCone_ {
    mjCONE_PYRAMIDAL = 0,
    mjCONE_ELLIPTIC = 1,
}
pub use self::mjtCone_ as mjtCone;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtJacobian_ {
    mjJAC_DENSE = 0,
    mjJAC_SPARSE = 1,
    mjJAC_AUTO = 2,
}
pub use self::mjtJacobian_ as mjtJacobian;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtSolver_ {
    mjSOL_PGS = 0,
    mjSOL_CG = 1,
    mjSOL_NEWTON = 2,
}
pub use self::mjtSolver_ as mjtSolver;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtEq_ {
    mjEQ_CONNECT = 0,
    mjEQ_WELD = 1,
    mjEQ_JOINT = 2,
    mjEQ_TENDON = 3,
    mjEQ_FLEX = 4,
    mjEQ_DISTANCE = 5,
}
pub use self::mjtEq_ as mjtEq;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtWrap_ {
    mjWRAP_NONE = 0,
    mjWRAP_JOINT = 1,
    mjWRAP_PULLEY = 2,
    mjWRAP_SITE = 3,
    mjWRAP_SPHERE = 4,
    mjWRAP_CYLINDER = 5,
}
pub use self::mjtWrap_ as mjtWrap;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtTrn_ {
    mjTRN_JOINT = 0,
    mjTRN_JOINTINPARENT = 1,
    mjTRN_SLIDERCRANK = 2,
    mjTRN_TENDON = 3,
    mjTRN_SITE = 4,
    mjTRN_BODY = 5,
    mjTRN_UNDEFINED = 1000,
}
pub use self::mjtTrn_ as mjtTrn;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtDyn_ {
    mjDYN_NONE = 0,
    mjDYN_INTEGRATOR = 1,
    mjDYN_FILTER = 2,
    mjDYN_FILTEREXACT = 3,
    mjDYN_MUSCLE = 4,
    mjDYN_USER = 5,
}
pub use self::mjtDyn_ as mjtDyn;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtGain_ {
    mjGAIN_FIXED = 0,
    mjGAIN_AFFINE = 1,
    mjGAIN_MUSCLE = 2,
    mjGAIN_USER = 3,
}
pub use self::mjtGain_ as mjtGain;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtBias_ {
    mjBIAS_NONE = 0,
    mjBIAS_AFFINE = 1,
    mjBIAS_MUSCLE = 2,
    mjBIAS_USER = 3,
}
pub use self::mjtBias_ as mjtBias;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtObj_ {
    mjOBJ_UNKNOWN = 0,
    mjOBJ_BODY = 1,
    mjOBJ_XBODY = 2,
    mjOBJ_JOINT = 3,
    mjOBJ_DOF = 4,
    mjOBJ_GEOM = 5,
    mjOBJ_SITE = 6,
    mjOBJ_CAMERA = 7,
    mjOBJ_LIGHT = 8,
    mjOBJ_FLEX = 9,
    mjOBJ_MESH = 10,
    mjOBJ_SKIN = 11,
    mjOBJ_HFIELD = 12,
    mjOBJ_TEXTURE = 13,
    mjOBJ_MATERIAL = 14,
    mjOBJ_PAIR = 15,
    mjOBJ_EXCLUDE = 16,
    mjOBJ_EQUALITY = 17,
    mjOBJ_TENDON = 18,
    mjOBJ_ACTUATOR = 19,
    mjOBJ_SENSOR = 20,
    mjOBJ_NUMERIC = 21,
    mjOBJ_TEXT = 22,
    mjOBJ_TUPLE = 23,
    mjOBJ_KEY = 24,
    mjOBJ_PLUGIN = 25,
    mjNOBJECT = 26,
    mjOBJ_FRAME = 100,
    mjOBJ_DEFAULT = 101,
    mjOBJ_MODEL = 102,
}
pub use self::mjtObj_ as mjtObj;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtSensor_ {
    mjSENS_TOUCH = 0,
    mjSENS_ACCELEROMETER = 1,
    mjSENS_VELOCIMETER = 2,
    mjSENS_GYRO = 3,
    mjSENS_FORCE = 4,
    mjSENS_TORQUE = 5,
    mjSENS_MAGNETOMETER = 6,
    mjSENS_RANGEFINDER = 7,
    mjSENS_CAMPROJECTION = 8,
    mjSENS_JOINTPOS = 9,
    mjSENS_JOINTVEL = 10,
    mjSENS_TENDONPOS = 11,
    mjSENS_TENDONVEL = 12,
    mjSENS_ACTUATORPOS = 13,
    mjSENS_ACTUATORVEL = 14,
    mjSENS_ACTUATORFRC = 15,
    mjSENS_JOINTACTFRC = 16,
    mjSENS_TENDONACTFRC = 17,
    mjSENS_BALLQUAT = 18,
    mjSENS_BALLANGVEL = 19,
    mjSENS_JOINTLIMITPOS = 20,
    mjSENS_JOINTLIMITVEL = 21,
    mjSENS_JOINTLIMITFRC = 22,
    mjSENS_TENDONLIMITPOS = 23,
    mjSENS_TENDONLIMITVEL = 24,
    mjSENS_TENDONLIMITFRC = 25,
    mjSENS_FRAMEPOS = 26,
    mjSENS_FRAMEQUAT = 27,
    mjSENS_FRAMEXAXIS = 28,
    mjSENS_FRAMEYAXIS = 29,
    mjSENS_FRAMEZAXIS = 30,
    mjSENS_FRAMELINVEL = 31,
    mjSENS_FRAMEANGVEL = 32,
    mjSENS_FRAMELINACC = 33,
    mjSENS_FRAMEANGACC = 34,
    mjSENS_SUBTREECOM = 35,
    mjSENS_SUBTREELINVEL = 36,
    mjSENS_SUBTREEANGMOM = 37,
    mjSENS_INSIDESITE = 38,
    mjSENS_GEOMDIST = 39,
    mjSENS_GEOMNORMAL = 40,
    mjSENS_GEOMFROMTO = 41,
    mjSENS_CONTACT = 42,
    mjSENS_E_POTENTIAL = 43,
    mjSENS_E_KINETIC = 44,
    mjSENS_CLOCK = 45,
    mjSENS_TACTILE = 46,
    mjSENS_PLUGIN = 47,
    mjSENS_USER = 48,
}
pub use self::mjtSensor_ as mjtSensor;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtStage_ {
    mjSTAGE_NONE = 0,
    mjSTAGE_POS = 1,
    mjSTAGE_VEL = 2,
    mjSTAGE_ACC = 3,
}
pub use self::mjtStage_ as mjtStage;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtDataType_ {
    mjDATATYPE_REAL = 0,
    mjDATATYPE_POSITIVE = 1,
    mjDATATYPE_AXIS = 2,
    mjDATATYPE_QUATERNION = 3,
}
pub use self::mjtDataType_ as mjtDataType;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtConDataField_ {
    mjCONDATA_FOUND = 0,
    mjCONDATA_FORCE = 1,
    mjCONDATA_TORQUE = 2,
    mjCONDATA_DIST = 3,
    mjCONDATA_POS = 4,
    mjCONDATA_NORMAL = 5,
    mjCONDATA_TANGENT = 6,
    mjNCONDATA = 7,
}
pub use self::mjtConDataField_ as mjtConDataField;
#[repr(u8)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtSameFrame_ {
    mjSAMEFRAME_NONE = 0,
    mjSAMEFRAME_BODY = 1,
    mjSAMEFRAME_INERTIA = 2,
    mjSAMEFRAME_BODYROT = 3,
    mjSAMEFRAME_INERTIAROT = 4,
}
pub use self::mjtSameFrame_ as mjtSameFrame;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtLRMode_ {
    mjLRMODE_NONE = 0,
    mjLRMODE_MUSCLE = 1,
    mjLRMODE_MUSCLEUSER = 2,
    mjLRMODE_ALL = 3,
}
pub use self::mjtLRMode_ as mjtLRMode;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtFlexSelf_ {
    mjFLEXSELF_NONE = 0,
    mjFLEXSELF_NARROW = 1,
    mjFLEXSELF_BVH = 2,
    mjFLEXSELF_SAP = 3,
    mjFLEXSELF_AUTO = 4,
}
pub use self::mjtFlexSelf_ as mjtFlexSelf;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtSDFType_ {
    mjSDFTYPE_SINGLE = 0,
    mjSDFTYPE_INTERSECTION = 1,
    mjSDFTYPE_MIDSURFACE = 2,
    mjSDFTYPE_COLLISION = 3,
}
pub use self::mjtSDFType_ as mjtSDFType;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjLROpt_ {
    pub mode: ::std::os::raw::c_int,
    pub useexisting: ::std::os::raw::c_int,
    pub uselimit: ::std::os::raw::c_int,
    pub accel: mjtNum,
    pub maxforce: mjtNum,
    pub timeconst: mjtNum,
    pub timestep: mjtNum,
    pub inttotal: mjtNum,
    pub interval: mjtNum,
    pub tolrange: mjtNum,
}
pub type mjLROpt = mjLROpt_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjCache_ {
    pub impl_: *mut ::std::os::raw::c_void,
}
pub type mjCache = mjCache_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjVFS_ {
    pub impl_: *mut ::std::os::raw::c_void,
}
pub type mjVFS = mjVFS_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjOption_ {
    pub timestep: mjtNum,
    pub impratio: mjtNum,
    pub tolerance: mjtNum,
    pub ls_tolerance: mjtNum,
    pub noslip_tolerance: mjtNum,
    pub ccd_tolerance: mjtNum,
    pub gravity: [mjtNum; 3usize],
    pub wind: [mjtNum; 3usize],
    pub magnetic: [mjtNum; 3usize],
    pub density: mjtNum,
    pub viscosity: mjtNum,
    pub o_margin: mjtNum,
    pub o_solref: [mjtNum; 2usize],
    pub o_solimp: [mjtNum; 5usize],
    pub o_friction: [mjtNum; 5usize],
    pub integrator: ::std::os::raw::c_int,
    pub cone: ::std::os::raw::c_int,
    pub jacobian: ::std::os::raw::c_int,
    pub solver: ::std::os::raw::c_int,
    pub iterations: ::std::os::raw::c_int,
    pub ls_iterations: ::std::os::raw::c_int,
    pub noslip_iterations: ::std::os::raw::c_int,
    pub ccd_iterations: ::std::os::raw::c_int,
    pub disableflags: ::std::os::raw::c_int,
    pub enableflags: ::std::os::raw::c_int,
    pub disableactuator: ::std::os::raw::c_int,
    pub sdf_initpoints: ::std::os::raw::c_int,
    pub sdf_iterations: ::std::os::raw::c_int,
}
pub type mjOption = mjOption_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjVisual_ {
    pub global: mjVisual___bindgen_ty_1,
    pub quality: mjVisual___bindgen_ty_2,
    pub headlight: mjVisual___bindgen_ty_3,
    pub map: mjVisual___bindgen_ty_4,
    pub scale: mjVisual___bindgen_ty_5,
    pub rgba: mjVisual___bindgen_ty_6,
}
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjVisual___bindgen_ty_1 {
    pub cameraid: ::std::os::raw::c_int,
    pub orthographic: ::std::os::raw::c_int,
    pub fovy: f32,
    pub ipd: f32,
    pub azimuth: f32,
    pub elevation: f32,
    pub linewidth: f32,
    pub glow: f32,
    pub realtime: f32,
    pub offwidth: ::std::os::raw::c_int,
    pub offheight: ::std::os::raw::c_int,
    pub ellipsoidinertia: ::std::os::raw::c_int,
    pub bvactive: ::std::os::raw::c_int,
}
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjVisual___bindgen_ty_2 {
    pub shadowsize: ::std::os::raw::c_int,
    pub offsamples: ::std::os::raw::c_int,
    pub numslices: ::std::os::raw::c_int,
    pub numstacks: ::std::os::raw::c_int,
    pub numquads: ::std::os::raw::c_int,
}
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjVisual___bindgen_ty_3 {
    pub ambient: [f32; 3usize],
    pub diffuse: [f32; 3usize],
    pub specular: [f32; 3usize],
    pub active: ::std::os::raw::c_int,
}
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjVisual___bindgen_ty_4 {
    pub stiffness: f32,
    pub stiffnessrot: f32,
    pub force: f32,
    pub torque: f32,
    pub alpha: f32,
    pub fogstart: f32,
    pub fogend: f32,
    pub znear: f32,
    pub zfar: f32,
    pub haze: f32,
    pub shadowclip: f32,
    pub shadowscale: f32,
    pub actuatortendon: f32,
}
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjVisual___bindgen_ty_5 {
    pub forcewidth: f32,
    pub contactwidth: f32,
    pub contactheight: f32,
    pub connect: f32,
    pub com: f32,
    pub camera: f32,
    pub light: f32,
    pub selectpoint: f32,
    pub jointlength: f32,
    pub jointwidth: f32,
    pub actuatorlength: f32,
    pub actuatorwidth: f32,
    pub framelength: f32,
    pub framewidth: f32,
    pub constraint: f32,
    pub slidercrank: f32,
    pub frustum: f32,
}
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjVisual___bindgen_ty_6 {
    pub fog: [f32; 4usize],
    pub haze: [f32; 4usize],
    pub force: [f32; 4usize],
    pub inertia: [f32; 4usize],
    pub joint: [f32; 4usize],
    pub actuator: [f32; 4usize],
    pub actuatornegative: [f32; 4usize],
    pub actuatorpositive: [f32; 4usize],
    pub com: [f32; 4usize],
    pub camera: [f32; 4usize],
    pub light: [f32; 4usize],
    pub selectpoint: [f32; 4usize],
    pub connect: [f32; 4usize],
    pub contactpoint: [f32; 4usize],
    pub contactforce: [f32; 4usize],
    pub contactfriction: [f32; 4usize],
    pub contacttorque: [f32; 4usize],
    pub contactgap: [f32; 4usize],
    pub rangefinder: [f32; 4usize],
    pub constraint: [f32; 4usize],
    pub slidercrank: [f32; 4usize],
    pub crankbroken: [f32; 4usize],
    pub frustum: [f32; 4usize],
    pub bv: [f32; 4usize],
    pub bvactive: [f32; 4usize],
}
pub type mjVisual = mjVisual_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjStatistic_ {
    pub meaninertia: mjtNum,
    pub meanmass: mjtNum,
    pub meansize: mjtNum,
    pub extent: mjtNum,
    pub center: [mjtNum; 3usize],
}
pub type mjStatistic = mjStatistic_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjModel_ {
    pub nq: ::std::os::raw::c_int,
    pub nv: ::std::os::raw::c_int,
    pub nu: ::std::os::raw::c_int,
    pub na: ::std::os::raw::c_int,
    pub nbody: ::std::os::raw::c_int,
    pub nbvh: ::std::os::raw::c_int,
    pub nbvhstatic: ::std::os::raw::c_int,
    pub nbvhdynamic: ::std::os::raw::c_int,
    pub noct: ::std::os::raw::c_int,
    pub njnt: ::std::os::raw::c_int,
    pub ntree: ::std::os::raw::c_int,
    pub nM: ::std::os::raw::c_int,
    pub nB: ::std::os::raw::c_int,
    pub nC: ::std::os::raw::c_int,
    pub nD: ::std::os::raw::c_int,
    pub ngeom: ::std::os::raw::c_int,
    pub nsite: ::std::os::raw::c_int,
    pub ncam: ::std::os::raw::c_int,
    pub nlight: ::std::os::raw::c_int,
    pub nflex: ::std::os::raw::c_int,
    pub nflexnode: ::std::os::raw::c_int,
    pub nflexvert: ::std::os::raw::c_int,
    pub nflexedge: ::std::os::raw::c_int,
    pub nflexelem: ::std::os::raw::c_int,
    pub nflexelemdata: ::std::os::raw::c_int,
    pub nflexelemedge: ::std::os::raw::c_int,
    pub nflexshelldata: ::std::os::raw::c_int,
    pub nflexevpair: ::std::os::raw::c_int,
    pub nflextexcoord: ::std::os::raw::c_int,
    pub nmesh: ::std::os::raw::c_int,
    pub nmeshvert: ::std::os::raw::c_int,
    pub nmeshnormal: ::std::os::raw::c_int,
    pub nmeshtexcoord: ::std::os::raw::c_int,
    pub nmeshface: ::std::os::raw::c_int,
    pub nmeshgraph: ::std::os::raw::c_int,
    pub nmeshpoly: ::std::os::raw::c_int,
    pub nmeshpolyvert: ::std::os::raw::c_int,
    pub nmeshpolymap: ::std::os::raw::c_int,
    pub nskin: ::std::os::raw::c_int,
    pub nskinvert: ::std::os::raw::c_int,
    pub nskintexvert: ::std::os::raw::c_int,
    pub nskinface: ::std::os::raw::c_int,
    pub nskinbone: ::std::os::raw::c_int,
    pub nskinbonevert: ::std::os::raw::c_int,
    pub nhfield: ::std::os::raw::c_int,
    pub nhfielddata: ::std::os::raw::c_int,
    pub ntex: ::std::os::raw::c_int,
    pub ntexdata: ::std::os::raw::c_int,
    pub nmat: ::std::os::raw::c_int,
    pub npair: ::std::os::raw::c_int,
    pub nexclude: ::std::os::raw::c_int,
    pub neq: ::std::os::raw::c_int,
    pub ntendon: ::std::os::raw::c_int,
    pub nwrap: ::std::os::raw::c_int,
    pub nsensor: ::std::os::raw::c_int,
    pub nnumeric: ::std::os::raw::c_int,
    pub nnumericdata: ::std::os::raw::c_int,
    pub ntext: ::std::os::raw::c_int,
    pub ntextdata: ::std::os::raw::c_int,
    pub ntuple: ::std::os::raw::c_int,
    pub ntupledata: ::std::os::raw::c_int,
    pub nkey: ::std::os::raw::c_int,
    pub nmocap: ::std::os::raw::c_int,
    pub nplugin: ::std::os::raw::c_int,
    pub npluginattr: ::std::os::raw::c_int,
    pub nuser_body: ::std::os::raw::c_int,
    pub nuser_jnt: ::std::os::raw::c_int,
    pub nuser_geom: ::std::os::raw::c_int,
    pub nuser_site: ::std::os::raw::c_int,
    pub nuser_cam: ::std::os::raw::c_int,
    pub nuser_tendon: ::std::os::raw::c_int,
    pub nuser_actuator: ::std::os::raw::c_int,
    pub nuser_sensor: ::std::os::raw::c_int,
    pub nnames: ::std::os::raw::c_int,
    pub npaths: ::std::os::raw::c_int,
    pub nnames_map: ::std::os::raw::c_int,
    pub nJmom: ::std::os::raw::c_int,
    pub ngravcomp: ::std::os::raw::c_int,
    pub nemax: ::std::os::raw::c_int,
    pub njmax: ::std::os::raw::c_int,
    pub nconmax: ::std::os::raw::c_int,
    pub nuserdata: ::std::os::raw::c_int,
    pub nsensordata: ::std::os::raw::c_int,
    pub npluginstate: ::std::os::raw::c_int,
    pub narena: mjtSize,
    pub nbuffer: mjtSize,
    pub opt: mjOption,
    pub vis: mjVisual,
    pub stat: mjStatistic,
    pub buffer: *mut ::std::os::raw::c_void,
    pub qpos0: *mut mjtNum,
    pub qpos_spring: *mut mjtNum,
    pub body_parentid: *mut ::std::os::raw::c_int,
    pub body_rootid: *mut ::std::os::raw::c_int,
    pub body_weldid: *mut ::std::os::raw::c_int,
    pub body_mocapid: *mut ::std::os::raw::c_int,
    pub body_jntnum: *mut ::std::os::raw::c_int,
    pub body_jntadr: *mut ::std::os::raw::c_int,
    pub body_dofnum: *mut ::std::os::raw::c_int,
    pub body_dofadr: *mut ::std::os::raw::c_int,
    pub body_treeid: *mut ::std::os::raw::c_int,
    pub body_geomnum: *mut ::std::os::raw::c_int,
    pub body_geomadr: *mut ::std::os::raw::c_int,
    pub body_simple: *mut mjtByte,
    pub body_sameframe: *mut mjtByte,
    pub body_pos: *mut mjtNum,
    pub body_quat: *mut mjtNum,
    pub body_ipos: *mut mjtNum,
    pub body_iquat: *mut mjtNum,
    pub body_mass: *mut mjtNum,
    pub body_subtreemass: *mut mjtNum,
    pub body_inertia: *mut mjtNum,
    pub body_invweight0: *mut mjtNum,
    pub body_gravcomp: *mut mjtNum,
    pub body_margin: *mut mjtNum,
    pub body_user: *mut mjtNum,
    pub body_plugin: *mut ::std::os::raw::c_int,
    pub body_contype: *mut ::std::os::raw::c_int,
    pub body_conaffinity: *mut ::std::os::raw::c_int,
    pub body_bvhadr: *mut ::std::os::raw::c_int,
    pub body_bvhnum: *mut ::std::os::raw::c_int,
    pub bvh_depth: *mut ::std::os::raw::c_int,
    pub bvh_child: *mut ::std::os::raw::c_int,
    pub bvh_nodeid: *mut ::std::os::raw::c_int,
    pub bvh_aabb: *mut mjtNum,
    pub oct_depth: *mut ::std::os::raw::c_int,
    pub oct_child: *mut ::std::os::raw::c_int,
    pub oct_aabb: *mut mjtNum,
    pub oct_coeff: *mut mjtNum,
    pub jnt_type: *mut ::std::os::raw::c_int,
    pub jnt_qposadr: *mut ::std::os::raw::c_int,
    pub jnt_dofadr: *mut ::std::os::raw::c_int,
    pub jnt_bodyid: *mut ::std::os::raw::c_int,
    pub jnt_group: *mut ::std::os::raw::c_int,
    pub jnt_limited: *mut mjtByte,
    pub jnt_actfrclimited: *mut mjtByte,
    pub jnt_actgravcomp: *mut mjtByte,
    pub jnt_solref: *mut mjtNum,
    pub jnt_solimp: *mut mjtNum,
    pub jnt_pos: *mut mjtNum,
    pub jnt_axis: *mut mjtNum,
    pub jnt_stiffness: *mut mjtNum,
    pub jnt_range: *mut mjtNum,
    pub jnt_actfrcrange: *mut mjtNum,
    pub jnt_margin: *mut mjtNum,
    pub jnt_user: *mut mjtNum,
    pub dof_bodyid: *mut ::std::os::raw::c_int,
    pub dof_jntid: *mut ::std::os::raw::c_int,
    pub dof_parentid: *mut ::std::os::raw::c_int,
    pub dof_treeid: *mut ::std::os::raw::c_int,
    pub dof_Madr: *mut ::std::os::raw::c_int,
    pub dof_simplenum: *mut ::std::os::raw::c_int,
    pub dof_solref: *mut mjtNum,
    pub dof_solimp: *mut mjtNum,
    pub dof_frictionloss: *mut mjtNum,
    pub dof_armature: *mut mjtNum,
    pub dof_damping: *mut mjtNum,
    pub dof_invweight0: *mut mjtNum,
    pub dof_M0: *mut mjtNum,
    pub geom_type: *mut ::std::os::raw::c_int,
    pub geom_contype: *mut ::std::os::raw::c_int,
    pub geom_conaffinity: *mut ::std::os::raw::c_int,
    pub geom_condim: *mut ::std::os::raw::c_int,
    pub geom_bodyid: *mut ::std::os::raw::c_int,
    pub geom_dataid: *mut ::std::os::raw::c_int,
    pub geom_matid: *mut ::std::os::raw::c_int,
    pub geom_group: *mut ::std::os::raw::c_int,
    pub geom_priority: *mut ::std::os::raw::c_int,
    pub geom_plugin: *mut ::std::os::raw::c_int,
    pub geom_sameframe: *mut mjtByte,
    pub geom_solmix: *mut mjtNum,
    pub geom_solref: *mut mjtNum,
    pub geom_solimp: *mut mjtNum,
    pub geom_size: *mut mjtNum,
    pub geom_aabb: *mut mjtNum,
    pub geom_rbound: *mut mjtNum,
    pub geom_pos: *mut mjtNum,
    pub geom_quat: *mut mjtNum,
    pub geom_friction: *mut mjtNum,
    pub geom_margin: *mut mjtNum,
    pub geom_gap: *mut mjtNum,
    pub geom_fluid: *mut mjtNum,
    pub geom_user: *mut mjtNum,
    pub geom_rgba: *mut f32,
    pub site_type: *mut ::std::os::raw::c_int,
    pub site_bodyid: *mut ::std::os::raw::c_int,
    pub site_matid: *mut ::std::os::raw::c_int,
    pub site_group: *mut ::std::os::raw::c_int,
    pub site_sameframe: *mut mjtByte,
    pub site_size: *mut mjtNum,
    pub site_pos: *mut mjtNum,
    pub site_quat: *mut mjtNum,
    pub site_user: *mut mjtNum,
    pub site_rgba: *mut f32,
    pub cam_mode: *mut ::std::os::raw::c_int,
    pub cam_bodyid: *mut ::std::os::raw::c_int,
    pub cam_targetbodyid: *mut ::std::os::raw::c_int,
    pub cam_pos: *mut mjtNum,
    pub cam_quat: *mut mjtNum,
    pub cam_poscom0: *mut mjtNum,
    pub cam_pos0: *mut mjtNum,
    pub cam_mat0: *mut mjtNum,
    pub cam_orthographic: *mut ::std::os::raw::c_int,
    pub cam_fovy: *mut mjtNum,
    pub cam_ipd: *mut mjtNum,
    pub cam_resolution: *mut ::std::os::raw::c_int,
    pub cam_sensorsize: *mut f32,
    pub cam_intrinsic: *mut f32,
    pub cam_user: *mut mjtNum,
    pub light_mode: *mut ::std::os::raw::c_int,
    pub light_bodyid: *mut ::std::os::raw::c_int,
    pub light_targetbodyid: *mut ::std::os::raw::c_int,
    pub light_type: *mut ::std::os::raw::c_int,
    pub light_texid: *mut ::std::os::raw::c_int,
    pub light_castshadow: *mut mjtByte,
    pub light_bulbradius: *mut f32,
    pub light_intensity: *mut f32,
    pub light_range: *mut f32,
    pub light_active: *mut mjtByte,
    pub light_pos: *mut mjtNum,
    pub light_dir: *mut mjtNum,
    pub light_poscom0: *mut mjtNum,
    pub light_pos0: *mut mjtNum,
    pub light_dir0: *mut mjtNum,
    pub light_attenuation: *mut f32,
    pub light_cutoff: *mut f32,
    pub light_exponent: *mut f32,
    pub light_ambient: *mut f32,
    pub light_diffuse: *mut f32,
    pub light_specular: *mut f32,
    pub flex_contype: *mut ::std::os::raw::c_int,
    pub flex_conaffinity: *mut ::std::os::raw::c_int,
    pub flex_condim: *mut ::std::os::raw::c_int,
    pub flex_priority: *mut ::std::os::raw::c_int,
    pub flex_solmix: *mut mjtNum,
    pub flex_solref: *mut mjtNum,
    pub flex_solimp: *mut mjtNum,
    pub flex_friction: *mut mjtNum,
    pub flex_margin: *mut mjtNum,
    pub flex_gap: *mut mjtNum,
    pub flex_internal: *mut mjtByte,
    pub flex_selfcollide: *mut ::std::os::raw::c_int,
    pub flex_activelayers: *mut ::std::os::raw::c_int,
    pub flex_passive: *mut ::std::os::raw::c_int,
    pub flex_dim: *mut ::std::os::raw::c_int,
    pub flex_matid: *mut ::std::os::raw::c_int,
    pub flex_group: *mut ::std::os::raw::c_int,
    pub flex_interp: *mut ::std::os::raw::c_int,
    pub flex_nodeadr: *mut ::std::os::raw::c_int,
    pub flex_nodenum: *mut ::std::os::raw::c_int,
    pub flex_vertadr: *mut ::std::os::raw::c_int,
    pub flex_vertnum: *mut ::std::os::raw::c_int,
    pub flex_edgeadr: *mut ::std::os::raw::c_int,
    pub flex_edgenum: *mut ::std::os::raw::c_int,
    pub flex_elemadr: *mut ::std::os::raw::c_int,
    pub flex_elemnum: *mut ::std::os::raw::c_int,
    pub flex_elemdataadr: *mut ::std::os::raw::c_int,
    pub flex_elemedgeadr: *mut ::std::os::raw::c_int,
    pub flex_shellnum: *mut ::std::os::raw::c_int,
    pub flex_shelldataadr: *mut ::std::os::raw::c_int,
    pub flex_evpairadr: *mut ::std::os::raw::c_int,
    pub flex_evpairnum: *mut ::std::os::raw::c_int,
    pub flex_texcoordadr: *mut ::std::os::raw::c_int,
    pub flex_nodebodyid: *mut ::std::os::raw::c_int,
    pub flex_vertbodyid: *mut ::std::os::raw::c_int,
    pub flex_edge: *mut ::std::os::raw::c_int,
    pub flex_edgeflap: *mut ::std::os::raw::c_int,
    pub flex_elem: *mut ::std::os::raw::c_int,
    pub flex_elemtexcoord: *mut ::std::os::raw::c_int,
    pub flex_elemedge: *mut ::std::os::raw::c_int,
    pub flex_elemlayer: *mut ::std::os::raw::c_int,
    pub flex_shell: *mut ::std::os::raw::c_int,
    pub flex_evpair: *mut ::std::os::raw::c_int,
    pub flex_vert: *mut mjtNum,
    pub flex_vert0: *mut mjtNum,
    pub flex_node: *mut mjtNum,
    pub flex_node0: *mut mjtNum,
    pub flexedge_length0: *mut mjtNum,
    pub flexedge_invweight0: *mut mjtNum,
    pub flex_radius: *mut mjtNum,
    pub flex_stiffness: *mut mjtNum,
    pub flex_bending: *mut mjtNum,
    pub flex_damping: *mut mjtNum,
    pub flex_edgestiffness: *mut mjtNum,
    pub flex_edgedamping: *mut mjtNum,
    pub flex_edgeequality: *mut mjtByte,
    pub flex_rigid: *mut mjtByte,
    pub flexedge_rigid: *mut mjtByte,
    pub flex_centered: *mut mjtByte,
    pub flex_flatskin: *mut mjtByte,
    pub flex_bvhadr: *mut ::std::os::raw::c_int,
    pub flex_bvhnum: *mut ::std::os::raw::c_int,
    pub flex_rgba: *mut f32,
    pub flex_texcoord: *mut f32,
    pub mesh_vertadr: *mut ::std::os::raw::c_int,
    pub mesh_vertnum: *mut ::std::os::raw::c_int,
    pub mesh_faceadr: *mut ::std::os::raw::c_int,
    pub mesh_facenum: *mut ::std::os::raw::c_int,
    pub mesh_bvhadr: *mut ::std::os::raw::c_int,
    pub mesh_bvhnum: *mut ::std::os::raw::c_int,
    pub mesh_octadr: *mut ::std::os::raw::c_int,
    pub mesh_octnum: *mut ::std::os::raw::c_int,
    pub mesh_normaladr: *mut ::std::os::raw::c_int,
    pub mesh_normalnum: *mut ::std::os::raw::c_int,
    pub mesh_texcoordadr: *mut ::std::os::raw::c_int,
    pub mesh_texcoordnum: *mut ::std::os::raw::c_int,
    pub mesh_graphadr: *mut ::std::os::raw::c_int,
    pub mesh_vert: *mut f32,
    pub mesh_normal: *mut f32,
    pub mesh_texcoord: *mut f32,
    pub mesh_face: *mut ::std::os::raw::c_int,
    pub mesh_facenormal: *mut ::std::os::raw::c_int,
    pub mesh_facetexcoord: *mut ::std::os::raw::c_int,
    pub mesh_graph: *mut ::std::os::raw::c_int,
    pub mesh_scale: *mut mjtNum,
    pub mesh_pos: *mut mjtNum,
    pub mesh_quat: *mut mjtNum,
    pub mesh_pathadr: *mut ::std::os::raw::c_int,
    pub mesh_polynum: *mut ::std::os::raw::c_int,
    pub mesh_polyadr: *mut ::std::os::raw::c_int,
    pub mesh_polynormal: *mut mjtNum,
    pub mesh_polyvertadr: *mut ::std::os::raw::c_int,
    pub mesh_polyvertnum: *mut ::std::os::raw::c_int,
    pub mesh_polyvert: *mut ::std::os::raw::c_int,
    pub mesh_polymapadr: *mut ::std::os::raw::c_int,
    pub mesh_polymapnum: *mut ::std::os::raw::c_int,
    pub mesh_polymap: *mut ::std::os::raw::c_int,
    pub skin_matid: *mut ::std::os::raw::c_int,
    pub skin_group: *mut ::std::os::raw::c_int,
    pub skin_rgba: *mut f32,
    pub skin_inflate: *mut f32,
    pub skin_vertadr: *mut ::std::os::raw::c_int,
    pub skin_vertnum: *mut ::std::os::raw::c_int,
    pub skin_texcoordadr: *mut ::std::os::raw::c_int,
    pub skin_faceadr: *mut ::std::os::raw::c_int,
    pub skin_facenum: *mut ::std::os::raw::c_int,
    pub skin_boneadr: *mut ::std::os::raw::c_int,
    pub skin_bonenum: *mut ::std::os::raw::c_int,
    pub skin_vert: *mut f32,
    pub skin_texcoord: *mut f32,
    pub skin_face: *mut ::std::os::raw::c_int,
    pub skin_bonevertadr: *mut ::std::os::raw::c_int,
    pub skin_bonevertnum: *mut ::std::os::raw::c_int,
    pub skin_bonebindpos: *mut f32,
    pub skin_bonebindquat: *mut f32,
    pub skin_bonebodyid: *mut ::std::os::raw::c_int,
    pub skin_bonevertid: *mut ::std::os::raw::c_int,
    pub skin_bonevertweight: *mut f32,
    pub skin_pathadr: *mut ::std::os::raw::c_int,
    pub hfield_size: *mut mjtNum,
    pub hfield_nrow: *mut ::std::os::raw::c_int,
    pub hfield_ncol: *mut ::std::os::raw::c_int,
    pub hfield_adr: *mut ::std::os::raw::c_int,
    pub hfield_data: *mut f32,
    pub hfield_pathadr: *mut ::std::os::raw::c_int,
    pub tex_type: *mut ::std::os::raw::c_int,
    pub tex_colorspace: *mut ::std::os::raw::c_int,
    pub tex_height: *mut ::std::os::raw::c_int,
    pub tex_width: *mut ::std::os::raw::c_int,
    pub tex_nchannel: *mut ::std::os::raw::c_int,
    pub tex_adr: *mut ::std::os::raw::c_int,
    pub tex_data: *mut mjtByte,
    pub tex_pathadr: *mut ::std::os::raw::c_int,
    pub mat_texid: *mut ::std::os::raw::c_int,
    pub mat_texuniform: *mut mjtByte,
    pub mat_texrepeat: *mut f32,
    pub mat_emission: *mut f32,
    pub mat_specular: *mut f32,
    pub mat_shininess: *mut f32,
    pub mat_reflectance: *mut f32,
    pub mat_metallic: *mut f32,
    pub mat_roughness: *mut f32,
    pub mat_rgba: *mut f32,
    pub pair_dim: *mut ::std::os::raw::c_int,
    pub pair_geom1: *mut ::std::os::raw::c_int,
    pub pair_geom2: *mut ::std::os::raw::c_int,
    pub pair_signature: *mut ::std::os::raw::c_int,
    pub pair_solref: *mut mjtNum,
    pub pair_solreffriction: *mut mjtNum,
    pub pair_solimp: *mut mjtNum,
    pub pair_margin: *mut mjtNum,
    pub pair_gap: *mut mjtNum,
    pub pair_friction: *mut mjtNum,
    pub exclude_signature: *mut ::std::os::raw::c_int,
    pub eq_type: *mut ::std::os::raw::c_int,
    pub eq_obj1id: *mut ::std::os::raw::c_int,
    pub eq_obj2id: *mut ::std::os::raw::c_int,
    pub eq_objtype: *mut ::std::os::raw::c_int,
    pub eq_active0: *mut mjtByte,
    pub eq_solref: *mut mjtNum,
    pub eq_solimp: *mut mjtNum,
    pub eq_data: *mut mjtNum,
    pub tendon_adr: *mut ::std::os::raw::c_int,
    pub tendon_num: *mut ::std::os::raw::c_int,
    pub tendon_matid: *mut ::std::os::raw::c_int,
    pub tendon_group: *mut ::std::os::raw::c_int,
    pub tendon_limited: *mut mjtByte,
    pub tendon_actfrclimited: *mut mjtByte,
    pub tendon_width: *mut mjtNum,
    pub tendon_solref_lim: *mut mjtNum,
    pub tendon_solimp_lim: *mut mjtNum,
    pub tendon_solref_fri: *mut mjtNum,
    pub tendon_solimp_fri: *mut mjtNum,
    pub tendon_range: *mut mjtNum,
    pub tendon_actfrcrange: *mut mjtNum,
    pub tendon_margin: *mut mjtNum,
    pub tendon_stiffness: *mut mjtNum,
    pub tendon_damping: *mut mjtNum,
    pub tendon_armature: *mut mjtNum,
    pub tendon_frictionloss: *mut mjtNum,
    pub tendon_lengthspring: *mut mjtNum,
    pub tendon_length0: *mut mjtNum,
    pub tendon_invweight0: *mut mjtNum,
    pub tendon_user: *mut mjtNum,
    pub tendon_rgba: *mut f32,
    pub wrap_type: *mut ::std::os::raw::c_int,
    pub wrap_objid: *mut ::std::os::raw::c_int,
    pub wrap_prm: *mut mjtNum,
    pub actuator_trntype: *mut ::std::os::raw::c_int,
    pub actuator_dyntype: *mut ::std::os::raw::c_int,
    pub actuator_gaintype: *mut ::std::os::raw::c_int,
    pub actuator_biastype: *mut ::std::os::raw::c_int,
    pub actuator_trnid: *mut ::std::os::raw::c_int,
    pub actuator_actadr: *mut ::std::os::raw::c_int,
    pub actuator_actnum: *mut ::std::os::raw::c_int,
    pub actuator_group: *mut ::std::os::raw::c_int,
    pub actuator_ctrllimited: *mut mjtByte,
    pub actuator_forcelimited: *mut mjtByte,
    pub actuator_actlimited: *mut mjtByte,
    pub actuator_dynprm: *mut mjtNum,
    pub actuator_gainprm: *mut mjtNum,
    pub actuator_biasprm: *mut mjtNum,
    pub actuator_actearly: *mut mjtByte,
    pub actuator_ctrlrange: *mut mjtNum,
    pub actuator_forcerange: *mut mjtNum,
    pub actuator_actrange: *mut mjtNum,
    pub actuator_gear: *mut mjtNum,
    pub actuator_cranklength: *mut mjtNum,
    pub actuator_acc0: *mut mjtNum,
    pub actuator_length0: *mut mjtNum,
    pub actuator_lengthrange: *mut mjtNum,
    pub actuator_user: *mut mjtNum,
    pub actuator_plugin: *mut ::std::os::raw::c_int,
    pub sensor_type: *mut ::std::os::raw::c_int,
    pub sensor_datatype: *mut ::std::os::raw::c_int,
    pub sensor_needstage: *mut ::std::os::raw::c_int,
    pub sensor_objtype: *mut ::std::os::raw::c_int,
    pub sensor_objid: *mut ::std::os::raw::c_int,
    pub sensor_reftype: *mut ::std::os::raw::c_int,
    pub sensor_refid: *mut ::std::os::raw::c_int,
    pub sensor_intprm: *mut ::std::os::raw::c_int,
    pub sensor_dim: *mut ::std::os::raw::c_int,
    pub sensor_adr: *mut ::std::os::raw::c_int,
    pub sensor_cutoff: *mut mjtNum,
    pub sensor_noise: *mut mjtNum,
    pub sensor_user: *mut mjtNum,
    pub sensor_plugin: *mut ::std::os::raw::c_int,
    pub plugin: *mut ::std::os::raw::c_int,
    pub plugin_stateadr: *mut ::std::os::raw::c_int,
    pub plugin_statenum: *mut ::std::os::raw::c_int,
    pub plugin_attr: *mut ::std::os::raw::c_char,
    pub plugin_attradr: *mut ::std::os::raw::c_int,
    pub numeric_adr: *mut ::std::os::raw::c_int,
    pub numeric_size: *mut ::std::os::raw::c_int,
    pub numeric_data: *mut mjtNum,
    pub text_adr: *mut ::std::os::raw::c_int,
    pub text_size: *mut ::std::os::raw::c_int,
    pub text_data: *mut ::std::os::raw::c_char,
    pub tuple_adr: *mut ::std::os::raw::c_int,
    pub tuple_size: *mut ::std::os::raw::c_int,
    pub tuple_objtype: *mut ::std::os::raw::c_int,
    pub tuple_objid: *mut ::std::os::raw::c_int,
    pub tuple_objprm: *mut mjtNum,
    pub key_time: *mut mjtNum,
    pub key_qpos: *mut mjtNum,
    pub key_qvel: *mut mjtNum,
    pub key_act: *mut mjtNum,
    pub key_mpos: *mut mjtNum,
    pub key_mquat: *mut mjtNum,
    pub key_ctrl: *mut mjtNum,
    pub name_bodyadr: *mut ::std::os::raw::c_int,
    pub name_jntadr: *mut ::std::os::raw::c_int,
    pub name_geomadr: *mut ::std::os::raw::c_int,
    pub name_siteadr: *mut ::std::os::raw::c_int,
    pub name_camadr: *mut ::std::os::raw::c_int,
    pub name_lightadr: *mut ::std::os::raw::c_int,
    pub name_flexadr: *mut ::std::os::raw::c_int,
    pub name_meshadr: *mut ::std::os::raw::c_int,
    pub name_skinadr: *mut ::std::os::raw::c_int,
    pub name_hfieldadr: *mut ::std::os::raw::c_int,
    pub name_texadr: *mut ::std::os::raw::c_int,
    pub name_matadr: *mut ::std::os::raw::c_int,
    pub name_pairadr: *mut ::std::os::raw::c_int,
    pub name_excludeadr: *mut ::std::os::raw::c_int,
    pub name_eqadr: *mut ::std::os::raw::c_int,
    pub name_tendonadr: *mut ::std::os::raw::c_int,
    pub name_actuatoradr: *mut ::std::os::raw::c_int,
    pub name_sensoradr: *mut ::std::os::raw::c_int,
    pub name_numericadr: *mut ::std::os::raw::c_int,
    pub name_textadr: *mut ::std::os::raw::c_int,
    pub name_tupleadr: *mut ::std::os::raw::c_int,
    pub name_keyadr: *mut ::std::os::raw::c_int,
    pub name_pluginadr: *mut ::std::os::raw::c_int,
    pub names: *mut ::std::os::raw::c_char,
    pub names_map: *mut ::std::os::raw::c_int,
    pub paths: *mut ::std::os::raw::c_char,
    pub B_rownnz: *mut ::std::os::raw::c_int,
    pub B_rowadr: *mut ::std::os::raw::c_int,
    pub B_colind: *mut ::std::os::raw::c_int,
    pub M_rownnz: *mut ::std::os::raw::c_int,
    pub M_rowadr: *mut ::std::os::raw::c_int,
    pub M_colind: *mut ::std::os::raw::c_int,
    pub mapM2M: *mut ::std::os::raw::c_int,
    pub D_rownnz: *mut ::std::os::raw::c_int,
    pub D_rowadr: *mut ::std::os::raw::c_int,
    pub D_diag: *mut ::std::os::raw::c_int,
    pub D_colind: *mut ::std::os::raw::c_int,
    pub mapM2D: *mut ::std::os::raw::c_int,
    pub mapD2M: *mut ::std::os::raw::c_int,
    pub signature: u64,
}
pub type mjModel = mjModel_;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtTaskStatus_ {
    mjTASK_NEW = 0,
    mjTASK_QUEUED = 1,
    mjTASK_COMPLETED = 2,
}
pub use self::mjtTaskStatus_ as mjtTaskStatus;
pub type mjfTask = ::std::option::Option<
    unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> *mut ::std::os::raw::c_void,
>;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjThreadPool_ {
    pub nworker: ::std::os::raw::c_int,
}
pub type mjThreadPool = mjThreadPool_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjTask_ {
    pub func: mjfTask,
    pub args: *mut ::std::os::raw::c_void,
    pub status: ::std::os::raw::c_int,
}
pub type mjTask = mjTask_;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtState_ {
    mjSTATE_TIME = 1,
    mjSTATE_QPOS = 2,
    mjSTATE_QVEL = 4,
    mjSTATE_ACT = 8,
    mjSTATE_WARMSTART = 16,
    mjSTATE_CTRL = 32,
    mjSTATE_QFRC_APPLIED = 64,
    mjSTATE_XFRC_APPLIED = 128,
    mjSTATE_EQ_ACTIVE = 256,
    mjSTATE_MOCAP_POS = 512,
    mjSTATE_MOCAP_QUAT = 1024,
    mjSTATE_USERDATA = 2048,
    mjSTATE_PLUGIN = 4096,
    mjNSTATE = 13,
    mjSTATE_PHYSICS = 14,
    mjSTATE_FULLPHYSICS = 4111,
    mjSTATE_USER = 4064,
    mjSTATE_INTEGRATION = 8191,
}
pub use self::mjtState_ as mjtState;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtConstraint_ {
    mjCNSTR_EQUALITY = 0,
    mjCNSTR_FRICTION_DOF = 1,
    mjCNSTR_FRICTION_TENDON = 2,
    mjCNSTR_LIMIT_JOINT = 3,
    mjCNSTR_LIMIT_TENDON = 4,
    mjCNSTR_CONTACT_FRICTIONLESS = 5,
    mjCNSTR_CONTACT_PYRAMIDAL = 6,
    mjCNSTR_CONTACT_ELLIPTIC = 7,
}
pub use self::mjtConstraint_ as mjtConstraint;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtConstraintState_ {
    mjCNSTRSTATE_SATISFIED = 0,
    mjCNSTRSTATE_QUADRATIC = 1,
    mjCNSTRSTATE_LINEARNEG = 2,
    mjCNSTRSTATE_LINEARPOS = 3,
    mjCNSTRSTATE_CONE = 4,
}
pub use self::mjtConstraintState_ as mjtConstraintState;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtWarning_ {
    mjWARN_INERTIA = 0,
    mjWARN_CONTACTFULL = 1,
    mjWARN_CNSTRFULL = 2,
    mjWARN_VGEOMFULL = 3,
    mjWARN_BADQPOS = 4,
    mjWARN_BADQVEL = 5,
    mjWARN_BADQACC = 6,
    mjWARN_BADCTRL = 7,
    mjNWARNING = 8,
}
pub use self::mjtWarning_ as mjtWarning;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtTimer_ {
    mjTIMER_STEP = 0,
    mjTIMER_FORWARD = 1,
    mjTIMER_INVERSE = 2,
    mjTIMER_POSITION = 3,
    mjTIMER_VELOCITY = 4,
    mjTIMER_ACTUATION = 5,
    mjTIMER_CONSTRAINT = 6,
    mjTIMER_ADVANCE = 7,
    mjTIMER_POS_KINEMATICS = 8,
    mjTIMER_POS_INERTIA = 9,
    mjTIMER_POS_COLLISION = 10,
    mjTIMER_POS_MAKE = 11,
    mjTIMER_POS_PROJECT = 12,
    mjTIMER_COL_BROAD = 13,
    mjTIMER_COL_NARROW = 14,
    mjNTIMER = 15,
}
pub use self::mjtTimer_ as mjtTimer;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjContact_ {
    pub dist: mjtNum,
    pub pos: [mjtNum; 3usize],
    pub frame: [mjtNum; 9usize],
    pub includemargin: mjtNum,
    pub friction: [mjtNum; 5usize],
    pub solref: [mjtNum; 2usize],
    pub solreffriction: [mjtNum; 2usize],
    pub solimp: [mjtNum; 5usize],
    pub mu: mjtNum,
    pub H: [mjtNum; 36usize],
    pub dim: ::std::os::raw::c_int,
    pub geom1: ::std::os::raw::c_int,
    pub geom2: ::std::os::raw::c_int,
    pub geom: [::std::os::raw::c_int; 2usize],
    pub flex: [::std::os::raw::c_int; 2usize],
    pub elem: [::std::os::raw::c_int; 2usize],
    pub vert: [::std::os::raw::c_int; 2usize],
    pub exclude: ::std::os::raw::c_int,
    pub efc_address: ::std::os::raw::c_int,
}
pub type mjContact = mjContact_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjWarningStat_ {
    pub lastinfo: ::std::os::raw::c_int,
    pub number: ::std::os::raw::c_int,
}
pub type mjWarningStat = mjWarningStat_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjTimerStat_ {
    pub duration: mjtNum,
    pub number: ::std::os::raw::c_int,
}
pub type mjTimerStat = mjTimerStat_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjSolverStat_ {
    pub improvement: mjtNum,
    pub gradient: mjtNum,
    pub lineslope: mjtNum,
    pub nactive: ::std::os::raw::c_int,
    pub nchange: ::std::os::raw::c_int,
    pub neval: ::std::os::raw::c_int,
    pub nupdate: ::std::os::raw::c_int,
}
pub type mjSolverStat = mjSolverStat_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjData_ {
    pub narena: mjtSize,
    pub nbuffer: mjtSize,
    pub nplugin: ::std::os::raw::c_int,
    pub pstack: usize,
    pub pbase: usize,
    pub parena: usize,
    pub maxuse_stack: mjtSize,
    pub maxuse_threadstack: [mjtSize; 128usize],
    pub maxuse_arena: mjtSize,
    pub maxuse_con: ::std::os::raw::c_int,
    pub maxuse_efc: ::std::os::raw::c_int,
    pub solver: [mjSolverStat; 4000usize],
    pub solver_niter: [::std::os::raw::c_int; 20usize],
    pub solver_nnz: [::std::os::raw::c_int; 20usize],
    pub solver_fwdinv: [mjtNum; 2usize],
    pub warning: [mjWarningStat; 8usize],
    pub timer: [mjTimerStat; 15usize],
    pub ncon: ::std::os::raw::c_int,
    pub ne: ::std::os::raw::c_int,
    pub nf: ::std::os::raw::c_int,
    pub nl: ::std::os::raw::c_int,
    pub nefc: ::std::os::raw::c_int,
    pub nJ: ::std::os::raw::c_int,
    pub nA: ::std::os::raw::c_int,
    pub nisland: ::std::os::raw::c_int,
    pub nidof: ::std::os::raw::c_int,
    pub time: mjtNum,
    pub energy: [mjtNum; 2usize],
    pub buffer: *mut ::std::os::raw::c_void,
    pub arena: *mut ::std::os::raw::c_void,
    pub qpos: *mut mjtNum,
    pub qvel: *mut mjtNum,
    pub act: *mut mjtNum,
    pub qacc_warmstart: *mut mjtNum,
    pub plugin_state: *mut mjtNum,
    pub ctrl: *mut mjtNum,
    pub qfrc_applied: *mut mjtNum,
    pub xfrc_applied: *mut mjtNum,
    pub eq_active: *mut mjtByte,
    pub mocap_pos: *mut mjtNum,
    pub mocap_quat: *mut mjtNum,
    pub qacc: *mut mjtNum,
    pub act_dot: *mut mjtNum,
    pub userdata: *mut mjtNum,
    pub sensordata: *mut mjtNum,
    pub plugin: *mut ::std::os::raw::c_int,
    pub plugin_data: *mut usize,
    pub xpos: *mut mjtNum,
    pub xquat: *mut mjtNum,
    pub xmat: *mut mjtNum,
    pub xipos: *mut mjtNum,
    pub ximat: *mut mjtNum,
    pub xanchor: *mut mjtNum,
    pub xaxis: *mut mjtNum,
    pub geom_xpos: *mut mjtNum,
    pub geom_xmat: *mut mjtNum,
    pub site_xpos: *mut mjtNum,
    pub site_xmat: *mut mjtNum,
    pub cam_xpos: *mut mjtNum,
    pub cam_xmat: *mut mjtNum,
    pub light_xpos: *mut mjtNum,
    pub light_xdir: *mut mjtNum,
    pub subtree_com: *mut mjtNum,
    pub cdof: *mut mjtNum,
    pub cinert: *mut mjtNum,
    pub flexvert_xpos: *mut mjtNum,
    pub flexelem_aabb: *mut mjtNum,
    pub flexedge_J_rownnz: *mut ::std::os::raw::c_int,
    pub flexedge_J_rowadr: *mut ::std::os::raw::c_int,
    pub flexedge_J_colind: *mut ::std::os::raw::c_int,
    pub flexedge_J: *mut mjtNum,
    pub flexedge_length: *mut mjtNum,
    pub bvh_aabb_dyn: *mut mjtNum,
    pub ten_wrapadr: *mut ::std::os::raw::c_int,
    pub ten_wrapnum: *mut ::std::os::raw::c_int,
    pub ten_J_rownnz: *mut ::std::os::raw::c_int,
    pub ten_J_rowadr: *mut ::std::os::raw::c_int,
    pub ten_J_colind: *mut ::std::os::raw::c_int,
    pub ten_J: *mut mjtNum,
    pub ten_length: *mut mjtNum,
    pub wrap_obj: *mut ::std::os::raw::c_int,
    pub wrap_xpos: *mut mjtNum,
    pub actuator_length: *mut mjtNum,
    pub moment_rownnz: *mut ::std::os::raw::c_int,
    pub moment_rowadr: *mut ::std::os::raw::c_int,
    pub moment_colind: *mut ::std::os::raw::c_int,
    pub actuator_moment: *mut mjtNum,
    pub crb: *mut mjtNum,
    pub qM: *mut mjtNum,
    pub M: *mut mjtNum,
    pub qLD: *mut mjtNum,
    pub qLDiagInv: *mut mjtNum,
    pub bvh_active: *mut mjtByte,
    pub flexedge_velocity: *mut mjtNum,
    pub ten_velocity: *mut mjtNum,
    pub actuator_velocity: *mut mjtNum,
    pub cvel: *mut mjtNum,
    pub cdof_dot: *mut mjtNum,
    pub qfrc_bias: *mut mjtNum,
    pub qfrc_spring: *mut mjtNum,
    pub qfrc_damper: *mut mjtNum,
    pub qfrc_gravcomp: *mut mjtNum,
    pub qfrc_fluid: *mut mjtNum,
    pub qfrc_passive: *mut mjtNum,
    pub subtree_linvel: *mut mjtNum,
    pub subtree_angmom: *mut mjtNum,
    pub qH: *mut mjtNum,
    pub qHDiagInv: *mut mjtNum,
    pub qDeriv: *mut mjtNum,
    pub qLU: *mut mjtNum,
    pub actuator_force: *mut mjtNum,
    pub qfrc_actuator: *mut mjtNum,
    pub qfrc_smooth: *mut mjtNum,
    pub qacc_smooth: *mut mjtNum,
    pub qfrc_constraint: *mut mjtNum,
    pub qfrc_inverse: *mut mjtNum,
    pub cacc: *mut mjtNum,
    pub cfrc_int: *mut mjtNum,
    pub cfrc_ext: *mut mjtNum,
    pub contact: *mut mjContact,
    pub efc_type: *mut ::std::os::raw::c_int,
    pub efc_id: *mut ::std::os::raw::c_int,
    pub efc_J_rownnz: *mut ::std::os::raw::c_int,
    pub efc_J_rowadr: *mut ::std::os::raw::c_int,
    pub efc_J_rowsuper: *mut ::std::os::raw::c_int,
    pub efc_J_colind: *mut ::std::os::raw::c_int,
    pub efc_J: *mut mjtNum,
    pub efc_pos: *mut mjtNum,
    pub efc_margin: *mut mjtNum,
    pub efc_frictionloss: *mut mjtNum,
    pub efc_diagApprox: *mut mjtNum,
    pub efc_KBIP: *mut mjtNum,
    pub efc_D: *mut mjtNum,
    pub efc_R: *mut mjtNum,
    pub tendon_efcadr: *mut ::std::os::raw::c_int,
    pub dof_island: *mut ::std::os::raw::c_int,
    pub island_nv: *mut ::std::os::raw::c_int,
    pub island_idofadr: *mut ::std::os::raw::c_int,
    pub island_dofadr: *mut ::std::os::raw::c_int,
    pub map_dof2idof: *mut ::std::os::raw::c_int,
    pub map_idof2dof: *mut ::std::os::raw::c_int,
    pub ifrc_smooth: *mut mjtNum,
    pub iacc_smooth: *mut mjtNum,
    pub iM_rownnz: *mut ::std::os::raw::c_int,
    pub iM_rowadr: *mut ::std::os::raw::c_int,
    pub iM_colind: *mut ::std::os::raw::c_int,
    pub iM: *mut mjtNum,
    pub iLD: *mut mjtNum,
    pub iLDiagInv: *mut mjtNum,
    pub iacc: *mut mjtNum,
    pub efc_island: *mut ::std::os::raw::c_int,
    pub island_ne: *mut ::std::os::raw::c_int,
    pub island_nf: *mut ::std::os::raw::c_int,
    pub island_nefc: *mut ::std::os::raw::c_int,
    pub island_iefcadr: *mut ::std::os::raw::c_int,
    pub map_efc2iefc: *mut ::std::os::raw::c_int,
    pub map_iefc2efc: *mut ::std::os::raw::c_int,
    pub iefc_type: *mut ::std::os::raw::c_int,
    pub iefc_id: *mut ::std::os::raw::c_int,
    pub iefc_J_rownnz: *mut ::std::os::raw::c_int,
    pub iefc_J_rowadr: *mut ::std::os::raw::c_int,
    pub iefc_J_rowsuper: *mut ::std::os::raw::c_int,
    pub iefc_J_colind: *mut ::std::os::raw::c_int,
    pub iefc_J: *mut mjtNum,
    pub iefc_frictionloss: *mut mjtNum,
    pub iefc_D: *mut mjtNum,
    pub iefc_R: *mut mjtNum,
    pub efc_AR_rownnz: *mut ::std::os::raw::c_int,
    pub efc_AR_rowadr: *mut ::std::os::raw::c_int,
    pub efc_AR_colind: *mut ::std::os::raw::c_int,
    pub efc_AR: *mut mjtNum,
    pub efc_vel: *mut mjtNum,
    pub efc_aref: *mut mjtNum,
    pub efc_b: *mut mjtNum,
    pub iefc_aref: *mut mjtNum,
    pub iefc_state: *mut ::std::os::raw::c_int,
    pub iefc_force: *mut mjtNum,
    pub efc_state: *mut ::std::os::raw::c_int,
    pub efc_force: *mut mjtNum,
    pub ifrc_constraint: *mut mjtNum,
    pub threadpool: usize,
    pub signature: u64,
}
pub type mjData = mjData_;
pub type mjfGeneric =
    ::std::option::Option<unsafe extern "C" fn(m: *const mjModel, d: *mut mjData)>;
pub type mjfConFilt = ::std::option::Option<
    unsafe extern "C" fn(
        m: *const mjModel,
        d: *mut mjData,
        geom1: ::std::os::raw::c_int,
        geom2: ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int,
>;
pub type mjfSensor = ::std::option::Option<
    unsafe extern "C" fn(m: *const mjModel, d: *mut mjData, stage: ::std::os::raw::c_int),
>;
pub type mjfTime = ::std::option::Option<unsafe extern "C" fn() -> mjtNum>;
pub type mjfAct = ::std::option::Option<
    unsafe extern "C" fn(m: *const mjModel, d: *const mjData, id: ::std::os::raw::c_int) -> mjtNum,
>;
pub type mjfCollision = ::std::option::Option<
    unsafe extern "C" fn(
        m: *const mjModel,
        d: *const mjData,
        con: *mut mjContact,
        g1: ::std::os::raw::c_int,
        g2: ::std::os::raw::c_int,
        margin: mjtNum,
    ) -> ::std::os::raw::c_int,
>;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtCatBit_ {
    mjCAT_STATIC = 1,
    mjCAT_DYNAMIC = 2,
    mjCAT_DECOR = 4,
    mjCAT_ALL = 7,
}
pub use self::mjtCatBit_ as mjtCatBit;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtMouse_ {
    mjMOUSE_NONE = 0,
    mjMOUSE_ROTATE_V = 1,
    mjMOUSE_ROTATE_H = 2,
    mjMOUSE_MOVE_V = 3,
    mjMOUSE_MOVE_H = 4,
    mjMOUSE_ZOOM = 5,
    mjMOUSE_MOVE_V_REL = 6,
    mjMOUSE_MOVE_H_REL = 7,
}
pub use self::mjtMouse_ as mjtMouse;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtPertBit_ {
    mjPERT_TRANSLATE = 1,
    mjPERT_ROTATE = 2,
}
pub use self::mjtPertBit_ as mjtPertBit;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtCamera_ {
    mjCAMERA_FREE = 0,
    mjCAMERA_TRACKING = 1,
    mjCAMERA_FIXED = 2,
    mjCAMERA_USER = 3,
}
pub use self::mjtCamera_ as mjtCamera;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtLabel_ {
    mjLABEL_NONE = 0,
    mjLABEL_BODY = 1,
    mjLABEL_JOINT = 2,
    mjLABEL_GEOM = 3,
    mjLABEL_SITE = 4,
    mjLABEL_CAMERA = 5,
    mjLABEL_LIGHT = 6,
    mjLABEL_TENDON = 7,
    mjLABEL_ACTUATOR = 8,
    mjLABEL_CONSTRAINT = 9,
    mjLABEL_FLEX = 10,
    mjLABEL_SKIN = 11,
    mjLABEL_SELECTION = 12,
    mjLABEL_SELPNT = 13,
    mjLABEL_CONTACTPOINT = 14,
    mjLABEL_CONTACTFORCE = 15,
    mjLABEL_ISLAND = 16,
    mjNLABEL = 17,
}
pub use self::mjtLabel_ as mjtLabel;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtFrame_ {
    mjFRAME_NONE = 0,
    mjFRAME_BODY = 1,
    mjFRAME_GEOM = 2,
    mjFRAME_SITE = 3,
    mjFRAME_CAMERA = 4,
    mjFRAME_LIGHT = 5,
    mjFRAME_CONTACT = 6,
    mjFRAME_WORLD = 7,
    mjNFRAME = 8,
}
pub use self::mjtFrame_ as mjtFrame;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtVisFlag_ {
    mjVIS_CONVEXHULL = 0,
    mjVIS_TEXTURE = 1,
    mjVIS_JOINT = 2,
    mjVIS_CAMERA = 3,
    mjVIS_ACTUATOR = 4,
    mjVIS_ACTIVATION = 5,
    mjVIS_LIGHT = 6,
    mjVIS_TENDON = 7,
    mjVIS_RANGEFINDER = 8,
    mjVIS_CONSTRAINT = 9,
    mjVIS_INERTIA = 10,
    mjVIS_SCLINERTIA = 11,
    mjVIS_PERTFORCE = 12,
    mjVIS_PERTOBJ = 13,
    mjVIS_CONTACTPOINT = 14,
    mjVIS_ISLAND = 15,
    mjVIS_CONTACTFORCE = 16,
    mjVIS_CONTACTSPLIT = 17,
    mjVIS_TRANSPARENT = 18,
    mjVIS_AUTOCONNECT = 19,
    mjVIS_COM = 20,
    mjVIS_SELECT = 21,
    mjVIS_STATIC = 22,
    mjVIS_SKIN = 23,
    mjVIS_FLEXVERT = 24,
    mjVIS_FLEXEDGE = 25,
    mjVIS_FLEXFACE = 26,
    mjVIS_FLEXSKIN = 27,
    mjVIS_BODYBVH = 28,
    mjVIS_MESHBVH = 29,
    mjVIS_SDFITER = 30,
    mjNVISFLAG = 31,
}
pub use self::mjtVisFlag_ as mjtVisFlag;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtRndFlag_ {
    mjRND_SHADOW = 0,
    mjRND_WIREFRAME = 1,
    mjRND_REFLECTION = 2,
    mjRND_ADDITIVE = 3,
    mjRND_SKYBOX = 4,
    mjRND_FOG = 5,
    mjRND_HAZE = 6,
    mjRND_SEGMENT = 7,
    mjRND_IDCOLOR = 8,
    mjRND_CULL_FACE = 9,
    mjNRNDFLAG = 10,
}
pub use self::mjtRndFlag_ as mjtRndFlag;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtStereo_ {
    mjSTEREO_NONE = 0,
    mjSTEREO_QUADBUFFERED = 1,
    mjSTEREO_SIDEBYSIDE = 2,
}
pub use self::mjtStereo_ as mjtStereo;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjvPerturb_ {
    pub select: ::std::os::raw::c_int,
    pub flexselect: ::std::os::raw::c_int,
    pub skinselect: ::std::os::raw::c_int,
    pub active: ::std::os::raw::c_int,
    pub active2: ::std::os::raw::c_int,
    pub refpos: [mjtNum; 3usize],
    pub refquat: [mjtNum; 4usize],
    pub refselpos: [mjtNum; 3usize],
    pub localpos: [mjtNum; 3usize],
    pub localmass: mjtNum,
    pub scale: mjtNum,
}
pub type mjvPerturb = mjvPerturb_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjvCamera_ {
    pub type_: ::std::os::raw::c_int,
    pub fixedcamid: ::std::os::raw::c_int,
    pub trackbodyid: ::std::os::raw::c_int,
    pub lookat: [mjtNum; 3usize],
    pub distance: mjtNum,
    pub azimuth: mjtNum,
    pub elevation: mjtNum,
    pub orthographic: ::std::os::raw::c_int,
}
pub type mjvCamera = mjvCamera_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjvGLCamera_ {
    pub pos: [f32; 3usize],
    pub forward: [f32; 3usize],
    pub up: [f32; 3usize],
    pub frustum_center: f32,
    pub frustum_width: f32,
    pub frustum_bottom: f32,
    pub frustum_top: f32,
    pub frustum_near: f32,
    pub frustum_far: f32,
    pub orthographic: ::std::os::raw::c_int,
}
pub type mjvGLCamera = mjvGLCamera_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjvGeom_ {
    pub type_: ::std::os::raw::c_int,
    pub dataid: ::std::os::raw::c_int,
    pub objtype: ::std::os::raw::c_int,
    pub objid: ::std::os::raw::c_int,
    pub category: ::std::os::raw::c_int,
    pub matid: ::std::os::raw::c_int,
    pub texcoord: ::std::os::raw::c_int,
    pub segid: ::std::os::raw::c_int,
    pub size: [f32; 3usize],
    pub pos: [f32; 3usize],
    pub mat: [f32; 9usize],
    pub rgba: [f32; 4usize],
    pub emission: f32,
    pub specular: f32,
    pub shininess: f32,
    pub reflectance: f32,
    pub label: [::std::os::raw::c_char; 100usize],
    pub camdist: f32,
    pub modelrbound: f32,
    pub transparent: mjtByte,
}
pub type mjvGeom = mjvGeom_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjvLight_ {
    pub id: ::std::os::raw::c_int,
    pub pos: [f32; 3usize],
    pub dir: [f32; 3usize],
    pub type_: ::std::os::raw::c_int,
    pub texid: ::std::os::raw::c_int,
    pub attenuation: [f32; 3usize],
    pub cutoff: f32,
    pub exponent: f32,
    pub ambient: [f32; 3usize],
    pub diffuse: [f32; 3usize],
    pub specular: [f32; 3usize],
    pub headlight: mjtByte,
    pub castshadow: mjtByte,
    pub bulbradius: f32,
    pub intensity: f32,
    pub range: f32,
}
pub type mjvLight = mjvLight_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjvOption_ {
    pub label: ::std::os::raw::c_int,
    pub frame: ::std::os::raw::c_int,
    pub geomgroup: [mjtByte; 6usize],
    pub sitegroup: [mjtByte; 6usize],
    pub jointgroup: [mjtByte; 6usize],
    pub tendongroup: [mjtByte; 6usize],
    pub actuatorgroup: [mjtByte; 6usize],
    pub flexgroup: [mjtByte; 6usize],
    pub skingroup: [mjtByte; 6usize],
    pub flags: [mjtByte; 31usize],
    pub bvh_depth: ::std::os::raw::c_int,
    pub flex_layer: ::std::os::raw::c_int,
}
pub type mjvOption = mjvOption_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjvScene_ {
    pub maxgeom: ::std::os::raw::c_int,
    pub ngeom: ::std::os::raw::c_int,
    pub geoms: *mut mjvGeom,
    pub geomorder: *mut ::std::os::raw::c_int,
    pub nflex: ::std::os::raw::c_int,
    pub flexedgeadr: *mut ::std::os::raw::c_int,
    pub flexedgenum: *mut ::std::os::raw::c_int,
    pub flexvertadr: *mut ::std::os::raw::c_int,
    pub flexvertnum: *mut ::std::os::raw::c_int,
    pub flexfaceadr: *mut ::std::os::raw::c_int,
    pub flexfacenum: *mut ::std::os::raw::c_int,
    pub flexfaceused: *mut ::std::os::raw::c_int,
    pub flexedge: *mut ::std::os::raw::c_int,
    pub flexvert: *mut f32,
    pub flexface: *mut f32,
    pub flexnormal: *mut f32,
    pub flextexcoord: *mut f32,
    pub flexvertopt: mjtByte,
    pub flexedgeopt: mjtByte,
    pub flexfaceopt: mjtByte,
    pub flexskinopt: mjtByte,
    pub nskin: ::std::os::raw::c_int,
    pub skinfacenum: *mut ::std::os::raw::c_int,
    pub skinvertadr: *mut ::std::os::raw::c_int,
    pub skinvertnum: *mut ::std::os::raw::c_int,
    pub skinvert: *mut f32,
    pub skinnormal: *mut f32,
    pub nlight: ::std::os::raw::c_int,
    pub lights: [mjvLight; 100usize],
    pub camera: [mjvGLCamera; 2usize],
    pub enabletransform: mjtByte,
    pub translate: [f32; 3usize],
    pub rotate: [f32; 4usize],
    pub scale: f32,
    pub stereo: ::std::os::raw::c_int,
    pub flags: [mjtByte; 10usize],
    pub framewidth: ::std::os::raw::c_int,
    pub framergb: [f32; 3usize],
    pub status: ::std::os::raw::c_int,
}
pub type mjvScene = mjvScene_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjvFigure_ {
    pub flg_legend: ::std::os::raw::c_int,
    pub flg_ticklabel: [::std::os::raw::c_int; 2usize],
    pub flg_extend: ::std::os::raw::c_int,
    pub flg_barplot: ::std::os::raw::c_int,
    pub flg_selection: ::std::os::raw::c_int,
    pub flg_symmetric: ::std::os::raw::c_int,
    pub linewidth: f32,
    pub gridwidth: f32,
    pub gridsize: [::std::os::raw::c_int; 2usize],
    pub gridrgb: [f32; 3usize],
    pub figurergba: [f32; 4usize],
    pub panergba: [f32; 4usize],
    pub legendrgba: [f32; 4usize],
    pub textrgb: [f32; 3usize],
    pub linergb: [[f32; 3usize]; 100usize],
    pub range: [[f32; 2usize]; 2usize],
    pub xformat: [::std::os::raw::c_char; 20usize],
    pub yformat: [::std::os::raw::c_char; 20usize],
    pub minwidth: [::std::os::raw::c_char; 20usize],
    pub title: [::std::os::raw::c_char; 1000usize],
    pub xlabel: [::std::os::raw::c_char; 100usize],
    pub linename: [[::std::os::raw::c_char; 100usize]; 100usize],
    pub legendoffset: ::std::os::raw::c_int,
    pub subplot: ::std::os::raw::c_int,
    pub highlight: [::std::os::raw::c_int; 2usize],
    pub highlightid: ::std::os::raw::c_int,
    pub selection: f32,
    pub linepnt: [::std::os::raw::c_int; 100usize],
    pub linedata: [[f32; 2002usize]; 100usize],
    pub xaxispixel: [::std::os::raw::c_int; 2usize],
    pub yaxispixel: [::std::os::raw::c_int; 2usize],
    pub xaxisdata: [f32; 2usize],
    pub yaxisdata: [f32; 2usize],
}
pub type mjvFigure = mjvFigure_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjResource_ {
    pub name: *mut ::std::os::raw::c_char,
    pub data: *mut ::std::os::raw::c_void,
    pub timestamp: [::std::os::raw::c_char; 512usize],
    pub provider: *const mjpResourceProvider,
}
pub type mjResource = mjResource_;
pub type mjfOpenResource =
    ::std::option::Option<unsafe extern "C" fn(resource: *mut mjResource) -> ::std::os::raw::c_int>;
pub type mjfReadResource = ::std::option::Option<
    unsafe extern "C" fn(
        resource: *mut mjResource,
        buffer: *mut *const ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int,
>;
pub type mjfCloseResource = ::std::option::Option<unsafe extern "C" fn(resource: *mut mjResource)>;
pub type mjfGetResourceDir = ::std::option::Option<
    unsafe extern "C" fn(
        resource: *mut mjResource,
        dir: *mut *const ::std::os::raw::c_char,
        ndir: *mut ::std::os::raw::c_int,
    ),
>;
pub type mjfResourceModified = ::std::option::Option<
    unsafe extern "C" fn(
        resource: *const mjResource,
        timestamp: *const ::std::os::raw::c_char,
    ) -> ::std::os::raw::c_int,
>;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjpResourceProvider {
    pub prefix: *const ::std::os::raw::c_char,
    pub open: mjfOpenResource,
    pub read: mjfReadResource,
    pub close: mjfCloseResource,
    pub getdir: mjfGetResourceDir,
    pub modified: mjfResourceModified,
    pub data: *mut ::std::os::raw::c_void,
}
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtPluginCapabilityBit_ {
    mjPLUGIN_ACTUATOR = 1,
    mjPLUGIN_SENSOR = 2,
    mjPLUGIN_PASSIVE = 4,
    mjPLUGIN_SDF = 8,
}
pub use self::mjtPluginCapabilityBit_ as mjtPluginCapabilityBit;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjpPlugin_ {
    pub name: *const ::std::os::raw::c_char,
    pub nattribute: ::std::os::raw::c_int,
    pub attributes: *const *const ::std::os::raw::c_char,
    pub capabilityflags: ::std::os::raw::c_int,
    pub needstage: ::std::os::raw::c_int,
    pub nstate: ::std::option::Option<
        unsafe extern "C" fn(
            m: *const mjModel,
            instance: ::std::os::raw::c_int,
        ) -> ::std::os::raw::c_int,
    >,
    pub nsensordata: ::std::option::Option<
        unsafe extern "C" fn(
            m: *const mjModel,
            instance: ::std::os::raw::c_int,
            sensor_id: ::std::os::raw::c_int,
        ) -> ::std::os::raw::c_int,
    >,
    pub init: ::std::option::Option<
        unsafe extern "C" fn(
            m: *const mjModel,
            d: *mut mjData,
            instance: ::std::os::raw::c_int,
        ) -> ::std::os::raw::c_int,
    >,
    pub destroy: ::std::option::Option<
        unsafe extern "C" fn(d: *mut mjData, instance: ::std::os::raw::c_int),
    >,
    pub copy: ::std::option::Option<
        unsafe extern "C" fn(
            dest: *mut mjData,
            m: *const mjModel,
            src: *const mjData,
            instance: ::std::os::raw::c_int,
        ),
    >,
    pub reset: ::std::option::Option<
        unsafe extern "C" fn(
            m: *const mjModel,
            plugin_state: *mut mjtNum,
            plugin_data: *mut ::std::os::raw::c_void,
            instance: ::std::os::raw::c_int,
        ),
    >,
    pub compute: ::std::option::Option<
        unsafe extern "C" fn(
            m: *const mjModel,
            d: *mut mjData,
            instance: ::std::os::raw::c_int,
            capability_bit: ::std::os::raw::c_int,
        ),
    >,
    pub advance: ::std::option::Option<
        unsafe extern "C" fn(m: *const mjModel, d: *mut mjData, instance: ::std::os::raw::c_int),
    >,
    pub visualize: ::std::option::Option<
        unsafe extern "C" fn(
            m: *const mjModel,
            d: *mut mjData,
            opt: *const mjvOption,
            scn: *mut mjvScene,
            instance: ::std::os::raw::c_int,
        ),
    >,
    pub actuator_act_dot: ::std::option::Option<
        unsafe extern "C" fn(m: *const mjModel, d: *mut mjData, instance: ::std::os::raw::c_int),
    >,
    pub sdf_distance: ::std::option::Option<
        unsafe extern "C" fn(
            point: *const mjtNum,
            d: *const mjData,
            instance: ::std::os::raw::c_int,
        ) -> mjtNum,
    >,
    pub sdf_gradient: ::std::option::Option<
        unsafe extern "C" fn(
            gradient: *mut mjtNum,
            point: *const mjtNum,
            d: *const mjData,
            instance: ::std::os::raw::c_int,
        ),
    >,
    pub sdf_staticdistance: ::std::option::Option<
        unsafe extern "C" fn(point: *const mjtNum, attributes: *const mjtNum) -> mjtNum,
    >,
    pub sdf_attribute: ::std::option::Option<
        unsafe extern "C" fn(
            attribute: *mut mjtNum,
            name: *mut *const ::std::os::raw::c_char,
            value: *mut *const ::std::os::raw::c_char,
        ),
    >,
    pub sdf_aabb:
        ::std::option::Option<unsafe extern "C" fn(aabb: *mut mjtNum, attributes: *const mjtNum)>,
}
pub type mjpPlugin = mjpPlugin_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjSDF_ {
    pub plugin: *mut *const mjpPlugin,
    pub id: *mut ::std::os::raw::c_int,
    pub type_: mjtSDFType,
    pub relpos: *mut mjtNum,
    pub relmat: *mut mjtNum,
    pub geomtype: *mut mjtGeom,
}
pub type mjSDF = mjSDF_;
pub type mjfPluginLibraryLoadCallback = ::std::option::Option<
    unsafe extern "C" fn(
        filename: *const ::std::os::raw::c_char,
        first: ::std::os::raw::c_int,
        count: ::std::os::raw::c_int,
    ),
>;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtGridPos_ {
    mjGRID_TOPLEFT = 0,
    mjGRID_TOPRIGHT = 1,
    mjGRID_BOTTOMLEFT = 2,
    mjGRID_BOTTOMRIGHT = 3,
    mjGRID_TOP = 4,
    mjGRID_BOTTOM = 5,
    mjGRID_LEFT = 6,
    mjGRID_RIGHT = 7,
}
pub use self::mjtGridPos_ as mjtGridPos;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtFramebuffer_ {
    mjFB_WINDOW = 0,
    mjFB_OFFSCREEN = 1,
}
pub use self::mjtFramebuffer_ as mjtFramebuffer;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtDepthMap_ {
    mjDEPTH_ZERONEAR = 0,
    mjDEPTH_ZEROFAR = 1,
}
pub use self::mjtDepthMap_ as mjtDepthMap;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtFontScale_ {
    mjFONTSCALE_50 = 50,
    mjFONTSCALE_100 = 100,
    mjFONTSCALE_150 = 150,
    mjFONTSCALE_200 = 200,
    mjFONTSCALE_250 = 250,
    mjFONTSCALE_300 = 300,
}
pub use self::mjtFontScale_ as mjtFontScale;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtFont_ {
    mjFONT_NORMAL = 0,
    mjFONT_SHADOW = 1,
    mjFONT_BIG = 2,
}
pub use self::mjtFont_ as mjtFont;
#[repr(C)]
#[derive(Debug, Clone, Copy)]
pub struct mjrRect_ {
    pub left: ::std::os::raw::c_int,
    pub bottom: ::std::os::raw::c_int,
    pub width: ::std::os::raw::c_int,
    pub height: ::std::os::raw::c_int,
}
pub type mjrRect = mjrRect_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjrContext_ {
    pub lineWidth: f32,
    pub shadowClip: f32,
    pub shadowScale: f32,
    pub fogStart: f32,
    pub fogEnd: f32,
    pub fogRGBA: [f32; 4usize],
    pub shadowSize: ::std::os::raw::c_int,
    pub offWidth: ::std::os::raw::c_int,
    pub offHeight: ::std::os::raw::c_int,
    pub offSamples: ::std::os::raw::c_int,
    pub fontScale: ::std::os::raw::c_int,
    pub auxWidth: [::std::os::raw::c_int; 10usize],
    pub auxHeight: [::std::os::raw::c_int; 10usize],
    pub auxSamples: [::std::os::raw::c_int; 10usize],
    pub offFBO: ::std::os::raw::c_uint,
    pub offFBO_r: ::std::os::raw::c_uint,
    pub offColor: ::std::os::raw::c_uint,
    pub offColor_r: ::std::os::raw::c_uint,
    pub offDepthStencil: ::std::os::raw::c_uint,
    pub offDepthStencil_r: ::std::os::raw::c_uint,
    pub shadowFBO: ::std::os::raw::c_uint,
    pub shadowTex: ::std::os::raw::c_uint,
    pub auxFBO: [::std::os::raw::c_uint; 10usize],
    pub auxFBO_r: [::std::os::raw::c_uint; 10usize],
    pub auxColor: [::std::os::raw::c_uint; 10usize],
    pub auxColor_r: [::std::os::raw::c_uint; 10usize],
    pub mat_texid: [::std::os::raw::c_int; 10000usize],
    pub mat_texuniform: [::std::os::raw::c_int; 1000usize],
    pub mat_texrepeat: [f32; 2000usize],
    pub ntexture: ::std::os::raw::c_int,
    pub textureType: [::std::os::raw::c_int; 1000usize],
    pub texture: [::std::os::raw::c_uint; 1000usize],
    pub basePlane: ::std::os::raw::c_uint,
    pub baseMesh: ::std::os::raw::c_uint,
    pub baseHField: ::std::os::raw::c_uint,
    pub baseBuiltin: ::std::os::raw::c_uint,
    pub baseFontNormal: ::std::os::raw::c_uint,
    pub baseFontShadow: ::std::os::raw::c_uint,
    pub baseFontBig: ::std::os::raw::c_uint,
    pub rangePlane: ::std::os::raw::c_int,
    pub rangeMesh: ::std::os::raw::c_int,
    pub rangeHField: ::std::os::raw::c_int,
    pub rangeBuiltin: ::std::os::raw::c_int,
    pub rangeFont: ::std::os::raw::c_int,
    pub nskin: ::std::os::raw::c_int,
    pub skinvertVBO: *mut ::std::os::raw::c_uint,
    pub skinnormalVBO: *mut ::std::os::raw::c_uint,
    pub skintexcoordVBO: *mut ::std::os::raw::c_uint,
    pub skinfaceVBO: *mut ::std::os::raw::c_uint,
    pub charWidth: [::std::os::raw::c_int; 127usize],
    pub charWidthBig: [::std::os::raw::c_int; 127usize],
    pub charHeight: ::std::os::raw::c_int,
    pub charHeightBig: ::std::os::raw::c_int,
    pub glInitialized: ::std::os::raw::c_int,
    pub windowAvailable: ::std::os::raw::c_int,
    pub windowSamples: ::std::os::raw::c_int,
    pub windowStereo: ::std::os::raw::c_int,
    pub windowDoublebuffer: ::std::os::raw::c_int,
    pub currentBuffer: ::std::os::raw::c_int,
    pub readPixelFormat: ::std::os::raw::c_int,
    pub readDepthMap: ::std::os::raw::c_int,
}
pub type mjrContext = mjrContext_;
pub type mjString = std_string;
pub type mjStringVec = __BindgenOpaqueArray<u64, 3usize>;
pub type mjIntVec = __BindgenOpaqueArray<u64, 3usize>;
pub type mjIntVecVec = u8;
pub type mjFloatVec = u8;
pub type mjFloatVecVec = u8;
pub type mjDoubleVec = __BindgenOpaqueArray<u64, 3usize>;
pub type mjByteVec = u8;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtGeomInertia_ {
    mjINERTIA_VOLUME = 0,
    mjINERTIA_SHELL = 1,
}
pub use self::mjtGeomInertia_ as mjtGeomInertia;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtMeshInertia_ {
    mjMESH_INERTIA_CONVEX = 0,
    mjMESH_INERTIA_EXACT = 1,
    mjMESH_INERTIA_LEGACY = 2,
    mjMESH_INERTIA_SHELL = 3,
}
pub use self::mjtMeshInertia_ as mjtMeshInertia;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtMeshBuiltin_ {
    mjMESH_BUILTIN_NONE = 0,
    mjMESH_BUILTIN_SPHERE = 1,
    mjMESH_BUILTIN_HEMISPHERE = 2,
    mjMESH_BUILTIN_CONE = 3,
    mjMESH_BUILTIN_SUPERSPHERE = 4,
    mjMESH_BUILTIN_SUPERTORUS = 5,
    mjMESH_BUILTIN_WEDGE = 6,
    mjMESH_BUILTIN_PLATE = 7,
}
pub use self::mjtMeshBuiltin_ as mjtMeshBuiltin;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtBuiltin_ {
    mjBUILTIN_NONE = 0,
    mjBUILTIN_GRADIENT = 1,
    mjBUILTIN_CHECKER = 2,
    mjBUILTIN_FLAT = 3,
}
pub use self::mjtBuiltin_ as mjtBuiltin;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtMark_ {
    mjMARK_NONE = 0,
    mjMARK_EDGE = 1,
    mjMARK_CROSS = 2,
    mjMARK_RANDOM = 3,
}
pub use self::mjtMark_ as mjtMark;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtLimited_ {
    mjLIMITED_FALSE = 0,
    mjLIMITED_TRUE = 1,
    mjLIMITED_AUTO = 2,
}
pub use self::mjtLimited_ as mjtLimited;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtAlignFree_ {
    mjALIGNFREE_FALSE = 0,
    mjALIGNFREE_TRUE = 1,
    mjALIGNFREE_AUTO = 2,
}
pub use self::mjtAlignFree_ as mjtAlignFree;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtInertiaFromGeom_ {
    mjINERTIAFROMGEOM_FALSE = 0,
    mjINERTIAFROMGEOM_TRUE = 1,
    mjINERTIAFROMGEOM_AUTO = 2,
}
pub use self::mjtInertiaFromGeom_ as mjtInertiaFromGeom;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtOrientation_ {
    mjORIENTATION_QUAT = 0,
    mjORIENTATION_AXISANGLE = 1,
    mjORIENTATION_XYAXES = 2,
    mjORIENTATION_ZAXIS = 3,
    mjORIENTATION_EULER = 4,
}
pub use self::mjtOrientation_ as mjtOrientation;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsElement_ {
    pub(crate) elemtype: mjtObj,
    pub(crate) signature: u64,
}
pub type mjsElement = mjsElement_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsCompiler_ {
    pub(crate) autolimits: mjtByte,
    pub(crate) boundmass: f64,
    pub(crate) boundinertia: f64,
    pub(crate) settotalmass: f64,
    pub(crate) balanceinertia: mjtByte,
    pub(crate) fitaabb: mjtByte,
    pub(crate) degree: mjtByte,
    pub(crate) eulerseq: [::std::os::raw::c_char; 3usize],
    pub(crate) discardvisual: mjtByte,
    pub(crate) usethread: mjtByte,
    pub(crate) fusestatic: mjtByte,
    pub(crate) inertiafromgeom: ::std::os::raw::c_int,
    pub(crate) inertiagrouprange: [::std::os::raw::c_int; 2usize],
    pub(crate) saveinertial: mjtByte,
    pub(crate) alignfree: ::std::os::raw::c_int,
    pub(crate) LRopt: mjLROpt,
    pub(crate) meshdir: *mut mjString,
    pub(crate) texturedir: *mut mjString,
}
pub type mjsCompiler = mjsCompiler_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjSpec_ {
    pub element: *mut mjsElement,
    pub modelname: *mut mjString,
    pub compiler: mjsCompiler,
    pub strippath: mjtByte,
    pub option: mjOption,
    pub visual: mjVisual,
    pub stat: mjStatistic,
    pub memory: mjtSize,
    pub nemax: ::std::os::raw::c_int,
    pub nuserdata: ::std::os::raw::c_int,
    pub nuser_body: ::std::os::raw::c_int,
    pub nuser_jnt: ::std::os::raw::c_int,
    pub nuser_geom: ::std::os::raw::c_int,
    pub nuser_site: ::std::os::raw::c_int,
    pub nuser_cam: ::std::os::raw::c_int,
    pub nuser_tendon: ::std::os::raw::c_int,
    pub nuser_actuator: ::std::os::raw::c_int,
    pub nuser_sensor: ::std::os::raw::c_int,
    pub nkey: ::std::os::raw::c_int,
    pub njmax: ::std::os::raw::c_int,
    pub nconmax: ::std::os::raw::c_int,
    pub nstack: mjtSize,
    pub comment: *mut mjString,
    pub modelfiledir: *mut mjString,
    pub hasImplicitPluginElem: mjtByte,
}
pub type mjSpec = mjSpec_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsOrientation_ {
    pub(crate) type_: mjtOrientation,
    pub(crate) axisangle: [f64; 4usize],
    pub(crate) xyaxes: [f64; 6usize],
    pub(crate) zaxis: [f64; 3usize],
    pub(crate) euler: [f64; 3usize],
}
pub type mjsOrientation = mjsOrientation_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsPlugin_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) name: *mut mjString,
    pub(crate) plugin_name: *mut mjString,
    pub(crate) active: mjtByte,
    pub(crate) info: *mut mjString,
}
pub type mjsPlugin = mjsPlugin_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsBody_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) childclass: *mut mjString,
    pub(crate) pos: [f64; 3usize],
    pub(crate) quat: [f64; 4usize],
    pub(crate) alt: mjsOrientation,
    pub(crate) mass: f64,
    pub(crate) ipos: [f64; 3usize],
    pub(crate) iquat: [f64; 4usize],
    pub(crate) inertia: [f64; 3usize],
    pub(crate) ialt: mjsOrientation,
    pub(crate) fullinertia: [f64; 6usize],
    pub(crate) mocap: mjtByte,
    pub(crate) gravcomp: f64,
    pub(crate) userdata: *mut mjDoubleVec,
    pub(crate) explicitinertial: mjtByte,
    pub(crate) plugin: mjsPlugin,
    pub(crate) info: *mut mjString,
}
pub type mjsBody = mjsBody_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsFrame_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) childclass: *mut mjString,
    pub(crate) pos: [f64; 3usize],
    pub(crate) quat: [f64; 4usize],
    pub(crate) alt: mjsOrientation,
    pub(crate) info: *mut mjString,
}
pub type mjsFrame = mjsFrame_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsJoint_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) type_: mjtJoint,
    pub(crate) pos: [f64; 3usize],
    pub(crate) axis: [f64; 3usize],
    pub(crate) ref_: f64,
    pub(crate) align: ::std::os::raw::c_int,
    pub(crate) stiffness: f64,
    pub(crate) springref: f64,
    pub(crate) springdamper: [f64; 2usize],
    pub(crate) limited: ::std::os::raw::c_int,
    pub(crate) range: [f64; 2usize],
    pub(crate) margin: f64,
    pub(crate) solref_limit: [mjtNum; 2usize],
    pub(crate) solimp_limit: [mjtNum; 5usize],
    pub(crate) actfrclimited: ::std::os::raw::c_int,
    pub(crate) actfrcrange: [f64; 2usize],
    pub(crate) armature: f64,
    pub(crate) damping: f64,
    pub(crate) frictionloss: f64,
    pub(crate) solref_friction: [mjtNum; 2usize],
    pub(crate) solimp_friction: [mjtNum; 5usize],
    pub(crate) group: ::std::os::raw::c_int,
    pub(crate) actgravcomp: mjtByte,
    pub(crate) userdata: *mut mjDoubleVec,
    pub(crate) info: *mut mjString,
}
pub type mjsJoint = mjsJoint_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsGeom_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) type_: mjtGeom,
    pub(crate) pos: [f64; 3usize],
    pub(crate) quat: [f64; 4usize],
    pub(crate) alt: mjsOrientation,
    pub(crate) fromto: [f64; 6usize],
    pub(crate) size: [f64; 3usize],
    pub(crate) contype: ::std::os::raw::c_int,
    pub(crate) conaffinity: ::std::os::raw::c_int,
    pub(crate) condim: ::std::os::raw::c_int,
    pub(crate) priority: ::std::os::raw::c_int,
    pub(crate) friction: [f64; 3usize],
    pub(crate) solmix: f64,
    pub(crate) solref: [mjtNum; 2usize],
    pub(crate) solimp: [mjtNum; 5usize],
    pub(crate) margin: f64,
    pub(crate) gap: f64,
    pub(crate) mass: f64,
    pub(crate) density: f64,
    pub(crate) typeinertia: mjtGeomInertia,
    pub(crate) fluid_ellipsoid: mjtNum,
    pub(crate) fluid_coefs: [mjtNum; 5usize],
    pub(crate) material: *mut mjString,
    pub(crate) rgba: [f32; 4usize],
    pub(crate) group: ::std::os::raw::c_int,
    pub(crate) hfieldname: *mut mjString,
    pub(crate) meshname: *mut mjString,
    pub(crate) fitscale: f64,
    pub(crate) userdata: *mut mjDoubleVec,
    pub(crate) plugin: mjsPlugin,
    pub(crate) info: *mut mjString,
}
pub type mjsGeom = mjsGeom_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsSite_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) pos: [f64; 3usize],
    pub(crate) quat: [f64; 4usize],
    pub(crate) alt: mjsOrientation,
    pub(crate) fromto: [f64; 6usize],
    pub(crate) size: [f64; 3usize],
    pub(crate) type_: mjtGeom,
    pub(crate) material: *mut mjString,
    pub(crate) group: ::std::os::raw::c_int,
    pub(crate) rgba: [f32; 4usize],
    pub(crate) userdata: *mut mjDoubleVec,
    pub(crate) info: *mut mjString,
}
pub type mjsSite = mjsSite_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsCamera_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) pos: [f64; 3usize],
    pub(crate) quat: [f64; 4usize],
    pub(crate) alt: mjsOrientation,
    pub(crate) mode: mjtCamLight,
    pub(crate) targetbody: *mut mjString,
    pub(crate) orthographic: ::std::os::raw::c_int,
    pub(crate) fovy: f64,
    pub(crate) ipd: f64,
    pub(crate) intrinsic: [f32; 4usize],
    pub(crate) sensor_size: [f32; 2usize],
    pub(crate) resolution: [f32; 2usize],
    pub(crate) focal_length: [f32; 2usize],
    pub(crate) focal_pixel: [f32; 2usize],
    pub(crate) principal_length: [f32; 2usize],
    pub(crate) principal_pixel: [f32; 2usize],
    pub(crate) userdata: *mut mjDoubleVec,
    pub(crate) info: *mut mjString,
}
pub type mjsCamera = mjsCamera_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsLight_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) pos: [f64; 3usize],
    pub(crate) dir: [f64; 3usize],
    pub(crate) mode: mjtCamLight,
    pub(crate) targetbody: *mut mjString,
    pub(crate) active: mjtByte,
    pub(crate) type_: mjtLightType,
    pub(crate) texture: *mut mjString,
    pub(crate) castshadow: mjtByte,
    pub(crate) bulbradius: f32,
    pub(crate) intensity: f32,
    pub(crate) range: f32,
    pub(crate) attenuation: [f32; 3usize],
    pub(crate) cutoff: f32,
    pub(crate) exponent: f32,
    pub(crate) ambient: [f32; 3usize],
    pub(crate) diffuse: [f32; 3usize],
    pub(crate) specular: [f32; 3usize],
    pub(crate) info: *mut mjString,
}
pub type mjsLight = mjsLight_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsFlex_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) contype: ::std::os::raw::c_int,
    pub(crate) conaffinity: ::std::os::raw::c_int,
    pub(crate) condim: ::std::os::raw::c_int,
    pub(crate) priority: ::std::os::raw::c_int,
    pub(crate) friction: [f64; 3usize],
    pub(crate) solmix: f64,
    pub(crate) solref: [mjtNum; 2usize],
    pub(crate) solimp: [mjtNum; 5usize],
    pub(crate) margin: f64,
    pub(crate) gap: f64,
    pub(crate) dim: ::std::os::raw::c_int,
    pub(crate) radius: f64,
    pub(crate) internal: mjtByte,
    pub(crate) flatskin: mjtByte,
    pub(crate) selfcollide: ::std::os::raw::c_int,
    pub(crate) vertcollide: ::std::os::raw::c_int,
    pub(crate) passive: ::std::os::raw::c_int,
    pub(crate) activelayers: ::std::os::raw::c_int,
    pub(crate) group: ::std::os::raw::c_int,
    pub(crate) edgestiffness: f64,
    pub(crate) edgedamping: f64,
    pub(crate) rgba: [f32; 4usize],
    pub(crate) material: *mut mjString,
    pub(crate) young: f64,
    pub(crate) poisson: f64,
    pub(crate) damping: f64,
    pub(crate) thickness: f64,
    pub(crate) elastic2d: ::std::os::raw::c_int,
    pub(crate) nodebody: *mut mjStringVec,
    pub(crate) vertbody: *mut mjStringVec,
    pub(crate) node: *mut mjDoubleVec,
    pub(crate) vert: *mut mjDoubleVec,
    pub(crate) elem: *mut mjIntVec,
    pub(crate) texcoord: *mut mjFloatVec,
    pub(crate) elemtexcoord: *mut mjIntVec,
    pub(crate) info: *mut mjString,
}
pub type mjsFlex = mjsFlex_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsMesh_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) content_type: *mut mjString,
    pub(crate) file: *mut mjString,
    pub(crate) refpos: [f64; 3usize],
    pub(crate) refquat: [f64; 4usize],
    pub(crate) scale: [f64; 3usize],
    pub(crate) inertia: mjtMeshInertia,
    pub(crate) smoothnormal: mjtByte,
    pub(crate) needsdf: mjtByte,
    pub(crate) maxhullvert: ::std::os::raw::c_int,
    pub(crate) uservert: *mut mjFloatVec,
    pub(crate) usernormal: *mut mjFloatVec,
    pub(crate) usertexcoord: *mut mjFloatVec,
    pub(crate) userface: *mut mjIntVec,
    pub(crate) userfacenormal: *mut mjIntVec,
    pub(crate) userfacetexcoord: *mut mjIntVec,
    pub(crate) plugin: mjsPlugin,
    pub(crate) material: *mut mjString,
    pub(crate) info: *mut mjString,
}
pub type mjsMesh = mjsMesh_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsHField_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) content_type: *mut mjString,
    pub(crate) file: *mut mjString,
    pub(crate) size: [f64; 4usize],
    pub(crate) nrow: ::std::os::raw::c_int,
    pub(crate) ncol: ::std::os::raw::c_int,
    pub(crate) userdata: *mut mjFloatVec,
    pub(crate) info: *mut mjString,
}
pub type mjsHField = mjsHField_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsSkin_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) file: *mut mjString,
    pub(crate) material: *mut mjString,
    pub(crate) rgba: [f32; 4usize],
    pub(crate) inflate: f32,
    pub(crate) group: ::std::os::raw::c_int,
    pub(crate) vert: *mut mjFloatVec,
    pub(crate) texcoord: *mut mjFloatVec,
    pub(crate) face: *mut mjIntVec,
    pub(crate) bodyname: *mut mjStringVec,
    pub(crate) bindpos: *mut mjFloatVec,
    pub(crate) bindquat: *mut mjFloatVec,
    pub(crate) vertid: *mut mjIntVecVec,
    pub(crate) vertweight: *mut mjFloatVecVec,
    pub(crate) info: *mut mjString,
}
pub type mjsSkin = mjsSkin_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsTexture_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) type_: mjtTexture,
    pub(crate) colorspace: mjtColorSpace,
    pub(crate) builtin: ::std::os::raw::c_int,
    pub(crate) mark: ::std::os::raw::c_int,
    pub(crate) rgb1: [f64; 3usize],
    pub(crate) rgb2: [f64; 3usize],
    pub(crate) markrgb: [f64; 3usize],
    pub(crate) random: f64,
    pub(crate) height: ::std::os::raw::c_int,
    pub(crate) width: ::std::os::raw::c_int,
    pub(crate) nchannel: ::std::os::raw::c_int,
    pub(crate) content_type: *mut mjString,
    pub(crate) file: *mut mjString,
    pub(crate) gridsize: [::std::os::raw::c_int; 2usize],
    pub(crate) gridlayout: [::std::os::raw::c_char; 13usize],
    pub(crate) cubefiles: *mut mjStringVec,
    pub(crate) data: *mut mjByteVec,
    pub(crate) hflip: mjtByte,
    pub(crate) vflip: mjtByte,
    pub(crate) info: *mut mjString,
}
pub type mjsTexture = mjsTexture_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsMaterial_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) textures: *mut mjStringVec,
    pub(crate) texuniform: mjtByte,
    pub(crate) texrepeat: [f32; 2usize],
    pub(crate) emission: f32,
    pub(crate) specular: f32,
    pub(crate) shininess: f32,
    pub(crate) reflectance: f32,
    pub(crate) metallic: f32,
    pub(crate) roughness: f32,
    pub(crate) rgba: [f32; 4usize],
    pub(crate) info: *mut mjString,
}
pub type mjsMaterial = mjsMaterial_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsPair_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) geomname1: *mut mjString,
    pub(crate) geomname2: *mut mjString,
    pub(crate) condim: ::std::os::raw::c_int,
    pub(crate) solref: [mjtNum; 2usize],
    pub(crate) solreffriction: [mjtNum; 2usize],
    pub(crate) solimp: [mjtNum; 5usize],
    pub(crate) margin: f64,
    pub(crate) gap: f64,
    pub(crate) friction: [f64; 5usize],
    pub(crate) info: *mut mjString,
}
pub type mjsPair = mjsPair_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsExclude_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) bodyname1: *mut mjString,
    pub(crate) bodyname2: *mut mjString,
    pub(crate) info: *mut mjString,
}
pub type mjsExclude = mjsExclude_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsEquality_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) type_: mjtEq,
    pub(crate) data: [f64; 11usize],
    pub(crate) active: mjtByte,
    pub(crate) name1: *mut mjString,
    pub(crate) name2: *mut mjString,
    pub(crate) objtype: mjtObj,
    pub(crate) solref: [mjtNum; 2usize],
    pub(crate) solimp: [mjtNum; 5usize],
    pub(crate) info: *mut mjString,
}
pub type mjsEquality = mjsEquality_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsTendon_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) stiffness: f64,
    pub(crate) springlength: [f64; 2usize],
    pub(crate) damping: f64,
    pub(crate) frictionloss: f64,
    pub(crate) solref_friction: [mjtNum; 2usize],
    pub(crate) solimp_friction: [mjtNum; 5usize],
    pub(crate) armature: f64,
    pub(crate) limited: ::std::os::raw::c_int,
    pub(crate) actfrclimited: ::std::os::raw::c_int,
    pub(crate) range: [f64; 2usize],
    pub(crate) actfrcrange: [f64; 2usize],
    pub(crate) margin: f64,
    pub(crate) solref_limit: [mjtNum; 2usize],
    pub(crate) solimp_limit: [mjtNum; 5usize],
    pub(crate) material: *mut mjString,
    pub(crate) width: f64,
    pub(crate) rgba: [f32; 4usize],
    pub(crate) group: ::std::os::raw::c_int,
    pub(crate) userdata: *mut mjDoubleVec,
    pub(crate) info: *mut mjString,
}
pub type mjsTendon = mjsTendon_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsWrap_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) info: *mut mjString,
}
pub type mjsWrap = mjsWrap_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsActuator_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) gaintype: mjtGain,
    pub(crate) gainprm: [f64; 10usize],
    pub(crate) biastype: mjtBias,
    pub(crate) biasprm: [f64; 10usize],
    pub(crate) dyntype: mjtDyn,
    pub(crate) dynprm: [f64; 10usize],
    pub(crate) actdim: ::std::os::raw::c_int,
    pub(crate) actearly: mjtByte,
    pub(crate) trntype: mjtTrn,
    pub(crate) gear: [f64; 6usize],
    pub(crate) target: *mut mjString,
    pub(crate) refsite: *mut mjString,
    pub(crate) slidersite: *mut mjString,
    pub(crate) cranklength: f64,
    pub(crate) lengthrange: [f64; 2usize],
    pub(crate) inheritrange: f64,
    pub(crate) ctrllimited: ::std::os::raw::c_int,
    pub(crate) ctrlrange: [f64; 2usize],
    pub(crate) forcelimited: ::std::os::raw::c_int,
    pub(crate) forcerange: [f64; 2usize],
    pub(crate) actlimited: ::std::os::raw::c_int,
    pub(crate) actrange: [f64; 2usize],
    pub(crate) group: ::std::os::raw::c_int,
    pub(crate) userdata: *mut mjDoubleVec,
    pub(crate) plugin: mjsPlugin,
    pub(crate) info: *mut mjString,
}
pub type mjsActuator = mjsActuator_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsSensor_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) type_: mjtSensor,
    pub(crate) objtype: mjtObj,
    pub(crate) objname: *mut mjString,
    pub(crate) reftype: mjtObj,
    pub(crate) refname: *mut mjString,
    pub(crate) intprm: [::std::os::raw::c_int; 3usize],
    pub(crate) datatype: mjtDataType,
    pub(crate) needstage: mjtStage,
    pub(crate) dim: ::std::os::raw::c_int,
    pub(crate) cutoff: f64,
    pub(crate) noise: f64,
    pub(crate) userdata: *mut mjDoubleVec,
    pub(crate) plugin: mjsPlugin,
    pub(crate) info: *mut mjString,
}
pub type mjsSensor = mjsSensor_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsNumeric_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) data: *mut mjDoubleVec,
    pub(crate) size: ::std::os::raw::c_int,
    pub(crate) info: *mut mjString,
}
pub type mjsNumeric = mjsNumeric_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsText_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) data: *mut mjString,
    pub(crate) info: *mut mjString,
}
pub type mjsText = mjsText_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsTuple_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) objtype: *mut mjIntVec,
    pub(crate) objname: *mut mjStringVec,
    pub(crate) objprm: *mut mjDoubleVec,
    pub(crate) info: *mut mjString,
}
pub type mjsTuple = mjsTuple_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsKey_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) time: f64,
    pub(crate) qpos: *mut mjDoubleVec,
    pub(crate) qvel: *mut mjDoubleVec,
    pub(crate) act: *mut mjDoubleVec,
    pub(crate) mpos: *mut mjDoubleVec,
    pub(crate) mquat: *mut mjDoubleVec,
    pub(crate) ctrl: *mut mjDoubleVec,
    pub(crate) info: *mut mjString,
}
pub type mjsKey = mjsKey_;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mjsDefault_ {
    pub(crate) element: *mut mjsElement,
    pub(crate) joint: *mut mjsJoint,
    pub(crate) geom: *mut mjsGeom,
    pub(crate) site: *mut mjsSite,
    pub(crate) camera: *mut mjsCamera,
    pub(crate) light: *mut mjsLight,
    pub(crate) flex: *mut mjsFlex,
    pub(crate) mesh: *mut mjsMesh,
    pub(crate) material: *mut mjsMaterial,
    pub(crate) pair: *mut mjsPair,
    pub(crate) equality: *mut mjsEquality,
    pub(crate) tendon: *mut mjsTendon,
    pub(crate) actuator: *mut mjsActuator,
}
pub type mjsDefault = mjsDefault_;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtButton_ {
    mjBUTTON_NONE = 0,
    mjBUTTON_LEFT = 1,
    mjBUTTON_RIGHT = 2,
    mjBUTTON_MIDDLE = 3,
}
pub use self::mjtButton_ as mjtButton;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtEvent_ {
    mjEVENT_NONE = 0,
    mjEVENT_MOVE = 1,
    mjEVENT_PRESS = 2,
    mjEVENT_RELEASE = 3,
    mjEVENT_SCROLL = 4,
    mjEVENT_KEY = 5,
    mjEVENT_RESIZE = 6,
    mjEVENT_REDRAW = 7,
    mjEVENT_FILESDROP = 8,
}
pub use self::mjtEvent_ as mjtEvent;
#[repr(i32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtItem_ {
    mjITEM_END = -2,
    mjITEM_SECTION = -1,
    mjITEM_SEPARATOR = 0,
    mjITEM_STATIC = 1,
    mjITEM_BUTTON = 2,
    mjITEM_CHECKINT = 3,
    mjITEM_CHECKBYTE = 4,
    mjITEM_RADIO = 5,
    mjITEM_RADIOLINE = 6,
    mjITEM_SELECT = 7,
    mjITEM_SLIDERINT = 8,
    mjITEM_SLIDERNUM = 9,
    mjITEM_EDITINT = 10,
    mjITEM_EDITNUM = 11,
    mjITEM_EDITFLOAT = 12,
    mjITEM_EDITTXT = 13,
    mjNITEM = 14,
}
pub use self::mjtItem_ as mjtItem;
#[repr(u32)]
#[derive(Debug, Clone, Hash, PartialEq, Eq,  Copy)]
pub enum mjtSection_ {
    mjSECT_CLOSED = 0,
    mjSECT_OPEN = 1,
    mjSECT_FIXED = 2,
}
pub use self::mjtSection_ as mjtSection;
pub type mjfItemEnable = ::std::option::Option<
    unsafe extern "C" fn(
        category: ::std::os::raw::c_int,
        data: *mut ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int,
>;
#[repr(C)]
#[derive(Debug, Clone, Copy)]
pub struct mjuiState_ {
    pub nrect: ::std::os::raw::c_int,
    pub rect: [mjrRect; 25usize],
    pub userdata: *mut ::std::os::raw::c_void,
    pub type_: ::std::os::raw::c_int,
    pub left: ::std::os::raw::c_int,
    pub right: ::std::os::raw::c_int,
    pub middle: ::std::os::raw::c_int,
    pub doubleclick: ::std::os::raw::c_int,
    pub button: ::std::os::raw::c_int,
    pub buttontime: f64,
    pub x: f64,
    pub y: f64,
    pub dx: f64,
    pub dy: f64,
    pub sx: f64,
    pub sy: f64,
    pub control: ::std::os::raw::c_int,
    pub shift: ::std::os::raw::c_int,
    pub alt: ::std::os::raw::c_int,
    pub key: ::std::os::raw::c_int,
    pub keytime: f64,
    pub mouserect: ::std::os::raw::c_int,
    pub dragrect: ::std::os::raw::c_int,
    pub dragbutton: ::std::os::raw::c_int,
    pub dropcount: ::std::os::raw::c_int,
    pub droppaths: *mut *const ::std::os::raw::c_char,
}
pub type mjuiState = mjuiState_;
#[repr(C)]
#[derive(Debug, Clone, Copy)]
pub struct mjuiThemeSpacing_ {
    pub total: ::std::os::raw::c_int,
    pub scroll: ::std::os::raw::c_int,
    pub label: ::std::os::raw::c_int,
    pub section: ::std::os::raw::c_int,
    pub cornersect: ::std::os::raw::c_int,
    pub cornersep: ::std::os::raw::c_int,
    pub itemside: ::std::os::raw::c_int,
    pub itemmid: ::std::os::raw::c_int,
    pub itemver: ::std::os::raw::c_int,
    pub texthor: ::std::os::raw::c_int,
    pub textver: ::std::os::raw::c_int,
    pub linescroll: ::std::os::raw::c_int,
    pub samples: ::std::os::raw::c_int,
}
pub type mjuiThemeSpacing = mjuiThemeSpacing_;
#[repr(C)]
#[derive(Debug, Clone, Copy)]
pub struct mjuiThemeColor_ {
    pub master: [f32; 3usize],
    pub thumb: [f32; 3usize],
    pub secttitle: [f32; 3usize],
    pub secttitle2: [f32; 3usize],
    pub secttitleuncheck: [f32; 3usize],
    pub secttitleuncheck2: [f32; 3usize],
    pub secttitlecheck: [f32; 3usize],
    pub secttitlecheck2: [f32; 3usize],
    pub sectfont: [f32; 3usize],
    pub sectsymbol: [f32; 3usize],
    pub sectpane: [f32; 3usize],
    pub separator: [f32; 3usize],
    pub separator2: [f32; 3usize],
    pub shortcut: [f32; 3usize],
    pub fontactive: [f32; 3usize],
    pub fontinactive: [f32; 3usize],
    pub decorinactive: [f32; 3usize],
    pub decorinactive2: [f32; 3usize],
    pub button: [f32; 3usize],
    pub check: [f32; 3usize],
    pub radio: [f32; 3usize],
    pub select: [f32; 3usize],
    pub select2: [f32; 3usize],
    pub slider: [f32; 3usize],
    pub slider2: [f32; 3usize],
    pub edit: [f32; 3usize],
    pub edit2: [f32; 3usize],
    pub cursor: [f32; 3usize],
}
pub type mjuiThemeColor = mjuiThemeColor_;
#[repr(C)]
#[derive(Debug, Clone, Copy)]
pub struct mjuiItemSingle_ {
    pub modifier: ::std::os::raw::c_int,
    pub shortcut: ::std::os::raw::c_int,
}
#[repr(C)]
#[derive(Debug, Clone, Copy)]
pub struct mjuiItemMulti_ {
    pub nelem: ::std::os::raw::c_int,
    pub name: [[::std::os::raw::c_char; 40usize]; 35usize],
}
#[repr(C)]
#[derive(Debug, Clone, Copy)]
pub struct mjuiItemSlider_ {
    pub range: [f64; 2usize],
    pub divisions: f64,
}
#[repr(C)]
#[derive(Debug, Clone, Copy)]
pub struct mjuiItemEdit_ {
    pub nelem: ::std::os::raw::c_int,
    pub range: [[f64; 2usize]; 7usize],
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct mjuiItem_ {
    pub type_: ::std::os::raw::c_int,
    pub name: [::std::os::raw::c_char; 40usize],
    pub state: ::std::os::raw::c_int,
    pub pdata: *mut ::std::os::raw::c_void,
    pub sectionid: ::std::os::raw::c_int,
    pub itemid: ::std::os::raw::c_int,
    pub userid: ::std::os::raw::c_int,
    pub __bindgen_anon_1: mjuiItem___bindgen_ty_1,
    pub rect: mjrRect,
    pub skip: ::std::os::raw::c_int,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct mjuiItem___bindgen_ty_1 {
    pub single: __BindgenUnionField<mjuiItemSingle_>,
    pub multi: __BindgenUnionField<mjuiItemMulti_>,
    pub slider: __BindgenUnionField<mjuiItemSlider_>,
    pub edit: __BindgenUnionField<mjuiItemEdit_>,
    pub bindgen_union_field: [u64; 176usize],
}
pub type mjuiItem = mjuiItem_;
#[repr(C)]
#[derive(Clone, Copy)]
pub struct mjuiSection_ {
    pub name: [::std::os::raw::c_char; 40usize],
    pub state: ::std::os::raw::c_int,
    pub modifier: ::std::os::raw::c_int,
    pub shortcut: ::std::os::raw::c_int,
    pub checkbox: ::std::os::raw::c_int,
    pub nitem: ::std::os::raw::c_int,
    pub item: [mjuiItem; 200usize],
    pub rtitle: mjrRect,
    pub rcontent: mjrRect,
    pub lastclick: ::std::os::raw::c_int,
}
pub type mjuiSection = mjuiSection_;
#[repr(C)]
#[derive(Clone)]
pub struct mjUI_ {
    pub spacing: mjuiThemeSpacing,
    pub color: mjuiThemeColor,
    pub predicate: mjfItemEnable,
    pub userdata: *mut ::std::os::raw::c_void,
    pub rectid: ::std::os::raw::c_int,
    pub auxid: ::std::os::raw::c_int,
    pub radiocol: ::std::os::raw::c_int,
    pub width: ::std::os::raw::c_int,
    pub height: ::std::os::raw::c_int,
    pub maxheight: ::std::os::raw::c_int,
    pub scroll: ::std::os::raw::c_int,
    pub mousesect: ::std::os::raw::c_int,
    pub mouseitem: ::std::os::raw::c_int,
    pub mousehelp: ::std::os::raw::c_int,
    pub mouseclicks: ::std::os::raw::c_int,
    pub mousesectcheck: ::std::os::raw::c_int,
    pub editsect: ::std::os::raw::c_int,
    pub edititem: ::std::os::raw::c_int,
    pub editcursor: ::std::os::raw::c_int,
    pub editscroll: ::std::os::raw::c_int,
    pub edittext: [::std::os::raw::c_char; 300usize],
    pub editchanged: *mut mjuiItem,
    pub nsect: ::std::os::raw::c_int,
    pub sect: [mjuiSection; 10usize],
}
pub type mjUI = mjUI_;
#[repr(C)]
#[derive(Debug, Clone, Copy)]
pub struct mjuiDef_ {
    pub type_: ::std::os::raw::c_int,
    pub name: [::std::os::raw::c_char; 40usize],
    pub state: ::std::os::raw::c_int,
    pub pdata: *mut ::std::os::raw::c_void,
    pub other: [::std::os::raw::c_char; 300usize],
    pub otherint: ::std::os::raw::c_int,
}
pub type mjuiDef = mjuiDef_;
unsafe extern "C" {
    pub static mut mju_user_error:
        ::std::option::Option<unsafe extern "C" fn(arg1: *const ::std::os::raw::c_char)>;
}
unsafe extern "C" {
    pub static mut mju_user_warning:
        ::std::option::Option<unsafe extern "C" fn(arg1: *const ::std::os::raw::c_char)>;
}
unsafe extern "C" {
    pub static mut mju_user_malloc:
        ::std::option::Option<unsafe extern "C" fn(arg1: usize) -> *mut ::std::os::raw::c_void>;
}
unsafe extern "C" {
    pub static mut mju_user_free:
        ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>;
}
unsafe extern "C" {
    pub static mut mjcb_passive: mjfGeneric;
}
unsafe extern "C" {
    pub static mut mjcb_control: mjfGeneric;
}
unsafe extern "C" {
    pub static mut mjcb_contactfilter: mjfConFilt;
}
unsafe extern "C" {
    pub static mut mjcb_sensor: mjfSensor;
}
unsafe extern "C" {
    pub static mut mjcb_time: mjfTime;
}
unsafe extern "C" {
    pub static mut mjcb_act_dyn: mjfAct;
}
unsafe extern "C" {
    pub static mut mjcb_act_gain: mjfAct;
}
unsafe extern "C" {
    pub static mut mjcb_act_bias: mjfAct;
}
unsafe extern "C" {
    pub static mut mjCOLLISIONFUNC: [[mjfCollision; 9usize]; 9usize];
}
unsafe extern "C" {
    pub static mut mjDISABLESTRING: [*const ::std::os::raw::c_char; 19usize];
}
unsafe extern "C" {
    pub static mut mjENABLESTRING: [*const ::std::os::raw::c_char; 5usize];
}
unsafe extern "C" {
    pub static mut mjTIMERSTRING: [*const ::std::os::raw::c_char; 15usize];
}
unsafe extern "C" {
    pub static mut mjLABELSTRING: [*const ::std::os::raw::c_char; 17usize];
}
unsafe extern "C" {
    pub static mut mjFRAMESTRING: [*const ::std::os::raw::c_char; 8usize];
}
unsafe extern "C" {
    pub static mut mjVISSTRING: [[*const ::std::os::raw::c_char; 3usize]; 31usize];
}
unsafe extern "C" {
    pub static mut mjRNDSTRING: [[*const ::std::os::raw::c_char; 3usize]; 10usize];
}
unsafe extern "C" {
    pub fn mj_defaultVFS(vfs: *mut mjVFS);
}
unsafe extern "C" {
    pub fn mj_addFileVFS(
        vfs: *mut mjVFS,
        directory: *const ::std::os::raw::c_char,
        filename: *const ::std::os::raw::c_char,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mj_addBufferVFS(
        vfs: *mut mjVFS,
        name: *const ::std::os::raw::c_char,
        buffer: *const ::std::os::raw::c_void,
        nbuffer: ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mj_deleteFileVFS(
        vfs: *mut mjVFS,
        filename: *const ::std::os::raw::c_char,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mj_deleteVFS(vfs: *mut mjVFS);
}
unsafe extern "C" {
    pub fn mj_getCacheSize(cache: *const mjCache) -> usize;
}
unsafe extern "C" {
    pub fn mj_getCacheCapacity(cache: *const mjCache) -> usize;
}
unsafe extern "C" {
    pub fn mj_setCacheCapacity(cache: *mut mjCache, size: usize) -> usize;
}
unsafe extern "C" {
    pub fn mj_getCache() -> *mut mjCache;
}
unsafe extern "C" {
    pub fn mj_clearCache(cache: *mut mjCache);
}
unsafe extern "C" {
    pub fn mj_loadXML(
        filename: *const ::std::os::raw::c_char,
        vfs: *const mjVFS,
        error: *mut ::std::os::raw::c_char,
        error_sz: ::std::os::raw::c_int,
    ) -> *mut mjModel;
}
unsafe extern "C" {
    pub fn mj_parseXML(
        filename: *const ::std::os::raw::c_char,
        vfs: *const mjVFS,
        error: *mut ::std::os::raw::c_char,
        error_sz: ::std::os::raw::c_int,
    ) -> *mut mjSpec;
}
unsafe extern "C" {
    pub fn mj_parseXMLString(
        xml: *const ::std::os::raw::c_char,
        vfs: *const mjVFS,
        error: *mut ::std::os::raw::c_char,
        error_sz: ::std::os::raw::c_int,
    ) -> *mut mjSpec;
}
unsafe extern "C" {
    pub fn mj_compile(s: *mut mjSpec, vfs: *const mjVFS) -> *mut mjModel;
}
unsafe extern "C" {
    pub fn mj_copyBack(s: *mut mjSpec, m: *const mjModel) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mj_recompile(
        s: *mut mjSpec,
        vfs: *const mjVFS,
        m: *mut mjModel,
        d: *mut mjData,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mj_saveLastXML(
        filename: *const ::std::os::raw::c_char,
        m: *const mjModel,
        error: *mut ::std::os::raw::c_char,
        error_sz: ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mj_freeLastXML();
}
unsafe extern "C" {
    pub fn mj_saveXMLString(
        s: *const mjSpec,
        xml: *mut ::std::os::raw::c_char,
        xml_sz: ::std::os::raw::c_int,
        error: *mut ::std::os::raw::c_char,
        error_sz: ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mj_saveXML(
        s: *const mjSpec,
        filename: *const ::std::os::raw::c_char,
        error: *mut ::std::os::raw::c_char,
        error_sz: ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mju_getXMLDependencies(
        filename: *const ::std::os::raw::c_char,
        dependencies: *mut mjStringVec,
    );
}
unsafe extern "C" {
    pub fn mj_step(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_step1(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_step2(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_forward(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_inverse(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_forwardSkip(
        m: *const mjModel,
        d: *mut mjData,
        skipstage: ::std::os::raw::c_int,
        skipsensor: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mj_inverseSkip(
        m: *const mjModel,
        d: *mut mjData,
        skipstage: ::std::os::raw::c_int,
        skipsensor: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mj_defaultLROpt(opt: *mut mjLROpt);
}
unsafe extern "C" {
    pub fn mj_defaultSolRefImp(solref: *mut mjtNum, solimp: *mut mjtNum);
}
unsafe extern "C" {
    pub fn mj_defaultOption(opt: *mut mjOption);
}
unsafe extern "C" {
    pub fn mj_defaultVisual(vis: *mut mjVisual);
}
unsafe extern "C" {
    pub fn mj_copyModel(dest: *mut mjModel, src: *const mjModel) -> *mut mjModel;
}
unsafe extern "C" {
    pub fn mj_saveModel(
        m: *const mjModel,
        filename: *const ::std::os::raw::c_char,
        buffer: *mut ::std::os::raw::c_void,
        buffer_sz: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mj_loadModel(filename: *const ::std::os::raw::c_char, vfs: *const mjVFS)
        -> *mut mjModel;
}
unsafe extern "C" {
    pub fn mj_deleteModel(m: *mut mjModel);
}
unsafe extern "C" {
    pub fn mj_sizeModel(m: *const mjModel) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mj_makeData(m: *const mjModel) -> *mut mjData;
}
unsafe extern "C" {
    pub fn mj_copyData(dest: *mut mjData, m: *const mjModel, src: *const mjData) -> *mut mjData;
}
unsafe extern "C" {
    pub fn mjv_copyData(dest: *mut mjData, m: *const mjModel, src: *const mjData) -> *mut mjData;
}
unsafe extern "C" {
    pub fn mj_resetData(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_resetDataDebug(
        m: *const mjModel,
        d: *mut mjData,
        debug_value: ::std::os::raw::c_uchar,
    );
}
unsafe extern "C" {
    pub fn mj_resetDataKeyframe(m: *const mjModel, d: *mut mjData, key: ::std::os::raw::c_int);
}
unsafe extern "C" {
    pub fn mj_markStack(d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_freeStack(d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_stackAllocByte(
        d: *mut mjData,
        bytes: usize,
        alignment: usize,
    ) -> *mut ::std::os::raw::c_void;
}
unsafe extern "C" {
    pub fn mj_stackAllocNum(d: *mut mjData, size: usize) -> *mut mjtNum;
}
unsafe extern "C" {
    pub fn mj_stackAllocInt(d: *mut mjData, size: usize) -> *mut ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mj_deleteData(d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_resetCallbacks();
}
unsafe extern "C" {
    pub fn mj_setConst(m: *mut mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_setLengthRange(
        m: *mut mjModel,
        d: *mut mjData,
        index: ::std::os::raw::c_int,
        opt: *const mjLROpt,
        error: *mut ::std::os::raw::c_char,
        error_sz: ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mj_makeSpec() -> *mut mjSpec;
}
unsafe extern "C" {
    pub fn mj_copySpec(s: *const mjSpec) -> *mut mjSpec;
}
unsafe extern "C" {
    pub fn mj_deleteSpec(s: *mut mjSpec);
}
unsafe extern "C" {
    pub fn mjs_activatePlugin(
        s: *mut mjSpec,
        name: *const ::std::os::raw::c_char,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mjs_setDeepCopy(
        s: *mut mjSpec,
        deepcopy: ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mj_printFormattedModel(
        m: *const mjModel,
        filename: *const ::std::os::raw::c_char,
        float_format: *const ::std::os::raw::c_char,
    );
}
unsafe extern "C" {
    pub fn mj_printModel(m: *const mjModel, filename: *const ::std::os::raw::c_char);
}
unsafe extern "C" {
    pub fn mj_printFormattedData(
        m: *const mjModel,
        d: *const mjData,
        filename: *const ::std::os::raw::c_char,
        float_format: *const ::std::os::raw::c_char,
    );
}
unsafe extern "C" {
    pub fn mj_printData(
        m: *const mjModel,
        d: *const mjData,
        filename: *const ::std::os::raw::c_char,
    );
}
unsafe extern "C" {
    pub fn mju_printMat(mat: *const mjtNum, nr: ::std::os::raw::c_int, nc: ::std::os::raw::c_int);
}
unsafe extern "C" {
    pub fn mju_printMatSparse(
        mat: *const mjtNum,
        nr: ::std::os::raw::c_int,
        rownnz: *const ::std::os::raw::c_int,
        rowadr: *const ::std::os::raw::c_int,
        colind: *const ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mj_printSchema(
        filename: *const ::std::os::raw::c_char,
        buffer: *mut ::std::os::raw::c_char,
        buffer_sz: ::std::os::raw::c_int,
        flg_html: ::std::os::raw::c_int,
        flg_pad: ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mj_printScene(s: *const mjvScene, filename: *const ::std::os::raw::c_char);
}
unsafe extern "C" {
    pub fn mj_printFormattedScene(
        s: *const mjvScene,
        filename: *const ::std::os::raw::c_char,
        float_format: *const ::std::os::raw::c_char,
    );
}
unsafe extern "C" {
    pub fn mj_fwdPosition(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_fwdVelocity(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_fwdActuation(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_fwdAcceleration(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_fwdConstraint(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_Euler(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_RungeKutta(m: *const mjModel, d: *mut mjData, N: ::std::os::raw::c_int);
}
unsafe extern "C" {
    pub fn mj_implicit(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_invPosition(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_invVelocity(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_invConstraint(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_compareFwdInv(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_sensorPos(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_sensorVel(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_sensorAcc(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_energyPos(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_energyVel(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_checkPos(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_checkVel(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_checkAcc(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_kinematics(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_comPos(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_camlight(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_flex(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_tendon(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_transmission(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_crb(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_makeM(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_factorM(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_solveM(
        m: *const mjModel,
        d: *mut mjData,
        x: *mut mjtNum,
        y: *const mjtNum,
        n: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mj_solveM2(
        m: *const mjModel,
        d: *mut mjData,
        x: *mut mjtNum,
        y: *const mjtNum,
        sqrtInvD: *const mjtNum,
        n: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mj_comVel(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_passive(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_subtreeVel(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_rne(
        m: *const mjModel,
        d: *mut mjData,
        flg_acc: ::std::os::raw::c_int,
        result: *mut mjtNum,
    );
}
unsafe extern "C" {
    pub fn mj_rnePostConstraint(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_collision(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_makeConstraint(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_island(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_projectConstraint(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_referenceConstraint(m: *const mjModel, d: *mut mjData);
}
unsafe extern "C" {
    pub fn mj_constraintUpdate(
        m: *const mjModel,
        d: *mut mjData,
        jar: *const mjtNum,
        cost: *mut mjtNum,
        flg_coneHessian: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mj_stateSize(m: *const mjModel, sig: ::std::os::raw::c_uint) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mj_getState(
        m: *const mjModel,
        d: *const mjData,
        state: *mut mjtNum,
        sig: ::std::os::raw::c_uint,
    );
}
unsafe extern "C" {
    pub fn mj_setState(
        m: *const mjModel,
        d: *mut mjData,
        state: *const mjtNum,
        sig: ::std::os::raw::c_uint,
    );
}
unsafe extern "C" {
    pub fn mj_setKeyframe(m: *mut mjModel, d: *const mjData, k: ::std::os::raw::c_int);
}
unsafe extern "C" {
    pub fn mj_addContact(
        m: *const mjModel,
        d: *mut mjData,
        con: *const mjContact,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mj_isPyramidal(m: *const mjModel) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mj_isSparse(m: *const mjModel) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mj_isDual(m: *const mjModel) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mj_mulJacVec(m: *const mjModel, d: *const mjData, res: *mut mjtNum, vec: *const mjtNum);
}
unsafe extern "C" {
    pub fn mj_mulJacTVec(m: *const mjModel, d: *const mjData, res: *mut mjtNum, vec: *const mjtNum);
}
unsafe extern "C" {
    pub fn mj_jac(
        m: *const mjModel,
        d: *const mjData,
        jacp: *mut mjtNum,
        jacr: *mut mjtNum,
        point: *const mjtNum,
        body: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mj_jacBody(
        m: *const mjModel,
        d: *const mjData,
        jacp: *mut mjtNum,
        jacr: *mut mjtNum,
        body: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mj_jacBodyCom(
        m: *const mjModel,
        d: *const mjData,
        jacp: *mut mjtNum,
        jacr: *mut mjtNum,
        body: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mj_jacSubtreeCom(
        m: *const mjModel,
        d: *mut mjData,
        jacp: *mut mjtNum,
        body: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mj_jacGeom(
        m: *const mjModel,
        d: *const mjData,
        jacp: *mut mjtNum,
        jacr: *mut mjtNum,
        geom: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mj_jacSite(
        m: *const mjModel,
        d: *const mjData,
        jacp: *mut mjtNum,
        jacr: *mut mjtNum,
        site: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mj_jacPointAxis(
        m: *const mjModel,
        d: *mut mjData,
        jacPoint: *mut mjtNum,
        jacAxis: *mut mjtNum,
        point: *const mjtNum,
        axis: *const mjtNum,
        body: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mj_jacDot(
        m: *const mjModel,
        d: *const mjData,
        jacp: *mut mjtNum,
        jacr: *mut mjtNum,
        point: *const mjtNum,
        body: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mj_angmomMat(
        m: *const mjModel,
        d: *mut mjData,
        mat: *mut mjtNum,
        body: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mj_name2id(
        m: *const mjModel,
        type_: ::std::os::raw::c_int,
        name: *const ::std::os::raw::c_char,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mj_id2name(
        m: *const mjModel,
        type_: ::std::os::raw::c_int,
        id: ::std::os::raw::c_int,
    ) -> *const ::std::os::raw::c_char;
}
unsafe extern "C" {
    pub fn mj_fullM(m: *const mjModel, dst: *mut mjtNum, M: *const mjtNum);
}
unsafe extern "C" {
    pub fn mj_mulM(m: *const mjModel, d: *const mjData, res: *mut mjtNum, vec: *const mjtNum);
}
unsafe extern "C" {
    pub fn mj_mulM2(m: *const mjModel, d: *const mjData, res: *mut mjtNum, vec: *const mjtNum);
}
unsafe extern "C" {
    pub fn mj_addM(
        m: *const mjModel,
        d: *mut mjData,
        dst: *mut mjtNum,
        rownnz: *mut ::std::os::raw::c_int,
        rowadr: *mut ::std::os::raw::c_int,
        colind: *mut ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mj_applyFT(
        m: *const mjModel,
        d: *mut mjData,
        force: *const mjtNum,
        torque: *const mjtNum,
        point: *const mjtNum,
        body: ::std::os::raw::c_int,
        qfrc_target: *mut mjtNum,
    );
}
unsafe extern "C" {
    pub fn mj_objectVelocity(
        m: *const mjModel,
        d: *const mjData,
        objtype: ::std::os::raw::c_int,
        objid: ::std::os::raw::c_int,
        res: *mut mjtNum,
        flg_local: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mj_objectAcceleration(
        m: *const mjModel,
        d: *const mjData,
        objtype: ::std::os::raw::c_int,
        objid: ::std::os::raw::c_int,
        res: *mut mjtNum,
        flg_local: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mj_geomDistance(
        m: *const mjModel,
        d: *const mjData,
        geom1: ::std::os::raw::c_int,
        geom2: ::std::os::raw::c_int,
        distmax: mjtNum,
        fromto: *mut mjtNum,
    ) -> mjtNum;
}
unsafe extern "C" {
    pub fn mj_contactForce(
        m: *const mjModel,
        d: *const mjData,
        id: ::std::os::raw::c_int,
        result: *mut mjtNum,
    );
}
unsafe extern "C" {
    pub fn mj_differentiatePos(
        m: *const mjModel,
        qvel: *mut mjtNum,
        dt: mjtNum,
        qpos1: *const mjtNum,
        qpos2: *const mjtNum,
    );
}
unsafe extern "C" {
    pub fn mj_integratePos(m: *const mjModel, qpos: *mut mjtNum, qvel: *const mjtNum, dt: mjtNum);
}
unsafe extern "C" {
    pub fn mj_normalizeQuat(m: *const mjModel, qpos: *mut mjtNum);
}
unsafe extern "C" {
    pub fn mj_local2Global(
        d: *mut mjData,
        xpos: *mut mjtNum,
        xmat: *mut mjtNum,
        pos: *const mjtNum,
        quat: *const mjtNum,
        body: ::std::os::raw::c_int,
        sameframe: mjtByte,
    );
}
unsafe extern "C" {
    pub fn mj_getTotalmass(m: *const mjModel) -> mjtNum;
}
unsafe extern "C" {
    pub fn mj_setTotalmass(m: *mut mjModel, newmass: mjtNum);
}
unsafe extern "C" {
    pub fn mj_getPluginConfig(
        m: *const mjModel,
        plugin_id: ::std::os::raw::c_int,
        attrib: *const ::std::os::raw::c_char,
    ) -> *const ::std::os::raw::c_char;
}
unsafe extern "C" {
    pub fn mj_loadPluginLibrary(path: *const ::std::os::raw::c_char);
}
unsafe extern "C" {
    pub fn mj_loadAllPluginLibraries(
        directory: *const ::std::os::raw::c_char,
        callback: mjfPluginLibraryLoadCallback,
    );
}
unsafe extern "C" {
    pub fn mj_version() -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mj_versionString() -> *const ::std::os::raw::c_char;
}
unsafe extern "C" {
    pub fn mj_multiRay(
        m: *const mjModel,
        d: *mut mjData,
        pnt: *const mjtNum,
        vec: *const mjtNum,
        geomgroup: *const mjtByte,
        flg_static: mjtByte,
        bodyexclude: ::std::os::raw::c_int,
        geomid: *mut ::std::os::raw::c_int,
        dist: *mut mjtNum,
        nray: ::std::os::raw::c_int,
        cutoff: mjtNum,
    );
}
unsafe extern "C" {
    pub fn mj_ray(
        m: *const mjModel,
        d: *const mjData,
        pnt: *const mjtNum,
        vec: *const mjtNum,
        geomgroup: *const mjtByte,
        flg_static: mjtByte,
        bodyexclude: ::std::os::raw::c_int,
        geomid: *mut ::std::os::raw::c_int,
    ) -> mjtNum;
}
unsafe extern "C" {
    pub fn mj_rayHfield(
        m: *const mjModel,
        d: *const mjData,
        geomid: ::std::os::raw::c_int,
        pnt: *const mjtNum,
        vec: *const mjtNum,
    ) -> mjtNum;
}
unsafe extern "C" {
    pub fn mj_rayMesh(
        m: *const mjModel,
        d: *const mjData,
        geomid: ::std::os::raw::c_int,
        pnt: *const mjtNum,
        vec: *const mjtNum,
    ) -> mjtNum;
}
unsafe extern "C" {
    pub fn mju_rayGeom(
        pos: *const mjtNum,
        mat: *const mjtNum,
        size: *const mjtNum,
        pnt: *const mjtNum,
        vec: *const mjtNum,
        geomtype: ::std::os::raw::c_int,
    ) -> mjtNum;
}
unsafe extern "C" {
    pub fn mju_rayFlex(
        m: *const mjModel,
        d: *const mjData,
        flex_layer: ::std::os::raw::c_int,
        flg_vert: mjtByte,
        flg_edge: mjtByte,
        flg_face: mjtByte,
        flg_skin: mjtByte,
        flexid: ::std::os::raw::c_int,
        pnt: *const mjtNum,
        vec: *const mjtNum,
        vertid: *mut ::std::os::raw::c_int,
    ) -> mjtNum;
}
unsafe extern "C" {
    pub fn mju_raySkin(
        nface: ::std::os::raw::c_int,
        nvert: ::std::os::raw::c_int,
        face: *const ::std::os::raw::c_int,
        vert: *const f32,
        pnt: *const mjtNum,
        vec: *const mjtNum,
        vertid: *mut ::std::os::raw::c_int,
    ) -> mjtNum;
}
unsafe extern "C" {
    pub fn mjv_defaultCamera(cam: *mut mjvCamera);
}
unsafe extern "C" {
    pub fn mjv_defaultFreeCamera(m: *const mjModel, cam: *mut mjvCamera);
}
unsafe extern "C" {
    pub fn mjv_defaultPerturb(pert: *mut mjvPerturb);
}
unsafe extern "C" {
    pub fn mjv_room2model(
        modelpos: *mut mjtNum,
        modelquat: *mut mjtNum,
        roompos: *const mjtNum,
        roomquat: *const mjtNum,
        scn: *const mjvScene,
    );
}
unsafe extern "C" {
    pub fn mjv_model2room(
        roompos: *mut mjtNum,
        roomquat: *mut mjtNum,
        modelpos: *const mjtNum,
        modelquat: *const mjtNum,
        scn: *const mjvScene,
    );
}
unsafe extern "C" {
    pub fn mjv_cameraInModel(
        headpos: *mut mjtNum,
        forward: *mut mjtNum,
        up: *mut mjtNum,
        scn: *const mjvScene,
    );
}
unsafe extern "C" {
    pub fn mjv_cameraInRoom(
        headpos: *mut mjtNum,
        forward: *mut mjtNum,
        up: *mut mjtNum,
        scn: *const mjvScene,
    );
}
unsafe extern "C" {
    pub fn mjv_frustumHeight(scn: *const mjvScene) -> mjtNum;
}
unsafe extern "C" {
    pub fn mjv_alignToCamera(res: *mut mjtNum, vec: *const mjtNum, forward: *const mjtNum);
}
unsafe extern "C" {
    pub fn mjv_moveCamera(
        m: *const mjModel,
        action: ::std::os::raw::c_int,
        reldx: mjtNum,
        reldy: mjtNum,
        scn: *const mjvScene,
        cam: *mut mjvCamera,
    );
}
unsafe extern "C" {
    pub fn mjv_movePerturb(
        m: *const mjModel,
        d: *const mjData,
        action: ::std::os::raw::c_int,
        reldx: mjtNum,
        reldy: mjtNum,
        scn: *const mjvScene,
        pert: *mut mjvPerturb,
    );
}
unsafe extern "C" {
    pub fn mjv_moveModel(
        m: *const mjModel,
        action: ::std::os::raw::c_int,
        reldx: mjtNum,
        reldy: mjtNum,
        roomup: *const mjtNum,
        scn: *mut mjvScene,
    );
}
unsafe extern "C" {
    pub fn mjv_initPerturb(
        m: *const mjModel,
        d: *mut mjData,
        scn: *const mjvScene,
        pert: *mut mjvPerturb,
    );
}
unsafe extern "C" {
    pub fn mjv_applyPerturbPose(
        m: *const mjModel,
        d: *mut mjData,
        pert: *const mjvPerturb,
        flg_paused: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mjv_applyPerturbForce(m: *const mjModel, d: *mut mjData, pert: *const mjvPerturb);
}
unsafe extern "C" {
    pub fn mjv_averageCamera(cam1: *const mjvGLCamera, cam2: *const mjvGLCamera) -> mjvGLCamera;
}
unsafe extern "C" {
    pub fn mjv_select(
        m: *const mjModel,
        d: *const mjData,
        vopt: *const mjvOption,
        aspectratio: mjtNum,
        relx: mjtNum,
        rely: mjtNum,
        scn: *const mjvScene,
        selpnt: *mut mjtNum,
        geomid: *mut ::std::os::raw::c_int,
        flexid: *mut ::std::os::raw::c_int,
        skinid: *mut ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mjv_defaultOption(opt: *mut mjvOption);
}
unsafe extern "C" {
    pub fn mjv_defaultFigure(fig: *mut mjvFigure);
}
unsafe extern "C" {
    pub fn mjv_initGeom(
        geom: *mut mjvGeom,
        type_: ::std::os::raw::c_int,
        size: *const mjtNum,
        pos: *const mjtNum,
        mat: *const mjtNum,
        rgba: *const f32,
    );
}
unsafe extern "C" {
    pub fn mjv_connector(
        geom: *mut mjvGeom,
        type_: ::std::os::raw::c_int,
        width: mjtNum,
        from: *const mjtNum,
        to: *const mjtNum,
    );
}
unsafe extern "C" {
    pub fn mjv_defaultScene(scn: *mut mjvScene);
}
unsafe extern "C" {
    pub fn mjv_makeScene(m: *const mjModel, scn: *mut mjvScene, maxgeom: ::std::os::raw::c_int);
}
unsafe extern "C" {
    pub fn mjv_freeScene(scn: *mut mjvScene);
}
unsafe extern "C" {
    pub fn mjv_updateScene(
        m: *const mjModel,
        d: *mut mjData,
        opt: *const mjvOption,
        pert: *const mjvPerturb,
        cam: *mut mjvCamera,
        catmask: ::std::os::raw::c_int,
        scn: *mut mjvScene,
    );
}
unsafe extern "C" {
    pub fn mjv_copyModel(dest: *mut mjModel, src: *const mjModel);
}
unsafe extern "C" {
    pub fn mjv_addGeoms(
        m: *const mjModel,
        d: *mut mjData,
        opt: *const mjvOption,
        pert: *const mjvPerturb,
        catmask: ::std::os::raw::c_int,
        scn: *mut mjvScene,
    );
}
unsafe extern "C" {
    pub fn mjv_makeLights(m: *const mjModel, d: *const mjData, scn: *mut mjvScene);
}
unsafe extern "C" {
    pub fn mjv_updateCamera(
        m: *const mjModel,
        d: *const mjData,
        cam: *mut mjvCamera,
        scn: *mut mjvScene,
    );
}
unsafe extern "C" {
    pub fn mjv_updateSkin(m: *const mjModel, d: *const mjData, scn: *mut mjvScene);
}
unsafe extern "C" {
    pub fn mjr_defaultContext(con: *mut mjrContext);
}
unsafe extern "C" {
    pub fn mjr_makeContext(
        m: *const mjModel,
        con: *mut mjrContext,
        fontscale: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mjr_changeFont(fontscale: ::std::os::raw::c_int, con: *mut mjrContext);
}
unsafe extern "C" {
    pub fn mjr_addAux(
        index: ::std::os::raw::c_int,
        width: ::std::os::raw::c_int,
        height: ::std::os::raw::c_int,
        samples: ::std::os::raw::c_int,
        con: *mut mjrContext,
    );
}
unsafe extern "C" {
    pub fn mjr_freeContext(con: *mut mjrContext);
}
unsafe extern "C" {
    pub fn mjr_resizeOffscreen(
        width: ::std::os::raw::c_int,
        height: ::std::os::raw::c_int,
        con: *mut mjrContext,
    );
}
unsafe extern "C" {
    pub fn mjr_uploadTexture(
        m: *const mjModel,
        con: *const mjrContext,
        texid: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mjr_uploadMesh(m: *const mjModel, con: *const mjrContext, meshid: ::std::os::raw::c_int);
}
unsafe extern "C" {
    pub fn mjr_uploadHField(
        m: *const mjModel,
        con: *const mjrContext,
        hfieldid: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mjr_restoreBuffer(con: *const mjrContext);
}
unsafe extern "C" {
    pub fn mjr_setBuffer(framebuffer: ::std::os::raw::c_int, con: *mut mjrContext);
}
unsafe extern "C" {
    pub fn mjr_readPixels(
        rgb: *mut ::std::os::raw::c_uchar,
        depth: *mut f32,
        viewport: mjrRect,
        con: *const mjrContext,
    );
}
unsafe extern "C" {
    pub fn mjr_drawPixels(
        rgb: *const ::std::os::raw::c_uchar,
        depth: *const f32,
        viewport: mjrRect,
        con: *const mjrContext,
    );
}
unsafe extern "C" {
    pub fn mjr_blitBuffer(
        src: mjrRect,
        dst: mjrRect,
        flg_color: ::std::os::raw::c_int,
        flg_depth: ::std::os::raw::c_int,
        con: *const mjrContext,
    );
}
unsafe extern "C" {
    pub fn mjr_setAux(index: ::std::os::raw::c_int, con: *const mjrContext);
}
unsafe extern "C" {
    pub fn mjr_blitAux(
        index: ::std::os::raw::c_int,
        src: mjrRect,
        left: ::std::os::raw::c_int,
        bottom: ::std::os::raw::c_int,
        con: *const mjrContext,
    );
}
unsafe extern "C" {
    pub fn mjr_text(
        font: ::std::os::raw::c_int,
        txt: *const ::std::os::raw::c_char,
        con: *const mjrContext,
        x: f32,
        y: f32,
        r: f32,
        g: f32,
        b: f32,
    );
}
unsafe extern "C" {
    pub fn mjr_overlay(
        font: ::std::os::raw::c_int,
        gridpos: ::std::os::raw::c_int,
        viewport: mjrRect,
        overlay: *const ::std::os::raw::c_char,
        overlay2: *const ::std::os::raw::c_char,
        con: *const mjrContext,
    );
}
unsafe extern "C" {
    pub fn mjr_maxViewport(con: *const mjrContext) -> mjrRect;
}
unsafe extern "C" {
    pub fn mjr_rectangle(viewport: mjrRect, r: f32, g: f32, b: f32, a: f32);
}
unsafe extern "C" {
    pub fn mjr_label(
        viewport: mjrRect,
        font: ::std::os::raw::c_int,
        txt: *const ::std::os::raw::c_char,
        r: f32,
        g: f32,
        b: f32,
        a: f32,
        rt: f32,
        gt: f32,
        bt: f32,
        con: *const mjrContext,
    );
}
unsafe extern "C" {
    pub fn mjr_figure(viewport: mjrRect, fig: *mut mjvFigure, con: *const mjrContext);
}
unsafe extern "C" {
    pub fn mjr_render(viewport: mjrRect, scn: *mut mjvScene, con: *const mjrContext);
}
unsafe extern "C" {
    pub fn mjr_finish();
}
unsafe extern "C" {
    pub fn mjr_getError() -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mjr_findRect(
        x: ::std::os::raw::c_int,
        y: ::std::os::raw::c_int,
        nrect: ::std::os::raw::c_int,
        rect: *const mjrRect,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mjui_themeSpacing(ind: ::std::os::raw::c_int) -> mjuiThemeSpacing;
}
unsafe extern "C" {
    pub fn mjui_themeColor(ind: ::std::os::raw::c_int) -> mjuiThemeColor;
}
unsafe extern "C" {
    pub fn mjui_add(ui: *mut mjUI, def: *const mjuiDef);
}
unsafe extern "C" {
    pub fn mjui_addToSection(ui: *mut mjUI, sect: ::std::os::raw::c_int, def: *const mjuiDef);
}
unsafe extern "C" {
    pub fn mjui_resize(ui: *mut mjUI, con: *const mjrContext);
}
unsafe extern "C" {
    pub fn mjui_update(
        section: ::std::os::raw::c_int,
        item: ::std::os::raw::c_int,
        ui: *const mjUI,
        state: *const mjuiState,
        con: *const mjrContext,
    );
}
unsafe extern "C" {
    pub fn mjui_event(
        ui: *mut mjUI,
        state: *mut mjuiState,
        con: *const mjrContext,
    ) -> *mut mjuiItem;
}
unsafe extern "C" {
    pub fn mjui_render(ui: *mut mjUI, state: *const mjuiState, con: *const mjrContext);
}
unsafe extern "C" {
    pub fn mju_error(msg: *const ::std::os::raw::c_char, ...);
}
unsafe extern "C" {
    pub fn mju_error_i(msg: *const ::std::os::raw::c_char, i: ::std::os::raw::c_int);
}
unsafe extern "C" {
    pub fn mju_error_s(msg: *const ::std::os::raw::c_char, text: *const ::std::os::raw::c_char);
}
unsafe extern "C" {
    pub fn mju_warning(msg: *const ::std::os::raw::c_char, ...);
}
unsafe extern "C" {
    pub fn mju_warning_i(msg: *const ::std::os::raw::c_char, i: ::std::os::raw::c_int);
}
unsafe extern "C" {
    pub fn mju_warning_s(msg: *const ::std::os::raw::c_char, text: *const ::std::os::raw::c_char);
}
unsafe extern "C" {
    pub fn mju_clearHandlers();
}
unsafe extern "C" {
    pub fn mju_malloc(size: usize) -> *mut ::std::os::raw::c_void;
}
unsafe extern "C" {
    pub fn mju_free(ptr: *mut ::std::os::raw::c_void);
}
unsafe extern "C" {
    pub fn mj_warning(d: *mut mjData, warning: ::std::os::raw::c_int, info: ::std::os::raw::c_int);
}
unsafe extern "C" {
    pub fn mju_writeLog(type_: *const ::std::os::raw::c_char, msg: *const ::std::os::raw::c_char);
}
unsafe extern "C" {
    pub fn mjs_getError(s: *mut mjSpec) -> *const ::std::os::raw::c_char;
}
unsafe extern "C" {
    pub fn mjs_isWarning(s: *mut mjSpec) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mju_zero3(res: *mut mjtNum);
}
unsafe extern "C" {
    pub fn mju_copy3(res: *mut mjtNum, data: *const mjtNum);
}
unsafe extern "C" {
    pub fn mju_scl3(res: *mut mjtNum, vec: *const mjtNum, scl: mjtNum);
}
unsafe extern "C" {
    pub fn mju_add3(res: *mut mjtNum, vec1: *const mjtNum, vec2: *const mjtNum);
}
unsafe extern "C" {
    pub fn mju_sub3(res: *mut mjtNum, vec1: *const mjtNum, vec2: *const mjtNum);
}
unsafe extern "C" {
    pub fn mju_addTo3(res: *mut mjtNum, vec: *const mjtNum);
}
unsafe extern "C" {
    pub fn mju_subFrom3(res: *mut mjtNum, vec: *const mjtNum);
}
unsafe extern "C" {
    pub fn mju_addToScl3(res: *mut mjtNum, vec: *const mjtNum, scl: mjtNum);
}
unsafe extern "C" {
    pub fn mju_addScl3(res: *mut mjtNum, vec1: *const mjtNum, vec2: *const mjtNum, scl: mjtNum);
}
unsafe extern "C" {
    pub fn mju_normalize3(vec: *mut mjtNum) -> mjtNum;
}
unsafe extern "C" {
    pub fn mju_norm3(vec: *const mjtNum) -> mjtNum;
}
unsafe extern "C" {
    pub fn mju_dot3(vec1: *const mjtNum, vec2: *const mjtNum) -> mjtNum;
}
unsafe extern "C" {
    pub fn mju_dist3(pos1: *const mjtNum, pos2: *const mjtNum) -> mjtNum;
}
unsafe extern "C" {
    pub fn mju_mulMatVec3(res: *mut mjtNum, mat: *const mjtNum, vec: *const mjtNum);
}
unsafe extern "C" {
    pub fn mju_mulMatTVec3(res: *mut mjtNum, mat: *const mjtNum, vec: *const mjtNum);
}
unsafe extern "C" {
    pub fn mju_cross(res: *mut mjtNum, a: *const mjtNum, b: *const mjtNum);
}
unsafe extern "C" {
    pub fn mju_zero4(res: *mut mjtNum);
}
unsafe extern "C" {
    pub fn mju_unit4(res: *mut mjtNum);
}
unsafe extern "C" {
    pub fn mju_copy4(res: *mut mjtNum, data: *const mjtNum);
}
unsafe extern "C" {
    pub fn mju_normalize4(vec: *mut mjtNum) -> mjtNum;
}
unsafe extern "C" {
    pub fn mju_zero(res: *mut mjtNum, n: ::std::os::raw::c_int);
}
unsafe extern "C" {
    pub fn mju_fill(res: *mut mjtNum, val: mjtNum, n: ::std::os::raw::c_int);
}
unsafe extern "C" {
    pub fn mju_copy(res: *mut mjtNum, vec: *const mjtNum, n: ::std::os::raw::c_int);
}
unsafe extern "C" {
    pub fn mju_sum(vec: *const mjtNum, n: ::std::os::raw::c_int) -> mjtNum;
}
unsafe extern "C" {
    pub fn mju_L1(vec: *const mjtNum, n: ::std::os::raw::c_int) -> mjtNum;
}
unsafe extern "C" {
    pub fn mju_scl(res: *mut mjtNum, vec: *const mjtNum, scl: mjtNum, n: ::std::os::raw::c_int);
}
unsafe extern "C" {
    pub fn mju_add(
        res: *mut mjtNum,
        vec1: *const mjtNum,
        vec2: *const mjtNum,
        n: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mju_sub(
        res: *mut mjtNum,
        vec1: *const mjtNum,
        vec2: *const mjtNum,
        n: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mju_addTo(res: *mut mjtNum, vec: *const mjtNum, n: ::std::os::raw::c_int);
}
unsafe extern "C" {
    pub fn mju_subFrom(res: *mut mjtNum, vec: *const mjtNum, n: ::std::os::raw::c_int);
}
unsafe extern "C" {
    pub fn mju_addToScl(
        res: *mut mjtNum,
        vec: *const mjtNum,
        scl: mjtNum,
        n: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mju_addScl(
        res: *mut mjtNum,
        vec1: *const mjtNum,
        vec2: *const mjtNum,
        scl: mjtNum,
        n: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mju_normalize(res: *mut mjtNum, n: ::std::os::raw::c_int) -> mjtNum;
}
unsafe extern "C" {
    pub fn mju_norm(res: *const mjtNum, n: ::std::os::raw::c_int) -> mjtNum;
}
unsafe extern "C" {
    pub fn mju_dot(vec1: *const mjtNum, vec2: *const mjtNum, n: ::std::os::raw::c_int) -> mjtNum;
}
unsafe extern "C" {
    pub fn mju_mulMatVec(
        res: *mut mjtNum,
        mat: *const mjtNum,
        vec: *const mjtNum,
        nr: ::std::os::raw::c_int,
        nc: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mju_mulMatTVec(
        res: *mut mjtNum,
        mat: *const mjtNum,
        vec: *const mjtNum,
        nr: ::std::os::raw::c_int,
        nc: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mju_mulVecMatVec(
        vec1: *const mjtNum,
        mat: *const mjtNum,
        vec2: *const mjtNum,
        n: ::std::os::raw::c_int,
    ) -> mjtNum;
}
unsafe extern "C" {
    pub fn mju_transpose(
        res: *mut mjtNum,
        mat: *const mjtNum,
        nr: ::std::os::raw::c_int,
        nc: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mju_symmetrize(res: *mut mjtNum, mat: *const mjtNum, n: ::std::os::raw::c_int);
}
unsafe extern "C" {
    pub fn mju_eye(mat: *mut mjtNum, n: ::std::os::raw::c_int);
}
unsafe extern "C" {
    pub fn mju_mulMatMat(
        res: *mut mjtNum,
        mat1: *const mjtNum,
        mat2: *const mjtNum,
        r1: ::std::os::raw::c_int,
        c1: ::std::os::raw::c_int,
        c2: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mju_mulMatMatT(
        res: *mut mjtNum,
        mat1: *const mjtNum,
        mat2: *const mjtNum,
        r1: ::std::os::raw::c_int,
        c1: ::std::os::raw::c_int,
        r2: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mju_mulMatTMat(
        res: *mut mjtNum,
        mat1: *const mjtNum,
        mat2: *const mjtNum,
        r1: ::std::os::raw::c_int,
        c1: ::std::os::raw::c_int,
        c2: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mju_sqrMatTD(
        res: *mut mjtNum,
        mat: *const mjtNum,
        diag: *const mjtNum,
        nr: ::std::os::raw::c_int,
        nc: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mju_transformSpatial(
        res: *mut mjtNum,
        vec: *const mjtNum,
        flg_force: ::std::os::raw::c_int,
        newpos: *const mjtNum,
        oldpos: *const mjtNum,
        rotnew2old: *const mjtNum,
    );
}
unsafe extern "C" {
    pub fn mju_dense2sparse(
        res: *mut mjtNum,
        mat: *const mjtNum,
        nr: ::std::os::raw::c_int,
        nc: ::std::os::raw::c_int,
        rownnz: *mut ::std::os::raw::c_int,
        rowadr: *mut ::std::os::raw::c_int,
        colind: *mut ::std::os::raw::c_int,
        nnz: ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mju_sparse2dense(
        res: *mut mjtNum,
        mat: *const mjtNum,
        nr: ::std::os::raw::c_int,
        nc: ::std::os::raw::c_int,
        rownnz: *const ::std::os::raw::c_int,
        rowadr: *const ::std::os::raw::c_int,
        colind: *const ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mju_rotVecQuat(res: *mut mjtNum, vec: *const mjtNum, quat: *const mjtNum);
}
unsafe extern "C" {
    pub fn mju_negQuat(res: *mut mjtNum, quat: *const mjtNum);
}
unsafe extern "C" {
    pub fn mju_mulQuat(res: *mut mjtNum, quat1: *const mjtNum, quat2: *const mjtNum);
}
unsafe extern "C" {
    pub fn mju_mulQuatAxis(res: *mut mjtNum, quat: *const mjtNum, axis: *const mjtNum);
}
unsafe extern "C" {
    pub fn mju_axisAngle2Quat(res: *mut mjtNum, axis: *const mjtNum, angle: mjtNum);
}
unsafe extern "C" {
    pub fn mju_quat2Vel(res: *mut mjtNum, quat: *const mjtNum, dt: mjtNum);
}
unsafe extern "C" {
    pub fn mju_subQuat(res: *mut mjtNum, qa: *const mjtNum, qb: *const mjtNum);
}
unsafe extern "C" {
    pub fn mju_quat2Mat(res: *mut mjtNum, quat: *const mjtNum);
}
unsafe extern "C" {
    pub fn mju_mat2Quat(quat: *mut mjtNum, mat: *const mjtNum);
}
unsafe extern "C" {
    pub fn mju_derivQuat(res: *mut mjtNum, quat: *const mjtNum, vel: *const mjtNum);
}
unsafe extern "C" {
    pub fn mju_quatIntegrate(quat: *mut mjtNum, vel: *const mjtNum, scale: mjtNum);
}
unsafe extern "C" {
    pub fn mju_quatZ2Vec(quat: *mut mjtNum, vec: *const mjtNum);
}
unsafe extern "C" {
    pub fn mju_mat2Rot(quat: *mut mjtNum, mat: *const mjtNum) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mju_euler2Quat(
        quat: *mut mjtNum,
        euler: *const mjtNum,
        seq: *const ::std::os::raw::c_char,
    );
}
unsafe extern "C" {
    pub fn mju_mulPose(
        posres: *mut mjtNum,
        quatres: *mut mjtNum,
        pos1: *const mjtNum,
        quat1: *const mjtNum,
        pos2: *const mjtNum,
        quat2: *const mjtNum,
    );
}
unsafe extern "C" {
    pub fn mju_negPose(
        posres: *mut mjtNum,
        quatres: *mut mjtNum,
        pos: *const mjtNum,
        quat: *const mjtNum,
    );
}
unsafe extern "C" {
    pub fn mju_trnVecPose(
        res: *mut mjtNum,
        pos: *const mjtNum,
        quat: *const mjtNum,
        vec: *const mjtNum,
    );
}
unsafe extern "C" {
    pub fn mju_cholFactor(
        mat: *mut mjtNum,
        n: ::std::os::raw::c_int,
        mindiag: mjtNum,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mju_cholSolve(
        res: *mut mjtNum,
        mat: *const mjtNum,
        vec: *const mjtNum,
        n: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mju_cholUpdate(
        mat: *mut mjtNum,
        x: *mut mjtNum,
        n: ::std::os::raw::c_int,
        flg_plus: ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mju_cholFactorBand(
        mat: *mut mjtNum,
        ntotal: ::std::os::raw::c_int,
        nband: ::std::os::raw::c_int,
        ndense: ::std::os::raw::c_int,
        diagadd: mjtNum,
        diagmul: mjtNum,
    ) -> mjtNum;
}
unsafe extern "C" {
    pub fn mju_cholSolveBand(
        res: *mut mjtNum,
        mat: *const mjtNum,
        vec: *const mjtNum,
        ntotal: ::std::os::raw::c_int,
        nband: ::std::os::raw::c_int,
        ndense: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mju_band2Dense(
        res: *mut mjtNum,
        mat: *const mjtNum,
        ntotal: ::std::os::raw::c_int,
        nband: ::std::os::raw::c_int,
        ndense: ::std::os::raw::c_int,
        flg_sym: mjtByte,
    );
}
unsafe extern "C" {
    pub fn mju_dense2Band(
        res: *mut mjtNum,
        mat: *const mjtNum,
        ntotal: ::std::os::raw::c_int,
        nband: ::std::os::raw::c_int,
        ndense: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mju_bandMulMatVec(
        res: *mut mjtNum,
        mat: *const mjtNum,
        vec: *const mjtNum,
        ntotal: ::std::os::raw::c_int,
        nband: ::std::os::raw::c_int,
        ndense: ::std::os::raw::c_int,
        nvec: ::std::os::raw::c_int,
        flg_sym: mjtByte,
    );
}
unsafe extern "C" {
    pub fn mju_bandDiag(
        i: ::std::os::raw::c_int,
        ntotal: ::std::os::raw::c_int,
        nband: ::std::os::raw::c_int,
        ndense: ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mju_eig3(
        eigval: *mut mjtNum,
        eigvec: *mut mjtNum,
        quat: *mut mjtNum,
        mat: *const mjtNum,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mju_boxQP(
        res: *mut mjtNum,
        R: *mut mjtNum,
        index: *mut ::std::os::raw::c_int,
        H: *const mjtNum,
        g: *const mjtNum,
        n: ::std::os::raw::c_int,
        lower: *const mjtNum,
        upper: *const mjtNum,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mju_boxQPmalloc(
        res: *mut *mut mjtNum,
        R: *mut *mut mjtNum,
        index: *mut *mut ::std::os::raw::c_int,
        H: *mut *mut mjtNum,
        g: *mut *mut mjtNum,
        n: ::std::os::raw::c_int,
        lower: *mut *mut mjtNum,
        upper: *mut *mut mjtNum,
    );
}
unsafe extern "C" {
    pub fn mju_muscleGain(
        len: mjtNum,
        vel: mjtNum,
        lengthrange: *const mjtNum,
        acc0: mjtNum,
        prm: *const mjtNum,
    ) -> mjtNum;
}
unsafe extern "C" {
    pub fn mju_muscleBias(
        len: mjtNum,
        lengthrange: *const mjtNum,
        acc0: mjtNum,
        prm: *const mjtNum,
    ) -> mjtNum;
}
unsafe extern "C" {
    pub fn mju_muscleDynamics(ctrl: mjtNum, act: mjtNum, prm: *const mjtNum) -> mjtNum;
}
unsafe extern "C" {
    pub fn mju_encodePyramid(
        pyramid: *mut mjtNum,
        force: *const mjtNum,
        mu: *const mjtNum,
        dim: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mju_decodePyramid(
        force: *mut mjtNum,
        pyramid: *const mjtNum,
        mu: *const mjtNum,
        dim: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mju_springDamper(
        pos0: mjtNum,
        vel0: mjtNum,
        Kp: mjtNum,
        Kv: mjtNum,
        dt: mjtNum,
    ) -> mjtNum;
}
unsafe extern "C" {
    pub fn mju_min(a: mjtNum, b: mjtNum) -> mjtNum;
}
unsafe extern "C" {
    pub fn mju_max(a: mjtNum, b: mjtNum) -> mjtNum;
}
unsafe extern "C" {
    pub fn mju_clip(x: mjtNum, min: mjtNum, max: mjtNum) -> mjtNum;
}
unsafe extern "C" {
    pub fn mju_sign(x: mjtNum) -> mjtNum;
}
unsafe extern "C" {
    pub fn mju_round(x: mjtNum) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mju_type2Str(type_: ::std::os::raw::c_int) -> *const ::std::os::raw::c_char;
}
unsafe extern "C" {
    pub fn mju_str2Type(str_: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mju_writeNumBytes(nbytes: usize) -> *const ::std::os::raw::c_char;
}
unsafe extern "C" {
    pub fn mju_warningText(
        warning: ::std::os::raw::c_int,
        info: usize,
    ) -> *const ::std::os::raw::c_char;
}
unsafe extern "C" {
    pub fn mju_isBad(x: mjtNum) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mju_isZero(vec: *const mjtNum, n: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mju_standardNormal(num2: *mut mjtNum) -> mjtNum;
}
unsafe extern "C" {
    pub fn mju_f2n(res: *mut mjtNum, vec: *const f32, n: ::std::os::raw::c_int);
}
unsafe extern "C" {
    pub fn mju_n2f(res: *mut f32, vec: *const mjtNum, n: ::std::os::raw::c_int);
}
unsafe extern "C" {
    pub fn mju_d2n(res: *mut mjtNum, vec: *const f64, n: ::std::os::raw::c_int);
}
unsafe extern "C" {
    pub fn mju_n2d(res: *mut f64, vec: *const mjtNum, n: ::std::os::raw::c_int);
}
unsafe extern "C" {
    pub fn mju_insertionSort(list: *mut mjtNum, n: ::std::os::raw::c_int);
}
unsafe extern "C" {
    pub fn mju_insertionSortInt(list: *mut ::std::os::raw::c_int, n: ::std::os::raw::c_int);
}
unsafe extern "C" {
    pub fn mju_Halton(index: ::std::os::raw::c_int, base: ::std::os::raw::c_int) -> mjtNum;
}
unsafe extern "C" {
    pub fn mju_strncpy(
        dst: *mut ::std::os::raw::c_char,
        src: *const ::std::os::raw::c_char,
        n: ::std::os::raw::c_int,
    ) -> *mut ::std::os::raw::c_char;
}
unsafe extern "C" {
    pub fn mju_sigmoid(x: mjtNum) -> mjtNum;
}
unsafe extern "C" {
    pub fn mjc_getSDF(m: *const mjModel, id: ::std::os::raw::c_int) -> *const mjpPlugin;
}
unsafe extern "C" {
    pub fn mjc_distance(
        m: *const mjModel,
        d: *const mjData,
        s: *const mjSDF,
        x: *const mjtNum,
    ) -> mjtNum;
}
unsafe extern "C" {
    pub fn mjc_gradient(
        m: *const mjModel,
        d: *const mjData,
        s: *const mjSDF,
        gradient: *mut mjtNum,
        x: *const mjtNum,
    );
}
unsafe extern "C" {
    pub fn mjd_transitionFD(
        m: *const mjModel,
        d: *mut mjData,
        eps: mjtNum,
        flg_centered: mjtByte,
        A: *mut mjtNum,
        B: *mut mjtNum,
        C: *mut mjtNum,
        D: *mut mjtNum,
    );
}
unsafe extern "C" {
    pub fn mjd_inverseFD(
        m: *const mjModel,
        d: *mut mjData,
        eps: mjtNum,
        flg_actuation: mjtByte,
        DfDq: *mut mjtNum,
        DfDv: *mut mjtNum,
        DfDa: *mut mjtNum,
        DsDq: *mut mjtNum,
        DsDv: *mut mjtNum,
        DsDa: *mut mjtNum,
        DmDq: *mut mjtNum,
    );
}
unsafe extern "C" {
    pub fn mjd_subQuat(qa: *const mjtNum, qb: *const mjtNum, Da: *mut mjtNum, Db: *mut mjtNum);
}
unsafe extern "C" {
    pub fn mjd_quatIntegrate(
        vel: *const mjtNum,
        scale: mjtNum,
        Dquat: *mut mjtNum,
        Dvel: *mut mjtNum,
        Dscale: *mut mjtNum,
    );
}
unsafe extern "C" {
    pub fn mjp_defaultPlugin(plugin: *mut mjpPlugin);
}
unsafe extern "C" {
    pub fn mjp_registerPlugin(plugin: *const mjpPlugin) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mjp_pluginCount() -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mjp_getPlugin(
        name: *const ::std::os::raw::c_char,
        slot: *mut ::std::os::raw::c_int,
    ) -> *const mjpPlugin;
}
unsafe extern "C" {
    pub fn mjp_getPluginAtSlot(slot: ::std::os::raw::c_int) -> *const mjpPlugin;
}
unsafe extern "C" {
    pub fn mjp_defaultResourceProvider(provider: *mut mjpResourceProvider);
}
unsafe extern "C" {
    pub fn mjp_registerResourceProvider(
        provider: *const mjpResourceProvider,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mjp_resourceProviderCount() -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mjp_getResourceProvider(
        resource_name: *const ::std::os::raw::c_char,
    ) -> *const mjpResourceProvider;
}
unsafe extern "C" {
    pub fn mjp_getResourceProviderAtSlot(slot: ::std::os::raw::c_int)
        -> *const mjpResourceProvider;
}
unsafe extern "C" {
    pub fn mju_threadPoolCreate(number_of_threads: usize) -> *mut mjThreadPool;
}
unsafe extern "C" {
    pub fn mju_bindThreadPool(d: *mut mjData, thread_pool: *mut ::std::os::raw::c_void);
}
unsafe extern "C" {
    pub fn mju_threadPoolEnqueue(thread_pool: *mut mjThreadPool, task: *mut mjTask);
}
unsafe extern "C" {
    pub fn mju_threadPoolDestroy(thread_pool: *mut mjThreadPool);
}
unsafe extern "C" {
    pub fn mju_defaultTask(task: *mut mjTask);
}
unsafe extern "C" {
    pub fn mju_taskJoin(task: *mut mjTask);
}
unsafe extern "C" {
    pub fn mjs_attach(
        parent: *mut mjsElement,
        child: *const mjsElement,
        prefix: *const ::std::os::raw::c_char,
        suffix: *const ::std::os::raw::c_char,
    ) -> *mut mjsElement;
}
unsafe extern "C" {
    pub fn mjs_addBody(body: *mut mjsBody, def: *const mjsDefault) -> *mut mjsBody;
}
unsafe extern "C" {
    pub fn mjs_addSite(body: *mut mjsBody, def: *const mjsDefault) -> *mut mjsSite;
}
unsafe extern "C" {
    pub fn mjs_addJoint(body: *mut mjsBody, def: *const mjsDefault) -> *mut mjsJoint;
}
unsafe extern "C" {
    pub fn mjs_addFreeJoint(body: *mut mjsBody) -> *mut mjsJoint;
}
unsafe extern "C" {
    pub fn mjs_addGeom(body: *mut mjsBody, def: *const mjsDefault) -> *mut mjsGeom;
}
unsafe extern "C" {
    pub fn mjs_addCamera(body: *mut mjsBody, def: *const mjsDefault) -> *mut mjsCamera;
}
unsafe extern "C" {
    pub fn mjs_addLight(body: *mut mjsBody, def: *const mjsDefault) -> *mut mjsLight;
}
unsafe extern "C" {
    pub fn mjs_addFrame(body: *mut mjsBody, parentframe: *mut mjsFrame) -> *mut mjsFrame;
}
unsafe extern "C" {
    pub fn mjs_delete(spec: *mut mjSpec, element: *mut mjsElement) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mjs_addActuator(s: *mut mjSpec, def: *const mjsDefault) -> *mut mjsActuator;
}
unsafe extern "C" {
    pub fn mjs_addSensor(s: *mut mjSpec) -> *mut mjsSensor;
}
unsafe extern "C" {
    pub fn mjs_addFlex(s: *mut mjSpec) -> *mut mjsFlex;
}
unsafe extern "C" {
    pub fn mjs_addPair(s: *mut mjSpec, def: *const mjsDefault) -> *mut mjsPair;
}
unsafe extern "C" {
    pub fn mjs_addExclude(s: *mut mjSpec) -> *mut mjsExclude;
}
unsafe extern "C" {
    pub fn mjs_addEquality(s: *mut mjSpec, def: *const mjsDefault) -> *mut mjsEquality;
}
unsafe extern "C" {
    pub fn mjs_addTendon(s: *mut mjSpec, def: *const mjsDefault) -> *mut mjsTendon;
}
unsafe extern "C" {
    pub fn mjs_wrapSite(
        tendon: *mut mjsTendon,
        name: *const ::std::os::raw::c_char,
    ) -> *mut mjsWrap;
}
unsafe extern "C" {
    pub fn mjs_wrapGeom(
        tendon: *mut mjsTendon,
        name: *const ::std::os::raw::c_char,
        sidesite: *const ::std::os::raw::c_char,
    ) -> *mut mjsWrap;
}
unsafe extern "C" {
    pub fn mjs_wrapJoint(
        tendon: *mut mjsTendon,
        name: *const ::std::os::raw::c_char,
        coef: f64,
    ) -> *mut mjsWrap;
}
unsafe extern "C" {
    pub fn mjs_wrapPulley(tendon: *mut mjsTendon, divisor: f64) -> *mut mjsWrap;
}
unsafe extern "C" {
    pub fn mjs_addNumeric(s: *mut mjSpec) -> *mut mjsNumeric;
}
unsafe extern "C" {
    pub fn mjs_addText(s: *mut mjSpec) -> *mut mjsText;
}
unsafe extern "C" {
    pub fn mjs_addTuple(s: *mut mjSpec) -> *mut mjsTuple;
}
unsafe extern "C" {
    pub fn mjs_addKey(s: *mut mjSpec) -> *mut mjsKey;
}
unsafe extern "C" {
    pub fn mjs_addPlugin(s: *mut mjSpec) -> *mut mjsPlugin;
}
unsafe extern "C" {
    pub fn mjs_addDefault(
        s: *mut mjSpec,
        classname: *const ::std::os::raw::c_char,
        parent: *const mjsDefault,
    ) -> *mut mjsDefault;
}
unsafe extern "C" {
    pub fn mjs_setToMotor(actuator: *mut mjsActuator) -> *const ::std::os::raw::c_char;
}
unsafe extern "C" {
    pub fn mjs_setToPosition(
        actuator: *mut mjsActuator,
        kp: f64,
        kv: *mut f64,
        dampratio: *mut f64,
        timeconst: *mut f64,
        inheritrange: f64,
    ) -> *const ::std::os::raw::c_char;
}
unsafe extern "C" {
    pub fn mjs_setToIntVelocity(
        actuator: *mut mjsActuator,
        kp: f64,
        kv: *mut f64,
        dampratio: *mut f64,
        timeconst: *mut f64,
        inheritrange: f64,
    ) -> *const ::std::os::raw::c_char;
}
unsafe extern "C" {
    pub fn mjs_setToVelocity(actuator: *mut mjsActuator, kv: f64) -> *const ::std::os::raw::c_char;
}
unsafe extern "C" {
    pub fn mjs_setToDamper(actuator: *mut mjsActuator, kv: f64) -> *const ::std::os::raw::c_char;
}
unsafe extern "C" {
    pub fn mjs_setToCylinder(
        actuator: *mut mjsActuator,
        timeconst: f64,
        bias: f64,
        area: f64,
        diameter: f64,
    ) -> *const ::std::os::raw::c_char;
}
unsafe extern "C" {
    pub fn mjs_setToMuscle(
        actuator: *mut mjsActuator,
        timeconst: *mut f64,
        tausmooth: f64,
        range: *mut f64,
        force: f64,
        scale: f64,
        lmin: f64,
        lmax: f64,
        vmax: f64,
        fpmax: f64,
        fvmax: f64,
    ) -> *const ::std::os::raw::c_char;
}
unsafe extern "C" {
    pub fn mjs_setToAdhesion(
        actuator: *mut mjsActuator,
        gain: f64,
    ) -> *const ::std::os::raw::c_char;
}
unsafe extern "C" {
    pub fn mjs_addMesh(s: *mut mjSpec, def: *const mjsDefault) -> *mut mjsMesh;
}
unsafe extern "C" {
    pub fn mjs_addHField(s: *mut mjSpec) -> *mut mjsHField;
}
unsafe extern "C" {
    pub fn mjs_addSkin(s: *mut mjSpec) -> *mut mjsSkin;
}
unsafe extern "C" {
    pub fn mjs_addTexture(s: *mut mjSpec) -> *mut mjsTexture;
}
unsafe extern "C" {
    pub fn mjs_addMaterial(s: *mut mjSpec, def: *const mjsDefault) -> *mut mjsMaterial;
}
unsafe extern "C" {
    pub fn mjs_makeMesh(
        mesh: *mut mjsMesh,
        builtin: mjtMeshBuiltin,
        params: *mut f64,
        nparams: ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mjs_getSpec(element: *mut mjsElement) -> *mut mjSpec;
}
unsafe extern "C" {
    pub fn mjs_findSpec(spec: *mut mjSpec, name: *const ::std::os::raw::c_char) -> *mut mjSpec;
}
unsafe extern "C" {
    pub fn mjs_findBody(s: *mut mjSpec, name: *const ::std::os::raw::c_char) -> *mut mjsBody;
}
unsafe extern "C" {
    pub fn mjs_findElement(
        s: *mut mjSpec,
        type_: mjtObj,
        name: *const ::std::os::raw::c_char,
    ) -> *mut mjsElement;
}
unsafe extern "C" {
    pub fn mjs_findChild(body: *mut mjsBody, name: *const ::std::os::raw::c_char) -> *mut mjsBody;
}
unsafe extern "C" {
    pub fn mjs_getParent(element: *mut mjsElement) -> *mut mjsBody;
}
unsafe extern "C" {
    pub fn mjs_getFrame(element: *mut mjsElement) -> *mut mjsFrame;
}
unsafe extern "C" {
    pub fn mjs_findFrame(s: *mut mjSpec, name: *const ::std::os::raw::c_char) -> *mut mjsFrame;
}
unsafe extern "C" {
    pub fn mjs_getDefault(element: *mut mjsElement) -> *mut mjsDefault;
}
unsafe extern "C" {
    pub fn mjs_findDefault(
        s: *mut mjSpec,
        classname: *const ::std::os::raw::c_char,
    ) -> *mut mjsDefault;
}
unsafe extern "C" {
    pub fn mjs_getSpecDefault(s: *mut mjSpec) -> *mut mjsDefault;
}
unsafe extern "C" {
    pub fn mjs_getId(element: *mut mjsElement) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mjs_firstChild(
        body: *mut mjsBody,
        type_: mjtObj,
        recurse: ::std::os::raw::c_int,
    ) -> *mut mjsElement;
}
unsafe extern "C" {
    pub fn mjs_nextChild(
        body: *mut mjsBody,
        child: *mut mjsElement,
        recurse: ::std::os::raw::c_int,
    ) -> *mut mjsElement;
}
unsafe extern "C" {
    pub fn mjs_firstElement(s: *mut mjSpec, type_: mjtObj) -> *mut mjsElement;
}
unsafe extern "C" {
    pub fn mjs_nextElement(s: *mut mjSpec, element: *mut mjsElement) -> *mut mjsElement;
}
unsafe extern "C" {
    pub fn mjs_setName(
        element: *mut mjsElement,
        name: *const ::std::os::raw::c_char,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mjs_setBuffer(
        dest: *mut mjByteVec,
        array: *const ::std::os::raw::c_void,
        size: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mjs_setString(dest: *mut mjString, text: *const ::std::os::raw::c_char);
}
unsafe extern "C" {
    pub fn mjs_setStringVec(dest: *mut mjStringVec, text: *const ::std::os::raw::c_char);
}
unsafe extern "C" {
    pub fn mjs_setInStringVec(
        dest: *mut mjStringVec,
        i: ::std::os::raw::c_int,
        text: *const ::std::os::raw::c_char,
    ) -> mjtByte;
}
unsafe extern "C" {
    pub fn mjs_appendString(dest: *mut mjStringVec, text: *const ::std::os::raw::c_char);
}
unsafe extern "C" {
    pub fn mjs_setInt(
        dest: *mut mjIntVec,
        array: *const ::std::os::raw::c_int,
        size: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mjs_appendIntVec(
        dest: *mut mjIntVecVec,
        array: *const ::std::os::raw::c_int,
        size: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mjs_setFloat(dest: *mut mjFloatVec, array: *const f32, size: ::std::os::raw::c_int);
}
unsafe extern "C" {
    pub fn mjs_appendFloatVec(
        dest: *mut mjFloatVecVec,
        array: *const f32,
        size: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    pub fn mjs_setDouble(dest: *mut mjDoubleVec, array: *const f64, size: ::std::os::raw::c_int);
}
unsafe extern "C" {
    pub fn mjs_setPluginAttributes(plugin: *mut mjsPlugin, attributes: *mut ::std::os::raw::c_void);
}
unsafe extern "C" {
    pub fn mjs_getName(element: *mut mjsElement) -> *mut mjString;
}
unsafe extern "C" {
    pub fn mjs_getString(source: *const mjString) -> *const ::std::os::raw::c_char;
}
unsafe extern "C" {
    pub fn mjs_getDouble(
        source: *const mjDoubleVec,
        size: *mut ::std::os::raw::c_int,
    ) -> *const f64;
}
unsafe extern "C" {
    pub fn mjs_getPluginAttributes(plugin: *const mjsPlugin) -> *const ::std::os::raw::c_void;
}
unsafe extern "C" {
    pub fn mjs_setDefault(element: *mut mjsElement, def: *const mjsDefault);
}
unsafe extern "C" {
    pub fn mjs_setFrame(dest: *mut mjsElement, frame: *mut mjsFrame) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mjs_resolveOrientation(
        quat: *mut f64,
        degree: mjtByte,
        sequence: *const ::std::os::raw::c_char,
        orientation: *const mjsOrientation,
    ) -> *const ::std::os::raw::c_char;
}
unsafe extern "C" {
    pub fn mjs_bodyToFrame(body: *mut *mut mjsBody) -> *mut mjsFrame;
}
unsafe extern "C" {
    pub fn mjs_setUserValue(
        element: *mut mjsElement,
        key: *const ::std::os::raw::c_char,
        data: *const ::std::os::raw::c_void,
    );
}
unsafe extern "C" {
    pub fn mjs_setUserValueWithCleanup(
        element: *mut mjsElement,
        key: *const ::std::os::raw::c_char,
        data: *const ::std::os::raw::c_void,
        cleanup: ::std::option::Option<unsafe extern "C" fn(arg1: *const ::std::os::raw::c_void)>,
    );
}
unsafe extern "C" {
    pub fn mjs_getUserValue(
        element: *mut mjsElement,
        key: *const ::std::os::raw::c_char,
    ) -> *const ::std::os::raw::c_void;
}
unsafe extern "C" {
    pub fn mjs_deleteUserValue(element: *mut mjsElement, key: *const ::std::os::raw::c_char);
}
unsafe extern "C" {
    pub fn mjs_sensorDim(sensor: *const mjsSensor) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    pub fn mjs_defaultSpec(spec: *mut mjSpec);
}
unsafe extern "C" {
    pub fn mjs_defaultOrientation(orient: *mut mjsOrientation);
}
unsafe extern "C" {
    pub fn mjs_defaultBody(body: *mut mjsBody);
}
unsafe extern "C" {
    pub fn mjs_defaultFrame(frame: *mut mjsFrame);
}
unsafe extern "C" {
    pub fn mjs_defaultJoint(joint: *mut mjsJoint);
}
unsafe extern "C" {
    pub fn mjs_defaultGeom(geom: *mut mjsGeom);
}
unsafe extern "C" {
    pub fn mjs_defaultSite(site: *mut mjsSite);
}
unsafe extern "C" {
    pub fn mjs_defaultCamera(camera: *mut mjsCamera);
}
unsafe extern "C" {
    pub fn mjs_defaultLight(light: *mut mjsLight);
}
unsafe extern "C" {
    pub fn mjs_defaultFlex(flex: *mut mjsFlex);
}
unsafe extern "C" {
    pub fn mjs_defaultMesh(mesh: *mut mjsMesh);
}
unsafe extern "C" {
    pub fn mjs_defaultHField(hfield: *mut mjsHField);
}
unsafe extern "C" {
    pub fn mjs_defaultSkin(skin: *mut mjsSkin);
}
unsafe extern "C" {
    pub fn mjs_defaultTexture(texture: *mut mjsTexture);
}
unsafe extern "C" {
    pub fn mjs_defaultMaterial(material: *mut mjsMaterial);
}
unsafe extern "C" {
    pub fn mjs_defaultPair(pair: *mut mjsPair);
}
unsafe extern "C" {
    pub fn mjs_defaultEquality(equality: *mut mjsEquality);
}
unsafe extern "C" {
    pub fn mjs_defaultTendon(tendon: *mut mjsTendon);
}
unsafe extern "C" {
    pub fn mjs_defaultActuator(actuator: *mut mjsActuator);
}
unsafe extern "C" {
    pub fn mjs_defaultSensor(sensor: *mut mjsSensor);
}
unsafe extern "C" {
    pub fn mjs_defaultNumeric(numeric: *mut mjsNumeric);
}
unsafe extern "C" {
    pub fn mjs_defaultText(text: *mut mjsText);
}
unsafe extern "C" {
    pub fn mjs_defaultTuple(tuple: *mut mjsTuple);
}
unsafe extern "C" {
    pub fn mjs_defaultKey(key: *mut mjsKey);
}
unsafe extern "C" {
    pub fn mjs_defaultPlugin(plugin: *mut mjsPlugin);
}
unsafe extern "C" {
    pub fn mjs_asBody(element: *mut mjsElement) -> *mut mjsBody;
}
unsafe extern "C" {
    pub fn mjs_asGeom(element: *mut mjsElement) -> *mut mjsGeom;
}
unsafe extern "C" {
    pub fn mjs_asJoint(element: *mut mjsElement) -> *mut mjsJoint;
}
unsafe extern "C" {
    pub fn mjs_asSite(element: *mut mjsElement) -> *mut mjsSite;
}
unsafe extern "C" {
    pub fn mjs_asCamera(element: *mut mjsElement) -> *mut mjsCamera;
}
unsafe extern "C" {
    pub fn mjs_asLight(element: *mut mjsElement) -> *mut mjsLight;
}
unsafe extern "C" {
    pub fn mjs_asFrame(element: *mut mjsElement) -> *mut mjsFrame;
}
unsafe extern "C" {
    pub fn mjs_asActuator(element: *mut mjsElement) -> *mut mjsActuator;
}
unsafe extern "C" {
    pub fn mjs_asSensor(element: *mut mjsElement) -> *mut mjsSensor;
}
unsafe extern "C" {
    pub fn mjs_asFlex(element: *mut mjsElement) -> *mut mjsFlex;
}
unsafe extern "C" {
    pub fn mjs_asPair(element: *mut mjsElement) -> *mut mjsPair;
}
unsafe extern "C" {
    pub fn mjs_asEquality(element: *mut mjsElement) -> *mut mjsEquality;
}
unsafe extern "C" {
    pub fn mjs_asExclude(element: *mut mjsElement) -> *mut mjsExclude;
}
unsafe extern "C" {
    pub fn mjs_asTendon(element: *mut mjsElement) -> *mut mjsTendon;
}
unsafe extern "C" {
    pub fn mjs_asNumeric(element: *mut mjsElement) -> *mut mjsNumeric;
}
unsafe extern "C" {
    pub fn mjs_asText(element: *mut mjsElement) -> *mut mjsText;
}
unsafe extern "C" {
    pub fn mjs_asTuple(element: *mut mjsElement) -> *mut mjsTuple;
}
unsafe extern "C" {
    pub fn mjs_asKey(element: *mut mjsElement) -> *mut mjsKey;
}
unsafe extern "C" {
    pub fn mjs_asMesh(element: *mut mjsElement) -> *mut mjsMesh;
}
unsafe extern "C" {
    pub fn mjs_asHField(element: *mut mjsElement) -> *mut mjsHField;
}
unsafe extern "C" {
    pub fn mjs_asSkin(element: *mut mjsElement) -> *mut mjsSkin;
}
unsafe extern "C" {
    pub fn mjs_asTexture(element: *mut mjsElement) -> *mut mjsTexture;
}
unsafe extern "C" {
    pub fn mjs_asMaterial(element: *mut mjsElement) -> *mut mjsMaterial;
}
unsafe extern "C" {
    pub fn mjs_asPlugin(element: *mut mjsElement) -> *mut mjsPlugin;
}
#[repr(C)]
pub struct mujoco_PlatformUIAdapter__bindgen_vtable(::std::os::raw::c_void);
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mujoco_PlatformUIAdapter {
    pub vtable_: *const mujoco_PlatformUIAdapter__bindgen_vtable,
    pub state_: mjuiState,
    pub last_key_: ::std::os::raw::c_int,
    pub event_callback_: ::std::option::Option<unsafe extern "C" fn(arg1: *mut mjuiState)>,
    pub layout_callback_: ::std::option::Option<unsafe extern "C" fn(arg1: *mut mjuiState)>,
    pub con_: mjrContext,
    pub last_model_: *const mjModel,
    pub last_fontscale_: ::std::os::raw::c_int,
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco17PlatformUIAdapter14FreeMjrContextEv"]
    pub fn mujoco_PlatformUIAdapter_FreeMjrContext(this: *mut mujoco_PlatformUIAdapter);
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco17PlatformUIAdapter11OnFilesDropEiPPKc"]
    pub fn mujoco_PlatformUIAdapter_OnFilesDrop(
        this: *mut mujoco_PlatformUIAdapter,
        count: ::std::os::raw::c_int,
        paths: *mut *const ::std::os::raw::c_char,
    );
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco17PlatformUIAdapter13OnMouseButtonEii"]
    pub fn mujoco_PlatformUIAdapter_OnMouseButton(
        this: *mut mujoco_PlatformUIAdapter,
        button: ::std::os::raw::c_int,
        act: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco17PlatformUIAdapter11OnMouseMoveEdd"]
    pub fn mujoco_PlatformUIAdapter_OnMouseMove(
        this: *mut mujoco_PlatformUIAdapter,
        x: f64,
        y: f64,
    );
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco17PlatformUIAdapter8OnScrollEdd"]
    pub fn mujoco_PlatformUIAdapter_OnScroll(
        this: *mut mujoco_PlatformUIAdapter,
        xoffset: f64,
        yoffset: f64,
    );
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco17PlatformUIAdapter15OnWindowRefreshEv"]
    pub fn mujoco_PlatformUIAdapter_OnWindowRefresh(this: *mut mujoco_PlatformUIAdapter);
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco17PlatformUIAdapter14OnWindowResizeEii"]
    pub fn mujoco_PlatformUIAdapter_OnWindowResize(
        this: *mut mujoco_PlatformUIAdapter,
        width: ::std::os::raw::c_int,
        height: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco17PlatformUIAdapterC2Ev"]
    pub fn mujoco_PlatformUIAdapter_PlatformUIAdapter(this: *mut mujoco_PlatformUIAdapter);
}
impl mujoco_PlatformUIAdapter {
    #[inline]
    pub unsafe fn FreeMjrContext(&mut self) {
        mujoco_PlatformUIAdapter_FreeMjrContext(self)
    }
    #[inline]
    pub unsafe fn OnFilesDrop(
        &mut self,
        count: ::std::os::raw::c_int,
        paths: *mut *const ::std::os::raw::c_char,
    ) {
        mujoco_PlatformUIAdapter_OnFilesDrop(self, count, paths)
    }
    #[inline]
    pub unsafe fn OnMouseButton(
        &mut self,
        button: ::std::os::raw::c_int,
        act: ::std::os::raw::c_int,
    ) {
        mujoco_PlatformUIAdapter_OnMouseButton(self, button, act)
    }
    #[inline]
    pub unsafe fn OnMouseMove(&mut self, x: f64, y: f64) {
        mujoco_PlatformUIAdapter_OnMouseMove(self, x, y)
    }
    #[inline]
    pub unsafe fn OnScroll(&mut self, xoffset: f64, yoffset: f64) {
        mujoco_PlatformUIAdapter_OnScroll(self, xoffset, yoffset)
    }
    #[inline]
    pub unsafe fn OnWindowRefresh(&mut self) {
        mujoco_PlatformUIAdapter_OnWindowRefresh(self)
    }
    #[inline]
    pub unsafe fn OnWindowResize(
        &mut self,
        width: ::std::os::raw::c_int,
        height: ::std::os::raw::c_int,
    ) {
        mujoco_PlatformUIAdapter_OnWindowResize(self, width, height)
    }
    #[inline]
    pub unsafe fn new() -> Self {
        let mut __bindgen_tmp = ::std::mem::MaybeUninit::uninit();
        mujoco_PlatformUIAdapter_PlatformUIAdapter(__bindgen_tmp.as_mut_ptr());
        __bindgen_tmp.assume_init()
    }
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco17PlatformUIAdapter17RefreshMjrContextEPK8mjModel_i"]
    pub fn mujoco_PlatformUIAdapter_RefreshMjrContext(
        this: *mut ::std::os::raw::c_void,
        m: *const mjModel,
        fontscale: ::std::os::raw::c_int,
    ) -> bool;
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco17PlatformUIAdapter17EnsureContextSizeEv"]
    pub fn mujoco_PlatformUIAdapter_EnsureContextSize(this: *mut ::std::os::raw::c_void) -> bool;
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco17PlatformUIAdapter5OnKeyEiii"]
    pub fn mujoco_PlatformUIAdapter_OnKey(
        this: *mut ::std::os::raw::c_void,
        key: ::std::os::raw::c_int,
        scancode: ::std::os::raw::c_int,
        act: ::std::os::raw::c_int,
    );
}
#[repr(C)]
pub struct mujoco_GlfwAdapter__bindgen_vtable(::std::os::raw::c_void);
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mujoco_GlfwAdapter {
    pub vtable_: *const mujoco_GlfwAdapter__bindgen_vtable,
    pub state_: mjuiState,
    pub last_key_: ::std::os::raw::c_int,
    pub event_callback_: ::std::option::Option<unsafe extern "C" fn(arg1: *mut mjuiState)>,
    pub layout_callback_: ::std::option::Option<unsafe extern "C" fn(arg1: *mut mjuiState)>,
    pub con_: mjrContext,
    pub last_model_: *const mjModel,
    pub last_fontscale_: ::std::os::raw::c_int,
    pub vidmode_: GLFWvidmode,
    pub window_: *mut GLFWwindow,
    pub window_pos_: __BindgenOpaqueArray<u32, 2usize>,
    pub window_size_: __BindgenOpaqueArray<u32, 2usize>,
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter11MakeCurrentEv"]
    pub fn mujoco_GlfwAdapter_MakeCurrent(this: *mut mujoco_GlfwAdapter);
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter17GetCursorPositionEv"]
    pub fn mujoco_GlfwAdapter_GetCursorPosition(this: *const mujoco_GlfwAdapter) -> u8;
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter23GetDisplayPixelsPerInchEv"]
    pub fn mujoco_GlfwAdapter_GetDisplayPixelsPerInch(this: *const mujoco_GlfwAdapter) -> f64;
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter18GetFramebufferSizeEv"]
    pub fn mujoco_GlfwAdapter_GetFramebufferSize(
        this: *const mujoco_GlfwAdapter,
    ) -> __BindgenOpaqueArray<u32, 2usize>;
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter13GetWindowSizeEv"]
    pub fn mujoco_GlfwAdapter_GetWindowSize(
        this: *const mujoco_GlfwAdapter,
    ) -> __BindgenOpaqueArray<u32, 2usize>;
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter16IsGPUAcceleratedEv"]
    pub fn mujoco_GlfwAdapter_IsGPUAccelerated(this: *const mujoco_GlfwAdapter) -> bool;
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter10PollEventsEv"]
    pub fn mujoco_GlfwAdapter_PollEvents(this: *mut mujoco_GlfwAdapter);
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter18SetClipboardStringEPKc"]
    pub fn mujoco_GlfwAdapter_SetClipboardString(
        this: *mut mujoco_GlfwAdapter,
        text: *const ::std::os::raw::c_char,
    );
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter8SetVSyncEb"]
    pub fn mujoco_GlfwAdapter_SetVSync(this: *mut mujoco_GlfwAdapter, enabled: bool);
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter14SetWindowTitleEPKc"]
    pub fn mujoco_GlfwAdapter_SetWindowTitle(
        this: *mut mujoco_GlfwAdapter,
        title: *const ::std::os::raw::c_char,
    );
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter17ShouldCloseWindowEv"]
    pub fn mujoco_GlfwAdapter_ShouldCloseWindow(this: *const mujoco_GlfwAdapter) -> bool;
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter11SwapBuffersEv"]
    pub fn mujoco_GlfwAdapter_SwapBuffers(this: *mut mujoco_GlfwAdapter);
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter16ToggleFullscreenEv"]
    pub fn mujoco_GlfwAdapter_ToggleFullscreen(this: *mut mujoco_GlfwAdapter);
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter24IsLeftMouseButtonPressedEv"]
    pub fn mujoco_GlfwAdapter_IsLeftMouseButtonPressed(this: *const mujoco_GlfwAdapter) -> bool;
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter26IsMiddleMouseButtonPressedEv"]
    pub fn mujoco_GlfwAdapter_IsMiddleMouseButtonPressed(this: *const mujoco_GlfwAdapter) -> bool;
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter25IsRightMouseButtonPressedEv"]
    pub fn mujoco_GlfwAdapter_IsRightMouseButtonPressed(this: *const mujoco_GlfwAdapter) -> bool;
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter15IsAltKeyPressedEv"]
    pub fn mujoco_GlfwAdapter_IsAltKeyPressed(this: *const mujoco_GlfwAdapter) -> bool;
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter16IsCtrlKeyPressedEv"]
    pub fn mujoco_GlfwAdapter_IsCtrlKeyPressed(this: *const mujoco_GlfwAdapter) -> bool;
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter17IsShiftKeyPressedEv"]
    pub fn mujoco_GlfwAdapter_IsShiftKeyPressed(this: *const mujoco_GlfwAdapter) -> bool;
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter22IsMouseButtonDownEventEi"]
    pub fn mujoco_GlfwAdapter_IsMouseButtonDownEvent(
        this: *const mujoco_GlfwAdapter,
        act: ::std::os::raw::c_int,
    ) -> bool;
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter14IsKeyDownEventEi"]
    pub fn mujoco_GlfwAdapter_IsKeyDownEvent(
        this: *const mujoco_GlfwAdapter,
        act: ::std::os::raw::c_int,
    ) -> bool;
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter16TranslateKeyCodeEi"]
    pub fn mujoco_GlfwAdapter_TranslateKeyCode(
        this: *const mujoco_GlfwAdapter,
        key: ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter20TranslateMouseButtonEi"]
    pub fn mujoco_GlfwAdapter_TranslateMouseButton(
        this: *const mujoco_GlfwAdapter,
        button: ::std::os::raw::c_int,
    ) -> mjtButton;
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter14FreeMjrContextEv"]
    pub fn mujoco_GlfwAdapter_FreeMjrContext(this: *mut mujoco_GlfwAdapter);
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter11OnFilesDropEiPPKc"]
    pub fn mujoco_GlfwAdapter_OnFilesDrop(
        this: *mut mujoco_GlfwAdapter,
        count: ::std::os::raw::c_int,
        paths: *mut *const ::std::os::raw::c_char,
    );
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter13OnMouseButtonEii"]
    pub fn mujoco_GlfwAdapter_OnMouseButton(
        this: *mut mujoco_GlfwAdapter,
        button: ::std::os::raw::c_int,
        act: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter11OnMouseMoveEdd"]
    pub fn mujoco_GlfwAdapter_OnMouseMove(this: *mut mujoco_GlfwAdapter, x: f64, y: f64);
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter8OnScrollEdd"]
    pub fn mujoco_GlfwAdapter_OnScroll(this: *mut mujoco_GlfwAdapter, xoffset: f64, yoffset: f64);
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter15OnWindowRefreshEv"]
    pub fn mujoco_GlfwAdapter_OnWindowRefresh(this: *mut mujoco_GlfwAdapter);
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter14OnWindowResizeEii"]
    pub fn mujoco_GlfwAdapter_OnWindowResize(
        this: *mut mujoco_GlfwAdapter,
        width: ::std::os::raw::c_int,
        height: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapterC1Ev"]
    pub fn mujoco_GlfwAdapter_GlfwAdapter(this: *mut mujoco_GlfwAdapter);
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapterD1Ev"]
    pub fn mujoco_GlfwAdapter_GlfwAdapter_destructor(this: *mut mujoco_GlfwAdapter);
}
impl mujoco_GlfwAdapter {
    #[inline]
    pub unsafe fn MakeCurrent(&mut self) {
        mujoco_GlfwAdapter_MakeCurrent(self)
    }
    #[inline]
    pub unsafe fn GetCursorPosition(&self) -> u8 {
        mujoco_GlfwAdapter_GetCursorPosition(self)
    }
    #[inline]
    pub unsafe fn GetDisplayPixelsPerInch(&self) -> f64 {
        mujoco_GlfwAdapter_GetDisplayPixelsPerInch(self)
    }
    #[inline]
    pub unsafe fn GetFramebufferSize(&self) -> __BindgenOpaqueArray<u32, 2usize> {
        mujoco_GlfwAdapter_GetFramebufferSize(self)
    }
    #[inline]
    pub unsafe fn GetWindowSize(&self) -> __BindgenOpaqueArray<u32, 2usize> {
        mujoco_GlfwAdapter_GetWindowSize(self)
    }
    #[inline]
    pub unsafe fn IsGPUAccelerated(&self) -> bool {
        mujoco_GlfwAdapter_IsGPUAccelerated(self)
    }
    #[inline]
    pub unsafe fn PollEvents(&mut self) {
        mujoco_GlfwAdapter_PollEvents(self)
    }
    #[inline]
    pub unsafe fn SetClipboardString(&mut self, text: *const ::std::os::raw::c_char) {
        mujoco_GlfwAdapter_SetClipboardString(self, text)
    }
    #[inline]
    pub unsafe fn SetVSync(&mut self, enabled: bool) {
        mujoco_GlfwAdapter_SetVSync(self, enabled)
    }
    #[inline]
    pub unsafe fn SetWindowTitle(&mut self, title: *const ::std::os::raw::c_char) {
        mujoco_GlfwAdapter_SetWindowTitle(self, title)
    }
    #[inline]
    pub unsafe fn ShouldCloseWindow(&self) -> bool {
        mujoco_GlfwAdapter_ShouldCloseWindow(self)
    }
    #[inline]
    pub unsafe fn SwapBuffers(&mut self) {
        mujoco_GlfwAdapter_SwapBuffers(self)
    }
    #[inline]
    pub unsafe fn ToggleFullscreen(&mut self) {
        mujoco_GlfwAdapter_ToggleFullscreen(self)
    }
    #[inline]
    pub unsafe fn IsLeftMouseButtonPressed(&self) -> bool {
        mujoco_GlfwAdapter_IsLeftMouseButtonPressed(self)
    }
    #[inline]
    pub unsafe fn IsMiddleMouseButtonPressed(&self) -> bool {
        mujoco_GlfwAdapter_IsMiddleMouseButtonPressed(self)
    }
    #[inline]
    pub unsafe fn IsRightMouseButtonPressed(&self) -> bool {
        mujoco_GlfwAdapter_IsRightMouseButtonPressed(self)
    }
    #[inline]
    pub unsafe fn IsAltKeyPressed(&self) -> bool {
        mujoco_GlfwAdapter_IsAltKeyPressed(self)
    }
    #[inline]
    pub unsafe fn IsCtrlKeyPressed(&self) -> bool {
        mujoco_GlfwAdapter_IsCtrlKeyPressed(self)
    }
    #[inline]
    pub unsafe fn IsShiftKeyPressed(&self) -> bool {
        mujoco_GlfwAdapter_IsShiftKeyPressed(self)
    }
    #[inline]
    pub unsafe fn IsMouseButtonDownEvent(&self, act: ::std::os::raw::c_int) -> bool {
        mujoco_GlfwAdapter_IsMouseButtonDownEvent(self, act)
    }
    #[inline]
    pub unsafe fn IsKeyDownEvent(&self, act: ::std::os::raw::c_int) -> bool {
        mujoco_GlfwAdapter_IsKeyDownEvent(self, act)
    }
    #[inline]
    pub unsafe fn TranslateKeyCode(&self, key: ::std::os::raw::c_int) -> ::std::os::raw::c_int {
        mujoco_GlfwAdapter_TranslateKeyCode(self, key)
    }
    #[inline]
    pub unsafe fn TranslateMouseButton(&self, button: ::std::os::raw::c_int) -> mjtButton {
        mujoco_GlfwAdapter_TranslateMouseButton(self, button)
    }
    #[inline]
    pub unsafe fn FreeMjrContext(&mut self) {
        mujoco_GlfwAdapter_FreeMjrContext(self)
    }
    #[inline]
    pub unsafe fn OnFilesDrop(
        &mut self,
        count: ::std::os::raw::c_int,
        paths: *mut *const ::std::os::raw::c_char,
    ) {
        mujoco_GlfwAdapter_OnFilesDrop(self, count, paths)
    }
    #[inline]
    pub unsafe fn OnMouseButton(
        &mut self,
        button: ::std::os::raw::c_int,
        act: ::std::os::raw::c_int,
    ) {
        mujoco_GlfwAdapter_OnMouseButton(self, button, act)
    }
    #[inline]
    pub unsafe fn OnMouseMove(&mut self, x: f64, y: f64) {
        mujoco_GlfwAdapter_OnMouseMove(self, x, y)
    }
    #[inline]
    pub unsafe fn OnScroll(&mut self, xoffset: f64, yoffset: f64) {
        mujoco_GlfwAdapter_OnScroll(self, xoffset, yoffset)
    }
    #[inline]
    pub unsafe fn OnWindowRefresh(&mut self) {
        mujoco_GlfwAdapter_OnWindowRefresh(self)
    }
    #[inline]
    pub unsafe fn OnWindowResize(
        &mut self,
        width: ::std::os::raw::c_int,
        height: ::std::os::raw::c_int,
    ) {
        mujoco_GlfwAdapter_OnWindowResize(self, width, height)
    }
    #[inline]
    pub unsafe fn new() -> Self {
        let mut __bindgen_tmp = ::std::mem::MaybeUninit::uninit();
        mujoco_GlfwAdapter_GlfwAdapter(__bindgen_tmp.as_mut_ptr());
        __bindgen_tmp.assume_init()
    }
    #[inline]
    pub unsafe fn destruct(&mut self) {
        mujoco_GlfwAdapter_GlfwAdapter_destructor(self)
    }
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter17RefreshMjrContextEPK8mjModel_i"]
    pub fn mujoco_GlfwAdapter_RefreshMjrContext(
        this: *mut ::std::os::raw::c_void,
        m: *const mjModel,
        fontscale: ::std::os::raw::c_int,
    ) -> bool;
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter17EnsureContextSizeEv"]
    pub fn mujoco_GlfwAdapter_EnsureContextSize(this: *mut ::std::os::raw::c_void) -> bool;
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter5OnKeyEiii"]
    pub fn mujoco_GlfwAdapter_OnKey(
        this: *mut ::std::os::raw::c_void,
        key: ::std::os::raw::c_int,
        scancode: ::std::os::raw::c_int,
        act: ::std::os::raw::c_int,
    );
}
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mujoco_SimulateMutex {
    pub _base: std_recursive_mutex,
}
pub type mujoco_MutexLock = u8;
#[repr(C)]
#[derive(Clone)]
pub struct mujoco_Simulate {
    pub is_passive_: bool,
    pub mnew_: *mut mjModel,
    pub dnew_: *mut mjData,
    pub m_: *mut mjModel,
    pub d_: *mut mjData,
    pub ncam_: ::std::os::raw::c_int,
    pub nkey_: ::std::os::raw::c_int,
    pub state_size_: ::std::os::raw::c_int,
    pub nhistory_: ::std::os::raw::c_int,
    pub history_cursor_: ::std::os::raw::c_int,
    pub body_parentid_: __BindgenOpaqueArray<u64, 3usize>,
    pub jnt_type_: __BindgenOpaqueArray<u64, 3usize>,
    pub jnt_group_: __BindgenOpaqueArray<u64, 3usize>,
    pub jnt_qposadr_: __BindgenOpaqueArray<u64, 3usize>,
    pub jnt_range_: __BindgenOpaqueArray<u64, 3usize>,
    pub jnt_names_: __BindgenOpaqueArray<u64, 3usize>,
    pub actuator_group_: __BindgenOpaqueArray<u64, 3usize>,
    pub actuator_ctrlrange_: __BindgenOpaqueArray<u64, 3usize>,
    pub actuator_names_: __BindgenOpaqueArray<u64, 3usize>,
    pub equality_names_: __BindgenOpaqueArray<u64, 3usize>,
    pub history_: __BindgenOpaqueArray<u64, 3usize>,
    pub qpos_: __BindgenOpaqueArray<u64, 3usize>,
    pub qpos_prev_: __BindgenOpaqueArray<u64, 3usize>,
    pub ctrl_: __BindgenOpaqueArray<u64, 3usize>,
    pub ctrl_prev_: __BindgenOpaqueArray<u64, 3usize>,
    pub eq_active_: __BindgenOpaqueArray<u64, 3usize>,
    pub eq_active_prev_: __BindgenOpaqueArray<u64, 3usize>,
    pub m_passive_: *mut mjModel,
    pub d_passive_: *mut mjData,
    pub user_scn_geoms_: __BindgenOpaqueArray<u64, 3usize>,
    pub mjopt_prev_: mjOption,
    pub mjvis_prev_: mjVisual,
    pub mjstat_prev_: mjStatistic,
    pub opt_prev_: mjvOption,
    pub cam_prev_: mjvCamera,
    pub warn_vgeomfull_prev_: ::std::os::raw::c_int,
    pub pending_: mujoco_Simulate__bindgen_ty_1,
    pub mtx: mujoco_SimulateMutex,
    pub cond_loadrequest: std_condition_variable_any,
    pub frames_: ::std::os::raw::c_int,
    pub last_fps_update_: u64,
    pub fps_: f64,
    pub spacing: ::std::os::raw::c_int,
    pub color: ::std::os::raw::c_int,
    pub font: ::std::os::raw::c_int,
    pub ui0_enable: ::std::os::raw::c_int,
    pub ui1_enable: ::std::os::raw::c_int,
    pub help: ::std::os::raw::c_int,
    pub info: ::std::os::raw::c_int,
    pub profiler: ::std::os::raw::c_int,
    pub sensor: ::std::os::raw::c_int,
    pub pause_update: ::std::os::raw::c_int,
    pub fullscreen: ::std::os::raw::c_int,
    pub vsync: ::std::os::raw::c_int,
    pub busywait: ::std::os::raw::c_int,
    pub key: ::std::os::raw::c_int,
    pub scrub_index: ::std::os::raw::c_int,
    pub run: ::std::os::raw::c_int,
    pub exitrequest: std_atomic_int,
    pub droploadrequest: std_atomic_int,
    pub screenshotrequest: std_atomic_int,
    pub uiloadrequest: std_atomic_int,
    pub newfigurerequest: std_atomic_int,
    pub newtextrequest: std_atomic_int,
    pub newimagerequest: std_atomic_int,
    pub loadrequest: ::std::os::raw::c_int,
    pub load_error: [::std::os::raw::c_char; 1000usize],
    pub dropfilename: [::std::os::raw::c_char; 1000usize],
    pub filename: [::std::os::raw::c_char; 1000usize],
    pub previous_filename: [::std::os::raw::c_char; 1000usize],
    pub real_time_index: ::std::os::raw::c_int,
    pub speed_changed: bool,
    pub measured_slowdown: f32,
    pub ctrl_noise_std: f64,
    pub ctrl_noise_rate: f64,
    pub field: [::std::os::raw::c_char; 300usize],
    pub index: ::std::os::raw::c_int,
    pub disable: [::std::os::raw::c_int; 19usize],
    pub enable: [::std::os::raw::c_int; 5usize],
    pub enableactuator: [::std::os::raw::c_int; 6usize],
    pub camera: ::std::os::raw::c_int,
    pub scn: mjvScene,
    pub cam: *mut mjvCamera,
    pub opt: *mut mjvOption,
    pub pert: *mut mjvPerturb,
    pub figconstraint: mjvFigure,
    pub figcost: mjvFigure,
    pub figtimer: mjvFigure,
    pub figsize: mjvFigure,
    pub figsensor: mjvFigure,
    pub user_scn: *mut mjvScene,
    pub user_scn_flags_prev_: [mjtByte; 10usize],
    pub user_figures_: __BindgenOpaqueArray<u64, 3usize>,
    pub user_figures_new_: __BindgenOpaqueArray<u64, 3usize>,
    pub user_texts_: __BindgenOpaqueArray<u64, 3usize>,
    pub user_texts_new_: __BindgenOpaqueArray<u64, 3usize>,
    pub user_images_: __BindgenOpaqueArray<u64, 3usize>,
    pub user_images_new_: __BindgenOpaqueArray<u64, 3usize>,
    pub refresh_rate: ::std::os::raw::c_int,
    pub window_pos: [::std::os::raw::c_int; 2usize],
    pub window_size: [::std::os::raw::c_int; 2usize],
    pub platform_ui: mujoco_GlfwAdapter,
    pub uistate: *mut mjuiState,
    pub ui0: mjUI,
    pub ui1: mjUI,
    pub def_option: [mjuiDef; 13usize],
    pub def_simulation: [mjuiDef; 14usize],
    pub def_watch: [mjuiDef; 5usize],
    pub info_title: [::std::os::raw::c_char; 1000usize],
    pub info_content: [::std::os::raw::c_char; 1000usize],
    pub cond_upload_: std_condition_variable_any,
    pub texture_upload_: ::std::os::raw::c_int,
    pub mesh_upload_: ::std::os::raw::c_int,
    pub hfield_upload_: ::std::os::raw::c_int,
}
pub type mujoco_Simulate_Clock = std_chrono_steady_clock;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mujoco_Simulate__bindgen_ty_1 {
    pub save_xml: __BindgenOpaqueArray<u64, 5usize>,
    pub save_mjb: __BindgenOpaqueArray<u64, 5usize>,
    pub print_model: __BindgenOpaqueArray<u64, 5usize>,
    pub print_data: __BindgenOpaqueArray<u64, 5usize>,
    pub reset: bool,
    pub align: bool,
    pub copy_key: bool,
    pub copy_key_full_precision: bool,
    pub load_from_history: bool,
    pub load_key: bool,
    pub save_key: bool,
    pub zero_ctrl: bool,
    pub newperturb: ::std::os::raw::c_int,
    pub select: bool,
    pub select_state: mjuiState,
    pub ui_update_simulation: bool,
    pub ui_update_physics: bool,
    pub ui_update_rendering: bool,
    pub ui_update_visualization: bool,
    pub ui_update_joint: bool,
    pub ui_update_ctrl: bool,
    pub ui_update_equality: bool,
    pub ui_remake_ctrl: bool,
}
pub const mujoco_Simulate_kMaxGeom: ::std::os::raw::c_int = 100000;
pub const mujoco_Simulate_kMaxFilenameLength: ::std::os::raw::c_int = 1000;
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco8Simulate15percentRealTimeE"]
    pub static mujoco_Simulate_percentRealTime: [f32; 31usize];
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco8Simulate4SyncEb"]
    pub fn mujoco_Simulate_Sync(this: *mut mujoco_Simulate, state_only: bool);
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco8Simulate12UpdateHFieldEi"]
    pub fn mujoco_Simulate_UpdateHField(
        this: *mut mujoco_Simulate,
        hfieldid: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco8Simulate10UpdateMeshEi"]
    pub fn mujoco_Simulate_UpdateMesh(this: *mut mujoco_Simulate, meshid: ::std::os::raw::c_int);
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco8Simulate13UpdateTextureEi"]
    pub fn mujoco_Simulate_UpdateTexture(this: *mut mujoco_Simulate, texid: ::std::os::raw::c_int);
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco8Simulate11LoadMessageEPKc"]
    pub fn mujoco_Simulate_LoadMessage(
        this: *mut mujoco_Simulate,
        displayed_filename: *const ::std::os::raw::c_char,
    );
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco8Simulate4LoadEP8mjModel_P7mjData_PKc"]
    pub fn mujoco_Simulate_Load(
        this: *mut mujoco_Simulate,
        m: *mut mjModel,
        d: *mut mjData,
        displayed_filename: *const ::std::os::raw::c_char,
    );
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco8Simulate16LoadMessageClearEv"]
    pub fn mujoco_Simulate_LoadMessageClear(this: *mut mujoco_Simulate);
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco8Simulate18LoadOnRenderThreadEv"]
    pub fn mujoco_Simulate_LoadOnRenderThread(this: *mut mujoco_Simulate);
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco8Simulate6RenderEv"]
    pub fn mujoco_Simulate_Render(this: *mut mujoco_Simulate);
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco8Simulate10RenderStepEb"]
    pub fn mujoco_Simulate_RenderStep(this: *mut mujoco_Simulate, update_timer: bool) -> bool;
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco8Simulate10RenderInitEv"]
    pub fn mujoco_Simulate_RenderInit(this: *mut mujoco_Simulate);
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco8Simulate13RenderCleanupEv"]
    pub fn mujoco_Simulate_RenderCleanup(this: *mut mujoco_Simulate);
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco8Simulate12AddToHistoryEv"]
    pub fn mujoco_Simulate_AddToHistory(this: *mut mujoco_Simulate);
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco8Simulate11InjectNoiseEi"]
    pub fn mujoco_Simulate_InjectNoise(this: *mut mujoco_Simulate, key: ::std::os::raw::c_int);
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco8Simulate7RunningEv"]
    pub fn mujoco_Simulate_Running(this: *mut mujoco_Simulate) -> bool;
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco8SimulateC1EP10mjvCamera_P10mjvOption_P11mjvPerturb_P9mjvScene_b"]
    pub fn mujoco_Simulate_Simulate(
        this: *mut mujoco_Simulate,
        cam: *mut mjvCamera,
        opt: *mut mjvOption,
        pert: *mut mjvPerturb,
        user_scn: *mut mjvScene,
        is_passive: bool,
    );
}
impl mujoco_Simulate {
    #[inline]
    pub unsafe fn Sync(&mut self, state_only: bool) {
        mujoco_Simulate_Sync(self, state_only)
    }
    #[inline]
    pub unsafe fn UpdateHField(&mut self, hfieldid: ::std::os::raw::c_int) {
        mujoco_Simulate_UpdateHField(self, hfieldid)
    }
    #[inline]
    pub unsafe fn UpdateMesh(&mut self, meshid: ::std::os::raw::c_int) {
        mujoco_Simulate_UpdateMesh(self, meshid)
    }
    #[inline]
    pub unsafe fn UpdateTexture(&mut self, texid: ::std::os::raw::c_int) {
        mujoco_Simulate_UpdateTexture(self, texid)
    }
    #[inline]
    pub unsafe fn LoadMessage(&mut self, displayed_filename: *const ::std::os::raw::c_char) {
        mujoco_Simulate_LoadMessage(self, displayed_filename)
    }
    #[inline]
    pub unsafe fn Load(
        &mut self,
        m: *mut mjModel,
        d: *mut mjData,
        displayed_filename: *const ::std::os::raw::c_char,
    ) {
        mujoco_Simulate_Load(self, m, d, displayed_filename)
    }
    #[inline]
    pub unsafe fn LoadMessageClear(&mut self) {
        mujoco_Simulate_LoadMessageClear(self)
    }
    #[inline]
    pub unsafe fn LoadOnRenderThread(&mut self) {
        mujoco_Simulate_LoadOnRenderThread(self)
    }
    #[inline]
    pub unsafe fn Render(&mut self) {
        mujoco_Simulate_Render(self)
    }
    #[inline]
    pub unsafe fn RenderStep(&mut self, update_timer: bool) -> bool {
        mujoco_Simulate_RenderStep(self, update_timer)
    }
    #[inline]
    pub unsafe fn RenderInit(&mut self) {
        mujoco_Simulate_RenderInit(self)
    }
    #[inline]
    pub unsafe fn RenderCleanup(&mut self) {
        mujoco_Simulate_RenderCleanup(self)
    }
    #[inline]
    pub unsafe fn AddToHistory(&mut self) {
        mujoco_Simulate_AddToHistory(self)
    }
    #[inline]
    pub unsafe fn InjectNoise(&mut self, key: ::std::os::raw::c_int) {
        mujoco_Simulate_InjectNoise(self, key)
    }
    #[inline]
    pub unsafe fn Running(&mut self) -> bool {
        mujoco_Simulate_Running(self)
    }
    #[inline]
    pub unsafe fn new(
        cam: *mut mjvCamera,
        opt: *mut mjvOption,
        pert: *mut mjvPerturb,
        user_scn: *mut mjvScene,
        is_passive: bool,
    ) -> Self {
        let mut __bindgen_tmp = ::std::mem::MaybeUninit::uninit();
        mujoco_Simulate_Simulate(
            __bindgen_tmp.as_mut_ptr(),
            cam,
            opt,
            pert,
            user_scn,
            is_passive,
        );
        __bindgen_tmp.assume_init()
    }
}
#[repr(C)]
#[derive(Debug, Clone)]
pub struct mujoco_Glfw {
    pub glfwCreateWindow: ::std::option::Option<
        unsafe extern "C" fn(
            arg1: ::std::os::raw::c_int,
            arg2: ::std::os::raw::c_int,
            arg3: *const ::std::os::raw::c_char,
            arg4: *mut GLFWmonitor,
            arg5: *mut GLFWwindow,
        ) -> *mut GLFWwindow,
    >,
    pub glfwDestroyWindow: ::std::option::Option<unsafe extern "C" fn(arg1: *mut GLFWwindow)>,
    pub glfwGetCursorPos: ::std::option::Option<
        unsafe extern "C" fn(arg1: *mut GLFWwindow, arg2: *mut f64, arg3: *mut f64),
    >,
    pub glfwGetFramebufferSize: ::std::option::Option<
        unsafe extern "C" fn(
            arg1: *mut GLFWwindow,
            arg2: *mut ::std::os::raw::c_int,
            arg3: *mut ::std::os::raw::c_int,
        ),
    >,
    pub glfwGetKey: ::std::option::Option<
        unsafe extern "C" fn(
            arg1: *mut GLFWwindow,
            arg2: ::std::os::raw::c_int,
        ) -> ::std::os::raw::c_int,
    >,
    pub glfwGetMonitorPhysicalSize: ::std::option::Option<
        unsafe extern "C" fn(
            arg1: *mut GLFWmonitor,
            arg2: *mut ::std::os::raw::c_int,
            arg3: *mut ::std::os::raw::c_int,
        ),
    >,
    pub glfwGetMouseButton: ::std::option::Option<
        unsafe extern "C" fn(
            arg1: *mut GLFWwindow,
            arg2: ::std::os::raw::c_int,
        ) -> ::std::os::raw::c_int,
    >,
    pub glfwGetPrimaryMonitor: ::std::option::Option<unsafe extern "C" fn() -> *mut GLFWmonitor>,
    pub glfwGetTime: ::std::option::Option<unsafe extern "C" fn() -> f64>,
    pub glfwGetVideoMode:
        ::std::option::Option<unsafe extern "C" fn(arg1: *mut GLFWmonitor) -> *const GLFWvidmode>,
    pub glfwGetWindowMonitor:
        ::std::option::Option<unsafe extern "C" fn(arg1: *mut GLFWwindow) -> *mut GLFWmonitor>,
    pub glfwGetWindowPos: ::std::option::Option<
        unsafe extern "C" fn(
            arg1: *mut GLFWwindow,
            arg2: *mut ::std::os::raw::c_int,
            arg3: *mut ::std::os::raw::c_int,
        ),
    >,
    pub glfwGetWindowSize: ::std::option::Option<
        unsafe extern "C" fn(
            arg1: *mut GLFWwindow,
            arg2: *mut ::std::os::raw::c_int,
            arg3: *mut ::std::os::raw::c_int,
        ),
    >,
    pub glfwGetWindowUserPointer: ::std::option::Option<
        unsafe extern "C" fn(arg1: *mut GLFWwindow) -> *mut ::std::os::raw::c_void,
    >,
    pub glfwInit: ::std::option::Option<unsafe extern "C" fn() -> ::std::os::raw::c_int>,
    pub glfwMakeContextCurrent: ::std::option::Option<unsafe extern "C" fn(arg1: *mut GLFWwindow)>,
    pub glfwPollEvents: ::std::option::Option<unsafe extern "C" fn()>,
    pub glfwSetClipboardString: ::std::option::Option<
        unsafe extern "C" fn(arg1: *mut GLFWwindow, arg2: *const ::std::os::raw::c_char),
    >,
    pub glfwSetCursorPosCallback: ::std::option::Option<
        unsafe extern "C" fn(
            arg1: *mut GLFWwindow,
            arg2: ::std::option::Option<
                unsafe extern "C" fn(arg1: *mut GLFWwindow, arg2: f64, arg3: f64),
            >,
        ) -> ::std::option::Option<
            unsafe extern "C" fn(arg1: *mut GLFWwindow, arg2: f64, arg3: f64),
        >,
    >,
    pub glfwSetDropCallback: ::std::option::Option<
        unsafe extern "C" fn(
            arg1: *mut GLFWwindow,
            arg2: ::std::option::Option<
                unsafe extern "C" fn(
                    arg1: *mut GLFWwindow,
                    arg2: ::std::os::raw::c_int,
                    arg3: *mut *const ::std::os::raw::c_char,
                ),
            >,
        ) -> ::std::option::Option<
            unsafe extern "C" fn(
                arg1: *mut GLFWwindow,
                arg2: ::std::os::raw::c_int,
                arg3: *mut *const ::std::os::raw::c_char,
            ),
        >,
    >,
    pub glfwSetKeyCallback: ::std::option::Option<
        unsafe extern "C" fn(
            arg1: *mut GLFWwindow,
            arg2: ::std::option::Option<
                unsafe extern "C" fn(
                    arg1: *mut GLFWwindow,
                    arg2: ::std::os::raw::c_int,
                    arg3: ::std::os::raw::c_int,
                    arg4: ::std::os::raw::c_int,
                    arg5: ::std::os::raw::c_int,
                ),
            >,
        ) -> ::std::option::Option<
            unsafe extern "C" fn(
                arg1: *mut GLFWwindow,
                arg2: ::std::os::raw::c_int,
                arg3: ::std::os::raw::c_int,
                arg4: ::std::os::raw::c_int,
                arg5: ::std::os::raw::c_int,
            ),
        >,
    >,
    pub glfwSetMouseButtonCallback: ::std::option::Option<
        unsafe extern "C" fn(
            arg1: *mut GLFWwindow,
            arg2: ::std::option::Option<
                unsafe extern "C" fn(
                    arg1: *mut GLFWwindow,
                    arg2: ::std::os::raw::c_int,
                    arg3: ::std::os::raw::c_int,
                    arg4: ::std::os::raw::c_int,
                ),
            >,
        ) -> ::std::option::Option<
            unsafe extern "C" fn(
                arg1: *mut GLFWwindow,
                arg2: ::std::os::raw::c_int,
                arg3: ::std::os::raw::c_int,
                arg4: ::std::os::raw::c_int,
            ),
        >,
    >,
    pub glfwSetScrollCallback: ::std::option::Option<
        unsafe extern "C" fn(
            arg1: *mut GLFWwindow,
            arg2: ::std::option::Option<
                unsafe extern "C" fn(arg1: *mut GLFWwindow, arg2: f64, arg3: f64),
            >,
        ) -> ::std::option::Option<
            unsafe extern "C" fn(arg1: *mut GLFWwindow, arg2: f64, arg3: f64),
        >,
    >,
    pub glfwSetWindowMonitor: ::std::option::Option<
        unsafe extern "C" fn(
            arg1: *mut GLFWwindow,
            arg2: *mut GLFWmonitor,
            arg3: ::std::os::raw::c_int,
            arg4: ::std::os::raw::c_int,
            arg5: ::std::os::raw::c_int,
            arg6: ::std::os::raw::c_int,
            arg7: ::std::os::raw::c_int,
        ),
    >,
    pub glfwSetWindowRefreshCallback: ::std::option::Option<
        unsafe extern "C" fn(
            arg1: *mut GLFWwindow,
            arg2: ::std::option::Option<unsafe extern "C" fn(arg1: *mut GLFWwindow)>,
        )
            -> ::std::option::Option<unsafe extern "C" fn(arg1: *mut GLFWwindow)>,
    >,
    pub glfwSetWindowSizeCallback: ::std::option::Option<
        unsafe extern "C" fn(
            arg1: *mut GLFWwindow,
            arg2: ::std::option::Option<
                unsafe extern "C" fn(
                    arg1: *mut GLFWwindow,
                    arg2: ::std::os::raw::c_int,
                    arg3: ::std::os::raw::c_int,
                ),
            >,
        ) -> ::std::option::Option<
            unsafe extern "C" fn(
                arg1: *mut GLFWwindow,
                arg2: ::std::os::raw::c_int,
                arg3: ::std::os::raw::c_int,
            ),
        >,
    >,
    pub glfwSetWindowTitle: ::std::option::Option<
        unsafe extern "C" fn(arg1: *mut GLFWwindow, arg2: *const ::std::os::raw::c_char),
    >,
    pub glfwSetWindowUserPointer: ::std::option::Option<
        unsafe extern "C" fn(arg1: *mut GLFWwindow, arg2: *mut ::std::os::raw::c_void),
    >,
    pub glfwSwapBuffers: ::std::option::Option<unsafe extern "C" fn(arg1: *mut GLFWwindow)>,
    pub glfwSwapInterval: ::std::option::Option<unsafe extern "C" fn(arg1: ::std::os::raw::c_int)>,
    pub glfwTerminate: ::std::option::Option<unsafe extern "C" fn()>,
    pub glfwWindowHint: ::std::option::Option<
        unsafe extern "C" fn(arg1: ::std::os::raw::c_int, arg2: ::std::os::raw::c_int),
    >,
    pub glfwWindowShouldClose:
        ::std::option::Option<unsafe extern "C" fn(arg1: *mut GLFWwindow) -> ::std::os::raw::c_int>,
}
unsafe extern "C" {
    #[link_name = "\u{1}_ZN6mujoco4GlfwEPv"]
    pub fn mujoco_Glfw(dlhandle: *mut ::std::os::raw::c_void) -> *const mujoco_Glfw;
}
#[repr(C)]
#[derive(Debug, Clone)]
pub struct GLFWmonitor {
    _unused: [u8; 0],
}
#[repr(C)]
#[derive(Debug, Clone)]
pub struct GLFWwindow {
    _unused: [u8; 0],
}
#[repr(C)]
#[derive(Debug, Clone)]
pub struct GLFWvidmode {
    pub width: ::std::os::raw::c_int,
    pub height: ::std::os::raw::c_int,
    pub redBits: ::std::os::raw::c_int,
    pub greenBits: ::std::os::raw::c_int,
    pub blueBits: ::std::os::raw::c_int,
    pub refreshRate: ::std::os::raw::c_int,
}
pub type Sim = mujoco_Simulate;
unsafe extern "C" {
    pub fn mujoco_cSimulate_create(
        cam: *mut mjvCamera,
        opt: *mut mjvOption,
        pert: *mut mjvPerturb,
        user_scn: *mut mjvScene,
        is_passive: bool,
    ) -> *mut mujoco_Simulate;
}
unsafe extern "C" {
    pub fn mujoco_cSimulate_destroy(sim: *mut Sim);
}
unsafe extern "C" {
    pub fn mujoco_cSimulate_RenderInit(sim: *mut Sim);
}
unsafe extern "C" {
    pub fn mujoco_cSimulate_RenderStep(sim: *mut Sim, update_timer: bool) -> u8;
}
unsafe extern "C" {
    pub fn mujoco_cSimulate_RenderCleanup(sim: *mut Sim);
}
unsafe extern "C" {
    pub fn mujoco_cSimulate_Sync(sim: *mut Sim, stateonly: bool);
}
unsafe extern "C" {
    pub fn mujoco_cSimulate_Load(
        sim: *mut Sim,
        m: *mut mjModel,
        d: *mut mjData,
        displayed_filename: *const ::std::os::raw::c_char,
    );
}
