Forced Backgrounds fragments depth to maximum (1)

Former-commit-id: 98af132b7cc61469af752d1210dfb03e0c9b63ec
This commit is contained in:
Lynix 2013-09-06 18:31:04 +02:00
parent f9363ca764
commit c1dc2884b0
9 changed files with 49 additions and 19 deletions

View File

@ -240,6 +240,7 @@ enum nzShaderUniform
nzShaderUniform_ProjMatrix, nzShaderUniform_ProjMatrix,
nzShaderUniform_SceneAmbient, nzShaderUniform_SceneAmbient,
nzShaderUniform_TargetSize, nzShaderUniform_TargetSize,
nzShaderUniform_VertexDepth,
nzShaderUniform_ViewMatrix, nzShaderUniform_ViewMatrix,
nzShaderUniform_ViewProjMatrix, nzShaderUniform_ViewProjMatrix,
nzShaderUniform_WorldMatrix, nzShaderUniform_WorldMatrix,

View File

@ -13,7 +13,11 @@ namespace
NzRenderStates BuildRenderStates() NzRenderStates BuildRenderStates()
{ {
NzRenderStates states; NzRenderStates states;
states.parameters[nzRendererParameter_DepthBuffer] = false; states.depthFunc = nzRendererComparison_Equal;
states.faceCulling = nzFaceSide_Front;
states.parameters[nzRendererParameter_DepthBuffer] = true;
states.parameters[nzRendererParameter_DepthWrite] = false;
states.parameters[nzRendererParameter_FaceCulling] = true;
return states; return states;
} }
@ -30,6 +34,8 @@ m_color(color)
params.fullscreenQuad.diffuseMapping = false; params.fullscreenQuad.diffuseMapping = false;
m_program = NzShaderProgramManager::Get(params); m_program = NzShaderProgramManager::Get(params);
m_program->SendColor(m_program->GetUniformLocation(nzShaderUniform_MaterialDiffuse), m_color);
m_program->SendFloat(m_program->GetUniformLocation(nzShaderUniform_VertexDepth), 1.f);
} }
void NzColorBackground::Draw(const NzScene* scene) const void NzColorBackground::Draw(const NzScene* scene) const
@ -38,8 +44,6 @@ void NzColorBackground::Draw(const NzScene* scene) const
static NzRenderStates states(BuildRenderStates()); static NzRenderStates states(BuildRenderStates());
m_program->SendColor(m_program->GetUniformLocation(nzShaderUniform_MaterialDiffuse), m_color);
NzRenderer::SetRenderStates(states); NzRenderer::SetRenderStates(states);
NzRenderer::SetShaderProgram(m_program); NzRenderer::SetShaderProgram(m_program);
@ -59,5 +63,6 @@ NzColor NzColorBackground::GetColor() const
void NzColorBackground::SetColor(const NzColor& color) void NzColorBackground::SetColor(const NzColor& color)
{ {
m_color = color; m_color = color;
m_program->SendColor(m_program->GetUniformLocation(nzShaderUniform_MaterialDiffuse), m_color);
} }

View File

