diff options
Diffstat (limited to 'thirdparty/bullet/Bullet3Serialize')
13 files changed, 20555 insertions, 3652 deletions
diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/autogenerated/bullet2.h b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/autogenerated/bullet2.h index a6b57b1a12..eaa27dfe8f 100644 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/autogenerated/bullet2.h +++ b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/autogenerated/bullet2.h @@ -19,1035 +19,969 @@ // Auto generated from Bullet/Extras/HeaderGenerator/bulletGenerate.py #ifndef __BULLET2_H__ #define __BULLET2_H__ -namespace Bullet3SerializeBullet2 { - +namespace Bullet3SerializeBullet2 +{ // put an empty struct in the case -typedef struct bInvalidHandle { +typedef struct bInvalidHandle +{ int unused; -}bInvalidHandle; - - class PointerArray; - class b3PhysicsSystem; - class ListBase; - class b3Vector3FloatData; - class b3Vector3DoubleData; - class b3Matrix3x3FloatData; - class b3Matrix3x3DoubleData; - class b3TransformFloatData; - class b3TransformDoubleData; - class b3BvhSubtreeInfoData; - class b3OptimizedBvhNodeFloatData; - class b3OptimizedBvhNodeDoubleData; - class b3QuantizedBvhNodeData; - class b3QuantizedBvhFloatData; - class b3QuantizedBvhDoubleData; - class b3CollisionShapeData; - class b3StaticPlaneShapeData; - class b3ConvexInternalShapeData; - class b3PositionAndRadius; - class b3MultiSphereShapeData; - class b3IntIndexData; - class b3ShortIntIndexData; - class b3ShortIntIndexTripletData; - class b3CharIndexTripletData; - class b3MeshPartData; - class b3StridingMeshInterfaceData; - class b3TriangleMeshShapeData; - class b3ScaledTriangleMeshShapeData; - class b3CompoundShapeChildData; - class b3CompoundShapeData; - class b3CylinderShapeData; - class b3CapsuleShapeData; - class b3TriangleInfoData; - class b3TriangleInfoMapData; - class b3GImpactMeshShapeData; - class b3ConvexHullShapeData; - class b3CollisionObjectDoubleData; - class b3CollisionObjectFloatData; - class b3DynamicsWorldDoubleData; - class b3DynamicsWorldFloatData; - class b3RigidBodyFloatData; - class b3RigidBodyDoubleData; - class b3ConstraintInfo1; - class b3TypedConstraintData; - class b3Point2PointConstraintFloatData; - class b3Point2PointConstraintDoubleData; - class b3HingeConstraintDoubleData; - class b3HingeConstraintFloatData; - class b3ConeTwistConstraintData; - class b3Generic6DofConstraintData; - class b3Generic6DofSpringConstraintData; - class b3SliderConstraintData; - class b3ContactSolverInfoDoubleData; - class b3ContactSolverInfoFloatData; - class SoftBodyMaterialData; - class SoftBodyNodeData; - class SoftBodyLinkData; - class SoftBodyFaceData; - class SoftBodyTetraData; - class SoftRigidAnchorData; - class SoftBodyConfigData; - class SoftBodyPoseData; - class SoftBodyClusterData; - class b3SoftBodyJointData; - class b3SoftBodyFloatData; -// -------------------------------------------------- // - class PointerArray - { - public: - int m_size; - int m_capacity; - void *m_data; - }; - - -// -------------------------------------------------- // - class b3PhysicsSystem - { - public: - PointerArray m_collisionShapes; - PointerArray m_collisionObjects; - PointerArray m_constraints; - }; - - -// -------------------------------------------------- // - class ListBase - { - public: - void *first; - void *last; - }; - - -// -------------------------------------------------- // - class b3Vector3FloatData - { - public: - float m_floats[4]; - }; - - -// -------------------------------------------------- // - class b3Vector3DoubleData - { - public: - double m_floats[4]; - }; - - -// -------------------------------------------------- // - class b3Matrix3x3FloatData - { - public: - b3Vector3FloatData m_el[3]; - }; - - -// -------------------------------------------------- // - class b3Matrix3x3DoubleData - { - public: - b3Vector3DoubleData m_el[3]; - }; - - -// -------------------------------------------------- // - class b3TransformFloatData - { - public: - b3Matrix3x3FloatData m_basis; - b3Vector3FloatData m_origin; - }; - - -// -------------------------------------------------- // - class b3TransformDoubleData - { - public: - b3Matrix3x3DoubleData m_basis; - b3Vector3DoubleData m_origin; - }; - - -// -------------------------------------------------- // - class b3BvhSubtreeInfoData - { - public: - int m_rootNodeIndex; - int m_subtreeSize; - short m_quantizedAabbMin[3]; - short m_quantizedAabbMax[3]; - }; - - -// -------------------------------------------------- // - class b3OptimizedBvhNodeFloatData - { - public: - b3Vector3FloatData m_aabbMinOrg; - b3Vector3FloatData m_aabbMaxOrg; - int m_escapeIndex; - int m_subPart; - int m_triangleIndex; - char m_pad[4]; - }; - - -// -------------------------------------------------- // - class b3OptimizedBvhNodeDoubleData - { - public: - b3Vector3DoubleData m_aabbMinOrg; - b3Vector3DoubleData m_aabbMaxOrg; - int m_escapeIndex; - int m_subPart; - int m_triangleIndex; - char m_pad[4]; - }; - - -// -------------------------------------------------- // - class b3QuantizedBvhNodeData - { - public: - short m_quantizedAabbMin[3]; - short m_quantizedAabbMax[3]; - int m_escapeIndexOrTriangleIndex; - }; - - -// -------------------------------------------------- // - class b3QuantizedBvhFloatData - { - public: - b3Vector3FloatData m_bvhAabbMin; - b3Vector3FloatData m_bvhAabbMax; - b3Vector3FloatData m_bvhQuantization; - int m_curNodeIndex; - int m_useQuantization; - int m_numContiguousLeafNodes; - int m_numQuantizedContiguousNodes; - b3OptimizedBvhNodeFloatData *m_contiguousNodesPtr; - b3QuantizedBvhNodeData *m_quantizedContiguousNodesPtr; - b3BvhSubtreeInfoData *m_subTreeInfoPtr; - int m_traversalMode; - int m_numSubtreeHeaders; - }; - - -// -------------------------------------------------- // - class b3QuantizedBvhDoubleData - { - public: - b3Vector3DoubleData m_bvhAabbMin; - b3Vector3DoubleData m_bvhAabbMax; - b3Vector3DoubleData m_bvhQuantization; - int m_curNodeIndex; - int m_useQuantization; - int m_numContiguousLeafNodes; - int m_numQuantizedContiguousNodes; - b3OptimizedBvhNodeDoubleData *m_contiguousNodesPtr; - b3QuantizedBvhNodeData *m_quantizedContiguousNodesPtr; - int m_traversalMode; - int m_numSubtreeHeaders; - b3BvhSubtreeInfoData *m_subTreeInfoPtr; - }; - - -// -------------------------------------------------- // - class b3CollisionShapeData - { - public: - char *m_name; - int m_shapeType; - char m_padding[4]; - }; - - -// -------------------------------------------------- // - class b3StaticPlaneShapeData - { - public: - b3CollisionShapeData m_collisionShapeData; - b3Vector3FloatData m_localScaling; - b3Vector3FloatData m_planeNormal; - float m_planeConstant; - char m_pad[4]; - }; - - -// -------------------------------------------------- // - class b3ConvexInternalShapeData - { - public: - b3CollisionShapeData m_collisionShapeData; - b3Vector3FloatData m_localScaling; - b3Vector3FloatData m_implicitShapeDimensions; - float m_collisionMargin; - int m_padding; - }; - - -// -------------------------------------------------- // - class b3PositionAndRadius - { - public: - b3Vector3FloatData m_pos; - float m_radius; - }; - - -// -------------------------------------------------- // - class b3MultiSphereShapeData - { - public: - b3ConvexInternalShapeData m_convexInternalShapeData; - b3PositionAndRadius *m_localPositionArrayPtr; - int m_localPositionArraySize; - char m_padding[4]; - }; - - -// -------------------------------------------------- // - class b3IntIndexData - { - public: - int m_value; - }; - - -// -------------------------------------------------- // - class b3ShortIntIndexData - { - public: - short m_value; - char m_pad[2]; - }; - - -// -------------------------------------------------- // - class b3ShortIntIndexTripletData - { - public: - short m_values[3]; - char m_pad[2]; - }; - - -// -------------------------------------------------- // - class b3CharIndexTripletData - { - public: - char m_values[3]; - char m_pad; - }; - - -// -------------------------------------------------- // - class b3MeshPartData - { - public: - b3Vector3FloatData *m_vertices3f; - b3Vector3DoubleData *m_vertices3d; - b3IntIndexData *m_indices32; - b3ShortIntIndexTripletData *m_3indices16; - b3CharIndexTripletData *m_3indices8; - b3ShortIntIndexData *m_indices16; - int m_numTriangles; - int m_numVertices; - }; - - -// -------------------------------------------------- // - class b3StridingMeshInterfaceData - { - public: - b3MeshPartData *m_meshPartsPtr; - b3Vector3FloatData m_scaling; - int m_numMeshParts; - char m_padding[4]; - }; - - -// -------------------------------------------------- // - class b3TriangleMeshShapeData - { - public: - b3CollisionShapeData m_collisionShapeData; - b3StridingMeshInterfaceData m_meshInterface; - b3QuantizedBvhFloatData *m_quantizedFloatBvh; - b3QuantizedBvhDoubleData *m_quantizedDoubleBvh; - b3TriangleInfoMapData *m_triangleInfoMap; - float m_collisionMargin; - char m_pad3[4]; - }; - - -// -------------------------------------------------- // - class b3ScaledTriangleMeshShapeData - { - public: - b3TriangleMeshShapeData m_trimeshShapeData; - b3Vector3FloatData m_localScaling; - }; - - -// -------------------------------------------------- // - class b3CompoundShapeChildData - { - public: - b3TransformFloatData m_transform; - b3CollisionShapeData *m_childShape; - int m_childShapeType; - float m_childMargin; - }; - - -// -------------------------------------------------- // - class b3CompoundShapeData - { - public: - b3CollisionShapeData m_collisionShapeData; - b3CompoundShapeChildData *m_childShapePtr; - int m_numChildShapes; - float m_collisionMargin; - }; - - -// -------------------------------------------------- // - class b3CylinderShapeData - { - public: - b3ConvexInternalShapeData m_convexInternalShapeData; - int m_upAxis; - char m_padding[4]; - }; - - -// -------------------------------------------------- // - class b3CapsuleShapeData - { - public: - b3ConvexInternalShapeData m_convexInternalShapeData; - int m_upAxis; - char m_padding[4]; - }; - - -// -------------------------------------------------- // - class b3TriangleInfoData - { - public: - int m_flags; - float m_edgeV0V1Angle; - float m_edgeV1V2Angle; - float m_edgeV2V0Angle; - }; - - -// -------------------------------------------------- // - class b3TriangleInfoMapData - { - public: - int *m_hashTablePtr; - int *m_nextPtr; - b3TriangleInfoData *m_valueArrayPtr; - int *m_keyArrayPtr; - float m_convexEpsilon; - float m_planarEpsilon; - float m_equalVertexThreshold; - float m_edgeDistanceThreshold; - float m_zeroAreaThreshold; - int m_nextSize; - int m_hashTableSize; - int m_numValues; - int m_numKeys; - char m_padding[4]; - }; - - -// -------------------------------------------------- // - class b3GImpactMeshShapeData - { - public: - b3CollisionShapeData m_collisionShapeData; - b3StridingMeshInterfaceData m_meshInterface; - b3Vector3FloatData m_localScaling; - float m_collisionMargin; - int m_gimpactSubType; - }; - - -// -------------------------------------------------- // - class b3ConvexHullShapeData - { - public: - b3ConvexInternalShapeData m_convexInternalShapeData; - b3Vector3FloatData *m_unscaledPointsFloatPtr; - b3Vector3DoubleData *m_unscaledPointsDoublePtr; - int m_numUnscaledPoints; - char m_padding3[4]; - }; - - -// -------------------------------------------------- // - class b3CollisionObjectDoubleData - { - public: - void *m_broadphaseHandle; - void *m_collisionShape; - b3CollisionShapeData *m_rootCollisionShape; - char *m_name; - b3TransformDoubleData m_worldTransform; - b3TransformDoubleData m_interpolationWorldTransform; - b3Vector3DoubleData m_interpolationLinearVelocity; - b3Vector3DoubleData m_interpolationAngularVelocity; - b3Vector3DoubleData m_anisotropicFriction; - double m_contactProcessingThreshold; - double m_deactivationTime; - double m_friction; - double m_rollingFriction; - double m_restitution; - double m_hitFraction; - double m_ccdSweptSphereRadius; - double m_ccdMotionThreshold; - int m_hasAnisotropicFriction; - int m_collisionFlags; - int m_islandTag1; - int m_companionId; - int m_activationState1; - int m_internalType; - int m_checkCollideWith; - char m_padding[4]; - }; - - -// -------------------------------------------------- // - class b3CollisionObjectFloatData - { - public: - void *m_broadphaseHandle; - void *m_collisionShape; - b3CollisionShapeData *m_rootCollisionShape; - char *m_name; - b3TransformFloatData m_worldTransform; - b3TransformFloatData m_interpolationWorldTransform; - b3Vector3FloatData m_interpolationLinearVelocity; - b3Vector3FloatData m_interpolationAngularVelocity; - b3Vector3FloatData m_anisotropicFriction; - float m_contactProcessingThreshold; - float m_deactivationTime; - float m_friction; - float m_rollingFriction; - float m_restitution; - float m_hitFraction; - float m_ccdSweptSphereRadius; - float m_ccdMotionThreshold; - int m_hasAnisotropicFriction; - int m_collisionFlags; - int m_islandTag1; - int m_companionId; - int m_activationState1; - int m_internalType; - int m_checkCollideWith; - char m_padding[4]; - }; - - - -// -------------------------------------------------- // - class b3RigidBodyFloatData - { - public: - b3CollisionObjectFloatData m_collisionObjectData; - b3Matrix3x3FloatData m_invInertiaTensorWorld; - b3Vector3FloatData m_linearVelocity; - b3Vector3FloatData m_angularVelocity; - b3Vector3FloatData m_angularFactor; - b3Vector3FloatData m_linearFactor; - b3Vector3FloatData m_gravity; - b3Vector3FloatData m_gravity_acceleration; - b3Vector3FloatData m_invInertiaLocal; - b3Vector3FloatData m_totalForce; - b3Vector3FloatData m_totalTorque; - float m_inverseMass; - float m_linearDamping; - float m_angularDamping; - float m_additionalDampingFactor; - float m_additionalLinearDampingThresholdSqr; - float m_additionalAngularDampingThresholdSqr; - float m_additionalAngularDampingFactor; - float m_linearSleepingThreshold; - float m_angularSleepingThreshold; - int m_additionalDamping; - }; - - -// -------------------------------------------------- // - class b3RigidBodyDoubleData - { - public: - b3CollisionObjectDoubleData m_collisionObjectData; - b3Matrix3x3DoubleData m_invInertiaTensorWorld; - b3Vector3DoubleData m_linearVelocity; - b3Vector3DoubleData m_angularVelocity; - b3Vector3DoubleData m_angularFactor; - b3Vector3DoubleData m_linearFactor; - b3Vector3DoubleData m_gravity; - b3Vector3DoubleData m_gravity_acceleration; - b3Vector3DoubleData m_invInertiaLocal; - b3Vector3DoubleData m_totalForce; - b3Vector3DoubleData m_totalTorque; - double m_inverseMass; - double m_linearDamping; - double m_angularDamping; - double m_additionalDampingFactor; - double m_additionalLinearDampingThresholdSqr; - double m_additionalAngularDampingThresholdSqr; - double m_additionalAngularDampingFactor; - double m_linearSleepingThreshold; - double m_angularSleepingThreshold; - int m_additionalDamping; - char m_padding[4]; - }; - - -// -------------------------------------------------- // - class b3ConstraintInfo1 - { - public: - int m_numConstraintRows; - int nub; - }; - - -// -------------------------------------------------- // - class b3TypedConstraintData - { - public: - bInvalidHandle *m_rbA; - bInvalidHandle *m_rbB; - char *m_name; - int m_objectType; - int m_userConstraintType; - int m_userConstraintId; - int m_needsFeedback; - float m_appliedImpulse; - float m_dbgDrawSize; - int m_disableCollisionsBetweenLinkedBodies; - int m_overrideNumSolverIterations; - float m_breakingImpulseThreshold; - int m_isEnabled; - }; - - -// -------------------------------------------------- // - class b3Point2PointConstraintFloatData - { - public: - b3TypedConstraintData m_typeConstraintData; - b3Vector3FloatData m_pivotInA; - b3Vector3FloatData m_pivotInB; - }; - - -// -------------------------------------------------- // - class b3Point2PointConstraintDoubleData - { - public: - b3TypedConstraintData m_typeConstraintData; - b3Vector3DoubleData m_pivotInA; - b3Vector3DoubleData m_pivotInB; - }; - - -// -------------------------------------------------- // - class b3HingeConstraintDoubleData - { - public: - b3TypedConstraintData m_typeConstraintData; - b3TransformDoubleData m_rbAFrame; - b3TransformDoubleData m_rbBFrame; - int m_useReferenceFrameA; - int m_angularOnly; - int m_enableAngularMotor; - float m_motorTargetVelocity; - float m_maxMotorImpulse; - float m_lowerLimit; - float m_upperLimit; - float m_limitSoftness; - float m_biasFactor; - float m_relaxationFactor; - }; - - -// -------------------------------------------------- // - class b3HingeConstraintFloatData - { - public: - b3TypedConstraintData m_typeConstraintData; - b3TransformFloatData m_rbAFrame; - b3TransformFloatData m_rbBFrame; - int m_useReferenceFrameA; - int m_angularOnly; - int m_enableAngularMotor; - float m_motorTargetVelocity; - float m_maxMotorImpulse; - float m_lowerLimit; - float m_upperLimit; - float m_limitSoftness; - float m_biasFactor; - float m_relaxationFactor; - }; - - -// -------------------------------------------------- // - class b3ConeTwistConstraintData - { - public: - b3TypedConstraintData m_typeConstraintData; - b3TransformFloatData m_rbAFrame; - b3TransformFloatData m_rbBFrame; - float m_swingSpan1; - float m_swingSpan2; - float m_twistSpan; - float m_limitSoftness; - float m_biasFactor; - float m_relaxationFactor; - float m_damping; - char m_pad[4]; - }; - - -// -------------------------------------------------- // - class b3Generic6DofConstraintData - { - public: - b3TypedConstraintData m_typeConstraintData; - b3TransformFloatData m_rbAFrame; - b3TransformFloatData m_rbBFrame; - b3Vector3FloatData m_linearUpperLimit; - b3Vector3FloatData m_linearLowerLimit; - b3Vector3FloatData m_angularUpperLimit; - b3Vector3FloatData m_angularLowerLimit; - int m_useLinearReferenceFrameA; - int m_useOffsetForConstraintFrame; - }; - - -// -------------------------------------------------- // - class b3Generic6DofSpringConstraintData - { - public: - b3Generic6DofConstraintData m_6dofData; - int m_springEnabled[6]; - float m_equilibriumPoint[6]; - float m_springStiffness[6]; - float m_springDamping[6]; - }; - - -// -------------------------------------------------- // - class b3SliderConstraintData - { - public: - b3TypedConstraintData m_typeConstraintData; - b3TransformFloatData m_rbAFrame; - b3TransformFloatData m_rbBFrame; - float m_linearUpperLimit; - float m_linearLowerLimit; - float m_angularUpperLimit; - float m_angularLowerLimit; - int m_useLinearReferenceFrameA; - int m_useOffsetForConstraintFrame; - }; - - -// -------------------------------------------------- // - class b3ContactSolverInfoDoubleData - { - public: - double m_tau; - double m_damping; - double m_friction; - double m_timeStep; - double m_restitution; - double m_maxErrorReduction; - double m_sor; - double m_erp; - double m_erp2; - double m_globalCfm; - double m_splitImpulsePenetrationThreshold; - double m_splitImpulseTurnErp; - double m_linearSlop; - double m_warmstartingFactor; - double m_maxGyroscopicForce; - double m_singleAxisRollingFrictionThreshold; - int m_numIterations; - int m_solverMode; - int m_restingContactRestitutionThreshold; - int m_minimumSolverBatchSize; - int m_splitImpulse; - char m_padding[4]; - }; - - -// -------------------------------------------------- // - class b3ContactSolverInfoFloatData - { - public: - float m_tau; - float m_damping; - float m_friction; - float m_timeStep; - float m_restitution; - float m_maxErrorReduction; - float m_sor; - float m_erp; - float m_erp2; - float m_globalCfm; - float m_splitImpulsePenetrationThreshold; - float m_splitImpulseTurnErp; - float m_linearSlop; - float m_warmstartingFactor; - float m_maxGyroscopicForce; - float m_singleAxisRollingFrictionThreshold; - int m_numIterations; - int m_solverMode; - int m_restingContactRestitutionThreshold; - int m_minimumSolverBatchSize; - int m_splitImpulse; - char m_padding[4]; - }; - - - // -------------------------------------------------- // - class b3DynamicsWorldDoubleData - { - public: - b3ContactSolverInfoDoubleData m_solverInfo; - b3Vector3DoubleData m_gravity; - }; - - -// -------------------------------------------------- // - class b3DynamicsWorldFloatData - { - public: - b3ContactSolverInfoFloatData m_solverInfo; - b3Vector3FloatData m_gravity; - }; - - - -// -------------------------------------------------- // - class SoftBodyMaterialData - { - public: - float m_linearStiffness; - float m_angularStiffness; - float m_volumeStiffness; - int m_flags; - }; - - -// -------------------------------------------------- // - class SoftBodyNodeData - { - public: - SoftBodyMaterialData *m_material; - b3Vector3FloatData m_position; - b3Vector3FloatData m_previousPosition; - b3Vector3FloatData m_velocity; - b3Vector3FloatData m_accumulatedForce; - b3Vector3FloatData m_normal; - float m_inverseMass; - float m_area; - int m_attach; - int m_pad; - }; - - -// -------------------------------------------------- // - class SoftBodyLinkData - { - public: - SoftBodyMaterialData *m_material; - int m_nodeIndices[2]; - float m_restLength; - int m_bbending; - }; - - -// -------------------------------------------------- // - class SoftBodyFaceData - { - public: - b3Vector3FloatData m_normal; - SoftBodyMaterialData *m_material; - int m_nodeIndices[3]; - float m_restArea; - }; - - -// -------------------------------------------------- // - class SoftBodyTetraData - { - public: - b3Vector3FloatData m_c0[4]; - SoftBodyMaterialData *m_material; - int m_nodeIndices[4]; - float m_restVolume; - float m_c1; - float m_c2; - int m_pad; - }; - - -// -------------------------------------------------- // - class SoftRigidAnchorData - { - public: - b3Matrix3x3FloatData m_c0; - b3Vector3FloatData m_c1; - b3Vector3FloatData m_localFrame; - bInvalidHandle *m_rigidBody; - int m_nodeIndex; - float m_c2; - }; - - -// -------------------------------------------------- // - class SoftBodyConfigData - { - public: - int m_aeroModel; - float m_baumgarte; - float m_damping; - float m_drag; - float m_lift; - float m_pressure; - float m_volume; - float m_dynamicFriction; - float m_poseMatch; - float m_rigidContactHardness; - float m_kineticContactHardness; - float m_softContactHardness; - float m_anchorHardness; - float m_softRigidClusterHardness; - float m_softKineticClusterHardness; - float m_softSoftClusterHardness; - float m_softRigidClusterImpulseSplit; - float m_softKineticClusterImpulseSplit; - float m_softSoftClusterImpulseSplit; - float m_maxVolume; - float m_timeScale; - int m_velocityIterations; - int m_positionIterations; - int m_driftIterations; - int m_clusterIterations; - int m_collisionFlags; - }; - - -// -------------------------------------------------- // - class SoftBodyPoseData - { - public: - b3Matrix3x3FloatData m_rot; - b3Matrix3x3FloatData m_scale; - b3Matrix3x3FloatData m_aqq; - b3Vector3FloatData m_com; - b3Vector3FloatData *m_positions; - float *m_weights; - int m_numPositions; - int m_numWeigts; - int m_bvolume; - int m_bframe; - float m_restVolume; - int m_pad; - }; - - -// -------------------------------------------------- // - class SoftBodyClusterData - { - public: - b3TransformFloatData m_framexform; - b3Matrix3x3FloatData m_locii; - b3Matrix3x3FloatData m_invwi; - b3Vector3FloatData m_com; - b3Vector3FloatData m_vimpulses[2]; - b3Vector3FloatData m_dimpulses[2]; - b3Vector3FloatData m_lv; - b3Vector3FloatData m_av; - b3Vector3FloatData *m_framerefs; - int *m_nodeIndices; - float *m_masses; - int m_numFrameRefs; - int m_numNodes; - int m_numMasses; - float m_idmass; - float m_imass; - int m_nvimpulses; - int m_ndimpulses; - float m_ndamping; - float m_ldamping; - float m_adamping; - float m_matching; - float m_maxSelfCollisionImpulse; - float m_selfCollisionImpulseFactor; - int m_containsAnchor; - int m_collide; - int m_clusterIndex; - }; - - -// -------------------------------------------------- // - class b3SoftBodyJointData - { - public: - void *m_bodyA; - void *m_bodyB; - b3Vector3FloatData m_refs[2]; - float m_cfm; - float m_erp; - float m_split; - int m_delete; - b3Vector3FloatData m_relPosition[2]; - int m_bodyAtype; - int m_bodyBtype; - int m_jointType; - int m_pad; - }; - - -// -------------------------------------------------- // - class b3SoftBodyFloatData - { - public: - b3CollisionObjectFloatData m_collisionObjectData; - SoftBodyPoseData *m_pose; - SoftBodyMaterialData **m_materials; - SoftBodyNodeData *m_nodes; - SoftBodyLinkData *m_links; - SoftBodyFaceData *m_faces; - SoftBodyTetraData *m_tetrahedra; - SoftRigidAnchorData *m_anchors; - SoftBodyClusterData *m_clusters; - b3SoftBodyJointData *m_joints; - int m_numMaterials; - int m_numNodes; - int m_numLinks; - int m_numFaces; - int m_numTetrahedra; - int m_numAnchors; - int m_numClusters; - int m_numJoints; - SoftBodyConfigData m_config; - }; - - -} -#endif//__BULLET2_H__
\ No newline at end of file +} bInvalidHandle; + +class PointerArray; +class b3PhysicsSystem; +class ListBase; +class b3Vector3FloatData; +class b3Vector3DoubleData; +class b3Matrix3x3FloatData; +class b3Matrix3x3DoubleData; +class b3TransformFloatData; +class b3TransformDoubleData; +class b3BvhSubtreeInfoData; +class b3OptimizedBvhNodeFloatData; +class b3OptimizedBvhNodeDoubleData; +class b3QuantizedBvhNodeData; +class b3QuantizedBvhFloatData; +class b3QuantizedBvhDoubleData; +class b3CollisionShapeData; +class b3StaticPlaneShapeData; +class b3ConvexInternalShapeData; +class b3PositionAndRadius; +class b3MultiSphereShapeData; +class b3IntIndexData; +class b3ShortIntIndexData; +class b3ShortIntIndexTripletData; +class b3CharIndexTripletData; +class b3MeshPartData; +class b3StridingMeshInterfaceData; +class b3TriangleMeshShapeData; +class b3ScaledTriangleMeshShapeData; +class b3CompoundShapeChildData; +class b3CompoundShapeData; +class b3CylinderShapeData; +class b3CapsuleShapeData; +class b3TriangleInfoData; +class b3TriangleInfoMapData; +class b3GImpactMeshShapeData; +class b3ConvexHullShapeData; +class b3CollisionObjectDoubleData; +class b3CollisionObjectFloatData; +class b3DynamicsWorldDoubleData; +class b3DynamicsWorldFloatData; +class b3RigidBodyFloatData; +class b3RigidBodyDoubleData; +class b3ConstraintInfo1; +class b3TypedConstraintData; +class b3Point2PointConstraintFloatData; +class b3Point2PointConstraintDoubleData; +class b3HingeConstraintDoubleData; +class b3HingeConstraintFloatData; +class b3ConeTwistConstraintData; +class b3Generic6DofConstraintData; +class b3Generic6DofSpringConstraintData; +class b3SliderConstraintData; +class b3ContactSolverInfoDoubleData; +class b3ContactSolverInfoFloatData; +class SoftBodyMaterialData; +class SoftBodyNodeData; +class SoftBodyLinkData; +class SoftBodyFaceData; +class SoftBodyTetraData; +class SoftRigidAnchorData; +class SoftBodyConfigData; +class SoftBodyPoseData; +class SoftBodyClusterData; +class b3SoftBodyJointData; +class b3SoftBodyFloatData; +// -------------------------------------------------- // +class PointerArray +{ +public: + int m_size; + int m_capacity; + void *m_data; +}; + +// -------------------------------------------------- // +class b3PhysicsSystem +{ +public: + PointerArray m_collisionShapes; + PointerArray m_collisionObjects; + PointerArray m_constraints; +}; + +// -------------------------------------------------- // +class ListBase +{ +public: + void *first; + void *last; +}; + +// -------------------------------------------------- // +class b3Vector3FloatData +{ +public: + float m_floats[4]; +}; + +// -------------------------------------------------- // +class b3Vector3DoubleData +{ +public: + double m_floats[4]; +}; + +// -------------------------------------------------- // +class b3Matrix3x3FloatData +{ +public: + b3Vector3FloatData m_el[3]; +}; + +// -------------------------------------------------- // +class b3Matrix3x3DoubleData +{ +public: + b3Vector3DoubleData m_el[3]; +}; + +// -------------------------------------------------- // +class b3TransformFloatData +{ +public: + b3Matrix3x3FloatData m_basis; + b3Vector3FloatData m_origin; +}; + +// -------------------------------------------------- // +class b3TransformDoubleData +{ +public: + b3Matrix3x3DoubleData m_basis; + b3Vector3DoubleData m_origin; +}; + +// -------------------------------------------------- // +class b3BvhSubtreeInfoData +{ +public: + int m_rootNodeIndex; + int m_subtreeSize; + short m_quantizedAabbMin[3]; + short m_quantizedAabbMax[3]; +}; + +// -------------------------------------------------- // +class b3OptimizedBvhNodeFloatData +{ +public: + b3Vector3FloatData m_aabbMinOrg; + b3Vector3FloatData m_aabbMaxOrg; + int m_escapeIndex; + int m_subPart; + int m_triangleIndex; + char m_pad[4]; +}; + +// -------------------------------------------------- // +class b3OptimizedBvhNodeDoubleData +{ +public: + b3Vector3DoubleData m_aabbMinOrg; + b3Vector3DoubleData m_aabbMaxOrg; + int m_escapeIndex; + int m_subPart; + int m_triangleIndex; + char m_pad[4]; +}; + +// -------------------------------------------------- // +class b3QuantizedBvhNodeData +{ +public: + short m_quantizedAabbMin[3]; + short m_quantizedAabbMax[3]; + int m_escapeIndexOrTriangleIndex; +}; + +// -------------------------------------------------- // +class b3QuantizedBvhFloatData +{ +public: + b3Vector3FloatData m_bvhAabbMin; + b3Vector3FloatData m_bvhAabbMax; + b3Vector3FloatData m_bvhQuantization; + int m_curNodeIndex; + int m_useQuantization; + int m_numContiguousLeafNodes; + int m_numQuantizedContiguousNodes; + b3OptimizedBvhNodeFloatData *m_contiguousNodesPtr; + b3QuantizedBvhNodeData *m_quantizedContiguousNodesPtr; + b3BvhSubtreeInfoData *m_subTreeInfoPtr; + int m_traversalMode; + int m_numSubtreeHeaders; +}; + +// -------------------------------------------------- // +class b3QuantizedBvhDoubleData +{ +public: + b3Vector3DoubleData m_bvhAabbMin; + b3Vector3DoubleData m_bvhAabbMax; + b3Vector3DoubleData m_bvhQuantization; + int m_curNodeIndex; + int m_useQuantization; + int m_numContiguousLeafNodes; + int m_numQuantizedContiguousNodes; + b3OptimizedBvhNodeDoubleData *m_contiguousNodesPtr; + b3QuantizedBvhNodeData *m_quantizedContiguousNodesPtr; + int m_traversalMode; + int m_numSubtreeHeaders; + b3BvhSubtreeInfoData *m_subTreeInfoPtr; +}; + +// -------------------------------------------------- // +class b3CollisionShapeData +{ +public: + char *m_name; + int m_shapeType; + char m_padding[4]; +}; + +// -------------------------------------------------- // +class b3StaticPlaneShapeData +{ +public: + b3CollisionShapeData m_collisionShapeData; + b3Vector3FloatData m_localScaling; + b3Vector3FloatData m_planeNormal; + float m_planeConstant; + char m_pad[4]; +}; + +// -------------------------------------------------- // +class b3ConvexInternalShapeData +{ +public: + b3CollisionShapeData m_collisionShapeData; + b3Vector3FloatData m_localScaling; + b3Vector3FloatData m_implicitShapeDimensions; + float m_collisionMargin; + int m_padding; +}; + +// -------------------------------------------------- // +class b3PositionAndRadius +{ +public: + b3Vector3FloatData m_pos; + float m_radius; +}; + +// -------------------------------------------------- // +class b3MultiSphereShapeData +{ +public: + b3ConvexInternalShapeData m_convexInternalShapeData; + b3PositionAndRadius *m_localPositionArrayPtr; + int m_localPositionArraySize; + char m_padding[4]; +}; + +// -------------------------------------------------- // +class b3IntIndexData +{ +public: + int m_value; +}; + +// -------------------------------------------------- // +class b3ShortIntIndexData +{ +public: + short m_value; + char m_pad[2]; +}; + +// -------------------------------------------------- // +class b3ShortIntIndexTripletData +{ +public: + short m_values[3]; + char m_pad[2]; +}; + +// -------------------------------------------------- // +class b3CharIndexTripletData +{ +public: + char m_values[3]; + char m_pad; +}; + +// -------------------------------------------------- // +class b3MeshPartData +{ +public: + b3Vector3FloatData *m_vertices3f; + b3Vector3DoubleData *m_vertices3d; + b3IntIndexData *m_indices32; + b3ShortIntIndexTripletData *m_3indices16; + b3CharIndexTripletData *m_3indices8; + b3ShortIntIndexData *m_indices16; + int m_numTriangles; + int m_numVertices; +}; + +// -------------------------------------------------- // +class b3StridingMeshInterfaceData +{ +public: + b3MeshPartData *m_meshPartsPtr; + b3Vector3FloatData m_scaling; + int m_numMeshParts; + char m_padding[4]; +}; + +// -------------------------------------------------- // +class b3TriangleMeshShapeData +{ +public: + b3CollisionShapeData m_collisionShapeData; + b3StridingMeshInterfaceData m_meshInterface; + b3QuantizedBvhFloatData *m_quantizedFloatBvh; + b3QuantizedBvhDoubleData *m_quantizedDoubleBvh; + b3TriangleInfoMapData *m_triangleInfoMap; + float m_collisionMargin; + char m_pad3[4]; +}; + +// -------------------------------------------------- // +class b3ScaledTriangleMeshShapeData +{ +public: + b3TriangleMeshShapeData m_trimeshShapeData; + b3Vector3FloatData m_localScaling; +}; + +// -------------------------------------------------- // +class b3CompoundShapeChildData +{ +public: + b3TransformFloatData m_transform; + b3CollisionShapeData *m_childShape; + int m_childShapeType; + float m_childMargin; +}; + +// -------------------------------------------------- // +class b3CompoundShapeData +{ +public: + b3CollisionShapeData m_collisionShapeData; + b3CompoundShapeChildData *m_childShapePtr; + int m_numChildShapes; + float m_collisionMargin; +}; + +// -------------------------------------------------- // +class b3CylinderShapeData +{ +public: + b3ConvexInternalShapeData m_convexInternalShapeData; + int m_upAxis; + char m_padding[4]; +}; + +// -------------------------------------------------- // +class b3CapsuleShapeData +{ +public: + b3ConvexInternalShapeData m_convexInternalShapeData; + int m_upAxis; + char m_padding[4]; +}; + +// -------------------------------------------------- // +class b3TriangleInfoData +{ +public: + int m_flags; + float m_edgeV0V1Angle; + float m_edgeV1V2Angle; + float m_edgeV2V0Angle; +}; + +// -------------------------------------------------- // +class b3TriangleInfoMapData +{ +public: + int *m_hashTablePtr; + int *m_nextPtr; + b3TriangleInfoData *m_valueArrayPtr; + int *m_keyArrayPtr; + float m_convexEpsilon; + float m_planarEpsilon; + float m_equalVertexThreshold; + float m_edgeDistanceThreshold; + float m_zeroAreaThreshold; + int m_nextSize; + int m_hashTableSize; + int m_numValues; + int m_numKeys; + char m_padding[4]; +}; + +// -------------------------------------------------- // +class b3GImpactMeshShapeData +{ +public: + b3CollisionShapeData m_collisionShapeData; + b3StridingMeshInterfaceData m_meshInterface; + b3Vector3FloatData m_localScaling; + float m_collisionMargin; + int m_gimpactSubType; +}; + +// -------------------------------------------------- // +class b3ConvexHullShapeData +{ +public: + b3ConvexInternalShapeData m_convexInternalShapeData; + b3Vector3FloatData *m_unscaledPointsFloatPtr; + b3Vector3DoubleData *m_unscaledPointsDoublePtr; + int m_numUnscaledPoints; + char m_padding3[4]; +}; + +// -------------------------------------------------- // +class b3CollisionObjectDoubleData +{ +public: + void *m_broadphaseHandle; + void *m_collisionShape; + b3CollisionShapeData *m_rootCollisionShape; + char *m_name; + b3TransformDoubleData m_worldTransform; + b3TransformDoubleData m_interpolationWorldTransform; + b3Vector3DoubleData m_interpolationLinearVelocity; + b3Vector3DoubleData m_interpolationAngularVelocity; + b3Vector3DoubleData m_anisotropicFriction; + double m_contactProcessingThreshold; + double m_deactivationTime; + double m_friction; + double m_rollingFriction; + double m_restitution; + double m_hitFraction; + double m_ccdSweptSphereRadius; + double m_ccdMotionThreshold; + int m_hasAnisotropicFriction; + int m_collisionFlags; + int m_islandTag1; + int m_companionId; + int m_activationState1; + int m_internalType; + int m_checkCollideWith; + char m_padding[4]; +}; + +// -------------------------------------------------- // +class b3CollisionObjectFloatData +{ +public: + void *m_broadphaseHandle; + void *m_collisionShape; + b3CollisionShapeData *m_rootCollisionShape; + char *m_name; + b3TransformFloatData m_worldTransform; + b3TransformFloatData m_interpolationWorldTransform; + b3Vector3FloatData m_interpolationLinearVelocity; + b3Vector3FloatData m_interpolationAngularVelocity; + b3Vector3FloatData m_anisotropicFriction; + float m_contactProcessingThreshold; + float m_deactivationTime; + float m_friction; + float m_rollingFriction; + float m_restitution; + float m_hitFraction; + float m_ccdSweptSphereRadius; + float m_ccdMotionThreshold; + int m_hasAnisotropicFriction; + int m_collisionFlags; + int m_islandTag1; + int m_companionId; + int m_activationState1; + int m_internalType; + int m_checkCollideWith; + char m_padding[4]; +}; + +// -------------------------------------------------- // +class b3RigidBodyFloatData +{ +public: + b3CollisionObjectFloatData m_collisionObjectData; + b3Matrix3x3FloatData m_invInertiaTensorWorld; + b3Vector3FloatData m_linearVelocity; + b3Vector3FloatData m_angularVelocity; + b3Vector3FloatData m_angularFactor; + b3Vector3FloatData m_linearFactor; + b3Vector3FloatData m_gravity; + b3Vector3FloatData m_gravity_acceleration; + b3Vector3FloatData m_invInertiaLocal; + b3Vector3FloatData m_totalForce; + b3Vector3FloatData m_totalTorque; + float m_inverseMass; + float m_linearDamping; + float m_angularDamping; + float m_additionalDampingFactor; + float m_additionalLinearDampingThresholdSqr; + float m_additionalAngularDampingThresholdSqr; + float m_additionalAngularDampingFactor; + float m_linearSleepingThreshold; + float m_angularSleepingThreshold; + int m_additionalDamping; +}; + +// -------------------------------------------------- // +class b3RigidBodyDoubleData +{ +public: + b3CollisionObjectDoubleData m_collisionObjectData; + b3Matrix3x3DoubleData m_invInertiaTensorWorld; + b3Vector3DoubleData m_linearVelocity; + b3Vector3DoubleData m_angularVelocity; + b3Vector3DoubleData m_angularFactor; + b3Vector3DoubleData m_linearFactor; + b3Vector3DoubleData m_gravity; + b3Vector3DoubleData m_gravity_acceleration; + b3Vector3DoubleData m_invInertiaLocal; + b3Vector3DoubleData m_totalForce; + b3Vector3DoubleData m_totalTorque; + double m_inverseMass; + double m_linearDamping; + double m_angularDamping; + double m_additionalDampingFactor; + double m_additionalLinearDampingThresholdSqr; + double m_additionalAngularDampingThresholdSqr; + double m_additionalAngularDampingFactor; + double m_linearSleepingThreshold; + double m_angularSleepingThreshold; + int m_additionalDamping; + char m_padding[4]; +}; + +// -------------------------------------------------- // +class b3ConstraintInfo1 +{ +public: + int m_numConstraintRows; + int nub; +}; + +// -------------------------------------------------- // +class b3TypedConstraintData +{ +public: + bInvalidHandle *m_rbA; + bInvalidHandle *m_rbB; + char *m_name; + int m_objectType; + int m_userConstraintType; + int m_userConstraintId; + int m_needsFeedback; + float m_appliedImpulse; + float m_dbgDrawSize; + int m_disableCollisionsBetweenLinkedBodies; + int m_overrideNumSolverIterations; + float m_breakingImpulseThreshold; + int m_isEnabled; +}; + +// -------------------------------------------------- // +class b3Point2PointConstraintFloatData +{ +public: + b3TypedConstraintData m_typeConstraintData; + b3Vector3FloatData m_pivotInA; + b3Vector3FloatData m_pivotInB; +}; + +// -------------------------------------------------- // +class b3Point2PointConstraintDoubleData +{ +public: + b3TypedConstraintData m_typeConstraintData; + b3Vector3DoubleData m_pivotInA; + b3Vector3DoubleData m_pivotInB; +}; + +// -------------------------------------------------- // +class b3HingeConstraintDoubleData +{ +public: + b3TypedConstraintData m_typeConstraintData; + b3TransformDoubleData m_rbAFrame; + b3TransformDoubleData m_rbBFrame; + int m_useReferenceFrameA; + int m_angularOnly; + int m_enableAngularMotor; + float m_motorTargetVelocity; + float m_maxMotorImpulse; + float m_lowerLimit; + float m_upperLimit; + float m_limitSoftness; + float m_biasFactor; + float m_relaxationFactor; +}; + +// -------------------------------------------------- // +class b3HingeConstraintFloatData +{ +public: + b3TypedConstraintData m_typeConstraintData; + b3TransformFloatData m_rbAFrame; + b3TransformFloatData m_rbBFrame; + int m_useReferenceFrameA; + int m_angularOnly; + int m_enableAngularMotor; + float m_motorTargetVelocity; + float m_maxMotorImpulse; + float m_lowerLimit; + float m_upperLimit; + float m_limitSoftness; + float m_biasFactor; + float m_relaxationFactor; +}; + +// -------------------------------------------------- // +class b3ConeTwistConstraintData +{ +public: + b3TypedConstraintData m_typeConstraintData; + b3TransformFloatData m_rbAFrame; + b3TransformFloatData m_rbBFrame; + float m_swingSpan1; + float m_swingSpan2; + float m_twistSpan; + float m_limitSoftness; + float m_biasFactor; + float m_relaxationFactor; + float m_damping; + char m_pad[4]; +}; + +// -------------------------------------------------- // +class b3Generic6DofConstraintData +{ +public: + b3TypedConstraintData m_typeConstraintData; + b3TransformFloatData m_rbAFrame; + b3TransformFloatData m_rbBFrame; + b3Vector3FloatData m_linearUpperLimit; + b3Vector3FloatData m_linearLowerLimit; + b3Vector3FloatData m_angularUpperLimit; + b3Vector3FloatData m_angularLowerLimit; + int m_useLinearReferenceFrameA; + int m_useOffsetForConstraintFrame; +}; + +// -------------------------------------------------- // +class b3Generic6DofSpringConstraintData +{ +public: + b3Generic6DofConstraintData m_6dofData; + int m_springEnabled[6]; + float m_equilibriumPoint[6]; + float m_springStiffness[6]; + float m_springDamping[6]; +}; + +// -------------------------------------------------- // +class b3SliderConstraintData +{ +public: + b3TypedConstraintData m_typeConstraintData; + b3TransformFloatData m_rbAFrame; + b3TransformFloatData m_rbBFrame; + float m_linearUpperLimit; + float m_linearLowerLimit; + float m_angularUpperLimit; + float m_angularLowerLimit; + int m_useLinearReferenceFrameA; + int m_useOffsetForConstraintFrame; +}; + +// -------------------------------------------------- // +class b3ContactSolverInfoDoubleData +{ +public: + double m_tau; + double m_damping; + double m_friction; + double m_timeStep; + double m_restitution; + double m_maxErrorReduction; + double m_sor; + double m_erp; + double m_erp2; + double m_globalCfm; + double m_splitImpulsePenetrationThreshold; + double m_splitImpulseTurnErp; + double m_linearSlop; + double m_warmstartingFactor; + double m_maxGyroscopicForce; + double m_singleAxisRollingFrictionThreshold; + int m_numIterations; + int m_solverMode; + int m_restingContactRestitutionThreshold; + int m_minimumSolverBatchSize; + int m_splitImpulse; + char m_padding[4]; +}; + +// -------------------------------------------------- // +class b3ContactSolverInfoFloatData +{ +public: + float m_tau; + float m_damping; + float m_friction; + float m_timeStep; + float m_restitution; + float m_maxErrorReduction; + float m_sor; + float m_erp; + float m_erp2; + float m_globalCfm; + float m_splitImpulsePenetrationThreshold; + float m_splitImpulseTurnErp; + float m_linearSlop; + float m_warmstartingFactor; + float m_maxGyroscopicForce; + float m_singleAxisRollingFrictionThreshold; + int m_numIterations; + int m_solverMode; + int m_restingContactRestitutionThreshold; + int m_minimumSolverBatchSize; + int m_splitImpulse; + char m_padding[4]; +}; + +// -------------------------------------------------- // +class b3DynamicsWorldDoubleData +{ +public: + b3ContactSolverInfoDoubleData m_solverInfo; + b3Vector3DoubleData m_gravity; +}; + +// -------------------------------------------------- // +class b3DynamicsWorldFloatData +{ +public: + b3ContactSolverInfoFloatData m_solverInfo; + b3Vector3FloatData m_gravity; +}; + +// -------------------------------------------------- // +class SoftBodyMaterialData +{ +public: + float m_linearStiffness; + float m_angularStiffness; + float m_volumeStiffness; + int m_flags; +}; + +// -------------------------------------------------- // +class SoftBodyNodeData +{ +public: + SoftBodyMaterialData *m_material; + b3Vector3FloatData m_position; + b3Vector3FloatData m_previousPosition; + b3Vector3FloatData m_velocity; + b3Vector3FloatData m_accumulatedForce; + b3Vector3FloatData m_normal; + float m_inverseMass; + float m_area; + int m_attach; + int m_pad; +}; + +// -------------------------------------------------- // +class SoftBodyLinkData +{ +public: + SoftBodyMaterialData *m_material; + int m_nodeIndices[2]; + float m_restLength; + int m_bbending; +}; + +// -------------------------------------------------- // +class SoftBodyFaceData +{ +public: + b3Vector3FloatData m_normal; + SoftBodyMaterialData *m_material; + int m_nodeIndices[3]; + float m_restArea; +}; + +// -------------------------------------------------- // +class SoftBodyTetraData +{ +public: + b3Vector3FloatData m_c0[4]; + SoftBodyMaterialData *m_material; + int m_nodeIndices[4]; + float m_restVolume; + float m_c1; + float m_c2; + int m_pad; +}; + +// -------------------------------------------------- // +class SoftRigidAnchorData +{ +public: + b3Matrix3x3FloatData m_c0; + b3Vector3FloatData m_c1; + b3Vector3FloatData m_localFrame; + bInvalidHandle *m_rigidBody; + int m_nodeIndex; + float m_c2; +}; + +// -------------------------------------------------- // +class SoftBodyConfigData +{ +public: + int m_aeroModel; + float m_baumgarte; + float m_damping; + float m_drag; + float m_lift; + float m_pressure; + float m_volume; + float m_dynamicFriction; + float m_poseMatch; + float m_rigidContactHardness; + float m_kineticContactHardness; + float m_softContactHardness; + float m_anchorHardness; + float m_softRigidClusterHardness; + float m_softKineticClusterHardness; + float m_softSoftClusterHardness; + float m_softRigidClusterImpulseSplit; + float m_softKineticClusterImpulseSplit; + float m_softSoftClusterImpulseSplit; + float m_maxVolume; + float m_timeScale; + int m_velocityIterations; + int m_positionIterations; + int m_driftIterations; + int m_clusterIterations; + int m_collisionFlags; +}; + +// -------------------------------------------------- // +class SoftBodyPoseData +{ +public: + b3Matrix3x3FloatData m_rot; + b3Matrix3x3FloatData m_scale; + b3Matrix3x3FloatData m_aqq; + b3Vector3FloatData m_com; + b3Vector3FloatData *m_positions; + float *m_weights; + int m_numPositions; + int m_numWeigts; + int m_bvolume; + int m_bframe; + float m_restVolume; + int m_pad; +}; + +// -------------------------------------------------- // +class SoftBodyClusterData +{ +public: + b3TransformFloatData m_framexform; + b3Matrix3x3FloatData m_locii; + b3Matrix3x3FloatData m_invwi; + b3Vector3FloatData m_com; + b3Vector3FloatData m_vimpulses[2]; + b3Vector3FloatData m_dimpulses[2]; + b3Vector3FloatData m_lv; + b3Vector3FloatData m_av; + b3Vector3FloatData *m_framerefs; + int *m_nodeIndices; + float *m_masses; + int m_numFrameRefs; + int m_numNodes; + int m_numMasses; + float m_idmass; + float m_imass; + int m_nvimpulses; + int m_ndimpulses; + float m_ndamping; + float m_ldamping; + float m_adamping; + float m_matching; + float m_maxSelfCollisionImpulse; + float m_selfCollisionImpulseFactor; + int m_containsAnchor; + int m_collide; + int m_clusterIndex; +}; + +// -------------------------------------------------- // +class b3SoftBodyJointData +{ +public: + void *m_bodyA; + void *m_bodyB; + b3Vector3FloatData m_refs[2]; + float m_cfm; + float m_erp; + float m_split; + int m_delete; + b3Vector3FloatData m_relPosition[2]; + int m_bodyAtype; + int m_bodyBtype; + int m_jointType; + int m_pad; +}; + +// -------------------------------------------------- // +class b3SoftBodyFloatData +{ +public: + b3CollisionObjectFloatData m_collisionObjectData; + SoftBodyPoseData *m_pose; + SoftBodyMaterialData **m_materials; + SoftBodyNodeData *m_nodes; + SoftBodyLinkData *m_links; + SoftBodyFaceData *m_faces; + SoftBodyTetraData *m_tetrahedra; + SoftRigidAnchorData *m_anchors; + SoftBodyClusterData *m_clusters; + b3SoftBodyJointData *m_joints; + int m_numMaterials; + int m_numNodes; + int m_numLinks; + int m_numFaces; + int m_numTetrahedra; + int m_numAnchors; + int m_numClusters; + int m_numJoints; + SoftBodyConfigData m_config; +}; + +} // namespace Bullet3SerializeBullet2 +#endif //__BULLET2_H__
\ No newline at end of file diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.cpp b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.cpp index c3ceb8388c..d2a7163670 100644 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.cpp +++ b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.cpp @@ -17,12 +17,11 @@ subject to the following restrictions: #include "b3Defines.h" #include "b3DNA.h" -#if !defined( __CELLOS_LV2__) && !defined(__MWERKS__) +#if !defined(__CELLOS_LV2__) && !defined(__MWERKS__) #include <memory.h> #endif #include <string.h> - // 32 && 64 bit versions #ifdef B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES #ifdef _WIN64 @@ -31,130 +30,116 @@ extern int b3s_bulletDNAlen64; #else extern char b3s_bulletDNAstr[]; extern int b3s_bulletDNAlen; -#endif //_WIN64 -#else//B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES +#endif //_WIN64 +#else //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES extern char b3s_bulletDNAstr64[]; extern int b3s_bulletDNAlen64; extern char b3s_bulletDNAstr[]; extern int b3s_bulletDNAlen; -#endif //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES +#endif //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES using namespace bParse; b3BulletFile::b3BulletFile() -:bFile("", "BULLET ") + : bFile("", "BULLET ") { - mMemoryDNA = new bDNA(); //this memory gets released in the bFile::~bFile destructor,@todo not consistent with the rule 'who allocates it, has to deallocate it" + mMemoryDNA = new bDNA(); //this memory gets released in the bFile::~bFile destructor,@todo not consistent with the rule 'who allocates it, has to deallocate it" m_DnaCopy = 0; - #ifdef B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES #ifdef _WIN64 - m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen64,16); - memcpy(m_DnaCopy,b3s_bulletDNAstr64,b3s_bulletDNAlen64); - mMemoryDNA->init(m_DnaCopy,b3s_bulletDNAlen64); -#else//_WIN64 - m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen,16); - memcpy(m_DnaCopy,b3s_bulletDNAstr,b3s_bulletDNAlen); - mMemoryDNA->init(m_DnaCopy,b3s_bulletDNAlen); -#endif//_WIN64 -#else//B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES + m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen64, 16); + memcpy(m_DnaCopy, b3s_bulletDNAstr64, b3s_bulletDNAlen64); + mMemoryDNA->init(m_DnaCopy, b3s_bulletDNAlen64); +#else //_WIN64 + m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen, 16); + memcpy(m_DnaCopy, b3s_bulletDNAstr, b3s_bulletDNAlen); + mMemoryDNA->init(m_DnaCopy, b3s_bulletDNAlen); +#endif //_WIN64 +#else //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES if (VOID_IS_8) { - m_DnaCopy = (char*) b3AlignedAlloc(b3s_bulletDNAlen64,16); - memcpy(m_DnaCopy,b3s_bulletDNAstr64,b3s_bulletDNAlen64); - mMemoryDNA->init(m_DnaCopy,b3s_bulletDNAlen64); + m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen64, 16); + memcpy(m_DnaCopy, b3s_bulletDNAstr64, b3s_bulletDNAlen64); + mMemoryDNA->init(m_DnaCopy, b3s_bulletDNAlen64); } else { - m_DnaCopy =(char*) b3AlignedAlloc(b3s_bulletDNAlen,16); - memcpy(m_DnaCopy,b3s_bulletDNAstr,b3s_bulletDNAlen); - mMemoryDNA->init(m_DnaCopy,b3s_bulletDNAlen); + m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen, 16); + memcpy(m_DnaCopy, b3s_bulletDNAstr, b3s_bulletDNAlen); + mMemoryDNA->init(m_DnaCopy, b3s_bulletDNAlen); } -#endif//B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES +#endif //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES } - - b3BulletFile::b3BulletFile(const char* fileName) -:bFile(fileName, "BULLET ") + : bFile(fileName, "BULLET ") { m_DnaCopy = 0; } - - -b3BulletFile::b3BulletFile(char *memoryBuffer, int len) -:bFile(memoryBuffer,len, "BULLET ") +b3BulletFile::b3BulletFile(char* memoryBuffer, int len) + : bFile(memoryBuffer, len, "BULLET ") { m_DnaCopy = 0; } - b3BulletFile::~b3BulletFile() { if (m_DnaCopy) b3AlignedFree(m_DnaCopy); - while (m_dataBlocks.size()) { - char* dataBlock = m_dataBlocks[m_dataBlocks.size()-1]; + char* dataBlock = m_dataBlocks[m_dataBlocks.size() - 1]; delete[] dataBlock; m_dataBlocks.pop_back(); } - } - - // ----------------------------------------------------- // void b3BulletFile::parseData() { -// printf ("Building datablocks"); -// printf ("Chunk size = %d",CHUNK_HEADER_LEN); -// printf ("File chunk size = %d",ChunkUtils::getOffset(mFlags)); + // printf ("Building datablocks"); + // printf ("Chunk size = %d",CHUNK_HEADER_LEN); + // printf ("File chunk size = %d",ChunkUtils::getOffset(mFlags)); - const bool brokenDNA = (mFlags&FD_BROKEN_DNA)!=0; + const bool brokenDNA = (mFlags & FD_BROKEN_DNA) != 0; //const bool swap = (mFlags&FD_ENDIAN_SWAP)!=0; - mDataStart = 12; - char *dataPtr = mFileBuffer+mDataStart; + char* dataPtr = mFileBuffer + mDataStart; bChunkInd dataChunk; dataChunk.code = 0; - //dataPtr += ChunkUtils::getNextBlock(&dataChunk, dataPtr, mFlags); int seek = getNextBlock(&dataChunk, dataPtr, mFlags); - - - if (mFlags &FD_ENDIAN_SWAP) + + if (mFlags & FD_ENDIAN_SWAP) swapLen(dataPtr); //dataPtr += ChunkUtils::getOffset(mFlags); - char *dataPtrHead = 0; + char* dataPtrHead = 0; while (dataChunk.code != B3_DNA1) { - if (!brokenDNA || (dataChunk.code != B3_QUANTIZED_BVH_CODE) ) + if (!brokenDNA || (dataChunk.code != B3_QUANTIZED_BVH_CODE)) { - // one behind if (dataChunk.code == B3_SDNA) break; //if (dataChunk.code == DNA1) break; // same as (BHEAD+DATA dependency) - dataPtrHead = dataPtr+ChunkUtils::getOffset(mFlags); - if (dataChunk.dna_nr>=0) + dataPtrHead = dataPtr + ChunkUtils::getOffset(mFlags); + if (dataChunk.dna_nr >= 0) { - char *id = readStruct(dataPtrHead, dataChunk); + char* id = readStruct(dataPtrHead, dataChunk); // lookup maps if (id) @@ -171,96 +156,91 @@ void b3BulletFile::parseData() if (dataChunk.code == B3_SOFTBODY_CODE) { - m_softBodies.push_back((bStructHandle*) id); + m_softBodies.push_back((bStructHandle*)id); } - + if (dataChunk.code == B3_RIGIDBODY_CODE) { - m_rigidBodies.push_back((bStructHandle*) id); + m_rigidBodies.push_back((bStructHandle*)id); } if (dataChunk.code == B3_DYNAMICSWORLD_CODE) { - m_dynamicsWorldInfo.push_back((bStructHandle*) id); + m_dynamicsWorldInfo.push_back((bStructHandle*)id); } if (dataChunk.code == B3_CONSTRAINT_CODE) { - m_constraints.push_back((bStructHandle*) id); + m_constraints.push_back((bStructHandle*)id); } if (dataChunk.code == B3_QUANTIZED_BVH_CODE) { - m_bvhs.push_back((bStructHandle*) id); + m_bvhs.push_back((bStructHandle*)id); } if (dataChunk.code == B3_TRIANLGE_INFO_MAP) { - m_triangleInfoMaps.push_back((bStructHandle*) id); + m_triangleInfoMaps.push_back((bStructHandle*)id); } if (dataChunk.code == B3_COLLISIONOBJECT_CODE) { - m_collisionObjects.push_back((bStructHandle*) id); + m_collisionObjects.push_back((bStructHandle*)id); } if (dataChunk.code == B3_SHAPE_CODE) { - m_collisionShapes.push_back((bStructHandle*) id); + m_collisionShapes.push_back((bStructHandle*)id); } - // if (dataChunk.code == GLOB) - // { - // m_glob = (bStructHandle*) id; - // } - } else + // if (dataChunk.code == GLOB) + // { + // m_glob = (bStructHandle*) id; + // } + } + else { //printf("unknown chunk\n"); mLibPointers.insert(dataChunk.oldPtr, (bStructHandle*)dataPtrHead); } - } else + } + else { printf("skipping B3_QUANTIZED_BVH_CODE due to broken DNA\n"); } - dataPtr += seek; - seek = getNextBlock(&dataChunk, dataPtr, mFlags); - if (mFlags &FD_ENDIAN_SWAP) + seek = getNextBlock(&dataChunk, dataPtr, mFlags); + if (mFlags & FD_ENDIAN_SWAP) swapLen(dataPtr); if (seek < 0) break; } - } -void b3BulletFile::addDataBlock(char* dataBlock) +void b3BulletFile::addDataBlock(char* dataBlock) { m_dataBlocks.push_back(dataBlock); - } - - - -void b3BulletFile::writeDNA(FILE* fp) +void b3BulletFile::writeDNA(FILE* fp) { - bChunkInd dataChunk; dataChunk.code = B3_DNA1; dataChunk.dna_nr = 0; dataChunk.nr = 1; -#ifdef B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES +#ifdef B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES if (VOID_IS_8) { #ifdef _WIN64 dataChunk.len = b3s_bulletDNAlen64; dataChunk.oldPtr = b3s_bulletDNAstr64; - fwrite(&dataChunk,sizeof(bChunkInd),1,fp); - fwrite(b3s_bulletDNAstr64, b3s_bulletDNAlen64,1,fp); + fwrite(&dataChunk, sizeof(bChunkInd), 1, fp); + fwrite(b3s_bulletDNAstr64, b3s_bulletDNAlen64, 1, fp); #else b3Assert(0); #endif @@ -270,43 +250,42 @@ void b3BulletFile::writeDNA(FILE* fp) #ifndef _WIN64 dataChunk.len = b3s_bulletDNAlen; dataChunk.oldPtr = b3s_bulletDNAstr; - fwrite(&dataChunk,sizeof(bChunkInd),1,fp); - fwrite(b3s_bulletDNAstr, b3s_bulletDNAlen,1,fp); -#else//_WIN64 + fwrite(&dataChunk, sizeof(bChunkInd), 1, fp); + fwrite(b3s_bulletDNAstr, b3s_bulletDNAlen, 1, fp); +#else //_WIN64 b3Assert(0); -#endif//_WIN64 +#endif //_WIN64 } -#else//B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES +#else //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES if (VOID_IS_8) { dataChunk.len = b3s_bulletDNAlen64; dataChunk.oldPtr = b3s_bulletDNAstr64; - fwrite(&dataChunk,sizeof(bChunkInd),1,fp); - fwrite(b3s_bulletDNAstr64, b3s_bulletDNAlen64,1,fp); + fwrite(&dataChunk, sizeof(bChunkInd), 1, fp); + fwrite(b3s_bulletDNAstr64, b3s_bulletDNAlen64, 1, fp); } else { dataChunk.len = b3s_bulletDNAlen; dataChunk.oldPtr = b3s_bulletDNAstr; - fwrite(&dataChunk,sizeof(bChunkInd),1,fp); - fwrite(b3s_bulletDNAstr, b3s_bulletDNAlen,1,fp); + fwrite(&dataChunk, sizeof(bChunkInd), 1, fp); + fwrite(b3s_bulletDNAstr, b3s_bulletDNAlen, 1, fp); } -#endif//B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES +#endif //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES } - -void b3BulletFile::parse(int verboseMode) +void b3BulletFile::parse(int verboseMode) { #ifdef B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES if (VOID_IS_8) { #ifdef _WIN64 - + if (m_DnaCopy) delete m_DnaCopy; - m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen64,16); - memcpy(m_DnaCopy,b3s_bulletDNAstr64,b3s_bulletDNAlen64); - parseInternal(verboseMode,(char*)b3s_bulletDNAstr64,b3s_bulletDNAlen64); + m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen64, 16); + memcpy(m_DnaCopy, b3s_bulletDNAstr64, b3s_bulletDNAlen64); + parseInternal(verboseMode, (char*)b3s_bulletDNAstr64, b3s_bulletDNAlen64); #else b3Assert(0); #endif @@ -317,93 +296,91 @@ void b3BulletFile::parse(int verboseMode) if (m_DnaCopy) delete m_DnaCopy; - m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen,16); - memcpy(m_DnaCopy,b3s_bulletDNAstr,b3s_bulletDNAlen); - parseInternal(verboseMode,m_DnaCopy,b3s_bulletDNAlen); + m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen, 16); + memcpy(m_DnaCopy, b3s_bulletDNAstr, b3s_bulletDNAlen); + parseInternal(verboseMode, m_DnaCopy, b3s_bulletDNAlen); #else b3Assert(0); #endif } -#else//B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES +#else //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES if (VOID_IS_8) { if (m_DnaCopy) delete m_DnaCopy; - m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen64,16); - memcpy(m_DnaCopy,b3s_bulletDNAstr64,b3s_bulletDNAlen64); - parseInternal(verboseMode,m_DnaCopy,b3s_bulletDNAlen64); + m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen64, 16); + memcpy(m_DnaCopy, b3s_bulletDNAstr64, b3s_bulletDNAlen64); + parseInternal(verboseMode, m_DnaCopy, b3s_bulletDNAlen64); } else { if (m_DnaCopy) delete m_DnaCopy; - m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen,16); - memcpy(m_DnaCopy,b3s_bulletDNAstr,b3s_bulletDNAlen); - parseInternal(verboseMode,m_DnaCopy,b3s_bulletDNAlen); + m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen, 16); + memcpy(m_DnaCopy, b3s_bulletDNAstr, b3s_bulletDNAlen); + parseInternal(verboseMode, m_DnaCopy, b3s_bulletDNAlen); } -#endif//B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES - +#endif //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES + //the parsing will convert to cpu endian - mFlags &=~FD_ENDIAN_SWAP; + mFlags &= ~FD_ENDIAN_SWAP; - int littleEndian= 1; - littleEndian= ((char*)&littleEndian)[0]; - - mFileBuffer[8] = littleEndian?'v':'V'; - + int littleEndian = 1; + littleEndian = ((char*)&littleEndian)[0]; + + mFileBuffer[8] = littleEndian ? 'v' : 'V'; } // experimental -int b3BulletFile::write(const char* fileName, bool fixupPointers) +int b3BulletFile::write(const char* fileName, bool fixupPointers) { - FILE *fp = fopen(fileName, "wb"); + FILE* fp = fopen(fileName, "wb"); if (fp) { - char header[B3_SIZEOFBLENDERHEADER] ; + char header[B3_SIZEOFBLENDERHEADER]; memcpy(header, m_headerString, 7); - int endian= 1; - endian= ((char*)&endian)[0]; + int endian = 1; + endian = ((char*)&endian)[0]; if (endian) { header[7] = '_'; - } else + } + else { header[7] = '-'; } if (VOID_IS_8) { - header[8]='V'; - } else + header[8] = 'V'; + } + else { - header[8]='v'; + header[8] = 'v'; } header[9] = '2'; header[10] = '7'; header[11] = '5'; - - fwrite(header,B3_SIZEOFBLENDERHEADER,1,fp); + + fwrite(header, B3_SIZEOFBLENDERHEADER, 1, fp); writeChunks(fp, fixupPointers); writeDNA(fp); fclose(fp); - - } else + } + else { - printf("Error: cannot open file %s for writing\n",fileName); + printf("Error: cannot open file %s for writing\n", fileName); return 0; } return 1; } - - -void b3BulletFile::addStruct(const char* structType,void* data, int len, void* oldPtr, int code) +void b3BulletFile::addStruct(const char* structType, void* data, int len, void* oldPtr, int code) { - bParse::bChunkInd dataChunk; dataChunk.code = code; dataChunk.nr = 1; @@ -412,11 +389,11 @@ void b3BulletFile::addStruct(const char* structType,void* data, int len, void* o dataChunk.oldPtr = oldPtr; ///Perform structure size validation - short* structInfo= mMemoryDNA->getStruct(dataChunk.dna_nr); + short* structInfo = mMemoryDNA->getStruct(dataChunk.dna_nr); int elemBytes; - elemBytes= mMemoryDNA->getLength(structInfo[0]); -// int elemBytes = mMemoryDNA->getElementSize(structInfo[0],structInfo[1]); - assert(len==elemBytes); + elemBytes = mMemoryDNA->getLength(structInfo[0]); + // int elemBytes = mMemoryDNA->getElementSize(structInfo[0],structInfo[1]); + assert(len == elemBytes); mLibPointers.insert(dataChunk.oldPtr, (bStructHandle*)data); m_chunks.push_back(dataChunk); diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.h b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.h index fb1b9b0dde..ede1d378ae 100644 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.h +++ b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.h @@ -16,68 +16,59 @@ subject to the following restrictions: #ifndef B3_BULLET_FILE_H #define B3_BULLET_FILE_H - #include "b3File.h" #include "Bullet3Common/b3AlignedObjectArray.h" #include "b3Defines.h" #include "Bullet3Serialize/Bullet2FileLoader/b3Serializer.h" +namespace bParse +{ +// ----------------------------------------------------- // +class b3BulletFile : public bFile +{ +protected: + char* m_DnaCopy; +public: + b3AlignedObjectArray<bStructHandle*> m_softBodies; -namespace bParse { - - // ----------------------------------------------------- // - class b3BulletFile : public bFile - { - - - protected: - - char* m_DnaCopy; - - public: - - b3AlignedObjectArray<bStructHandle*> m_softBodies; - - b3AlignedObjectArray<bStructHandle*> m_rigidBodies; - - b3AlignedObjectArray<bStructHandle*> m_collisionObjects; + b3AlignedObjectArray<bStructHandle*> m_rigidBodies; - b3AlignedObjectArray<bStructHandle*> m_collisionShapes; + b3AlignedObjectArray<bStructHandle*> m_collisionObjects; - b3AlignedObjectArray<bStructHandle*> m_constraints; + b3AlignedObjectArray<bStructHandle*> m_collisionShapes; - b3AlignedObjectArray<bStructHandle*> m_bvhs; + b3AlignedObjectArray<bStructHandle*> m_constraints; - b3AlignedObjectArray<bStructHandle*> m_triangleInfoMaps; + b3AlignedObjectArray<bStructHandle*> m_bvhs; - b3AlignedObjectArray<bStructHandle*> m_dynamicsWorldInfo; + b3AlignedObjectArray<bStructHandle*> m_triangleInfoMaps; - b3AlignedObjectArray<char*> m_dataBlocks; - b3BulletFile(); + b3AlignedObjectArray<bStructHandle*> m_dynamicsWorldInfo; - b3BulletFile(const char* fileName); + b3AlignedObjectArray<char*> m_dataBlocks; + b3BulletFile(); - b3BulletFile(char *memoryBuffer, int len); + b3BulletFile(const char* fileName); - virtual ~b3BulletFile(); + b3BulletFile(char* memoryBuffer, int len); - virtual void addDataBlock(char* dataBlock); - + virtual ~b3BulletFile(); - // experimental - virtual int write(const char* fileName, bool fixupPointers=false); + virtual void addDataBlock(char* dataBlock); - virtual void parse(int verboseMode); + // experimental + virtual int write(const char* fileName, bool fixupPointers = false); - virtual void parseData(); + virtual void parse(int verboseMode); - virtual void writeDNA(FILE* fp); + virtual void parseData(); - void addStruct(const char* structType,void* data, int len, void* oldPtr, int code); + virtual void writeDNA(FILE* fp); - }; + void addStruct(const char* structType, void* data, int len, void* oldPtr, int code); }; +}; // namespace bParse -#endif //B3_BULLET_FILE_H +#endif //B3_BULLET_FILE_H diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Chunk.cpp b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Chunk.cpp index c0e1bb708c..ff75ff8cc4 100644 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Chunk.cpp +++ b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Chunk.cpp @@ -17,15 +17,13 @@ subject to the following restrictions: #include "b3Defines.h" #include "b3File.h" -#if !defined( __CELLOS_LV2__) && !defined(__MWERKS__) +#if !defined(__CELLOS_LV2__) && !defined(__MWERKS__) #include <memory.h> #endif #include <string.h> - using namespace bParse; - // ----------------------------------------------------- // short ChunkUtils::swapShort(short sht) { @@ -57,19 +55,15 @@ int ChunkUtils::getOffset(int flags) if (VOID_IS_8) { - if (flags &FD_BITS_VARIES) + if (flags & FD_BITS_VARIES) res = sizeof(bChunkPtr4); } else { - if (flags &FD_BITS_VARIES) + if (flags & FD_BITS_VARIES) res = sizeof(bChunkPtr8); } return res; } - - - - //eof diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Chunk.h b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Chunk.h index 03ecb6b4fa..c9d0f37d9e 100644 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Chunk.h +++ b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Chunk.h @@ -16,77 +16,69 @@ subject to the following restrictions: #ifndef __BCHUNK_H__ #define __BCHUNK_H__ -#if defined (_WIN32) && ! defined (__MINGW32__) - #define b3Long64 __int64 -#elif defined (__MINGW32__) - #include <stdint.h> - #define b3Long64 int64_t +#if defined(_WIN32) && !defined(__MINGW32__) +#define b3Long64 __int64 +#elif defined(__MINGW32__) +#include <stdint.h> +#define b3Long64 int64_t #else - #define b3Long64 long long +#define b3Long64 long long #endif - -namespace bParse { - - - // ----------------------------------------------------- // - class bChunkPtr4 - { - public: - bChunkPtr4(){} - int code; - int len; - union - { - int m_uniqueInt; - }; - int dna_nr; - int nr; - }; - - // ----------------------------------------------------- // - class bChunkPtr8 - { - public: - bChunkPtr8(){} - int code, len; - union - { - b3Long64 oldPrev; - int m_uniqueInts[2]; - }; - int dna_nr, nr; - }; - - // ----------------------------------------------------- // - class bChunkInd - { - public: - bChunkInd(){} - int code, len; - void *oldPtr; - int dna_nr, nr; +namespace bParse +{ +// ----------------------------------------------------- // +class bChunkPtr4 +{ +public: + bChunkPtr4() {} + int code; + int len; + union { + int m_uniqueInt; }; - - - // ----------------------------------------------------- // - class ChunkUtils - { - public: - - // file chunk offset - static int getOffset(int flags); - - // endian utils - static short swapShort(short sht); - static int swapInt(int inte); - static b3Long64 swapLong64(b3Long64 lng); - + int dna_nr; + int nr; +}; + +// ----------------------------------------------------- // +class bChunkPtr8 +{ +public: + bChunkPtr8() {} + int code, len; + union { + b3Long64 oldPrev; + int m_uniqueInts[2]; }; - - - const int CHUNK_HEADER_LEN = ((sizeof(bChunkInd))); - const bool VOID_IS_8 = ((sizeof(void*)==8)); -} - -#endif//__BCHUNK_H__ + int dna_nr, nr; +}; + +// ----------------------------------------------------- // +class bChunkInd +{ +public: + bChunkInd() {} + int code, len; + void *oldPtr; + int dna_nr, nr; +}; + +// ----------------------------------------------------- // +class ChunkUtils +{ +public: + // file chunk offset + static int getOffset(int flags); + + // endian utils + static short swapShort(short sht); + static int swapInt(int inte); + static b3Long64 swapLong64(b3Long64 lng); +}; + +const int CHUNK_HEADER_LEN = ((sizeof(bChunkInd))); +const bool VOID_IS_8 = ((sizeof(void *) == 8)); +} // namespace bParse + +#endif //__BCHUNK_H__ diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Common.h b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Common.h index 2792d84033..5884fad4d6 100644 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Common.h +++ b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Common.h @@ -16,24 +16,25 @@ subject to the following restrictions: #ifndef __BCOMMON_H__ #define __BCOMMON_H__ - #include <assert.h> //#include "bLog.h" #include "Bullet3Common/b3AlignedObjectArray.h" #include "Bullet3Common/b3HashMap.h" -namespace bParse { - - class bMain; - class bFileData; - class bFile; - class bDNA; - - // delete void* undefined - typedef struct bStructHandle {int unused;}bStructHandle; - typedef b3AlignedObjectArray<bStructHandle*> bListBasePtr; - typedef b3HashMap<b3HashPtr, bStructHandle*> bPtrMap; -} - - -#endif//__BCOMMON_H__ +namespace bParse +{ +class bMain; +class bFileData; +class bFile; +class bDNA; + +// delete void* undefined +typedef struct bStructHandle +{ + int unused; +} bStructHandle; +typedef b3AlignedObjectArray<bStructHandle*> bListBasePtr; +typedef b3HashMap<b3HashPtr, bStructHandle*> bPtrMap; +} // namespace bParse + +#endif //__BCOMMON_H__ diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.cpp b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.cpp index 0fe5056922..09c8f23859 100644 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.cpp +++ b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.cpp @@ -23,13 +23,11 @@ subject to the following restrictions: //this define will force traversal of structures, to check backward (and forward) compatibility //#define TEST_BACKWARD_FORWARD_COMPATIBILITY - using namespace bParse; - // ----------------------------------------------------- // bDNA::bDNA() - : mPtrLen(0) + : mPtrLen(0) { // -- } @@ -43,7 +41,7 @@ bDNA::~bDNA() // ----------------------------------------------------- // bool bDNA::lessThan(bDNA *file) { - return ( m_Names.size() < file->m_Names.size()); + return (m_Names.size() < file->m_Names.size()); } // ----------------------------------------------------- // @@ -53,36 +51,31 @@ char *bDNA::getName(int ind) return m_Names[ind].m_name; } - // ----------------------------------------------------- // char *bDNA::getType(int ind) { - assert(ind<= (int)mTypes.size()); + assert(ind <= (int)mTypes.size()); return mTypes[ind]; } - // ----------------------------------------------------- // short *bDNA::getStruct(int ind) { - assert(ind <= (int)mStructs.size()); + assert(ind <= (int)mStructs.size()); return mStructs[ind]; } - // ----------------------------------------------------- // short bDNA::getLength(int ind) { - assert(ind <= (int)mTlens.size()); + assert(ind <= (int)mTlens.size()); return mTlens[ind]; } - // ----------------------------------------------------- // int bDNA::getReverseType(short type) { - - int* intPtr = mStructReverse.find(type); + int *intPtr = mStructReverse.find(type); if (intPtr) return *intPtr; @@ -92,12 +85,11 @@ int bDNA::getReverseType(short type) // ----------------------------------------------------- // int bDNA::getReverseType(const char *type) { - b3HashString key(type); - int* valuePtr = mTypeLookup.find(key); + int *valuePtr = mTypeLookup.find(key); if (valuePtr) return *valuePtr; - + return -1; } @@ -110,22 +102,22 @@ int bDNA::getNumStructs() // ----------------------------------------------------- // bool bDNA::flagNotEqual(int dna_nr) { - assert(dna_nr <= (int)mCMPFlags.size()); + assert(dna_nr <= (int)mCMPFlags.size()); return mCMPFlags[dna_nr] == FDF_STRUCT_NEQU; } // ----------------------------------------------------- // bool bDNA::flagEqual(int dna_nr) { - assert(dna_nr <= (int)mCMPFlags.size()); + assert(dna_nr <= (int)mCMPFlags.size()); int flag = mCMPFlags[dna_nr]; - return flag == FDF_STRUCT_EQU; + return flag == FDF_STRUCT_EQU; } // ----------------------------------------------------- // bool bDNA::flagNone(int dna_nr) { - assert(dna_nr <= (int)mCMPFlags.size()); + assert(dna_nr <= (int)mCMPFlags.size()); return mCMPFlags[dna_nr] == FDF_NONE; } @@ -143,15 +135,15 @@ void bDNA::initRecurseCmpFlags(int iter) short *oldStrc = mStructs[iter]; short type = oldStrc[0]; - for (int i=0; i<(int)mStructs.size(); i++) + for (int i = 0; i < (int)mStructs.size(); i++) { - if (i != iter && mCMPFlags[i] == FDF_STRUCT_EQU ) + if (i != iter && mCMPFlags[i] == FDF_STRUCT_EQU) { short *curStruct = mStructs[i]; int eleLen = curStruct[1]; - curStruct+=2; + curStruct += 2; - for (int j=0; j<eleLen; j++, curStruct+=2) + for (int j = 0; j < eleLen; j++, curStruct += 2) { if (curStruct[0] == type) { @@ -171,18 +163,14 @@ void bDNA::initRecurseCmpFlags(int iter) // ----------------------------------------------------- // void bDNA::initCmpFlags(bDNA *memDNA) { - - // compare the file to memory + // compare the file to memory // this ptr should be the file data - - assert(!(m_Names.size() == 0));// && "SDNA empty!"); + assert(!(m_Names.size() == 0)); // && "SDNA empty!"); mCMPFlags.resize(mStructs.size(), FDF_NONE); - - int i; - for ( i=0; i<(int)mStructs.size(); i++) + for (i = 0; i < (int)mStructs.size(); i++) { short *oldStruct = mStructs[i]; @@ -196,7 +184,7 @@ void bDNA::initCmpFlags(bDNA *memDNA) //#define SLOW_FORWARD_COMPATIBLE 1 #ifdef SLOW_FORWARD_COMPATIBLE - char* typeName = mTypes[oldLookup]; + char *typeName = mTypes[oldLookup]; int newLookup = memDNA->getReverseType(typeName); if (newLookup == -1) { @@ -210,71 +198,61 @@ void bDNA::initCmpFlags(bDNA *memDNA) if (oldLookup < memDNA->mStructs.size()) { short *curStruct = memDNA->mStructs[oldLookup]; -#endif - - +#endif - // rebuild... - mCMPFlags[i] = FDF_STRUCT_NEQU; + // rebuild... + mCMPFlags[i] = FDF_STRUCT_NEQU; #ifndef TEST_BACKWARD_FORWARD_COMPATIBILITY - if (curStruct[1] == oldStruct[1]) + if (curStruct[1] == oldStruct[1]) + { + // type len same ... + if (mTlens[oldStruct[0]] == memDNA->mTlens[curStruct[0]]) { - // type len same ... - if (mTlens[oldStruct[0]] == memDNA->mTlens[curStruct[0]]) - { - bool isSame = true; - int elementLength = oldStruct[1]; - + bool isSame = true; + int elementLength = oldStruct[1]; - curStruct+=2; - oldStruct+=2; + curStruct += 2; + oldStruct += 2; + for (int j = 0; j < elementLength; j++, curStruct += 2, oldStruct += 2) + { + // type the same + //const char* typeFileDNA = mTypes[oldStruct[0]]; + //const char* typeMemDNA = mTypes[curStruct[0]]; + if (strcmp(mTypes[oldStruct[0]], memDNA->mTypes[curStruct[0]]) != 0) + { + isSame = false; + break; + } - for (int j=0; j<elementLength; j++, curStruct+=2, oldStruct+=2) + // name the same + if (strcmp(m_Names[oldStruct[1]].m_name, memDNA->m_Names[curStruct[1]].m_name) != 0) { - // type the same - //const char* typeFileDNA = mTypes[oldStruct[0]]; - //const char* typeMemDNA = mTypes[curStruct[0]]; - if (strcmp(mTypes[oldStruct[0]], memDNA->mTypes[curStruct[0]])!=0) - { - isSame=false; - break; - } - - // name the same - if (strcmp(m_Names[oldStruct[1]].m_name, memDNA->m_Names[curStruct[1]].m_name)!=0) - { - isSame=false; - break; - } + isSame = false; + break; } - // flag valid == - if (isSame) - mCMPFlags[i] = FDF_STRUCT_EQU; } + // flag valid == + if (isSame) + mCMPFlags[i] = FDF_STRUCT_EQU; } -#endif } - } - - - - - - // recurse in - for ( i=0; i<(int)mStructs.size(); i++) - { - if (mCMPFlags[i] == FDF_STRUCT_NEQU) - initRecurseCmpFlags(i); +#endif } } +// recurse in +for (i = 0; i < (int)mStructs.size(); i++) +{ + if (mCMPFlags[i] == FDF_STRUCT_NEQU) + initRecurseCmpFlags(i); +} +} - - -static int name_is_array(char* name, int* dim1, int* dim2) { +static int name_is_array(char *name, int *dim1, int *dim2) +{ int len = strlen(name); /*fprintf(stderr,"[%s]",name);*/ /*if (len >= 1) { @@ -284,58 +262,77 @@ static int name_is_array(char* name, int* dim1, int* dim2) { return 0;*/ char *bp; int num; - if (dim1) { + if (dim1) + { *dim1 = 1; } - if (dim2) { + if (dim2) + { *dim2 = 1; } bp = strchr(name, '['); - if (!bp) { + if (!bp) + { return 0; } num = 0; - while (++bp < name+len-1) { + while (++bp < name + len - 1) + { const char c = *bp; - if (c == ']') { + if (c == ']') + { break; } - if (c <= '9' && c >= '0') { + if (c <= '9' && c >= '0') + { num *= 10; num += (c - '0'); - } else { + } + else + { printf("array parse error.\n"); return 0; } } - if (dim2) { + if (dim2) + { *dim2 = num; } /* find second dim, if any. */ bp = strchr(bp, '['); - if (!bp) { + if (!bp) + { return 1; /* at least we got the first dim. */ } num = 0; - while (++bp < name+len-1) { + while (++bp < name + len - 1) + { const char c = *bp; - if (c == ']') { + if (c == ']') + { break; } - if (c <= '9' && c >= '0') { + if (c <= '9' && c >= '0') + { num *= 10; num += (c - '0'); - } else { + } + else + { printf("array2 parse error.\n"); return 1; } } - if (dim1) { - if (dim2) { + if (dim1) + { + if (dim2) + { *dim1 = *dim2; *dim2 = num; - } else { + } + else + { *dim1 = num; } } @@ -343,14 +340,15 @@ static int name_is_array(char* name, int* dim1, int* dim2) { return 1; } - // ----------------------------------------------------- // void bDNA::init(char *data, int len, bool swap) { - int *intPtr=0;short *shtPtr=0; - char *cp = 0;int dataLen =0; + int *intPtr = 0; + short *shtPtr = 0; + char *cp = 0; + int dataLen = 0; //long nr=0; - intPtr = (int*)data; + intPtr = (int *)data; /* SDNA (4 bytes) (magic number) @@ -360,38 +358,35 @@ void bDNA::init(char *data, int len, bool swap) <string> */ - if (strncmp(data, "SDNA", 4)==0) + if (strncmp(data, "SDNA", 4) == 0) { // skip ++ NAME - intPtr++; intPtr++; + intPtr++; + intPtr++; } - - // Parse names - if (swap) + if (swap) { *intPtr = ChunkUtils::swapInt(*intPtr); } dataLen = *intPtr; intPtr++; - cp = (char*)intPtr; + cp = (char *)intPtr; int i; - for ( i=0; i<dataLen; i++) + for (i = 0; i < dataLen; i++) { bNameInfo info; info.m_name = cp; info.m_isPointer = (info.m_name[0] == '*') || (info.m_name[1] == '*'); - name_is_array(info.m_name,&info.m_dim0,&info.m_dim1); + name_is_array(info.m_name, &info.m_dim0, &info.m_dim1); m_Names.push_back(info); - while (*cp)cp++; + while (*cp) cp++; cp++; } - - cp = b3AlignPointer(cp,4); - + cp = b3AlignPointer(cp, 4); /* TYPE (4 bytes) @@ -400,26 +395,26 @@ void bDNA::init(char *data, int len, bool swap) <string> */ - intPtr = (int*)cp; - assert(strncmp(cp, "TYPE", 4)==0); intPtr++; + intPtr = (int *)cp; + assert(strncmp(cp, "TYPE", 4) == 0); + intPtr++; - if (swap) + if (swap) { *intPtr = ChunkUtils::swapInt(*intPtr); } dataLen = *intPtr; intPtr++; - cp = (char*)intPtr; - for ( i=0; i<dataLen; i++) + cp = (char *)intPtr; + for (i = 0; i < dataLen; i++) { mTypes.push_back(cp); - while (*cp)cp++; + while (*cp) cp++; cp++; } - - cp = b3AlignPointer(cp,4); + cp = b3AlignPointer(cp, 4); /* TLEN (4 bytes) @@ -428,13 +423,14 @@ void bDNA::init(char *data, int len, bool swap) */ // Parse type lens - intPtr = (int*)cp; - assert(strncmp(cp, "TLEN", 4)==0); intPtr++; + intPtr = (int *)cp; + assert(strncmp(cp, "TLEN", 4) == 0); + intPtr++; dataLen = (int)mTypes.size(); - shtPtr = (short*)intPtr; - for ( i=0; i<dataLen; i++, shtPtr++) + shtPtr = (short *)intPtr; + for (i = 0; i < dataLen; i++, shtPtr++) { if (swap) shtPtr[0] = ChunkUtils::swapShort(shtPtr[0]); @@ -454,94 +450,89 @@ void bDNA::init(char *data, int len, bool swap) <namenr> */ - intPtr = (int*)shtPtr; - cp = (char*)intPtr; - assert(strncmp(cp, "STRC", 4)==0); intPtr++; + intPtr = (int *)shtPtr; + cp = (char *)intPtr; + assert(strncmp(cp, "STRC", 4) == 0); + intPtr++; - if (swap) + if (swap) { *intPtr = ChunkUtils::swapInt(*intPtr); } dataLen = *intPtr; intPtr++; - - shtPtr = (short*)intPtr; - for ( i=0; i<dataLen; i++) + shtPtr = (short *)intPtr; + for (i = 0; i < dataLen; i++) { - mStructs.push_back (shtPtr); + mStructs.push_back(shtPtr); if (swap) { - shtPtr[0]= ChunkUtils::swapShort(shtPtr[0]); - shtPtr[1]= ChunkUtils::swapShort(shtPtr[1]); + shtPtr[0] = ChunkUtils::swapShort(shtPtr[0]); + shtPtr[1] = ChunkUtils::swapShort(shtPtr[1]); int len = shtPtr[1]; - shtPtr+= 2; + shtPtr += 2; - for (int a=0; a<len; a++, shtPtr+=2) + for (int a = 0; a < len; a++, shtPtr += 2) { - shtPtr[0]= ChunkUtils::swapShort(shtPtr[0]); - shtPtr[1]= ChunkUtils::swapShort(shtPtr[1]); + shtPtr[0] = ChunkUtils::swapShort(shtPtr[0]); + shtPtr[1] = ChunkUtils::swapShort(shtPtr[1]); } } else - shtPtr+= (2*shtPtr[1])+2; + shtPtr += (2 * shtPtr[1]) + 2; } - // build reverse lookups - for ( i=0; i<(int)mStructs.size(); i++) + for (i = 0; i < (int)mStructs.size(); i++) { short *strc = mStructs.at(i); - if (!mPtrLen && strcmp(mTypes[strc[0]],"ListBase")==0) + if (!mPtrLen && strcmp(mTypes[strc[0]], "ListBase") == 0) { - mPtrLen = mTlens[strc[0]]/2; + mPtrLen = mTlens[strc[0]] / 2; } mStructReverse.insert(strc[0], i); - mTypeLookup.insert(b3HashString(mTypes[strc[0]]),i); + mTypeLookup.insert(b3HashString(mTypes[strc[0]]), i); } } - // ----------------------------------------------------- // -int bDNA::getArraySize(char* string) +int bDNA::getArraySize(char *string) { int ret = 1; int len = strlen(string); - - char* next = 0; - for (int i=0; i<len; i++) + char *next = 0; + for (int i = 0; i < len; i++) { char c = string[i]; if (c == '[') - next = &string[i+1]; - else if (c==']') + next = &string[i + 1]; + else if (c == ']') if (next) ret *= atoi(next); } -// print (string << ' ' << ret); + // print (string << ' ' << ret); return ret; } - void bDNA::dumpTypeDefinitions() { int i; int numTypes = mTypes.size(); - - for (i=0;i<numTypes;i++) - { + for (i = 0; i < numTypes; i++) + { } - for ( i=0; i<(int)mStructs.size(); i++) + for (i = 0; i < (int)mStructs.size(); i++) { - int totalBytes=0; + int totalBytes = 0; short *oldStruct = mStructs[i]; int oldLookup = getReverseType(oldStruct[0]); @@ -551,44 +542,46 @@ void bDNA::dumpTypeDefinitions() continue; } - short* newStruct = mStructs[oldLookup]; - char* typeName = mTypes[newStruct[0]]; - printf("%3d: %s ",i,typeName); - + short *newStruct = mStructs[oldLookup]; + char *typeName = mTypes[newStruct[0]]; + printf("%3d: %s ", i, typeName); + //char *name = mNames[oldStruct[1]]; int len = oldStruct[1]; - printf(" (%d fields) ",len); - oldStruct+=2; + printf(" (%d fields) ", len); + oldStruct += 2; printf("{"); int j; - for (j=0; j<len; ++j,oldStruct+=2) { - const char* name = m_Names[oldStruct[1]].m_name; - printf("%s %s", mTypes[oldStruct[0]],name); - int elemNumBytes= 0; + for (j = 0; j < len; ++j, oldStruct += 2) + { + const char *name = m_Names[oldStruct[1]].m_name; + printf("%s %s", mTypes[oldStruct[0]], name); + int elemNumBytes = 0; int arrayDimensions = getArraySizeNew(oldStruct[1]); if (m_Names[oldStruct[1]].m_isPointer) { elemNumBytes = VOID_IS_8 ? 8 : 4; - } else + } + else { elemNumBytes = getLength(oldStruct[0]); } - printf(" /* %d bytes */",elemNumBytes*arrayDimensions); - - if (j == len-1) { + printf(" /* %d bytes */", elemNumBytes * arrayDimensions); + + if (j == len - 1) + { printf(";}"); - } else { + } + else + { printf("; "); } - totalBytes+=elemNumBytes*arrayDimensions; + totalBytes += elemNumBytes * arrayDimensions; } - printf("\ntotalBytes=%d\n\n",totalBytes); - + printf("\ntotalBytes=%d\n\n", totalBytes); } - - #if 0 /* dump out display of types and their sizes */ @@ -618,12 +611,6 @@ void bDNA::dumpTypeDefinitions() } } #endif - } - - - //eof - - diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.h b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.h index 6e60087cce..ca6004d960 100644 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.h +++ b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.h @@ -16,95 +16,86 @@ subject to the following restrictions: #ifndef __BDNA_H__ #define __BDNA_H__ - #include "b3Common.h" -namespace bParse { - - struct bNameInfo +namespace bParse +{ +struct bNameInfo +{ + char *m_name; + bool m_isPointer; + int m_dim0; + int m_dim1; +}; + +class bDNA +{ +public: + bDNA(); + ~bDNA(); + + void init(char *data, int len, bool swap = false); + + int getArraySize(char *str); + int getArraySizeNew(short name) { - char* m_name; - bool m_isPointer; - int m_dim0; - int m_dim1; - }; - - class bDNA + const bNameInfo &nameInfo = m_Names[name]; + return nameInfo.m_dim0 * nameInfo.m_dim1; + } + int getElementSize(short type, short name) { - public: - bDNA(); - ~bDNA(); - - void init(char *data, int len, bool swap=false); - - int getArraySize(char* str); - int getArraySizeNew(short name) - { - const bNameInfo& nameInfo = m_Names[name]; - return nameInfo.m_dim0*nameInfo.m_dim1; - } - int getElementSize(short type, short name) - { - const bNameInfo& nameInfo = m_Names[name]; - int size = nameInfo.m_isPointer ? mPtrLen*nameInfo.m_dim0*nameInfo.m_dim1 : mTlens[type]*nameInfo.m_dim0*nameInfo.m_dim1; - return size; - } - - int getNumNames() const - { - return m_Names.size(); - } - - char *getName(int ind); - char *getType(int ind); - short *getStruct(int ind); - short getLength(int ind); - int getReverseType(short type); - int getReverseType(const char *type); - - - int getNumStructs(); - - // - bool lessThan(bDNA* other); - - void initCmpFlags(bDNA *memDNA); - bool flagNotEqual(int dna_nr); - bool flagEqual(int dna_nr); - bool flagNone(int dna_nr); + const bNameInfo &nameInfo = m_Names[name]; + int size = nameInfo.m_isPointer ? mPtrLen * nameInfo.m_dim0 * nameInfo.m_dim1 : mTlens[type] * nameInfo.m_dim0 * nameInfo.m_dim1; + return size; + } + int getNumNames() const + { + return m_Names.size(); + } - int getPointerSize(); + char *getName(int ind); + char *getType(int ind); + short *getStruct(int ind); + short getLength(int ind); + int getReverseType(short type); + int getReverseType(const char *type); - void dumpTypeDefinitions(); + int getNumStructs(); - - private: - enum FileDNAFlags - { - FDF_NONE=0, - FDF_STRUCT_NEQU, - FDF_STRUCT_EQU - }; + // + bool lessThan(bDNA *other); - void initRecurseCmpFlags(int i); + void initCmpFlags(bDNA *memDNA); + bool flagNotEqual(int dna_nr); + bool flagEqual(int dna_nr); + bool flagNone(int dna_nr); - b3AlignedObjectArray<int> mCMPFlags; + int getPointerSize(); - b3AlignedObjectArray<bNameInfo> m_Names; - b3AlignedObjectArray<char*> mTypes; - b3AlignedObjectArray<short*> mStructs; - b3AlignedObjectArray<short> mTlens; - b3HashMap<b3HashInt, int> mStructReverse; - b3HashMap<b3HashString,int> mTypeLookup; + void dumpTypeDefinitions(); - int mPtrLen; - +private: + enum FileDNAFlags + { + FDF_NONE = 0, + FDF_STRUCT_NEQU, + FDF_STRUCT_EQU + }; + void initRecurseCmpFlags(int i); + b3AlignedObjectArray<int> mCMPFlags; - }; -} + b3AlignedObjectArray<bNameInfo> m_Names; + b3AlignedObjectArray<char *> mTypes; + b3AlignedObjectArray<short *> mStructs; + b3AlignedObjectArray<short> mTlens; + b3HashMap<b3HashInt, int> mStructReverse; + b3HashMap<b3HashString, int> mTypeLookup; + int mPtrLen; +}; +} // namespace bParse -#endif//__BDNA_H__ +#endif //__BDNA_H__ diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Defines.h b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Defines.h index 8f28d3c441..0524c94db1 100644 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Defines.h +++ b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Defines.h @@ -19,118 +19,131 @@ #ifndef __B_DEFINES_H__ #define __B_DEFINES_H__ - // MISC defines, see BKE_global.h, BKE_utildefines.h #define B3_SIZEOFBLENDERHEADER 12 - // ------------------------------------------------------------ -#if defined(__sgi) || defined (__sparc) || defined (__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__BIG_ENDIAN__) -# define B3_MAKE_ID(a,b,c,d) ( (int)(a)<<24 | (int)(b)<<16 | (c)<<8 | (d) ) +#if defined(__sgi) || defined(__sparc) || defined(__sparc__) || defined(__PPC__) || defined(__ppc__) || defined(__BIG_ENDIAN__) +#define B3_MAKE_ID(a, b, c, d) ((int)(a) << 24 | (int)(b) << 16 | (c) << 8 | (d)) #else -# define B3_MAKE_ID(a,b,c,d) ( (int)(d)<<24 | (int)(c)<<16 | (b)<<8 | (a) ) +#define B3_MAKE_ID(a, b, c, d) ((int)(d) << 24 | (int)(c) << 16 | (b) << 8 | (a)) #endif - // ------------------------------------------------------------ -#if defined(__sgi) || defined(__sparc) || defined(__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__BIG_ENDIAN__) -# define B3_MAKE_ID2(c, d) ( (c)<<8 | (d) ) +#if defined(__sgi) || defined(__sparc) || defined(__sparc__) || defined(__PPC__) || defined(__ppc__) || defined(__BIG_ENDIAN__) +#define B3_MAKE_ID2(c, d) ((c) << 8 | (d)) #else -# define B3_MAKE_ID2(c, d) ( (d)<<8 | (c) ) +#define B3_MAKE_ID2(c, d) ((d) << 8 | (c)) #endif // ------------------------------------------------------------ -#define B3_ID_SCE B3_MAKE_ID2('S', 'C') -#define B3_ID_LI B3_MAKE_ID2('L', 'I') -#define B3_ID_OB B3_MAKE_ID2('O', 'B') -#define B3_ID_ME B3_MAKE_ID2('M', 'E') -#define B3_ID_CU B3_MAKE_ID2('C', 'U') -#define B3_ID_MB B3_MAKE_ID2('M', 'B') -#define B3_ID_MA B3_MAKE_ID2('M', 'A') -#define B3_ID_TE B3_MAKE_ID2('T', 'E') -#define B3_ID_IM B3_MAKE_ID2('I', 'M') -#define B3_ID_IK B3_MAKE_ID2('I', 'K') -#define B3_ID_WV B3_MAKE_ID2('W', 'V') -#define B3_ID_LT B3_MAKE_ID2('L', 'T') -#define B3_ID_SE B3_MAKE_ID2('S', 'E') -#define B3_ID_LF B3_MAKE_ID2('L', 'F') -#define B3_ID_LA B3_MAKE_ID2('L', 'A') -#define B3_ID_CA B3_MAKE_ID2('C', 'A') -#define B3_ID_IP B3_MAKE_ID2('I', 'P') -#define B3_ID_KE B3_MAKE_ID2('K', 'E') -#define B3_ID_WO B3_MAKE_ID2('W', 'O') -#define B3_ID_SCR B3_MAKE_ID2('S', 'R') -#define B3_ID_VF B3_MAKE_ID2('V', 'F') -#define B3_ID_TXT B3_MAKE_ID2('T', 'X') -#define B3_ID_SO B3_MAKE_ID2('S', 'O') -#define B3_ID_SAMPLE B3_MAKE_ID2('S', 'A') -#define B3_ID_GR B3_MAKE_ID2('G', 'R') -#define B3_ID_ID B3_MAKE_ID2('I', 'D') -#define B3_ID_AR B3_MAKE_ID2('A', 'R') -#define B3_ID_AC B3_MAKE_ID2('A', 'C') -#define B3_ID_SCRIPT B3_MAKE_ID2('P', 'Y') -#define B3_ID_FLUIDSIM B3_MAKE_ID2('F', 'S') -#define B3_ID_NT B3_MAKE_ID2('N', 'T') -#define B3_ID_BR B3_MAKE_ID2('B', 'R') - - -#define B3_ID_SEQ B3_MAKE_ID2('S', 'Q') -#define B3_ID_CO B3_MAKE_ID2('C', 'O') -#define B3_ID_PO B3_MAKE_ID2('A', 'C') -#define B3_ID_NLA B3_MAKE_ID2('N', 'L') - -#define B3_ID_VS B3_MAKE_ID2('V', 'S') -#define B3_ID_VN B3_MAKE_ID2('V', 'N') - +#define B3_ID_SCE B3_MAKE_ID2('S', 'C') +#define B3_ID_LI B3_MAKE_ID2('L', 'I') +#define B3_ID_OB B3_MAKE_ID2('O', 'B') +#define B3_ID_ME B3_MAKE_ID2('M', 'E') +#define B3_ID_CU B3_MAKE_ID2('C', 'U') +#define B3_ID_MB B3_MAKE_ID2('M', 'B') +#define B3_ID_MA B3_MAKE_ID2('M', 'A') +#define B3_ID_TE B3_MAKE_ID2('T', 'E') +#define B3_ID_IM B3_MAKE_ID2('I', 'M') +#define B3_ID_IK B3_MAKE_ID2('I', 'K') +#define B3_ID_WV B3_MAKE_ID2('W', 'V') +#define B3_ID_LT B3_MAKE_ID2('L', 'T') +#define B3_ID_SE B3_MAKE_ID2('S', 'E') +#define B3_ID_LF B3_MAKE_ID2('L', 'F') +#define B3_ID_LA B3_MAKE_ID2('L', 'A') +#define B3_ID_CA B3_MAKE_ID2('C', 'A') +#define B3_ID_IP B3_MAKE_ID2('I', 'P') +#define B3_ID_KE B3_MAKE_ID2('K', 'E') +#define B3_ID_WO B3_MAKE_ID2('W', 'O') +#define B3_ID_SCR B3_MAKE_ID2('S', 'R') +#define B3_ID_VF B3_MAKE_ID2('V', 'F') +#define B3_ID_TXT B3_MAKE_ID2('T', 'X') +#define B3_ID_SO B3_MAKE_ID2('S', 'O') +#define B3_ID_SAMPLE B3_MAKE_ID2('S', 'A') +#define B3_ID_GR B3_MAKE_ID2('G', 'R') +#define B3_ID_ID B3_MAKE_ID2('I', 'D') +#define B3_ID_AR B3_MAKE_ID2('A', 'R') +#define B3_ID_AC B3_MAKE_ID2('A', 'C') +#define B3_ID_SCRIPT B3_MAKE_ID2('P', 'Y') +#define B3_ID_FLUIDSIM B3_MAKE_ID2('F', 'S') +#define B3_ID_NT B3_MAKE_ID2('N', 'T') +#define B3_ID_BR B3_MAKE_ID2('B', 'R') + +#define B3_ID_SEQ B3_MAKE_ID2('S', 'Q') +#define B3_ID_CO B3_MAKE_ID2('C', 'O') +#define B3_ID_PO B3_MAKE_ID2('A', 'C') +#define B3_ID_NLA B3_MAKE_ID2('N', 'L') + +#define B3_ID_VS B3_MAKE_ID2('V', 'S') +#define B3_ID_VN B3_MAKE_ID2('V', 'N') // ------------------------------------------------------------ -#define B3_FORM B3_MAKE_ID('F','O','R','M') -#define B3_DDG1 B3_MAKE_ID('3','D','G','1') -#define B3_DDG2 B3_MAKE_ID('3','D','G','2') -#define B3_DDG3 B3_MAKE_ID('3','D','G','3') -#define B3_DDG4 B3_MAKE_ID('3','D','G','4') -#define B3_GOUR B3_MAKE_ID('G','O','U','R') -#define B3_BLEN B3_MAKE_ID('B','L','E','N') -#define B3_DER_ B3_MAKE_ID('D','E','R','_') -#define B3_V100 B3_MAKE_ID('V','1','0','0') -#define B3_DATA B3_MAKE_ID('D','A','T','A') -#define B3_GLOB B3_MAKE_ID('G','L','O','B') -#define B3_IMAG B3_MAKE_ID('I','M','A','G') -#define B3_TEST B3_MAKE_ID('T','E','S','T') -#define B3_USER B3_MAKE_ID('U','S','E','R') - +#define B3_FORM B3_MAKE_ID('F', 'O', 'R', 'M') +#define B3_DDG1 B3_MAKE_ID('3', 'D', 'G', '1') +#define B3_DDG2 B3_MAKE_ID('3', 'D', 'G', '2') +#define B3_DDG3 B3_MAKE_ID('3', 'D', 'G', '3') +#define B3_DDG4 B3_MAKE_ID('3', 'D', 'G', '4') +#define B3_GOUR B3_MAKE_ID('G', 'O', 'U', 'R') +#define B3_BLEN B3_MAKE_ID('B', 'L', 'E', 'N') +#define B3_DER_ B3_MAKE_ID('D', 'E', 'R', '_') +#define B3_V100 B3_MAKE_ID('V', '1', '0', '0') +#define B3_DATA B3_MAKE_ID('D', 'A', 'T', 'A') +#define B3_GLOB B3_MAKE_ID('G', 'L', 'O', 'B') +#define B3_IMAG B3_MAKE_ID('I', 'M', 'A', 'G') +#define B3_TEST B3_MAKE_ID('T', 'E', 'S', 'T') +#define B3_USER B3_MAKE_ID('U', 'S', 'E', 'R') // ------------------------------------------------------------ -#define B3_DNA1 B3_MAKE_ID('D','N','A','1') -#define B3_REND B3_MAKE_ID('R','E','N','D') -#define B3_ENDB B3_MAKE_ID('E','N','D','B') -#define B3_NAME B3_MAKE_ID('N','A','M','E') -#define B3_SDNA B3_MAKE_ID('S','D','N','A') -#define B3_TYPE B3_MAKE_ID('T','Y','P','E') -#define B3_TLEN B3_MAKE_ID('T','L','E','N') -#define B3_STRC B3_MAKE_ID('S','T','R','C') - +#define B3_DNA1 B3_MAKE_ID('D', 'N', 'A', '1') +#define B3_REND B3_MAKE_ID('R', 'E', 'N', 'D') +#define B3_ENDB B3_MAKE_ID('E', 'N', 'D', 'B') +#define B3_NAME B3_MAKE_ID('N', 'A', 'M', 'E') +#define B3_SDNA B3_MAKE_ID('S', 'D', 'N', 'A') +#define B3_TYPE B3_MAKE_ID('T', 'Y', 'P', 'E') +#define B3_TLEN B3_MAKE_ID('T', 'L', 'E', 'N') +#define B3_STRC B3_MAKE_ID('S', 'T', 'R', 'C') // ------------------------------------------------------------ -#define B3_SWITCH_INT(a) { \ - char s_i, *p_i; \ - p_i= (char *)&(a); \ - s_i=p_i[0]; p_i[0]=p_i[3]; p_i[3]=s_i; \ - s_i=p_i[1]; p_i[1]=p_i[2]; p_i[2]=s_i; } +#define B3_SWITCH_INT(a) \ + { \ + char s_i, *p_i; \ + p_i = (char *)&(a); \ + s_i = p_i[0]; \ + p_i[0] = p_i[3]; \ + p_i[3] = s_i; \ + s_i = p_i[1]; \ + p_i[1] = p_i[2]; \ + p_i[2] = s_i; \ + } // ------------------------------------------------------------ -#define B3_SWITCH_SHORT(a) { \ - char s_i, *p_i; \ - p_i= (char *)&(a); \ - s_i=p_i[0]; p_i[0]=p_i[1]; p_i[1]=s_i; } +#define B3_SWITCH_SHORT(a) \ + { \ + char s_i, *p_i; \ + p_i = (char *)&(a); \ + s_i = p_i[0]; \ + p_i[0] = p_i[1]; \ + p_i[1] = s_i; \ + } // ------------------------------------------------------------ -#define B3_SWITCH_LONGINT(a) { \ - char s_i, *p_i; \ - p_i= (char *)&(a); \ - s_i=p_i[0]; p_i[0]=p_i[7]; p_i[7]=s_i; \ - s_i=p_i[1]; p_i[1]=p_i[6]; p_i[6]=s_i; \ - s_i=p_i[2]; p_i[2]=p_i[5]; p_i[5]=s_i; \ - s_i=p_i[3]; p_i[3]=p_i[4]; p_i[4]=s_i; } - -#endif//__B_DEFINES_H__ +#define B3_SWITCH_LONGINT(a) \ + { \ + char s_i, *p_i; \ + p_i = (char *)&(a); \ + s_i = p_i[0]; \ + p_i[0] = p_i[7]; \ + p_i[7] = s_i; \ + s_i = p_i[1]; \ + p_i[1] = p_i[6]; \ + p_i[6] = s_i; \ + s_i = p_i[2]; \ + p_i[2] = p_i[5]; \ + p_i[5] = s_i; \ + s_i = p_i[3]; \ + p_i[3] = p_i[4]; \ + p_i[4] = s_i; \ + } + +#endif //__B_DEFINES_H__ diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3File.cpp b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3File.cpp index 432f7fc2b4..145de62db3 100644 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3File.cpp +++ b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3File.cpp @@ -29,39 +29,38 @@ subject to the following restrictions: using namespace bParse; #define MAX_STRLEN 1024 -const char* getCleanName(const char* memName, char* buffer) +const char *getCleanName(const char *memName, char *buffer) { int slen = strlen(memName); - assert(slen<MAX_STRLEN); - slen=b3Min(slen,MAX_STRLEN); - for (int i=0;i<slen;i++) + assert(slen < MAX_STRLEN); + slen = b3Min(slen, MAX_STRLEN); + for (int i = 0; i < slen; i++) { - if (memName[i]==']'||memName[i]=='[') + if (memName[i] == ']' || memName[i] == '[') { - buffer[i] = 0;//'_'; - } else + buffer[i] = 0; //'_'; + } + else { buffer[i] = memName[i]; } } - buffer[slen]=0; + buffer[slen] = 0; return buffer; } - - // ----------------------------------------------------- // bFile::bFile(const char *filename, const char headerString[7]) - : mOwnsBuffer(true), - mFileBuffer(0), - mFileLen(0), - mVersion(0), - mDataStart(0), - mFileDNA(0), - mMemoryDNA(0), - mFlags(FD_INVALID) + : mOwnsBuffer(true), + mFileBuffer(0), + mFileLen(0), + mVersion(0), + mDataStart(0), + mFileDNA(0), + mMemoryDNA(0), + mFlags(FD_INVALID) { - for (int i=0;i<7;i++) + for (int i = 0; i < 7; i++) { m_headerString[i] = headerString[i]; } @@ -73,7 +72,7 @@ bFile::bFile(const char *filename, const char headerString[7]) mFileLen = ftell(fp); fseek(fp, 0L, SEEK_SET); - mFileBuffer = (char*)malloc(mFileLen+1); + mFileBuffer = (char *)malloc(mFileLen + 1); int bytesRead; bytesRead = fread(mFileBuffer, mFileLen, 1, fp); @@ -81,22 +80,21 @@ bFile::bFile(const char *filename, const char headerString[7]) // parseHeader(); - } } // ----------------------------------------------------- // -bFile::bFile( char *memoryBuffer, int len, const char headerString[7]) -: mOwnsBuffer(false), - mFileBuffer(0), - mFileLen(0), - mVersion(0), - mDataStart(0), - mFileDNA(0), - mMemoryDNA(0), - mFlags(FD_INVALID) +bFile::bFile(char *memoryBuffer, int len, const char headerString[7]) + : mOwnsBuffer(false), + mFileBuffer(0), + mFileLen(0), + mVersion(0), + mDataStart(0), + mFileDNA(0), + mMemoryDNA(0), + mFlags(FD_INVALID) { - for (int i=0;i<7;i++) + for (int i = 0; i < 7; i++) { m_headerString[i] = headerString[i]; } @@ -104,10 +102,8 @@ bFile::bFile( char *memoryBuffer, int len, const char headerString[7]) mFileLen = len; parseHeader(); - } - // ----------------------------------------------------- // bFile::~bFile() { @@ -117,15 +113,10 @@ bFile::~bFile() mFileBuffer = 0; } - delete mMemoryDNA; delete mFileDNA; } - - - - // ----------------------------------------------------- // void bFile::parseHeader() { @@ -133,11 +124,11 @@ void bFile::parseHeader() return; char *blenderBuf = mFileBuffer; - char header[B3_SIZEOFBLENDERHEADER+1] ; + char header[B3_SIZEOFBLENDERHEADER + 1]; memcpy(header, blenderBuf, B3_SIZEOFBLENDERHEADER); - header[B3_SIZEOFBLENDERHEADER]='\0'; + header[B3_SIZEOFBLENDERHEADER] = '\0'; - if (strncmp(header, m_headerString, 6)!=0) + if (strncmp(header, m_headerString, 6) != 0) { memcpy(header, m_headerString, B3_SIZEOFBLENDERHEADER); return; @@ -148,35 +139,34 @@ void bFile::parseHeader() mFlags |= FD_DOUBLE_PRECISION; } - char *ver = header+9; + char *ver = header + 9; mVersion = atoi(ver); if (mVersion <= 241) { //printf("Warning, %d not fully tested : <= 242\n", mVersion); } - int littleEndian= 1; - littleEndian= ((char*)&littleEndian)[0]; + int littleEndian = 1; + littleEndian = ((char *)&littleEndian)[0]; // swap ptr sizes... - if (header[7]=='-') + if (header[7] == '-') { mFlags |= FD_FILE_64; if (!VOID_IS_8) mFlags |= FD_BITS_VARIES; } - else if (VOID_IS_8) mFlags |= FD_BITS_VARIES; + else if (VOID_IS_8) + mFlags |= FD_BITS_VARIES; // swap endian... - if (header[8]=='V') + if (header[8] == 'V') { - if (littleEndian ==1) + if (littleEndian == 1) mFlags |= FD_ENDIAN_SWAP; } - else - if (littleEndian==0) - mFlags |= FD_ENDIAN_SWAP; - + else if (littleEndian == 0) + mFlags |= FD_ENDIAN_SWAP; mFlags |= FD_OK; } @@ -184,13 +174,13 @@ void bFile::parseHeader() // ----------------------------------------------------- // bool bFile::ok() { - return (mFlags &FD_OK)!=0; + return (mFlags & FD_OK) != 0; } // ----------------------------------------------------- // -void bFile::parseInternal(int verboseMode, char* memDna,int memDnaLength) +void bFile::parseInternal(int verboseMode, char *memDna, int memDnaLength) { - if ( (mFlags &FD_OK) ==0) + if ((mFlags & FD_OK) == 0) return; char *blenderData = mFileBuffer; @@ -198,38 +188,40 @@ void bFile::parseInternal(int verboseMode, char* memDna,int memDnaLength) dna.oldPtr = 0; char *tempBuffer = blenderData; - for (int i=0; i<mFileLen; i++) + for (int i = 0; i < mFileLen; i++) { // looking for the data's starting position // and the start of SDNA decls - if (!mDataStart && strncmp(tempBuffer, "REND", 4)==0) + if (!mDataStart && strncmp(tempBuffer, "REND", 4) == 0) mDataStart = i; - if (strncmp(tempBuffer, "DNA1", 4)==0) + if (strncmp(tempBuffer, "DNA1", 4) == 0) { // read the DNA1 block and extract SDNA if (getNextBlock(&dna, tempBuffer, mFlags) > 0) { - if (strncmp((tempBuffer + ChunkUtils::getOffset(mFlags)), "SDNANAME", 8) ==0) + if (strncmp((tempBuffer + ChunkUtils::getOffset(mFlags)), "SDNANAME", 8) == 0) dna.oldPtr = (tempBuffer + ChunkUtils::getOffset(mFlags)); - else dna.oldPtr = 0; + else + dna.oldPtr = 0; } - else dna.oldPtr = 0; + else + dna.oldPtr = 0; } // Some Bullet files are missing the DNA1 block // In Blender it's DNA1 + ChunkUtils::getOffset() + SDNA + NAME // In Bullet tests its SDNA + NAME - else if (strncmp(tempBuffer, "SDNANAME", 8) ==0) + else if (strncmp(tempBuffer, "SDNANAME", 8) == 0) { dna.oldPtr = blenderData + i; - dna.len = mFileLen-i; + dna.len = mFileLen - i; // Also no REND block, so exit now. - if (mVersion==276) break; + if (mVersion == 276) break; } - if (mDataStart && dna.oldPtr) break; + if (mDataStart && dna.oldPtr) break; tempBuffer++; } if (!dna.oldPtr || !dna.len) @@ -239,43 +231,35 @@ void bFile::parseInternal(int verboseMode, char* memDna,int memDnaLength) return; } - mFileDNA = new bDNA(); - ///mFileDNA->init will convert part of DNA file endianness to current CPU endianness if necessary - mFileDNA->init((char*)dna.oldPtr, dna.len, (mFlags & FD_ENDIAN_SWAP)!=0); - + mFileDNA->init((char *)dna.oldPtr, dna.len, (mFlags & FD_ENDIAN_SWAP) != 0); - if (mVersion==276) + if (mVersion == 276) { int i; - for (i=0;i<mFileDNA->getNumNames();i++) + for (i = 0; i < mFileDNA->getNumNames(); i++) { - if (strcmp(mFileDNA->getName(i),"int")==0) + if (strcmp(mFileDNA->getName(i), "int") == 0) { mFlags |= FD_BROKEN_DNA; } } - if ((mFlags&FD_BROKEN_DNA)!=0) + if ((mFlags & FD_BROKEN_DNA) != 0) { //printf("warning: fixing some broken DNA version\n"); } } - - if (verboseMode & FD_VERBOSE_DUMP_DNA_TYPE_DEFINITIONS) mFileDNA->dumpTypeDefinitions(); mMemoryDNA = new bDNA(); - int littleEndian= 1; - littleEndian= ((char*)&littleEndian)[0]; - - mMemoryDNA->init(memDna,memDnaLength,littleEndian==0); - - + int littleEndian = 1; + littleEndian = ((char *)&littleEndian)[0]; + mMemoryDNA->init(memDna, memDnaLength, littleEndian == 0); ///@todo we need a better version check, add version/sub version info from FileGlobal into memory DNA/header files if (mMemoryDNA->getNumNames() != mFileDNA->getNumNames()) @@ -290,7 +274,6 @@ void bFile::parseInternal(int verboseMode, char* memDna,int memDnaLength) //printf ("Warning, file DNA is newer than built in."); } - mFileDNA->initCmpFlags(mMemoryDNA); parseData(); @@ -298,102 +281,95 @@ void bFile::parseInternal(int verboseMode, char* memDna,int memDnaLength) resolvePointers(verboseMode); updateOldPointers(); - - } - - // ----------------------------------------------------- // -void bFile::swap(char *head, bChunkInd& dataChunk, bool ignoreEndianFlag) +void bFile::swap(char *head, bChunkInd &dataChunk, bool ignoreEndianFlag) { char *data = head; short *strc = mFileDNA->getStruct(dataChunk.dna_nr); - - const char s[] = "SoftBodyMaterialData"; int szs = sizeof(s); - if (strncmp((char*)&dataChunk.code,"ARAY",4)==0) + if (strncmp((char *)&dataChunk.code, "ARAY", 4) == 0) { short *oldStruct = mFileDNA->getStruct(dataChunk.dna_nr); char *oldType = mFileDNA->getType(oldStruct[0]); - if (strncmp(oldType,s,szs)==0) + if (strncmp(oldType, s, szs) == 0) { return; } } - int len = mFileDNA->getLength(strc[0]); - for (int i=0; i<dataChunk.nr; i++) + for (int i = 0; i < dataChunk.nr; i++) { - swapStruct(dataChunk.dna_nr, data,ignoreEndianFlag); - data+=len; + swapStruct(dataChunk.dna_nr, data, ignoreEndianFlag); + data += len; } } void bFile::swapLen(char *dataPtr) { - const bool VOID_IS_8 = ((sizeof(void*)==8)); + const bool VOID_IS_8 = ((sizeof(void *) == 8)); if (VOID_IS_8) { - if (mFlags &FD_BITS_VARIES) + if (mFlags & FD_BITS_VARIES) { - bChunkPtr4*c = (bChunkPtr4*) dataPtr; - if ((c->code & 0xFFFF)==0) - c->code >>=16; + bChunkPtr4 *c = (bChunkPtr4 *)dataPtr; + if ((c->code & 0xFFFF) == 0) + c->code >>= 16; B3_SWITCH_INT(c->len); B3_SWITCH_INT(c->dna_nr); B3_SWITCH_INT(c->nr); - } else + } + else { - bChunkPtr8* c = (bChunkPtr8*) dataPtr; - if ((c->code & 0xFFFF)==0) - c->code >>=16; + bChunkPtr8 *c = (bChunkPtr8 *)dataPtr; + if ((c->code & 0xFFFF) == 0) + c->code >>= 16; B3_SWITCH_INT(c->len); B3_SWITCH_INT(c->dna_nr); B3_SWITCH_INT(c->nr); - } - } else + } + else { - if (mFlags &FD_BITS_VARIES) + if (mFlags & FD_BITS_VARIES) { - bChunkPtr8*c = (bChunkPtr8*) dataPtr; - if ((c->code & 0xFFFF)==0) - c->code >>=16; + bChunkPtr8 *c = (bChunkPtr8 *)dataPtr; + if ((c->code & 0xFFFF) == 0) + c->code >>= 16; B3_SWITCH_INT(c->len); B3_SWITCH_INT(c->dna_nr); B3_SWITCH_INT(c->nr); - - } else + } + else { - bChunkPtr4* c = (bChunkPtr4*) dataPtr; - if ((c->code & 0xFFFF)==0) - c->code >>=16; + bChunkPtr4 *c = (bChunkPtr4 *)dataPtr; + if ((c->code & 0xFFFF) == 0) + c->code >>= 16; B3_SWITCH_INT(c->len); B3_SWITCH_INT(c->dna_nr); B3_SWITCH_INT(c->nr); - } } - } - -void bFile::swapDNA(char* ptr) +void bFile::swapDNA(char *ptr) { - bool swap = ((mFlags & FD_ENDIAN_SWAP)!=0); - - char* data = &ptr[20]; -// void bDNA::init(char *data, int len, bool swap) - int *intPtr=0;short *shtPtr=0; - char *cp = 0;int dataLen =0; + bool swap = ((mFlags & FD_ENDIAN_SWAP) != 0); + + char *data = &ptr[20]; + // void bDNA::init(char *data, int len, bool swap) + int *intPtr = 0; + short *shtPtr = 0; + char *cp = 0; + int dataLen = 0; //long nr=0; - intPtr = (int*)data; + intPtr = (int *)data; /* SDNA (4 bytes) (magic number) @@ -403,14 +379,13 @@ void bFile::swapDNA(char* ptr) <string> */ - if (strncmp(data, "SDNA", 4)==0) + if (strncmp(data, "SDNA", 4) == 0) { // skip ++ NAME - intPtr++; intPtr++; + intPtr++; + intPtr++; } - - // Parse names if (swap) dataLen = ChunkUtils::swapInt(*intPtr); @@ -420,16 +395,15 @@ void bFile::swapDNA(char* ptr) *intPtr = ChunkUtils::swapInt(*intPtr); intPtr++; - cp = (char*)intPtr; + cp = (char *)intPtr; int i; - for ( i=0; i<dataLen; i++) + for (i = 0; i < dataLen; i++) { - while (*cp)cp++; + while (*cp) cp++; cp++; } - - cp = b3AlignPointer(cp,4); + cp = b3AlignPointer(cp, 4); /* TYPE (4 bytes) @@ -438,8 +412,9 @@ void bFile::swapDNA(char* ptr) <string> */ - intPtr = (int*)cp; - assert(strncmp(cp, "TYPE", 4)==0); intPtr++; + intPtr = (int *)cp; + assert(strncmp(cp, "TYPE", 4) == 0); + intPtr++; if (swap) dataLen = ChunkUtils::swapInt(*intPtr); @@ -450,14 +425,14 @@ void bFile::swapDNA(char* ptr) intPtr++; - cp = (char*)intPtr; - for ( i=0; i<dataLen; i++) + cp = (char *)intPtr; + for (i = 0; i < dataLen; i++) { - while (*cp)cp++; + while (*cp) cp++; cp++; } - cp = b3AlignPointer(cp,4); + cp = b3AlignPointer(cp, 4); /* TLEN (4 bytes) @@ -466,15 +441,15 @@ void bFile::swapDNA(char* ptr) */ // Parse type lens - intPtr = (int*)cp; - assert(strncmp(cp, "TLEN", 4)==0); intPtr++; - + intPtr = (int *)cp; + assert(strncmp(cp, "TLEN", 4) == 0); + intPtr++; - shtPtr = (short*)intPtr; - for ( i=0; i<dataLen; i++, shtPtr++) + shtPtr = (short *)intPtr; + for (i = 0; i < dataLen; i++, shtPtr++) { //??????if (swap) - shtPtr[0] = ChunkUtils::swapShort(shtPtr[0]); + shtPtr[0] = ChunkUtils::swapShort(shtPtr[0]); } if (dataLen & 1) @@ -491,9 +466,9 @@ void bFile::swapDNA(char* ptr) <namenr> */ - intPtr = (int*)shtPtr; - cp = (char*)intPtr; - assert(strncmp(cp, "STRC", 4)==0); + intPtr = (int *)shtPtr; + cp = (char *)intPtr; + assert(strncmp(cp, "STRC", 4) == 0); intPtr++; if (swap) @@ -505,66 +480,56 @@ void bFile::swapDNA(char* ptr) intPtr++; - - shtPtr = (short*)intPtr; - for ( i=0; i<dataLen; i++) + shtPtr = (short *)intPtr; + for (i = 0; i < dataLen; i++) { - //if (swap) { int len = shtPtr[1]; - shtPtr[0]= ChunkUtils::swapShort(shtPtr[0]); - shtPtr[1]= ChunkUtils::swapShort(shtPtr[1]); + shtPtr[0] = ChunkUtils::swapShort(shtPtr[0]); + shtPtr[1] = ChunkUtils::swapShort(shtPtr[1]); - shtPtr+= 2; + shtPtr += 2; - for (int a=0; a<len; a++, shtPtr+=2) + for (int a = 0; a < len; a++, shtPtr += 2) { - shtPtr[0]= ChunkUtils::swapShort(shtPtr[0]); - shtPtr[1]= ChunkUtils::swapShort(shtPtr[1]); + shtPtr[0] = ChunkUtils::swapShort(shtPtr[0]); + shtPtr[1] = ChunkUtils::swapShort(shtPtr[1]); } } -// else -// shtPtr+= (2*shtPtr[1])+2; + // else + // shtPtr+= (2*shtPtr[1])+2; } - } -void bFile::writeFile(const char* fileName) +void bFile::writeFile(const char *fileName) { - FILE* f = fopen(fileName,"wb"); - fwrite(mFileBuffer,1,mFileLen,f); + FILE *f = fopen(fileName, "wb"); + fwrite(mFileBuffer, 1, mFileLen, f); fclose(f); } void bFile::preSwap() { - //const bool brokenDNA = (mFlags&FD_BROKEN_DNA)!=0; //FD_ENDIAN_SWAP //byte 8 determines the endianness of the file, little (v) versus big (V) - int littleEndian= 1; - littleEndian= ((char*)&littleEndian)[0]; - + int littleEndian = 1; + littleEndian = ((char *)&littleEndian)[0]; - if (mFileBuffer[8]=='V') + if (mFileBuffer[8] == 'V') { - mFileBuffer[8]='v'; + mFileBuffer[8] = 'v'; } else { - mFileBuffer[8]='V'; + mFileBuffer[8] = 'V'; } - - - - - mDataStart = 12; - char *dataPtr = mFileBuffer+mDataStart; + char *dataPtr = mFileBuffer + mDataStart; bChunkInd dataChunk; dataChunk.code = 0; @@ -579,21 +544,22 @@ void bFile::preSwap() while (1) { // one behind - if (dataChunk.code == B3_SDNA || dataChunk.code==B3_DNA1 || dataChunk.code == B3_TYPE || dataChunk.code == B3_TLEN || dataChunk.code==B3_STRC) + if (dataChunk.code == B3_SDNA || dataChunk.code == B3_DNA1 || dataChunk.code == B3_TYPE || dataChunk.code == B3_TLEN || dataChunk.code == B3_STRC) { - swapDNA(dataPtr); break; - } else + } + else { //if (dataChunk.code == DNA1) break; - dataPtrHead = dataPtr+ChunkUtils::getOffset(mFlags); + dataPtrHead = dataPtr + ChunkUtils::getOffset(mFlags); swapLen(dataPtr); - if (dataChunk.dna_nr>=0) + if (dataChunk.dna_nr >= 0) { - swap(dataPtrHead, dataChunk,ignoreEndianFlag); - } else + swap(dataPtrHead, dataChunk, ignoreEndianFlag); + } + else { //printf("unknown chunk\n"); } @@ -602,7 +568,7 @@ void bFile::preSwap() // next please! dataPtr += seek; - seek = getNextBlock(&dataChunk, dataPtr, mFlags); + seek = getNextBlock(&dataChunk, dataPtr, mFlags); if (seek < 0) break; } @@ -610,56 +576,50 @@ void bFile::preSwap() if (mFlags & FD_ENDIAN_SWAP) { mFlags &= ~FD_ENDIAN_SWAP; - } else + } + else { mFlags |= FD_ENDIAN_SWAP; } - - - } - // ----------------------------------------------------- // -char* bFile::readStruct(char *head, bChunkInd& dataChunk) +char *bFile::readStruct(char *head, bChunkInd &dataChunk) { bool ignoreEndianFlag = false; if (mFlags & FD_ENDIAN_SWAP) swap(head, dataChunk, ignoreEndianFlag); - - if (!mFileDNA->flagEqual(dataChunk.dna_nr)) { // Ouch! need to rebuild the struct - short *oldStruct,*curStruct; + short *oldStruct, *curStruct; char *oldType, *newType; int oldLen, curLen, reverseOld; - oldStruct = mFileDNA->getStruct(dataChunk.dna_nr); oldType = mFileDNA->getType(oldStruct[0]); oldLen = mFileDNA->getLength(oldStruct[0]); - if ((mFlags&FD_BROKEN_DNA)!=0) + if ((mFlags & FD_BROKEN_DNA) != 0) { - if ((strcmp(oldType,"b3QuantizedBvhNodeData")==0)&&oldLen==20) + if ((strcmp(oldType, "b3QuantizedBvhNodeData") == 0) && oldLen == 20) { return 0; } - if ((strcmp(oldType,"b3ShortIntIndexData")==0)) + if ((strcmp(oldType, "b3ShortIntIndexData") == 0)) { int allocLen = 2; - char *dataAlloc = new char[(dataChunk.nr*allocLen)+1]; - memset(dataAlloc, 0, (dataChunk.nr*allocLen)+1); - short* dest = (short*) dataAlloc; - const short* src = (short*) head; - for (int i=0;i<dataChunk.nr;i++) + char *dataAlloc = new char[(dataChunk.nr * allocLen) + 1]; + memset(dataAlloc, 0, (dataChunk.nr * allocLen) + 1); + short *dest = (short *)dataAlloc; + const short *src = (short *)head; + for (int i = 0; i < dataChunk.nr; i++) { dest[i] = src[i]; - if (mFlags &FD_ENDIAN_SWAP) + if (mFlags & FD_ENDIAN_SWAP) { B3_SWITCH_SHORT(dest[i]); } @@ -669,14 +629,12 @@ char* bFile::readStruct(char *head, bChunkInd& dataChunk) } } - - ///don't try to convert Link block data, just memcpy it. Other data can be converted. - if (strcmp("Link",oldType)!=0) + if (strcmp("Link", oldType) != 0) { reverseOld = mMemoryDNA->getReverseType(oldType); - if ((reverseOld!=-1)) + if ((reverseOld != -1)) { // make sure it's here //assert(reverseOld!= -1 && "getReverseType() returned -1, struct required!"); @@ -686,39 +644,38 @@ char* bFile::readStruct(char *head, bChunkInd& dataChunk) newType = mMemoryDNA->getType(curStruct[0]); curLen = mMemoryDNA->getLength(curStruct[0]); - - // make sure it's the same - assert((strcmp(oldType, newType)==0) && "internal error, struct mismatch!"); - + assert((strcmp(oldType, newType) == 0) && "internal error, struct mismatch!"); // numBlocks * length - int allocLen = (curLen); - char *dataAlloc = new char[(dataChunk.nr*allocLen)+1]; - memset(dataAlloc, 0, (dataChunk.nr*allocLen)); + int allocLen = (curLen); + char *dataAlloc = new char[(dataChunk.nr * allocLen) + 1]; + memset(dataAlloc, 0, (dataChunk.nr * allocLen)); // track allocated addDataBlock(dataAlloc); char *cur = dataAlloc; char *old = head; - for (int block=0; block<dataChunk.nr; block++) + for (int block = 0; block < dataChunk.nr; block++) { bool fixupPointers = true; parseStruct(cur, old, dataChunk.dna_nr, reverseOld, fixupPointers); - mLibPointers.insert(old,(bStructHandle*)cur); + mLibPointers.insert(old, (bStructHandle *)cur); cur += curLen; old += oldLen; } return dataAlloc; } - } else + } + else { //printf("Link found\n"); } - } else + } + else { //#define DEBUG_EQUAL_STRUCTS #ifdef DEBUG_EQUAL_STRUCTS @@ -726,24 +683,20 @@ char* bFile::readStruct(char *head, bChunkInd& dataChunk) char *oldType; oldStruct = mFileDNA->getStruct(dataChunk.dna_nr); oldType = mFileDNA->getType(oldStruct[0]); - printf("%s equal structure, just memcpy\n",oldType); -#endif // + printf("%s equal structure, just memcpy\n", oldType); +#endif // } - - char *dataAlloc = new char[(dataChunk.len)+1]; - memset(dataAlloc, 0, dataChunk.len+1); - + char *dataAlloc = new char[(dataChunk.len) + 1]; + memset(dataAlloc, 0, dataChunk.len + 1); // track allocated addDataBlock(dataAlloc); memcpy(dataAlloc, head, dataChunk.len); return dataAlloc; - } - // ----------------------------------------------------- // void bFile::parseStruct(char *strcPtr, char *dtPtr, int old_dna, int new_dna, bool fixupPointers) { @@ -751,7 +704,7 @@ void bFile::parseStruct(char *strcPtr, char *dtPtr, int old_dna, int new_dna, bo if (new_dna == -1) return; //disable this, because we need to fixup pointers/ListBase - if (0)//mFileDNA->flagEqual(old_dna)) + if (0) //mFileDNA->flagEqual(old_dna)) { short *strc = mFileDNA->getStruct(old_dna); int len = mFileDNA->getLength(strc[0]); @@ -766,31 +719,29 @@ void bFile::parseStruct(char *strcPtr, char *dtPtr, int old_dna, int new_dna, bo int elementLength, size, revType, old_nr, new_nr, fpLen; short firstStructType; - // File to memory lookup memoryStruct = mMemoryDNA->getStruct(new_dna); fileStruct = mFileDNA->getStruct(old_dna); firstStruct = fileStruct; - filePtrOld = fileStruct; firstStructType = mMemoryDNA->getStruct(0)[0]; // Get number of elements elementLength = memoryStruct[1]; - memoryStruct+=2; + memoryStruct += 2; - cpc = strcPtr; cpo = 0; - for (int ele=0; ele<elementLength; ele++, memoryStruct+=2) + cpc = strcPtr; + cpo = 0; + for (int ele = 0; ele < elementLength; ele++, memoryStruct += 2) { memType = mMemoryDNA->getType(memoryStruct[0]); memName = mMemoryDNA->getName(memoryStruct[1]); - size = mMemoryDNA->getElementSize(memoryStruct[0], memoryStruct[1]); revType = mMemoryDNA->getReverseType(memoryStruct[0]); - if (revType != -1 && memoryStruct[0]>=firstStructType && memName[0] != '*') + if (revType != -1 && memoryStruct[0] >= firstStructType && memName[0] != '*') { cpo = getFileElement(firstStruct, memName, memType, dtPtr, &filePtrOld); if (cpo) @@ -799,94 +750,92 @@ void bFile::parseStruct(char *strcPtr, char *dtPtr, int old_dna, int new_dna, bo old_nr = mFileDNA->getReverseType(memType); new_nr = revType; fpLen = mFileDNA->getElementSize(filePtrOld[0], filePtrOld[1]); - if (arrayLen==1) + if (arrayLen == 1) { - parseStruct(cpc, cpo, old_nr, new_nr,fixupPointers); - } else + parseStruct(cpc, cpo, old_nr, new_nr, fixupPointers); + } + else { - char* tmpCpc = cpc; - char* tmpCpo = cpo; + char *tmpCpc = cpc; + char *tmpCpo = cpo; - for (int i=0;i<arrayLen;i++) + for (int i = 0; i < arrayLen; i++) { - parseStruct(tmpCpc, tmpCpo, old_nr, new_nr,fixupPointers); - tmpCpc += size/arrayLen; - tmpCpo += fpLen/arrayLen; + parseStruct(tmpCpc, tmpCpo, old_nr, new_nr, fixupPointers); + tmpCpc += size / arrayLen; + tmpCpo += fpLen / arrayLen; } } - cpc+=size; - cpo+=fpLen; + cpc += size; + cpo += fpLen; } else - cpc+=size; + cpc += size; } else { - getMatchingFileDNA(fileStruct, memName, memType, cpc, dtPtr,fixupPointers); - cpc+=size; + getMatchingFileDNA(fileStruct, memName, memType, cpc, dtPtr, fixupPointers); + cpc += size; } - } } - // ----------------------------------------------------- // static void getElement(int arrayLen, const char *cur, const char *old, char *oldPtr, char *curData) { -#define b3GetEle(value, current, type, cast, size, ptr)\ - if (strcmp(current, type)==0)\ - {\ - value = (*(cast*)ptr);\ - ptr += size;\ +#define b3GetEle(value, current, type, cast, size, ptr) \ + if (strcmp(current, type) == 0) \ + { \ + value = (*(cast *)ptr); \ + ptr += size; \ } -#define b3SetEle(value, current, type, cast, size, ptr)\ - if (strcmp(current, type)==0)\ - {\ - (*(cast*)ptr) = (cast)value;\ - ptr += size;\ +#define b3SetEle(value, current, type, cast, size, ptr) \ + if (strcmp(current, type) == 0) \ + { \ + (*(cast *)ptr) = (cast)value; \ + ptr += size; \ } double value = 0.0; - for (int i=0; i<arrayLen; i++) + for (int i = 0; i < arrayLen; i++) { - b3GetEle(value, old, "char", char, sizeof(char), oldPtr); - b3SetEle(value, cur, "char", char, sizeof(char), curData); - b3GetEle(value, old, "short", short, sizeof(short), oldPtr); - b3SetEle(value, cur, "short", short, sizeof(short), curData); - b3GetEle(value, old, "ushort", unsigned short, sizeof(unsigned short), oldPtr); - b3SetEle(value, cur, "ushort", unsigned short, sizeof(unsigned short), curData); - b3GetEle(value, old, "int", int, sizeof(int), oldPtr); - b3SetEle(value, cur, "int", int, sizeof(int), curData); - b3GetEle(value, old, "long", int, sizeof(int), oldPtr); - b3SetEle(value, cur, "long", int, sizeof(int), curData); - b3GetEle(value, old, "float", float, sizeof(float), oldPtr); - b3SetEle(value, cur, "float", float, sizeof(float), curData); + b3GetEle(value, old, "char", char, sizeof(char), oldPtr); + b3SetEle(value, cur, "char", char, sizeof(char), curData); + b3GetEle(value, old, "short", short, sizeof(short), oldPtr); + b3SetEle(value, cur, "short", short, sizeof(short), curData); + b3GetEle(value, old, "ushort", unsigned short, sizeof(unsigned short), oldPtr); + b3SetEle(value, cur, "ushort", unsigned short, sizeof(unsigned short), curData); + b3GetEle(value, old, "int", int, sizeof(int), oldPtr); + b3SetEle(value, cur, "int", int, sizeof(int), curData); + b3GetEle(value, old, "long", int, sizeof(int), oldPtr); + b3SetEle(value, cur, "long", int, sizeof(int), curData); + b3GetEle(value, old, "float", float, sizeof(float), oldPtr); + b3SetEle(value, cur, "float", float, sizeof(float), curData); b3GetEle(value, old, "double", double, sizeof(double), oldPtr); b3SetEle(value, cur, "double", double, sizeof(double), curData); } } - // ----------------------------------------------------- // -void bFile::swapData(char *data, short type, int arraySize,bool ignoreEndianFlag) +void bFile::swapData(char *data, short type, int arraySize, bool ignoreEndianFlag) { - if (ignoreEndianFlag || (mFlags &FD_ENDIAN_SWAP)) + if (ignoreEndianFlag || (mFlags & FD_ENDIAN_SWAP)) { if (type == 2 || type == 3) { - short *sp = (short*)data; - for (int i=0; i<arraySize; i++) + short *sp = (short *)data; + for (int i = 0; i < arraySize; i++) { sp[0] = ChunkUtils::swapShort(sp[0]); sp++; } } - if (type>3 && type <8) + if (type > 3 && type < 8) { char c; char *cp = data; - for (int i=0; i<arraySize; i++) + for (int i = 0; i < arraySize; i++) { c = cp[0]; cp[0] = cp[3]; @@ -894,14 +843,12 @@ void bFile::swapData(char *data, short type, int arraySize,bool ignoreEndianFlag c = cp[1]; cp[1] = cp[2]; cp[2] = c; - cp+=4; + cp += 4; } } } } - - void bFile::safeSwapPtr(char *dst, const char *src) { int ptrFile = mFileDNA->getPointerSize(); @@ -910,84 +857,79 @@ void bFile::safeSwapPtr(char *dst, const char *src) if (!src && !dst) return; - if (ptrFile == ptrMem) { memcpy(dst, src, ptrMem); } - else if (ptrMem==4 && ptrFile==8) + else if (ptrMem == 4 && ptrFile == 8) { - b3PointerUid* oldPtr = (b3PointerUid*)src; - b3PointerUid* newPtr = (b3PointerUid*)dst; + b3PointerUid *oldPtr = (b3PointerUid *)src; + b3PointerUid *newPtr = (b3PointerUid *)dst; if (oldPtr->m_uniqueIds[0] == oldPtr->m_uniqueIds[1]) { //Bullet stores the 32bit unique ID in both upper and lower part of 64bit pointers //so it can be used to distinguish between .blend and .bullet newPtr->m_uniqueIds[0] = oldPtr->m_uniqueIds[0]; - } else + } + else { //deal with pointers the Blender .blend style way, see //readfile.c in the Blender source tree - b3Long64 longValue = *((b3Long64*)src); + b3Long64 longValue = *((b3Long64 *)src); //endian swap for 64bit pointer otherwise truncation will fail due to trailing zeros if (mFlags & FD_ENDIAN_SWAP) B3_SWITCH_LONGINT(longValue); - *((int*)dst) = (int)(longValue>>3); + *((int *)dst) = (int)(longValue >> 3); } - } - else if (ptrMem==8 && ptrFile==4) + else if (ptrMem == 8 && ptrFile == 4) { - b3PointerUid* oldPtr = (b3PointerUid*)src; - b3PointerUid* newPtr = (b3PointerUid*)dst; + b3PointerUid *oldPtr = (b3PointerUid *)src; + b3PointerUid *newPtr = (b3PointerUid *)dst; if (oldPtr->m_uniqueIds[0] == oldPtr->m_uniqueIds[1]) { newPtr->m_uniqueIds[0] = oldPtr->m_uniqueIds[0]; newPtr->m_uniqueIds[1] = 0; - } else + } + else { - *((b3Long64*)dst)= *((int*)src); + *((b3Long64 *)dst) = *((int *)src); } } else { - printf ("%d %d\n", ptrFile,ptrMem); + printf("%d %d\n", ptrFile, ptrMem); assert(0 && "Invalid pointer len"); } - - } - // ----------------------------------------------------- // -void bFile::getMatchingFileDNA(short* dna_addr, const char* lookupName, const char* lookupType, char *strcData, char *data, bool fixupPointers) +void bFile::getMatchingFileDNA(short *dna_addr, const char *lookupName, const char *lookupType, char *strcData, char *data, bool fixupPointers) { // find the matching memory dna data // to the file being loaded. Fill the // memory with the file data... int len = dna_addr[1]; - dna_addr+=2; + dna_addr += 2; - for (int i=0; i<len; i++, dna_addr+=2) + for (int i = 0; i < len; i++, dna_addr += 2) { - const char* type = mFileDNA->getType(dna_addr[0]); - const char* name = mFileDNA->getName(dna_addr[1]); - - + const char *type = mFileDNA->getType(dna_addr[0]); + const char *name = mFileDNA->getName(dna_addr[1]); int eleLen = mFileDNA->getElementSize(dna_addr[0], dna_addr[1]); - if ((mFlags&FD_BROKEN_DNA)!=0) + if ((mFlags & FD_BROKEN_DNA) != 0) { - if ((strcmp(type,"short")==0)&&(strcmp(name,"int")==0)) + if ((strcmp(type, "short") == 0) && (strcmp(name, "int") == 0)) { eleLen = 0; } } - if (strcmp(lookupName, name)==0) + if (strcmp(lookupName, name) == 0) { //int arrayLenold = mFileDNA->getArraySize((char*)name.c_str()); int arrayLen = mFileDNA->getArraySizeNew(dna_addr[1]); @@ -998,7 +940,7 @@ void bFile::getMatchingFileDNA(short* dna_addr, const char* lookupName, const c // cast pointers int ptrFile = mFileDNA->getPointerSize(); int ptrMem = mMemoryDNA->getPointerSize(); - safeSwapPtr(strcData,data); + safeSwapPtr(strcData, data); if (fixupPointers) { @@ -1007,11 +949,11 @@ void bFile::getMatchingFileDNA(short* dna_addr, const char* lookupName, const c //void **sarray = (void**)strcData; //void **darray = (void**)data; - char *cpc, *cpo; - cpc = (char*)strcData; - cpo = (char*)data; + char *cpc, *cpo; + cpc = (char *)strcData; + cpo = (char *)data; - for (int a=0; a<arrayLen; a++) + for (int a = 0; a < arrayLen; a++) { safeSwapPtr(cpc, cpo); m_pointerFixupArray.push_back(cpc); @@ -1029,12 +971,11 @@ void bFile::getMatchingFileDNA(short* dna_addr, const char* lookupName, const c } else { -// printf("skipped %s %s : %x\n",type.c_str(),name.c_str(),strcData); + // printf("skipped %s %s : %x\n",type.c_str(),name.c_str(),strcData); } - } - else if (strcmp(type, lookupType)==0) + else if (strcmp(type, lookupType) == 0) memcpy(strcData, data, eleLen); else getElement(arrayLen, lookupType, type, data, strcData); @@ -1042,27 +983,26 @@ void bFile::getMatchingFileDNA(short* dna_addr, const char* lookupName, const c // -- return; } - data+=eleLen; + data += eleLen; } } - // ----------------------------------------------------- // -char* bFile::getFileElement(short *firstStruct, char *lookupName, char *lookupType, char *data, short **foundPos) +char *bFile::getFileElement(short *firstStruct, char *lookupName, char *lookupType, char *data, short **foundPos) { - short *old = firstStruct;//mFileDNA->getStruct(old_nr); + short *old = firstStruct; //mFileDNA->getStruct(old_nr); int elementLength = old[1]; - old+=2; + old += 2; - for (int i=0; i<elementLength; i++, old+=2) + for (int i = 0; i < elementLength; i++, old += 2) { - char* type = mFileDNA->getType(old[0]); - char* name = mFileDNA->getName(old[1]); + char *type = mFileDNA->getType(old[0]); + char *name = mFileDNA->getName(old[1]); int len = mFileDNA->getElementSize(old[0], old[1]); - if (strcmp(lookupName, name)==0) + if (strcmp(lookupName, name) == 0) { - if (strcmp(type, lookupType)==0) + if (strcmp(type, lookupType) == 0) { if (foundPos) *foundPos = old; @@ -1070,46 +1010,46 @@ char* bFile::getFileElement(short *firstStruct, char *lookupName, char *lookupTy } return 0; } - data+=len; + data += len; } return 0; } - // ----------------------------------------------------- // -void bFile::swapStruct(int dna_nr, char *data,bool ignoreEndianFlag) +void bFile::swapStruct(int dna_nr, char *data, bool ignoreEndianFlag) { if (dna_nr == -1) return; short *strc = mFileDNA->getStruct(dna_nr); //short *firstStrc = strc; - int elementLen= strc[1]; - strc+=2; + int elementLen = strc[1]; + strc += 2; short first = mFileDNA->getStruct(0)[0]; char *buf = data; - for (int i=0; i<elementLen; i++, strc+=2) + for (int i = 0; i < elementLen; i++, strc += 2) { char *type = mFileDNA->getType(strc[0]); char *name = mFileDNA->getName(strc[1]); int size = mFileDNA->getElementSize(strc[0], strc[1]); - if (strc[0] >= first && name[0]!='*') + if (strc[0] >= first && name[0] != '*') { int old_nr = mFileDNA->getReverseType(type); int arrayLen = mFileDNA->getArraySizeNew(strc[1]); - if (arrayLen==1) + if (arrayLen == 1) { - swapStruct(old_nr,buf,ignoreEndianFlag); - } else + swapStruct(old_nr, buf, ignoreEndianFlag); + } + else { - char* tmpBuf = buf; - for (int i=0;i<arrayLen;i++) + char *tmpBuf = buf; + for (int i = 0; i < arrayLen; i++) { - swapStruct(old_nr,tmpBuf,ignoreEndianFlag); - tmpBuf+=size/arrayLen; + swapStruct(old_nr, tmpBuf, ignoreEndianFlag); + tmpBuf += size / arrayLen; } } } @@ -1118,39 +1058,39 @@ void bFile::swapStruct(int dna_nr, char *data,bool ignoreEndianFlag) //int arrayLenOld = mFileDNA->getArraySize(name); int arrayLen = mFileDNA->getArraySizeNew(strc[1]); //assert(arrayLenOld == arrayLen); - swapData(buf, strc[0], arrayLen,ignoreEndianFlag); + swapData(buf, strc[0], arrayLen, ignoreEndianFlag); } - buf+=size; + buf += size; } } void bFile::resolvePointersMismatch() { -// printf("resolvePointersStructMismatch\n"); + // printf("resolvePointersStructMismatch\n"); int i; - for (i=0;i< m_pointerFixupArray.size();i++) + for (i = 0; i < m_pointerFixupArray.size(); i++) { - char* cur = m_pointerFixupArray.at(i); - void** ptrptr = (void**) cur; - void* ptr = *ptrptr; + char *cur = m_pointerFixupArray.at(i); + void **ptrptr = (void **)cur; + void *ptr = *ptrptr; ptr = findLibPointer(ptr); if (ptr) { //printf("Fixup pointer!\n"); *(ptrptr) = ptr; - } else + } + else { -// printf("pointer not found: %x\n",cur); + // printf("pointer not found: %x\n",cur); } } - - for (i=0; i<m_pointerPtrFixupArray.size(); i++) + for (i = 0; i < m_pointerPtrFixupArray.size(); i++) { - char* cur= m_pointerPtrFixupArray.at(i); - void** ptrptr = (void**)cur; + char *cur = m_pointerPtrFixupArray.at(i); + void **ptrptr = (void **)cur; bChunkInd *block = m_chunkPtrPtrMap.find(*ptrptr); if (block) @@ -1158,7 +1098,6 @@ void bFile::resolvePointersMismatch() int ptrMem = mMemoryDNA->getPointerSize(); int ptrFile = mFileDNA->getPointerSize(); - int blockLen = block->len / ptrFile; void *onptr = findLibPointer(*ptrptr); @@ -1168,16 +1107,16 @@ void bFile::resolvePointersMismatch() addDataBlock(newPtr); memset(newPtr, 0, blockLen * ptrMem); - void **onarray = (void**)onptr; - char *oldPtr = (char*)onarray; + void **onarray = (void **)onptr; + char *oldPtr = (char *)onarray; int p = 0; while (blockLen-- > 0) { b3PointerUid dp = {{0}}; - safeSwapPtr((char*)dp.m_uniqueIds, oldPtr); + safeSwapPtr((char *)dp.m_uniqueIds, oldPtr); - void **tptr = (void**)(newPtr + p * ptrMem); + void **tptr = (void **)(newPtr + p * ptrMem); *tptr = findLibPointer(dp.m_ptr); oldPtr += ptrFile; @@ -1190,70 +1129,63 @@ void bFile::resolvePointersMismatch() } } - ///this loop only works fine if the Blender DNA structure of the file matches the headerfiles -void bFile::resolvePointersChunk(const bChunkInd& dataChunk, int verboseMode) +void bFile::resolvePointersChunk(const bChunkInd &dataChunk, int verboseMode) { - bParse::bDNA* fileDna = mFileDNA ? mFileDNA : mMemoryDNA; + bParse::bDNA *fileDna = mFileDNA ? mFileDNA : mMemoryDNA; - short int* oldStruct = fileDna->getStruct(dataChunk.dna_nr); + short int *oldStruct = fileDna->getStruct(dataChunk.dna_nr); short oldLen = fileDna->getLength(oldStruct[0]); //char* structType = fileDna->getType(oldStruct[0]); - char* cur = (char*)findLibPointer(dataChunk.oldPtr); - for (int block=0; block<dataChunk.nr; block++) + char *cur = (char *)findLibPointer(dataChunk.oldPtr); + for (int block = 0; block < dataChunk.nr; block++) { - resolvePointersStructRecursive(cur,dataChunk.dna_nr, verboseMode,1); + resolvePointersStructRecursive(cur, dataChunk.dna_nr, verboseMode, 1); cur += oldLen; } } - -int bFile::resolvePointersStructRecursive(char *strcPtr, int dna_nr, int verboseMode,int recursion) +int bFile::resolvePointersStructRecursive(char *strcPtr, int dna_nr, int verboseMode, int recursion) { + bParse::bDNA *fileDna = mFileDNA ? mFileDNA : mMemoryDNA; - bParse::bDNA* fileDna = mFileDNA ? mFileDNA : mMemoryDNA; + char *memType; + char *memName; + short firstStructType = fileDna->getStruct(0)[0]; - char* memType; - char* memName; - short firstStructType = fileDna->getStruct(0)[0]; + char *elemPtr = strcPtr; - - char* elemPtr= strcPtr; - - short int* oldStruct = fileDna->getStruct(dna_nr); + short int *oldStruct = fileDna->getStruct(dna_nr); int elementLength = oldStruct[1]; - oldStruct+=2; + oldStruct += 2; int totalSize = 0; - for (int ele=0; ele<elementLength; ele++, oldStruct+=2) + for (int ele = 0; ele < elementLength; ele++, oldStruct += 2) { - memType = fileDna->getType(oldStruct[0]); memName = fileDna->getName(oldStruct[1]); - - int arrayLen = fileDna->getArraySizeNew(oldStruct[1]); if (memName[0] == '*') { if (arrayLen > 1) { - void **array= (void**)elemPtr; - for (int a=0; a<arrayLen; a++) + void **array = (void **)elemPtr; + for (int a = 0; a < arrayLen; a++) { if (verboseMode & FD_VERBOSE_EXPORT_XML) { - for (int i=0;i<recursion;i++) + for (int i = 0; i < recursion; i++) { printf(" "); } //skip the * - printf("<%s type=\"pointer\"> ",&memName[1]); + printf("<%s type=\"pointer\"> ", &memName[1]); printf("%p ", array[a]); - printf("</%s>\n",&memName[1]); + printf("</%s>\n", &memName[1]); } array[a] = findLibPointer(array[a]); @@ -1261,266 +1193,259 @@ int bFile::resolvePointersStructRecursive(char *strcPtr, int dna_nr, int verbose } else { - void** ptrptr = (void**) elemPtr; - void* ptr = *ptrptr; + void **ptrptr = (void **)elemPtr; + void *ptr = *ptrptr; if (verboseMode & FD_VERBOSE_EXPORT_XML) { - for (int i=0;i<recursion;i++) + for (int i = 0; i < recursion; i++) { printf(" "); } - printf("<%s type=\"pointer\"> ",&memName[1]); + printf("<%s type=\"pointer\"> ", &memName[1]); printf("%p ", ptr); - printf("</%s>\n",&memName[1]); + printf("</%s>\n", &memName[1]); } ptr = findLibPointer(ptr); if (ptr) { - // printf("Fixup pointer at 0x%x from 0x%x to 0x%x!\n",ptrptr,*ptrptr,ptr); + // printf("Fixup pointer at 0x%x from 0x%x to 0x%x!\n",ptrptr,*ptrptr,ptr); *(ptrptr) = ptr; if (memName[1] == '*' && ptrptr && *ptrptr) { // This will only work if the given **array is continuous - void **array= (void**)*(ptrptr); - void *np= array[0]; - int n=0; + void **array = (void **)*(ptrptr); + void *np = array[0]; + int n = 0; while (np) { - np= findLibPointer(array[n]); - if (np) array[n]= np; + np = findLibPointer(array[n]); + if (np) array[n] = np; n++; } } - } else + } + else { - // printf("Cannot fixup pointer at 0x%x from 0x%x to 0x%x!\n",ptrptr,*ptrptr,ptr); + // printf("Cannot fixup pointer at 0x%x from 0x%x to 0x%x!\n",ptrptr,*ptrptr,ptr); } } - } else + } + else { int revType = fileDna->getReverseType(oldStruct[0]); - if (oldStruct[0]>=firstStructType) //revType != -1 && + if (oldStruct[0] >= firstStructType) //revType != -1 && { char cleanName[MAX_STRLEN]; - getCleanName(memName,cleanName); + getCleanName(memName, cleanName); int arrayLen = fileDna->getArraySizeNew(oldStruct[1]); int byteOffset = 0; if (verboseMode & FD_VERBOSE_EXPORT_XML) { - for (int i=0;i<recursion;i++) + for (int i = 0; i < recursion; i++) { printf(" "); } - if (arrayLen>1) + if (arrayLen > 1) { - printf("<%s type=\"%s\" count=%d>\n",cleanName,memType, arrayLen); - } else + printf("<%s type=\"%s\" count=%d>\n", cleanName, memType, arrayLen); + } + else { - printf("<%s type=\"%s\">\n",cleanName,memType); + printf("<%s type=\"%s\">\n", cleanName, memType); } } - for (int i=0;i<arrayLen;i++) + for (int i = 0; i < arrayLen; i++) { - byteOffset += resolvePointersStructRecursive(elemPtr+byteOffset,revType, verboseMode,recursion+1); + byteOffset += resolvePointersStructRecursive(elemPtr + byteOffset, revType, verboseMode, recursion + 1); } if (verboseMode & FD_VERBOSE_EXPORT_XML) { - for (int i=0;i<recursion;i++) + for (int i = 0; i < recursion; i++) { printf(" "); } - printf("</%s>\n",cleanName); + printf("</%s>\n", cleanName); } - } else + } + else { //export a simple type if (verboseMode & FD_VERBOSE_EXPORT_XML) { - - if (arrayLen>MAX_ARRAY_LENGTH) + if (arrayLen > MAX_ARRAY_LENGTH) { printf("too long\n"); - } else + } + else { //printf("%s %s\n",memType,memName); - bool isIntegerType = (strcmp(memType,"char")==0) || (strcmp(memType,"int")==0) || (strcmp(memType,"short")==0); + bool isIntegerType = (strcmp(memType, "char") == 0) || (strcmp(memType, "int") == 0) || (strcmp(memType, "short") == 0); if (isIntegerType) { - const char* newtype="int"; + const char *newtype = "int"; int dbarray[MAX_ARRAY_LENGTH]; - int* dbPtr = 0; - char* tmp = elemPtr; + int *dbPtr = 0; + char *tmp = elemPtr; dbPtr = &dbarray[0]; if (dbPtr) { char cleanName[MAX_STRLEN]; - getCleanName(memName,cleanName); + getCleanName(memName, cleanName); int i; - getElement(arrayLen, newtype,memType, tmp, (char*)dbPtr); - for (i=0;i<recursion;i++) + getElement(arrayLen, newtype, memType, tmp, (char *)dbPtr); + for (i = 0; i < recursion; i++) printf(" "); - if (arrayLen==1) - printf("<%s type=\"%s\">",cleanName,memType); + if (arrayLen == 1) + printf("<%s type=\"%s\">", cleanName, memType); else - printf("<%s type=\"%s\" count=%d>",cleanName,memType,arrayLen); - for (i=0;i<arrayLen;i++) - printf(" %d ",dbPtr[i]); - printf("</%s>\n",cleanName); + printf("<%s type=\"%s\" count=%d>", cleanName, memType, arrayLen); + for (i = 0; i < arrayLen; i++) + printf(" %d ", dbPtr[i]); + printf("</%s>\n", cleanName); } - } else + } + else { - const char* newtype="double"; + const char *newtype = "double"; double dbarray[MAX_ARRAY_LENGTH]; - double* dbPtr = 0; - char* tmp = elemPtr; + double *dbPtr = 0; + char *tmp = elemPtr; dbPtr = &dbarray[0]; if (dbPtr) { int i; - getElement(arrayLen, newtype,memType, tmp, (char*)dbPtr); - for (i=0;i<recursion;i++) + getElement(arrayLen, newtype, memType, tmp, (char *)dbPtr); + for (i = 0; i < recursion; i++) printf(" "); char cleanName[MAX_STRLEN]; - getCleanName(memName,cleanName); + getCleanName(memName, cleanName); - if (arrayLen==1) + if (arrayLen == 1) { - printf("<%s type=\"%s\">",memName,memType); + printf("<%s type=\"%s\">", memName, memType); } else { - printf("<%s type=\"%s\" count=%d>",cleanName,memType,arrayLen); + printf("<%s type=\"%s\" count=%d>", cleanName, memType, arrayLen); } - for (i=0;i<arrayLen;i++) - printf(" %f ",dbPtr[i]); - printf("</%s>\n",cleanName); + for (i = 0; i < arrayLen; i++) + printf(" %f ", dbPtr[i]); + printf("</%s>\n", cleanName); } } } - } } } int size = fileDna->getElementSize(oldStruct[0], oldStruct[1]); totalSize += size; - elemPtr+=size; - + elemPtr += size; } return totalSize; } - ///Resolve pointers replaces the original pointers in structures, and linked lists by the new in-memory structures void bFile::resolvePointers(int verboseMode) { - bParse::bDNA* fileDna = mFileDNA ? mFileDNA : mMemoryDNA; + bParse::bDNA *fileDna = mFileDNA ? mFileDNA : mMemoryDNA; //char *dataPtr = mFileBuffer+mDataStart; - if (1) //mFlags & (FD_BITS_VARIES | FD_VERSION_VARIES)) + if (1) //mFlags & (FD_BITS_VARIES | FD_VERSION_VARIES)) { resolvePointersMismatch(); } { - if (verboseMode & FD_VERBOSE_EXPORT_XML) { printf("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"); int numitems = m_chunks.size(); printf("<bullet_physics version=%d itemcount = %d>\n", b3GetVersion(), numitems); } - for (int i=0;i<m_chunks.size();i++) + for (int i = 0; i < m_chunks.size(); i++) { - const bChunkInd& dataChunk = m_chunks.at(i); + const bChunkInd &dataChunk = m_chunks.at(i); if (!mFileDNA || fileDna->flagEqual(dataChunk.dna_nr)) { //dataChunk.len - short int* oldStruct = fileDna->getStruct(dataChunk.dna_nr); - char* oldType = fileDna->getType(oldStruct[0]); + short int *oldStruct = fileDna->getStruct(dataChunk.dna_nr); + char *oldType = fileDna->getType(oldStruct[0]); if (verboseMode & FD_VERBOSE_EXPORT_XML) - printf(" <%s pointer=%p>\n",oldType,dataChunk.oldPtr); + printf(" <%s pointer=%p>\n", oldType, dataChunk.oldPtr); resolvePointersChunk(dataChunk, verboseMode); if (verboseMode & FD_VERBOSE_EXPORT_XML) - printf(" </%s>\n",oldType); - } else + printf(" </%s>\n", oldType); + } + else { //printf("skipping mStruct\n"); } } - if (verboseMode & FD_VERBOSE_EXPORT_XML) - { - printf("</bullet_physics>\n"); - } + if (verboseMode & FD_VERBOSE_EXPORT_XML) + { + printf("</bullet_physics>\n"); + } } - - } - // ----------------------------------------------------- // -void* bFile::findLibPointer(void *ptr) +void *bFile::findLibPointer(void *ptr) { - - bStructHandle** ptrptr = getLibPointers().find(ptr); + bStructHandle **ptrptr = getLibPointers().find(ptr); if (ptrptr) return *ptrptr; return 0; } - -void bFile::updateOldPointers() +void bFile::updateOldPointers() { int i; - for (i=0;i<m_chunks.size();i++) + for (i = 0; i < m_chunks.size(); i++) { - bChunkInd& dataChunk = m_chunks[i]; + bChunkInd &dataChunk = m_chunks[i]; dataChunk.oldPtr = findLibPointer(dataChunk.oldPtr); } } -void bFile::dumpChunks(bParse::bDNA* dna) +void bFile::dumpChunks(bParse::bDNA *dna) { int i; - for (i=0;i<m_chunks.size();i++) + for (i = 0; i < m_chunks.size(); i++) { - bChunkInd& dataChunk = m_chunks[i]; - char* codeptr = (char*)&dataChunk.code; - char codestr[5] = {codeptr[0],codeptr[1],codeptr[2],codeptr[3],0}; + bChunkInd &dataChunk = m_chunks[i]; + char *codeptr = (char *)&dataChunk.code; + char codestr[5] = {codeptr[0], codeptr[1], codeptr[2], codeptr[3], 0}; - short* newStruct = dna->getStruct(dataChunk.dna_nr); - char* typeName = dna->getType(newStruct[0]); - printf("%3d: %s ",i,typeName); + short *newStruct = dna->getStruct(dataChunk.dna_nr); + char *typeName = dna->getType(newStruct[0]); + printf("%3d: %s ", i, typeName); - printf("code=%s ",codestr); + printf("code=%s ", codestr); - printf("ptr=%p ",dataChunk.oldPtr); - printf("len=%d ",dataChunk.len); - printf("nr=%d ",dataChunk.nr); - if (dataChunk.nr!=1) + printf("ptr=%p ", dataChunk.oldPtr); + printf("len=%d ", dataChunk.len); + printf("nr=%d ", dataChunk.nr); + if (dataChunk.nr != 1) { printf("not 1\n"); } printf("\n"); - - - - } #if 0 @@ -1536,20 +1461,18 @@ void bFile::dumpChunks(bParse::bDNA* dna) printf("\n"); } #endif - } - -void bFile::writeChunks(FILE* fp, bool fixupPointers) +void bFile::writeChunks(FILE *fp, bool fixupPointers) { - bParse::bDNA* fileDna = mFileDNA ? mFileDNA : mMemoryDNA; + bParse::bDNA *fileDna = mFileDNA ? mFileDNA : mMemoryDNA; - for (int i=0;i<m_chunks.size();i++) + for (int i = 0; i < m_chunks.size(); i++) { - bChunkInd& dataChunk = m_chunks.at(i); + bChunkInd &dataChunk = m_chunks.at(i); // Ouch! need to rebuild the struct - short *oldStruct,*curStruct; + short *oldStruct, *curStruct; char *oldType, *newType; int oldLen, curLen, reverseOld; @@ -1559,8 +1482,7 @@ void bFile::writeChunks(FILE* fp, bool fixupPointers) ///don't try to convert Link block data, just memcpy it. Other data can be converted. reverseOld = mMemoryDNA->getReverseType(oldType); - - if ((reverseOld!=-1)) + if ((reverseOld != -1)) { // make sure it's here //assert(reverseOld!= -1 && "getReverseType() returned -1, struct required!"); @@ -1568,50 +1490,47 @@ void bFile::writeChunks(FILE* fp, bool fixupPointers) curStruct = mMemoryDNA->getStruct(reverseOld); newType = mMemoryDNA->getType(curStruct[0]); // make sure it's the same - assert((strcmp(oldType, newType)==0) && "internal error, struct mismatch!"); - + assert((strcmp(oldType, newType) == 0) && "internal error, struct mismatch!"); curLen = mMemoryDNA->getLength(curStruct[0]); dataChunk.dna_nr = reverseOld; - if (strcmp("Link",oldType)!=0) + if (strcmp("Link", oldType) != 0) { dataChunk.len = curLen * dataChunk.nr; - } else + } + else { -// printf("keep length of link = %d\n",dataChunk.len); + // printf("keep length of link = %d\n",dataChunk.len); } //write the structure header - fwrite(&dataChunk,sizeof(bChunkInd),1,fp); - + fwrite(&dataChunk, sizeof(bChunkInd), 1, fp); - - short int* curStruct1; + short int *curStruct1; curStruct1 = mMemoryDNA->getStruct(dataChunk.dna_nr); assert(curStruct1 == curStruct); - char* cur = fixupPointers ? (char*)findLibPointer(dataChunk.oldPtr) : (char*)dataChunk.oldPtr; + char *cur = fixupPointers ? (char *)findLibPointer(dataChunk.oldPtr) : (char *)dataChunk.oldPtr; //write the actual contents of the structure(s) - fwrite(cur,dataChunk.len,1,fp); - } else + fwrite(cur, dataChunk.len, 1, fp); + } + else { printf("serious error, struct mismatch: don't write\n"); } } - } - // ----------------------------------------------------- // -int bFile::getNextBlock(bChunkInd *dataChunk, const char *dataPtr, const int flags) +int bFile::getNextBlock(bChunkInd *dataChunk, const char *dataPtr, const int flags) { bool swap = false; bool varies = false; - if (flags &FD_ENDIAN_SWAP) + if (flags & FD_ENDIAN_SWAP) swap = true; - if (flags &FD_BITS_VARIES) + if (flags & FD_BITS_VARIES) varies = true; if (VOID_IS_8) @@ -1621,27 +1540,25 @@ int bFile::getNextBlock(bChunkInd *dataChunk, const char *dataPtr, const int fl bChunkPtr4 head; memcpy(&head, dataPtr, sizeof(bChunkPtr4)); - bChunkPtr8 chunk; - chunk.code = head.code; - chunk.len = head.len; + chunk.code = head.code; + chunk.len = head.len; chunk.m_uniqueInts[0] = head.m_uniqueInt; chunk.m_uniqueInts[1] = 0; - chunk.dna_nr = head.dna_nr; - chunk.nr = head.nr; + chunk.dna_nr = head.dna_nr; + chunk.nr = head.nr; if (swap) { - if ((chunk.code & 0xFFFF)==0) - chunk.code >>=16; + if ((chunk.code & 0xFFFF) == 0) + chunk.code >>= 16; B3_SWITCH_INT(chunk.len); B3_SWITCH_INT(chunk.dna_nr); B3_SWITCH_INT(chunk.nr); } - memcpy(dataChunk, &chunk, sizeof(bChunkInd)); } else @@ -1651,8 +1568,8 @@ int bFile::getNextBlock(bChunkInd *dataChunk, const char *dataPtr, const int fl if (swap) { - if ((c.code & 0xFFFF)==0) - c.code >>=16; + if ((c.code & 0xFFFF) == 0) + c.code >>= 16; B3_SWITCH_INT(c.len); B3_SWITCH_INT(c.dna_nr); @@ -1669,31 +1586,30 @@ int bFile::getNextBlock(bChunkInd *dataChunk, const char *dataPtr, const int fl bChunkPtr8 head; memcpy(&head, dataPtr, sizeof(bChunkPtr8)); - bChunkPtr4 chunk; chunk.code = head.code; chunk.len = head.len; - if (head.m_uniqueInts[0]==head.m_uniqueInts[1]) + if (head.m_uniqueInts[0] == head.m_uniqueInts[1]) { chunk.m_uniqueInt = head.m_uniqueInts[0]; - } else + } + else { - b3Long64 oldPtr =0; + b3Long64 oldPtr = 0; memcpy(&oldPtr, &head.m_uniqueInts[0], 8); if (swap) B3_SWITCH_LONGINT(oldPtr); chunk.m_uniqueInt = (int)(oldPtr >> 3); } - chunk.dna_nr = head.dna_nr; chunk.nr = head.nr; if (swap) { - if ((chunk.code & 0xFFFF)==0) - chunk.code >>=16; + if ((chunk.code & 0xFFFF) == 0) + chunk.code >>= 16; B3_SWITCH_INT(chunk.len); B3_SWITCH_INT(chunk.dna_nr); @@ -1709,8 +1625,8 @@ int bFile::getNextBlock(bChunkInd *dataChunk, const char *dataPtr, const int fl if (swap) { - if ((c.code & 0xFFFF)==0) - c.code >>=16; + if ((c.code & 0xFFFF) == 0) + c.code >>= 16; B3_SWITCH_INT(c.len); B3_SWITCH_INT(c.dna_nr); @@ -1731,9 +1647,7 @@ int bFile::getNextBlock(bChunkInd *dataChunk, const char *dataPtr, const int fl print (dataChunk->dna_nr); print (dataChunk->nr); #endif - return (dataChunk->len+ChunkUtils::getOffset(flags)); + return (dataChunk->len + ChunkUtils::getOffset(flags)); } - - //eof diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3File.h b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3File.h index 861056806d..bda229cfbd 100644 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3File.h +++ b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3File.h @@ -20,146 +20,139 @@ subject to the following restrictions: #include "b3Chunk.h" #include <stdio.h> -namespace bParse { - - // ----------------------------------------------------- // - enum bFileFlags - { - FD_INVALID =0, - FD_OK =1, - FD_VOID_IS_8 =2, - FD_ENDIAN_SWAP =4, - FD_FILE_64 =8, - FD_BITS_VARIES =16, - FD_VERSION_VARIES = 32, - FD_DOUBLE_PRECISION =64, - FD_BROKEN_DNA = 128 - }; - - enum bFileVerboseMode +namespace bParse +{ +// ----------------------------------------------------- // +enum bFileFlags +{ + FD_INVALID = 0, + FD_OK = 1, + FD_VOID_IS_8 = 2, + FD_ENDIAN_SWAP = 4, + FD_FILE_64 = 8, + FD_BITS_VARIES = 16, + FD_VERSION_VARIES = 32, + FD_DOUBLE_PRECISION = 64, + FD_BROKEN_DNA = 128 +}; + +enum bFileVerboseMode +{ + FD_VERBOSE_EXPORT_XML = 1, + FD_VERBOSE_DUMP_DNA_TYPE_DEFINITIONS = 2, + FD_VERBOSE_DUMP_CHUNKS = 4, + FD_VERBOSE_DUMP_FILE_INFO = 8, +}; +// ----------------------------------------------------- // +class bFile +{ +protected: + char m_headerString[7]; + + bool mOwnsBuffer; + char *mFileBuffer; + int mFileLen; + int mVersion; + + bPtrMap mLibPointers; + + int mDataStart; + bDNA *mFileDNA; + bDNA *mMemoryDNA; + + b3AlignedObjectArray<char *> m_pointerFixupArray; + b3AlignedObjectArray<char *> m_pointerPtrFixupArray; + + b3AlignedObjectArray<bChunkInd> m_chunks; + b3HashMap<b3HashPtr, bChunkInd> m_chunkPtrPtrMap; + + // + + bPtrMap mDataPointers; + + int mFlags; + + // //////////////////////////////////////////////////////////////////////////// + + // buffer offset util + int getNextBlock(bChunkInd *dataChunk, const char *dataPtr, const int flags); + void safeSwapPtr(char *dst, const char *src); + + virtual void parseHeader(); + + virtual void parseData() = 0; + + void resolvePointersMismatch(); + void resolvePointersChunk(const bChunkInd &dataChunk, int verboseMode); + + int resolvePointersStructRecursive(char *strcPtr, int old_dna, int verboseMode, int recursion); + //void swapPtr(char *dst, char *src); + + void parseStruct(char *strcPtr, char *dtPtr, int old_dna, int new_dna, bool fixupPointers); + void getMatchingFileDNA(short *old, const char *lookupName, const char *lookupType, char *strcData, char *data, bool fixupPointers); + char *getFileElement(short *firstStruct, char *lookupName, char *lookupType, char *data, short **foundPos); + + void swap(char *head, class bChunkInd &ch, bool ignoreEndianFlag); + void swapData(char *data, short type, int arraySize, bool ignoreEndianFlag); + void swapStruct(int dna_nr, char *data, bool ignoreEndianFlag); + void swapLen(char *dataPtr); + void swapDNA(char *ptr); + + char *readStruct(char *head, class bChunkInd &chunk); + char *getAsString(int code); + + void parseInternal(int verboseMode, char *memDna, int memDnaLength); + +public: + bFile(const char *filename, const char headerString[7]); + + //todo: make memoryBuffer const char + //bFile( const char *memoryBuffer, int len); + bFile(char *memoryBuffer, int len, const char headerString[7]); + virtual ~bFile(); + + bDNA *getFileDNA() { - FD_VERBOSE_EXPORT_XML = 1, - FD_VERBOSE_DUMP_DNA_TYPE_DEFINITIONS = 2, - FD_VERBOSE_DUMP_CHUNKS = 4, - FD_VERBOSE_DUMP_FILE_INFO=8, - }; - // ----------------------------------------------------- // - class bFile - { - protected: - - char m_headerString[7]; - - bool mOwnsBuffer; - char* mFileBuffer; - int mFileLen; - int mVersion; - - - bPtrMap mLibPointers; - - int mDataStart; - bDNA* mFileDNA; - bDNA* mMemoryDNA; - - b3AlignedObjectArray<char*> m_pointerFixupArray; - b3AlignedObjectArray<char*> m_pointerPtrFixupArray; - - b3AlignedObjectArray<bChunkInd> m_chunks; - b3HashMap<b3HashPtr, bChunkInd> m_chunkPtrPtrMap; - - // - - bPtrMap mDataPointers; - - - int mFlags; - - // //////////////////////////////////////////////////////////////////////////// - - // buffer offset util - int getNextBlock(bChunkInd *dataChunk, const char *dataPtr, const int flags); - void safeSwapPtr(char *dst, const char *src); - - virtual void parseHeader(); - - virtual void parseData() = 0; - - void resolvePointersMismatch(); - void resolvePointersChunk(const bChunkInd& dataChunk, int verboseMode); + return mFileDNA; + } - int resolvePointersStructRecursive(char *strcPtr, int old_dna, int verboseMode, int recursion); - //void swapPtr(char *dst, char *src); + virtual void addDataBlock(char *dataBlock) = 0; - void parseStruct(char *strcPtr, char *dtPtr, int old_dna, int new_dna, bool fixupPointers); - void getMatchingFileDNA(short* old, const char* lookupName, const char* lookupType, char *strcData, char *data, bool fixupPointers); - char* getFileElement(short *firstStruct, char *lookupName, char *lookupType, char *data, short **foundPos); - - - void swap(char *head, class bChunkInd& ch, bool ignoreEndianFlag); - void swapData(char *data, short type, int arraySize, bool ignoreEndianFlag); - void swapStruct(int dna_nr, char *data, bool ignoreEndianFlag); - void swapLen(char *dataPtr); - void swapDNA(char* ptr); - - - char* readStruct(char *head, class bChunkInd& chunk); - char *getAsString(int code); - - void parseInternal(int verboseMode, char* memDna,int memDnaLength); - - public: - bFile(const char *filename, const char headerString[7]); - - //todo: make memoryBuffer const char - //bFile( const char *memoryBuffer, int len); - bFile( char *memoryBuffer, int len, const char headerString[7]); - virtual ~bFile(); - - bDNA* getFileDNA() - { - return mFileDNA; - } - - virtual void addDataBlock(char* dataBlock) = 0; - - int getFlags() const - { - return mFlags; - } - - bPtrMap& getLibPointers() - { - return mLibPointers; - } - - void* findLibPointer(void *ptr); + int getFlags() const + { + return mFlags; + } - bool ok(); + bPtrMap &getLibPointers() + { + return mLibPointers; + } - virtual void parse(int verboseMode) = 0; + void *findLibPointer(void *ptr); - virtual int write(const char* fileName, bool fixupPointers=false) = 0; + bool ok(); - virtual void writeChunks(FILE* fp, bool fixupPointers ); + virtual void parse(int verboseMode) = 0; - virtual void writeDNA(FILE* fp) = 0; + virtual int write(const char *fileName, bool fixupPointers = false) = 0; - void updateOldPointers(); - void resolvePointers(int verboseMode); + virtual void writeChunks(FILE *fp, bool fixupPointers); - void dumpChunks(bDNA* dna); - - int getVersion() const - { - return mVersion; - } - //pre-swap the endianness, so that data loaded on a target with different endianness doesn't need to be swapped - void preSwap(); - void writeFile(const char* fileName); + virtual void writeDNA(FILE *fp) = 0; - }; -} + void updateOldPointers(); + void resolvePointers(int verboseMode); + void dumpChunks(bDNA *dna); -#endif//__BFILE_H__ + int getVersion() const + { + return mVersion; + } + //pre-swap the endianness, so that data loaded on a target with different endianness doesn't need to be swapped + void preSwap(); + void writeFile(const char *fileName); +}; +} // namespace bParse + +#endif //__BFILE_H__ diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Serializer.cpp b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Serializer.cpp index c6a2a832ad..ea4a8e2007 100644 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Serializer.cpp +++ b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Serializer.cpp @@ -1,908 +1,18062 @@ -char b3s_bulletDNAstr[]= { -char(83),char(68),char(78),char(65),char(78),char(65),char(77),char(69),char(63),char(1),char(0),char(0),char(109),char(95),char(115),char(105),char(122),char(101),char(0),char(109), -char(95),char(99),char(97),char(112),char(97),char(99),char(105),char(116),char(121),char(0),char(42),char(109),char(95),char(100),char(97),char(116),char(97),char(0),char(109),char(95), -char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(83),char(104),char(97),char(112),char(101),char(115),char(0),char(109),char(95),char(99),char(111), -char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(79),char(98),char(106),char(101),char(99),char(116),char(115),char(0),char(109),char(95),char(99),char(111),char(110), -char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(115),char(0),char(42),char(102),char(105),char(114),char(115),char(116),char(0),char(42),char(108),char(97),char(115), -char(116),char(0),char(109),char(95),char(102),char(108),char(111),char(97),char(116),char(115),char(91),char(52),char(93),char(0),char(109),char(95),char(101),char(108),char(91),char(51), -char(93),char(0),char(109),char(95),char(98),char(97),char(115),char(105),char(115),char(0),char(109),char(95),char(111),char(114),char(105),char(103),char(105),char(110),char(0),char(109), -char(95),char(114),char(111),char(111),char(116),char(78),char(111),char(100),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(115),char(117),char(98), -char(116),char(114),char(101),char(101),char(83),char(105),char(122),char(101),char(0),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100), -char(65),char(97),char(98),char(98),char(77),char(105),char(110),char(91),char(51),char(93),char(0),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122), -char(101),char(100),char(65),char(97),char(98),char(98),char(77),char(97),char(120),char(91),char(51),char(93),char(0),char(109),char(95),char(97),char(97),char(98),char(98),char(77), -char(105),char(110),char(79),char(114),char(103),char(0),char(109),char(95),char(97),char(97),char(98),char(98),char(77),char(97),char(120),char(79),char(114),char(103),char(0),char(109), -char(95),char(101),char(115),char(99),char(97),char(112),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(115),char(117),char(98),char(80),char(97), -char(114),char(116),char(0),char(109),char(95),char(116),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109), -char(95),char(112),char(97),char(100),char(91),char(52),char(93),char(0),char(109),char(95),char(101),char(115),char(99),char(97),char(112),char(101),char(73),char(110),char(100),char(101), -char(120),char(79),char(114),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(98), -char(118),char(104),char(65),char(97),char(98),char(98),char(77),char(105),char(110),char(0),char(109),char(95),char(98),char(118),char(104),char(65),char(97),char(98),char(98),char(77), -char(97),char(120),char(0),char(109),char(95),char(98),char(118),char(104),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(97),char(116),char(105),char(111),char(110), -char(0),char(109),char(95),char(99),char(117),char(114),char(78),char(111),char(100),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(117),char(115), -char(101),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(97),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(110),char(117),char(109),char(67), -char(111),char(110),char(116),char(105),char(103),char(117),char(111),char(117),char(115),char(76),char(101),char(97),char(102),char(78),char(111),char(100),char(101),char(115),char(0),char(109), -char(95),char(110),char(117),char(109),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(67),char(111),char(110),char(116),char(105),char(103),char(117), -char(111),char(117),char(115),char(78),char(111),char(100),char(101),char(115),char(0),char(42),char(109),char(95),char(99),char(111),char(110),char(116),char(105),char(103),char(117),char(111), -char(117),char(115),char(78),char(111),char(100),char(101),char(115),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105), -char(122),char(101),char(100),char(67),char(111),char(110),char(116),char(105),char(103),char(117),char(111),char(117),char(115),char(78),char(111),char(100),char(101),char(115),char(80),char(116), -char(114),char(0),char(42),char(109),char(95),char(115),char(117),char(98),char(84),char(114),char(101),char(101),char(73),char(110),char(102),char(111),char(80),char(116),char(114),char(0), -char(109),char(95),char(116),char(114),char(97),char(118),char(101),char(114),char(115),char(97),char(108),char(77),char(111),char(100),char(101),char(0),char(109),char(95),char(110),char(117), -char(109),char(83),char(117),char(98),char(116),char(114),char(101),char(101),char(72),char(101),char(97),char(100),char(101),char(114),char(115),char(0),char(42),char(109),char(95),char(110), -char(97),char(109),char(101),char(0),char(109),char(95),char(115),char(104),char(97),char(112),char(101),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(112),char(97), -char(100),char(100),char(105),char(110),char(103),char(91),char(52),char(93),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110), -char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(108),char(111),char(99),char(97),char(108),char(83),char(99),char(97), -char(108),char(105),char(110),char(103),char(0),char(109),char(95),char(112),char(108),char(97),char(110),char(101),char(78),char(111),char(114),char(109),char(97),char(108),char(0),char(109), -char(95),char(112),char(108),char(97),char(110),char(101),char(67),char(111),char(110),char(115),char(116),char(97),char(110),char(116),char(0),char(109),char(95),char(105),char(109),char(112), -char(108),char(105),char(99),char(105),char(116),char(83),char(104),char(97),char(112),char(101),char(68),char(105),char(109),char(101),char(110),char(115),char(105),char(111),char(110),char(115), -char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(77),char(97),char(114),char(103),char(105),char(110),char(0),char(109), -char(95),char(112),char(97),char(100),char(100),char(105),char(110),char(103),char(0),char(109),char(95),char(112),char(111),char(115),char(0),char(109),char(95),char(114),char(97),char(100), -char(105),char(117),char(115),char(0),char(109),char(95),char(99),char(111),char(110),char(118),char(101),char(120),char(73),char(110),char(116),char(101),char(114),char(110),char(97),char(108), -char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(42),char(109),char(95),char(108),char(111),char(99),char(97),char(108),char(80),char(111), -char(115),char(105),char(116),char(105),char(111),char(110),char(65),char(114),char(114),char(97),char(121),char(80),char(116),char(114),char(0),char(109),char(95),char(108),char(111),char(99), -char(97),char(108),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(65),char(114),char(114),char(97),char(121),char(83),char(105),char(122),char(101),char(0), -char(109),char(95),char(118),char(97),char(108),char(117),char(101),char(0),char(109),char(95),char(112),char(97),char(100),char(91),char(50),char(93),char(0),char(109),char(95),char(118), -char(97),char(108),char(117),char(101),char(115),char(91),char(51),char(93),char(0),char(109),char(95),char(112),char(97),char(100),char(0),char(42),char(109),char(95),char(118),char(101), -char(114),char(116),char(105),char(99),char(101),char(115),char(51),char(102),char(0),char(42),char(109),char(95),char(118),char(101),char(114),char(116),char(105),char(99),char(101),char(115), -char(51),char(100),char(0),char(42),char(109),char(95),char(105),char(110),char(100),char(105),char(99),char(101),char(115),char(51),char(50),char(0),char(42),char(109),char(95),char(51), -char(105),char(110),char(100),char(105),char(99),char(101),char(115),char(49),char(54),char(0),char(42),char(109),char(95),char(51),char(105),char(110),char(100),char(105),char(99),char(101), -char(115),char(56),char(0),char(42),char(109),char(95),char(105),char(110),char(100),char(105),char(99),char(101),char(115),char(49),char(54),char(0),char(109),char(95),char(110),char(117), -char(109),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(86),char(101),char(114),char(116), -char(105),char(99),char(101),char(115),char(0),char(42),char(109),char(95),char(109),char(101),char(115),char(104),char(80),char(97),char(114),char(116),char(115),char(80),char(116),char(114), -char(0),char(109),char(95),char(115),char(99),char(97),char(108),char(105),char(110),char(103),char(0),char(109),char(95),char(110),char(117),char(109),char(77),char(101),char(115),char(104), -char(80),char(97),char(114),char(116),char(115),char(0),char(109),char(95),char(109),char(101),char(115),char(104),char(73),char(110),char(116),char(101),char(114),char(102),char(97),char(99), -char(101),char(0),char(42),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(70),char(108),char(111),char(97),char(116),char(66), -char(118),char(104),char(0),char(42),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(68),char(111),char(117),char(98),char(108), -char(101),char(66),char(118),char(104),char(0),char(42),char(109),char(95),char(116),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(102),char(111), -char(77),char(97),char(112),char(0),char(109),char(95),char(112),char(97),char(100),char(51),char(91),char(52),char(93),char(0),char(109),char(95),char(116),char(114),char(105),char(109), -char(101),char(115),char(104),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(116),char(114),char(97),char(110),char(115), -char(102),char(111),char(114),char(109),char(0),char(42),char(109),char(95),char(99),char(104),char(105),char(108),char(100),char(83),char(104),char(97),char(112),char(101),char(0),char(109), -char(95),char(99),char(104),char(105),char(108),char(100),char(83),char(104),char(97),char(112),char(101),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(99),char(104), -char(105),char(108),char(100),char(77),char(97),char(114),char(103),char(105),char(110),char(0),char(42),char(109),char(95),char(99),char(104),char(105),char(108),char(100),char(83),char(104), -char(97),char(112),char(101),char(80),char(116),char(114),char(0),char(109),char(95),char(110),char(117),char(109),char(67),char(104),char(105),char(108),char(100),char(83),char(104),char(97), -char(112),char(101),char(115),char(0),char(109),char(95),char(117),char(112),char(65),char(120),char(105),char(115),char(0),char(109),char(95),char(102),char(108),char(97),char(103),char(115), -char(0),char(109),char(95),char(101),char(100),char(103),char(101),char(86),char(48),char(86),char(49),char(65),char(110),char(103),char(108),char(101),char(0),char(109),char(95),char(101), -char(100),char(103),char(101),char(86),char(49),char(86),char(50),char(65),char(110),char(103),char(108),char(101),char(0),char(109),char(95),char(101),char(100),char(103),char(101),char(86), -char(50),char(86),char(48),char(65),char(110),char(103),char(108),char(101),char(0),char(42),char(109),char(95),char(104),char(97),char(115),char(104),char(84),char(97),char(98),char(108), -char(101),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(110),char(101),char(120),char(116),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(118), -char(97),char(108),char(117),char(101),char(65),char(114),char(114),char(97),char(121),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(107),char(101),char(121),char(65), -char(114),char(114),char(97),char(121),char(80),char(116),char(114),char(0),char(109),char(95),char(99),char(111),char(110),char(118),char(101),char(120),char(69),char(112),char(115),char(105), -char(108),char(111),char(110),char(0),char(109),char(95),char(112),char(108),char(97),char(110),char(97),char(114),char(69),char(112),char(115),char(105),char(108),char(111),char(110),char(0), -char(109),char(95),char(101),char(113),char(117),char(97),char(108),char(86),char(101),char(114),char(116),char(101),char(120),char(84),char(104),char(114),char(101),char(115),char(104),char(111), -char(108),char(100),char(0),char(109),char(95),char(101),char(100),char(103),char(101),char(68),char(105),char(115),char(116),char(97),char(110),char(99),char(101),char(84),char(104),char(114), -char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(122),char(101),char(114),char(111),char(65),char(114),char(101),char(97),char(84),char(104),char(114), -char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(110),char(101),char(120),char(116),char(83),char(105),char(122),char(101),char(0),char(109),char(95), -char(104),char(97),char(115),char(104),char(84),char(97),char(98),char(108),char(101),char(83),char(105),char(122),char(101),char(0),char(109),char(95),char(110),char(117),char(109),char(86), -char(97),char(108),char(117),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(75),char(101),char(121),char(115),char(0),char(109),char(95),char(103),char(105), -char(109),char(112),char(97),char(99),char(116),char(83),char(117),char(98),char(84),char(121),char(112),char(101),char(0),char(42),char(109),char(95),char(117),char(110),char(115),char(99), -char(97),char(108),char(101),char(100),char(80),char(111),char(105),char(110),char(116),char(115),char(70),char(108),char(111),char(97),char(116),char(80),char(116),char(114),char(0),char(42), -char(109),char(95),char(117),char(110),char(115),char(99),char(97),char(108),char(101),char(100),char(80),char(111),char(105),char(110),char(116),char(115),char(68),char(111),char(117),char(98), -char(108),char(101),char(80),char(116),char(114),char(0),char(109),char(95),char(110),char(117),char(109),char(85),char(110),char(115),char(99),char(97),char(108),char(101),char(100),char(80), -char(111),char(105),char(110),char(116),char(115),char(0),char(109),char(95),char(112),char(97),char(100),char(100),char(105),char(110),char(103),char(51),char(91),char(52),char(93),char(0), -char(42),char(109),char(95),char(98),char(114),char(111),char(97),char(100),char(112),char(104),char(97),char(115),char(101),char(72),char(97),char(110),char(100),char(108),char(101),char(0), -char(42),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(83),char(104),char(97),char(112),char(101),char(0),char(42),char(109), -char(95),char(114),char(111),char(111),char(116),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(83),char(104),char(97),char(112),char(101),char(0), -char(109),char(95),char(119),char(111),char(114),char(108),char(100),char(84),char(114),char(97),char(110),char(115),char(102),char(111),char(114),char(109),char(0),char(109),char(95),char(105), -char(110),char(116),char(101),char(114),char(112),char(111),char(108),char(97),char(116),char(105),char(111),char(110),char(87),char(111),char(114),char(108),char(100),char(84),char(114),char(97), -char(110),char(115),char(102),char(111),char(114),char(109),char(0),char(109),char(95),char(105),char(110),char(116),char(101),char(114),char(112),char(111),char(108),char(97),char(116),char(105), -char(111),char(110),char(76),char(105),char(110),char(101),char(97),char(114),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(105), -char(110),char(116),char(101),char(114),char(112),char(111),char(108),char(97),char(116),char(105),char(111),char(110),char(65),char(110),char(103),char(117),char(108),char(97),char(114),char(86), -char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(110),char(105),char(115),char(111),char(116),char(114),char(111),char(112),char(105), -char(99),char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(99),char(111),char(110),char(116),char(97),char(99),char(116),char(80), -char(114),char(111),char(99),char(101),char(115),char(115),char(105),char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109), -char(95),char(100),char(101),char(97),char(99),char(116),char(105),char(118),char(97),char(116),char(105),char(111),char(110),char(84),char(105),char(109),char(101),char(0),char(109),char(95), -char(102),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(114),char(111),char(108),char(108),char(105),char(110),char(103),char(70),char(114), -char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(105),char(116),char(117),char(116),char(105),char(111),char(110), -char(0),char(109),char(95),char(104),char(105),char(116),char(70),char(114),char(97),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(99),char(99),char(100), -char(83),char(119),char(101),char(112),char(116),char(83),char(112),char(104),char(101),char(114),char(101),char(82),char(97),char(100),char(105),char(117),char(115),char(0),char(109),char(95), -char(99),char(99),char(100),char(77),char(111),char(116),char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109), -char(95),char(104),char(97),char(115),char(65),char(110),char(105),char(115),char(111),char(116),char(114),char(111),char(112),char(105),char(99),char(70),char(114),char(105),char(99),char(116), -char(105),char(111),char(110),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(70),char(108),char(97),char(103),char(115), -char(0),char(109),char(95),char(105),char(115),char(108),char(97),char(110),char(100),char(84),char(97),char(103),char(49),char(0),char(109),char(95),char(99),char(111),char(109),char(112), -char(97),char(110),char(105),char(111),char(110),char(73),char(100),char(0),char(109),char(95),char(97),char(99),char(116),char(105),char(118),char(97),char(116),char(105),char(111),char(110), -char(83),char(116),char(97),char(116),char(101),char(49),char(0),char(109),char(95),char(105),char(110),char(116),char(101),char(114),char(110),char(97),char(108),char(84),char(121),char(112), -char(101),char(0),char(109),char(95),char(99),char(104),char(101),char(99),char(107),char(67),char(111),char(108),char(108),char(105),char(100),char(101),char(87),char(105),char(116),char(104), -char(0),char(109),char(95),char(115),char(111),char(108),char(118),char(101),char(114),char(73),char(110),char(102),char(111),char(0),char(109),char(95),char(103),char(114),char(97),char(118), -char(105),char(116),char(121),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(79),char(98),char(106),char(101),char(99), -char(116),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(105),char(110),char(118),char(73),char(110),char(101),char(114),char(116),char(105),char(97),char(84),char(101), -char(110),char(115),char(111),char(114),char(87),char(111),char(114),char(108),char(100),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(86),char(101), -char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(86),char(101),char(108),char(111), -char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(70),char(97),char(99),char(116),char(111),char(114), -char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(103),char(114), -char(97),char(118),char(105),char(116),char(121),char(95),char(97),char(99),char(99),char(101),char(108),char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(0),char(109), -char(95),char(105),char(110),char(118),char(73),char(110),char(101),char(114),char(116),char(105),char(97),char(76),char(111),char(99),char(97),char(108),char(0),char(109),char(95),char(116), -char(111),char(116),char(97),char(108),char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(116),char(111),char(116),char(97),char(108),char(84),char(111),char(114), -char(113),char(117),char(101),char(0),char(109),char(95),char(105),char(110),char(118),char(101),char(114),char(115),char(101),char(77),char(97),char(115),char(115),char(0),char(109),char(95), -char(108),char(105),char(110),char(101),char(97),char(114),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(97),char(110),char(103),char(117), -char(108),char(97),char(114),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(97),char(100),char(100),char(105),char(116),char(105),char(111), -char(110),char(97),char(108),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(97), -char(100),char(100),char(105),char(116),char(105),char(111),char(110),char(97),char(108),char(76),char(105),char(110),char(101),char(97),char(114),char(68),char(97),char(109),char(112),char(105), -char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(83),char(113),char(114),char(0),char(109),char(95),char(97),char(100),char(100), -char(105),char(116),char(105),char(111),char(110),char(97),char(108),char(65),char(110),char(103),char(117),char(108),char(97),char(114),char(68),char(97),char(109),char(112),char(105),char(110), -char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(83),char(113),char(114),char(0),char(109),char(95),char(97),char(100),char(100),char(105), -char(116),char(105),char(111),char(110),char(97),char(108),char(65),char(110),char(103),char(117),char(108),char(97),char(114),char(68),char(97),char(109),char(112),char(105),char(110),char(103), -char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(108),char(101),char(101),char(112), -char(105),char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108), -char(97),char(114),char(83),char(108),char(101),char(101),char(112),char(105),char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0), -char(109),char(95),char(97),char(100),char(100),char(105),char(116),char(105),char(111),char(110),char(97),char(108),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0), -char(109),char(95),char(110),char(117),char(109),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(82),char(111),char(119),char(115),char(0), -char(110),char(117),char(98),char(0),char(42),char(109),char(95),char(114),char(98),char(65),char(0),char(42),char(109),char(95),char(114),char(98),char(66),char(0),char(109),char(95), -char(111),char(98),char(106),char(101),char(99),char(116),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(117),char(115),char(101),char(114),char(67),char(111),char(110), -char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(117),char(115),char(101),char(114),char(67),char(111), -char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(73),char(100),char(0),char(109),char(95),char(110),char(101),char(101),char(100),char(115),char(70),char(101), -char(101),char(100),char(98),char(97),char(99),char(107),char(0),char(109),char(95),char(97),char(112),char(112),char(108),char(105),char(101),char(100),char(73),char(109),char(112),char(117), -char(108),char(115),char(101),char(0),char(109),char(95),char(100),char(98),char(103),char(68),char(114),char(97),char(119),char(83),char(105),char(122),char(101),char(0),char(109),char(95), -char(100),char(105),char(115),char(97),char(98),char(108),char(101),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(115),char(66),char(101),char(116), -char(119),char(101),char(101),char(110),char(76),char(105),char(110),char(107),char(101),char(100),char(66),char(111),char(100),char(105),char(101),char(115),char(0),char(109),char(95),char(111), -char(118),char(101),char(114),char(114),char(105),char(100),char(101),char(78),char(117),char(109),char(83),char(111),char(108),char(118),char(101),char(114),char(73),char(116),char(101),char(114), -char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(98),char(114),char(101),char(97),char(107),char(105),char(110),char(103),char(73),char(109),char(112), -char(117),char(108),char(115),char(101),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(105),char(115),char(69),char(110), -char(97),char(98),char(108),char(101),char(100),char(0),char(109),char(95),char(116),char(121),char(112),char(101),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105), -char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(112),char(105),char(118),char(111),char(116),char(73),char(110),char(65),char(0),char(109),char(95), -char(112),char(105),char(118),char(111),char(116),char(73),char(110),char(66),char(0),char(109),char(95),char(114),char(98),char(65),char(70),char(114),char(97),char(109),char(101),char(0), -char(109),char(95),char(114),char(98),char(66),char(70),char(114),char(97),char(109),char(101),char(0),char(109),char(95),char(117),char(115),char(101),char(82),char(101),char(102),char(101), -char(114),char(101),char(110),char(99),char(101),char(70),char(114),char(97),char(109),char(101),char(65),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97), -char(114),char(79),char(110),char(108),char(121),char(0),char(109),char(95),char(101),char(110),char(97),char(98),char(108),char(101),char(65),char(110),char(103),char(117),char(108),char(97), -char(114),char(77),char(111),char(116),char(111),char(114),char(0),char(109),char(95),char(109),char(111),char(116),char(111),char(114),char(84),char(97),char(114),char(103),char(101),char(116), -char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(109),char(97),char(120),char(77),char(111),char(116),char(111),char(114),char(73), -char(109),char(112),char(117),char(108),char(115),char(101),char(0),char(109),char(95),char(108),char(111),char(119),char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0), -char(109),char(95),char(117),char(112),char(112),char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(108),char(105),char(109),char(105),char(116), -char(83),char(111),char(102),char(116),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(98),char(105),char(97),char(115),char(70),char(97),char(99),char(116),char(111), -char(114),char(0),char(109),char(95),char(114),char(101),char(108),char(97),char(120),char(97),char(116),char(105),char(111),char(110),char(70),char(97),char(99),char(116),char(111),char(114), -char(0),char(109),char(95),char(115),char(119),char(105),char(110),char(103),char(83),char(112),char(97),char(110),char(49),char(0),char(109),char(95),char(115),char(119),char(105),char(110), -char(103),char(83),char(112),char(97),char(110),char(50),char(0),char(109),char(95),char(116),char(119),char(105),char(115),char(116),char(83),char(112),char(97),char(110),char(0),char(109), -char(95),char(100),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(85),char(112),char(112), -char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(76),char(111),char(119),char(101), -char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(85),char(112),char(112),char(101), -char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(76),char(111),char(119),char(101), -char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(117),char(115),char(101),char(76),char(105),char(110),char(101),char(97),char(114),char(82),char(101), -char(102),char(101),char(114),char(101),char(110),char(99),char(101),char(70),char(114),char(97),char(109),char(101),char(65),char(0),char(109),char(95),char(117),char(115),char(101),char(79), -char(102),char(102),char(115),char(101),char(116),char(70),char(111),char(114),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(70),char(114), -char(97),char(109),char(101),char(0),char(109),char(95),char(54),char(100),char(111),char(102),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(115),char(112),char(114), -char(105),char(110),char(103),char(69),char(110),char(97),char(98),char(108),char(101),char(100),char(91),char(54),char(93),char(0),char(109),char(95),char(101),char(113),char(117),char(105), -char(108),char(105),char(98),char(114),char(105),char(117),char(109),char(80),char(111),char(105),char(110),char(116),char(91),char(54),char(93),char(0),char(109),char(95),char(115),char(112), -char(114),char(105),char(110),char(103),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(91),char(54),char(93),char(0),char(109),char(95),char(115), -char(112),char(114),char(105),char(110),char(103),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(91),char(54),char(93),char(0),char(109),char(95),char(116),char(97), -char(117),char(0),char(109),char(95),char(116),char(105),char(109),char(101),char(83),char(116),char(101),char(112),char(0),char(109),char(95),char(109),char(97),char(120),char(69),char(114), -char(114),char(111),char(114),char(82),char(101),char(100),char(117),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(115),char(111),char(114),char(0),char(109), -char(95),char(101),char(114),char(112),char(0),char(109),char(95),char(101),char(114),char(112),char(50),char(0),char(109),char(95),char(103),char(108),char(111),char(98),char(97),char(108), -char(67),char(102),char(109),char(0),char(109),char(95),char(115),char(112),char(108),char(105),char(116),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(80),char(101), -char(110),char(101),char(116),char(114),char(97),char(116),char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109), -char(95),char(115),char(112),char(108),char(105),char(116),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(84),char(117),char(114),char(110),char(69),char(114),char(112), -char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(108),char(111),char(112),char(0),char(109),char(95),char(119),char(97),char(114),char(109), -char(115),char(116),char(97),char(114),char(116),char(105),char(110),char(103),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(109),char(97),char(120), -char(71),char(121),char(114),char(111),char(115),char(99),char(111),char(112),char(105),char(99),char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(115),char(105), -char(110),char(103),char(108),char(101),char(65),char(120),char(105),char(115),char(82),char(111),char(108),char(108),char(105),char(110),char(103),char(70),char(114),char(105),char(99),char(116), -char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(110),char(117),char(109),char(73),char(116), -char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(115),char(111),char(108),char(118),char(101),char(114),char(77),char(111),char(100), -char(101),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(105),char(110),char(103),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(82),char(101), -char(115),char(116),char(105),char(116),char(117),char(116),char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109), -char(95),char(109),char(105),char(110),char(105),char(109),char(117),char(109),char(83),char(111),char(108),char(118),char(101),char(114),char(66),char(97),char(116),char(99),char(104),char(83), -char(105),char(122),char(101),char(0),char(109),char(95),char(115),char(112),char(108),char(105),char(116),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(0),char(109), -char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(97), -char(110),char(103),char(117),char(108),char(97),char(114),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(118),char(111), -char(108),char(117),char(109),char(101),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(0),char(42),char(109),char(95),char(109),char(97),char(116), -char(101),char(114),char(105),char(97),char(108),char(0),char(109),char(95),char(112),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(112), -char(114),char(101),char(118),char(105),char(111),char(117),char(115),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(118),char(101), -char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(99),char(99),char(117),char(109),char(117),char(108),char(97),char(116),char(101),char(100), -char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(110),char(111),char(114),char(109),char(97),char(108),char(0),char(109),char(95),char(97),char(114),char(101), -char(97),char(0),char(109),char(95),char(97),char(116),char(116),char(97),char(99),char(104),char(0),char(109),char(95),char(110),char(111),char(100),char(101),char(73),char(110),char(100), -char(105),char(99),char(101),char(115),char(91),char(50),char(93),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(76),char(101),char(110),char(103),char(116),char(104), -char(0),char(109),char(95),char(98),char(98),char(101),char(110),char(100),char(105),char(110),char(103),char(0),char(109),char(95),char(110),char(111),char(100),char(101),char(73),char(110), -char(100),char(105),char(99),char(101),char(115),char(91),char(51),char(93),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(65),char(114),char(101),char(97),char(0), -char(109),char(95),char(99),char(48),char(91),char(52),char(93),char(0),char(109),char(95),char(110),char(111),char(100),char(101),char(73),char(110),char(100),char(105),char(99),char(101), -char(115),char(91),char(52),char(93),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(86),char(111),char(108),char(117),char(109),char(101),char(0),char(109),char(95), -char(99),char(49),char(0),char(109),char(95),char(99),char(50),char(0),char(109),char(95),char(99),char(48),char(0),char(109),char(95),char(108),char(111),char(99),char(97),char(108), -char(70),char(114),char(97),char(109),char(101),char(0),char(42),char(109),char(95),char(114),char(105),char(103),char(105),char(100),char(66),char(111),char(100),char(121),char(0),char(109), -char(95),char(110),char(111),char(100),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(97),char(101),char(114),char(111),char(77),char(111),char(100), -char(101),char(108),char(0),char(109),char(95),char(98),char(97),char(117),char(109),char(103),char(97),char(114),char(116),char(101),char(0),char(109),char(95),char(100),char(114),char(97), -char(103),char(0),char(109),char(95),char(108),char(105),char(102),char(116),char(0),char(109),char(95),char(112),char(114),char(101),char(115),char(115),char(117),char(114),char(101),char(0), -char(109),char(95),char(118),char(111),char(108),char(117),char(109),char(101),char(0),char(109),char(95),char(100),char(121),char(110),char(97),char(109),char(105),char(99),char(70),char(114), -char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(112),char(111),char(115),char(101),char(77),char(97),char(116),char(99),char(104),char(0),char(109), -char(95),char(114),char(105),char(103),char(105),char(100),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(72),char(97),char(114),char(100),char(110),char(101),char(115), -char(115),char(0),char(109),char(95),char(107),char(105),char(110),char(101),char(116),char(105),char(99),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(72),char(97), -char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(67),char(111),char(110),char(116),char(97),char(99),char(116), -char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(97),char(110),char(99),char(104),char(111),char(114),char(72),char(97),char(114), -char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(82),char(105),char(103),char(105),char(100),char(67),char(108),char(117), -char(115),char(116),char(101),char(114),char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(75), -char(105),char(110),char(101),char(116),char(105),char(99),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(72),char(97),char(114),char(100),char(110),char(101),char(115), -char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(83),char(111),char(102),char(116),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(72), -char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(82),char(105),char(103),char(105),char(100),char(67), -char(108),char(117),char(115),char(116),char(101),char(114),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(83),char(112),char(108),char(105),char(116),char(0),char(109), -char(95),char(115),char(111),char(102),char(116),char(75),char(105),char(110),char(101),char(116),char(105),char(99),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(73), -char(109),char(112),char(117),char(108),char(115),char(101),char(83),char(112),char(108),char(105),char(116),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(83),char(111), -char(102),char(116),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(83),char(112),char(108),char(105), -char(116),char(0),char(109),char(95),char(109),char(97),char(120),char(86),char(111),char(108),char(117),char(109),char(101),char(0),char(109),char(95),char(116),char(105),char(109),char(101), -char(83),char(99),char(97),char(108),char(101),char(0),char(109),char(95),char(118),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(73),char(116),char(101),char(114), -char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(112),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(73),char(116),char(101), -char(114),char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(100),char(114),char(105),char(102),char(116),char(73),char(116),char(101),char(114),char(97), -char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(99),char(108),char(117),char(115),char(116),char(101),char(114),char(73),char(116),char(101),char(114),char(97), -char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(114),char(111),char(116),char(0),char(109),char(95),char(115),char(99),char(97),char(108),char(101),char(0), -char(109),char(95),char(97),char(113),char(113),char(0),char(109),char(95),char(99),char(111),char(109),char(0),char(42),char(109),char(95),char(112),char(111),char(115),char(105),char(116), -char(105),char(111),char(110),char(115),char(0),char(42),char(109),char(95),char(119),char(101),char(105),char(103),char(104),char(116),char(115),char(0),char(109),char(95),char(110),char(117), -char(109),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(87),char(101),char(105),char(103), -char(116),char(115),char(0),char(109),char(95),char(98),char(118),char(111),char(108),char(117),char(109),char(101),char(0),char(109),char(95),char(98),char(102),char(114),char(97),char(109), -char(101),char(0),char(109),char(95),char(102),char(114),char(97),char(109),char(101),char(120),char(102),char(111),char(114),char(109),char(0),char(109),char(95),char(108),char(111),char(99), -char(105),char(105),char(0),char(109),char(95),char(105),char(110),char(118),char(119),char(105),char(0),char(109),char(95),char(118),char(105),char(109),char(112),char(117),char(108),char(115), -char(101),char(115),char(91),char(50),char(93),char(0),char(109),char(95),char(100),char(105),char(109),char(112),char(117),char(108),char(115),char(101),char(115),char(91),char(50),char(93), -char(0),char(109),char(95),char(108),char(118),char(0),char(109),char(95),char(97),char(118),char(0),char(42),char(109),char(95),char(102),char(114),char(97),char(109),char(101),char(114), -char(101),char(102),char(115),char(0),char(42),char(109),char(95),char(110),char(111),char(100),char(101),char(73),char(110),char(100),char(105),char(99),char(101),char(115),char(0),char(42), -char(109),char(95),char(109),char(97),char(115),char(115),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(70),char(114),char(97),char(109),char(101),char(82), -char(101),char(102),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(78),char(111),char(100),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109), -char(77),char(97),char(115),char(115),char(101),char(115),char(0),char(109),char(95),char(105),char(100),char(109),char(97),char(115),char(115),char(0),char(109),char(95),char(105),char(109), -char(97),char(115),char(115),char(0),char(109),char(95),char(110),char(118),char(105),char(109),char(112),char(117),char(108),char(115),char(101),char(115),char(0),char(109),char(95),char(110), -char(100),char(105),char(109),char(112),char(117),char(108),char(115),char(101),char(115),char(0),char(109),char(95),char(110),char(100),char(97),char(109),char(112),char(105),char(110),char(103), -char(0),char(109),char(95),char(108),char(100),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(97),char(100),char(97),char(109),char(112),char(105), -char(110),char(103),char(0),char(109),char(95),char(109),char(97),char(116),char(99),char(104),char(105),char(110),char(103),char(0),char(109),char(95),char(109),char(97),char(120),char(83), -char(101),char(108),char(102),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(0), -char(109),char(95),char(115),char(101),char(108),char(102),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(73),char(109),char(112),char(117),char(108), -char(115),char(101),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(99),char(111),char(110),char(116),char(97),char(105),char(110),char(115),char(65), -char(110),char(99),char(104),char(111),char(114),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(100),char(101),char(0),char(109),char(95),char(99),char(108), -char(117),char(115),char(116),char(101),char(114),char(73),char(110),char(100),char(101),char(120),char(0),char(42),char(109),char(95),char(98),char(111),char(100),char(121),char(65),char(0), -char(42),char(109),char(95),char(98),char(111),char(100),char(121),char(66),char(0),char(109),char(95),char(114),char(101),char(102),char(115),char(91),char(50),char(93),char(0),char(109), -char(95),char(99),char(102),char(109),char(0),char(109),char(95),char(115),char(112),char(108),char(105),char(116),char(0),char(109),char(95),char(100),char(101),char(108),char(101),char(116), -char(101),char(0),char(109),char(95),char(114),char(101),char(108),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(91),char(50),char(93),char(0),char(109), -char(95),char(98),char(111),char(100),char(121),char(65),char(116),char(121),char(112),char(101),char(0),char(109),char(95),char(98),char(111),char(100),char(121),char(66),char(116),char(121), -char(112),char(101),char(0),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(84),char(121),char(112),char(101),char(0),char(42),char(109),char(95),char(112),char(111), -char(115),char(101),char(0),char(42),char(42),char(109),char(95),char(109),char(97),char(116),char(101),char(114),char(105),char(97),char(108),char(115),char(0),char(42),char(109),char(95), -char(110),char(111),char(100),char(101),char(115),char(0),char(42),char(109),char(95),char(108),char(105),char(110),char(107),char(115),char(0),char(42),char(109),char(95),char(102),char(97), -char(99),char(101),char(115),char(0),char(42),char(109),char(95),char(116),char(101),char(116),char(114),char(97),char(104),char(101),char(100),char(114),char(97),char(0),char(42),char(109), -char(95),char(97),char(110),char(99),char(104),char(111),char(114),char(115),char(0),char(42),char(109),char(95),char(99),char(108),char(117),char(115),char(116),char(101),char(114),char(115), -char(0),char(42),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(77),char(97),char(116),char(101), -char(114),char(105),char(97),char(108),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(76),char(105),char(110),char(107),char(115),char(0),char(109),char(95),char(110), -char(117),char(109),char(70),char(97),char(99),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(84),char(101),char(116),char(114),char(97),char(104),char(101), -char(100),char(114),char(97),char(0),char(109),char(95),char(110),char(117),char(109),char(65),char(110),char(99),char(104),char(111),char(114),char(115),char(0),char(109),char(95),char(110), -char(117),char(109),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(74),char(111),char(105),char(110), -char(116),char(115),char(0),char(109),char(95),char(99),char(111),char(110),char(102),char(105),char(103),char(0),char(84),char(89),char(80),char(69),char(76),char(0),char(0),char(0), -char(99),char(104),char(97),char(114),char(0),char(117),char(99),char(104),char(97),char(114),char(0),char(115),char(104),char(111),char(114),char(116),char(0),char(117),char(115),char(104), -char(111),char(114),char(116),char(0),char(105),char(110),char(116),char(0),char(108),char(111),char(110),char(103),char(0),char(117),char(108),char(111),char(110),char(103),char(0),char(102), -char(108),char(111),char(97),char(116),char(0),char(100),char(111),char(117),char(98),char(108),char(101),char(0),char(118),char(111),char(105),char(100),char(0),char(80),char(111),char(105), -char(110),char(116),char(101),char(114),char(65),char(114),char(114),char(97),char(121),char(0),char(98),char(116),char(80),char(104),char(121),char(115),char(105),char(99),char(115),char(83), -char(121),char(115),char(116),char(101),char(109),char(0),char(76),char(105),char(115),char(116),char(66),char(97),char(115),char(101),char(0),char(98),char(116),char(86),char(101),char(99), -char(116),char(111),char(114),char(51),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(86),char(101),char(99),char(116), -char(111),char(114),char(51),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(97),char(116),char(114), -char(105),char(120),char(51),char(120),char(51),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(97),char(116), -char(114),char(105),char(120),char(51),char(120),char(51),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84), -char(114),char(97),char(110),char(115),char(102),char(111),char(114),char(109),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116), -char(84),char(114),char(97),char(110),char(115),char(102),char(111),char(114),char(109),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0), -char(98),char(116),char(66),char(118),char(104),char(83),char(117),char(98),char(116),char(114),char(101),char(101),char(73),char(110),char(102),char(111),char(68),char(97),char(116),char(97), -char(0),char(98),char(116),char(79),char(112),char(116),char(105),char(109),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(78),char(111),char(100),char(101),char(70), -char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(79),char(112),char(116),char(105),char(109),char(105),char(122),char(101),char(100), -char(66),char(118),char(104),char(78),char(111),char(100),char(101),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116), -char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(78),char(111),char(100),char(101),char(68),char(97),char(116),char(97), -char(0),char(98),char(116),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(70),char(108),char(111),char(97),char(116), -char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(68), -char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111), -char(110),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(116),char(97),char(116),char(105),char(99),char(80), -char(108),char(97),char(110),char(101),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(118), -char(101),char(120),char(73),char(110),char(116),char(101),char(114),char(110),char(97),char(108),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0), -char(98),char(116),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(65),char(110),char(100),char(82),char(97),char(100),char(105),char(117),char(115),char(0), -char(98),char(116),char(77),char(117),char(108),char(116),char(105),char(83),char(112),char(104),char(101),char(114),char(101),char(83),char(104),char(97),char(112),char(101),char(68),char(97), -char(116),char(97),char(0),char(98),char(116),char(73),char(110),char(116),char(73),char(110),char(100),char(101),char(120),char(68),char(97),char(116),char(97),char(0),char(98),char(116), -char(83),char(104),char(111),char(114),char(116),char(73),char(110),char(116),char(73),char(110),char(100),char(101),char(120),char(68),char(97),char(116),char(97),char(0),char(98),char(116), -char(83),char(104),char(111),char(114),char(116),char(73),char(110),char(116),char(73),char(110),char(100),char(101),char(120),char(84),char(114),char(105),char(112),char(108),char(101),char(116), -char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(104),char(97),char(114),char(73),char(110),char(100),char(101),char(120),char(84),char(114),char(105),char(112), -char(108),char(101),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(101),char(115),char(104),char(80),char(97),char(114),char(116),char(68),char(97), -char(116),char(97),char(0),char(98),char(116),char(83),char(116),char(114),char(105),char(100),char(105),char(110),char(103),char(77),char(101),char(115),char(104),char(73),char(110),char(116), -char(101),char(114),char(102),char(97),char(99),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(114),char(105),char(97),char(110),char(103),char(108), -char(101),char(77),char(101),char(115),char(104),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(114),char(105), -char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(102),char(111),char(77),char(97),char(112),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83), -char(99),char(97),char(108),char(101),char(100),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(77),char(101),char(115),char(104),char(83),char(104),char(97), -char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(109),char(112),char(111),char(117),char(110),char(100),char(83),char(104),char(97), -char(112),char(101),char(67),char(104),char(105),char(108),char(100),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(109),char(112),char(111),char(117), -char(110),char(100),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(121),char(108),char(105),char(110),char(100), -char(101),char(114),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(97),char(112),char(115),char(117),char(108), -char(101),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(114),char(105),char(97),char(110),char(103),char(108), -char(101),char(73),char(110),char(102),char(111),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(73),char(109),char(112),char(97),char(99),char(116),char(77), -char(101),char(115),char(104),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(118),char(101), -char(120),char(72),char(117),char(108),char(108),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(108), -char(108),char(105),char(115),char(105),char(111),char(110),char(79),char(98),char(106),char(101),char(99),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97), -char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(79),char(98),char(106),char(101),char(99),char(116), -char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(68),char(121),char(110),char(97),char(109),char(105),char(99),char(115), -char(87),char(111),char(114),char(108),char(100),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111), -char(110),char(116),char(97),char(99),char(116),char(83),char(111),char(108),char(118),char(101),char(114),char(73),char(110),char(102),char(111),char(68),char(111),char(117),char(98),char(108), -char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(68),char(121),char(110),char(97),char(109),char(105),char(99),char(115),char(87),char(111),char(114),char(108), -char(100),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(116),char(97),char(99),char(116), -char(83),char(111),char(108),char(118),char(101),char(114),char(73),char(110),char(102),char(111),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0), -char(98),char(116),char(82),char(105),char(103),char(105),char(100),char(66),char(111),char(100),char(121),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97), -char(0),char(98),char(116),char(82),char(105),char(103),char(105),char(100),char(66),char(111),char(100),char(121),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97), -char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(73),char(110),char(102),char(111),char(49), -char(0),char(98),char(116),char(84),char(121),char(112),char(101),char(100),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(97), -char(116),char(97),char(0),char(98),char(116),char(82),char(105),char(103),char(105),char(100),char(66),char(111),char(100),char(121),char(68),char(97),char(116),char(97),char(0),char(98), -char(116),char(80),char(111),char(105),char(110),char(116),char(50),char(80),char(111),char(105),char(110),char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105), -char(110),char(116),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(80),char(111),char(105),char(110),char(116),char(50), -char(80),char(111),char(105),char(110),char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108), -char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(72),char(105),char(110),char(103),char(101),char(67),char(111),char(110),char(115),char(116),char(114),char(97), -char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(72),char(105),char(110),char(103), -char(101),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97), -char(0),char(98),char(116),char(67),char(111),char(110),char(101),char(84),char(119),char(105),char(115),char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105), -char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(101),char(110),char(101),char(114),char(105),char(99),char(54),char(68),char(111),char(102), -char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(101),char(110), -char(101),char(114),char(105),char(99),char(54),char(68),char(111),char(102),char(83),char(112),char(114),char(105),char(110),char(103),char(67),char(111),char(110),char(115),char(116),char(114), -char(97),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(108),char(105),char(100),char(101),char(114),char(67),char(111),char(110), -char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121), -char(77),char(97),char(116),char(101),char(114),char(105),char(97),char(108),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100), -char(121),char(78),char(111),char(100),char(101),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(76),char(105), -char(110),char(107),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(70),char(97),char(99),char(101),char(68), -char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(84),char(101),char(116),char(114),char(97),char(68),char(97),char(116), -char(97),char(0),char(83),char(111),char(102),char(116),char(82),char(105),char(103),char(105),char(100),char(65),char(110),char(99),char(104),char(111),char(114),char(68),char(97),char(116), -char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(67),char(111),char(110),char(102),char(105),char(103),char(68),char(97),char(116),char(97), -char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(80),char(111),char(115),char(101),char(68),char(97),char(116),char(97),char(0),char(83),char(111), -char(102),char(116),char(66),char(111),char(100),char(121),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(68),char(97),char(116),char(97),char(0),char(98),char(116), -char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(74),char(111),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116), -char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(0),char(0), -char(84),char(76),char(69),char(78),char(1),char(0),char(1),char(0),char(2),char(0),char(2),char(0),char(4),char(0),char(4),char(0),char(4),char(0),char(4),char(0), -char(8),char(0),char(0),char(0),char(12),char(0),char(36),char(0),char(8),char(0),char(16),char(0),char(32),char(0),char(48),char(0),char(96),char(0),char(64),char(0), -char(-128),char(0),char(20),char(0),char(48),char(0),char(80),char(0),char(16),char(0),char(84),char(0),char(-124),char(0),char(12),char(0),char(52),char(0),char(52),char(0), -char(20),char(0),char(64),char(0),char(4),char(0),char(4),char(0),char(8),char(0),char(4),char(0),char(32),char(0),char(28),char(0),char(60),char(0),char(56),char(0), -char(76),char(0),char(76),char(0),char(24),char(0),char(60),char(0),char(60),char(0),char(16),char(0),char(64),char(0),char(68),char(0),char(-48),char(1),char(0),char(1), -char(-72),char(0),char(-104),char(0),char(104),char(0),char(88),char(0),char(-24),char(1),char(-96),char(3),char(8),char(0),char(52),char(0),char(0),char(0),char(84),char(0), -char(116),char(0),char(92),char(1),char(-36),char(0),char(-44),char(0),char(-4),char(0),char(92),char(1),char(-52),char(0),char(16),char(0),char(100),char(0),char(20),char(0), -char(36),char(0),char(100),char(0),char(92),char(0),char(104),char(0),char(-64),char(0),char(92),char(1),char(104),char(0),char(-84),char(1),char(83),char(84),char(82),char(67), -char(65),char(0),char(0),char(0),char(10),char(0),char(3),char(0),char(4),char(0),char(0),char(0),char(4),char(0),char(1),char(0),char(9),char(0),char(2),char(0), -char(11),char(0),char(3),char(0),char(10),char(0),char(3),char(0),char(10),char(0),char(4),char(0),char(10),char(0),char(5),char(0),char(12),char(0),char(2),char(0), -char(9),char(0),char(6),char(0),char(9),char(0),char(7),char(0),char(13),char(0),char(1),char(0),char(7),char(0),char(8),char(0),char(14),char(0),char(1),char(0), -char(8),char(0),char(8),char(0),char(15),char(0),char(1),char(0),char(13),char(0),char(9),char(0),char(16),char(0),char(1),char(0),char(14),char(0),char(9),char(0), -char(17),char(0),char(2),char(0),char(15),char(0),char(10),char(0),char(13),char(0),char(11),char(0),char(18),char(0),char(2),char(0),char(16),char(0),char(10),char(0), -char(14),char(0),char(11),char(0),char(19),char(0),char(4),char(0),char(4),char(0),char(12),char(0),char(4),char(0),char(13),char(0),char(2),char(0),char(14),char(0), -char(2),char(0),char(15),char(0),char(20),char(0),char(6),char(0),char(13),char(0),char(16),char(0),char(13),char(0),char(17),char(0),char(4),char(0),char(18),char(0), -char(4),char(0),char(19),char(0),char(4),char(0),char(20),char(0),char(0),char(0),char(21),char(0),char(21),char(0),char(6),char(0),char(14),char(0),char(16),char(0), -char(14),char(0),char(17),char(0),char(4),char(0),char(18),char(0),char(4),char(0),char(19),char(0),char(4),char(0),char(20),char(0),char(0),char(0),char(21),char(0), -char(22),char(0),char(3),char(0),char(2),char(0),char(14),char(0),char(2),char(0),char(15),char(0),char(4),char(0),char(22),char(0),char(23),char(0),char(12),char(0), -char(13),char(0),char(23),char(0),char(13),char(0),char(24),char(0),char(13),char(0),char(25),char(0),char(4),char(0),char(26),char(0),char(4),char(0),char(27),char(0), -char(4),char(0),char(28),char(0),char(4),char(0),char(29),char(0),char(20),char(0),char(30),char(0),char(22),char(0),char(31),char(0),char(19),char(0),char(32),char(0), -char(4),char(0),char(33),char(0),char(4),char(0),char(34),char(0),char(24),char(0),char(12),char(0),char(14),char(0),char(23),char(0),char(14),char(0),char(24),char(0), -char(14),char(0),char(25),char(0),char(4),char(0),char(26),char(0),char(4),char(0),char(27),char(0),char(4),char(0),char(28),char(0),char(4),char(0),char(29),char(0), -char(21),char(0),char(30),char(0),char(22),char(0),char(31),char(0),char(4),char(0),char(33),char(0),char(4),char(0),char(34),char(0),char(19),char(0),char(32),char(0), -char(25),char(0),char(3),char(0),char(0),char(0),char(35),char(0),char(4),char(0),char(36),char(0),char(0),char(0),char(37),char(0),char(26),char(0),char(5),char(0), -char(25),char(0),char(38),char(0),char(13),char(0),char(39),char(0),char(13),char(0),char(40),char(0),char(7),char(0),char(41),char(0),char(0),char(0),char(21),char(0), -char(27),char(0),char(5),char(0),char(25),char(0),char(38),char(0),char(13),char(0),char(39),char(0),char(13),char(0),char(42),char(0),char(7),char(0),char(43),char(0), -char(4),char(0),char(44),char(0),char(28),char(0),char(2),char(0),char(13),char(0),char(45),char(0),char(7),char(0),char(46),char(0),char(29),char(0),char(4),char(0), -char(27),char(0),char(47),char(0),char(28),char(0),char(48),char(0),char(4),char(0),char(49),char(0),char(0),char(0),char(37),char(0),char(30),char(0),char(1),char(0), -char(4),char(0),char(50),char(0),char(31),char(0),char(2),char(0),char(2),char(0),char(50),char(0),char(0),char(0),char(51),char(0),char(32),char(0),char(2),char(0), -char(2),char(0),char(52),char(0),char(0),char(0),char(51),char(0),char(33),char(0),char(2),char(0),char(0),char(0),char(52),char(0),char(0),char(0),char(53),char(0), -char(34),char(0),char(8),char(0),char(13),char(0),char(54),char(0),char(14),char(0),char(55),char(0),char(30),char(0),char(56),char(0),char(32),char(0),char(57),char(0), -char(33),char(0),char(58),char(0),char(31),char(0),char(59),char(0),char(4),char(0),char(60),char(0),char(4),char(0),char(61),char(0),char(35),char(0),char(4),char(0), -char(34),char(0),char(62),char(0),char(13),char(0),char(63),char(0),char(4),char(0),char(64),char(0),char(0),char(0),char(37),char(0),char(36),char(0),char(7),char(0), -char(25),char(0),char(38),char(0),char(35),char(0),char(65),char(0),char(23),char(0),char(66),char(0),char(24),char(0),char(67),char(0),char(37),char(0),char(68),char(0), -char(7),char(0),char(43),char(0),char(0),char(0),char(69),char(0),char(38),char(0),char(2),char(0),char(36),char(0),char(70),char(0),char(13),char(0),char(39),char(0), -char(39),char(0),char(4),char(0),char(17),char(0),char(71),char(0),char(25),char(0),char(72),char(0),char(4),char(0),char(73),char(0),char(7),char(0),char(74),char(0), -char(40),char(0),char(4),char(0),char(25),char(0),char(38),char(0),char(39),char(0),char(75),char(0),char(4),char(0),char(76),char(0),char(7),char(0),char(43),char(0), -char(41),char(0),char(3),char(0),char(27),char(0),char(47),char(0),char(4),char(0),char(77),char(0),char(0),char(0),char(37),char(0),char(42),char(0),char(3),char(0), -char(27),char(0),char(47),char(0),char(4),char(0),char(77),char(0),char(0),char(0),char(37),char(0),char(43),char(0),char(4),char(0),char(4),char(0),char(78),char(0), -char(7),char(0),char(79),char(0),char(7),char(0),char(80),char(0),char(7),char(0),char(81),char(0),char(37),char(0),char(14),char(0),char(4),char(0),char(82),char(0), -char(4),char(0),char(83),char(0),char(43),char(0),char(84),char(0),char(4),char(0),char(85),char(0),char(7),char(0),char(86),char(0),char(7),char(0),char(87),char(0), -char(7),char(0),char(88),char(0),char(7),char(0),char(89),char(0),char(7),char(0),char(90),char(0),char(4),char(0),char(91),char(0),char(4),char(0),char(92),char(0), -char(4),char(0),char(93),char(0),char(4),char(0),char(94),char(0),char(0),char(0),char(37),char(0),char(44),char(0),char(5),char(0),char(25),char(0),char(38),char(0), -char(35),char(0),char(65),char(0),char(13),char(0),char(39),char(0),char(7),char(0),char(43),char(0),char(4),char(0),char(95),char(0),char(45),char(0),char(5),char(0), -char(27),char(0),char(47),char(0),char(13),char(0),char(96),char(0),char(14),char(0),char(97),char(0),char(4),char(0),char(98),char(0),char(0),char(0),char(99),char(0), -char(46),char(0),char(25),char(0),char(9),char(0),char(100),char(0),char(9),char(0),char(101),char(0),char(25),char(0),char(102),char(0),char(0),char(0),char(35),char(0), -char(18),char(0),char(103),char(0),char(18),char(0),char(104),char(0),char(14),char(0),char(105),char(0),char(14),char(0),char(106),char(0),char(14),char(0),char(107),char(0), -char(8),char(0),char(108),char(0),char(8),char(0),char(109),char(0),char(8),char(0),char(110),char(0),char(8),char(0),char(111),char(0),char(8),char(0),char(112),char(0), -char(8),char(0),char(113),char(0),char(8),char(0),char(114),char(0),char(8),char(0),char(115),char(0),char(4),char(0),char(116),char(0),char(4),char(0),char(117),char(0), -char(4),char(0),char(118),char(0),char(4),char(0),char(119),char(0),char(4),char(0),char(120),char(0),char(4),char(0),char(121),char(0),char(4),char(0),char(122),char(0), -char(0),char(0),char(37),char(0),char(47),char(0),char(25),char(0),char(9),char(0),char(100),char(0),char(9),char(0),char(101),char(0),char(25),char(0),char(102),char(0), -char(0),char(0),char(35),char(0),char(17),char(0),char(103),char(0),char(17),char(0),char(104),char(0),char(13),char(0),char(105),char(0),char(13),char(0),char(106),char(0), -char(13),char(0),char(107),char(0),char(7),char(0),char(108),char(0),char(7),char(0),char(109),char(0),char(7),char(0),char(110),char(0),char(7),char(0),char(111),char(0), -char(7),char(0),char(112),char(0),char(7),char(0),char(113),char(0),char(7),char(0),char(114),char(0),char(7),char(0),char(115),char(0),char(4),char(0),char(116),char(0), -char(4),char(0),char(117),char(0),char(4),char(0),char(118),char(0),char(4),char(0),char(119),char(0),char(4),char(0),char(120),char(0),char(4),char(0),char(121),char(0), -char(4),char(0),char(122),char(0),char(0),char(0),char(37),char(0),char(48),char(0),char(2),char(0),char(49),char(0),char(123),char(0),char(14),char(0),char(124),char(0), -char(50),char(0),char(2),char(0),char(51),char(0),char(123),char(0),char(13),char(0),char(124),char(0),char(52),char(0),char(21),char(0),char(47),char(0),char(125),char(0), -char(15),char(0),char(126),char(0),char(13),char(0),char(127),char(0),char(13),char(0),char(-128),char(0),char(13),char(0),char(-127),char(0),char(13),char(0),char(-126),char(0), -char(13),char(0),char(124),char(0),char(13),char(0),char(-125),char(0),char(13),char(0),char(-124),char(0),char(13),char(0),char(-123),char(0),char(13),char(0),char(-122),char(0), -char(7),char(0),char(-121),char(0),char(7),char(0),char(-120),char(0),char(7),char(0),char(-119),char(0),char(7),char(0),char(-118),char(0),char(7),char(0),char(-117),char(0), -char(7),char(0),char(-116),char(0),char(7),char(0),char(-115),char(0),char(7),char(0),char(-114),char(0),char(7),char(0),char(-113),char(0),char(4),char(0),char(-112),char(0), -char(53),char(0),char(22),char(0),char(46),char(0),char(125),char(0),char(16),char(0),char(126),char(0),char(14),char(0),char(127),char(0),char(14),char(0),char(-128),char(0), -char(14),char(0),char(-127),char(0),char(14),char(0),char(-126),char(0),char(14),char(0),char(124),char(0),char(14),char(0),char(-125),char(0),char(14),char(0),char(-124),char(0), -char(14),char(0),char(-123),char(0),char(14),char(0),char(-122),char(0),char(8),char(0),char(-121),char(0),char(8),char(0),char(-120),char(0),char(8),char(0),char(-119),char(0), -char(8),char(0),char(-118),char(0),char(8),char(0),char(-117),char(0),char(8),char(0),char(-116),char(0),char(8),char(0),char(-115),char(0),char(8),char(0),char(-114),char(0), -char(8),char(0),char(-113),char(0),char(4),char(0),char(-112),char(0),char(0),char(0),char(37),char(0),char(54),char(0),char(2),char(0),char(4),char(0),char(-111),char(0), -char(4),char(0),char(-110),char(0),char(55),char(0),char(13),char(0),char(56),char(0),char(-109),char(0),char(56),char(0),char(-108),char(0),char(0),char(0),char(35),char(0), -char(4),char(0),char(-107),char(0),char(4),char(0),char(-106),char(0),char(4),char(0),char(-105),char(0),char(4),char(0),char(-104),char(0),char(7),char(0),char(-103),char(0), -char(7),char(0),char(-102),char(0),char(4),char(0),char(-101),char(0),char(4),char(0),char(-100),char(0),char(7),char(0),char(-99),char(0),char(4),char(0),char(-98),char(0), -char(57),char(0),char(3),char(0),char(55),char(0),char(-97),char(0),char(13),char(0),char(-96),char(0),char(13),char(0),char(-95),char(0),char(58),char(0),char(3),char(0), -char(55),char(0),char(-97),char(0),char(14),char(0),char(-96),char(0),char(14),char(0),char(-95),char(0),char(59),char(0),char(13),char(0),char(55),char(0),char(-97),char(0), -char(18),char(0),char(-94),char(0),char(18),char(0),char(-93),char(0),char(4),char(0),char(-92),char(0),char(4),char(0),char(-91),char(0),char(4),char(0),char(-90),char(0), -char(7),char(0),char(-89),char(0),char(7),char(0),char(-88),char(0),char(7),char(0),char(-87),char(0),char(7),char(0),char(-86),char(0),char(7),char(0),char(-85),char(0), -char(7),char(0),char(-84),char(0),char(7),char(0),char(-83),char(0),char(60),char(0),char(13),char(0),char(55),char(0),char(-97),char(0),char(17),char(0),char(-94),char(0), -char(17),char(0),char(-93),char(0),char(4),char(0),char(-92),char(0),char(4),char(0),char(-91),char(0),char(4),char(0),char(-90),char(0),char(7),char(0),char(-89),char(0), -char(7),char(0),char(-88),char(0),char(7),char(0),char(-87),char(0),char(7),char(0),char(-86),char(0),char(7),char(0),char(-85),char(0),char(7),char(0),char(-84),char(0), -char(7),char(0),char(-83),char(0),char(61),char(0),char(11),char(0),char(55),char(0),char(-97),char(0),char(17),char(0),char(-94),char(0),char(17),char(0),char(-93),char(0), -char(7),char(0),char(-82),char(0),char(7),char(0),char(-81),char(0),char(7),char(0),char(-80),char(0),char(7),char(0),char(-85),char(0),char(7),char(0),char(-84),char(0), -char(7),char(0),char(-83),char(0),char(7),char(0),char(-79),char(0),char(0),char(0),char(21),char(0),char(62),char(0),char(9),char(0),char(55),char(0),char(-97),char(0), -char(17),char(0),char(-94),char(0),char(17),char(0),char(-93),char(0),char(13),char(0),char(-78),char(0),char(13),char(0),char(-77),char(0),char(13),char(0),char(-76),char(0), -char(13),char(0),char(-75),char(0),char(4),char(0),char(-74),char(0),char(4),char(0),char(-73),char(0),char(63),char(0),char(5),char(0),char(62),char(0),char(-72),char(0), -char(4),char(0),char(-71),char(0),char(7),char(0),char(-70),char(0),char(7),char(0),char(-69),char(0),char(7),char(0),char(-68),char(0),char(64),char(0),char(9),char(0), -char(55),char(0),char(-97),char(0),char(17),char(0),char(-94),char(0),char(17),char(0),char(-93),char(0),char(7),char(0),char(-78),char(0),char(7),char(0),char(-77),char(0), -char(7),char(0),char(-76),char(0),char(7),char(0),char(-75),char(0),char(4),char(0),char(-74),char(0),char(4),char(0),char(-73),char(0),char(49),char(0),char(22),char(0), -char(8),char(0),char(-67),char(0),char(8),char(0),char(-79),char(0),char(8),char(0),char(110),char(0),char(8),char(0),char(-66),char(0),char(8),char(0),char(112),char(0), -char(8),char(0),char(-65),char(0),char(8),char(0),char(-64),char(0),char(8),char(0),char(-63),char(0),char(8),char(0),char(-62),char(0),char(8),char(0),char(-61),char(0), -char(8),char(0),char(-60),char(0),char(8),char(0),char(-59),char(0),char(8),char(0),char(-58),char(0),char(8),char(0),char(-57),char(0),char(8),char(0),char(-56),char(0), -char(8),char(0),char(-55),char(0),char(4),char(0),char(-54),char(0),char(4),char(0),char(-53),char(0),char(4),char(0),char(-52),char(0),char(4),char(0),char(-51),char(0), -char(4),char(0),char(-50),char(0),char(0),char(0),char(37),char(0),char(51),char(0),char(22),char(0),char(7),char(0),char(-67),char(0),char(7),char(0),char(-79),char(0), -char(7),char(0),char(110),char(0),char(7),char(0),char(-66),char(0),char(7),char(0),char(112),char(0),char(7),char(0),char(-65),char(0),char(7),char(0),char(-64),char(0), -char(7),char(0),char(-63),char(0),char(7),char(0),char(-62),char(0),char(7),char(0),char(-61),char(0),char(7),char(0),char(-60),char(0),char(7),char(0),char(-59),char(0), -char(7),char(0),char(-58),char(0),char(7),char(0),char(-57),char(0),char(7),char(0),char(-56),char(0),char(7),char(0),char(-55),char(0),char(4),char(0),char(-54),char(0), -char(4),char(0),char(-53),char(0),char(4),char(0),char(-52),char(0),char(4),char(0),char(-51),char(0),char(4),char(0),char(-50),char(0),char(0),char(0),char(37),char(0), -char(65),char(0),char(4),char(0),char(7),char(0),char(-49),char(0),char(7),char(0),char(-48),char(0),char(7),char(0),char(-47),char(0),char(4),char(0),char(78),char(0), -char(66),char(0),char(10),char(0),char(65),char(0),char(-46),char(0),char(13),char(0),char(-45),char(0),char(13),char(0),char(-44),char(0),char(13),char(0),char(-43),char(0), -char(13),char(0),char(-42),char(0),char(13),char(0),char(-41),char(0),char(7),char(0),char(-121),char(0),char(7),char(0),char(-40),char(0),char(4),char(0),char(-39),char(0), -char(4),char(0),char(53),char(0),char(67),char(0),char(4),char(0),char(65),char(0),char(-46),char(0),char(4),char(0),char(-38),char(0),char(7),char(0),char(-37),char(0), -char(4),char(0),char(-36),char(0),char(68),char(0),char(4),char(0),char(13),char(0),char(-41),char(0),char(65),char(0),char(-46),char(0),char(4),char(0),char(-35),char(0), -char(7),char(0),char(-34),char(0),char(69),char(0),char(7),char(0),char(13),char(0),char(-33),char(0),char(65),char(0),char(-46),char(0),char(4),char(0),char(-32),char(0), -char(7),char(0),char(-31),char(0),char(7),char(0),char(-30),char(0),char(7),char(0),char(-29),char(0),char(4),char(0),char(53),char(0),char(70),char(0),char(6),char(0), -char(15),char(0),char(-28),char(0),char(13),char(0),char(-30),char(0),char(13),char(0),char(-27),char(0),char(56),char(0),char(-26),char(0),char(4),char(0),char(-25),char(0), -char(7),char(0),char(-29),char(0),char(71),char(0),char(26),char(0),char(4),char(0),char(-24),char(0),char(7),char(0),char(-23),char(0),char(7),char(0),char(-79),char(0), -char(7),char(0),char(-22),char(0),char(7),char(0),char(-21),char(0),char(7),char(0),char(-20),char(0),char(7),char(0),char(-19),char(0),char(7),char(0),char(-18),char(0), -char(7),char(0),char(-17),char(0),char(7),char(0),char(-16),char(0),char(7),char(0),char(-15),char(0),char(7),char(0),char(-14),char(0),char(7),char(0),char(-13),char(0), -char(7),char(0),char(-12),char(0),char(7),char(0),char(-11),char(0),char(7),char(0),char(-10),char(0),char(7),char(0),char(-9),char(0),char(7),char(0),char(-8),char(0), -char(7),char(0),char(-7),char(0),char(7),char(0),char(-6),char(0),char(7),char(0),char(-5),char(0),char(4),char(0),char(-4),char(0),char(4),char(0),char(-3),char(0), -char(4),char(0),char(-2),char(0),char(4),char(0),char(-1),char(0),char(4),char(0),char(117),char(0),char(72),char(0),char(12),char(0),char(15),char(0),char(0),char(1), -char(15),char(0),char(1),char(1),char(15),char(0),char(2),char(1),char(13),char(0),char(3),char(1),char(13),char(0),char(4),char(1),char(7),char(0),char(5),char(1), -char(4),char(0),char(6),char(1),char(4),char(0),char(7),char(1),char(4),char(0),char(8),char(1),char(4),char(0),char(9),char(1),char(7),char(0),char(-31),char(0), -char(4),char(0),char(53),char(0),char(73),char(0),char(27),char(0),char(17),char(0),char(10),char(1),char(15),char(0),char(11),char(1),char(15),char(0),char(12),char(1), -char(13),char(0),char(3),char(1),char(13),char(0),char(13),char(1),char(13),char(0),char(14),char(1),char(13),char(0),char(15),char(1),char(13),char(0),char(16),char(1), -char(13),char(0),char(17),char(1),char(4),char(0),char(18),char(1),char(7),char(0),char(19),char(1),char(4),char(0),char(20),char(1),char(4),char(0),char(21),char(1), -char(4),char(0),char(22),char(1),char(7),char(0),char(23),char(1),char(7),char(0),char(24),char(1),char(4),char(0),char(25),char(1),char(4),char(0),char(26),char(1), -char(7),char(0),char(27),char(1),char(7),char(0),char(28),char(1),char(7),char(0),char(29),char(1),char(7),char(0),char(30),char(1),char(7),char(0),char(31),char(1), -char(7),char(0),char(32),char(1),char(4),char(0),char(33),char(1),char(4),char(0),char(34),char(1),char(4),char(0),char(35),char(1),char(74),char(0),char(12),char(0), -char(9),char(0),char(36),char(1),char(9),char(0),char(37),char(1),char(13),char(0),char(38),char(1),char(7),char(0),char(39),char(1),char(7),char(0),char(-63),char(0), -char(7),char(0),char(40),char(1),char(4),char(0),char(41),char(1),char(13),char(0),char(42),char(1),char(4),char(0),char(43),char(1),char(4),char(0),char(44),char(1), -char(4),char(0),char(45),char(1),char(4),char(0),char(53),char(0),char(75),char(0),char(19),char(0),char(47),char(0),char(125),char(0),char(72),char(0),char(46),char(1), -char(65),char(0),char(47),char(1),char(66),char(0),char(48),char(1),char(67),char(0),char(49),char(1),char(68),char(0),char(50),char(1),char(69),char(0),char(51),char(1), -char(70),char(0),char(52),char(1),char(73),char(0),char(53),char(1),char(74),char(0),char(54),char(1),char(4),char(0),char(55),char(1),char(4),char(0),char(21),char(1), -char(4),char(0),char(56),char(1),char(4),char(0),char(57),char(1),char(4),char(0),char(58),char(1),char(4),char(0),char(59),char(1),char(4),char(0),char(60),char(1), -char(4),char(0),char(61),char(1),char(71),char(0),char(62),char(1),}; -int b3s_bulletDNAlen= sizeof(b3s_bulletDNAstr); -char b3s_bulletDNAstr64[]= { -char(83),char(68),char(78),char(65),char(78),char(65),char(77),char(69),char(63),char(1),char(0),char(0),char(109),char(95),char(115),char(105),char(122),char(101),char(0),char(109), -char(95),char(99),char(97),char(112),char(97),char(99),char(105),char(116),char(121),char(0),char(42),char(109),char(95),char(100),char(97),char(116),char(97),char(0),char(109),char(95), -char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(83),char(104),char(97),char(112),char(101),char(115),char(0),char(109),char(95),char(99),char(111), -char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(79),char(98),char(106),char(101),char(99),char(116),char(115),char(0),char(109),char(95),char(99),char(111),char(110), -char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(115),char(0),char(42),char(102),char(105),char(114),char(115),char(116),char(0),char(42),char(108),char(97),char(115), -char(116),char(0),char(109),char(95),char(102),char(108),char(111),char(97),char(116),char(115),char(91),char(52),char(93),char(0),char(109),char(95),char(101),char(108),char(91),char(51), -char(93),char(0),char(109),char(95),char(98),char(97),char(115),char(105),char(115),char(0),char(109),char(95),char(111),char(114),char(105),char(103),char(105),char(110),char(0),char(109), -char(95),char(114),char(111),char(111),char(116),char(78),char(111),char(100),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(115),char(117),char(98), -char(116),char(114),char(101),char(101),char(83),char(105),char(122),char(101),char(0),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100), -char(65),char(97),char(98),char(98),char(77),char(105),char(110),char(91),char(51),char(93),char(0),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122), -char(101),char(100),char(65),char(97),char(98),char(98),char(77),char(97),char(120),char(91),char(51),char(93),char(0),char(109),char(95),char(97),char(97),char(98),char(98),char(77), -char(105),char(110),char(79),char(114),char(103),char(0),char(109),char(95),char(97),char(97),char(98),char(98),char(77),char(97),char(120),char(79),char(114),char(103),char(0),char(109), -char(95),char(101),char(115),char(99),char(97),char(112),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(115),char(117),char(98),char(80),char(97), -char(114),char(116),char(0),char(109),char(95),char(116),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109), -char(95),char(112),char(97),char(100),char(91),char(52),char(93),char(0),char(109),char(95),char(101),char(115),char(99),char(97),char(112),char(101),char(73),char(110),char(100),char(101), -char(120),char(79),char(114),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(98), -char(118),char(104),char(65),char(97),char(98),char(98),char(77),char(105),char(110),char(0),char(109),char(95),char(98),char(118),char(104),char(65),char(97),char(98),char(98),char(77), -char(97),char(120),char(0),char(109),char(95),char(98),char(118),char(104),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(97),char(116),char(105),char(111),char(110), -char(0),char(109),char(95),char(99),char(117),char(114),char(78),char(111),char(100),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(117),char(115), -char(101),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(97),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(110),char(117),char(109),char(67), -char(111),char(110),char(116),char(105),char(103),char(117),char(111),char(117),char(115),char(76),char(101),char(97),char(102),char(78),char(111),char(100),char(101),char(115),char(0),char(109), -char(95),char(110),char(117),char(109),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(67),char(111),char(110),char(116),char(105),char(103),char(117), -char(111),char(117),char(115),char(78),char(111),char(100),char(101),char(115),char(0),char(42),char(109),char(95),char(99),char(111),char(110),char(116),char(105),char(103),char(117),char(111), -char(117),char(115),char(78),char(111),char(100),char(101),char(115),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105), -char(122),char(101),char(100),char(67),char(111),char(110),char(116),char(105),char(103),char(117),char(111),char(117),char(115),char(78),char(111),char(100),char(101),char(115),char(80),char(116), -char(114),char(0),char(42),char(109),char(95),char(115),char(117),char(98),char(84),char(114),char(101),char(101),char(73),char(110),char(102),char(111),char(80),char(116),char(114),char(0), -char(109),char(95),char(116),char(114),char(97),char(118),char(101),char(114),char(115),char(97),char(108),char(77),char(111),char(100),char(101),char(0),char(109),char(95),char(110),char(117), -char(109),char(83),char(117),char(98),char(116),char(114),char(101),char(101),char(72),char(101),char(97),char(100),char(101),char(114),char(115),char(0),char(42),char(109),char(95),char(110), -char(97),char(109),char(101),char(0),char(109),char(95),char(115),char(104),char(97),char(112),char(101),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(112),char(97), -char(100),char(100),char(105),char(110),char(103),char(91),char(52),char(93),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110), -char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(108),char(111),char(99),char(97),char(108),char(83),char(99),char(97), -char(108),char(105),char(110),char(103),char(0),char(109),char(95),char(112),char(108),char(97),char(110),char(101),char(78),char(111),char(114),char(109),char(97),char(108),char(0),char(109), -char(95),char(112),char(108),char(97),char(110),char(101),char(67),char(111),char(110),char(115),char(116),char(97),char(110),char(116),char(0),char(109),char(95),char(105),char(109),char(112), -char(108),char(105),char(99),char(105),char(116),char(83),char(104),char(97),char(112),char(101),char(68),char(105),char(109),char(101),char(110),char(115),char(105),char(111),char(110),char(115), -char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(77),char(97),char(114),char(103),char(105),char(110),char(0),char(109), -char(95),char(112),char(97),char(100),char(100),char(105),char(110),char(103),char(0),char(109),char(95),char(112),char(111),char(115),char(0),char(109),char(95),char(114),char(97),char(100), -char(105),char(117),char(115),char(0),char(109),char(95),char(99),char(111),char(110),char(118),char(101),char(120),char(73),char(110),char(116),char(101),char(114),char(110),char(97),char(108), -char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(42),char(109),char(95),char(108),char(111),char(99),char(97),char(108),char(80),char(111), -char(115),char(105),char(116),char(105),char(111),char(110),char(65),char(114),char(114),char(97),char(121),char(80),char(116),char(114),char(0),char(109),char(95),char(108),char(111),char(99), -char(97),char(108),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(65),char(114),char(114),char(97),char(121),char(83),char(105),char(122),char(101),char(0), -char(109),char(95),char(118),char(97),char(108),char(117),char(101),char(0),char(109),char(95),char(112),char(97),char(100),char(91),char(50),char(93),char(0),char(109),char(95),char(118), -char(97),char(108),char(117),char(101),char(115),char(91),char(51),char(93),char(0),char(109),char(95),char(112),char(97),char(100),char(0),char(42),char(109),char(95),char(118),char(101), -char(114),char(116),char(105),char(99),char(101),char(115),char(51),char(102),char(0),char(42),char(109),char(95),char(118),char(101),char(114),char(116),char(105),char(99),char(101),char(115), -char(51),char(100),char(0),char(42),char(109),char(95),char(105),char(110),char(100),char(105),char(99),char(101),char(115),char(51),char(50),char(0),char(42),char(109),char(95),char(51), -char(105),char(110),char(100),char(105),char(99),char(101),char(115),char(49),char(54),char(0),char(42),char(109),char(95),char(51),char(105),char(110),char(100),char(105),char(99),char(101), -char(115),char(56),char(0),char(42),char(109),char(95),char(105),char(110),char(100),char(105),char(99),char(101),char(115),char(49),char(54),char(0),char(109),char(95),char(110),char(117), -char(109),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(86),char(101),char(114),char(116), -char(105),char(99),char(101),char(115),char(0),char(42),char(109),char(95),char(109),char(101),char(115),char(104),char(80),char(97),char(114),char(116),char(115),char(80),char(116),char(114), -char(0),char(109),char(95),char(115),char(99),char(97),char(108),char(105),char(110),char(103),char(0),char(109),char(95),char(110),char(117),char(109),char(77),char(101),char(115),char(104), -char(80),char(97),char(114),char(116),char(115),char(0),char(109),char(95),char(109),char(101),char(115),char(104),char(73),char(110),char(116),char(101),char(114),char(102),char(97),char(99), -char(101),char(0),char(42),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(70),char(108),char(111),char(97),char(116),char(66), -char(118),char(104),char(0),char(42),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(68),char(111),char(117),char(98),char(108), -char(101),char(66),char(118),char(104),char(0),char(42),char(109),char(95),char(116),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(102),char(111), -char(77),char(97),char(112),char(0),char(109),char(95),char(112),char(97),char(100),char(51),char(91),char(52),char(93),char(0),char(109),char(95),char(116),char(114),char(105),char(109), -char(101),char(115),char(104),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(116),char(114),char(97),char(110),char(115), -char(102),char(111),char(114),char(109),char(0),char(42),char(109),char(95),char(99),char(104),char(105),char(108),char(100),char(83),char(104),char(97),char(112),char(101),char(0),char(109), -char(95),char(99),char(104),char(105),char(108),char(100),char(83),char(104),char(97),char(112),char(101),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(99),char(104), -char(105),char(108),char(100),char(77),char(97),char(114),char(103),char(105),char(110),char(0),char(42),char(109),char(95),char(99),char(104),char(105),char(108),char(100),char(83),char(104), -char(97),char(112),char(101),char(80),char(116),char(114),char(0),char(109),char(95),char(110),char(117),char(109),char(67),char(104),char(105),char(108),char(100),char(83),char(104),char(97), -char(112),char(101),char(115),char(0),char(109),char(95),char(117),char(112),char(65),char(120),char(105),char(115),char(0),char(109),char(95),char(102),char(108),char(97),char(103),char(115), -char(0),char(109),char(95),char(101),char(100),char(103),char(101),char(86),char(48),char(86),char(49),char(65),char(110),char(103),char(108),char(101),char(0),char(109),char(95),char(101), -char(100),char(103),char(101),char(86),char(49),char(86),char(50),char(65),char(110),char(103),char(108),char(101),char(0),char(109),char(95),char(101),char(100),char(103),char(101),char(86), -char(50),char(86),char(48),char(65),char(110),char(103),char(108),char(101),char(0),char(42),char(109),char(95),char(104),char(97),char(115),char(104),char(84),char(97),char(98),char(108), -char(101),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(110),char(101),char(120),char(116),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(118), -char(97),char(108),char(117),char(101),char(65),char(114),char(114),char(97),char(121),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(107),char(101),char(121),char(65), -char(114),char(114),char(97),char(121),char(80),char(116),char(114),char(0),char(109),char(95),char(99),char(111),char(110),char(118),char(101),char(120),char(69),char(112),char(115),char(105), -char(108),char(111),char(110),char(0),char(109),char(95),char(112),char(108),char(97),char(110),char(97),char(114),char(69),char(112),char(115),char(105),char(108),char(111),char(110),char(0), -char(109),char(95),char(101),char(113),char(117),char(97),char(108),char(86),char(101),char(114),char(116),char(101),char(120),char(84),char(104),char(114),char(101),char(115),char(104),char(111), -char(108),char(100),char(0),char(109),char(95),char(101),char(100),char(103),char(101),char(68),char(105),char(115),char(116),char(97),char(110),char(99),char(101),char(84),char(104),char(114), -char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(122),char(101),char(114),char(111),char(65),char(114),char(101),char(97),char(84),char(104),char(114), -char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(110),char(101),char(120),char(116),char(83),char(105),char(122),char(101),char(0),char(109),char(95), -char(104),char(97),char(115),char(104),char(84),char(97),char(98),char(108),char(101),char(83),char(105),char(122),char(101),char(0),char(109),char(95),char(110),char(117),char(109),char(86), -char(97),char(108),char(117),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(75),char(101),char(121),char(115),char(0),char(109),char(95),char(103),char(105), -char(109),char(112),char(97),char(99),char(116),char(83),char(117),char(98),char(84),char(121),char(112),char(101),char(0),char(42),char(109),char(95),char(117),char(110),char(115),char(99), -char(97),char(108),char(101),char(100),char(80),char(111),char(105),char(110),char(116),char(115),char(70),char(108),char(111),char(97),char(116),char(80),char(116),char(114),char(0),char(42), -char(109),char(95),char(117),char(110),char(115),char(99),char(97),char(108),char(101),char(100),char(80),char(111),char(105),char(110),char(116),char(115),char(68),char(111),char(117),char(98), -char(108),char(101),char(80),char(116),char(114),char(0),char(109),char(95),char(110),char(117),char(109),char(85),char(110),char(115),char(99),char(97),char(108),char(101),char(100),char(80), -char(111),char(105),char(110),char(116),char(115),char(0),char(109),char(95),char(112),char(97),char(100),char(100),char(105),char(110),char(103),char(51),char(91),char(52),char(93),char(0), -char(42),char(109),char(95),char(98),char(114),char(111),char(97),char(100),char(112),char(104),char(97),char(115),char(101),char(72),char(97),char(110),char(100),char(108),char(101),char(0), -char(42),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(83),char(104),char(97),char(112),char(101),char(0),char(42),char(109), -char(95),char(114),char(111),char(111),char(116),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(83),char(104),char(97),char(112),char(101),char(0), -char(109),char(95),char(119),char(111),char(114),char(108),char(100),char(84),char(114),char(97),char(110),char(115),char(102),char(111),char(114),char(109),char(0),char(109),char(95),char(105), -char(110),char(116),char(101),char(114),char(112),char(111),char(108),char(97),char(116),char(105),char(111),char(110),char(87),char(111),char(114),char(108),char(100),char(84),char(114),char(97), -char(110),char(115),char(102),char(111),char(114),char(109),char(0),char(109),char(95),char(105),char(110),char(116),char(101),char(114),char(112),char(111),char(108),char(97),char(116),char(105), -char(111),char(110),char(76),char(105),char(110),char(101),char(97),char(114),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(105), -char(110),char(116),char(101),char(114),char(112),char(111),char(108),char(97),char(116),char(105),char(111),char(110),char(65),char(110),char(103),char(117),char(108),char(97),char(114),char(86), -char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(110),char(105),char(115),char(111),char(116),char(114),char(111),char(112),char(105), -char(99),char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(99),char(111),char(110),char(116),char(97),char(99),char(116),char(80), -char(114),char(111),char(99),char(101),char(115),char(115),char(105),char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109), -char(95),char(100),char(101),char(97),char(99),char(116),char(105),char(118),char(97),char(116),char(105),char(111),char(110),char(84),char(105),char(109),char(101),char(0),char(109),char(95), -char(102),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(114),char(111),char(108),char(108),char(105),char(110),char(103),char(70),char(114), -char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(105),char(116),char(117),char(116),char(105),char(111),char(110), -char(0),char(109),char(95),char(104),char(105),char(116),char(70),char(114),char(97),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(99),char(99),char(100), -char(83),char(119),char(101),char(112),char(116),char(83),char(112),char(104),char(101),char(114),char(101),char(82),char(97),char(100),char(105),char(117),char(115),char(0),char(109),char(95), -char(99),char(99),char(100),char(77),char(111),char(116),char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109), -char(95),char(104),char(97),char(115),char(65),char(110),char(105),char(115),char(111),char(116),char(114),char(111),char(112),char(105),char(99),char(70),char(114),char(105),char(99),char(116), -char(105),char(111),char(110),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(70),char(108),char(97),char(103),char(115), -char(0),char(109),char(95),char(105),char(115),char(108),char(97),char(110),char(100),char(84),char(97),char(103),char(49),char(0),char(109),char(95),char(99),char(111),char(109),char(112), -char(97),char(110),char(105),char(111),char(110),char(73),char(100),char(0),char(109),char(95),char(97),char(99),char(116),char(105),char(118),char(97),char(116),char(105),char(111),char(110), -char(83),char(116),char(97),char(116),char(101),char(49),char(0),char(109),char(95),char(105),char(110),char(116),char(101),char(114),char(110),char(97),char(108),char(84),char(121),char(112), -char(101),char(0),char(109),char(95),char(99),char(104),char(101),char(99),char(107),char(67),char(111),char(108),char(108),char(105),char(100),char(101),char(87),char(105),char(116),char(104), -char(0),char(109),char(95),char(115),char(111),char(108),char(118),char(101),char(114),char(73),char(110),char(102),char(111),char(0),char(109),char(95),char(103),char(114),char(97),char(118), -char(105),char(116),char(121),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(79),char(98),char(106),char(101),char(99), -char(116),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(105),char(110),char(118),char(73),char(110),char(101),char(114),char(116),char(105),char(97),char(84),char(101), -char(110),char(115),char(111),char(114),char(87),char(111),char(114),char(108),char(100),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(86),char(101), -char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(86),char(101),char(108),char(111), -char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(70),char(97),char(99),char(116),char(111),char(114), -char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(103),char(114), -char(97),char(118),char(105),char(116),char(121),char(95),char(97),char(99),char(99),char(101),char(108),char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(0),char(109), -char(95),char(105),char(110),char(118),char(73),char(110),char(101),char(114),char(116),char(105),char(97),char(76),char(111),char(99),char(97),char(108),char(0),char(109),char(95),char(116), -char(111),char(116),char(97),char(108),char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(116),char(111),char(116),char(97),char(108),char(84),char(111),char(114), -char(113),char(117),char(101),char(0),char(109),char(95),char(105),char(110),char(118),char(101),char(114),char(115),char(101),char(77),char(97),char(115),char(115),char(0),char(109),char(95), -char(108),char(105),char(110),char(101),char(97),char(114),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(97),char(110),char(103),char(117), -char(108),char(97),char(114),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(97),char(100),char(100),char(105),char(116),char(105),char(111), -char(110),char(97),char(108),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(97), -char(100),char(100),char(105),char(116),char(105),char(111),char(110),char(97),char(108),char(76),char(105),char(110),char(101),char(97),char(114),char(68),char(97),char(109),char(112),char(105), -char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(83),char(113),char(114),char(0),char(109),char(95),char(97),char(100),char(100), -char(105),char(116),char(105),char(111),char(110),char(97),char(108),char(65),char(110),char(103),char(117),char(108),char(97),char(114),char(68),char(97),char(109),char(112),char(105),char(110), -char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(83),char(113),char(114),char(0),char(109),char(95),char(97),char(100),char(100),char(105), -char(116),char(105),char(111),char(110),char(97),char(108),char(65),char(110),char(103),char(117),char(108),char(97),char(114),char(68),char(97),char(109),char(112),char(105),char(110),char(103), -char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(108),char(101),char(101),char(112), -char(105),char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108), -char(97),char(114),char(83),char(108),char(101),char(101),char(112),char(105),char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0), -char(109),char(95),char(97),char(100),char(100),char(105),char(116),char(105),char(111),char(110),char(97),char(108),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0), -char(109),char(95),char(110),char(117),char(109),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(82),char(111),char(119),char(115),char(0), -char(110),char(117),char(98),char(0),char(42),char(109),char(95),char(114),char(98),char(65),char(0),char(42),char(109),char(95),char(114),char(98),char(66),char(0),char(109),char(95), -char(111),char(98),char(106),char(101),char(99),char(116),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(117),char(115),char(101),char(114),char(67),char(111),char(110), -char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(117),char(115),char(101),char(114),char(67),char(111), -char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(73),char(100),char(0),char(109),char(95),char(110),char(101),char(101),char(100),char(115),char(70),char(101), -char(101),char(100),char(98),char(97),char(99),char(107),char(0),char(109),char(95),char(97),char(112),char(112),char(108),char(105),char(101),char(100),char(73),char(109),char(112),char(117), -char(108),char(115),char(101),char(0),char(109),char(95),char(100),char(98),char(103),char(68),char(114),char(97),char(119),char(83),char(105),char(122),char(101),char(0),char(109),char(95), -char(100),char(105),char(115),char(97),char(98),char(108),char(101),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(115),char(66),char(101),char(116), -char(119),char(101),char(101),char(110),char(76),char(105),char(110),char(107),char(101),char(100),char(66),char(111),char(100),char(105),char(101),char(115),char(0),char(109),char(95),char(111), -char(118),char(101),char(114),char(114),char(105),char(100),char(101),char(78),char(117),char(109),char(83),char(111),char(108),char(118),char(101),char(114),char(73),char(116),char(101),char(114), -char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(98),char(114),char(101),char(97),char(107),char(105),char(110),char(103),char(73),char(109),char(112), -char(117),char(108),char(115),char(101),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(105),char(115),char(69),char(110), -char(97),char(98),char(108),char(101),char(100),char(0),char(109),char(95),char(116),char(121),char(112),char(101),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105), -char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(112),char(105),char(118),char(111),char(116),char(73),char(110),char(65),char(0),char(109),char(95), -char(112),char(105),char(118),char(111),char(116),char(73),char(110),char(66),char(0),char(109),char(95),char(114),char(98),char(65),char(70),char(114),char(97),char(109),char(101),char(0), -char(109),char(95),char(114),char(98),char(66),char(70),char(114),char(97),char(109),char(101),char(0),char(109),char(95),char(117),char(115),char(101),char(82),char(101),char(102),char(101), -char(114),char(101),char(110),char(99),char(101),char(70),char(114),char(97),char(109),char(101),char(65),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97), -char(114),char(79),char(110),char(108),char(121),char(0),char(109),char(95),char(101),char(110),char(97),char(98),char(108),char(101),char(65),char(110),char(103),char(117),char(108),char(97), -char(114),char(77),char(111),char(116),char(111),char(114),char(0),char(109),char(95),char(109),char(111),char(116),char(111),char(114),char(84),char(97),char(114),char(103),char(101),char(116), -char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(109),char(97),char(120),char(77),char(111),char(116),char(111),char(114),char(73), -char(109),char(112),char(117),char(108),char(115),char(101),char(0),char(109),char(95),char(108),char(111),char(119),char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0), -char(109),char(95),char(117),char(112),char(112),char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(108),char(105),char(109),char(105),char(116), -char(83),char(111),char(102),char(116),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(98),char(105),char(97),char(115),char(70),char(97),char(99),char(116),char(111), -char(114),char(0),char(109),char(95),char(114),char(101),char(108),char(97),char(120),char(97),char(116),char(105),char(111),char(110),char(70),char(97),char(99),char(116),char(111),char(114), -char(0),char(109),char(95),char(115),char(119),char(105),char(110),char(103),char(83),char(112),char(97),char(110),char(49),char(0),char(109),char(95),char(115),char(119),char(105),char(110), -char(103),char(83),char(112),char(97),char(110),char(50),char(0),char(109),char(95),char(116),char(119),char(105),char(115),char(116),char(83),char(112),char(97),char(110),char(0),char(109), -char(95),char(100),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(85),char(112),char(112), -char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(76),char(111),char(119),char(101), -char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(85),char(112),char(112),char(101), -char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(76),char(111),char(119),char(101), -char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(117),char(115),char(101),char(76),char(105),char(110),char(101),char(97),char(114),char(82),char(101), -char(102),char(101),char(114),char(101),char(110),char(99),char(101),char(70),char(114),char(97),char(109),char(101),char(65),char(0),char(109),char(95),char(117),char(115),char(101),char(79), -char(102),char(102),char(115),char(101),char(116),char(70),char(111),char(114),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(70),char(114), -char(97),char(109),char(101),char(0),char(109),char(95),char(54),char(100),char(111),char(102),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(115),char(112),char(114), -char(105),char(110),char(103),char(69),char(110),char(97),char(98),char(108),char(101),char(100),char(91),char(54),char(93),char(0),char(109),char(95),char(101),char(113),char(117),char(105), -char(108),char(105),char(98),char(114),char(105),char(117),char(109),char(80),char(111),char(105),char(110),char(116),char(91),char(54),char(93),char(0),char(109),char(95),char(115),char(112), -char(114),char(105),char(110),char(103),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(91),char(54),char(93),char(0),char(109),char(95),char(115), -char(112),char(114),char(105),char(110),char(103),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(91),char(54),char(93),char(0),char(109),char(95),char(116),char(97), -char(117),char(0),char(109),char(95),char(116),char(105),char(109),char(101),char(83),char(116),char(101),char(112),char(0),char(109),char(95),char(109),char(97),char(120),char(69),char(114), -char(114),char(111),char(114),char(82),char(101),char(100),char(117),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(115),char(111),char(114),char(0),char(109), -char(95),char(101),char(114),char(112),char(0),char(109),char(95),char(101),char(114),char(112),char(50),char(0),char(109),char(95),char(103),char(108),char(111),char(98),char(97),char(108), -char(67),char(102),char(109),char(0),char(109),char(95),char(115),char(112),char(108),char(105),char(116),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(80),char(101), -char(110),char(101),char(116),char(114),char(97),char(116),char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109), -char(95),char(115),char(112),char(108),char(105),char(116),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(84),char(117),char(114),char(110),char(69),char(114),char(112), -char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(108),char(111),char(112),char(0),char(109),char(95),char(119),char(97),char(114),char(109), -char(115),char(116),char(97),char(114),char(116),char(105),char(110),char(103),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(109),char(97),char(120), -char(71),char(121),char(114),char(111),char(115),char(99),char(111),char(112),char(105),char(99),char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(115),char(105), -char(110),char(103),char(108),char(101),char(65),char(120),char(105),char(115),char(82),char(111),char(108),char(108),char(105),char(110),char(103),char(70),char(114),char(105),char(99),char(116), -char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(110),char(117),char(109),char(73),char(116), -char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(115),char(111),char(108),char(118),char(101),char(114),char(77),char(111),char(100), -char(101),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(105),char(110),char(103),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(82),char(101), -char(115),char(116),char(105),char(116),char(117),char(116),char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109), -char(95),char(109),char(105),char(110),char(105),char(109),char(117),char(109),char(83),char(111),char(108),char(118),char(101),char(114),char(66),char(97),char(116),char(99),char(104),char(83), -char(105),char(122),char(101),char(0),char(109),char(95),char(115),char(112),char(108),char(105),char(116),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(0),char(109), -char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(97), -char(110),char(103),char(117),char(108),char(97),char(114),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(118),char(111), -char(108),char(117),char(109),char(101),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(0),char(42),char(109),char(95),char(109),char(97),char(116), -char(101),char(114),char(105),char(97),char(108),char(0),char(109),char(95),char(112),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(112), -char(114),char(101),char(118),char(105),char(111),char(117),char(115),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(118),char(101), -char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(99),char(99),char(117),char(109),char(117),char(108),char(97),char(116),char(101),char(100), -char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(110),char(111),char(114),char(109),char(97),char(108),char(0),char(109),char(95),char(97),char(114),char(101), -char(97),char(0),char(109),char(95),char(97),char(116),char(116),char(97),char(99),char(104),char(0),char(109),char(95),char(110),char(111),char(100),char(101),char(73),char(110),char(100), -char(105),char(99),char(101),char(115),char(91),char(50),char(93),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(76),char(101),char(110),char(103),char(116),char(104), -char(0),char(109),char(95),char(98),char(98),char(101),char(110),char(100),char(105),char(110),char(103),char(0),char(109),char(95),char(110),char(111),char(100),char(101),char(73),char(110), -char(100),char(105),char(99),char(101),char(115),char(91),char(51),char(93),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(65),char(114),char(101),char(97),char(0), -char(109),char(95),char(99),char(48),char(91),char(52),char(93),char(0),char(109),char(95),char(110),char(111),char(100),char(101),char(73),char(110),char(100),char(105),char(99),char(101), -char(115),char(91),char(52),char(93),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(86),char(111),char(108),char(117),char(109),char(101),char(0),char(109),char(95), -char(99),char(49),char(0),char(109),char(95),char(99),char(50),char(0),char(109),char(95),char(99),char(48),char(0),char(109),char(95),char(108),char(111),char(99),char(97),char(108), -char(70),char(114),char(97),char(109),char(101),char(0),char(42),char(109),char(95),char(114),char(105),char(103),char(105),char(100),char(66),char(111),char(100),char(121),char(0),char(109), -char(95),char(110),char(111),char(100),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(97),char(101),char(114),char(111),char(77),char(111),char(100), -char(101),char(108),char(0),char(109),char(95),char(98),char(97),char(117),char(109),char(103),char(97),char(114),char(116),char(101),char(0),char(109),char(95),char(100),char(114),char(97), -char(103),char(0),char(109),char(95),char(108),char(105),char(102),char(116),char(0),char(109),char(95),char(112),char(114),char(101),char(115),char(115),char(117),char(114),char(101),char(0), -char(109),char(95),char(118),char(111),char(108),char(117),char(109),char(101),char(0),char(109),char(95),char(100),char(121),char(110),char(97),char(109),char(105),char(99),char(70),char(114), -char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(112),char(111),char(115),char(101),char(77),char(97),char(116),char(99),char(104),char(0),char(109), -char(95),char(114),char(105),char(103),char(105),char(100),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(72),char(97),char(114),char(100),char(110),char(101),char(115), -char(115),char(0),char(109),char(95),char(107),char(105),char(110),char(101),char(116),char(105),char(99),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(72),char(97), -char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(67),char(111),char(110),char(116),char(97),char(99),char(116), -char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(97),char(110),char(99),char(104),char(111),char(114),char(72),char(97),char(114), -char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(82),char(105),char(103),char(105),char(100),char(67),char(108),char(117), -char(115),char(116),char(101),char(114),char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(75), -char(105),char(110),char(101),char(116),char(105),char(99),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(72),char(97),char(114),char(100),char(110),char(101),char(115), -char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(83),char(111),char(102),char(116),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(72), -char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(82),char(105),char(103),char(105),char(100),char(67), -char(108),char(117),char(115),char(116),char(101),char(114),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(83),char(112),char(108),char(105),char(116),char(0),char(109), -char(95),char(115),char(111),char(102),char(116),char(75),char(105),char(110),char(101),char(116),char(105),char(99),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(73), -char(109),char(112),char(117),char(108),char(115),char(101),char(83),char(112),char(108),char(105),char(116),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(83),char(111), -char(102),char(116),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(83),char(112),char(108),char(105), -char(116),char(0),char(109),char(95),char(109),char(97),char(120),char(86),char(111),char(108),char(117),char(109),char(101),char(0),char(109),char(95),char(116),char(105),char(109),char(101), -char(83),char(99),char(97),char(108),char(101),char(0),char(109),char(95),char(118),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(73),char(116),char(101),char(114), -char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(112),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(73),char(116),char(101), -char(114),char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(100),char(114),char(105),char(102),char(116),char(73),char(116),char(101),char(114),char(97), -char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(99),char(108),char(117),char(115),char(116),char(101),char(114),char(73),char(116),char(101),char(114),char(97), -char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(114),char(111),char(116),char(0),char(109),char(95),char(115),char(99),char(97),char(108),char(101),char(0), -char(109),char(95),char(97),char(113),char(113),char(0),char(109),char(95),char(99),char(111),char(109),char(0),char(42),char(109),char(95),char(112),char(111),char(115),char(105),char(116), -char(105),char(111),char(110),char(115),char(0),char(42),char(109),char(95),char(119),char(101),char(105),char(103),char(104),char(116),char(115),char(0),char(109),char(95),char(110),char(117), -char(109),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(87),char(101),char(105),char(103), -char(116),char(115),char(0),char(109),char(95),char(98),char(118),char(111),char(108),char(117),char(109),char(101),char(0),char(109),char(95),char(98),char(102),char(114),char(97),char(109), -char(101),char(0),char(109),char(95),char(102),char(114),char(97),char(109),char(101),char(120),char(102),char(111),char(114),char(109),char(0),char(109),char(95),char(108),char(111),char(99), -char(105),char(105),char(0),char(109),char(95),char(105),char(110),char(118),char(119),char(105),char(0),char(109),char(95),char(118),char(105),char(109),char(112),char(117),char(108),char(115), -char(101),char(115),char(91),char(50),char(93),char(0),char(109),char(95),char(100),char(105),char(109),char(112),char(117),char(108),char(115),char(101),char(115),char(91),char(50),char(93), -char(0),char(109),char(95),char(108),char(118),char(0),char(109),char(95),char(97),char(118),char(0),char(42),char(109),char(95),char(102),char(114),char(97),char(109),char(101),char(114), -char(101),char(102),char(115),char(0),char(42),char(109),char(95),char(110),char(111),char(100),char(101),char(73),char(110),char(100),char(105),char(99),char(101),char(115),char(0),char(42), -char(109),char(95),char(109),char(97),char(115),char(115),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(70),char(114),char(97),char(109),char(101),char(82), -char(101),char(102),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(78),char(111),char(100),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109), -char(77),char(97),char(115),char(115),char(101),char(115),char(0),char(109),char(95),char(105),char(100),char(109),char(97),char(115),char(115),char(0),char(109),char(95),char(105),char(109), -char(97),char(115),char(115),char(0),char(109),char(95),char(110),char(118),char(105),char(109),char(112),char(117),char(108),char(115),char(101),char(115),char(0),char(109),char(95),char(110), -char(100),char(105),char(109),char(112),char(117),char(108),char(115),char(101),char(115),char(0),char(109),char(95),char(110),char(100),char(97),char(109),char(112),char(105),char(110),char(103), -char(0),char(109),char(95),char(108),char(100),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(97),char(100),char(97),char(109),char(112),char(105), -char(110),char(103),char(0),char(109),char(95),char(109),char(97),char(116),char(99),char(104),char(105),char(110),char(103),char(0),char(109),char(95),char(109),char(97),char(120),char(83), -char(101),char(108),char(102),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(0), -char(109),char(95),char(115),char(101),char(108),char(102),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(73),char(109),char(112),char(117),char(108), -char(115),char(101),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(99),char(111),char(110),char(116),char(97),char(105),char(110),char(115),char(65), -char(110),char(99),char(104),char(111),char(114),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(100),char(101),char(0),char(109),char(95),char(99),char(108), -char(117),char(115),char(116),char(101),char(114),char(73),char(110),char(100),char(101),char(120),char(0),char(42),char(109),char(95),char(98),char(111),char(100),char(121),char(65),char(0), -char(42),char(109),char(95),char(98),char(111),char(100),char(121),char(66),char(0),char(109),char(95),char(114),char(101),char(102),char(115),char(91),char(50),char(93),char(0),char(109), -char(95),char(99),char(102),char(109),char(0),char(109),char(95),char(115),char(112),char(108),char(105),char(116),char(0),char(109),char(95),char(100),char(101),char(108),char(101),char(116), -char(101),char(0),char(109),char(95),char(114),char(101),char(108),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(91),char(50),char(93),char(0),char(109), -char(95),char(98),char(111),char(100),char(121),char(65),char(116),char(121),char(112),char(101),char(0),char(109),char(95),char(98),char(111),char(100),char(121),char(66),char(116),char(121), -char(112),char(101),char(0),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(84),char(121),char(112),char(101),char(0),char(42),char(109),char(95),char(112),char(111), -char(115),char(101),char(0),char(42),char(42),char(109),char(95),char(109),char(97),char(116),char(101),char(114),char(105),char(97),char(108),char(115),char(0),char(42),char(109),char(95), -char(110),char(111),char(100),char(101),char(115),char(0),char(42),char(109),char(95),char(108),char(105),char(110),char(107),char(115),char(0),char(42),char(109),char(95),char(102),char(97), -char(99),char(101),char(115),char(0),char(42),char(109),char(95),char(116),char(101),char(116),char(114),char(97),char(104),char(101),char(100),char(114),char(97),char(0),char(42),char(109), -char(95),char(97),char(110),char(99),char(104),char(111),char(114),char(115),char(0),char(42),char(109),char(95),char(99),char(108),char(117),char(115),char(116),char(101),char(114),char(115), -char(0),char(42),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(77),char(97),char(116),char(101), -char(114),char(105),char(97),char(108),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(76),char(105),char(110),char(107),char(115),char(0),char(109),char(95),char(110), -char(117),char(109),char(70),char(97),char(99),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(84),char(101),char(116),char(114),char(97),char(104),char(101), -char(100),char(114),char(97),char(0),char(109),char(95),char(110),char(117),char(109),char(65),char(110),char(99),char(104),char(111),char(114),char(115),char(0),char(109),char(95),char(110), -char(117),char(109),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(74),char(111),char(105),char(110), -char(116),char(115),char(0),char(109),char(95),char(99),char(111),char(110),char(102),char(105),char(103),char(0),char(84),char(89),char(80),char(69),char(76),char(0),char(0),char(0), -char(99),char(104),char(97),char(114),char(0),char(117),char(99),char(104),char(97),char(114),char(0),char(115),char(104),char(111),char(114),char(116),char(0),char(117),char(115),char(104), -char(111),char(114),char(116),char(0),char(105),char(110),char(116),char(0),char(108),char(111),char(110),char(103),char(0),char(117),char(108),char(111),char(110),char(103),char(0),char(102), -char(108),char(111),char(97),char(116),char(0),char(100),char(111),char(117),char(98),char(108),char(101),char(0),char(118),char(111),char(105),char(100),char(0),char(80),char(111),char(105), -char(110),char(116),char(101),char(114),char(65),char(114),char(114),char(97),char(121),char(0),char(98),char(116),char(80),char(104),char(121),char(115),char(105),char(99),char(115),char(83), -char(121),char(115),char(116),char(101),char(109),char(0),char(76),char(105),char(115),char(116),char(66),char(97),char(115),char(101),char(0),char(98),char(116),char(86),char(101),char(99), -char(116),char(111),char(114),char(51),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(86),char(101),char(99),char(116), -char(111),char(114),char(51),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(97),char(116),char(114), -char(105),char(120),char(51),char(120),char(51),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(97),char(116), -char(114),char(105),char(120),char(51),char(120),char(51),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84), -char(114),char(97),char(110),char(115),char(102),char(111),char(114),char(109),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116), -char(84),char(114),char(97),char(110),char(115),char(102),char(111),char(114),char(109),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0), -char(98),char(116),char(66),char(118),char(104),char(83),char(117),char(98),char(116),char(114),char(101),char(101),char(73),char(110),char(102),char(111),char(68),char(97),char(116),char(97), -char(0),char(98),char(116),char(79),char(112),char(116),char(105),char(109),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(78),char(111),char(100),char(101),char(70), -char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(79),char(112),char(116),char(105),char(109),char(105),char(122),char(101),char(100), -char(66),char(118),char(104),char(78),char(111),char(100),char(101),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116), -char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(78),char(111),char(100),char(101),char(68),char(97),char(116),char(97), -char(0),char(98),char(116),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(70),char(108),char(111),char(97),char(116), -char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(68), -char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111), -char(110),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(116),char(97),char(116),char(105),char(99),char(80), -char(108),char(97),char(110),char(101),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(118), -char(101),char(120),char(73),char(110),char(116),char(101),char(114),char(110),char(97),char(108),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0), -char(98),char(116),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(65),char(110),char(100),char(82),char(97),char(100),char(105),char(117),char(115),char(0), -char(98),char(116),char(77),char(117),char(108),char(116),char(105),char(83),char(112),char(104),char(101),char(114),char(101),char(83),char(104),char(97),char(112),char(101),char(68),char(97), -char(116),char(97),char(0),char(98),char(116),char(73),char(110),char(116),char(73),char(110),char(100),char(101),char(120),char(68),char(97),char(116),char(97),char(0),char(98),char(116), -char(83),char(104),char(111),char(114),char(116),char(73),char(110),char(116),char(73),char(110),char(100),char(101),char(120),char(68),char(97),char(116),char(97),char(0),char(98),char(116), -char(83),char(104),char(111),char(114),char(116),char(73),char(110),char(116),char(73),char(110),char(100),char(101),char(120),char(84),char(114),char(105),char(112),char(108),char(101),char(116), -char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(104),char(97),char(114),char(73),char(110),char(100),char(101),char(120),char(84),char(114),char(105),char(112), -char(108),char(101),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(101),char(115),char(104),char(80),char(97),char(114),char(116),char(68),char(97), -char(116),char(97),char(0),char(98),char(116),char(83),char(116),char(114),char(105),char(100),char(105),char(110),char(103),char(77),char(101),char(115),char(104),char(73),char(110),char(116), -char(101),char(114),char(102),char(97),char(99),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(114),char(105),char(97),char(110),char(103),char(108), -char(101),char(77),char(101),char(115),char(104),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(114),char(105), -char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(102),char(111),char(77),char(97),char(112),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83), -char(99),char(97),char(108),char(101),char(100),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(77),char(101),char(115),char(104),char(83),char(104),char(97), -char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(109),char(112),char(111),char(117),char(110),char(100),char(83),char(104),char(97), -char(112),char(101),char(67),char(104),char(105),char(108),char(100),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(109),char(112),char(111),char(117), -char(110),char(100),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(121),char(108),char(105),char(110),char(100), -char(101),char(114),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(97),char(112),char(115),char(117),char(108), -char(101),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(114),char(105),char(97),char(110),char(103),char(108), -char(101),char(73),char(110),char(102),char(111),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(73),char(109),char(112),char(97),char(99),char(116),char(77), -char(101),char(115),char(104),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(118),char(101), -char(120),char(72),char(117),char(108),char(108),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(108), -char(108),char(105),char(115),char(105),char(111),char(110),char(79),char(98),char(106),char(101),char(99),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97), -char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(79),char(98),char(106),char(101),char(99),char(116), -char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(68),char(121),char(110),char(97),char(109),char(105),char(99),char(115), -char(87),char(111),char(114),char(108),char(100),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111), -char(110),char(116),char(97),char(99),char(116),char(83),char(111),char(108),char(118),char(101),char(114),char(73),char(110),char(102),char(111),char(68),char(111),char(117),char(98),char(108), -char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(68),char(121),char(110),char(97),char(109),char(105),char(99),char(115),char(87),char(111),char(114),char(108), -char(100),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(116),char(97),char(99),char(116), -char(83),char(111),char(108),char(118),char(101),char(114),char(73),char(110),char(102),char(111),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0), -char(98),char(116),char(82),char(105),char(103),char(105),char(100),char(66),char(111),char(100),char(121),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97), -char(0),char(98),char(116),char(82),char(105),char(103),char(105),char(100),char(66),char(111),char(100),char(121),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97), -char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(73),char(110),char(102),char(111),char(49), -char(0),char(98),char(116),char(84),char(121),char(112),char(101),char(100),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(97), -char(116),char(97),char(0),char(98),char(116),char(82),char(105),char(103),char(105),char(100),char(66),char(111),char(100),char(121),char(68),char(97),char(116),char(97),char(0),char(98), -char(116),char(80),char(111),char(105),char(110),char(116),char(50),char(80),char(111),char(105),char(110),char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105), -char(110),char(116),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(80),char(111),char(105),char(110),char(116),char(50), -char(80),char(111),char(105),char(110),char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108), -char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(72),char(105),char(110),char(103),char(101),char(67),char(111),char(110),char(115),char(116),char(114),char(97), -char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(72),char(105),char(110),char(103), -char(101),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97), -char(0),char(98),char(116),char(67),char(111),char(110),char(101),char(84),char(119),char(105),char(115),char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105), -char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(101),char(110),char(101),char(114),char(105),char(99),char(54),char(68),char(111),char(102), -char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(101),char(110), -char(101),char(114),char(105),char(99),char(54),char(68),char(111),char(102),char(83),char(112),char(114),char(105),char(110),char(103),char(67),char(111),char(110),char(115),char(116),char(114), -char(97),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(108),char(105),char(100),char(101),char(114),char(67),char(111),char(110), -char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121), -char(77),char(97),char(116),char(101),char(114),char(105),char(97),char(108),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100), -char(121),char(78),char(111),char(100),char(101),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(76),char(105), -char(110),char(107),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(70),char(97),char(99),char(101),char(68), -char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(84),char(101),char(116),char(114),char(97),char(68),char(97),char(116), -char(97),char(0),char(83),char(111),char(102),char(116),char(82),char(105),char(103),char(105),char(100),char(65),char(110),char(99),char(104),char(111),char(114),char(68),char(97),char(116), -char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(67),char(111),char(110),char(102),char(105),char(103),char(68),char(97),char(116),char(97), -char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(80),char(111),char(115),char(101),char(68),char(97),char(116),char(97),char(0),char(83),char(111), -char(102),char(116),char(66),char(111),char(100),char(121),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(68),char(97),char(116),char(97),char(0),char(98),char(116), -char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(74),char(111),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116), -char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(0),char(0), -char(84),char(76),char(69),char(78),char(1),char(0),char(1),char(0),char(2),char(0),char(2),char(0),char(4),char(0),char(4),char(0),char(4),char(0),char(4),char(0), -char(8),char(0),char(0),char(0),char(16),char(0),char(48),char(0),char(16),char(0),char(16),char(0),char(32),char(0),char(48),char(0),char(96),char(0),char(64),char(0), -char(-128),char(0),char(20),char(0),char(48),char(0),char(80),char(0),char(16),char(0),char(96),char(0),char(-112),char(0),char(16),char(0),char(56),char(0),char(56),char(0), -char(20),char(0),char(72),char(0),char(4),char(0),char(4),char(0),char(8),char(0),char(4),char(0),char(56),char(0),char(32),char(0),char(80),char(0),char(72),char(0), -char(96),char(0),char(80),char(0),char(32),char(0),char(64),char(0),char(64),char(0),char(16),char(0),char(72),char(0),char(80),char(0),char(-32),char(1),char(16),char(1), -char(-72),char(0),char(-104),char(0),char(104),char(0),char(88),char(0),char(-8),char(1),char(-80),char(3),char(8),char(0),char(64),char(0),char(0),char(0),char(96),char(0), -char(-128),char(0),char(104),char(1),char(-24),char(0),char(-32),char(0),char(8),char(1),char(104),char(1),char(-40),char(0),char(16),char(0),char(104),char(0),char(24),char(0), -char(40),char(0),char(104),char(0),char(96),char(0),char(104),char(0),char(-56),char(0),char(104),char(1),char(112),char(0),char(-32),char(1),char(83),char(84),char(82),char(67), -char(65),char(0),char(0),char(0),char(10),char(0),char(3),char(0),char(4),char(0),char(0),char(0),char(4),char(0),char(1),char(0),char(9),char(0),char(2),char(0), -char(11),char(0),char(3),char(0),char(10),char(0),char(3),char(0),char(10),char(0),char(4),char(0),char(10),char(0),char(5),char(0),char(12),char(0),char(2),char(0), -char(9),char(0),char(6),char(0),char(9),char(0),char(7),char(0),char(13),char(0),char(1),char(0),char(7),char(0),char(8),char(0),char(14),char(0),char(1),char(0), -char(8),char(0),char(8),char(0),char(15),char(0),char(1),char(0),char(13),char(0),char(9),char(0),char(16),char(0),char(1),char(0),char(14),char(0),char(9),char(0), -char(17),char(0),char(2),char(0),char(15),char(0),char(10),char(0),char(13),char(0),char(11),char(0),char(18),char(0),char(2),char(0),char(16),char(0),char(10),char(0), -char(14),char(0),char(11),char(0),char(19),char(0),char(4),char(0),char(4),char(0),char(12),char(0),char(4),char(0),char(13),char(0),char(2),char(0),char(14),char(0), -char(2),char(0),char(15),char(0),char(20),char(0),char(6),char(0),char(13),char(0),char(16),char(0),char(13),char(0),char(17),char(0),char(4),char(0),char(18),char(0), -char(4),char(0),char(19),char(0),char(4),char(0),char(20),char(0),char(0),char(0),char(21),char(0),char(21),char(0),char(6),char(0),char(14),char(0),char(16),char(0), -char(14),char(0),char(17),char(0),char(4),char(0),char(18),char(0),char(4),char(0),char(19),char(0),char(4),char(0),char(20),char(0),char(0),char(0),char(21),char(0), -char(22),char(0),char(3),char(0),char(2),char(0),char(14),char(0),char(2),char(0),char(15),char(0),char(4),char(0),char(22),char(0),char(23),char(0),char(12),char(0), -char(13),char(0),char(23),char(0),char(13),char(0),char(24),char(0),char(13),char(0),char(25),char(0),char(4),char(0),char(26),char(0),char(4),char(0),char(27),char(0), -char(4),char(0),char(28),char(0),char(4),char(0),char(29),char(0),char(20),char(0),char(30),char(0),char(22),char(0),char(31),char(0),char(19),char(0),char(32),char(0), -char(4),char(0),char(33),char(0),char(4),char(0),char(34),char(0),char(24),char(0),char(12),char(0),char(14),char(0),char(23),char(0),char(14),char(0),char(24),char(0), -char(14),char(0),char(25),char(0),char(4),char(0),char(26),char(0),char(4),char(0),char(27),char(0),char(4),char(0),char(28),char(0),char(4),char(0),char(29),char(0), -char(21),char(0),char(30),char(0),char(22),char(0),char(31),char(0),char(4),char(0),char(33),char(0),char(4),char(0),char(34),char(0),char(19),char(0),char(32),char(0), -char(25),char(0),char(3),char(0),char(0),char(0),char(35),char(0),char(4),char(0),char(36),char(0),char(0),char(0),char(37),char(0),char(26),char(0),char(5),char(0), -char(25),char(0),char(38),char(0),char(13),char(0),char(39),char(0),char(13),char(0),char(40),char(0),char(7),char(0),char(41),char(0),char(0),char(0),char(21),char(0), -char(27),char(0),char(5),char(0),char(25),char(0),char(38),char(0),char(13),char(0),char(39),char(0),char(13),char(0),char(42),char(0),char(7),char(0),char(43),char(0), -char(4),char(0),char(44),char(0),char(28),char(0),char(2),char(0),char(13),char(0),char(45),char(0),char(7),char(0),char(46),char(0),char(29),char(0),char(4),char(0), -char(27),char(0),char(47),char(0),char(28),char(0),char(48),char(0),char(4),char(0),char(49),char(0),char(0),char(0),char(37),char(0),char(30),char(0),char(1),char(0), -char(4),char(0),char(50),char(0),char(31),char(0),char(2),char(0),char(2),char(0),char(50),char(0),char(0),char(0),char(51),char(0),char(32),char(0),char(2),char(0), -char(2),char(0),char(52),char(0),char(0),char(0),char(51),char(0),char(33),char(0),char(2),char(0),char(0),char(0),char(52),char(0),char(0),char(0),char(53),char(0), -char(34),char(0),char(8),char(0),char(13),char(0),char(54),char(0),char(14),char(0),char(55),char(0),char(30),char(0),char(56),char(0),char(32),char(0),char(57),char(0), -char(33),char(0),char(58),char(0),char(31),char(0),char(59),char(0),char(4),char(0),char(60),char(0),char(4),char(0),char(61),char(0),char(35),char(0),char(4),char(0), -char(34),char(0),char(62),char(0),char(13),char(0),char(63),char(0),char(4),char(0),char(64),char(0),char(0),char(0),char(37),char(0),char(36),char(0),char(7),char(0), -char(25),char(0),char(38),char(0),char(35),char(0),char(65),char(0),char(23),char(0),char(66),char(0),char(24),char(0),char(67),char(0),char(37),char(0),char(68),char(0), -char(7),char(0),char(43),char(0),char(0),char(0),char(69),char(0),char(38),char(0),char(2),char(0),char(36),char(0),char(70),char(0),char(13),char(0),char(39),char(0), -char(39),char(0),char(4),char(0),char(17),char(0),char(71),char(0),char(25),char(0),char(72),char(0),char(4),char(0),char(73),char(0),char(7),char(0),char(74),char(0), -char(40),char(0),char(4),char(0),char(25),char(0),char(38),char(0),char(39),char(0),char(75),char(0),char(4),char(0),char(76),char(0),char(7),char(0),char(43),char(0), -char(41),char(0),char(3),char(0),char(27),char(0),char(47),char(0),char(4),char(0),char(77),char(0),char(0),char(0),char(37),char(0),char(42),char(0),char(3),char(0), -char(27),char(0),char(47),char(0),char(4),char(0),char(77),char(0),char(0),char(0),char(37),char(0),char(43),char(0),char(4),char(0),char(4),char(0),char(78),char(0), -char(7),char(0),char(79),char(0),char(7),char(0),char(80),char(0),char(7),char(0),char(81),char(0),char(37),char(0),char(14),char(0),char(4),char(0),char(82),char(0), -char(4),char(0),char(83),char(0),char(43),char(0),char(84),char(0),char(4),char(0),char(85),char(0),char(7),char(0),char(86),char(0),char(7),char(0),char(87),char(0), -char(7),char(0),char(88),char(0),char(7),char(0),char(89),char(0),char(7),char(0),char(90),char(0),char(4),char(0),char(91),char(0),char(4),char(0),char(92),char(0), -char(4),char(0),char(93),char(0),char(4),char(0),char(94),char(0),char(0),char(0),char(37),char(0),char(44),char(0),char(5),char(0),char(25),char(0),char(38),char(0), -char(35),char(0),char(65),char(0),char(13),char(0),char(39),char(0),char(7),char(0),char(43),char(0),char(4),char(0),char(95),char(0),char(45),char(0),char(5),char(0), -char(27),char(0),char(47),char(0),char(13),char(0),char(96),char(0),char(14),char(0),char(97),char(0),char(4),char(0),char(98),char(0),char(0),char(0),char(99),char(0), -char(46),char(0),char(25),char(0),char(9),char(0),char(100),char(0),char(9),char(0),char(101),char(0),char(25),char(0),char(102),char(0),char(0),char(0),char(35),char(0), -char(18),char(0),char(103),char(0),char(18),char(0),char(104),char(0),char(14),char(0),char(105),char(0),char(14),char(0),char(106),char(0),char(14),char(0),char(107),char(0), -char(8),char(0),char(108),char(0),char(8),char(0),char(109),char(0),char(8),char(0),char(110),char(0),char(8),char(0),char(111),char(0),char(8),char(0),char(112),char(0), -char(8),char(0),char(113),char(0),char(8),char(0),char(114),char(0),char(8),char(0),char(115),char(0),char(4),char(0),char(116),char(0),char(4),char(0),char(117),char(0), -char(4),char(0),char(118),char(0),char(4),char(0),char(119),char(0),char(4),char(0),char(120),char(0),char(4),char(0),char(121),char(0),char(4),char(0),char(122),char(0), -char(0),char(0),char(37),char(0),char(47),char(0),char(25),char(0),char(9),char(0),char(100),char(0),char(9),char(0),char(101),char(0),char(25),char(0),char(102),char(0), -char(0),char(0),char(35),char(0),char(17),char(0),char(103),char(0),char(17),char(0),char(104),char(0),char(13),char(0),char(105),char(0),char(13),char(0),char(106),char(0), -char(13),char(0),char(107),char(0),char(7),char(0),char(108),char(0),char(7),char(0),char(109),char(0),char(7),char(0),char(110),char(0),char(7),char(0),char(111),char(0), -char(7),char(0),char(112),char(0),char(7),char(0),char(113),char(0),char(7),char(0),char(114),char(0),char(7),char(0),char(115),char(0),char(4),char(0),char(116),char(0), -char(4),char(0),char(117),char(0),char(4),char(0),char(118),char(0),char(4),char(0),char(119),char(0),char(4),char(0),char(120),char(0),char(4),char(0),char(121),char(0), -char(4),char(0),char(122),char(0),char(0),char(0),char(37),char(0),char(48),char(0),char(2),char(0),char(49),char(0),char(123),char(0),char(14),char(0),char(124),char(0), -char(50),char(0),char(2),char(0),char(51),char(0),char(123),char(0),char(13),char(0),char(124),char(0),char(52),char(0),char(21),char(0),char(47),char(0),char(125),char(0), -char(15),char(0),char(126),char(0),char(13),char(0),char(127),char(0),char(13),char(0),char(-128),char(0),char(13),char(0),char(-127),char(0),char(13),char(0),char(-126),char(0), -char(13),char(0),char(124),char(0),char(13),char(0),char(-125),char(0),char(13),char(0),char(-124),char(0),char(13),char(0),char(-123),char(0),char(13),char(0),char(-122),char(0), -char(7),char(0),char(-121),char(0),char(7),char(0),char(-120),char(0),char(7),char(0),char(-119),char(0),char(7),char(0),char(-118),char(0),char(7),char(0),char(-117),char(0), -char(7),char(0),char(-116),char(0),char(7),char(0),char(-115),char(0),char(7),char(0),char(-114),char(0),char(7),char(0),char(-113),char(0),char(4),char(0),char(-112),char(0), -char(53),char(0),char(22),char(0),char(46),char(0),char(125),char(0),char(16),char(0),char(126),char(0),char(14),char(0),char(127),char(0),char(14),char(0),char(-128),char(0), -char(14),char(0),char(-127),char(0),char(14),char(0),char(-126),char(0),char(14),char(0),char(124),char(0),char(14),char(0),char(-125),char(0),char(14),char(0),char(-124),char(0), -char(14),char(0),char(-123),char(0),char(14),char(0),char(-122),char(0),char(8),char(0),char(-121),char(0),char(8),char(0),char(-120),char(0),char(8),char(0),char(-119),char(0), -char(8),char(0),char(-118),char(0),char(8),char(0),char(-117),char(0),char(8),char(0),char(-116),char(0),char(8),char(0),char(-115),char(0),char(8),char(0),char(-114),char(0), -char(8),char(0),char(-113),char(0),char(4),char(0),char(-112),char(0),char(0),char(0),char(37),char(0),char(54),char(0),char(2),char(0),char(4),char(0),char(-111),char(0), -char(4),char(0),char(-110),char(0),char(55),char(0),char(13),char(0),char(56),char(0),char(-109),char(0),char(56),char(0),char(-108),char(0),char(0),char(0),char(35),char(0), -char(4),char(0),char(-107),char(0),char(4),char(0),char(-106),char(0),char(4),char(0),char(-105),char(0),char(4),char(0),char(-104),char(0),char(7),char(0),char(-103),char(0), -char(7),char(0),char(-102),char(0),char(4),char(0),char(-101),char(0),char(4),char(0),char(-100),char(0),char(7),char(0),char(-99),char(0),char(4),char(0),char(-98),char(0), -char(57),char(0),char(3),char(0),char(55),char(0),char(-97),char(0),char(13),char(0),char(-96),char(0),char(13),char(0),char(-95),char(0),char(58),char(0),char(3),char(0), -char(55),char(0),char(-97),char(0),char(14),char(0),char(-96),char(0),char(14),char(0),char(-95),char(0),char(59),char(0),char(13),char(0),char(55),char(0),char(-97),char(0), -char(18),char(0),char(-94),char(0),char(18),char(0),char(-93),char(0),char(4),char(0),char(-92),char(0),char(4),char(0),char(-91),char(0),char(4),char(0),char(-90),char(0), -char(7),char(0),char(-89),char(0),char(7),char(0),char(-88),char(0),char(7),char(0),char(-87),char(0),char(7),char(0),char(-86),char(0),char(7),char(0),char(-85),char(0), -char(7),char(0),char(-84),char(0),char(7),char(0),char(-83),char(0),char(60),char(0),char(13),char(0),char(55),char(0),char(-97),char(0),char(17),char(0),char(-94),char(0), -char(17),char(0),char(-93),char(0),char(4),char(0),char(-92),char(0),char(4),char(0),char(-91),char(0),char(4),char(0),char(-90),char(0),char(7),char(0),char(-89),char(0), -char(7),char(0),char(-88),char(0),char(7),char(0),char(-87),char(0),char(7),char(0),char(-86),char(0),char(7),char(0),char(-85),char(0),char(7),char(0),char(-84),char(0), -char(7),char(0),char(-83),char(0),char(61),char(0),char(11),char(0),char(55),char(0),char(-97),char(0),char(17),char(0),char(-94),char(0),char(17),char(0),char(-93),char(0), -char(7),char(0),char(-82),char(0),char(7),char(0),char(-81),char(0),char(7),char(0),char(-80),char(0),char(7),char(0),char(-85),char(0),char(7),char(0),char(-84),char(0), -char(7),char(0),char(-83),char(0),char(7),char(0),char(-79),char(0),char(0),char(0),char(21),char(0),char(62),char(0),char(9),char(0),char(55),char(0),char(-97),char(0), -char(17),char(0),char(-94),char(0),char(17),char(0),char(-93),char(0),char(13),char(0),char(-78),char(0),char(13),char(0),char(-77),char(0),char(13),char(0),char(-76),char(0), -char(13),char(0),char(-75),char(0),char(4),char(0),char(-74),char(0),char(4),char(0),char(-73),char(0),char(63),char(0),char(5),char(0),char(62),char(0),char(-72),char(0), -char(4),char(0),char(-71),char(0),char(7),char(0),char(-70),char(0),char(7),char(0),char(-69),char(0),char(7),char(0),char(-68),char(0),char(64),char(0),char(9),char(0), -char(55),char(0),char(-97),char(0),char(17),char(0),char(-94),char(0),char(17),char(0),char(-93),char(0),char(7),char(0),char(-78),char(0),char(7),char(0),char(-77),char(0), -char(7),char(0),char(-76),char(0),char(7),char(0),char(-75),char(0),char(4),char(0),char(-74),char(0),char(4),char(0),char(-73),char(0),char(49),char(0),char(22),char(0), -char(8),char(0),char(-67),char(0),char(8),char(0),char(-79),char(0),char(8),char(0),char(110),char(0),char(8),char(0),char(-66),char(0),char(8),char(0),char(112),char(0), -char(8),char(0),char(-65),char(0),char(8),char(0),char(-64),char(0),char(8),char(0),char(-63),char(0),char(8),char(0),char(-62),char(0),char(8),char(0),char(-61),char(0), -char(8),char(0),char(-60),char(0),char(8),char(0),char(-59),char(0),char(8),char(0),char(-58),char(0),char(8),char(0),char(-57),char(0),char(8),char(0),char(-56),char(0), -char(8),char(0),char(-55),char(0),char(4),char(0),char(-54),char(0),char(4),char(0),char(-53),char(0),char(4),char(0),char(-52),char(0),char(4),char(0),char(-51),char(0), -char(4),char(0),char(-50),char(0),char(0),char(0),char(37),char(0),char(51),char(0),char(22),char(0),char(7),char(0),char(-67),char(0),char(7),char(0),char(-79),char(0), -char(7),char(0),char(110),char(0),char(7),char(0),char(-66),char(0),char(7),char(0),char(112),char(0),char(7),char(0),char(-65),char(0),char(7),char(0),char(-64),char(0), -char(7),char(0),char(-63),char(0),char(7),char(0),char(-62),char(0),char(7),char(0),char(-61),char(0),char(7),char(0),char(-60),char(0),char(7),char(0),char(-59),char(0), -char(7),char(0),char(-58),char(0),char(7),char(0),char(-57),char(0),char(7),char(0),char(-56),char(0),char(7),char(0),char(-55),char(0),char(4),char(0),char(-54),char(0), -char(4),char(0),char(-53),char(0),char(4),char(0),char(-52),char(0),char(4),char(0),char(-51),char(0),char(4),char(0),char(-50),char(0),char(0),char(0),char(37),char(0), -char(65),char(0),char(4),char(0),char(7),char(0),char(-49),char(0),char(7),char(0),char(-48),char(0),char(7),char(0),char(-47),char(0),char(4),char(0),char(78),char(0), -char(66),char(0),char(10),char(0),char(65),char(0),char(-46),char(0),char(13),char(0),char(-45),char(0),char(13),char(0),char(-44),char(0),char(13),char(0),char(-43),char(0), -char(13),char(0),char(-42),char(0),char(13),char(0),char(-41),char(0),char(7),char(0),char(-121),char(0),char(7),char(0),char(-40),char(0),char(4),char(0),char(-39),char(0), -char(4),char(0),char(53),char(0),char(67),char(0),char(4),char(0),char(65),char(0),char(-46),char(0),char(4),char(0),char(-38),char(0),char(7),char(0),char(-37),char(0), -char(4),char(0),char(-36),char(0),char(68),char(0),char(4),char(0),char(13),char(0),char(-41),char(0),char(65),char(0),char(-46),char(0),char(4),char(0),char(-35),char(0), -char(7),char(0),char(-34),char(0),char(69),char(0),char(7),char(0),char(13),char(0),char(-33),char(0),char(65),char(0),char(-46),char(0),char(4),char(0),char(-32),char(0), -char(7),char(0),char(-31),char(0),char(7),char(0),char(-30),char(0),char(7),char(0),char(-29),char(0),char(4),char(0),char(53),char(0),char(70),char(0),char(6),char(0), -char(15),char(0),char(-28),char(0),char(13),char(0),char(-30),char(0),char(13),char(0),char(-27),char(0),char(56),char(0),char(-26),char(0),char(4),char(0),char(-25),char(0), -char(7),char(0),char(-29),char(0),char(71),char(0),char(26),char(0),char(4),char(0),char(-24),char(0),char(7),char(0),char(-23),char(0),char(7),char(0),char(-79),char(0), -char(7),char(0),char(-22),char(0),char(7),char(0),char(-21),char(0),char(7),char(0),char(-20),char(0),char(7),char(0),char(-19),char(0),char(7),char(0),char(-18),char(0), -char(7),char(0),char(-17),char(0),char(7),char(0),char(-16),char(0),char(7),char(0),char(-15),char(0),char(7),char(0),char(-14),char(0),char(7),char(0),char(-13),char(0), -char(7),char(0),char(-12),char(0),char(7),char(0),char(-11),char(0),char(7),char(0),char(-10),char(0),char(7),char(0),char(-9),char(0),char(7),char(0),char(-8),char(0), -char(7),char(0),char(-7),char(0),char(7),char(0),char(-6),char(0),char(7),char(0),char(-5),char(0),char(4),char(0),char(-4),char(0),char(4),char(0),char(-3),char(0), -char(4),char(0),char(-2),char(0),char(4),char(0),char(-1),char(0),char(4),char(0),char(117),char(0),char(72),char(0),char(12),char(0),char(15),char(0),char(0),char(1), -char(15),char(0),char(1),char(1),char(15),char(0),char(2),char(1),char(13),char(0),char(3),char(1),char(13),char(0),char(4),char(1),char(7),char(0),char(5),char(1), -char(4),char(0),char(6),char(1),char(4),char(0),char(7),char(1),char(4),char(0),char(8),char(1),char(4),char(0),char(9),char(1),char(7),char(0),char(-31),char(0), -char(4),char(0),char(53),char(0),char(73),char(0),char(27),char(0),char(17),char(0),char(10),char(1),char(15),char(0),char(11),char(1),char(15),char(0),char(12),char(1), -char(13),char(0),char(3),char(1),char(13),char(0),char(13),char(1),char(13),char(0),char(14),char(1),char(13),char(0),char(15),char(1),char(13),char(0),char(16),char(1), -char(13),char(0),char(17),char(1),char(4),char(0),char(18),char(1),char(7),char(0),char(19),char(1),char(4),char(0),char(20),char(1),char(4),char(0),char(21),char(1), -char(4),char(0),char(22),char(1),char(7),char(0),char(23),char(1),char(7),char(0),char(24),char(1),char(4),char(0),char(25),char(1),char(4),char(0),char(26),char(1), -char(7),char(0),char(27),char(1),char(7),char(0),char(28),char(1),char(7),char(0),char(29),char(1),char(7),char(0),char(30),char(1),char(7),char(0),char(31),char(1), -char(7),char(0),char(32),char(1),char(4),char(0),char(33),char(1),char(4),char(0),char(34),char(1),char(4),char(0),char(35),char(1),char(74),char(0),char(12),char(0), -char(9),char(0),char(36),char(1),char(9),char(0),char(37),char(1),char(13),char(0),char(38),char(1),char(7),char(0),char(39),char(1),char(7),char(0),char(-63),char(0), -char(7),char(0),char(40),char(1),char(4),char(0),char(41),char(1),char(13),char(0),char(42),char(1),char(4),char(0),char(43),char(1),char(4),char(0),char(44),char(1), -char(4),char(0),char(45),char(1),char(4),char(0),char(53),char(0),char(75),char(0),char(19),char(0),char(47),char(0),char(125),char(0),char(72),char(0),char(46),char(1), -char(65),char(0),char(47),char(1),char(66),char(0),char(48),char(1),char(67),char(0),char(49),char(1),char(68),char(0),char(50),char(1),char(69),char(0),char(51),char(1), -char(70),char(0),char(52),char(1),char(73),char(0),char(53),char(1),char(74),char(0),char(54),char(1),char(4),char(0),char(55),char(1),char(4),char(0),char(21),char(1), -char(4),char(0),char(56),char(1),char(4),char(0),char(57),char(1),char(4),char(0),char(58),char(1),char(4),char(0),char(59),char(1),char(4),char(0),char(60),char(1), -char(4),char(0),char(61),char(1),char(71),char(0),char(62),char(1),}; -int b3s_bulletDNAlen64= sizeof(b3s_bulletDNAstr64); +char b3s_bulletDNAstr[] = { + char(83), + char(68), + char(78), + char(65), + char(78), + char(65), + char(77), + char(69), + char(63), + char(1), + char(0), + char(0), + char(109), + char(95), + char(115), + char(105), + char(122), + char(101), + char(0), + char(109), + char(95), + char(99), + char(97), + char(112), + char(97), + char(99), + char(105), + char(116), + char(121), + char(0), + char(42), + char(109), + char(95), + char(100), + char(97), + char(116), + char(97), + char(0), + char(109), + char(95), + char(99), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(83), + char(104), + char(97), + char(112), + char(101), + char(115), + char(0), + char(109), + char(95), + char(99), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(79), + char(98), + char(106), + char(101), + char(99), + char(116), + char(115), + char(0), + char(109), + char(95), + char(99), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(115), + char(0), + char(42), + char(102), + char(105), + char(114), + char(115), + char(116), + char(0), + char(42), + char(108), + char(97), + char(115), + char(116), + char(0), + char(109), + char(95), + char(102), + char(108), + char(111), + char(97), + char(116), + char(115), + char(91), + char(52), + char(93), + char(0), + char(109), + char(95), + char(101), + char(108), + char(91), + char(51), + char(93), + char(0), + char(109), + char(95), + char(98), + char(97), + char(115), + char(105), + char(115), + char(0), + char(109), + char(95), + char(111), + char(114), + char(105), + char(103), + char(105), + char(110), + char(0), + char(109), + char(95), + char(114), + char(111), + char(111), + char(116), + char(78), + char(111), + char(100), + char(101), + char(73), + char(110), + char(100), + char(101), + char(120), + char(0), + char(109), + char(95), + char(115), + char(117), + char(98), + char(116), + char(114), + char(101), + char(101), + char(83), + char(105), + char(122), + char(101), + char(0), + char(109), + char(95), + char(113), + char(117), + char(97), + char(110), + char(116), + char(105), + char(122), + char(101), + char(100), + char(65), + char(97), + char(98), + char(98), + char(77), + char(105), + char(110), + char(91), + char(51), + char(93), + char(0), + char(109), + char(95), + char(113), + char(117), + char(97), + char(110), + char(116), + char(105), + char(122), + char(101), + char(100), + char(65), + char(97), + char(98), + char(98), + char(77), + char(97), + char(120), + char(91), + char(51), + char(93), + char(0), + char(109), + char(95), + char(97), + char(97), + char(98), + char(98), + char(77), + char(105), + char(110), + char(79), + char(114), + char(103), + char(0), + char(109), + char(95), + char(97), + char(97), + char(98), + char(98), + char(77), + char(97), + char(120), + char(79), + char(114), + char(103), + char(0), + char(109), + char(95), + char(101), + char(115), + char(99), + char(97), + char(112), + char(101), + char(73), + char(110), + char(100), + char(101), + char(120), + char(0), + char(109), + char(95), + char(115), + char(117), + char(98), + char(80), + char(97), + char(114), + char(116), + char(0), + char(109), + char(95), + char(116), + char(114), + char(105), + char(97), + char(110), + char(103), + char(108), + char(101), + char(73), + char(110), + char(100), + char(101), + char(120), + char(0), + char(109), + char(95), + char(112), + char(97), + char(100), + char(91), + char(52), + char(93), + char(0), + char(109), + char(95), + char(101), + char(115), + char(99), + char(97), + char(112), + char(101), + char(73), + char(110), + char(100), + char(101), + char(120), + char(79), + char(114), + char(84), + char(114), + char(105), + char(97), + char(110), + char(103), + char(108), + char(101), + char(73), + char(110), + char(100), + char(101), + char(120), + char(0), + char(109), + char(95), + char(98), + char(118), + char(104), + char(65), + char(97), + char(98), + char(98), + char(77), + char(105), + char(110), + char(0), + char(109), + char(95), + char(98), + char(118), + char(104), + char(65), + char(97), + char(98), + char(98), + char(77), + char(97), + char(120), + char(0), + char(109), + char(95), + char(98), + char(118), + char(104), + char(81), + char(117), + char(97), + char(110), + char(116), + char(105), + char(122), + char(97), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(99), + char(117), + char(114), + char(78), + char(111), + char(100), + char(101), + char(73), + char(110), + char(100), + char(101), + char(120), + char(0), + char(109), + char(95), + char(117), + char(115), + char(101), + char(81), + char(117), + char(97), + char(110), + char(116), + char(105), + char(122), + char(97), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(67), + char(111), + char(110), + char(116), + char(105), + char(103), + char(117), + char(111), + char(117), + char(115), + char(76), + char(101), + char(97), + char(102), + char(78), + char(111), + char(100), + char(101), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(81), + char(117), + char(97), + char(110), + char(116), + char(105), + char(122), + char(101), + char(100), + char(67), + char(111), + char(110), + char(116), + char(105), + char(103), + char(117), + char(111), + char(117), + char(115), + char(78), + char(111), + char(100), + char(101), + char(115), + char(0), + char(42), + char(109), + char(95), + char(99), + char(111), + char(110), + char(116), + char(105), + char(103), + char(117), + char(111), + char(117), + char(115), + char(78), + char(111), + char(100), + char(101), + char(115), + char(80), + char(116), + char(114), + char(0), + char(42), + char(109), + char(95), + char(113), + char(117), + char(97), + char(110), + char(116), + char(105), + char(122), + char(101), + char(100), + char(67), + char(111), + char(110), + char(116), + char(105), + char(103), + char(117), + char(111), + char(117), + char(115), + char(78), + char(111), + char(100), + char(101), + char(115), + char(80), + char(116), + char(114), + char(0), + char(42), + char(109), + char(95), + char(115), + char(117), + char(98), + char(84), + char(114), + char(101), + char(101), + char(73), + char(110), + char(102), + char(111), + char(80), + char(116), + char(114), + char(0), + char(109), + char(95), + char(116), + char(114), + char(97), + char(118), + char(101), + char(114), + char(115), + char(97), + char(108), + char(77), + char(111), + char(100), + char(101), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(83), + char(117), + char(98), + char(116), + char(114), + char(101), + char(101), + char(72), + char(101), + char(97), + char(100), + char(101), + char(114), + char(115), + char(0), + char(42), + char(109), + char(95), + char(110), + char(97), + char(109), + char(101), + char(0), + char(109), + char(95), + char(115), + char(104), + char(97), + char(112), + char(101), + char(84), + char(121), + char(112), + char(101), + char(0), + char(109), + char(95), + char(112), + char(97), + char(100), + char(100), + char(105), + char(110), + char(103), + char(91), + char(52), + char(93), + char(0), + char(109), + char(95), + char(99), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(109), + char(95), + char(108), + char(111), + char(99), + char(97), + char(108), + char(83), + char(99), + char(97), + char(108), + char(105), + char(110), + char(103), + char(0), + char(109), + char(95), + char(112), + char(108), + char(97), + char(110), + char(101), + char(78), + char(111), + char(114), + char(109), + char(97), + char(108), + char(0), + char(109), + char(95), + char(112), + char(108), + char(97), + char(110), + char(101), + char(67), + char(111), + char(110), + char(115), + char(116), + char(97), + char(110), + char(116), + char(0), + char(109), + char(95), + char(105), + char(109), + char(112), + char(108), + char(105), + char(99), + char(105), + char(116), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(105), + char(109), + char(101), + char(110), + char(115), + char(105), + char(111), + char(110), + char(115), + char(0), + char(109), + char(95), + char(99), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(77), + char(97), + char(114), + char(103), + char(105), + char(110), + char(0), + char(109), + char(95), + char(112), + char(97), + char(100), + char(100), + char(105), + char(110), + char(103), + char(0), + char(109), + char(95), + char(112), + char(111), + char(115), + char(0), + char(109), + char(95), + char(114), + char(97), + char(100), + char(105), + char(117), + char(115), + char(0), + char(109), + char(95), + char(99), + char(111), + char(110), + char(118), + char(101), + char(120), + char(73), + char(110), + char(116), + char(101), + char(114), + char(110), + char(97), + char(108), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(42), + char(109), + char(95), + char(108), + char(111), + char(99), + char(97), + char(108), + char(80), + char(111), + char(115), + char(105), + char(116), + char(105), + char(111), + char(110), + char(65), + char(114), + char(114), + char(97), + char(121), + char(80), + char(116), + char(114), + char(0), + char(109), + char(95), + char(108), + char(111), + char(99), + char(97), + char(108), + char(80), + char(111), + char(115), + char(105), + char(116), + char(105), + char(111), + char(110), + char(65), + char(114), + char(114), + char(97), + char(121), + char(83), + char(105), + char(122), + char(101), + char(0), + char(109), + char(95), + char(118), + char(97), + char(108), + char(117), + char(101), + char(0), + char(109), + char(95), + char(112), + char(97), + char(100), + char(91), + char(50), + char(93), + char(0), + char(109), + char(95), + char(118), + char(97), + char(108), + char(117), + char(101), + char(115), + char(91), + char(51), + char(93), + char(0), + char(109), + char(95), + char(112), + char(97), + char(100), + char(0), + char(42), + char(109), + char(95), + char(118), + char(101), + char(114), + char(116), + char(105), + char(99), + char(101), + char(115), + char(51), + char(102), + char(0), + char(42), + char(109), + char(95), + char(118), + char(101), + char(114), + char(116), + char(105), + char(99), + char(101), + char(115), + char(51), + char(100), + char(0), + char(42), + char(109), + char(95), + char(105), + char(110), + char(100), + char(105), + char(99), + char(101), + char(115), + char(51), + char(50), + char(0), + char(42), + char(109), + char(95), + char(51), + char(105), + char(110), + char(100), + char(105), + char(99), + char(101), + char(115), + char(49), + char(54), + char(0), + char(42), + char(109), + char(95), + char(51), + char(105), + char(110), + char(100), + char(105), + char(99), + char(101), + char(115), + char(56), + char(0), + char(42), + char(109), + char(95), + char(105), + char(110), + char(100), + char(105), + char(99), + char(101), + char(115), + char(49), + char(54), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(84), + char(114), + char(105), + char(97), + char(110), + char(103), + char(108), + char(101), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(86), + char(101), + char(114), + char(116), + char(105), + char(99), + char(101), + char(115), + char(0), + char(42), + char(109), + char(95), + char(109), + char(101), + char(115), + char(104), + char(80), + char(97), + char(114), + char(116), + char(115), + char(80), + char(116), + char(114), + char(0), + char(109), + char(95), + char(115), + char(99), + char(97), + char(108), + char(105), + char(110), + char(103), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(77), + char(101), + char(115), + char(104), + char(80), + char(97), + char(114), + char(116), + char(115), + char(0), + char(109), + char(95), + char(109), + char(101), + char(115), + char(104), + char(73), + char(110), + char(116), + char(101), + char(114), + char(102), + char(97), + char(99), + char(101), + char(0), + char(42), + char(109), + char(95), + char(113), + char(117), + char(97), + char(110), + char(116), + char(105), + char(122), + char(101), + char(100), + char(70), + char(108), + char(111), + char(97), + char(116), + char(66), + char(118), + char(104), + char(0), + char(42), + char(109), + char(95), + char(113), + char(117), + char(97), + char(110), + char(116), + char(105), + char(122), + char(101), + char(100), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(66), + char(118), + char(104), + char(0), + char(42), + char(109), + char(95), + char(116), + char(114), + char(105), + char(97), + char(110), + char(103), + char(108), + char(101), + char(73), + char(110), + char(102), + char(111), + char(77), + char(97), + char(112), + char(0), + char(109), + char(95), + char(112), + char(97), + char(100), + char(51), + char(91), + char(52), + char(93), + char(0), + char(109), + char(95), + char(116), + char(114), + char(105), + char(109), + char(101), + char(115), + char(104), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(109), + char(95), + char(116), + char(114), + char(97), + char(110), + char(115), + char(102), + char(111), + char(114), + char(109), + char(0), + char(42), + char(109), + char(95), + char(99), + char(104), + char(105), + char(108), + char(100), + char(83), + char(104), + char(97), + char(112), + char(101), + char(0), + char(109), + char(95), + char(99), + char(104), + char(105), + char(108), + char(100), + char(83), + char(104), + char(97), + char(112), + char(101), + char(84), + char(121), + char(112), + char(101), + char(0), + char(109), + char(95), + char(99), + char(104), + char(105), + char(108), + char(100), + char(77), + char(97), + char(114), + char(103), + char(105), + char(110), + char(0), + char(42), + char(109), + char(95), + char(99), + char(104), + char(105), + char(108), + char(100), + char(83), + char(104), + char(97), + char(112), + char(101), + char(80), + char(116), + char(114), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(67), + char(104), + char(105), + char(108), + char(100), + char(83), + char(104), + char(97), + char(112), + char(101), + char(115), + char(0), + char(109), + char(95), + char(117), + char(112), + char(65), + char(120), + char(105), + char(115), + char(0), + char(109), + char(95), + char(102), + char(108), + char(97), + char(103), + char(115), + char(0), + char(109), + char(95), + char(101), + char(100), + char(103), + char(101), + char(86), + char(48), + char(86), + char(49), + char(65), + char(110), + char(103), + char(108), + char(101), + char(0), + char(109), + char(95), + char(101), + char(100), + char(103), + char(101), + char(86), + char(49), + char(86), + char(50), + char(65), + char(110), + char(103), + char(108), + char(101), + char(0), + char(109), + char(95), + char(101), + char(100), + char(103), + char(101), + char(86), + char(50), + char(86), + char(48), + char(65), + char(110), + char(103), + char(108), + char(101), + char(0), + char(42), + char(109), + char(95), + char(104), + char(97), + char(115), + char(104), + char(84), + char(97), + char(98), + char(108), + char(101), + char(80), + char(116), + char(114), + char(0), + char(42), + char(109), + char(95), + char(110), + char(101), + char(120), + char(116), + char(80), + char(116), + char(114), + char(0), + char(42), + char(109), + char(95), + char(118), + char(97), + char(108), + char(117), + char(101), + char(65), + char(114), + char(114), + char(97), + char(121), + char(80), + char(116), + char(114), + char(0), + char(42), + char(109), + char(95), + char(107), + char(101), + char(121), + char(65), + char(114), + char(114), + char(97), + char(121), + char(80), + char(116), + char(114), + char(0), + char(109), + char(95), + char(99), + char(111), + char(110), + char(118), + char(101), + char(120), + char(69), + char(112), + char(115), + char(105), + char(108), + char(111), + char(110), + char(0), + char(109), + char(95), + char(112), + char(108), + char(97), + char(110), + char(97), + char(114), + char(69), + char(112), + char(115), + char(105), + char(108), + char(111), + char(110), + char(0), + char(109), + char(95), + char(101), + char(113), + char(117), + char(97), + char(108), + char(86), + char(101), + char(114), + char(116), + char(101), + char(120), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(0), + char(109), + char(95), + char(101), + char(100), + char(103), + char(101), + char(68), + char(105), + char(115), + char(116), + char(97), + char(110), + char(99), + char(101), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(0), + char(109), + char(95), + char(122), + char(101), + char(114), + char(111), + char(65), + char(114), + char(101), + char(97), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(0), + char(109), + char(95), + char(110), + char(101), + char(120), + char(116), + char(83), + char(105), + char(122), + char(101), + char(0), + char(109), + char(95), + char(104), + char(97), + char(115), + char(104), + char(84), + char(97), + char(98), + char(108), + char(101), + char(83), + char(105), + char(122), + char(101), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(86), + char(97), + char(108), + char(117), + char(101), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(75), + char(101), + char(121), + char(115), + char(0), + char(109), + char(95), + char(103), + char(105), + char(109), + char(112), + char(97), + char(99), + char(116), + char(83), + char(117), + char(98), + char(84), + char(121), + char(112), + char(101), + char(0), + char(42), + char(109), + char(95), + char(117), + char(110), + char(115), + char(99), + char(97), + char(108), + char(101), + char(100), + char(80), + char(111), + char(105), + char(110), + char(116), + char(115), + char(70), + char(108), + char(111), + char(97), + char(116), + char(80), + char(116), + char(114), + char(0), + char(42), + char(109), + char(95), + char(117), + char(110), + char(115), + char(99), + char(97), + char(108), + char(101), + char(100), + char(80), + char(111), + char(105), + char(110), + char(116), + char(115), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(80), + char(116), + char(114), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(85), + char(110), + char(115), + char(99), + char(97), + char(108), + char(101), + char(100), + char(80), + char(111), + char(105), + char(110), + char(116), + char(115), + char(0), + char(109), + char(95), + char(112), + char(97), + char(100), + char(100), + char(105), + char(110), + char(103), + char(51), + char(91), + char(52), + char(93), + char(0), + char(42), + char(109), + char(95), + char(98), + char(114), + char(111), + char(97), + char(100), + char(112), + char(104), + char(97), + char(115), + char(101), + char(72), + char(97), + char(110), + char(100), + char(108), + char(101), + char(0), + char(42), + char(109), + char(95), + char(99), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(83), + char(104), + char(97), + char(112), + char(101), + char(0), + char(42), + char(109), + char(95), + char(114), + char(111), + char(111), + char(116), + char(67), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(83), + char(104), + char(97), + char(112), + char(101), + char(0), + char(109), + char(95), + char(119), + char(111), + char(114), + char(108), + char(100), + char(84), + char(114), + char(97), + char(110), + char(115), + char(102), + char(111), + char(114), + char(109), + char(0), + char(109), + char(95), + char(105), + char(110), + char(116), + char(101), + char(114), + char(112), + char(111), + char(108), + char(97), + char(116), + char(105), + char(111), + char(110), + char(87), + char(111), + char(114), + char(108), + char(100), + char(84), + char(114), + char(97), + char(110), + char(115), + char(102), + char(111), + char(114), + char(109), + char(0), + char(109), + char(95), + char(105), + char(110), + char(116), + char(101), + char(114), + char(112), + char(111), + char(108), + char(97), + char(116), + char(105), + char(111), + char(110), + char(76), + char(105), + char(110), + char(101), + char(97), + char(114), + char(86), + char(101), + char(108), + char(111), + char(99), + char(105), + char(116), + char(121), + char(0), + char(109), + char(95), + char(105), + char(110), + char(116), + char(101), + char(114), + char(112), + char(111), + char(108), + char(97), + char(116), + char(105), + char(111), + char(110), + char(65), + char(110), + char(103), + char(117), + char(108), + char(97), + char(114), + char(86), + char(101), + char(108), + char(111), + char(99), + char(105), + char(116), + char(121), + char(0), + char(109), + char(95), + char(97), + char(110), + char(105), + char(115), + char(111), + char(116), + char(114), + char(111), + char(112), + char(105), + char(99), + char(70), + char(114), + char(105), + char(99), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(99), + char(111), + char(110), + char(116), + char(97), + char(99), + char(116), + char(80), + char(114), + char(111), + char(99), + char(101), + char(115), + char(115), + char(105), + char(110), + char(103), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(0), + char(109), + char(95), + char(100), + char(101), + char(97), + char(99), + char(116), + char(105), + char(118), + char(97), + char(116), + char(105), + char(111), + char(110), + char(84), + char(105), + char(109), + char(101), + char(0), + char(109), + char(95), + char(102), + char(114), + char(105), + char(99), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(114), + char(111), + char(108), + char(108), + char(105), + char(110), + char(103), + char(70), + char(114), + char(105), + char(99), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(114), + char(101), + char(115), + char(116), + char(105), + char(116), + char(117), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(104), + char(105), + char(116), + char(70), + char(114), + char(97), + char(99), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(99), + char(99), + char(100), + char(83), + char(119), + char(101), + char(112), + char(116), + char(83), + char(112), + char(104), + char(101), + char(114), + char(101), + char(82), + char(97), + char(100), + char(105), + char(117), + char(115), + char(0), + char(109), + char(95), + char(99), + char(99), + char(100), + char(77), + char(111), + char(116), + char(105), + char(111), + char(110), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(0), + char(109), + char(95), + char(104), + char(97), + char(115), + char(65), + char(110), + char(105), + char(115), + char(111), + char(116), + char(114), + char(111), + char(112), + char(105), + char(99), + char(70), + char(114), + char(105), + char(99), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(99), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(70), + char(108), + char(97), + char(103), + char(115), + char(0), + char(109), + char(95), + char(105), + char(115), + char(108), + char(97), + char(110), + char(100), + char(84), + char(97), + char(103), + char(49), + char(0), + char(109), + char(95), + char(99), + char(111), + char(109), + char(112), + char(97), + char(110), + char(105), + char(111), + char(110), + char(73), + char(100), + char(0), + char(109), + char(95), + char(97), + char(99), + char(116), + char(105), + char(118), + char(97), + char(116), + char(105), + char(111), + char(110), + char(83), + char(116), + char(97), + char(116), + char(101), + char(49), + char(0), + char(109), + char(95), + char(105), + char(110), + char(116), + char(101), + char(114), + char(110), + char(97), + char(108), + char(84), + char(121), + char(112), + char(101), + char(0), + char(109), + char(95), + char(99), + char(104), + char(101), + char(99), + char(107), + char(67), + char(111), + char(108), + char(108), + char(105), + char(100), + char(101), + char(87), + char(105), + char(116), + char(104), + char(0), + char(109), + char(95), + char(115), + char(111), + char(108), + char(118), + char(101), + char(114), + char(73), + char(110), + char(102), + char(111), + char(0), + char(109), + char(95), + char(103), + char(114), + char(97), + char(118), + char(105), + char(116), + char(121), + char(0), + char(109), + char(95), + char(99), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(79), + char(98), + char(106), + char(101), + char(99), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(109), + char(95), + char(105), + char(110), + char(118), + char(73), + char(110), + char(101), + char(114), + char(116), + char(105), + char(97), + char(84), + char(101), + char(110), + char(115), + char(111), + char(114), + char(87), + char(111), + char(114), + char(108), + char(100), + char(0), + char(109), + char(95), + char(108), + char(105), + char(110), + char(101), + char(97), + char(114), + char(86), + char(101), + char(108), + char(111), + char(99), + char(105), + char(116), + char(121), + char(0), + char(109), + char(95), + char(97), + char(110), + char(103), + char(117), + char(108), + char(97), + char(114), + char(86), + char(101), + char(108), + char(111), + char(99), + char(105), + char(116), + char(121), + char(0), + char(109), + char(95), + char(97), + char(110), + char(103), + char(117), + char(108), + char(97), + char(114), + char(70), + char(97), + char(99), + char(116), + char(111), + char(114), + char(0), + char(109), + char(95), + char(108), + char(105), + char(110), + char(101), + char(97), + char(114), + char(70), + char(97), + char(99), + char(116), + char(111), + char(114), + char(0), + char(109), + char(95), + char(103), + char(114), + char(97), + char(118), + char(105), + char(116), + char(121), + char(95), + char(97), + char(99), + char(99), + char(101), + char(108), + char(101), + char(114), + char(97), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(105), + char(110), + char(118), + char(73), + char(110), + char(101), + char(114), + char(116), + char(105), + char(97), + char(76), + char(111), + char(99), + char(97), + char(108), + char(0), + char(109), + char(95), + char(116), + char(111), + char(116), + char(97), + char(108), + char(70), + char(111), + char(114), + char(99), + char(101), + char(0), + char(109), + char(95), + char(116), + char(111), + char(116), + char(97), + char(108), + char(84), + char(111), + char(114), + char(113), + char(117), + char(101), + char(0), + char(109), + char(95), + char(105), + char(110), + char(118), + char(101), + char(114), + char(115), + char(101), + char(77), + char(97), + char(115), + char(115), + char(0), + char(109), + char(95), + char(108), + char(105), + char(110), + char(101), + char(97), + char(114), + char(68), + char(97), + char(109), + char(112), + char(105), + char(110), + char(103), + char(0), + char(109), + char(95), + char(97), + char(110), + char(103), + char(117), + char(108), + char(97), + char(114), + char(68), + char(97), + char(109), + char(112), + char(105), + char(110), + char(103), + char(0), + char(109), + char(95), + char(97), + char(100), + char(100), + char(105), + char(116), + char(105), + char(111), + char(110), + char(97), + char(108), + char(68), + char(97), + char(109), + char(112), + char(105), + char(110), + char(103), + char(70), + char(97), + char(99), + char(116), + char(111), + char(114), + char(0), + char(109), + char(95), + char(97), + char(100), + char(100), + char(105), + char(116), + char(105), + char(111), + char(110), + char(97), + char(108), + char(76), + char(105), + char(110), + char(101), + char(97), + char(114), + char(68), + char(97), + char(109), + char(112), + char(105), + char(110), + char(103), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(83), + char(113), + char(114), + char(0), + char(109), + char(95), + char(97), + char(100), + char(100), + char(105), + char(116), + char(105), + char(111), + char(110), + char(97), + char(108), + char(65), + char(110), + char(103), + char(117), + char(108), + char(97), + char(114), + char(68), + char(97), + char(109), + char(112), + char(105), + char(110), + char(103), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(83), + char(113), + char(114), + char(0), + char(109), + char(95), + char(97), + char(100), + char(100), + char(105), + char(116), + char(105), + char(111), + char(110), + char(97), + char(108), + char(65), + char(110), + char(103), + char(117), + char(108), + char(97), + char(114), + char(68), + char(97), + char(109), + char(112), + char(105), + char(110), + char(103), + char(70), + char(97), + char(99), + char(116), + char(111), + char(114), + char(0), + char(109), + char(95), + char(108), + char(105), + char(110), + char(101), + char(97), + char(114), + char(83), + char(108), + char(101), + char(101), + char(112), + char(105), + char(110), + char(103), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(0), + char(109), + char(95), + char(97), + char(110), + char(103), + char(117), + char(108), + char(97), + char(114), + char(83), + char(108), + char(101), + char(101), + char(112), + char(105), + char(110), + char(103), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(0), + char(109), + char(95), + char(97), + char(100), + char(100), + char(105), + char(116), + char(105), + char(111), + char(110), + char(97), + char(108), + char(68), + char(97), + char(109), + char(112), + char(105), + char(110), + char(103), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(82), + char(111), + char(119), + char(115), + char(0), + char(110), + char(117), + char(98), + char(0), + char(42), + char(109), + char(95), + char(114), + char(98), + char(65), + char(0), + char(42), + char(109), + char(95), + char(114), + char(98), + char(66), + char(0), + char(109), + char(95), + char(111), + char(98), + char(106), + char(101), + char(99), + char(116), + char(84), + char(121), + char(112), + char(101), + char(0), + char(109), + char(95), + char(117), + char(115), + char(101), + char(114), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(84), + char(121), + char(112), + char(101), + char(0), + char(109), + char(95), + char(117), + char(115), + char(101), + char(114), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(73), + char(100), + char(0), + char(109), + char(95), + char(110), + char(101), + char(101), + char(100), + char(115), + char(70), + char(101), + char(101), + char(100), + char(98), + char(97), + char(99), + char(107), + char(0), + char(109), + char(95), + char(97), + char(112), + char(112), + char(108), + char(105), + char(101), + char(100), + char(73), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(0), + char(109), + char(95), + char(100), + char(98), + char(103), + char(68), + char(114), + char(97), + char(119), + char(83), + char(105), + char(122), + char(101), + char(0), + char(109), + char(95), + char(100), + char(105), + char(115), + char(97), + char(98), + char(108), + char(101), + char(67), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(115), + char(66), + char(101), + char(116), + char(119), + char(101), + char(101), + char(110), + char(76), + char(105), + char(110), + char(107), + char(101), + char(100), + char(66), + char(111), + char(100), + char(105), + char(101), + char(115), + char(0), + char(109), + char(95), + char(111), + char(118), + char(101), + char(114), + char(114), + char(105), + char(100), + char(101), + char(78), + char(117), + char(109), + char(83), + char(111), + char(108), + char(118), + char(101), + char(114), + char(73), + char(116), + char(101), + char(114), + char(97), + char(116), + char(105), + char(111), + char(110), + char(115), + char(0), + char(109), + char(95), + char(98), + char(114), + char(101), + char(97), + char(107), + char(105), + char(110), + char(103), + char(73), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(0), + char(109), + char(95), + char(105), + char(115), + char(69), + char(110), + char(97), + char(98), + char(108), + char(101), + char(100), + char(0), + char(109), + char(95), + char(116), + char(121), + char(112), + char(101), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(109), + char(95), + char(112), + char(105), + char(118), + char(111), + char(116), + char(73), + char(110), + char(65), + char(0), + char(109), + char(95), + char(112), + char(105), + char(118), + char(111), + char(116), + char(73), + char(110), + char(66), + char(0), + char(109), + char(95), + char(114), + char(98), + char(65), + char(70), + char(114), + char(97), + char(109), + char(101), + char(0), + char(109), + char(95), + char(114), + char(98), + char(66), + char(70), + char(114), + char(97), + char(109), + char(101), + char(0), + char(109), + char(95), + char(117), + char(115), + char(101), + char(82), + char(101), + char(102), + char(101), + char(114), + char(101), + char(110), + char(99), + char(101), + char(70), + char(114), + char(97), + char(109), + char(101), + char(65), + char(0), + char(109), + char(95), + char(97), + char(110), + char(103), + char(117), + char(108), + char(97), + char(114), + char(79), + char(110), + char(108), + char(121), + char(0), + char(109), + char(95), + char(101), + char(110), + char(97), + char(98), + char(108), + char(101), + char(65), + char(110), + char(103), + char(117), + char(108), + char(97), + char(114), + char(77), + char(111), + char(116), + char(111), + char(114), + char(0), + char(109), + char(95), + char(109), + char(111), + char(116), + char(111), + char(114), + char(84), + char(97), + char(114), + char(103), + char(101), + char(116), + char(86), + char(101), + char(108), + char(111), + char(99), + char(105), + char(116), + char(121), + char(0), + char(109), + char(95), + char(109), + char(97), + char(120), + char(77), + char(111), + char(116), + char(111), + char(114), + char(73), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(0), + char(109), + char(95), + char(108), + char(111), + char(119), + char(101), + char(114), + char(76), + char(105), + char(109), + char(105), + char(116), + char(0), + char(109), + char(95), + char(117), + char(112), + char(112), + char(101), + char(114), + char(76), + char(105), + char(109), + char(105), + char(116), + char(0), + char(109), + char(95), + char(108), + char(105), + char(109), + char(105), + char(116), + char(83), + char(111), + char(102), + char(116), + char(110), + char(101), + char(115), + char(115), + char(0), + char(109), + char(95), + char(98), + char(105), + char(97), + char(115), + char(70), + char(97), + char(99), + char(116), + char(111), + char(114), + char(0), + char(109), + char(95), + char(114), + char(101), + char(108), + char(97), + char(120), + char(97), + char(116), + char(105), + char(111), + char(110), + char(70), + char(97), + char(99), + char(116), + char(111), + char(114), + char(0), + char(109), + char(95), + char(115), + char(119), + char(105), + char(110), + char(103), + char(83), + char(112), + char(97), + char(110), + char(49), + char(0), + char(109), + char(95), + char(115), + char(119), + char(105), + char(110), + char(103), + char(83), + char(112), + char(97), + char(110), + char(50), + char(0), + char(109), + char(95), + char(116), + char(119), + char(105), + char(115), + char(116), + char(83), + char(112), + char(97), + char(110), + char(0), + char(109), + char(95), + char(100), + char(97), + char(109), + char(112), + char(105), + char(110), + char(103), + char(0), + char(109), + char(95), + char(108), + char(105), + char(110), + char(101), + char(97), + char(114), + char(85), + char(112), + char(112), + char(101), + char(114), + char(76), + char(105), + char(109), + char(105), + char(116), + char(0), + char(109), + char(95), + char(108), + char(105), + char(110), + char(101), + char(97), + char(114), + char(76), + char(111), + char(119), + char(101), + char(114), + char(76), + char(105), + char(109), + char(105), + char(116), + char(0), + char(109), + char(95), + char(97), + char(110), + char(103), + char(117), + char(108), + char(97), + char(114), + char(85), + char(112), + char(112), + char(101), + char(114), + char(76), + char(105), + char(109), + char(105), + char(116), + char(0), + char(109), + char(95), + char(97), + char(110), + char(103), + char(117), + char(108), + char(97), + char(114), + char(76), + char(111), + char(119), + char(101), + char(114), + char(76), + char(105), + char(109), + char(105), + char(116), + char(0), + char(109), + char(95), + char(117), + char(115), + char(101), + char(76), + char(105), + char(110), + char(101), + char(97), + char(114), + char(82), + char(101), + char(102), + char(101), + char(114), + char(101), + char(110), + char(99), + char(101), + char(70), + char(114), + char(97), + char(109), + char(101), + char(65), + char(0), + char(109), + char(95), + char(117), + char(115), + char(101), + char(79), + char(102), + char(102), + char(115), + char(101), + char(116), + char(70), + char(111), + char(114), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(70), + char(114), + char(97), + char(109), + char(101), + char(0), + char(109), + char(95), + char(54), + char(100), + char(111), + char(102), + char(68), + char(97), + char(116), + char(97), + char(0), + char(109), + char(95), + char(115), + char(112), + char(114), + char(105), + char(110), + char(103), + char(69), + char(110), + char(97), + char(98), + char(108), + char(101), + char(100), + char(91), + char(54), + char(93), + char(0), + char(109), + char(95), + char(101), + char(113), + char(117), + char(105), + char(108), + char(105), + char(98), + char(114), + char(105), + char(117), + char(109), + char(80), + char(111), + char(105), + char(110), + char(116), + char(91), + char(54), + char(93), + char(0), + char(109), + char(95), + char(115), + char(112), + char(114), + char(105), + char(110), + char(103), + char(83), + char(116), + char(105), + char(102), + char(102), + char(110), + char(101), + char(115), + char(115), + char(91), + char(54), + char(93), + char(0), + char(109), + char(95), + char(115), + char(112), + char(114), + char(105), + char(110), + char(103), + char(68), + char(97), + char(109), + char(112), + char(105), + char(110), + char(103), + char(91), + char(54), + char(93), + char(0), + char(109), + char(95), + char(116), + char(97), + char(117), + char(0), + char(109), + char(95), + char(116), + char(105), + char(109), + char(101), + char(83), + char(116), + char(101), + char(112), + char(0), + char(109), + char(95), + char(109), + char(97), + char(120), + char(69), + char(114), + char(114), + char(111), + char(114), + char(82), + char(101), + char(100), + char(117), + char(99), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(115), + char(111), + char(114), + char(0), + char(109), + char(95), + char(101), + char(114), + char(112), + char(0), + char(109), + char(95), + char(101), + char(114), + char(112), + char(50), + char(0), + char(109), + char(95), + char(103), + char(108), + char(111), + char(98), + char(97), + char(108), + char(67), + char(102), + char(109), + char(0), + char(109), + char(95), + char(115), + char(112), + char(108), + char(105), + char(116), + char(73), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(80), + char(101), + char(110), + char(101), + char(116), + char(114), + char(97), + char(116), + char(105), + char(111), + char(110), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(0), + char(109), + char(95), + char(115), + char(112), + char(108), + char(105), + char(116), + char(73), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(84), + char(117), + char(114), + char(110), + char(69), + char(114), + char(112), + char(0), + char(109), + char(95), + char(108), + char(105), + char(110), + char(101), + char(97), + char(114), + char(83), + char(108), + char(111), + char(112), + char(0), + char(109), + char(95), + char(119), + char(97), + char(114), + char(109), + char(115), + char(116), + char(97), + char(114), + char(116), + char(105), + char(110), + char(103), + char(70), + char(97), + char(99), + char(116), + char(111), + char(114), + char(0), + char(109), + char(95), + char(109), + char(97), + char(120), + char(71), + char(121), + char(114), + char(111), + char(115), + char(99), + char(111), + char(112), + char(105), + char(99), + char(70), + char(111), + char(114), + char(99), + char(101), + char(0), + char(109), + char(95), + char(115), + char(105), + char(110), + char(103), + char(108), + char(101), + char(65), + char(120), + char(105), + char(115), + char(82), + char(111), + char(108), + char(108), + char(105), + char(110), + char(103), + char(70), + char(114), + char(105), + char(99), + char(116), + char(105), + char(111), + char(110), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(73), + char(116), + char(101), + char(114), + char(97), + char(116), + char(105), + char(111), + char(110), + char(115), + char(0), + char(109), + char(95), + char(115), + char(111), + char(108), + char(118), + char(101), + char(114), + char(77), + char(111), + char(100), + char(101), + char(0), + char(109), + char(95), + char(114), + char(101), + char(115), + char(116), + char(105), + char(110), + char(103), + char(67), + char(111), + char(110), + char(116), + char(97), + char(99), + char(116), + char(82), + char(101), + char(115), + char(116), + char(105), + char(116), + char(117), + char(116), + char(105), + char(111), + char(110), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(0), + char(109), + char(95), + char(109), + char(105), + char(110), + char(105), + char(109), + char(117), + char(109), + char(83), + char(111), + char(108), + char(118), + char(101), + char(114), + char(66), + char(97), + char(116), + char(99), + char(104), + char(83), + char(105), + char(122), + char(101), + char(0), + char(109), + char(95), + char(115), + char(112), + char(108), + char(105), + char(116), + char(73), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(0), + char(109), + char(95), + char(108), + char(105), + char(110), + char(101), + char(97), + char(114), + char(83), + char(116), + char(105), + char(102), + char(102), + char(110), + char(101), + char(115), + char(115), + char(0), + char(109), + char(95), + char(97), + char(110), + char(103), + char(117), + char(108), + char(97), + char(114), + char(83), + char(116), + char(105), + char(102), + char(102), + char(110), + char(101), + char(115), + char(115), + char(0), + char(109), + char(95), + char(118), + char(111), + char(108), + char(117), + char(109), + char(101), + char(83), + char(116), + char(105), + char(102), + char(102), + char(110), + char(101), + char(115), + char(115), + char(0), + char(42), + char(109), + char(95), + char(109), + char(97), + char(116), + char(101), + char(114), + char(105), + char(97), + char(108), + char(0), + char(109), + char(95), + char(112), + char(111), + char(115), + char(105), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(112), + char(114), + char(101), + char(118), + char(105), + char(111), + char(117), + char(115), + char(80), + char(111), + char(115), + char(105), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(118), + char(101), + char(108), + char(111), + char(99), + char(105), + char(116), + char(121), + char(0), + char(109), + char(95), + char(97), + char(99), + char(99), + char(117), + char(109), + char(117), + char(108), + char(97), + char(116), + char(101), + char(100), + char(70), + char(111), + char(114), + char(99), + char(101), + char(0), + char(109), + char(95), + char(110), + char(111), + char(114), + char(109), + char(97), + char(108), + char(0), + char(109), + char(95), + char(97), + char(114), + char(101), + char(97), + char(0), + char(109), + char(95), + char(97), + char(116), + char(116), + char(97), + char(99), + char(104), + char(0), + char(109), + char(95), + char(110), + char(111), + char(100), + char(101), + char(73), + char(110), + char(100), + char(105), + char(99), + char(101), + char(115), + char(91), + char(50), + char(93), + char(0), + char(109), + char(95), + char(114), + char(101), + char(115), + char(116), + char(76), + char(101), + char(110), + char(103), + char(116), + char(104), + char(0), + char(109), + char(95), + char(98), + char(98), + char(101), + char(110), + char(100), + char(105), + char(110), + char(103), + char(0), + char(109), + char(95), + char(110), + char(111), + char(100), + char(101), + char(73), + char(110), + char(100), + char(105), + char(99), + char(101), + char(115), + char(91), + char(51), + char(93), + char(0), + char(109), + char(95), + char(114), + char(101), + char(115), + char(116), + char(65), + char(114), + char(101), + char(97), + char(0), + char(109), + char(95), + char(99), + char(48), + char(91), + char(52), + char(93), + char(0), + char(109), + char(95), + char(110), + char(111), + char(100), + char(101), + char(73), + char(110), + char(100), + char(105), + char(99), + char(101), + char(115), + char(91), + char(52), + char(93), + char(0), + char(109), + char(95), + char(114), + char(101), + char(115), + char(116), + char(86), + char(111), + char(108), + char(117), + char(109), + char(101), + char(0), + char(109), + char(95), + char(99), + char(49), + char(0), + char(109), + char(95), + char(99), + char(50), + char(0), + char(109), + char(95), + char(99), + char(48), + char(0), + char(109), + char(95), + char(108), + char(111), + char(99), + char(97), + char(108), + char(70), + char(114), + char(97), + char(109), + char(101), + char(0), + char(42), + char(109), + char(95), + char(114), + char(105), + char(103), + char(105), + char(100), + char(66), + char(111), + char(100), + char(121), + char(0), + char(109), + char(95), + char(110), + char(111), + char(100), + char(101), + char(73), + char(110), + char(100), + char(101), + char(120), + char(0), + char(109), + char(95), + char(97), + char(101), + char(114), + char(111), + char(77), + char(111), + char(100), + char(101), + char(108), + char(0), + char(109), + char(95), + char(98), + char(97), + char(117), + char(109), + char(103), + char(97), + char(114), + char(116), + char(101), + char(0), + char(109), + char(95), + char(100), + char(114), + char(97), + char(103), + char(0), + char(109), + char(95), + char(108), + char(105), + char(102), + char(116), + char(0), + char(109), + char(95), + char(112), + char(114), + char(101), + char(115), + char(115), + char(117), + char(114), + char(101), + char(0), + char(109), + char(95), + char(118), + char(111), + char(108), + char(117), + char(109), + char(101), + char(0), + char(109), + char(95), + char(100), + char(121), + char(110), + char(97), + char(109), + char(105), + char(99), + char(70), + char(114), + char(105), + char(99), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(112), + char(111), + char(115), + char(101), + char(77), + char(97), + char(116), + char(99), + char(104), + char(0), + char(109), + char(95), + char(114), + char(105), + char(103), + char(105), + char(100), + char(67), + char(111), + char(110), + char(116), + char(97), + char(99), + char(116), + char(72), + char(97), + char(114), + char(100), + char(110), + char(101), + char(115), + char(115), + char(0), + char(109), + char(95), + char(107), + char(105), + char(110), + char(101), + char(116), + char(105), + char(99), + char(67), + char(111), + char(110), + char(116), + char(97), + char(99), + char(116), + char(72), + char(97), + char(114), + char(100), + char(110), + char(101), + char(115), + char(115), + char(0), + char(109), + char(95), + char(115), + char(111), + char(102), + char(116), + char(67), + char(111), + char(110), + char(116), + char(97), + char(99), + char(116), + char(72), + char(97), + char(114), + char(100), + char(110), + char(101), + char(115), + char(115), + char(0), + char(109), + char(95), + char(97), + char(110), + char(99), + char(104), + char(111), + char(114), + char(72), + char(97), + char(114), + char(100), + char(110), + char(101), + char(115), + char(115), + char(0), + char(109), + char(95), + char(115), + char(111), + char(102), + char(116), + char(82), + char(105), + char(103), + char(105), + char(100), + char(67), + char(108), + char(117), + char(115), + char(116), + char(101), + char(114), + char(72), + char(97), + char(114), + char(100), + char(110), + char(101), + char(115), + char(115), + char(0), + char(109), + char(95), + char(115), + char(111), + char(102), + char(116), + char(75), + char(105), + char(110), + char(101), + char(116), + char(105), + char(99), + char(67), + char(108), + char(117), + char(115), + char(116), + char(101), + char(114), + char(72), + char(97), + char(114), + char(100), + char(110), + char(101), + char(115), + char(115), + char(0), + char(109), + char(95), + char(115), + char(111), + char(102), + char(116), + char(83), + char(111), + char(102), + char(116), + char(67), + char(108), + char(117), + char(115), + char(116), + char(101), + char(114), + char(72), + char(97), + char(114), + char(100), + char(110), + char(101), + char(115), + char(115), + char(0), + char(109), + char(95), + char(115), + char(111), + char(102), + char(116), + char(82), + char(105), + char(103), + char(105), + char(100), + char(67), + char(108), + char(117), + char(115), + char(116), + char(101), + char(114), + char(73), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(83), + char(112), + char(108), + char(105), + char(116), + char(0), + char(109), + char(95), + char(115), + char(111), + char(102), + char(116), + char(75), + char(105), + char(110), + char(101), + char(116), + char(105), + char(99), + char(67), + char(108), + char(117), + char(115), + char(116), + char(101), + char(114), + char(73), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(83), + char(112), + char(108), + char(105), + char(116), + char(0), + char(109), + char(95), + char(115), + char(111), + char(102), + char(116), + char(83), + char(111), + char(102), + char(116), + char(67), + char(108), + char(117), + char(115), + char(116), + char(101), + char(114), + char(73), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(83), + char(112), + char(108), + char(105), + char(116), + char(0), + char(109), + char(95), + char(109), + char(97), + char(120), + char(86), + char(111), + char(108), + char(117), + char(109), + char(101), + char(0), + char(109), + char(95), + char(116), + char(105), + char(109), + char(101), + char(83), + char(99), + char(97), + char(108), + char(101), + char(0), + char(109), + char(95), + char(118), + char(101), + char(108), + char(111), + char(99), + char(105), + char(116), + char(121), + char(73), + char(116), + char(101), + char(114), + char(97), + char(116), + char(105), + char(111), + char(110), + char(115), + char(0), + char(109), + char(95), + char(112), + char(111), + char(115), + char(105), + char(116), + char(105), + char(111), + char(110), + char(73), + char(116), + char(101), + char(114), + char(97), + char(116), + char(105), + char(111), + char(110), + char(115), + char(0), + char(109), + char(95), + char(100), + char(114), + char(105), + char(102), + char(116), + char(73), + char(116), + char(101), + char(114), + char(97), + char(116), + char(105), + char(111), + char(110), + char(115), + char(0), + char(109), + char(95), + char(99), + char(108), + char(117), + char(115), + char(116), + char(101), + char(114), + char(73), + char(116), + char(101), + char(114), + char(97), + char(116), + char(105), + char(111), + char(110), + char(115), + char(0), + char(109), + char(95), + char(114), + char(111), + char(116), + char(0), + char(109), + char(95), + char(115), + char(99), + char(97), + char(108), + char(101), + char(0), + char(109), + char(95), + char(97), + char(113), + char(113), + char(0), + char(109), + char(95), + char(99), + char(111), + char(109), + char(0), + char(42), + char(109), + char(95), + char(112), + char(111), + char(115), + char(105), + char(116), + char(105), + char(111), + char(110), + char(115), + char(0), + char(42), + char(109), + char(95), + char(119), + char(101), + char(105), + char(103), + char(104), + char(116), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(80), + char(111), + char(115), + char(105), + char(116), + char(105), + char(111), + char(110), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(87), + char(101), + char(105), + char(103), + char(116), + char(115), + char(0), + char(109), + char(95), + char(98), + char(118), + char(111), + char(108), + char(117), + char(109), + char(101), + char(0), + char(109), + char(95), + char(98), + char(102), + char(114), + char(97), + char(109), + char(101), + char(0), + char(109), + char(95), + char(102), + char(114), + char(97), + char(109), + char(101), + char(120), + char(102), + char(111), + char(114), + char(109), + char(0), + char(109), + char(95), + char(108), + char(111), + char(99), + char(105), + char(105), + char(0), + char(109), + char(95), + char(105), + char(110), + char(118), + char(119), + char(105), + char(0), + char(109), + char(95), + char(118), + char(105), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(115), + char(91), + char(50), + char(93), + char(0), + char(109), + char(95), + char(100), + char(105), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(115), + char(91), + char(50), + char(93), + char(0), + char(109), + char(95), + char(108), + char(118), + char(0), + char(109), + char(95), + char(97), + char(118), + char(0), + char(42), + char(109), + char(95), + char(102), + char(114), + char(97), + char(109), + char(101), + char(114), + char(101), + char(102), + char(115), + char(0), + char(42), + char(109), + char(95), + char(110), + char(111), + char(100), + char(101), + char(73), + char(110), + char(100), + char(105), + char(99), + char(101), + char(115), + char(0), + char(42), + char(109), + char(95), + char(109), + char(97), + char(115), + char(115), + char(101), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(70), + char(114), + char(97), + char(109), + char(101), + char(82), + char(101), + char(102), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(78), + char(111), + char(100), + char(101), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(77), + char(97), + char(115), + char(115), + char(101), + char(115), + char(0), + char(109), + char(95), + char(105), + char(100), + char(109), + char(97), + char(115), + char(115), + char(0), + char(109), + char(95), + char(105), + char(109), + char(97), + char(115), + char(115), + char(0), + char(109), + char(95), + char(110), + char(118), + char(105), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(115), + char(0), + char(109), + char(95), + char(110), + char(100), + char(105), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(115), + char(0), + char(109), + char(95), + char(110), + char(100), + char(97), + char(109), + char(112), + char(105), + char(110), + char(103), + char(0), + char(109), + char(95), + char(108), + char(100), + char(97), + char(109), + char(112), + char(105), + char(110), + char(103), + char(0), + char(109), + char(95), + char(97), + char(100), + char(97), + char(109), + char(112), + char(105), + char(110), + char(103), + char(0), + char(109), + char(95), + char(109), + char(97), + char(116), + char(99), + char(104), + char(105), + char(110), + char(103), + char(0), + char(109), + char(95), + char(109), + char(97), + char(120), + char(83), + char(101), + char(108), + char(102), + char(67), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(73), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(0), + char(109), + char(95), + char(115), + char(101), + char(108), + char(102), + char(67), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(73), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(70), + char(97), + char(99), + char(116), + char(111), + char(114), + char(0), + char(109), + char(95), + char(99), + char(111), + char(110), + char(116), + char(97), + char(105), + char(110), + char(115), + char(65), + char(110), + char(99), + char(104), + char(111), + char(114), + char(0), + char(109), + char(95), + char(99), + char(111), + char(108), + char(108), + char(105), + char(100), + char(101), + char(0), + char(109), + char(95), + char(99), + char(108), + char(117), + char(115), + char(116), + char(101), + char(114), + char(73), + char(110), + char(100), + char(101), + char(120), + char(0), + char(42), + char(109), + char(95), + char(98), + char(111), + char(100), + char(121), + char(65), + char(0), + char(42), + char(109), + char(95), + char(98), + char(111), + char(100), + char(121), + char(66), + char(0), + char(109), + char(95), + char(114), + char(101), + char(102), + char(115), + char(91), + char(50), + char(93), + char(0), + char(109), + char(95), + char(99), + char(102), + char(109), + char(0), + char(109), + char(95), + char(115), + char(112), + char(108), + char(105), + char(116), + char(0), + char(109), + char(95), + char(100), + char(101), + char(108), + char(101), + char(116), + char(101), + char(0), + char(109), + char(95), + char(114), + char(101), + char(108), + char(80), + char(111), + char(115), + char(105), + char(116), + char(105), + char(111), + char(110), + char(91), + char(50), + char(93), + char(0), + char(109), + char(95), + char(98), + char(111), + char(100), + char(121), + char(65), + char(116), + char(121), + char(112), + char(101), + char(0), + char(109), + char(95), + char(98), + char(111), + char(100), + char(121), + char(66), + char(116), + char(121), + char(112), + char(101), + char(0), + char(109), + char(95), + char(106), + char(111), + char(105), + char(110), + char(116), + char(84), + char(121), + char(112), + char(101), + char(0), + char(42), + char(109), + char(95), + char(112), + char(111), + char(115), + char(101), + char(0), + char(42), + char(42), + char(109), + char(95), + char(109), + char(97), + char(116), + char(101), + char(114), + char(105), + char(97), + char(108), + char(115), + char(0), + char(42), + char(109), + char(95), + char(110), + char(111), + char(100), + char(101), + char(115), + char(0), + char(42), + char(109), + char(95), + char(108), + char(105), + char(110), + char(107), + char(115), + char(0), + char(42), + char(109), + char(95), + char(102), + char(97), + char(99), + char(101), + char(115), + char(0), + char(42), + char(109), + char(95), + char(116), + char(101), + char(116), + char(114), + char(97), + char(104), + char(101), + char(100), + char(114), + char(97), + char(0), + char(42), + char(109), + char(95), + char(97), + char(110), + char(99), + char(104), + char(111), + char(114), + char(115), + char(0), + char(42), + char(109), + char(95), + char(99), + char(108), + char(117), + char(115), + char(116), + char(101), + char(114), + char(115), + char(0), + char(42), + char(109), + char(95), + char(106), + char(111), + char(105), + char(110), + char(116), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(77), + char(97), + char(116), + char(101), + char(114), + char(105), + char(97), + char(108), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(76), + char(105), + char(110), + char(107), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(70), + char(97), + char(99), + char(101), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(84), + char(101), + char(116), + char(114), + char(97), + char(104), + char(101), + char(100), + char(114), + char(97), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(65), + char(110), + char(99), + char(104), + char(111), + char(114), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(67), + char(108), + char(117), + char(115), + char(116), + char(101), + char(114), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(74), + char(111), + char(105), + char(110), + char(116), + char(115), + char(0), + char(109), + char(95), + char(99), + char(111), + char(110), + char(102), + char(105), + char(103), + char(0), + char(84), + char(89), + char(80), + char(69), + char(76), + char(0), + char(0), + char(0), + char(99), + char(104), + char(97), + char(114), + char(0), + char(117), + char(99), + char(104), + char(97), + char(114), + char(0), + char(115), + char(104), + char(111), + char(114), + char(116), + char(0), + char(117), + char(115), + char(104), + char(111), + char(114), + char(116), + char(0), + char(105), + char(110), + char(116), + char(0), + char(108), + char(111), + char(110), + char(103), + char(0), + char(117), + char(108), + char(111), + char(110), + char(103), + char(0), + char(102), + char(108), + char(111), + char(97), + char(116), + char(0), + char(100), + char(111), + char(117), + char(98), + char(108), + char(101), + char(0), + char(118), + char(111), + char(105), + char(100), + char(0), + char(80), + char(111), + char(105), + char(110), + char(116), + char(101), + char(114), + char(65), + char(114), + char(114), + char(97), + char(121), + char(0), + char(98), + char(116), + char(80), + char(104), + char(121), + char(115), + char(105), + char(99), + char(115), + char(83), + char(121), + char(115), + char(116), + char(101), + char(109), + char(0), + char(76), + char(105), + char(115), + char(116), + char(66), + char(97), + char(115), + char(101), + char(0), + char(98), + char(116), + char(86), + char(101), + char(99), + char(116), + char(111), + char(114), + char(51), + char(70), + char(108), + char(111), + char(97), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(86), + char(101), + char(99), + char(116), + char(111), + char(114), + char(51), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(77), + char(97), + char(116), + char(114), + char(105), + char(120), + char(51), + char(120), + char(51), + char(70), + char(108), + char(111), + char(97), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(77), + char(97), + char(116), + char(114), + char(105), + char(120), + char(51), + char(120), + char(51), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(84), + char(114), + char(97), + char(110), + char(115), + char(102), + char(111), + char(114), + char(109), + char(70), + char(108), + char(111), + char(97), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(84), + char(114), + char(97), + char(110), + char(115), + char(102), + char(111), + char(114), + char(109), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(66), + char(118), + char(104), + char(83), + char(117), + char(98), + char(116), + char(114), + char(101), + char(101), + char(73), + char(110), + char(102), + char(111), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(79), + char(112), + char(116), + char(105), + char(109), + char(105), + char(122), + char(101), + char(100), + char(66), + char(118), + char(104), + char(78), + char(111), + char(100), + char(101), + char(70), + char(108), + char(111), + char(97), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(79), + char(112), + char(116), + char(105), + char(109), + char(105), + char(122), + char(101), + char(100), + char(66), + char(118), + char(104), + char(78), + char(111), + char(100), + char(101), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(81), + char(117), + char(97), + char(110), + char(116), + char(105), + char(122), + char(101), + char(100), + char(66), + char(118), + char(104), + char(78), + char(111), + char(100), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(81), + char(117), + char(97), + char(110), + char(116), + char(105), + char(122), + char(101), + char(100), + char(66), + char(118), + char(104), + char(70), + char(108), + char(111), + char(97), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(81), + char(117), + char(97), + char(110), + char(116), + char(105), + char(122), + char(101), + char(100), + char(66), + char(118), + char(104), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(83), + char(116), + char(97), + char(116), + char(105), + char(99), + char(80), + char(108), + char(97), + char(110), + char(101), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(111), + char(110), + char(118), + char(101), + char(120), + char(73), + char(110), + char(116), + char(101), + char(114), + char(110), + char(97), + char(108), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(80), + char(111), + char(115), + char(105), + char(116), + char(105), + char(111), + char(110), + char(65), + char(110), + char(100), + char(82), + char(97), + char(100), + char(105), + char(117), + char(115), + char(0), + char(98), + char(116), + char(77), + char(117), + char(108), + char(116), + char(105), + char(83), + char(112), + char(104), + char(101), + char(114), + char(101), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(73), + char(110), + char(116), + char(73), + char(110), + char(100), + char(101), + char(120), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(83), + char(104), + char(111), + char(114), + char(116), + char(73), + char(110), + char(116), + char(73), + char(110), + char(100), + char(101), + char(120), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(83), + char(104), + char(111), + char(114), + char(116), + char(73), + char(110), + char(116), + char(73), + char(110), + char(100), + char(101), + char(120), + char(84), + char(114), + char(105), + char(112), + char(108), + char(101), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(104), + char(97), + char(114), + char(73), + char(110), + char(100), + char(101), + char(120), + char(84), + char(114), + char(105), + char(112), + char(108), + char(101), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(77), + char(101), + char(115), + char(104), + char(80), + char(97), + char(114), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(83), + char(116), + char(114), + char(105), + char(100), + char(105), + char(110), + char(103), + char(77), + char(101), + char(115), + char(104), + char(73), + char(110), + char(116), + char(101), + char(114), + char(102), + char(97), + char(99), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(84), + char(114), + char(105), + char(97), + char(110), + char(103), + char(108), + char(101), + char(77), + char(101), + char(115), + char(104), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(84), + char(114), + char(105), + char(97), + char(110), + char(103), + char(108), + char(101), + char(73), + char(110), + char(102), + char(111), + char(77), + char(97), + char(112), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(83), + char(99), + char(97), + char(108), + char(101), + char(100), + char(84), + char(114), + char(105), + char(97), + char(110), + char(103), + char(108), + char(101), + char(77), + char(101), + char(115), + char(104), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(111), + char(109), + char(112), + char(111), + char(117), + char(110), + char(100), + char(83), + char(104), + char(97), + char(112), + char(101), + char(67), + char(104), + char(105), + char(108), + char(100), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(111), + char(109), + char(112), + char(111), + char(117), + char(110), + char(100), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(121), + char(108), + char(105), + char(110), + char(100), + char(101), + char(114), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(97), + char(112), + char(115), + char(117), + char(108), + char(101), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(84), + char(114), + char(105), + char(97), + char(110), + char(103), + char(108), + char(101), + char(73), + char(110), + char(102), + char(111), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(71), + char(73), + char(109), + char(112), + char(97), + char(99), + char(116), + char(77), + char(101), + char(115), + char(104), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(111), + char(110), + char(118), + char(101), + char(120), + char(72), + char(117), + char(108), + char(108), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(79), + char(98), + char(106), + char(101), + char(99), + char(116), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(79), + char(98), + char(106), + char(101), + char(99), + char(116), + char(70), + char(108), + char(111), + char(97), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(68), + char(121), + char(110), + char(97), + char(109), + char(105), + char(99), + char(115), + char(87), + char(111), + char(114), + char(108), + char(100), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(111), + char(110), + char(116), + char(97), + char(99), + char(116), + char(83), + char(111), + char(108), + char(118), + char(101), + char(114), + char(73), + char(110), + char(102), + char(111), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(68), + char(121), + char(110), + char(97), + char(109), + char(105), + char(99), + char(115), + char(87), + char(111), + char(114), + char(108), + char(100), + char(70), + char(108), + char(111), + char(97), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(111), + char(110), + char(116), + char(97), + char(99), + char(116), + char(83), + char(111), + char(108), + char(118), + char(101), + char(114), + char(73), + char(110), + char(102), + char(111), + char(70), + char(108), + char(111), + char(97), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(82), + char(105), + char(103), + char(105), + char(100), + char(66), + char(111), + char(100), + char(121), + char(70), + char(108), + char(111), + char(97), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(82), + char(105), + char(103), + char(105), + char(100), + char(66), + char(111), + char(100), + char(121), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(73), + char(110), + char(102), + char(111), + char(49), + char(0), + char(98), + char(116), + char(84), + char(121), + char(112), + char(101), + char(100), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(82), + char(105), + char(103), + char(105), + char(100), + char(66), + char(111), + char(100), + char(121), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(80), + char(111), + char(105), + char(110), + char(116), + char(50), + char(80), + char(111), + char(105), + char(110), + char(116), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(70), + char(108), + char(111), + char(97), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(80), + char(111), + char(105), + char(110), + char(116), + char(50), + char(80), + char(111), + char(105), + char(110), + char(116), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(72), + char(105), + char(110), + char(103), + char(101), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(72), + char(105), + char(110), + char(103), + char(101), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(70), + char(108), + char(111), + char(97), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(111), + char(110), + char(101), + char(84), + char(119), + char(105), + char(115), + char(116), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(71), + char(101), + char(110), + char(101), + char(114), + char(105), + char(99), + char(54), + char(68), + char(111), + char(102), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(71), + char(101), + char(110), + char(101), + char(114), + char(105), + char(99), + char(54), + char(68), + char(111), + char(102), + char(83), + char(112), + char(114), + char(105), + char(110), + char(103), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(83), + char(108), + char(105), + char(100), + char(101), + char(114), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(83), + char(111), + char(102), + char(116), + char(66), + char(111), + char(100), + char(121), + char(77), + char(97), + char(116), + char(101), + char(114), + char(105), + char(97), + char(108), + char(68), + char(97), + char(116), + char(97), + char(0), + char(83), + char(111), + char(102), + char(116), + char(66), + char(111), + char(100), + char(121), + char(78), + char(111), + char(100), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(83), + char(111), + char(102), + char(116), + char(66), + char(111), + char(100), + char(121), + char(76), + char(105), + char(110), + char(107), + char(68), + char(97), + char(116), + char(97), + char(0), + char(83), + char(111), + char(102), + char(116), + char(66), + char(111), + char(100), + char(121), + char(70), + char(97), + char(99), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(83), + char(111), + char(102), + char(116), + char(66), + char(111), + char(100), + char(121), + char(84), + char(101), + char(116), + char(114), + char(97), + char(68), + char(97), + char(116), + char(97), + char(0), + char(83), + char(111), + char(102), + char(116), + char(82), + char(105), + char(103), + char(105), + char(100), + char(65), + char(110), + char(99), + char(104), + char(111), + char(114), + char(68), + char(97), + char(116), + char(97), + char(0), + char(83), + char(111), + char(102), + char(116), + char(66), + char(111), + char(100), + char(121), + char(67), + char(111), + char(110), + char(102), + char(105), + char(103), + char(68), + char(97), + char(116), + char(97), + char(0), + char(83), + char(111), + char(102), + char(116), + char(66), + char(111), + char(100), + char(121), + char(80), + char(111), + char(115), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(83), + char(111), + char(102), + char(116), + char(66), + char(111), + char(100), + char(121), + char(67), + char(108), + char(117), + char(115), + char(116), + char(101), + char(114), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(83), + char(111), + char(102), + char(116), + char(66), + char(111), + char(100), + char(121), + char(74), + char(111), + char(105), + char(110), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(83), + char(111), + char(102), + char(116), + char(66), + char(111), + char(100), + char(121), + char(70), + char(108), + char(111), + char(97), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(0), + char(0), + char(84), + char(76), + char(69), + char(78), + char(1), + char(0), + char(1), + char(0), + char(2), + char(0), + char(2), + char(0), + char(4), + char(0), + char(4), + char(0), + char(4), + char(0), + char(4), + char(0), + char(8), + char(0), + char(0), + char(0), + char(12), + char(0), + char(36), + char(0), + char(8), + char(0), + char(16), + char(0), + char(32), + char(0), + char(48), + char(0), + char(96), + char(0), + char(64), + char(0), + char(-128), + char(0), + char(20), + char(0), + char(48), + char(0), + char(80), + char(0), + char(16), + char(0), + char(84), + char(0), + char(-124), + char(0), + char(12), + char(0), + char(52), + char(0), + char(52), + char(0), + char(20), + char(0), + char(64), + char(0), + char(4), + char(0), + char(4), + char(0), + char(8), + char(0), + char(4), + char(0), + char(32), + char(0), + char(28), + char(0), + char(60), + char(0), + char(56), + char(0), + char(76), + char(0), + char(76), + char(0), + char(24), + char(0), + char(60), + char(0), + char(60), + char(0), + char(16), + char(0), + char(64), + char(0), + char(68), + char(0), + char(-48), + char(1), + char(0), + char(1), + char(-72), + char(0), + char(-104), + char(0), + char(104), + char(0), + char(88), + char(0), + char(-24), + char(1), + char(-96), + char(3), + char(8), + char(0), + char(52), + char(0), + char(0), + char(0), + char(84), + char(0), + char(116), + char(0), + char(92), + char(1), + char(-36), + char(0), + char(-44), + char(0), + char(-4), + char(0), + char(92), + char(1), + char(-52), + char(0), + char(16), + char(0), + char(100), + char(0), + char(20), + char(0), + char(36), + char(0), + char(100), + char(0), + char(92), + char(0), + char(104), + char(0), + char(-64), + char(0), + char(92), + char(1), + char(104), + char(0), + char(-84), + char(1), + char(83), + char(84), + char(82), + char(67), + char(65), + char(0), + char(0), + char(0), + char(10), + char(0), + char(3), + char(0), + char(4), + char(0), + char(0), + char(0), + char(4), + char(0), + char(1), + char(0), + char(9), + char(0), + char(2), + char(0), + char(11), + char(0), + char(3), + char(0), + char(10), + char(0), + char(3), + char(0), + char(10), + char(0), + char(4), + char(0), + char(10), + char(0), + char(5), + char(0), + char(12), + char(0), + char(2), + char(0), + char(9), + char(0), + char(6), + char(0), + char(9), + char(0), + char(7), + char(0), + char(13), + char(0), + char(1), + char(0), + char(7), + char(0), + char(8), + char(0), + char(14), + char(0), + char(1), + char(0), + char(8), + char(0), + char(8), + char(0), + char(15), + char(0), + char(1), + char(0), + char(13), + char(0), + char(9), + char(0), + char(16), + char(0), + char(1), + char(0), + char(14), + char(0), + char(9), + char(0), + char(17), + char(0), + char(2), + char(0), + char(15), + char(0), + char(10), + char(0), + char(13), + char(0), + char(11), + char(0), + char(18), + char(0), + char(2), + char(0), + char(16), + char(0), + char(10), + char(0), + char(14), + char(0), + char(11), + char(0), + char(19), + char(0), + char(4), + char(0), + char(4), + char(0), + char(12), + char(0), + char(4), + char(0), + char(13), + char(0), + char(2), + char(0), + char(14), + char(0), + char(2), + char(0), + char(15), + char(0), + char(20), + char(0), + char(6), + char(0), + char(13), + char(0), + char(16), + char(0), + char(13), + char(0), + char(17), + char(0), + char(4), + char(0), + char(18), + char(0), + char(4), + char(0), + char(19), + char(0), + char(4), + char(0), + char(20), + char(0), + char(0), + char(0), + char(21), + char(0), + char(21), + char(0), + char(6), + char(0), + char(14), + char(0), + char(16), + char(0), + char(14), + char(0), + char(17), + char(0), + char(4), + char(0), + char(18), + char(0), + char(4), + char(0), + char(19), + char(0), + char(4), + char(0), + char(20), + char(0), + char(0), + char(0), + char(21), + char(0), + char(22), + char(0), + char(3), + char(0), + char(2), + char(0), + char(14), + char(0), + char(2), + char(0), + char(15), + char(0), + char(4), + char(0), + char(22), + char(0), + char(23), + char(0), + char(12), + char(0), + char(13), + char(0), + char(23), + char(0), + char(13), + char(0), + char(24), + char(0), + char(13), + char(0), + char(25), + char(0), + char(4), + char(0), + char(26), + char(0), + char(4), + char(0), + char(27), + char(0), + char(4), + char(0), + char(28), + char(0), + char(4), + char(0), + char(29), + char(0), + char(20), + char(0), + char(30), + char(0), + char(22), + char(0), + char(31), + char(0), + char(19), + char(0), + char(32), + char(0), + char(4), + char(0), + char(33), + char(0), + char(4), + char(0), + char(34), + char(0), + char(24), + char(0), + char(12), + char(0), + char(14), + char(0), + char(23), + char(0), + char(14), + char(0), + char(24), + char(0), + char(14), + char(0), + char(25), + char(0), + char(4), + char(0), + char(26), + char(0), + char(4), + char(0), + char(27), + char(0), + char(4), + char(0), + char(28), + char(0), + char(4), + char(0), + char(29), + char(0), + char(21), + char(0), + char(30), + char(0), + char(22), + char(0), + char(31), + char(0), + char(4), + char(0), + char(33), + char(0), + char(4), + char(0), + char(34), + char(0), + char(19), + char(0), + char(32), + char(0), + char(25), + char(0), + char(3), + char(0), + char(0), + char(0), + char(35), + char(0), + char(4), + char(0), + char(36), + char(0), + char(0), + char(0), + char(37), + char(0), + char(26), + char(0), + char(5), + char(0), + char(25), + char(0), + char(38), + char(0), + char(13), + char(0), + char(39), + char(0), + char(13), + char(0), + char(40), + char(0), + char(7), + char(0), + char(41), + char(0), + char(0), + char(0), + char(21), + char(0), + char(27), + char(0), + char(5), + char(0), + char(25), + char(0), + char(38), + char(0), + char(13), + char(0), + char(39), + char(0), + char(13), + char(0), + char(42), + char(0), + char(7), + char(0), + char(43), + char(0), + char(4), + char(0), + char(44), + char(0), + char(28), + char(0), + char(2), + char(0), + char(13), + char(0), + char(45), + char(0), + char(7), + char(0), + char(46), + char(0), + char(29), + char(0), + char(4), + char(0), + char(27), + char(0), + char(47), + char(0), + char(28), + char(0), + char(48), + char(0), + char(4), + char(0), + char(49), + char(0), + char(0), + char(0), + char(37), + char(0), + char(30), + char(0), + char(1), + char(0), + char(4), + char(0), + char(50), + char(0), + char(31), + char(0), + char(2), + char(0), + char(2), + char(0), + char(50), + char(0), + char(0), + char(0), + char(51), + char(0), + char(32), + char(0), + char(2), + char(0), + char(2), + char(0), + char(52), + char(0), + char(0), + char(0), + char(51), + char(0), + char(33), + char(0), + char(2), + char(0), + char(0), + char(0), + char(52), + char(0), + char(0), + char(0), + char(53), + char(0), + char(34), + char(0), + char(8), + char(0), + char(13), + char(0), + char(54), + char(0), + char(14), + char(0), + char(55), + char(0), + char(30), + char(0), + char(56), + char(0), + char(32), + char(0), + char(57), + char(0), + char(33), + char(0), + char(58), + char(0), + char(31), + char(0), + char(59), + char(0), + char(4), + char(0), + char(60), + char(0), + char(4), + char(0), + char(61), + char(0), + char(35), + char(0), + char(4), + char(0), + char(34), + char(0), + char(62), + char(0), + char(13), + char(0), + char(63), + char(0), + char(4), + char(0), + char(64), + char(0), + char(0), + char(0), + char(37), + char(0), + char(36), + char(0), + char(7), + char(0), + char(25), + char(0), + char(38), + char(0), + char(35), + char(0), + char(65), + char(0), + char(23), + char(0), + char(66), + char(0), + char(24), + char(0), + char(67), + char(0), + char(37), + char(0), + char(68), + char(0), + char(7), + char(0), + char(43), + char(0), + char(0), + char(0), + char(69), + char(0), + char(38), + char(0), + char(2), + char(0), + char(36), + char(0), + char(70), + char(0), + char(13), + char(0), + char(39), + char(0), + char(39), + char(0), + char(4), + char(0), + char(17), + char(0), + char(71), + char(0), + char(25), + char(0), + char(72), + char(0), + char(4), + char(0), + char(73), + char(0), + char(7), + char(0), + char(74), + char(0), + char(40), + char(0), + char(4), + char(0), + char(25), + char(0), + char(38), + char(0), + char(39), + char(0), + char(75), + char(0), + char(4), + char(0), + char(76), + char(0), + char(7), + char(0), + char(43), + char(0), + char(41), + char(0), + char(3), + char(0), + char(27), + char(0), + char(47), + char(0), + char(4), + char(0), + char(77), + char(0), + char(0), + char(0), + char(37), + char(0), + char(42), + char(0), + char(3), + char(0), + char(27), + char(0), + char(47), + char(0), + char(4), + char(0), + char(77), + char(0), + char(0), + char(0), + char(37), + char(0), + char(43), + char(0), + char(4), + char(0), + char(4), + char(0), + char(78), + char(0), + char(7), + char(0), + char(79), + char(0), + char(7), + char(0), + char(80), + char(0), + char(7), + char(0), + char(81), + char(0), + char(37), + char(0), + char(14), + char(0), + char(4), + char(0), + char(82), + char(0), + char(4), + char(0), + char(83), + char(0), + char(43), + char(0), + char(84), + char(0), + char(4), + char(0), + char(85), + char(0), + char(7), + char(0), + char(86), + char(0), + char(7), + char(0), + char(87), + char(0), + char(7), + char(0), + char(88), + char(0), + char(7), + char(0), + char(89), + char(0), + char(7), + char(0), + char(90), + char(0), + char(4), + char(0), + char(91), + char(0), + char(4), + char(0), + char(92), + char(0), + char(4), + char(0), + char(93), + char(0), + char(4), + char(0), + char(94), + char(0), + char(0), + char(0), + char(37), + char(0), + char(44), + char(0), + char(5), + char(0), + char(25), + char(0), + char(38), + char(0), + char(35), + char(0), + char(65), + char(0), + char(13), + char(0), + char(39), + char(0), + char(7), + char(0), + char(43), + char(0), + char(4), + char(0), + char(95), + char(0), + char(45), + char(0), + char(5), + char(0), + char(27), + char(0), + char(47), + char(0), + char(13), + char(0), + char(96), + char(0), + char(14), + char(0), + char(97), + char(0), + char(4), + char(0), + char(98), + char(0), + char(0), + char(0), + char(99), + char(0), + char(46), + char(0), + char(25), + char(0), + char(9), + char(0), + char(100), + char(0), + char(9), + char(0), + char(101), + char(0), + char(25), + char(0), + char(102), + char(0), + char(0), + char(0), + char(35), + char(0), + char(18), + char(0), + char(103), + char(0), + char(18), + char(0), + char(104), + char(0), + char(14), + char(0), + char(105), + char(0), + char(14), + char(0), + char(106), + char(0), + char(14), + char(0), + char(107), + char(0), + char(8), + char(0), + char(108), + char(0), + char(8), + char(0), + char(109), + char(0), + char(8), + char(0), + char(110), + char(0), + char(8), + char(0), + char(111), + char(0), + char(8), + char(0), + char(112), + char(0), + char(8), + char(0), + char(113), + char(0), + char(8), + char(0), + char(114), + char(0), + char(8), + char(0), + char(115), + char(0), + char(4), + char(0), + char(116), + char(0), + char(4), + char(0), + char(117), + char(0), + char(4), + char(0), + char(118), + char(0), + char(4), + char(0), + char(119), + char(0), + char(4), + char(0), + char(120), + char(0), + char(4), + char(0), + char(121), + char(0), + char(4), + char(0), + char(122), + char(0), + char(0), + char(0), + char(37), + char(0), + char(47), + char(0), + char(25), + char(0), + char(9), + char(0), + char(100), + char(0), + char(9), + char(0), + char(101), + char(0), + char(25), + char(0), + char(102), + char(0), + char(0), + char(0), + char(35), + char(0), + char(17), + char(0), + char(103), + char(0), + char(17), + char(0), + char(104), + char(0), + char(13), + char(0), + char(105), + char(0), + char(13), + char(0), + char(106), + char(0), + char(13), + char(0), + char(107), + char(0), + char(7), + char(0), + char(108), + char(0), + char(7), + char(0), + char(109), + char(0), + char(7), + char(0), + char(110), + char(0), + char(7), + char(0), + char(111), + char(0), + char(7), + char(0), + char(112), + char(0), + char(7), + char(0), + char(113), + char(0), + char(7), + char(0), + char(114), + char(0), + char(7), + char(0), + char(115), + char(0), + char(4), + char(0), + char(116), + char(0), + char(4), + char(0), + char(117), + char(0), + char(4), + char(0), + char(118), + char(0), + char(4), + char(0), + char(119), + char(0), + char(4), + char(0), + char(120), + char(0), + char(4), + char(0), + char(121), + char(0), + char(4), + char(0), + char(122), + char(0), + char(0), + char(0), + char(37), + char(0), + char(48), + char(0), + char(2), + char(0), + char(49), + char(0), + char(123), + char(0), + char(14), + char(0), + char(124), + char(0), + char(50), + char(0), + char(2), + char(0), + char(51), + char(0), + char(123), + char(0), + char(13), + char(0), + char(124), + char(0), + char(52), + char(0), + char(21), + char(0), + char(47), + char(0), + char(125), + char(0), + char(15), + char(0), + char(126), + char(0), + char(13), + char(0), + char(127), + char(0), + char(13), + char(0), + char(-128), + char(0), + char(13), + char(0), + char(-127), + char(0), + char(13), + char(0), + char(-126), + char(0), + char(13), + char(0), + char(124), + char(0), + char(13), + char(0), + char(-125), + char(0), + char(13), + char(0), + char(-124), + char(0), + char(13), + char(0), + char(-123), + char(0), + char(13), + char(0), + char(-122), + char(0), + char(7), + char(0), + char(-121), + char(0), + char(7), + char(0), + char(-120), + char(0), + char(7), + char(0), + char(-119), + char(0), + char(7), + char(0), + char(-118), + char(0), + char(7), + char(0), + char(-117), + char(0), + char(7), + char(0), + char(-116), + char(0), + char(7), + char(0), + char(-115), + char(0), + char(7), + char(0), + char(-114), + char(0), + char(7), + char(0), + char(-113), + char(0), + char(4), + char(0), + char(-112), + char(0), + char(53), + char(0), + char(22), + char(0), + char(46), + char(0), + char(125), + char(0), + char(16), + char(0), + char(126), + char(0), + char(14), + char(0), + char(127), + char(0), + char(14), + char(0), + char(-128), + char(0), + char(14), + char(0), + char(-127), + char(0), + char(14), + char(0), + char(-126), + char(0), + char(14), + char(0), + char(124), + char(0), + char(14), + char(0), + char(-125), + char(0), + char(14), + char(0), + char(-124), + char(0), + char(14), + char(0), + char(-123), + char(0), + char(14), + char(0), + char(-122), + char(0), + char(8), + char(0), + char(-121), + char(0), + char(8), + char(0), + char(-120), + char(0), + char(8), + char(0), + char(-119), + char(0), + char(8), + char(0), + char(-118), + char(0), + char(8), + char(0), + char(-117), + char(0), + char(8), + char(0), + char(-116), + char(0), + char(8), + char(0), + char(-115), + char(0), + char(8), + char(0), + char(-114), + char(0), + char(8), + char(0), + char(-113), + char(0), + char(4), + char(0), + char(-112), + char(0), + char(0), + char(0), + char(37), + char(0), + char(54), + char(0), + char(2), + char(0), + char(4), + char(0), + char(-111), + char(0), + char(4), + char(0), + char(-110), + char(0), + char(55), + char(0), + char(13), + char(0), + char(56), + char(0), + char(-109), + char(0), + char(56), + char(0), + char(-108), + char(0), + char(0), + char(0), + char(35), + char(0), + char(4), + char(0), + char(-107), + char(0), + char(4), + char(0), + char(-106), + char(0), + char(4), + char(0), + char(-105), + char(0), + char(4), + char(0), + char(-104), + char(0), + char(7), + char(0), + char(-103), + char(0), + char(7), + char(0), + char(-102), + char(0), + char(4), + char(0), + char(-101), + char(0), + char(4), + char(0), + char(-100), + char(0), + char(7), + char(0), + char(-99), + char(0), + char(4), + char(0), + char(-98), + char(0), + char(57), + char(0), + char(3), + char(0), + char(55), + char(0), + char(-97), + char(0), + char(13), + char(0), + char(-96), + char(0), + char(13), + char(0), + char(-95), + char(0), + char(58), + char(0), + char(3), + char(0), + char(55), + char(0), + char(-97), + char(0), + char(14), + char(0), + char(-96), + char(0), + char(14), + char(0), + char(-95), + char(0), + char(59), + char(0), + char(13), + char(0), + char(55), + char(0), + char(-97), + char(0), + char(18), + char(0), + char(-94), + char(0), + char(18), + char(0), + char(-93), + char(0), + char(4), + char(0), + char(-92), + char(0), + char(4), + char(0), + char(-91), + char(0), + char(4), + char(0), + char(-90), + char(0), + char(7), + char(0), + char(-89), + char(0), + char(7), + char(0), + char(-88), + char(0), + char(7), + char(0), + char(-87), + char(0), + char(7), + char(0), + char(-86), + char(0), + char(7), + char(0), + char(-85), + char(0), + char(7), + char(0), + char(-84), + char(0), + char(7), + char(0), + char(-83), + char(0), + char(60), + char(0), + char(13), + char(0), + char(55), + char(0), + char(-97), + char(0), + char(17), + char(0), + char(-94), + char(0), + char(17), + char(0), + char(-93), + char(0), + char(4), + char(0), + char(-92), + char(0), + char(4), + char(0), + char(-91), + char(0), + char(4), + char(0), + char(-90), + char(0), + char(7), + char(0), + char(-89), + char(0), + char(7), + char(0), + char(-88), + char(0), + char(7), + char(0), + char(-87), + char(0), + char(7), + char(0), + char(-86), + char(0), + char(7), + char(0), + char(-85), + char(0), + char(7), + char(0), + char(-84), + char(0), + char(7), + char(0), + char(-83), + char(0), + char(61), + char(0), + char(11), + char(0), + char(55), + char(0), + char(-97), + char(0), + char(17), + char(0), + char(-94), + char(0), + char(17), + char(0), + char(-93), + char(0), + char(7), + char(0), + char(-82), + char(0), + char(7), + char(0), + char(-81), + char(0), + char(7), + char(0), + char(-80), + char(0), + char(7), + char(0), + char(-85), + char(0), + char(7), + char(0), + char(-84), + char(0), + char(7), + char(0), + char(-83), + char(0), + char(7), + char(0), + char(-79), + char(0), + char(0), + char(0), + char(21), + char(0), + char(62), + char(0), + char(9), + char(0), + char(55), + char(0), + char(-97), + char(0), + char(17), + char(0), + char(-94), + char(0), + char(17), + char(0), + char(-93), + char(0), + char(13), + char(0), + char(-78), + char(0), + char(13), + char(0), + char(-77), + char(0), + char(13), + char(0), + char(-76), + char(0), + char(13), + char(0), + char(-75), + char(0), + char(4), + char(0), + char(-74), + char(0), + char(4), + char(0), + char(-73), + char(0), + char(63), + char(0), + char(5), + char(0), + char(62), + char(0), + char(-72), + char(0), + char(4), + char(0), + char(-71), + char(0), + char(7), + char(0), + char(-70), + char(0), + char(7), + char(0), + char(-69), + char(0), + char(7), + char(0), + char(-68), + char(0), + char(64), + char(0), + char(9), + char(0), + char(55), + char(0), + char(-97), + char(0), + char(17), + char(0), + char(-94), + char(0), + char(17), + char(0), + char(-93), + char(0), + char(7), + char(0), + char(-78), + char(0), + char(7), + char(0), + char(-77), + char(0), + char(7), + char(0), + char(-76), + char(0), + char(7), + char(0), + char(-75), + char(0), + char(4), + char(0), + char(-74), + char(0), + char(4), + char(0), + char(-73), + char(0), + char(49), + char(0), + char(22), + char(0), + char(8), + char(0), + char(-67), + char(0), + char(8), + char(0), + char(-79), + char(0), + char(8), + char(0), + char(110), + char(0), + char(8), + char(0), + char(-66), + char(0), + char(8), + char(0), + char(112), + char(0), + char(8), + char(0), + char(-65), + char(0), + char(8), + char(0), + char(-64), + char(0), + char(8), + char(0), + char(-63), + char(0), + char(8), + char(0), + char(-62), + char(0), + char(8), + char(0), + char(-61), + char(0), + char(8), + char(0), + char(-60), + char(0), + char(8), + char(0), + char(-59), + char(0), + char(8), + char(0), + char(-58), + char(0), + char(8), + char(0), + char(-57), + char(0), + char(8), + char(0), + char(-56), + char(0), + char(8), + char(0), + char(-55), + char(0), + char(4), + char(0), + char(-54), + char(0), + char(4), + char(0), + char(-53), + char(0), + char(4), + char(0), + char(-52), + char(0), + char(4), + char(0), + char(-51), + char(0), + char(4), + char(0), + char(-50), + char(0), + char(0), + char(0), + char(37), + char(0), + char(51), + char(0), + char(22), + char(0), + char(7), + char(0), + char(-67), + char(0), + char(7), + char(0), + char(-79), + char(0), + char(7), + char(0), + char(110), + char(0), + char(7), + char(0), + char(-66), + char(0), + char(7), + char(0), + char(112), + char(0), + char(7), + char(0), + char(-65), + char(0), + char(7), + char(0), + char(-64), + char(0), + char(7), + char(0), + char(-63), + char(0), + char(7), + char(0), + char(-62), + char(0), + char(7), + char(0), + char(-61), + char(0), + char(7), + char(0), + char(-60), + char(0), + char(7), + char(0), + char(-59), + char(0), + char(7), + char(0), + char(-58), + char(0), + char(7), + char(0), + char(-57), + char(0), + char(7), + char(0), + char(-56), + char(0), + char(7), + char(0), + char(-55), + char(0), + char(4), + char(0), + char(-54), + char(0), + char(4), + char(0), + char(-53), + char(0), + char(4), + char(0), + char(-52), + char(0), + char(4), + char(0), + char(-51), + char(0), + char(4), + char(0), + char(-50), + char(0), + char(0), + char(0), + char(37), + char(0), + char(65), + char(0), + char(4), + char(0), + char(7), + char(0), + char(-49), + char(0), + char(7), + char(0), + char(-48), + char(0), + char(7), + char(0), + char(-47), + char(0), + char(4), + char(0), + char(78), + char(0), + char(66), + char(0), + char(10), + char(0), + char(65), + char(0), + char(-46), + char(0), + char(13), + char(0), + char(-45), + char(0), + char(13), + char(0), + char(-44), + char(0), + char(13), + char(0), + char(-43), + char(0), + char(13), + char(0), + char(-42), + char(0), + char(13), + char(0), + char(-41), + char(0), + char(7), + char(0), + char(-121), + char(0), + char(7), + char(0), + char(-40), + char(0), + char(4), + char(0), + char(-39), + char(0), + char(4), + char(0), + char(53), + char(0), + char(67), + char(0), + char(4), + char(0), + char(65), + char(0), + char(-46), + char(0), + char(4), + char(0), + char(-38), + char(0), + char(7), + char(0), + char(-37), + char(0), + char(4), + char(0), + char(-36), + char(0), + char(68), + char(0), + char(4), + char(0), + char(13), + char(0), + char(-41), + char(0), + char(65), + char(0), + char(-46), + char(0), + char(4), + char(0), + char(-35), + char(0), + char(7), + char(0), + char(-34), + char(0), + char(69), + char(0), + char(7), + char(0), + char(13), + char(0), + char(-33), + char(0), + char(65), + char(0), + char(-46), + char(0), + char(4), + char(0), + char(-32), + char(0), + char(7), + char(0), + char(-31), + char(0), + char(7), + char(0), + char(-30), + char(0), + char(7), + char(0), + char(-29), + char(0), + char(4), + char(0), + char(53), + char(0), + char(70), + char(0), + char(6), + char(0), + char(15), + char(0), + char(-28), + char(0), + char(13), + char(0), + char(-30), + char(0), + char(13), + char(0), + char(-27), + char(0), + char(56), + char(0), + char(-26), + char(0), + char(4), + char(0), + char(-25), + char(0), + char(7), + char(0), + char(-29), + char(0), + char(71), + char(0), + char(26), + char(0), + char(4), + char(0), + char(-24), + char(0), + char(7), + char(0), + char(-23), + char(0), + char(7), + char(0), + char(-79), + char(0), + char(7), + char(0), + char(-22), + char(0), + char(7), + char(0), + char(-21), + char(0), + char(7), + char(0), + char(-20), + char(0), + char(7), + char(0), + char(-19), + char(0), + char(7), + char(0), + char(-18), + char(0), + char(7), + char(0), + char(-17), + char(0), + char(7), + char(0), + char(-16), + char(0), + char(7), + char(0), + char(-15), + char(0), + char(7), + char(0), + char(-14), + char(0), + char(7), + char(0), + char(-13), + char(0), + char(7), + char(0), + char(-12), + char(0), + char(7), + char(0), + char(-11), + char(0), + char(7), + char(0), + char(-10), + char(0), + char(7), + char(0), + char(-9), + char(0), + char(7), + char(0), + char(-8), + char(0), + char(7), + char(0), + char(-7), + char(0), + char(7), + char(0), + char(-6), + char(0), + char(7), + char(0), + char(-5), + char(0), + char(4), + char(0), + char(-4), + char(0), + char(4), + char(0), + char(-3), + char(0), + char(4), + char(0), + char(-2), + char(0), + char(4), + char(0), + char(-1), + char(0), + char(4), + char(0), + char(117), + char(0), + char(72), + char(0), + char(12), + char(0), + char(15), + char(0), + char(0), + char(1), + char(15), + char(0), + char(1), + char(1), + char(15), + char(0), + char(2), + char(1), + char(13), + char(0), + char(3), + char(1), + char(13), + char(0), + char(4), + char(1), + char(7), + char(0), + char(5), + char(1), + char(4), + char(0), + char(6), + char(1), + char(4), + char(0), + char(7), + char(1), + char(4), + char(0), + char(8), + char(1), + char(4), + char(0), + char(9), + char(1), + char(7), + char(0), + char(-31), + char(0), + char(4), + char(0), + char(53), + char(0), + char(73), + char(0), + char(27), + char(0), + char(17), + char(0), + char(10), + char(1), + char(15), + char(0), + char(11), + char(1), + char(15), + char(0), + char(12), + char(1), + char(13), + char(0), + char(3), + char(1), + char(13), + char(0), + char(13), + char(1), + char(13), + char(0), + char(14), + char(1), + char(13), + char(0), + char(15), + char(1), + char(13), + char(0), + char(16), + char(1), + char(13), + char(0), + char(17), + char(1), + char(4), + char(0), + char(18), + char(1), + char(7), + char(0), + char(19), + char(1), + char(4), + char(0), + char(20), + char(1), + char(4), + char(0), + char(21), + char(1), + char(4), + char(0), + char(22), + char(1), + char(7), + char(0), + char(23), + char(1), + char(7), + char(0), + char(24), + char(1), + char(4), + char(0), + char(25), + char(1), + char(4), + char(0), + char(26), + char(1), + char(7), + char(0), + char(27), + char(1), + char(7), + char(0), + char(28), + char(1), + char(7), + char(0), + char(29), + char(1), + char(7), + char(0), + char(30), + char(1), + char(7), + char(0), + char(31), + char(1), + char(7), + char(0), + char(32), + char(1), + char(4), + char(0), + char(33), + char(1), + char(4), + char(0), + char(34), + char(1), + char(4), + char(0), + char(35), + char(1), + char(74), + char(0), + char(12), + char(0), + char(9), + char(0), + char(36), + char(1), + char(9), + char(0), + char(37), + char(1), + char(13), + char(0), + char(38), + char(1), + char(7), + char(0), + char(39), + char(1), + char(7), + char(0), + char(-63), + char(0), + char(7), + char(0), + char(40), + char(1), + char(4), + char(0), + char(41), + char(1), + char(13), + char(0), + char(42), + char(1), + char(4), + char(0), + char(43), + char(1), + char(4), + char(0), + char(44), + char(1), + char(4), + char(0), + char(45), + char(1), + char(4), + char(0), + char(53), + char(0), + char(75), + char(0), + char(19), + char(0), + char(47), + char(0), + char(125), + char(0), + char(72), + char(0), + char(46), + char(1), + char(65), + char(0), + char(47), + char(1), + char(66), + char(0), + char(48), + char(1), + char(67), + char(0), + char(49), + char(1), + char(68), + char(0), + char(50), + char(1), + char(69), + char(0), + char(51), + char(1), + char(70), + char(0), + char(52), + char(1), + char(73), + char(0), + char(53), + char(1), + char(74), + char(0), + char(54), + char(1), + char(4), + char(0), + char(55), + char(1), + char(4), + char(0), + char(21), + char(1), + char(4), + char(0), + char(56), + char(1), + char(4), + char(0), + char(57), + char(1), + char(4), + char(0), + char(58), + char(1), + char(4), + char(0), + char(59), + char(1), + char(4), + char(0), + char(60), + char(1), + char(4), + char(0), + char(61), + char(1), + char(71), + char(0), + char(62), + char(1), +}; +int b3s_bulletDNAlen = sizeof(b3s_bulletDNAstr); +char b3s_bulletDNAstr64[] = { + char(83), + char(68), + char(78), + char(65), + char(78), + char(65), + char(77), + char(69), + char(63), + char(1), + char(0), + char(0), + char(109), + char(95), + char(115), + char(105), + char(122), + char(101), + char(0), + char(109), + char(95), + char(99), + char(97), + char(112), + char(97), + char(99), + char(105), + char(116), + char(121), + char(0), + char(42), + char(109), + char(95), + char(100), + char(97), + char(116), + char(97), + char(0), + char(109), + char(95), + char(99), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(83), + char(104), + char(97), + char(112), + char(101), + char(115), + char(0), + char(109), + char(95), + char(99), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(79), + char(98), + char(106), + char(101), + char(99), + char(116), + char(115), + char(0), + char(109), + char(95), + char(99), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(115), + char(0), + char(42), + char(102), + char(105), + char(114), + char(115), + char(116), + char(0), + char(42), + char(108), + char(97), + char(115), + char(116), + char(0), + char(109), + char(95), + char(102), + char(108), + char(111), + char(97), + char(116), + char(115), + char(91), + char(52), + char(93), + char(0), + char(109), + char(95), + char(101), + char(108), + char(91), + char(51), + char(93), + char(0), + char(109), + char(95), + char(98), + char(97), + char(115), + char(105), + char(115), + char(0), + char(109), + char(95), + char(111), + char(114), + char(105), + char(103), + char(105), + char(110), + char(0), + char(109), + char(95), + char(114), + char(111), + char(111), + char(116), + char(78), + char(111), + char(100), + char(101), + char(73), + char(110), + char(100), + char(101), + char(120), + char(0), + char(109), + char(95), + char(115), + char(117), + char(98), + char(116), + char(114), + char(101), + char(101), + char(83), + char(105), + char(122), + char(101), + char(0), + char(109), + char(95), + char(113), + char(117), + char(97), + char(110), + char(116), + char(105), + char(122), + char(101), + char(100), + char(65), + char(97), + char(98), + char(98), + char(77), + char(105), + char(110), + char(91), + char(51), + char(93), + char(0), + char(109), + char(95), + char(113), + char(117), + char(97), + char(110), + char(116), + char(105), + char(122), + char(101), + char(100), + char(65), + char(97), + char(98), + char(98), + char(77), + char(97), + char(120), + char(91), + char(51), + char(93), + char(0), + char(109), + char(95), + char(97), + char(97), + char(98), + char(98), + char(77), + char(105), + char(110), + char(79), + char(114), + char(103), + char(0), + char(109), + char(95), + char(97), + char(97), + char(98), + char(98), + char(77), + char(97), + char(120), + char(79), + char(114), + char(103), + char(0), + char(109), + char(95), + char(101), + char(115), + char(99), + char(97), + char(112), + char(101), + char(73), + char(110), + char(100), + char(101), + char(120), + char(0), + char(109), + char(95), + char(115), + char(117), + char(98), + char(80), + char(97), + char(114), + char(116), + char(0), + char(109), + char(95), + char(116), + char(114), + char(105), + char(97), + char(110), + char(103), + char(108), + char(101), + char(73), + char(110), + char(100), + char(101), + char(120), + char(0), + char(109), + char(95), + char(112), + char(97), + char(100), + char(91), + char(52), + char(93), + char(0), + char(109), + char(95), + char(101), + char(115), + char(99), + char(97), + char(112), + char(101), + char(73), + char(110), + char(100), + char(101), + char(120), + char(79), + char(114), + char(84), + char(114), + char(105), + char(97), + char(110), + char(103), + char(108), + char(101), + char(73), + char(110), + char(100), + char(101), + char(120), + char(0), + char(109), + char(95), + char(98), + char(118), + char(104), + char(65), + char(97), + char(98), + char(98), + char(77), + char(105), + char(110), + char(0), + char(109), + char(95), + char(98), + char(118), + char(104), + char(65), + char(97), + char(98), + char(98), + char(77), + char(97), + char(120), + char(0), + char(109), + char(95), + char(98), + char(118), + char(104), + char(81), + char(117), + char(97), + char(110), + char(116), + char(105), + char(122), + char(97), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(99), + char(117), + char(114), + char(78), + char(111), + char(100), + char(101), + char(73), + char(110), + char(100), + char(101), + char(120), + char(0), + char(109), + char(95), + char(117), + char(115), + char(101), + char(81), + char(117), + char(97), + char(110), + char(116), + char(105), + char(122), + char(97), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(67), + char(111), + char(110), + char(116), + char(105), + char(103), + char(117), + char(111), + char(117), + char(115), + char(76), + char(101), + char(97), + char(102), + char(78), + char(111), + char(100), + char(101), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(81), + char(117), + char(97), + char(110), + char(116), + char(105), + char(122), + char(101), + char(100), + char(67), + char(111), + char(110), + char(116), + char(105), + char(103), + char(117), + char(111), + char(117), + char(115), + char(78), + char(111), + char(100), + char(101), + char(115), + char(0), + char(42), + char(109), + char(95), + char(99), + char(111), + char(110), + char(116), + char(105), + char(103), + char(117), + char(111), + char(117), + char(115), + char(78), + char(111), + char(100), + char(101), + char(115), + char(80), + char(116), + char(114), + char(0), + char(42), + char(109), + char(95), + char(113), + char(117), + char(97), + char(110), + char(116), + char(105), + char(122), + char(101), + char(100), + char(67), + char(111), + char(110), + char(116), + char(105), + char(103), + char(117), + char(111), + char(117), + char(115), + char(78), + char(111), + char(100), + char(101), + char(115), + char(80), + char(116), + char(114), + char(0), + char(42), + char(109), + char(95), + char(115), + char(117), + char(98), + char(84), + char(114), + char(101), + char(101), + char(73), + char(110), + char(102), + char(111), + char(80), + char(116), + char(114), + char(0), + char(109), + char(95), + char(116), + char(114), + char(97), + char(118), + char(101), + char(114), + char(115), + char(97), + char(108), + char(77), + char(111), + char(100), + char(101), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(83), + char(117), + char(98), + char(116), + char(114), + char(101), + char(101), + char(72), + char(101), + char(97), + char(100), + char(101), + char(114), + char(115), + char(0), + char(42), + char(109), + char(95), + char(110), + char(97), + char(109), + char(101), + char(0), + char(109), + char(95), + char(115), + char(104), + char(97), + char(112), + char(101), + char(84), + char(121), + char(112), + char(101), + char(0), + char(109), + char(95), + char(112), + char(97), + char(100), + char(100), + char(105), + char(110), + char(103), + char(91), + char(52), + char(93), + char(0), + char(109), + char(95), + char(99), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(109), + char(95), + char(108), + char(111), + char(99), + char(97), + char(108), + char(83), + char(99), + char(97), + char(108), + char(105), + char(110), + char(103), + char(0), + char(109), + char(95), + char(112), + char(108), + char(97), + char(110), + char(101), + char(78), + char(111), + char(114), + char(109), + char(97), + char(108), + char(0), + char(109), + char(95), + char(112), + char(108), + char(97), + char(110), + char(101), + char(67), + char(111), + char(110), + char(115), + char(116), + char(97), + char(110), + char(116), + char(0), + char(109), + char(95), + char(105), + char(109), + char(112), + char(108), + char(105), + char(99), + char(105), + char(116), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(105), + char(109), + char(101), + char(110), + char(115), + char(105), + char(111), + char(110), + char(115), + char(0), + char(109), + char(95), + char(99), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(77), + char(97), + char(114), + char(103), + char(105), + char(110), + char(0), + char(109), + char(95), + char(112), + char(97), + char(100), + char(100), + char(105), + char(110), + char(103), + char(0), + char(109), + char(95), + char(112), + char(111), + char(115), + char(0), + char(109), + char(95), + char(114), + char(97), + char(100), + char(105), + char(117), + char(115), + char(0), + char(109), + char(95), + char(99), + char(111), + char(110), + char(118), + char(101), + char(120), + char(73), + char(110), + char(116), + char(101), + char(114), + char(110), + char(97), + char(108), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(42), + char(109), + char(95), + char(108), + char(111), + char(99), + char(97), + char(108), + char(80), + char(111), + char(115), + char(105), + char(116), + char(105), + char(111), + char(110), + char(65), + char(114), + char(114), + char(97), + char(121), + char(80), + char(116), + char(114), + char(0), + char(109), + char(95), + char(108), + char(111), + char(99), + char(97), + char(108), + char(80), + char(111), + char(115), + char(105), + char(116), + char(105), + char(111), + char(110), + char(65), + char(114), + char(114), + char(97), + char(121), + char(83), + char(105), + char(122), + char(101), + char(0), + char(109), + char(95), + char(118), + char(97), + char(108), + char(117), + char(101), + char(0), + char(109), + char(95), + char(112), + char(97), + char(100), + char(91), + char(50), + char(93), + char(0), + char(109), + char(95), + char(118), + char(97), + char(108), + char(117), + char(101), + char(115), + char(91), + char(51), + char(93), + char(0), + char(109), + char(95), + char(112), + char(97), + char(100), + char(0), + char(42), + char(109), + char(95), + char(118), + char(101), + char(114), + char(116), + char(105), + char(99), + char(101), + char(115), + char(51), + char(102), + char(0), + char(42), + char(109), + char(95), + char(118), + char(101), + char(114), + char(116), + char(105), + char(99), + char(101), + char(115), + char(51), + char(100), + char(0), + char(42), + char(109), + char(95), + char(105), + char(110), + char(100), + char(105), + char(99), + char(101), + char(115), + char(51), + char(50), + char(0), + char(42), + char(109), + char(95), + char(51), + char(105), + char(110), + char(100), + char(105), + char(99), + char(101), + char(115), + char(49), + char(54), + char(0), + char(42), + char(109), + char(95), + char(51), + char(105), + char(110), + char(100), + char(105), + char(99), + char(101), + char(115), + char(56), + char(0), + char(42), + char(109), + char(95), + char(105), + char(110), + char(100), + char(105), + char(99), + char(101), + char(115), + char(49), + char(54), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(84), + char(114), + char(105), + char(97), + char(110), + char(103), + char(108), + char(101), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(86), + char(101), + char(114), + char(116), + char(105), + char(99), + char(101), + char(115), + char(0), + char(42), + char(109), + char(95), + char(109), + char(101), + char(115), + char(104), + char(80), + char(97), + char(114), + char(116), + char(115), + char(80), + char(116), + char(114), + char(0), + char(109), + char(95), + char(115), + char(99), + char(97), + char(108), + char(105), + char(110), + char(103), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(77), + char(101), + char(115), + char(104), + char(80), + char(97), + char(114), + char(116), + char(115), + char(0), + char(109), + char(95), + char(109), + char(101), + char(115), + char(104), + char(73), + char(110), + char(116), + char(101), + char(114), + char(102), + char(97), + char(99), + char(101), + char(0), + char(42), + char(109), + char(95), + char(113), + char(117), + char(97), + char(110), + char(116), + char(105), + char(122), + char(101), + char(100), + char(70), + char(108), + char(111), + char(97), + char(116), + char(66), + char(118), + char(104), + char(0), + char(42), + char(109), + char(95), + char(113), + char(117), + char(97), + char(110), + char(116), + char(105), + char(122), + char(101), + char(100), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(66), + char(118), + char(104), + char(0), + char(42), + char(109), + char(95), + char(116), + char(114), + char(105), + char(97), + char(110), + char(103), + char(108), + char(101), + char(73), + char(110), + char(102), + char(111), + char(77), + char(97), + char(112), + char(0), + char(109), + char(95), + char(112), + char(97), + char(100), + char(51), + char(91), + char(52), + char(93), + char(0), + char(109), + char(95), + char(116), + char(114), + char(105), + char(109), + char(101), + char(115), + char(104), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(109), + char(95), + char(116), + char(114), + char(97), + char(110), + char(115), + char(102), + char(111), + char(114), + char(109), + char(0), + char(42), + char(109), + char(95), + char(99), + char(104), + char(105), + char(108), + char(100), + char(83), + char(104), + char(97), + char(112), + char(101), + char(0), + char(109), + char(95), + char(99), + char(104), + char(105), + char(108), + char(100), + char(83), + char(104), + char(97), + char(112), + char(101), + char(84), + char(121), + char(112), + char(101), + char(0), + char(109), + char(95), + char(99), + char(104), + char(105), + char(108), + char(100), + char(77), + char(97), + char(114), + char(103), + char(105), + char(110), + char(0), + char(42), + char(109), + char(95), + char(99), + char(104), + char(105), + char(108), + char(100), + char(83), + char(104), + char(97), + char(112), + char(101), + char(80), + char(116), + char(114), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(67), + char(104), + char(105), + char(108), + char(100), + char(83), + char(104), + char(97), + char(112), + char(101), + char(115), + char(0), + char(109), + char(95), + char(117), + char(112), + char(65), + char(120), + char(105), + char(115), + char(0), + char(109), + char(95), + char(102), + char(108), + char(97), + char(103), + char(115), + char(0), + char(109), + char(95), + char(101), + char(100), + char(103), + char(101), + char(86), + char(48), + char(86), + char(49), + char(65), + char(110), + char(103), + char(108), + char(101), + char(0), + char(109), + char(95), + char(101), + char(100), + char(103), + char(101), + char(86), + char(49), + char(86), + char(50), + char(65), + char(110), + char(103), + char(108), + char(101), + char(0), + char(109), + char(95), + char(101), + char(100), + char(103), + char(101), + char(86), + char(50), + char(86), + char(48), + char(65), + char(110), + char(103), + char(108), + char(101), + char(0), + char(42), + char(109), + char(95), + char(104), + char(97), + char(115), + char(104), + char(84), + char(97), + char(98), + char(108), + char(101), + char(80), + char(116), + char(114), + char(0), + char(42), + char(109), + char(95), + char(110), + char(101), + char(120), + char(116), + char(80), + char(116), + char(114), + char(0), + char(42), + char(109), + char(95), + char(118), + char(97), + char(108), + char(117), + char(101), + char(65), + char(114), + char(114), + char(97), + char(121), + char(80), + char(116), + char(114), + char(0), + char(42), + char(109), + char(95), + char(107), + char(101), + char(121), + char(65), + char(114), + char(114), + char(97), + char(121), + char(80), + char(116), + char(114), + char(0), + char(109), + char(95), + char(99), + char(111), + char(110), + char(118), + char(101), + char(120), + char(69), + char(112), + char(115), + char(105), + char(108), + char(111), + char(110), + char(0), + char(109), + char(95), + char(112), + char(108), + char(97), + char(110), + char(97), + char(114), + char(69), + char(112), + char(115), + char(105), + char(108), + char(111), + char(110), + char(0), + char(109), + char(95), + char(101), + char(113), + char(117), + char(97), + char(108), + char(86), + char(101), + char(114), + char(116), + char(101), + char(120), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(0), + char(109), + char(95), + char(101), + char(100), + char(103), + char(101), + char(68), + char(105), + char(115), + char(116), + char(97), + char(110), + char(99), + char(101), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(0), + char(109), + char(95), + char(122), + char(101), + char(114), + char(111), + char(65), + char(114), + char(101), + char(97), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(0), + char(109), + char(95), + char(110), + char(101), + char(120), + char(116), + char(83), + char(105), + char(122), + char(101), + char(0), + char(109), + char(95), + char(104), + char(97), + char(115), + char(104), + char(84), + char(97), + char(98), + char(108), + char(101), + char(83), + char(105), + char(122), + char(101), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(86), + char(97), + char(108), + char(117), + char(101), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(75), + char(101), + char(121), + char(115), + char(0), + char(109), + char(95), + char(103), + char(105), + char(109), + char(112), + char(97), + char(99), + char(116), + char(83), + char(117), + char(98), + char(84), + char(121), + char(112), + char(101), + char(0), + char(42), + char(109), + char(95), + char(117), + char(110), + char(115), + char(99), + char(97), + char(108), + char(101), + char(100), + char(80), + char(111), + char(105), + char(110), + char(116), + char(115), + char(70), + char(108), + char(111), + char(97), + char(116), + char(80), + char(116), + char(114), + char(0), + char(42), + char(109), + char(95), + char(117), + char(110), + char(115), + char(99), + char(97), + char(108), + char(101), + char(100), + char(80), + char(111), + char(105), + char(110), + char(116), + char(115), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(80), + char(116), + char(114), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(85), + char(110), + char(115), + char(99), + char(97), + char(108), + char(101), + char(100), + char(80), + char(111), + char(105), + char(110), + char(116), + char(115), + char(0), + char(109), + char(95), + char(112), + char(97), + char(100), + char(100), + char(105), + char(110), + char(103), + char(51), + char(91), + char(52), + char(93), + char(0), + char(42), + char(109), + char(95), + char(98), + char(114), + char(111), + char(97), + char(100), + char(112), + char(104), + char(97), + char(115), + char(101), + char(72), + char(97), + char(110), + char(100), + char(108), + char(101), + char(0), + char(42), + char(109), + char(95), + char(99), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(83), + char(104), + char(97), + char(112), + char(101), + char(0), + char(42), + char(109), + char(95), + char(114), + char(111), + char(111), + char(116), + char(67), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(83), + char(104), + char(97), + char(112), + char(101), + char(0), + char(109), + char(95), + char(119), + char(111), + char(114), + char(108), + char(100), + char(84), + char(114), + char(97), + char(110), + char(115), + char(102), + char(111), + char(114), + char(109), + char(0), + char(109), + char(95), + char(105), + char(110), + char(116), + char(101), + char(114), + char(112), + char(111), + char(108), + char(97), + char(116), + char(105), + char(111), + char(110), + char(87), + char(111), + char(114), + char(108), + char(100), + char(84), + char(114), + char(97), + char(110), + char(115), + char(102), + char(111), + char(114), + char(109), + char(0), + char(109), + char(95), + char(105), + char(110), + char(116), + char(101), + char(114), + char(112), + char(111), + char(108), + char(97), + char(116), + char(105), + char(111), + char(110), + char(76), + char(105), + char(110), + char(101), + char(97), + char(114), + char(86), + char(101), + char(108), + char(111), + char(99), + char(105), + char(116), + char(121), + char(0), + char(109), + char(95), + char(105), + char(110), + char(116), + char(101), + char(114), + char(112), + char(111), + char(108), + char(97), + char(116), + char(105), + char(111), + char(110), + char(65), + char(110), + char(103), + char(117), + char(108), + char(97), + char(114), + char(86), + char(101), + char(108), + char(111), + char(99), + char(105), + char(116), + char(121), + char(0), + char(109), + char(95), + char(97), + char(110), + char(105), + char(115), + char(111), + char(116), + char(114), + char(111), + char(112), + char(105), + char(99), + char(70), + char(114), + char(105), + char(99), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(99), + char(111), + char(110), + char(116), + char(97), + char(99), + char(116), + char(80), + char(114), + char(111), + char(99), + char(101), + char(115), + char(115), + char(105), + char(110), + char(103), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(0), + char(109), + char(95), + char(100), + char(101), + char(97), + char(99), + char(116), + char(105), + char(118), + char(97), + char(116), + char(105), + char(111), + char(110), + char(84), + char(105), + char(109), + char(101), + char(0), + char(109), + char(95), + char(102), + char(114), + char(105), + char(99), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(114), + char(111), + char(108), + char(108), + char(105), + char(110), + char(103), + char(70), + char(114), + char(105), + char(99), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(114), + char(101), + char(115), + char(116), + char(105), + char(116), + char(117), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(104), + char(105), + char(116), + char(70), + char(114), + char(97), + char(99), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(99), + char(99), + char(100), + char(83), + char(119), + char(101), + char(112), + char(116), + char(83), + char(112), + char(104), + char(101), + char(114), + char(101), + char(82), + char(97), + char(100), + char(105), + char(117), + char(115), + char(0), + char(109), + char(95), + char(99), + char(99), + char(100), + char(77), + char(111), + char(116), + char(105), + char(111), + char(110), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(0), + char(109), + char(95), + char(104), + char(97), + char(115), + char(65), + char(110), + char(105), + char(115), + char(111), + char(116), + char(114), + char(111), + char(112), + char(105), + char(99), + char(70), + char(114), + char(105), + char(99), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(99), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(70), + char(108), + char(97), + char(103), + char(115), + char(0), + char(109), + char(95), + char(105), + char(115), + char(108), + char(97), + char(110), + char(100), + char(84), + char(97), + char(103), + char(49), + char(0), + char(109), + char(95), + char(99), + char(111), + char(109), + char(112), + char(97), + char(110), + char(105), + char(111), + char(110), + char(73), + char(100), + char(0), + char(109), + char(95), + char(97), + char(99), + char(116), + char(105), + char(118), + char(97), + char(116), + char(105), + char(111), + char(110), + char(83), + char(116), + char(97), + char(116), + char(101), + char(49), + char(0), + char(109), + char(95), + char(105), + char(110), + char(116), + char(101), + char(114), + char(110), + char(97), + char(108), + char(84), + char(121), + char(112), + char(101), + char(0), + char(109), + char(95), + char(99), + char(104), + char(101), + char(99), + char(107), + char(67), + char(111), + char(108), + char(108), + char(105), + char(100), + char(101), + char(87), + char(105), + char(116), + char(104), + char(0), + char(109), + char(95), + char(115), + char(111), + char(108), + char(118), + char(101), + char(114), + char(73), + char(110), + char(102), + char(111), + char(0), + char(109), + char(95), + char(103), + char(114), + char(97), + char(118), + char(105), + char(116), + char(121), + char(0), + char(109), + char(95), + char(99), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(79), + char(98), + char(106), + char(101), + char(99), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(109), + char(95), + char(105), + char(110), + char(118), + char(73), + char(110), + char(101), + char(114), + char(116), + char(105), + char(97), + char(84), + char(101), + char(110), + char(115), + char(111), + char(114), + char(87), + char(111), + char(114), + char(108), + char(100), + char(0), + char(109), + char(95), + char(108), + char(105), + char(110), + char(101), + char(97), + char(114), + char(86), + char(101), + char(108), + char(111), + char(99), + char(105), + char(116), + char(121), + char(0), + char(109), + char(95), + char(97), + char(110), + char(103), + char(117), + char(108), + char(97), + char(114), + char(86), + char(101), + char(108), + char(111), + char(99), + char(105), + char(116), + char(121), + char(0), + char(109), + char(95), + char(97), + char(110), + char(103), + char(117), + char(108), + char(97), + char(114), + char(70), + char(97), + char(99), + char(116), + char(111), + char(114), + char(0), + char(109), + char(95), + char(108), + char(105), + char(110), + char(101), + char(97), + char(114), + char(70), + char(97), + char(99), + char(116), + char(111), + char(114), + char(0), + char(109), + char(95), + char(103), + char(114), + char(97), + char(118), + char(105), + char(116), + char(121), + char(95), + char(97), + char(99), + char(99), + char(101), + char(108), + char(101), + char(114), + char(97), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(105), + char(110), + char(118), + char(73), + char(110), + char(101), + char(114), + char(116), + char(105), + char(97), + char(76), + char(111), + char(99), + char(97), + char(108), + char(0), + char(109), + char(95), + char(116), + char(111), + char(116), + char(97), + char(108), + char(70), + char(111), + char(114), + char(99), + char(101), + char(0), + char(109), + char(95), + char(116), + char(111), + char(116), + char(97), + char(108), + char(84), + char(111), + char(114), + char(113), + char(117), + char(101), + char(0), + char(109), + char(95), + char(105), + char(110), + char(118), + char(101), + char(114), + char(115), + char(101), + char(77), + char(97), + char(115), + char(115), + char(0), + char(109), + char(95), + char(108), + char(105), + char(110), + char(101), + char(97), + char(114), + char(68), + char(97), + char(109), + char(112), + char(105), + char(110), + char(103), + char(0), + char(109), + char(95), + char(97), + char(110), + char(103), + char(117), + char(108), + char(97), + char(114), + char(68), + char(97), + char(109), + char(112), + char(105), + char(110), + char(103), + char(0), + char(109), + char(95), + char(97), + char(100), + char(100), + char(105), + char(116), + char(105), + char(111), + char(110), + char(97), + char(108), + char(68), + char(97), + char(109), + char(112), + char(105), + char(110), + char(103), + char(70), + char(97), + char(99), + char(116), + char(111), + char(114), + char(0), + char(109), + char(95), + char(97), + char(100), + char(100), + char(105), + char(116), + char(105), + char(111), + char(110), + char(97), + char(108), + char(76), + char(105), + char(110), + char(101), + char(97), + char(114), + char(68), + char(97), + char(109), + char(112), + char(105), + char(110), + char(103), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(83), + char(113), + char(114), + char(0), + char(109), + char(95), + char(97), + char(100), + char(100), + char(105), + char(116), + char(105), + char(111), + char(110), + char(97), + char(108), + char(65), + char(110), + char(103), + char(117), + char(108), + char(97), + char(114), + char(68), + char(97), + char(109), + char(112), + char(105), + char(110), + char(103), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(83), + char(113), + char(114), + char(0), + char(109), + char(95), + char(97), + char(100), + char(100), + char(105), + char(116), + char(105), + char(111), + char(110), + char(97), + char(108), + char(65), + char(110), + char(103), + char(117), + char(108), + char(97), + char(114), + char(68), + char(97), + char(109), + char(112), + char(105), + char(110), + char(103), + char(70), + char(97), + char(99), + char(116), + char(111), + char(114), + char(0), + char(109), + char(95), + char(108), + char(105), + char(110), + char(101), + char(97), + char(114), + char(83), + char(108), + char(101), + char(101), + char(112), + char(105), + char(110), + char(103), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(0), + char(109), + char(95), + char(97), + char(110), + char(103), + char(117), + char(108), + char(97), + char(114), + char(83), + char(108), + char(101), + char(101), + char(112), + char(105), + char(110), + char(103), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(0), + char(109), + char(95), + char(97), + char(100), + char(100), + char(105), + char(116), + char(105), + char(111), + char(110), + char(97), + char(108), + char(68), + char(97), + char(109), + char(112), + char(105), + char(110), + char(103), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(82), + char(111), + char(119), + char(115), + char(0), + char(110), + char(117), + char(98), + char(0), + char(42), + char(109), + char(95), + char(114), + char(98), + char(65), + char(0), + char(42), + char(109), + char(95), + char(114), + char(98), + char(66), + char(0), + char(109), + char(95), + char(111), + char(98), + char(106), + char(101), + char(99), + char(116), + char(84), + char(121), + char(112), + char(101), + char(0), + char(109), + char(95), + char(117), + char(115), + char(101), + char(114), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(84), + char(121), + char(112), + char(101), + char(0), + char(109), + char(95), + char(117), + char(115), + char(101), + char(114), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(73), + char(100), + char(0), + char(109), + char(95), + char(110), + char(101), + char(101), + char(100), + char(115), + char(70), + char(101), + char(101), + char(100), + char(98), + char(97), + char(99), + char(107), + char(0), + char(109), + char(95), + char(97), + char(112), + char(112), + char(108), + char(105), + char(101), + char(100), + char(73), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(0), + char(109), + char(95), + char(100), + char(98), + char(103), + char(68), + char(114), + char(97), + char(119), + char(83), + char(105), + char(122), + char(101), + char(0), + char(109), + char(95), + char(100), + char(105), + char(115), + char(97), + char(98), + char(108), + char(101), + char(67), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(115), + char(66), + char(101), + char(116), + char(119), + char(101), + char(101), + char(110), + char(76), + char(105), + char(110), + char(107), + char(101), + char(100), + char(66), + char(111), + char(100), + char(105), + char(101), + char(115), + char(0), + char(109), + char(95), + char(111), + char(118), + char(101), + char(114), + char(114), + char(105), + char(100), + char(101), + char(78), + char(117), + char(109), + char(83), + char(111), + char(108), + char(118), + char(101), + char(114), + char(73), + char(116), + char(101), + char(114), + char(97), + char(116), + char(105), + char(111), + char(110), + char(115), + char(0), + char(109), + char(95), + char(98), + char(114), + char(101), + char(97), + char(107), + char(105), + char(110), + char(103), + char(73), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(0), + char(109), + char(95), + char(105), + char(115), + char(69), + char(110), + char(97), + char(98), + char(108), + char(101), + char(100), + char(0), + char(109), + char(95), + char(116), + char(121), + char(112), + char(101), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(109), + char(95), + char(112), + char(105), + char(118), + char(111), + char(116), + char(73), + char(110), + char(65), + char(0), + char(109), + char(95), + char(112), + char(105), + char(118), + char(111), + char(116), + char(73), + char(110), + char(66), + char(0), + char(109), + char(95), + char(114), + char(98), + char(65), + char(70), + char(114), + char(97), + char(109), + char(101), + char(0), + char(109), + char(95), + char(114), + char(98), + char(66), + char(70), + char(114), + char(97), + char(109), + char(101), + char(0), + char(109), + char(95), + char(117), + char(115), + char(101), + char(82), + char(101), + char(102), + char(101), + char(114), + char(101), + char(110), + char(99), + char(101), + char(70), + char(114), + char(97), + char(109), + char(101), + char(65), + char(0), + char(109), + char(95), + char(97), + char(110), + char(103), + char(117), + char(108), + char(97), + char(114), + char(79), + char(110), + char(108), + char(121), + char(0), + char(109), + char(95), + char(101), + char(110), + char(97), + char(98), + char(108), + char(101), + char(65), + char(110), + char(103), + char(117), + char(108), + char(97), + char(114), + char(77), + char(111), + char(116), + char(111), + char(114), + char(0), + char(109), + char(95), + char(109), + char(111), + char(116), + char(111), + char(114), + char(84), + char(97), + char(114), + char(103), + char(101), + char(116), + char(86), + char(101), + char(108), + char(111), + char(99), + char(105), + char(116), + char(121), + char(0), + char(109), + char(95), + char(109), + char(97), + char(120), + char(77), + char(111), + char(116), + char(111), + char(114), + char(73), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(0), + char(109), + char(95), + char(108), + char(111), + char(119), + char(101), + char(114), + char(76), + char(105), + char(109), + char(105), + char(116), + char(0), + char(109), + char(95), + char(117), + char(112), + char(112), + char(101), + char(114), + char(76), + char(105), + char(109), + char(105), + char(116), + char(0), + char(109), + char(95), + char(108), + char(105), + char(109), + char(105), + char(116), + char(83), + char(111), + char(102), + char(116), + char(110), + char(101), + char(115), + char(115), + char(0), + char(109), + char(95), + char(98), + char(105), + char(97), + char(115), + char(70), + char(97), + char(99), + char(116), + char(111), + char(114), + char(0), + char(109), + char(95), + char(114), + char(101), + char(108), + char(97), + char(120), + char(97), + char(116), + char(105), + char(111), + char(110), + char(70), + char(97), + char(99), + char(116), + char(111), + char(114), + char(0), + char(109), + char(95), + char(115), + char(119), + char(105), + char(110), + char(103), + char(83), + char(112), + char(97), + char(110), + char(49), + char(0), + char(109), + char(95), + char(115), + char(119), + char(105), + char(110), + char(103), + char(83), + char(112), + char(97), + char(110), + char(50), + char(0), + char(109), + char(95), + char(116), + char(119), + char(105), + char(115), + char(116), + char(83), + char(112), + char(97), + char(110), + char(0), + char(109), + char(95), + char(100), + char(97), + char(109), + char(112), + char(105), + char(110), + char(103), + char(0), + char(109), + char(95), + char(108), + char(105), + char(110), + char(101), + char(97), + char(114), + char(85), + char(112), + char(112), + char(101), + char(114), + char(76), + char(105), + char(109), + char(105), + char(116), + char(0), + char(109), + char(95), + char(108), + char(105), + char(110), + char(101), + char(97), + char(114), + char(76), + char(111), + char(119), + char(101), + char(114), + char(76), + char(105), + char(109), + char(105), + char(116), + char(0), + char(109), + char(95), + char(97), + char(110), + char(103), + char(117), + char(108), + char(97), + char(114), + char(85), + char(112), + char(112), + char(101), + char(114), + char(76), + char(105), + char(109), + char(105), + char(116), + char(0), + char(109), + char(95), + char(97), + char(110), + char(103), + char(117), + char(108), + char(97), + char(114), + char(76), + char(111), + char(119), + char(101), + char(114), + char(76), + char(105), + char(109), + char(105), + char(116), + char(0), + char(109), + char(95), + char(117), + char(115), + char(101), + char(76), + char(105), + char(110), + char(101), + char(97), + char(114), + char(82), + char(101), + char(102), + char(101), + char(114), + char(101), + char(110), + char(99), + char(101), + char(70), + char(114), + char(97), + char(109), + char(101), + char(65), + char(0), + char(109), + char(95), + char(117), + char(115), + char(101), + char(79), + char(102), + char(102), + char(115), + char(101), + char(116), + char(70), + char(111), + char(114), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(70), + char(114), + char(97), + char(109), + char(101), + char(0), + char(109), + char(95), + char(54), + char(100), + char(111), + char(102), + char(68), + char(97), + char(116), + char(97), + char(0), + char(109), + char(95), + char(115), + char(112), + char(114), + char(105), + char(110), + char(103), + char(69), + char(110), + char(97), + char(98), + char(108), + char(101), + char(100), + char(91), + char(54), + char(93), + char(0), + char(109), + char(95), + char(101), + char(113), + char(117), + char(105), + char(108), + char(105), + char(98), + char(114), + char(105), + char(117), + char(109), + char(80), + char(111), + char(105), + char(110), + char(116), + char(91), + char(54), + char(93), + char(0), + char(109), + char(95), + char(115), + char(112), + char(114), + char(105), + char(110), + char(103), + char(83), + char(116), + char(105), + char(102), + char(102), + char(110), + char(101), + char(115), + char(115), + char(91), + char(54), + char(93), + char(0), + char(109), + char(95), + char(115), + char(112), + char(114), + char(105), + char(110), + char(103), + char(68), + char(97), + char(109), + char(112), + char(105), + char(110), + char(103), + char(91), + char(54), + char(93), + char(0), + char(109), + char(95), + char(116), + char(97), + char(117), + char(0), + char(109), + char(95), + char(116), + char(105), + char(109), + char(101), + char(83), + char(116), + char(101), + char(112), + char(0), + char(109), + char(95), + char(109), + char(97), + char(120), + char(69), + char(114), + char(114), + char(111), + char(114), + char(82), + char(101), + char(100), + char(117), + char(99), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(115), + char(111), + char(114), + char(0), + char(109), + char(95), + char(101), + char(114), + char(112), + char(0), + char(109), + char(95), + char(101), + char(114), + char(112), + char(50), + char(0), + char(109), + char(95), + char(103), + char(108), + char(111), + char(98), + char(97), + char(108), + char(67), + char(102), + char(109), + char(0), + char(109), + char(95), + char(115), + char(112), + char(108), + char(105), + char(116), + char(73), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(80), + char(101), + char(110), + char(101), + char(116), + char(114), + char(97), + char(116), + char(105), + char(111), + char(110), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(0), + char(109), + char(95), + char(115), + char(112), + char(108), + char(105), + char(116), + char(73), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(84), + char(117), + char(114), + char(110), + char(69), + char(114), + char(112), + char(0), + char(109), + char(95), + char(108), + char(105), + char(110), + char(101), + char(97), + char(114), + char(83), + char(108), + char(111), + char(112), + char(0), + char(109), + char(95), + char(119), + char(97), + char(114), + char(109), + char(115), + char(116), + char(97), + char(114), + char(116), + char(105), + char(110), + char(103), + char(70), + char(97), + char(99), + char(116), + char(111), + char(114), + char(0), + char(109), + char(95), + char(109), + char(97), + char(120), + char(71), + char(121), + char(114), + char(111), + char(115), + char(99), + char(111), + char(112), + char(105), + char(99), + char(70), + char(111), + char(114), + char(99), + char(101), + char(0), + char(109), + char(95), + char(115), + char(105), + char(110), + char(103), + char(108), + char(101), + char(65), + char(120), + char(105), + char(115), + char(82), + char(111), + char(108), + char(108), + char(105), + char(110), + char(103), + char(70), + char(114), + char(105), + char(99), + char(116), + char(105), + char(111), + char(110), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(73), + char(116), + char(101), + char(114), + char(97), + char(116), + char(105), + char(111), + char(110), + char(115), + char(0), + char(109), + char(95), + char(115), + char(111), + char(108), + char(118), + char(101), + char(114), + char(77), + char(111), + char(100), + char(101), + char(0), + char(109), + char(95), + char(114), + char(101), + char(115), + char(116), + char(105), + char(110), + char(103), + char(67), + char(111), + char(110), + char(116), + char(97), + char(99), + char(116), + char(82), + char(101), + char(115), + char(116), + char(105), + char(116), + char(117), + char(116), + char(105), + char(111), + char(110), + char(84), + char(104), + char(114), + char(101), + char(115), + char(104), + char(111), + char(108), + char(100), + char(0), + char(109), + char(95), + char(109), + char(105), + char(110), + char(105), + char(109), + char(117), + char(109), + char(83), + char(111), + char(108), + char(118), + char(101), + char(114), + char(66), + char(97), + char(116), + char(99), + char(104), + char(83), + char(105), + char(122), + char(101), + char(0), + char(109), + char(95), + char(115), + char(112), + char(108), + char(105), + char(116), + char(73), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(0), + char(109), + char(95), + char(108), + char(105), + char(110), + char(101), + char(97), + char(114), + char(83), + char(116), + char(105), + char(102), + char(102), + char(110), + char(101), + char(115), + char(115), + char(0), + char(109), + char(95), + char(97), + char(110), + char(103), + char(117), + char(108), + char(97), + char(114), + char(83), + char(116), + char(105), + char(102), + char(102), + char(110), + char(101), + char(115), + char(115), + char(0), + char(109), + char(95), + char(118), + char(111), + char(108), + char(117), + char(109), + char(101), + char(83), + char(116), + char(105), + char(102), + char(102), + char(110), + char(101), + char(115), + char(115), + char(0), + char(42), + char(109), + char(95), + char(109), + char(97), + char(116), + char(101), + char(114), + char(105), + char(97), + char(108), + char(0), + char(109), + char(95), + char(112), + char(111), + char(115), + char(105), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(112), + char(114), + char(101), + char(118), + char(105), + char(111), + char(117), + char(115), + char(80), + char(111), + char(115), + char(105), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(118), + char(101), + char(108), + char(111), + char(99), + char(105), + char(116), + char(121), + char(0), + char(109), + char(95), + char(97), + char(99), + char(99), + char(117), + char(109), + char(117), + char(108), + char(97), + char(116), + char(101), + char(100), + char(70), + char(111), + char(114), + char(99), + char(101), + char(0), + char(109), + char(95), + char(110), + char(111), + char(114), + char(109), + char(97), + char(108), + char(0), + char(109), + char(95), + char(97), + char(114), + char(101), + char(97), + char(0), + char(109), + char(95), + char(97), + char(116), + char(116), + char(97), + char(99), + char(104), + char(0), + char(109), + char(95), + char(110), + char(111), + char(100), + char(101), + char(73), + char(110), + char(100), + char(105), + char(99), + char(101), + char(115), + char(91), + char(50), + char(93), + char(0), + char(109), + char(95), + char(114), + char(101), + char(115), + char(116), + char(76), + char(101), + char(110), + char(103), + char(116), + char(104), + char(0), + char(109), + char(95), + char(98), + char(98), + char(101), + char(110), + char(100), + char(105), + char(110), + char(103), + char(0), + char(109), + char(95), + char(110), + char(111), + char(100), + char(101), + char(73), + char(110), + char(100), + char(105), + char(99), + char(101), + char(115), + char(91), + char(51), + char(93), + char(0), + char(109), + char(95), + char(114), + char(101), + char(115), + char(116), + char(65), + char(114), + char(101), + char(97), + char(0), + char(109), + char(95), + char(99), + char(48), + char(91), + char(52), + char(93), + char(0), + char(109), + char(95), + char(110), + char(111), + char(100), + char(101), + char(73), + char(110), + char(100), + char(105), + char(99), + char(101), + char(115), + char(91), + char(52), + char(93), + char(0), + char(109), + char(95), + char(114), + char(101), + char(115), + char(116), + char(86), + char(111), + char(108), + char(117), + char(109), + char(101), + char(0), + char(109), + char(95), + char(99), + char(49), + char(0), + char(109), + char(95), + char(99), + char(50), + char(0), + char(109), + char(95), + char(99), + char(48), + char(0), + char(109), + char(95), + char(108), + char(111), + char(99), + char(97), + char(108), + char(70), + char(114), + char(97), + char(109), + char(101), + char(0), + char(42), + char(109), + char(95), + char(114), + char(105), + char(103), + char(105), + char(100), + char(66), + char(111), + char(100), + char(121), + char(0), + char(109), + char(95), + char(110), + char(111), + char(100), + char(101), + char(73), + char(110), + char(100), + char(101), + char(120), + char(0), + char(109), + char(95), + char(97), + char(101), + char(114), + char(111), + char(77), + char(111), + char(100), + char(101), + char(108), + char(0), + char(109), + char(95), + char(98), + char(97), + char(117), + char(109), + char(103), + char(97), + char(114), + char(116), + char(101), + char(0), + char(109), + char(95), + char(100), + char(114), + char(97), + char(103), + char(0), + char(109), + char(95), + char(108), + char(105), + char(102), + char(116), + char(0), + char(109), + char(95), + char(112), + char(114), + char(101), + char(115), + char(115), + char(117), + char(114), + char(101), + char(0), + char(109), + char(95), + char(118), + char(111), + char(108), + char(117), + char(109), + char(101), + char(0), + char(109), + char(95), + char(100), + char(121), + char(110), + char(97), + char(109), + char(105), + char(99), + char(70), + char(114), + char(105), + char(99), + char(116), + char(105), + char(111), + char(110), + char(0), + char(109), + char(95), + char(112), + char(111), + char(115), + char(101), + char(77), + char(97), + char(116), + char(99), + char(104), + char(0), + char(109), + char(95), + char(114), + char(105), + char(103), + char(105), + char(100), + char(67), + char(111), + char(110), + char(116), + char(97), + char(99), + char(116), + char(72), + char(97), + char(114), + char(100), + char(110), + char(101), + char(115), + char(115), + char(0), + char(109), + char(95), + char(107), + char(105), + char(110), + char(101), + char(116), + char(105), + char(99), + char(67), + char(111), + char(110), + char(116), + char(97), + char(99), + char(116), + char(72), + char(97), + char(114), + char(100), + char(110), + char(101), + char(115), + char(115), + char(0), + char(109), + char(95), + char(115), + char(111), + char(102), + char(116), + char(67), + char(111), + char(110), + char(116), + char(97), + char(99), + char(116), + char(72), + char(97), + char(114), + char(100), + char(110), + char(101), + char(115), + char(115), + char(0), + char(109), + char(95), + char(97), + char(110), + char(99), + char(104), + char(111), + char(114), + char(72), + char(97), + char(114), + char(100), + char(110), + char(101), + char(115), + char(115), + char(0), + char(109), + char(95), + char(115), + char(111), + char(102), + char(116), + char(82), + char(105), + char(103), + char(105), + char(100), + char(67), + char(108), + char(117), + char(115), + char(116), + char(101), + char(114), + char(72), + char(97), + char(114), + char(100), + char(110), + char(101), + char(115), + char(115), + char(0), + char(109), + char(95), + char(115), + char(111), + char(102), + char(116), + char(75), + char(105), + char(110), + char(101), + char(116), + char(105), + char(99), + char(67), + char(108), + char(117), + char(115), + char(116), + char(101), + char(114), + char(72), + char(97), + char(114), + char(100), + char(110), + char(101), + char(115), + char(115), + char(0), + char(109), + char(95), + char(115), + char(111), + char(102), + char(116), + char(83), + char(111), + char(102), + char(116), + char(67), + char(108), + char(117), + char(115), + char(116), + char(101), + char(114), + char(72), + char(97), + char(114), + char(100), + char(110), + char(101), + char(115), + char(115), + char(0), + char(109), + char(95), + char(115), + char(111), + char(102), + char(116), + char(82), + char(105), + char(103), + char(105), + char(100), + char(67), + char(108), + char(117), + char(115), + char(116), + char(101), + char(114), + char(73), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(83), + char(112), + char(108), + char(105), + char(116), + char(0), + char(109), + char(95), + char(115), + char(111), + char(102), + char(116), + char(75), + char(105), + char(110), + char(101), + char(116), + char(105), + char(99), + char(67), + char(108), + char(117), + char(115), + char(116), + char(101), + char(114), + char(73), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(83), + char(112), + char(108), + char(105), + char(116), + char(0), + char(109), + char(95), + char(115), + char(111), + char(102), + char(116), + char(83), + char(111), + char(102), + char(116), + char(67), + char(108), + char(117), + char(115), + char(116), + char(101), + char(114), + char(73), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(83), + char(112), + char(108), + char(105), + char(116), + char(0), + char(109), + char(95), + char(109), + char(97), + char(120), + char(86), + char(111), + char(108), + char(117), + char(109), + char(101), + char(0), + char(109), + char(95), + char(116), + char(105), + char(109), + char(101), + char(83), + char(99), + char(97), + char(108), + char(101), + char(0), + char(109), + char(95), + char(118), + char(101), + char(108), + char(111), + char(99), + char(105), + char(116), + char(121), + char(73), + char(116), + char(101), + char(114), + char(97), + char(116), + char(105), + char(111), + char(110), + char(115), + char(0), + char(109), + char(95), + char(112), + char(111), + char(115), + char(105), + char(116), + char(105), + char(111), + char(110), + char(73), + char(116), + char(101), + char(114), + char(97), + char(116), + char(105), + char(111), + char(110), + char(115), + char(0), + char(109), + char(95), + char(100), + char(114), + char(105), + char(102), + char(116), + char(73), + char(116), + char(101), + char(114), + char(97), + char(116), + char(105), + char(111), + char(110), + char(115), + char(0), + char(109), + char(95), + char(99), + char(108), + char(117), + char(115), + char(116), + char(101), + char(114), + char(73), + char(116), + char(101), + char(114), + char(97), + char(116), + char(105), + char(111), + char(110), + char(115), + char(0), + char(109), + char(95), + char(114), + char(111), + char(116), + char(0), + char(109), + char(95), + char(115), + char(99), + char(97), + char(108), + char(101), + char(0), + char(109), + char(95), + char(97), + char(113), + char(113), + char(0), + char(109), + char(95), + char(99), + char(111), + char(109), + char(0), + char(42), + char(109), + char(95), + char(112), + char(111), + char(115), + char(105), + char(116), + char(105), + char(111), + char(110), + char(115), + char(0), + char(42), + char(109), + char(95), + char(119), + char(101), + char(105), + char(103), + char(104), + char(116), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(80), + char(111), + char(115), + char(105), + char(116), + char(105), + char(111), + char(110), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(87), + char(101), + char(105), + char(103), + char(116), + char(115), + char(0), + char(109), + char(95), + char(98), + char(118), + char(111), + char(108), + char(117), + char(109), + char(101), + char(0), + char(109), + char(95), + char(98), + char(102), + char(114), + char(97), + char(109), + char(101), + char(0), + char(109), + char(95), + char(102), + char(114), + char(97), + char(109), + char(101), + char(120), + char(102), + char(111), + char(114), + char(109), + char(0), + char(109), + char(95), + char(108), + char(111), + char(99), + char(105), + char(105), + char(0), + char(109), + char(95), + char(105), + char(110), + char(118), + char(119), + char(105), + char(0), + char(109), + char(95), + char(118), + char(105), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(115), + char(91), + char(50), + char(93), + char(0), + char(109), + char(95), + char(100), + char(105), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(115), + char(91), + char(50), + char(93), + char(0), + char(109), + char(95), + char(108), + char(118), + char(0), + char(109), + char(95), + char(97), + char(118), + char(0), + char(42), + char(109), + char(95), + char(102), + char(114), + char(97), + char(109), + char(101), + char(114), + char(101), + char(102), + char(115), + char(0), + char(42), + char(109), + char(95), + char(110), + char(111), + char(100), + char(101), + char(73), + char(110), + char(100), + char(105), + char(99), + char(101), + char(115), + char(0), + char(42), + char(109), + char(95), + char(109), + char(97), + char(115), + char(115), + char(101), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(70), + char(114), + char(97), + char(109), + char(101), + char(82), + char(101), + char(102), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(78), + char(111), + char(100), + char(101), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(77), + char(97), + char(115), + char(115), + char(101), + char(115), + char(0), + char(109), + char(95), + char(105), + char(100), + char(109), + char(97), + char(115), + char(115), + char(0), + char(109), + char(95), + char(105), + char(109), + char(97), + char(115), + char(115), + char(0), + char(109), + char(95), + char(110), + char(118), + char(105), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(115), + char(0), + char(109), + char(95), + char(110), + char(100), + char(105), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(115), + char(0), + char(109), + char(95), + char(110), + char(100), + char(97), + char(109), + char(112), + char(105), + char(110), + char(103), + char(0), + char(109), + char(95), + char(108), + char(100), + char(97), + char(109), + char(112), + char(105), + char(110), + char(103), + char(0), + char(109), + char(95), + char(97), + char(100), + char(97), + char(109), + char(112), + char(105), + char(110), + char(103), + char(0), + char(109), + char(95), + char(109), + char(97), + char(116), + char(99), + char(104), + char(105), + char(110), + char(103), + char(0), + char(109), + char(95), + char(109), + char(97), + char(120), + char(83), + char(101), + char(108), + char(102), + char(67), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(73), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(0), + char(109), + char(95), + char(115), + char(101), + char(108), + char(102), + char(67), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(73), + char(109), + char(112), + char(117), + char(108), + char(115), + char(101), + char(70), + char(97), + char(99), + char(116), + char(111), + char(114), + char(0), + char(109), + char(95), + char(99), + char(111), + char(110), + char(116), + char(97), + char(105), + char(110), + char(115), + char(65), + char(110), + char(99), + char(104), + char(111), + char(114), + char(0), + char(109), + char(95), + char(99), + char(111), + char(108), + char(108), + char(105), + char(100), + char(101), + char(0), + char(109), + char(95), + char(99), + char(108), + char(117), + char(115), + char(116), + char(101), + char(114), + char(73), + char(110), + char(100), + char(101), + char(120), + char(0), + char(42), + char(109), + char(95), + char(98), + char(111), + char(100), + char(121), + char(65), + char(0), + char(42), + char(109), + char(95), + char(98), + char(111), + char(100), + char(121), + char(66), + char(0), + char(109), + char(95), + char(114), + char(101), + char(102), + char(115), + char(91), + char(50), + char(93), + char(0), + char(109), + char(95), + char(99), + char(102), + char(109), + char(0), + char(109), + char(95), + char(115), + char(112), + char(108), + char(105), + char(116), + char(0), + char(109), + char(95), + char(100), + char(101), + char(108), + char(101), + char(116), + char(101), + char(0), + char(109), + char(95), + char(114), + char(101), + char(108), + char(80), + char(111), + char(115), + char(105), + char(116), + char(105), + char(111), + char(110), + char(91), + char(50), + char(93), + char(0), + char(109), + char(95), + char(98), + char(111), + char(100), + char(121), + char(65), + char(116), + char(121), + char(112), + char(101), + char(0), + char(109), + char(95), + char(98), + char(111), + char(100), + char(121), + char(66), + char(116), + char(121), + char(112), + char(101), + char(0), + char(109), + char(95), + char(106), + char(111), + char(105), + char(110), + char(116), + char(84), + char(121), + char(112), + char(101), + char(0), + char(42), + char(109), + char(95), + char(112), + char(111), + char(115), + char(101), + char(0), + char(42), + char(42), + char(109), + char(95), + char(109), + char(97), + char(116), + char(101), + char(114), + char(105), + char(97), + char(108), + char(115), + char(0), + char(42), + char(109), + char(95), + char(110), + char(111), + char(100), + char(101), + char(115), + char(0), + char(42), + char(109), + char(95), + char(108), + char(105), + char(110), + char(107), + char(115), + char(0), + char(42), + char(109), + char(95), + char(102), + char(97), + char(99), + char(101), + char(115), + char(0), + char(42), + char(109), + char(95), + char(116), + char(101), + char(116), + char(114), + char(97), + char(104), + char(101), + char(100), + char(114), + char(97), + char(0), + char(42), + char(109), + char(95), + char(97), + char(110), + char(99), + char(104), + char(111), + char(114), + char(115), + char(0), + char(42), + char(109), + char(95), + char(99), + char(108), + char(117), + char(115), + char(116), + char(101), + char(114), + char(115), + char(0), + char(42), + char(109), + char(95), + char(106), + char(111), + char(105), + char(110), + char(116), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(77), + char(97), + char(116), + char(101), + char(114), + char(105), + char(97), + char(108), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(76), + char(105), + char(110), + char(107), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(70), + char(97), + char(99), + char(101), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(84), + char(101), + char(116), + char(114), + char(97), + char(104), + char(101), + char(100), + char(114), + char(97), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(65), + char(110), + char(99), + char(104), + char(111), + char(114), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(67), + char(108), + char(117), + char(115), + char(116), + char(101), + char(114), + char(115), + char(0), + char(109), + char(95), + char(110), + char(117), + char(109), + char(74), + char(111), + char(105), + char(110), + char(116), + char(115), + char(0), + char(109), + char(95), + char(99), + char(111), + char(110), + char(102), + char(105), + char(103), + char(0), + char(84), + char(89), + char(80), + char(69), + char(76), + char(0), + char(0), + char(0), + char(99), + char(104), + char(97), + char(114), + char(0), + char(117), + char(99), + char(104), + char(97), + char(114), + char(0), + char(115), + char(104), + char(111), + char(114), + char(116), + char(0), + char(117), + char(115), + char(104), + char(111), + char(114), + char(116), + char(0), + char(105), + char(110), + char(116), + char(0), + char(108), + char(111), + char(110), + char(103), + char(0), + char(117), + char(108), + char(111), + char(110), + char(103), + char(0), + char(102), + char(108), + char(111), + char(97), + char(116), + char(0), + char(100), + char(111), + char(117), + char(98), + char(108), + char(101), + char(0), + char(118), + char(111), + char(105), + char(100), + char(0), + char(80), + char(111), + char(105), + char(110), + char(116), + char(101), + char(114), + char(65), + char(114), + char(114), + char(97), + char(121), + char(0), + char(98), + char(116), + char(80), + char(104), + char(121), + char(115), + char(105), + char(99), + char(115), + char(83), + char(121), + char(115), + char(116), + char(101), + char(109), + char(0), + char(76), + char(105), + char(115), + char(116), + char(66), + char(97), + char(115), + char(101), + char(0), + char(98), + char(116), + char(86), + char(101), + char(99), + char(116), + char(111), + char(114), + char(51), + char(70), + char(108), + char(111), + char(97), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(86), + char(101), + char(99), + char(116), + char(111), + char(114), + char(51), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(77), + char(97), + char(116), + char(114), + char(105), + char(120), + char(51), + char(120), + char(51), + char(70), + char(108), + char(111), + char(97), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(77), + char(97), + char(116), + char(114), + char(105), + char(120), + char(51), + char(120), + char(51), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(84), + char(114), + char(97), + char(110), + char(115), + char(102), + char(111), + char(114), + char(109), + char(70), + char(108), + char(111), + char(97), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(84), + char(114), + char(97), + char(110), + char(115), + char(102), + char(111), + char(114), + char(109), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(66), + char(118), + char(104), + char(83), + char(117), + char(98), + char(116), + char(114), + char(101), + char(101), + char(73), + char(110), + char(102), + char(111), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(79), + char(112), + char(116), + char(105), + char(109), + char(105), + char(122), + char(101), + char(100), + char(66), + char(118), + char(104), + char(78), + char(111), + char(100), + char(101), + char(70), + char(108), + char(111), + char(97), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(79), + char(112), + char(116), + char(105), + char(109), + char(105), + char(122), + char(101), + char(100), + char(66), + char(118), + char(104), + char(78), + char(111), + char(100), + char(101), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(81), + char(117), + char(97), + char(110), + char(116), + char(105), + char(122), + char(101), + char(100), + char(66), + char(118), + char(104), + char(78), + char(111), + char(100), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(81), + char(117), + char(97), + char(110), + char(116), + char(105), + char(122), + char(101), + char(100), + char(66), + char(118), + char(104), + char(70), + char(108), + char(111), + char(97), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(81), + char(117), + char(97), + char(110), + char(116), + char(105), + char(122), + char(101), + char(100), + char(66), + char(118), + char(104), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(83), + char(116), + char(97), + char(116), + char(105), + char(99), + char(80), + char(108), + char(97), + char(110), + char(101), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(111), + char(110), + char(118), + char(101), + char(120), + char(73), + char(110), + char(116), + char(101), + char(114), + char(110), + char(97), + char(108), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(80), + char(111), + char(115), + char(105), + char(116), + char(105), + char(111), + char(110), + char(65), + char(110), + char(100), + char(82), + char(97), + char(100), + char(105), + char(117), + char(115), + char(0), + char(98), + char(116), + char(77), + char(117), + char(108), + char(116), + char(105), + char(83), + char(112), + char(104), + char(101), + char(114), + char(101), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(73), + char(110), + char(116), + char(73), + char(110), + char(100), + char(101), + char(120), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(83), + char(104), + char(111), + char(114), + char(116), + char(73), + char(110), + char(116), + char(73), + char(110), + char(100), + char(101), + char(120), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(83), + char(104), + char(111), + char(114), + char(116), + char(73), + char(110), + char(116), + char(73), + char(110), + char(100), + char(101), + char(120), + char(84), + char(114), + char(105), + char(112), + char(108), + char(101), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(104), + char(97), + char(114), + char(73), + char(110), + char(100), + char(101), + char(120), + char(84), + char(114), + char(105), + char(112), + char(108), + char(101), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(77), + char(101), + char(115), + char(104), + char(80), + char(97), + char(114), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(83), + char(116), + char(114), + char(105), + char(100), + char(105), + char(110), + char(103), + char(77), + char(101), + char(115), + char(104), + char(73), + char(110), + char(116), + char(101), + char(114), + char(102), + char(97), + char(99), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(84), + char(114), + char(105), + char(97), + char(110), + char(103), + char(108), + char(101), + char(77), + char(101), + char(115), + char(104), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(84), + char(114), + char(105), + char(97), + char(110), + char(103), + char(108), + char(101), + char(73), + char(110), + char(102), + char(111), + char(77), + char(97), + char(112), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(83), + char(99), + char(97), + char(108), + char(101), + char(100), + char(84), + char(114), + char(105), + char(97), + char(110), + char(103), + char(108), + char(101), + char(77), + char(101), + char(115), + char(104), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(111), + char(109), + char(112), + char(111), + char(117), + char(110), + char(100), + char(83), + char(104), + char(97), + char(112), + char(101), + char(67), + char(104), + char(105), + char(108), + char(100), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(111), + char(109), + char(112), + char(111), + char(117), + char(110), + char(100), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(121), + char(108), + char(105), + char(110), + char(100), + char(101), + char(114), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(97), + char(112), + char(115), + char(117), + char(108), + char(101), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(84), + char(114), + char(105), + char(97), + char(110), + char(103), + char(108), + char(101), + char(73), + char(110), + char(102), + char(111), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(71), + char(73), + char(109), + char(112), + char(97), + char(99), + char(116), + char(77), + char(101), + char(115), + char(104), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(111), + char(110), + char(118), + char(101), + char(120), + char(72), + char(117), + char(108), + char(108), + char(83), + char(104), + char(97), + char(112), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(79), + char(98), + char(106), + char(101), + char(99), + char(116), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(111), + char(108), + char(108), + char(105), + char(115), + char(105), + char(111), + char(110), + char(79), + char(98), + char(106), + char(101), + char(99), + char(116), + char(70), + char(108), + char(111), + char(97), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(68), + char(121), + char(110), + char(97), + char(109), + char(105), + char(99), + char(115), + char(87), + char(111), + char(114), + char(108), + char(100), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(111), + char(110), + char(116), + char(97), + char(99), + char(116), + char(83), + char(111), + char(108), + char(118), + char(101), + char(114), + char(73), + char(110), + char(102), + char(111), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(68), + char(121), + char(110), + char(97), + char(109), + char(105), + char(99), + char(115), + char(87), + char(111), + char(114), + char(108), + char(100), + char(70), + char(108), + char(111), + char(97), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(111), + char(110), + char(116), + char(97), + char(99), + char(116), + char(83), + char(111), + char(108), + char(118), + char(101), + char(114), + char(73), + char(110), + char(102), + char(111), + char(70), + char(108), + char(111), + char(97), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(82), + char(105), + char(103), + char(105), + char(100), + char(66), + char(111), + char(100), + char(121), + char(70), + char(108), + char(111), + char(97), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(82), + char(105), + char(103), + char(105), + char(100), + char(66), + char(111), + char(100), + char(121), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(73), + char(110), + char(102), + char(111), + char(49), + char(0), + char(98), + char(116), + char(84), + char(121), + char(112), + char(101), + char(100), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(82), + char(105), + char(103), + char(105), + char(100), + char(66), + char(111), + char(100), + char(121), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(80), + char(111), + char(105), + char(110), + char(116), + char(50), + char(80), + char(111), + char(105), + char(110), + char(116), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(70), + char(108), + char(111), + char(97), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(80), + char(111), + char(105), + char(110), + char(116), + char(50), + char(80), + char(111), + char(105), + char(110), + char(116), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(72), + char(105), + char(110), + char(103), + char(101), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(68), + char(111), + char(117), + char(98), + char(108), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(72), + char(105), + char(110), + char(103), + char(101), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(70), + char(108), + char(111), + char(97), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(67), + char(111), + char(110), + char(101), + char(84), + char(119), + char(105), + char(115), + char(116), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(71), + char(101), + char(110), + char(101), + char(114), + char(105), + char(99), + char(54), + char(68), + char(111), + char(102), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(71), + char(101), + char(110), + char(101), + char(114), + char(105), + char(99), + char(54), + char(68), + char(111), + char(102), + char(83), + char(112), + char(114), + char(105), + char(110), + char(103), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(83), + char(108), + char(105), + char(100), + char(101), + char(114), + char(67), + char(111), + char(110), + char(115), + char(116), + char(114), + char(97), + char(105), + char(110), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(83), + char(111), + char(102), + char(116), + char(66), + char(111), + char(100), + char(121), + char(77), + char(97), + char(116), + char(101), + char(114), + char(105), + char(97), + char(108), + char(68), + char(97), + char(116), + char(97), + char(0), + char(83), + char(111), + char(102), + char(116), + char(66), + char(111), + char(100), + char(121), + char(78), + char(111), + char(100), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(83), + char(111), + char(102), + char(116), + char(66), + char(111), + char(100), + char(121), + char(76), + char(105), + char(110), + char(107), + char(68), + char(97), + char(116), + char(97), + char(0), + char(83), + char(111), + char(102), + char(116), + char(66), + char(111), + char(100), + char(121), + char(70), + char(97), + char(99), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(83), + char(111), + char(102), + char(116), + char(66), + char(111), + char(100), + char(121), + char(84), + char(101), + char(116), + char(114), + char(97), + char(68), + char(97), + char(116), + char(97), + char(0), + char(83), + char(111), + char(102), + char(116), + char(82), + char(105), + char(103), + char(105), + char(100), + char(65), + char(110), + char(99), + char(104), + char(111), + char(114), + char(68), + char(97), + char(116), + char(97), + char(0), + char(83), + char(111), + char(102), + char(116), + char(66), + char(111), + char(100), + char(121), + char(67), + char(111), + char(110), + char(102), + char(105), + char(103), + char(68), + char(97), + char(116), + char(97), + char(0), + char(83), + char(111), + char(102), + char(116), + char(66), + char(111), + char(100), + char(121), + char(80), + char(111), + char(115), + char(101), + char(68), + char(97), + char(116), + char(97), + char(0), + char(83), + char(111), + char(102), + char(116), + char(66), + char(111), + char(100), + char(121), + char(67), + char(108), + char(117), + char(115), + char(116), + char(101), + char(114), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(83), + char(111), + char(102), + char(116), + char(66), + char(111), + char(100), + char(121), + char(74), + char(111), + char(105), + char(110), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(98), + char(116), + char(83), + char(111), + char(102), + char(116), + char(66), + char(111), + char(100), + char(121), + char(70), + char(108), + char(111), + char(97), + char(116), + char(68), + char(97), + char(116), + char(97), + char(0), + char(0), + char(0), + char(84), + char(76), + char(69), + char(78), + char(1), + char(0), + char(1), + char(0), + char(2), + char(0), + char(2), + char(0), + char(4), + char(0), + char(4), + char(0), + char(4), + char(0), + char(4), + char(0), + char(8), + char(0), + char(0), + char(0), + char(16), + char(0), + char(48), + char(0), + char(16), + char(0), + char(16), + char(0), + char(32), + char(0), + char(48), + char(0), + char(96), + char(0), + char(64), + char(0), + char(-128), + char(0), + char(20), + char(0), + char(48), + char(0), + char(80), + char(0), + char(16), + char(0), + char(96), + char(0), + char(-112), + char(0), + char(16), + char(0), + char(56), + char(0), + char(56), + char(0), + char(20), + char(0), + char(72), + char(0), + char(4), + char(0), + char(4), + char(0), + char(8), + char(0), + char(4), + char(0), + char(56), + char(0), + char(32), + char(0), + char(80), + char(0), + char(72), + char(0), + char(96), + char(0), + char(80), + char(0), + char(32), + char(0), + char(64), + char(0), + char(64), + char(0), + char(16), + char(0), + char(72), + char(0), + char(80), + char(0), + char(-32), + char(1), + char(16), + char(1), + char(-72), + char(0), + char(-104), + char(0), + char(104), + char(0), + char(88), + char(0), + char(-8), + char(1), + char(-80), + char(3), + char(8), + char(0), + char(64), + char(0), + char(0), + char(0), + char(96), + char(0), + char(-128), + char(0), + char(104), + char(1), + char(-24), + char(0), + char(-32), + char(0), + char(8), + char(1), + char(104), + char(1), + char(-40), + char(0), + char(16), + char(0), + char(104), + char(0), + char(24), + char(0), + char(40), + char(0), + char(104), + char(0), + char(96), + char(0), + char(104), + char(0), + char(-56), + char(0), + char(104), + char(1), + char(112), + char(0), + char(-32), + char(1), + char(83), + char(84), + char(82), + char(67), + char(65), + char(0), + char(0), + char(0), + char(10), + char(0), + char(3), + char(0), + char(4), + char(0), + char(0), + char(0), + char(4), + char(0), + char(1), + char(0), + char(9), + char(0), + char(2), + char(0), + char(11), + char(0), + char(3), + char(0), + char(10), + char(0), + char(3), + char(0), + char(10), + char(0), + char(4), + char(0), + char(10), + char(0), + char(5), + char(0), + char(12), + char(0), + char(2), + char(0), + char(9), + char(0), + char(6), + char(0), + char(9), + char(0), + char(7), + char(0), + char(13), + char(0), + char(1), + char(0), + char(7), + char(0), + char(8), + char(0), + char(14), + char(0), + char(1), + char(0), + char(8), + char(0), + char(8), + char(0), + char(15), + char(0), + char(1), + char(0), + char(13), + char(0), + char(9), + char(0), + char(16), + char(0), + char(1), + char(0), + char(14), + char(0), + char(9), + char(0), + char(17), + char(0), + char(2), + char(0), + char(15), + char(0), + char(10), + char(0), + char(13), + char(0), + char(11), + char(0), + char(18), + char(0), + char(2), + char(0), + char(16), + char(0), + char(10), + char(0), + char(14), + char(0), + char(11), + char(0), + char(19), + char(0), + char(4), + char(0), + char(4), + char(0), + char(12), + char(0), + char(4), + char(0), + char(13), + char(0), + char(2), + char(0), + char(14), + char(0), + char(2), + char(0), + char(15), + char(0), + char(20), + char(0), + char(6), + char(0), + char(13), + char(0), + char(16), + char(0), + char(13), + char(0), + char(17), + char(0), + char(4), + char(0), + char(18), + char(0), + char(4), + char(0), + char(19), + char(0), + char(4), + char(0), + char(20), + char(0), + char(0), + char(0), + char(21), + char(0), + char(21), + char(0), + char(6), + char(0), + char(14), + char(0), + char(16), + char(0), + char(14), + char(0), + char(17), + char(0), + char(4), + char(0), + char(18), + char(0), + char(4), + char(0), + char(19), + char(0), + char(4), + char(0), + char(20), + char(0), + char(0), + char(0), + char(21), + char(0), + char(22), + char(0), + char(3), + char(0), + char(2), + char(0), + char(14), + char(0), + char(2), + char(0), + char(15), + char(0), + char(4), + char(0), + char(22), + char(0), + char(23), + char(0), + char(12), + char(0), + char(13), + char(0), + char(23), + char(0), + char(13), + char(0), + char(24), + char(0), + char(13), + char(0), + char(25), + char(0), + char(4), + char(0), + char(26), + char(0), + char(4), + char(0), + char(27), + char(0), + char(4), + char(0), + char(28), + char(0), + char(4), + char(0), + char(29), + char(0), + char(20), + char(0), + char(30), + char(0), + char(22), + char(0), + char(31), + char(0), + char(19), + char(0), + char(32), + char(0), + char(4), + char(0), + char(33), + char(0), + char(4), + char(0), + char(34), + char(0), + char(24), + char(0), + char(12), + char(0), + char(14), + char(0), + char(23), + char(0), + char(14), + char(0), + char(24), + char(0), + char(14), + char(0), + char(25), + char(0), + char(4), + char(0), + char(26), + char(0), + char(4), + char(0), + char(27), + char(0), + char(4), + char(0), + char(28), + char(0), + char(4), + char(0), + char(29), + char(0), + char(21), + char(0), + char(30), + char(0), + char(22), + char(0), + char(31), + char(0), + char(4), + char(0), + char(33), + char(0), + char(4), + char(0), + char(34), + char(0), + char(19), + char(0), + char(32), + char(0), + char(25), + char(0), + char(3), + char(0), + char(0), + char(0), + char(35), + char(0), + char(4), + char(0), + char(36), + char(0), + char(0), + char(0), + char(37), + char(0), + char(26), + char(0), + char(5), + char(0), + char(25), + char(0), + char(38), + char(0), + char(13), + char(0), + char(39), + char(0), + char(13), + char(0), + char(40), + char(0), + char(7), + char(0), + char(41), + char(0), + char(0), + char(0), + char(21), + char(0), + char(27), + char(0), + char(5), + char(0), + char(25), + char(0), + char(38), + char(0), + char(13), + char(0), + char(39), + char(0), + char(13), + char(0), + char(42), + char(0), + char(7), + char(0), + char(43), + char(0), + char(4), + char(0), + char(44), + char(0), + char(28), + char(0), + char(2), + char(0), + char(13), + char(0), + char(45), + char(0), + char(7), + char(0), + char(46), + char(0), + char(29), + char(0), + char(4), + char(0), + char(27), + char(0), + char(47), + char(0), + char(28), + char(0), + char(48), + char(0), + char(4), + char(0), + char(49), + char(0), + char(0), + char(0), + char(37), + char(0), + char(30), + char(0), + char(1), + char(0), + char(4), + char(0), + char(50), + char(0), + char(31), + char(0), + char(2), + char(0), + char(2), + char(0), + char(50), + char(0), + char(0), + char(0), + char(51), + char(0), + char(32), + char(0), + char(2), + char(0), + char(2), + char(0), + char(52), + char(0), + char(0), + char(0), + char(51), + char(0), + char(33), + char(0), + char(2), + char(0), + char(0), + char(0), + char(52), + char(0), + char(0), + char(0), + char(53), + char(0), + char(34), + char(0), + char(8), + char(0), + char(13), + char(0), + char(54), + char(0), + char(14), + char(0), + char(55), + char(0), + char(30), + char(0), + char(56), + char(0), + char(32), + char(0), + char(57), + char(0), + char(33), + char(0), + char(58), + char(0), + char(31), + char(0), + char(59), + char(0), + char(4), + char(0), + char(60), + char(0), + char(4), + char(0), + char(61), + char(0), + char(35), + char(0), + char(4), + char(0), + char(34), + char(0), + char(62), + char(0), + char(13), + char(0), + char(63), + char(0), + char(4), + char(0), + char(64), + char(0), + char(0), + char(0), + char(37), + char(0), + char(36), + char(0), + char(7), + char(0), + char(25), + char(0), + char(38), + char(0), + char(35), + char(0), + char(65), + char(0), + char(23), + char(0), + char(66), + char(0), + char(24), + char(0), + char(67), + char(0), + char(37), + char(0), + char(68), + char(0), + char(7), + char(0), + char(43), + char(0), + char(0), + char(0), + char(69), + char(0), + char(38), + char(0), + char(2), + char(0), + char(36), + char(0), + char(70), + char(0), + char(13), + char(0), + char(39), + char(0), + char(39), + char(0), + char(4), + char(0), + char(17), + char(0), + char(71), + char(0), + char(25), + char(0), + char(72), + char(0), + char(4), + char(0), + char(73), + char(0), + char(7), + char(0), + char(74), + char(0), + char(40), + char(0), + char(4), + char(0), + char(25), + char(0), + char(38), + char(0), + char(39), + char(0), + char(75), + char(0), + char(4), + char(0), + char(76), + char(0), + char(7), + char(0), + char(43), + char(0), + char(41), + char(0), + char(3), + char(0), + char(27), + char(0), + char(47), + char(0), + char(4), + char(0), + char(77), + char(0), + char(0), + char(0), + char(37), + char(0), + char(42), + char(0), + char(3), + char(0), + char(27), + char(0), + char(47), + char(0), + char(4), + char(0), + char(77), + char(0), + char(0), + char(0), + char(37), + char(0), + char(43), + char(0), + char(4), + char(0), + char(4), + char(0), + char(78), + char(0), + char(7), + char(0), + char(79), + char(0), + char(7), + char(0), + char(80), + char(0), + char(7), + char(0), + char(81), + char(0), + char(37), + char(0), + char(14), + char(0), + char(4), + char(0), + char(82), + char(0), + char(4), + char(0), + char(83), + char(0), + char(43), + char(0), + char(84), + char(0), + char(4), + char(0), + char(85), + char(0), + char(7), + char(0), + char(86), + char(0), + char(7), + char(0), + char(87), + char(0), + char(7), + char(0), + char(88), + char(0), + char(7), + char(0), + char(89), + char(0), + char(7), + char(0), + char(90), + char(0), + char(4), + char(0), + char(91), + char(0), + char(4), + char(0), + char(92), + char(0), + char(4), + char(0), + char(93), + char(0), + char(4), + char(0), + char(94), + char(0), + char(0), + char(0), + char(37), + char(0), + char(44), + char(0), + char(5), + char(0), + char(25), + char(0), + char(38), + char(0), + char(35), + char(0), + char(65), + char(0), + char(13), + char(0), + char(39), + char(0), + char(7), + char(0), + char(43), + char(0), + char(4), + char(0), + char(95), + char(0), + char(45), + char(0), + char(5), + char(0), + char(27), + char(0), + char(47), + char(0), + char(13), + char(0), + char(96), + char(0), + char(14), + char(0), + char(97), + char(0), + char(4), + char(0), + char(98), + char(0), + char(0), + char(0), + char(99), + char(0), + char(46), + char(0), + char(25), + char(0), + char(9), + char(0), + char(100), + char(0), + char(9), + char(0), + char(101), + char(0), + char(25), + char(0), + char(102), + char(0), + char(0), + char(0), + char(35), + char(0), + char(18), + char(0), + char(103), + char(0), + char(18), + char(0), + char(104), + char(0), + char(14), + char(0), + char(105), + char(0), + char(14), + char(0), + char(106), + char(0), + char(14), + char(0), + char(107), + char(0), + char(8), + char(0), + char(108), + char(0), + char(8), + char(0), + char(109), + char(0), + char(8), + char(0), + char(110), + char(0), + char(8), + char(0), + char(111), + char(0), + char(8), + char(0), + char(112), + char(0), + char(8), + char(0), + char(113), + char(0), + char(8), + char(0), + char(114), + char(0), + char(8), + char(0), + char(115), + char(0), + char(4), + char(0), + char(116), + char(0), + char(4), + char(0), + char(117), + char(0), + char(4), + char(0), + char(118), + char(0), + char(4), + char(0), + char(119), + char(0), + char(4), + char(0), + char(120), + char(0), + char(4), + char(0), + char(121), + char(0), + char(4), + char(0), + char(122), + char(0), + char(0), + char(0), + char(37), + char(0), + char(47), + char(0), + char(25), + char(0), + char(9), + char(0), + char(100), + char(0), + char(9), + char(0), + char(101), + char(0), + char(25), + char(0), + char(102), + char(0), + char(0), + char(0), + char(35), + char(0), + char(17), + char(0), + char(103), + char(0), + char(17), + char(0), + char(104), + char(0), + char(13), + char(0), + char(105), + char(0), + char(13), + char(0), + char(106), + char(0), + char(13), + char(0), + char(107), + char(0), + char(7), + char(0), + char(108), + char(0), + char(7), + char(0), + char(109), + char(0), + char(7), + char(0), + char(110), + char(0), + char(7), + char(0), + char(111), + char(0), + char(7), + char(0), + char(112), + char(0), + char(7), + char(0), + char(113), + char(0), + char(7), + char(0), + char(114), + char(0), + char(7), + char(0), + char(115), + char(0), + char(4), + char(0), + char(116), + char(0), + char(4), + char(0), + char(117), + char(0), + char(4), + char(0), + char(118), + char(0), + char(4), + char(0), + char(119), + char(0), + char(4), + char(0), + char(120), + char(0), + char(4), + char(0), + char(121), + char(0), + char(4), + char(0), + char(122), + char(0), + char(0), + char(0), + char(37), + char(0), + char(48), + char(0), + char(2), + char(0), + char(49), + char(0), + char(123), + char(0), + char(14), + char(0), + char(124), + char(0), + char(50), + char(0), + char(2), + char(0), + char(51), + char(0), + char(123), + char(0), + char(13), + char(0), + char(124), + char(0), + char(52), + char(0), + char(21), + char(0), + char(47), + char(0), + char(125), + char(0), + char(15), + char(0), + char(126), + char(0), + char(13), + char(0), + char(127), + char(0), + char(13), + char(0), + char(-128), + char(0), + char(13), + char(0), + char(-127), + char(0), + char(13), + char(0), + char(-126), + char(0), + char(13), + char(0), + char(124), + char(0), + char(13), + char(0), + char(-125), + char(0), + char(13), + char(0), + char(-124), + char(0), + char(13), + char(0), + char(-123), + char(0), + char(13), + char(0), + char(-122), + char(0), + char(7), + char(0), + char(-121), + char(0), + char(7), + char(0), + char(-120), + char(0), + char(7), + char(0), + char(-119), + char(0), + char(7), + char(0), + char(-118), + char(0), + char(7), + char(0), + char(-117), + char(0), + char(7), + char(0), + char(-116), + char(0), + char(7), + char(0), + char(-115), + char(0), + char(7), + char(0), + char(-114), + char(0), + char(7), + char(0), + char(-113), + char(0), + char(4), + char(0), + char(-112), + char(0), + char(53), + char(0), + char(22), + char(0), + char(46), + char(0), + char(125), + char(0), + char(16), + char(0), + char(126), + char(0), + char(14), + char(0), + char(127), + char(0), + char(14), + char(0), + char(-128), + char(0), + char(14), + char(0), + char(-127), + char(0), + char(14), + char(0), + char(-126), + char(0), + char(14), + char(0), + char(124), + char(0), + char(14), + char(0), + char(-125), + char(0), + char(14), + char(0), + char(-124), + char(0), + char(14), + char(0), + char(-123), + char(0), + char(14), + char(0), + char(-122), + char(0), + char(8), + char(0), + char(-121), + char(0), + char(8), + char(0), + char(-120), + char(0), + char(8), + char(0), + char(-119), + char(0), + char(8), + char(0), + char(-118), + char(0), + char(8), + char(0), + char(-117), + char(0), + char(8), + char(0), + char(-116), + char(0), + char(8), + char(0), + char(-115), + char(0), + char(8), + char(0), + char(-114), + char(0), + char(8), + char(0), + char(-113), + char(0), + char(4), + char(0), + char(-112), + char(0), + char(0), + char(0), + char(37), + char(0), + char(54), + char(0), + char(2), + char(0), + char(4), + char(0), + char(-111), + char(0), + char(4), + char(0), + char(-110), + char(0), + char(55), + char(0), + char(13), + char(0), + char(56), + char(0), + char(-109), + char(0), + char(56), + char(0), + char(-108), + char(0), + char(0), + char(0), + char(35), + char(0), + char(4), + char(0), + char(-107), + char(0), + char(4), + char(0), + char(-106), + char(0), + char(4), + char(0), + char(-105), + char(0), + char(4), + char(0), + char(-104), + char(0), + char(7), + char(0), + char(-103), + char(0), + char(7), + char(0), + char(-102), + char(0), + char(4), + char(0), + char(-101), + char(0), + char(4), + char(0), + char(-100), + char(0), + char(7), + char(0), + char(-99), + char(0), + char(4), + char(0), + char(-98), + char(0), + char(57), + char(0), + char(3), + char(0), + char(55), + char(0), + char(-97), + char(0), + char(13), + char(0), + char(-96), + char(0), + char(13), + char(0), + char(-95), + char(0), + char(58), + char(0), + char(3), + char(0), + char(55), + char(0), + char(-97), + char(0), + char(14), + char(0), + char(-96), + char(0), + char(14), + char(0), + char(-95), + char(0), + char(59), + char(0), + char(13), + char(0), + char(55), + char(0), + char(-97), + char(0), + char(18), + char(0), + char(-94), + char(0), + char(18), + char(0), + char(-93), + char(0), + char(4), + char(0), + char(-92), + char(0), + char(4), + char(0), + char(-91), + char(0), + char(4), + char(0), + char(-90), + char(0), + char(7), + char(0), + char(-89), + char(0), + char(7), + char(0), + char(-88), + char(0), + char(7), + char(0), + char(-87), + char(0), + char(7), + char(0), + char(-86), + char(0), + char(7), + char(0), + char(-85), + char(0), + char(7), + char(0), + char(-84), + char(0), + char(7), + char(0), + char(-83), + char(0), + char(60), + char(0), + char(13), + char(0), + char(55), + char(0), + char(-97), + char(0), + char(17), + char(0), + char(-94), + char(0), + char(17), + char(0), + char(-93), + char(0), + char(4), + char(0), + char(-92), + char(0), + char(4), + char(0), + char(-91), + char(0), + char(4), + char(0), + char(-90), + char(0), + char(7), + char(0), + char(-89), + char(0), + char(7), + char(0), + char(-88), + char(0), + char(7), + char(0), + char(-87), + char(0), + char(7), + char(0), + char(-86), + char(0), + char(7), + char(0), + char(-85), + char(0), + char(7), + char(0), + char(-84), + char(0), + char(7), + char(0), + char(-83), + char(0), + char(61), + char(0), + char(11), + char(0), + char(55), + char(0), + char(-97), + char(0), + char(17), + char(0), + char(-94), + char(0), + char(17), + char(0), + char(-93), + char(0), + char(7), + char(0), + char(-82), + char(0), + char(7), + char(0), + char(-81), + char(0), + char(7), + char(0), + char(-80), + char(0), + char(7), + char(0), + char(-85), + char(0), + char(7), + char(0), + char(-84), + char(0), + char(7), + char(0), + char(-83), + char(0), + char(7), + char(0), + char(-79), + char(0), + char(0), + char(0), + char(21), + char(0), + char(62), + char(0), + char(9), + char(0), + char(55), + char(0), + char(-97), + char(0), + char(17), + char(0), + char(-94), + char(0), + char(17), + char(0), + char(-93), + char(0), + char(13), + char(0), + char(-78), + char(0), + char(13), + char(0), + char(-77), + char(0), + char(13), + char(0), + char(-76), + char(0), + char(13), + char(0), + char(-75), + char(0), + char(4), + char(0), + char(-74), + char(0), + char(4), + char(0), + char(-73), + char(0), + char(63), + char(0), + char(5), + char(0), + char(62), + char(0), + char(-72), + char(0), + char(4), + char(0), + char(-71), + char(0), + char(7), + char(0), + char(-70), + char(0), + char(7), + char(0), + char(-69), + char(0), + char(7), + char(0), + char(-68), + char(0), + char(64), + char(0), + char(9), + char(0), + char(55), + char(0), + char(-97), + char(0), + char(17), + char(0), + char(-94), + char(0), + char(17), + char(0), + char(-93), + char(0), + char(7), + char(0), + char(-78), + char(0), + char(7), + char(0), + char(-77), + char(0), + char(7), + char(0), + char(-76), + char(0), + char(7), + char(0), + char(-75), + char(0), + char(4), + char(0), + char(-74), + char(0), + char(4), + char(0), + char(-73), + char(0), + char(49), + char(0), + char(22), + char(0), + char(8), + char(0), + char(-67), + char(0), + char(8), + char(0), + char(-79), + char(0), + char(8), + char(0), + char(110), + char(0), + char(8), + char(0), + char(-66), + char(0), + char(8), + char(0), + char(112), + char(0), + char(8), + char(0), + char(-65), + char(0), + char(8), + char(0), + char(-64), + char(0), + char(8), + char(0), + char(-63), + char(0), + char(8), + char(0), + char(-62), + char(0), + char(8), + char(0), + char(-61), + char(0), + char(8), + char(0), + char(-60), + char(0), + char(8), + char(0), + char(-59), + char(0), + char(8), + char(0), + char(-58), + char(0), + char(8), + char(0), + char(-57), + char(0), + char(8), + char(0), + char(-56), + char(0), + char(8), + char(0), + char(-55), + char(0), + char(4), + char(0), + char(-54), + char(0), + char(4), + char(0), + char(-53), + char(0), + char(4), + char(0), + char(-52), + char(0), + char(4), + char(0), + char(-51), + char(0), + char(4), + char(0), + char(-50), + char(0), + char(0), + char(0), + char(37), + char(0), + char(51), + char(0), + char(22), + char(0), + char(7), + char(0), + char(-67), + char(0), + char(7), + char(0), + char(-79), + char(0), + char(7), + char(0), + char(110), + char(0), + char(7), + char(0), + char(-66), + char(0), + char(7), + char(0), + char(112), + char(0), + char(7), + char(0), + char(-65), + char(0), + char(7), + char(0), + char(-64), + char(0), + char(7), + char(0), + char(-63), + char(0), + char(7), + char(0), + char(-62), + char(0), + char(7), + char(0), + char(-61), + char(0), + char(7), + char(0), + char(-60), + char(0), + char(7), + char(0), + char(-59), + char(0), + char(7), + char(0), + char(-58), + char(0), + char(7), + char(0), + char(-57), + char(0), + char(7), + char(0), + char(-56), + char(0), + char(7), + char(0), + char(-55), + char(0), + char(4), + char(0), + char(-54), + char(0), + char(4), + char(0), + char(-53), + char(0), + char(4), + char(0), + char(-52), + char(0), + char(4), + char(0), + char(-51), + char(0), + char(4), + char(0), + char(-50), + char(0), + char(0), + char(0), + char(37), + char(0), + char(65), + char(0), + char(4), + char(0), + char(7), + char(0), + char(-49), + char(0), + char(7), + char(0), + char(-48), + char(0), + char(7), + char(0), + char(-47), + char(0), + char(4), + char(0), + char(78), + char(0), + char(66), + char(0), + char(10), + char(0), + char(65), + char(0), + char(-46), + char(0), + char(13), + char(0), + char(-45), + char(0), + char(13), + char(0), + char(-44), + char(0), + char(13), + char(0), + char(-43), + char(0), + char(13), + char(0), + char(-42), + char(0), + char(13), + char(0), + char(-41), + char(0), + char(7), + char(0), + char(-121), + char(0), + char(7), + char(0), + char(-40), + char(0), + char(4), + char(0), + char(-39), + char(0), + char(4), + char(0), + char(53), + char(0), + char(67), + char(0), + char(4), + char(0), + char(65), + char(0), + char(-46), + char(0), + char(4), + char(0), + char(-38), + char(0), + char(7), + char(0), + char(-37), + char(0), + char(4), + char(0), + char(-36), + char(0), + char(68), + char(0), + char(4), + char(0), + char(13), + char(0), + char(-41), + char(0), + char(65), + char(0), + char(-46), + char(0), + char(4), + char(0), + char(-35), + char(0), + char(7), + char(0), + char(-34), + char(0), + char(69), + char(0), + char(7), + char(0), + char(13), + char(0), + char(-33), + char(0), + char(65), + char(0), + char(-46), + char(0), + char(4), + char(0), + char(-32), + char(0), + char(7), + char(0), + char(-31), + char(0), + char(7), + char(0), + char(-30), + char(0), + char(7), + char(0), + char(-29), + char(0), + char(4), + char(0), + char(53), + char(0), + char(70), + char(0), + char(6), + char(0), + char(15), + char(0), + char(-28), + char(0), + char(13), + char(0), + char(-30), + char(0), + char(13), + char(0), + char(-27), + char(0), + char(56), + char(0), + char(-26), + char(0), + char(4), + char(0), + char(-25), + char(0), + char(7), + char(0), + char(-29), + char(0), + char(71), + char(0), + char(26), + char(0), + char(4), + char(0), + char(-24), + char(0), + char(7), + char(0), + char(-23), + char(0), + char(7), + char(0), + char(-79), + char(0), + char(7), + char(0), + char(-22), + char(0), + char(7), + char(0), + char(-21), + char(0), + char(7), + char(0), + char(-20), + char(0), + char(7), + char(0), + char(-19), + char(0), + char(7), + char(0), + char(-18), + char(0), + char(7), + char(0), + char(-17), + char(0), + char(7), + char(0), + char(-16), + char(0), + char(7), + char(0), + char(-15), + char(0), + char(7), + char(0), + char(-14), + char(0), + char(7), + char(0), + char(-13), + char(0), + char(7), + char(0), + char(-12), + char(0), + char(7), + char(0), + char(-11), + char(0), + char(7), + char(0), + char(-10), + char(0), + char(7), + char(0), + char(-9), + char(0), + char(7), + char(0), + char(-8), + char(0), + char(7), + char(0), + char(-7), + char(0), + char(7), + char(0), + char(-6), + char(0), + char(7), + char(0), + char(-5), + char(0), + char(4), + char(0), + char(-4), + char(0), + char(4), + char(0), + char(-3), + char(0), + char(4), + char(0), + char(-2), + char(0), + char(4), + char(0), + char(-1), + char(0), + char(4), + char(0), + char(117), + char(0), + char(72), + char(0), + char(12), + char(0), + char(15), + char(0), + char(0), + char(1), + char(15), + char(0), + char(1), + char(1), + char(15), + char(0), + char(2), + char(1), + char(13), + char(0), + char(3), + char(1), + char(13), + char(0), + char(4), + char(1), + char(7), + char(0), + char(5), + char(1), + char(4), + char(0), + char(6), + char(1), + char(4), + char(0), + char(7), + char(1), + char(4), + char(0), + char(8), + char(1), + char(4), + char(0), + char(9), + char(1), + char(7), + char(0), + char(-31), + char(0), + char(4), + char(0), + char(53), + char(0), + char(73), + char(0), + char(27), + char(0), + char(17), + char(0), + char(10), + char(1), + char(15), + char(0), + char(11), + char(1), + char(15), + char(0), + char(12), + char(1), + char(13), + char(0), + char(3), + char(1), + char(13), + char(0), + char(13), + char(1), + char(13), + char(0), + char(14), + char(1), + char(13), + char(0), + char(15), + char(1), + char(13), + char(0), + char(16), + char(1), + char(13), + char(0), + char(17), + char(1), + char(4), + char(0), + char(18), + char(1), + char(7), + char(0), + char(19), + char(1), + char(4), + char(0), + char(20), + char(1), + char(4), + char(0), + char(21), + char(1), + char(4), + char(0), + char(22), + char(1), + char(7), + char(0), + char(23), + char(1), + char(7), + char(0), + char(24), + char(1), + char(4), + char(0), + char(25), + char(1), + char(4), + char(0), + char(26), + char(1), + char(7), + char(0), + char(27), + char(1), + char(7), + char(0), + char(28), + char(1), + char(7), + char(0), + char(29), + char(1), + char(7), + char(0), + char(30), + char(1), + char(7), + char(0), + char(31), + char(1), + char(7), + char(0), + char(32), + char(1), + char(4), + char(0), + char(33), + char(1), + char(4), + char(0), + char(34), + char(1), + char(4), + char(0), + char(35), + char(1), + char(74), + char(0), + char(12), + char(0), + char(9), + char(0), + char(36), + char(1), + char(9), + char(0), + char(37), + char(1), + char(13), + char(0), + char(38), + char(1), + char(7), + char(0), + char(39), + char(1), + char(7), + char(0), + char(-63), + char(0), + char(7), + char(0), + char(40), + char(1), + char(4), + char(0), + char(41), + char(1), + char(13), + char(0), + char(42), + char(1), + char(4), + char(0), + char(43), + char(1), + char(4), + char(0), + char(44), + char(1), + char(4), + char(0), + char(45), + char(1), + char(4), + char(0), + char(53), + char(0), + char(75), + char(0), + char(19), + char(0), + char(47), + char(0), + char(125), + char(0), + char(72), + char(0), + char(46), + char(1), + char(65), + char(0), + char(47), + char(1), + char(66), + char(0), + char(48), + char(1), + char(67), + char(0), + char(49), + char(1), + char(68), + char(0), + char(50), + char(1), + char(69), + char(0), + char(51), + char(1), + char(70), + char(0), + char(52), + char(1), + char(73), + char(0), + char(53), + char(1), + char(74), + char(0), + char(54), + char(1), + char(4), + char(0), + char(55), + char(1), + char(4), + char(0), + char(21), + char(1), + char(4), + char(0), + char(56), + char(1), + char(4), + char(0), + char(57), + char(1), + char(4), + char(0), + char(58), + char(1), + char(4), + char(0), + char(59), + char(1), + char(4), + char(0), + char(60), + char(1), + char(4), + char(0), + char(61), + char(1), + char(71), + char(0), + char(62), + char(1), +}; +int b3s_bulletDNAlen64 = sizeof(b3s_bulletDNAstr64); diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Serializer.h b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Serializer.h index 1c1ce43764..d9e153e238 100644 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Serializer.h +++ b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Serializer.h @@ -16,158 +16,142 @@ subject to the following restrictions: #ifndef B3_SERIALIZER_H #define B3_SERIALIZER_H -#include "Bullet3Common/b3Scalar.h" // has definitions like B3_FORCE_INLINE +#include "Bullet3Common/b3Scalar.h" // has definitions like B3_FORCE_INLINE #include "Bullet3Common/b3StackAlloc.h" #include "Bullet3Common/b3HashMap.h" -#if !defined( __CELLOS_LV2__) && !defined(__MWERKS__) +#if !defined(__CELLOS_LV2__) && !defined(__MWERKS__) #include <memory.h> #endif #include <string.h> - - extern char b3s_bulletDNAstr[]; extern int b3s_bulletDNAlen; extern char b3s_bulletDNAstr64[]; extern int b3s_bulletDNAlen64; -B3_FORCE_INLINE int b3StrLen(const char* str) +B3_FORCE_INLINE int b3StrLen(const char* str) { - if (!str) - return(0); + if (!str) + return (0); int len = 0; - + while (*str != 0) { - str++; - len++; - } + str++; + len++; + } - return len; + return len; } - class b3Chunk { public: - int m_chunkCode; - int m_length; - void *m_oldPtr; - int m_dna_nr; - int m_number; + int m_chunkCode; + int m_length; + void* m_oldPtr; + int m_dna_nr; + int m_number; }; -enum b3SerializationFlags +enum b3SerializationFlags { B3_SERIALIZE_NO_BVH = 1, B3_SERIALIZE_NO_TRIANGLEINFOMAP = 2, B3_SERIALIZE_NO_DUPLICATE_ASSERT = 4 }; -class b3Serializer +class b3Serializer { - public: - virtual ~b3Serializer() {} - virtual const unsigned char* getBufferPointer() const = 0; - - virtual int getCurrentBufferSize() const = 0; + virtual const unsigned char* getBufferPointer() const = 0; - virtual b3Chunk* allocate(size_t size, int numElements) = 0; + virtual int getCurrentBufferSize() const = 0; - virtual void finalizeChunk(b3Chunk* chunk, const char* structType, int chunkCode,void* oldPtr)= 0; + virtual b3Chunk* allocate(size_t size, int numElements) = 0; - virtual void* findPointer(void* oldPtr) = 0; + virtual void finalizeChunk(b3Chunk* chunk, const char* structType, int chunkCode, void* oldPtr) = 0; - virtual void* getUniquePointer(void*oldPtr) = 0; + virtual void* findPointer(void* oldPtr) = 0; - virtual void startSerialization() = 0; - - virtual void finishSerialization() = 0; + virtual void* getUniquePointer(void* oldPtr) = 0; - virtual const char* findNameForPointer(const void* ptr) const = 0; + virtual void startSerialization() = 0; - virtual void registerNameForPointer(const void* ptr, const char* name) = 0; + virtual void finishSerialization() = 0; - virtual void serializeName(const char* ptr) = 0; + virtual const char* findNameForPointer(const void* ptr) const = 0; - virtual int getSerializationFlags() const = 0; + virtual void registerNameForPointer(const void* ptr, const char* name) = 0; - virtual void setSerializationFlags(int flags) = 0; + virtual void serializeName(const char* ptr) = 0; + virtual int getSerializationFlags() const = 0; + virtual void setSerializationFlags(int flags) = 0; }; - - #define B3_HEADER_LENGTH 12 -#if defined(__sgi) || defined (__sparc) || defined (__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__BIG_ENDIAN__) -# define B3_MAKE_ID(a,b,c,d) ( (int)(a)<<24 | (int)(b)<<16 | (c)<<8 | (d) ) +#if defined(__sgi) || defined(__sparc) || defined(__sparc__) || defined(__PPC__) || defined(__ppc__) || defined(__BIG_ENDIAN__) +#define B3_MAKE_ID(a, b, c, d) ((int)(a) << 24 | (int)(b) << 16 | (c) << 8 | (d)) #else -# define B3_MAKE_ID(a,b,c,d) ( (int)(d)<<24 | (int)(c)<<16 | (b)<<8 | (a) ) +#define B3_MAKE_ID(a, b, c, d) ((int)(d) << 24 | (int)(c) << 16 | (b) << 8 | (a)) #endif -#define B3_SOFTBODY_CODE B3_MAKE_ID('S','B','D','Y') -#define B3_COLLISIONOBJECT_CODE B3_MAKE_ID('C','O','B','J') -#define B3_RIGIDBODY_CODE B3_MAKE_ID('R','B','D','Y') -#define B3_CONSTRAINT_CODE B3_MAKE_ID('C','O','N','S') -#define B3_BOXSHAPE_CODE B3_MAKE_ID('B','O','X','S') -#define B3_QUANTIZED_BVH_CODE B3_MAKE_ID('Q','B','V','H') -#define B3_TRIANLGE_INFO_MAP B3_MAKE_ID('T','M','A','P') -#define B3_SHAPE_CODE B3_MAKE_ID('S','H','A','P') -#define B3_ARRAY_CODE B3_MAKE_ID('A','R','A','Y') -#define B3_SBMATERIAL_CODE B3_MAKE_ID('S','B','M','T') -#define B3_SBNODE_CODE B3_MAKE_ID('S','B','N','D') -#define B3_DYNAMICSWORLD_CODE B3_MAKE_ID('D','W','L','D') -#define B3_DNA_CODE B3_MAKE_ID('D','N','A','1') - - -struct b3PointerUid +#define B3_SOFTBODY_CODE B3_MAKE_ID('S', 'B', 'D', 'Y') +#define B3_COLLISIONOBJECT_CODE B3_MAKE_ID('C', 'O', 'B', 'J') +#define B3_RIGIDBODY_CODE B3_MAKE_ID('R', 'B', 'D', 'Y') +#define B3_CONSTRAINT_CODE B3_MAKE_ID('C', 'O', 'N', 'S') +#define B3_BOXSHAPE_CODE B3_MAKE_ID('B', 'O', 'X', 'S') +#define B3_QUANTIZED_BVH_CODE B3_MAKE_ID('Q', 'B', 'V', 'H') +#define B3_TRIANLGE_INFO_MAP B3_MAKE_ID('T', 'M', 'A', 'P') +#define B3_SHAPE_CODE B3_MAKE_ID('S', 'H', 'A', 'P') +#define B3_ARRAY_CODE B3_MAKE_ID('A', 'R', 'A', 'Y') +#define B3_SBMATERIAL_CODE B3_MAKE_ID('S', 'B', 'M', 'T') +#define B3_SBNODE_CODE B3_MAKE_ID('S', 'B', 'N', 'D') +#define B3_DYNAMICSWORLD_CODE B3_MAKE_ID('D', 'W', 'L', 'D') +#define B3_DNA_CODE B3_MAKE_ID('D', 'N', 'A', '1') + +struct b3PointerUid { - union - { - void* m_ptr; - int m_uniqueIds[2]; + union { + void* m_ptr; + int m_uniqueIds[2]; }; }; ///The b3DefaultSerializer is the main Bullet serialization class. ///The constructor takes an optional argument for backwards compatibility, it is recommended to leave this empty/zero. -class b3DefaultSerializer : public b3Serializer +class b3DefaultSerializer : public b3Serializer { + b3AlignedObjectArray<char*> mTypes; + b3AlignedObjectArray<short*> mStructs; + b3AlignedObjectArray<short> mTlens; + b3HashMap<b3HashInt, int> mStructReverse; + b3HashMap<b3HashString, int> mTypeLookup; + b3HashMap<b3HashPtr, void*> m_chunkP; - b3AlignedObjectArray<char*> mTypes; - b3AlignedObjectArray<short*> mStructs; - b3AlignedObjectArray<short> mTlens; - b3HashMap<b3HashInt, int> mStructReverse; - b3HashMap<b3HashString,int> mTypeLookup; + b3HashMap<b3HashPtr, const char*> m_nameMap; - - b3HashMap<b3HashPtr,void*> m_chunkP; - - b3HashMap<b3HashPtr,const char*> m_nameMap; + b3HashMap<b3HashPtr, b3PointerUid> m_uniquePointers; + int m_uniqueIdGenerator; - b3HashMap<b3HashPtr,b3PointerUid> m_uniquePointers; - int m_uniqueIdGenerator; + int m_totalSize; + unsigned char* m_buffer; + int m_currentSize; + void* m_dna; + int m_dnaLength; - int m_totalSize; - unsigned char* m_buffer; - int m_currentSize; - void* m_dna; - int m_dnaLength; + int m_serializationFlags; - int m_serializationFlags; + b3AlignedObjectArray<b3Chunk*> m_chunkPtrs; - - b3AlignedObjectArray<b3Chunk*> m_chunkPtrs; - protected: - - virtual void* findPointer(void* oldPtr) + virtual void* findPointer(void* oldPtr) { void** ptr = m_chunkP.find(oldPtr); if (ptr && *ptr) @@ -175,48 +159,43 @@ protected: return 0; } - - - - - void writeDNA() - { - b3Chunk* dnaChunk = allocate(m_dnaLength,1); - memcpy(dnaChunk->m_oldPtr,m_dna,m_dnaLength); - finalizeChunk(dnaChunk,"DNA1",B3_DNA_CODE, m_dna); - } + void writeDNA() + { + b3Chunk* dnaChunk = allocate(m_dnaLength, 1); + memcpy(dnaChunk->m_oldPtr, m_dna, m_dnaLength); + finalizeChunk(dnaChunk, "DNA1", B3_DNA_CODE, m_dna); + } - int getReverseType(const char *type) const - { + int getReverseType(const char* type) const + { + b3HashString key(type); + const int* valuePtr = mTypeLookup.find(key); + if (valuePtr) + return *valuePtr; - b3HashString key(type); - const int* valuePtr = mTypeLookup.find(key); - if (valuePtr) - return *valuePtr; - - return -1; - } + return -1; + } - void initDNA(const char* bdnaOrg,int dnalen) - { - ///was already initialized - if (m_dna) - return; + void initDNA(const char* bdnaOrg, int dnalen) + { + ///was already initialized + if (m_dna) + return; - int littleEndian= 1; - littleEndian= ((char*)&littleEndian)[0]; - + int littleEndian = 1; + littleEndian = ((char*)&littleEndian)[0]; - m_dna = b3AlignedAlloc(dnalen,16); - memcpy(m_dna,bdnaOrg,dnalen); - m_dnaLength = dnalen; + m_dna = b3AlignedAlloc(dnalen, 16); + memcpy(m_dna, bdnaOrg, dnalen); + m_dnaLength = dnalen; - int *intPtr=0; - short *shtPtr=0; - char *cp = 0;int dataLen =0; - intPtr = (int*)m_dna; + int* intPtr = 0; + short* shtPtr = 0; + char* cp = 0; + int dataLen = 0; + intPtr = (int*)m_dna; - /* + /* SDNA (4 bytes) (magic number) NAME (4 bytes) <nr> (4 bytes) amount of names (int) @@ -224,81 +203,81 @@ protected: <string> */ - if (strncmp((const char*)m_dna, "SDNA", 4)==0) - { - // skip ++ NAME - intPtr++; intPtr++; - } - - // Parse names - if (!littleEndian) - *intPtr = b3SwapEndian(*intPtr); - - dataLen = *intPtr; - + if (strncmp((const char*)m_dna, "SDNA", 4) == 0) + { + // skip ++ NAME + intPtr++; intPtr++; + } - cp = (char*)intPtr; - int i; - for ( i=0; i<dataLen; i++) - { - - while (*cp)cp++; - cp++; - } - cp = b3AlignPointer(cp,4); + // Parse names + if (!littleEndian) + *intPtr = b3SwapEndian(*intPtr); - /* + dataLen = *intPtr; + + intPtr++; + + cp = (char*)intPtr; + int i; + for (i = 0; i < dataLen; i++) + { + while (*cp) cp++; + cp++; + } + cp = b3AlignPointer(cp, 4); + + /* TYPE (4 bytes) <nr> amount of types (int) <string> <string> */ - intPtr = (int*)cp; - b3Assert(strncmp(cp, "TYPE", 4)==0); intPtr++; + intPtr = (int*)cp; + b3Assert(strncmp(cp, "TYPE", 4) == 0); + intPtr++; - if (!littleEndian) - *intPtr = b3SwapEndian(*intPtr); - - dataLen = *intPtr; - intPtr++; + if (!littleEndian) + *intPtr = b3SwapEndian(*intPtr); - - cp = (char*)intPtr; - for (i=0; i<dataLen; i++) - { - mTypes.push_back(cp); - while (*cp)cp++; - cp++; - } + dataLen = *intPtr; + intPtr++; - cp = b3AlignPointer(cp,4); + cp = (char*)intPtr; + for (i = 0; i < dataLen; i++) + { + mTypes.push_back(cp); + while (*cp) cp++; + cp++; + } + cp = b3AlignPointer(cp, 4); - /* + /* TLEN (4 bytes) <len> (short) the lengths of types <len> */ - // Parse type lens - intPtr = (int*)cp; - b3Assert(strncmp(cp, "TLEN", 4)==0); intPtr++; + // Parse type lens + intPtr = (int*)cp; + b3Assert(strncmp(cp, "TLEN", 4) == 0); + intPtr++; - dataLen = (int)mTypes.size(); + dataLen = (int)mTypes.size(); - shtPtr = (short*)intPtr; - for (i=0; i<dataLen; i++, shtPtr++) - { - if (!littleEndian) - shtPtr[0] = b3SwapEndian(shtPtr[0]); - mTlens.push_back(shtPtr[0]); - } + shtPtr = (short*)intPtr; + for (i = 0; i < dataLen; i++, shtPtr++) + { + if (!littleEndian) + shtPtr[0] = b3SwapEndian(shtPtr[0]); + mTlens.push_back(shtPtr[0]); + } - if (dataLen & 1) shtPtr++; + if (dataLen & 1) shtPtr++; - /* + /* STRC (4 bytes) <nr> amount of structs (int) <typenr> @@ -309,331 +288,314 @@ protected: <namenr> */ - intPtr = (int*)shtPtr; - cp = (char*)intPtr; - b3Assert(strncmp(cp, "STRC", 4)==0); intPtr++; + intPtr = (int*)shtPtr; + cp = (char*)intPtr; + b3Assert(strncmp(cp, "STRC", 4) == 0); + intPtr++; - if (!littleEndian) - *intPtr = b3SwapEndian(*intPtr); - dataLen = *intPtr ; - intPtr++; + if (!littleEndian) + *intPtr = b3SwapEndian(*intPtr); + dataLen = *intPtr; + intPtr++; + shtPtr = (short*)intPtr; + for (i = 0; i < dataLen; i++) + { + mStructs.push_back(shtPtr); - shtPtr = (short*)intPtr; - for (i=0; i<dataLen; i++) + if (!littleEndian) { - mStructs.push_back (shtPtr); - - if (!littleEndian) - { - shtPtr[0]= b3SwapEndian(shtPtr[0]); - shtPtr[1]= b3SwapEndian(shtPtr[1]); + shtPtr[0] = b3SwapEndian(shtPtr[0]); + shtPtr[1] = b3SwapEndian(shtPtr[1]); - int len = shtPtr[1]; - shtPtr+= 2; + int len = shtPtr[1]; + shtPtr += 2; - for (int a=0; a<len; a++, shtPtr+=2) - { - shtPtr[0]= b3SwapEndian(shtPtr[0]); - shtPtr[1]= b3SwapEndian(shtPtr[1]); - } - - } else + for (int a = 0; a < len; a++, shtPtr += 2) { - shtPtr+= (2*shtPtr[1])+2; + shtPtr[0] = b3SwapEndian(shtPtr[0]); + shtPtr[1] = b3SwapEndian(shtPtr[1]); } } - - // build reverse lookups - for (i=0; i<(int)mStructs.size(); i++) + else { - short *strc = mStructs.at(i); - mStructReverse.insert(strc[0], i); - mTypeLookup.insert(b3HashString(mTypes[strc[0]]),i); + shtPtr += (2 * shtPtr[1]) + 2; } } -public: - + // build reverse lookups + for (i = 0; i < (int)mStructs.size(); i++) + { + short* strc = mStructs.at(i); + mStructReverse.insert(strc[0], i); + mTypeLookup.insert(b3HashString(mTypes[strc[0]]), i); + } + } - +public: + b3DefaultSerializer(int totalSize = 0) + : m_totalSize(totalSize), + m_currentSize(0), + m_dna(0), + m_dnaLength(0), + m_serializationFlags(0) + { + m_buffer = m_totalSize ? (unsigned char*)b3AlignedAlloc(totalSize, 16) : 0; - b3DefaultSerializer(int totalSize=0) - :m_totalSize(totalSize), - m_currentSize(0), - m_dna(0), - m_dnaLength(0), - m_serializationFlags(0) - { - m_buffer = m_totalSize?(unsigned char*)b3AlignedAlloc(totalSize,16):0; - - const bool VOID_IS_8 = ((sizeof(void*)==8)); + const bool VOID_IS_8 = ((sizeof(void*) == 8)); #ifdef B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES - if (VOID_IS_8) - { + if (VOID_IS_8) + { #if _WIN64 - initDNA((const char*)b3s_bulletDNAstr64,b3s_bulletDNAlen64); + initDNA((const char*)b3s_bulletDNAstr64, b3s_bulletDNAlen64); #else - b3Assert(0); + b3Assert(0); #endif - } else - { + } + else + { #ifndef _WIN64 - initDNA((const char*)b3s_bulletDNAstr,b3s_bulletDNAlen); + initDNA((const char*)b3s_bulletDNAstr, b3s_bulletDNAlen); #else - b3Assert(0); + b3Assert(0); #endif - } - -#else //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES - if (VOID_IS_8) - { - initDNA((const char*)b3s_bulletDNAstr64,b3s_bulletDNAlen64); - } else - { - initDNA((const char*)b3s_bulletDNAstr,b3s_bulletDNAlen); - } -#endif //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES - } - virtual ~b3DefaultSerializer() +#else //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES + if (VOID_IS_8) { - if (m_buffer) - b3AlignedFree(m_buffer); - if (m_dna) - b3AlignedFree(m_dna); + initDNA((const char*)b3s_bulletDNAstr64, b3s_bulletDNAlen64); } - - void writeHeader(unsigned char* buffer) const + else { - + initDNA((const char*)b3s_bulletDNAstr, b3s_bulletDNAlen); + } +#endif //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES + } -#ifdef B3_USE_DOUBLE_PRECISION - memcpy(buffer, "BULLETd", 7); + virtual ~b3DefaultSerializer() + { + if (m_buffer) + b3AlignedFree(m_buffer); + if (m_dna) + b3AlignedFree(m_dna); + } + + void writeHeader(unsigned char* buffer) const + { +#ifdef B3_USE_DOUBLE_PRECISION + memcpy(buffer, "BULLETd", 7); #else - memcpy(buffer, "BULLETf", 7); -#endif //B3_USE_DOUBLE_PRECISION - - int littleEndian= 1; - littleEndian= ((char*)&littleEndian)[0]; + memcpy(buffer, "BULLETf", 7); +#endif //B3_USE_DOUBLE_PRECISION - if (sizeof(void*)==8) - { - buffer[7] = '-'; - } else - { - buffer[7] = '_'; - } + int littleEndian = 1; + littleEndian = ((char*)&littleEndian)[0]; - if (littleEndian) - { - buffer[8]='v'; - } else - { - buffer[8]='V'; - } + if (sizeof(void*) == 8) + { + buffer[7] = '-'; + } + else + { + buffer[7] = '_'; + } + if (littleEndian) + { + buffer[8] = 'v'; + } + else + { + buffer[8] = 'V'; + } - buffer[9] = '2'; - buffer[10] = '8'; - buffer[11] = '1'; + buffer[9] = '2'; + buffer[10] = '8'; + buffer[11] = '1'; + } + virtual void startSerialization() + { + m_uniqueIdGenerator = 1; + if (m_totalSize) + { + unsigned char* buffer = internalAlloc(B3_HEADER_LENGTH); + writeHeader(buffer); } + } + + virtual void finishSerialization() + { + writeDNA(); - virtual void startSerialization() + //if we didn't pre-allocate a buffer, we need to create a contiguous buffer now + int mysize = 0; + if (!m_totalSize) { - m_uniqueIdGenerator= 1; - if (m_totalSize) + if (m_buffer) + b3AlignedFree(m_buffer); + + m_currentSize += B3_HEADER_LENGTH; + m_buffer = (unsigned char*)b3AlignedAlloc(m_currentSize, 16); + + unsigned char* currentPtr = m_buffer; + writeHeader(m_buffer); + currentPtr += B3_HEADER_LENGTH; + mysize += B3_HEADER_LENGTH; + for (int i = 0; i < m_chunkPtrs.size(); i++) { - unsigned char* buffer = internalAlloc(B3_HEADER_LENGTH); - writeHeader(buffer); + int curLength = sizeof(b3Chunk) + m_chunkPtrs[i]->m_length; + memcpy(currentPtr, m_chunkPtrs[i], curLength); + b3AlignedFree(m_chunkPtrs[i]); + currentPtr += curLength; + mysize += curLength; } - } - virtual void finishSerialization() + mTypes.clear(); + mStructs.clear(); + mTlens.clear(); + mStructReverse.clear(); + mTypeLookup.clear(); + m_chunkP.clear(); + m_nameMap.clear(); + m_uniquePointers.clear(); + m_chunkPtrs.clear(); + } + + virtual void* getUniquePointer(void* oldPtr) + { + if (!oldPtr) + return 0; + + b3PointerUid* uptr = (b3PointerUid*)m_uniquePointers.find(oldPtr); + if (uptr) { - writeDNA(); + return uptr->m_ptr; + } + m_uniqueIdGenerator++; - //if we didn't pre-allocate a buffer, we need to create a contiguous buffer now - int mysize = 0; - if (!m_totalSize) - { - if (m_buffer) - b3AlignedFree(m_buffer); + b3PointerUid uid; + uid.m_uniqueIds[0] = m_uniqueIdGenerator; + uid.m_uniqueIds[1] = m_uniqueIdGenerator; + m_uniquePointers.insert(oldPtr, uid); + return uid.m_ptr; + } - m_currentSize += B3_HEADER_LENGTH; - m_buffer = (unsigned char*)b3AlignedAlloc(m_currentSize,16); + virtual const unsigned char* getBufferPointer() const + { + return m_buffer; + } - unsigned char* currentPtr = m_buffer; - writeHeader(m_buffer); - currentPtr += B3_HEADER_LENGTH; - mysize+=B3_HEADER_LENGTH; - for (int i=0;i< m_chunkPtrs.size();i++) - { - int curLength = sizeof(b3Chunk)+m_chunkPtrs[i]->m_length; - memcpy(currentPtr,m_chunkPtrs[i], curLength); - b3AlignedFree(m_chunkPtrs[i]); - currentPtr+=curLength; - mysize+=curLength; - } - } + virtual int getCurrentBufferSize() const + { + return m_currentSize; + } - mTypes.clear(); - mStructs.clear(); - mTlens.clear(); - mStructReverse.clear(); - mTypeLookup.clear(); - m_chunkP.clear(); - m_nameMap.clear(); - m_uniquePointers.clear(); - m_chunkPtrs.clear(); + virtual void finalizeChunk(b3Chunk* chunk, const char* structType, int chunkCode, void* oldPtr) + { + if (!(m_serializationFlags & B3_SERIALIZE_NO_DUPLICATE_ASSERT)) + { + b3Assert(!findPointer(oldPtr)); } - virtual void* getUniquePointer(void*oldPtr) - { - if (!oldPtr) - return 0; + chunk->m_dna_nr = getReverseType(structType); - b3PointerUid* uptr = (b3PointerUid*)m_uniquePointers.find(oldPtr); - if (uptr) - { - return uptr->m_ptr; - } - m_uniqueIdGenerator++; - - b3PointerUid uid; - uid.m_uniqueIds[0] = m_uniqueIdGenerator; - uid.m_uniqueIds[1] = m_uniqueIdGenerator; - m_uniquePointers.insert(oldPtr,uid); - return uid.m_ptr; + chunk->m_chunkCode = chunkCode; - } + void* uniquePtr = getUniquePointer(oldPtr); - virtual const unsigned char* getBufferPointer() const - { - return m_buffer; - } + m_chunkP.insert(oldPtr, uniquePtr); //chunk->m_oldPtr); + chunk->m_oldPtr = uniquePtr; //oldPtr; + } - virtual int getCurrentBufferSize() const - { - return m_currentSize; - } + virtual unsigned char* internalAlloc(size_t size) + { + unsigned char* ptr = 0; - virtual void finalizeChunk(b3Chunk* chunk, const char* structType, int chunkCode,void* oldPtr) + if (m_totalSize) { - if (!(m_serializationFlags&B3_SERIALIZE_NO_DUPLICATE_ASSERT)) - { - b3Assert(!findPointer(oldPtr)); - } - - chunk->m_dna_nr = getReverseType(structType); - - chunk->m_chunkCode = chunkCode; - - void* uniquePtr = getUniquePointer(oldPtr); - - m_chunkP.insert(oldPtr,uniquePtr);//chunk->m_oldPtr); - chunk->m_oldPtr = uniquePtr;//oldPtr; - + ptr = m_buffer + m_currentSize; + m_currentSize += int(size); + b3Assert(m_currentSize < m_totalSize); } - - - virtual unsigned char* internalAlloc(size_t size) + else { - unsigned char* ptr = 0; - - if (m_totalSize) - { - ptr = m_buffer+m_currentSize; - m_currentSize += int(size); - b3Assert(m_currentSize<m_totalSize); - } else - { - ptr = (unsigned char*)b3AlignedAlloc(size,16); - m_currentSize += int(size); - } - return ptr; + ptr = (unsigned char*)b3AlignedAlloc(size, 16); + m_currentSize += int(size); } + return ptr; + } - + virtual b3Chunk* allocate(size_t size, int numElements) + { + unsigned char* ptr = internalAlloc(int(size) * numElements + sizeof(b3Chunk)); - virtual b3Chunk* allocate(size_t size, int numElements) - { + unsigned char* data = ptr + sizeof(b3Chunk); - unsigned char* ptr = internalAlloc(int(size)*numElements+sizeof(b3Chunk)); + b3Chunk* chunk = (b3Chunk*)ptr; + chunk->m_chunkCode = 0; + chunk->m_oldPtr = data; + chunk->m_length = int(size) * numElements; + chunk->m_number = numElements; - unsigned char* data = ptr + sizeof(b3Chunk); - - b3Chunk* chunk = (b3Chunk*)ptr; - chunk->m_chunkCode = 0; - chunk->m_oldPtr = data; - chunk->m_length = int(size)*numElements; - chunk->m_number = numElements; - - m_chunkPtrs.push_back(chunk); - + m_chunkPtrs.push_back(chunk); - return chunk; - } + return chunk; + } - virtual const char* findNameForPointer(const void* ptr) const - { - const char*const * namePtr = m_nameMap.find(ptr); - if (namePtr && *namePtr) - return *namePtr; - return 0; + virtual const char* findNameForPointer(const void* ptr) const + { + const char* const* namePtr = m_nameMap.find(ptr); + if (namePtr && *namePtr) + return *namePtr; + return 0; + } - } + virtual void registerNameForPointer(const void* ptr, const char* name) + { + m_nameMap.insert(ptr, name); + } - virtual void registerNameForPointer(const void* ptr, const char* name) + virtual void serializeName(const char* name) + { + if (name) { - m_nameMap.insert(ptr,name); - } + //don't serialize name twice + if (findPointer((void*)name)) + return; - virtual void serializeName(const char* name) - { - if (name) + int len = b3StrLen(name); + if (len) { - //don't serialize name twice - if (findPointer((void*)name)) - return; - - int len = b3StrLen(name); - if (len) + int newLen = len + 1; + int padding = ((newLen + 3) & ~3) - newLen; + newLen += padding; + + //serialize name string now + b3Chunk* chunk = allocate(sizeof(char), newLen); + char* destinationName = (char*)chunk->m_oldPtr; + for (int i = 0; i < len; i++) { - - int newLen = len+1; - int padding = ((newLen+3)&~3)-newLen; - newLen += padding; - - //serialize name string now - b3Chunk* chunk = allocate(sizeof(char),newLen); - char* destinationName = (char*)chunk->m_oldPtr; - for (int i=0;i<len;i++) - { - destinationName[i] = name[i]; - } - destinationName[len] = 0; - finalizeChunk(chunk,"char",B3_ARRAY_CODE,(void*)name); + destinationName[i] = name[i]; } + destinationName[len] = 0; + finalizeChunk(chunk, "char", B3_ARRAY_CODE, (void*)name); } } + } - virtual int getSerializationFlags() const - { - return m_serializationFlags; - } - - virtual void setSerializationFlags(int flags) - { - m_serializationFlags = flags; - } + virtual int getSerializationFlags() const + { + return m_serializationFlags; + } + virtual void setSerializationFlags(int flags) + { + m_serializationFlags = flags; + } }; - -#endif //B3_SERIALIZER_H - +#endif //B3_SERIALIZER_H |