@prefix :        <https://www.web3d.org/x3d/content/examples/Savage/Weapons/Guns/M198Howitzer.ttl#> .
@prefix owl:     <http://www.w3.org/2002/07/owl#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix schema:  <http://schema.org/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix xsd:     <http://www.w3.org/2001/XMLSchema#> .
@prefix x3d:     <https://www.web3d.org/specifications/x3d-4.0.xsd#> .
@prefix x3do:    <https://www.web3d.org/specifications/X3dOntology4.0#> .

:X3D a owl:NamedIndividual, x3do:X3D ;
  x3do:hasHead :head ;
  x3do:hasScene :Scene ;
  x3do:profile 'Immersive' ;
  x3do:version '3.0' ;
  x3do:noNamespaceSchemaLocation 'https://www.web3d.org/specifications/x3d-3.0.xsd' .
:head a owl:NamedIndividual, x3do:head ;
  x3do:hasParent :X3D ;
  x3do:hasMeta :meta_1_1, :meta_1_2, :meta_1_3, :meta_1_4, :meta_1_5, :meta_1_6, :meta_1_7, :meta_1_8, :meta_1_9, :meta_1_10, :meta_1_11, :meta_1_12 .
:meta_1_1 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'M198Howitzer.x3d' ;
  x3do:name 'title' .
:meta_1_2 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'M198 Howitzer to scale' ;
  x3do:name 'description' .
:meta_1_3 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'J.P. McDonough' ;
  x3do:name 'creator' .
:meta_1_4 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content '7 January 2004' ;
  x3do:name 'created' .
:meta_1_5 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content '28 November 2019' ;
  x3do:name 'modified' .
:meta_1_6 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'M198-dvic502.jpg' ;
  x3do:name 'reference' .
:meta_1_7 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'Impact.avi' ;
  x3do:name 'reference' .
:meta_1_8 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'http://www.army.mil/fact_files_site/m198' ;
  x3do:name 'reference' .
:meta_1_9 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'https://www.fas.org/man/dod-101/sys/land/m198.htm' ;
  x3do:name 'reference' .
:meta_1_10 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'https://www.web3d.org/x3d/content/examples/Savage/Weapons/Guns/M198Howitzer.x3d' ;
  x3do:name 'identifier' .
:meta_1_11 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'X3D-Edit, https://www.web3d.org/x3d/tools/X3D-Edit' ;
  x3do:name 'generator' .
:meta_1_12 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content '../../license.html' ;
  x3do:name 'license' .
:meta dcterms:title "M198Howitzer.x3d" .
:meta dcterms:description "M198 Howitzer to scale" .
:meta dcterms:creator "J.P. McDonough" .
:meta dcterms:created "7 January 2004" .
:meta dcterms:modified "28 November 2019" .
:meta dcterms:reference "M198-dvic502.jpg" .
:meta dcterms:reference "Impact.avi" .
:meta dcterms:reference "http://www.army.mil/fact_files_site/m198" .
:meta dcterms:reference "https://www.fas.org/man/dod-101/sys/land/m198.htm" .
:meta dcterms:identifier "https://www.web3d.org/x3d/content/examples/Savage/Weapons/Guns/M198Howitzer.x3d" .
:meta dcterms:generator "X3D-Edit, https://www.web3d.org/x3d/tools/X3D-Edit" .
:meta dcterms:license "../../license.html" .
:Scene a owl:NamedIndividual, x3do:Scene ;
  x3do:hasParent :X3D ;
  x3do:hasChildren :WorldInfo_2_1, :ExampleViewPositionOrientation, :Sound_2_4, :betweenTrails, :sideViewClose, :sideView, :underTube, :downBarrel, :M198_Howitzer, :Background_2_11, :target, :theGround, :fireTheRound, :targetSphere, :Transform_2_19, :Transform_2_20, :Transform_2_21, :Transform_2_22 ;
  x3do:hasExternProtoDeclare :ExternProtoDeclare_2_2 ;
  x3do:hasROUTE :ROUTE_2_14, :ROUTE_2_15, :ROUTE_2_16, :ROUTE_2_23, :ROUTE_2_24, :ROUTE_2_25, :ROUTE_2_26, :ROUTE_2_27, :ROUTE_2_28, :ROUTE_2_29, :ROUTE_2_30, :ROUTE_2_31, :ROUTE_2_32, :ROUTE_2_33, :ROUTE_2_34 .
:WorldInfo_2_1 a owl:NamedIndividual, x3do:WorldInfo ;
  x3do:hasParent :Scene ;
  x3do:title 'M198Howitzer.x3d' .
:ExternProtoDeclare_2_2 a owl:NamedIndividual, x3do:ExternProtoDeclare ;
  x3do:hasParent :Scene ;
  x3do:hasField :field_2_2_1, :field_2_2_2, :field_2_2_3, :field_2_2_4, :field_2_2_5, :field_2_2_6 ;
  x3do:appinfo 'ViewPositionOrientation provides provides console output of local position and orientation as user navigates' ;
  x3do:name 'ViewPositionOrientation' ;
  x3do:url '"../../../Savage/Tools/Authoring/ViewPositionOrientationPrototype.x3d#ViewPositionOrientation" "https://www.web3d.org/x3d/content/examples/Savage/Tools/Authoring/ViewPositionOrientationPrototype.x3d#ViewPositionOrientation" "../../../Savage/Tools/Authoring/ViewPositionOrientationPrototype.wrl#ViewPositionOrientation" "https://www.web3d.org/x3d/content/examples/Savage/Tools/Authoring/ViewPositionOrientationPrototype.wrl#ViewPositionOrientation"' .
:field_2_2_1 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'inputOutput' ;
  x3do:appinfo 'Whether or not ViewPositionOrientation sends output to console.' ;
  x3do:name 'enabled' ;
  x3do:type 'SFBool' .
:field_2_2_2 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Output internal trace messages for debugging this node - developer use only can be ignored.' ;
  x3do:name 'traceEnabled' ;
  x3do:type 'SFBool' .
:field_2_2_3 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'inputOnly' ;
  x3do:appinfo 'Ability to turn output tracing on/off at runtime.' ;
  x3do:name 'set_traceEnabled' ;
  x3do:type 'SFBool' .
:field_2_2_4 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'outputOnly' ;
  x3do:appinfo 'Output local position.' ;
  x3do:name 'position_changed' ;
  x3do:type 'SFVec3f' .
:field_2_2_5 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'outputOnly' ;
  x3do:appinfo 'Output local orientation.' ;
  x3do:name 'orientation_changed' ;
  x3do:type 'SFRotation' .
:field_2_2_6 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'outputOnly' ;
  x3do:appinfo 'MFString value of new Viewpoint' ;
  x3do:name 'outputViewpointString' ;
  x3do:type 'MFString' .
:ExampleViewPositionOrientation a owl:NamedIndividual, x3do:ProtoInstance ;
  x3do:hasParent :Scene ;
  x3do:hasFieldValue :fieldValue_2_3_1 ;
  x3do:DEF 'ExampleViewPositionOrientation' ;
  x3do:name 'ViewPositionOrientation' .
:fieldValue_2_3_1 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :ExampleViewPositionOrientation ;
  x3do:name 'enabled' ;
  x3do:value false .
:Sound_2_4 a owl:NamedIndividual, x3do:Sound ;
  x3do:hasParent :Scene ;
  x3do:hasSource :CannonFireSound ;
  x3do:maxBack 100 ;
  x3do:maxFront 100 ;
  x3do:minBack 0.01 ;
  x3do:minFront 0.01 .
:CannonFireSound a owl:NamedIndividual, x3do:AudioClip ;
  x3do:hasParent :Sound_2_4 ;
  x3do:DEF 'CannonFireSound' ;
  x3do:description 'Cannon fire sound' ;
  x3do:url '"../../GroundVehicles/T72M/CannonFire.wav" "https://www.web3d.org/x3d/content/examples/Savage/GroundVehicles/T72M/CannonFire.wav"' .
:betweenTrails a owl:NamedIndividual, x3do:Viewpoint ;
  x3do:hasParent :Scene ;
  x3do:DEF 'betweenTrails' ;
  x3do:description 'between Trails' ;
  x3do:orientation ( -1 0 0 0 ) ;
  x3do:position ( 0 1.4 10 ) .
:sideViewClose a owl:NamedIndividual, x3do:Viewpoint ;
  x3do:hasParent :Scene ;
  x3do:DEF 'sideViewClose' ;
  x3do:description 'Side View Close' ;
  x3do:orientation ( 0.007 0.997 0.076 1.7635 ) ;
  x3do:position ( 9.8 2.2 -1.8 ) .
:sideView a owl:NamedIndividual, x3do:Viewpoint ;
  x3do:hasParent :Scene ;
  x3do:DEF 'sideView' ;
  x3do:description 'from Side' ;
  x3do:orientation ( 0 1 0 1.57 ) ;
  x3do:position ( 320 10 -160 ) .
:underTube a owl:NamedIndividual, x3do:Viewpoint ;
  x3do:hasParent :Scene ;
  x3do:DEF 'underTube' ;
  x3do:description 'under Tube' ;
  x3do:orientation ( -0.02 -0.982 -0.19 3.1266 ) ;
  x3do:position ( 0 5.7 -7.4 ) .
:downBarrel a owl:NamedIndividual, x3do:Viewpoint ;
  x3do:hasParent :Scene ;
  x3do:DEF 'downBarrel' ;
  x3do:description 'down Barrel' ;
  x3do:orientation ( 0.012 -0.925 -0.381 3.138 ) ;
  x3do:position ( -0.1 7.6 -6.7 ) .
:M198_Howitzer a owl:NamedIndividual, x3do:Group ;
  x3do:hasParent :Scene ;
  x3do:hasChildren :LowerCar, :upperCarriagePiece ;
  x3do:DEF 'M198_Howitzer' .
:LowerCar a owl:NamedIndividual, x3do:Group ;
  x3do:hasParent :M198_Howitzer ;
  x3do:hasChildren :Shape_2_10_1_1, :rightTrailMover, :leftTrailMover, :Transform_2_10_1_4, :wheelRaiser, :AnimationControl ;
  x3do:DEF 'LowerCar' .
:Shape_2_10_1_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :LowerCar ;
  x3do:hasGeometry :LowerCarriage1 ;
  x3do:hasAppearance :camiPaint .
:LowerCarriage1 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :Shape_2_10_1_1 ;
  x3do:DEF 'LowerCarriage1' ;
  x3do:height .5 .
:camiPaint a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_10_1_1 ;
  x3do:hasMaterial :cami ;
  x3do:hasTexture :camo ;
  x3do:DEF 'camiPaint' .
:cami a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :camiPaint ;
  x3do:DEF 'cami' ;
  x3do:ambientIntensity 0.25 ;
  x3do:diffuseColor ( 0.054 0.233 0.39 ) ;
  x3do:shininess 0 .
:camo a owl:NamedIndividual, x3do:ImageTexture ;
  x3do:hasParent :camiPaint ;
  x3do:DEF 'camo' ;
  x3do:repeatS false ;
  x3do:repeatT false ;
  x3do:url '"greenCamo.jpg" "https://www.web3d.org/x3d/content/examples/Savage/Weapons/Guns/greenCamo.jpg"' .
:rightTrailMover a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :LowerCar ;
  x3do:hasChildren :RightTrail, :RightSpade, :trailSpreader ;
  x3do:hasROUTE :ROUTE_2_10_1_2_4 ;
  x3do:DEF 'rightTrailMover' ;
  x3do:translation ( .1 0 0 ) .
:RightTrail a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :rightTrailMover ;
  x3do:hasChildren :brakeResevoir, :basePlateClamp, :Transform_2_10_1_2_1_3, :Transform_2_10_1_2_1_4 ;
  x3do:DEF 'RightTrail' ;
  x3do:rotation ( 0 1 0 -1.1 ) ;
  x3do:translation ( 0 -0.3 0 ) .
:brakeResevoir a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :RightTrail ;
  x3do:hasChildren :Transform_2_10_1_2_1_1_1 ;
  x3do:DEF 'brakeResevoir' ;
  x3do:rotation ( 0 1 0 1.57 ) ;
  x3do:translation ( 2 .27 0 ) .
:Transform_2_10_1_2_1_1_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :brakeResevoir ;
  x3do:hasChildren :Shape_2_10_1_2_1_1_1_1 ;
  x3do:rotation ( 1 0 0 1.57 ) ;
  x3do:scale ( 1.6 1 1.2 ) .
:Shape_2_10_1_2_1_1_1_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_1_2_1_1_1 ;
  x3do:hasGeometry :Cylinder_2_10_1_2_1_1_1_1_1 ;
  x3do:hasAppearance :camiPaint-USE-1 .
:Cylinder_2_10_1_2_1_1_1_1_1 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :Shape_2_10_1_2_1_1_1_1 ;
  x3do:height 1.2 ;
  x3do:radius .15 .
:camiPaint-USE-1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_10_1_2_1_1_1_1 ;
  owl:sameAs :camiPaint . # DEF matching this USE
:basePlateClamp a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :RightTrail ;
  x3do:hasChildren :clamp ;
  x3do:DEF 'basePlateClamp' ;
  x3do:rotation ( 0 1 0 1.7 ) ;
  x3do:scale ( .05 .05 .05 ) ;
  x3do:translation ( 2.7 .6 -0.2 ) .
:clamp a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :basePlateClamp ;
  x3do:hasGeometry :Extrusion_2_10_1_2_1_2_1_1 ;
  x3do:hasAppearance :camiPaint-USE-2 ;
  x3do:DEF 'clamp' .
:Extrusion_2_10_1_2_1_2_1_1 a owl:NamedIndividual, x3do:Extrusion ;
  x3do:hasParent :clamp ;
  x3do:crossSection ( 0 0 1 0 1 2 3 2 3 3 0 3 0 0 ) ;
  x3do:solid false ;
  x3do:spine ( 0 0 0 2 0 0 ) .
:camiPaint-USE-2 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :clamp ;
  owl:sameAs :camiPaint . # DEF matching this USE
:Transform_2_10_1_2_1_3 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :RightTrail ;
  x3do:hasChildren :clamp-USE-1 ;
  x3do:rotation ( 0 1 0 -1.7 ) ;
  x3do:scale ( .05 .05 .05 ) ;
  x3do:translation ( 1.7 .6 -0.2 ) .
:clamp-USE-1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_1_2_1_3 ;
  owl:sameAs :clamp . # DEF matching this USE
:Transform_2_10_1_2_1_4 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :RightTrail ;
  x3do:hasChildren :Transform_2_10_1_2_1_4_1 ;
  x3do:rotation ( 1 0 0 -1.57 ) .
:Transform_2_10_1_2_1_4_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_10_1_2_1_4 ;
  x3do:hasChildren :trail ;
  x3do:scale ( .22 .3 .19 ) .
:trail a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_1_2_1_4_1 ;
  x3do:hasGeometry :Extrusion_2_10_1_2_1_4_1_1_1 ;
  x3do:hasAppearance :camiPaint-USE-3 ;
  x3do:DEF 'trail' .
:Extrusion_2_10_1_2_1_4_1_1_1 a owl:NamedIndividual, x3do:Extrusion ;
  x3do:hasParent :trail ;
  x3do:crossSection ( 0 0 0 3 16 2.2 20 1 20 -1 18.5 -1 18 0 0 0 ) ;
  x3do:spine ( 0 0 0 0 1.5 0 ) .
:camiPaint-USE-3 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :trail ;
  owl:sameAs :camiPaint . # DEF matching this USE
:RightSpade a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :rightTrailMover ;
  x3do:hasChildren :Transform_2_10_1_2_2_1 ;
  x3do:DEF 'RightSpade' ;
  x3do:rotation ( 0 1 0 .5 ) ;
  x3do:scale ( .07 .1 .1 ) ;
  x3do:translation ( 2.9 -0.45 3.45 ) .
:Transform_2_10_1_2_2_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :RightSpade ;
  x3do:hasChildren :Transform_2_10_1_2_2_1_1 ;
  x3do:rotation ( 0 1 0 3.14 ) .
:Transform_2_10_1_2_2_1_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_10_1_2_2_1 ;
  x3do:hasChildren :spade ;
  x3do:rotation ( 1 0 0 -1.57 ) .
:spade a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_1_2_2_1_1 ;
  x3do:hasAppearance :camiPaint-USE-4 ;
  x3do:hasGeometry :Extrusion_2_10_1_2_2_1_1_1_2 ;
  x3do:DEF 'spade' .