@ -47,28 +47,43 @@ namespace
{ {
const char* fragmentSource110 = const char* fragmentSource110 =
"#version 110\n" "#version 110\n"
"varying vec3 vTexCoord;\n" "varying vec3 vTexCoord;\n"
"uniform samplerCube Skybox;\n" "uniform samplerCube Skybox;\n"
"uniform float VertexDepth;\n"
"void main()\n" "void main()\n"
"{\n" "{\n"
" gl_FragColor = textureCube(Skybox, vTexCoord);\n" " gl_FragColor = textureCube(Skybox, vTexCoord);\n"
" gl_FragDepth = VertexDepth;\n"
"}\n"; "}\n";
const char* fragmentSource140 = const char* fragmentSource140 =
"#version 140\n" "#version 140\n"
"in vec3 vTexCoord;\n" "in vec3 vTexCoord;\n"
"out vec4 RenderTarget0;\n" "out vec4 RenderTarget0;\n"
"uniform samplerCube Skybox;\n" "uniform samplerCube Skybox;\n"
"uniform float VertexDepth;\n"
"void main()\n" "void main()\n"
"{\n" "{\n"
" RenderTarget0 = texture(Skybox, vTexCoord);\n" " RenderTarget0 = texture(Skybox, vTexCoord);\n"
" gl_FragDepth = VertexDepth;\n"
"}\n"; "}\n";
const char* vertexSource110 = const char* vertexSource110 =
"#version 110\n" "#version 110\n"
"attribute vec3 VertexPosition;\n" "attribute vec3 VertexPosition;\n"
"varying vec3 vTexCoord;\n" "varying vec3 vTexCoord;\n"
"uniform mat4 WorldViewProjMatrix;\n" "uniform mat4 WorldViewProjMatrix;\n"
"void main()\n" "void main()\n"
"{\n" "{\n"
" gl_Position = WorldViewProjMatrix * vec4(VertexPosition, 1.0);\n" " gl_Position = WorldViewProjMatrix * vec4(VertexPosition, 1.0);\n"
@ -77,9 +92,13 @@ namespace
const char* vertexSource140 = const char* vertexSource140 =
"#version 140\n" "#version 140\n"
"in vec3 VertexPosition;\n" "in vec3 VertexPosition;\n"
"out vec3 vTexCoord;\n" "out vec3 vTexCoord;\n"
"uniform mat4 WorldViewProjMatrix;\n" "uniform mat4 WorldViewProjMatrix;\n"
"void main()\n" "void main()\n"
"{\n" "{\n"
" gl_Position = WorldViewProjMatrix * vec4(VertexPosition, 1.0);\n" " gl_Position = WorldViewProjMatrix * vec4(VertexPosition, 1.0);\n"
@ -110,15 +129,19 @@ namespace
return nullptr; return nullptr;
} }
program->SendInteger(program->GetUniformLocation("Skybox"), 0);
return program.release(); return program.release();
} }
NzRenderStates BuildRenderStates() NzRenderStates BuildRenderStates()
{ {
NzRenderStates states; NzRenderStates states;
states.parameters[nzRendererParameter_DepthBuffer] = false; states.depthFunc = nzRendererComparison_Equal;
states.faceCulling = nzFaceSide_Front;
states.parameters[nzRendererParameter_DepthBuffer] = true;
states.parameters[nzRendererParameter_DepthWrite] = false;
states.parameters[nzRendererParameter_FaceCulling] = true; states.parameters[nzRendererParameter_FaceCulling] = true;
states.faceCulling = nzFaceCulling_Front;
return states; return states;
} }
@ -152,7 +175,6 @@ namespace
static NzIndexBuffer* s_indexBuffer = nullptr; static NzIndexBuffer* s_indexBuffer = nullptr;
static NzShaderProgram* s_program = nullptr; static NzShaderProgram* s_program = nullptr;
static NzVertexBuffer* s_vertexBuffer = nullptr; static NzVertexBuffer* s_vertexBuffer = nullptr;
static unsigned int s_skyboxLocation;
} }
NzSkyboxBackground::NzSkyboxBackground() NzSkyboxBackground::NzSkyboxBackground()
@ -161,10 +183,7 @@ NzSkyboxBackground::NzSkyboxBackground()
s_indexBuffer = BuildIndexBuffer(); s_indexBuffer = BuildIndexBuffer();
if (!s_program) if (!s_program)
{
s_program = BuildProgram(); s_program = BuildProgram();
s_skyboxLocation = s_program->GetUniformLocation("Skybox");
}
if (!s_vertexBuffer) if (!s_vertexBuffer)
s_vertexBuffer = BuildVertexBuffer(); s_vertexBuffer = BuildVertexBuffer();
@ -197,8 +216,6 @@ void NzSkyboxBackground::Draw(const NzScene* scene) const
{ {
static NzRenderStates states(BuildRenderStates()); static NzRenderStates states(BuildRenderStates());
s_program->SendInteger(s_skyboxLocation, 0);
NzAbstractViewer* viewer = scene->GetViewer(); NzAbstractViewer* viewer = scene->GetViewer();
NzMatrix4f skyboxMatrix(viewer->GetViewMatrix()); NzMatrix4f skyboxMatrix(viewer->GetViewMatrix());

View File

@ -13,7 +13,11 @@ namespace
NzRenderStates BuildRenderStates() NzRenderStates BuildRenderStates()
{ {
NzRenderStates states; NzRenderStates states;
states.parameters[nzRendererParameter_DepthBuffer] = false; states.depthFunc = nzRendererComparison_Equal;
states.faceCulling = nzFaceSide_Front;
states.parameters[nzRendererParameter_DepthBuffer] = true;
states.parameters[nzRendererParameter_DepthWrite] = false;
states.parameters[nzRendererParameter_FaceCulling] = true;
return states; return states;
} }
@ -29,6 +33,9 @@ NzTextureBackground::NzTextureBackground()
params.fullscreenQuad.diffuseMapping = true; params.fullscreenQuad.diffuseMapping = true;
m_program = NzShaderProgramManager::Get(params); m_program = NzShaderProgramManager::Get(params);
m_program->SendColor(m_program->GetUniformLocation(nzShaderUniform_MaterialDiffuse), NzColor::White);
m_program->SendFloat(m_program->GetUniformLocation(nzShaderUniform_VertexDepth), 1.f);
m_program->SendInteger(m_program->GetUniformLocation(nzShaderUniform_MaterialDiffuseMap), 0);
} }
NzTextureBackground::NzTextureBackground(NzTexture* texture) : NzTextureBackground::NzTextureBackground(NzTexture* texture) :
@ -43,9 +50,6 @@ void NzTextureBackground::Draw(const NzScene* scene) const
static NzRenderStates states(BuildRenderStates()); static NzRenderStates states(BuildRenderStates());
m_program->SendColor(m_program->GetUniformLocation(nzShaderUniform_MaterialDiffuse), NzColor::White);
m_program->SendInteger(m_program->GetUniformLocation(nzShaderUniform_MaterialDiffuseMap), 0);
NzRenderer::SetRenderStates(states); NzRenderer::SetRenderStates(states);
NzRenderer::SetShaderProgram(m_program); NzRenderer::SetShaderProgram(m_program);
NzRenderer::SetTexture(0, m_texture); NzRenderer::SetTexture(0, m_texture);

