Program: 99124
Project: 99124
Buggy source:
private void drawTerrain(int program,Terrain terrain){
  tempTransformMatrix.setIdentity();
  tempTransformMatrix.setTranslation(terrain.localTranslation);
  Matrix4 transformMatrix=Matrix4.multiply(modelViewMatrix,tempTransformMatrix);
  Matrix3.createNormalMatrix(tempNormalMatrix,tempMV);
  float[] tm=new float[16];
  projectionMatrix.copyTo(tm);
  GLES20.glUniformMatrix4fv(GLES20.glGetUniformLocation(program,"String_Node_Str"),1,false,tm,0);
  transformMatrix.copyTo(tm);
  GLES20.glUniformMatrix4fv(GLES20.glGetUniformLocation(program,"String_Node_Str"),1,false,tm,0);
  tempNormalMatrix.copyTo(tm);
  GLES20.glUniformMatrix3fv(GLES20.glGetUniformLocation(program,"String_Node_Str"),1,false,tm,0);
  int vh=GLES20.glGetAttribLocation(program,"String_Node_Str");
  GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER,Terrain.getTerrainBuffer(0));
  GLES20.glEnableVertexAttribArray(vh);
  GLES20.glVertexAttribPointer(vh,2,GLES20.GL_FLOAT,false,0,0);
  GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
  GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,terrain.getBaseTexture().getTextureBuffer());
  GLES20.glUniform1i(GLES20.glGetUniformLocation(program,"String_Node_Str"),0);
  GLES20.glActiveTexture(GLES20.GL_TEXTURE1);
  GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,terrain.getHeightmap().getTextureBuffer());
  GLES20.glUniform1i(GLES20.glGetUniformLocation(program,"String_Node_Str"),1);
  GLES20.glActiveTexture(GLES20.GL_TEXTURE2);
  GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,terrain.getNormalmap().getTextureBuffer());
  GLES20.glUniform1i(GLES20.glGetUniformLocation(program,"String_Node_Str"),2);
  GLES20.glUniform3f(GLES20.glGetUniformLocation(program,"String_Node_Str"),terrain.getTerrainMaxHeight(),Plane.getInstance().getSegment(),terrain.getTerrainScale());
  GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER,Terrain.getTerrainBuffer(1));
  GLES20.glDrawElements(GLES20.GL_TRIANGLES,Plane.getInstance().getIndicesCount(),GLES20.GL_UNSIGNED_INT,0);
  GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER,0);
  GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER,0);
  GLES20.glDisableVertexAttribArray(vh);
}

Fixed version (ground truth):
private void drawTerrain(int program,Terrain terrain){
  tempTransformMatrix.setIdentity();
  tempTransformMatrix.setTranslation(terrain.localTranslation);
  Matrix4 transformMatrix=Matrix4.multiply(modelViewMatrix,tempTransformMatrix);
  Matrix3.createNormalMatrix(tempNormalMatrix,tempMV);
  GLES20.glUseProgram(program);
  ArrayList<Light> ls=new ArrayList<Light>();
  ls.addAll(lights);
  setLightUniform(program,ls);
  float[] tm=new float[16];
  projectionMatrix.copyTo(tm);
  GLES20.glUniformMatrix4fv(GLES20.glGetUniformLocation(program,"String_Node_Str"),1,false,tm,0);
  float[] tm1=new float[16];
  transformMatrix.copyTo(tm1);
  GLES20.glUniformMatrix4fv(GLES20.glGetUniformLocation(program,"String_Node_Str"),1,false,tm1,0);
  float[] tm2=new float[9];
  tempNormalMatrix.copyTo(tm2);
  GLES20.glUniformMatrix3fv(GLES20.glGetUniformLocation(program,"String_Node_Str"),1,false,tm2,0);
  int vh=GLES20.glGetAttribLocation(program,"String_Node_Str");
  GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER,Terrain.getTerrainBuffer(0));
  GLES20.glEnableVertexAttribArray(vh);
  GLES20.glVertexAttribPointer(vh,2,GLES20.GL_FLOAT,false,0,0);
  GLES20.glEnable(GLES20.GL_TEXTURE_2D);
  GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
  GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,terrain.getBaseTexture().getTextureBuffer());
  GLES20.glUniform1i(GLES20.glGetUniformLocation(program,"String_Node_Str"),0);
  GLES20.glActiveTexture(GLES20.GL_TEXTURE1);
  GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,terrain.getNormalmap().getTextureBuffer());
  GLES20.glUniform1i(GLES20.glGetUniformLocation(program,"String_Node_Str"),1);
  GLES20.glActiveTexture(GLES20.GL_TEXTURE2);
  GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,terrain.getHeightmap().getTextureBuffer());
  GLES20.glUniform1i(GLES20.glGetUniformLocation(program,"String_Node_Str"),2);
  GLES20.glUniform3f(GLES20.glGetUniformLocation(program,"String_Node_Str"),terrain.getTerrainMaxHeight(),Plane.getInstance().getSegment(),terrain.getTerrainScale());
  GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER,Terrain.getTerrainBuffer(1));
  GLES20.glDrawElements(GLES20.GL_TRIANGLES,Plane.getInstance().getIndicesCount(),GLES20.GL_UNSIGNED_INT,0);
  GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER,0);
  GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER,0);
  GLES20.glDisableVertexAttribArray(vh);
}