:camiPaint-USE-4 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :spade ;
  owl:sameAs :camiPaint . # DEF matching this USE
:Extrusion_2_10_1_2_2_1_1_1_2 a owl:NamedIndividual, x3do:Extrusion ;
  x3do:hasParent :spade ;
  x3do:crossSection ( 0 0 5 0 4 -5 4 -4 3.85 -3.5 3.75 -3 3.5 -2 3 -1 0 -0.5 0 0 ) ;
  x3do:spine ( 0 0 0 20 0 0 ) .
:trailSpreader a owl:NamedIndividual, x3do:CylinderSensor ;
  x3do:hasParent :rightTrailMover ;
  x3do:DEF 'trailSpreader' ;
  x3do:description 'Used to spread the trails' ;
  x3do:maxAngle 0 ;
  x3do:minAngle -0.5 .
:ROUTE_2_10_1_2_4 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :rightTrailMover ;
  x3do:fromField 'rotation_changed' ;
  x3do:fromNode 'trailSpreader' ;
  x3do:toField 'set_rotation' ;
  x3do:toNode 'rightTrailMover' .
:leftTrailMover a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :LowerCar ;
  x3do:hasChildren :leftTrail, :leftSpade, :lTrailSpreader ;
  x3do:hasROUTE :ROUTE_2_10_1_3_4 ;
  x3do:DEF 'leftTrailMover' ;
  x3do:translation ( -0.1 0 0 ) .
:leftTrail a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :leftTrailMover ;
  x3do:hasChildren :lbasePlateClamp, :Transform_2_10_1_3_1_2, :Transform_2_10_1_3_1_3 ;
  x3do:DEF 'leftTrail' ;
  x3do:rotation ( 0 1 0 -2.1 ) ;
  x3do:translation ( -0.5 -0.3 -0.25 ) .
:lbasePlateClamp a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :leftTrail ;
  x3do:hasChildren :clamp-USE-2 ;
  x3do:DEF 'lbasePlateClamp' ;
  x3do:rotation ( 0 1 0 1.7 ) ;
  x3do:scale ( .05 .05 .05 ) ;
  x3do:translation ( 2.7 .6 -0.2 ) .
:clamp-USE-2 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :lbasePlateClamp ;
  owl:sameAs :clamp . # DEF matching this USE
:Transform_2_10_1_3_1_2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :leftTrail ;
  x3do:hasChildren :clamp-USE-3 ;
  x3do:rotation ( 0 1 0 -1.7 ) ;
  x3do:scale ( .05 .05 .05 ) ;
  x3do:translation ( 1.7 .6 -0.2 ) .
:clamp-USE-3 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_1_3_1_2 ;
  owl:sameAs :clamp . # DEF matching this USE
:Transform_2_10_1_3_1_3 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :leftTrail ;
  x3do:hasChildren :Transform_2_10_1_3_1_3_1 ;
  x3do:rotation ( 1 0 0 -1.57 ) .
:Transform_2_10_1_3_1_3_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_10_1_3_1_3 ;
  x3do:hasChildren :trail-USE-1 ;
  x3do:scale ( .22 .3 .19 ) .
:trail-USE-1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_1_3_1_3_1 ;
  owl:sameAs :trail . # DEF matching this USE
:leftSpade a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :leftTrailMover ;
  x3do:hasChildren :Transform_2_10_1_3_2_1 ;
  x3do:DEF 'leftSpade' ;
  x3do:rotation ( 0 1 0 -0.523 ) ;
  x3do:scale ( .07 .1 .1 ) ;
  x3do:translation ( -1.9 -0.45 3.9 ) .
:Transform_2_10_1_3_2_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :leftSpade ;
  x3do:hasChildren :Transform_2_10_1_3_2_1_1 ;
  x3do:center ( .5 0 .5 ) ;
  x3do:rotation ( 0 1 0 3.14 ) .
:Transform_2_10_1_3_2_1_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_10_1_3_2_1 ;
  x3do:hasChildren :spade-USE-1 ;
  x3do:rotation ( 1 0 0 -1.57 ) .
:spade-USE-1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_1_3_2_1_1 ;
  owl:sameAs :spade . # DEF matching this USE
:lTrailSpreader a owl:NamedIndividual, x3do:CylinderSensor ;
  x3do:hasParent :leftTrailMover ;
  x3do:DEF 'lTrailSpreader' ;
  x3do:description 'Used to spread the trails' ;
  x3do:maxAngle .5 .
:ROUTE_2_10_1_3_4 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :leftTrailMover ;
  x3do:fromField 'rotation_changed' ;
  x3do:fromNode 'lTrailSpreader' ;
  x3do:toField 'set_rotation' ;
  x3do:toNode 'leftTrailMover' .
:Transform_2_10_1_4 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :LowerCar ;
  x3do:hasChildren :basePlate ;
  x3do:translation ( 0 -0.25 -0.75 ) .
:basePlate a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_1_4 ;
  x3do:hasGeometry :Cone_2_10_1_4_1_1 ;
  x3do:hasAppearance :camiPaint-USE-5 ;
  x3do:DEF 'basePlate' .
:Cone_2_10_1_4_1_1 a owl:NamedIndividual, x3do:Cone ;
  x3do:hasParent :basePlate ;
  x3do:bottomRadius .75 ;
  x3do:height .25 .
:camiPaint-USE-5 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :basePlate ;
  owl:sameAs :camiPaint . # DEF matching this USE
:wheelRaiser a owl:NamedIndividual, x3do:Group ;
  x3do:hasParent :LowerCar ;
  x3do:hasChildren :AnimationTransform ;
  x3do:DEF 'wheelRaiser' .
:AnimationTransform a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :wheelRaiser ;
  x3do:hasChildren :ButtonChoice, :rightWheel, :leftWheel ;
  x3do:DEF 'AnimationTransform' ;
  x3do:rotation ( 1 0 0 .1 ) .
:ButtonChoice a owl:NamedIndividual, x3do:Switch ;
  x3do:hasParent :AnimationTransform ;
  x3do:hasChildren :Group_2_10_1_5_1_1_1, :Group_2_10_1_5_1_1_2 ;
  x3do:DEF 'ButtonChoice' ;
  x3do:whichChoice 0 .
:Group_2_10_1_5_1_1_1 a owl:NamedIndividual, x3do:Group ;
  x3do:hasParent :ButtonChoice ;
  x3do:hasChildren :Transform_2_10_1_5_1_1_1_1, :ClearSphere1, :wheelUp, :MoveBoxUp, :BoxUpTimer ;
  x3do:hasROUTE :ROUTE_2_10_1_5_1_1_1_6, :ROUTE_2_10_1_5_1_1_1_7, :ROUTE_2_10_1_5_1_1_1_8 .
:Transform_2_10_1_5_1_1_1_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Group_2_10_1_5_1_1_1 ;
  x3do:hasChildren :ClearSphere ;
  x3do:scale ( 4 1 1 ) ;
  x3do:translation ( 0 -0.3 -0.3 ) .
:ClearSphere a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_1_5_1_1_1_1 ;
  x3do:hasAppearance :Appearance_2_10_1_5_1_1_1_1_1_1 ;
  x3do:hasGeometry :Sphere_2_10_1_5_1_1_1_1_1_2 ;
  x3do:DEF 'ClearSphere' .
:Appearance_2_10_1_5_1_1_1_1_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :ClearSphere ;
  x3do:hasMaterial :Transparent .
:Transparent a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_10_1_5_1_1_1_1_1_1 ;
  x3do:DEF 'Transparent' ;
  x3do:emissiveColor ( 1 1 1 ) ;
  x3do:transparency 1.0 .
:Sphere_2_10_1_5_1_1_1_1_1_2 a owl:NamedIndividual, x3do:Sphere ;
  x3do:hasParent :ClearSphere ;
  x3do:radius .5 .
:ClearSphere1 a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :Group_2_10_1_5_1_1_1 ;
  x3do:DEF 'ClearSphere1' ;
  x3do:description 'used to raise and lower the wheels' .
:wheelUp a owl:NamedIndividual, x3do:OrientationInterpolator ;
  x3do:hasParent :Group_2_10_1_5_1_1_1 ;
  x3do:DEF 'wheelUp' ;
  x3do:key ( 0 .25 .5 .75 .85 1 ) ;
  x3do:keyValue ( 1 0 0 0 1 0 0 .5 1 0 0 .75 1 0 0 1.25 1 0 0 1.7 1 0 0 2 ) .
:MoveBoxUp a owl:NamedIndividual, x3do:PositionInterpolator ;
  x3do:hasParent :Group_2_10_1_5_1_1_1 ;
  x3do:DEF 'MoveBoxUp' ;
  x3do:key ( 0 .5 1 ) ;
  x3do:keyValue ( 0 -3 0 0 0 0 0 3 0 ) .
:BoxUpTimer a owl:NamedIndividual, x3do:TimeSensor ;
  x3do:hasParent :Group_2_10_1_5_1_1_1 ;
  x3do:DEF 'BoxUpTimer' ;
  x3do:cycleInterval '3' .
:ROUTE_2_10_1_5_1_1_1_6 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Group_2_10_1_5_1_1_1 ;
  x3do:fromField 'fraction_changed' ;
  x3do:fromNode 'BoxUpTimer' ;
  x3do:toField 'set_fraction' ;
  x3do:toNode 'wheelUp' .
:ROUTE_2_10_1_5_1_1_1_7 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Group_2_10_1_5_1_1_1 ;
  x3do:fromField 'value_changed' ;
  x3do:fromNode 'wheelUp' ;
  x3do:toField 'set_rotation' ;
  x3do:toNode 'AnimationTransform' .
:ROUTE_2_10_1_5_1_1_1_8 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Group_2_10_1_5_1_1_1 ;
  x3do:fromField 'touchTime' ;
  x3do:fromNode 'ClearSphere1' ;
  x3do:toField 'startTime' ;
  x3do:toNode 'BoxUpTimer' .
:Group_2_10_1_5_1_1_2 a owl:NamedIndividual, x3do:Group ;
  x3do:hasParent :ButtonChoice ;
  x3do:hasChildren :Transform_2_10_1_5_1_1_2_1, :ClearSphere2, :wheelDown, :MoveBoxDown, :BoxDownTimer ;
  x3do:hasROUTE :ROUTE_2_10_1_5_1_1_2_6, :ROUTE_2_10_1_5_1_1_2_7, :ROUTE_2_10_1_5_1_1_2_8 .
:Transform_2_10_1_5_1_1_2_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Group_2_10_1_5_1_1_2 ;
  x3do:hasChildren :ClearSphere-USE-1 ;
  x3do:scale ( 4 1 1 ) ;
  x3do:translation ( 0 -0.3 -0.3 ) .
:ClearSphere-USE-1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_1_5_1_1_2_1 ;
  owl:sameAs :ClearSphere . # DEF matching this USE
:ClearSphere2 a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :Group_2_10_1_5_1_1_2 ;
  x3do:DEF 'ClearSphere2' ;
  x3do:description 'used to raise and lower the wheels' .
:wheelDown a owl:NamedIndividual, x3do:OrientationInterpolator ;
  x3do:hasParent :Group_2_10_1_5_1_1_2 ;
  x3do:DEF 'wheelDown' ;
  x3do:key ( 0 .25 .5 .75 .85 1 ) ;
  x3do:keyValue ( 1 0 0 2 1 0 0 1.7 1 0 0 1.25 1 0 0 .75 1 0 0 .5 1 0 0 0 ) .
:MoveBoxDown a owl:NamedIndividual, x3do:PositionInterpolator ;
  x3do:hasParent :Group_2_10_1_5_1_1_2 ;
  x3do:DEF 'MoveBoxDown' ;
  x3do:key ( 0 0.5 1 ) ;
  x3do:keyValue ( 0 3 0 0 0 0 0 -3 0 ) .
:BoxDownTimer a owl:NamedIndividual, x3do:TimeSensor ;
  x3do:hasParent :Group_2_10_1_5_1_1_2 ;
  x3do:DEF 'BoxDownTimer' ;
  x3do:cycleInterval '3' .
:ROUTE_2_10_1_5_1_1_2_6 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Group_2_10_1_5_1_1_2 ;
  x3do:fromField 'fraction_changed' ;
  x3do:fromNode 'BoxDownTimer' ;
  x3do:toField 'set_fraction' ;
  x3do:toNode 'wheelDown' .
:ROUTE_2_10_1_5_1_1_2_7 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Group_2_10_1_5_1_1_2 ;
  x3do:fromField 'value_changed' ;
  x3do:fromNode 'wheelDown' ;
  x3do:toField 'set_rotation' ;
  x3do:toNode 'AnimationTransform' .
:ROUTE_2_10_1_5_1_1_2_8 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Group_2_10_1_5_1_1_2 ;
  x3do:fromField 'touchTime' ;
  x3do:fromNode 'ClearSphere2' ;
  x3do:toField 'startTime' ;
  x3do:toNode 'BoxDownTimer' .
:rightWheel a owl:NamedIndividual, x3do:Group ;
  x3do:hasParent :AnimationTransform ;
  x3do:hasChildren :rightWheel1, :Transform_2_10_1_5_1_2_2 ;
  x3do:DEF 'rightWheel' .
:rightWheel1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :rightWheel ;
  x3do:hasChildren :rightTire, :rightRim ;
  x3do:DEF 'rightWheel1' ;
  x3do:translation ( .2 -0.8 -0.3 ) .
:rightTire a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :rightWheel1 ;
  x3do:hasChildren :tire ;
  x3do:DEF 'rightTire' ;
  x3do:rotation ( 0 0 1 -1.57 ) ;
  x3do:translation ( 1.0 .4 0 ) .
:tire a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :rightTire ;
  x3do:hasGeometry :Cylinder_2_10_1_5_1_2_1_1_1_1 ;
  x3do:hasAppearance :Appearance_2_10_1_5_1_2_1_1_1_2 ;
  x3do:DEF 'tire' .
:Cylinder_2_10_1_5_1_2_1_1_1_1 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :tire ;
  x3do:height .2 ;
  x3do:radius .4 .
:Appearance_2_10_1_5_1_2_1_1_1_2 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :tire ;
  x3do:hasMaterial :black .
:black a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_10_1_5_1_2_1_1_1_2 ;
  x3do:DEF 'black' ;
  x3do:diffuseColor ( 0.1 0.1 0.1 ) ;
  x3do:shininess 0 .
:rightRim a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :rightWheel1 ;
  x3do:hasChildren :rim ;
  x3do:DEF 'rightRim' ;
  x3do:rotation ( 0 0 1 -1.57 ) ;
  x3do:translation ( 1.0 .4 0 ) .
:rim a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :rightRim ;
  x3do:hasGeometry :Cylinder_2_10_1_5_1_2_1_2_1_1 ;
  x3do:hasAppearance :camiPaint-USE-6 ;
  x3do:DEF 'rim' .
:Cylinder_2_10_1_5_1_2_1_2_1_1 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :rim ;
  x3do:height .22 ;
  x3do:radius .25 .
:camiPaint-USE-6 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :rim ;
  owl:sameAs :camiPaint . # DEF matching this USE
:Transform_2_10_1_5_1_2_2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :rightWheel ;
  x3do:hasChildren :rWheelLift ;
  x3do:rotation ( 1 0 0 -1.75 ) .
:rWheelLift a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_10_1_5_1_2_2 ;
  x3do:hasChildren :Transform_2_10_1_5_1_2_2_1_1, :Transform_2_10_1_5_1_2_2_1_2, :Transform_2_10_1_5_1_2_2_1_3 ;
  x3do:DEF 'rWheelLift' ;
  x3do:rotation ( 0 1 0 1.57 ) ;
  x3do:scale ( .25 .25 .25 ) ;
  x3do:translation ( 1 0 0 ) .
:Transform_2_10_1_5_1_2_2_1_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :rWheelLift ;
  x3do:hasChildren :Shape_2_10_1_5_1_2_2_1_1_1 .
:Shape_2_10_1_5_1_2_2_1_1_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_1_5_1_2_2_1_1 ;
  x3do:hasGeometry :Extrusion_2_10_1_5_1_2_2_1_1_1_1 ;
  x3do:hasAppearance :camiPaint-USE-7 .