View File

@ -627,6 +627,7 @@ bool NzGLSLProgram::PostLinkage()
CacheUniform(ProjMatrix); CacheUniform(ProjMatrix);
CacheUniform(SceneAmbient); CacheUniform(SceneAmbient);
CacheUniform(TargetSize); CacheUniform(TargetSize);
CacheUniform(VertexDepth);
CacheUniform(ViewMatrix); CacheUniform(ViewMatrix);
CacheUniform(ViewProjMatrix); CacheUniform(ViewProjMatrix);
CacheUniform(WorldMatrix); CacheUniform(WorldMatrix);

View File

@ -13,11 +13,12 @@ uniform sampler2D MaterialAlphaMap;
uniform float MaterialAlphaThreshold; uniform float MaterialAlphaThreshold;
uniform vec4 MaterialDiffuse; uniform vec4 MaterialDiffuse;
uniform sampler2D MaterialDiffuseMap; uniform sampler2D MaterialDiffuseMap;
uniform float VertexDepth;
/********************Fonctions********************/ /********************Fonctions********************/
void main() void main()
{ {
gl_Position = vec4(VertexPosition, 0.0, 1.0); gl_Position = vec4(VertexPosition, VertexDepth, 1.0);
#if ALPHA_MAPPING || DIFFUSE_MAPPING #if ALPHA_MAPPING || DIFFUSE_MAPPING
#if FLAG_FLIP_UVS #if FLAG_FLIP_UVS

View File

@ -1 +1 @@
35,105,102,32,70,76,65,71,95,68,69,70,69,82,82,69,68,10,9,35,101,114,114,111,114,32,68,101,102,101,114,114,101,100,32,83,104,97,100,105,110,103,32,110,101,101,100,115,32,99,111,114,101,32,112,114,111,102,105,108,101,10,35,101,110,100,105,102,10,10,47,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,69,110,116,114,97,110,116,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,47,10,118,97,114,121,105,110,103,32,118,101,99,50,32,86,101,114,116,101,120,80,111,115,105,116,105,111,110,59,10,10,47,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,83,111,114,116,97,110,116,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,47,10,118,97,114,121,105,110,103,32,118,101,99,50,32,118,84,101,120,67,111,111,114,100,59,10,10,47,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,85,110,105,102,111,114,109,101,115,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,47,10,117,110,105,102,111,114,109,32,115,97,109,112,108,101,114,50,68,32,77,97,116,101,114,105,97,108,65,108,112,104,97,77,97,112,59,10,117,110,105,102,111,114,109,32,102,108,111,97,116,32,77,97,116,101,114,105,97,108,65,108,112,104,97,84,104,114,101,115,104,111,108,100,59,10,117,110,105,102,111,114,109,32,118,101,99,52,32,77,97,116,101,114,105,97,108,68,105,102,102,117,115,101,59,10,117,110,105,102,111,114,109,32,115,97,109,112,108,101,114,50,68,32,77,97,116,101,114,105,97,108,68,105,102,102,117,115,101,77,97,112,59,10,10,47,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,70,111,110,99,116,105,111,110,115,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,47,10,118,111,105,100,32,109,97,105,110,40,41,10,123,10,9,103,108,95,80,111,115,105,116,105,111,110,32,61,32,118,101,99,52,40,86,101,114,116,101,120,80,111,115,105,116,105,111,110,44,32,48,46,48,44,32,49,46,48,41,59,10,10,35,105,102,32,65,76,80,72,65,95,77,65,80,80,73,78,71,32,124,124,32,68,73,70,70,85,83,69,95,77,65,80,80,73,78,71,10,9,35,105,102,32,70,76,65,71,95,70,76,73,80,95,85,86,83,10,9,118,84,101,120,67,111,111,114,100,32,61,32,118,101,99,50,40,40,86,101,114,116,101,120,80,111,115,105,116,105,111,110,46,120,32,43,32,49,46,48,41,42,48,46,53,44,32,48,46,53,32,45,32,86,101,114,116,101,120,80,111,115,105,116,105,111,110,46,121,42,48,46,53,59,10,9,35,101,108,115,101,10,9,118,84,101,120,67,111,111,114,100,32,61,32,118,101,99,50,40,40,86,101,114,116,101,120,80,111,115,105,116,105,111,110,46,120,32,43,32,49,46,48,41,42,48,46,53,44,32,40,86,101,114,116,101,120,80,111,115,105,116,105,111,110,46,121,32,43,32,49,46,48,41,42,48,46,53,41,59,10,9,35,101,110,100,105,102,32,47,47,32,70,76,65,71,95,70,76,73,80,95,85,86,83,10,35,101,110,100,105,102,10,125,10, 35,105,102,32,70,76,65,71,95,68,69,70,69,82,82,69,68,10,9,35,101,114,114,111,114,32,68,101,102,101,114,114,101,100,32,83,104,97,100,105,110,103,32,110,101,101,100,115,32,99,111,114,101,32,112,114,111,102,105,108,101,10,35,101,110,100,105,102,10,10,47,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,69,110,116,114,97,110,116,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,47,10,118,97,114,121,105,110,103,32,118,101,99,50,32,86,101,114,116,101,120,80,111,115,105,116,105,111,110,59,10,10,47,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,83,111,114,116,97,110,116,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,47,10,118,97,114,121,105,110,103,32,118,101,99,50,32,118,84,101,120,67,111,111,114,100,59,10,10,47,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,85,110,105,102,111,114,109,101,115,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,47,10,117,110,105,102,111,114,109,32,115,97,109,112,108,101,114,50,68,32,77,97,116,101,114,105,97,108,65,108,112,104,97,77,97,112,59,10,117,110,105,102,111,114,109,32,102,108,111,97,116,32,77,97,116,101,114,105,97,108,65,108,112,104,97,84,104,114,101,115,104,111,108,100,59,10,117,110,105,102,111,114,109,32,118,101,99,52,32,77,97,116,101,114,105,97,108,68,105,102,102,117,115,101,59,10,117,110,105,102,111,114,109,32,115,97,109,112,108,101,114,50,68,32,77,97,116,101,114,105,97,108,68,105,102,102,117,115,101,77,97,112,59,10,117,110,105,102,111,114,109,32,102,108,111,97,116,32,86,101,114,116,101,120,68,101,112,116,104,59,10,10,47,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,70,111,110,99,116,105,111,110,115,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,47,10,118,111,105,100,32,109,97,105,110,40,41,10,123,10,9,103,108,95,80,111,115,105,116,105,111,110,32,61,32,118,101,99,52,40,86,101,114,116,101,120,80,111,115,105,116,105,111,110,44,32,86,101,114,116,101,120,68,101,112,116,104,44,32,49,46,48,41,59,10,10,35,105,102,32,65,76,80,72,65,95,77,65,80,80,73,78,71,32,124,124,32,68,73,70,70,85,83,69,95,77,65,80,80,73,78,71,10,9,35,105,102,32,70,76,65,71,95,70,76,73,80,95,85,86,83,10,9,118,84,101,120,67,111,111,114,100,32,61,32,118,101,99,50,40,40,86,101,114,116,101,120,80,111,115,105,116,105,111,110,46,120,32,43,32,49,46,48,41,42,48,46,53,44,32,48,46,53,32,45,32,86,101,114,116,101,120,80,111,115,105,116,105,111,110,46,121,42,48,46,53,59,10,9,35,101,108,115,101,10,9,118,84,101,120,67,111,111,114,100,32,61,32,118,101,99,50,40,40,86,101,114,116,101,120,80,111,115,105,116,105,111,110,46,120,32,43,32,49,46,48,41,42,48,46,53,44,32,40,86,101,114,116,101,120,80,111,115,105,116,105,111,110,46,121,32,43,32,49,46,48,41,42,48,46,53,41,59,10,9,35,101,110,100,105,102,32,47,47,32,70,76,65,71,95,70,76,73,80,95,85,86,83,10,35,101,110,100,105,102,10,125,10,

View File

@ -13,11 +13,12 @@ uniform sampler2D MaterialAlphaMap;
uniform float MaterialAlphaThreshold; uniform float MaterialAlphaThreshold;
uniform vec4 MaterialDiffuse; uniform vec4 MaterialDiffuse;
uniform sampler2D MaterialDiffuseMap; uniform sampler2D MaterialDiffuseMap;
uniform float VertexDepth;
/********************Fonctions********************/ /********************Fonctions********************/
void main() void main()
{ {
gl_Position = vec4(VertexPosition, 0.0, 1.0); gl_Position = vec4(VertexPosition, VertexDepth, 1.0);
#if ALPHA_MAPPING || DIFFUSE_MAPPING #if ALPHA_MAPPING || DIFFUSE_MAPPING
#if FLAG_FLIP_UVS #if FLAG_FLIP_UVS

View File

@ -1 +1 @@
35,105,102,32,70,76,65,71,95,68,69,70,69,82,82,69,68,10,9,35,101,114,114,111,114,32,68,101,102,101,114,114,101,100,32,83,104,97,100,105,110,103,32,110,101,101,100,115,32,99,111,114,101,32,112,114,111,102,105,108,101,10,35,101,110,100,105,102,10,10,47,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,69,110,116,114,97,110,116,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,47,10,105,110,32,118,101,99,50,32,86,101,114,116,101,120,80,111,115,105,116,105,111,110,59,10,10,47,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,83,111,114,116,97,110,116,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,47,10,111,117,116,32,118,101,99,50,32,118,84,101,120,67,111,111,114,100,59,10,10,47,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,85,110,105,102,111,114,109,101,115,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,47,10,117,110,105,102,111,114,109,32,115,97,109,112,108,101,114,50,68,32,77,97,116,101,114,105,97,108,65,108,112,104,97,77,97,112,59,10,117,110,105,102,111,114,109,32,102,108,111,97,116,32,77,97,116,101,114,105,97,108,65,108,112,104,97,84,104,114,101,115,104,111,108,100,59,10,117,110,105,102,111,114,109,32,118,101,99,52,32,77,97,116,101,114,105,97,108,68,105,102,102,117,115,101,59,10,117,110,105,102,111,114,109,32,115,97,109,112,108,101,114,50,68,32,77,97,116,101,114,105,97,108,68,105,102,102,117,115,101,77,97,112,59,10,10,47,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,70,111,110,99,116,105,111,110,115,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,47,10,118,111,105,100,32,109,97,105,110,40,41,10,123,10,9,103,108,95,80,111,115,105,116,105,111,110,32,61,32,118,101,99,52,40,86,101,114,116,101,120,80,111,115,105,116,105,111,110,44,32,48,46,48,44,32,49,46,48,41,59,10,10,35,105,102,32,65,76,80,72,65,95,77,65,80,80,73,78,71,32,124,124,32,68,73,70,70,85,83,69,95,77,65,80,80,73,78,71,10,9,35,105,102,32,70,76,65,71,95,70,76,73,80,95,85,86,83,10,9,118,84,101,120,67,111,111,114,100,32,61,32,118,101,99,50,40,40,86,101,114,116,101,120,80,111,115,105,116,105,111,110,46,120,32,43,32,49,46,48,41,42,48,46,53,44,32,48,46,53,32,45,32,86,101,114,116,101,120,80,111,115,105,116,105,111,110,46,121,42,48,46,53,59,10,9,35,101,108,115,101,10,9,118,84,101,120,67,111,111,114,100,32,61,32,118,101,99,50,40,40,86,101,114,116,101,120,80,111,115,105,116,105,111,110,46,120,32,43,32,49,46,48,41,42,48,46,53,44,32,40,86,101,114,116,101,120,80,111,115,105,116,105,111,110,46,121,32,43,32,49,46,48,41,42,48,46,53,41,59,10,9,35,101,110,100,105,102,32,47,47,32,70,76,65,71,95,70,76,73,80,95,85,86,83,10,35,101,110,100,105,102,10,125,10, 35,105,102,32,70,76,65,71,95,68,69,70,69,82,82,69,68,10,9,35,101,114,114,111,114,32,68,101,102,101,114,114,101,100,32,83,104,97,100,105,110,103,32,110,101,101,100,115,32,99,111,114,101,32,112,114,111,102,105,108,101,10,35,101,110,100,105,102,10,10,47,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,69,110,116,114,97,110,116,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,47,10,105,110,32,118,101,99,50,32,86,101,114,116,101,120,80,111,115,105,116,105,111,110,59,10,10,47,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,83,111,114,116,97,110,116,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,47,10,111,117,116,32,118,101,99,50,32,118,84,101,120,67,111,111,114,100,59,10,10,47,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,85,110,105,102,111,114,109,101,115,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,47,10,117,110,105,102,111,114,109,32,115,97,109,112,108,101,114,50,68,32,77,97,116,101,114,105,97,108,65,108,112,104,97,77,97,112,59,10,117,110,105,102,111,114,109,32,102,108,111,97,116,32,77,97,116,101,114,105,97,108,65,108,112,104,97,84,104,114,101,115,104,111,108,100,59,10,117,110,105,102,111,114,109,32,118,101,99,52,32,77,97,116,101,114,105,97,108,68,105,102,102,117,115,101,59,10,117,110,105,102,111,114,109,32,115,97,109,112,108,101,114,50,68,32,77,97,116,101,114,105,97,108,68,105,102,102,117,115,101,77,97,112,59,10,117,110,105,102,111,114,109,32,102,108,111,97,116,32,86,101,114,116,101,120,68,101,112,116,104,59,10,10,47,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,70,111,110,99,116,105,111,110,115,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,47,10,118,111,105,100,32,109,97,105,110,40,41,10,123,10,9,103,108,95,80,111,115,105,116,105,111,110,32,61,32,118,101,99,52,40,86,101,114,116,101,120,80,111,115,105,116,105,111,110,44,32,86,101,114,116,101,120,68,101,112,116,104,44,32,49,46,48,41,59,10,10,35,105,102,32,65,76,80,72,65,95,77,65,80,80,73,78,71,32,124,124,32,68,73,70,70,85,83,69,95,77,65,80,80,73,78,71,10,9,35,105,102,32,70,76,65,71,95,70,76,73,80,95,85,86,83,10,9,118,84,101,120,67,111,111,114,100,32,61,32,118,101,99,50,40,40,86,101,114,116,101,120,80,111,115,105,116,105,111,110,46,120,32,43,32,49,46,48,41,42,48,46,53,44,32,48,46,53,32,45,32,86,101,114,116,101,120,80,111,115,105,116,105,111,110,46,121,42,48,46,53,59,10,9,35,101,108,115,101,10,9,118,84,101,120,67,111,111,114,100,32,61,32,118,101,99,50,40,40,86,101,114,116,101,120,80,111,115,105,116,105,111,110,46,120,32,43,32,49,46,48,41,42,48,46,53,44,32,40,86,101,114,116,101,120,80,111,115,105,116,105,111,110,46,121,32,43,32,49,46,48,41,42,48,46,53,41,59,10,9,35,101,110,100,105,102,32,47,47,32,70,76,65,71,95,70,76,73,80,95,85,86,83,10,35,101,110,100,105,102,10,125,10,