717 lines
17 KiB
C++
717 lines
17 KiB
C++
#include "collada_types.hpp"
|
|
|
|
namespace curve_interpolation {
|
|
|
|
using namespace collada;
|
|
|
|
float const array_node_cube_translation_x_input_array[] = {
|
|
{ 0.0f },
|
|
{ 1.666667f },
|
|
{ 3.333333f },
|
|
{ 5.0f },
|
|
};
|
|
|
|
float const array_node_cube_translation_x_output_array[] = {
|
|
{ 10.0f },
|
|
{ -10.0f },
|
|
{ 10.0f },
|
|
{ -10.0f },
|
|
};
|
|
|
|
float2 const array_node_cube_translation_x_intangent_array[] = {
|
|
{ -0.3332306f, 10.0f },
|
|
{ 1.111167f, -10.0f },
|
|
{ 2.778333f, 10.0f },
|
|
{ 4.4445f, -9.219337f },
|
|
};
|
|
|
|
float2 const array_node_cube_translation_x_outtangent_array[] = {
|
|
{ 0.5555f, 10.0f },
|
|
{ 2.222167f, -10.0f },
|
|
{ 3.888333f, 10.0f },
|
|
{ 4.000208f, -8.594958f },
|
|
};
|
|
|
|
enum interpolation const array_node_cube_translation_x_interpolation_array[] = {
|
|
interpolation::BEZIER,
|
|
interpolation::BEZIER,
|
|
interpolation::BEZIER,
|
|
interpolation::BEZIER,
|
|
};
|
|
|
|
sampler const sampler_node_cube_translation_x_sampler = {
|
|
// node_cube_translation_x_input
|
|
.input = {
|
|
.float_array = array_node_cube_translation_x_input_array,
|
|
.count = 4,
|
|
},
|
|
// node_cube_translation_x_output
|
|
.output = {
|
|
.float_array = array_node_cube_translation_x_output_array,
|
|
.count = 4,
|
|
},
|
|
// node_cube_translation_x_intangent
|
|
.in_tangent = {
|
|
.float2_array = array_node_cube_translation_x_intangent_array,
|
|
.count = 4,
|
|
},
|
|
// node_cube_translation_x_outtangent
|
|
.out_tangent = {
|
|
.float2_array = array_node_cube_translation_x_outtangent_array,
|
|
.count = 4,
|
|
},
|
|
// node_cube_translation_x_interpolation
|
|
.interpolation = {
|
|
.interpolation_array = array_node_cube_translation_x_interpolation_array,
|
|
.count = 4,
|
|
},
|
|
};
|
|
|
|
float const array_node_cube_translation_y_input_array[] = {
|
|
{ -0.8333334f },
|
|
{ 0.8333334f },
|
|
{ 2.5f },
|
|
{ 4.166667f },
|
|
};
|
|
|
|
float const array_node_cube_translation_y_output_array[] = {
|
|
{ -10.05776f },
|
|
{ 10.05852f },
|
|
{ -9.941484f },
|
|
{ 10.05852f },
|
|
};
|
|
|
|
float2 const array_node_cube_translation_y_intangent_array[] = {
|
|
{ -1.166264f, -10.05776f },
|
|
{ 0.2778334f, 10.05852f },
|
|
{ 1.9445f, -9.941484f },
|
|
{ 3.611667f, 10.05852f },
|
|
};
|
|
|
|
float2 const array_node_cube_translation_y_outtangent_array[] = {
|
|
{ -0.2783333f, -10.05776f },
|
|
{ 1.388833f, 10.05852f },
|
|
{ 3.0555f, -9.941484f },
|
|
{ 4.499598f, 10.05852f },
|
|
};
|
|
|
|
enum interpolation const array_node_cube_translation_y_interpolation_array[] = {
|
|
interpolation::BEZIER,
|
|
interpolation::BEZIER,
|
|
interpolation::BEZIER,
|
|
interpolation::BEZIER,
|
|
};
|
|
|
|
sampler const sampler_node_cube_translation_y_sampler = {
|
|
// node_cube_translation_y_input
|
|
.input = {
|
|
.float_array = array_node_cube_translation_y_input_array,
|
|
.count = 4,
|
|
},
|
|
// node_cube_translation_y_output
|
|
.output = {
|
|
.float_array = array_node_cube_translation_y_output_array,
|
|
.count = 4,
|
|
},
|
|
// node_cube_translation_y_intangent
|
|
.in_tangent = {
|
|
.float2_array = array_node_cube_translation_y_intangent_array,
|
|
.count = 4,
|
|
},
|
|
// node_cube_translation_y_outtangent
|
|
.out_tangent = {
|
|
.float2_array = array_node_cube_translation_y_outtangent_array,
|
|
.count = 4,
|
|
},
|
|
// node_cube_translation_y_interpolation
|
|
.interpolation = {
|
|
.interpolation_array = array_node_cube_translation_y_interpolation_array,
|
|
.count = 4,
|
|
},
|
|
};
|
|
|
|
channel const node_channel_node_cube_translation_x = {
|
|
.source_sampler = &sampler_node_cube_translation_x_sampler,
|
|
.target_transform_index = 0,
|
|
.target_attribute = target_attribute::X,
|
|
};
|
|
|
|
channel const node_channel_node_cube_translation_y = {
|
|
.source_sampler = &sampler_node_cube_translation_y_sampler,
|
|
.target_transform_index = 0,
|
|
.target_attribute = target_attribute::Y,
|
|
};
|
|
|
|
effect const effect_material__15 = {
|
|
.type = effect_type::BLINN,
|
|
.blinn = {
|
|
.emission = {
|
|
.color = {0.0f, 0.0f, 0.0f, 1.0f},
|
|
},
|
|
.ambient = {
|
|
.color = {0.6705883f, 0.5843138f, 1.0f, 1.0f},
|
|
},
|
|
.diffuse = {
|
|
.color = {0.6705883f, 0.5843138f, 1.0f, 1.0f},
|
|
},
|
|
.specular = {
|
|
.color = {0.0f, 0.0f, 0.0f, 1.0f},
|
|
},
|
|
.shininess = 10.0f,
|
|
.reflective = {
|
|
.color = {0.0f, 0.0f, 0.0f, 1.0f},
|
|
},
|
|
.reflectivity = 0.0f,
|
|
.transparent = {
|
|
.color = {1.0f, 1.0f, 1.0f, 1.0f},
|
|
},
|
|
.transparency = 1.0f,
|
|
.index_of_refraction = 0.0f,
|
|
}
|
|
};
|
|
|
|
effect const effect_material__16 = {
|
|
.type = effect_type::BLINN,
|
|
.blinn = {
|
|
.emission = {
|
|
.color = {0.0f, 0.0f, 0.0f, 1.0f},
|
|
},
|
|
.ambient = {
|
|
.color = {0.5803922f, 1.0f, 0.9647059f, 1.0f},
|
|
},
|
|
.diffuse = {
|
|
.color = {0.5803922f, 1.0f, 0.9647059f, 1.0f},
|
|
},
|
|
.specular = {
|
|
.color = {0.0f, 0.0f, 0.0f, 1.0f},
|
|
},
|
|
.shininess = 10.0f,
|
|
.reflective = {
|
|
.color = {0.0f, 0.0f, 0.0f, 1.0f},
|
|
},
|
|
.reflectivity = 0.0f,
|
|
.transparent = {
|
|
.color = {1.0f, 1.0f, 1.0f, 1.0f},
|
|
},
|
|
.transparency = 1.0f,
|
|
.index_of_refraction = 0.0f,
|
|
}
|
|
};
|
|
|
|
effect const effect_material__17 = {
|
|
.type = effect_type::BLINN,
|
|
.blinn = {
|
|
.emission = {
|
|
.color = {0.0f, 0.0f, 0.0f, 1.0f},
|
|
},
|
|
.ambient = {
|
|
.color = {0.6509804f, 1.0f, 0.5803922f, 1.0f},
|
|
},
|
|
.diffuse = {
|
|
.color = {0.6509804f, 1.0f, 0.5803922f, 1.0f},
|
|
},
|
|
.specular = {
|
|
.color = {0.0f, 0.0f, 0.0f, 1.0f},
|
|
},
|
|
.shininess = 10.0f,
|
|
.reflective = {
|
|
.color = {0.0f, 0.0f, 0.0f, 1.0f},
|
|
},
|
|
.reflectivity = 0.0f,
|
|
.transparent = {
|
|
.color = {1.0f, 1.0f, 1.0f, 1.0f},
|
|
},
|
|
.transparency = 1.0f,
|
|
.index_of_refraction = 0.0f,
|
|
}
|
|
};
|
|
|
|
effect const effect_material__18 = {
|
|
.type = effect_type::BLINN,
|
|
.blinn = {
|
|
.emission = {
|
|
.color = {0.0f, 0.0f, 0.0f, 1.0f},
|
|
},
|
|
.ambient = {
|
|
.color = {0.9333334f, 1.0f, 0.5647059f, 1.0f},
|
|
},
|
|
.diffuse = {
|
|
.color = {0.9333334f, 1.0f, 0.5647059f, 1.0f},
|
|
},
|
|
.specular = {
|
|
.color = {0.0f, 0.0f, 0.0f, 1.0f},
|
|
},
|
|
.shininess = 10.0f,
|
|
.reflective = {
|
|
.color = {0.0f, 0.0f, 0.0f, 1.0f},
|
|
},
|
|
.reflectivity = 0.0f,
|
|
.transparent = {
|
|
.color = {1.0f, 1.0f, 1.0f, 1.0f},
|
|
},
|
|
.transparency = 1.0f,
|
|
.index_of_refraction = 0.0f,
|
|
}
|
|
};
|
|
|
|
effect const effect_material__19 = {
|
|
.type = effect_type::BLINN,
|
|
.blinn = {
|
|
.emission = {
|
|
.color = {0.0f, 0.0f, 0.0f, 1.0f},
|
|
},
|
|
.ambient = {
|
|
.color = {1.0f, 0.7686275f, 0.5803922f, 1.0f},
|
|
},
|
|
.diffuse = {
|
|
.color = {1.0f, 0.7686275f, 0.5803922f, 1.0f},
|
|
},
|
|
.specular = {
|
|
.color = {0.0f, 0.0f, 0.0f, 1.0f},
|
|
},
|
|
.shininess = 10.0f,
|
|
.reflective = {
|
|
.color = {0.0f, 0.0f, 0.0f, 1.0f},
|
|
},
|
|
.reflectivity = 0.0f,
|
|
.transparent = {
|
|
.color = {1.0f, 1.0f, 1.0f, 1.0f},
|
|
},
|
|
.transparency = 1.0f,
|
|
.index_of_refraction = 0.0f,
|
|
}
|
|
};
|
|
|
|
effect const effect_material__20 = {
|
|
.type = effect_type::BLINN,
|
|
.blinn = {
|
|
.emission = {
|
|
.color = {0.0f, 0.0f, 0.0f, 1.0f},
|
|
},
|
|
.ambient = {
|
|
.color = {1.0f, 0.5803922f, 0.5803922f, 1.0f},
|
|
},
|
|
.diffuse = {
|
|
.color = {1.0f, 0.5803922f, 0.5803922f, 1.0f},
|
|
},
|
|
.specular = {
|
|
.color = {0.0f, 0.0f, 0.0f, 1.0f},
|
|
},
|
|
.shininess = 10.0f,
|
|
.reflective = {
|
|
.color = {0.0f, 0.0f, 0.0f, 1.0f},
|
|
},
|
|
.reflectivity = 0.0f,
|
|
.transparent = {
|
|
.color = {1.0f, 1.0f, 1.0f, 1.0f},
|
|
},
|
|
.transparency = 1.0f,
|
|
.index_of_refraction = 0.0f,
|
|
}
|
|
};
|
|
|
|
effect const effect_coloreffectr229g154b215 = {
|
|
.type = effect_type::PHONG,
|
|
.phong = {
|
|
.emission = {
|
|
.color = {0.0f, 0.0f, 0.0f, 0.0f},
|
|
},
|
|
.ambient = {
|
|
.color = {0.8980392f, 0.6039216f, 0.8431373f, 1.0f},
|
|
},
|
|
.diffuse = {
|
|
.color = {0.8980392f, 0.6039216f, 0.8431373f, 1.0f},
|
|
},
|
|
.specular = {
|
|
.color = {1.0f, 1.0f, 1.0f, 1.0f},
|
|
},
|
|
.shininess = 10.0f,
|
|
.reflective = {
|
|
.color = {0.0f, 0.0f, 0.0f, 1.0f},
|
|
},
|
|
.reflectivity = 0.0f,
|
|
.transparent = {
|
|
.color = {1.0f, 1.0f, 1.0f, 1.0f},
|
|
},
|
|
.transparency = 1.0f,
|
|
.index_of_refraction = 0.0f,
|
|
}
|
|
};
|
|
|
|
effect const effect_coloreffectr28g149b177 = {
|
|
.type = effect_type::PHONG,
|
|
.phong = {
|
|
.emission = {
|
|
.color = {0.0f, 0.0f, 0.0f, 0.0f},
|
|
},
|
|
.ambient = {
|
|
.color = {0.1098039f, 0.5843137f, 0.6941176f, 1.0f},
|
|
},
|
|
.diffuse = {
|
|
.color = {0.1098039f, 0.5843137f, 0.6941176f, 1.0f},
|
|
},
|
|
.specular = {
|
|
.color = {1.0f, 1.0f, 1.0f, 1.0f},
|
|
},
|
|
.shininess = 10.0f,
|
|
.reflective = {
|
|
.color = {0.0f, 0.0f, 0.0f, 1.0f},
|
|
},
|
|
.reflectivity = 0.0f,
|
|
.transparent = {
|
|
.color = {1.0f, 1.0f, 1.0f, 1.0f},
|
|
},
|
|
.transparency = 1.0f,
|
|
.index_of_refraction = 0.0f,
|
|
}
|
|
};
|
|
|
|
material const material_coloreffectr229g154b215_material = {
|
|
.effect = &effect_coloreffectr229g154b215,
|
|
};
|
|
|
|
material const material_coloreffectr28g149b177_material = {
|
|
.effect = &effect_coloreffectr28g149b177,
|
|
};
|
|
|
|
material const material_material__15_material = {
|
|
.effect = &effect_material__15,
|
|
};
|
|
|
|
material const material_material__16_material = {
|
|
.effect = &effect_material__16,
|
|
};
|
|
|
|
material const material_material__17_material = {
|
|
.effect = &effect_material__17,
|
|
};
|
|
|
|
material const material_material__18_material = {
|
|
.effect = &effect_material__18,
|
|
};
|
|
|
|
material const material_material__19_material = {
|
|
.effect = &effect_material__19,
|
|
};
|
|
|
|
material const material_material__20_material = {
|
|
.effect = &effect_material__20,
|
|
};
|
|
|
|
input_element const input_elements_position_0_3_normal_0_3_texcoord_0_3[] = {
|
|
{
|
|
.semantic = "POSITION",
|
|
.semantic_index = 0,
|
|
.format = input_format::FLOAT3,
|
|
},
|
|
{
|
|
.semantic = "NORMAL",
|
|
.semantic_index = 0,
|
|
.format = input_format::FLOAT3,
|
|
},
|
|
{
|
|
.semantic = "TEXCOORD",
|
|
.semantic_index = 0,
|
|
.format = input_format::FLOAT3,
|
|
},
|
|
};
|
|
|
|
triangles const triangles_geom_cube[] = {
|
|
{
|
|
.count = 2, // triangles
|
|
.index_offset = 0, // indices
|
|
.inputs_index = 0, // index into inputs_list
|
|
},
|
|
{
|
|
.count = 2, // triangles
|
|
.index_offset = 6, // indices
|
|
.inputs_index = 0, // index into inputs_list
|
|
},
|
|
{
|
|
.count = 2, // triangles
|
|
.index_offset = 12, // indices
|
|
.inputs_index = 0, // index into inputs_list
|
|
},
|
|
{
|
|
.count = 2, // triangles
|
|
.index_offset = 18, // indices
|
|
.inputs_index = 0, // index into inputs_list
|
|
},
|
|
{
|
|
.count = 2, // triangles
|
|
.index_offset = 24, // indices
|
|
.inputs_index = 0, // index into inputs_list
|
|
},
|
|
{
|
|
.count = 2, // triangles
|
|
.index_offset = 30, // indices
|
|
.inputs_index = 0, // index into inputs_list
|
|
},
|
|
};
|
|
|
|
geometry const geometry_geom_cube = {
|
|
.mesh = {
|
|
.triangles = triangles_geom_cube,
|
|
.triangles_count = 6,
|
|
|
|
.vertex_buffer_offset = 0,
|
|
.vertex_buffer_size = 864,
|
|
|
|
.index_buffer_offset = 0,
|
|
.index_buffer_size = 144,
|
|
}
|
|
};
|
|
|
|
triangles const triangles_geom_cylinder001[] = {
|
|
{
|
|
.count = 30, // triangles
|
|
.index_offset = 0, // indices
|
|
.inputs_index = 0, // index into inputs_list
|
|
},
|
|
};
|
|
|
|
geometry const geometry_geom_cylinder001 = {
|
|
.mesh = {
|
|
.triangles = triangles_geom_cylinder001,
|
|
.triangles_count = 1,
|
|
|
|
.vertex_buffer_offset = 864,
|
|
.vertex_buffer_size = 1152,
|
|
|
|
.index_buffer_offset = 144,
|
|
.index_buffer_size = 360,
|
|
}
|
|
};
|
|
|
|
triangles const triangles_geom_plane001[] = {
|
|
{
|
|
.count = 2, // triangles
|
|
.index_offset = 0, // indices
|
|
.inputs_index = 0, // index into inputs_list
|
|
},
|
|
};
|
|
|
|
geometry const geometry_geom_plane001 = {
|
|
.mesh = {
|
|
.triangles = triangles_geom_plane001,
|
|
.triangles_count = 1,
|
|
|
|
.vertex_buffer_offset = 2016,
|
|
.vertex_buffer_size = 144,
|
|
|
|
.index_buffer_offset = 504,
|
|
.index_buffer_size = 24,
|
|
}
|
|
};
|
|
|
|
geometry const * const geometries[] = {
|
|
&geometry_geom_cube,
|
|
&geometry_geom_cylinder001,
|
|
&geometry_geom_plane001,
|
|
};
|
|
|
|
node const * const node_children_node_environmentambientlight[] = {
|
|
};
|
|
|
|
transform const transforms_node_environmentambientlight[] = {
|
|
};
|
|
|
|
instance_geometry const instance_geometries_node_environmentambientlight[] = {
|
|
};
|
|
|
|
channel const * const node_channels_node_environmentambientlight[] = {};
|
|
|
|
node const node_node_environmentambientlight = {
|
|
.type = node_type::NODE,
|
|
|
|
.transforms = transforms_node_environmentambientlight,
|
|
.transforms_count = 0,
|
|
|
|
.instance_geometries = instance_geometries_node_environmentambientlight,
|
|
.instance_geometries_count = 0,
|
|
|
|
.channels = node_channels_node_environmentambientlight,
|
|
.channels_count = 0,
|
|
|
|
.nodes = node_children_node_environmentambientlight,
|
|
.nodes_count = 0,
|
|
};
|
|
|
|
node const * const node_children_node_cube[] = {
|
|
};
|
|
|
|
transform const transforms_node_cube[] = {
|
|
{
|
|
.type = transform_type::TRANSLATE,
|
|
.translate = {10.0f, -1.14258e-07f, 0.0f},
|
|
},
|
|
};
|
|
|
|
instance_material const instance_materials_node_cube_0[] = {
|
|
{
|
|
.element_index = 1, // an index into mesh.triangles
|
|
.material = &material_material__15_material,
|
|
},
|
|
{
|
|
.element_index = 0, // an index into mesh.triangles
|
|
.material = &material_material__16_material,
|
|
},
|
|
{
|
|
.element_index = 5, // an index into mesh.triangles
|
|
.material = &material_material__17_material,
|
|
},
|
|
{
|
|
.element_index = 3, // an index into mesh.triangles
|
|
.material = &material_material__18_material,
|
|
},
|
|
{
|
|
.element_index = 2, // an index into mesh.triangles
|
|
.material = &material_material__19_material,
|
|
},
|
|
{
|
|
.element_index = 4, // an index into mesh.triangles
|
|
.material = &material_material__20_material,
|
|
},
|
|
};
|
|
|
|
instance_geometry const instance_geometries_node_cube[] = {
|
|
{
|
|
.geometry = &geometry_geom_cube,
|
|
.instance_materials = instance_materials_node_cube_0,
|
|
.instance_materials_count = 6,
|
|
},
|
|
};
|
|
|
|
channel const * const node_channels_node_cube[] = {
|
|
&node_channel_node_cube_translation_y,
|
|
&node_channel_node_cube_translation_x,
|
|
};
|
|
|
|
node const node_node_cube = {
|
|
.type = node_type::NODE,
|
|
|
|
.transforms = transforms_node_cube,
|
|
.transforms_count = 1,
|
|
|
|
.instance_geometries = instance_geometries_node_cube,
|
|
.instance_geometries_count = 1,
|
|
|
|
.channels = node_channels_node_cube,
|
|
.channels_count = 2,
|
|
|
|
.nodes = node_children_node_cube,
|
|
.nodes_count = 0,
|
|
};
|
|
|
|
node const * const node_children_node_cylinder001[] = {
|
|
};
|
|
|
|
transform const transforms_node_cylinder001[] = {
|
|
};
|
|
|
|
instance_material const instance_materials_node_cylinder001_0[] = {
|
|
{
|
|
.element_index = 0, // an index into mesh.triangles
|
|
.material = &material_coloreffectr229g154b215_material,
|
|
},
|
|
};
|
|
|
|
instance_geometry const instance_geometries_node_cylinder001[] = {
|
|
{
|
|
.geometry = &geometry_geom_cylinder001,
|
|
.instance_materials = instance_materials_node_cylinder001_0,
|
|
.instance_materials_count = 1,
|
|
},
|
|
};
|
|
|
|
channel const * const node_channels_node_cylinder001[] = {
|
|
};
|
|
|
|
node const node_node_cylinder001 = {
|
|
.type = node_type::NODE,
|
|
|
|
.transforms = transforms_node_cylinder001,
|
|
.transforms_count = 0,
|
|
|
|
.instance_geometries = instance_geometries_node_cylinder001,
|
|
.instance_geometries_count = 1,
|
|
|
|
.channels = node_channels_node_cylinder001,
|
|
.channels_count = 0,
|
|
|
|
.nodes = node_children_node_cylinder001,
|
|
.nodes_count = 0,
|
|
};
|
|
|
|
node const * const node_children_node_plane001[] = {
|
|
};
|
|
|
|
transform const transforms_node_plane001[] = {
|
|
{
|
|
.type = transform_type::TRANSLATE,
|
|
.translate = {0.0f, 0.0f, 0.01f},
|
|
},
|
|
{
|
|
.type = transform_type::ROTATE,
|
|
.rotate = {0.0f, 0.0f, -1.0f, -44.99999f},
|
|
},
|
|
};
|
|
|
|
instance_material const instance_materials_node_plane001_0[] = {
|
|
{
|
|
.element_index = 0, // an index into mesh.triangles
|
|
.material = &material_coloreffectr28g149b177_material,
|
|
},
|
|
};
|
|
|
|
instance_geometry const instance_geometries_node_plane001[] = {
|
|
{
|
|
.geometry = &geometry_geom_plane001,
|
|
.instance_materials = instance_materials_node_plane001_0,
|
|
.instance_materials_count = 1,
|
|
},
|
|
};
|
|
|
|
channel const * const node_channels_node_plane001[] = {
|
|
};
|
|
|
|
node const node_node_plane001 = {
|
|
.type = node_type::NODE,
|
|
|
|
.transforms = transforms_node_plane001,
|
|
.transforms_count = 2,
|
|
|
|
.instance_geometries = instance_geometries_node_plane001,
|
|
.instance_geometries_count = 1,
|
|
|
|
.channels = node_channels_node_plane001,
|
|
.channels_count = 0,
|
|
|
|
.nodes = node_children_node_plane001,
|
|
.nodes_count = 0,
|
|
};
|
|
|
|
node const * const nodes[] = {
|
|
&node_node_environmentambientlight,
|
|
&node_node_cube,
|
|
&node_node_cylinder001,
|
|
&node_node_plane001,
|
|
};
|
|
|
|
inputs const inputs_list[] = {
|
|
{
|
|
.elements = input_elements_position_0_3_normal_0_3_texcoord_0_3,
|
|
.elements_count = 3,
|
|
},
|
|
};
|
|
|
|
descriptor const descriptor = {
|
|
.nodes = nodes,
|
|
.nodes_count = (sizeof (nodes)) / (sizeof (nodes[0])),
|
|
|
|
.inputs_list = inputs_list,
|
|
.inputs_list_count = (sizeof (inputs_list)) / (sizeof (inputs_list[0])),
|
|
};
|
|
|
|
}
|