:Extrusion_2_10_1_5_1_2_2_1_1_1_1 a owl:NamedIndividual, x3do:Extrusion ;
  x3do:hasParent :Shape_2_10_1_5_1_2_2_1_1_1 ;
  x3do:crossSection ( -1 0 -0.9 0.435889894354067 -0.8 0.6 -0.7 0.714142842854285 -0.6 0.8 -0.5 0.866025403784439 -0.4 0.916515138991168 -0.3 0.953939201416946 -0.2 0.979795897113271 -0.1 0.99498743710662 0 1 0.1 0.99498743710662 0.2 0.979795897113271 0.3 0.953939201416946 0.4 0.916515138991168 0.5 0.866025403784439 0.6 0.8 0.7 0.714142842854285 0.8 0.6 0.9 0.435889894354067 1 0 0.9 -0.435889894354067 0.8 -0.6 0.7 -0.714142842854285 0.6 -0.8 0.5 -0.866025403784439 0.4 -0.916515138991168 0.3 -0.953939201416946 0.2 -0.979795897113271 0.1 -0.99498743710662 0 -1 -0.1 -0.99498743710662 -0.2 -0.979795897113271 -0.3 -0.953939201416946 -0.4 -0.916515138991168 -0.5 -0.866025403784439 -0.6 -0.8 -0.7 -0.714142842854285 -0.8 -0.6 -0.9 -0.435889894354067 -1 0 ) ;
  x3do:spine ( 0 0 0 0 0 .3 ) .
:camiPaint-USE-7 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_10_1_5_1_2_2_1_1_1 ;
  owl:sameAs :camiPaint . # DEF matching this USE
:Transform_2_10_1_5_1_2_2_1_2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :rWheelLift ;
  x3do:hasChildren :Shape_2_10_1_5_1_2_2_1_2_1 ;
  x3do:translation ( 1.5 1.5 .45 ) .
:Shape_2_10_1_5_1_2_2_1_2_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_1_5_1_2_2_1_2 ;
  x3do:hasGeometry :Extrusion_2_10_1_5_1_2_2_1_2_1_1 ;
  x3do:hasAppearance :camiPaint-USE-8 .
:Extrusion_2_10_1_5_1_2_2_1_2_1_1 a owl:NamedIndividual, x3do:Extrusion ;
  x3do:hasParent :Shape_2_10_1_5_1_2_2_1_2_1 ;
  x3do:crossSection ( -1 0 -0.9 0.435889894354067 -0.8 0.6 -0.7 0.714142842854285 -0.6 0.8 -0.5 0.866025403784439 -0.4 0.916515138991168 -0.3 0.953939201416946 -0.2 0.979795897113271 -0.1 0.99498743710662 0 1 0.1 0.99498743710662 0.2 0.979795897113271 0.3 0.953939201416946 0.4 0.916515138991168 0.5 0.866025403784439 0.6 0.8 0.7 0.714142842854285 0.8 0.6 0.9 0.435889894354067 1 0 0.9 -0.435889894354067 0.8 -0.6 0.7 -0.714142842854285 0.6 -0.8 0.5 -0.866025403784439 0.4 -0.916515138991168 0.3 -0.953939201416946 0.2 -0.979795897113271 0.1 -0.99498743710662 0 -1 -0.1 -0.99498743710662 -0.2 -0.979795897113271 -0.3 -0.953939201416946 -0.4 -0.916515138991168 -0.5 -0.866025403784439 -0.6 -0.8 -0.7 -0.714142842854285 -0.8 -0.6 -0.9 -0.435889894354067 -1 0 ) ;
  x3do:spine ( 0 0 0 0 0 .3 ) .
:camiPaint-USE-8 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_10_1_5_1_2_2_1_2_1 ;
  owl:sameAs :camiPaint . # DEF matching this USE
:Transform_2_10_1_5_1_2_2_1_3 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :rWheelLift ;
  x3do:hasChildren :Shape_2_10_1_5_1_2_2_1_3_1 ;
  x3do:rotation ( 0 0 1 1 ) ;
  x3do:translation ( 1 1 0.3 ) .
:Shape_2_10_1_5_1_2_2_1_3_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_1_5_1_2_2_1_3 ;
  x3do:hasGeometry :Box_2_10_1_5_1_2_2_1_3_1_1 ;
  x3do:hasAppearance :camiPaint-USE-9 .
:Box_2_10_1_5_1_2_2_1_3_1_1 a owl:NamedIndividual, x3do:Box ;
  x3do:hasParent :Shape_2_10_1_5_1_2_2_1_3_1 ;
  x3do:size ( 2 1 .3 ) .
:camiPaint-USE-9 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_10_1_5_1_2_2_1_3_1 ;
  owl:sameAs :camiPaint . # DEF matching this USE
:leftWheel a owl:NamedIndividual, x3do:Group ;
  x3do:hasParent :AnimationTransform ;
  x3do:hasChildren :leftWheel1, :wheelSensor, :CLOCK, :wheelInterpolator, :Transform_2_10_1_5_1_3_5 ;
  x3do:DEF 'leftWheel' .
:leftWheel1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :leftWheel ;
  x3do:hasChildren :leftTire, :leftRim ;
  x3do:DEF 'leftWheel1' ;
  x3do:translation ( -1.2 -0.35 -0.35 ) .
:leftTire a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :leftWheel1 ;
  x3do:hasChildren :tire-USE-1 ;
  x3do:DEF 'leftTire' ;
  x3do:rotation ( 0 0 1 -1.57 ) .
:tire-USE-1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :leftTire ;
  owl:sameAs :tire . # DEF matching this USE
:leftRim a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :leftWheel1 ;
  x3do:hasChildren :rim-USE-1 ;
  x3do:DEF 'leftRim' ;
  x3do:rotation ( 0 0 1 -1.57 ) .
:rim-USE-1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :leftRim ;
  owl:sameAs :rim . # DEF matching this USE
:wheelSensor a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :leftWheel ;
  x3do:DEF 'wheelSensor' ;
  x3do:description 'Point at box to spin it' .
:CLOCK a owl:NamedIndividual, x3do:TimeSensor ;
  x3do:hasParent :leftWheel ;
  x3do:DEF 'CLOCK' ;
  x3do:cycleInterval '4' ;
  x3do:enabled false ;
  x3do:loop true .
:wheelInterpolator a owl:NamedIndividual, x3do:OrientationInterpolator ;
  x3do:hasParent :leftWheel ;
  x3do:DEF 'wheelInterpolator' ;
  x3do:key ( 0.0 0.25 0.50 0.75 1.0 ) ;
  x3do:keyValue ( 1 0.0 0 -1.57 1 0.0 0 0 1 0.0 0 1.57 1 0 0 3.14 1 0 0 -1.57 ) .
:Transform_2_10_1_5_1_3_5 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :leftWheel ;
  x3do:hasChildren :wheelLift ;
  x3do:rotation ( 1 0 0 -3.1 ) .
:wheelLift a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_10_1_5_1_3_5 ;
  x3do:hasChildren :Transform_2_10_1_5_1_3_5_1_1, :Transform_2_10_1_5_1_3_5_1_2, :Transform_2_10_1_5_1_3_5_1_3 ;
  x3do:DEF 'wheelLift' ;
  x3do:rotation ( 0 1 0 -1.57 ) ;
  x3do:scale ( .25 .25 .25 ) ;
  x3do:translation ( -1 0 0 ) .
:Transform_2_10_1_5_1_3_5_1_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :wheelLift ;
  x3do:hasChildren :Shape_2_10_1_5_1_3_5_1_1_1 .
:Shape_2_10_1_5_1_3_5_1_1_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_1_5_1_3_5_1_1 ;
  x3do:hasGeometry :Extrusion_2_10_1_5_1_3_5_1_1_1_1 ;
  x3do:hasAppearance :camiPaint-USE-10 .
:Extrusion_2_10_1_5_1_3_5_1_1_1_1 a owl:NamedIndividual, x3do:Extrusion ;
  x3do:hasParent :Shape_2_10_1_5_1_3_5_1_1_1 ;
  x3do:crossSection ( -1 0 -0.9 0.435889894354067 -0.8 0.6 -0.7 0.714142842854285 -0.6 0.8 -0.5 0.866025403784439 -0.4 0.916515138991168 -0.3 0.953939201416946 -0.2 0.979795897113271 -0.1 0.99498743710662 0 1 0.1 0.99498743710662 0.2 0.979795897113271 0.3 0.953939201416946 0.4 0.916515138991168 0.5 0.866025403784439 0.6 0.8 0.7 0.714142842854285 0.8 0.6 0.9 0.435889894354067 1 0 0.9 -0.435889894354067 0.8 -0.6 0.7 -0.714142842854285 0.6 -0.8 0.5 -0.866025403784439 0.4 -0.916515138991168 0.3 -0.953939201416946 0.2 -0.979795897113271 0.1 -0.99498743710662 0 -1 -0.1 -0.99498743710662 -0.2 -0.979795897113271 -0.3 -0.953939201416946 -0.4 -0.916515138991168 -0.5 -0.866025403784439 -0.6 -0.8 -0.7 -0.714142842854285 -0.8 -0.6 -0.9 -0.435889894354067 -1 0 ) ;
  x3do:spine ( 0 0 0 0 0 .3 ) .
:camiPaint-USE-10 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_10_1_5_1_3_5_1_1_1 ;
  owl:sameAs :camiPaint . # DEF matching this USE
:Transform_2_10_1_5_1_3_5_1_2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :wheelLift ;
  x3do:hasChildren :Shape_2_10_1_5_1_3_5_1_2_1 ;
  x3do:translation ( 1.5 1.5 .45 ) .
:Shape_2_10_1_5_1_3_5_1_2_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_1_5_1_3_5_1_2 ;
  x3do:hasGeometry :Extrusion_2_10_1_5_1_3_5_1_2_1_1 ;
  x3do:hasAppearance :camiPaint-USE-11 .
:Extrusion_2_10_1_5_1_3_5_1_2_1_1 a owl:NamedIndividual, x3do:Extrusion ;
  x3do:hasParent :Shape_2_10_1_5_1_3_5_1_2_1 ;
  x3do:crossSection ( -1 0 -0.9 0.435889894354067 -0.8 0.6 -0.7 0.714142842854285 -0.6 0.8 -0.5 0.866025403784439 -0.4 0.916515138991168 -0.3 0.953939201416946 -0.2 0.979795897113271 -0.1 0.99498743710662 0 1 0.1 0.99498743710662 0.2 0.979795897113271 0.3 0.953939201416946 0.4 0.916515138991168 0.5 0.866025403784439 0.6 0.8 0.7 0.714142842854285 0.8 0.6 0.9 0.435889894354067 1 0 0.9 -0.435889894354067 0.8 -0.6 0.7 -0.714142842854285 0.6 -0.8 0.5 -0.866025403784439 0.4 -0.916515138991168 0.3 -0.953939201416946 0.2 -0.979795897113271 0.1 -0.99498743710662 0 -1 -0.1 -0.99498743710662 -0.2 -0.979795897113271 -0.3 -0.953939201416946 -0.4 -0.916515138991168 -0.5 -0.866025403784439 -0.6 -0.8 -0.7 -0.714142842854285 -0.8 -0.6 -0.9 -0.435889894354067 -1 0 ) ;
  x3do:spine ( 0 0 0 0 0 .3 ) .
:camiPaint-USE-11 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_10_1_5_1_3_5_1_2_1 ;
  owl:sameAs :camiPaint . # DEF matching this USE
:Transform_2_10_1_5_1_3_5_1_3 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :wheelLift ;
  x3do:hasChildren :Shape_2_10_1_5_1_3_5_1_3_1 ;
  x3do:rotation ( 0 0 1 1 ) ;
  x3do:translation ( 1 1 0.3 ) .
:Shape_2_10_1_5_1_3_5_1_3_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_1_5_1_3_5_1_3 ;
  x3do:hasGeometry :Box_2_10_1_5_1_3_5_1_3_1_1 ;
  x3do:hasAppearance :camiPaint-USE-12 .
:Box_2_10_1_5_1_3_5_1_3_1_1 a owl:NamedIndividual, x3do:Box ;
  x3do:hasParent :Shape_2_10_1_5_1_3_5_1_3_1 ;
  x3do:size ( 2 1 .3 ) .
:camiPaint-USE-12 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_10_1_5_1_3_5_1_3_1 ;
  owl:sameAs :camiPaint . # DEF matching this USE
:AnimationControl a owl:NamedIndividual, x3do:Group ;
  x3do:hasParent :LowerCar ;
  x3do:hasChildren :SetBoxDown, :SetBoxUp ;
  x3do:hasROUTE :ROUTE_2_10_1_6_3, :ROUTE_2_10_1_6_4, :ROUTE_2_10_1_6_5, :ROUTE_2_10_1_6_6 ;
  x3do:DEF 'AnimationControl' .
:SetBoxDown a owl:NamedIndividual, x3do:IntegerTrigger ;
  x3do:hasParent :AnimationControl ;
  x3do:DEF 'SetBoxDown' ;
  x3do:integerKey 0 .
:SetBoxUp a owl:NamedIndividual, x3do:IntegerTrigger ;
  x3do:hasParent :AnimationControl ;
  x3do:DEF 'SetBoxUp' ;
  x3do:integerKey 1 .
:ROUTE_2_10_1_6_3 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :AnimationControl ;
  x3do:fromField 'isActive' ;
  x3do:fromNode 'ClearSphere1' ;
  x3do:toField 'set_boolean' ;
  x3do:toNode 'SetBoxUp' .
:ROUTE_2_10_1_6_4 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :AnimationControl ;
  x3do:fromField 'isActive' ;
  x3do:fromNode 'ClearSphere2' ;
  x3do:toField 'set_boolean' ;
  x3do:toNode 'SetBoxDown' .
:ROUTE_2_10_1_6_5 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :AnimationControl ;
  x3do:fromField 'triggerValue' ;
  x3do:fromNode 'SetBoxUp' ;
  x3do:toField 'whichChoice' ;
  x3do:toNode 'ButtonChoice' .
:ROUTE_2_10_1_6_6 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :AnimationControl ;
  x3do:fromField 'triggerValue' ;
  x3do:fromNode 'SetBoxDown' ;
  x3do:toField 'whichChoice' ;
  x3do:toNode 'ButtonChoice' .
:upperCarriagePiece a owl:NamedIndividual, x3do:Group ;
  x3do:hasParent :M198_Howitzer ;
  x3do:hasChildren :rotateUpperCarriage ;
  x3do:DEF 'upperCarriagePiece' .
:rotateUpperCarriage a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :upperCarriagePiece ;
  x3do:hasChildren :upperCarriage, :barrelGroup, :carriage_sensor ;
  x3do:hasROUTE :ROUTE_2_10_2_1_4 ;
  x3do:DEF 'rotateUpperCarriage' ;
  x3do:center ( 0 -2.5 0 ) .
:upperCarriage a owl:NamedIndividual, x3do:Group ;
  x3do:hasParent :rotateUpperCarriage ;
  x3do:hasChildren :rightTrunion, :Transform_2_10_2_1_1_2, :leftHandwheel, :rightHandwheel, :traversingWheel, :Transform_2_10_2_1_1_6, :rightUpperCylinder ;
  x3do:DEF 'upperCarriage' .
:rightTrunion a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :upperCarriage ;
  x3do:hasChildren :Transform_2_10_2_1_1_1_1 ;
  x3do:DEF 'rightTrunion' ;
  x3do:rotation ( 1 0 0 1.57 ) ;
  x3do:translation ( .6 1.2 .65 ) .
:Transform_2_10_2_1_1_1_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :rightTrunion ;
  x3do:hasChildren :left_stantion ;
  x3do:rotation ( 0 1 0 3.14 ) .
:left_stantion a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_1_1_1 ;
  x3do:hasGeometry :Extrusion_2_10_2_1_1_1_1_1_1 ;
  x3do:hasAppearance :camiPaint-USE-13 ;
  x3do:DEF 'left_stantion' .
:Extrusion_2_10_2_1_1_1_1_1_1 a owl:NamedIndividual, x3do:Extrusion ;
  x3do:hasParent :left_stantion ;
  x3do:crossSection ( 0 4 2 43 -4 5 -7 10 -712 -9 2 -9 0 -4 0 4 ) ;
  x3do:scale ( .1 .1 ) ;
  x3do:spine ( 0 0 0 .2 0 0 ) .
:camiPaint-USE-13 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :left_stantion ;
  owl:sameAs :camiPaint . # DEF matching this USE
