function addAnimations( group, animations ) {

				if ( group.animations === undefined ) {

					group.animations = [];

				}

				animations.stacks.forEach( function ( stack ) {

					var animationData = {
						name: stack.name,
						fps: 30,
						length: stack.length,
						hierarchy: []
					};

					var bones = group.skeleton.bones;

					bones.forEach( function ( bone ) {

						var name = bone.name.replace( /.*:/, '' );
						var parentIndex = bones.findIndex( function ( parentBone ) {

							return bone.parent === parentBone;

						} );
						animationData.hierarchy.push( { parent: parentIndex, name: name, keys: [] } );

					} );

					for ( var frame = 0; frame < stack.frames; frame ++ ) {

						bones.forEach( function ( bone, boneIndex ) {

							var animationNode = stack.layers[ 0 ][ boneIndex ];

							animationData.hierarchy.forEach( function ( node ) {

								if ( node.name === bone.name ) {

									node.keys.push( generateKey( animationNode, bone, frame ) );

								}

							} );

						} );

					}

					group.animations.push( THREE.AnimationClip.parseAnimation( animationData, bones ) );


					/**
					 * @param {THREE.Bone} bone
					 */
					function generateKey( animationNode, bone, frame ) {

						var key = {
							time: frame / animations.fps,
							pos: bone.position.toArray(),
							rot: bone.quaternion.toArray(),
							scl: bone.scale.toArray()
						};

						if ( animationNode === undefined ) {

							return key;

						}

						try {

							if ( hasCurve( animationNode, 'T' ) && hasKeyOnFrame( animationNode.T, frame ) ) {

								key.pos = [ animationNode.T.curves.x.values[ frame ], animationNode.T.curves.y.values[ frame ], animationNode.T.curves.z.values[ frame ] ];

							}

							if ( hasCurve( animationNode, 'R' ) && hasKeyOnFrame( animationNode.R, frame ) ) {

								var rotationX = degreeToRadian( animationNode.R.curves.x.values[ frame ] );
								var rotationY = degreeToRadian( animationNode.R.curves.y.values[ frame ] );
								var rotationZ = degreeToRadian( animationNode.R.curves.z.values[ frame ] );
								var euler = new THREE.Euler( rotationX, rotationY, rotationZ, 'ZYX' );
								key.rot = new THREE.Quaternion().setFromEuler( euler ).toArray();

							}

							if ( hasCurve( animationNode, 'S' ) && hasKeyOnFrame( animationNode.S, frame ) ) {

								key.scl = [ animationNode.S.curves.x.values[ frame ], animationNode.S.curves.y.values[ frame ], animationNode.S.curves.z.values[ frame ] ];

							}

						} catch ( error ) {

							// Curve is not fully plotted.
							console.log( bone );
							console.log( error );

						}

						return key;

						function hasCurve( animationNode, attribute ) {

							if ( animationNode === undefined ) {

								return false;

							}

							var attributeNode = animationNode[ attribute ];
							if ( ! attributeNode ) {

								return false;

							}

							return [ 'x', 'y', 'z' ].every( function ( key ) {

								return attributeNode.curves[ key ] !== undefined;

							} );

						}

						function hasKeyOnFrame( attributeNode, frame ) {

							return [ 'x', 'y', 'z' ].every( function ( key ) {

								return isKeyExistOnFrame( attributeNode.curves[ key ], frame );

								function isKeyExistOnFrame( curve, frame ) {

									return curve.values[ frame ] !== undefined;

								}

							} );

						}

					}

				} );

			}
