/// <summary>
        ///
        /// </summary>
        /// <param name="osPart"></param>
        /// <returns></returns>
        private SceneObjectPartSnapshot ConvertOpenSimPartToPartSnapshot(dynamic osPart)
        {
            //we need server weight and streaming cost

            SceneObjectPartSnapshot snap = new SceneObjectPartSnapshot
            {
                AngularVelocity       = new Vector3(osPart.AngularVelocity.X, osPart.AngularVelocity.Y, osPart.AngularVelocity.Z),
                AngularVelocityTarget = new Vector3(osPart.AngularVelocity.X, osPart.AngularVelocity.Y, osPart.AngularVelocity.Z),
                BaseMask             = osPart.BaseMask,
                Category             = osPart.Category,
                ClickAction          = osPart.ClickAction,
                CollisionSound       = osPart.CollisionSound.Guid,
                CollisionSoundVolume = osPart.CollisionSoundVolume,
                CreationDate         = osPart.CreationDate,
                CreatorId            = m_creatorOverride == Guid.Empty ? osPart.CreatorID.Guid : m_creatorOverride,
                Description          = osPart.Description,
                EveryoneMask         = osPart.EveryoneMask,
                Flags             = osPart.Flags,
                FromItemId        = Guid.Empty,
                GroupId           = osPart.GroupID.Guid,
                GroupMask         = osPart.GroupMask,
                GroupPosition     = osPart.GroupPosition,
                HoverText         = osPart.Text,
                Id                = osPart.UUID.Guid,
                Inventory         = ExtractSOPInventorySnapshot(osPart),
                KeyframeAnimation = ExtractSOPKFASnapshot(osPart),
                LastOwnerId       = osPart.LastOwnerID.Guid,
                LinkNumber        = osPart.LinkNum,
                LocalId           = osPart.LocalId,
                Material          = (Material)osPart.Material,
                MediaUrl          = osPart.MediaUrl,
                Name              = osPart.Name,
                NextOwnerMask     = osPart.NextOwnerMask,
                ObjectFlags       = (PrimFlags)osPart.ObjectFlags,
                ObjectSaleType    = osPart.ObjectSaleType,
                OffsetPosition    = osPart.OffsetPosition,
                OwnerMask         = osPart.OwnerMask,
                OwnershipCost     = osPart.OwnershipCost,
                ParentId          = osPart.ParentID,
                ParticleSystem    = osPart.ParticleSystem,
                PassTouches       = osPart.PassTouches,
                PayPrice          = osPart.PayPrice,
                RegionHandle      = osPart.RegionHandle,
                RotationOffset    = new Quaternion(osPart.RotationOffset.X, osPart.RotationOffset.Y, osPart.RotationOffset.Z, osPart.RotationOffset.W),
                SalePrice         = osPart.SalePrice,
                Scale             = osPart.Scale,
                ScriptAccessPin   = osPart.ScriptAccessPin,
                ServerWeight      = 1,
                StreamingCost     = 1,
                Shape             = ExtractSOPBaseShape(osPart),

                OwnerId = m_ownerOverride == Guid.Empty ? osPart.OwnerID.Guid : m_ownerOverride,
            };

            return(snap);
        }
        /// <summary>
        /// Deserializes an OpenSim Xml2 serialized SceneObjectGroup into a SceneObjectGroupSnapshot
        /// </summary>
        /// <param name="xml">The XML blob representing the serialized object</param>
        /// <returns></returns>
        public SceneObjectGroupSnapshot SOGSnapshotFromOpenSimXml2(string xml)
        {
            dynamic osSog      = m_fromXml2Method.Invoke(null, new object[] { xml });
            dynamic osRootPart = osSog.RootPart;

            SceneObjectPartSnapshot rootPartSnap = ConvertOpenSimPartToPartSnapshot(osRootPart);

            SceneObjectGroupSnapshot sshot = new SceneObjectGroupSnapshot();

            sshot.TaintedAttachment = false;
            sshot.TempAttachment    = false;

            sshot.RootPart = rootPartSnap;

            return(sshot);
        }