:Transform_2_10_2_1_1_2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :upperCarriage ;
  x3do:hasChildren :Transform_2_10_2_1_1_2_1 ;
  x3do:rotation ( 1 0 0 1.57 ) ;
  x3do:translation ( -0.4 1.2 .65 ) .
:Transform_2_10_2_1_1_2_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_10_2_1_1_2 ;
  x3do:hasChildren :left_stantion-USE-1 ;
  x3do:rotation ( 0 1 0 3.14 ) .
:left_stantion-USE-1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_1_2_1 ;
  owl:sameAs :left_stantion . # DEF matching this USE
:leftHandwheel a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :upperCarriage ;
  x3do:hasChildren :Crank ;
  x3do:DEF 'leftHandwheel' ;
  x3do:rotation ( 0 1 0 -1.57 ) ;
  x3do:scale ( .8 .8 .8 ) ;
  x3do:translation ( -0.75 1 .5 ) .
:Crank a owl:NamedIndividual, x3do:LOD ;
  x3do:hasParent :leftHandwheel ;
  x3do:hasChildren :handwheelGroup, :WorldInfo_2_10_2_1_1_3_1_2 ;
  x3do:DEF 'Crank' ;
  x3do:range ( 25 ) .
:handwheelGroup a owl:NamedIndividual, x3do:Group ;
  x3do:hasParent :Crank ;
  x3do:hasChildren :CircularHandle, :CrankShaft, :Struts ;
  x3do:DEF 'handwheelGroup' .
:CircularHandle a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :handwheelGroup ;
  x3do:hasChildren :Shape_2_10_2_1_1_3_1_1_1_1 ;
  x3do:DEF 'CircularHandle' .
:Shape_2_10_2_1_1_3_1_1_1_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :CircularHandle ;
  x3do:hasGeometry :Extrusion_2_10_2_1_1_3_1_1_1_1_1 ;
  x3do:hasAppearance :Appearance_2_10_2_1_1_3_1_1_1_1_2 .
:Extrusion_2_10_2_1_1_3_1_1_1_1_1 a owl:NamedIndividual, x3do:Extrusion ;
  x3do:hasParent :Shape_2_10_2_1_1_3_1_1_1_1 ;
  x3do:beginCap false ;
  x3do:creaseAngle 1.57 ;
  x3do:crossSection ( 0.1 0 0.092 -0.038 0.071 -0.071 0.038 -0.092 0 -0.1 -0.038 -0.092 -0.071 -0.071 -0.092 -0.038 -0.1 0 -0.092 0.038 -0.071 0.071 -0.038 0.092 0 0.1 0.038 0.092 0.071 0.071 0.092 0.038 0.1 0 ) ;
  x3do:endCap false ;
  x3do:scale ( 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 ) ;
  x3do:spine ( 0.3 0 0 0.276 -0.114 0 0.213 -0.213 0 0.114 -0.276 0 0 -0.3 0 -0.114 -0.276 0 -0.213 -0.213 0 -0.276 -0.114 0 -0.3 0 0 -0.276 0.114 0 -0.213 0.213 0 -0.114 0.276 0 0 0.3 0 0.114 0.276 0 0.213 0.213 0 0.276 0.114 0 0.3 0 0 ) .
:Appearance_2_10_2_1_1_3_1_1_1_1_2 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_10_2_1_1_3_1_1_1_1 ;
  x3do:hasMaterial :Material_2_10_2_1_1_3_1_1_1_1_2_1 .
:Material_2_10_2_1_1_3_1_1_1_1_2_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_10_2_1_1_3_1_1_1_1_2 ;
  x3do:diffuseColor ( .1 .10 .1 ) .
:CrankShaft a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :handwheelGroup ;
  x3do:hasChildren :Shaft, :Top, :TopBall ;
  x3do:DEF 'CrankShaft' ;
  x3do:translation ( 0 0 -0.05 ) .
:Shaft a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :CrankShaft ;
  x3do:hasChildren :Shape_2_10_2_1_1_3_1_1_2_1_1 ;
  x3do:DEF 'Shaft' ;
  x3do:rotation ( 1 0 0 1.57 ) .
:Shape_2_10_2_1_1_3_1_1_2_1_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Shaft ;
  x3do:hasGeometry :Cylinder_2_10_2_1_1_3_1_1_2_1_1_1 ;
  x3do:hasAppearance :Appearance_2_10_2_1_1_3_1_1_2_1_1_2 .
:Cylinder_2_10_2_1_1_3_1_1_2_1_1_1 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :Shape_2_10_2_1_1_3_1_1_2_1_1 ;
  x3do:height 0.02 ;
  x3do:radius 0.08 .
:Appearance_2_10_2_1_1_3_1_1_2_1_1_2 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_10_2_1_1_3_1_1_2_1_1 ;
  x3do:hasMaterial :Material_2_10_2_1_1_3_1_1_2_1_1_2_1 .
:Material_2_10_2_1_1_3_1_1_2_1_1_2_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_10_2_1_1_3_1_1_2_1_1_2 ;
  x3do:diffuseColor ( .1 .1 .1 ) .
:Top a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :CrankShaft ;
  x3do:hasChildren :Shape_2_10_2_1_1_3_1_1_2_2_1 ;
  x3do:DEF 'Top' ;
  x3do:rotation ( 1 0 0 1.57 ) ;
  x3do:translation ( 0 0 -0.1 ) .
:Shape_2_10_2_1_1_3_1_1_2_2_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Top ;
  x3do:hasGeometry :Cylinder_2_10_2_1_1_3_1_1_2_2_1_1 ;
  x3do:hasAppearance :Appearance_2_10_2_1_1_3_1_1_2_2_1_2 .
:Cylinder_2_10_2_1_1_3_1_1_2_2_1_1 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :Shape_2_10_2_1_1_3_1_1_2_2_1 ;
  x3do:height 0.2 ;
  x3do:radius 0.05 .
:Appearance_2_10_2_1_1_3_1_1_2_2_1_2 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_10_2_1_1_3_1_1_2_2_1 ;
  x3do:hasMaterial :Material_2_10_2_1_1_3_1_1_2_2_1_2_1 .
:Material_2_10_2_1_1_3_1_1_2_2_1_2_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_10_2_1_1_3_1_1_2_2_1_2 ;
  x3do:diffuseColor ( .1 .1 .1 ) .
:TopBall a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :CrankShaft ;
  x3do:hasChildren :Shape_2_10_2_1_1_3_1_1_2_3_1 ;
  x3do:DEF 'TopBall' ;
  x3do:translation ( 0 0 -0.01 ) .
:Shape_2_10_2_1_1_3_1_1_2_3_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :TopBall ;
  x3do:hasGeometry :Sphere_2_10_2_1_1_3_1_1_2_3_1_1 ;
  x3do:hasAppearance :Appearance_2_10_2_1_1_3_1_1_2_3_1_2 .
:Sphere_2_10_2_1_1_3_1_1_2_3_1_1 a owl:NamedIndividual, x3do:Sphere ;
  x3do:hasParent :Shape_2_10_2_1_1_3_1_1_2_3_1 ;
  x3do:radius 0.05 .
:Appearance_2_10_2_1_1_3_1_1_2_3_1_2 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_10_2_1_1_3_1_1_2_3_1 ;
  x3do:hasMaterial :Material_2_10_2_1_1_3_1_1_2_3_1_2_1 .
:Material_2_10_2_1_1_3_1_1_2_3_1_2_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_10_2_1_1_3_1_1_2_3_1_2 ;
  x3do:diffuseColor ( .1 .1 .1 ) .
:Struts a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :handwheelGroup ;
  x3do:hasChildren :StrutOne, :StrutTwo, :StrutThree ;
  x3do:DEF 'Struts' .
:StrutOne a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Struts ;
  x3do:hasChildren :Shape_2_10_2_1_1_3_1_1_3_1_1 ;
  x3do:DEF 'StrutOne' ;
  x3do:rotation ( 1 0 0 0.21 ) ;
  x3do:translation ( 0 0.04 -0.05725 ) .
:Shape_2_10_2_1_1_3_1_1_3_1_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :StrutOne ;
  x3do:hasGeometry :Extrusion_2_10_2_1_1_3_1_1_3_1_1_1 ;
  x3do:hasAppearance :Appearance_2_10_2_1_1_3_1_1_3_1_1_2 .
:Extrusion_2_10_2_1_1_3_1_1_3_1_1_1 a owl:NamedIndividual, x3do:Extrusion ;
  x3do:hasParent :Shape_2_10_2_1_1_3_1_1_3_1_1 ;
  x3do:creaseAngle 3.14 ;
  x3do:crossSection ( 0.01 0 0.0092 -0.0038 0.0071 -0.0071 0.0038 -0.0092 0 -0.01 -0.0038 -0.0092 -0.0071 -0.0071 -0.0092 -0.0038 -0.01 0 -0.0092 0.0038 -0.0071 0.0071 -0.0038 0.0092 0 0.01 0.0038 0.0092 0.0071 0.0071 0.0092 0.0038 0.01 0 ) ;
  x3do:scale ( 4 2 2 2 2 2 2 2 2 4 ) ;
  x3do:spine ( 0 0 0 0 0.125 0 0 0.25 0 0 0.255 0 0 0.275 0 ) .
:Appearance_2_10_2_1_1_3_1_1_3_1_1_2 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_10_2_1_1_3_1_1_3_1_1 ;
  x3do:hasMaterial :Material_2_10_2_1_1_3_1_1_3_1_1_2_1 .
:Material_2_10_2_1_1_3_1_1_3_1_1_2_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_10_2_1_1_3_1_1_3_1_1_2 ;
  x3do:diffuseColor ( .1 .1 .1 ) .
:StrutTwo a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Struts ;
  x3do:hasChildren :StrutOne-USE-1 ;
  x3do:DEF 'StrutTwo' ;
  x3do:rotation ( 0 0 1 2.09 ) .
:StrutOne-USE-1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :StrutTwo ;
  owl:sameAs :StrutOne . # DEF matching this USE
:StrutThree a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Struts ;
  x3do:hasChildren :StrutOne-USE-2 ;
  x3do:DEF 'StrutThree' ;
  x3do:rotation ( 0 0 -1 2.09 ) .
:StrutOne-USE-2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :StrutThree ;
  owl:sameAs :StrutOne . # DEF matching this USE
:WorldInfo_2_10_2_1_1_3_1_2 a owl:NamedIndividual, x3do:WorldInfo ;
  x3do:hasParent :Crank ;
  x3do:info '"null node"' .
:rightHandwheel a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :upperCarriage ;
  x3do:hasChildren :Crank-USE-1 ;
  x3do:DEF 'rightHandwheel' ;
  x3do:rotation ( 0 1 0 1.57 ) ;
  x3do:scale ( .8 .8 .8 ) ;
  x3do:translation ( .75 1 .5 ) .
:Crank-USE-1 a owl:NamedIndividual, x3do:LOD ;
  x3do:hasParent :rightHandwheel ;
  owl:sameAs :Crank . # DEF matching this USE
:traversingWheel a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :upperCarriage ;
  x3do:hasChildren :Crank-USE-2 ;
  x3do:DEF 'traversingWheel' ;
  x3do:rotation ( 0 1 0 -0.85 ) ;
  x3do:scale ( .5 .5 .5 ) ;
  x3do:translation ( -0.68 .5 .6 ) .
:Crank-USE-2 a owl:NamedIndividual, x3do:LOD ;
  x3do:hasParent :traversingWheel ;
  owl:sameAs :Crank . # DEF matching this USE
:Transform_2_10_2_1_1_6 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :upperCarriage ;
  x3do:hasChildren :traversingPlatform ;
  x3do:translation ( 0 .25 0 ) .
:traversingPlatform a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_1_6 ;
  x3do:hasGeometry :Cylinder_2_10_2_1_1_6_1_1 ;
  x3do:hasAppearance :camiPaint-USE-14 ;
  x3do:DEF 'traversingPlatform' .
:Cylinder_2_10_2_1_1_6_1_1 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :traversingPlatform ;
  x3do:height .35 ;
  x3do:radius .8 .
:camiPaint-USE-14 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :traversingPlatform ;
  owl:sameAs :camiPaint . # DEF matching this USE
:rightUpperCylinder a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :upperCarriage ;
  x3do:hasChildren :Transform_2_10_2_1_1_7_1 ;
  x3do:DEF 'rightUpperCylinder' ;
  x3do:rotation ( 0 0 1 1.57 ) ;
  x3do:translation ( 0 1.5 .2 ) .
:Transform_2_10_2_1_1_7_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :rightUpperCylinder ;
  x3do:hasChildren :Transform_2_10_2_1_1_7_1_1 ;
  x3do:center ( 0 0 1 ) ;
  x3do:rotation ( 0 0 1 -3.14 ) .
:Transform_2_10_2_1_1_7_1_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_10_2_1_1_7_1 ;
  x3do:hasChildren :ruc .
:ruc a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_10_2_1_1_7_1_1 ;
  x3do:hasChildren :rucL, :rucR ;
  x3do:DEF 'ruc' ;
  x3do:center ( 0 0 .3 ) .
:rucL a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :ruc ;
  x3do:hasChildren :Transform_2_10_2_1_1_7_1_1_1_1_1, :Transform_2_10_2_1_1_7_1_1_1_1_2, :shrinkCylinder ;
  x3do:DEF 'rucL' ;
  x3do:rotation ( 1 0 0 -1.57 ) ;
  x3do:translation ( 0 -0.48 0 ) .
:Transform_2_10_2_1_1_7_1_1_1_1_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :rucL ;
  x3do:hasChildren :upperCylinder1 ;
  x3do:translation ( 0 .050 0 ) .
:upperCylinder1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_1_7_1_1_1_1_1 ;
  x3do:hasGeometry :Cylinder_2_10_2_1_1_7_1_1_1_1_1_1_1 ;
  x3do:hasAppearance :camiPaint-USE-15 ;
  x3do:DEF 'upperCylinder1' .
:Cylinder_2_10_2_1_1_7_1_1_1_1_1_1_1 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :upperCylinder1 ;
  x3do:height .45 ;
  x3do:radius .075 .
:camiPaint-USE-15 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :upperCylinder1 ;
  owl:sameAs :camiPaint . # DEF matching this USE
:Transform_2_10_2_1_1_7_1_1_1_1_2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :rucL ;
  x3do:hasChildren :linkBolt ;
  x3do:translation ( 0 -0.22 0 ) .
:linkBolt a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_1_7_1_1_1_1_2 ;
  x3do:hasGeometry :Sphere_2_10_2_1_1_7_1_1_1_1_2_1_1 ;
  x3do:hasAppearance :Appearance_2_10_2_1_1_7_1_1_1_1_2_1_2 ;
  x3do:DEF 'linkBolt' .
:Sphere_2_10_2_1_1_7_1_1_1_1_2_1_1 a owl:NamedIndividual, x3do:Sphere ;
  x3do:hasParent :linkBolt ;
  x3do:radius .05 .
:Appearance_2_10_2_1_1_7_1_1_1_1_2_1_2 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :linkBolt ;
  x3do:hasMaterial :black-USE-1 .
:black-USE-1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_10_2_1_1_7_1_1_1_1_2_1_2 ;
  owl:sameAs :black . # DEF matching this USE
:shrinkCylinder a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :rucL ;
  x3do:hasChildren :upperExtender ;
  x3do:DEF 'shrinkCylinder' ;
  x3do:translation ( 0 .22 0 ) .
:upperExtender a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :shrinkCylinder ;
  x3do:hasGeometry :Cylinder_2_10_2_1_1_7_1_1_1_1_3_1_1 ;
  x3do:hasAppearance :Appearance_2_10_2_1_1_7_1_1_1_1_3_1_2 ;
  x3do:DEF 'upperExtender' .
:Cylinder_2_10_2_1_1_7_1_1_1_1_3_1_1 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :upperExtender ;
  x3do:height .55 ;
  x3do:radius .060 .
:Appearance_2_10_2_1_1_7_1_1_1_1_3_1_2 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :upperExtender ;
  x3do:hasTexture :ImageTexture_2_10_2_1_1_7_1_1_1_1_3_1_2_1 .
:ImageTexture_2_10_2_1_1_7_1_1_1_1_3_1_2_1 a owl:NamedIndividual, x3do:ImageTexture ;
  x3do:hasParent :Appearance_2_10_2_1_1_7_1_1_1_1_3_1_2 ;
  x3do:url '"baffle.jpg" "https://www.web3d.org/x3d/content/examples/Savage/Weapons/Guns/baffle.jpg"' .