@param {{
				curves: Map<number, {
					T: {
						id: number;
						attr: string;
						internalID: number;
						attrX: boolean;
						attrY: boolean;
						attrZ: boolean;
						containerBoneID: number;
						containerID: number;
						curves: {
							x: {
								version: any;
								id: number;
								internalID: number;
								times: number[];
								values: number[];
								attrFlag: number[];
								attrData: number[];
							};
							y: {
								version: any;
								id: number;
								internalID: number;
								times: number[];
								values: number[];
								attrFlag: number[];
								attrData: number[];
							};
							z: {
								version: any;
								id: number;
								internalID: number;
								times: number[];
								values: number[];
								attrFlag: number[];
								attrData: number[];
							};
						};
					};
					R: {
						id: number;
						attr: string;
						internalID: number;
						attrX: boolean;
						attrY: boolean;
						attrZ: boolean;
						containerBoneID: number;
						containerID: number;
						curves: {
							x: {
								version: any;
								id: number;
								internalID: number;
								times: number[];
								values: number[];
								attrFlag: number[];
								attrData: number[];
							};
							y: {
								version: any;
								id: number;
								internalID: number;
								times: number[];
								values: number[];
								attrFlag: number[];
								attrData: number[];
							};
							z: {
								version: any;
								id: number;
								internalID: number;
								times: number[];
								values: number[];
								attrFlag: number[];
								attrData: number[];
							};
						};
					};
					S: {
						id: number;
						attr: string;
						internalID: number;
						attrX: boolean;
						attrY: boolean;
						attrZ: boolean;
						containerBoneID: number;
						containerID: number;
						curves: {
							x: {
								version: any;
								id: number;
								internalID: number;
								times: number[];
								values: number[];
								attrFlag: number[];
								attrData: number[];
							};
							y: {
								version: any;
								id: number;
								internalID: number;
								times: number[];
								values: number[];
								attrFlag: number[];
								attrData: number[];
							};
							z: {
								version: any;
								id: number;
								internalID: number;
								times: number[];
								values: number[];
								attrFlag: number[];
								attrData: number[];
							};
						};
					};
				}>;
				layers: Map<number, {
					T: {
						id: number;
						attr: string;
						internalID: number;
						attrX: boolean;
						attrY: boolean;
						attrZ: boolean;
						containerBoneID: number;
						containerID: number;
						curves: {
							x: {
								version: any;
								id: number;
								internalID: number;
								times: number[];
								values: number[];
								attrFlag: number[];
								attrData: number[];
							};
							y: {
								version: any;
								id: number;
								internalID: number;
								times: number[];
								values: number[];
								attrFlag: number[];
								attrData: number[];
							};
							z: {
								version: any;
								id: number;
								internalID: number;
								times: number[];
								values: number[];
								attrFlag: number[];
								attrData: number[];
							};
						};
					};
					R: {
						id: number;
						attr: string;
						internalID: number;
						attrX: boolean;
						attrY: boolean;
						attrZ: boolean;
						containerBoneID: number;
						containerID: number;
						curves: {
							x: {
								version: any;
								id: number;
								internalID: number;
								times: number[];
								values: number[];
								attrFlag: number[];
								attrData: number[];
							};
							y: {
								version: any;
								id: number;
								internalID: number;
								times: number[];
								values: number[];
								attrFlag: number[];
								attrData: number[];
							};
							z: {
								version: any;
								id: number;
								internalID: number;
								times: number[];
								values: number[];
								attrFlag: number[];
								attrData: number[];
							};
						};
					};
					S: {
						id: number;
						attr: string;
						internalID: number;
						attrX: boolean;
						attrY: boolean;
						attrZ: boolean;
						containerBoneID: number;
						containerID: number;
						curves: {
							x: {
								version: any;
								id: number;
								internalID: number;
								times: number[];
								values: number[];
								attrFlag: number[];
								attrData: number[];
							};
							y: {
								version: any;
								id: number;
								internalID: number;
								times: number[];
								values: number[];
								attrFlag: number[];
								attrData: number[];
							};
							z: {
								version: any;
								id: number;
								internalID: number;
								times: number[];
								values: number[];
								attrFlag: number[];
								attrData: number[];
							};
						};
					};
				}[]>;
				stacks: Map<number, {
					name: string;
					layers: {
						T: {
							id: number;
							attr: string;
							internalID: number;
							attrX: boolean;
							attrY: boolean;
							attrZ: boolean;
							containerBoneID: number;
							containerID: number;
							curves: {
								x: {
									version: any;
									id: number;
									internalID: number;
									times: number[];
									values: number[];
									attrFlag: number[];
									attrData: number[];
								};
								y: {
									version: any;
									id: number;
									internalID: number;
									times: number[];
									values: number[];
									attrFlag: number[];
									attrData: number[];
								};
								z: {
									version: any;
									id: number;
									internalID: number;
									times: number[];
									values: number[];
									attrFlag: number[];
									attrData: number[];
								};
							};
						};
						R: {
							id: number;
							attr: string;
							internalID: number;
							attrX: boolean;
							attrY: boolean;
							attrZ: boolean;
							containerBoneID: number;
							containerID: number;
							curves: {
								x: {
									version: any;
									id: number;
									internalID: number;
									times: number[];
									values: number[];
									attrFlag: number[];
									attrData: number[];
								};
								y: {
									version: any;
									id: number;
									internalID: number;
									times: number[];
									values: number[];
									attrFlag: number[];
									attrData: number[];
								};
								z: {
									version: any;
									id: number;
									internalID: number;
									times: number[];
									values: number[];
									attrFlag: number[];
									attrData: number[];
								};
							};
						};
						S: {
							id: number;
							attr: string;
							internalID: number;
							attrX: boolean;
							attrY: boolean;
							attrZ: boolean;
							containerBoneID: number;
							containerID: number;
							curves: {
								x: {
									version: any;
									id: number;
									internalID: number;
									times: number[];
									values: number[];
									attrFlag: number[];
									attrData: number[];
								};
								y: {
									version: any;
									id: number;
									internalID: number;
									times: number[];
									values: number[];
									attrFlag: number[];
									attrData: number[];
								};
								z: {
									version: any;
									id: number;
									internalID: number;
									times: number[];
									values: number[];
									attrFlag: number[];
									attrData: number[];
								};
							};
						};
					}[][];
					length: number;
					frames: number;
				}>;
				length: number;
				fps: number;
				frames: number;
			}} animations,
@param {{skeleton: { bones: THREE.Bone[]}}} group