:rucR a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :ruc ;
  x3do:hasChildren :Transform_2_10_2_1_1_7_1_1_1_2_1, :Transform_2_10_2_1_1_7_1_1_1_2_2, :shrinkCylinderR ;
  x3do:DEF 'rucR' ;
  x3do:rotation ( 1 0 0 -1.57 ) ;
  x3do:translation ( 0 .48 0 ) .
:Transform_2_10_2_1_1_7_1_1_1_2_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :rucR ;
  x3do:hasChildren :upperCylinder1-USE-1 ;
  x3do:translation ( 0 .050 0 ) .
:upperCylinder1-USE-1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_1_7_1_1_1_2_1 ;
  owl:sameAs :upperCylinder1 . # DEF matching this USE
:Transform_2_10_2_1_1_7_1_1_1_2_2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :rucR ;
  x3do:hasChildren :linkBolt-USE-1 ;
  x3do:translation ( 0 -0.22 0 ) .
:linkBolt-USE-1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_1_7_1_1_1_2_2 ;
  owl:sameAs :linkBolt . # DEF matching this USE
:shrinkCylinderR a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :rucR ;
  x3do:hasChildren :upperExtender-USE-1 ;
  x3do:DEF 'shrinkCylinderR' ;
  x3do:translation ( 0 .22 0 ) .
:upperExtender-USE-1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :shrinkCylinderR ;
  owl:sameAs :upperExtender . # DEF matching this USE
:barrelGroup a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :rotateUpperCarriage ;
  x3do:hasChildren :barrelMover1, :upperCylinderMover ;
  x3do:hasROUTE :ROUTE_2_10_2_1_2_3, :ROUTE_2_10_2_1_2_4, :ROUTE_2_10_2_1_2_5, :ROUTE_2_10_2_1_2_6, :ROUTE_2_10_2_1_2_7, :ROUTE_2_10_2_1_2_8 ;
  x3do:DEF 'barrelGroup' ;
  x3do:rotation ( 0 0 1 -1.57 ) .
:barrelMover1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :barrelGroup ;
  x3do:hasChildren :tubeSensor, :theBarrel, :elevMechMover1 ;
  x3do:hasROUTE :ROUTE_2_10_2_1_2_1_2 ;
  x3do:DEF 'barrelMover1' ;
  x3do:center ( -1 0 .45 ) ;
  x3do:rotation ( 0 0 1 .01 ) ;
  x3do:translation ( .2 0 0 ) .
:tubeSensor a owl:NamedIndividual, x3do:CylinderSensor ;
  x3do:hasParent :barrelMover1 ;
  x3do:DEF 'tubeSensor' ;
  x3do:description 'sensor for tube elevation' ;
  x3do:maxAngle 0 ;
  x3do:minAngle -0.65 .
:ROUTE_2_10_2_1_2_1_2 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :barrelMover1 ;
  x3do:fromField 'rotation_changed' ;
  x3do:fromNode 'tubeSensor' ;
  x3do:toField 'set_rotation' ;
  x3do:toNode 'barrelMover1' .
:theBarrel a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :barrelMover1 ;
  x3do:hasChildren :barrel ;
  x3do:DEF 'theBarrel' .
:barrel a owl:NamedIndividual, x3do:Group ;
  x3do:hasParent :theBarrel ;
  x3do:hasChildren :recoilTransform, :shotEffects ;
  x3do:DEF 'barrel' .
:recoilTransform a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :barrel ;
  x3do:hasChildren :recoilMover, :sideBars, :Transform_2_10_2_1_2_1_3_1_1_3, :travelLockPiece, :theRound, :RECOILTIMER, :recoil ;
  x3do:hasROUTE :ROUTE_2_10_2_1_2_1_3_1_1_8, :ROUTE_2_10_2_1_2_1_3_1_1_9 ;
  x3do:DEF 'recoilTransform' ;
  x3do:rotation ( 0 0 1 1.57 ) ;
  x3do:translation ( -0.20 0 -0.2 ) .
:recoilMover a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :recoilTransform ;
  x3do:hasChildren :tube1, :muzzle_break ;
  x3do:DEF 'recoilMover' .
:tube1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :recoilMover ;
  x3do:hasChildren :Transform_2_10_2_1_2_1_3_1_1_1_1_1, :breech ;
  x3do:DEF 'tube1' ;
  x3do:rotation ( 1 0 0 -0.84 ) ;
  x3do:translation ( 0 2.45 -1 ) .
:Transform_2_10_2_1_2_1_3_1_1_1_1_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :tube1 ;
  x3do:hasChildren :Shape_2_10_2_1_2_1_3_1_1_1_1_1_1, :shinyPiece ;
  x3do:translation ( 0 -2.5 0 ) .
:Shape_2_10_2_1_2_1_3_1_1_1_1_1_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_1_1_1_1 ;
  x3do:hasGeometry :tube ;
  x3do:hasAppearance :camiPaint-USE-16 .
:tube a owl:NamedIndividual, x3do:Extrusion ;
  x3do:hasParent :Shape_2_10_2_1_2_1_3_1_1_1_1_1_1 ;
  x3do:DEF 'tube' ;
  x3do:crossSection ( -1 0 -0.9 0.435889894354067 -0.8 0.6 -0.7 0.714142842854285 -0.6 0.8 -0.5 0.866025403784439 -0.4 0.916515138991168 -0.3 0.953939201416946 -0.2 0.979795897113271 -0.1 0.99498743710662 0 1 0.1 0.99498743710662 0.2 0.979795897113271 0.3 0.953939201416946 0.4 0.916515138991168 0.5 0.866025403784439 0.6 0.8 0.7 0.714142842854285 0.8 0.6 0.9 0.435889894354067 1 0 0.9 -0.435889894354067 0.8 -0.6 0.7 -0.714142842854285 0.6 -0.8 0.5 -0.866025403784439 0.4 -0.916515138991168 0.3 -0.953939201416946 0.2 -0.979795897113271 0.1 -0.99498743710662 0 -1 -0.1 -0.99498743710662 -0.2 -0.979795897113271 -0.3 -0.953939201416946 -0.4 -0.916515138991168 -0.5 -0.866025403784439 -0.6 -0.8 -0.7 -0.714142842854285 -0.8 -0.6 -0.9 -0.435889894354067 -1 0 ) ;
  x3do:scale ( .2 .2 .2 .2 .18 .18 .18 .18 .2 .2 ) ;
  x3do:spine ( 0 0 0 0 3.5 0 0 3.6 0 0 4.7 0 0 5.2 0 ) .
:camiPaint-USE-16 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_10_2_1_2_1_3_1_1_1_1_1_1 ;
  owl:sameAs :camiPaint . # DEF matching this USE
:shinyPiece a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_1_1_1_1 ;
  x3do:hasChildren :Shape_2_10_2_1_2_1_3_1_1_1_1_1_2_1 ;
  x3do:DEF 'shinyPiece' ;
  x3do:translation ( 0 3 0 ) .
:Shape_2_10_2_1_2_1_3_1_1_1_1_1_2_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :shinyPiece ;
  x3do:hasGeometry :Cylinder_2_10_2_1_2_1_3_1_1_1_1_1_2_1_1 ;
  x3do:hasAppearance :shiny .
:Cylinder_2_10_2_1_2_1_3_1_1_1_1_1_2_1_1 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :Shape_2_10_2_1_2_1_3_1_1_1_1_1_2_1 ;
  x3do:height 1.1 ;
  x3do:radius .205 .
:shiny a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_10_2_1_2_1_3_1_1_1_1_1_2_1 ;
  x3do:hasMaterial :Material_2_10_2_1_2_1_3_1_1_1_1_1_2_1_2_1 ;
  x3do:DEF 'shiny' .
:Material_2_10_2_1_2_1_3_1_1_1_1_1_2_1_2_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :shiny ;
  x3do:diffuseColor ( .7 .7 .7 ) .
:breech a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :tube1 ;
  x3do:hasChildren :Shape_2_10_2_1_2_1_3_1_1_1_1_2_1 ;
  x3do:DEF 'breech' ;
  x3do:translation ( 0 -2.5 0 ) .
:Shape_2_10_2_1_2_1_3_1_1_1_1_2_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :breech ;
  x3do:hasGeometry :Cylinder_2_10_2_1_2_1_3_1_1_1_1_2_1_1 ;
  x3do:hasAppearance :shiny-USE-1 .
:Cylinder_2_10_2_1_2_1_3_1_1_1_1_2_1_1 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :Shape_2_10_2_1_2_1_3_1_1_1_1_2_1 ;
  x3do:height .1 ;
  x3do:radius .2 .
:shiny-USE-1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_10_2_1_2_1_3_1_1_1_1_2_1 ;
  owl:sameAs :shiny . # DEF matching this USE
:muzzle_break a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :recoilMover ;
  x3do:hasChildren :Transform_2_10_2_1_2_1_3_1_1_1_2_1, :Transform_2_10_2_1_2_1_3_1_1_1_2_2, :Transform_2_10_2_1_2_1_3_1_1_1_2_3, :Transform_2_10_2_1_2_1_3_1_1_1_2_4 ;
  x3do:DEF 'muzzle_break' ;
  x3do:translation ( 0 .05 0 ) .
:Transform_2_10_2_1_2_1_3_1_1_1_2_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :muzzle_break ;
  x3do:hasChildren :Transform_2_10_2_1_2_1_3_1_1_1_2_1_1 ;
  x3do:rotation ( 1 0 0 .75 ) ;
  x3do:translation ( .25 4.48 -3.6 ) .
:Transform_2_10_2_1_2_1_3_1_1_1_2_1_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_1_1_2_1 ;
  x3do:hasChildren :Transform_2_10_2_1_2_1_3_1_1_1_2_1_1_1 ;
  x3do:rotation ( 0 0 1 1.57 ) .
:Transform_2_10_2_1_2_1_3_1_1_1_2_1_1_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_1_1_2_1_1 ;
  x3do:hasChildren :muzzleBreak ;
  x3do:rotation ( 1 0 0 3.14 ) ;
  x3do:scale ( 1.6 .7 .85 ) .
:muzzleBreak a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_1_1_2_1_1_1 ;
  x3do:hasGeometry :Extrusion_2_10_2_1_2_1_3_1_1_1_2_1_1_1_1_1 ;
  x3do:hasAppearance :camiPaint-USE-17 ;
  x3do:DEF 'muzzleBreak' .
:Extrusion_2_10_2_1_2_1_3_1_1_1_2_1_1_1_1_1 a owl:NamedIndividual, x3do:Extrusion ;
  x3do:hasParent :muzzleBreak ;
  x3do:crossSection ( 0 0 3 0 3 -3 2.8 -3.2 2.3 -3.7 2 -4 1 -4 .8 -3.8 .3 -3.3 0 -3 0 0 ) ;
  x3do:scale ( .25 .25 ) ;
  x3do:spine ( 0 0 0 .25 0 0 ) .
:camiPaint-USE-17 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :muzzleBreak ;
  owl:sameAs :camiPaint . # DEF matching this USE
:Transform_2_10_2_1_2_1_3_1_1_1_2_2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :muzzle_break ;
  x3do:hasChildren :Shape_2_10_2_1_2_1_3_1_1_1_2_2_1 ;
  x3do:rotation ( 1 0 0 .75 ) ;
  x3do:translation ( .25 4.4 -3.2 ) .
:Shape_2_10_2_1_2_1_3_1_1_1_2_2_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_1_1_2_2 ;
  x3do:hasGeometry :Box_2_10_2_1_2_1_3_1_1_1_2_2_1_1 ;
  x3do:hasAppearance :Appearance_2_10_2_1_2_1_3_1_1_1_2_2_1_2 .
:Box_2_10_2_1_2_1_3_1_1_1_2_2_1_1 a owl:NamedIndividual, x3do:Box ;
  x3do:hasParent :Shape_2_10_2_1_2_1_3_1_1_1_2_2_1 ;
  x3do:size ( .01 .3 .4 ) .
:Appearance_2_10_2_1_2_1_3_1_1_1_2_2_1_2 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_10_2_1_2_1_3_1_1_1_2_2_1 ;
  x3do:hasMaterial :Material_2_10_2_1_2_1_3_1_1_1_2_2_1_2_1 .
:Material_2_10_2_1_2_1_3_1_1_1_2_2_1_2_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_10_2_1_2_1_3_1_1_1_2_2_1_2 ;
  x3do:diffuseColor ( .1 .1 .1 ) .
:Transform_2_10_2_1_2_1_3_1_1_1_2_3 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :muzzle_break ;
  x3do:hasChildren :Shape_2_10_2_1_2_1_3_1_1_1_2_3_1 ;
  x3do:rotation ( 1 0 0 .75 ) ;
  x3do:translation ( -0.225 4.4 -3.2 ) .
:Shape_2_10_2_1_2_1_3_1_1_1_2_3_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_1_1_2_3 ;
  x3do:hasGeometry :Box_2_10_2_1_2_1_3_1_1_1_2_3_1_1 ;
  x3do:hasAppearance :Appearance_2_10_2_1_2_1_3_1_1_1_2_3_1_2 .
:Box_2_10_2_1_2_1_3_1_1_1_2_3_1_1 a owl:NamedIndividual, x3do:Box ;
  x3do:hasParent :Shape_2_10_2_1_2_1_3_1_1_1_2_3_1 ;
  x3do:size ( .01 .3 .4 ) .
:Appearance_2_10_2_1_2_1_3_1_1_1_2_3_1_2 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_10_2_1_2_1_3_1_1_1_2_3_1 ;
  x3do:hasMaterial :Material_2_10_2_1_2_1_3_1_1_1_2_3_1_2_1 .
:Material_2_10_2_1_2_1_3_1_1_1_2_3_1_2_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_10_2_1_2_1_3_1_1_1_2_3_1_2 ;
  x3do:diffuseColor ( .1 .1 .1 ) .
:Transform_2_10_2_1_2_1_3_1_1_1_2_4 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :muzzle_break ;
  x3do:hasChildren :Shape_2_10_2_1_2_1_3_1_1_1_2_4_1 ;
  x3do:rotation ( 1 0 0 -0.84 ) ;
  x3do:translation ( 0 4.64 -3.45 ) .
:Shape_2_10_2_1_2_1_3_1_1_1_2_4_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_1_1_2_4 ;
  x3do:hasGeometry :Cylinder_2_10_2_1_2_1_3_1_1_1_2_4_1_1 ;
  x3do:hasAppearance :Appearance_2_10_2_1_2_1_3_1_1_1_2_4_1_2 .
:Cylinder_2_10_2_1_2_1_3_1_1_1_2_4_1_1 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :Shape_2_10_2_1_2_1_3_1_1_1_2_4_1 ;
  x3do:height .02 ;
  x3do:radius .17 .
:Appearance_2_10_2_1_2_1_3_1_1_1_2_4_1_2 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_10_2_1_2_1_3_1_1_1_2_4_1 ;
  x3do:hasMaterial :Material_2_10_2_1_2_1_3_1_1_1_2_4_1_2_1 .
:Material_2_10_2_1_2_1_3_1_1_1_2_4_1_2_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_10_2_1_2_1_3_1_1_1_2_4_1_2 ;
  x3do:diffuseColor ( .1 .1 .1 ) .
:sideBars a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :recoilTransform ;
  x3do:hasChildren :rightSideBar, :leftSideBar1, :lTravelLockAnchor, :travelLockAnchor, :Transform_2_10_2_1_2_1_3_1_1_2_5, :Transform_2_10_2_1_2_1_3_1_1_2_6 ;
  x3do:DEF 'sideBars' ;
  x3do:translation ( 0 -0.2 0 ) .
:rightSideBar a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :sideBars ;
  x3do:hasChildren :sideBar ;
  x3do:DEF 'rightSideBar' ;
  x3do:rotation ( 1 0 0 .75 ) ;
  x3do:translation ( .45 1.9 -0.250 ) .
:sideBar a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :rightSideBar ;
  x3do:hasGeometry :Box_2_10_2_1_2_1_3_1_1_2_1_1_1 ;
  x3do:hasAppearance :camiPaint-USE-18 ;
  x3do:DEF 'sideBar' .
:Box_2_10_2_1_2_1_3_1_1_2_1_1_1 a owl:NamedIndividual, x3do:Box ;
  x3do:hasParent :sideBar ;
  x3do:size ( .2 .2 2.2 ) .
:camiPaint-USE-18 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :sideBar ;
  owl:sameAs :camiPaint . # DEF matching this USE
:leftSideBar1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :sideBars ;
  x3do:hasChildren :sideBar-USE-1 ;
  x3do:DEF 'leftSideBar1' ;
  x3do:rotation ( 1 0 0 .75 ) ;
  x3do:translation ( -0.45 1.9 -0.250 ) .
:sideBar-USE-1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :leftSideBar1 ;
  owl:sameAs :sideBar . # DEF matching this USE
:lTravelLockAnchor a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :sideBars ;
  x3do:hasChildren :Shape_2_10_2_1_2_1_3_1_1_2_3_1 ;
  x3do:DEF 'lTravelLockAnchor' ;
  x3do:rotation ( 1 0 0 -2.3 ) ;
  x3do:translation ( -0.55 1.7 -0.2 ) .
:Shape_2_10_2_1_2_1_3_1_1_2_3_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :lTravelLockAnchor ;
  x3do:hasGeometry :Extrusion_2_10_2_1_2_1_3_1_1_2_3_1_1 ;
  x3do:hasAppearance :camiPaint-USE-19 .
:Extrusion_2_10_2_1_2_1_3_1_1_2_3_1_1 a owl:NamedIndividual, x3do:Extrusion ;
  x3do:hasParent :Shape_2_10_2_1_2_1_3_1_1_2_3_1 ;
  x3do:crossSection ( 0 0 0 .15 .15 .15 .15 0 0 0 ) ;
  x3do:scale ( 1 .85 .75 .75 .5 .5 ) ;
  x3do:spine ( 0 0 0 0 .1 0 0 .2 0 ) .
:camiPaint-USE-19 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_10_2_1_2_1_3_1_1_2_3_1 ;
  owl:sameAs :camiPaint . # DEF matching this USE
:travelLockAnchor a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :sideBars ;
  x3do:hasChildren :Shape_2_10_2_1_2_1_3_1_1_2_4_1 ;
  x3do:DEF 'travelLockAnchor' ;
  x3do:rotation ( 1 0 0 -2.3 ) ;
  x3do:translation ( .4 1.7 -0.2 ) .
:Shape_2_10_2_1_2_1_3_1_1_2_4_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :travelLockAnchor ;
  x3do:hasGeometry :Extrusion_2_10_2_1_2_1_3_1_1_2_4_1_1 ;
  x3do:hasAppearance :camiPaint-USE-20 .
:Extrusion_2_10_2_1_2_1_3_1_1_2_4_1_1 a owl:NamedIndividual, x3do:Extrusion ;
  x3do:hasParent :Shape_2_10_2_1_2_1_3_1_1_2_4_1 ;
  x3do:crossSection ( 0 0 0 .15 .15 .15 .15 0 0 0 ) ;
  x3do:scale ( 1 .85 .75 .75 .5 .5 ) ;
  x3do:spine ( 0 0 0 0 .1 0 0 .2 0 ) .
:camiPaint-USE-20 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_10_2_1_2_1_3_1_1_2_4_1 ;
  owl:sameAs :camiPaint . # DEF matching this USE
:Transform_2_10_2_1_2_1_3_1_1_2_5 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :sideBars ;
  x3do:hasChildren :upperTravelLocker ;
  x3do:rotation ( 1 0 0 .65 ) ;
  x3do:translation ( .48 2.4 -1 ) .
:upperTravelLocker a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_1_2_5 ;
  x3do:hasGeometry :Box_2_10_2_1_2_1_3_1_1_2_5_1_1 ;
  x3do:hasAppearance :camiPaint-USE-21 ;
  x3do:DEF 'upperTravelLocker' .
:Box_2_10_2_1_2_1_3_1_1_2_5_1_1 a owl:NamedIndividual, x3do:Box ;
  x3do:hasParent :upperTravelLocker ;
  x3do:size ( .07 .2 .04 ) .
:camiPaint-USE-21 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :upperTravelLocker ;
  owl:sameAs :camiPaint . # DEF matching this USE
:Transform_2_10_2_1_2_1_3_1_1_2_6 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :sideBars ;
  x3do:hasChildren :upperTravelLocker-USE-1 ;
  x3do:rotation ( 1 0 0 .65 ) ;
  x3do:translation ( -0.48 2.4 -1 ) .
:upperTravelLocker-USE-1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_1_2_6 ;
  owl:sameAs :upperTravelLocker . # DEF matching this USE
:Transform_2_10_2_1_2_1_3_1_1_3 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :recoilTransform ;
  x3do:hasChildren :barrelCover ;
  x3do:rotation ( 1 0 0 -0.84 ) ;
  x3do:translation ( 0 1.65 -0.1 ) .
:barrelCover a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_1_3 ;
  x3do:hasGeometry :Cylinder_2_10_2_1_2_1_3_1_1_3_1_1 ;
  x3do:hasAppearance :camiPaint-USE-22 ;
  x3do:DEF 'barrelCover' .
:Cylinder_2_10_2_1_2_1_3_1_1_3_1_1 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :barrelCover ;
  x3do:height 2.5 ;
  x3do:radius .4 .
:camiPaint-USE-22 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :barrelCover ;
  owl:sameAs :camiPaint . # DEF matching this USE
:travelLockPiece a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :recoilTransform ;
  x3do:hasChildren :travelLockOrient, :travelLockOrientor, :travelLockSensor, :travelLockClock ;
  x3do:hasROUTE :ROUTE_2_10_2_1_2_1_3_1_1_4_5, :ROUTE_2_10_2_1_2_1_3_1_1_4_6, :ROUTE_2_10_2_1_2_1_3_1_1_4_7 ;
  x3do:DEF 'travelLockPiece' ;
  x3do:rotation ( 1 0 0 -0.76 ) ;
  x3do:translation ( -0.5 1.72 -0.75 ) .
:travelLockOrient a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :travelLockPiece ;
  x3do:hasChildren :Transform_2_10_2_1_2_1_3_1_1_4_1_1, :Transform_2_10_2_1_2_1_3_1_1_4_1_2, :Transform_2_10_2_1_2_1_3_1_1_4_1_3, :Transform_2_10_2_1_2_1_3_1_1_4_1_4, :connectingCylinder, :Transform_2_10_2_1_2_1_3_1_1_4_1_6, :Transform_2_10_2_1_2_1_3_1_1_4_1_7, :Transform_2_10_2_1_2_1_3_1_1_4_1_8 ;
  x3do:DEF 'travelLockOrient' ;
  x3do:center ( 0 -0.5 0 ) ;
  x3do:rotation ( 1 0 0 -2.25 ) .
:Transform_2_10_2_1_2_1_3_1_1_4_1_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :travelLockOrient ;
  x3do:hasChildren :travelLock .
:travelLock a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_1_4_1_1 ;
  x3do:hasGeometry :Cylinder_2_10_2_1_2_1_3_1_1_4_1_1_1_1 ;
  x3do:hasAppearance :camiPaint-USE-23 ;
  x3do:DEF 'travelLock' .
:Cylinder_2_10_2_1_2_1_3_1_1_4_1_1_1_1 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :travelLock ;
  x3do:height 1 ;
  x3do:radius .05 .
:camiPaint-USE-23 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :travelLock ;
  owl:sameAs :camiPaint . # DEF matching this USE
:Transform_2_10_2_1_2_1_3_1_1_4_1_2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :travelLockOrient ;
  x3do:hasChildren :travelLock-USE-1 ;
  x3do:translation ( 1 0 0 ) .
:travelLock-USE-1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_1_4_1_2 ;
  owl:sameAs :travelLock . # DEF matching this USE
:Transform_2_10_2_1_2_1_3_1_1_4_1_3 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :travelLockOrient ;
  x3do:hasChildren :travelLock-USE-2 ;
  x3do:rotation ( 0 0 1 .78 ) ;
  x3do:scale ( 1 1.38 1 ) ;
  x3do:translation ( .5 0 0 ) .
:travelLock-USE-2 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_1_4_1_3 ;
  owl:sameAs :travelLock . # DEF matching this USE
:Transform_2_10_2_1_2_1_3_1_1_4_1_4 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :travelLockOrient ;
  x3do:hasChildren :travelLock-USE-3 ;
  x3do:center ( 0 0 -0.705 ) ;
  x3do:rotation ( 0 0 1 -0.78 ) ;
  x3do:scale ( 1 1.38 1 ) ;
  x3do:translation ( .5 0 0 ) .
:travelLock-USE-3 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_1_4_1_4 ;
  owl:sameAs :travelLock . # DEF matching this USE
:connectingCylinder a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :travelLockOrient ;
  x3do:hasChildren :travelLock-USE-4 ;
  x3do:DEF 'connectingCylinder' ;
  x3do:rotation ( 0 0 1 1.57 ) ;
  x3do:scale ( 1 .1 1 ) ;
  x3do:translation ( 0 .5 0 ) .
:travelLock-USE-4 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :connectingCylinder ;
  owl:sameAs :travelLock . # DEF matching this USE
:Transform_2_10_2_1_2_1_3_1_1_4_1_6 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :travelLockOrient ;
  x3do:hasChildren :travelLock-USE-5 ;
  x3do:rotation ( 0 0 1 1.57 ) ;
  x3do:scale ( 1 .1 1 ) ;
  x3do:translation ( 0 -0.5 0 ) .
:travelLock-USE-5 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_1_4_1_6 ;
  owl:sameAs :travelLock . # DEF matching this USE
:Transform_2_10_2_1_2_1_3_1_1_4_1_7 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :travelLockOrient ;
  x3do:hasChildren :travelLock-USE-6 ;
  x3do:rotation ( 0 0 1 1.57 ) ;
  x3do:scale ( 1 .1 1 ) ;
  x3do:translation ( 1 .5 0 ) .
:travelLock-USE-6 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_1_4_1_7 ;
  owl:sameAs :travelLock . # DEF matching this USE
:Transform_2_10_2_1_2_1_3_1_1_4_1_8 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :travelLockOrient ;
  x3do:hasChildren :travelLock-USE-7 ;
  x3do:rotation ( 0 0 1 1.57 ) ;
  x3do:scale ( 1 .1 1 ) ;
  x3do:translation ( 1 -0.5 0 ) .
:travelLock-USE-7 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_1_4_1_8 ;
  owl:sameAs :travelLock . # DEF matching this USE
:travelLockOrientor a owl:NamedIndividual, x3do:OrientationInterpolator ;
  x3do:hasParent :travelLockPiece ;
  x3do:DEF 'travelLockOrientor' ;
  x3do:key ( 0 .25 .5 .75 .85 1 ) ;
  x3do:keyValue ( 1 0 0 -2.25 1 0 0 -1.7 1 0 0 -1.25 1 0 0 -0.75 1 0 0 -0.5 1 0 0 0 ) .
:travelLockSensor a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :travelLockPiece ;
  x3do:DEF 'travelLockSensor' ;
  x3do:description 'rasies and lowers travel lock' .
:travelLockClock a owl:NamedIndividual, x3do:TimeSensor ;
  x3do:hasParent :travelLockPiece ;
  x3do:DEF 'travelLockClock' ;
  x3do:cycleInterval '5' .
:ROUTE_2_10_2_1_2_1_3_1_1_4_5 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :travelLockPiece ;
  x3do:fromField 'touchTime' ;
  x3do:fromNode 'travelLockSensor' ;
  x3do:toField 'set_startTime' ;
  x3do:toNode 'travelLockClock' .
:ROUTE_2_10_2_1_2_1_3_1_1_4_6 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :travelLockPiece ;
  x3do:fromField 'fraction_changed' ;
  x3do:fromNode 'travelLockClock' ;
  x3do:toField 'set_fraction' ;
  x3do:toNode 'travelLockOrientor' .
:ROUTE_2_10_2_1_2_1_3_1_1_4_7 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :travelLockPiece ;
  x3do:fromField 'value_changed' ;
  x3do:fromNode 'travelLockOrientor' ;
  x3do:toField 'set_rotation' ;
  x3do:toNode 'travelLockOrient' .
:theRound a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :recoilTransform ;
  x3do:hasChildren :theRoundSpinner, :roundPathInterpolator, :roundOrientationInterpolator, :rideTheRound ;
  x3do:DEF 'theRound' ;
  x3do:rotation ( 1 0 0 -0.77 ) ;
  x3do:translation ( 0 3.7 -2.5 ) .
:theRoundSpinner a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :theRound ;
  x3do:hasChildren :Transform_2_10_2_1_2_1_3_1_1_5_1_1, :spinTimer, :roundSpinner ;
  x3do:DEF 'theRoundSpinner' .
:Transform_2_10_2_1_2_1_3_1_1_5_1_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :theRoundSpinner ;
  x3do:hasChildren :Transform_2_10_2_1_2_1_3_1_1_5_1_1_1 .
:Transform_2_10_2_1_2_1_3_1_1_5_1_1_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_1_5_1_1 ;
  x3do:hasChildren :artyRound ;
  x3do:scale ( .2 1 .2 ) .
:artyRound a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_1_5_1_1_1 ;
  x3do:hasAppearance :camiPaint-USE-24 ;
  x3do:hasGeometry :Extrusion_2_10_2_1_2_1_3_1_1_5_1_1_1_1_2 ;
  x3do:DEF 'artyRound' .
:camiPaint-USE-24 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :artyRound ;
  owl:sameAs :camiPaint . # DEF matching this USE
:Extrusion_2_10_2_1_2_1_3_1_1_5_1_1_1_1_2 a owl:NamedIndividual, x3do:Extrusion ;
  x3do:hasParent :artyRound ;
  x3do:crossSection ( -1 0 -0.9 0.435889894354067 -0.8 0.6 -0.7 0.714142842854285 -0.6 0.8 -0.5 0.866025403784439 -0.4 0.916515138991168 -0.3 0.953939201416946 -0.2 0.979795897113271 -0.1 0.99498743710662 0 1 0.1 0.99498743710662 0.2 0.979795897113271 0.3 0.953939201416946 0.4 0.916515138991168 0.5 0.866025403784439 0.6 0.8 0.7 0.714142842854285 0.8 0.6 0.9 0.435889894354067 1 0 0.9 -0.435889894354067 0.8 -0.6 0.7 -0.714142842854285 0.6 -0.8 0.5 -0.866025403784439 0.4 -0.916515138991168 0.3 -0.953939201416946 0.2 -0.979795897113271 0.1 -0.99498743710662 0 -1 -0.1 -0.99498743710662 -0.2 -0.979795897113271 -0.3 -0.953939201416946 -0.4 -0.916515138991168 -0.5 -0.866025403784439 -0.6 -0.8 -0.7 -0.714142842854285 -0.8 -0.6 -0.9 -0.435889894354067 -1 0 ) ;
  x3do:scale ( .35 .35 .5 .5 .5 .5 .3 .3 .01 .01 ) ;
  x3do:spine ( 0 0 0 0 .15 0 0 .8 0 0 .9 0 0 1 0 ) .
:spinTimer a owl:NamedIndividual, x3do:TimeSensor ;
  x3do:hasParent :theRoundSpinner ;
  x3do:DEF 'spinTimer' ;
  x3do:cycleInterval '3' ;
  x3do:loop true .
:roundSpinner a owl:NamedIndividual, x3do:OrientationInterpolator ;
  x3do:hasParent :theRoundSpinner ;
  x3do:DEF 'roundSpinner' ;
  x3do:key ( 0.0 0.25 0.50 0.75 1.0 ) ;
  x3do:keyValue ( 0 1 0 -1.57 0 1 0 0 0 1 0 1.57 0 1 0 3.14 0 1 0 -1.57 ) .
:roundPathInterpolator a owl:NamedIndividual, x3do:PositionInterpolator ;
  x3do:hasParent :theRound ;
  x3do:DEF 'roundPathInterpolator' ;
  x3do:key ( 0.057 0.0858823529 0.088235294 0.117647059 0.147058824 0.176470588 0.205882353 0.235294118 0.264705882 0.294117647 0.323529412 0.352941176 0.382352941 0.411764706 0.441176471 0.470588235 0.5 0.529411765 0.558823529 0.588235294 0.617647059 0.647058824 0.676470588 0.705882353 0.735294118 0.764705882 0.794117647 0.823529412 0.852941176 0.882352941 0.911764706 0.941176471 0.970588235 ) ;
  x3do:keyValue ( 0 3.8 -2.6 0 30.6227766 -10 0 59.2455532 -20 0 85.86832981 -30 0 110.4911064 -40 0 133.113883 -50 0 153.7366596 -60 0 172.3594362 -70 0 188.9822128 -80 0 203.6049894 -90 0 216.227766 -100 0 226.8505426 -110 0 235.4733192 -120 0 242.0960958 -130 0 246.7188724 -140 0 249.341649 -150 0 249.9644256 -160 0 248.5872022 -170 0 245.2099788 -180 0 239.8327554 -190 0 232.455532 -200 0 223.0783086 -210 0 211.7010852 -220 0 198.3238618 -230 0 182.9466384 -240 0 165.569415 -250 0 146.1921916 -260 0 124.8149682 -270 0 101.4377448 -280 0 76.06052145 -290 0 48.68329805 -300 0 19.30607465 -310 0 -1 -320 ) .
:roundOrientationInterpolator a owl:NamedIndividual, x3do:OrientationInterpolator ;
  x3do:hasParent :theRound ;
  x3do:DEF 'roundOrientationInterpolator' ;
  x3do:key ( 0.029411765 0.058823529 0.088235294 0.117647059 0.147058824 0.176470588 0.205882353 0.235294118 0.264705882 0.294117647 0.323529412 0.352941176 0.382352941 0.411764706 0.441176471 0.470588235 0.5 0.529411765 0.558823529 0.588235294 0.617647059 0.647058824 0.676470588 0.705882353 0.735294118 0.764705882 0.794117647 0.823529412 0.852941176 0.882352941 0.911764706 0.941176471 0.970588235 ) ;
  x3do:keyValue ( 1 0 0 -1.03580267483729 1 0 0 -1.07069156372618 1 0 0 -1.10558045261507 1 0 0 -1.14046934150396 1 0 0 -1.17535823039285 1 0 0 -1.21024711928174 1 0 0 -1.24513600817063 1 0 0 -1.28002489705952 1 0 0 -1.31491378594841 1 0 0 -1.34980267483729 1 0 0 -1.38469156372618 1 0 0 -1.41958045261507 1 0 0 -1.45446934150396 1 0 0 -1.48935823039285 1 0 0 -1.52424711928174 1 0 0 -1.55913600817063 1 0 0 -1.59402489705952 1 0 0 -1.6289137859484 1 0 0 -1.66380267483729 1 0 0 -1.69869156372618 1 0 0 -1.73358045261507 1 0 0 -1.76846934150396 1 0 0 -1.80335823039285 1 0 0 -1.83824711928174 1 0 0 -1.87313600817063 1 0 0 -1.90802489705952 1 0 0 -1.9429137859484 1 0 0 -1.97780267483729 1 0 0 -2.01269156372618 1 0 0 -2.04758045261507 1 0 0 -2.08246934150396 1 0 0 -2.11735823039285 1 0 0 -2.15224711928174 ) .
:rideTheRound a owl:NamedIndividual, x3do:Viewpoint ;
  x3do:hasParent :theRound ;
  x3do:DEF 'rideTheRound' ;
  x3do:description 'ride the round' ;
  x3do:orientation ( 1 0 0 .45 ) ;
  x3do:position ( 0 -5 10 ) .
:RECOILTIMER a owl:NamedIndividual, x3do:TimeSensor ;
  x3do:hasParent :recoilTransform ;
  x3do:DEF 'RECOILTIMER' ;
  x3do:cycleInterval '5' .
:recoil a owl:NamedIndividual, x3do:PositionInterpolator ;
  x3do:hasParent :recoilTransform ;
  x3do:DEF 'recoil' ;
  x3do:key ( 0 .2 .4 .6 .8 1 ) ;
  x3do:keyValue ( 0 0 0 0 -0.20 .25 0 -0.40 .5 0 -0.20 .25 0 -0.10 .15 0 0 0 ) .
:ROUTE_2_10_2_1_2_1_3_1_1_8 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :recoilTransform ;
  x3do:fromField 'fraction_changed' ;
  x3do:fromNode 'RECOILTIMER' ;
  x3do:toField 'set_fraction' ;
  x3do:toNode 'recoil' .
:ROUTE_2_10_2_1_2_1_3_1_1_9 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :recoilTransform ;
  x3do:fromField 'value_changed' ;
  x3do:fromNode 'recoil' ;
  x3do:toField 'set_translation' ;
  x3do:toNode 'recoilMover' .
:shotEffects a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :barrel ;
  x3do:hasChildren :hotGas, :Transform_2_10_2_1_2_1_3_1_2_2 ;
  x3do:DEF 'shotEffects' ;
  x3do:rotation ( 1 0 0 1.57 ) ;
  x3do:translation ( -4.7 0 -3.5 ) .
:hotGas a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :shotEffects ;
  x3do:hasChildren :Group_2_10_2_1_2_1_3_1_2_1_1 ;
  x3do:DEF 'hotGas' ;
  x3do:rotation ( 0 0 1 -0.76 ) ;
  x3do:translation ( -0.3 -0.3 0 ) .
:Group_2_10_2_1_2_1_3_1_2_1_1 a owl:NamedIndividual, x3do:Group ;
  x3do:hasParent :hotGas ;
  x3do:hasChildren :BallTransform, :BALLSIZE, :BOOMCLOCK .
:BallTransform a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Group_2_10_2_1_2_1_3_1_2_1_1 ;
  x3do:hasChildren :Shape_2_10_2_1_2_1_3_1_2_1_1_1_1 ;
  x3do:DEF 'BallTransform' ;
  x3do:scale ( .000001 .0000001 .0000001 ) .
:Shape_2_10_2_1_2_1_3_1_2_1_1_1_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :BallTransform ;
  x3do:hasGeometry :EXPSHAPE ;
  x3do:hasAppearance :Appearance_2_10_2_1_2_1_3_1_2_1_1_1_1_2 .
:EXPSHAPE a owl:NamedIndividual, x3do:Sphere ;
  x3do:hasParent :Shape_2_10_2_1_2_1_3_1_2_1_1_1_1 ;
  x3do:DEF 'EXPSHAPE' ;
  x3do:radius 25 .
:Appearance_2_10_2_1_2_1_3_1_2_1_1_1_1_2 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_10_2_1_2_1_3_1_2_1_1_1_1 ;
  x3do:hasTexture :explosion .
:explosion a owl:NamedIndividual, x3do:ImageTexture ;
  x3do:hasParent :Appearance_2_10_2_1_2_1_3_1_2_1_1_1_1_2 ;
  x3do:DEF 'explosion' ;
  x3do:url '"explosion.png" "https://www.web3d.org/x3d/content/examples/Savage/GroundVehicles/T72M/explosion.png" "https://www.web3d.org/x3d/content/examples/Savage/Weapons/Missiles/explosion.png"' .
:BALLSIZE a owl:NamedIndividual, x3do:PositionInterpolator ;
  x3do:hasParent :Group_2_10_2_1_2_1_3_1_2_1_1 ;
  x3do:DEF 'BALLSIZE' ;
  x3do:key ( 0.0 0.1 0.2 .3 .4 .5 .6 .7 .8 .9 1.0 ) ;
  x3do:keyValue ( 0 0 0 .003 .001 .003 .006 .002 .006 .01 .003 .01 .015 .006 .015 .02 .02 .02 .01 .01 .01 .006 .006 .006 .003 .003 .003 0 0 0 0 0 0 ) .
:BOOMCLOCK a owl:NamedIndividual, x3do:TimeSensor ;
  x3do:hasParent :Group_2_10_2_1_2_1_3_1_2_1_1 ;
  x3do:DEF 'BOOMCLOCK' ;
  x3do:cycleInterval '.85' .
:Transform_2_10_2_1_2_1_3_1_2_2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :shotEffects ;
  x3do:hasChildren :BoomTransform ;
  x3do:hasROUTE :ROUTE_2_10_2_1_2_1_3_1_2_2_2, :ROUTE_2_10_2_1_2_1_3_1_2_2_3, :ROUTE_2_10_2_1_2_1_3_1_2_2_4, :ROUTE_2_10_2_1_2_1_3_1_2_2_5, :ROUTE_2_10_2_1_2_1_3_1_2_2_6, :ROUTE_2_10_2_1_2_1_3_1_2_2_7 ;
  x3do:rotation ( 0 0 1 -0.76 ) .
:BoomTransform a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_2_2 ;
  x3do:hasChildren :Shape_2_10_2_1_2_1_3_1_2_2_1_1, :TransparencyInterp, :ScaleInterp, :BoomTimer ;
  x3do:DEF 'BoomTransform' ;
  x3do:scale ( 0.0001 0.00001 0.00001 ) ;
  x3do:translation ( 0.0 0 0.0 ) .
:Shape_2_10_2_1_2_1_3_1_2_2_1_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :BoomTransform ;
  x3do:hasGeometry :Extrusion_2_10_2_1_2_1_3_1_2_2_1_1_1 ;
  x3do:hasAppearance :Appearance_2_10_2_1_2_1_3_1_2_2_1_1_2 .
:Extrusion_2_10_2_1_2_1_3_1_2_2_1_1_1 a owl:NamedIndividual, x3do:Extrusion ;
  x3do:hasParent :Shape_2_10_2_1_2_1_3_1_2_2_1_1 ;
  x3do:beginCap false ;
  x3do:creaseAngle 1.57 ;
  x3do:crossSection ( 1.0 0.0 0.92 -0.38 0.71 -0.71 0.38 -0.92 0.0 -1.0 -0.38 -0.92 -0.71 -0.71 -0.92 -0.38 -1.0 -0.0 -0.92 0.38 -0.71 0.71 -0.38 0.92 0.0 1.0 0.38 0.92 0.71 0.71 0.92 0.38 1.0 0.0 ) ;
  x3do:endCap false ;
  x3do:spine ( 2.0 0.0 0.0 1.85 0.0 0.77 1.41 0.0 1.41 0.77 0.0 1.85 0.0 0.0 2.0 -0.77 0.0 1.85 -1.41 0.0 1.41 -1.85 0.0 0.77 -2.0 0.0 0.0 -1.85 0.0 -0.77 -1.41 0.0 -1.41 -0.77 0.0 -1.85 0.0 0.0 -2.0 0.77 0.0 -1.85 1.41 0.0 -1.41 1.85 0.0 -0.77 2.0 0.0 0.0 ) .
:Appearance_2_10_2_1_2_1_3_1_2_2_1_1_2 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_10_2_1_2_1_3_1_2_2_1_1 ;
  x3do:hasMaterial :BoomMaterial ;
  x3do:hasTexture :ImageTexture_2_10_2_1_2_1_3_1_2_2_1_1_2_2 .
:BoomMaterial a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_10_2_1_2_1_3_1_2_2_1_1_2 ;
  x3do:DEF 'BoomMaterial' .
:ImageTexture_2_10_2_1_2_1_3_1_2_2_1_1_2_2 a owl:NamedIndividual, x3do:ImageTexture ;
  x3do:hasParent :Appearance_2_10_2_1_2_1_3_1_2_2_1_1_2 ;
  x3do:url '"Boom1.jpg" "https://www.web3d.org/x3d/content/examples/Savage/GroundVehicles/T72M/Boom1.jpg" "https://www.web3d.org/x3d/content/examples/Savage/ShipsMilitary/FrigateYavuzTurkey/Boom1.jpg"' .
:TransparencyInterp a owl:NamedIndividual, x3do:ScalarInterpolator ;
  x3do:hasParent :BoomTransform ;
  x3do:DEF 'TransparencyInterp' ;
  x3do:key ( 0 0.04 0.1 0.7 1.0 ) ;
  x3do:keyValue ( 1.0 0.2 0.3 1.0 1.0 ) .
:ScaleInterp a owl:NamedIndividual, x3do:PositionInterpolator ;
  x3do:hasParent :BoomTransform ;
  x3do:DEF 'ScaleInterp' ;
  x3do:key ( 0 0.04 0.1 0.7 1.0 ) ;
  x3do:keyValue ( 0.00001 0.00001 0.00001 0.05 0.4 0.05 0.4 0.6 0.4 0.5 0.9 0.5 0.00001 0.0001 0.00001 ) .
:BoomTimer a owl:NamedIndividual, x3do:TimeSensor ;
  x3do:hasParent :BoomTransform ;
  x3do:DEF 'BoomTimer' ;
  x3do:cycleInterval '5.0' .
:ROUTE_2_10_2_1_2_1_3_1_2_2_2 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_2_2 ;
  x3do:fromField 'fraction_changed' ;
  x3do:fromNode 'BOOMCLOCK' ;
  x3do:toField 'set_fraction' ;
  x3do:toNode 'BALLSIZE' .
:ROUTE_2_10_2_1_2_1_3_1_2_2_3 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_2_2 ;
  x3do:fromField 'value_changed' ;
  x3do:fromNode 'BALLSIZE' ;
  x3do:toField 'set_scale' ;
  x3do:toNode 'BallTransform' .
:ROUTE_2_10_2_1_2_1_3_1_2_2_4 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_2_2 ;
  x3do:fromField 'fraction_changed' ;
  x3do:fromNode 'BoomTimer' ;
  x3do:toField 'set_fraction' ;
  x3do:toNode 'ScaleInterp' .
:ROUTE_2_10_2_1_2_1_3_1_2_2_5 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_2_2 ;
  x3do:fromField 'value_changed' ;
  x3do:fromNode 'ScaleInterp' ;
  x3do:toField 'set_scale' ;
  x3do:toNode 'BoomTransform' .
:ROUTE_2_10_2_1_2_1_3_1_2_2_6 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_2_2 ;
  x3do:fromField 'fraction_changed' ;
  x3do:fromNode 'BoomTimer' ;
  x3do:toField 'set_fraction' ;
  x3do:toNode 'TransparencyInterp' .
:ROUTE_2_10_2_1_2_1_3_1_2_2_7 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Transform_2_10_2_1_2_1_3_1_2_2 ;
  x3do:fromField 'value_changed' ;
  x3do:fromNode 'TransparencyInterp' ;
  x3do:toField 'set_transparency' ;
  x3do:toNode 'BoomMaterial' .
:elevMechMover1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :barrelMover1 ;
  x3do:hasChildren :Transform_2_10_2_1_2_1_4_1 ;
  x3do:DEF 'elevMechMover1' .
:Transform_2_10_2_1_2_1_4_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :elevMechMover1 ;
  x3do:hasChildren :Transform_2_10_2_1_2_1_4_1_1 .
:Transform_2_10_2_1_2_1_4_1_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_10_2_1_2_1_4_1 ;
  x3do:hasChildren :Transform_2_10_2_1_2_1_4_1_1_1, :Transform_2_10_2_1_2_1_4_1_1_2 ;
  x3do:rotation ( 0 0 1 1.57 ) .
:Transform_2_10_2_1_2_1_4_1_1_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_10_2_1_2_1_4_1_1 ;
  x3do:hasChildren :elevatingMech1, :Transform_2_10_2_1_2_1_4_1_1_1_2 ;
  x3do:rotation ( 1 0 0 -0.25 ) ;
  x3do:translation ( .45 1.7 -0.3 ) .
:elevatingMech1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_2_1_4_1_1_1 ;
  x3do:hasGeometry :Cylinder_2_10_2_1_2_1_4_1_1_1_1_1 ;
  x3do:hasAppearance :camiPaint-USE-25 ;
  x3do:DEF 'elevatingMech1' .
:Cylinder_2_10_2_1_2_1_4_1_1_1_1_1 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :elevatingMech1 ;
  x3do:height 1.3 ;
  x3do:radius .08 .
:camiPaint-USE-25 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :elevatingMech1 ;
  owl:sameAs :camiPaint . # DEF matching this USE
:Transform_2_10_2_1_2_1_4_1_1_1_2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_10_2_1_2_1_4_1_1_1 ;
  x3do:hasChildren :lowerElevMechExtender ;
  x3do:translation ( 0 -1 0 ) .
:lowerElevMechExtender a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_2_1_4_1_1_1_2 ;
  x3do:hasGeometry :Cylinder_2_10_2_1_2_1_4_1_1_1_2_1_1 ;
  x3do:hasAppearance :Appearance_2_10_2_1_2_1_4_1_1_1_2_1_2 ;
  x3do:DEF 'lowerElevMechExtender' .
:Cylinder_2_10_2_1_2_1_4_1_1_1_2_1_1 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :lowerElevMechExtender ;
  x3do:height 1 ;
  x3do:radius .070 .
:Appearance_2_10_2_1_2_1_4_1_1_1_2_1_2 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :lowerElevMechExtender ;
  x3do:hasMaterial :Material_2_10_2_1_2_1_4_1_1_1_2_1_2_1 .
:Material_2_10_2_1_2_1_4_1_1_1_2_1_2_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_10_2_1_2_1_4_1_1_1_2_1_2 ;
  x3do:diffuseColor ( .7 .7 .7 ) .
:Transform_2_10_2_1_2_1_4_1_1_2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_10_2_1_2_1_4_1_1 ;
  x3do:hasChildren :elevatingMech1-USE-1, :Transform_2_10_2_1_2_1_4_1_1_2_2 ;
  x3do:rotation ( 1 0 0 -0.25 ) ;
  x3do:translation ( -0.45 1.7 -0.3 ) .
:elevatingMech1-USE-1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_2_1_4_1_1_2 ;
  owl:sameAs :elevatingMech1 . # DEF matching this USE
:Transform_2_10_2_1_2_1_4_1_1_2_2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_10_2_1_2_1_4_1_1_2 ;
  x3do:hasChildren :lowerElevMechExtender-USE-1 ;
  x3do:translation ( 0 -1 0 ) .
:lowerElevMechExtender-USE-1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_10_2_1_2_1_4_1_1_2_2 ;
  owl:sameAs :lowerElevMechExtender . # DEF matching this USE
:upperCylinderMover a owl:NamedIndividual, x3do:Script ;
  x3do:hasParent :barrelGroup ;
  x3do:hasField :field_2_10_2_1_2_2_1, :field_2_10_2_1_2_2_2, :field_2_10_2_1_2_2_3, :field_2_10_2_1_2_2_4 ;
  x3do:DEF 'upperCylinderMover' ;
  x3do:sourceCode """
ecmascript:

function barrelRotation (value, eventTime ) {
	angle = value[3];
	outputAngle = .75 * angle;
	upperRotation = new SFRotation ( 0, 1, 0, outputAngle);
	extendCylinder = new SFVec3f ( 0, .22 + (-.7 * angle), 0);	
	shrinkCylinder = new SFVec3f (1, 1.02 * (.85 - angle), 1);
}
""" .
:field_2_10_2_1_2_2_1 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :upperCylinderMover ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'barrelRotation' ;
  x3do:type 'SFRotation' .
:field_2_10_2_1_2_2_2 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :upperCylinderMover ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'upperRotation' ;
  x3do:type 'SFRotation' .
:field_2_10_2_1_2_2_3 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :upperCylinderMover ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'shrinkCylinder' ;
  x3do:type 'SFVec3f' .
:field_2_10_2_1_2_2_4 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :upperCylinderMover ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'extendCylinder' ;
  x3do:type 'SFVec3f' .
:ROUTE_2_10_2_1_2_3 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :barrelGroup ;
  x3do:fromField 'rotation_changed' ;
  x3do:fromNode 'tubeSensor' ;
  x3do:toField 'barrelRotation' ;
  x3do:toNode 'upperCylinderMover' .
:ROUTE_2_10_2_1_2_4 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :barrelGroup ;
  x3do:fromField 'upperRotation' ;
  x3do:fromNode 'upperCylinderMover' ;
  x3do:toField 'set_rotation' ;
  x3do:toNode 'ruc' .
:ROUTE_2_10_2_1_2_5 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :barrelGroup ;
  x3do:fromField 'extendCylinder' ;
  x3do:fromNode 'upperCylinderMover' ;
  x3do:toField 'set_translation' ;
  x3do:toNode 'shrinkCylinder' .
:ROUTE_2_10_2_1_2_6 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :barrelGroup ;
  x3do:fromField 'shrinkCylinder' ;
  x3do:fromNode 'upperCylinderMover' ;
  x3do:toField 'set_scale' ;
  x3do:toNode 'shrinkCylinder' .
:ROUTE_2_10_2_1_2_7 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :barrelGroup ;
  x3do:fromField 'extendCylinder' ;
  x3do:fromNode 'upperCylinderMover' ;
  x3do:toField 'set_translation' ;
  x3do:toNode 'shrinkCylinderR' .
:ROUTE_2_10_2_1_2_8 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :barrelGroup ;
  x3do:fromField 'shrinkCylinder' ;
  x3do:fromNode 'upperCylinderMover' ;
  x3do:toField 'set_scale' ;
  x3do:toNode 'shrinkCylinderR' .
:carriage_sensor a owl:NamedIndividual, x3do:CylinderSensor ;
  x3do:hasParent :rotateUpperCarriage ;
  x3do:DEF 'carriage_sensor' ;
  x3do:description 'sensor for upper carriage deflection' ;
  x3do:maxAngle .90 ;
  x3do:minAngle -0.90 .
:ROUTE_2_10_2_1_4 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :rotateUpperCarriage ;
  x3do:fromField 'rotation_changed' ;
  x3do:fromNode 'carriage_sensor' ;
  x3do:toField 'set_rotation' ;
  x3do:toNode 'rotateUpperCarriage' .
:Background_2_11 a owl:NamedIndividual, x3do:Background ;
  x3do:hasParent :Scene ;
  x3do:backUrl '"sky2.jpg" "https://www.web3d.org/x3d/content/examples/Savage/Weapons/Guns/sky2.jpg"' ;
  x3do:frontUrl '"sky2.jpg" "https://www.web3d.org/x3d/content/examples/Savage/Weapons/Guns/sky2.jpg"' ;
  x3do:leftUrl '"sky2.jpg" "https://www.web3d.org/x3d/content/examples/Savage/Weapons/Guns/sky2.jpg"' ;
  x3do:rightUrl '"sky2.jpg" "https://www.web3d.org/x3d/content/examples/Savage/Weapons/Guns/sky2.jpg"' ;
  x3do:topUrl '"sky2.jpg" "https://www.web3d.org/x3d/content/examples/Savage/Weapons/Guns/sky2.jpg"' .
:target a owl:NamedIndividual, x3do:Viewpoint ;
  x3do:hasParent :Scene ;
  x3do:DEF 'target' ;
  x3do:description 'as seen from target' ;
  x3do:orientation ( 0 0.995 -0.097 3.14 ) ;
  x3do:position ( 0 10 -372 ) .
:theGround a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Scene ;
  x3do:hasChildren :Transform_2_13_1 ;
  x3do:DEF 'theGround' ;
  x3do:translation ( 0 -1.5 0 ) .
:Transform_2_13_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :theGround ;
  x3do:hasChildren :Inline_2_13_1_1 ;
  x3do:scale ( 100 .3 100 ) .
:Inline_2_13_1_1 a owl:NamedIndividual, x3do:Inline ;
  x3do:hasParent :Transform_2_13_1 ;
  x3do:url '"../../../Vrml2Sourcebook/Chapter14-ElevationGrid/Figure14.5ElevationGridTerrain.x3d" "https://www.web3d.org/x3d/content/examples/Vrml2Sourcebook/Chapter14-ElevationGrid/Figure14.5ElevationGridTerrain.x3d" "../../../Vrml2Sourcebook/Chapter14-ElevationGrid/Figure14.5ElevationGridTerrain.wrl" "https://www.web3d.org/x3d/content/examples/Vrml2Sourcebook/Chapter14-ElevationGrid/Figure14.5ElevationGridTerrain.wrl"' .
:ROUTE_2_14 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Scene ;
  x3do:fromField 'isOver' ;
  x3do:fromNode 'wheelSensor' ;
  x3do:toField 'set_enabled' ;
  x3do:toNode 'CLOCK' .
:ROUTE_2_15 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Scene ;
  x3do:fromField 'fraction_changed' ;
  x3do:fromNode 'CLOCK' ;
  x3do:toField 'set_fraction' ;
  x3do:toNode 'wheelInterpolator' .
:ROUTE_2_16 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Scene ;
  x3do:fromField 'value_changed' ;
  x3do:fromNode 'wheelInterpolator' ;
  x3do:toField 'set_rotation' ;
  x3do:toNode 'leftWheel1' .
:fireTheRound a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Scene ;
  x3do:hasChildren :fireMe, :shootRound, :clock3 ;
  x3do:DEF 'fireTheRound' ;
  x3do:translation ( 5 3 -5 ) .
:fireMe a owl:NamedIndividual, x3do:Billboard ;
  x3do:hasParent :fireTheRound ;
  x3do:hasChildren :Transform_2_17_1_1, :Shape_2_17_1_2 ;
  x3do:DEF 'fireMe' .
:Transform_2_17_1_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :fireMe ;
  x3do:hasChildren :Shape_2_17_1_1_1 ;
  x3do:translation ( -1 -0.35 0 ) .
:Shape_2_17_1_1_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_17_1_1 ;
  x3do:hasGeometry :Text_2_17_1_1_1_1 ;
  x3do:hasAppearance :Appearance_2_17_1_1_1_2 .
:Text_2_17_1_1_1_1 a owl:NamedIndividual, x3do:Text ;
  x3do:hasParent :Shape_2_17_1_1_1 ;
  x3do:hasFontStyle :FontStyle_2_17_1_1_1_1_1 ;
  x3do:string '"FIRE!"' .
:FontStyle_2_17_1_1_1_1_1 a owl:NamedIndividual, x3do:FontStyle ;
  x3do:hasParent :Text_2_17_1_1_1_1 ;
  x3do:justify '"MIDDLE" "MIDDLE"' .
:Appearance_2_17_1_1_1_2 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_17_1_1_1 ;
  x3do:hasMaterial :Material_2_17_1_1_1_2_1 .
:Material_2_17_1_1_1_2_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_17_1_1_1_2 ;
  x3do:emissiveColor ( .9 .9 .9 ) .
:Shape_2_17_1_2 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :fireMe ;
  x3do:hasGeometry :sign ;
  x3do:hasAppearance :Appearance_2_17_1_2_2 .
:sign a owl:NamedIndividual, x3do:Box ;
  x3do:hasParent :Shape_2_17_1_2 ;
  x3do:DEF 'sign' ;
  x3do:size ( 4 2 .2 ) .
:Appearance_2_17_1_2_2 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_17_1_2 ;
  x3do:hasMaterial :Material_2_17_1_2_2_1 ;
  x3do:hasTexture :camo-USE-1 .
:Material_2_17_1_2_2_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_17_1_2_2 ;
  x3do:transparency .6 .
:camo-USE-1 a owl:NamedIndividual, x3do:ImageTexture ;
  x3do:hasParent :Appearance_2_17_1_2_2 ;
  owl:sameAs :camo . # DEF matching this USE
:shootRound a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :fireTheRound ;
  x3do:DEF 'shootRound' ;
  x3do:description 'touch muzzlebreak to shoot round' .
:clock3 a owl:NamedIndividual, x3do:TimeSensor ;
  x3do:hasParent :fireTheRound ;
  x3do:DEF 'clock3' ;
  x3do:cycleInterval '15' .
:targetSphere a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Scene ;
  x3do:hasChildren :Transform_2_18_1, :explosionSounds ;
  x3do:hasROUTE :ROUTE_2_18_3 ;
  x3do:DEF 'targetSphere' ;
  x3do:translation ( 0 0 -320 ) .
:Transform_2_18_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :targetSphere ;
  x3do:hasChildren :Shape_2_18_1_1, :explosionsoundsensor .
:Shape_2_18_1_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_18_1 ;
  x3do:hasGeometry :Box_2_18_1_1_1 ;
  x3do:hasAppearance :camiPaint-USE-26 .
:Box_2_18_1_1_1 a owl:NamedIndividual, x3do:Box ;
  x3do:hasParent :Shape_2_18_1_1 ;
  x3do:size ( 10 1 10 ) .
:camiPaint-USE-26 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_18_1_1 ;
  owl:sameAs :camiPaint . # DEF matching this USE
:explosionsoundsensor a owl:NamedIndividual, x3do:ProximitySensor ;
  x3do:hasParent :Transform_2_18_1 ;
  x3do:DEF 'explosionsoundsensor' ;
  x3do:size ( 200 400 300 ) .
:explosionSounds a owl:NamedIndividual, x3do:Sound ;
  x3do:hasParent :targetSphere ;
  x3do:hasSource :explosionSound ;
  x3do:DEF 'explosionSounds' ;
  x3do:maxBack 100 ;
  x3do:maxFront 100 ;
  x3do:minBack .01 ;
  x3do:minFront .01 .
:explosionSound a owl:NamedIndividual, x3do:AudioClip ;
  x3do:hasParent :explosionSounds ;
  x3do:DEF 'explosionSound' ;
  x3do:description 'explosion sound' ;
  x3do:url '"ShellExplode.au" "https://www.web3d.org/x3d/content/examples/Savage/Weapons/Guns/ShellExplode.au"' .
:ROUTE_2_18_3 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :targetSphere ;
  x3do:fromField 'enterTime' ;
  x3do:fromNode 'explosionsoundsensor' ;
  x3do:toField 'startTime' ;
  x3do:toNode 'explosionSound' .
:Transform_2_19 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Scene ;
  x3do:hasChildren :artyRound-USE-1 ;
  x3do:scale ( .2 1 .2 ) ;
  x3do:translation ( 5 0 0 ) .
:artyRound-USE-1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_19 ;
  owl:sameAs :artyRound . # DEF matching this USE
:Transform_2_20 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Scene ;
  x3do:hasChildren :artyRound-USE-2 ;
  x3do:scale ( .2 1 .2 ) ;
  x3do:translation ( 5.2 0 0 ) .
:artyRound-USE-2 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_20 ;
  owl:sameAs :artyRound . # DEF matching this USE
:Transform_2_21 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Scene ;
  x3do:hasChildren :artyRound-USE-3 ;
  x3do:scale ( .2 1 .2 ) ;
  x3do:translation ( 5.4 0 0 ) .
:artyRound-USE-3 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_21 ;
  owl:sameAs :artyRound . # DEF matching this USE
:Transform_2_22 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Scene .
:ROUTE_2_23 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Scene ;
  x3do:fromField 'touchTime' ;
  x3do:fromNode 'shootRound' ;
  x3do:toField 'set_startTime' ;
  x3do:toNode 'BoomTimer' .
:ROUTE_2_24 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Scene ;
  x3do:fromField 'touchTime' ;
  x3do:fromNode 'shootRound' ;
  x3do:toField 'set_startTime' ;
  x3do:toNode 'RECOILTIMER' .
:ROUTE_2_25 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Scene ;
  x3do:fromField 'touchTime' ;
  x3do:fromNode 'shootRound' ;
  x3do:toField 'set_startTime' ;
  x3do:toNode 'BOOMCLOCK' .
:ROUTE_2_26 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Scene ;
  x3do:fromField 'touchTime' ;
  x3do:fromNode 'shootRound' ;
  x3do:toField 'set_startTime' ;
  x3do:toNode 'clock3' .
:ROUTE_2_27 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Scene ;
  x3do:fromField 'touchTime' ;
  x3do:fromNode 'shootRound' ;
  x3do:toField 'startTime' ;
  x3do:toNode 'CannonFireSound' .
:ROUTE_2_28 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Scene ;
  x3do:fromField 'fraction_changed' ;
  x3do:fromNode 'clock3' ;
  x3do:toField 'set_fraction' ;
  x3do:toNode 'roundPathInterpolator' .
:ROUTE_2_29 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Scene ;
  x3do:fromField 'fraction_changed' ;
  x3do:fromNode 'clock3' ;
  x3do:toField 'set_fraction' ;
  x3do:toNode 'roundOrientationInterpolator' .
:ROUTE_2_30 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Scene ;
  x3do:fromField 'value_changed' ;
  x3do:fromNode 'roundPathInterpolator' ;
  x3do:toField 'set_translation' ;
  x3do:toNode 'theRound' .
:ROUTE_2_31 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Scene ;
  x3do:fromField 'value_changed' ;
  x3do:fromNode 'roundOrientationInterpolator' ;
  x3do:toField 'set_rotation' ;
  x3do:toNode 'theRound' .
:ROUTE_2_32 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Scene ;
  x3do:fromField 'touchTime' ;
  x3do:fromNode 'shootRound' ;
  x3do:toField 'set_startTime' ;
  x3do:toNode 'spinTimer' .
:ROUTE_2_33 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Scene ;
  x3do:fromField 'fraction_changed' ;
  x3do:fromNode 'spinTimer' ;
  x3do:toField 'set_fraction' ;
  x3do:toNode 'roundSpinner' .
:ROUTE_2_34 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Scene ;
  x3do:fromField 'value_changed' ;
  x3do:fromNode 'roundSpinner' ;
  x3do:toField 'set_rotation' ;
  x3do:toNode 'theRoundSpinner' .
