diff --git a/.gitattributes b/.gitattributes
index a6344aac8c09253b3b630fb776ae94478aa0275b..b4b429ead06dc36295bceef650284dc8ed8b48f8 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -33,3 +33,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text
*tfevents* filter=lfs diff=lfs merge=lfs -text
+output.nnue filter=lfs diff=lfs merge=lfs -text
+small_output.nnue filter=lfs diff=lfs merge=lfs -text
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..ec38509e3d2eb2411e6bb66336e82a99fac26c5a
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,79 @@
+# Use Python 3.12 slim
+FROM python:3.12-slim
+
+# Install system dependencies
+RUN apt-get update && apt-get install -y \
+ build-essential \
+ make \
+ g++ \
+ wget \
+ curl \
+ xz-utils \
+ findutils \
+ && rm -rf /var/lib/apt/lists/*
+
+# Set working directory
+WORKDIR /app
+
+# Copy ALL files from the repository
+COPY . .
+
+# ============================================================
+# CUSTOM DEEPCASTLE ENGINE BUILD
+# Supports both repo layouts:
+# 1) /app/engine/src (full repo)
+# 2) /app/src (HF minimal repo)
+# ============================================================
+RUN if [ -d /app/engine/src ]; then BUILD_DIR=/app/engine/src; \
+ elif [ -d /app/src ]; then BUILD_DIR=/app/src; \
+ else echo "Engine source dir not found"; exit 1; fi && \
+ cd "$BUILD_DIR" && \
+ wget -q -O nn-9a0cc2a62c52.nnue https://tests.stockfishchess.org/api/nn/nn-9a0cc2a62c52.nnue && \
+ wget -q -O nn-47fc8b7fff06.nnue https://tests.stockfishchess.org/api/nn/nn-47fc8b7fff06.nnue && \
+ if [ ! -f ../scripts/net.sh ]; then \
+ mkdir -p ../scripts; \
+ printf '#!/bin/sh\n# HF minimal layout fallback: skip default net fetch\nexit 0\n' > ../scripts/net.sh; \
+ chmod +x ../scripts/net.sh; \
+ fi && \
+ make -j2 build ARCH=x86-64 && \
+ mkdir -p /app/engine_bin && \
+ cp stockfish /app/engine_bin/deepcastle && \
+ chmod +x /app/engine_bin/deepcastle
+
+# ============================================================
+# LAUNCHER PREPARATION
+# ============================================================
+WORKDIR /app
+RUN LAUNCHER_PATH=$(find /app -name "main.py" | head -n 1) && \
+ cp "$LAUNCHER_PATH" /app/launcher.py
+
+# ============================================================
+# BRAIN PLACEMENT
+# ============================================================
+# Map your custom brains for the server
+RUN if [ -f /app/output.nnue ]; then cp /app/output.nnue /app/engine_bin/output.nnue; fi && \
+ if [ -f /app/small_output.nnue ]; then cp /app/small_output.nnue /app/engine_bin/small_output.nnue; fi
+
+# Force permissions
+RUN chmod -R 777 /app/engine_bin
+
+# ============================================================
+# BACKEND SETUP
+# ============================================================
+RUN if [ -f /app/server/requirements.txt ]; then \
+ pip install --no-cache-dir -r /app/server/requirements.txt; \
+ else \
+ pip install --no-cache-dir fastapi "uvicorn[standard]" websockets python-chess pydantic psutil; \
+ fi
+
+# Explicit Paths
+ENV ENGINE_PATH=/app/engine_bin/deepcastle
+ENV DEEPCASTLE_ENGINE_PATH=/app/engine_bin/deepcastle
+ENV NNUE_PATH=/app/engine_bin/output.nnue
+ENV NNUE_SMALL_PATH=/app/engine_bin/small_output.nnue
+ENV PYTHONPATH="/app:/app/server"
+
+EXPOSE 7860
+
+# START
+CMD ["python3", "/app/launcher.py"]
\ No newline at end of file
diff --git a/main.py b/main.py
new file mode 100644
index 0000000000000000000000000000000000000000..2b2a47c23496149d6af432827f4e7dc4ac6e267d
--- /dev/null
+++ b/main.py
@@ -0,0 +1,949 @@
+from fastapi import FastAPI, HTTPException, WebSocket, WebSocketDisconnect, Request
+from fastapi.middleware.cors import CORSMiddleware
+from fastapi.responses import JSONResponse
+from pydantic import BaseModel
+from typing import Optional, List, Dict, Tuple
+from contextlib import asynccontextmanager
+import os
+import math
+import chess
+import chess.engine
+import asyncio
+import json
+import gc
+import ctypes
+import psutil
+
+# ─── Force memory back to OS (Linux/HF compatible) ────────────────────────────
+def force_memory_release():
+ """
+ Run GC twice (catches cyclic references missed on first pass),
+ then call malloc_trim to return freed pages back to the OS.
+ Without this, Python holds freed memory in its own pool and
+ the OS still shows high RAM even after objects are deleted.
+ """
+ gc.collect()
+ gc.collect()
+ try:
+ ctypes.CDLL("libc.so.6").malloc_trim(0)
+ except Exception:
+ pass
+
+
+# ─── Multiplayer / Challenge Manager ──────────────────────────────────────────
+class ConnectionManager:
+ def __init__(self):
+ self.active_connections: Dict[str, List[WebSocket]] = {}
+
+ async def connect(self, websocket: WebSocket, match_id: str):
+ await websocket.accept()
+ if match_id not in self.active_connections:
+ self.active_connections[match_id] = []
+ self.active_connections[match_id].append(websocket)
+
+ def disconnect(self, websocket: WebSocket, match_id: str):
+ if match_id in self.active_connections:
+ if websocket in self.active_connections[match_id]:
+ self.active_connections[match_id].remove(websocket)
+ # FIX: Clean up empty rooms so dict doesn't grow forever
+ if not self.active_connections[match_id]:
+ del self.active_connections[match_id]
+
+ async def broadcast(self, message: str, match_id: str, exclude: WebSocket = None):
+ if match_id not in self.active_connections:
+ return
+ dead = []
+ for connection in self.active_connections[match_id]:
+ if connection == exclude:
+ continue
+ try:
+ await connection.send_text(message)
+ except Exception:
+ # FIX: Track dead sockets instead of silently ignoring them
+ dead.append(connection)
+ # FIX: Remove dead sockets after iteration to free memory
+ for d in dead:
+ self.active_connections[match_id].remove(d)
+ # FIX: Clean up empty room after removing dead sockets
+ if match_id in self.active_connections and not self.active_connections[match_id]:
+ del self.active_connections[match_id]
+
+manager = ConnectionManager()
+
+# Paths relative to the Docker container
+DEEPCASTLE_ENGINE_PATH = os.environ.get(
+ "DEEPCASTLE_ENGINE_PATH",
+ os.environ.get("ENGINE_PATH", "/app/engine_bin/deepcastle"),
+)
+NNUE_PATH = os.environ.get("NNUE_PATH", "/app/engine_bin/output.nnue")
+NNUE_SMALL_PATH = os.environ.get("NNUE_SMALL_PATH", "/app/engine_bin/small_output.nnue")
+
+
+class MoveRequest(BaseModel):
+ fen: str
+ time: float = 1.0
+ depth: Optional[int] = None
+
+class MoveResponse(BaseModel):
+ bestmove: str
+ score: float
+ depth: int
+ nodes: int
+ nps: int
+ pv: str
+ mate_in: Optional[int] = None
+ opening: Optional[str] = None
+
+class AnalyzeRequest(BaseModel):
+ moves: List[str]
+ time_per_move: float = 0.1
+ player_color: str = "white"
+ start_fen: Optional[str] = None
+
+class MoveAnalysis(BaseModel):
+ move_num: int
+ san: str
+ best_move: str
+ classification: str
+ opening: Optional[str] = None
+ cpl: float
+ score_before: float
+ score_after: float
+
+class AnalyzeResponse(BaseModel):
+ accuracy: float
+ estimated_elo: int
+ moves: List[MoveAnalysis]
+ counts: Dict[str, int]
+
+
+# Global engine instance
+_GLOBAL_DEEPCASTLE_ENGINE = None
+_ENGINE_LOCK = asyncio.Lock()
+_ENGINE_IO_LOCK = asyncio.Lock()
+
+
+def _engine_hash_mb() -> int:
+ try:
+ # Default used for transposition table size testing.
+ v = int(os.environ.get("ENGINE_HASH_MB", "512"))
+ except ValueError:
+ v = 128
+ return max(8, min(2048, v))
+
+
+async def _get_or_start_engine(engine_path: str, *, role: str, options: Optional[dict] = None):
+ global _GLOBAL_DEEPCASTLE_ENGINE
+
+ current_engine = _GLOBAL_DEEPCASTLE_ENGINE
+ if current_engine is not None:
+ try:
+ if not current_engine.is_terminated():
+ return current_engine
+ except Exception:
+ _GLOBAL_DEEPCASTLE_ENGINE = None
+ else:
+ _GLOBAL_DEEPCASTLE_ENGINE = None
+
+ async with _ENGINE_LOCK:
+ current_engine = _GLOBAL_DEEPCASTLE_ENGINE
+ if current_engine is not None:
+ try:
+ if not current_engine.is_terminated():
+ return current_engine
+ except Exception:
+ _GLOBAL_DEEPCASTLE_ENGINE = None
+ else:
+ _GLOBAL_DEEPCASTLE_ENGINE = None
+
+ if not os.path.exists(engine_path):
+ raise HTTPException(status_code=500, detail=f"{role} binary NOT FOUND at {engine_path}")
+
+ try:
+ _, engine = await chess.engine.popen_uci(engine_path)
+
+ if options:
+ await engine.configure(options)
+
+ if os.path.exists(NNUE_PATH):
+ try:
+ await engine.configure({"EvalFile": NNUE_PATH})
+ except Exception as ne:
+ print(f"[ERROR] EvalFile load failed: {str(ne)}")
+ else:
+ print(f"[WARNING] EvalFile not found at {NNUE_PATH}")
+
+ if os.path.exists(NNUE_SMALL_PATH):
+ try:
+ await engine.configure({"EvalFileSmall": NNUE_SMALL_PATH})
+ except Exception as ne:
+ print(f"[ERROR] EvalFileSmall load failed: {str(ne)}")
+ else:
+ print(f"[WARNING] EvalFileSmall not found at {NNUE_SMALL_PATH}")
+
+ _GLOBAL_DEEPCASTLE_ENGINE = engine
+ return engine
+ except Exception as e:
+ raise HTTPException(status_code=500, detail=f"{role} crash: {str(e)}")
+
+
+async def get_deepcastle_engine(hash_mb: Optional[int] = None):
+ h = hash_mb if hash_mb is not None else _engine_hash_mb()
+ return await _get_or_start_engine(
+ DEEPCASTLE_ENGINE_PATH,
+ role="deepcastle",
+ options={"Hash": h, "Threads": 1},
+ )
+
+async def get_stockfish_engine(hash_mb: Optional[int] = None):
+ return await get_deepcastle_engine(hash_mb=hash_mb)
+
+
+async def _clear_engine_hash(engine) -> None:
+ """Best-effort clear of transposition table/internal game state."""
+ try:
+ # Preferred path for Stockfish-family engines.
+ await engine.configure({"Clear Hash": True})
+ except Exception:
+ pass
+ try:
+ # Also reset game state so the engine does not keep game-history context.
+ if hasattr(engine, "protocol") and hasattr(engine.protocol, "send_line"):
+ engine.protocol.send_line("ucinewgame")
+ await asyncio.wait_for(engine.ping(), timeout=5.0)
+ except Exception as e:
+ print(f"[WARNING] Failed to clear engine hash: {e}")
+
+
+async def shutdown_engine_async() -> None:
+ global _GLOBAL_DEEPCASTLE_ENGINE
+ async with _ENGINE_IO_LOCK:
+ async with _ENGINE_LOCK:
+ eng = _GLOBAL_DEEPCASTLE_ENGINE
+ _GLOBAL_DEEPCASTLE_ENGINE = None
+ if eng:
+ try:
+ await asyncio.wait_for(eng.quit(), timeout=5.0)
+ except Exception:
+ pass
+
+
+async def _detach_and_quit_engine(engine) -> None:
+ global _GLOBAL_DEEPCASTLE_ENGINE
+ async with _ENGINE_LOCK:
+ if _GLOBAL_DEEPCASTLE_ENGINE is engine:
+ _GLOBAL_DEEPCASTLE_ENGINE = None
+ try:
+ await asyncio.wait_for(engine.quit(), timeout=5.0)
+ except Exception:
+ pass
+
+
+def _search_timeout_sec(request_time: float, depth: Optional[int] = None) -> float:
+ try:
+ cap = float(os.environ.get("ENGINE_SEARCH_TIMEOUT_SEC", "120"))
+ except ValueError:
+ cap = 120.0
+ cap = max(15.0, min(600.0, cap))
+ if request_time and request_time > 0:
+ return min(cap, max(request_time * 3.0 + 10.0, 30.0))
+ return cap
+
+
+def _analyze_ply_timeout(time_per_move: float) -> float:
+ try:
+ cap = float(os.environ.get("ENGINE_SEARCH_TIMEOUT_SEC", "120"))
+ except ValueError:
+ cap = 120.0
+ cap = max(15.0, min(600.0, cap))
+ if time_per_move and time_per_move > 0:
+ return min(cap, max(time_per_move * 80.0 + 15.0, 30.0))
+ return cap
+
+
+async def _engine_call(engine, coro, timeout_sec: float):
+ try:
+ return await asyncio.wait_for(coro, timeout=timeout_sec)
+ except asyncio.TimeoutError:
+ await _detach_and_quit_engine(engine)
+ raise HTTPException(status_code=504, detail="Engine search timed out")
+
+
+# ─── Background Memory Cleanup Task ───────────────────────────────────────────
+_RAM_CLEANUP_THRESHOLD_MB = float(os.environ.get("RAM_CLEANUP_THRESHOLD_MB", "300"))
+_RAM_CLEANUP_INTERVAL_SEC = int(os.environ.get("RAM_CLEANUP_INTERVAL_SEC", "60"))
+_CLEAR_HASH_AFTER_MOVE = os.environ.get("CLEAR_HASH_AFTER_MOVE", "1").strip().lower() not in {"0", "false", "no", "off"}
+_RESTART_ENGINE_AFTER_MOVE = os.environ.get("RESTART_ENGINE_AFTER_MOVE", "1").strip().lower() not in {"0", "false", "no", "off"}
+
+async def memory_cleanup_task():
+ """
+ Background task that runs every 5 minutes.
+ - Always runs GC twice and malloc_trim to return memory to OS.
+ - If RAM exceeds threshold, also clears engine hash table.
+ """
+ while True:
+ await asyncio.sleep(_RAM_CLEANUP_INTERVAL_SEC)
+ try:
+ process = psutil.Process(os.getpid())
+ mem_mb = process.memory_info().rss / 1024 / 1024
+
+ if mem_mb > _RAM_CLEANUP_THRESHOLD_MB:
+ print(f"[CLEANUP] RAM at {mem_mb:.1f}MB (threshold {_RAM_CLEANUP_THRESHOLD_MB}MB) — clearing engine hash")
+ engine = _GLOBAL_DEEPCASTLE_ENGINE
+ if engine is not None:
+ try:
+ if not engine.is_terminated():
+ async with _ENGINE_IO_LOCK:
+ await _clear_engine_hash(engine)
+ except Exception:
+ pass
+ force_memory_release()
+ after_mb = process.memory_info().rss / 1024 / 1024
+ print(f"[CLEANUP] Done. RAM: {mem_mb:.1f}MB → {after_mb:.1f}MB")
+ else:
+ # Always nudge GC + malloc_trim even when RAM is fine
+ force_memory_release()
+ print(f"[CLEANUP] RAM at {mem_mb:.1f}MB — OK")
+
+ except Exception as e:
+ print(f"[CLEANUP] Error during cleanup: {e}")
+
+
+@asynccontextmanager
+async def lifespan(app: FastAPI):
+ cleanup_task = asyncio.create_task(memory_cleanup_task())
+ print(f"[STARTUP] Memory cleanup task started (every {_RAM_CLEANUP_INTERVAL_SEC}s, threshold {_RAM_CLEANUP_THRESHOLD_MB}MB)")
+ print(
+ f"[STARTUP] Engine config: hash_mb={_engine_hash_mb()} "
+ f"clear_after_move={_CLEAR_HASH_AFTER_MOVE} restart_after_move={_RESTART_ENGINE_AFTER_MOVE}"
+ )
+ yield
+ cleanup_task.cancel()
+ try:
+ await cleanup_task
+ except asyncio.CancelledError:
+ pass
+ await shutdown_engine_async()
+
+
+app = FastAPI(title="Deepcastle Engine API", lifespan=lifespan)
+
+# FIX: Global timeout middleware — kills hung requests so they don't queue in memory
+@app.middleware("http")
+async def timeout_middleware(request: Request, call_next):
+ try:
+ return await asyncio.wait_for(call_next(request), timeout=180.0)
+ except asyncio.TimeoutError:
+ return JSONResponse({"detail": "Request timed out"}, status_code=504)
+
+app.add_middleware(
+ CORSMiddleware,
+ allow_origins=["*"],
+ allow_methods=["*"],
+ allow_headers=["*"],
+)
+
+
+# ─── WebSocket ─────────────────────────────────────────────────────────────────
+@app.websocket("/ws/{match_id}")
+async def websocket_endpoint(websocket: WebSocket, match_id: str):
+ await manager.connect(websocket, match_id)
+ await manager.broadcast(json.dumps({"type": "join"}), match_id, exclude=websocket)
+ try:
+ while True:
+ data = await websocket.receive_text()
+ await manager.broadcast(data, match_id, exclude=websocket)
+ except WebSocketDisconnect:
+ manager.disconnect(websocket, match_id)
+ await manager.broadcast(json.dumps({"type": "opponent_disconnected"}), match_id)
+ force_memory_release()
+ except Exception:
+ manager.disconnect(websocket, match_id)
+ await manager.broadcast(json.dumps({"type": "opponent_disconnected"}), match_id)
+ force_memory_release()
+
+
+# ─── Health & Monitoring ───────────────────────────────────────────────────────
+@app.get("/")
+def home():
+ return {"status": "online", "engine": "Deepcastle Hybrid Neural", "platform": "Hugging Face Spaces"}
+
+
+# FIX: Accept HEAD requests from UptimeRobot (was returning 405)
+@app.api_route("/health", methods=["GET", "HEAD"])
+def health():
+ if not os.path.exists(DEEPCASTLE_ENGINE_PATH):
+ return {"status": "error", "message": "Missing engine binary: deepcastle"}
+ force_memory_release()
+ return {"status": "ok", "engine": "deepcastle"}
+
+
+@app.get("/health/ready")
+async def health_ready():
+ if not os.path.exists(DEEPCASTLE_ENGINE_PATH):
+ raise HTTPException(status_code=503, detail="Missing engine binary")
+ try:
+ engine = await get_deepcastle_engine()
+ async with _ENGINE_IO_LOCK:
+ await asyncio.wait_for(engine.ping(), timeout=5.0)
+ return {"status": "ok", "engine": "responsive"}
+ except HTTPException:
+ raise
+ except Exception as e:
+ raise HTTPException(status_code=503, detail=str(e))
+
+
+@app.get("/ram")
+def ram_usage():
+ """Monitor RAM usage for API process + child engine processes."""
+ process = psutil.Process(os.getpid())
+ mem = process.memory_info()
+ mem_mb = mem.rss / 1024 / 1024
+ child_rss_mb = 0.0
+ child_count = 0
+ try:
+ for child in process.children(recursive=True):
+ try:
+ child_rss_mb += child.memory_info().rss / 1024 / 1024
+ child_count += 1
+ except Exception:
+ pass
+ except Exception:
+ pass
+ total_mb = mem_mb + child_rss_mb
+ return {
+ "rss_mb": round(mem_mb, 2),
+ "child_rss_mb": round(child_rss_mb, 2),
+ "total_process_tree_rss_mb": round(total_mb, 2),
+ "child_process_count": child_count,
+ "vms_mb": round(mem.vms / 1024 / 1024, 2),
+ "threshold_mb": _RAM_CLEANUP_THRESHOLD_MB,
+ "cleanup_interval_sec": _RAM_CLEANUP_INTERVAL_SEC,
+ "status": "high" if total_mb > _RAM_CLEANUP_THRESHOLD_MB else "ok",
+ "active_rooms": len(manager.active_connections),
+ "active_connections": sum(len(v) for v in manager.active_connections.values()),
+ }
+
+
+# FIX: Call from frontend on game start/end to clear engine hash
+@app.post("/new-game")
+async def new_game():
+ """
+ Clear engine hash table between games.
+ Call this from the frontend at these moments:
+ - When user starts a new game vs bot
+ - When game ends (checkmate / resign / draw)
+ - When multiplayer match starts
+ - When multiplayer match ends
+ """
+ try:
+ engine = await get_deepcastle_engine()
+ async with _ENGINE_IO_LOCK:
+ await _clear_engine_hash(engine)
+ force_memory_release()
+ return {"status": "ok", "message": "Engine hash cleared"}
+ except HTTPException:
+ raise
+ except Exception as e:
+ raise HTTPException(status_code=500, detail=str(e))
+
+
+# ─── Helpers ───────────────────────────────────────────────────────────────────
+def get_normalized_score(info) -> Tuple[float, Optional[int]]:
+ if "score" not in info:
+ return 0.0, None
+ raw = info["score"].white()
+ if raw.is_mate():
+ m = raw.mate() or 0
+ return (10000.0 if m > 0 else -10000.0), m
+ return float(raw.score() or 0.0), None
+
+
+def normalize_search_stats(info: dict) -> Tuple[int, int, int]:
+ depth = int(info.get("depth") or 0)
+ nodes = int(info.get("nodes") or 0)
+ t = info.get("time")
+ nps_raw = int(info.get("nps") or 0)
+ if t is not None and float(t) > 0 and nodes > 0:
+ nps = max(0, int(round(nodes / float(t))))
+ else:
+ nps = nps_raw
+ return depth, nodes, nps
+
+
+# ─── Bot Move (/move) ──────────────────────────────────────────────────────────
+@app.post("/move", response_model=MoveResponse)
+async def get_move(request: MoveRequest):
+ try:
+ engine = await get_deepcastle_engine()
+ board = chess.Board(request.fen)
+ limit = chess.engine.Limit(time=request.time, depth=request.depth)
+ tsec = _search_timeout_sec(request.time, request.depth)
+
+ async with _ENGINE_IO_LOCK:
+ result = await _engine_call(
+ engine,
+ engine.play(board, limit, info=chess.engine.INFO_ALL),
+ tsec,
+ )
+ info = dict(result.info)
+ if not info:
+ info = await _engine_call(
+ engine,
+ engine.analyse(board, limit, info=chess.engine.INFO_ALL),
+ tsec,
+ )
+
+ score_cp, mate_in = get_normalized_score(info)
+ depth, nodes, nps = normalize_search_stats(info)
+
+ pv_board = board.copy()
+ pv_parts = []
+ for m in info.get("pv", [])[:5]:
+ if m in pv_board.legal_moves:
+ try:
+ pv_parts.append(pv_board.san(m))
+ pv_board.push(m)
+ except Exception:
+ break
+ else:
+ break
+ pv = " ".join(pv_parts)
+ del pv_board
+
+ score_pawns = score_cp / 100.0 if abs(score_cp) < 9900 else (100.0 if score_cp > 0 else -100.0)
+ board_fen_only = board.fen().split(" ")[0]
+ opening_name = openings_db.get(board_fen_only)
+ best_move = result.move.uci()
+
+ response = MoveResponse(
+ bestmove=best_move,
+ score=score_pawns,
+ depth=depth,
+ nodes=nodes,
+ nps=nps,
+ pv=pv,
+ mate_in=mate_in,
+ opening=opening_name
+ )
+
+ # IMPORTANT: do reset/clear while holding the engine IO lock so no
+ # other /move call can reuse a half-cleared engine.
+ if _RESTART_ENGINE_AFTER_MOVE:
+ await _detach_and_quit_engine(engine)
+ force_memory_release()
+ elif _CLEAR_HASH_AFTER_MOVE:
+ await _clear_engine_hash(engine)
+ force_memory_release()
+
+ del result
+ del info
+ return response
+ except HTTPException:
+ raise
+ except Exception as e:
+ print(f"Error: {e}")
+ raise HTTPException(status_code=500, detail=str(e))
+
+
+# ─── Hint Move (/analysis-move) ───────────────────────────────────────────────
+@app.post("/analysis-move", response_model=MoveResponse)
+async def get_analysis_move(request: MoveRequest):
+ try:
+ engine = await get_stockfish_engine(hash_mb=2048)
+ board = chess.Board(request.fen)
+ limit = chess.engine.Limit(time=request.time, depth=request.depth)
+ tsec = _search_timeout_sec(request.time, request.depth)
+
+ async with _ENGINE_IO_LOCK:
+ result = await _engine_call(
+ engine,
+ engine.play(board, limit, info=chess.engine.INFO_ALL),
+ tsec,
+ )
+ info = dict(result.info)
+ if not info:
+ info = await _engine_call(
+ engine,
+ engine.analyse(board, limit, info=chess.engine.INFO_ALL),
+ tsec,
+ )
+
+ score_cp, mate_in = get_normalized_score(info)
+ depth, nodes, nps = normalize_search_stats(info)
+
+ pv_board = board.copy()
+ pv_parts = []
+ for m in info.get("pv", [])[:5]:
+ if m in pv_board.legal_moves:
+ try:
+ pv_parts.append(pv_board.san(m))
+ pv_board.push(m)
+ except Exception:
+ break
+ else:
+ break
+ pv = " ".join(pv_parts)
+ del pv_board
+
+ score_pawns = score_cp / 100.0 if abs(score_cp) < 9900 else (100.0 if score_cp > 0 else -100.0)
+ board_fen_only = board.fen().split(" ")[0]
+ opening_name = openings_db.get(board_fen_only)
+ best_move = result.move.uci()
+
+ del result
+ del info
+
+ # FIX: clear/restart engine to keep memory stable after hint
+ async with _ENGINE_IO_LOCK:
+ if _RESTART_ENGINE_AFTER_MOVE:
+ await _detach_and_quit_engine(engine)
+ elif _CLEAR_HASH_AFTER_MOVE:
+ await _clear_engine_hash(engine)
+ force_memory_release()
+
+ return MoveResponse(
+ bestmove=best_move,
+ score=score_pawns,
+ depth=depth,
+ nodes=nodes,
+ nps=nps,
+ pv=pv,
+ mate_in=mate_in,
+ opening=opening_name
+ )
+ except HTTPException:
+ raise
+ except Exception as e:
+ print(f"Analysis move error: {e}")
+ raise HTTPException(status_code=500, detail=str(e))
+
+
+# ─── Openings DB ───────────────────────────────────────────────────────────────
+openings_db = {}
+openings_path = os.path.join(os.path.dirname(__file__), "openings.json")
+if os.path.exists(openings_path):
+ try:
+ with open(openings_path, "r", encoding="utf-8") as f:
+ openings_db = json.load(f)
+ except Exception:
+ pass
+
+
+# ─── Move Classification Helpers ───────────────────────────────────────────────
+def get_win_percentage_from_cp(cp: int) -> float:
+ cp_ceiled = max(-1000, min(1000, cp))
+ MULTIPLIER = -0.00368208
+ win_chances = 2.0 / (1.0 + math.exp(MULTIPLIER * cp_ceiled)) - 1.0
+ return 50.0 + 50.0 * win_chances
+
+def get_win_percentage(info: dict) -> float:
+ score = info.get("score")
+ if not score:
+ return 50.0
+ white_score = score.white()
+ if white_score.is_mate():
+ mate_val = white_score.mate()
+ return 100.0 if mate_val > 0 else 0.0
+ return get_win_percentage_from_cp(white_score.score())
+
+def is_losing_or_alt_winning(pos_win_pct: float, alt_win_pct: float, is_white_move: bool) -> bool:
+ is_losing = pos_win_pct < 50.0 if is_white_move else pos_win_pct > 50.0
+ is_alt_winning = alt_win_pct > 97.0 if is_white_move else alt_win_pct < 3.0
+ return is_losing or is_alt_winning
+
+def get_has_changed_outcome(last_win_pct: float, pos_win_pct: float, is_white_move: bool) -> bool:
+ diff = (pos_win_pct - last_win_pct) * (1 if is_white_move else -1)
+ return diff > 10.0 and (
+ (last_win_pct < 50.0 and pos_win_pct > 50.0) or
+ (last_win_pct > 50.0 and pos_win_pct < 50.0)
+ )
+
+def get_is_only_good_move(pos_win_pct: float, alt_win_pct: float, is_white_move: bool) -> bool:
+ diff = (pos_win_pct - alt_win_pct) * (1 if is_white_move else -1)
+ return diff > 10.0
+
+def is_simple_recapture(fen_two_moves_ago: str, previous_move: chess.Move, played_move: chess.Move) -> bool:
+ if previous_move.to_square != played_move.to_square:
+ return False
+ b = chess.Board(fen_two_moves_ago)
+ result = b.piece_at(previous_move.to_square) is not None
+ del b
+ return result
+
+def get_material_difference(board: chess.Board) -> int:
+ values = {
+ chess.PAWN: 1, chess.KNIGHT: 3, chess.BISHOP: 3,
+ chess.ROOK: 5, chess.QUEEN: 9, chess.KING: 0
+ }
+ w = sum(values.get(p.piece_type, 0) for p in board.piece_map().values() if p.color == chess.WHITE)
+ b = sum(values.get(p.piece_type, 0) for p in board.piece_map().values() if p.color == chess.BLACK)
+ return w - b
+
+def get_is_piece_sacrifice(board: chess.Board, played_move: chess.Move, best_pv: list) -> bool:
+ if not best_pv:
+ return False
+ start_diff = get_material_difference(board)
+ white_to_play = board.turn == chess.WHITE
+
+ sim_board = board.copy()
+ moves = [played_move] + best_pv
+ if len(moves) % 2 == 1:
+ moves = moves[:-1]
+
+ captured_w = []
+ captured_b = []
+ non_capturing = 1
+
+ for m in moves:
+ if m in sim_board.legal_moves:
+ captured_piece = sim_board.piece_at(m.to_square)
+ if sim_board.is_en_passant(m):
+ captured_piece = chess.Piece(chess.PAWN, not sim_board.turn)
+ if captured_piece:
+ if sim_board.turn == chess.WHITE:
+ captured_b.append(captured_piece.piece_type)
+ else:
+ captured_w.append(captured_piece.piece_type)
+ non_capturing = 1
+ else:
+ non_capturing -= 1
+ if non_capturing < 0:
+ break
+ sim_board.push(m)
+ else:
+ break
+
+ for p in captured_w[:]:
+ if p in captured_b:
+ captured_w.remove(p)
+ captured_b.remove(p)
+
+ if abs(len(captured_w) - len(captured_b)) <= 1 and all(p == chess.PAWN for p in captured_w + captured_b):
+ del sim_board
+ return False
+
+ end_diff = get_material_difference(sim_board)
+ del sim_board
+ mat_diff = end_diff - start_diff
+ player_rel = mat_diff if white_to_play else -mat_diff
+ return player_rel < 0
+
+def get_move_classification(
+ last_win_pct: float,
+ pos_win_pct: float,
+ is_white_move: bool,
+ played_move: chess.Move,
+ best_move_before: chess.Move,
+ alt_win_pct: Optional[float],
+ fen_two_moves_ago: Optional[str],
+ uci_next_two_moves: Optional[Tuple[chess.Move, chess.Move]],
+ board_before_move: chess.Board,
+ best_pv_after: list
+) -> str:
+ diff = (pos_win_pct - last_win_pct) * (1 if is_white_move else -1)
+
+ if alt_win_pct is not None and diff >= -2.0:
+ if get_is_piece_sacrifice(board_before_move, played_move, best_pv_after):
+ if not is_losing_or_alt_winning(pos_win_pct, alt_win_pct, is_white_move):
+ return "Brilliant"
+
+ if alt_win_pct is not None and diff >= -2.0:
+ is_recapture = False
+ if fen_two_moves_ago and uci_next_two_moves:
+ is_recapture = is_simple_recapture(
+ fen_two_moves_ago, uci_next_two_moves[0], uci_next_two_moves[1]
+ )
+ if not is_recapture and not is_losing_or_alt_winning(pos_win_pct, alt_win_pct, is_white_move):
+ if get_has_changed_outcome(last_win_pct, pos_win_pct, is_white_move) or \
+ get_is_only_good_move(pos_win_pct, alt_win_pct, is_white_move):
+ return "Great"
+
+ if best_move_before and played_move == best_move_before:
+ return "Best"
+
+ if diff < -20.0: return "Blunder"
+ if diff < -10.0: return "Mistake"
+ if diff < -5.0: return "Inaccuracy"
+ if diff < -2.0: return "Good"
+ return "Excellent"
+
+
+# ─── Game Analysis (/analyze-game) ────────────────────────────────────────────
+@app.post("/analyze-game", response_model=AnalyzeResponse)
+async def analyze_game(request: AnalyzeRequest):
+ try:
+ engine = await get_stockfish_engine(hash_mb=2048)
+ board = chess.Board(request.start_fen) if request.start_fen else chess.Board()
+ limit = chess.engine.Limit(time=request.time_per_move)
+
+ analysis_results = []
+ ply_timeout = _analyze_ply_timeout(request.time_per_move)
+
+ async with _ENGINE_IO_LOCK:
+ infos_before = await _engine_call(
+ engine,
+ engine.analyse(board, limit, multipv=2),
+ ply_timeout,
+ )
+ # Restart after initial evaluation to clear memory
+ await _detach_and_quit_engine(engine)
+ force_memory_release()
+
+ infos_before = infos_before if isinstance(infos_before, list) else [infos_before]
+
+ counts = {
+ "Book": 0, "Brilliant": 0, "Great": 0, "Best": 0,
+ "Excellent": 0, "Good": 0, "Inaccuracy": 0,
+ "Mistake": 0, "Blunder": 0
+ }
+
+ player_is_white = (request.player_color.lower() == "white")
+
+ # FIX: Sliding window — only keep last 3 FENs and last 2 moves, never grows
+ fen_window: List[str] = [board.fen()]
+ move_window: List[chess.Move] = []
+
+ total_cpl = 0.0
+ player_moves_count = 0
+ current_score, _ = get_normalized_score(infos_before[0])
+
+ for i, san_move in enumerate(request.moves):
+ is_white_turn = board.turn == chess.WHITE
+ is_player_turn = is_white_turn if player_is_white else not is_white_turn
+
+ try:
+ move = board.parse_san(san_move)
+ except Exception:
+ break
+
+ info_dict = infos_before[0]
+ pv_list = info_dict.get("pv", [])
+ best_move_before = pv_list[0] if pv_list else None
+
+ score_before, _ = get_normalized_score(info_dict)
+ win_pct_before = get_win_percentage(info_dict)
+
+ alt_win_pct_before: Optional[float] = None
+ if len(infos_before) > 1:
+ for line in infos_before:
+ if line.get("pv") and line.get("pv")[0] != move:
+ alt_win_pct_before = get_win_percentage(line)
+ break
+
+ board_before_move = board.copy()
+ board.push(move)
+
+ # FIX: Sliding window — discard oldest beyond what we need
+ move_window.append(move)
+ if len(move_window) > 2:
+ move_window.pop(0)
+
+ fen_window.append(board.fen())
+ if len(fen_window) > 3:
+ fen_window.pop(0)
+
+ async with _ENGINE_IO_LOCK:
+ engine = await get_stockfish_engine(hash_mb=2048)
+ infos_after_raw = await _engine_call(
+ engine,
+ engine.analyse(board, limit, multipv=2),
+ ply_timeout,
+ )
+ # Restart engine after each move in full game review
+ await _detach_and_quit_engine(engine)
+ force_memory_release()
+ infos_after: List[dict] = infos_after_raw if isinstance(infos_after_raw, list) else [infos_after_raw]
+
+ info_after_dict: dict = infos_after[0]
+
+ win_pct_after = get_win_percentage(info_after_dict)
+ score_after, _ = get_normalized_score(info_after_dict)
+ current_score = score_after
+ best_pv_after = info_after_dict.get("pv", [])
+
+ fen_two_moves_ago = fen_window[0] if len(fen_window) == 3 else None
+ uci_next_two_moves = tuple(move_window[-2:]) if len(move_window) >= 2 else None
+
+ cls = "Book"
+ opening_name = None
+ board_fen_only = board.fen().split(" ")[0]
+
+ if board_fen_only in openings_db:
+ cls = "Book"
+ opening_name = openings_db[board_fen_only]
+ else:
+ cls = get_move_classification(
+ last_win_pct=win_pct_before,
+ pos_win_pct=win_pct_after,
+ is_white_move=is_white_turn,
+ played_move=move,
+ best_move_before=best_move_before,
+ alt_win_pct=alt_win_pct_before,
+ fen_two_moves_ago=fen_two_moves_ago,
+ uci_next_two_moves=uci_next_two_moves,
+ board_before_move=board_before_move,
+ best_pv_after=best_pv_after
+ )
+
+ # FIX: Free board copy immediately after classification
+ del board_before_move
+
+ move_gain = score_after - score_before if is_white_turn else score_before - score_after
+ cpl = max(0.0, min(-move_gain, 1000.0))
+
+ if is_player_turn:
+ total_cpl += cpl
+ player_moves_count += 1
+ counts[cls] = counts.get(cls, 0) + 1
+
+ analysis_results.append(MoveAnalysis(
+ move_num=i + 1,
+ san=san_move,
+ classification=cls,
+ cpl=float(cpl),
+ score_before=float(score_before / 100.0),
+ score_after=float(score_after / 100.0),
+ best_move=best_move_before.uci() if best_move_before else "",
+ opening=opening_name
+ ))
+
+ # FIX: Release large engine result objects after each ply
+ infos_before = infos_after
+ infos_after = None
+ info_after_dict = None
+ infos_after_raw = None
+
+ # FIX: Free sliding windows after loop
+ del fen_window
+ del move_window
+
+ avg_cpl = total_cpl / max(1, player_moves_count)
+ accuracy = max(10.0, min(100.0, 100.0 * math.exp(-0.005 * avg_cpl)))
+ estimated_elo = int(max(400, min(3600, round(3600 * math.exp(-0.015 * avg_cpl)))))
+
+ # FIX: Clear/restart engine to keep memory stable after full game analysis
+ async with _ENGINE_IO_LOCK:
+ if _RESTART_ENGINE_AFTER_MOVE:
+ await _detach_and_quit_engine(engine)
+ elif _CLEAR_HASH_AFTER_MOVE:
+ await _clear_engine_hash(engine)
+ force_memory_release()
+
+ return AnalyzeResponse(
+ accuracy=round(accuracy, 1),
+ estimated_elo=estimated_elo,
+ moves=analysis_results,
+ counts=counts
+ )
+
+ except HTTPException:
+ raise
+ except Exception as e:
+ print(f"Analysis Error: {e}")
+ raise HTTPException(status_code=500, detail=str(e))
+
+
+if __name__ == "__main__":
+ import uvicorn
+ uvicorn.run(app, host="0.0.0.0", port=7860)
\ No newline at end of file
diff --git a/openings.json b/openings.json
new file mode 100644
index 0000000000000000000000000000000000000000..95ac6ef3d418c8215f6fcf25c1a4fd704635735a
--- /dev/null
+++ b/openings.json
@@ -0,0 +1,3401 @@
+{
+ "rn1qkbnr/ppp2ppp/8/3p4/5p2/6PB/PPPPP2P/RNBQK2R": "Amar Gambit",
+ "rnbqkbnr/pppppppp/8/8/8/7N/PPPPPPPP/RNBQKB1R": "Amar Opening",
+ "rn1qkbnr/ppp2ppp/8/3p4/8/6PB/PPPPP3/RNBQ1RK1": "Amar Opening: Gent Gambit",
+ "rnbqkbnr/ppp2ppp/8/3pp3/5P2/6PN/PPPPP2P/RNBQKB1R": "Amar Opening: Paris Gambit",
+ "r1bqkb1r/ppp2ppp/2np1n2/4p3/2P5/1PN1P3/P2P1PPP/R1BQKBNR": "Amsterdam Attack",
+ "rnbqkbnr/pppppppp/8/8/8/P7/1PPPPPPP/RNBQKBNR": "Anderssen's Opening",
+ "rnbqkbnr/1ppppppp/8/p7/1P6/P7/2PPPPPP/RNBQKBNR": "Anderssen's Opening: Polish Gambit",
+ "rnbqkbnr/pppppppp/8/8/8/5P2/PPPPP1PP/RNBQKBNR": "Barnes Opening",
+ "rnb1kbnr/pppp1ppp/8/4p3/6Pq/5P2/PPPPP2P/RNBQKBNR": "Barnes Opening: Fool's Mate",
+ "rnbqkbnr/ppp1pp1p/6p1/8/3Pp3/2P2P2/PP4PP/RNBQKBNR": "Barnes Opening: Gedult Gambit",
+ "rnbqkbnr/ppppp1pp/8/8/4p3/2N2P2/PPPP2PP/R1BQKBNR": "Barnes Opening: Gedult Gambit",
+ "rnbqkbnr/pppp1ppp/8/4p3/8/5P2/PPPPPKPP/RNBQ1BNR": "Barnes Opening: Hammerschlag",
+ "rnbqkbnr/pppppppp/8/8/8/7P/PPPPPPP1/RNBQKBNR": "Clemenz Opening",
+ "rnbqkbnr/ppppppp1/8/7p/6P1/7P/PPPPPP2/RNBQKBNR": "Clemenz Opening: Spike Lee Gambit",
+ "rnbqkbnr/pppp1ppp/8/4p3/P6P/8/1PPPPPP1/RNBQKBNR": "Crab Opening",
+ "rnbqkbnr/ppp2ppp/8/3pp3/8/P6P/1PPPPPP1/RNBQKBNR": "Creepy Crawly Formation: Classical Defense",
+ "r1bq1rk1/ppp2ppp/2nb1n2/3pp3/8/PPPPPPP1/7P/RNBQKBNR": "Formation: Hippopotamus Attack",
+ "r1bq1rk1/ppp2ppp/2nb1n2/3pp3/8/P2PP1PP/1PPN1PB1/R1BQK1NR": "Formation: Shy Attack",
+ "rnbqkbnr/pppp1ppp/8/4p3/8/P6P/1PPPPPP1/RNBQKBNR": "Global Opening",
+ "rnbqkbnr/pppppppp/8/8/6P1/8/PPPPPP1P/RNBQKBNR": "Grob Opening",
+ "rnbqkbnr/ppppp1pp/8/5p2/6P1/8/PPPPPP1P/RNBQKBNR": "Grob Opening: Alessi Gambit",
+ "rnbqkbnr/pppppp1p/8/6p1/6P1/8/PPPPPP1P/RNBQKBNR": "Grob Opening: Double Grob",
+ "rnbqkbnr/pppppp1p/8/6p1/5PP1/8/PPPPP2P/RNBQKBNR": "Grob Opening: Double Grob, Coca-Cola Gambit",
+ "rnbqkbnr/ppp1pppp/8/3p4/6P1/8/PPPPPPBP/RNBQK1NR": "Grob Opening: Grob Gambit",
+ "rnbqkbnr/pp2pppp/2p5/3p4/6P1/8/PPPPPPBP/RNBQK1NR": "Grob Opening: Grob Gambit Declined",
+ "rnbqkbnr/ppp1ppp1/8/3p3P/8/8/PPPPPPBP/RNBQK1NR": "Grob Opening: Grob Gambit, Basman Gambit",
+ "rn1qkbnr/ppp1pppp/8/3p4/2P3b1/8/PP1PPPBP/RNBQK1NR": "Grob Opening: Grob Gambit, Fritz Gambit",
+ "q3kbnr/p1pnpppp/8/8/2Pp2b1/8/PP1PPP1P/RNBQK1NR": "Grob Opening: Grob Gambit, Fritz Gambit, Romford Countergambit",
+ "rnbqkbnr/ppp2ppp/8/3p4/3p2P1/2P5/PP2PPBP/RNBQK1NR": "Grob Opening: Grob Gambit, Keres Gambit",
+ "rnbqkbnr/pp2pppp/2p5/8/2p3P1/1P6/P2PPPBP/RNBQK1NR": "Grob Opening: Grob Gambit, Richter-Grob Gambit",
+ "rnbqkbnr/pp3ppp/2p5/3pp3/6P1/7P/PPPPPPB1/RNBQK1NR": "Grob Opening: Keene Defense",
+ "rnbqk2r/pp2nppp/2pb4/3p4/2PPp1P1/2N4P/PP2PPB1/R1BQK1NR": "Grob Opening: Keene Defense, Main Line",
+ "r1bqkbnr/pppp1ppp/2n5/4p3/6P1/7P/PPPPPP2/RNBQKBNR": "Grob Opening: London Defense",
+ "rn1qkbnr/ppp1pppp/8/8/2Pp2b1/8/PP1PPPBP/RNBQK1NR": "Grob Opening: Romford Countergambit",
+ "rnbqkbnr/pp2pppp/2p5/3p2P1/8/8/PPPPPPBP/RNBQK1NR": "Grob Opening: Spike Attack",
+ "rnbqkbnr/ppp2ppp/8/3pp3/2P3P1/8/PP1PPPBP/RNBQK1NR": "Grob Opening: Spike, Hurst Attack",
+ "rnbqkbnr/ppp1pppp/8/8/4p1P1/2N5/PPPP1P1P/R1BQKBNR": "Grob Opening: Zilbermints Gambit",
+ "rnbqkbnr/ppp1ppp1/8/7p/4p1P1/2N5/PPPP1P1P/R1BQKBNR": "Grob Opening: Zilbermints Gambit, Schiller Defense",
+ "rnbqkbnr/ppp2ppp/8/4p3/4p1P1/2NP4/PPP2P1P/R1BQKBNR": "Grob Opening: Zilbermints Gambit, Zilbermints-Hartlaub Gambit",
+ "rnbqkbnr/pppppppp/8/8/8/6P1/PPPPPP1P/RNBQKBNR": "Hungarian Opening",
+ "r1bqkbnr/ppp3pp/2n5/4Pp2/3pN3/6P1/PPP1PP1P/R1BQKBNR": "Hungarian Opening: Asten Gambit",
+ "rnbqk1nr/ppp1bppp/8/3p4/4p2N/P2P2P1/1PP1PP1P/RNBQKB1R": "Hungarian Opening: Burk Gambit",
+ "rnbqkbnr/ppp2ppp/8/3pp3/1P6/6P1/P1PPPPBP/RNBQK1NR": "Hungarian Opening: Bücker Gambit",
+ "rnbqkbnr/ppp2ppp/4p3/3p4/8/6P1/PPPPPPBP/RNBQK1NR": "Hungarian Opening: Catalan Formation",
+ "rnbqkbnr/ppppp1pp/8/5p2/8/6P1/PPPPPP1P/RNBQKBNR": "Hungarian Opening: Dutch Defense",
+ "rnbqkb1r/pppppppp/5n2/8/8/6P1/PPPPPP1P/RNBQKBNR": "Hungarian Opening: Indian Defense",
+ "rnbqkbnr/pppppp1p/8/6p1/8/6P1/PPPPPP1P/RNBQKBNR": "Hungarian Opening: Myers Defense",
+ "rnbqkbnr/ppppp2p/6p1/7Q/4p3/6P1/PPPP1P1P/RNB1KBNR": "Hungarian Opening: Pachman Gambit",
+ "rn1qkbnr/ppp2ppp/8/3p4/5p2/6PB/PPPPP2P/RNBQ1RK1": "Hungarian Opening: Paris Gambit",
+ "rnbqkbnr/pppp1ppp/8/4p3/8/5NP1/PPPPPP1P/RNBQKB1R": "Hungarian Opening: Reversed Alekhine",
+ "rnbqkb1r/pppp1ppp/5n2/8/1P2p3/6P1/P1PPPP1P/RNBQKBNR": "Hungarian Opening: Reversed Brooklyn Defense, Brooklyn Benko Gambit",
+ "rnbqkbnr/pp2pppp/8/2pp4/8/6P1/PPPPPPBP/RNBQK1NR": "Hungarian Opening: Reversed Modern Defense",
+ "rnbqkbnr/pppp1ppp/8/8/4p2N/6P1/PPPPPP1P/RNBQKB1R": "Hungarian Opening: Reversed Norwegian Defense",
+ "rnbqkbnr/pp1ppppp/8/2p5/8/6P1/PPPPPP1P/RNBQKBNR": "Hungarian Opening: Sicilian Invitation",
+ "rnbqkbnr/pp2pppp/2p5/3p4/8/6P1/PPPPPPBP/RNBQK1NR": "Hungarian Opening: Slav Formation",
+ "rnbqkbnr/pppppp1p/6p1/8/8/6P1/PPPPPP1P/RNBQKBNR": "Hungarian Opening: Symmetrical Variation",
+ "rnbqkbnr/ppppppp1/8/8/7p/5NP1/PPPPPP1P/RNBQKB1R": "Hungarian Opening: Van Kuijk Gambit",
+ "rnbqkbnr/ppp2ppp/8/4p3/2p5/1P4P1/P2PPPBP/RNBQK1NR": "Hungarian Opening: Winterberg Gambit",
+ "rnbqkbnr/pppppppp/8/8/7P/8/PPPPPPP1/RNBQKBNR": "Kádas Opening",
+ "rnbqkbnr/ppp1pppp/8/3p4/7P/7R/PPPPPPP1/RNBQKBN1": "Kádas Opening: Beginner's Trap",
+ "rnbqkbnr/pp1ppppp/8/2p5/1P5P/8/P1PPPPP1/RNBQKBNR": "Kádas Opening: Kádas Gambit",
+ "rnbqkbnr/pp2pppp/8/3p4/3p3P/2P2N2/PP2PPP1/RNBQKB1R": "Kádas Opening: Kádas Gambit",
+ "rnbqkbnr/pppp1ppp/8/8/3p3P/2P5/PP2PPP1/RNBQKBNR": "Kádas Opening: Kádas Gambit",
+ "rnbqkbnr/pp2pppp/8/2pp4/3PP2P/8/PPP2PP1/RNBQKBNR": "Kádas Opening: Myers Variation",
+ "rnbqkbnr/pppppp1p/8/6p1/7P/8/PPPPPPP1/RNBQKBNR": "Kádas Opening: Schneider Gambit",
+ "rnbqkbnr/ppppp1pp/8/8/4p2P/3P4/PPP2PP1/RNBQKBNR": "Kádas Opening: Steinbok Gambit",
+ "rnbqkbnr/ppppppp1/8/7p/8/6P1/PPPPPP1P/RNBQKBNR": "Lasker Simul Special",
+ "rnbqkbnr/pppppppp/8/8/8/3P4/PPP1PPPP/RNBQKBNR": "Mieses Opening",
+ "rnbqkbnr/pppppp1p/6p1/8/6P1/3P4/PPP1PP1P/RNBQKBNR": "Mieses Opening: Myers Spike Attack",
+ "rnbqkbnr/pppp1ppp/8/4p3/8/3P4/PPP1PPPP/RNBQKBNR": "Mieses Opening: Reversed Rat",
+ "rnbqkbnr/pppppppp/8/8/1P6/8/P1PPPPPP/RNBQKBNR": "Polish Opening",
+ "rn1qkbnr/ppp1pppp/8/3p1b2/1P6/8/PBPPPPPP/RN1QKBNR": "Polish Opening: Baltic Defense",
+ "rnbqkbnr/pp1ppppp/8/2p5/1P6/8/P1PPPPPP/RNBQKBNR": "Polish Opening: Birmingham Gambit",
+ "rnbqkbnr/pppp2pp/5p2/1P2p3/8/8/PBPPPPPP/RN1QKBNR": "Polish Opening: Bugayev Advance Variation",
+ "rnbqkbnr/pppp1ppp/8/4p3/1P6/P7/2PPPPPP/RNBQKBNR": "Polish Opening: Bugayev Attack",
+ "rnbqkbnr/ppp2ppp/3p4/4p3/1P6/8/PBPPPPPP/RN1QKBNR": "Polish Opening: Czech Defense",
+ "rnbqkbnr/ppppp1pp/8/5p2/1P6/8/P1PPPPPP/RNBQKBNR": "Polish Opening: Dutch Defense",
+ "rnb1kbnr/ppp1pppp/3q4/3p4/1P6/8/PBPPPPPP/RN1QKBNR": "Polish Opening: German Defense",
+ "r1bqkbnr/pppppppp/2n5/8/1P6/8/P1PPPPPP/RNBQKBNR": "Polish Opening: Grigorian Variation",
+ "rnbqkb1r/pppppppp/7n/8/1P6/8/P1PPPPPP/RNBQKBNR": "Polish Opening: Karniewski Variation",
+ "rnbqkb1r/pppppp1p/5np1/8/1P6/8/PBPPPPPP/RN1QKBNR": "Polish Opening: King's Indian Variation",
+ "rnbqkb1r/pppppp1p/5np1/8/1P2P3/8/PBPP1PPP/RN1QKBNR": "Polish Opening: King's Indian Variation, Schiffler Attack",
+ "rnbq1rk1/ppp1ppbp/3p1np1/8/1PPP4/4PN2/PB3PPP/RN1QKB1R": "Polish Opening: King's Indian Variation, Sokolsky Attack",
+ "rnbqkbnr/pp2pppp/2p5/3p4/PP6/8/1BPPPPPP/RN1QKBNR": "Polish Opening: Myers Variation",
+ "rnbqkbnr/pp1ppppp/2p5/8/1P6/8/P1PPPPPP/RNBQKBNR": "Polish Opening: Outflank Variation",
+ "rnbqkb1r/p1pp1ppp/1p2pn2/1P6/8/8/PBPPPPPP/RN1QKBNR": "Polish Opening: Queen's Indian Variation",
+ "rnbqkb1r/1ppp1ppp/p3pn2/1P6/8/8/PBPPPPPP/RN1QKBNR": "Polish Opening: Queenside Defense",
+ "1nbqkb1r/1ppp1ppp/4pn2/1P6/8/8/2PPPPPP/BN1QKBNR": "Polish Opening: Rooks Swap Line",
+ "rnbqkb1r/ppp2ppp/4pn2/1P1p4/8/4P3/PBPP1PPP/RN1QKBNR": "Polish Opening: Schiffler-Sokolsky Variation",
+ "rnbqkbnr/1p1ppppp/8/pp6/4P3/8/PBPP1PPP/RN1QKBNR": "Polish Opening: Schuehler Gambit",
+ "rnbqkbnr/p1pppppp/8/1p6/1P6/8/P1PPPPPP/RNBQKBNR": "Polish Opening: Symmetrical Variation",
+ "rnbqkbnr/pppp2pp/5p2/4p3/1P2P3/8/PBPP1PPP/RN1QKBNR": "Polish Opening: Tartakower Gambit",
+ "rnbqkbnr/pp1p1ppp/8/2p1p3/1P6/8/PBPPPPPP/RN1QKBNR": "Polish Opening: Wolferts Gambit",
+ "rnbqkbnr/pppppppp/8/8/8/2P5/PP1PPPPP/RNBQKBNR": "Saragossa Opening",
+ "rnbqkbnr/pppppppp/8/8/8/N7/PPPPPPPP/R1BQKBNR": "Sodium Attack",
+ "rnbqkbnr/pppppp1p/6p1/8/6P1/N7/PPPPPP1P/R1BQKBNR": "Sodium Attack: Chenoboskion Variation",
+ "r1bqkbnr/pppp2pp/2n5/4pp2/2N1P3/8/PPPP1PPP/R1BQKBNR": "Sodium Attack: Durkin Gambit",
+ "rnbqkbnr/pppp1ppp/8/4p3/8/3P4/PPPNPPPP/R1BQKBNR": "Valencia Opening",
+ "rnbqkbnr/pppppppp/8/8/8/2N5/PPPPPPPP/R1BQKBNR": "Van Geet Opening",
+ "rnbqkbnr/pppp1ppp/8/4p3/8/P1N5/1PPPPPPP/R1BQKBNR": "Van Geet Opening: Battambang Variation",
+ "rnbqk1nr/pppp1ppp/8/2b1p3/8/2N2N2/PPPPPPPP/R1BQKB1R": "Van Geet Opening: Billockus-Johansen Gambit",
+ "rnbqkbnr/pp2pppp/2p5/3p4/4P3/2N4P/PPPP1PP1/R1BQKBNR": "Van Geet Opening: Caro-Kann Variation, St. Patrick's Attack",
+ "rnbqkbnr/ppp2ppp/8/3pp3/5P2/2N5/PPPPP1PP/R1BQKBNR": "Van Geet Opening: Damhaug Gambit",
+ "rnbqkbnr/ppp1pppp/8/8/4p3/2N2P2/PPPP2PP/R1BQKBNR": "Van Geet Opening: Dougherty Gambit",
+ "rnbqkbnr/ppp1pppp/8/8/4p3/2NP4/PPP2PPP/R1BQKBNR": "Van Geet Opening: Dunst-Perrenet Gambit",
+ "rnbqkbnr/pp1ppppp/8/2p5/1P6/2N5/P1PPPPPP/R1BQKBNR": "Van Geet Opening: Düsseldorf Gambit",
+ "rnbqkbnr/ppp2ppp/8/4p3/4p3/1PNP4/P1P2PPP/R1BQKBNR": "Van Geet Opening: Gladbacher Gambit",
+ "rnbqkbnr/ppp1pppp/8/8/2B1p3/2N5/PPPP1PPP/R1BQK1NR": "Van Geet Opening: Hector Gambit",
+ "r1bqkbnr/ppp2ppp/2np4/4P3/8/2N5/PPPPP1PP/R1BQKBNR": "Van Geet Opening: Hergert Gambit",
+ "rn1qkbnr/ppp2ppp/4b3/3pp2Q/8/2N1P3/PPPP1PPP/R1B1KBNR": "Van Geet Opening: Hulsemann Gambit",
+ "rnbqkb1r/pp2p1pp/5n2/2p2p2/1P1p1P2/5N2/P1PPPNPP/R1BQKB1R": "Van Geet Opening: Jendrossek Gambit",
+ "rnbqkbnr/ppppp1pp/8/8/4p3/2NP4/PPP2PPP/R1BQKBNR": "Van Geet Opening: Kluever Gambit",
+ "rnbqkbnr/p1pppppp/8/1p6/8/2N5/PPPPPPPP/R1BQKBNR": "Van Geet Opening: Laroche Gambit",
+ "rnbqkb1r/ppp2ppp/5n2/3pp2Q/8/2N1P3/PPPP1PPP/R1B1KBNR": "Van Geet Opening: Liebig Gambit",
+ "rnbqkbnr/pp2pppp/8/2p5/3pNP2/8/PPPPP1PP/R1BQKBNR": "Van Geet Opening: Melleby Gambit",
+ "rnbqkbnr/pppppp1p/6p1/8/7P/2N5/PPPPPPP1/R1BQKBNR": "Van Geet Opening: Myers Attack",
+ "r1bqkbnr/pppp1ppp/2n5/4p3/3P4/2N2N2/PPP1PPPP/R1BQKB1R": "Van Geet Opening: Napoleon Attack",
+ "r1bqkbnr/pp1ppppp/2n5/8/7Q/2N5/PPP1PPPP/R1B1KBNR": "Van Geet Opening: Novosibirsk Variation",
+ "rnbqkbnr/pppp1ppp/8/8/4Pp2/2N5/PPPP2PP/R1BQKBNR": "King's Gambit Accepted: Mason-Keres Gambit",
+ "rnbqkbnr/ppp2ppp/8/4p3/3pNP2/8/PPPPP1PP/R1BQKBNR": "Van Geet Opening: Pfeiffer Gambit",
+ "rnbqkbnr/ppp2ppp/8/4p3/3pNP2/5N2/PPPPP1PP/R1BQKB1R": "Van Geet Opening: Pfeiffer Gambit, Sleipnir Countergambit",
+ "rnbqkbnr/pppp1ppp/8/4p3/8/2N5/PPPPPPPP/R1BQKBNR": "Van Geet Opening: Reversed Nimzowitsch",
+ "r1bqkbnr/pppp1ppp/2n5/8/Q7/2N5/PPP1PPPP/R1B1KBNR": "Van Geet Opening: Reversed Scandinavian",
+ "r1bqkbnr/pp1ppppp/2n5/8/3N4/2N5/PPP1PPPP/R1BQKB1R": "Van Geet Opening: Sicilian Two Knights",
+ "rnbqk1nr/ppp2ppp/8/3pp3/1b1P4/2N1P3/PPP2PPP/R1BQKBNR": "Van Geet Opening: Sleipnir Gambit",
+ "rnbqkbnr/pp1ppppp/8/2p5/8/2N5/PPPPPPPP/1RBQKBNR": "Van Geet Opening: Twyble Attack",
+ "rnbqkb1r/pppppppp/5n2/8/6P1/2N5/PPPPPP1P/R1BQKBNR": "Van Geet Opening: Tübingen Gambit",
+ "rnbqkb1r/ppp1pppp/5n2/3p4/8/2NP2P1/PPP1PP1P/R1BQKBNR": "Van Geet Opening: Venezolana Variation",
+ "rnbqkbnr/ppp1pp1p/8/3p2p1/5P2/2N5/PPPPP1PP/R1BQKBNR": "Van Geet Opening: Warsteiner Gambit",
+ "rnbqkbnr/pppppppp/8/8/8/4P3/PPPP1PPP/RNBQKBNR": "Van't Kruijs Opening",
+ "rnbqkbnr/p1pp1ppp/8/1p2p3/8/1B2P3/PPPP1PPP/RNBQK1NR": "Van't Kruijs Opening: Bouncing Bishop Variation",
+ "rnbqkb1r/pppp1ppp/5n2/8/5p2/2N1PN2/PPPP2PP/R1BQKB1R": "Van't Kruijs Opening: Keoni-Hiva Gambit, Akahi Variation",
+ "r1bqkbnr/pppp1ppp/2n5/8/5p2/2N1PN2/PPPP2PP/R1BQKB1R": "Van't Kruijs Opening: Keoni-Hiva Gambit, Alua Variation",
+ "rnbqkbnr/ppp2ppp/8/3p4/5p2/2N1PN2/PPPP2PP/R1BQKB1R": "Van't Kruijs Opening: Keoni-Hiva Gambit, Ekolu Variation",
+ "r1bqkbnr/pp1ppppp/2n5/2p5/8/2NP2P1/PPP1PP1P/R1BQKBNR": "Venezolana Opening",
+ "rnbqkbnr/pppppppp/8/8/P7/8/1PPPPPPP/RNBQKBNR": "Ware Opening",
+ "rnbqkbnr/pppp1ppp/8/4p3/P7/R7/1PPPPPPP/1NBQKBNR": "Ware Opening: Meadow Hay Trap",
+ "rnbqkbnr/ppp3pp/P7/3ppp2/8/4P3/1PPP1PPP/RNBQKBNR": "Ware Opening: Ware Gambit",
+ "rn1qkbnr/pbpppppp/8/1P6/8/8/1PPPPPPP/RNBQKBNR": "Ware Opening: Wing Gambit",
+ "rnbqkbnr/pppppppp/8/8/8/1P6/P1PPPPPP/RNBQKBNR": "Nimzo-Larsen Attack",
+ "rnbqkbnr/ppp1pppp/8/3p4/8/1P6/P1PPPPPP/RNBQKBNR": "Nimzo-Larsen Attack: Classical Variation",
+ "rnbqkbnr/ppppp1pp/8/5p2/8/1P6/P1PPPPPP/RNBQKBNR": "Nimzo-Larsen Attack: Dutch Variation",
+ "rnbqkbnr/pp1ppppp/8/2p5/8/1P6/P1PPPPPP/RNBQKBNR": "Nimzo-Larsen Attack: English Variation",
+ "rnbqkbnr/ppp1pppp/8/3p4/8/BP6/P1PPPPPP/RN1QKBNR": "Nimzo-Larsen Attack: Graz Attack",
+ "rnbqkb1r/pppppppp/5n2/8/8/1P6/P1PPPPPP/RNBQKBNR": "Nimzo-Larsen Attack: Indian Variation",
+ "rnbqkbnr/pppp1ppp/8/4p3/8/1P6/P1PPPPPP/RNBQKBNR": "Nimzo-Larsen Attack: Modern Variation",
+ "r1bqkbnr/pppp1ppp/2n5/4p3/8/1P6/PBPPPPPP/RN1QKBNR": "Nimzo-Larsen Attack: Modern Variation",
+ "r1bqkbnr/pppp1ppp/2n5/4p3/8/1P2P3/PBPP1PPP/RN1QKBNR": "Nimzo-Larsen Attack: Modern Variation",
+ "r1bqkbnr/pppp1ppp/2n5/4p3/5P2/1P6/PBPPP1PP/RN1QKBNR": "Nimzo-Larsen Attack: Pachman Gambit",
+ "rnbqkbnr/p1pppppp/8/1p6/8/1P6/P1PPPPPP/RNBQKBNR": "Nimzo-Larsen Attack: Polish Variation",
+ "rnbqkbnr/pppp2pp/4p3/5p2/4P3/1P6/PBPP1PPP/RN1QKBNR": "Nimzo-Larsen Attack: Ringelbach Gambit",
+ "rnbqkb1r/pppppp1p/5np1/8/6P1/1P6/PBPPPP1P/RN1QKBNR": "Nimzo-Larsen Attack: Spike Variation",
+ "rnbqkbnr/p1pppppp/1p6/8/8/1P6/P1PPPPPP/RNBQKBNR": "Nimzo-Larsen Attack: Symmetrical Variation",
+ "rnbqkbnr/pppppppp/8/8/5P2/8/PPPPP1PP/RNBQKBNR": "Bird Opening",
+ "rnbqkb1r/pppppppp/5n2/8/5P2/8/PPPPP1PP/RNBQKBNR": "Bird Opening",
+ "rnbqkb1r/pppppp1p/5np1/8/1P3P2/5N2/P1PPP1PP/RNBQKB1R": "Bird Opening: Batavo-Polish Attack",
+ "rnbqkbnr/ppp1p1pp/8/3p1p2/3P1P2/8/PPP1P1PP/RNBQKBNR": "Bird Opening: Double Duck Formation",
+ "rnbqkbnr/pppp1ppp/8/4p3/5P2/8/PPPPP1PP/RNBQKBNR": "Bird Opening: From's Gambit",
+ "rnbqkbnr/pppp1ppp/8/4p3/5P2/2N5/PPPPP1PP/R1BQKBNR": "Bird Opening: From's Gambit, Bahr Gambit",
+ "rnbqkb1r/ppp2ppp/3P1n2/8/8/8/PPPPP1PP/RNBQKBNR": "Bird Opening: From's Gambit, Langheld Gambit",
+ "rnbqk1nr/ppp2p1p/3b4/6p1/8/5N2/PPPPP1PP/RNBQKB1R": "Bird Opening: From's Gambit, Lasker Variation",
+ "rnbqk2r/ppp2ppp/3b3n/8/3P4/5N2/PPP1P1PP/RNBQKB1R": "Bird Opening: From's Gambit, Lipke Variation",
+ "rnbqkbnr/pppppp1p/8/6p1/5P2/8/PPPPP1PP/RNBQKBNR": "Bird Opening: Hobbs Gambit",
+ "rnbqkbnr/pppppp2/7p/6p1/5P2/5N2/PPPPP1PP/RNBQKB1R": "Bird Opening: Hobbs-Zilbermints Gambit",
+ "rnbqkb1r/pppppppp/7n/8/5P2/8/PPPPP1PP/RNBQKBNR": "Bird Opening: Horsefly Defense",
+ "rnbqkbnr/pppp2pp/5p2/4P3/8/8/PPPPP1PP/RNBQKBNR": "Bird Opening: Lasker Gambit",
+ "rnbqkb1r/pppppppp/5n2/8/2P2P2/8/PP1PP1PP/RNBQKBNR": "Bird Opening: Mujannah",
+ "rnbqkbnr/p1pppppp/8/1p6/5P2/8/PPPPP1PP/RNBQKBNR": "Bird Opening: Myers Defense",
+ "rnbqkb1r/ppppnppp/8/4P3/8/8/PPPPP1PP/RNBQKBNR": "Bird Opening: Platz Gambit",
+ "r1bqkbnr/pppp1ppp/2n5/4P3/8/8/PPPPP1PP/RNBQKBNR": "Bird Opening: Schlechter Gambit",
+ "rnbqkbnr/pp1p1ppp/8/2p5/3p1P2/2P2N2/PP2P1PP/RNBQKB1R": "Bird Opening: Siegener Gambit",
+ "rnbqkb1r/ppppp1pp/5n2/8/4pPP1/2N5/PPPP3P/R1BQKBNR": "Bird Opening: Swiss Gambit",
+ "rnbqkbnr/ppppp1pp/8/5p2/4PP2/8/PPPP2PP/RNBQKBNR": "Bird Opening: Wagner-Zwitersch Gambit",
+ "rnbqkbnr/ppp1pppp/8/3p4/5P2/8/PPPPP1PP/RNBQKBNR": "Bird Opening: Dutch Variation",
+ "rnbqkbnr/ppp1pppp/8/3p4/5PP1/8/PPPPP2P/RNBQKBNR": "Bird Opening: Dutch Variation, Dudweiler Gambit",
+ "rnbqkb1r/pp2pppp/5n2/2pp4/5P2/4PN2/PPPP2PP/RNBQKB1R": "Bird Opening: Lasker Variation",
+ "rnbqkbnr/ppp1pppp/8/3p4/2P2P2/8/PP1PP1PP/RNBQKBNR": "Bird Opening: Sturm Gambit",
+ "rnbqkb1r/pp2pppp/5n2/2p5/3p1P2/1P2PN2/PBPP2PP/RN1QKB1R": "Bird Opening: Thomas Gambit",
+ "rnbqkbnr/ppp1pppp/8/3p4/4PP2/8/PPPP2PP/RNBQKBNR": "Bird Opening: Williams Gambit",
+ "rnbqkb1r/ppp1pppp/5n2/8/4pP2/2N5/PPPPQ1PP/R1B1KBNR": "Bird Opening: Williams Gambit",
+ "rnbqkb1r/ppp1pppp/5n2/8/4pP2/2N5/PPPPN1PP/R1BQKB1R": "Bird Opening: Williams-Zilbermints Gambit",
+ "rnb1k1nr/pp1pppbp/6p1/q1P5/8/4PN2/PPP2PPP/RNBQKB1R": "Colle System: Rhamphorhynchus Variation",
+ "rnb1k1nr/pp1pppbp/1q4p1/2p5/2PPP3/5N2/PP3PPP/RNBQKB1R": "Modern Defense: Semi-Averbakh Variation, Polish Variation",
+ "rnb1k1nr/pp1pppbp/6p1/q1p5/2PPP3/5N2/PP3PPP/RNBQKB1R": "Modern Defense: Semi-Averbakh Variation, Pterodactyl Variation",
+ "rnb1k1nr/pp2ppbp/3p2p1/q1P5/2P1P3/5N2/PP3PPP/RNBQKB1R": "Modern Defense: Semi-Averbakh Variation, Pterodactyl Variation Accepted",
+ "rnbqkb1r/pppppp1p/6pn/8/3P4/5N2/PPP1PPPP/RNBQKB1R": "Zukertort Defense: Kingside Variation",
+ "r1bqkbnr/pp1ppppp/n7/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R": "Zukertort Defense: Sicilian Knight Variation",
+ "rnbqkbnr/pppppppp/8/8/8/5N2/PPPPPPPP/RNBQKB1R": "Zukertort Opening",
+ "rnbqkbnr/ppppp1pp/5p2/8/8/5N2/PPPPPPPP/RNBQKB1R": "Zukertort Opening: Arctic Defense",
+ "rnbqkb1r/pppppnpp/5p2/8/3PP3/5N2/PPP2PPP/RNBQKB1R": "Zukertort Opening: Arctic Defense, Drunken Knight Variation",
+ "rnbqkbnr/ppppppp1/7p/8/8/5N2/PPPPPPPP/RNBQKB1R": "Zukertort Opening: Basman Defense",
+ "r1bqkbnr/pppppppp/2n5/8/8/5N2/PPPPPPPP/RNBQKB1R": "Zukertort Opening: Black Mustang Defense",
+ "r1bqkb1r/pppppppp/n6n/8/4P3/5N2/PPPP1PPP/RNBQKB1R": "Zukertort Opening: Drunken Cavalry Variation",
+ "rnbqkbnr/ppppp1pp/8/5p2/8/5N2/PPPPPPPP/RNBQKB1R": "Zukertort Opening: Dutch Variation",
+ "rnbqkbnr/pppppp1p/8/6p1/8/5N2/PPPPPPPP/RNBQKB1R": "Zukertort Opening: Herrstrom Gambit",
+ "rnbqkbnr/pppppp1p/6p1/8/8/5N2/PPPPPPPP/RNBQKB1R": "Zukertort Opening: Kingside Fianchetto",
+ "rnbqkbnr/ppppp1pp/8/5p2/4P3/5N2/PPPP1PPP/RNBQKB1R": "Zukertort Opening: Lisitsyn Gambit",
+ "rnbqkb1r/ppppp1pp/5n2/5p2/4P3/3P1N2/PPP2PPP/RNBQKB1R": "Zukertort Opening: Lisitsyn Gambit Deferred",
+ "rnbqkbnr/ppp1pppp/3p4/8/8/5N2/PPPPPPPP/RNBQKB1R": "Zukertort Opening: Pirc Invitation",
+ "rnbqkbnr/p1pppppp/8/1p6/8/5N2/PPPPPPPP/RNBQKB1R": "Zukertort Opening: Polish Defense",
+ "rnbqkbnr/pppp1ppp/4p3/8/8/5N2/PPPPPPPP/RNBQKB1R": "Zukertort Opening: Queen's Gambit Invitation",
+ "rnbqkbnr/p1pppppp/1p6/8/8/5N2/PPPPPPPP/RNBQKB1R": "Zukertort Opening: Queenside Fianchetto Variation",
+ "rnbqkbnr/pppp1ppp/8/4p3/8/5N2/PPPPPPPP/RNBQKB1R": "Zukertort Opening: Ross Gambit",
+ "rnbqkbnr/3p1ppp/p3p3/1pp5/2P5/2N2NP1/PP1PPP1P/R1BQKB1R": "Zukertort Opening: Shabalov Gambit",
+ "rnbqkbnr/pp1ppppp/8/2p5/8/5N2/PPPPPPPP/RNBQKB1R": "Zukertort Opening: Sicilian Invitation",
+ "rnbqkbnr/pp1ppppp/2p5/8/8/5N2/PPPPPPPP/RNBQKB1R": "Zukertort Opening: Slav Invitation",
+ "rnbqkbnr/pp1ppppp/8/8/3p4/4PN2/PPP2PPP/RNBQKB1R": "Zukertort Opening: Speelsmet Gambit",
+ "rnbqkbnr/1ppppppp/p7/8/8/5N2/PPPPPPPP/RNBQKB1R": "Zukertort Opening: St. George Defense",
+ "r1bqkbnr/ppp2ppp/2p5/8/8/8/PPPPPPPP/RNBQKB1R": "Zukertort Opening: The Walrus",
+ "rnbqkbnr/ppp2ppp/3p4/4p3/3P4/5N2/PPP1PPPP/RNBQKB1R": "Zukertort Opening: Vos Gambit",
+ "rn1qkbnr/ppp1pppp/3p4/8/4P1b1/5N2/PPPP1PPP/RNBQKB1R": "Zukertort Opening: Wade Defense",
+ "rnbqkbnr/1ppppppp/8/p7/8/5N2/PPPPPPPP/RNBQKB1R": "Zukertort Opening: Ware Defense",
+ "rnbqkb1r/ppp1pppp/5n2/3p4/8/5NP1/PPPPPP1P/RNBQKB1R": "King's Indian Attack",
+ "rnbqkb1r/pppppp1p/5np1/8/1P6/5NP1/P1PPPP1P/RNBQKB1R": "King's Indian Attack: Smyslov Variation",
+ "rnbqkb1r/p1pppppp/5n2/1p6/8/5NP1/PPPPPP1P/RNBQKB1R": "King's Indian Attack: Spassky Variation",
+ "rnbqkb1r/pppppp1p/5np1/8/8/5NP1/PPPPPP1P/RNBQKB1R": "King's Indian Attack: Symmetrical Defense",
+ "rnbq1rk1/ppp1ppbp/5np1/3p4/8/3P1NP1/PPP1PPBP/RNBQ1RK1": "King's Indian Attack: Wahls Defense",
+ "rnbqkb1r/pppppppp/5n2/8/1P6/5N2/P1PPPPPP/RNBQKB1R": "Polish Opening: Zukertort System",
+ "rnbqkb1r/pppppppp/5n2/8/8/5N2/PPPPPPPP/RNBQKB1R": "Zukertort Opening",
+ "r1bqkb1r/pppppppp/2n2n2/8/8/2N2N2/PPPPPPPP/R1BQKB1R": "Zukertort Opening",
+ "rnbq1rk1/ppp1ppbp/3p1np1/8/8/1P3NP1/PBPPPPBP/RN1Q1RK1": "Zukertort Opening: Double Fianchetto Attack",
+ "rnbqkb1r/pppppppp/5n2/8/4P3/5N2/PPPP1PPP/RNBQKB1R": "Zukertort Opening: Lemberger Gambit",
+ "rnbqkb1r/pppppp1p/5np1/8/PP6/5N2/2PPPPPP/RNBQKB1R": "Zukertort Opening: Myers Polish Attack",
+ "rnbqkb1r/pppppppp/5n2/8/8/1P3N2/P1PPPPPP/RNBQKB1R": "Zukertort Opening: Nimzo-Larsen Variation",
+ "rnbqkb1r/pppppppp/5n2/8/8/4PN2/PPPP1PPP/RNBQKB1R": "Zukertort Opening: Quiet System",
+ "rnbqkbnr/ppp1pppp/8/3p4/8/1P3N2/P1PPPPPP/RNBQKB1R": "Nimzo-Larsen Attack: Classical Variation",
+ "rnbqkbnr/pp2pppp/8/2pp4/4P3/1P3N2/P1PP1PPP/RNBQKB1R": "Nimzo-Larsen Attack: Norfolk Gambit",
+ "rnbqkb1r/pp2pppp/5n2/2pp4/4P3/1P3N2/PBPP1PPP/RN1QKB1R": "Nimzo-Larsen Attack: Norfolk Gambit",
+ "rnbqkbnr/ppp1pppp/8/3p4/8/5N2/PPPPPPPP/RNBQKB1R": "Zukertort Opening",
+ "rnbqkbnr/ppp1pppp/8/3p4/8/5N2/PPPPPPPP/RNBQKBR1": "Zukertort Opening: Ampel Variation",
+ "rnbqkbnr/ppp1pppp/8/3p4/8/3P1N2/PPP1PPPP/RNBQKB1R": "Zukertort Opening: Old Indian Attack",
+ "rnbqkbnr/pp2pppp/8/2p5/2p5/1P2PN2/P2P1PPP/RNBQKB1R": "Zukertort Opening: Pachman Gambit",
+ "rnbqkbnr/pp2pppp/8/2p5/2p5/1PN2N2/P2PPPPP/R1BQKB1R": "Zukertort Opening: Regina-Nu Gambit",
+ "rnbqkbnr/ppp1pppp/8/3p4/8/2N2N2/PPPPPPPP/R1BQKB1R": "Zukertort Opening: Reversed Mexican Defense",
+ "rnbqkbnr/ppp1pppp/8/3p4/1P6/5N2/P1PPPPPP/RNBQKB1R": "Zukertort Opening: Santasiere's Folly",
+ "rnbqkbnr/ppp1pppp/8/3p4/4P3/5N2/PPPP1PPP/RNBQKB1R": "Zukertort Opening: Tennison Gambit",
+ "rnbqkbnr/ppp1pppp/8/3p4/P7/5N2/1PPPPPPP/RNBQKB1R": "Zukertort Opening: The Potato",
+ "rnbqkbnr/ppp1pp1p/8/3p2p1/8/5NP1/PPPPPP1P/RNBQKB1R": "Hungarian Opening: Wiedenhagen-Beta Gambit",
+ "rnbqkbnr/ppp1pppp/8/3p4/8/5NP1/PPPPPP1P/RNBQKB1R": "King's Indian Attack",
+ "rnbqkbnr/ppp1pp1p/6p1/3p4/8/5NP1/PPPPPP1P/RNBQKB1R": "King's Indian Attack: Double Fianchetto",
+ "rn1qkbnr/ppp1pppp/8/3p4/6b1/5NP1/PPPPPP1P/RNBQKB1R": "King's Indian Attack: Keres Variation",
+ "r2qkbnr/pppnpppp/8/3p4/6b1/5NP1/PPPPPPBP/RNBQK2R": "King's Indian Attack: Keres Variation",
+ "rnbqkbnr/ppp2ppp/8/3pp3/8/5NP1/PPPPPP1P/RNBQKB1R": "King's Indian Attack: Omega-Delta Gambit",
+ "rnbqk2r/ppp1npbp/6p1/3pp3/8/3P1NP1/PPP1PPBP/RNBQ1RK1": "King's Indian Attack: Pachman System",
+ "rnbqkbnr/pp2pppp/8/2pp4/8/5NP1/PPPPPP1P/RNBQKB1R": "King's Indian Attack: Sicilian Variation",
+ "rn1qkb1r/pp2pppp/2p2n2/3p4/6b1/5NP1/PPPPPPBP/RNBQ1RK1": "King's Indian Attack: Yugoslav Variation",
+ "r1bqkbnr/pp2pppp/2n5/2pp4/8/5NP1/PPPPPPBP/RNBQK2R": "King's Indian Attack: French Variation",
+ "r1bq1rk1/pp2bppp/2n1pn2/2pp4/4P3/3P1NP1/PPPN1PBP/R1BQR1K1": "King's Indian Attack: Sicilian Variation",
+ "rnbqkbnr/pp2pppp/8/2pp4/8/5NP1/PPPPPPBP/RNBQK2R": "King's Indian Attack: Sicilian Variation",
+ "r1bqkbnr/pp3ppp/2n1p3/2pp4/3P4/5NP1/PPP1PPBP/RNBQ1RK1": "Zukertort Opening: Grünfeld Reversed",
+ "rnbqkbnr/ppp1pppp/8/3p4/2P5/5N2/PP1PPPPP/RNBQKB1R": "Réti Opening",
+ "rnbqkbnr/ppp1pppp/8/8/2Pp4/5N2/PP1PPPPP/RNBQKB1R": "Réti Opening: Advance Variation",
+ "rnbqkbnr/pp2pppp/8/2p5/1PPp4/5N2/P2PPPPP/RNBQKB1R": "Réti Opening: Advance Variation, Michel Gambit",
+ "rnbqkbnr/ppp1pppp/8/8/2Pp4/5N2/PP1PPPPP/RNBQKBR1": "Réti Opening: Penguin Variation",
+ "rnbqkbnr/pp2pppp/8/2p5/1PPp4/4PN2/P2P1PPP/RNBQKB1R": "Réti Opening: Reversed Blumenfeld Gambit",
+ "rnbqkbnr/ppp1pppp/8/8/2p5/5N2/PP1PPPPP/RNBQKB1R": "Réti Opening: Réti Accepted",
+ "rn1qkbnr/ppp1pppp/4b3/8/2p5/4PN2/PP1P1PPP/RNBQKB1R": "Réti Opening: Réti Gambit, Keres Variation",
+ "rnbqkbnr/p1p1pppp/8/1p1p4/2P5/5N2/PP1PPPPP/RNBQKB1R": "Réti Opening: Zilbermints Gambit",
+ "rnbqkbnr/pppppppp/8/8/2P5/8/PP1PPPPP/RNBQKBNR": "English Opening",
+ "rnbqkb1r/pppppppp/5n2/8/2P1P3/8/PP1P1PPP/RNBQKBNR": "English Opening: Achilles-Omega Gambit",
+ "rnbqkbnr/pppp1p1p/6p1/4p3/2P1P3/8/PP1P1PPP/RNBQKBNR": "English Opening: Adorjan Defense",
+ "rnbqkbnr/ppppp1pp/8/5p2/2P5/8/PP1PPPPP/RNBQKBNR": "English Opening: Anglo-Dutch Defense",
+ "rnbqkbnr/ppppp1pp/8/5p2/2P1P3/8/PP1P1PPP/RNBQKBNR": "English Opening: Anglo-Dutch Defense, Hickmann Gambit",
+ "rnbqkbnr/ppp1p1pp/3p4/5p2/2P1P3/5N2/PP1P1PPP/RNBQKB1R": "English Opening: Anglo-Dutch Variation, Chabanon Gambit",
+ "rnbqkb1r/ppppp1pp/5n2/5p2/2P1P3/2N5/PP1P1PPP/R1BQKBNR": "English Opening: Anglo-Dutch Variation, Ferenc Gambit",
+ "r1bqkbnr/pppppppp/2n5/8/2P5/8/PP1PPPPP/RNBQKBNR": "English Opening: Anglo-Lithuanian Variation",
+ "rnbqkbnr/ppp1pppp/8/3p4/2P5/8/PP1PPPPP/RNBQKBNR": "English Opening: Anglo-Scandinavian Defense",
+ "rnbqkbnr/ppp2ppp/4p3/3P4/8/8/PP1PPPPP/RNBQKBNR": "English Opening: Anglo-Scandinavian Defense, Löhn Gambit",
+ "rnb1kbnr/ppp1pppp/8/q7/8/2N5/PP1PPPPP/R1BQKBNR": "English Opening: Anglo-Scandinavian Defense, Malvinas Variation",
+ "rnbqkb1r/ppp1pppp/5n2/3P4/8/8/PP1PPPPP/RNBQKBNR": "English Opening: Anglo-Scandinavian Defense, Schulz Gambit",
+ "rnbqkbnr/pppppp1p/6p1/8/2P5/8/PP1PPPPP/RNBQKBNR": "English Opening: Great Snake Variation",
+ "rnbqkbnr/p1pppppp/8/1p6/2P5/8/PP1PPPPP/RNBQKBNR": "English Opening: Jaenisch Gambit",
+ "rnbq1rk1/1p3pbp/p1pp1np1/4p3/2P1P3/2NP2P1/PP2NPBP/R1BQ1RK1": "English Opening: King's English Variation, Botvinnik System, Prickly Pawn Pass System",
+ "rnbqkbnr/pppppp1p/8/6p1/2P5/8/PP1PPPPP/RNBQKBNR": "English Opening: Myers Defense",
+ "rnbqk1nr/ppppppbp/8/6p1/2PP4/8/PP2PPPP/RNBQKBNR": "English Opening: Myers Gambit",
+ "rnbqkb1r/ppppp1pp/5n2/8/2P1p1P1/2N5/PP1P1P1P/R1BQKBNR": "English Opening: Porcupine Variation",
+ "rnbqkbnr/ppppp1pp/8/5p2/2P3P1/8/PP1PPP1P/RNBQKBNR": "English Opening: Wade Gambit",
+ "rnbqkbnr/pppp1p1p/8/4p1p1/2PP4/8/PP2PPPP/RNBQKBNR": "English Opening: Zilbermints Gambit",
+ "rnbqkbnr/pp1ppppp/2p5/8/2P5/8/PP1PPPPP/RNBQKBNR": "English Opening: Caro-Kann Defensive System",
+ "rnbqkb1r/pp2pp1p/2p2np1/3p4/2P5/1P3N2/PB1PPPPP/RN1QKB1R": "Réti Opening: Anglo-Slav Variation, Bled Variation",
+ "rnbqkbnr/pp2pppp/2p5/3p4/2P5/1P3N2/P2PPPPP/RNBQKB1R": "Réti Opening: Anglo-Slav Variation, Bogoljubov Variation",
+ "rn1qkbnr/pp2pppp/2p5/3p4/2P3b1/1P3N2/P2PPPPP/RNBQKB1R": "Réti Opening: Anglo-Slav Variation, Bogoljubov Variation",
+ "rnbqkb1r/pp2pppp/2p2n2/3p4/2P5/1P3N2/PB1PPPPP/RN1QKB1R": "Réti Opening: Anglo-Slav Variation, Bogoljubov Variation",
+ "rn1qkb1r/pp2pppp/2p2n2/3p4/2P3b1/1P3N2/PB1PPPPP/RN1QKB1R": "Réti Opening: Anglo-Slav Variation, Capablanca Variation",
+ "rn1qkb1r/pp2pppp/2p2n2/3p1b2/2P5/1P3NP1/P2PPP1P/RNBQKB1R": "Réti Opening: Anglo-Slav Variation, London Defensive System",
+ "rn1qkb1r/pp2pppp/2p2n2/3p1b2/2P5/1P3N2/PB1PPPPP/RN1QKB1R": "Réti Opening: Anglo-Slav Variation, New York System",
+ "rn1qkb1r/pp2pppp/2p2n2/3p4/2P3b1/1P3NP1/P2PPP1P/RNBQKB1R": "Réti Opening: Anglo-Slav Variation, Torre System",
+ "rnbqkbnr/pppp1ppp/4p3/8/2P5/8/PP1PPPPP/RNBQKBNR": "English Opening: Agincourt Defense",
+ "rnbqkbnr/pppp1ppp/4p3/8/2P5/5N2/PP1PPPPP/RNBQKB1R": "English Opening: Agincourt Defense",
+ "rnbqkbnr/ppp2ppp/4p3/3p4/2P5/5N2/PP1PPPPP/RNBQKB1R": "English Opening: Agincourt Defense",
+ "rnbqk2r/ppp2ppp/3bpn2/3p4/2P5/5NP1/PP1PPPBP/RNBQK2R": "English Opening: Agincourt Defense, Bogoljubov Defense",
+ "rn1qkbnr/pbp2ppp/1p2p3/3p4/2P5/5NP1/PP1PPPBP/RNBQ1RK1": "English Opening: Agincourt Defense, Catalan Defense",
+ "rnbqkbnr/pp3ppp/4p3/2pp4/2P5/5NP1/PP1PPP1P/RNBQKB1R": "English Opening: Agincourt Defense, Catalan Defense",
+ "rnbqkb1r/ppp2ppp/4pn2/8/2p5/5NP1/PP1PPPBP/RNBQK2R": "English Opening: Agincourt Defense, Catalan Defense Accepted",
+ "rnbqkb1r/pp3ppp/2p1pn2/3p4/2P5/5NP1/PP1PPPBP/RNBQK2R": "English Opening: Agincourt Defense, Catalan Defense, Semi-Slav Defense",
+ "rnbqkbnr/pp3ppp/2p1p3/3p4/2P5/5NP1/PP1PPP1P/RNBQKB1R": "English Opening: Agincourt Defense, Kurajica Defense",
+ "r1bqk2r/pp2bppp/2n1pn2/2pp4/2P5/1P3NP1/P2PPPBP/RNBQ1RK1": "English Opening: Agincourt Defense, Tarrasch Defense",
+ "rnbqkb1r/pp3ppp/4pn2/2pp4/2P5/1P2PN2/PB1P1PPP/RN1QKB1R": "English Opening: Agincourt Defense, Wimpy System",
+ "rnbqkb1r/ppp2ppp/4pn2/3p4/2P5/5NP1/PP1PPP1P/RNBQKB1R": "English Opening: Neo-Catalan",
+ "rnbqk2r/ppp1bppp/4pn2/3p4/2P5/5NP1/PP1PPPBP/RNBQK2R": "English Opening: Neo-Catalan Declined",
+ "rnbqkb1r/2pp1ppp/p3pn2/1p6/2P5/5NP1/PP1PPPBP/RNBQK2R": "English Opening: Romanishin Gambit",
+ "r1bqk2r/pp2bppp/2n1p3/2pn4/8/2N2NP1/PP1PPPBP/R1BQ1RK1": "English Opening: Agincourt Defense, Keres Defense",
+ "rnbqk2r/ppp1bppp/4pn2/3p4/2P5/5NP1/PP1PPPBP/RNBQ1RK1": "English Opening: Agincourt Defense, Neo-Catalan Declined",
+ "rnbq1rk1/pp2bppp/2p1pn2/3p4/2P5/1P3NP1/PB1PPPBP/RN1Q1RK1": "Réti Opening: Anglo-Slav Variation, Bogoljubov Variation, Stonewall Line",
+ "rnbqkb1r/pppppppp/5n2/8/2P5/8/PP1PPPPP/RNBQKBNR": "English Opening: Anglo-Indian Defense",
+ "rnbqk2r/ppppppbp/5np1/8/2P1P3/2N2N2/PP1P1PPP/R1BQKB1R": "English Opening: Anglo-Indian Defense, Anti-Anti-Grünfeld",
+ "rnbqkb1r/ppp1pp1p/5np1/3p4/2P5/5NP1/PP1PPP1P/RNBQKB1R": "English Opening: Anglo-Indian Defense, Grünfeld Formation",
+ "rnbqkb1r/pppppp1p/5np1/8/2P5/5N2/PP1PPPPP/RNBQKB1R": "English Opening: Anglo-Indian Defense, King's Indian Formation",
+ "rn1qkb1r/pbpppp1p/1p3np1/8/2P5/5NP1/PP1PPPBP/RNBQK2R": "English Opening: Anglo-Indian Defense, King's Indian Formation, Double Fianchetto",
+ "rnbqkb1r/pppppppp/5n2/8/2P5/5N2/PP1PPPPP/RNBQKB1R": "English Opening: Anglo-Indian Defense, King's Knight Variation",
+ "rnbqkb1r/ppp1pppp/3p1n2/8/2P5/5N2/PP1PPPPP/RNBQKB1R": "English Opening: Anglo-Indian Defense, Old Indian Formation",
+ "rnbqkb1r/p1pppppp/1p3n2/8/2P5/5N2/PP1PPPPP/RNBQKB1R": "English Opening: Anglo-Indian Defense, Queen's Indian Formation",
+ "rn1qkb1r/pbpp1ppp/1p2pn2/8/2P5/5NP1/PP1PPPBP/RNBQK2R": "English Opening: Anglo-Indian Defense, Queen's Indian Formation",
+ "rnbqkb1r/1ppp1ppp/p3pn2/8/2P5/5NP1/PP1PPP1P/RNBQKB1R": "English Opening: Anglo-Indian Defense, Romanishin Variation",
+ "rnbqkb1r/ppp1pppp/5n2/3p4/2P5/5N2/PP1PPPPP/RNBQKB1R": "English Opening: Anglo-Indian Defense, Scandinavian Defense",
+ "rnbqkb1r/ppp1pppp/8/3n4/8/5N2/PP1PPPPP/RNBQKB1R": "English Opening: Anglo-Indian Defense, Scandinavian Defense, Exchange Variation",
+ "rnbqkb1r/pp1ppp1p/2p2np1/8/2P5/5NP1/PP1PPP1P/RNBQKB1R": "English Opening: Anglo-Indian Defense, Slav Formation",
+ "rnbqkb1r/pppppppp/5n2/8/1PP5/8/P2PPPPP/RNBQKBNR": "English Orangutan",
+ "rnbqkb1r/ppp1pppp/5n2/3p4/2P5/2N5/PP1PPPPP/R1BQKBNR": "English Opening: Anglo-Grünfeld Defense",
+ "rnbqk2r/ppp2pbp/6p1/3np3/8/2N2NP1/PP1PPPBP/R1BQK2R": "English Opening: Anglo-Grünfeld Defense, Korchnoi Variation",
+ "rnbqkb1r/ppp1pppp/8/3n4/8/2N2N2/PP1PPPPP/R1BQKB1R": "English Opening: Anglo-Indian Defense, Anglo-Grünfeld Variation",
+ "rnbqkb1r/ppp1pp1p/1n4p1/8/8/2N3P1/PP1PPPBP/R1BQK1NR": "English Opening: Anglo-Indian Defense, Anglo-Grünfeld Variation",
+ "rnbqkb1r/ppp1pp1p/6p1/8/8/2n3P1/PP1PPPBP/R1BQK1NR": "English Opening: Anglo-Indian Defense, Anglo-Grünfeld Variation",
+ "rnbqkb1r/pppppppp/5n2/8/2P5/2N5/PP1PPPPP/R1BQKBNR": "English Opening: Anglo-Indian Defense, Queen's Knight Variation",
+ "rnbqkb1r/pppp1ppp/4pn2/8/2P5/2N5/PP1PPPPP/R1BQKBNR": "English Opening: Anglo-Indian Defense, Hedgehog System",
+ "rnbqk2r/pppp1ppp/4pn2/8/1bP5/2N2N2/PP1PPPPP/R1BQKB1R": "English Opening: Anglo-Indian Defense, Nimzo-English",
+ "rnbqkb1r/p1pp1ppp/1p2pn2/8/2P5/2N2N2/PP1PPPPP/R1BQKB1R": "English Opening: Anglo-Indian Defense, Queen's Indian Formation",
+ "rn1qkb1r/pbpp1ppp/1p2pn2/8/2P1P3/2NB1N2/PP1P1PPP/R1BQK2R": "English Opening: Anglo-Indian Defense, Queen's Indian Variation",
+ "rnbqk2r/pppp1ppp/4pn2/8/1bP3P1/2N2N2/PP1PPP1P/R1BQKB1R": "English Opening: Anglo-Indian Defense, Zvjaginsev-Krasenkow Attack",
+ "rnbqkb1r/pppp1ppp/4pn2/8/2P1P3/2N5/PP1P1PPP/R1BQKBNR": "English Opening: Mikenas-Carls Variation",
+ "r1bqkb1r/pppp1ppp/2n1pn2/8/2P1P3/2N5/PP1P1PPP/R1BQKBNR": "English Opening: Mikenas-Carls Variation",
+ "rnbqkb1r/ppp2ppp/4pn2/3pP3/2P5/2N5/PP1P1PPP/R1BQKBNR": "English Opening: Mikenas-Carls Variation",
+ "rnbqkbnr/pp1p1ppp/4p3/2p1P3/2P5/2N5/PP1P1PPP/R1BQKBNR": "English Opening: Anglo-Indian Defense, Flohr-Mikenas-Carls Variation, Nei Gambit",
+ "rnbqkb1r/pp1p1ppp/4pn2/2p5/2P1P3/2N5/PP1P1PPP/R1BQKBNR": "English Opening: Mikenas-Carls, Sicilian",
+ "rnbqkbnr/pppp1pp1/8/4p2p/2P5/6P1/PP1PPP1P/RNBQKBNR": "English Opening: Drill Variation",
+ "rnbqkbnr/pppp1ppp/8/4p3/2P5/8/PP1PPPPP/RNBQKBNR": "English Opening: King's English Variation",
+ "rnbqkb1r/pppp1ppp/5n2/8/2P2p2/4PN2/PP1P2PP/RNBQKB1R": "English Opening: King's English Variation, Kahiko-Hula Gambit",
+ "rnbqkbnr/pppp1ppp/8/4p3/2P5/5N2/PP1PPPPP/RNBQKB1R": "English Opening: King's English Variation, Nimzowitsch Variation",
+ "rnbqkbnr/pppp1ppp/8/8/2P1p3/5N2/PP1PPPPP/RNBQKB1R": "English Opening: King's English Variation, Nimzowitsch-Flohr Variation",
+ "rnbqkbnr/ppp2ppp/3p4/4p3/2P5/2N2N2/PP1PPPPP/R1BQKB1R": "English Opening: King's English Variation",
+ "rnbqkbnr/pp3ppp/2pp4/4p3/2P5/2N3P1/PP1PPP1P/R1BQKBNR": "English Opening: King's English Variation, Keres Defense",
+ "rnbqk1nr/pppp1ppp/8/4p3/1bP5/2N5/PP1PPPPP/R1BQKBNR": "English Opening: King's English Variation, Kramnik-Shirov Counterattack",
+ "rnbqkbnr/pppp1ppp/8/4p3/2P5/2N5/PP1PPPPP/R1BQKBNR": "English Opening: King's English Variation, Reversed Sicilian",
+ "rn1qkbnr/ppp2ppp/3p4/4p3/2P3b1/2N2N2/PP1PPPPP/R1BQKB1R": "English Opening: King's English Variation, Smyslov Defense",
+ "r2qkbnr/ppp2ppp/2npb3/4p3/2P5/2N3P1/PP1PPPBP/R1BQK1NR": "English Opening: King's English Variation, Troger Defense",
+ "rnbqkb1r/pppp1ppp/5n2/4p3/2P5/2N3P1/PP1PPP1P/R1BQKBNR": "English Opening: Carls-Bremen System",
+ "rnbqkb1r/p1pp1ppp/5n2/1p4N1/2P1p3/2N5/PP1PPPPP/R1BQKB1R": "English Opening: King's English Variation, Bellon Gambit",
+ "rnbqkb1r/pppp1ppp/5n2/4p3/2P5/2N5/PP1PPPPP/R1BQKBNR": "English Opening: King's English Variation, Two Knights Variation",
+ "rnbqkb1r/ppp2ppp/5n2/3pp3/2P5/2N3P1/PP1PPP1P/R1BQKBNR": "English Opening: King's English Variation, Two Knights Variation, Reversed Dragon",
+ "rnbqk2r/pppp1ppp/5n2/4p3/1bP5/2N3P1/PP1PPP1P/R1BQKBNR": "English Opening: King's English Variation, Two Knights Variation, Smyslov System",
+ "rnbqkb1r/pppp1ppp/8/6N1/2P1p1n1/2N5/PP1PPPPP/R1BQKB1R": "English Opening: King's English, Erbenheimer Gambit",
+ "rnbqkb1r/pppp1ppp/5n2/4p3/2P2P2/2N5/PP1PP1PP/R1BQKBNR": "English Opening: King's English, Mazedonisch",
+ "rnbqkb1r/pp1p1ppp/2p2n2/4p3/2P5/2N3P1/PP1PPP1P/R1BQKBNR": "English Opening: King's English Variation, Two Knights Variation, Keres Variation",
+ "rnbqkb1r/pppp1p1p/5np1/4p3/2P5/2N3P1/PP1PPP1P/R1BQKBNR": "English Opening: King's English Variation, Two Knights Variation, Fianchetto Line",
+ "r1bqk2r/pppp1pbp/2n3pn/4p3/2P5/2N3P1/PP1PPPBP/1RBQK1NR": "English Opening: Closed, Taimanov Variation",
+ "r1bqk2r/ppp2pbp/2np2pn/4p3/2P5/2N1P1P1/PP1PNPBP/R1BQK2R": "English Opening: Closed, Taimanov Variation",
+ "r2qk1nr/ppp2pbp/2npb1p1/4p3/2P5/2N1P1P1/PP1PNPBP/R1BQK2R": "English Opening: King's English Variation, Bremen-Hort Variation",
+ "r1bqk1nr/pppp1pbp/2n3p1/4p3/2P5/2NP2P1/PP2PPBP/R1BQK1NR": "English Opening: King's English Variation, Closed System",
+ "r1bqk1nr/pppp1pbp/2n3p1/4p3/2P5/2N3P1/PP1PPPBP/1RBQK1NR": "English Opening: King's English Variation, Hungarian Attack",
+ "r1bqkbnr/pppp1ppp/2n5/4p3/2P5/2N5/PP1PPPPP/R1BQKBNR": "English Opening: King's English Variation, Reversed Closed Sicilian",
+ "r1bqk1nr/pppp1pbp/2n3p1/4p3/2P5/2N3P1/PP1PPPBP/R1BQK1NR": "English Opening: King's English Variation, Taimanov Variation",
+ "r1bqk1nr/ppp2pbp/2np2p1/4p3/2P1P3/2NP2P1/PP3PBP/R1BQK1NR": "English Opening: King's English Variation, Botvinnik System",
+ "r1bqk1nr/ppp2pbp/2np2p1/4p3/2P5/2NP2P1/PP2PPBP/R1BQK1NR": "English Opening: King's English Variation, Closed System, Full Symmetry",
+ "r1bqkbnr/pppp1ppp/2n5/4p3/2P5/2N2N2/PP1PPPPP/R1BQKB1R": "English Opening: King's English Variation, Three Knights System",
+ "r1bqkb1r/pppp1ppp/2n2n2/4p3/2P1P3/2N2N2/PP1P1PPP/R1BQKB1R": "English Opening: Four Knights System, Nimzowitsch Variation",
+ "r1bqkb1r/pppp1ppp/2n2n2/4p3/2P5/2N2N2/PP1PPPPP/R1BQKB1R": "English Opening: King's English Variation, Four Knights Variation",
+ "r1bqk2r/pppp1pp1/5n1p/4n3/2PN3B/2P5/P3PPPP/R2QKB1R": "English Opening: King's English Variation, Four Knights Variation",
+ "r1bqkb1r/pppp1ppp/2n2n2/8/2PPp3/2N2N2/PP2PPPP/R1BQKB1R": "English Opening: King's English Variation, Four Knights Variation, Bradley Beach Variation",
+ "r1bqkb1r/pppp1ppp/2n2n2/4p3/2P5/2NP1N2/PP2PPPP/R1BQKB1R": "English Opening: King's English Variation, Four Knights Variation, Flexible Line",
+ "r1bqkb1r/pppp1ppp/2n2n2/4p3/2P5/P1N2N2/1P1PPPPP/R1BQKB1R": "English Opening: King's English Variation, Four Knights Variation, Korchnoi Line",
+ "r1bqkb1r/pppp1ppp/2n2n2/4p3/2P5/2N1PN2/PP1P1PPP/R1BQKB1R": "English Opening: King's English Variation, Four Knights Variation, Quiet Line",
+ "r1bqk2r/pppp1ppp/2n2n2/4p3/2P5/2b1PN2/PPQP1PPP/R1B1KB1R": "English Opening: King's English Variation, Four Knights Variation, Quiet Line",
+ "r1bqr1k1/pppp1ppp/2n2n2/3NpQ2/1bP5/4PN2/PP1P1PPP/R1B1KB1R": "English Opening: King's English Variation, Four Knights Variation, Quiet Line",
+ "r1bqkb1r/pppp1ppp/2n2n2/4p3/2P5/2N2NP1/PP1PPP1P/R1BQKB1R": "English Opening: King's English Variation, Four Knights Variation, Fianchetto Line",
+ "rnbqkbnr/pp1ppppp/8/2p5/2P5/8/PP1PPPPP/RNBQKBNR": "English Opening: Symmetrical Variation",
+ "rnbqkbnr/pp1ppppp/8/2p5/2P5/5N2/PP1PPPPP/RNBQKB1R": "English Opening: Symmetrical Variation",
+ "rn1qk2r/pb1pbppp/1p2pn2/2p5/2P5/2N2NP1/PP1PPPBP/R1BQ1RK1": "English Opening: Symmetrical Variation, Hedgehog Defense",
+ "rnbqkb1r/pp1ppppp/5n2/2p5/1PP5/5N2/P2PPPPP/RNBQKB1R": "English Opening: Symmetrical Variation, Napolitano Gambit",
+ "r2qk2r/1b1nbppp/pp1ppn2/8/2PQ4/1PN2NP1/P3PPBP/R1BR2K1": "English Opening: Symmetrical, Hedgehog, Flexible Formation",
+ "rnbqkbnr/pp1ppppp/8/2p5/1PP5/8/P2PPPPP/RNBQKBNR": "English Opening: Wing Gambit",
+ "rnbqkb1r/pp1ppppp/5n2/2p5/2PP4/5N2/PP2PPPP/RNBQKB1R": "English Opening: Symmetrical Variation, Anti-Benoni Variation",
+ "rnbqkb1r/pp1p1ppp/4pn2/8/2PN4/8/PP2PPPP/RNBQKB1R": "English Opening: Symmetrical Variation, Anti-Benoni Variation, Spielmann Defense",
+ "r1b1kb1r/pp1p1ppp/1qn1pn2/8/2PN4/2N3P1/PP2PP1P/R1BQKB1R": "English Opening: Symmetrical Variation, Anti-Benoni Variation, Geller Variation",
+ "r1bqkb1r/pp1p1ppp/2n1pn2/8/2PN4/2N5/PP2PPPP/R1BQKB1R": "English Opening: Symmetrical Variation, Anti-Benoni Variation, Spielmann Defense",
+ "rnbqkb1r/pp1ppppp/5n2/2p5/2P5/2N3P1/PP1PPP1P/R1BQKBNR": "English Opening: Symmetrical Variation, Fianchetto Variation",
+ "rnbqkbnr/pp1ppppp/8/2p5/2P5/2N5/PP1PPPPP/R1BQKBNR": "English Opening: Symmetrical Variation, Normal Variation",
+ "rnbqkb1r/ppn1pppp/8/2p5/8/2N3P1/PP1PPPBP/R1BQK1NR": "English Opening: Symmetrical Variation, Rubinstein Variation",
+ "rnbqkb1r/pp1ppppp/5n2/2p5/2P5/2N2N2/PP1PPPPP/R1BQKB1R": "English Opening: Symmetrical Variation, Three Knights Variation",
+ "r1bqkb1r/pp1ppppp/2n2n2/2p5/2P5/2N2N2/PP1PPPPP/R1BQKB1R": "English Opening: Symmetrical Variation, Four Knights Variation",
+ "r1bqkbnr/pp1ppppp/2n5/2p5/2P5/2N5/PP1PPPPP/R1BQKBNR": "English Opening: Symmetrical Variation, Two Knights Variation",
+ "r1bqk1nr/pp1pppbp/2n3p1/2p5/2P1P3/2N3P1/PP1P1PBP/R1BQK1NR": "English Opening: Symmetrical Variation, Botvinnik System",
+ "r1bqk1nr/pp1p1pbp/2n3p1/2p1p3/2P5/2N1P1P1/PP1P1PBP/R1BQK1NR": "English Opening: Symmetrical Variation, Botvinnik System Reversed, with e3",
+ "r1bqk1nr/pp1pppbp/2n3p1/2p5/2P5/2N3P1/PP1PPPBP/R1BQK1NR": "English Opening: Symmetrical Variation, Symmetrical Variation",
+ "r1bqkbnr/pp1ppppp/2n5/2p5/2P5/2N3P1/PP1PPP1P/R1BQKBNR": "English Opening: Symmetrical Variation, Two Knights, Fianchetto Variation",
+ "r1bqk1nr/pp1p1pbp/2n3p1/2p1p3/2P5/2N2NP1/PP1PPPBP/R1BQK2R": "English Opening: Symmetrical Variation, Botvinnik System Reversed, with Nf3",
+ "r1bqk1nr/pp1pppbp/2n3p1/2p5/2P5/2N2NP1/PP1PPPBP/R1BQK2R": "English Opening: Symmetrical Variation, Three Knights, Fianchetto Variation",
+ "r1bq1rk1/pp1pppbp/2n2np1/2p5/2P5/1PN2NP1/P2PPPBP/R1BQ1RK1": "English Opening: Symmetrical Variation, Double Fianchetto",
+ "r1bq1rk1/pp1pppbp/2n2np1/2p5/2P5/2NP1NP1/PP2PPBP/R1BQ1RK1": "English Opening: Symmetrical Variation, Duchamp Variation",
+ "r1bqk2r/pp1pppbp/2n2np1/2p5/2P5/2N2NP1/PP1PPPBP/R1BQK2R": "English Opening: Symmetrical Variation, Full Symmetry Line",
+ "r1bq1rk1/pp1pppbp/2n2np1/2p5/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1": "English Opening: Symmetrical Variation, Mecking Variation",
+ "r1bqkbnr/pppppppp/n7/8/3P4/8/PPP1PPPP/RNBQKBNR": "Australian Defense",
+ "rnbqk2r/pp2npbp/3p2p1/2pP4/4P3/2N2N2/PP3PPP/R1BQKB1R": "Benoni Defense: Franco-Sicilian Hybrid",
+ "rnbqkbnr/pppppp1p/8/6p1/3P4/8/PPP1PPPP/RNBQKBNR": "Borg Defense: Borg Gambit",
+ "rnb1k1nr/pp1pppbp/6p1/q1p5/3P4/3BPN2/PPP2PPP/RNBQK2R": "Colle System: Pterodactyl Variation",
+ "rnb1k1nr/pp1pppbp/6p1/q7/3N4/3BP3/PPP2PPP/RNBQK2R": "Colle System: Siroccopteryx Variation",
+ "rnbqkbnr/pppp2pp/4p3/5p2/3P1BP1/8/PPP1PP1P/RN1QKBNR": "Dutch Defense: Senechaud Gambit",
+ "rnbqk2r/pp4pp/2pbpn2/3p1p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1": "Dutch Defense: Stonewall Variation, Modern Variation",
+ "rnbqkbnr/p1pppppp/1p6/8/3P4/8/PPP1PPPP/RNBQKBNR": "English Defense",
+ "rnbqkbnr/p1pp1ppp/1p2p3/8/2PP4/8/PP2PPPP/RNBQKBNR": "English Defense",
+ "rn1qkbnr/pbpp1ppp/1p6/4p3/2PP4/2N5/PP2PPPP/R1BQKBNR": "English Defense: Eastbourne Gambit",
+ "rn1qkb1r/pbpp2pp/1p2pn2/5P2/2PP4/2N5/PP3PPP/R1BQKBNR": "English Defense: Hartlaub Gambit Accepted",
+ "rn1qkbnr/pbpp2pp/1p2p3/3P1p2/2P1P3/2N5/PP3PPP/R1BQKBNR": "English Defense: Hartlaub Gambit Declined",
+ "r2qkbnr/pbpp1ppp/1pn1p3/8/2PPP3/3B4/PP3PPP/RNBQK1NR": "English Defense: Perrin Variation",
+ "rn1qkb1r/pbpp2pp/1p2p2n/5P2/2PP4/5P2/PP4PP/RNBQKBNR": "English Defense: Poli Gambit",
+ "rnbqkbnr/pppp1ppp/8/4p3/3P4/8/PPP1PPPP/RNBQKBNR": "Englund Gambit",
+ "rnbqkbnr/pppp1ppp/8/3Pp3/8/8/PPP1PPPP/RNBQKBNR": "Englund Gambit Complex Declined",
+ "rnb1k1nr/pppp1ppp/8/2bPp3/4P2q/8/PPP2PPP/RNBQKBNR": "Englund Gambit Complex Declined: Diemer Counterattack",
+ "r1b1kbnr/ppppqppp/2n5/4P3/8/5N2/PPP1PPPP/RNBQKB1R": "Englund Gambit Complex: Englund Gambit",
+ "r1bqk1nr/pppp1ppp/2n5/2b1P3/8/5N2/PPP1PPPP/RNBQKB1R": "Englund Gambit Complex: Felbecker Gambit",
+ "rnbqkbnr/ppp2ppp/3p4/4P3/8/8/PPP1PPPP/RNBQKBNR": "Englund Gambit Complex: Hartlaub-Charlick Gambit",
+ "rnb1kbnr/pppp1ppp/8/4P3/7q/8/PPP1PPPP/RNBQKBNR": "Englund Gambit Complex: Mosquito Gambit",
+ "rnbqkbnr/pppp2pp/5p2/4P3/8/8/PPP1PPPP/RNBQKBNR": "Englund Gambit Complex: Soller Gambit",
+ "r1bqkbnr/pppp2pp/2n2p2/4P3/8/5N2/PPP1PPPP/RNBQKB1R": "Englund Gambit Complex: Soller Gambit Deferred",
+ "r1b1kbnr/ppppqppp/2n5/3QP3/8/5N2/PPP1PPPP/RNB1KB1R": "Englund Gambit Complex: Stockholm Variation",
+ "r1bqkb1r/ppppnppp/2n5/4P3/8/5N2/PPP1PPPP/RNBQKB1R": "Englund Gambit Complex: Zilbermints Gambit",
+ "rnbqkbnr/pppp1ppp/8/4p3/3P4/5N2/PPP1PPPP/RNBQKB1R": "Englund Gambit Declined: Reversed Alekhine",
+ "rnbqkbnr/pppp1ppp/8/8/3Pp3/8/PPP1PPPP/RNBQKBNR": "Englund Gambit Declined: Reversed Brooklyn",
+ "rnbqkbnr/pppp1ppp/8/4p3/3P4/4P3/PPP2PPP/RNBQKBNR": "Englund Gambit Declined: Reversed French",
+ "rnbqkbnr/pppp1ppp/8/8/3Pp3/5N2/PPP1PPPP/RNBQKB1R": "Englund Gambit Declined: Reversed Krebs",
+ "rnbqkbnr/pppp1ppp/8/4N3/3Pp3/8/PPP1PPPP/RNBQKB1R": "Englund Gambit Declined: Reversed Mokele Mbembe",
+ "rnbqkbnr/pppp1ppp/4p3/8/3P4/8/PPP1PPPP/RNBQKBNR": "Horwitz Defense",
+ "rnbqkbnr/pppp1ppp/8/4p3/2PP4/8/PP2PPPP/RNBQKBNR": "Horwitz Defense: Zilbermints Gambit",
+ "rnbqk1nr/pppp1ppp/4p3/8/1bPP4/8/PP2PPPP/RNBQKBNR": "Kangaroo Defense",
+ "rnbqk1nr/pppp1ppp/4p3/8/1bPP4/2N5/PP2PPPP/R1BQKBNR": "Kangaroo Defense: Keres Defense, Transpositional Variation",
+ "r1bqkbnr/pppppppp/2n5/8/3P4/8/PPP1PPPP/RNBQKBNR": "Mikenas Defense",
+ "r1bqkbnr/pppp1ppp/8/3Pp3/2Pn4/8/PP2PPPP/RNBQKBNR": "Mikenas Defense: Cannstatter Variation",
+ "r1bqkbnr/ppppnppp/8/3Pp3/2P5/8/PP2PPPP/RNBQKBNR": "Mikenas Defense: Lithuanian Variation",
+ "r1bqkbnr/pppp1ppp/8/8/2n5/2N5/PP2PPPP/R1BQKBNR": "Mikenas Defense: Pozarek Gambit",
+ "rnbqk1nr/pp1pp2p/6p1/2pP1p2/2P5/2P5/P3PPPP/R1BQKBNR": "Modern Defense: Beefeater Variation",
+ "rnbqkb1r/pppppp1p/5np1/7P/3P4/8/PPP1PPP1/RNBQKBNR": "Modern Defense: Lizard Defense, Pirc-Diemer Gambit",
+ "rnbqkbnr/pppppppp/8/3P4/8/8/PPP1PPPP/RNBQKBNR": "Montevideo Defense",
+ "rnbqkbnr/p1pppppp/8/1p6/3P4/8/PPP1PPPP/RNBQKBNR": "Polish Defense",
+ "rn1qkbnr/pbpppppp/8/1B6/3PP3/8/PPP2PPP/RNBQK1NR": "Polish Defense: Spassky Gambit Accepted",
+ "rnb1k1nr/pp2pp1p/3p2p1/q1pP4/2P1P3/2P5/P4PPP/R1BQKBNR": "Pterodactyl Defense: Central, Benoni Beefeater Pterodactyl",
+ "rnb1k1nr/pp1pppbp/6p1/q1pP4/2P1P3/8/PP3PPP/RNBQKBNR": "Pterodactyl Defense: Central, Benoni Pterodactyl",
+ "rnb1k1nr/pp1pppbp/6p1/q1pP4/2P5/2N5/PP2PPPP/R1BQKBNR": "Pterodactyl Defense: Fianchetto, Queen Benoni Pterodactyl",
+ "rnb1k1nr/pp1ppp1p/6p1/q1pP4/2P5/2P5/P3PPPP/R1BQKBNR": "Pterodactyl Defense: Fianchetto, Queen Pteranodon",
+ "rnb1k1nr/pp1pppbp/6p1/q1p5/3P4/5NP1/PPP1PPBP/RNBQK2R": "Pterodactyl Defense: Fianchetto, Queen Pterodactyl",
+ "rnbqk1nr/pp1pppbp/6p1/2p5/2PP4/2N1P3/PP3PPP/R1BQKBNR": "Pterodactyl Defense: Queen Pterodactyl, Quiet Line",
+ "rnbqkbnr/pppppppp/8/8/3P4/8/PPP1PPPP/RNBQKBNR": "Queen's Pawn Game",
+ "rnbqkbnr/pp2pppp/2pp4/8/2PP4/8/PP2PPPP/RNBQKBNR": "Queen's Pawn Game: Anglo-Slav Opening",
+ "rnbqkbnr/pppppp1p/6p1/8/3P4/8/PPP1PPPP/RNBQKBNR": "Queen's Pawn Game: Modern Defense",
+ "rnbqkb1r/p2ppppp/2p2n2/1p6/2PP4/5N2/PP2PPPP/RNBQKB1R": "Slav Indian: Kudischewitsch Gambit",
+ "rnbqkbnr/pppppppp/8/3PP3/8/8/PPP2PPP/RNBQKBNR": "Zaire Defense",
+ "rnbqk1nr/ppp1ppbp/3p2p1/8/2PP4/2N5/PP2PPPP/R1BQKBNR": "Modern Defense",
+ "rnbqk1nr/pppp1pbp/6p1/4p3/2PPP3/8/PP3PPP/RNBQKBNR": "Modern Defense: Neo-Modern Defense",
+ "rnbqkbnr/ppp1pppp/3p4/8/2PP4/8/PP2PPPP/RNBQKBNR": "Old Indian Defense",
+ "rnbqkbnr/ppp1pppp/3p4/8/3P4/8/PPP1PPPP/RNBQKBNR": "Queen's Pawn Game",
+ "rnbqkbnr/ppp2ppp/3p4/4p3/2PP4/8/PP2PPPP/RNBQKBNR": "Rat Defense: English Rat",
+ "r1bqkbnr/ppp2ppp/2np4/4P3/2P5/8/PP2PPPP/RNBQKBNR": "Rat Defense: English Rat, Lisbon Gambit",
+ "rn1qkbnr/ppp2ppp/3pb3/4P3/2P5/8/PP2PPPP/RNBQKBNR": "Rat Defense: English Rat, Pounds Gambit",
+ "rn1qk1nr/ppp1ppbp/3p2p1/8/2PPP1b1/5N2/PP3PPP/RNBQKB1R": "Robatsch Defense",
+ "rn1qkbnr/ppp1pppp/3p4/8/3P2b1/5N2/PPP1PPPP/RNBQKB1R": "Wade Defense",
+ "1r1qkbnr/pppnpppp/3p4/8/2PP2b1/1Q3N2/PP2PPPP/RNB1KB1R": "Zukertort Opening: Wade Defense, Chigorin Plan",
+ "rnbqk1nr/ppp1ppbp/3p2p1/8/2PPP3/2N5/PP3PPP/R1BQKBNR": "Modern Defense: Averbakh System",
+ "rnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/4BP2/PP4PP/RN1QKBNR": "Modern Defense: Averbakh Variation, Pseudo-Sämisch",
+ "r1bqk1nr/ppp1ppbp/2np2p1/8/2PPP3/2N5/PP3PPP/R1BQKBNR": "Modern Defense: Kotov Variation",
+ "rnbqk1nr/ppp1p1bp/3p2p1/5p2/2PPP3/2N5/PP3PPP/R1BQKBNR": "Modern Defense: Randspringer Variation",
+ "rnb1k1nr/pp2ppbp/3p2p1/q1p5/2PPP3/2N2N2/PP3PPP/R1BQKB1R": "Pterodactyl Defense",
+ "rnb1k1nr/pp2ppbp/3p2p1/q1p5/2PPP3/2N5/PP2NPPP/R1BQKB1R": "Pterodactyl Defense: Central, Bogolubovia",
+ "rnbqkbnr/pp1ppppp/8/2P5/8/8/PPP1PPPP/RNBQKBNR": "Benoni Defense: Benoni Gambit Accepted",
+ "r1bqkbnr/pp1ppppp/n7/2P5/8/8/PPP1PPPP/RNBQKBNR": "Benoni Defense: Benoni Gambit, Schlenker Defense",
+ "rnbqkb1r/pp1ppppp/5n2/2pP4/8/8/PPP1PPPP/RNBQKBNR": "Benoni Defense: Benoni-Indian Defense",
+ "rnbqkb1r/pp1ppppp/5n2/2pP4/8/5N2/PPP1PPPP/RNBQKB1R": "Benoni Defense: Benoni-Indian Defense, Kingside Move Order",
+ "rnbqkbnr/pp1pp1pp/8/2pP1p2/4P3/8/PPP2PPP/RNBQKBNR": "Benoni Defense: Benoni-Staunton Gambit",
+ "rnbqkbnr/p2ppppp/1p6/2P5/8/8/PPP1PPPP/RNBQKBNR": "Benoni Defense: Cormorant Gambit",
+ "rnbqkbnr/pp1p1ppp/4p3/2pP4/4P3/8/PPP2PPP/RNBQKBNR": "Benoni Defense: French Benoni",
+ "rnbqkb1r/pp1ppppp/5n2/3P4/2p5/5N2/PPP1PPPP/RNBQKB1R": "Benoni Defense: Hawk Variation",
+ "rnbqkbnr/pp1ppppp/8/2p5/3P4/8/PPP1PPPP/RNBQKBNR": "Benoni Defense: Old Benoni",
+ "rnbqkbnr/pp1ppppp/8/2pP4/8/8/PPP1PPPP/RNBQKBNR": "Benoni Defense: Old Benoni",
+ "rnbqkbnr/pp2pppp/3p4/2pP4/8/8/PPP1PPPP/RNBQKBNR": "Benoni Defense: Old Benoni",
+ "rnbqkbnr/pp1pp1pp/8/2pP1p2/8/8/PPP1PPPP/RNBQKBNR": "Benoni Defense: Old Benoni, Mujannah Formation",
+ "rnbqkbnr/pp2pp1p/3p2p1/2pP4/8/2N5/PPP1PPPP/R1BQKBNR": "Benoni Defense: Old Benoni, Schmid Variation",
+ "r1bqkbnr/pp1ppppp/n7/2pP4/8/8/PPP1PPPP/RNBQKBNR": "Benoni Defense: Snail Variation",
+ "rnb1kb1r/pp1ppppp/5n2/q1pP4/8/2N5/PPP1PPPP/R1BQKBNR": "Benoni Defense: Woozle",
+ "rnbqkbnr/pp1ppppp/8/2p5/1P1P4/8/P1P1PPPP/RNBQKBNR": "Benoni Defense: Zilbermints-Benoni Gambit",
+ "rnbqkbnr/pp1ppppp/8/8/1P1p4/5N2/P1P1PPPP/RNBQKB1R": "Benoni Defense: Zilbermints-Benoni Gambit",
+ "rnbqkbnr/pp1p1ppp/8/4p3/1P1p4/5N2/P1P1PPPP/RNBQKB1R": "Benoni Defense: Zilbermints-Benoni Gambit, Tamarkin Countergambit",
+ "rnbqkb1r/p2ppppp/5n2/1ppP4/8/5N2/PPP1PPPP/RNBQKB1R": "Indian Defense: Pseudo-Benko",
+ "rnbqkbnr/pp1ppppp/8/8/2Pp4/4P3/PP3PPP/RNBQKBNR": "Queen's Pawn Game: Liedmann Gambit",
+ "rnbqkbnr/pp1p1ppp/8/2pPp3/8/8/PPP1PPPP/RNBQKBNR": "Benoni Defense: Old Benoni",
+ "rnbqkbnr/pp3ppp/3p4/2pPp3/4P3/8/PPP2PPP/RNBQKBNR": "Benoni Defense: Semi-Benoni",
+ "rnbqkb1r/ppp1pppp/5n2/3p4/3P4/2NQ4/PPP1PPPP/R1B1KBNR": "Amazon Attack: Siberian Attack",
+ "rnbqkb1r/pppppppp/5n2/8/3P1P2/8/PPP1P1PP/RNBQKBNR": "Canard Opening",
+ "rnbqkb1r/pppppppp/5n2/8/3P4/8/PPP1PPPP/RNBQKBNR": "Indian Defense",
+ "rnbqkb1r/ppp1pppp/5n2/3p4/3P2P1/5P2/PPP1P2P/RNBQKBNR": "Indian Defense: Gedult Attack, Gedult Attack",
+ "rnbqkb1r/pppppppp/5n2/8/3P2P1/8/PPP1PP1P/RNBQKBNR": "Indian Defense: Gibbins-Weidenhagen Gambit",
+ "rnbqkb1r/pppppppp/8/8/3P2n1/8/PPP1PP1P/RNBQKBNR": "Indian Defense: Gibbins-Weidenhagen Gambit Accepted",
+ "rnbqkb1r/pppppppp/5n2/8/3PP3/5P2/PPP4P/RNBQKBNR": "Indian Defense: Gibbins-Weidenhagen Gambit, Maltese Falcon",
+ "rnbqkb1r/pppp1ppp/5n2/4p3/3P2P1/8/PPP1PP1P/RNBQKBNR": "Indian Defense: Gibbins-Weidenhagen Gambit, Oshima Defense",
+ "rnbqkb1r/ppp1pppp/3p1n2/8/3PP3/2N5/PPP1BP1P/R1BQK1NR": "Indian Defense: Gibbins-Weidenhagen Gambit, Stummer Gambit",
+ "rnbqkb1r/pppp1ppp/5n2/4p3/3P4/8/PPPNPPPP/R1BQKBNR": "Indian Defense: Lazard Gambit",
+ "rnbqkb1r/pppp1ppp/5n2/4p3/3P4/2N5/PPP1PPPP/R1BQKBNR": "Indian Defense: Maddigan Gambit",
+ "rnbqkb1r/pppppppp/5n2/8/3PP3/8/PPP2PPP/RNBQKBNR": "Indian Defense: Omega Gambit",
+ "rnbqkb1r/pppppppp/5n2/6B1/3P4/3B4/PPP2PPP/RN1QK1NR": "Indian Defense: Omega Gambit, Arafat Gambit",
+ "rnbqkb1r/ppp1pppp/5n2/3p4/3PP3/5P2/PPP3PP/RNBQKBNR": "Indian Defense: Paleface Attack, Blackmar-Diemer Gambit Deferred",
+ "rnbqkb1r/pppppppp/5n2/3P4/8/8/PPP1PPPP/RNBQKBNR": "Indian Defense: Pawn Push Variation",
+ "rnbqkb1r/pp1ppppp/5n2/2p5/3P4/2N5/PPP1PPPP/R1BQKBNR": "Indian Defense: Reversed Chigorin Defense",
+ "rnbqkb1r/pppppppp/5n2/8/3P4/6P1/PPP1PP1P/RNBQKBNR": "Indian Defense: Tartakower Attack",
+ "rnbqkb1r/pppppppp/5n2/8/3P4/5P2/PPP1P1PP/RNBQKBNR": "Paleface Attack",
+ "rnbqkb1r/ppp1pppp/5n2/3p4/3P4/2N5/PPP1PPPP/R1BQKBNR": "Queen's Pawn Game: Chigorin Variation",
+ "rnbqkb1r/ppp1pppp/5n2/3p4/3P4/2N2P2/PPP1P1PP/R1BQKBNR": "Queen's Pawn Game: Veresov, Richter Attack",
+ "rnbqkb1r/pppppppp/5n2/6B1/3P4/8/PPP1PPPP/RN1QKBNR": "Trompowsky Attack",
+ "rnbqkb1r/pppppp1p/8/6p1/3PnB2/8/PPP1PPPP/RN1QKBNR": "Trompowsky Attack: Borg Variation",
+ "rnbqkb1r/pppp1ppp/4pn2/6B1/3P4/8/PPP1PPPP/RN1QKBNR": "Trompowsky Attack: Classical Defense",
+ "rnbqkb1r/pppp1ppp/4pn2/6B1/3PP3/8/PPP2PPP/RN1QKBNR": "Trompowsky Attack: Classical Defense, Big Center Variation",
+ "rnbqkb1r/pppppppp/8/8/3Pn2B/8/PPP1PPPP/RN1QKBNR": "Trompowsky Attack: Edge Variation",
+ "rnb1kb1r/pp2pppp/2p5/q2p4/3PP2B/2P5/PP1Q1PPP/R3KBNR": "Trompowsky Attack: Edge Variation, Hergert Gambit",
+ "rn1qkb1r/ppp1pppp/5n2/3p1b2/3PP2B/2N2P2/PPP3PP/R2QKBNR": "Trompowsky Attack: Edge Variation, Hergert Gambit",
+ "rnb1kb1r/pp1ppppp/1q3n2/2pP2B1/8/2N5/PPP1PPPP/R2QKBNR": "Trompowsky Attack: Poisoned Pawn Variation",
+ "rnbqkb1r/pppppppp/8/6B1/3Pn2P/8/PPP1PPP1/RN1QKBNR": "Trompowsky Attack: Raptor Variation",
+ "rnbqkb1r/pppp1ppp/8/4p1P1/3P4/8/PPP1PPP1/RN1QKBNR": "Trompowsky Attack: Raptor Variation, Hergert Gambit",
+ "rnbqkb1r/pppppppp/8/8/3Pn3/5N2/PPP1PPPP/RNBQKB1R": "Döry Defense",
+ "rnbqkb1r/pp1ppppp/2p2n2/8/3P4/5N2/PPP1PPPP/RNBQKB1R": "Indian Defense: Czech-Indian",
+ "rnbqkb1r/pppppppp/5n2/8/3P4/5N2/PPP1PPPP/RNBQKB1R": "Indian Defense: Knights Variation",
+ "rnbqkb1r/1ppppppp/p4n2/8/3P4/5N2/PPP1PPPP/RNBQKB1R": "Indian Defense: Knights Variation, Alburt-Miles Variation",
+ "rnbqkb1r/pppp1ppp/4pn2/8/3P1B2/5N2/PPP1PPPP/RN1QKB1R": "Indian Defense: London System",
+ "rnbqkb1r/p1pppppp/5n2/1p6/3P4/5N2/PPP1PPPP/RNBQKB1R": "Indian Defense: Polish Variation",
+ "rnbqkb1r/pp1ppppp/5n2/2p5/3P4/5N2/PPP1PPPP/RNBQKB1R": "Indian Defense: Spielmann-Indian",
+ "rnbqkb1r/ppp1pppp/3p1n2/8/3P4/5N2/PPP1PPPP/RNBQKB1R": "Indian Defense: Wade-Tartakower Defense",
+ "rnb1kb1r/pp3ppp/1q2pn2/2pp2B1/3P4/2P1PN2/PP3PPP/RN1QKB1R": "Queen's Pawn Game: Torre Attack, Breyer Variation",
+ "rnbqkb1r/ppp2ppp/4pn2/3p2B1/3P4/2N2N2/PPP1PPPP/R2QKB1R": "Queen's Pawn Game: Veresov Attack, Classical Defense",
+ "rnbqkb1r/pppp1ppp/4pn2/6B1/3P4/5N2/PPP1PPPP/RN1QKB1R": "Torre Attack: Classical Defense",
+ "rnbqkb1r/pppp1pp1/4pn1p/6B1/3P4/5N2/PPP1PPPP/RN1QKB1R": "Torre Attack: Classical Defense, Nimzowitsch Variation",
+ "rnbqkb1r/p2p1ppp/1p2pn2/2pP2B1/8/4PN2/PPP2PPP/RN1QKB1R": "Torre Attack: Classical Defense, Petrosian Gambit",
+ "rnbqkb1r/pp1p1ppp/4pn2/2p3B1/3PP3/5N2/PPP2PPP/RN1QKB1R": "Torre Attack: Wagner Gambit",
+ "rnbqkb1r/pppp1ppp/4pn2/8/3P4/4PN2/PPP2PPP/RNBQKB1R": "Yusupov-Rubinstein System",
+ "rnbqkb1r/p1pp1ppp/1p3n2/4p3/3P4/2P2N2/PP2PPPP/RNBQKB1R": "Indian Defense: Schnepper Gambit",
+ "rn1qkb1r/pb1ppppp/1p3n2/2p5/3P4/5NP1/PPP1PPBP/RNBQK2R": "Marienbad System",
+ "rn1qkb1r/pb1ppppp/1p3n2/8/2PQ4/5NP1/PP2PPBP/RNB1K2R": "Marienbad System: Berg Variation",
+ "rnbqkb1r/p1pppppp/1p3n2/8/3P4/5N2/PPP1PPPP/RNBQKB1R": "Pseudo Queen's Indian Defense",
+ "rnbqkb1r/pppppp1p/5np1/8/3P4/5N2/PPP1PPPP/RNBQKB1R": "East Indian Defense",
+ "rnbqk2r/ppp1ppbp/3p1np1/8/3P4/3BPN2/PPP2PPP/RNBQK2R": "Indian Defense: Colle System, King's Indian Variation",
+ "rnbqkb1r/pppppp1p/5np1/8/3P1B2/5N2/PPP1PPPP/RN1QKB1R": "London System",
+ "rnbq1rk1/ppp1ppbp/5np1/3p4/3P1B2/2N1PN2/PPP1BPPP/R2QK2R": "Queen's Pawn Game: Barry Attack, Grünfeld Variation",
+ "rnbq1rk1/ppp1ppbp/5np1/3p2B1/3P4/4PN2/PPPN1PPP/R2QKB1R": "Queen's Pawn Game: Torre Attack, Grünfeld Variation, Main Line",
+ "rnbqkb1r/pppppp1p/5np1/6B1/3P4/5N2/PPP1PPPP/RN1QKB1R": "Torre Attack: Fianchetto Defense",
+ "rnbqk2r/pp1pppbp/5np1/2p3B1/3P4/5N2/PPPNPPPP/R2QKB1R": "Torre Attack: Fianchetto Defense, Euwe Variation",
+ "rnbqkb1r/pppppp1p/5np1/8/3P4/5NP1/PPP1PP1P/RNBQKB1R": "Indian Defense: Przepiorka Variation",
+ "rnbqkb1r/pppppp1p/5n2/6p1/2PP4/8/PP2PPPP/RNBQKBNR": "Indian Defense: Medusa Gambit",
+ "rnbqkb1r/pppppppp/5n2/8/2PP4/8/PP2PPPP/RNBQKBNR": "Indian Defense: Normal Variation",
+ "rnbqkb1r/p1pppppp/5n2/1p6/2PP4/8/PP2PPPP/RNBQKBNR": "Indian Defense: Pyrenees Gambit",
+ "r1bqkb1r/pppppppp/2n2n2/8/2PP4/8/PP2PPPP/RNBQKBNR": "Mexican Defense",
+ "r1bqkb1r/pppppppp/5n2/3Pn3/2P2P2/8/PP2P1PP/RNBQKBNR": "Mexican Defense: Horsefly Gambit",
+ "rnbqkb1r/p1pppppp/1p3n2/8/2PP4/8/PP2PPPP/RNBQKBNR": "Queen's Indian Accelerated",
+ "rnbqkb1r/pp1ppppp/2p2n2/8/2PP4/8/PP2PPPP/RNBQKBNR": "Slav Indian",
+ "rnbqkb1r/pppp1ppp/5n2/4p3/2PP4/8/PP2PPPP/RNBQKBNR": "Indian Defense: Budapest Defense",
+ "rnbqkb1r/p1pp1ppp/1p6/4P3/2P1n3/P7/1P2PPPP/RNBQKBNR": "Indian Defense: Budapest Defense, Fajarowicz Defense, Bonsdorf Variation",
+ "rnbqkb1r/pppp1ppp/8/4P3/2P1n3/8/PP2PPPP/RNBQKBNR": "Indian Defense: Budapest Defense, Fajarowicz Variation",
+ "rnbqkb1r/pppp1ppp/8/4P3/2P1n3/8/PPQ1PPPP/RNB1KBNR": "Indian Defense: Budapest Defense, Fajarowicz-Steiner Variation",
+ "rnbqkb1r/pppp1ppp/8/4P3/2P3n1/8/PP2PPPP/RNBQKBNR": "Indian Defense: Budapest Defense",
+ "rnbqkb1r/pppp1ppp/8/4P3/2P3n1/5N2/PP2PPPP/RNBQKB1R": "Indian Defense: Budapest Defense, Adler Variation",
+ "rnbqkb1r/pppp1ppp/8/4P3/2P1P1n1/8/PP3PPP/RNBQKBNR": "Indian Defense: Budapest Defense, Alekhine Variation",
+ "rnbqkb1r/pppp1ppp/2n5/8/2P1PP2/8/PP4PP/RNBQKBNR": "Indian Defense: Budapest Defense, Alekhine Variation, Abonyi Variation",
+ "rnbqkb1r/ppp2ppp/3p4/4P3/2P1P1n1/8/PP3PPP/RNBQKBNR": "Indian Defense: Budapest Defense, Alekhine Variation, Tartakower Defense",
+ "rnbqkb1r/pppp1ppp/8/4P3/2P2Bn1/8/PP2PPPP/RN1QKBNR": "Indian Defense: Budapest Defense, Rubinstein Variation",
+ "rnbqkb1r/ppp1pppp/3p1n2/8/2PP4/8/PP2PPPP/RNBQKBNR": "Old Indian Defense",
+ "rnbqkb1r/ppp1pppp/3p1n2/8/2PP2P1/8/PP2PP1P/RNBQKBNR": "Old Indian Defense: Aged Gibbon Gambit",
+ "rnbqkb1r/pp2pppp/2pp1n2/8/2PP4/2N5/PP2PPPP/R1BQKBNR": "Old Indian Defense: Czech Variation, with Nc3",
+ "rnbqkb1r/pp2pppp/2pp1n2/8/2PP4/5N2/PP2PPPP/RNBQKB1R": "Old Indian Defense: Czech Variation, with Nf3",
+ "rn1qkb1r/ppp1pppp/3p1n2/5b2/2PP4/2N5/PP2PPPP/R1BQKBNR": "Old Indian Defense: Janowski Variation",
+ "rn1qkb1r/ppp1pppp/3p1n2/5b2/2PP4/2N3P1/PP2PP1P/R1BQKBNR": "Old Indian Defense: Janowski Variation, Fianchetto Variation",
+ "rn1qkb1r/ppp1pppp/3p1n2/5b2/2PPP3/2N5/PP3PPP/R1BQKBNR": "Old Indian Defense: Janowski Variation, Grinberg Gambit",
+ "rn1qkb1r/ppp1pppp/3p1n2/5b2/2PP4/2N2P2/PP2P1PP/R1BQKBNR": "Old Indian Defense: Janowski Variation, Main Line",
+ "r1bqkb1r/pppn1ppp/3p1n2/4p3/2PP4/2NBP3/PP3PPP/R1BQK1NR": "Old Indian Defense: Dus-Khotimirsky Variation",
+ "rn1qkb1r/ppp1pppp/3p1n2/8/2PP2b1/5N2/PP2PPPP/RNBQKB1R": "Old Indian Defense: Tartakower-Indian",
+ "rnbqkb1r/ppp2ppp/3p1n2/4p3/2PP4/2N2N2/PP2PPPP/R1BQKB1R": "Old Indian Defense: Two Knights Variation",
+ "rnbqkb1r/ppp2ppp/3p1n2/4p3/2PP4/2N5/PP2PPPP/R1BQKBNR": "Old Indian Defense: Ukrainian Variation",
+ "r1bqkb1r/pppn1ppp/3p1n2/4p3/2PPP3/2N2N2/PP3PPP/R1BQKB1R": "Old Indian Defense: Normal Variation",
+ "rnbqkb1r/pp1ppppp/5n2/2p5/2PP4/8/PP2PPPP/RNBQKBNR": "Benoni Defense",
+ "rnbqkb1r/pp1p1ppp/5n2/2pPp3/2P5/8/PP2PPPP/RNBQKBNR": "Benoni Defense: Czech Benoni Defense",
+ "rnbqkb1r/pp2pppp/3p1n2/2pP4/2P5/8/PP2PPPP/RNBQKBNR": "Benoni Defense: Hromádka System",
+ "rnbqkb1r/pp3p1p/3p1np1/2pPp3/2P1P3/2N5/PP3PPP/R1BQKBNR": "Benoni Defense: King's Indian System",
+ "rnbqkb1r/pp1p1ppp/4pn2/2P5/2P5/8/PP2PPPP/RNBQKBNR": "Benoni Defense: Weenink Variation",
+ "r1bq1rk1/pp2ppbp/2n2np1/3p4/2PP4/2N2N2/PP2BPPP/R1BQ1RK1": "Grünfeld Defense: Three Knights Variation, Burille Variation, Reversed Tarrasch",
+ "rnbqkb1r/pp1ppppp/8/2pP4/2P1n3/8/PP2PPPP/RNBQKBNR": "Vulture Defense",
+ "rnbqkb1r/p2ppppp/5n2/1ppP4/2P5/8/PP2PPPP/RNBQKBNR": "Benko Gambit",
+ "rnbqkb1r/3ppppp/p4n2/1PpP4/8/8/PP2PPPP/RNBQKBNR": "Benko Gambit Accepted",
+ "rnbqkb1r/3ppppp/p4n2/1PpP4/8/5P2/PP2P1PP/RNBQKBNR": "Benko Gambit Accepted: Dlugy Variation",
+ "rnbqkb1r/3ppppp/p4n2/1PpP4/8/4P3/PP3PPP/RNBQKBNR": "Benko Gambit Accepted: Modern Variation",
+ "rnbqkb1r/3ppppp/pP3n2/2pP4/8/8/PP2PPPP/RNBQKBNR": "Benko Gambit Accepted: Pawn Return Variation",
+ "rnbqkb1r/p2ppppp/5n2/1ppP2B1/2P5/8/PP2PPPP/RN1QKBNR": "Benko Gambit Declined: Bishop Attack",
+ "rnbqkb1r/p2ppppp/5n2/1ppP4/2P1P3/8/PP3PPP/RNBQKBNR": "Benko Gambit Declined: Hjørring Countergambit",
+ "rnbqkb1r/p2ppppp/5n2/1ppP4/2P5/5N2/PP2PPPP/RNBQKB1R": "Benko Gambit Declined: Main Line",
+ "rnbqkb1r/p2ppppp/5n2/1ppP4/2P5/5P2/PP2P1PP/RNBQKBNR": "Benko Gambit Declined: Pseudo-Sämisch",
+ "rnbqkb1r/p2ppppp/5n2/1ppP4/2P5/8/PP1NPPPP/R1BQKBNR": "Benko Gambit Declined: Quiet Line",
+ "rnbqkb1r/p2ppppp/5n2/1ppP4/P1P5/8/1P2PPPP/RNBQKBNR": "Benko Gambit Declined: Sosonko Variation",
+ "rnbqkb1r/p2ppppp/5n2/1ppP4/2P3P1/8/PP2PP1P/RNBQKBNR": "Benko Gambit: Mutkin Countergambit",
+ "rnbqkb1r/4pppp/3p1n2/1NpP4/1pB1P3/8/PP3PPP/R1BQK1NR": "Benko Gambit: Nescafe Frappe Attack",
+ "rnbqkb1r/3ppppp/p4n2/1PpP4/8/2N5/PP2PPPP/R1BQKBNR": "Benko Gambit: Zaitsev System",
+ "rnbqkb1r/3ppppp/5n2/1NpP4/1p2P3/8/PP3PPP/R1BQKBNR": "Benko Gambit: Zaitsev Variation, Nescafe Frappe Attack",
+ "rn1qkb1r/3ppp1p/b4np1/2pP4/5P2/2N5/PP2P1PP/R1BQKBNR": "Benko Gambit Accepted: Central Storming Variation",
+ "rn1qk2r/4ppbp/b2p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQK2R": "Benko Gambit Accepted: Fianchetto Variation",
+ "rnbqkb1r/3ppppp/P4n2/2pP4/8/8/PP2PPPP/RNBQKBNR": "Benko Gambit Accepted: Fully Accepted Variation",
+ "rn1qkb1r/4pp1p/b2p1np1/2pP4/8/2N2NP1/PP2PP1P/R1BQKB1R": "Benko Gambit: Fianchetto Variation",
+ "rn1qkb1r/4pp1p/b2p1np1/2pP4/8/2N5/PP1NPPPP/R1BQKB1R": "Benko Gambit: Nd2 Variation",
+ "rn1qkb1r/4pp1p/3p1np1/2pP4/4P3/2N3P1/PP3P1P/R1BQ1KNR": "Benko Gambit",
+ "rn1q1rk1/4ppbp/3p1np1/2pP4/4P3/2N2NP1/PP3PKP/R1BQ3R": "Benko Gambit Accepted: King Walk Variation",
+ "rn1qkb1r/4pppp/b2p1n2/2pP4/4P3/2N5/PP3PPP/R1BQKBNR": "Benko Gambit Accepted: Yugoslav",
+ "rn1qkb1r/4pp1p/3p1np1/2pP4/4P3/2N5/PP2NPPP/R1BQ1K1R": "Benko Gambit Accepted: Yugoslav",
+ "rnbqkb1r/pp1p1ppp/4pn2/2pP4/2P5/8/PP2PPPP/RNBQKBNR": "Benoni Defense: Modern Variation",
+ "rnbqk2r/pp1p1ppp/3b1n2/2pP4/8/2N5/PP2PPPP/R1BQKBNR": "Benoni Defense: Modern Variation, Snake Variation",
+ "rnbqkb1r/pp3p1p/3p1np1/2pP4/8/2N2N2/PP2PPPP/R1BQKB1R": "Benoni Defense",
+ "rnbqkb1r/pp3p1p/3p1np1/2pP4/8/2N2NP1/PP2PP1P/R1BQKB1R": "Benoni Defense: Fianchetto Variation",
+ "rnbqkb1r/pp3p1p/3p1np1/2pP4/8/2N5/PP1NPPPP/R1BQKB1R": "Benoni Defense: Knight's Tour Variation",
+ "rnbqkb1r/pp3p1p/3p1np1/2pP2B1/8/2N2N2/PP2PPPP/R2QKB1R": "Benoni Defense: Uhlmann Variation",
+ "rnbq1rk1/pp3pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQK2R": "Benoni Defense: Fianchetto Variation",
+ "r1bq1rk1/pp1n1pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQ1RK1": "Benoni Defense: Fianchetto Variation, Hastings Defense",
+ "r1bqr1k1/1p1n1pbp/p2p1np1/2pP4/P7/2N3P1/1P1NPPBP/R1BQ1RK1": "Benoni Defense: Fianchetto Variation, Hastings Defense, Main Line",
+ "rnbqkb1r/pp3ppp/3p1n2/2pP4/4P3/2N5/PP3PPP/R1BQKBNR": "Benoni Defense: King's Pawn Line",
+ "rnbqk2r/pp3pbp/3p1np1/2pPP3/5P2/2N5/PP4PP/R1BQKBNR": "Benoni Defense: Mikenas Variation",
+ "rnbqkb1r/pp3p1p/3p1np1/2pP4/4PP2/2N5/PP4PP/R1BQKBNR": "Benoni Defense: Pawn Storm Variation",
+ "rnbqk2r/pp3pbp/3p1np1/1BpP4/4PP2/2N5/PP4PP/R1BQK1NR": "Benoni Defense: Taimanov Variation",
+ "rnbq1rk1/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP4PP/R1BQKB1R": "Benoni Defense: Four Pawns Attack",
+ "rnbqr1k1/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP2B1PP/R1BQK2R": "Benoni Defense: Four Pawns Attack, Main Line",
+ "rnbqkb1r/pp3p1p/3p1np1/2pP4/4P3/2N2N2/PP3PPP/R1BQKB1R": "Benoni Defense: Classical Variation",
+ "rnbqk2r/pp3pbp/3p1np1/2pP4/4P3/2N2N1P/PP3PP1/R1BQKB1R": "Benoni Defense: Classical Variation, New York Variation",
+ "rnbqk2r/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQK2R": "Benoni Defense: Classical Variation, Traditional Variation",
+ "rnbqk2r/pp3pbp/3p1np1/2pP2B1/4P3/2N2N2/PP3PPP/R2QKB1R": "Benoni Defense: Classical Variation, Averbakh-Grivas Attack",
+ "rnbq1rk1/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQK2R": "Benoni Defense: Classical",
+ "rnbq1rk1/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQ1RK1": "Benoni Defense: Classical Variation, Main Line",
+ "rnbq1rk1/1p3pbp/p2p1np1/2pP4/P3P3/2N2N2/1P2BPPP/R1BQ1RK1": "Benoni Defense: Classical Variation, Full Line",
+ "rn1q1rk1/1p3pbp/p2p1np1/2pP4/P3P1b1/2N2N2/1P2BPPP/R1BQ1RK1": "Benoni Defense: Classical Variation, Argentine Counterattack",
+ "rnbqr1k1/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQ1RK1": "Benoni Defense: Classical Variation, Czerniak Defense",
+ "rnbqr1k1/pp3pbp/3p1np1/2pP4/4P3/2N5/PP1NBPPP/R1BQ1RK1": "Benoni Defense: Classical Variation, Czerniak Defense, Tal Line",
+ "r1bqr1k1/pp3pbp/n2p1np1/2pP4/4P3/2N5/PP1NBPPP/R1BQ1RK1": "Benoni Defense: Classical Variation, Czerniak Defense",
+ "r1bqr1k1/pp3pbp/n2p1np1/2pP4/4P3/2N2P2/PP1NB1PP/R1BQ1RK1": "Benoni Defense: Classical Variation, Czerniak Defense",
+ "rnbqkbnr/ppppp1pp/8/5p2/3P4/8/PPP1PPPP/RNBQKBNR": "Dutch Defense",
+ "rnbqkbnr/ppppp1pp/8/5p2/3P4/3Q4/PPP1PPPP/RNB1KBNR": "Dutch Defense: Alapin Variation",
+ "rnbqkbnr/pppp2pp/8/4pp2/3P2P1/8/PPP1PP1P/RNBQKBNR": "Dutch Defense: Hevendehl Gambit",
+ "rnbqkbnr/ppppp1pp/8/5pB1/3P4/8/PPP1PPPP/RN1QKBNR": "Dutch Defense: Hopton Attack",
+ "rnbqkb1r/ppppp1pp/5n2/5p2/3P2P1/7P/PPP1PP2/RNBQKBNR": "Dutch Defense: Janzen-Korchnoi Gambit",
+ "rnbqkbnr/ppp1p1pp/8/3p1p2/3PP3/2N5/PPP2PPP/R1BQKBNR": "Dutch Defense: Kingfisher Gambit",
+ "rnbqkbnr/ppppp1pp/8/5p2/3P4/7P/PPP1PPP1/RNBQKBNR": "Dutch Defense: Korchnoi Attack",
+ "rnbqkbnr/ppppp1pp/8/5p2/3P2P1/8/PPP1PP1P/RNBQKBNR": "Dutch Defense: Krejcik Gambit",
+ "rnbqkbnr/ppp1p1pp/8/3p4/3PP1p1/2N5/PPP2P1P/R1BQKBNR": "Dutch Defense: Krejcik Gambit, Tate Gambit",
+ "rnbqkbnr/pppp2pp/4p3/5p2/3P2P1/3Q4/PPP1PP1P/RNB1KBNR": "Dutch Defense: Manhattan Gambit, Anti-Classical Line",
+ "rnbqkbnr/ppppp2p/6p1/5p2/3P2P1/3Q4/PPP1PP1P/RNB1KBNR": "Dutch Defense: Manhattan Gambit, Anti-Leningrad",
+ "rnbqkbnr/ppp1p1pp/3p4/5p2/3P2P1/3Q4/PPP1PP1P/RNB1KBNR": "Dutch Defense: Manhattan Gambit, Anti-Modern",
+ "rnbqkbnr/ppp1p1pp/8/3p1p2/3P2P1/3Q4/PPP1PP1P/RNB1KBNR": "Dutch Defense: Manhattan Gambit, Anti-Stonewall",
+ "rnbqkbnr/pppp2pp/8/4pp2/3P4/5N2/PPP1PPPP/RNBQKB1R": "Dutch Defense: Omega-Isis Gambit",
+ "rnbqkbnr/ppppp1pp/8/5p2/3P4/2N5/PPP1PPPP/R1BQKBNR": "Dutch Defense: Raphael Variation",
+ "rnbqkb1r/ppppp1pp/5n2/5p2/3P2P1/2N5/PPP1PP1P/R1BQKBNR": "Dutch Defense: Spielmann Gambit",
+ "rnbqkbnr/ppp1p1pp/8/3p1p2/3P4/2N5/PPP1PPPP/R1BQKBNR": "Queen's Pawn Game: Veresov Attack, Dutch System",
+ "rnbqkb1r/pppp2pp/4pn2/5p2/3P4/6PN/PPP1PPBP/RNBQK2R": "Dutch Defense: Blackburne Variation",
+ "rnbqkbnr/ppppp1pp/8/5p2/3P4/6P1/PPP1PP1P/RNBQKBNR": "Dutch Defense: Fianchetto Attack",
+ "rnbqk1nr/ppppp1bp/6p1/5p2/3P4/6PN/PPP1PPBP/RNBQK2R": "Dutch Defense: Leningrad Variation, Karlsbad Variation",
+ "rnbqk2r/pp1pp1bp/2p3pn/5p2/3P4/5NP1/PPP1PPBP/RNBQ1RK1": "Dutch Defense: Leningrad, Basman System",
+ "rnbqkb1r/ppppp2p/5np1/5p2/3P4/6P1/PPP1PPBP/RNBQK1NR": "Dutch Defense: Semi-Leningrad Variation",
+ "rnbqkb1r/ppppp1pp/5n2/8/3Pp3/2N2P2/PPP3PP/R1BQKBNR": "Dutch Defense: Blackmar's Second Gambit",
+ "rnbqkbnr/ppppp1pp/8/5p2/3PP3/8/PPP2PPP/RNBQKBNR": "Dutch Defense: Staunton Gambit",
+ "rnbqkbnr/ppppp1pp/8/8/3Pp3/8/PPP2PPP/RNBQKBNR": "Dutch Defense: Staunton Gambit Accepted",
+ "rnbqkbnr/ppppp1pp/8/8/3Pp3/8/PPPN1PPP/R1BQKBNR": "Dutch Defense: Staunton Gambit, American Attack",
+ "rnbqkb1r/ppppp1pp/5n2/8/3Pp1P1/2N5/PPP2P1P/R1BQKBNR": "Dutch Defense: Staunton Gambit, Tartakower Variation",
+ "rnbqkbnr/ppp1p1pp/3p4/5p2/3PP3/8/PPP2PPP/RNBQKBNR": "Rat Defense: Balogh Defense",
+ "rnbqkb1r/ppppp1pp/5n2/6B1/3Pp3/2N5/PPP2PPP/R2QKBNR": "Dutch Defense: Staunton Gambit",
+ "rnbqkb1r/ppppp2p/5np1/6B1/3Pp2P/2N5/PPP2PP1/R2QKBNR": "Dutch Defense: Staunton Gambit, Alekhine Variation",
+ "rnbqkb1r/pp1pp1pp/2p2n2/6B1/3Pp3/2N5/PPP2PPP/R2QKBNR": "Dutch Defense: Staunton Gambit, Chigorin Variation",
+ "rnbqkb1r/ppppp2p/5np1/6B1/3Pp3/2N2P2/PPP3PP/R2QKBNR": "Dutch Defense: Staunton Gambit, Lasker Variation",
+ "rnbqkb1r/p1ppp1pp/1p3n2/6B1/3Pp3/2N5/PPP2PPP/R2QKBNR": "Dutch Defense: Staunton Gambit, Nimzowitsch Variation",
+ "rnbqkbnr/ppppp1pp/8/5p2/2PP4/8/PP2PPPP/RNBQKBNR": "Dutch Defense",
+ "rnbqkbnr/pppp2pp/4p3/5p2/2PPP3/8/PP3PPP/RNBQKBNR": "Dutch Defense: Bellon Gambit",
+ "rnbqkb1r/ppppp2p/6pn/5p2/2PP4/2N5/PP2PPPP/R1BQKBNR": "Dutch Defense: Bladel Variation",
+ "rnbqkbnr/pppp2pp/4p3/5p2/2PP4/8/PP2PPPP/RNBQKBNR": "Dutch Defense: Classical Variation",
+ "r1bqkb1r/ppp1p1pp/2np1n2/5p2/2PP4/2N2N2/PP2PPPP/R1BQKB1R": "Dutch Defense: Krause Variation",
+ "rnbqkb1r/ppppp1pp/5n2/5p2/2PP4/8/PP2PPPP/RNBQKBNR": "Dutch Defense: Normal Variation",
+ "rnbqkbnr/pppp2pp/4p3/5p2/2PP4/2N5/PP2PPPP/R1BQKBNR": "Dutch Defense: Rubinstein Variation",
+ "rnbqkb1r/ppppp1pp/5n2/5p2/2PP4/2N5/PP2PPPP/R1BQKBNR": "Dutch Defense: Queen's Knight Variation",
+ "rnbqkb1r/ppppp1pp/5n2/5p2/2PP4/6P1/PP2PP1P/RNBQKBNR": "Dutch Defense: Fianchetto Variation",
+ "rnb1kb1r/ppq1p1pp/2pp1n2/5p2/2PP4/2N3P1/PP2PPBP/R1BQK1NR": "Dutch Defense: Hort-Antoshin System",
+ "rnbqkb1r/ppppp2p/5np1/5p2/2PP4/6P1/PP2PP1P/RNBQKBNR": "Dutch Defense: Leningrad Variation",
+ "rnbqk2r/ppppp1bp/5np1/5p2/2PP4/5NP1/PP2PPBP/RNBQK2R": "Dutch Defense: Leningrad Variation",
+ "rnbq1rk1/pp2p1bp/2pp1np1/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1": "Dutch Defense: Leningrad Variation, Warsaw Variation",
+ "r1bq1rk1/ppp1p1bp/2np1np1/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1": "Dutch Defense: Leningrad Variation, Matulovic Variation",
+ "rnbqkb1r/pppp2pp/4pn2/5p2/2PP4/6P1/PP2PPBP/RNBQK1NR": "Dutch Defense: Classical Variation",
+ "rnbqk2r/pppp2pp/4pn2/5p2/1bPP4/6P1/PP2PPBP/RNBQK1NR": "Dutch Defense: Nimzo-Dutch Variation",
+ "rnbqk2r/ppppb1pp/4pn2/5p2/2PP4/6P1/PP1BPPBP/RN1QK1NR": "Dutch Defense: Nimzo-Dutch Variation, Alekhine Variation",
+ "rnbqk2r/ppppb1pp/4pn2/5p2/2PP4/6P1/PP2PPBP/RNBQK1NR": "Dutch Defense: Classical Variation",
+ "rnbqk2r/ppppb1pp/4pn2/5p2/2PP4/6PN/PP2PPBP/RNBQK2R": "Dutch Defense: Classical Variation, Blackburne Attack",
+ "rnbq1rk1/ppppb1pp/4p3/5p2/2PPn3/5NP1/PP2PPBP/RNBQ1RK1": "Dutch Defense: Alekhine Variation",
+ "rnbq1rk1/ppppb1pp/4pn2/5p2/2PP4/5NP1/PP2PPBP/RNBQK2R": "Dutch Defense: Classical Variation",
+ "rnbq1rk1/ppp1b1pp/4pn2/3p1p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1": "Dutch Defense: Stonewall",
+ "rnbq1rk1/ppp1b1pp/4pn2/3p1p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1": "Dutch Defense: Stonewall Variation",
+ "rnbq1rk1/ppp1b1pp/4pn2/3p1p2/2PP4/1P3NP1/P3PPBP/RNBQ1RK1": "Dutch Defense: Classical Variation, Stonewall Variation, Botvinnik Variation",
+ "rnbq1rk1/pp2b1pp/2p1pn2/3p1p2/2PP4/BP3NP1/P3PPBP/RN1Q1RK1": "Dutch Defense: Classical Variation, Stonewall Variation",
+ "rnbq1rk1/pp2b1pp/2p1pn2/3p1p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1": "Dutch Defense: Classical Variation, Stonewall Variation",
+ "rnb1qrk1/pp2b1pp/2p1pn2/3p1pB1/2PP4/2N2NP1/PPQ1PPBP/R4RK1": "Dutch Defense: Stonewall, Chekhover Variation",
+ "rnbq1rk1/ppp1b1pp/3ppn2/5p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1": "Dutch Defense: Classical Variation",
+ "rnbq1rk1/1pp1b1pp/3ppn2/p4p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1": "Dutch Defense: Classical Variation, Buenos Aires Variation",
+ "rnbq1rk1/ppp1b1pp/3pp3/5p2/2PPn3/2N2NP1/PP2PPBP/R1BQ1RK1": "Dutch Defense: Classical Variation, Huisl Variation",
+ "rnb1qrk1/ppp1b1pp/3ppn2/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1": "Dutch Defense: Classical Variation, Ilyin-Zhenevsky Variation",
+ "rnb1qrk1/ppp1b1pp/3ppn2/5p2/2PP4/2N2NP1/PP2PPBP/R1BQR1K1": "Dutch Defense: Classical Variation, Ilyin-Zhenevsky Variation, Winter Variation",
+ "rnb1qrk1/ppp1b1pp/3ppn2/5p2/2PP4/2N2NP1/PPQ1PPBP/R1B2RK1": "Dutch Defense: Classical Variation, Ilyin-Zhenevsky Variation, Alatortsev-Lisitsyn Line",
+ "rnb1qrk1/ppp1b1pp/3ppn2/5p2/2PP4/1PN2NP1/P3PPBP/R1BQ1RK1": "Dutch Defense: Classical Variation, Ilyin-Zhenevsky Variation, Modern Main Line",
+ "rnbqkbnr/ppppp1pp/5p2/8/4P3/8/PPPP1PPP/RNBQKBNR": "Barnes Defense",
+ "rnbqkbnr/pppppp1p/8/6p1/4P3/8/PPPP1PPP/RNBQKBNR": "Borg Defense",
+ "rnbqk1nr/ppppppbp/8/6p1/3PP3/8/PPP2PPP/RNBQKBNR": "Borg Defense: Borg Gambit",
+ "rnbqkbnr/pppppp2/7p/8/3PP1pP/8/PPP2PP1/RNBQKBNR": "Borg Defense: Troon Gambit",
+ "rnbqkbnr/pppp1p1p/8/4p1p1/3PP3/8/PPP2PPP/RNBQKBNR": "Borg Defense: Zilbermints Gambit",
+ "rnbqkbnr/ppppppp1/7p/8/4P3/8/PPPP1PPP/RNBQKBNR": "Carr Defense",
+ "rnbqkbnr/pppp1pp1/7p/4p3/3PP3/8/PPP2PPP/RNBQKBNR": "Carr Defense: Zilbermints Gambit",
+ "rnbqkbnr/ppppp1pp/8/5p2/4P3/8/PPPP1PPP/RNBQKBNR": "Duras Gambit",
+ "rnbq1bnr/pppppkpp/5p2/8/3PP3/8/PPP2PPP/RNBQKBNR": "Fried Fox Defense",
+ "rnbqkbnr/ppppppp1/8/7p/4P3/8/PPPP1PPP/RNBQKBNR": "Goldsmith Defense",
+ "rnbqkb1r/ppppppp1/5n2/7p/3PP3/8/PPP2PPP/RNBQKBNR": "Goldsmith Defense: Picklepuss Defense",
+ "rn1qkbnr/p1pppppp/bp6/8/3PP3/8/PPP2PPP/RNBQKBNR": "Guatemala Defense",
+ "rnbqkb1r/pppppppp/7n/8/4P3/8/PPPP1PPP/RNBQKBNR": "Hippopotamus Defense",
+ "rnbqkb1r/ppppp2p/5ppn/8/2PPP3/8/PP3PPP/RNBQKBNR": "Hippopotamus Defense",
+ "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR": "King's Pawn Game",
+ "r1bqkbnr/pppppppp/n7/8/4P3/8/PPPP1PPP/RNBQKBNR": "Lemming Defense",
+ "rnbqkb1r/ppp1pppp/3p1n2/8/3PP3/5P2/PPP3PP/RNBQKBNR": "Lion Defense: Lion's Jaw",
+ "r1bqkbnr/pppppppp/2n5/8/4P3/8/PPPP1PPP/RNBQKBNR": "Nimzowitsch Defense",
+ "r1bqkbnr/pppppppp/2n5/8/3PP3/8/PPP2PPP/RNBQKBNR": "Nimzowitsch Defense",
+ "r1bqkb1r/pppp1ppp/2n2n2/4p3/3PP3/2N5/PPP2PPP/R1BQKBNR": "Nimzowitsch Defense: Breyer Variation",
+ "r1bqkbnr/ppppp1pp/2n5/5p2/4P3/5N2/PPPP1PPP/RNBQKB1R": "Nimzowitsch Defense: Colorado Countergambit",
+ "r1bqkbnr/ppppp1pp/2n5/5P2/8/5N2/PPPP1PPP/RNBQKB1R": "Nimzowitsch Defense: Colorado Countergambit Accepted",
+ "r1bqkbnr/pppppppp/2n5/8/4P3/5N2/PPPP1PPP/RNBQKB1R": "Nimzowitsch Defense: Declined Variation",
+ "r1bqkb1r/pppppppp/2n5/4P3/6n1/5N2/PPPP1PPP/RNBQKB1R": "Nimzowitsch Defense: El Columpio Defense",
+ "r1bqkb1r/ppp1pppp/2npP2n/8/3P4/5N1P/PPP2PP1/RNBQKB1R": "Nimzowitsch Defense: El Columpio Defense, El Columpio Gambit",
+ "r1bqkb1r/ppp1pppp/2nP3n/8/3P4/5N1P/PPP2PP1/RNBQKB1R": "Nimzowitsch Defense: El Columpio Defense, Exchange Variation",
+ "r1bqkb1r/ppp1pppp/2np3n/1B2P3/3P4/5N1P/PPP2PP1/RNBQK2R": "Nimzowitsch Defense: El Columpio Defense, Pin Variation",
+ "r1bqkbnr/pppp1ppp/2n1p3/8/4P3/5N2/PPPP1PPP/RNBQKB1R": "Nimzowitsch Defense: Franco-Nimzowitsch Variation",
+ "r1bqkbnr/pppp1ppp/2n1p3/8/4P3/2N5/PPPP1PPP/R1BQKBNR": "Nimzowitsch Defense: French Connection",
+ "r1bqkbnr/ppp1pppp/2n5/3p4/3PP3/4B3/PPP2PPP/RN1QKBNR": "Nimzowitsch Defense: Hornung Gambit",
+ "r1bqkbnr/pppp1ppp/2n5/4p3/3PP3/8/PPP2PPP/RNBQKBNR": "Nimzowitsch Defense: Kennedy Variation",
+ "r1bqk1nr/pppp1ppp/2n5/2b1P3/4P3/8/PPP2PPP/RNBQKBNR": "Nimzowitsch Defense: Kennedy Variation, Bielefelder Gambit",
+ "r1bqkbnr/pppp2pp/2n2p2/4P3/4P3/8/PPP2PPP/RNBQKBNR": "Nimzowitsch Defense: Kennedy Variation, Hammer Gambit",
+ "r1b1kbnr/pppp1ppp/2n5/4P3/4P2q/8/PPP2PPP/RNBQKBNR": "Nimzowitsch Defense: Kennedy Variation, Herford Gambit",
+ "r1bqkbnr/pppp1ppp/8/4n3/4P3/2N5/PPP2PPP/R1BQKBNR": "Nimzowitsch Defense: Kennedy Variation, Keres Attack",
+ "r1bqkbnr/pppp1ppp/2n5/3Pp3/4P3/8/PPP2PPP/RNBQKBNR": "Nimzowitsch Defense: Kennedy Variation, Linksspringer Variation",
+ "r1bqkbnr/pppp1ppp/6n1/8/4PP2/8/PPP3PP/RNBQKBNR": "Nimzowitsch Defense: Kennedy Variation, Main Line",
+ "r1bqkbnr/pppp1ppp/8/4n3/4P3/5N2/PPP2PPP/RNBQKB1R": "Nimzowitsch Defense: Kennedy Variation, Paulsen Attack",
+ "r1bqkbnr/pppp1ppp/2n5/8/4PP2/8/PPP3PP/RNBQKBNR": "Nimzowitsch Defense: Kennedy Variation, Riemann Defense",
+ "r1bqkbnr/ppp2ppp/2np4/4P3/4P3/8/PPP2PPP/RNBQKBNR": "Nimzowitsch Defense: Kennedy Variation, de Smet Gambit",
+ "r1bqkbnr/ppp1pppp/2np4/8/3PP3/8/PPP2PPP/RNBQKBNR": "Nimzowitsch Defense: Mikenas Variation",
+ "r1bqkbnr/ppppp1pp/2n2p2/8/3PP3/8/PPP2PPP/RNBQKBNR": "Nimzowitsch Defense: Neo-Mongoloid Defense",
+ "r1bqkbnr/pppppp1p/2n3p1/8/4P3/2N5/PPPP1PPP/R1BQKBNR": "Nimzowitsch Defense: Pirc Connection",
+ "r1bqkbnr/pppppppp/2n5/1B6/4P3/8/PPPP1PPP/RNBQK1NR": "Nimzowitsch Defense: Pseudo-Spanish Variation",
+ "r1bqkbnr/ppp1pppp/2n5/3p4/3PP3/8/PPP2PPP/RNBQKBNR": "Nimzowitsch Defense: Scandinavian Variation",
+ "r1bqkbnr/ppp1pppp/8/3P4/1n1P4/8/PPP2PPP/RNBQKBNR": "Nimzowitsch Defense: Scandinavian Variation, Aachen Gambit",
+ "r1bqkbnr/ppp1pppp/2n5/3pP3/3P4/8/PPP2PPP/RNBQKBNR": "Nimzowitsch Defense: Scandinavian Variation, Advance Variation",
+ "r1bqkbnr/ppp1pppp/2n5/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR": "Nimzowitsch Defense: Scandinavian Variation, Bogoljubov Variation",
+ "r1bqkbnr/ppp1pppp/2n5/8/3Pp3/2N5/PPP2PPP/R1BQKBNR": "Nimzowitsch Defense: Scandinavian Variation, Bogoljubov Variation",
+ "r1bqkbnr/1pp1pppp/p1n5/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR": "Nimzowitsch Defense: Scandinavian Variation, Bogoljubov Variation, Brandics Gambit",
+ "r1bqkbnr/ppp1pp1p/2n3p1/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR": "Nimzowitsch Defense: Scandinavian Variation, Bogoljubov Variation, Erben Gambit",
+ "r1bqkbnr/ppp2ppp/2n5/3pp3/3PP3/2N5/PPP2PPP/R1BQKBNR": "Nimzowitsch Defense: Scandinavian Variation, Bogoljubov Variation, Heinola-Deppe Gambit",
+ "r1bqkbnr/ppp1pppp/8/3Pn3/4p3/2N5/PPP2PPP/R1BQKBNR": "Nimzowitsch Defense: Scandinavian Variation, Bogoljubov Variation, Nimzowitsch Gambit",
+ "rnbqkbnr/ppp1pppp/8/3P4/4p3/2N2P2/PPP3PP/R1BQKBNR": "Nimzowitsch Defense: Scandinavian Variation, Bogoljubov Variation, Richter Gambit",
+ "r1bqkb1r/ppp1pppp/2n2n2/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR": "Nimzowitsch Defense: Scandinavian Variation, Bogoljubov Variation, Vehre Variation",
+ "r1b1kbnr/ppp1pppp/2n5/3q4/3P4/8/PPP2PPP/RNBQKBNR": "Nimzowitsch Defense: Scandinavian Variation, Exchange Variation",
+ "r1b1kbnr/ppp1pppp/2n5/3q4/3P4/2N5/PPP2PPP/R1BQKBNR": "Nimzowitsch Defense: Scandinavian Variation, Exchange Variation, Marshall Gambit",
+ "r1bqkbnr/pppppppp/2n5/8/1P2P3/8/P1PP1PPP/RNBQKBNR": "Nimzowitsch Defense: Wheeler Gambit",
+ "r1bqkbnr/ppp1pppp/2np4/8/4P3/5N2/PPPP1PPP/RNBQKB1R": "Nimzowitsch Defense: Williams Variation",
+ "r1bqkbnr/1ppppppp/p1n5/8/3PP3/8/PPP2PPP/RNBQKBNR": "Nimzowitsch Defense: Woodchuck Variation",
+ "rnbqkbnr/p1pppppp/1p6/8/4P3/8/PPPP1PPP/RNBQKBNR": "Owen Defense",
+ "r1bqkbnr/p2ppppp/1pn5/2P5/4P3/8/PPP2PPP/RNBQKBNR": "Owen Defense: Hekili-Loa Gambit",
+ "rn1qkbnr/p1ppp2p/1p4p1/5P1Q/3P4/3B4/PPP2PbP/RNB1K1NR": "Owen Defense: Matovinsky Gambit",
+ "rn1qkbnr/pbpppppp/1p6/6B1/3PP3/8/PPP2PPP/RN1QKBNR": "Owen Defense: Naselwaus Gambit",
+ "rn1qkbnr/pbpppppp/1p6/8/3PP3/5N2/PPP2PPP/RNBQKB1R": "Owen Defense: Smith Gambit",
+ "rn1qkbnr/pbppp1pp/1p3p2/8/2PPP3/8/PP3PPP/RNBQKBNR": "Owen Defense: Unicorn Variation",
+ "rn1qkbnr/pbpp1ppp/1p6/4p3/3PP3/5P2/PPP3PP/RNBQKBNR": "Owen Defense: Wind Gambit",
+ "rnbqkbnr/ppp1pppp/3p4/8/4P3/8/PPPP1PPP/RNBQKBNR": "Pirc Defense",
+ "rnbqkbnr/ppp1pppp/3p4/8/3PP3/8/PPP2PPP/RNBQKBNR": "Pirc Defense",
+ "rnbqkb1r/ppp1pppp/3p1n2/8/3PP3/8/PPP2PPP/RNBQKBNR": "Pirc Defense",
+ "rnbqkb1r/ppp1pppp/3p1n2/8/3PP3/5N2/PPP2PPP/RNBQKB1R": "Pirc Defense: Roscher Gambit",
+ "r1bqkbnr/pppnpppp/3p4/8/3PP3/8/PPP2PPP/RNBQKBNR": "Rat Defense: Antal Defense",
+ "rnbqkb1r/ppp1pppp/5n2/3P4/5P2/8/PPPP2PP/RNBQKBNR": "Rat Defense: Fuller Gambit",
+ "rnbqkbnr/ppp1pppp/3p4/8/4PP2/8/PPPP2PP/RNBQKBNR": "Rat Defense: Harmonist",
+ "rnbqkbnr/ppp1pppp/3p4/8/4P2P/8/PPPP1PP1/RNBQKBNR": "Rat Defense: Petruccioli Attack",
+ "rnbqkbnr/ppp1pppp/3p4/8/4P1P1/8/PPPP1P1P/RNBQKBNR": "Rat Defense: Spike Attack",
+ "rnbqkbnr/1ppppppp/p7/8/4P3/8/PPPP1PPP/RNBQKBNR": "St. George Defense",
+ "rn1qkbnr/1bpp1ppp/p3p3/1p6/3PP3/3B1N2/PPP2PPP/RNBQK2R": "St. George Defense: Polish Variation",
+ "rn1qk1nr/1bp1ppbp/p2p2p1/1p6/3PP3/2PB1N2/PP3PPP/RNBQ1RK1": "St. George Defense: San Jorge Variation",
+ "rnbqkbnr/1ppp1ppp/p7/4p3/3PP3/8/PPP2PPP/RNBQKBNR": "St. George Defense: Zilbermints Gambit",
+ "r1bqkbnr/ppp1pppp/2n5/3P4/4p3/2N5/PPP2PPP/R1BQKBNR": "Van Geet Opening: Berlin Gambit",
+ "rnbqkbnr/1ppppppp/8/p7/4P3/8/PPPP1PPP/RNBQKBNR": "Ware Defense",
+ "r1bqkbnr/1ppppppp/2n5/p7/3PP3/8/PPP2PPP/RNBQKBNR": "Ware Defense: Snagglepuss Defense",
+ "rnbqkbnr/ppp1pppp/8/3p4/4P3/8/PPPP1PPP/RNBQKBNR": "Scandinavian Defense",
+ "rnbqkbnr/ppp1pppp/8/3p4/4P3/1P6/P1PP1PPP/RNBQKBNR": "Scandinavian Defense",
+ "rnb1kbnr/ppp2ppp/8/q3p3/3P4/2N5/PPP2PPP/R1BQKBNR": "Scandinavian Defense: Anderssen Counterattack",
+ "rn2kbnr/ppp2ppp/8/q3p3/3P2b1/2N2N2/PPP2PPP/R1BQKB1R": "Scandinavian Defense: Anderssen Counterattack, Collijn Variation",
+ "rnb1kbnr/ppp2ppp/8/q3p3/3P4/2N2N2/PPP2PPP/R1BQKB1R": "Scandinavian Defense: Anderssen Counterattack, Goteborg System",
+ "r1b1k1nr/ppp2ppp/2n5/q3P3/1b6/2N2N2/PPPB1PPP/R2QKB1R": "Scandinavian Defense: Anderssen Counterattack, Orthodox Attack",
+ "r1bqkbnr/pp2pppp/2n5/8/8/8/PPPP1PPP/RNBQKBNR": "Scandinavian Defense: Blackburne Gambit",
+ "rnbqkbnr/pp2pppp/2p5/3P4/8/8/PPPP1PPP/RNBQKBNR": "Scandinavian Defense: Blackburne-Kloosterboer Gambit",
+ "rn1qkbnr/ppp2ppp/4b3/8/8/8/PPPP1PPP/RNBQKBNR": "Scandinavian Defense: Boehnke Gambit",
+ "rnb1kb1r/1pp1pppp/p2q1n2/8/3P4/2N2N2/PPP2PPP/R1BQKB1R": "Scandinavian Defense: Bronstein Variation",
+ "rn2kb1r/ppp1pppp/5n2/q4b2/3P4/2N2N2/PPP2PPP/R1BQKB1R": "Scandinavian Defense: Classical Variation",
+ "rn2kb1r/pp2pppp/2p2n2/q3Nb2/3P2P1/2N5/PPP2P1P/R1BQKB1R": "Scandinavian Defense: Grünfeld Variation",
+ "rnb1kbnr/ppp1pppp/3q4/8/8/2N5/PPPP1PPP/R1BQKBNR": "Scandinavian Defense: Gubinsky-Melts Defense",
+ "rnbqkb1r/ppp2ppp/4pn2/3P4/2P5/8/PP1P1PPP/RNBQKBNR": "Scandinavian Defense: Icelandic-Palme Gambit",
+ "rnbqkb1r/ppp1pppp/8/8/1nPP4/8/PP3PPP/RNBQKBNR": "Scandinavian Defense: Kiel Variation",
+ "rnbqkbnr/pp3ppp/2P5/4p3/8/8/PPPP1PPP/RNBQKBNR": "Scandinavian Defense: Kloosterboer Gambit",
+ "rnbqkb1r/pp3ppp/2P2n2/4p3/3P4/8/PPP2PPP/RNBQKBNR": "Scandinavian Defense: Kádas Gambit",
+ "rn2kb1r/ppp1pppp/5n2/q7/3P2b1/2N2N1P/PPP2PP1/R1BQKB1R": "Scandinavian Defense: Lasker Variation",
+ "rnb1kbnr/ppp1pppp/8/q7/8/2N5/PPPP1PPP/R1BQKBNR": "Scandinavian Defense: Main Line",
+ "rnb1kbnr/ppp1pppp/8/q7/1P6/2N5/P1PP1PPP/R1BQKBNR": "Scandinavian Defense: Main Line, Leonhardt Gambit",
+ "rnb1kb1r/ppp1pppp/5n2/q7/3P4/2N5/PPP2PPP/R1BQKBNR": "Scandinavian Defense: Main Line, Mieses Variation",
+ "rnbqkb1r/ppp1pppp/8/3n4/3P4/8/PPP2PPP/RNBQKBNR": "Scandinavian Defense: Marshall Variation",
+ "rnb1kbnr/ppp1pppp/8/3q4/8/8/PPPP1PPP/RNBQKBNR": "Scandinavian Defense: Mieses-Kotroc Variation",
+ "rnbqkb1r/ppp1pppp/5n2/3P4/8/8/PPPP1PPP/RNBQKBNR": "Scandinavian Defense: Modern Variation",
+ "rnbqkb1r/ppp1pppp/5n2/3P4/3P4/8/PPP2PPP/RNBQKBNR": "Scandinavian Defense: Modern Variation",
+ "rn1qkb1r/ppp1pppp/8/3n4/3P2b1/5N2/PPP2PPP/RNBQKB1R": "Scandinavian Defense: Modern Variation, Gipslis Variation",
+ "rnbqkb1r/p1p1pp1p/5np1/1p1P4/2PP4/8/PP3PPP/RNBQKBNR": "Scandinavian Defense: Modern Variation, Wing Gambit",
+ "rnbqkb1r/pp2pppp/2p2n2/3P4/2P5/8/PP1P1PPP/RNBQKBNR": "Scandinavian Defense: Panov Transfer",
+ "rn1qkb1r/ppp1pppp/5n2/3P4/3P2b1/8/PPP2PPP/RNBQKBNR": "Scandinavian Defense: Portuguese Gambit",
+ "rn1qkb1r/ppp1pppp/5n2/3P1b2/2PP4/5P2/PP4PP/RNBQKBNR": "Scandinavian Defense: Portuguese Gambit, Banker Variation",
+ "rn1qkb1r/ppp1pppp/5n2/3P4/3P2b1/5N2/PPP2PPP/RNBQKB1R": "Scandinavian Defense: Portuguese Gambit, Classical Variation",
+ "rn1qkb1r/ppp1pppp/5n2/3P1b2/3P2P1/5P2/PPP4P/RNBQKBNR": "Scandinavian Defense: Portuguese Gambit, Correspondence Refutation",
+ "rn1qkb1r/pp2pppp/2p2n2/1B1P4/3P2b1/8/PPP2PPP/RNBQK1NR": "Scandinavian Defense: Portuguese Gambit, Elbow Variation",
+ "r2qkb1r/pppnpppp/5n2/1B1P1b2/2PP4/5P2/PP4PP/RNBQK1NR": "Scandinavian Defense: Portuguese Gambit, Jadoul Variation",
+ "r2qkb1r/pppnpppp/5n2/3P4/3P2b1/8/PPP1BPPP/RNBQK1NR": "Scandinavian Defense: Portuguese Gambit, Lusophobe Variation",
+ "r2qkb1r/pppnpppp/5n2/1B1P1b2/3P4/2N2P2/PPP3PP/R1BQK1NR": "Scandinavian Defense: Portuguese Gambit, Melbourne Shuffle Variation",
+ "rn1qkb1r/ppp1pppp/5n2/3P4/3P2b1/8/PPP1BPPP/RNBQK1NR": "Scandinavian Defense: Portuguese Gambit, Wuss Variation",
+ "rnbqkb1r/ppp1pp1p/6p1/3n4/3P4/5N2/PPP2PPP/RNBQKB1R": "Scandinavian Defense: Richter Variation",
+ "rnbqkb1r/ppp1pp1p/5np1/3P4/3P4/8/PPP2PPP/RNBQKBNR": "Scandinavian Defense: Richter Variation",
+ "rnb1kbnr/pp2pppp/2pq4/8/3P4/2N5/PPP2PPP/R1BQKBNR": "Scandinavian Defense: Schiller-Pytel Variation",
+ "rn2kb1r/pp2pppp/2p2n2/5b2/1qBP1B2/2N5/PPP1NPPP/R2QK2R": "Scandinavian Defense: Schiller-Pytel Variation, Modern Variation",
+ "rnbqkbnr/ppp1pppp/8/8/8/2N5/PPPP1PPP/R1BQKBNR": "Scandinavian Defense: Valencian Variation",
+ "rnbqkb1r/pp2pppp/2p2n2/8/3P4/2N2N2/PPP2PPP/R1BQKB1R": "Scandinavian Defense: Valencian Variation, Ilundain Variation",
+ "rn1qkb1r/ppp1pppp/5n2/8/3P2b1/2N2N2/PPP2PPP/R1BQKB1R": "Scandinavian Defense: Valencian Variation, Main Line",
+ "rnbqkbnr/ppp1pppp/8/3p4/1P2P3/8/P1PP1PPP/RNBQKBNR": "Scandinavian Defense: Zilbermints Gambit",
+ "rnbqkbnr/ppp2ppp/8/4p3/4N3/8/PPPP1PPP/R1BQKBNR": "Van Geet Opening: Grünfeld Defense",
+ "rnbqkb1r/pppppppp/5n2/8/4P3/8/PPPP1PPP/RNBQKBNR": "Alekhine Defense",
+ "rnbqkbnr/pppppppp/8/4P3/8/8/PPPP1PPP/RNBQKBNR": "Alekhine Defense: Brooklyn Variation",
+ "rnbqkbnr/ppppp1pp/8/4Pp2/3P4/8/PPP2PPP/RNBQKBNR": "Alekhine Defense: Brooklyn Variation, Everglades Variation",
+ "rnbqkb1r/pppppppp/8/3nP3/8/N7/PPPP1PPP/R1BQKBNR": "Alekhine Defense: Buckley Attack",
+ "rnbqkb1r/pppp1ppp/4p3/2PnP3/2B5/2N5/PP1P1PPP/R1BQK1NR": "Alekhine Defense: Hunt Variation, Lasker Simul Gambit",
+ "rnbqkb1r/ppp1pppp/3p4/2P1P1B1/8/2P5/PP3PPP/R2QKBNR": "Alekhine Defense: Hunt Variation, Matsukevich Gambit",
+ "rnbqkb1r/ppp2ppp/3p4/2PBP3/8/8/PP1P1PPP/R1BQK1NR": "Alekhine Defense: Hunt Variation, Mikenas Gambit",
+ "rnbqkb1r/pp1ppppp/1n6/2p1P3/8/1B1P4/PPP2PPP/RNBQK1NR": "Alekhine Defense: Kmoch Variation",
+ "rnbqkb1r/pppppppp/5n2/8/2B1P3/8/PPPP1PPP/RNBQK1NR": "Alekhine Defense: Krejcik Variation",
+ "rnbqkb1r/pppppBpp/8/8/4n3/8/PPPP1PPP/RNBQK1NR": "Alekhine Defense: Krejcik Variation, Krejcik Gambit",
+ "rnbqkb1r/pppppppp/5n2/8/4P3/3P4/PPP2PPP/RNBQKBNR": "Alekhine Defense: Maróczy Variation",
+ "rnbqkb1r/pppppppp/8/4P3/4n3/8/PPPP1PPP/RNBQKBNR": "Alekhine Defense: Mokele Mbembe",
+ "rnbqkb1r/ppppp1pp/5p2/4P3/3Pn3/8/PPP2PPP/RNBQKBNR": "Alekhine Defense: Mokele Mbembe, Modern Line",
+ "rnbqkb1r/pppp1ppp/4p3/4P3/3Pn3/8/PPP2PPP/RNBQKBNR": "Alekhine Defense: Mokele Mbembe, Vavra Defense",
+ "rnbqkb1r/pppppppp/8/3nP3/8/8/PPPP1PPP/RNBQKBNR": "Alekhine Defense: Normal Variation",
+ "rnbqkb1r/ppp1pppp/5n2/3p4/4P3/2N5/PPPP1PPP/R1BQKBNR": "Alekhine Defense: Scandinavian Variation",
+ "rnbqkb1r/pp2pppp/2p2n2/3P4/8/2N5/PPPP1PPP/R1BQKBNR": "Alekhine Defense: Scandinavian Variation, Geschev Gambit",
+ "rnbqkb1r/ppp1pppp/5n2/6B1/4p3/2NP4/PPP2PPP/R2QKBNR": "Alekhine Defense: Scandinavian Variation, Myers Gambit",
+ "rnbqkb1r/pppnpppp/4P3/3p4/8/2N5/PPPP1PPP/R1BQKBNR": "Alekhine Defense: Spielmann Gambit",
+ "rnbqkb1r/pppppppp/1n6/4P3/2P5/1P6/P2P1PPP/RNBQKBNR": "Alekhine Defense: Steiner Variation",
+ "rnbqkb1r/pppppppp/8/3nP3/8/2N5/PPPP1PPP/R1BQKBNR": "Alekhine Defense: Sämisch Attack",
+ "rnbqkb1r/pppppppp/8/4P3/2P2n2/8/PP1P1PPP/RNBQKBNR": "Alekhine Defense: The Squirrel",
+ "rnbqkb1r/pppppppp/8/3nP3/2P5/8/PP1P1PPP/RNBQKBNR": "Alekhine Defense: Two Pawns Attack",
+ "rnbqkb1r/pppppppp/1n6/2P1P3/8/8/PP1P1PPP/RNBQKBNR": "Alekhine Defense: Two Pawns Attack, Lasker Variation",
+ "rnbqkb1r/ppp2ppp/3pp3/2PnP3/2B5/2N5/PP1P1PPP/R1BQK1NR": "Alekhine Defense: Two Pawns Attack, Mikenas Variation",
+ "rnbqkb1r/pppppppp/8/3nP3/8/1P6/P1PP1PPP/RNBQKBNR": "Alekhine Defense: Welling Variation",
+ "rnbqkb1r/pppppppp/8/3nP3/3P4/8/PPP2PPP/RNBQKBNR": "Alekhine Defense",
+ "rnbqkb1r/ppp1pppp/3p4/3nP3/3P4/8/PPP2PPP/RNBQKBNR": "Alekhine Defense",
+ "rnbqkb1r/ppp1pppp/3p4/3nP3/2PP4/8/PP3PPP/RNBQKBNR": "Alekhine Defense",
+ "rnbqkb1r/ppp1pppp/3p4/3nP3/2BP4/8/PPP2PPP/RNBQK1NR": "Alekhine Defense: Balogh Variation",
+ "rnbqkb1r/ppp1pppp/1n1P4/8/2PP4/8/PP3PPP/RNBQKBNR": "Alekhine Defense: Exchange Variation",
+ "r2q1rk1/pp2ppbp/1nnp2p1/5b2/2PP1B2/2N2N1P/PP2BPP1/R2Q1RK1": "Alekhine Defense: Exchange Variation, Karpov Variation",
+ "rnbq1rk1/pp2ppbp/1n1p2p1/8/2PP4/1PN1B3/P4PPP/2RQKBNR": "Alekhine Defense: Exchange Variation, Voronezh Variation",
+ "rnbqkb1r/ppp1pppp/1n1p4/4P3/2PP1P2/8/PP4PP/RNBQKBNR": "Alekhine Defense: Four Pawns Attack",
+ "rnbqkb1r/ppp1pp1p/1n1p4/4P1p1/2PP1P2/8/PP4PP/RNBQKBNR": "Alekhine Defense: Four Pawns Attack, Cambridge Gambit",
+ "rnbqkb1r/ppp1pp1p/1n1p2p1/4P3/2PP1P2/8/PP4PP/RNBQKBNR": "Alekhine Defense: Four Pawns Attack, Fianchetto Variation",
+ "r2qkb1r/ppp1p1pp/1nn1p3/2P5/3P2b1/5N2/PP4PP/RNBQKB1R": "Alekhine Defense: Four Pawns Attack, Ilyin-Zhenevsky Variation",
+ "rn1q1rk1/ppp1b1pp/1n2pp2/4Pb2/2PP4/2N2N2/PP2B1PP/R1BQ1RK1": "Alekhine Defense: Four Pawns Attack, Korchnoi Variation",
+ "r1bqkb1r/ppp1pppp/1nn5/4P3/2PP4/4B3/PP4PP/RN1QKBNR": "Alekhine Defense: Four Pawns Attack, Main Line",
+ "2kr3r/pppqbppp/1nn1p3/4Pb2/2PP4/2N1BN2/PP2B1PP/R2Q1RK1": "Alekhine Defense: Four Pawns Attack, Tartakower Variation",
+ "rn1qkb1r/ppp1pppp/1n1p4/4Pb2/2PP1P2/8/PP4PP/RNBQKBNR": "Alekhine Defense: Four Pawns Attack, Trifunovic Variation",
+ "rnbqkb1r/ppp1pppp/1n1p4/2P1P3/3P4/8/PP3PPP/RNBQKBNR": "Alekhine Defense: Hunt Variation",
+ "rn1qkb1r/ppp1pppp/1n1p4/4P3/2PP2b1/5N2/PP2BPPP/RNBQK2R": "Alekhine Defense: Modern Variation, Alekhine Gambit",
+ "rnbqkb1r/p1pppppp/8/1p1nP3/3P4/8/PPP2PPP/RNBQKBNR": "Alekhine Defense: O'Sullivan Gambit",
+ "rnbqkb1r/ppp1pppp/3p4/3nP3/3P4/5N2/PPP2PPP/RNBQKB1R": "Alekhine Defense: Modern Variation",
+ "rnbqkb1r/ppp1pp1p/3p2p1/3nP3/3P4/5N2/PPP2PPP/RNBQKB1R": "Alekhine Defense: Modern Variation, Alburt Variation",
+ "rnbqk2r/ppp1ppbp/1n1p2p1/4P3/P2P4/1B3N2/1PP2PPP/RNBQK2R": "Alekhine Defense: Modern Variation, Keres Variation",
+ "rnbqkb1r/ppp1pppp/8/3np3/3P4/5N2/PPP2PPP/RNBQKB1R": "Alekhine Defense: Modern Variation, Larsen Variation",
+ "r1bqkb1r/ppp1pppp/2np4/3nP3/3P4/5N2/PPP2PPP/RNBQKB1R": "Alekhine Defense: Modern Variation, Larsen-Haakert Variation",
+ "rnbqkb1r/ppp1pppp/1n1p4/4P3/3P4/5N2/PPP2PPP/RNBQKB1R": "Alekhine Defense: Modern Variation, Schmid Variation",
+ "rn1qkb1r/ppp1pppp/3p4/3nP3/2PP2b1/5N2/PP3PPP/RNBQKB1R": "Alekhine Defense: Modern Variation, Alekhine Variation",
+ "rn1qkb1r/pp2pppp/2pp4/3nP3/3P2b1/5N2/PPP1BPPP/RNBQK2R": "Alekhine Defense: Modern Variation, Flohr Variation",
+ "rn1qkb1r/ppp1pppp/3p4/3nP3/3P2b1/5N2/PPP2PPP/RNBQKB1R": "Alekhine Defense: Modern Variation, Main Line",
+ "rn1qkb1r/ppp1pppp/3p4/3nP3/3P2b1/5N1P/PPP2PP1/RNBQKB1R": "Alekhine Defense: Modern Variation, Panov Variation",
+ "rn1qkb1r/ppp1pppp/1n1p4/3PP3/2P3b1/5N2/PP3PPP/RNBQKB1R": "Alekhine Defense: Modern Variation, Vitolins Attack",
+ "rnbqkbnr/pppppp1p/6p1/8/4P3/8/PPPP1PPP/RNBQKBNR": "Modern Defense",
+ "rnbqk1nr/ppppppbp/6p1/8/3PP3/8/PPP2PPP/RNBQKBNR": "Modern Defense",
+ "rnbqk1nr/pp2ppbp/2pp2p1/8/2BPP3/2N5/PPP1QPPP/R1B1K1NR": "Modern Defense: Anti-Modern",
+ "rnbqk1nr/ppppppbp/6p1/8/2BPP3/8/PPP2PPP/RNBQK1NR": "Modern Defense: Bishop Attack",
+ "rnbqk1nr/p1ppppbp/6p1/1p6/2BPP3/8/PPP2PPP/RNBQK1NR": "Modern Defense: Bishop Attack, Bücker Gambit",
+ "rnbqk1nr/pppp1p1p/4p1p1/8/2BbP3/5Q2/PPP2PPP/RNB1K1NR": "Modern Defense: Bishop Attack, Monkey's Bum",
+ "rnbqk1nr/pp2pp1p/2P3p1/8/2Pb4/8/PP3PPP/RNBQKBNR": "Modern Defense: Dunworthy Variation",
+ "rnbqkbnr/ppppp2p/6p1/5p2/3PP3/8/PPP2PPP/RNBQKBNR": "Modern Defense: Fianchetto Gambit",
+ "rnbqk1nr/pp2ppb1/2p3p1/3pP2p/3P1P2/2N5/PPP3PP/R1BQKBNR": "Modern Defense: Gurgenidze Defense",
+ "rnbqk1nr/ppp1ppbp/6p1/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR": "Modern Defense: Lizard Defense, Mittenberger Gambit",
+ "rnbq1rk1/ppppp2p/6pb/5P2/3P4/2N5/PPP2PPP/R2QKBNR": "Modern Defense: Masur Gambit",
+ "rnbqk1nr/pp1pppbp/6p1/2p5/3PP3/2N5/PPP2PPP/R1BQKBNR": "Modern Defense: Modern Pterodactyl",
+ "rnbqk1nr/p1ppppbp/1p4p1/8/3PP3/2N5/PPP2PPP/R1BQKBNR": "Modern Defense: Mongredien Defense, with Nc3",
+ "rnbqk1nr/p1ppppbp/1p4p1/8/3PP3/5N2/PPP2PPP/RNBQKB1R": "Modern Defense: Mongredien Defense, with Nf3",
+ "rnbqkb1r/pppppp1p/5np1/8/3PP3/8/PPP2PPP/RNBQKBNR": "Modern Defense: Norwegian Defense",
+ "rnbqkb1r/ppp1pp1p/3p2p1/4P2n/3P4/8/PPP1BPPP/RNBQK1NR": "Modern Defense: Norwegian Defense, Norwegian Gambit",
+ "rnbqk1nr/ppp1ppbp/3p2p1/8/3PPP2/2N5/PPP3PP/R1BQKBNR": "Modern Defense: Pseudo-Austrian Attack",
+ "rnb1k1nr/pp2ppbp/3p2p1/q1p5/2PPP3/5N2/PP2BPPP/RNBQK2R": "Modern Defense: Semi-Averbakh Variation, Pterodactyl Variation Declined",
+ "rnbqk1nr/ppp1ppbp/3p2p1/8/3PP3/2N5/PPP2PPP/R1BQKBNR": "Modern Defense: Standard Defense",
+ "rnbqk1nr/ppppppbp/6p1/8/3PP3/2N5/PPP2PPP/R1BQKBNR": "Modern Defense: Standard Line",
+ "rnbqk1nr/ppppppbp/6p1/8/3PPP2/8/PPP3PP/RNBQKBNR": "Modern Defense: Three Pawns Attack",
+ "rnbqk1nr/ppp1ppbp/3p2p1/8/3PP3/2N2N2/PPP2PPP/R1BQKB1R": "Modern Defense: Two Knights Variation",
+ "rnbqk1nr/pp2ppbp/2pp2p1/8/3PP3/2N2N2/PPP2PPP/R1BQKB1R": "Modern Defense: Two Knights Variation, Suttles Variation",
+ "rnb1k1nr/pp2ppbp/2pp2p1/6B1/3PP3/2N2N2/PqPQ1PPP/R3KB1R": "Modern Defense: Two Knights Variation, Suttles Variation, Tal Gambit",
+ "rnbqk1nr/ppppppbp/6p1/8/3PP3/8/PPPB1PPP/RN1QKBNR": "Modern Defense: Westermann Gambit",
+ "rnbqk1nr/ppppppbp/6p1/8/3PP3/3B4/PPP2PPP/RNBQK1NR": "Modern Defense: Wind Gambit",
+ "rnbqkb1r/ppppppnp/6p1/4P3/3P2P1/8/PPP2P1P/RNBQKBNR": "Norwegian Defense",
+ "rnb1k1nr/pp1pppbp/6p1/q1p5/3PPP2/5N2/PPP3PP/RNBQKB1R": "Pterodactyl Defense: Austrian, Austriadactylus Western",
+ "rnb1k1nr/pp1pppbp/6p1/q1p5/4PP2/2N2N2/PPPP2PP/R1BQKB1R": "Pterodactyl Defense: Austrian, Grand Prix Pterodactyl",
+ "rnb1k1nr/pp1pppbp/6p1/q1p5/3PPP2/2P5/PP4PP/RNBQKBNR": "Pterodactyl Defense: Austrian, Pteranodon",
+ "rnb1k1nr/pp2ppbp/3p2p1/q1p5/2PPP3/2N1B3/PP3PPP/R2QKBNR": "Pterodactyl Defense: Central, Anhanguera",
+ "rnb1k1nr/pp2ppbp/3p2p1/q1pP4/2P1P3/2N5/PP3PPP/R1BQKBNR": "Pterodactyl Defense: Central, Benoni Quetzalcoatlus",
+ "rnb1k1nr/pp2ppbp/3p2p1/q1P5/2P1P3/2N5/PP3PPP/R1BQKBNR": "Pterodactyl Defense: Central, Quetzalcoatlus Gambit",
+ "rnbqk1nr/pp1pppbp/6p1/2p5/3PP3/2N1B3/PPP2PPP/R2QKBNR": "Pterodactyl Defense: Eastern, Anhanguera",
+ "rnbqk1nr/pp1pppbp/6p1/2pP4/4P3/2N5/PPP2PPP/R1BQKBNR": "Pterodactyl Defense: Eastern, Benoni",
+ "rnb1k1nr/pp1ppp1p/6p1/q1pP4/4P3/2P5/P1P2PPP/R1BQKBNR": "Pterodactyl Defense: Eastern, Benoni Pteranodon",
+ "rnb1k1nr/pp1pppbp/6p1/q1pP4/4P3/2N5/PPP2PPP/R1BQKBNR": "Pterodactyl Defense: Eastern, Benoni Pterodactyl",
+ "rnb1k1nr/pp1ppp1p/6p1/q1P5/4P3/2P5/P1P2PPP/R1BQKBNR": "Pterodactyl Defense: Eastern, Pteranodon",
+ "rnb1k1nr/pp1pppbp/6p1/q1P5/4P3/2N5/PPP2PPP/R1BQKBNR": "Pterodactyl Defense: Eastern, Pterodactyl",
+ "rnbqk1nr/pp1pppbp/6p1/2P5/4P3/2N5/PPP2PPP/R1BQKBNR": "Pterodactyl Defense: Eastern, Rhamphorhynchus",
+ "rnb1k1nr/pp1pppbp/6p1/q1p5/3PP3/5NP1/PPP2P1P/RNBQKB1R": "Pterodactyl Defense: Fianchetto, King Pterodactyl",
+ "rnb1k1nr/pp1pppbp/6p1/q1P5/4P3/6P1/PPP2P1P/RNBQKBNR": "Pterodactyl Defense: Fianchetto, Rhamphorhynchus",
+ "rnb1k1nr/pp2ppbp/3p2p1/q1p5/3PP3/2N2N2/PPP1BPPP/R1BQK2R": "Pterodactyl Defense: Sicilian, Quetzalcoatlus",
+ "rnb1k1nr/pp1pppbp/6p1/q1p5/2BPP3/2N2N2/PPP2PPP/R1BQK2R": "Pterodactyl Defense: Sicilian, Siroccopteryx",
+ "rnb1k1nr/pp1pppbp/6p1/q1p5/3PP3/4BN2/PPP2PPP/RN1QKB1R": "Pterodactyl Defense: Western, Anhanguera",
+ "rnb1k1nr/pp1pppbp/6p1/q7/2BNP3/8/PPP2PPP/RNBQK2R": "Pterodactyl Defense: Western, Siroccopteryx",
+ "rnbqkbnr/pp2pp1p/2pp2p1/8/3PP3/2N5/PPP2PPP/R1BQKBNR": "Rat Defense: Accelerated Gurgenidze",
+ "rnbqkb1r/pp2pppp/2pp1n2/8/3PP3/2N5/PPP2PPP/R1BQKBNR": "Czech Defense",
+ "rnbqkbnr/ppp2ppp/3p4/4p3/3PP3/8/PPP2PPP/RNBQKBNR": "King's Pawn Game: Maróczy Defense",
+ "r1bqkb1r/pppnpppp/3p1n2/8/3PPP2/2N5/PPP3PP/R1BQKBNR": "Lion Defense: Anti-Philidor",
+ "r1bqkb1r/pppn1ppp/3p1n2/4p3/3PPP2/2N5/PPP3PP/R1BQKBNR": "Lion Defense: Anti-Philidor, Lion's Cave",
+ "r1bqkb1r/pp1n1ppp/2p2n2/3p4/2BQPP2/2N2N2/PPP3PP/R1B1K2R": "Lion Defense: Anti-Philidor, Lion's Cave, Lion Claw Gambit",
+ "r1bqkb1r/pppnpppp/3p1n2/8/3PP1P1/2N5/PPP2P1P/R1BQKBNR": "Lion Defense: Bayonet Attack",
+ "rnbqk1nr/ppp1ppbp/3p2p1/8/3PP3/2P2N2/PP3PPP/RNBQKB1R": "Modern Defense: Geller's System",
+ "rnbqkb1r/ppp1pp1p/3p1np1/8/3PP3/2N5/PPP2PPP/R1BQKBNR": "Pirc Defense",
+ "rnbqkb1r/pp2pp1p/2pp1np1/8/3PP3/2N1B3/PPPQ1PPP/R3KBNR": "Pirc Defense: 150 Attack",
+ "rn1qkb1r/pp2pp1p/2pp1np1/8/3PP1b1/2N1B3/PPPQ1PPP/R3KBNR": "Pirc Defense: 150 Attack, Inner Doll Defense",
+ "rnbqkb1r/pp2pp1p/2pp1np1/8/3PP3/2N1B2P/PPP2PP1/R2QKBNR": "Pirc Defense: 150 Attack, Sveshnikov-Jansa Attack",
+ "rnbqk2r/ppp1ppbp/3p1np1/8/3PP2P/2N5/PPP1BPP1/R1BQK1NR": "Pirc Defense: Bayonet Attack",
+ "rnbqkb1r/ppp1pp1p/3p1np1/6B1/3PP3/2N5/PPP2PPP/R2QKBNR": "Pirc Defense: Byrne Variation",
+ "rnbqk2r/ppp1ppbp/3p1np1/8/3PP1P1/2N5/PPP1BP1P/R1BQK1NR": "Pirc Defense: Chinese Variation",
+ "rnbqkb1r/ppp1pp1p/3p1np1/8/2BPP3/2N5/PPP2PPP/R1BQK1NR": "Pirc Defense: Kholmov System",
+ "rnbqkb1r/ppp1pp1p/3p1np1/8/3PP3/2N3P1/PPP2P1P/R1BQKBNR": "Pirc Defense: Sveshnikov System",
+ "rnbqkb1r/ppp1pp1p/3p1np1/8/3PP3/2N2N2/PPP2PPP/R1BQKB1R": "Pirc Defense: Classical Variation",
+ "rnbqk2r/ppp1ppbp/3p1np1/8/3PP3/2N2N2/PPP2PPP/R1BQKB1R": "Pirc Defense: Classical Variation",
+ "rnbqk2r/ppp1ppbp/3p1np1/8/3PP3/2N2N2/PPP1BPPP/R1BQK2R": "Pirc Defense: Classical Variation, Quiet System",
+ "r1bq1rk1/ppp1ppbp/2np1np1/8/3PP3/2N2N2/PPP1BPPP/R1BQ1RK1": "Pirc Defense: Classical Variation, Quiet System, Chigorin Line",
+ "rnbq1rk1/pp2ppbp/2pp1np1/8/3PP3/2N2N2/PPP1BPPP/R1BQ1RK1": "Pirc Defense: Classical Variation, Quiet System, Czech Defense",
+ "rn1q1rk1/ppp1ppbp/3p1np1/8/3PP1b1/2N2N2/PPP1BPPP/R1BQ1RK1": "Pirc Defense: Classical Variation, Quiet System, Parma Defense",
+ "rnbqk2r/ppp1ppbp/3p1np1/8/3PP3/2N2N1P/PPP2PP1/R1BQKB1R": "Pirc Defense: Classical Variation, Schlechter Variation",
+ "rnbqkb1r/ppp1pp1p/3p1np1/8/3PPP2/2N5/PPP3PP/R1BQKBNR": "Pirc Defense: Austrian Attack",
+ "rnbq1rk1/ppp1ppbp/3p1np1/8/3PPP2/2N2N2/PPP3PP/R1BQKB1R": "Pirc Defense: Austrian Attack",
+ "rnbqk2r/pp2ppbp/3p1np1/2p5/3PPP2/2N2N2/PPP3PP/R1BQKB1R": "Pirc Defense: Austrian Attack, Dragon Formation",
+ "rnbq1rk1/ppp1ppbp/3p1np1/8/3PPP2/2N1BN2/PPP3PP/R2QKB1R": "Pirc Defense: Austrian Attack, Kurajica Variation",
+ "rnbqk2r/ppp1ppbp/3p1np1/8/2BPPP2/2N5/PPP3PP/R1BQK1NR": "Pirc Defense: Austrian Attack, Ljubojevic Variation",
+ "rnbq1rk1/ppp1ppbp/3p1np1/4P3/3P1P2/2N2N2/PPP3PP/R1BQKB1R": "Pirc Defense: Austrian Attack, Unzicker Attack",
+ "rnbq1rk1/pppnppbp/3p2p1/4P3/3P1P1P/2N2N2/PPP3P1/R1BQKB1R": "Pirc Defense: Austrian Attack, Unzicker Attack, Bronstein Variation",
+ "rnbq1rk1/ppp1ppbp/3p1np1/8/3PPP2/2NB1N2/PPP3PP/R1BQK2R": "Pirc Defense: Austrian Attack, Weiss Variation",
+ "rnbqkbnr/pp1ppppp/2p5/8/4P3/8/PPPP1PPP/RNBQKBNR": "Caro-Kann Defense",
+ "rnbqkbnr/pp1ppppp/2p5/8/4P3/2N5/PPPP1PPP/R1BQKBNR": "Caro-Kann Defense",
+ "rnbqkbnr/pp2pppp/2p5/3p4/4P3/2N5/PPPP1PPP/R1BQKBNR": "Caro-Kann Defense",
+ "rnbqkbnr/pp1ppppp/2p5/8/2P1P3/8/PP1P1PPP/RNBQKBNR": "Caro-Kann Defense: Accelerated Panov Attack",
+ "rnbqkbnr/pp2pppp/2p5/3p4/2P1P3/8/PP1P1PPP/RNBQKBNR": "Caro-Kann Defense: Accelerated Panov Attack",
+ "rnbqkb1r/pp2pppp/5n2/3P4/8/8/PP1P1PPP/RNBQKBNR": "Caro-Kann Defense: Accelerated Panov Attack, Modern Variation",
+ "rnbqkbnr/pp1p1ppp/2p5/4p3/2P1P3/8/PP1P1PPP/RNBQKBNR": "Caro-Kann Defense: Accelerated Panov Attack, Open Variation",
+ "rnb1kbnr/pp2pppp/2p5/3q4/2P5/8/PP1P1PPP/RNBQKBNR": "Caro-Kann Defense: Accelerated Panov Attack, Pseudo-Scandinavian",
+ "rnbqkbnr/pp2pppp/8/3p4/4P3/1Q6/PP1P1PPP/RNB1KBNR": "Caro-Kann Defense: Accelerated Panov Attack, Van Weersel Attack",
+ "rnbqkbnr/pp2pppp/8/3pN3/8/8/PPPP1PPP/RNBQKB1R": "Caro-Kann Defense: Apocalypse Attack",
+ "rnbqkbnr/pp1ppppp/2p5/8/4P3/3P4/PPP2PPP/RNBQKBNR": "Caro-Kann Defense: Breyer Variation",
+ "rnbq1rk1/pp2npbp/2p3p1/3pp3/1P2P3/3P1NP1/P1PN1PBP/R1BQ1RK1": "Caro-Kann Defense: Breyer Variation, Stein Attack",
+ "rnbqkbnr/pp1ppppp/2p5/8/4P3/1P6/P1PP1PPP/RNBQKBNR": "Caro-Kann Defense: Euwe Attack",
+ "rnbqkbnr/pp2pppp/2p5/3p4/4P3/2N2Q2/PPPP1PPP/R1B1KBNR": "Caro-Kann Defense: Goldman Variation",
+ "rnbqkbnr/pp2pppp/2p5/6N1/4p3/2N5/PPPP1PPP/R1BQKB1R": "Caro-Kann Defense: Hector Gambit",
+ "rnbqkbnr/pp1ppppp/2p5/8/2B1P3/8/PPPP1PPP/RNBQK1NR": "Caro-Kann Defense: Hillbilly Attack",
+ "rnbqkbnr/pp2pppp/2p5/7Q/4p3/1B6/PPPP1PPP/RNB1K1NR": "Caro-Kann Defense: Hillbilly Attack, Schaeffer Gambit",
+ "rnbqkbnr/pp1ppppp/2p5/8/1P2P3/8/P1PP1PPP/RNBQKBNR": "Caro-Kann Defense: Labahn Attack",
+ "rnbqkbnr/pp2pppp/2p5/1P1p4/4P3/8/P1PP1PPP/RNBQKBNR": "Caro-Kann Defense: Labahn Attack, Double Gambit",
+ "rnbqkbnr/pp1p1ppp/2p5/4p3/1P2P3/8/PBPP1PPP/RN1QKBNR": "Caro-Kann Defense: Labahn Attack, Polish Variation",
+ "rnbqkbnr/pp2pppp/2p5/6B1/4p3/2NP4/PPP2PPP/R2QKBNR": "Caro-Kann Defense: Scorpion-Horus Gambit",
+ "rnbqkbnr/pp1ppppp/2p5/8/4P1P1/8/PPPP1P1P/RNBQKBNR": "Caro-Kann Defense: Spike Variation",
+ "rnbqkbnr/pp2pppp/2p5/8/4p1P1/2NP4/PPP2P1P/R1BQKBNR": "Caro-Kann Defense: Spike Variation, Scorpion-Grob Gambit",
+ "rnbqkbnr/pp2pppp/2p5/3pP3/2P5/8/PP1P1PPP/RNBQKBNR": "Caro-Kann Defense: Toikkanen Gambit",
+ "rnbqkbnr/pp2pppp/2p5/3p4/4P3/2N2N2/PPPP1PPP/R1BQKB1R": "Caro-Kann Defense: Two Knights Attack",
+ "rn1qkbnr/pp2pppp/2p5/3p4/4P1b1/2N2N2/PPPP1PPP/R1BQKB1R": "Caro-Kann Defense: Two Knights Attack, Mindeno Variation",
+ "rn1qkbnr/pp2pppp/2p5/3p4/4P3/2N2b1P/PPPP1PP1/R1BQKB1R": "Caro-Kann Defense: Two Knights Attack, Mindeno Variation, Exchange Line",
+ "rn1qkbnr/pp2pppp/2p5/3p3b/4P3/2N2N1P/PPPP1PP1/R1BQKB1R": "Caro-Kann Defense: Two Knights Attack, Mindeno Variation, Retreat Line",
+ "rnbqkbnr/pp1ppppp/2p5/8/3PP3/8/PPP2PPP/RNBQKBNR": "Caro-Kann Defense",
+ "rnbqkbnr/pp2pppp/2p5/3p4/3PP3/8/PPP2PPP/RNBQKBNR": "Caro-Kann Defense",
+ "rnbqkbnr/pp2pppp/2p5/3pP3/3P4/8/PPP2PPP/RNBQKBNR": "Caro-Kann Defense: Advance Variation",
+ "rn1qkbnr/pp2pppp/2p5/3pPb2/3P2P1/8/PPP2P1P/RNBQKBNR": "Caro-Kann Defense: Advance Variation, Bayonet Attack",
+ "rnbqkbnr/pp2pppp/8/2ppP3/3P4/8/PPP2PPP/RNBQKBNR": "Caro-Kann Defense: Advance Variation, Botvinnik-Carls Defense",
+ "rn1qkbnr/pp2pppp/2p5/3pPb2/3P4/8/PPP1NPPP/RNBQKB1R": "Caro-Kann Defense: Advance Variation, Bronstein Variation",
+ "rn1qkbnr/pp2pppp/2p5/3pPb2/1P1P4/8/P1P2PPP/RNBQKBNR": "Caro-Kann Defense: Advance Variation, Prins Attack",
+ "rn1qkbnr/pp2pppp/2p5/3pPb2/3P4/5N2/PPP2PPP/RNBQKB1R": "Caro-Kann Defense: Advance Variation, Short Variation",
+ "rn1qkbnr/pp2pppp/2p5/3pPb2/3P3P/8/PPP2PP1/RNBQKBNR": "Caro-Kann Defense: Advance Variation, Tal Variation",
+ "rn1qkbnr/pp2pppp/2p5/3pPb2/3P4/2N5/PPP2PPP/R1BQKBNR": "Caro-Kann Defense: Advance Variation, Van der Wiel Attack",
+ "rn1qkbnr/pp3ppp/4p1b1/2ppP3/3P2PP/2N5/PPP1NP2/R1BQKB1R": "Caro-Kann Defense: Advance Variation, Van der Wiel Attack",
+ "rn2kbnr/pp2pppp/1qp5/3pPb2/3P4/2N5/PPP2PPP/R1BQKBNR": "Caro-Kann Defense: Advance Variation, Van der Wiel Attack, Dreyev Defense",
+ "rn1qkbnr/pp3ppp/2p1p3/3pPb2/3P4/2P5/PP2BPPP/RNBQK1NR": "Caro-Kann Defense: Advance, Short Variation",
+ "r1bqkbnr/pp1ppppp/n1p5/8/3PP3/8/PPP2PPP/RNBQKBNR": "Caro-Kann Defense: De Bruycker Defense",
+ "r1bqkbnr/ppnppppp/2p5/8/3PP3/2N5/PPP2PPP/R1BQKBNR": "Caro-Kann Defense: De Bruycker Defense",
+ "rnb1kbnr/pp2pppp/1qp5/3p4/3PP3/8/PPPN1PPP/R1BQKBNR": "Caro-Kann Defense: Edinburgh Variation",
+ "rnbqkbnr/pp2pppp/2p5/3p4/3PP3/5P2/PPP3PP/RNBQKBNR": "Caro-Kann Defense: Maróczy Variation",
+ "rnbqkbnr/pp3ppp/2p5/8/2BpP3/5N2/PPP3PP/RNBQK2R": "Caro-Kann Defense: Maróczy Variation, Maróczy Gambit",
+ "rnbqkb1r/pp1ppppp/2p2n2/8/3PP3/8/PPP2PPP/RNBQKBNR": "Caro-Kann Defense: Masi Variation",
+ "rnbqkbnr/pp1pp1pp/2p5/5p2/3PP3/8/PPP2PPP/RNBQKBNR": "Caro-Kann Defense: Massachusetts Defense",
+ "rnbqkb1r/pp1npppp/2p1P3/3p4/3P4/3B4/PPP2PPP/RNBQK1NR": "Caro-Kann Defense: Mieses Attack, Landau Gambit",
+ "rnbqkbnr/pp2pppp/2p5/3p4/3PP3/4B3/PPP2PPP/RN1QKBNR": "Caro-Kann Defense: Mieses Gambit",
+ "rnbqkbnr/pp2pppp/2p5/3p4/3PP3/8/PPPN1PPP/R1BQKBNR": "Caro-Kann Defense: Modern Variation",
+ "rnbqkbnr/pp2pppp/2p5/6N1/3Pp3/8/PPP2PPP/RNBQKB1R": "Caro-Kann Defense: Ulysses Gambit",
+ "rnbqkbnr/pp2pppp/2p5/3P4/3P4/8/PPP2PPP/RNBQKBNR": "Caro-Kann Defense: Exchange Variation",
+ "rnbqkbnr/pp2pppp/8/3p4/3P2P1/8/PPP2P1P/RNBQKBNR": "Caro-Kann Defense: Exchange Variation, Bulla Attack",
+ "r1bqkb1r/pp2pppp/2n2n2/3p4/3P1B2/2PB4/PP3PPP/RN1QK1NR": "Caro-Kann Defense: Exchange Variation, Rubinstein Variation",
+ "rnbqkbnr/pp2pppp/8/3p4/2PP4/8/PP3PPP/RNBQKBNR": "Caro-Kann Defense: Panov Attack",
+ "rnbqkb1r/pp2pppp/5n2/3p4/2PP4/2N5/PP3PPP/R1BQKBNR": "Caro-Kann Defense: Panov Attack",
+ "rnbqkb1r/pp2pppp/5n2/2Pp4/3P4/8/PP3PPP/RNBQKBNR": "Caro-Kann Defense: Panov Attack, Gunderam Attack",
+ "r1bqkb1r/pp2pppp/2n2n2/3p4/2PP4/2N5/PP3PPP/R1BQKBNR": "Caro-Kann Defense: Panov Attack, Modern Defense",
+ "r1bqkb1r/pp3ppp/2n1pn2/3p2B1/2PP4/2N5/PP3PPP/R2QKBNR": "Caro-Kann Defense: Panov Attack, Modern Defense, Carlsbad Line",
+ "r1b1kb1r/pp2pppp/2n2n2/q2p2B1/2PP4/2N5/PP3PPP/R2QKBNR": "Caro-Kann Defense: Panov Attack, Modern Defense, Czerniak Line",
+ "r2qkb1r/pp2pppp/2n2n2/3p4/2PP2b1/2N2N2/PP3PPP/R1BQKB1R": "Caro-Kann Defense: Panov Attack, Modern Defense, Mieses Line",
+ "r1b1kb1r/pp2pppp/1qn2n2/3p2B1/2PP4/2N5/PP3PPP/R2QKBNR": "Caro-Kann Defense: Panov Attack, Modern Defense, Reifir-Spielmann Line",
+ "r1bqkb1r/pp2pppp/5n2/n2P2B1/2p5/2N5/PP3PPP/R2QKBNR": "Caro-Kann Defense: Panov-Botvinnik, Herzog Defense",
+ "rnbqkb1r/pp3ppp/4pn2/3p4/2PP4/2N5/PP3PPP/R1BQKBNR": "Caro-Kann Defense: Panov Attack",
+ "rnbqkb1r/pp2pp1p/5np1/3p4/2PP4/2N5/PP3PPP/R1BQKBNR": "Caro-Kann Defense: Panov Attack, Fianchetto Defense",
+ "rnbqk2r/pp2ppbp/5np1/3P4/3P4/2N5/PP3PPP/R1BQKBNR": "Caro-Kann Defense: Panov Attack, Fianchetto Defense, Fianchetto Gambit",
+ "rnbqk2r/pp3ppp/4pn2/3p4/1bPP4/2N2N2/PP3PPP/R1BQKB1R": "Caro-Kann Defense: Panov Attack, Main Line",
+ "rnbqkbnr/pp2pppp/2p5/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR": "Caro-Kann Defense",
+ "rnbqkbnr/pp2pppp/2p5/8/3Pp3/2N5/PPP2PPP/R1BQKBNR": "Caro-Kann Defense",
+ "rnbqkb1r/pp2pppp/2p2n2/8/3PN3/3B4/PPP2PPP/R1BQK1NR": "Caro-Kann Defense: Alekhine Gambit",
+ "rnbqkb1r/pp2pppp/2p2n2/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR": "Caro-Kann Defense: Campomanes Attack",
+ "rnbqkb1r/pp3ppp/2p2p2/8/2BP4/8/PPP2PPP/R1BQK1NR": "Caro-Kann Defense: Forgacs Variation",
+ "rnbqkbnr/p3pppp/2p5/1p1p4/3PP3/2N5/PPP2PPP/R1BQKBNR": "Caro-Kann Defense: Gurgenidze Counterattack",
+ "rnbqkbnr/pp2pp1p/2p3p1/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR": "Caro-Kann Defense: Gurgenidze System",
+ "rnbqkbnr/pp2pppp/2p5/8/3PN3/8/PPP2PPP/R1BQKBNR": "Caro-Kann Defense: Main Line",
+ "rnbqkbnr/pp2pppp/2p5/8/3Pp3/2N2P2/PPP3PP/R1BQKBNR": "Caro-Kann Defense: Rasa-Studier Gambit",
+ "rnbqkb1r/pp3ppp/2p2p2/8/3P4/8/PPP2PPP/R1BQKBNR": "Caro-Kann Defense: Tartakower Variation",
+ "rnbqkbnr/pp2pppp/2p5/8/2BPp3/2N5/PPP2PPP/R1BQK1NR": "Caro-Kann Defense: von Hennig Gambit",
+ "rnbqkb1r/pp2pp1p/2p2p2/8/3P4/8/PPP2PPP/R1BQKBNR": "Caro-Kann Defense: Bronstein-Larsen Variation",
+ "rnbqkbnr/pp2ppp1/2p4p/8/3PN3/8/PPP2PPP/R1BQKBNR": "Caro-Kann Defense: Finnish Variation",
+ "r1bqkbnr/pp1npppp/2p5/8/3PN3/8/PPP2PPP/R1BQKBNR": "Caro-Kann Defense: Karpov Variation",
+ "r1bqk2r/pp1n1pp1/2pbp2p/8/3PQ3/3B1N2/PPP2PPP/R1B1K2R": "Caro-Kann Defense: Karpov Variation, Modern Main Line",
+ "r1bqkbnr/pp1npppp/2p5/6N1/3P4/8/PPP2PPP/R1BQKBNR": "Caro-Kann Defense: Karpov Variation, Modern Variation",
+ "r1bqkbnr/pp2pppp/2p2n2/6N1/3P4/8/PPP2PPP/R1BQKBNR": "Caro-Kann Defense: Karpov Variation, Modern Variation, Ivanchuk Defense",
+ "r1bqkb1r/pp1npppp/2p2n2/8/3P4/5NN1/PPP2PPP/R1BQKB1R": "Caro-Kann Defense: Karpov Variation, Modern Variation, Kasparov Attack",
+ "r1bqkb1r/pp3ppp/1np1pn2/6N1/2BP4/8/PPP1QPPP/R1B1K1NR": "Caro-Kann Defense: Karpov Variation, Smyslov Variation",
+ "r1bqkb1r/pp3ppp/1np1pn2/6N1/3P4/1B6/PPP1QPPP/R1B1K1NR": "Caro-Kann Defense: Karpov Variation, Smyslov Variation, Main Line",
+ "r1bqkb1r/pp2pppp/2p2n2/8/2BP4/8/PPP2PPP/R1BQK1NR": "Caro-Kann Defense: Karpov Variation, Tiviakov-Fischer Attack",
+ "rn1qkbnr/pp2pppp/2p5/5b2/3PN3/8/PPP2PPP/R1BQKBNR": "Caro-Kann Defense: Classical Variation",
+ "rn1qkbnr/pp2pppp/2p3b1/8/3P4/6NN/PPP2PPP/R1BQKB1R": "Caro-Kann Defense: Classical Variation, Flohr Variation",
+ "rn1qkbnr/pp2pppp/2p3b1/8/3P3P/6N1/PPP2PP1/R1BQKBNR": "Caro-Kann Defense: Classical Variation, Main Line",
+ "rn1qkbnr/pp2pppp/2p3b1/8/3P1P2/6N1/PPP3PP/R1BQKBNR": "Caro-Kann Defense: Classical Variation, Maróczy Attack",
+ "r2qkbnr/pp1nppp1/2p3bp/8/3P3P/5NN1/PPP2PP1/R1BQKB1R": "Caro-Kann Defense: Classical Variation",
+ "r2qk2r/pp1nbpp1/2p1pn1p/7P/3P4/3Q1NN1/PPPB1PP1/2KR3R": "Caro-Kann Defense: Classical Variation, Lobron System",
+ "r2qk2r/pp1n1pp1/2pbpn1p/7P/3P4/3Q1NN1/PPPB1PP1/2KR3R": "Caro-Kann Defense: Classical Variation, Seirawan Variation",
+ "r2qkbnr/pp1nppp1/2p3bp/7P/3P4/5NN1/PPP2PP1/R1BQKB1R": "Caro-Kann Defense: Classical Variation, Spassky Variation",
+ "rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR": "Sicilian Defense",
+ "rnbqkbnr/pp1ppppp/8/2p5/4P1Q1/8/PPPP1PPP/RNB1KBNR": "Sicilian Defense: Amazon Attack",
+ "r1bqkbnr/pp2pppp/2np4/2p5/4PP2/2PP4/PP4PP/RNBQKBNR": "Sicilian Defense: Big Clamp Formation",
+ "rnbqkbnr/pp1ppppp/8/2p5/2B1P3/8/PPPP1PPP/RNBQK1NR": "Sicilian Defense: Bowdler Attack",
+ "rnbqkbnr/pp1ppppp/8/2p5/4P3/7N/PPPP1PPP/RNBQKB1R": "Sicilian Defense: Brick Variation",
+ "rnbqkbnr/pp2pppp/8/2pp4/4P3/1P6/PBPP1PPP/RN1QKBNR": "Sicilian Defense: Euwe Attack, Prins Gambit",
+ "r1bqkbnr/pp2ppp1/2np4/2p4p/2P1P3/2N3P1/PP1P1P1P/R1BQKBNR": "Sicilian Defense: Gloria Variation",
+ "rnbqkbnr/pp1ppppp/8/2p5/4P1P1/8/PPPP1P1P/RNBQKBNR": "Sicilian Defense: Grob Variation",
+ "rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPPNPPP/RNBQKB1R": "Sicilian Defense: Keres Variation",
+ "rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPPKPPP/RNBQ1BNR": "Sicilian Defense: King David's Opening",
+ "rnbqkbnr/pp1ppppp/8/2p5/4P3/N7/PPPP1PPP/R1BQKBNR": "Sicilian Defense: Kronberger Variation",
+ "r1bqkbnr/pp1ppppp/2n5/8/2BpP3/N7/PPP2PPP/R1BQK1NR": "Sicilian Defense: Kronberger Variation, Nemeth Gambit",
+ "rnbqkbnr/pp1ppppp/8/2p5/4P3/6P1/PPPP1P1P/RNBQKBNR": "Sicilian Defense: Lasker-Dunne Attack",
+ "rnbqkbnr/pp1ppppp/8/2p5/4P3/P7/1PPP1PPP/RNBQKBNR": "Sicilian Defense: Mengarini Variation",
+ "rnbqkbnr/pp1ppppp/8/2p5/P3P3/8/1PPP1PPP/RNBQKBNR": "Sicilian Defense: Myers Attack, with a4",
+ "rnbqkbnr/pp1ppppp/8/2p5/4P2P/8/PPPP1PP1/RNBQKBNR": "Sicilian Defense: Myers Attack, with h4",
+ "rnbqkbnr/pp1ppppp/8/2p5/4P3/1P6/P1PP1PPP/RNBQKBNR": "Sicilian Defense: Snyder Variation",
+ "rnbqkbnr/p2ppppp/1p6/2p5/4P3/1P6/P1PP1PPP/RNBQKBNR": "Sicilian Defense: Snyder Variation, Queen Fianchetto Variation",
+ "rnbqkbnr/pp1ppppp/8/2p5/2P1P3/8/PP1P1PPP/RNBQKBNR": "Sicilian Defense: Staunton-Cochrane Variation",
+ "rnbqkbnr/pp1ppppp/8/2p5/1P2P3/8/P1PP1PPP/RNBQKBNR": "Sicilian Defense: Wing Gambit",
+ "rnbqkbnr/pp1ppppp/8/8/1p2P3/8/PBPP1PPP/RN1QKBNR": "Sicilian Defense: Wing Gambit, Abrahams Variation",
+ "rnbqkbnr/pp1ppppp/8/8/4P3/p7/2PP1PPP/RNBQKBNR": "Sicilian Defense: Wing Gambit, Carlsbad Variation",
+ "rnb1kbnr/pp2pppp/8/3q4/1p6/P7/1BPP1PPP/RN1QKBNR": "Sicilian Defense: Wing Gambit, Marienbad Variation",
+ "rnbqkbnr/pp1ppppp/8/8/1p2P3/P7/2PP1PPP/RNBQKBNR": "Sicilian Defense: Wing Gambit, Marshall Variation",
+ "rnb1kbnr/pp3ppp/4q3/4p3/1pP5/P2B1N2/3P1PPP/RNBQK2R": "Sicilian Defense: Wing Gambit, Nanu Gambit",
+ "r1b1kbnr/pp3ppp/2n1q3/4p3/1pP5/P4N2/1B1P1PPP/RN1QKB1R": "Sicilian Defense: Wing Gambit, Romanian Defense",
+ "rnbqkbnr/pp1ppppp/8/8/1pP1P3/8/P2P1PPP/RNBQKBNR": "Sicilian Defense: Wing Gambit, Santasiere Variation",
+ "rnbqkbnr/pp2pppp/8/2p5/4pP2/5N2/PPPP2PP/RNBQKB1R": "Bird Opening: Dutch Variation, Batavo Gambit",
+ "r1bqkb1r/pp1ppppp/2n2n2/8/2B1P3/8/PPP2PPP/RNBQK1NR": "Sicilian Defense: Coles Sicilian Gambit",
+ "rnbqkbnr/pp1ppppp/8/8/3pPP2/8/PPP3PP/RNBQKBNR": "Sicilian Defense: Halasz Gambit",
+ "rnbqkbnr/pp1ppppp/8/2p5/4PP2/8/PPPP2PP/RNBQKBNR": "Sicilian Defense: McDonnell Attack",
+ "rnbqkb1r/pp2pppp/5n2/2pP4/5P2/8/PPPP2PP/RNBQKBNR": "Sicilian Defense: McDonnell Attack, Tal Gambit",
+ "rnbqkbnr/pp1ppppp/8/8/3pP3/5N2/PPP2PPP/RNBQKB1R": "Sicilian Defense: Morphy Gambit",
+ "rnbqkbnr/pp1p1ppp/8/4p3/3pP3/2P2N2/PP3PPP/RNBQKB1R": "Sicilian Defense: Morphy Gambit, Andreaschek Gambit",
+ "rnbqkbnr/pp1ppppp/8/2p5/3PP3/8/PPP2PPP/RNBQKBNR": "Sicilian Defense: Smith-Morra Gambit",
+ "rnbqkbnr/pp1ppppp/8/8/3pP3/2P5/PP3PPP/RNBQKBNR": "Sicilian Defense: Smith-Morra Gambit",
+ "rnbqkb1r/1p3ppp/p2ppn2/8/2B1P3/2N2N2/PP3PPP/R1BQ1RK1": "Sicilian Defense: Smith-Morra Gambit Accepted, Chicago Defense",
+ "r1bqkb1r/1p2pppp/p1np1n2/8/2B1P3/2N2N2/PP3PPP/R1BQ1RK1": "Sicilian Defense: Smith-Morra Gambit Accepted, Classical Formation",
+ "r1bqkbnr/pp1ppp1p/2n3p1/8/4P3/2N2N2/PP3PPP/R1BQKB1R": "Sicilian Defense: Smith-Morra Gambit Accepted, Fianchetto Defense",
+ "rnbqk2r/1p2bppp/p2ppn2/8/2B1P3/2N2N2/PP2QPPP/R1B2RK1": "Sicilian Defense: Smith-Morra Gambit Accepted, Finegold Defense",
+ "rnbqkbnr/1p1p1ppp/p3p3/8/4P3/2N2N2/PP3PPP/R1BQKB1R": "Sicilian Defense: Smith-Morra Gambit Accepted, Kan Formation",
+ "r1b1k1nr/1pqp1ppp/p1nbp3/8/2B1P3/2N2N2/PP2QPPP/R1B2RK1": "Sicilian Defense: Smith-Morra Gambit Accepted, Larsen Defense",
+ "r1bqk1nr/pp1p1ppp/2n1p3/2b5/2B1P3/2N2N2/PP3PPP/R1BQK2R": "Sicilian Defense: Smith-Morra Gambit Accepted, Morphy Defense",
+ "r1bqk1nr/3p1ppp/p1n1p3/1pb5/4P3/1BN2N2/PP3PPP/R1BQ1RK1": "Sicilian Defense: Smith-Morra Gambit Accepted, Morphy Defense Deferred",
+ "r1bqkbnr/1p1p1ppp/p1n1p3/8/2B1P3/2N2N2/PP3PPP/R1BQK2R": "Sicilian Defense: Smith-Morra Gambit Accepted, Paulsen Formation",
+ "r1bqk1nr/pp1p1ppp/2n1p3/8/1bB1P3/2N2N2/PP3PPP/R1BQK2R": "Sicilian Defense: Smith-Morra Gambit Accepted, Pin Defense",
+ "r1bqkbnr/pp3ppp/2npp3/8/2B1P3/2N2N2/PP3PPP/R1BQK2R": "Sicilian Defense: Smith-Morra Gambit Accepted, Scheveningen Formation",
+ "r1bqkbnr/5ppp/p1npp3/1p6/2B1P3/2N2N2/PP2QPPP/R1B2RK1": "Sicilian Defense: Smith-Morra Gambit Accepted, Sozin Formation",
+ "rnbqkb1r/1p1pnppp/p3p3/8/2B1P3/2N2N2/PP3PPP/R1BQK2R": "Sicilian Defense: Smith-Morra Gambit Accepted, Taimanov Formation",
+ "rnbqkb1r/pp1ppppp/5n2/8/3pP3/2P5/PP3PPP/RNBQKBNR": "Sicilian Defense: Smith-Morra Gambit Declined, Alapin Formation",
+ "rnbqkbnr/pp1p1ppp/8/4p3/3pP3/2P5/PP3PPP/RNBQKBNR": "Sicilian Defense: Smith-Morra Gambit Declined, Center Formation",
+ "rnbqkbnr/pp1ppppp/8/8/2P1P3/3p4/PP3PPP/RNBQKBNR": "Sicilian Defense: Smith-Morra Gambit Declined, Dubois Variation",
+ "rnbqkbnr/pp1ppppp/8/8/4P3/2Pp4/PP3PPP/RNBQKBNR": "Sicilian Defense: Smith-Morra Gambit Declined, Push Variation",
+ "rnbqkbnr/pp2pppp/8/3p4/3pP3/2P5/PP3PPP/RNBQKBNR": "Sicilian Defense: Smith-Morra Gambit Declined, Scandinavian Formation",
+ "rnb1kbnr/pp1ppppp/8/q7/3pP3/2P5/PP3PPP/RNBQKBNR": "Sicilian Defense: Smith-Morra Gambit Declined, Wing Formation",
+ "2bqkbnr/r4ppp/p1npp3/1p6/4P3/1BN2N2/PP2QPPP/R1B2RK1": "Sicilian Defense: Smith-Morra Gambit, Chicago Defense",
+ "rnbqkbnr/pp1ppppp/8/8/4P3/2p2N2/PP3PPP/RNBQKB1R": "Sicilian Defense: Smith-Morra Gambit, Danish Variation",
+ "rnbqkbnr/pp1ppppp/8/2p5/4P3/2P5/PP1P1PPP/RNBQKBNR": "Sicilian Defense: Alapin Variation",
+ "rnb1kbnr/pp2pppp/8/2pq4/8/2P5/PP1P1PPP/RNBQKBNR": "Sicilian Defense: Alapin Variation, Barmen Defense",
+ "r3kbnr/pp2pppp/2n5/3q4/3P2b1/5N2/PP3PPP/RNBQKB1R": "Sicilian Defense: Alapin Variation, Barmen Defense, Central Exchange",
+ "r3kbnr/pp2pppp/8/8/3n4/2N2P2/PP3P1P/R1B1KB1R": "Sicilian Defense: Alapin Variation, Barmen Defense, Endgame Variation",
+ "r1b1k1nr/pp3ppp/2n5/3qp3/1b1P4/2N2N2/PP2BPPP/R1BQK2R": "Sicilian Defense: Alapin Variation, Barmen Defense, Milner-Barry Attack",
+ "rn2kb1r/pp2pppp/5n2/2pq4/3P2b1/2P2N2/PP3PPP/RNBQKB1R": "Sicilian Defense: Alapin Variation, Barmen Defense, Modern Line",
+ "rnbqkb1r/pp1ppppp/8/3nP3/3p4/2P5/PP3PPP/RNBQKBNR": "Sicilian Defense: Alapin Variation, Smith-Morra Declined",
+ "r1bqkb1r/pp1ppppp/1nn5/2p1P3/8/1BP2N2/PP1P1PPP/RNBQK2R": "Sicilian Defense: Alapin Variation, Stoltz Attack",
+ "r1b1kb1r/ppqppp1p/1nn5/4P1p1/2p5/2P2N2/PPBPQPPP/RNB1K2R": "Sicilian Defense: Alapin Variation, Stoltz Attack, Ivanchuk Line",
+ "r1bqkb1r/pp1ppppp/2n5/2pnP3/8/N1P2N2/PP1P1PPP/R1BQKB1R": "Sicilian Defense: Heidenfeld Variation",
+ "rnbqkbnr/pp1ppppp/8/2p5/4P3/2N5/PPPP1PPP/R1BQKBNR": "Sicilian Defense: Closed",
+ "rnbqkbnr/pp1p1ppp/4p3/2p5/4P3/2N5/PPPP1PPP/R1BQKBNR": "Sicilian Defense: Closed",
+ "rnbqkbnr/pp1p1ppp/4p3/2p5/4P3/2N3P1/PPPP1P1P/R1BQKBNR": "Sicilian Defense: Closed",
+ "r1bqkbnr/pp1ppppp/2n5/2p5/4P3/2N5/PPPPNPPP/R1BQKB1R": "Sicilian Defense: Closed, Chameleon Variation",
+ "r1bqkbnr/pp1ppppp/2n5/2p5/4P1P1/2N5/PPPP1P1P/R1BQKBNR": "Sicilian Defense: Closed, Grob Attack",
+ "rnbqkbnr/pp3ppp/4p3/2pp4/4P3/2N3P1/PPPP1P1P/R1BQKBNR": "Sicilian Defense: Closed, Korchnoi Defense",
+ "r1bqkbnr/pp1ppppp/2n5/2p5/4P3/2N5/PPPP1PPP/R1BQKBNR": "Sicilian Defense: Closed, Traditional",
+ "r1bqkbnr/pp1ppppp/2n5/2p5/4PP2/2N5/PPPP2PP/R1BQKBNR": "Sicilian Defense: Grand Prix Attack",
+ "r1bqk1nr/pp1p1pbp/2n1p1p1/2p2P2/2B1P3/2N2N2/PPPP2PP/R1BQK2R": "Sicilian Defense: Grand Prix Attack, Schofman Variation",
+ "r1bqkbnr/pp1ppp1p/2n3p1/2p5/4P3/2N3P1/PPPP1P1P/R1BQKBNR": "Sicilian Defense: Closed",
+ "r1bqk1nr/pp1pppbp/2n3p1/2p5/4P3/2N3P1/PPPP1PBP/R1BQK1NR": "Sicilian Defense: Closed",
+ "r1bqkbnr/pp1ppppp/2n5/2p5/4P3/2N3P1/PPPP1P1P/R1BQKBNR": "Sicilian Defense: Closed, Fianchetto Variation",
+ "r1bqk1nr/pp1p1pbp/4p1p1/2p5/3nP3/3PB1P1/PPP1NPBP/R2QK1NR": "Sicilian Defense: Closed, Smyslov Variation",
+ "r1bqk1nr/pp2ppbp/2np2p1/2p5/4P3/2NP2P1/PPP2PBP/R1BQK1NR": "Sicilian Defense: Closed",
+ "r1bqk1nr/pp2ppbp/2np2p1/2p5/4PP2/2NP2P1/PPP3BP/R1BQK1NR": "Sicilian Defense: Closed",
+ "r1bqk2r/pp2npbp/2np2p1/2p1p3/4PP2/2NP2PN/PPP3BP/R1BQK2R": "Sicilian Defense: Closed, Botvinnik Defense, Edge Variation",
+ "r1bqk1nr/pp3pbp/2np2p1/2p1p3/4P3/2NP2P1/PPP1NPBP/R1BQK2R": "Sicilian Defense: Closed, Botvinnik Defense, with Nge2",
+ "r1bqk1nr/pp3pbp/2np2p1/2p1p3/4PP2/2NP2P1/PPP3BP/R1BQK1NR": "Sicilian Defense: Closed, Botvinnik Defense, with f4",
+ "r1bqk1nr/pp2ppbp/2np2p1/2p5/4P3/2NPB1P1/PPP2PBP/R2QK1NR": "Sicilian Defense: Closed",
+ "rnb1k1nr/pp1pppbp/6p1/q1p5/3PP3/2N2N2/PPP2PPP/R1BQKB1R": "Modern Defense: Pterodactyl Variation",
+ "rnb1k1nr/pp1pppbp/6p1/q1p5/3PP3/2N1BN2/PPP2PPP/R2QKB1R": "Pterodactyl Defense: Sicilian, Anhanguera",
+ "rnb1k1nr/pp1pppbp/6p1/q1pP4/4P3/2N2N2/PPP2PPP/R1BQKB1R": "Pterodactyl Defense: Sicilian, Benoni Gambit",
+ "rnb1k1nr/pp1ppp1p/6p1/q1P5/4P3/2P2N2/P1P2PPP/R1BQKB1R": "Pterodactyl Defense: Sicilian, Pteranodon",
+ "rnb1k1nr/pp1pppbp/6p1/q1P5/4P3/2N2N2/PPP2PPP/R1BQKB1R": "Pterodactyl Defense: Sicilian, Rhamphorhynchus",
+ "rnb1k1nr/pp1pppbp/6p1/q1p5/3PP3/2N2N2/PPPB1PPP/R2QKB1R": "Pterodactyl Defense: Sicilian, Unpin",
+ "rnb1k1nr/pp1pppbp/6p1/q1p5/3PP3/2P2N2/PP3PPP/RNBQKB1R": "Pterodactyl Defense: Western, Pterodactyl",
+ "rnb1k1nr/pp1pppbp/6p1/q1P5/4P3/5N2/PPP2PPP/RNBQKB1R": "Pterodactyl Defense: Western, Rhamphorhynchus",
+ "rnbqkbnr/pp1ppppp/8/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R": "Sicilian Defense",
+ "rnbqk1nr/pp1ppp1p/6pb/2p5/2P1P3/5N2/PP1P1PPP/RNBQKB1R": "Sicilian Defense: Acton Extension",
+ "rnbqkbnr/pp1pp1pp/8/2p2p2/4P3/5N2/PPPP1PPP/RNBQKB1R": "Sicilian Defense: Brussels Gambit",
+ "rnbqkbnr/pp1pppp1/7p/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R": "Sicilian Defense: Bücker Variation",
+ "rnbqkb1r/pp1pp1pp/7n/2p2P2/8/5N2/PPPP1PPP/RNBQKB1R": "Sicilian Defense: Double-Dutch Gambit",
+ "rnbqkbnr/pp1pp2p/6p1/2p2p2/3PP3/5N2/PPP2PPP/RNBQKB1R": "Sicilian Defense: Frederico Variation",
+ "rnbqkbnr/pp1ppp1p/6p1/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R": "Sicilian Defense: Hyperaccelerated Dragon",
+ "rnbqkbnr/pp1ppp1p/6p1/2p5/3PP3/5N2/PPP2PPP/RNBQKB1R": "Sicilian Defense: Hyperaccelerated Fianchetto",
+ "rnbqk1nr/pp1pppbp/6p1/2p5/3PP3/5N2/PPP2PPP/RNBQKB1R": "Sicilian Defense: Hyperaccelerated Pterodactyl",
+ "rnb1k1nr/pp1ppp1p/6p1/2P5/4P3/2q2N2/P1P2PPP/R1BQKB1R": "Sicilian Defense: Hyperaccelerated Pterodactyl, Exchange Variation",
+ "rnbqkbnr/pp1p1ppp/8/2p1p3/4P3/5N2/PPPP1PPP/RNBQKB1R": "Sicilian Defense: Jalalabad Variation",
+ "rnbqkbnr/p2ppppp/1p6/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R": "Sicilian Defense: Katalimov Variation",
+ "rnb1kbnr/pp1ppppp/8/q1p5/4P3/5N2/PPPP1PPP/RNBQKB1R": "Sicilian Defense: Mongoose Variation",
+ "rnbqkbnr/p2ppppp/8/1pp5/4P3/5N2/PPPP1PPP/RNBQKB1R": "Sicilian Defense: Polish Gambit",
+ "rnb1kbnr/ppqppppp/8/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R": "Sicilian Defense: Quinteros Variation",
+ "rnbqkbnr/1p1ppppp/p7/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R": "Sicilian Defense: O'Kelly Variation",
+ "rnbqkbnr/1p1ppppp/p7/2p5/4P3/5N2/PPPPBPPP/RNBQK2R": "Sicilian Defense: O'Kelly Variation, Aronin System",
+ "rnbqkbnr/1p1ppppp/p7/2p5/4P3/1P3N2/P1PP1PPP/RNBQKB1R": "Sicilian Defense: O'Kelly Variation, Kieseritzky System",
+ "rnbqkbnr/1p1ppppp/p7/2p5/2P1P3/5N2/PP1P1PPP/RNBQKB1R": "Sicilian Defense: O'Kelly Variation, Maróczy Bind",
+ "rnbqkbnr/1p1p1ppp/p3p3/2p5/2P1P3/5N2/PP1P1PPP/RNBQKB1R": "Sicilian Defense: O'Kelly Variation, Maróczy Bind, Paulsen Line",
+ "rnbqkbnr/1p2pppp/p2p4/2p5/2P1P3/5N2/PP1P1PPP/RNBQKB1R": "Sicilian Defense: O'Kelly Variation, Maróczy Bind, Robatsch Line",
+ "rnbqkbnr/1p1ppppp/p7/2p5/3PP3/5N2/PPP2PPP/RNBQKB1R": "Sicilian Defense: O'Kelly Variation, Normal System",
+ "rnbqkbnr/1p1ppppp/p7/8/2BpP3/5N2/PPP2PPP/RNBQK2R": "Sicilian Defense: O'Kelly Variation, Normal System, Cortlever Gambit",
+ "rnbqkbnr/1p1ppppp/p7/8/3pP3/2P2N2/PP3PPP/RNBQKB1R": "Sicilian Defense: O'Kelly Variation, Normal System, Smith-Morra Line",
+ "rnbqkbnr/1p1p1ppp/p7/4p3/3NP3/8/PPP2PPP/RNBQKB1R": "Sicilian Defense: O'Kelly Variation, Normal System, Taimanov Line",
+ "rnbqkbnr/1p1ppppp/p7/8/3QP3/5N2/PPP2PPP/RNB1KB1R": "Sicilian Defense: O'Kelly Variation, Normal System, Zagorovsky Line",
+ "rnbqkbnr/1p1ppppp/p7/2p5/4P3/3P1N2/PPP2PPP/RNBQKB1R": "Sicilian Defense: O'Kelly Variation, Quiet System",
+ "rnbqkbnr/1p1ppppp/p7/2p5/4P3/5NP1/PPPP1P1P/RNBQKB1R": "Sicilian Defense: O'Kelly Variation, Réti System",
+ "rnbqkbnr/1p1ppppp/p7/2p5/4P3/2P2N2/PP1P1PPP/RNBQKB1R": "Sicilian Defense: O'Kelly Variation, Venice System",
+ "rnbqkb1r/1p1ppppp/p4n2/2p5/4P3/2P2N2/PP1P1PPP/RNBQKB1R": "Sicilian Defense: O'Kelly Variation, Venice System, Barcza Line",
+ "rnbqkb1r/1p2pppp/p4n2/2pP4/8/2P2N2/PP1P1PPP/RNBQKB1R": "Sicilian Defense: O'Kelly Variation, Venice System, Gambit Line",
+ "rnbqkbnr/3ppppp/p7/1pp5/4P3/2P2N2/PP1P1PPP/RNBQKB1R": "Sicilian Defense: O'Kelly Variation, Venice System, Ljubojevic Line",
+ "rnbqkbnr/1p2pppp/p2p4/2p5/4P3/2P2N2/PP1P1PPP/RNBQKB1R": "Sicilian Defense: O'Kelly Variation, Venice System, Steiner Line",
+ "rnbqkbnr/1p1ppppp/p7/2p5/1P2P3/5N2/P1PP1PPP/RNBQKB1R": "Sicilian Defense: O'Kelly Variation, Wing Gambit",
+ "rnbqkbnr/1p1ppppp/p7/2p5/4P3/2N2N2/PPPP1PPP/R1BQKB1R": "Sicilian Defense: O'Kelly Variation, Yerevan System",
+ "rnbqkb1r/pp1ppppp/5n2/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R": "Sicilian Defense: Nimzowitsch Variation",
+ "rnbqkb1r/pp1ppppp/5n2/2p1P3/8/5N2/PPPP1PPP/RNBQKB1R": "Sicilian Defense: Nimzowitsch Variation, Advance Variation",
+ "rnbqkb1r/pp1ppppp/5n2/2p5/4P3/2N2N2/PPPP1PPP/R1BQKB1R": "Sicilian Defense: Nimzowitsch Variation, Closed Variation",
+ "rnbqkb1r/pp1ppppp/8/2p1P3/8/2n2N2/PPPP1PPP/R1BQKB1R": "Sicilian Defense: Nimzowitsch Variation, Exchange Variation",
+ "r1bqkb1r/pp1p1ppp/2n5/2ppP3/3P4/5N2/PPP2PPP/R1BQKB1R": "Sicilian Defense: Nimzowitsch Variation, Main Line",
+ "r1bqk1nr/pp3ppp/2np4/2p1p1b1/2B1P3/2NP4/PPPN1PPP/R1BQK2R": "Sicilian Defense: Closed, Anti-Sveshnikov Variation, Kharlov-Kramnik Line",
+ "r1bqkbnr/pp1ppppp/2n5/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R": "Sicilian Defense: Nyezhmetdinov-Rossolimo Attack",
+ "r1bqkbnr/pp1ppppp/8/nBp5/1P2P3/5N2/P1PP1PPP/RNBQK2R": "Sicilian Defense: Nyezhmetdinov-Rossolimo Attack, San Francisco Gambit",
+ "r1bqkbnr/pp1ppppp/2n5/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R": "Sicilian Defense: Old Sicilian",
+ "r1bqkbnr/pp1ppppp/2n5/2p5/1P2P3/5N2/P1PP1PPP/RNBQKB1R": "Sicilian Defense: Portsmouth Gambit",
+ "rnbqkbnr/pp1ppppp/8/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R": "Sicilian Defense: Rossolimo Variation, Brooklyn Retreat Defense",
+ "r1bqkbnr/pp1ppp1p/2n3p1/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R": "Sicilian Defense: Nyezhmetdinov-Rossolimo Attack, Fianchetto Variation",
+ "r1bqk1nr/pp1p1pbp/2n3p1/1Bp1p3/3PP3/2P2N2/PP3PPP/RNBQ1RK1": "Sicilian Defense: Nyezhmetdinov-Rossolimo Attack, Fianchetto Variation, Gufeld Gambit",
+ "r1bqk2r/pp1pppbp/2n2np1/1Bp5/3PP3/2P2N2/PP3PPP/RNBQ1RK1": "Sicilian Defense: Nyezhmetdinov-Rossolimo Attack, Fianchetto Variation, Lutikov Gambit",
+ "r1bqk2r/pp1pppbp/2n2np1/1Bp5/Q3P3/2P2N2/PP1P1PPP/RNB2RK1": "Sicilian Defense: Nyezhmetdinov-Rossolimo Attack, Fianchetto Variation, Totsky Attack",
+ "r1bqk1nr/pp1p1pbp/2n3p1/1Bp1p3/1P2P3/5N2/P1PP1PPP/RNBQR1K1": "Sicilian Defense: Nyezhmetdinov-Rossolimo Attack, Gurgenidze Variation",
+ "r1bqkbnr/pp1ppp1p/2n3p1/8/3NP3/8/PPP2PPP/RNBQKB1R": "Sicilian Defense: Accelerated Dragon",
+ "r1b1kbnr/ppqppppp/2n5/8/3NP3/8/PPP2PPP/RNBQKB1R": "Sicilian Defense: Flohr Variation",
+ "r1bqkbnr/pp1p1ppp/2n1p3/2p5/3PP3/5N2/PPP2PPP/RNBQKB1R": "Sicilian Defense: Franco-Sicilian Variation",
+ "r1b1kbnr/pp1ppppp/1qn5/8/3NP3/8/PPP2PPP/RNBQKB1R": "Sicilian Defense: Godiva Variation",
+ "r1bqkbnr/pp3ppp/2np4/1N2p3/4P3/8/PPP2PPP/RNBQKB1R": "Sicilian Defense: Kalashnikov Variation",
+ "r1bqkbnr/pp1p1ppp/2n5/4p3/3NP3/8/PPP2PPP/RNBQKB1R": "Sicilian Defense: Löwenthal Variation",
+ "r1bqkbnr/pp2pppp/2n5/3p4/3NP3/8/PPP2PPP/RNBQKB1R": "Sicilian Defense: Nimzo-American Variation",
+ "r1bqkbnr/1p1p1ppp/p1n5/4p3/2PNP3/8/PP3PPP/RNBQKB1R": "Sicilian Defense: O'Kelly Variation, Maróczy Bind, Geller Line",
+ "r1bqkbnr/pp1ppppp/2n5/2p5/3PP3/5N2/PPP2PPP/RNBQKB1R": "Sicilian Defense: Open",
+ "r1bqkbnr/pp1ppppp/2n5/8/3pP3/5N2/PPP2PPP/RNBQKB1R": "Sicilian Defense: Open",
+ "r1bqkbnr/pp1ppppp/2n5/8/3NP3/8/PPP2PPP/RNBQKB1R": "Sicilian Defense: Open",
+ "r1bqk2r/pp1p1ppp/2n1pn2/1Nb5/4P3/2N5/PPP2PPP/R1BQKB1R": "Sicilian Defense: Four Knights Variation, Cobra Variation",
+ "r1bqkb1r/pp1p1ppp/2n2n2/4p3/3NP3/2N5/PPP2PPP/R1BQKB1R": "Sicilian Defense: Lasker-Pelikan Variation",
+ "r2qkb1r/1p3ppp/p1npbn2/4p1B1/4P3/N1N5/PPP2PPP/R2QKB1R": "Sicilian Defense: Lasker-Pelikan Variation, Bird Variation",
+ "r1bqkb1r/pp1p1ppp/2N2n2/4p3/4P3/2N5/PPP2PPP/R1BQKB1R": "Sicilian Defense: Lasker-Pelikan Variation, Exchange Variation",
+ "r1bqkb1r/pp1p1ppp/2n2n2/4p3/4P3/2N2N2/PPP2PPP/R1BQKB1R": "Sicilian Defense: Lasker-Pelikan Variation, Retreat Variation",
+ "r1bqkb1r/pp1p1ppp/2n2n2/4p3/4P3/1NN5/PPP2PPP/R1BQKB1R": "Sicilian Defense: Lasker-Pelikan Variation, Schlechter Variation",
+ "r1bqkb1r/5ppp/p1np1n2/1p2p1B1/4P3/N1N5/PPP2PPP/R2QKB1R": "Sicilian Defense: Lasker-Pelikan Variation, Sveshnikov Variation",
+ "r1bqkb1r/5p1p/p1np4/1p1Npp2/4P3/N7/PPP2PPP/R2QKB1R": "Sicilian Defense: Lasker-Pelikan Variation, Sveshnikov Variation",
+ "r1bqkb1r/5ppp/p1np1n2/1p1Np1B1/4P3/N7/PPP2PPP/R2QKB1R": "Sicilian Defense: Lasker-Pelikan Variation, Sveshnikov Variation, Chelyabinsk Variation",
+ "r1bqk2r/5pbp/p1np1p2/1p1Np3/4P3/N7/PPP2PPP/R2QKB1R": "Sicilian Defense: Lasker-Pelikan Variation, Sveshnikov Variation, Novosibirsk Variation",
+ "r1bqkb1r/5p1p/p1np4/1B1Npp2/4P3/N7/PPP2PPP/R2QK2R": "Sicilian Defense: Lasker-Pelikan Variation, Sveshnikov Variation, Peresypkin's Sacrifice",
+ "r1bqkb1r/pp1ppppp/2n2n2/8/3NP3/8/PPP2PPP/RNBQKB1R": "Sicilian Defense: Open",
+ "r1bqkbnr/pp1ppp1p/2N3p1/8/4P3/8/PPP2PPP/RNBQKB1R": "Sicilian Defense: Accelerated Dragon, Exchange Variation",
+ "r1bqkbnr/pp1ppp1p/2n3p1/8/3NP3/2N5/PPP2PPP/R1BQKB1R": "Sicilian Defense: Accelerated Dragon, Modern Variation",
+ "r1bqk2r/pp1pppbp/2n2np1/8/2BNP3/2N1B3/PPP2PPP/R2QK2R": "Sicilian Defense: Accelerated Dragon, Modern Bc4 Variation",
+ "r1bqk2r/pp2ppbp/2np1np1/8/2BNP3/2N1B3/PPP2PPP/R2QK2R": "Sicilian Defense: Dragon Variation, Modern Bc4 Variation",
+ "r1bqkbnr/pp1ppp1p/2n3p1/8/2PNP3/8/PP3PPP/RNBQKB1R": "Sicilian Defense: Accelerated Dragon, Maróczy Bind",
+ "r1bqkb1r/pp2pp1p/3p1np1/8/2PQP3/2N5/PP3PPP/R1B1KB1R": "Sicilian Defense: Accelerated Dragon, Maróczy Bind, Gurgenidze Variation",
+ "r1bqk1nr/pp1pppbp/2n3p1/8/2PNP3/8/PP3PPP/RNBQKB1R": "Sicilian Defense: Accelerated Dragon, Maróczy Bind",
+ "r1bqk2r/pp2ppbp/2np2pn/8/2P1P3/8/PPN1BPPP/RNBQK2R": "Sicilian Defense: Accelerated Dragon, Simagin Variation",
+ "r1bqk1nr/pp1pppbp/2n3p1/8/2PNP3/4B3/PP3PPP/RN1QKB1R": "Sicilian Defense: Accelerated Dragon, Maróczy Bind",
+ "r1bqk2r/pp1pppbp/2n3p1/8/2PNP1n1/2N1B3/PP3PPP/R2QKB1R": "Sicilian Defense: Accelerated Dragon, Maróczy Bind, Breyer Variation",
+ "r1bqkb1r/pp1p1ppp/2n1p3/2pnP3/3P4/2P2N2/PP3PPP/RNBQKB1R": "Sicilian Defense: Alapin Variation, Sherzer Variation",
+ "rnbqkbnr/pp1p1ppp/4p3/2p5/4P3/2P2N2/PP1P1PPP/RNBQKB1R": "Sicilian Defense: Delayed Alapin Variation",
+ "rnbqkbnr/1p1p1ppp/p3p3/2p5/3PP3/5N2/PPP2PPP/RNBQKB1R": "Sicilian Defense: Drazic Variation",
+ "r1bqkb1r/pp1p1ppp/2n1pn2/8/3NP3/2N5/PPP2PPP/R1BQKB1R": "Sicilian Defense: Four Knights Variation",
+ "r1bqkb1r/pp1p1ppp/2N1pn2/8/4P3/2N5/PPP2PPP/R1BQKB1R": "Sicilian Defense: Four Knights Variation, Exchange Variation",
+ "rnbqkbnr/pp1p1ppp/4p3/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R": "Sicilian Defense: French Variation",
+ "rnbqkb1r/pp1p1ppp/4pn2/8/3NP3/8/PPP2PPP/RNBQKB1R": "Sicilian Defense: French Variation, Normal",
+ "rnbqkbnr/pp1p1ppp/4p3/8/3pP3/5N2/PPP2PPP/RNBQKB1R": "Sicilian Defense: French Variation, Open",
+ "rnbqkbnr/pp1p1ppp/4p3/2p5/4P3/1P3N2/P1PP1PPP/RNBQKB1R": "Sicilian Defense: French Variation, Westerinen Attack",
+ "rnb1kb1r/pp1p1ppp/1q2pn2/8/3NP3/2N5/PPP2PPP/R1BQKB1R": "Sicilian Defense: Gaw-Paw Variation",
+ "rnbqkbnr/3p1ppp/p3p3/1p6/3NP3/2N3P1/PPP2P1P/R1BQKB1R": "Sicilian Defense: Kan Variation, Wing Attack, Fianchetto Variation",
+ "rnbqkbnr/pp1p1ppp/4p3/2p5/2P1P3/5N2/PP1P1PPP/RNBQKB1R": "Sicilian Defense: Kramnik Variation",
+ "rnb1kbnr/pp1p1ppp/1q2p3/8/3NP3/8/PPP2PPP/RNBQKB1R": "Sicilian Defense: Kveinis Variation",
+ "rnbqkbnr/pp3ppp/4p3/2pp4/3PP3/5N2/PPP2PPP/RNBQKB1R": "Sicilian Defense: Marshall Counterattack",
+ "rnbqk1nr/pp1p1ppp/4p3/2b5/3NP3/8/PPP2PPP/RNBQKB1R": "Sicilian Defense: Paulsen-Basman Defense",
+ "rnbqk2r/pp1p1ppp/4pn2/8/1b1NP3/2N5/PPP2PPP/R1BQKB1R": "Sicilian Defense: Pin Variation",
+ "rnbqk2r/pp1p1ppp/5n2/4p3/1b1NP3/2NB4/PPP2PPP/R1BQK2R": "Sicilian Defense: Pin Variation, Jaffe Variation",
+ "rnbqk2r/pp1p1ppp/4pn2/4P3/1b1N4/2N5/PPP2PPP/R1BQKB1R": "Sicilian Defense: Pin Variation, Koch Variation",
+ "rnbqkbnr/pp1p1ppp/4p3/8/3pP3/2P2N2/PP3PPP/RNBQKB1R": "Sicilian Defense: Smith-Morra Gambit Deferred",
+ "rnbqkbnr/pp1p1ppp/4p3/2p5/1P2P3/5N2/P1PP1PPP/RNBQKB1R": "Sicilian Defense: Wing Gambit Deferred",
+ "rnbqkbnr/1p1p1ppp/p3p3/8/3NP3/8/PPP2PPP/RNBQKB1R": "Sicilian Defense: Kan Variation",
+ "r1bqk2r/1p1p1ppp/p1n1pn2/8/1bPNP3/2NB4/PP3PPP/R1BQK2R": "Sicilian Defense: Kan Variation, Maróczy Bind, Bronstein Variation",
+ "r1bqk2r/1p1p1ppp/p1n1pn2/8/1bPNP3/2N5/PPB2PPP/R1BQK2R": "Sicilian Defense: Kan Variation, Maróczy Bind, Bronstein Variation",
+ "rnbqkbnr/1p1p1p1p/p3p1p1/8/2PNP3/8/PP3PPP/RNBQKB1R": "Sicilian Defense: Kan Variation, Maróczy Bind, Hedgehog Variation",
+ "rnbqkbnr/1p1p1ppp/p3p3/8/2PNP3/8/PP3PPP/RNBQKB1R": "Sicilian Defense: Kan Variation, Maróczy Bind, Réti Variation",
+ "rnbqkb1r/1p3p1p/p2ppnp1/8/2PNP3/3B4/PP3PPP/RNBQ1RK1": "Sicilian Defense: Kan Variation, Gipslis Variation",
+ "rnbqkbnr/1p1p1ppp/p3p3/8/3NP3/3B4/PPP2PPP/RNBQK2R": "Sicilian Defense: Kan Variation, Modern Variation",
+ "rnbqk1nr/1p1p1ppp/p3p3/2b5/3NP3/3B4/PPP2PPP/RNBQK2R": "Sicilian Defense: Kan Variation, Polugaevsky Variation",
+ "rnbqkbnr/1p1p1p1p/p3p1p1/8/3NP3/3B4/PPP2PPP/RNBQK2R": "Sicilian Defense: Kan Variation, Swiss Cheese Variation",
+ "rnbqkbnr/1p1p1ppp/p3p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R": "Sicilian Defense: Kan Variation, Knight Variation",
+ "rnbqkbnr/3p1ppp/p3p3/1p6/3NP3/2N5/PPP2PPP/R1BQKB1R": "Sicilian Defense: Kan Variation, Wing Attack",
+ "rnb1k1nr/3p1ppp/pq2p3/1pb5/3NP1Q1/2NBB3/PPP2PPP/R3K2R": "Sicilian Defense: Kan Variation, Wing Attack, Christiansen's Dream",
+ "rnb1kbnr/3p1ppp/pq2p3/1p6/4P3/2NB1N2/PPP2PPP/R1BQK2R": "Sicilian Defense: Kan Variation, Wing Attack, Spraggett Attack",
+ "r1bqkbnr/pp1p1ppp/2n1p3/8/3NP3/8/PPP2PPP/RNBQKB1R": "Sicilian Defense: Taimanov Variation",
+ "r1bqkb1r/1p3ppp/p1n1pn2/3p4/2P1P3/N1N5/PP3PPP/R1BQKB1R": "Sicilian Defense: Taimanov Variation, Gary Gambit",
+ "r1bq1rk1/4bppp/ppnppn2/8/2P1P3/N1N5/PP2BPPP/R1BQ1RK1": "Sicilian Defense: Taimanov Variation, Modern Line",
+ "r1bqkbnr/pp1p1ppp/2n1p3/1N6/4P3/8/PPP2PPP/RNBQKB1R": "Sicilian Defense: Taimanov Variation, Szén Variation",
+ "r1bqk2r/pp1p1ppp/2nNpn2/8/1b2P3/2N5/PPP2PPP/R1BQKB1R": "Sicilian Defense: Taimanov Variation, American Attack",
+ "r1bqkbnr/pp1p1ppp/2n1p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R": "Sicilian Defense: Taimanov Variation, Normal Variation",
+ "r1bqkbnr/1p1p1ppp/p1n1p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R": "Sicilian Defense: Taimanov Variation",
+ "r1b1kbnr/ppqp1ppp/2n1p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R": "Sicilian Defense: Taimanov Variation, Bastrikov Variation",
+ "rqb1kbnr/1p1p1ppp/pBn1p3/1N6/4P3/2N5/PPP2PPP/R2QKB1R": "Sicilian Defense: Taimanov Variation, Bastrikov Variation, Ponomariov Gambit",
+ "r1b1kbnr/ppqp1ppp/2n1p3/8/3NP3/2N1B3/PPP2PPP/R2QKB1R": "Sicilian Defense: Taimanov Variation, Bastrikov Variation, English Attack",
+ "r1b1kbnr/1pqp1ppp/p1n1p3/8/3NP3/2N1B3/PPP1BPPP/R2QK2R": "Sicilian Defense: Taimanov Variation, Bastrikov Variation",
+ "rnbqkbnr/pp2pppp/3p4/2p5/3PP3/5N2/PPP2PPP/RNBQKB1R": "Sicilian Defense",
+ "rnbqkbnr/pp2pppp/3p4/8/3pP3/5N2/PPP2PPP/RNBQKB1R": "Sicilian Defense",
+ "rnbqkbnr/pp2pppp/3p4/2p5/4P3/2P2N2/PP1P1PPP/RNBQKB1R": "Sicilian Defense: Delayed Alapin",
+ "r1b1kb1r/pp2pppp/2np4/q2P4/8/2P2N2/P3BPPP/R1BQK2R": "Sicilian Defense: Delayed Alapin, Basman-Palatnik Double Gambit",
+ "r1bqkb1r/pp2pppp/2np4/8/3Pn3/5N2/PP2BPPP/RNBQK2R": "Sicilian Defense: Delayed Alapin, Basman-Palatnik Gambit",
+ "rnbqkbnr/pp2pppp/3p4/2p5/4P3/3B1N2/PPPP1PPP/RNBQK2R": "Sicilian Defense: Kopec System",
+ "rnbqkbnr/p3pppp/3p4/1pp5/4P3/5NP1/PPPP1P1P/RNBQKB1R": "Sicilian Defense: Kotov Gambit",
+ "rnbqkbnr/pp2pppp/3p4/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R": "Sicilian Defense: Modern Variations",
+ "rnbqkb1r/pp2pppp/3p1n2/2p5/3PP3/5N2/PPP2PPP/RNBQKB1R": "Sicilian Defense: Modern Variations, Anti-Qxd4 Move Order",
+ "rnbqkb1r/pp2pppp/3p4/2P5/4n3/5N2/PPP2PPP/RNBQKB1R": "Sicilian Defense: Modern Variations, Anti-Qxd4 Move Order Accepted",
+ "rnbqkbnr/pp2pppp/3p4/8/3pP3/2P2N2/PP3PPP/RNBQKB1R": "Sicilian Defense: Modern Variations, Tartakower",
+ "rnbqkbnr/pp2pppp/3p4/2p5/1P2P3/5N2/P1PP1PPP/RNBQKB1R": "Sicilian Defense: Wing Gambit, Deferred Variation",
+ "rnbqkbnr/pp2pppp/3p4/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R": "Sicilian Defense: Moscow Variation",
+ "r2qkbnr/pp1bpp1p/2np2p1/1Bp1P3/8/5N2/PPPPQPPP/RNB2RK1": "Sicilian Defense: Moscow Variation, Dorfman Gambit",
+ "r2qkb1r/1p2pppp/p2p1n2/2p3B1/3Pb3/2P2N2/PP3PPP/RN1QR1K1": "Sicilian Defense: Moscow Variation, Moscow Gambit",
+ "r3kb1r/pp1qpppp/2np1n2/2p5/3PP3/2P2N2/PP3PPP/RNBQ1RK1": "Sicilian Defense: Moscow Variation, Haag Gambit",
+ "rn1qkbnr/pp1bpppp/3p4/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R": "Sicilian Defense: Moscow Variation, Main Line",
+ "rn2kbnr/pp1qpppp/3p4/2p5/2P1P3/5N2/PP1P1PPP/RNBQK2R": "Sicilian Defense: Moscow Variation, Sokolsky Variation",
+ "rnbqkbnr/pp2pppp/3p4/8/3QP3/5N2/PPP2PPP/RNB1KB1R": "Sicilian Defense: Chekhover Variation",
+ "r1b1kbnr/pp1qpppp/2np4/1B6/3QP3/5N2/PPP2PPP/RNB1K2R": "Sicilian Defense: Chekhover Variation, Zaitsev Defense",
+ "rnbqkbnr/pp2pp1p/3p2p1/8/3NP3/8/PPP2PPP/RNBQKB1R": "Sicilian Defense: Dragon Variation, Accelerated Dragon",
+ "rnbqkb1r/pp2pppp/3p1n2/8/2BNP3/8/PPP2PPP/RNBQK2R": "Sicilian Defense: Modern Variations, Ginsberg Gambit",
+ "rnbqkb1r/pp2pppp/3p1n2/8/3NP3/8/PPP2PPP/RNBQKB1R": "Sicilian Defense: Modern Variations, Main Line",
+ "rnbqkb1r/pp2pppp/3p1n2/8/3NP3/5P2/PPP3PP/RNBQKB1R": "Sicilian Defense: Prins Variation",
+ "rnbqkb1r/pp3ppp/3p1n2/1B2p3/3NP3/5P2/PPP3PP/RNBQK2R": "Sicilian Defense: Prins Variation, Venice Attack",
+ "r1bqkb1r/pp2pppp/2np1n2/8/3NP3/2N5/PPP2PPP/R1BQKB1R": "Sicilian Defense: Classical Variation",
+ "r1bqkb1r/pp2pppp/2np1n2/8/3NP3/2N3P1/PPP2P1P/R1BQKB1R": "Sicilian Defense: Classical Variation, Fianchetto Variation",
+ "rn1qkb1r/pp1bpppp/3p1n2/8/3NP3/2N5/PPP2PPP/R1BQKB1R": "Sicilian Defense: Kupreichik Variation",
+ "r1bqkb1r/pp2pppp/2np1n2/8/4P3/2N5/PPP1NPPP/R1BQKB1R": "Sicilian Defense: Spielmann Variation",
+ "rnbqkb1r/pp3ppp/3p1n2/1B2p3/3NP3/2N5/PPP2PPP/R1BQK2R": "Sicilian Defense: Venice Attack",
+ "r1bqkb1r/pp2pppp/2np1n2/8/3NP3/2NB4/PPP2PPP/R1BQK2R": "Sicilian Defense: Yates Variation",
+ "r1b1kb1r/pp2pppp/1qnp1n2/8/2BNP3/2N5/PPP2PPP/R1BQK2R": "Sicilian Defense: Classical Variation, Anti-Sozin Variation",
+ "r1bqkb1r/pp2pppp/2np1n2/8/2BNP3/2N5/PPP2PPP/R1BQK2R": "Sicilian Defense: Classical Variation, Sozin Attack",
+ "r1bqkb1r/p3pp1p/2pp1np1/4P3/2B5/2N5/PPP2PPP/R1BQK2R": "Sicilian Defense: Magnus Smith Trap",
+ "r1bqkb1r/pp3ppp/2np1n2/4p3/3NP3/2N5/PPP1BPPP/R1BQK2R": "Sicilian Defense: Boleslavsky Variation",
+ "r1bqkb1r/pp3ppp/2Np1n2/4p3/4P3/2N5/PPP1BPPP/R1BQK2R": "Sicilian Defense: Boleslavsky Variation, Louma Variation",
+ "r1bqkb1r/pp2pppp/2np1n2/8/3NP3/2N5/PPP1BPPP/R1BQK2R": "Sicilian Defense: Classical Variation",
+ "r1bqkb1r/pp2pp1p/3p1np1/8/3QP3/2N5/PPP1BPPP/R1B1K2R": "Sicilian Defense: Classical Variation, Dragon Transfer",
+ "r1bqkb1r/pp3ppp/2np1n2/4p3/4P3/1NN5/PPP1BPPP/R1BQK2R": "Sicilian Defense: Boleslavsky Variation",
+ "r1bqkb1r/pp2pppp/2np1n2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R": "Sicilian Defense: Richter-Rauzer Variation",
+ "r1bqkb1r/pp2pp1p/2np1np1/6B1/3NP3/2N5/PPP2PPP/R2QKB1R": "Sicilian Defense: Richter-Rauzer Variation, Dragon Variation",
+ "r2qkb1r/pp1bpppp/2np1n2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R": "Sicilian Defense: Richter-Rauzer Variation, Modern Variation",
+ "r2qkb1r/pp1bpppp/2np1n2/6B1/3NP3/2N5/PPPQ1PPP/R3KB1R": "Sicilian Defense: Richter-Rauzer Variation, Modern Variation",
+ "r1bqkb1r/pp3ppp/2nppn2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R": "Sicilian Defense: Richter-Rauzer Variation",
+ "r1bqkb1r/pp3ppp/2nppn2/6B1/3NP3/2NQ4/PPP2PPP/R3KB1R": "Sicilian Defense: Richter-Rauzer Variation",
+ "r1bqkb1r/pp3ppp/2Nppn2/6B1/4P3/2N5/PPP2PPP/R2QKB1R": "Sicilian Defense: Richter-Rauzer Variation, Exchange Variation",
+ "r1bqkb1r/pp3ppp/2nppn2/6B1/4P3/1NN5/PPP2PPP/R2QKB1R": "Sicilian Defense: Richter-Rauzer Variation, Podebrady Variation",
+ "r1bqkb1r/pp3ppp/2nppn2/1B4B1/3NP3/2N5/PPP2PPP/R2QK2R": "Sicilian Defense: Richter-Rauzer Variation, Vitolins Variation",
+ "r1bqk2r/pp2bppp/2nppn2/6B1/3NP3/2N5/PPPQ1PPP/R3KB1R": "Sicilian Defense: Richter-Rauzer Variation, Classical Variation",
+ "r1bqk2r/4bppp/p2ppn2/1p4B1/3QPP2/2N5/PPP3PP/2KR1B1R": "Sicilian Defense: Richter-Rauzer Variation, Classical Variation, Kantscher Line",
+ "r1b1kb1r/pp3ppp/1qnppn2/6B1/3NP3/2N5/PPPQ1PPP/R3KB1R": "Sicilian Defense: Richter-Rauzer Variation, Ivanov Variation",
+ "r1bqkb1r/pp3ppp/2nppn2/6B1/3NP3/2N5/PPPQ1PPP/R3KB1R": "Sicilian Defense: Richter-Rauzer Variation, Traditional Variation",
+ "r1bq1rk1/pp2bppp/2np1n2/4p1B1/3NPP2/2N5/PPPQ2PP/2KR1B1R": "Sicilian Defense: Richter-Rauzer Variation, Classical Variation",
+ "r1bq1rk1/pp2bppp/2nppn2/6B1/3NPP2/2N5/PPPQ2PP/2KR1B1R": "Sicilian Defense: Richter-Rauzer Variation, Classical Variation",
+ "r1bq1rk1/pp2bppp/3ppn2/6B1/3QPP2/2N5/PPP3PP/2KR1B1R": "Sicilian Defense: Richter-Rauzer Variation, Classical Variation",
+ "r1bq1rk1/pp2bppp/3ppn2/6B1/3nPP2/2N5/PPPQ2PP/2KR1B1R": "Sicilian Defense: Richter-Rauzer Variation, Rauzer Attack",
+ "r1bqkb1r/1p3ppp/p1nppn2/6B1/3NP3/2N5/PPPQ1PPP/R3KB1R": "Sicilian Defense: Richter-Rauzer Variation, Neo-Modern Variation, Early Deviations",
+ "r2qkb1r/1p1b1ppp/p1nppn2/6B1/3NP3/2N5/PPPQ1PPP/2KR1B1R": "Sicilian Defense: Richter-Rauzer Variation, Neo-Modern Variation",
+ "r2qk2r/1p1bbppp/p1nppn2/6B1/3NPP2/2N5/PPPQ2PP/2KR1B1R": "Sicilian Defense: Richter-Rauzer Variation, Neo-Modern Variation",
+ "r2qk2r/3bbppp/p1nppB2/1p6/4PP2/2N2N2/PPPQ2PP/2KR1B1R": "Sicilian Defense: Richter-Rauzer Variation, Neo-Modern Variation, Nyezhmetdinov Attack",
+ "rnbqkb1r/pp2pp1p/3p1np1/8/3NP3/2N5/PPP2PPP/R1BQKB1R": "Sicilian Defense: Dragon Variation",
+ "rnbqkb1r/pp2pp1p/3p1np1/8/3NP3/2N5/PPP1BPPP/R1BQK2R": "Sicilian Defense: Dragon Variation, Classical Variation",
+ "rnbqkb1r/pp2pp1p/3p1np1/8/3NP3/2N3P1/PPP2P1P/R1BQKB1R": "Sicilian Defense: Dragon Variation, Fianchetto Variation",
+ "rnbqkb1r/pp2pp1p/3p1np1/8/3NPP2/2N5/PPP3PP/R1BQKB1R": "Sicilian Defense: Dragon Variation, Levenfish Variation",
+ "r1bqkb1r/pp1npp1p/3p1np1/8/3NPP2/2N5/PPP3PP/R1BQKB1R": "Sicilian Defense: Dragon Variation, Levenfish Variation, Main Line",
+ "rnbqkb1r/pp2pp1p/3p1np1/8/3NP3/2N1B3/PPP2PPP/R2QKB1R": "Sicilian Defense: Dragon Variation",
+ "rnbqk2r/pp2ppbp/3p1np1/8/3NP3/2N1B3/PPP1BPPP/R2QK2R": "Sicilian Defense: Dragon Variation, Classical Variation",
+ "r1bqk2r/pp2ppbp/2np1np1/8/3NP3/2N1B3/PPP1BPPP/R2QK2R": "Sicilian Defense: Dragon Variation, Classical Variation",
+ "r1bqk2r/pp2ppbp/2np1np1/8/4P3/1NN1B3/PPP1BPPP/R2QK2R": "Sicilian Defense: Dragon Variation, Classical Variation",
+ "r1bqk2r/pp2ppbp/2np1np1/8/3NP3/2N1B3/PPPQBPPP/R3K2R": "Sicilian Defense: Dragon Variation, Classical Variation, Amsterdam Variation",
+ "r1bq1rk1/pp2ppbp/2np1np1/8/3NP3/2N1B3/PPPQBPPP/2KR3R": "Sicilian Defense: Dragon Variation, Classical Variation, Grigoriev Variation",
+ "r1bqk2r/pp2ppbp/2np1np1/8/3NP3/2N1B3/PPP1BPPP/R2Q1RK1": "Sicilian Defense: Dragon Variation, Classical Variation",
+ "r1bq1rk1/pp2ppbp/2np1np1/8/3NP3/2N1B3/PPPQBPPP/R4RK1": "Sicilian Defense: Dragon Variation, Classical Variation, Battery Variation",
+ "r1b2rk1/pp2ppbp/1qnp1np1/4P3/3N1P2/2N1B3/PPP1B1PP/R2Q1RK1": "Sicilian Defense: Dragon Variation, Classical Variation, Zollner Gambit",
+ "r1bq1rk1/1p2ppbp/2np1np1/p7/4P3/1NN1B3/PPP1BPPP/R2Q1RK1": "Sicilian Defense: Dragon Variation, Classical Variation, Alekhine Line",
+ "r2q1rk1/pp2ppbp/5np1/n2p1P2/4P3/1NNPB3/PP4PP/R2Q1RK1": "Sicilian Defense: Dragon Variation, Classical Variation, Bernard Defense",
+ "r2q1rk1/pp2ppbp/3pbnp1/n7/4PP2/1NN1B3/PPP1B1PP/R2Q1RK1": "Sicilian Defense: Dragon Variation, Classical Variation, Maróczy Line",
+ "r1bq1rk1/pp2ppbp/2np1np1/8/4P3/1NN1B3/PPP1BPPP/R2Q1RK1": "Sicilian Defense: Dragon Variation, Classical Variation, Normal Line",
+ "r2q1rk1/pp2ppbp/3p1np1/n4P2/2b1P3/1NNBB3/PPP3PP/R2Q1RK1": "Sicilian Defense: Dragon Variation, Classical Variation, Spielmann Variation",
+ "r4rk1/pp2ppbp/3p1np1/q4P2/4P1P1/2N1B3/PPP1Q2P/R4RK1": "Sicilian Defense: Dragon Variation, Classical Variation, Stockholm Attack",
+ "r1q2rk1/pp2ppbp/2npbnp1/8/4PP2/1NN1B3/PPP1B1PP/R2Q1RK1": "Sicilian Defense: Dragon Variation, Classical Variation, Tartakower Line",
+ "r1bqk2r/pp2ppbp/2np1np1/8/3NP3/2N1BP2/PPP3PP/R2QKB1R": "Sicilian Defense: Dragon Variation, Yugoslav Attack, Belezky Line",
+ "rnbqk2r/pp2ppbp/3p1np1/8/3NP3/2N1BP2/PPP3PP/R2QKB1R": "Sicilian Defense: Dragon Variation, Yugoslav Attack, Early Deviations",
+ "rnbq1rk1/pp2ppbp/3p1np1/8/3NP3/2N1BP2/PPP3PP/R2QKB1R": "Sicilian Defense: Dragon Variation, Yugoslav Attack",
+ "r1bq1rk1/pp2ppbp/2np1np1/8/3NP3/2N1BP2/PPPQ2PP/R3KB1R": "Sicilian Defense: Dragon Variation, Yugoslav Attack",
+ "r1bq1rk1/pp2ppbp/2np1np1/8/3NP3/2N1BP2/PPPQ2PP/2KR1B1R": "Sicilian Defense: Dragon Variation, Yugoslav Attack, Modern Line",
+ "r1bq1rk1/pp2ppbp/2np1np1/8/3NP1P1/2N1BP2/PPPQ3P/R3KB1R": "Sicilian Defense: Dragon Variation, Yugoslav Attack, Panov Variation",
+ "r2q1rk1/pp1bppbp/2np1np1/8/2BNP3/2N1BP2/PPPQ2PP/R3K2R": "Sicilian Defense: Dragon Variation, Yugoslav Attack",
+ "r1bq1rk1/1p2ppbp/2np1np1/p7/2BNP3/2N1BP2/PPPQ2PP/R3K2R": "Sicilian Defense: Dragon Variation, Yugoslav Attack, Byrne Variation",
+ "r2q1rk1/pp2ppbp/3pbnp1/8/2BBP3/2N2P2/PPPQ2PP/R3K2R": "Sicilian Defense: Dragon Variation, Yugoslav Attack, Czerniak Variation",
+ "r1bq1rk1/pp2ppbp/2np1np1/8/2BNP3/2N1BP2/PPPQ2PP/R3K2R": "Sicilian Defense: Dragon Variation, Yugoslav Attack, Main Line",
+ "r1bq1rk1/pp1nppbp/2np2p1/8/2BNP3/2N1BP2/PPPQ2PP/R3K2R": "Sicilian Defense: Dragon Variation, Yugoslav Attack, Sosonko Variation",
+ "r2q1rk1/pp1bppbp/2np1np1/8/2BNP3/2N1BP2/PPPQ2PP/2KR3R": "Sicilian Defense: Dragon Variation, Yugoslav Attack",
+ "2rq1rk1/pp1bppbp/2np1np1/8/2BNP3/2N1BP2/PPPQ2PP/2KR3R": "Sicilian Defense: Dragon Variation, Yugoslav Attack, Old Line",
+ "r1r3k1/pp1bppbp/2np1np1/q7/3NP2P/1BN1BP2/PPPQ2P1/2KR3R": "Sicilian Defense: Dragon Variation, Yugoslav Attack",
+ "r1r3k1/pp1bppb1/2np1np1/q6p/3NP2P/1BN1BP2/PPPQ2P1/2KR3R": "Sicilian Defense: Dragon Variation, Yugoslav Attack, Soltis Variation",
+ "rnbqkb1r/pp3ppp/3ppn2/8/3NP3/2N5/PPP2PPP/R1BQKB1R": "Sicilian Defense: Scheveningen Variation",
+ "rnbqkb1r/1p3ppp/p2ppn2/8/3NP3/2N1B3/PPPQ1PPP/R3KB1R": "Sicilian Defense: Scheveningen Variation, English Attack, with Qd2",
+ "rnbqkb1r/pp3ppp/3ppn2/8/3NP3/2N3P1/PPP2P1P/R1BQKB1R": "Sicilian Defense: Scheveningen Variation, Fianchetto Variation",
+ "rnbqkb1r/pp3ppp/3ppn2/1B6/3NP3/2N5/PPP2PPP/R1BQK2R": "Sicilian Defense: Scheveningen Variation, Vitolins Variation",
+ "rnbqkb1r/pp3ppp/3ppn2/8/3NP1P1/2N5/PPP2P1P/R1BQKB1R": "Sicilian Defense: Scheveningen Variation, Keres Attack",
+ "rnbqkb1r/pp3ppp/3ppn2/8/3NPP2/2N5/PPP3PP/R1BQKB1R": "Sicilian Defense: Scheveningen Variation, Matanovic Attack",
+ "r1bqk2r/pp2bppp/2nppn2/8/3NPP2/2N1BQ2/PPP3PP/R3KB1R": "Sicilian Defense: Scheveningen Variation, Tal Variation",
+ "rnbqkb1r/pp3ppp/3ppn2/8/3NP3/2N5/PPP1BPPP/R1BQK2R": "Sicilian Defense: Scheveningen Variation, Classical Variation",
+ "r1bqkb1r/pp3ppp/2nppn2/8/3NP3/2N5/PPP1BPPP/R1BQK2R": "Sicilian Defense: Scheveningen Variation, Modern Variation",
+ "r1bq1rk1/pp2bppp/2nppn2/8/3NPP2/2N1B3/PPP1B1PP/R2Q1RK1": "Sicilian Defense: Scheveningen Variation, Modern Variation",
+ "r2q1rk1/pp1bbppp/2nppn2/8/4PP2/1NN1B3/PPP1B1PP/R2Q1RK1": "Sicilian Defense: Scheveningen Variation, Modern Variation",
+ "r1bqkb1r/1p1n1ppp/p2ppn2/8/3NP3/2N5/PPP1BPPP/R1BQ1RK1": "Sicilian Defense: Najdorf Variation, Scheveningen Variation",
+ "rnbqkb1r/1p3ppp/p2ppn2/8/3NP3/2N5/PPP1BPPP/R1BQK2R": "Sicilian Defense: Scheveningen Variation, Classical Variation",
+ "rnb1kb1r/1pq2ppp/p2ppn2/8/3NP3/2N5/PPP1BPPP/R1BQ1RK1": "Sicilian Defense: Scheveningen Variation, Classical Variation",
+ "r1b2rk1/1pq1bppp/p1nppn2/8/3NPP2/2N1B3/PPP1B1PP/R3QRK1": "Sicilian Defense: Scheveningen Variation, Classical Main Line",
+ "r1b1kb1r/1pq2ppp/p1nppn2/8/3NPP2/2N5/PPP1B1PP/R1BQ1RK1": "Sicilian Defense: Scheveningen Variation, Classical Variation, Paulsen Variation",
+ "r1b1kb1r/1pq2ppp/p1nppn2/8/3NPP2/2N1B3/PPP1B1PP/R2Q1RK1": "Sicilian Defense: Scheveningen Variation, Classical Variation, Paulsen Variation",
+ "r1b1k2r/1pq1bppp/p1nppn2/8/P2NPP2/2N5/1PP1B1PP/R1BQ1R1K": "Sicilian Defense: Scheveningen Variation, Classical Variation, Paulsen Variation",
+ "rnbqkb1r/pp3ppp/3ppn2/8/2BNP3/2N5/PPP2PPP/R1BQK2R": "Sicilian Defense: Sozin Attack",
+ "rnbqkb1r/5ppp/p2ppn2/1p6/3NP3/1BN5/PPP2PPP/R1BQK2R": "Sicilian Defense: Sozin Attack, Flank Variation",
+ "r1bq1rk1/pp2bppp/2nppn2/8/3NPP2/1BN1B3/PPP3PP/R2QK2R": "Sicilian Defense: Sozin Attack, Fischer Variation",
+ "r1bqkb1r/pp3ppp/2nppn2/8/2BNP3/2N5/PPP2PPP/R1BQK2R": "Sicilian Defense: Sozin Attack, Leonhardt Variation",
+ "r1bqkb1r/pp3ppp/2nppn2/8/2BNP3/2N1B3/PPP2PPP/R2QK2R": "Sicilian Defense: Sozin Attack, Main Line",
+ "r1bq1rk1/p3bppp/1p1ppn2/n7/3NPP2/1BN1B3/PPP3PP/R2Q1RK1": "Sicilian Defense: Sozin Attack, Main Line, Sherbakov Variation",
+ "r1bqk2r/pp2bppp/2nppn2/8/2BNP3/2N1B3/PPP1QPPP/R3K2R": "Sicilian Defense: Velimirovic Attack",
+ "rnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N5/PPP2PPP/R1BQKB1R": "Sicilian Defense: Najdorf Variation",
+ "rnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N4P/PPP2PP1/R1BQKB1R": "Sicilian Defense: Najdorf Variation, Adams Attack",
+ "rnbqkb1r/1p2pppp/p2p1n2/8/3NP1P1/2N5/PPP2P1P/R1BQKB1R": "Sicilian Defense: Najdorf Variation, Dekker Gambit",
+ "rnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N1B3/PPP2PPP/R2QKB1R": "Sicilian Defense: Najdorf Variation, English Attack",
+ "rnbqkb1r/1p2pppp/p2p4/8/3NP1n1/2N1B3/PPP2PPP/R2QKB1R": "Sicilian Defense: Najdorf Variation, English Attack, Anti-English",
+ "rnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N5/PPP2PPP/R1BQKBR1": "Sicilian Defense: Najdorf Variation, Freak Attack",
+ "rnbqkb1r/1p2pppp/p2p1n2/8/2BNP3/2N5/PPP2PPP/R1BQK2R": "Sicilian Defense: Najdorf Variation, Lipnitsky Attack",
+ "rnbqkb1r/1p3ppp/p2ppn2/8/3NP1P1/2N1B3/PPP2P1P/R2QKB1R": "Sicilian Defense: Scheveningen Variation, Delayed Keres Attack",
+ "rnbqkb1r/1p3p1p/p2p1np1/4pNP1/4P3/2N1B3/PPP2P1P/R2QKB1R": "Sicilian Defense: Scheveningen Variation, Delayed Keres Attack, Perenyi Gambit",
+ "rnbqkb1r/1p3ppp/p2ppn2/8/3NP3/2N1BP2/PPP3PP/R2QKB1R": "Sicilian Defense: Scheveningen Variation, English Attack, with f3",
+ "rnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N3P1/PPP2P1P/R1BQKB1R": "Sicilian Defense: Najdorf Variation, Zagreb Variation",
+ "rnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N5/PPP1BPPP/R1BQK2R": "Sicilian Defense: Najdorf Variation, Opocensky Variation",
+ "rn1qk2r/1p2bppp/p2pbn2/4p3/4P3/1NN5/PPP1BPPP/R1BQ1RK1": "Sicilian Defense: Najdorf Variation, Opocensky Variation, Modern Line",
+ "rnbq1rk1/1p2bppp/p2p1n2/4p3/4P3/1NN5/PPP1BPPP/R1BQ1RK1": "Sicilian Defense: Najdorf Variation, Opocensky Variation, Traditional Line",
+ "rnbqkb1r/1p2pppp/p2p1n2/8/3NPP2/2N5/PPP3PP/R1BQKB1R": "Sicilian Defense: Najdorf Variation, Amsterdam Variation",
+ "rnbqkb1r/1p2pppp/p2p1n2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R": "Sicilian Defense: Najdorf Variation",
+ "r3kb1r/1b3ppp/p2ppn2/qpn1P1B1/3N4/1BN5/PPPQ1PPP/2KRR3": "Sicilian Defense: Najdorf Variation, Ivkov Variation",
+ "rnbqkb1r/1p3ppp/p2ppn2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R": "Sicilian Defense: Najdorf Variation",
+ "rnbqkb1r/1p3ppp/p2ppn2/6B1/3NPP2/2N5/PPP3PP/R2QKB1R": "Sicilian Defense: Najdorf Variation",
+ "r1bqkb1r/1p3ppp/p1nppn2/6B1/3NPP2/2N5/PPP3PP/R2QKB1R": "Sicilian Defense: Najdorf Variation, Neo-Classical Defense",
+ "rnbqkb1r/5ppp/p2ppn2/1p4B1/3NPP2/2N5/PPP3PP/R2QKB1R": "Sicilian Defense: Najdorf Variation, Polugaevsky Variation",
+ "rnb1kb1r/2q2ppp/p3pn2/1p2P1B1/3N4/2N5/PPP1Q1PP/R3KB1R": "Sicilian Defense: Najdorf Variation, Polugaevsky Variation, Simagin Line",
+ "rnb1kb1r/1p3ppp/p2ppn2/6B1/3NPP2/q1N5/P1PQ2PP/1R2KB1R": "Sicilian Defense: Najdorf Variation, Poisoned Pawn Accepted",
+ "rnb1kb1r/1p3ppp/pq1ppn2/6B1/3NPP2/2N5/PPP3PP/R2QKB1R": "Sicilian Defense: Najdorf Variation, Poisoned Pawn Variation",
+ "rnbqk2r/1p2bppp/p2ppn2/6B1/3NPP2/2N5/PPP3PP/R2QKB1R": "Sicilian Defense: Najdorf Variation",
+ "rnb1k2r/1pq1bpp1/p2ppn1p/8/3NPP1B/2N2Q2/PPP3PP/R3KB1R": "Sicilian Defense: Najdorf Variation, Browne Variation",
+ "rnbqk2r/1p2bp2/p2ppn1p/6p1/3NPP1B/2N2Q2/PPP3PP/R3KB1R": "Sicilian Defense: Najdorf Variation, Goteborg Variation",
+ "rnb1k2r/1pq1bppp/p2ppn2/6B1/3NPP2/2N2Q2/PPP3PP/R3KB1R": "Sicilian Defense: Najdorf Variation, Traditional Line",
+ "r1b1k2r/1pqnbppp/p2ppn2/6B1/3NPP2/2N2Q2/PPP3PP/2KR1B1R": "Sicilian Defense: Najdorf Variation, Main Line",
+ "rnbqkbnr/pppp1ppp/4p3/8/4P3/8/PPPP1PPP/RNBQKBNR": "French Defense",
+ "rnbqkbnr/ppp2ppp/4p3/3p4/3PP3/8/PPP2PPP/RNBQKBNR": "French Defense",
+ "rnbqkbnr/ppp2ppp/4p3/3p4/3PP3/4B3/PPP2PPP/RN1QKBNR": "French Defense: Alapin Gambit",
+ "rnbqkbnr/p1pp1ppp/4p3/1p6/3PP3/8/PPP2PPP/RNBQKBNR": "French Defense: Baeuerle Gambit",
+ "rnbqkbnr/pppp1ppp/4p3/8/1P2P3/8/P1PP1PPP/RNBQKBNR": "French Defense: Banzai-Leong Gambit",
+ "rnbqk1nr/pppp1ppp/4p3/4P3/1b6/8/P1PP1PPP/RNBQKBNR": "French Defense: Banzai-Leong Gambit, Pinova Gambit",
+ "rnbqkbnr/pppp1ppp/4p3/1B6/4P3/8/PPPP1PPP/RNBQK1NR": "French Defense: Bird Invitation",
+ "rnbqkbnr/ppp2ppp/4p3/4N3/3Pp3/8/PPP2PPP/RNBQKB1R": "French Defense: Carlson Gambit",
+ "rnbqkbnr/pppp1ppp/4p3/8/4P3/8/PPPPQPPP/RNB1KBNR": "French Defense: Chigorin Variation",
+ "rnbqkbnr/ppp2ppp/4p3/3p4/2PPP3/8/PP3PPP/RNBQKBNR": "French Defense: Diemer-Duhm Gambit",
+ "rnbqkbnr/ppp2ppp/4p3/8/2PPp3/8/PP3PPP/RNBQKBNR": "French Defense: Diemer-Duhm Gambit Accepted",
+ "rnbqkbnr/pppp2pp/4p3/5p2/3PP3/8/PPP2PPP/RNBQKBNR": "French Defense: Franco-Hiva Gambit",
+ "rnbqkbnr/pppp2pp/4p3/5P2/3P4/8/PPP2PPP/RNBQKBNR": "French Defense: Franco-Hiva Gambit Accepted",
+ "rnbqkbnr/pp1p1ppp/4p3/2p5/3PP3/8/PPP2PPP/RNBQKBNR": "French Defense: Franco-Sicilian Defense",
+ "rnbqkbnr/ppp2ppp/8/3p4/3PPp2/8/PPP1Q1PP/RNB1KBNR": "French Defense: Hoffmann Gambit",
+ "rnbqkbnr/pppp1ppp/4p3/8/4P3/1P6/P1PP1PPP/RNBQKBNR": "French Defense: Horwitz Attack",
+ "rnbqkbnr/ppp2ppp/4p3/3p4/4P3/1P6/PBPP1PPP/RN1QKBNR": "French Defense: Horwitz Attack, Papa-Ticulat Gambit",
+ "rnbqkbnr/pppp1ppp/4p3/8/4P3/3P4/PPP2PPP/RNBQKBNR": "French Defense: King's Indian Attack",
+ "rnbqkbnr/pppp2pp/4p3/5p2/4P3/3P4/PPP2PPP/RNBQKBNR": "French Defense: King's Indian Attack, Franco-Hiva Gambit",
+ "rnbqkbnr/pppp1ppp/4p3/8/4P3/5N2/PPPP1PPP/RNBQKB1R": "French Defense: Knight Variation",
+ "rnbqkbnr/pppp2pp/4p3/5p2/4P3/5N2/PPPP1PPP/RNBQKB1R": "French Defense: Knight Variation, Franco-Hiva Gambit",
+ "rnbqkbnr/pppp1ppp/4p3/8/4PP2/8/PPPP2PP/RNBQKBNR": "French Defense: La Bourdonnais Variation",
+ "rnbqkbnr/ppp2ppp/4p3/8/4pP2/5N2/PPPP2PP/RNBQKB1R": "French Defense: La Bourdonnais Variation, Reuter Gambit",
+ "rnbqkb1r/pppp1ppp/4pn2/8/3PP3/8/PPP2PPP/RNBQKBNR": "French Defense: Mediterranean Defense",
+ "rnbqkbnr/ppp2ppp/4p3/3p4/3PP3/7N/PPP2PPP/RNBQKB1R": "French Defense: Morphy Gambit",
+ "rnbqkbnr/pppp1ppp/4p3/8/3PP3/8/PPP2PPP/RNBQKBNR": "French Defense: Normal Variation",
+ "rnbqkbnr/ppp2ppp/8/3p4/4P3/1Q6/PP1P1PPP/RNB1KBNR": "French Defense: Orthoschnapp Gambit",
+ "rnbqkbnr/ppp2ppp/4p3/3p4/4PP2/2N5/PPPP2PP/R1BQKBNR": "French Defense: Pelikan Variation",
+ "rnbqkbnr/ppp2ppp/4p3/3p4/3PP3/5N2/PPP2PPP/RNBQKB1R": "French Defense: Perseus Gambit",
+ "rnbqkbnr/pppp1ppp/4p3/8/4P3/2N5/PPPP1PPP/R1BQKBNR": "French Defense: Queen's Knight",
+ "r1bqkb1r/ppp2ppp/2n1pn2/3p4/4P3/3P1N2/PPPNBPPP/R1BQK2R": "French Defense: Reversed Philidor Formation",
+ "rnbqkbnr/pppp1ppp/4p3/8/4P3/6P1/PPPP1P1P/RNBQKBNR": "French Defense: Réti-Spielmann Attack",
+ "rnbqkbnr/ppp2ppp/4p3/3p4/3PP3/3B4/PPP2PPP/RNBQK1NR": "French Defense: Schlechter Variation",
+ "rnbqkbnr/1ppp1ppp/p3p3/8/3PP3/8/PPP2PPP/RNBQKBNR": "French Defense: St. George Defense",
+ "rnbqkbnr/2pp1ppp/p3p3/1p6/2PPP3/8/PP3PPP/RNBQKBNR": "French Defense: St. George Defense, Sanky-George Gambit",
+ "rnbqkbnr/2pp1ppp/4p3/1p6/3PP3/8/PP3PPP/RNBQKBNR": "French Defense: St. George Defense, St. George Gambit",
+ "rnbqkbnr/1ppp1ppp/p3p3/8/2PPP3/8/PP3PPP/RNBQKBNR": "French Defense: St. George Defense, Three Pawn Attack",
+ "rn1qkb1r/1b1p1ppp/p3pn2/1pp5/3PP3/2PB1N2/PP3PPP/RNBQ1RK1": "French Defense: St. George Defense, Traditional Line",
+ "rnbqkbnr/pppp1ppp/4p3/8/2P1P3/8/PP1P1PPP/RNBQKBNR": "French Defense: Steiner Variation",
+ "rnbqkbnr/pppp1ppp/4p3/4P3/8/8/PPPP1PPP/RNBQKBNR": "French Defense: Steinitz Attack",
+ "rnbqkbnr/ppp2ppp/4p3/3p4/4P3/2N2N2/PPPP1PPP/R1BQKB1R": "French Defense: Two Knights Variation",
+ "rnbqkbnr/pp3ppp/4p3/2ppP3/1P6/5N2/P1PP1PPP/RNBQKB1R": "French Defense: Wing Gambit",
+ "rnbqkbnr/ppp2ppp/3pp3/8/3PP3/8/PPP2PPP/RNBQKBNR": "Rat Defense: Small Center Defense",
+ "rnbqkbnr/ppp2ppp/4p3/3P4/3P4/8/PPP2PPP/RNBQKBNR": "French Defense: Exchange Variation",
+ "r1bqkb1r/ppp2ppp/2n2n2/3p2B1/3P4/2N5/PPP2PPP/R2QKBNR": "French Defense: Exchange Variation, Bogoljubov Variation",
+ "rnbqkbnr/ppp2ppp/8/3p4/2PP4/8/PP3PPP/RNBQKBNR": "French Defense: Exchange Variation, Monte Carlo Variation",
+ "rnbqkb1r/ppp2ppp/5n2/3p2B1/3P4/2N5/PPP2PPP/R2QKBNR": "French Defense: Exchange Variation, Svenonius Variation",
+ "rnbqkbnr/ppp2ppp/4p3/3pP3/3P4/8/PPP2PPP/RNBQKBNR": "French Defense: Advance Variation",
+ "rnbqkbnr/pp3ppp/4p3/2ppP3/3P4/8/PPP2PPP/RNBQKBNR": "French Defense: Advance Variation",
+ "rnbqkbnr/pp3ppp/4p3/2ppP3/3P4/2P5/PP3PPP/RNBQKBNR": "French Defense: Advance Variation",
+ "r1bqkbnr/pp3ppp/2n1p3/2ppP3/3P4/2P5/PP3PPP/RNBQKBNR": "French Defense: Advance Variation",
+ "r2qkbnr/pp1b1ppp/2n1p3/2ppP3/3P4/2P2N2/PP3PPP/RNBQKB1R": "French Defense: Advance Variation, Euwe Variation",
+ "rn1qkbnr/pppb1ppp/4p3/3pP3/3P4/8/PPP2PPP/RNBQKBNR": "French Defense: Advance Variation, Extended Bishop Swap",
+ "rnbqkbnr/pp3ppp/4p3/2ppP3/1P1P4/8/P1P2PPP/RNBQKBNR": "French Defense: Advance Variation, Frenkel Gambit",
+ "r1b1kb1r/pp3ppp/1qn1p2n/2ppP3/3P4/P1P2N2/1P3PPP/RNBQKB1R": "French Defense: Advance Variation, Lputian Variation",
+ "r1b1kbnr/pp3ppp/1qn1p3/2ppP3/3P4/P1P2N2/1P3PPP/RNBQKB1R": "French Defense: Advance Variation, Main Line",
+ "r1b1kbnr/pp3ppp/1qn1p3/2ppP3/3P4/2PB1N2/PP3PPP/RNBQK2R": "French Defense: Advance Variation, Milner-Barry Gambit",
+ "rnbqkbnr/pp3ppp/4p3/2ppP3/3P2Q1/8/PPP2PPP/RNB1KBNR": "French Defense: Advance Variation, Nimzowitsch Attack",
+ "rnbqkbnr/pp3ppp/4p3/3pP3/3p2Q1/5N2/PPP2PPP/RNB1KB1R": "French Defense: Advance Variation, Nimzowitsch Gambit",
+ "rnbqkbnr/pp3ppp/4p3/2ppP3/3P4/5N2/PPP2PPP/RNBQKB1R": "French Defense: Advance Variation, Nimzowitsch System",
+ "r1bqkbnr/pp3ppp/2n1p3/2ppP3/3P4/2P2N2/PP3PPP/RNBQKB1R": "French Defense: Advance Variation, Paulsen Attack",
+ "rnbqkbnr/pp3ppp/4p3/3pP3/3p4/3B1N2/PPP2PPP/RNBQK2R": "French Defense: Advance Variation, Ruisdonk Gambit",
+ "rnbqkbnr/pp3ppp/4p3/2PpP3/8/8/PPP2PPP/RNBQKBNR": "French Defense: Advance Variation, Steinitz Variation",
+ "rn2kbnr/pp1b1ppp/1q2p3/2ppP3/3P4/2P2N2/PP3PPP/RNBQKB1R": "French Defense: Advance Variation, Wade Variation",
+ "r1bqkbnr/ppp2ppp/2n5/4p3/3PN3/2P5/PP3PPP/R1BQKBNR": "French Defense: Guimard Variation, Thunderbunny Variation",
+ "rnbqkbnr/ppp2ppp/4p3/3p4/3PP3/8/PPPN1PPP/R1BQKBNR": "French Defense: Tarrasch Variation",
+ "r1bqkbnr/ppp2ppp/2n1p3/3p4/3PP3/8/PPPN1PPP/R1BQKBNR": "French Defense: Tarrasch Variation, Guimard Defense",
+ "rnbqkbnr/ppp3pp/4p3/3p1p2/3PP3/8/PPPN1PPP/R1BQKBNR": "French Defense: Tarrasch Variation, Haberditz Variation",
+ "rnbqkbnr/1pp2ppp/p3p3/3p4/3PP3/8/PPPN1PPP/R1BQKBNR": "French Defense: Tarrasch Variation, Modern System",
+ "rnbqk1nr/ppp1bppp/4p3/3p4/3PP3/8/PPPN1PPP/R1BQKBNR": "French Defense: Tarrasch Variation, Morozevich Variation",
+ "r1bqkb1r/ppp2ppp/2n1pn2/3p4/3PP3/5N2/PPPN1PPP/R1BQKB1R": "French Defense: Tarrasch Variation, Guimard Defense, Main Line",
+ "rnbqkb1r/p2n1ppp/1p2p3/2ppP3/3P4/2PB4/PP1N1PPP/R1BQK1NR": "French Defense: Tarrasch Variation, Botvinnik Variation",
+ "rnbqkb1r/ppp2ppp/4pn2/3p4/3PP3/8/PPPN1PPP/R1BQKBNR": "French Defense: Tarrasch Variation, Closed Variation",
+ "r1bqkb1r/pp1n1ppp/2n1p3/2ppP3/3P4/2PB4/PP1N1PPP/R1BQK1NR": "French Defense: Tarrasch Variation, Closed Variation",
+ "rnbqkb1r/pppn1ppp/4p3/3pP3/3P1P2/8/PPPN2PP/R1BQKBNR": "French Defense: Tarrasch Variation, Pawn Center Variation",
+ "r1bqkb1r/pp1n1ppp/2n1p3/3pP3/3P4/3B4/PP1NNPPP/R1BQK2R": "French Defense: Tarrasch Variation, Closed Variation, Main Line",
+ "r1bqkb1r/pp3ppp/1nn1p3/3pP3/3P4/3B4/PP1NNPPP/R1BQK2R": "French Defense: Tarrasch Variation, Leningrad Variation",
+ "rnb1kbnr/pp3ppp/4p3/2pq4/3P4/8/PPPN1PPP/R1BQKBNR": "French Defense: Tarrasch Variation, Chistyakov Defense",
+ "r1b1kb1r/1p3ppp/p2qpn2/8/2BN4/8/PPP2PPP/R1BQ1RK1": "French Defense: Tarrasch Variation, Chistyakov Defense, Modern Line",
+ "rnbqkbnr/pp3ppp/4p3/8/2Bp4/5N2/PPPN1PPP/R1BQK2R": "French Defense: Tarrasch Variation, Eliskases Variation",
+ "rnbqkbnr/pp3ppp/4p3/2pp4/3PP3/8/PPPN1PPP/R1BQKBNR": "French Defense: Tarrasch Variation, Open System",
+ "rnbqkbnr/pp3ppp/4p3/2pp4/3PP3/5N2/PPPN1PPP/R1BQKB1R": "French Defense: Tarrasch Variation, Open System, Euwe-Keres Line",
+ "rnbqkb1r/pp3ppp/4pn2/2pP4/3P4/8/PPPN1PPP/R1BQKBNR": "French Defense: Tarrasch Variation, Open System, Shaposhnikov Gambit",
+ "rnbqkbnr/pp3ppp/4p3/2pp4/3PP3/2P5/PP1N1PPP/R1BQKBNR": "French Defense: Tarrasch Variation, Open System, Süchting Line",
+ "rnbqkbnr/pp3ppp/8/2pp4/3P4/8/PPPN1PPP/R1BQKBNR": "French Defense: Tarrasch Variation, Open System",
+ "rnbqkbnr/pp3ppp/8/3p4/2pP4/5N2/PPPN1PPP/R1BQKB1R": "French Defense: Tarrasch Variation, Open System, Advance Line",
+ "r1bqkbnr/pp3ppp/2n5/2pp4/3P4/5N2/PPPN1PPP/R1BQKB1R": "French Defense: Tarrasch Variation, Open System, Main Line",
+ "r1bqkbnr/ppp2ppp/2n1p3/3P4/3P4/2N5/PPP2PPP/R1BQKBNR": "French Defense: Classical Variation, Svenonius Variation",
+ "rnbqkbnr/ppp2ppp/4p3/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR": "French Defense: Paulsen Variation",
+ "rnbqkbnr/ppp2ppp/4p3/8/3Pp3/2N5/PPP2PPP/R1BQKBNR": "French Defense: Rubinstein Variation",
+ "r1bqkbnr/pppn1ppp/4p3/8/3PN3/8/PPP2PPP/R1BQKBNR": "French Defense: Rubinstein Variation, Blackburne Defense",
+ "r1bqkb1r/ppp2ppp/4pn2/4N3/3P4/8/PPP2PPP/R1BQKB1R": "French Defense: Rubinstein Variation, Capablanca Line",
+ "rnbqkbnr/ppp2ppp/8/4p3/3PN3/8/PPP2PPP/R1BQKBNR": "Blackmar-Diemer Gambit: Lemberger Countergambit, Lange Gambit",
+ "rn1qkbnr/ppp2ppp/2b1p3/8/3PN3/5N2/PPP2PPP/R1BQKB1R": "French Defense: Rubinstein Variation, Fort Knox Variation",
+ "r1bqkb1r/ppp2ppp/4pn2/8/3P4/2P2N2/PP3PPP/R1BQKB1R": "French Defense: Rubinstein Variation, Kasparov Attack",
+ "rnb1kbnr/ppp2ppp/4p3/3q4/3PN3/8/PPP2PPP/R1BQKBNR": "French Defense: Rubinstein Variation, Maric Variation",
+ "rnbqkbnr/pp3ppp/4p3/2pp4/3PP3/2N5/PPP2PPP/R1BQKBNR": "Sicilian Defense: Marshall Gambit",
+ "rnbqkb1r/ppp2ppp/4pn2/3p2B1/3PP3/2N5/PPP2PPP/R2QKBNR": "French Defense: Burn Variation",
+ "rnbqkb1r/ppp2ppp/4pn2/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR": "French Defense: Classical Variation",
+ "rnbq1rk1/ppp2ppp/4pb2/8/3PN3/5N2/PPP2PPP/R2QKB1R": "French Defense: Classical Variation, Burn Variation, Main Line",
+ "rnbqk2r/ppp1bp1p/4pp2/8/3PN3/8/PPP2PPP/R2QKBNR": "French Defense: Classical Variation, Burn Variation, Morozevich Line",
+ "rnbqkb1r/ppp2ppp/4pn2/3P4/3P4/2N5/PPP2PPP/R1BQKBNR": "French Defense: Classical Variation, Delayed Exchange Variation",
+ "rnbqkb1r/ppp2ppp/4pn2/3pP3/3P4/2N5/PPP2PPP/R1BQKBNR": "French Defense: Classical Variation, Steinitz Variation",
+ "rnbqkb1r/ppp2ppp/4pn2/3p4/3PP3/2NB4/PPP2PPP/R1BQK1NR": "French Defense: Classical Variation, Swiss Variation",
+ "rnbqkb1r/ppp2ppp/4pn2/3p4/3PP3/2N1B3/PPP2PPP/R2QKBNR": "French Defense: Henneberger Variation",
+ "r1bqkb1r/pp1n1ppp/2n1p3/2PpP3/5P2/2N5/PPP3PP/R1BQKBNR": "French Defense: Steinitz Variation",
+ "rnbqkb1r/pp1n1ppp/4p3/2ppP3/3P1P2/2N2N2/PPP3PP/R1BQKB1R": "French Defense: Steinitz Variation",
+ "r1bqkb1r/pp1n1ppp/2n1p3/2ppP3/3P1P2/2N1BN2/PPP3PP/R2QKB1R": "French Defense: Steinitz Variation, Boleslavsky Variation",
+ "rnbqk2r/pp1n1ppp/4p3/2bpP3/5PQ1/2N5/PPP3PP/R1B1KBNR": "French Defense: Steinitz Variation, Bradford Attack Variation",
+ "r1bq1rk1/pp1n2pp/2n1pp2/2bpP3/5PQ1/P1N2N2/1PP3PP/R1B1KB1R": "French Defense: Steinitz Variation, Brodsky-Jones Variation",
+ "rnbqkb1r/pppn1ppp/4p3/3pP3/3P2Q1/2N5/PPP2PPP/R1B1KBNR": "French Defense: Steinitz Variation, Gledhill Attack",
+ "rnbqk2r/ppp2ppp/4pn2/3p2B1/1b1PP3/2N5/PPP2PPP/R2QKBNR": "French Defense: MacCutcheon Variation",
+ "rnbqk2r/ppp2ppp/4pn2/3pP1B1/1b1P4/2N5/PPP2PPP/R2QKBNR": "French Defense: MacCutcheon Variation, Advance Variation",
+ "rnbqk2r/ppp2pp1/4pn1p/3pP3/1b1P3B/2N5/PPP2PPP/R2QKBNR": "French Defense: MacCutcheon Variation, Bernstein Variation",
+ "rnb1k2r/ppp2p1p/4pp2/q7/1b1P4/2N5/PPPQ1PPP/R3KBNR": "French Defense: MacCutcheon Variation, Bogoljubov Variation",
+ "rnbqk2r/ppp2pp1/4pP1p/3p2B1/1b1P4/2N5/PPP2PPP/R2QKBNR": "French Defense: MacCutcheon Variation, Chigorin Variation",
+ "rnbqk2r/ppp2pp1/4pn1p/3pP3/1b1P4/2N5/PPP2PPP/R1BQKBNR": "French Defense: MacCutcheon Variation, Dr. Olland Variation",
+ "rnbq1k1r/ppp2pp1/4p2p/3pP3/3Pn1Q1/2P5/P1P2PPP/R1B1KBNR": "French Defense: MacCutcheon Variation, Duras Variation",
+ "rnbqk2r/ppp2ppp/4pn2/3P2B1/1b1P4/2N5/PPP2PPP/R2QKBNR": "French Defense: MacCutcheon Variation, Exchange Variation",
+ "rnbqk1r1/ppp2pP1/4p3/3p4/1b1P2Qp/2N5/PPP2PP1/R3KBNR": "French Defense: MacCutcheon Variation, Grigoriev Variation",
+ "rnbqk2r/ppp2pp1/4pn1p/3pP3/1b1P4/2N1B3/PPP2PPP/R2QKBNR": "French Defense: MacCutcheon Variation, Janowski Variation",
+ "rnbqk2r/ppp2pp1/4pn1p/3pP3/3P4/2b5/PPPB1PPP/R2QKBNR": "French Defense: MacCutcheon Variation, Lasker Variation",
+ "rnbqk2r/ppp2p2/4p1pp/3pP3/3Pn1Q1/2P5/P1PB1PPP/R3KBNR": "French Defense: MacCutcheon Variation, Lasker Variation",
+ "rnbqk2r/pppn1pp1/4p2p/3pP3/1b1P4/2N5/PPPB1PPP/R2QKBNR": "French Defense: MacCutcheon Variation, Tartakower Variation",
+ "rnbqk2r/pppnbppp/4p3/3pP1B1/3P3P/2N5/PPP2PP1/R2QKBNR": "French Defense: Alekhine-Chatard Attack",
+ "rnb1k2r/pppn1ppp/4p3/3pP1q1/3P4/2N5/PPP2PP1/R2QKBNR": "French Defense: Alekhine-Chatard Attack, Albin-Chatard Gambit",
+ "rnbqk2r/pp1nbppp/4p3/2ppP1B1/3P3P/2N5/PPP2PP1/R2QKBNR": "French Defense: Alekhine-Chatard Attack, Breyer Variation",
+ "rnbqk2r/1ppnbppp/p3p3/3pP1B1/3P3P/2N5/PPP2PP1/R2QKBNR": "French Defense: Alekhine-Chatard Attack, Maróczy Variation",
+ "rnbq1rk1/pppnbppp/4p3/3pP1B1/3P3P/2N5/PPP2PP1/R2QKBNR": "French Defense: Alekhine-Chatard Attack, Spielmann Variation",
+ "rnbqk2r/pppnb1pp/4pp2/3pP1B1/3P3P/2N5/PPP2PP1/R2QKBNR": "French Defense: Alekhine-Chatard Attack, Teichmann Variation",
+ "rnbqk1nr/p1p1bppp/1p2p3/3pP3/3P4/2N1B3/PPP2PPP/R2QKBNR": "French Defense: Classical Variation, Frankfurt Variation",
+ "rnbqk2r/ppp1bppp/4pn2/3p2B1/3PP3/2N5/PPP2PPP/R2QKBNR": "French Defense: Classical Variation, Normal Variation",
+ "rnbqk2r/ppp1bppp/4pB2/3p4/3PP3/2N5/PPP2PPP/R2QKBNR": "French Defense: Classical Variation, Richter Attack",
+ "rnbqk2r/ppp1bppp/4p3/3pP3/3P2Q1/2N5/PPP2PPP/R3KBNR": "French Defense: Classical Variation, Richter Attack",
+ "rnbqk2r/ppp1bppp/4p3/3pP1B1/3Pn3/2N5/PPP2PPP/R2QKBNR": "French Defense: Classical Variation, Tartakower Variation",
+ "rnbqk1nr/ppp1bppp/4p3/3pP1B1/3P4/2N5/PPP2PPP/R2QKBNR": "French Defense: Classical Variation, Vistaneckis Variation",
+ "rnb1k2r/pppnqppp/4p3/3pP3/3P4/2N5/PPP2PPP/R2QKBNR": "French Defense: Classical Variation",
+ "rnb1k2r/pppnqppp/4p3/1N1pP3/3P4/8/PPP2PPP/R2QKBNR": "French Defense: Classical Variation, Alapin Variation",
+ "rnb1k2r/pppnqppp/4p3/3pP3/3P2Q1/2N5/PPP2PPP/R3KBNR": "French Defense: Classical Variation, Pollock Variation",
+ "rnb1k2r/pppnqppp/4p3/3pP3/3P4/2N5/PPPQ1PPP/R3KBNR": "French Defense: Classical Variation, Rubinstein Variation",
+ "r1b2rk1/pp1nqppp/2n1p3/3pP3/2pP1P2/2N2N2/PPPQ2PP/2KR1B1R": "French Defense: Classical Variation, Stahlberg Variation",
+ "rnb1k2r/pppnqppp/4p3/3pP3/3P1P2/2N5/PPP3PP/R2QKBNR": "French Defense: Classical Variation, Steinitz Variation",
+ "rnb1k2r/pppnqppp/4p3/3pP3/3P4/2NB4/PPP2PPP/R2QK1NR": "French Defense: Classical Variation, Tarrasch Variation",
+ "rnbqk2r/ppp2ppp/4pn2/3p2B1/1b1PP3/2N5/PPP1NPPP/R2QKB1R": "French Defense: MacCutcheon Variation, Wolf Gambit",
+ "rnbqk1nr/ppp2ppp/4p3/3p4/1b1PP3/2N5/PPP2PPP/R1BQKBNR": "French Defense: Winawer Variation",
+ "rnbqk1nr/ppp2ppp/4p3/8/3Pp3/P1b5/1PP1NPPP/R1BQKB1R": "French Defense: Winawer Variation, Alekhine Gambit Accepted",
+ "r1bq1rk1/ppp1bppp/2n1pn2/8/3PN3/P5N1/1PP1BPPP/R1BQK2R": "French Defense: Winawer Variation, Alekhine Gambit, Alatortsev Variation",
+ "r1bqk1nr/ppp2ppp/2n1p3/8/3Pp3/P1N5/1PP2PPP/R1BQKB1R": "French Defense: Winawer Variation, Alekhine Gambit, Kan Variation",
+ "rnbqk1nr/ppp2ppp/4p3/3p4/1b1PP3/2N5/PPP1NPPP/R1BQKB1R": "French Defense: Winawer Variation, Alekhine-Maróczy Gambit",
+ "rnbqk1nr/ppp2ppp/4p3/3P4/1b1P4/2N5/PPP2PPP/R1BQKBNR": "French Defense: Winawer Variation, Delayed Exchange Variation",
+ "rnbqk2r/ppp1nppp/8/3p3Q/1b1P4/2NB4/PPP2PPP/R1B1K1NR": "French Defense: Winawer Variation, Exchange Variation, Canal Attack",
+ "rnbqk1nr/ppp2ppp/4p3/3p4/1b1PP3/2N5/PPPB1PPP/R2QKBNR": "French Defense: Winawer Variation, Fingerslip Variation",
+ "rnb1k1nr/ppp2ppp/4p3/8/1b1qp1Q1/2N5/PPPB1PPP/R3KBNR": "French Defense: Winawer Variation, Fingerslip Variation, Kunin Double Gambit",
+ "rnbqk1r1/ppp2p1p/4pn1Q/8/1b1Pp3/2N5/PPPB1PPP/R3KBNR": "French Defense: Winawer Variation, Fingerslip Variation, Main Line",
+ "rnbqk2r/ppp1nppp/4p3/3p4/1b1PP3/8/PPPB1PPP/RN1QKBNR": "French Defense: Winawer Variation, Fingerslip Variation, Schwarz's Line",
+ "rnb1k1nr/pp3ppp/4p3/2pq4/1b1P4/2NB4/PPPB1PPP/R2QK1NR": "French Defense: Winawer Variation, Kondratiyev Variation",
+ "rnbqk1nr/ppp2ppp/4p3/3p4/1b1PP3/P1N5/1PP2PPP/R1BQKBNR": "French Defense: Winawer Variation, Winckelmann-Riemer Gambit",
+ "rnbqk1nr/ppp2ppp/4p3/3pP3/1b1P4/2N5/PPP2PPP/R1BQKBNR": "French Defense: Winawer Variation, Advance Variation",
+ "rnb1k1nr/pppq1ppp/4p3/3pP3/1b1P4/2N5/PPP2PPP/R1BQKBNR": "French Defense: Winawer Variation, Petrosian Variation",
+ "rnbqk1nr/pp3ppp/4p3/2ppP3/1b1P4/2N5/PPP2PPP/R1BQKBNR": "French Defense: Winawer Variation, Advance Variation",
+ "rnbqk1nr/pp3ppp/4p3/2ppP3/1b1P4/P1N5/1PP2PPP/R1BQKBNR": "French Defense: Winawer Variation, Advance Variation",
+ "rnbqk1nr/pp3ppp/4p3/3pP3/1P6/2p2N2/1PP2PPP/R1BQKB1R": "French Defense: Winawer Variation, Advance Variation",
+ "rnbqk1nr/pp3ppp/4p3/2ppP3/1b1P2Q1/2N5/PPP2PPP/R1B1KBNR": "French Defense: Winawer Variation, Advance Variation, Moscow Variation",
+ "rnbqk1nr/pp3ppp/4p3/2ppP3/1b1P4/2N5/PPPB1PPP/R2QKBNR": "French Defense: Winawer Variation, Bogoljubov Variation",
+ "rnbqk2r/pp2nppp/4p3/2ppP3/1b1P1P2/2N5/PPPB2PP/R2QKBNR": "French Defense: Winawer Variation, Bogoljubov Variation, Icelandic Defense",
+ "rnbqk1nr/pp3ppp/4p3/3pP3/1P6/2p5/1PP2PPP/R1BQKBNR": "French Defense: Winawer Variation, Maróczy-Wallis Variation",
+ "rnbqk1nr/pp3ppp/4p3/b1ppP3/3P4/P1N5/1PP2PPP/R1BQKBNR": "French Defense: Winawer Variation, Retreat Variation",
+ "rnbqk1nr/pp3ppp/4p3/b2pP3/1P1p4/P1N5/2P2PPP/R1BQKBNR": "French Defense: Winawer Variation, Retreat Variation, Armenian Line",
+ "rnbqk1nr/pp3ppp/4p3/2ppP3/3P4/P1P5/2P2PPP/R1BQKBNR": "French Defense: Winawer Variation, Advance Variation",
+ "rnb1k1nr/ppq2ppp/4p3/2ppP3/3P4/P1P5/2P2PPP/R1BQKBNR": "French Defense: Winawer Variation, Classical Variation",
+ "rnb1k1nr/pp3ppp/4p3/q1ppP3/3P4/P1P5/2P2PPP/R1BQKBNR": "French Defense: Winawer Variation, Portisch-Hook Variation",
+ "rnbqk2r/pp2nppp/4p3/2ppP3/3P4/P1P5/2P2PPP/R1BQKBNR": "French Defense: Winawer Variation, Advance Variation",
+ "rnbqk2r/pp2nppp/4p3/2ppP3/P2P4/2P5/2P2PPP/R1BQKBNR": "French Defense: Winawer Variation, Advance Variation",
+ "rnbqk2r/pp2nppp/4p3/2ppP3/3P2Q1/P1P5/2P2PPP/R1B1KBNR": "French Defense: Winawer Variation, Poisoned Pawn Variation",
+ "rnb1k1r1/ppq1np1Q/4p3/3pP3/3p4/P1P5/2P1NPPP/R1B1KB1R": "French Defense: Winawer Variation, Poisoned Pawn Variation, Main Line",
+ "rnb1k1r1/ppq1np1Q/4p3/3pP3/3p4/P1P5/2P2PPP/R1BK1BNR": "French Defense: Winawer Variation, Poisoned Pawn Variation, Paoli Variation",
+ "rnbqk2r/pp2nppp/4p3/2ppP3/3P4/P1P2N2/2P2PPP/R1BQKB1R": "French Defense: Winawer Variation, Positional Variation",
+ "rnbqkb1r/pppp1ppp/5n2/4p3/2B1P3/5P2/PPPP2PP/RNBQK1NR": "Barnes Opening: Walkerling",
+ "rnbqkbnr/pppp1ppp/8/4p3/4P3/8/PPPPKPPP/RNBQ1BNR": "Bongcloud Attack",
+ "rnbqkbnr/pppp1ppp/8/4p3/3PP3/8/PPP2PPP/RNBQKBNR": "Center Game",
+ "rnbqkbnr/pppp1ppp/8/4p3/2P1P3/8/PP1P1PPP/RNBQKBNR": "English Opening: The Whale",
+ "rnbqkbnr/pppp1ppp/8/4p3/4P3/8/PPPP1PPP/RNBQKBNR": "King's Pawn Game",
+ "rnbqkbnr/pppp1ppp/8/4p3/4P3/8/PPPPNPPP/RNBQKB1R": "King's Pawn Game: Alapin Opening",
+ "rnbqkbnr/ppp2ppp/8/3pp3/2P1P3/8/PP1P1PPP/RNBQKBNR": "King's Pawn Game: Bavarian Gambit",
+ "rnbqkbnr/ppp2ppp/8/3pp3/3PP3/8/PPP2PPP/RNBQKBNR": "King's Pawn Game: Beyer Gambit",
+ "rnbqkbnr/pppp2pp/8/4pp2/4P3/3P4/PPP2PPP/RNBQKBNR": "King's Pawn Game: Clam Variation, King's Gambit Reversed",
+ "rnbqk2r/pppp1ppp/5n2/2b1p3/4PP2/3P4/PPP3PP/RNBQKBNR": "King's Pawn Game: Clam Variation, Radisch Gambit",
+ "rnbqkbnr/pppp1ppp/8/4p3/4P3/5P2/PPPP2PP/RNBQKBNR": "King's Pawn Game: King's Head Opening",
+ "rnbqkb1r/pppp1ppp/5n2/4p3/4P3/2N2P2/PPPP2PP/R1BQKBNR": "King's Pawn Game: King's Head Opening",
+ "rnbqkbnr/pppp1ppp/8/4p3/4P3/3P4/PPP2PPP/RNBQKBNR": "King's Pawn Game: Leonardis Variation",
+ "rnbqkbnr/pppp1ppp/8/4p3/4P3/2P5/PP1P1PPP/RNBQKBNR": "King's Pawn Game: MacLeod Attack",
+ "rnbqkbnr/pppp2pp/8/4pp2/4P3/2P5/PP1P1PPP/RNBQKBNR": "King's Pawn Game: MacLeod Attack, Lasa Gambit",
+ "rnbqk1nr/ppp2ppp/3b4/3pp2Q/4P3/2P5/PP1P1PPP/RNB1KBNR": "King's Pawn Game: MacLeod Attack, Norwalde Gambit",
+ "rnbqkbnr/pppp1ppp/8/4p3/4P3/P7/1PPP1PPP/RNBQKBNR": "King's Pawn Game: Mengarini's Opening",
+ "rnbqkbnr/pppp1ppp/8/4p3/4P3/5Q2/PPPP1PPP/RNB1KBNR": "King's Pawn Game: Napoleon Attack",
+ "rn1qkbnr/pppb1ppp/3p4/4P3/4P3/8/PPP2PPP/RNBQKBNR": "King's Pawn Game: Philidor Gambit",
+ "rnbqkbnr/pppp1ppp/8/4p3/4P3/3B4/PPPP1PPP/RNBQK1NR": "King's Pawn Game: Tortoise Opening",
+ "rnbqkbnr/pppp1ppp/8/4p2Q/4P3/8/PPPP1PPP/RNB1KBNR": "King's Pawn Game: Wayward Queen Attack",
+ "rnbqkb1r/pppp1ppp/5n2/4p2Q/4P3/8/PPPP1PPP/RNB1KBNR": "King's Pawn Game: Wayward Queen Attack, Kiddie Countergambit",
+ "r1bqkb1r/ppp4p/2n2ppn/3pp3/2B1P3/3P1Q2/PPP1NPPP/RNB1K2R": "King's Pawn Game: Wayward Queen Attack, Mellon Gambit",
+ "r1bqkbnr/pp3ppp/2n5/4p3/8/3P4/PPP2PPP/RNBQKBNR": "King's Pawn Game: Weber Gambit",
+ "rnbqkbnr/pppp1ppp/8/4p3/4P3/1P6/P1PP1PPP/RNBQKBNR": "King's Pawn Opening",
+ "rnbqkb1r/pppp1ppp/5n2/4pQ2/4P3/8/PPPP1PPP/RNB1KBNR": "King's Pawn Opening: Speers",
+ "r1bqk2r/pppp1ppp/5n2/2b5/3nP3/5N2/PP2QPPP/RNB1KB1R": "King's Pawn Opening: Van Hooydoon Gambit",
+ "rnbqkbnr/pppp1ppp/8/1B2p3/4P3/8/PPPP1PPP/RNBQK1NR": "Portuguese Opening",
+ "rnbqk1nr/pppp1ppp/8/1Bb1p3/1P2P3/8/P1PP1PPP/RNBQK1NR": "Portuguese Opening: Miguel Gambit",
+ "rnbqkb1r/pppp1ppp/5n2/1B2p3/3PP3/8/PPP2PPP/RNBQK1NR": "Portuguese Opening: Portuguese Gambit",
+ "rnbqkbnr/pppp1ppp/8/8/3QP3/8/PPP2PPP/RNB1KBNR": "Center Game",
+ "rnbqkbnr/pppp1ppp/8/8/3pP3/8/PPP2PPP/RNBQKBNR": "Center Game Accepted",
+ "rnbqkbnr/pppp1ppp/8/8/3pPP2/8/PPP3PP/RNBQKBNR": "Center Game: Halasz-McDonnell Gambit",
+ "r1bqk1nr/pppp1ppp/2n5/2b5/3pPP2/2P2N2/PP4PP/RNBQKB1R": "Center Game: Halasz-McDonnell Gambit, Crocodile Variation",
+ "rnbqkbnr/pppp1ppp/8/8/3pP3/5N2/PPP2PPP/RNBQKB1R": "Center Game: Kieseritzky Variation",
+ "rnbqkbnr/pp1p1ppp/8/2p5/3pP3/5N2/PPP2PPP/RNBQKB1R": "Center Game: Kieseritzky Variation",
+ "rnbqkbnr/pp1p1ppp/8/2p5/2BpP3/5N2/PPP2PPP/RNBQK2R": "Center Game: Kieseritzky Variation",
+ "rnbqkbnr/p2p1ppp/8/1pp5/2BpP3/5N2/PPP2PPP/RNBQK2R": "Center Game: Kieseritzky Variation",
+ "rnbqk1nr/pppp1ppp/8/2b5/3pP3/2P2N2/PP3PPP/RNBQKB1R": "Center Game: Lanc-Arnold Gambit",
+ "rnbqk1nr/pppp1ppp/8/2b5/2B1P3/2p2N2/PP3PPP/RNBQK2R": "Center Game: Lanc-Arnold Gambit, Schippler Gambit",
+ "rnbqkbnr/pppp1ppp/8/8/3pP3/3B4/PPP2PPP/RNBQK1NR": "Center Game: Ross Gambit",
+ "rnbqkbnr/pppp1ppp/8/8/2BpP3/8/PPP2PPP/RNBQK1NR": "Center Game: von der Lasa Gambit",
+ "rnbqkbnr/pppp1ppp/8/8/3pP3/2P5/PP3PPP/RNBQKBNR": "Danish Gambit",
+ "rnbqkbnr/pppp1ppp/8/8/2B1P3/8/PB3PPP/RN1QK1NR": "Danish Gambit Accepted",
+ "rnb1kbnr/ppppqppp/8/8/2B1P3/8/PB3PPP/RN1QK1NR": "Danish Gambit Accepted: Chigorin Defense",
+ "rnbqkb1r/pppp1ppp/5n2/8/2B1P3/8/PB3PPP/RN1QK1NR": "Danish Gambit Accepted: Classical Defense",
+ "rnbqk1nr/pppp1ppp/8/8/1bB1P3/8/PB3PPP/RN1QK1NR": "Danish Gambit Accepted: Copenhagen Defense",
+ "rnbqkbnr/ppp2ppp/8/3p4/2B1P3/8/PB3PPP/RN1QK1NR": "Danish Gambit Accepted: Schlechter Defense",
+ "rnbqkb1r/ppppnppp/8/8/3pP3/2P5/PP3PPP/RNBQKBNR": "Danish Gambit Accepted: Svenonius Defense",
+ "rnbqkbnr/ppp2ppp/8/3p4/3pP3/2P5/PP3PPP/RNBQKBNR": "Danish Gambit Declined: Sorensen Defense",
+ "r1bqkb1r/pppp1ppp/2n2n2/8/4P3/4Q3/PPP2PPP/RNB1KBNR": "Center Game: Berger Variation",
+ "r1bqk1nr/ppppbppp/2n5/8/4P3/2P1Q3/PP3PPP/RNB1KBNR": "Center Game: Charousek Variation",
+ "r1bqkbnr/pppp1ppp/2n5/8/2Q1P3/8/PPP2PPP/RNB1KBNR": "Center Game: Hall Variation",
+ "r1bqr1k1/ppp2ppp/2np1n2/8/1bB1P3/2N1Q2N/PPPB1PPP/2KR3R": "Center Game: Kupreichik Variation",
+ "r1bqkbnr/pppp1ppp/2n5/8/3QP3/8/PPP2PPP/RNB1KBNR": "Center Game: Normal Variation",
+ "r1bqkbnr/pppp1ppp/2n5/8/4P3/4Q3/PPP2PPP/RNB1KBNR": "Center Game: Paulsen Attack Variation",
+ "r1bqkbnr/pppp2pp/2n5/5p2/4P3/4Q3/PPP2PPP/RNB1KBNR": "Center Game: l'Hermet Variation",
+ "rnbqkbnr/pppp1ppp/8/4p3/2B1P3/8/PPPP1PPP/RNBQK1NR": "Bishop's Opening",
+ "rnbqkbnr/p2p1ppp/2p5/1B2p3/4P3/8/PPPP1PPP/RNBQK1NR": "Bishop's Opening: Anderssen Gambit",
+ "rnbqk1nr/pppp1ppp/8/2b1p3/2B1P3/8/PPPP1PPP/RNBQK1NR": "Bishop's Opening: Boi Variation",
+ "rnbqkbnr/pppp2pp/8/4pp2/2B1P3/8/PPPP1PPP/RNBQK1NR": "Bishop's Opening: Calabrese Countergambit",
+ "rnbqkbnr/pppp2pp/8/4pp2/2B1P3/3P4/PPP2PPP/RNBQK1NR": "Bishop's Opening: Calabrese Countergambit, Jaenisch Variation",
+ "rnbqk1nr/pppp1ppp/8/8/2BPP2b/5N2/P1P4p/RNBQ1R1K": "Bishop's Opening: Four Pawns Gambit",
+ "rnbqkbnr/ppp2ppp/8/3pp3/2B1P3/8/PPPP1PPP/RNBQK1NR": "Bishop's Opening: Khan Gambit",
+ "rnbqk1nr/ppp2ppp/8/2bpp3/2B1P3/2P5/PP1P1PPP/RNBQK1NR": "Bishop's Opening: Lewis Countergambit",
+ "rnbqk2r/ppp2ppp/5n2/2bBp3/4P3/2P5/PP1P1PPP/RNBQK1NR": "Bishop's Opening: Lewis Countergambit",
+ "rnbqk2r/ppp2ppp/5n2/2bBp3/3PP3/2P5/PP3PPP/RNBQK1NR": "Bishop's Opening: Lewis Countergambit, Walker Variation",
+ "rnbqk1nr/pppp1ppp/8/2b1p3/2BPP3/8/PPP2PPP/RNBQK1NR": "Bishop's Opening: Lewis Gambit",
+ "r2qkbnr/pp3ppp/8/3pn3/8/8/PPP1NPPP/RNBQK2R": "Bishop's Opening: Lisitsyn Variation",
+ "r1bqk2r/pppp1ppp/2n2n2/2b1p3/2B1PP2/2P5/PP1PQ1PP/RNB1K1NR": "Bishop's Opening: Lopez Gambit",
+ "rnbqk1nr/pppp1ppp/8/2b1p3/2B1P3/8/PPPPQPPP/RNB1K1NR": "Bishop's Opening: Lopez Variation",
+ "rnbqk2r/pppp1ppp/5n2/2b1p3/2B1PP2/8/PPPPQ1PP/RNB1K1NR": "Bishop's Opening: Lopez Variation, Lopez Gambit",
+ "rnbqk1nr/pppp1ppp/8/2b1p3/1PB1P3/8/P1PP1PPP/RNBQK1NR": "Bishop's Opening: McDonnell Gambit",
+ "rnbqk1nr/pppp1ppp/8/4p3/1bB1P3/2P5/P2P1PPP/RNBQK1NR": "Bishop's Opening: McDonnell Gambit, La Bourdonnais-Denker Gambit",
+ "rnbqk1nr/pppp1ppp/8/4p3/1bB1PP2/8/P1PP2PP/RNBQK1NR": "Bishop's Opening: McDonnell Gambit, McDonnell Double Gambit",
+ "rnbqkbnr/pp1p1ppp/2p5/4p3/2B1P3/8/PPPP1PPP/RNBQK1NR": "Bishop's Opening: Philidor Counterattack",
+ "rnbqk1nr/pppp1ppp/8/2b1p3/2B1P3/2P5/PP1P1PPP/RNBQK1NR": "Bishop's Opening: Philidor Variation",
+ "rnbq1rk1/ppp2ppp/5P2/2b4Q/2pp4/2P5/PP3PPP/RNB1K1NR": "Bishop's Opening: Pratt Variation",
+ "rnbqk1nr/pppp1ppp/8/2b1p3/2B1PP2/8/PPPP2PP/RNBQK1NR": "Bishop's Opening: Stein Gambit",
+ "rnbqkbnr/p1pp2pp/8/1B2pp2/4P3/8/PPPP1PPP/RNBQK1NR": "Bishop's Opening: Thorold Gambit",
+ "rnb1k1nr/pppp1ppp/8/2b1p1q1/2B1P3/2P5/PP1P1PPP/RNBQK1NR": "Bishop's Opening: del Rio Variation",
+ "rnbqkb1r/pppp1ppp/5n2/4p3/2B1P3/8/PPPP1PPP/RNBQK1NR": "Bishop's Opening: Berlin Defense",
+ "rnbqkb1r/pppp1ppp/5n2/4p3/2B1PP2/8/PPPP2PP/RNBQK1NR": "Bishop's Opening: Berlin Defense, Greco Gambit",
+ "rnbq1rk1/ppppbppp/5n2/4p3/2B1P3/3P1N2/PPP2PPP/RNBQK2R": "Bishop's Opening: Kitchener Folly",
+ "r1bqk2r/pppp1ppp/2n2n2/2b1p3/1PB1P3/5P2/P1PPN1PP/RNBQK2R": "Bishop's Opening: Krejcik Gambit",
+ "rnbqkb1r/pppp1ppp/8/4p3/2B1n3/2N5/PPPP1PPP/RNBQK2R": "Bishop's Opening: Pachman Gambit",
+ "rnbqkb1r/pppp1ppp/5n2/4p3/2BPP3/8/PPP2PPP/RNBQK1NR": "Bishop's Opening: Ponziani Gambit",
+ "rnb1k2r/ppp1qppp/5n2/3P4/1bBp4/2P2N2/PP3PPP/RNBQK2R": "Bishop's Opening: Urusov Gambit, Panov Variation",
+ "r1bqkb1r/pppp1ppp/2n2n2/4p3/2B1P3/2NP4/PPP2PPP/R1BQK1NR": "Bishop's Opening: Vienna Hybrid",
+ "rnbqkb1r/pppp1ppp/5n2/8/2BpP3/2P5/PP3PPP/RNBQK1NR": "Bishop's Opening: Warsaw Gambit",
+ "r1bqkbnr/pppp1ppp/2n5/4p3/4PP2/2N5/PPPP2PP/R1BQKBNR": "Vienna Gambit, with Max Lange Defense",
+ "r1bqk1nr/ppppbppp/2n5/8/4Pp2/2N2N2/PPPP2PP/R1BQKB1R": "Vienna Gambit, with Max Lange Defense: Cunningham Defense",
+ "r1bqkbnr/pppp1p1p/2n5/6N1/4PppP/2N5/PPPP2P1/R1BQKB1R": "Vienna Gambit, with Max Lange Defense: Hamppe-Allgaier Gambit",
+ "r1bqkbnr/ppp2p1p/2np4/6N1/4PppP/2N5/PPPP2P1/R1BQKB1R": "Vienna Gambit, with Max Lange Defense: Hamppe-Allgaier Gambit, Alapin Variation",
+ "r1bq1bnr/pppp1k2/2n4p/8/3PPppP/2N5/PPP3P1/R1BQKB1R": "Vienna Gambit, with Max Lange Defense: Hamppe-Allgaier Gambit, Thorold Variation",
+ "r1bqkbnr/pppp1p1p/2n5/8/2B1Pp2/2N2p2/PPPP2PP/R1BQ1RK1": "Vienna Gambit, with Max Lange Defense: Hamppe-Muzio Gambit",
+ "r1bqkbnr/pppp1ppp/2n5/8/4Pp2/2N2N2/PPPP2PP/R1BQKB1R": "Vienna Gambit, with Max Lange Defense: Knight Variation",
+ "r1bqkbnr/pppp1p1p/2n5/6p1/3PPp2/2N2N2/PPP3PP/R1BQKB1R": "Vienna Gambit, with Max Lange Defense: Pierce Gambit",
+ "r1bqk1nr/ppp2ppp/2np4/2b1P3/4P3/2N5/PPPP2PP/R1BQKBNR": "Vienna Gambit, with Max Lange Defense: Quelle Gambit",
+ "r1bqkbnr/pppp1ppp/2n5/8/3PPp2/2N5/PPP3PP/R1BQKBNR": "Vienna Gambit, with Max Lange Defense: Steinitz Gambit",
+ "r1b1kbnr/p1pp1ppp/1pn5/8/3PPp1q/2N5/PPP1K1PP/R1BQ1BNR": "Vienna Gambit, with Max Lange Defense: Steinitz Gambit, Fraser-Minckwitz Defense",
+ "r1b1kbnr/pppp1ppp/2n5/8/3PPp1q/2N5/PPP1K1PP/R1BQ1BNR": "Vienna Gambit, with Max Lange Defense: Steinitz Gambit, Main Line",
+ "r1b1kbnr/ppp2ppp/2np4/8/3PPp1q/2N5/PPP1K1PP/R1BQ1BNR": "Vienna Gambit, with Max Lange Defense: Steinitz Gambit, Paulsen Defense",
+ "r1b1kbnr/pppp1p1p/2n5/6p1/3PPp1q/2N5/PPP1K1PP/R1BQ1BNR": "Vienna Gambit, with Max Lange Defense: Steinitz Gambit, Sörensen Defense",
+ "r1b1kbnr/ppp2ppp/2n5/3p4/3PPp1q/2N5/PPP1K1PP/R1BQ1BNR": "Vienna Gambit, with Max Lange Defense: Steinitz Gambit, Zukertort Defense",
+ "rnbqkbnr/pppp1ppp/8/4p3/4P3/2N5/PPPP1PPP/R1BQKBNR": "Vienna Game",
+ "rnbqk1nr/pppp1ppp/8/2b1p3/4P3/2N5/PPPP1PPP/R1BQKBNR": "Vienna Game: Anderssen Defense",
+ "r1bqkbnr/pppp1ppp/2n5/4p3/3PP3/2N5/PPP2PPP/R1BQKBNR": "Vienna Game: Fyfe Gambit",
+ "rnbqk1nr/pppp1ppp/8/2b1p3/4P1Q1/2N5/PPPP1PPP/R1B1KBNR": "Vienna Game: Giraffe Attack",
+ "rnbqk1nr/pppp1ppp/8/2b1p3/N3P3/8/PPPP1PPP/R1BQKBNR": "Vienna Game: Hamppe-Meitner Variation",
+ "r1bqkbnr/pppp1p1p/2n5/8/2B1Ppp1/2N2N2/PPPP2PP/R1BQ1RK1": "Vienna Game: Hamppe-Muzio Gambit",
+ "r1b1kbnr/pppp1p1p/5q2/4n3/2B1PQ2/2N5/PPPP2PP/R1B2RK1": "Vienna Game: Hamppe-Muzio, Dubois Variation",
+ "r1bqkbnr/pppp1ppp/2n5/4p3/4P3/2N5/PPPP1PPP/R1BQKBNR": "Vienna Game: Max Lange Defense",
+ "rnbqkbnr/ppp2ppp/3p4/4p3/4PP2/2N5/PPPP2PP/R1BQKBNR": "Vienna Game: Omaha Gambit",
+ "r1bqkbnr/pppp1ppp/2n5/4p3/4P3/2N3P1/PPPP1P1P/R1BQKBNR": "Vienna Game: Paulsen Variation",
+ "r1bqk2r/ppp2ppp/2n2n2/2bpp3/4P3/2N3P1/PPPPNPBP/R1BQK2R": "Vienna Game: Paulsen Variation",
+ "r1bqk1nr/pppp1pp1/2n5/2b1p3/4P2p/2N2NP1/PPPP1PBP/R1BQK2R": "Vienna Game: Paulsen Variation, Mariotti Gambit",
+ "r1bqkbnr/pppp2pp/2n5/4pp2/3PP3/2N5/PPP2PPP/R1BQKBNR": "Vienna Game: Philidor Countergambit",
+ "r2qkbnr/ppp2p1p/2P5/8/2BP1pb1/2N2p2/PPP3PP/R1BQ1RK1": "Vienna Game: Pierce Gambit, Rushmere Attack",
+ "r1b1k1nr/pppp1ppp/2n2q2/2bNp3/2B1P1Q1/8/PPPP1PPP/R1B1K1NR": "Vienna Game: Stanley Variation, Meitner-Mieses Gambit",
+ "rnbqk2r/pppp1ppp/5n2/4p3/1b2P1Q1/2N5/PPPP1PPP/R1B1KBNR": "Vienna Game: Zhuravlev Countergambit",
+ "rnbqkb1r/p1pp1ppp/5n2/1p2p3/2B1P3/2N5/PPPP1PPP/R1BQK1NR": "Bishop's Opening: Horwitz Gambit",
+ "rnbqk2r/pppp1ppp/5n2/2b1p3/2B1P3/2NP4/PPP2PPP/R1BQK1NR": "Bishop's Opening: Vienna Hybrid, Spielmann Attack",
+ "rnbqkb1r/pppp1ppp/5n2/4p3/4P3/2N5/PPPP1PPP/R1BQKBNR": "Vienna Game: Falkbeer Variation",
+ "rnbqkb1r/pppp1ppp/5n2/4p3/4P3/P1N5/1PPP1PPP/R1BQKBNR": "Vienna Game: Mengarini Variation",
+ "rnbqkb1r/pppp1ppp/5n2/4p3/4P3/2N3P1/PPPP1P1P/R1BQKBNR": "Vienna Game: Mieses Variation",
+ "rnbqkb1r/pp3ppp/2p2n2/3Pp3/8/2N3P1/PPPP1P1P/R1BQKBNR": "Vienna Game: Mieses Variation, Erben Gambit",
+ "r1bqk2r/ppp2ppp/2n2n2/2bPp3/8/2N3P1/PPPPNPBP/R1BQK2R": "Vienna Game: Paulsen Variation, Pollock Gambit",
+ "rnbqkb1r/pppp1ppp/5n2/4p3/2B1P3/2N5/PPPP1PPP/R1BQK1NR": "Vienna Game: Stanley Variation",
+ "rnbqk2r/p1pp1ppp/5n2/1pb1p3/2B1P3/2N5/PPPPNPPP/R1BQK2R": "Vienna Game: Stanley Variation, Eifel Gambit",
+ "rnbqk2r/pppp1ppp/5n2/4p3/1bB1P3/2N5/PPPP1PPP/R1BQK1NR": "Vienna Game: Stanley Variation, Reversed Spanish",
+ "rnbqkb1r/pppp1ppp/8/4p3/2B1n3/2N2N2/PPPP1PPP/R1BQK2R": "Bishop's Opening: Boden-Kieseritzky Gambit",
+ "rnbqkb1r/ppp2ppp/8/3pp3/2B1n3/2N2N2/PPPP1PPP/R1BQK2R": "Bishop's Opening: Boden-Kieseritzky Gambit, Lichtenhein Defense",
+ "r1bqkb1r/pppp1ppp/2nn4/4p2Q/3P4/1BN5/PPP2PPP/R1B1K1NR": "Vienna Game: Adams' Gambit",
+ "rnbqkb1r/pppp1ppp/8/4p3/2B1n3/2N5/PPPP1PPP/R1BQK1NR": "Vienna Game: Frankenstein-Dracula Variation",
+ "r1bqk2r/ppppbppp/2nn4/4N2Q/8/1BN5/PPPP1PPP/R1B1K2R": "Vienna Game: Stanley Variation, Alekhine Variation",
+ "N1bk1b1r/p2pq2p/1pnn2p1/3Qpp2/8/1B6/PPPP1PPP/R1B1K1NR": "Vienna Game: Stanley Variation, Frankenstein-Dracula Variation",
+ "rnbqk2r/ppppbppp/3n4/4p2Q/8/1BN5/PPPP1PPP/R1B1K1NR": "Vienna Game: Stanley Variation, Monster Declined",
+ "r1bqk2r/pppp1ppp/2n2n2/4p3/1bB1P3/2NP4/PPP1NPPP/R1BQK2R": "Bishop's Opening: Vienna Hybrid, Hromádka Variation",
+ "r1bqkb1r/pppp1ppp/2n5/4p3/2B1nP2/2N2N2/PPPP2PP/R1BQK2R": "Vienna Game: Stanley Variation, Bronstein Gambit",
+ "r1bqkb1r/pppp1ppp/2n2n2/4p3/2B1P3/2N5/PPPP1PPP/R1BQK1NR": "Vienna Game: Stanley Variation, Three Knights Variation",
+ "rnbqkb1r/ppp3pp/8/3pPp2/3Pn3/2N2Q2/PPP3PP/R1B1KBNR": "Vienna Game: Heyde Variation",
+ "rnbqkb1r/pppp1ppp/5n2/4p3/4PP2/2N5/PPPP2PP/R1BQKBNR": "Vienna Game: Vienna Gambit",
+ "rnbqkb1r/ppp3pp/8/3pPp2/4n3/2N2Q2/PPPP2PP/R1B1KBNR": "Vienna Game: Vienna Gambit, Bardeleben Variation",
+ "rnbqk2r/ppp1bppp/8/3pP3/4n3/2N2N2/PPPP2PP/R1BQKB1R": "Vienna Game: Vienna Gambit, Breyer Variation",
+ "rn1qkb1r/ppp2ppp/8/3pP3/4n1b1/2N2N2/PPPPQ1PP/R1B1KB1R": "Vienna Game: Vienna Gambit, Kaufmann Variation",
+ "rnbqkb1r/ppp2ppp/5n2/3pp3/4PP2/2N5/PPPP2PP/R1BQKBNR": "Vienna Game: Vienna Gambit, Main Line",
+ "rnbqkb1r/ppp2ppp/8/3pP3/4n3/2NP4/PPP3PP/R1BQKBNR": "Vienna Game: Vienna Gambit, Modern Variation",
+ "rnbqkb1r/ppp2ppp/8/3pP3/4n3/2N2Q2/PPPP2PP/R1B1KBNR": "Vienna Game: Vienna Gambit, Paulsen Attack",
+ "rnbqkb1r/ppp2ppp/5n2/3pp3/4PP2/2NP4/PPP3PP/R1BQKBNR": "Vienna Game: Vienna Gambit, Steinitz Variation",
+ "rnb1kb1r/ppp2ppp/8/3NP2q/8/3P1Nn1/PPP4P/R1BQKB1R": "Vienna Game: Vienna Gambit, Wurzburger Trap",
+ "rnbqkbnr/pppp1ppp/8/4p3/4PP2/8/PPPP2PP/RNBQKBNR": "King's Gambit",
+ "rnbqk1nr/pppp1ppp/8/2b1p3/4PP2/8/PPPP2PP/RNBQKBNR": "King's Gambit Declined: Classical Variation",
+ "rnbqk1nr/ppp2ppp/3p4/2b1p3/4PP2/2P2N2/PP1P2PP/RNBQKB1R": "King's Gambit Declined: Classical Variation",
+ "rn1qk1nr/ppp2ppp/8/2b1p3/Q3P1b1/2P2N2/PP1P2PP/RNB1KB1R": "King's Gambit Declined: Classical Variation, Euwe Attack",
+ "rnbqk1nr/ppp2ppp/3p4/2b1p3/1P2PP2/5N2/P1PP2PP/RNBQKB1R": "King's Gambit Declined: Classical Variation, Rotlewi Countergambit",
+ "rnbqk1nr/ppp3pp/3p4/2b1pp2/4PP2/2P2N2/PP1P2PP/RNBQKB1R": "King's Gambit Declined: Classical Variation, Rubinstein Countergambit",
+ "r1bqk1nr/pppn1ppp/3p4/2b1p3/4PP2/2N2N2/PPPP2PP/R1BQKB1R": "King's Gambit Declined: Classical, Hanham Variation",
+ "rnbqk1nr/ppp3pp/8/2b2p2/2BpP3/2P2N2/PP4PP/RNBQK2R": "King's Gambit Declined: Classical, Réti Variation",
+ "rnbqk1nr/ppp2ppp/3p4/2b1P3/4P3/5N2/PPPP2PP/RNBQKB1R": "King's Gambit Declined: Classical, Soldatenkov Variation",
+ "r2qk2r/ppp2ppp/2np1n2/2b5/2B1Pp2/2NP1Q1P/PPP3P1/R1B1K2R": "King's Gambit Declined: Classical, Svenonius Variation",
+ "r1bqkbnr/pppp1p2/2n4p/4p1P1/4P3/5N2/PPPP2PP/RNBQKB1R": "King's Gambit Declined: Hobbs-Zilbermints Gambit",
+ "rnb1kbnr/ppppqppp/8/4p3/4PP2/6P1/PPPP3P/RNBQKBNR": "King's Gambit Declined: Keene Defense",
+ "rnb1kbnr/pppp1ppp/8/4p3/4PP1q/8/PPPP2PP/RNBQKBNR": "King's Gambit Declined: Keene's Defense",
+ "rnb1kbnr/pppp1ppp/8/4p3/4PP1q/6P1/PPPP3P/RNBQKBNR": "King's Gambit Declined: Keene's Defense",
+ "rnbqkbnr/pp1p1ppp/8/2p1p3/4PP2/8/PPPP2PP/RNBQKBNR": "King's Gambit Declined: Mafia Defense",
+ "r1bqkbnr/pppp2pp/2n5/4pp2/4PP2/5N2/PPPP2PP/RNBQKB1R": "King's Gambit Declined: Miles Defense",
+ "rnb1kbnr/pppp1ppp/5q2/4p3/4PP2/8/PPPP2PP/RNBQKBNR": "King's Gambit Declined: Norwalde Variation",
+ "rnb1k1nr/pppp1ppp/8/4p3/1bB1Pq2/2N2N2/PPPP2PP/R1BQK2R": "King's Gambit Declined: Norwalde Variation, Bücker Gambit",
+ "rnb1kbnr/pppp1ppp/8/4p3/3PPq2/2N5/PPP3PP/R1BQKBNR": "King's Gambit Declined: Norwalde Variation, Schubert Variation",
+ "rnbqkbnr/pppp2pp/8/4pp2/4PP2/8/PPPP2PP/RNBQKBNR": "King's Gambit Declined: Panteldakis Countergambit",
+ "rnb1kbnr/pppp2pp/8/4pP2/5P1q/8/PPPP2PP/RNBQKBNR": "King's Gambit Declined: Panteldakis Countergambit, Greco Variation",
+ "rnb1kbnr/ppppq2p/6P1/7Q/5p2/8/PPPP2PP/RNBK1BNR": "King's Gambit Declined: Panteldakis Countergambit, Pawn Sacrifice Line",
+ "rnbqk1nr/pppp2pp/8/2b1pP2/5P2/8/PPPP2PP/RNBQKBNR": "King's Gambit Declined: Panteldakis Countergambit, Schiller's Defense",
+ "rnbq1bnr/ppppk1pp/8/5P1Q/5p2/8/PPPP2PP/RNB1KBNR": "King's Gambit Declined: Panteldakis Countergambit, Shirazi Line",
+ "rnbqk1nr/ppp3pp/3b4/3p1P2/3P1p2/3B1N2/PPP3PP/RNBQK2R": "King's Gambit Declined: Panteldakis Countergambit, Symmetrical Variation",
+ "rnbqkb1r/pppp1ppp/5n2/4p3/4PP2/8/PPPP2PP/RNBQKBNR": "King's Gambit Declined: Petrov's Defense",
+ "r1bqkbnr/pppp1ppp/2n5/4p3/4PP2/8/PPPP2PP/RNBQKBNR": "King's Gambit Declined: Queen's Knight Defense",
+ "rnbqk1nr/pppp1p1p/8/2b1p1p1/4PP2/5N2/PPPP2PP/RNBQKB1R": "King's Gambit Declined: Senechaud Countergambit",
+ "r1bqkbnr/pppp2pp/2n2p2/4P3/4P3/8/PPPP2PP/RNBQKBNR": "King's Gambit Declined: Soller-Zilbermints Gambit",
+ "rnbqkbnr/pppp1p1p/8/4p1p1/4PP2/8/PPPP2PP/RNBQKBNR": "King's Gambit Declined: Zilbermints Double Countergambit",
+ "r1bqkbnr/pppp1p1p/2n5/4p1p1/4PP2/5N2/PPPP2PP/RNBQKB1R": "King's Gambit Declined: Zilbermints Double Gambit",
+ "rnbqkbnr/ppp2ppp/8/3pp3/4PP2/8/PPPP2PP/RNBQKBNR": "King's Gambit Declined: Falkbeer Countergambit",
+ "rnbqkbnr/ppp2ppp/8/3Pp3/5P2/8/PPPP2PP/RNBQKBNR": "King's Gambit Declined: Falkbeer Countergambit Accepted",
+ "rnbqkbnr/ppp2ppp/8/1B1P4/4pP2/8/PPPP2PP/RNBQK1NR": "King's Gambit Declined: Falkbeer Countergambit, Anderssen Attack",
+ "rnbqkbnr/ppp2ppp/8/3pp3/4PP2/5N2/PPPP2PP/RNBQKB1R": "King's Gambit Declined: Falkbeer Countergambit, Blackburne Attack",
+ "rnbqkbnr/ppp2ppp/8/3P4/4pP2/3P4/PPP3PP/RNBQKBNR": "King's Gambit Declined: Falkbeer Countergambit, Charousek Gambit",
+ "rnbqk2r/ppp2ppp/5n2/3P4/1b3P2/2NPp3/PPPB2PP/R2QKBNR": "King's Gambit Declined: Falkbeer Countergambit, Charousek Gambit, Morphy Defense",
+ "rnbqkbnr/ppp2ppp/8/3pp3/3PPP2/8/PPP3PP/RNBQKBNR": "King's Gambit Declined: Falkbeer Countergambit, Hinrichsen Gambit",
+ "rnbqk1nr/ppp2ppp/8/2bPp3/5P2/8/PPPP2PP/RNBQKBNR": "King's Gambit Declined: Falkbeer Countergambit, Miles Gambit",
+ "rnbqkbnr/ppp2ppp/8/3pp3/4PP2/2N5/PPPP2PP/R1BQKBNR": "King's Gambit Declined: Falkbeer Countergambit, Milner-Barry Variation",
+ "rnbqkbnr/ppp2ppp/8/3P4/5p2/8/PPPP2PP/RNBQKBNR": "King's Gambit Declined: Falkbeer Countergambit, Modern Transfer",
+ "rnbqkbnr/pp3ppp/2p5/3Pp3/5P2/8/PPPP2PP/RNBQKBNR": "King's Gambit Declined: Falkbeer Countergambit, Nimzowitsch-Marshall Countergambit",
+ "rnbqk1nr/pp3ppp/2P5/2b1p3/5P2/8/PPPP2PP/RNBQKBNR": "King's Gambit Declined: Falkbeer Countergambit, Pickler Gambit",
+ "rnbqkb1r/ppp2ppp/5n2/3P4/4pP2/2N5/PPPPQ1PP/R1B1KBNR": "King's Gambit Declined: Falkbeer Countergambit, Rubinstein Variation",
+ "rnbqkbnr/ppp2ppp/8/3P4/4pP2/8/PPPP2PP/RNBQKBNR": "King's Gambit Declined: Falkbeer Countergambit, Staunton Line",
+ "rnbqkbnr/ppp2ppp/8/4p3/4NP2/8/PPPP2PP/R1BQKBNR": "Van Geet Opening: Grünfeld Defense, Steiner Gambit",
+ "rnb1k2r/ppp2ppp/8/3q4/4nP2/8/PPPNQbPP/RNBK1B1R": "King's Gambit Declined: Falkbeer Countergambit, Alapin Variation",
+ "rnbqkb1r/ppp2ppp/8/3P4/4nP2/8/PPP1Q1PP/RNB1KBNR": "King's Gambit Declined: Falkbeer Countergambit, Charousek Gambit",
+ "rnbqkb1r/ppp2ppp/5n2/3P4/4PP2/8/PPP3PP/RNBQKBNR": "King's Gambit Declined: Falkbeer Countergambit, Charousek Gambit Accepted",
+ "rnbqkb1r/ppp2ppp/5n2/3P4/4pP2/3P4/PPPN2PP/R1BQKBNR": "King's Gambit Declined: Falkbeer Countergambit, Charousek Gambit, Keres Variation",
+ "rn1qk2r/ppp2ppp/8/2bP1b2/4nP2/5N2/PPP1Q1PP/RNB1KB1R": "King's Gambit Declined: Falkbeer Countergambit, Charousek Gambit, Main Line",
+ "rnbqkb1r/ppp2ppp/5n2/3P4/4pP2/3P4/PPP1Q1PP/RNB1KBNR": "King's Gambit Declined: Falkbeer Countergambit, Charousek Gambit, Old Line",
+ "rnb1kb1r/ppp3pp/8/3q1p2/4nPP1/8/PPPNQ2P/R1B1KBNR": "King's Gambit Declined: Falkbeer Countergambit, Charousek Variation",
+ "rn1q1rk1/ppp2ppp/8/2bP1b2/4nPP1/5N2/PPP1Q2P/RNB1KB1R": "King's Gambit Declined: Falkbeer Countergambit, Tarrasch Variation",
+ "rnbqkbnr/pppp1ppp/8/8/4Pp2/8/PPPP2PP/RNBQKBNR": "King's Gambit Accepted",
+ "rnbqkbnr/pppp1ppp/8/8/4Pp2/8/PPPPQ1PP/RNB1KBNR": "King's Gambit Accepted: Basman Gambit",
+ "rnbqkbnr/pppp1ppp/8/8/2B1Pp2/8/PPPP2PP/RNBQK1NR": "King's Gambit Accepted: Bishop's Gambit",
+ "rnbqkbnr/pppp1p1p/8/6p1/2B1Pp2/8/PPPP2PP/RNBQK1NR": "King's Gambit Accepted: Bishop's Gambit, Anderssen Defense",
+ "rnbqkbnr/pp3ppp/2p5/3B4/4Pp2/8/PPPP2PP/RNBQK1NR": "King's Gambit Accepted: Bishop's Gambit, Anderssen Variation",
+ "rnbqkb1r/ppp2ppp/5n2/3B4/4Pp2/8/PPPP2PP/RNBQK1NR": "King's Gambit Accepted: Bishop's Gambit, Bledow Countergambit",
+ "rnbqkbnr/ppp2ppp/8/3p4/2B1Pp2/8/PPPP2PP/RNBQK1NR": "King's Gambit Accepted: Bishop's Gambit, Bledow Variation",
+ "r1b1kbnr/pppp1ppp/2n5/8/2B1Pp1q/8/PPPP2PP/RNBQ1KNR": "King's Gambit Accepted: Bishop's Gambit, Boden Variation",
+ "rnbqkb1r/pp1p1ppp/2p2n2/8/2B1Pp2/2N5/PPPP2PP/R1BQK1NR": "King's Gambit Accepted: Bishop's Gambit, Bogoljubov Defense",
+ "rnbqkb1r/pppp1ppp/5n2/8/2B1Pp2/2N5/PPPP2PP/R1BQK1NR": "King's Gambit Accepted: Bishop's Gambit, Bogoljubov Variation",
+ "rnb1k1nr/ppp2ppp/3b4/3B4/4Pp1q/8/PPPP2PP/RNBQ1KNR": "King's Gambit Accepted: Bishop's Gambit, Boren-Svenonius Variation",
+ "rnb1kbnr/p1pp1ppp/8/1p6/2B1Pp1q/8/PPPP2PP/RNBQ1KNR": "King's Gambit Accepted: Bishop's Gambit, Bryan Countergambit",
+ "rnb1kbnr/ppp2p1p/8/3B2p1/4Pp1q/6P1/PPPP3P/RNBQ1KNR": "King's Gambit Accepted: Bishop's Gambit, Chigorin's Attack",
+ "rnb1k2r/ppppnpbp/8/6p1/2BPPp1q/2N5/PPP3PP/R1BQ1KNR": "King's Gambit Accepted: Bishop's Gambit, Classical Defense",
+ "rnb1kbnr/pppp1p1p/8/6p1/2B1Pp1q/5Q2/PPPP2PP/RNB2KNR": "King's Gambit Accepted: Bishop's Gambit, Classical Defense, Cozio Attack",
+ "rnbqkb1r/pppp1ppp/5n2/8/2B1Pp2/8/PPPP2PP/RNBQK1NR": "King's Gambit Accepted: Bishop's Gambit, Cozio Defense",
+ "rnb1kbnr/ppp2ppp/3p4/8/2B1Pp1q/8/PPPP2PP/RNBQ1KNR": "King's Gambit Accepted: Bishop's Gambit, Cozio Variation",
+ "rnb1kb1r/pppp1ppp/5n2/8/2B1Pp1q/8/PPPP2PP/RNBQ1KNR": "King's Gambit Accepted: Bishop's Gambit, First Jaenisch Variation",
+ "rnb1k1nr/pppp1pbp/8/6p1/2B1P2q/2N2Qp1/PPPP3P/R1B2KNR": "King's Gambit Accepted: Bishop's Gambit, Fraser Variation",
+ "rnbqkbnr/pppp2pp/8/5p2/2B1Pp2/8/PPPP2PP/RNBQK1NR": "King's Gambit Accepted: Bishop's Gambit, Gianutio Gambit",
+ "rnb1k1nr/pppp1ppp/8/2b5/2B1Pp1q/8/PPPP2PP/RNBQ1KNR": "King's Gambit Accepted: Bishop's Gambit, Greco Variation",
+ "rnb1k1nr/ppp2pbp/3p4/4P1p1/2BP1p1q/2N5/PPP3PP/R1BQ1KNR": "King's Gambit Accepted: Bishop's Gambit, Grimm Attack",
+ "rnbqkbnr/p1pp1ppp/8/1p6/2B1Pp2/8/PPPP2PP/RNBQK1NR": "King's Gambit Accepted: Bishop's Gambit, Kieseritzky Gambit",
+ "rnbqkbnr/pp1p1ppp/2p5/8/2B1Pp2/8/PPPP2PP/RNBQK1NR": "King's Gambit Accepted: Bishop's Gambit, Lopez Defense",
+ "rnb1kbnr/pppp1p1p/8/6p1/2B1Pp1q/8/PPPP2PP/RNBQ1KNR": "King's Gambit Accepted: Bishop's Gambit, Lopez Variation",
+ "r1bqkbnr/pppp1ppp/2n5/8/2B1Pp2/8/PPPP2PP/RNBQK1NR": "King's Gambit Accepted: Bishop's Gambit, Maurian Defense",
+ "rnb1k2r/ppppnpbp/8/6p1/2BPPp1q/2N3P1/PPP4P/R1BQ1KNR": "King's Gambit Accepted: Bishop's Gambit, McDonnell Attack",
+ "rnb1k1nr/pppp1pbp/8/6p1/2B1Pp1q/2N3P1/PPPP3P/R1BQ1KNR": "King's Gambit Accepted: Bishop's Gambit, McDonnell Attack",
+ "rnbqk2r/pppp1ppp/5n2/4P3/1bB2p2/2N5/PPPP2PP/R1BQK1NR": "King's Gambit Accepted: Bishop's Gambit, Paulsen Attack",
+ "rnbqkb1r/ppppnppp/8/8/2B1Pp2/8/PPPP2PP/RNBQK1NR": "King's Gambit Accepted: Bishop's Gambit, Steinitz Defense",
+ "rnbqkbnr/pppp1ppp/8/8/4Pp2/5Q2/PPPP2PP/RNB1KBNR": "King's Gambit Accepted: Breyer Gambit",
+ "rnbqkbnr/pppp1ppp/8/7Q/4Pp2/8/PPPP2PP/RNB1KBNR": "King's Gambit Accepted: Carrera Gambit",
+ "rnbqkbnr/pppp1ppp/8/8/4PpQ1/8/PPPP2PP/RNB1KBNR": "King's Gambit Accepted: Dodo Variation",
+ "rnbqkbnr/pppp1ppp/8/8/4Pp2/7N/PPPP2PP/RNBQKB1R": "King's Gambit Accepted: Eisenberg Variation",
+ "rnbqkbnr/pppp1ppp/8/8/4Pp2/6P1/PPPP3P/RNBQKBNR": "King's Gambit Accepted: Gaga Gambit",
+ "rnbk1bnr/pppp2pp/8/8/2B1pp1q/2N5/PPPPQ1PP/R1BK2NR": "King's Gambit Accepted: Lopez-Gianutio Countergambit, Hein Variation",
+ "rnbqkbnr/pppp1ppp/8/8/4Pp2/1P6/P1PP2PP/RNBQKBNR": "King's Gambit Accepted: Orsini Gambit",
+ "rnbqkbnr/pppp1ppp/8/8/4Pp2/8/PPPPN1PP/RNBQKB1R": "King's Gambit Accepted: Paris Gambit",
+ "rnbqkbnr/pppp1ppp/8/8/3PPp2/8/PPP3PP/RNBQKBNR": "King's Gambit Accepted: Polerio Gambit",
+ "rnbqkbnr/pppp1ppp/8/1B6/4Pp2/8/PPPP2PP/RNBQK1NR": "King's Gambit Accepted: Schurig Gambit, with Bb5",
+ "rnbqkbnr/pppp1ppp/8/8/4Pp2/3B4/PPPP2PP/RNBQK1NR": "King's Gambit Accepted: Schurig Gambit, with Bd3",
+ "rnbqkbnr/pppp1ppp/8/8/4Pp1P/8/PPPP2P1/RNBQKBNR": "King's Gambit Accepted: Stamma Gambit",
+ "rnbqkbnr/pppp1ppp/8/8/4Pp2/8/PPPPB1PP/RNBQK1NR": "King's Gambit Accepted: Tartakower Gambit",
+ "rnbqkbnr/ppp3pp/3p4/5P2/5p2/8/PPPPB1PP/RNBQK1NR": "King's Gambit Accepted: Tartakower Gambit, Weiss Defense",
+ "rnbqkbnr/pppp1ppp/8/8/4Pp2/8/PPPP1KPP/RNBQ1BNR": "King's Gambit Accepted: Tumbleweed",
+ "rnbqkbnr/pppp1pp1/7p/8/4Pp2/5N2/PPPP2PP/RNBQKB1R": "King's Gambit Accepted: Becker Defense",
+ "rnbqkb1r/ppppnppp/8/8/4Pp2/5N2/PPPP2PP/RNBQKB1R": "King's Gambit Accepted: Bonsch-Osmolovsky Variation",
+ "rnbqkbnr/ppp2ppp/3p4/8/4Pp2/5N2/PPPP2PP/RNBQKB1R": "King's Gambit Accepted: Fischer Defense",
+ "rnbqkbnr/ppp2ppp/3p4/8/1P2Pp2/5N2/P1PP2PP/RNBQKB1R": "King's Gambit Accepted: Fischer Defense, Schulder Gambit",
+ "rnbqkb1r/ppp2ppp/3p1n2/8/3PPp2/3B1N2/PPP3PP/RNBQK2R": "King's Gambit Accepted: Fischer Defense, Spanish Variation",
+ "rnbqkbnr/pppp2pp/8/5p2/4Pp2/5N2/PPPP2PP/RNBQKB1R": "King's Gambit Accepted: Gianutio Countergambit",
+ "rnbqk1nr/ppp2pb1/3p3p/6p1/2BPPp1P/5N2/PPP3P1/RNBQK2R": "King's Gambit Accepted: Greco Gambit",
+ "rnbqkbnr/pppp1p1p/8/6p1/4Pp2/5N2/PPPP2PP/RNBQKB1R": "King's Gambit Accepted: King's Knight's Gambit",
+ "rnbqkbnr/pppp1ppp/8/8/4Pp2/5N2/PPPP2PP/RNBQKB1R": "King's Gambit Accepted: King's Knight's Gambit",
+ "r1bqkbnr/pppp1ppp/2n5/8/4Pp2/5N2/PPPP2PP/RNBQKB1R": "King's Gambit Accepted: MacLeod Defense",
+ "rnbqkb1r/pppp1ppp/5n2/8/4Pp2/5N2/PPPP2PP/RNBQKB1R": "King's Gambit Accepted: Schallopp Defense",
+ "rnbqkb1r/pppp1ppp/8/4P2n/5pP1/5N2/PPPP3P/RNBQKB1R": "King's Gambit Accepted: Schallopp Defense, Tashkent Attack",
+ "rnbqkbnr/pppp1pp1/8/7p/4Pp2/5N2/PPPP2PP/RNBQKB1R": "King's Gambit Accepted: Wagenbach Defense",
+ "rnbqk1nr/ppppbppp/8/8/4Pp2/5N2/PPPP2PP/RNBQKB1R": "King's Gambit Accepted: Cunningham Defense",
+ "rnbqk1nr/pppp1ppp/8/8/2B1Pp1b/5NP1/PPPP3P/RNBQK2R": "King's Gambit Accepted: Cunningham Defense, Bertin Gambit",
+ "rnbqk1nr/pppp1ppp/8/8/2B1P2b/5N2/PPPP3p/RNBQ1R1K": "King's Gambit Accepted: Cunningham Defense, Bertin Gambit",
+ "rnbqk2r/ppppbppp/5n2/8/2B1Pp2/5N2/PPPP2PP/RNBQK2R": "King's Gambit Accepted: Cunningham Defense, McCormick Defense",
+ "rnbqkb1r/ppp2ppp/5n2/3P4/5p2/5N2/PPPP2PP/RNBQKB1R": "King's Gambit Accepted: Abbazia Defense",
+ "rnbqkb1r/p4ppp/2p5/3n4/2B2p2/5N2/PPPP2PP/RNBQK2R": "King's Gambit Accepted: Abbazia Defense, Main Line",
+ "rnbqkbnr/ppp2ppp/8/3p4/4Pp2/5N2/PPPP2PP/RNBQKB1R": "King's Gambit Accepted: Modern Defense",
+ "rnbqkbnr/ppp2ppp/8/3P4/5p2/5N2/PPPP2PP/RNBQKB1R": "King's Gambit Accepted: Modern Defense",
+ "rnbqkbnr/pppp1p1p/8/8/2B1PppP/5N2/PPPP2P1/RNBQK2R": "King's Gambit Accepted: Australian Gambit",
+ "r1bqkbnr/pppp1p1p/2n5/6p1/2B1Pp2/5N2/PPPP2PP/RNBQK2R": "King's Gambit Accepted: Blachly Gambit",
+ "rnb1kbnr/pppp1B1p/8/4q3/5p2/5Q2/PPPP2PP/RNB2RK1": "King's Gambit Accepted: Double Muzio Gambit",
+ "rnb1kbnr/pppp1p1p/8/3N4/2q1Pp2/5Q2/PPPP2PP/R1B2R1K": "King's Gambit Accepted: Double Muzio Gambit, Baldwin Gambit",
+ "rnb1kbnr/pppp1p1p/5q2/8/2B1Pp2/2N2Q2/PPPP2PP/R1B2RK1": "King's Gambit Accepted: Double Muzio Gambit, Bello Gambit",
+ "r1b1k2r/ppppnp1p/2n4b/4q3/2B2p2/2NP1Q2/PPPB2PP/4RRK1": "King's Gambit Accepted: Double Muzio Gambit, Paulsen Defense",
+ "rnb2bnr/pppp1k1p/5q2/8/4P3/2N1pQ2/PPP3PP/R4RK1": "King's Gambit Accepted: Double Muzio Gambit, Young Gambit",
+ "rnbqkbnr/pppp1p1p/8/8/2BPPpp1/5N2/PPP3PP/RNBQK2R": "King's Gambit Accepted: Ghulam-Kassim Gambit",
+ "rnbqkbnr/pppp1p1p/8/8/2BPPp2/5Q2/PPP3PP/RNB1K2R": "King's Gambit Accepted: Ghulam-Kassim Gambit",
+ "rnbqkbnr/pppp1p1p/8/6p1/2B1Pp2/5N2/PPPP2PP/RNBQK2R": "King's Gambit Accepted: King's Knight's Gambit",
+ "rnbqkbnr/pppp1p1p/8/8/2BPPB2/5p2/PPP3PP/RN1QK2R": "King's Gambit Accepted: Kotov Gambit",
+ "rnbqkbnr/pppp1B1p/8/8/4Ppp1/5N2/PPPP2PP/RNBQK2R": "King's Gambit Accepted: Lolli Gambit",
+ "rnb2bnr/pppp1k1p/5q2/8/4Pp2/2N1BQ2/PPP3PP/R4RK1": "King's Gambit Accepted: Lolli Gambit, Young Variation",
+ "rnbqkbnr/pppp1p1p/8/8/2B1Ppp1/2N2N2/PPPP2PP/R1BQK2R": "King's Gambit Accepted: McDonnell Gambit",
+ "rn1qkbnr/ppp2p2/3p4/6p1/2B1Ppp1/5N2/PPPP2P1/RNBQ1RK1": "King's Gambit Accepted: Middleton Countergambit",
+ "rnb1kbnr/ppppqp1p/8/8/2B1Pp2/5Q2/PPPP2PP/RNB2RK1": "King's Gambit Accepted: Muzio Gambit Accepted, From's Defense",
+ "rnbqkbnr/ppp2p1p/8/3p4/2B1Ppp1/5N2/PPPP2PP/RNBQ1RK1": "King's Gambit Accepted: Muzio Gambit, Brentano Defense",
+ "r1bqkbnr/pppp1p1p/2n5/8/2B1Pp2/5Q2/PPPP2PP/RNB2RK1": "King's Gambit Accepted: Muzio Gambit, Holloway Defense",
+ "rnb1kbnr/ppppqp1p/8/8/2B1Ppp1/5N2/PPPP2PP/RNBQ1RK1": "King's Gambit Accepted: Muzio Gambit, Kling and Horwitz Counterattack",
+ "rnb1kbnr/pppp1p1p/5q2/8/2B1Pp2/5Q2/PPPP2PP/RNB2RK1": "King's Gambit Accepted: Muzio Gambit, Sarratt Defense",
+ "rnbqkbnr/pppp1p1p/8/8/2B1Ppp1/5N2/PPPP2PP/RNBQ1RK1": "King's Gambit Accepted: Muzio Gambit, Wild Muzio Gambit",
+ "rnbqkbnr/pppp1p1p/8/6p1/4Pp2/2N2N2/PPPP2PP/R1BQKB1R": "King's Gambit Accepted: Quade Gambit",
+ "rnbqkbnr/pppp1p1p/8/6p1/3PPp2/5N2/PPP3PP/RNBQKB1R": "King's Gambit Accepted: Rosentreter Gambit",
+ "rnb1kbnr/pppp1p1p/8/4N3/3PPppq/6P1/PPP4P/RNBQKB1R": "King's Gambit Accepted: Rosentreter Gambit, Bird Gambit",
+ "rnbqkbnr/pppp1p1p/8/8/3PPpp1/2N2N2/PPP3PP/R1BQKB1R": "King's Gambit Accepted: Rosentreter Gambit, Sörensen Gambit",
+ "rnbqkbnr/pppp1p1p/8/8/3PPBp1/5N2/PPP3PP/RN1QKB1R": "King's Gambit Accepted: Rosentreter Gambit, Testa Variation",
+ "rnbqkbnr/pppp1p1p/8/4N3/2B1Ppp1/8/PPPP2PP/RNBQK2R": "King's Gambit Accepted: Salvio Gambit",
+ "rnb1kb1r/ppp2p1p/3p3n/4N3/2BPPppq/8/PPP3PP/RNBQ1K1R": "King's Gambit Accepted: Salvio Gambit, Anderssen Counterattack",
+ "rnb1kbnr/pppp1p1p/8/4N3/2B1P1pq/5p2/PPPP2PP/RNBQ1K1R": "King's Gambit Accepted: Salvio Gambit, Cochrane Gambit",
+ "rnb1kb1r/pppp1p1p/5n2/4N3/2B1Pppq/8/PPPP2PP/RNBQ1K1R": "King's Gambit Accepted: Salvio Gambit, Santa Maria Defense",
+ "rnb1kb1r/pppp1p1p/7n/4N3/2B1Pppq/8/PPPP2PP/RNBQ1K1R": "King's Gambit Accepted: Salvio Gambit, Silberschmidt Defense",
+ "r1b1kbnr/pppp1p1p/2n5/4N3/2B1Pppq/8/PPPP2PP/RNBQ1K1R": "King's Gambit Accepted: Salvio Gambit, Viennese Variation",
+ "rnb1kb1r/pppp1p1p/7n/4N3/2BPP1pq/5p2/PPP3PP/RNBQ1K1R": "King's Gambit Accepted: Silberschmidt Gambit",
+ "rnbqkbnr/pppp1p1p/8/4N3/3PPpp1/8/PPP3PP/RNBQKB1R": "King's Gambit Accepted: Sörensen Gambit",
+ "rnbqk1nb/pp3p2/2pp4/4N1p1/2BPPp2/2N5/PPP3P1/R1BQK3": "King's Gambit Accepted: Greco Gambit",
+ "rnbqk1nr/pppp1pbp/8/6p1/2B1Pp2/5N2/PPPP2PP/RNBQ1RK1": "King's Gambit Accepted: Hanstein Gambit",
+ "rnbqk1nr/ppp2pbp/3p4/6p1/2BPPp2/2P2N2/PP4PP/RNBQK2R": "King's Gambit Accepted: Mayet Gambit",
+ "rnbqk1nr/pppp1pbp/8/6p1/2B1Pp1P/5N2/PPPP2P1/RNBQK2R": "King's Gambit Accepted: Philidor Gambit",
+ "rnbqk1nr/ppp2pb1/3p3p/6p1/2BPPp1P/3Q1N2/PPP3P1/RNB1K2R": "King's Gambit Accepted: Philidor Gambit, Schultz Variation",
+ "rnbqk1nr/pppp1pbp/8/6p1/2B1Pp2/5N2/PPPP2PP/RNBQK2R": "King's Gambit Accepted: Traditional Variation",
+ "rnbqkbnr/pppp1p1p/8/6N1/4PppP/8/PPPP2P1/RNBQKB1R": "King's Gambit Accepted: Allgaier Gambit",
+ "rnbq1bnr/pppp1k2/7p/8/3PPppP/8/PPP3P1/RNBQKB1R": "King's Gambit Accepted: Allgaier Gambit, Thorold Attack",
+ "rnbq1bnr/pppp1k2/7p/8/2B1PppP/8/PPPP2P1/RNBQK2R": "King's Gambit Accepted: Allgaier Gambit, Urusov Attack",
+ "rnbq1bnr/pppp1k2/7p/8/4PppP/2N5/PPPP2P1/R1BQKB1R": "King's Gambit Accepted: Allgaier, Blackburne Gambit",
+ "rnbq1bnr/ppp3k1/7p/4B3/2BPp1pP/8/PPP3P1/RN1QK2R": "King's Gambit Accepted: Allgaier, Cook Variation",
+ "rnbq3r/pppp1k2/3b1n1p/8/4PQ1P/8/PPPP2P1/RNB1KB1R": "King's Gambit Accepted: Allgaier, Horny Defense",
+ "rnbqkb1r/pppp1p1p/5n2/6N1/4PppP/8/PPPP2P1/RNBQKB1R": "King's Gambit Accepted: Allgaier, Schlechter Defense",
+ "rnbq1bnr/ppp3k1/7p/3B4/3PPppP/8/PPP3P1/RNBQK2R": "King's Gambit Accepted: Allgaier, Urusov Attack",
+ "rnbqkbnr/pppp1p1p/8/4N3/4PppP/8/PPPP2P1/RNBQKB1R": "King's Gambit Accepted: Kieseritzky Gambit",
+ "rnbqk2r/ppp2p1p/3b1n2/3PN3/2B2ppP/8/PPPP2P1/RNBQK2R": "King's Gambit Accepted: Kieseritzky Gambit, Anderssen Defense",
+ "rnbqk2r/ppp2p1p/3b4/3PN3/2BP1npP/8/PPP3P1/RN1QK2R": "King's Gambit Accepted: Kieseritzky Gambit, Anderssen-Cordel Gambit",
+ "rnbqkb1r/pppp1p1p/5n2/4N3/4PppP/8/PPPP2P1/RNBQKB1R": "King's Gambit Accepted: Kieseritzky Gambit, Berlin Defense",
+ "rnbqkb1r/pppp1p1p/5n2/4N3/3PPppP/8/PPP3P1/RNBQKB1R": "King's Gambit Accepted: Kieseritzky Gambit, Berlin Defense, Rubinstein Variation",
+ "rnbqkb1r/ppp2p1p/5n2/3p4/4PpNP/8/PPPP2P1/RNBQKB1R": "King's Gambit Accepted: Kieseritzky Gambit, Berlin Defense, de Riviere Variation",
+ "rnbqkbnr/ppp2p1p/8/3pN3/4PppP/8/PPPP2P1/RNBQKB1R": "King's Gambit Accepted: Kieseritzky Gambit, Brentano Defense",
+ "rnbqkb1r/ppp2p1p/5n2/3pN3/3PPBpP/8/PPP3P1/RN1QKB1R": "King's Gambit Accepted: Kieseritzky Gambit, Brentano Defense",
+ "rnbqkb1r/ppp2p1p/8/3pN3/3PnBpP/8/PPPN2P1/R2QKB1R": "King's Gambit Accepted: Kieseritzky Gambit, Brentano Defense, Caro Variation",
+ "rnbqkbnr/pppp1N2/7p/8/4PppP/8/PPPP2P1/RNBQKB1R": "King's Gambit Accepted: Kieseritzky Gambit, Cotter Gambit",
+ "rnbqkbnr/ppp2p1p/3p4/4N3/4PppP/8/PPPP2P1/RNBQKB1R": "King's Gambit Accepted: Kieseritzky Gambit, Kolisch Defense",
+ "rnbqkbnr/pppp1p2/8/4N2p/4PppP/8/PPPP2P1/RNBQKB1R": "King's Gambit Accepted: Kieseritzky Gambit, Long Whip",
+ "r1bqkbnr/pppp1p1p/2n5/4N3/4PppP/8/PPPP2P1/RNBQKB1R": "King's Gambit Accepted: Kieseritzky Gambit, Neumann Defense",
+ "rnbqk1nr/pppp1pbp/8/4N3/4PppP/8/PPPP2P1/RNBQKB1R": "King's Gambit Accepted: Kieseritzky Gambit, Paulsen Defense",
+ "rnbqk2r/ppp2pbp/5n2/3PN3/2B2ppP/8/PPPP2P1/RNBQK2R": "King's Gambit Accepted: Kieseritzky Gambit, Paulsen Defense Deferred",
+ "rnbqk2r/ppp2p1p/5n2/3Pb3/2B2ppP/8/PPPP2P1/RNBQ1RK1": "King's Gambit Accepted: Kieseritzky Gambit, Rice Gambit",
+ "rnb1kbnr/ppppqp1p/8/4N3/4PppP/8/PPPP2P1/RNBQKB1R": "King's Gambit Accepted: Kieseritzky Gambit, Rosenthal Defense",
+ "rnbqk1n1/pppp1p1r/7b/4N2p/2BPPppP/2N5/PPP3P1/R1BQK2R": "King's Gambit Accepted: Kieseritzky, Long Whip Defense, Jaenisch Variation",
+ "rnbqk1nr/ppppbp1p/8/4N3/4PppP/8/PPPP2P1/RNBQKB1R": "King's Gambit Accepted: Kieseritzky, Polerio Defense",
+ "rnbqk2r/ppp2p1p/3b1n2/3PN3/2B2ppP/8/PPPP2P1/RNBQ1RK1": "King's Gambit Accepted: Kieseritzky, Rice Gambit",
+ "rnb1kbnr/ppppq2p/8/4Np2/2BPPppP/8/PPP3P1/RNBQK2R": "King's Gambit Accepted: Kieseritzky, Salvio Defense, Cozio Variation",
+ "rnbqkbnr/pppp1p1p/8/6p1/4Pp1P/5N2/PPPP2P1/RNBQKB1R": "King's Gambit Accepted: King's Knight's Gambit",
+ "rnbqkbnr/ppp2ppp/8/3pp3/4P3/5N2/PPPP1PPP/RNBQKB1R": "Elephant Gambit",
+ "rnbqk1nr/ppp2ppp/3b4/3Pp3/8/5N2/PPPP1PPP/RNBQKB1R": "Elephant Gambit: Maróczy Gambit",
+ "rnbqkbnr/ppp2ppp/8/3P4/4p3/5N2/PPPP1PPP/RNBQKB1R": "Elephant Gambit: Paulsen Countergambit",
+ "rnb1kbnr/ppp2ppp/8/4N1q1/2B1p3/8/PPPP1PPP/RNBQK2R": "Elephant Gambit: Wasp Variation",
+ "rnb1kbnr/ppppqppp/8/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R": "Gunderam Defense",
+ "rnbqkbnr/pppp1ppp/8/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R": "King's Knight Opening",
+ "rnbqk1nr/pppp1ppp/8/2b1p3/4P3/5N2/PPPP1PPP/RNBQKB1R": "King's Pawn Game: Busch-Gass Gambit",
+ "r1bqk1nr/pppp1ppp/2n5/2b1N3/4P3/8/PPPP1PPP/RNBQKB1R": "King's Pawn Game: Busch-Gass Gambit, Chiodini Gambit",
+ "rnbqkbnr/pppp2pp/5p2/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R": "King's Pawn Game: Damiano Defense",
+ "rnb1kbnQ/ppppq2p/6p1/8/4P3/8/PPPP1PPP/RNB1KB1R": "King's Pawn Game: Damiano Defense, Damiano Gambit",
+ "rnb1kbnr/ppp1q1pp/5p2/3p4/4P3/5N2/PPPP1PPP/RNBQKB1R": "King's Pawn Game: Damiano Defense, Damiano Gambit, Chigorin Gambit",
+ "rnb1kbnr/ppppq1pp/8/4pp2/2B1P3/5N2/PPPP1PPP/RNBQK2R": "King's Pawn Game: Gunderam Defense, Gunderam Gambit",
+ "rnbqkbnr/pp1p1ppp/2p5/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R": "King's Pawn Game: Gunderam Gambit",
+ "rnb1kbnr/pppp1ppp/6q1/4p3/2B1P3/5N2/PPPP1PPP/RNBQ1RK1": "King's Pawn Game: La Bourdonnais Gambit",
+ "rnb1kbnr/pppp1ppp/5q2/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R": "King's Pawn Game: McConnell Defense",
+ "rnbqkbnr/pppp2pp/8/4pp2/4P3/5N2/PPPP1PPP/RNBQKB1R": "Latvian Gambit",
+ "rnbqkbnr/pppp2pp/8/4pP2/8/5N2/PPPP1PPP/RNBQKB1R": "Latvian Gambit Accepted",
+ "rnb1kbnr/ppp3pp/3p1q2/5p2/2NPP3/8/PPP2PPP/RNBQKB1R": "Latvian Gambit Accepted: Bilguer Variation",
+ "rnb1kbnr/ppp3pp/3p1q2/8/2NPp3/8/PPP1BPPP/RNBQK2R": "Latvian Gambit Accepted: Bronstein Attack",
+ "rnb1kbnr/ppp4p/3p1qp1/8/2NPp3/8/PPP1QPPP/RNB1KB1R": "Latvian Gambit Accepted: Bronstein Gambit",
+ "rnb1kbnr/pppp2pp/5q2/8/2N1p3/3P4/PPP2PPP/RNBQKB1R": "Latvian Gambit Accepted: Foltys Variation",
+ "rnb1kbnr/pppp2pp/5q2/5p2/2N1P3/8/PPPP1PPP/RNBQKB1R": "Latvian Gambit Accepted: Foltys-Leonhardt Variation",
+ "rnb1kbnr/pppp2pp/5q2/8/2N1p3/2N5/PPPP1PPP/R1BQKB1R": "Latvian Gambit Accepted: Leonhardt Variation",
+ "rnb1kbnr/pppp2pp/5q2/4Np2/3PP3/8/PPP2PPP/RNBQKB1R": "Latvian Gambit Accepted: Main Line",
+ "rnb1kbnr/ppp3pp/3p1q2/8/3Pp3/4N3/PPP2PPP/RNBQKB1R": "Latvian Gambit Accepted: Nimzowitsch Attack",
+ "rnb1kb1N/ppp3pp/5n2/3p4/2B1p3/8/PPPP1PqP/RNBQKR2": "Latvian Gambit: Behting Variation",
+ "rnbqkb1r/pppp2pp/5n2/4N3/2B1p3/8/PPPP1PPP/RNBQK2R": "Latvian Gambit: Corkscrew Countergambit",
+ "rnb1kb1N/ppp1q1pp/5n2/3p4/2B1p3/8/PPPP1PPP/RNBQK2R": "Latvian Gambit: Corkscrew Gambit",
+ "rnbqkbnr/pppp2pp/8/4pp2/2P1P3/5N2/PP1P1PPP/RNBQKB1R": "Latvian Gambit: Diepstraten Countergambit",
+ "r1bqkbnr/pppp2pp/2n5/4Np2/4P3/8/PPPP1PPP/RNBQKB1R": "Latvian Gambit: Fraser Defense",
+ "rnb1kbnr/ppppq1pp/8/4Np2/4P3/8/PPPP1PPP/RNBQKB1R": "Latvian Gambit: Greco Variation",
+ "rnbqkbnr/pppp2pp/8/4pp2/4P1P1/5N2/PPPP1P1P/RNBQKB1R": "Latvian Gambit: Lobster Gambit",
+ "rnbqkbnr/pppp2pp/8/4pp2/3PP3/5N2/PPP2PPP/RNBQKB1R": "Latvian Gambit: Mason Countergambit",
+ "rnbqkbnr/pppp2pp/8/4pp2/2B1P3/5N2/PPPP1PPP/RNBQK2R": "Latvian Gambit: Mayet Attack",
+ "rnbqkb1r/pppp2pp/5n2/4pp2/2B1P3/5N2/PPPP1PPP/RNBQK2R": "Latvian Gambit: Mayet Attack, Morgado Defense",
+ "rnb1kbnr/pppp2pp/8/4N3/2BPp3/8/PPP2PqP/RNBQK2R": "Latvian Gambit: Mayet Attack, Poisoned Pawn Variation",
+ "rnbqkbnr/ppp3pp/8/3pN3/2B1p3/8/PPPP1PPP/RNBQK2R": "Latvian Gambit: Mayet Attack, Polerio-Svedenborg Variation",
+ "rnbqkbnr/p1pp2pp/8/1p2pp2/2B1P3/5N2/PPPP1PPP/RNBQK2R": "Latvian Gambit: Mayet Attack, Strautins Gambit",
+ "rnbqkbnr/pppp2pp/8/4pp2/4P3/2N2N2/PPPP1PPP/R1BQKB1R": "Latvian Gambit: Mlotkowski Variation",
+ "rnbqkbnr/pppp2pp/8/4pp2/1P2P3/5N2/P1PP1PPP/RNBQKB1R": "Latvian Gambit: Senechaud Gambit",
+ "rnbqkbnr/ppp2ppp/3p4/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R": "Philidor Defense",
+ "rnbqkbnr/ppp2ppp/3p4/4p3/3PP3/5N2/PPP2PPP/RNBQKB1R": "Philidor Defense",
+ "rnbqkbnr/ppp2ppp/3p4/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R": "Philidor Defense",
+ "rnbqk1nr/ppp1bppp/3p4/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R": "Philidor Defense",
+ "r2qkbnr/pppn1ppp/3p4/4P3/4P1b1/5N2/PPP2PPP/RNBQKB1R": "Philidor Defense: Albin-Blackburne Gambit",
+ "r2q1rk1/pp2bppp/2npbn2/2p3B1/4P3/2N2N2/PPP1BPPP/R2QR1K1": "Philidor Defense: Berger Variation",
+ "rnbqkbnr/ppp2ppp/3p4/8/3pP3/2P2N2/PP3PPP/RNBQKB1R": "Philidor Defense: Bird Gambit",
+ "rn1qkbnr/pppb1ppp/3p4/8/3QP3/5N2/PPP2PPP/RNB1KB1R": "Philidor Defense: Boden Variation",
+ "rnbqkbnr/ppp2ppp/3p4/8/3pP3/5N2/PPP2PPP/RNBQKB1R": "Philidor Defense: Exchange Variation",
+ "rnbqkbnr/ppp2ppp/3p4/8/3NP3/8/PPP2PPP/RNBQKB1R": "Philidor Defense: Exchange Variation",
+ "rnbqkb1r/ppp2ppp/3p1n2/8/3NP3/8/PPP2PPP/RNBQKB1R": "Philidor Defense: Exchange Variation",
+ "r1bqkbnr/pppn1ppp/3p4/4p3/3PP3/5N2/PPP2PPP/RNBQKB1R": "Philidor Defense: Hanham Variation",
+ "r1bqkbnr/pp1n1ppp/2pp4/4p3/2BPP3/2P2N2/PP3PPP/RNBQK2R": "Philidor Defense: Hanham Variation, Delmar Variation",
+ "r1bqkbnr/pp1n1ppp/2pp4/4p3/2BPP3/5N2/PPP2PPP/RNBQ1RK1": "Philidor Defense: Hanham Variation, Krause Variation",
+ "r1bqkbnr/pp1n1ppp/2pp4/4p3/2BPP3/2N2N2/PPP2PPP/R1BQK2R": "Philidor Defense: Hanham Variation, Schlechter Variation",
+ "r1bqkbnr/ppp2ppp/1n1p4/4p3/2BPP3/5N2/PPP2PPP/RNBQK2R": "Philidor Defense: Hanham Variation, Sharp Variation",
+ "r1bqk1nr/pp1nbppp/2pp4/4P3/2B1P3/5N2/PPP2PPP/RNBQ1RK1": "Philidor Defense: Hanham Variation, Steiner Variation",
+ "r1bqkbnr/pp1n1ppp/2pp4/4p1N1/2BPP3/8/PPP2PPP/RNBQK2R": "Philidor Defense: Hanham, Kmoch Variation",
+ "rnbqkbnr/ppp2p1p/3p2p1/8/3NP3/8/PPP2PPP/RNBQKB1R": "Philidor Defense: Larsen Variation",
+ "r1bqkb1r/pppn1ppp/3p1n2/4p3/3PP3/2N2N2/PPP2PPP/R1BQKB1R": "Philidor Defense: Lion Variation",
+ "r1bqk2r/pppnbBpp/3p1n2/4p3/3PP3/2N2N2/PPP2PPP/R1BQK2R": "Philidor Defense: Lion Variation, Bishop Sacrifice",
+ "r1bqk2r/pppnbBpp/5n2/4p3/4P3/2N2N2/PPP2PPP/R1BQK2R": "Philidor Defense: Lion Variation, Delayed Bishop Sacrifice",
+ "r1bq2k1/pppnbrpp/3pNn2/4p3/3PP3/2N5/PPP2PPP/R1BQK2R": "Philidor Defense: Lion Variation, Forcing Line",
+ "r1bqk2r/pppnbpp1/3p1n1p/4p3/2BPP3/2N2N2/PPP2PPP/R1BQ1RK1": "Philidor Defense: Lion Variation, Lion's Claw, with Bc4 and h6",
+ "r1bqk2r/pp1nbppp/2pp1n2/4p3/3PP3/2N2N2/PPP1BPPP/R1BQ1RK1": "Philidor Defense: Lion Variation, Lion's Claw, with Be2 and c6",
+ "r1bqkb1r/pppn1ppp/3p1n2/4p3/3PP1P1/2N2N2/PPP2P1P/R1BQKB1R": "Philidor Defense: Lion Variation, Shirov Gambit",
+ "r1bq1rk1/pp1nbppp/2pp1n2/8/P1BpP3/2N2N2/1PP1QPPP/R1B2RK1": "Philidor Defense: Lion Variation, Sozin Variation",
+ "rnbqkbnr/ppp3pp/3p4/4pp2/2B1P3/5N2/PPPP1PPP/RNBQK2R": "Philidor Defense: Lopez Countergambit",
+ "rnbqkb1r/ppp3pN/3p3n/5p2/2BpP3/8/PPP2PPP/RNBQK2R": "Philidor Defense: Lopez Countergambit, Jaenisch Variation",
+ "rnbqkbnr/ppp2ppp/3p4/8/2BpP3/5N2/PPP2PPP/RNBQK2R": "Philidor Defense: Morphy Gambit",
+ "rnbqkb1r/ppp2ppp/3p1n2/4p3/3PP3/5N2/PPP2PPP/RNBQKB1R": "Philidor Defense: Nimzowitsch Variation",
+ "rnbqkb1r/ppp2ppp/3p1n2/4P3/4P3/5N2/PPP2PPP/RNBQKB1R": "Philidor Defense: Nimzowitsch Variation",
+ "rnbqkb1r/ppp2ppp/3p1n2/4p3/2BPP3/5N2/PPP2PPP/RNBQK2R": "Philidor Defense: Nimzowitsch Variation, Klein Variation",
+ "rnbqkb1r/ppp2ppp/3p4/3QP3/4n3/5N2/PPP2PPP/RNB1KB1R": "Philidor Defense: Nimzowitsch Variation, Rellstab Variation",
+ "rnbqkb1r/ppp2ppp/3p4/4P3/4n3/5N2/PPPN1PPP/R1BQKB1R": "Philidor Defense: Nimzowitsch Variation, Sokolsky Variation",
+ "r1bq1rk1/pppnbBpp/3p1n2/4p1N1/3PP3/2N5/PPP2PPP/R1BQK2R": "Philidor Defense: Nimzowitsch, Larobok Variation",
+ "rnbqkb1r/ppp2ppp/3p1n2/4p1N1/3PP3/8/PPP2PPP/RNBQKB1R": "Philidor Defense: Nimzowitsch, Locock Variation",
+ "rnbqkbnr/ppp2ppp/8/3P4/3N4/8/PPP2PPP/RNBQKB1R": "Philidor Defense: Paulsen Attack",
+ "rnbqkbnr/ppp3pp/3p4/4pp2/3PP3/5N2/PPP2PPP/RNBQKB1R": "Philidor Defense: Philidor Countergambit",
+ "rnbqk1nr/ppp3pp/4P3/2bp2N1/4p3/2N5/PPP2PPP/R1BQKB1R": "Philidor Defense: Philidor Countergambit, Berger Variation",
+ "rnbqkbnr/ppp3pp/3p4/4pp2/3PP3/2N2N2/PPP2PPP/R1BQKB1R": "Philidor Defense: Philidor Countergambit, Zukertort Variation",
+ "rnbqkbnr/ppp3pp/4P3/3p2N1/4p3/8/PPP2PPP/RNBQKB1R": "Philidor Defense: Philidor Countergambit, del Rio Attack",
+ "rn1qkbnr/pppb1ppp/3p4/4p3/3PP3/5N2/PPP2PPP/RNBQKB1R": "Philidor Defense: Philidor Gambit",
+ "rnbqk1nr/ppp1bppp/3p4/4p3/2B1P3/2P2N2/PP1P1PPP/RNBQK2R": "Philidor Defense: Steinitz Variation",
+ "rnbqkb1r/pppp1ppp/5n2/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R": "Russian Game",
+ "rnbqkb1r/pppp1ppp/5n2/4N3/4P3/8/PPPP1PPP/RNBQKB1R": "Russian Game",
+ "rnbqkb1r/ppp2ppp/3p1n2/4N3/4P3/8/PPPP1PPP/RNBQKB1R": "Russian Game",
+ "rnbqkb1r/ppp2ppp/3p1n2/8/4P3/5N2/PPPP1PPP/RNBQKB1R": "Russian Game",
+ "rnbqkb1r/ppp2ppp/3p4/8/4n3/5N2/PPPP1PPP/RNBQKB1R": "Russian Game",
+ "rnbqkb1r/ppp2ppp/3p4/8/3Pn3/5N2/PPP2PPP/RNBQKB1R": "Russian Game: Classical Attack",
+ "r2qk2r/ppp1b1pp/2n5/3p1p2/3Pn1b1/2PB1N2/PP1N1PPP/R1BQR1K1": "Russian Game: Classical Attack, Berger Variation",
+ "r1bqk2r/ppp1bppp/2n5/3p4/3Pn3/3B1N2/PPP2PPP/RNBQR1K1": "Russian Game: Classical Attack, Chigorin Variation",
+ "r1bqk2r/ppp1bppp/8/3P4/1n1Pn3/3B1N2/PP3PPP/RNBQ1RK1": "Russian Game: Classical Attack, Chigorin Variation, Browne Attack",
+ "r1bqk2r/ppp1bppp/8/3p4/1nPPn3/5N2/PP2BPPP/RNBQ1RK1": "Russian Game: Classical Attack, Chigorin Variation, Main Line",
+ "rnbqkb1r/ppp2ppp/3p1n2/8/3P4/5N2/PPP2PPP/RNBQKB1R": "Russian Game: Classical Attack, Closed Variation",
+ "r1bqk2r/ppp1bppp/2n5/3p4/2PPn3/3B1N2/PP3PPP/RNBQ1RK1": "Russian Game: Classical Attack, Jaenisch Variation",
+ "r2qk2r/ppp1b1pp/2n5/3p1p2/2PPn1b1/3B1N2/PP3PPP/RNBQR1K1": "Russian Game: Classical Attack, Krause Variation",
+ "rn1q1rk1/ppp3pp/8/3P1p2/3Pn1b1/3B1N2/PP3PPb/RNBQR1K1": "Russian Game: Classical Attack, Marshall Trap",
+ "rnbqk2r/ppp2ppp/3b4/3p4/3Pn3/3B1N2/PPP2PPP/RNBQK2R": "Russian Game: Classical Attack, Marshall Variation",
+ "rn1q1rk1/pp3ppp/2pb4/3p4/2PPn1b1/3B1N2/PP3PPP/RNBQR1K1": "Russian Game: Classical Attack, Marshall Variation, Chinese Gambit",
+ "r2qk2r/ppp3pp/2n5/3p1p2/2PPn1bb/3B1N2/PP3PPP/RNBQR1K1": "Russian Game: Classical Attack, Maróczy Variation",
+ "rnbq1rk1/ppp1bppp/8/3p4/3Pn3/3B1N2/PPP2PPP/RNBQ1RK1": "Russian Game: Classical Attack, Mason Variation",
+ "r1bqkb1r/ppp2ppp/2n5/3p4/3Pn3/3B1N2/PPP2PPP/RNBQK2R": "Russian Game: Classical Attack, Mason-Showalter Variation",
+ "rnbq1rk1/pp3ppp/2pb4/3p4/2PPn3/3B1N2/PP3PPP/RNBQ1RK1": "Russian Game: Classical Attack, Staunton Variation",
+ "rn1q1rk1/ppp2ppp/3b4/3p4/2PPn1b1/3B1N2/PP3PPP/RNBQ1RK1": "Russian Game: Classical Attack, Tarrasch Variation",
+ "rnbqkb1r/ppp2Npp/3p1n2/8/4P3/8/PPPP1PPP/RNBQKB1R": "Russian Game: Cochrane Gambit",
+ "rnbq1b1r/ppp2kpp/3p1n2/8/2B1P3/8/PPPP1PPP/RNBQK2R": "Russian Game: Cochrane Gambit, Bishop Check Line",
+ "rnbq1b1r/ppp2kpp/3p1n2/8/3PP3/8/PPP2PPP/RNBQKB1R": "Russian Game: Cochrane Gambit, Center Variation",
+ "rnbqkb1r/ppp2ppp/3p4/8/4n3/5N2/PPPPQPPP/RNB1KB1R": "Russian Game: Cozio Attack",
+ "rnbqkb1r/pppp1ppp/8/4N3/4n3/8/PPPP1PPP/RNBQKB1R": "Russian Game: Damiano Variation",
+ "rnb1kb1r/ppppqppp/8/4N3/4n3/8/PPPPQPPP/RNB1KB1R": "Russian Game: Damiano Variation, Kholmov Gambit",
+ "rnbqkb1r/ppp2ppp/3p4/8/4n3/3P1N2/PPP2PPP/RNBQKB1R": "Russian Game: French Attack",
+ "rnbqkb1r/pppp1ppp/5n2/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R": "Russian Game: Italian Variation",
+ "rnbqkb1r/ppp2ppp/3p1n2/8/4P3/3N4/PPPP1PPP/RNBQKB1R": "Russian Game: Karklins-Martinovsky Variation",
+ "rnbqkb1r/ppp2ppp/3p4/8/2P1n3/5N2/PP1P1PPP/RNBQKB1R": "Russian Game: Kaufmann Attack",
+ "rnbqkb1r/ppp2ppp/3p4/8/4n3/3B1N2/PPPP1PPP/RNBQK2R": "Russian Game: Millennium Attack",
+ "r1bqkb1r/pppp1ppp/2n2n2/4p3/3PP3/5N2/PPP1QPPP/RNB1KB1R": "Russian Game: Moody Gambit",
+ "rnbqkb1r/ppp2ppp/3p4/8/4n3/2N2N2/PPPP1PPP/R1BQKB1R": "Russian Game: Nimzowitsch Attack",
+ "rnbqkb1r/ppp2ppp/3p1n2/8/2N1P3/8/PPPP1PPP/RNBQKB1R": "Russian Game: Paulsen Attack",
+ "r1bqkb1r/pppp1ppp/2n2n2/4N3/4P3/8/PPPP1PPP/RNBQKB1R": "Russian Game: Stafford Gambit",
+ "r1bqkb1r/ppp2ppp/2p2n2/8/4P3/8/PPPP1PPP/RNBQKB1R": "Russian Game: Stafford Gambit",
+ "rnbqkb1r/pppp1ppp/5n2/4p3/4P3/2N2N2/PPPP1PPP/R1BQKB1R": "Russian Game: Three Knights Game",
+ "rnbqkb1r/pppp1ppp/5n2/8/2BpP3/5N2/PPP2PPP/RNBQK2R": "Bishop's Opening: Urusov Gambit",
+ "rnbqkb1r/pppp1ppp/8/8/2BQn3/5N2/PPP2PPP/RNB1K2R": "Bishop's Opening: Urusov Gambit, Keidansky Gambit",
+ "rnbqkb1r/pppp1ppp/5n2/4p3/3PP3/5N2/PPP2PPP/RNBQKB1R": "Russian Game: Modern Attack",
+ "rnbqkb1r/pppp1ppp/5n2/8/3pP3/5N2/PPP2PPP/RNBQKB1R": "Russian Game: Modern Attack",
+ "r1bqkb1r/pppp1ppp/2n5/2n1P3/3N4/8/PPP1QPPP/RNB1KB1R": "Russian Game: Modern Attack, Bardeleben Variation",
+ "rnbqkb1r/pppp1ppp/8/4P3/3Qn3/5N2/PPP2PPP/RNB1KB1R": "Russian Game: Modern Attack, Center Attack",
+ "rnbqkb1r/pppp1ppp/8/4p3/3Pn3/3B1N2/PPP2PPP/RNBQK2R": "Russian Game: Modern Attack, Center Variation",
+ "r1bqkb1r/pppp1ppp/2n5/4p3/3Pn3/3B1N2/PPP2PPP/RNBQK2R": "Russian Game: Modern Attack, Murrey Variation",
+ "rnbqkb1r/pppp1ppp/8/4P3/3pn3/5N2/PPP1QPPP/RNB1KB1R": "Russian Game: Modern Attack, Steinitz Variation",
+ "rnbqkb1r/ppp2ppp/5n2/3pp3/3PP3/5N2/PPP2PPP/RNBQKB1R": "Russian Game: Modern Attack, Symmetrical Variation",
+ "rnbqkb1r/pppp1ppp/8/1B2P3/3pn3/5N2/PPP2PPP/RNBQK2R": "Russian Game: Modern Attack, Tal Gambit",
+ "rnbq1rk1/ppp2ppp/8/3pb3/2PPn3/3B4/PP3PPP/RNBQ1RK1": "Russian Game: Modern Attack, Trifunovic Variation",
+ "r1bqkb1r/pppp1ppp/2n2n2/4N3/2P1P3/8/PP1P1PPP/RNBQKB1R": "Dresden Opening: The Goblin",
+ "r1bqkbnr/pppp1ppp/2n5/4N3/4P3/8/PPPP1PPP/RNBQKB1R": "Irish Gambit",
+ "r1bqkbnr/pppp1ppp/2n5/4p3/4P3/5NP1/PPPP1P1P/RNBQKB1R": "King's Knight Opening: Konstantinopolsky",
+ "r1bqkbnr/pppp1ppp/2n5/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R": "King's Knight Opening: Normal Variation",
+ "r1bqkbnr/pppp1ppp/2n5/4p3/2P1P3/5N2/PP1P1PPP/RNBQKB1R": "King's Pawn Game: Dresden Opening",
+ "r1bqkbnr/pppp1ppp/2n5/4p3/1P2P3/5N2/P1PP1PPP/RNBQKB1R": "King's Pawn Game: Pachman Wing Gambit",
+ "r1bqkbnr/pppp1ppp/8/4n3/3PP3/8/PPP2PPP/RNBQKB1R": "King's Pawn Game: Schulze-Müller Gambit",
+ "r1bqkbnr/pppp1ppp/2n5/4p3/4P3/5N2/PPPPBPPP/RNBQK2R": "King's Pawn Game: Tayler Opening",
+ "r1bqkb1r/pppp1ppp/2n2n2/4p3/3PP3/5N2/PPP1BPPP/RNBQK2R": "King's Pawn Game: Tayler Opening",
+ "r1bqkb1r/pppp1ppp/2n2n2/4P3/3p4/5N2/PPP1BPPP/RNBQK2R": "King's Pawn Game: Tayler Opening, Basman Gambit",
+ "r1bqkb1r/ppp2ppp/2n2n2/3pp3/4P3/3P1N2/PPPNBPPP/R1BQK2R": "King's Pawn Game: Tayler Opening, Inverted Hanham",
+ "r1bqkbnr/pppp2pp/2n5/4pP2/8/3P1N2/PPP2PPP/RNBQKB1R": "Latvian Gambit: Clam Gambit",
+ "r1bqkbnr/pppp1ppp/2n5/4p3/4P3/2P2N2/PP1P1PPP/RNBQKB1R": "Ponziani Opening",
+ "r2qkbnr/pppb1ppp/2n5/3pp3/Q3P3/2P2N2/PP1P1PPP/RNB1KB1R": "Ponziani Opening: Caro Gambit",
+ "r1bqkb1r/pppp1ppp/2n2n2/4p3/4P3/2P2N2/PP1P1PPP/RNBQKB1R": "Ponziani Opening: Jaenisch Counterattack",
+ "r1bqkb1r/ppp2ppp/2n2n2/3pp3/Q3P3/2P2N2/PP1P1PPP/RNB1KB1R": "Ponziani Opening: Leonhardt Variation",
+ "r1bqkb1r/pppp1ppp/2n2n2/4p3/2B1P3/2P2N2/PP1P1PPP/RNBQK2R": "Ponziani Opening: Neumann Gambit",
+ "r1bqkbnr/pppp2pp/2n5/4pp2/4P3/2P2N2/PP1P1PPP/RNBQKB1R": "Ponziani Opening: Ponziani Countergambit",
+ "r1bqkbnr/ppp3pp/2np4/3Ppp2/4P3/2P2N2/PP3PPP/RNBQKB1R": "Ponziani Opening: Ponziani Countergambit, Schmidt Attack",
+ "r1bqk1nr/ppppbppp/2n5/4p3/4P3/2P2N2/PP1P1PPP/RNBQKB1R": "Ponziani Opening: Romanishin Variation",
+ "r1bqkb1r/ppppnppp/2n5/4p3/4P3/2P2N2/PP1P1PPP/RNBQKB1R": "Ponziani Opening: Réti Variation",
+ "r1bqkbnr/ppp2ppp/2n5/1B1pp3/4P3/2P2N2/PP1P1PPP/RNBQK2R": "Ponziani Opening: Spanish Variation",
+ "r1b1kbnr/ppp2ppp/2n5/1B1qN3/Q3p3/2P5/PP1P1PPP/RNB1K2R": "Ponziani Opening: Spanish Variation, Harrwitz Attack, Nikitin Gambit",
+ "r1bqkbnr/ppp3pp/2n2p2/3pp3/Q3P3/2P2N2/PP1P1PPP/RNB1KB1R": "Ponziani Opening: Steinitz Variation",
+ "r1bqk2r/pppp1ppp/2n5/2bPp3/4n3/2P2N2/PP3PPP/RNBQKB1R": "Ponziani Opening: Vukovic Gambit",
+ "r1bqkbnr/pppp1ppp/2n5/4p3/3PP3/5N2/PPP2PPP/RNBQKB1R": "Scotch Game",
+ "r1bqkbnr/pppp1ppp/2n5/8/3pP3/5N2/PPP2PPP/RNBQKB1R": "Scotch Game",
+ "r1bqk1nr/ppppbppp/2n5/8/2BpP3/5N2/PPP2PPP/RNBQK2R": "Scotch Game: Benima Defense",
+ "r1bqk1nr/pppp1ppp/2n5/b3P3/2B5/2P2N2/P4PPP/RNBQK2R": "Scotch Game: Cochrane Variation",
+ "r1bq3r/ppp2k1p/2n3p1/2Qp4/3pP3/8/PPP2PPP/RNB1K2R": "Scotch Game: Cochrane-Shumov Defense",
+ "r1bqkbnr/pppp1ppp/2n5/8/3pP3/2P2N2/PP3PPP/RNBQKB1R": "Scotch Game: Göring Gambit",
+ "r1bqk2r/pppp1ppp/2n2n2/8/1bB1P3/2N2N2/PP3PPP/R1BQK2R": "Scotch Game: Göring Gambit, Bardeleben Variation",
+ "r1bqkbnr/pppp1ppp/2n5/8/2B1P3/2p2N2/PP3PPP/RNBQK2R": "Scotch Game: Göring Gambit, Double Pawn Sacrifice",
+ "r1bqk1nr/pppp1ppp/2n5/8/1b2P3/2N2N2/PP3PPP/R1BQKB1R": "Scotch Game: Göring Gambit, Main Line",
+ "r1bq1rk1/pppp1ppp/5n2/4n1N1/1bB5/8/PB3PPP/RN1Q1RK1": "Scotch Game: Hanneken Variation",
+ "r1bqk1nr/pppp1ppp/2n5/2b5/2BpP3/5N2/PPP2PPP/RNBQK2R": "Scotch Game: Haxo Gambit",
+ "r1bqkbnr/pppp1ppp/8/4p3/3nP3/5N2/PPP2PPP/RNBQKB1R": "Scotch Game: Lolli Variation",
+ "r1bqkbnr/pppp1ppp/8/8/2BpP3/8/PPP2PPP/RNBQK2R": "Scotch Game: Napoleon Gambit",
+ "r1bqkbnr/pppp1ppp/2n5/1B6/3pP3/5N2/PPP2PPP/RNBQK2R": "Scotch Game: Relfsson Gambit",
+ "r1bqkbnr/pppp1ppp/2n5/8/2BpP3/5N2/PPP2PPP/RNBQK2R": "Scotch Game: Scotch Gambit",
+ "r1bqkb1r/pppp1ppp/2n2n2/4P3/2Bp4/5N2/PPP2PPP/RNBQK2R": "Scotch Game: Scotch Gambit, Advance Variation",
+ "r2qk1nr/ppp2ppp/2np4/2b5/2BpP1b1/2P2N2/PP3PPP/RNBQ1RK1": "Scotch Game: Scotch Gambit, Cochrane-Anderssen Variation",
+ "r1bqkb1r/pppp1ppp/2n2n2/8/2BpP3/5N2/PPP2PPP/RNBQK2R": "Scotch Game: Scotch Gambit, Dubois Réti Defense",
+ "r1bqkbnr/ppp2ppp/2n5/3p4/3pP3/2P2N2/PP3PPP/RNBQKB1R": "Scotch Game: Scotch Gambit, Göring Gambit Declined",
+ "r1bqkb1r/pppp1ppp/2n5/4P3/2Bp2n1/5N2/PPP2PPP/RNBQK2R": "Scotch Game: Scotch Gambit, Kingside Variation",
+ "r1bqk1nr/pppp1ppp/2n5/8/1bBpP3/5N2/PPP2PPP/RNBQK2R": "Scotch Game: Scotch Gambit, London Defense",
+ "r1bqk1nr/pppp1ppp/2n5/2b3N1/2BpP3/8/PPP2PPP/RNBQK2R": "Scotch Game: Scotch Gambit, Sarratt Variation",
+ "r2q1bnr/ppp1kBpp/3p4/3NN3/4P3/8/PP3PPP/R1Bb1RK1": "Scotch Game: Sea-Cadet Mate",
+ "r1bqk2r/pppp1ppp/2n4n/2b3NQ/2BpP3/8/PPP2PPP/RNB1K2R": "Scotch Game: Vitzthum Attack",
+ "r1bqkbnr/pppp1ppp/2n5/8/3NP3/8/PPP2PPP/RNBQKB1R": "Scotch Game",
+ "r1b1k1nr/pppp1ppp/2n5/1N6/1b2P2q/8/PPPB1PPP/RN1QKB1R": "Scotch Game",
+ "r1bqkb1r/pppp1ppp/2n2n2/4P3/3N4/8/PPP2PPP/RNBQKB1R": "Scotch Game: Alekhine Gambit",
+ "r1b1k1nr/pppp1ppp/2n2q2/1Nb5/4P3/4B3/PPP2PPP/RN1QKB1R": "Scotch Game: Blumenfeld Attack",
+ "r1b1kbnr/pppp1ppp/2n5/8/3NP2q/4B3/PPP2PPP/RN1QKB1R": "Scotch Game: Braune Variation",
+ "r1bqk1nr/pppp1ppp/2n5/2b5/3NP3/8/PPP2PPP/RNBQKB1R": "Scotch Game: Classical Variation",
+ "r1b1k2r/ppppnppp/2n2q2/2b5/3NP3/2P1B3/PP1Q1PPP/RN2KB1R": "Scotch Game: Classical Variation, Blackburne Attack",
+ "r1b1k1nr/pppp1ppp/2N2q2/2b5/4P3/8/PPP2PPP/RNBQKB1R": "Scotch Game: Classical Variation, Intermezzo Variation",
+ "r1b1k1nr/pppp1ppp/2n3q1/2b5/3NP3/2P1B3/PP3PPP/RN1QKB1R": "Scotch Game: Classical Variation, Millennium Variation",
+ "r1b1kbnr/pppp1ppp/2n5/8/4P2q/5N2/PPP2PPP/RNBQKB1R": "Scotch Game: Fraser Variation",
+ "r1bqkbnr/ppp2ppp/3p4/8/3QP3/3B4/PPP2PPP/RNB1K2R": "Scotch Game: Ghulam-Kassim Variation",
+ "1rb2rk1/pp3ppp/5q2/3P4/1n6/2P1Q3/PP3PPP/RN2KB1R": "Scotch Game: Gottschall Variation",
+ "r1b1kbnr/pppp1ppp/2n5/1N6/4P2q/8/PPP2PPP/RNBQKB1R": "Scotch Game: Horwitz Attack",
+ "r1bk2nr/pppp1ppp/2n5/1N6/4q3/8/PPPQBPPP/RN3RK1": "Scotch Game: Horwitz Attack, Blackburne Variation",
+ "r1bqk1nr/pppp1ppp/2n5/8/1b1NP3/8/PPP2PPP/RNBQKB1R": "Scotch Game: Malaniuk Variation",
+ "r1b1k2r/ppppnppp/2n2q2/2b5/4P3/2P1B3/PPN2PPP/RN1QKB1R": "Scotch Game: Meitner Variation",
+ "r1bqkb1r/p1pp1ppp/2p2n2/4P3/8/8/PPP2PPP/RNBQKB1R": "Scotch Game: Mieses Variation",
+ "r1b1k1nr/pppp1ppp/2n5/8/1b1NP2q/2N5/PPP2PPP/R1BQKB1R": "Scotch Game: Modern Defense",
+ "r1b1k2r/ppppnppp/2n2q2/1Bb5/3NP3/2P1B3/PP3PPP/RN1QK2R": "Scotch Game: Paulsen Attack",
+ "r1b1kbnr/pppp1ppp/2n5/5N2/4P2q/8/PPP2PPP/RNBQKB1R": "Scotch Game: Paulsen Variation",
+ "r1bnk2r/ppppnppp/5q2/1Bb5/3NP3/2P1B3/PP3PPP/RN1QK2R": "Scotch Game: Paulsen, Gunsberg Defense",
+ "r1bqk1nr/pppp1ppp/2n5/2b5/4P3/1N6/PPP2PPP/RNBQKB1R": "Scotch Game: Potter Variation",
+ "r1bqk1nr/pppp1ppp/2n5/8/1b2P3/1N6/PPP2PPP/RNBQKB1R": "Scotch Game: Romanishin Variation",
+ "r1bk2nr/pppp1ppp/2n3q1/1N6/8/8/PPPNBPPP/R2Q1RK1": "Scotch Game: Rosenthal Variation",
+ "r1bqkb1r/pppp1ppp/2n2n2/8/3NP3/8/PPP2PPP/RNBQKB1R": "Scotch Game: Schmidt Variation",
+ "r1b1kbnr/pppp1ppp/2n5/8/3NP2q/8/PPP2PPP/RNBQKB1R": "Scotch Game: Steinitz Variation",
+ "r1b1kbnr/pppp1ppp/2n5/8/3NP2q/2N5/PPP2PPP/R1BQKB1R": "Scotch Game: Steinitz Variation",
+ "r1bqkb1r/p1pp1ppp/2p2n2/8/4P3/8/PPPN1PPP/R1BQKB1R": "Scotch Game: Tartakower Variation",
+ "r1bqkbnr/pppp1ppp/2n5/4p3/4P3/2N2N2/PPPP1PPP/R1BQKB1R": "Three Knights Opening",
+ "r1bqk1nr/pppp1ppp/2n5/4p3/1b2P3/2N2N2/PPPP1PPP/R1BQKB1R": "Three Knights Opening",
+ "r1bqk2r/pppp1ppp/2n2n2/3Np3/1b2P3/5N2/PPPP1PPP/R1BQKB1R": "Three Knights Opening: Schlechter Variation",
+ "r1bqkbnr/pppp1p1p/2n3p1/4p3/4P3/2N2N2/PPPP1PPP/R1BQKB1R": "Three Knights Opening: Steinitz Defense",
+ "r1bqkbnr/pppp1p1p/2n3p1/3N4/3pP3/5N2/PPP2PPP/R1BQKB1R": "Three Knights Opening: Steinitz-Rosenthal Variation",
+ "r1bqkbnr/pppp2pp/2n5/4pp2/4P3/2N2N2/PPPP1PPP/R1BQKB1R": "Three Knights Opening: Winawer Defense",
+ "r1bqkb1r/pppp1ppp/2n2n2/4p3/4P3/2N2N2/PPPP1PPP/R1BQKB1R": "Four Knights Game",
+ "r1bqkb1r/pppp1ppp/2n2n2/4p3/4P3/P1N2N2/1PPP1PPP/R1BQKB1R": "Four Knights Game: Gunsberg Variation",
+ "r1bqkb1r/pppp1ppp/2n2n2/4N3/4P3/2N5/PPPP1PPP/R1BQKB1R": "Four Knights Game: Halloween Gambit",
+ "r1bqk1nr/pppp2pp/6n1/4Pp2/1bBP4/2N2Q2/PPP2PPP/R1B1K2R": "Four Knights Game: Halloween Gambit, Oldtimer Variation",
+ "1rb1kbnr/pp1p1ppp/3P1qn1/1N6/5P2/8/PPP3PP/R1BQKB1R": "Four Knights Game: Halloween Gambit, Plasma Variation",
+ "r1bqkb1r/pppp1ppp/2n2n2/4p3/2B1P3/2N2N2/PPPP1PPP/R1BQK2R": "Four Knights Game: Italian Variation",
+ "r1bqkb1r/pppp1Bpp/2n5/4p3/4n3/2N2N2/PPPP1PPP/R1BQK2R": "Four Knights Game: Italian Variation, Noa Gambit",
+ "r1bqkb1r/pppp1ppp/2n2n2/4p3/3PP3/2N2N2/PPP2PPP/R1BQKB1R": "Four Knights Game: Scotch Variation",
+ "r1bqkb1r/pppp1ppp/2n2n2/8/3pP3/2N2N2/PPP2PPP/R1BQKB1R": "Four Knights Game: Scotch Variation Accepted",
+ "r1bqkb1r/pppp1ppp/2n2n2/3N4/3pP3/5N2/PPP2PPP/R1BQKB1R": "Four Knights Game: Scotch Variation, Belgrade Gambit",
+ "r1bqkb1r/pppp2pp/2n5/3N1p2/3pn3/5N2/PPP1QPPP/R1B1KB1R": "Four Knights Game: Scotch Variation, Belgrade Gambit, Modern Defense",
+ "r1bqk2r/pppp1ppp/2n2n2/4N3/1b1PP3/2N5/PPP2PPP/R1BQKB1R": "Four Knights Game: Scotch Variation, Krause Gambit",
+ "r1b1k2r/ppppqppp/2n2n2/4N3/1b1PP3/2N5/PPP2PPP/R1BQKB1R": "Four Knights Game: Scotch Variation, Krause Gambit, Leonhardt Defense",
+ "r1bqk2r/pppp1ppp/5n2/3Pp3/1b1nP3/2N2N2/PPP2PPP/R1BQKB1R": "Four Knights Game: Scotch Variation, Oxford Gambit",
+ "r1bqkb1r/pppp1ppp/2n5/8/3Nn3/2N5/PPP2PPP/R1BQKB1R": "Four Knights Game: Scotch Variation, Schmid Defense",
+ "r1bq1rk1/pppp1ppp/2n2n2/1B2P3/1b1P1P2/2N5/PPP3PP/R1BQ1RK1": "Four Knights Game: Bardeleben Variation",
+ "r1bq1rk1/pppp1ppp/5n2/1Bb1N3/3nP3/2N5/PPPP1PPP/R1BQ1RK1": "Four Knights Game: Marshall Variation",
+ "r1bqkb1r/1ppp1ppp/p1B2n2/4p3/4P3/2N2N2/PPPP1PPP/R1BQK2R": "Four Knights Game: Ranken Variation",
+ "r1bqkb1r/pppp1ppp/5n2/4p3/3nP3/2N2N2/PPPPBPPP/R1BQK2R": "Four Knights Game: Rubinstein Countergambit",
+ "r1bqkb1r/pppp1ppp/5n2/1B2p3/3nP3/2N2N2/PPPP1PPP/R1BQ1RK1": "Four Knights Game: Rubinstein Countergambit, Henneberger Variation",
+ "r1bq1rk1/ppp2ppp/1b1p1n2/4p3/N3P3/3P1B2/PPP2PPP/R1BQ1RK1": "Four Knights Game: Rubinstein Countergambit, Maróczy Variation",
+ "r1bqkb1r/pppp1ppp/2n2n2/1B2p3/4P3/2N2N2/PPPP1PPP/R1BQK2R": "Four Knights Game: Spanish Variation",
+ "r1bqk2r/pppp1ppp/2n2n2/1Bb1p3/4P3/2N2N2/PPPP1PPP/R1BQK2R": "Four Knights Game: Spanish Variation, Classical Variation",
+ "r1bq1rk1/pppp1ppp/5n2/2b1N3/B2nP3/2N5/PPPP1PPP/R1BQK2R": "Four Knights Game: Spanish Variation, Classical Variation, Marshall Gambit",
+ "r1bqkb1r/pppp1ppp/5n2/1B2p3/3nP3/2N2N2/PPPP1PPP/R1BQK2R": "Four Knights Game: Spanish Variation, Rubinstein Variation",
+ "r1b1kb1r/ppppqppp/5n2/1B2N3/3nPP2/2N5/PPPP2PP/R1BQK2R": "Four Knights Game: Spanish Variation, Rubinstein Variation",
+ "r1bqkb1r/pppp1ppp/5n2/1B2p3/3NP3/2N5/PPPP1PPP/R1BQK2R": "Four Knights Game: Spanish Variation, Rubinstein Variation Accepted",
+ "r3kb1r/1pp2ppp/p1p1b3/3q4/3PN3/8/PPP2PPP/R1BQR1K1": "Four Knights Game: Spielmann Variation",
+ "r1b2rk1/ppp1qppp/2n2n2/1B1pp3/1b2P3/3P1N2/PPP1NPPP/R1BQ1RK1": "Four Knights Game: Alatortsev Variation",
+ "r1bqk2r/pppp1ppp/2n2n2/1B2p3/1b2P3/2N2N2/PPPP1PPP/R1BQK2R": "Four Knights Game: Double Spanish",
+ "r1bq1rk1/pppp1ppp/2n2n2/1B2p3/1b2P3/2NP1N2/PPP2PPP/R1BQ1RK1": "Four Knights Game: Double Spanish",
+ "r1bq1rk1/pppp1ppp/2n5/1B1P4/1b2p3/5N2/PPPP1PPP/R1BQ1RK1": "Four Knights Game: Gunsberg Counterattack",
+ "r1bq1rk1/ppp2ppp/2np1n2/1B2p3/4P3/2PP1N2/P1P2PPP/R1BQR1K1": "Four Knights Game: Janowski Variation",
+ "r1bq1rk1/pppp1ppp/2B2n2/4p3/1b2P3/2N2N2/PPPP1PPP/R1BQ1RK1": "Four Knights Game: Nimzowitsch Variation",
+ "r1bq1rk1/pppp1ppp/2n2n2/1B2p3/4P3/2bP1N2/PPP2PPP/R1BQ1RK1": "Four Knights Game: Spanish Variation",
+ "r1bq1rk1/ppp2ppp/2np1n2/1B2p3/1b2P3/2NP1N2/PPP2PPP/R1BQ1RK1": "Four Knights Game: Spanish Variation, Symmetrical Variation",
+ "r2n1rk1/ppp1qppp/3p1n2/1B2p1B1/3PP1b1/2P2N2/P1P2PPP/R2QR1K1": "Four Knights Game: Spanish Variation, Symmetrical Variation",
+ "r1bq1rk1/ppp1nppp/3p1n2/1B2p1B1/1b2P3/2NP1N2/PPP2PPP/R2Q1RK1": "Four Knights Game: Spanish Variation, Symmetrical Variation",
+ "r1bq1rk1/ppp2ppp/2np1n2/1B2p3/1b2P3/3P1N2/PPP1NPPP/R1BQ1RK1": "Four Knights Game: Spanish Variation, Symmetrical Variation",
+ "r1bq1rk1/ppp2ppp/2n2n2/1B1pp3/4P3/2PP1N2/P1P2PPP/R1BQ1RK1": "Four Knights Game: Svenonius Variation",
+ "r1b2rk1/pp2nppp/2pq1n2/3pp1B1/1b2P2N/1BNP4/PPP2PPP/R2Q1RK1": "Four Knights Game: Symmetrical, Blake Variation",
+ "r1b2rk1/ppp1qppp/2np1n2/1B2p1B1/4P3/2PP1N2/P1P2PPP/R2Q1RK1": "Four Knights Game: Symmetrical, Metger Unpin",
+ "r2q1rk1/ppp2ppp/2npbn2/1B2p1B1/1b2P3/2NP1N2/PPP2PPP/R2Q1RK1": "Four Knights Game: Symmetrical, Tarrasch Variation",
+ "r1bqk2r/pppp1ppp/2n2n2/2b1p3/2B1P3/2N2N2/PPPP1PPP/R1BQK2R": "Four Knights Game: Italian Variation",
+ "r1bqkbnr/pppp1ppp/2n5/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R": "Italian Game",
+ "r1bqkbnr/pppp1pp1/2n4p/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R": "Italian Game: Anti-Fried Liver Defense",
+ "r1bqkbnr/pppp1ppp/8/4p3/2BnP3/5N2/PPPP1PPP/RNBQK2R": "Italian Game: Blackburne-Kostić Gambit",
+ "r1bqk2r/pppp1ppp/2n2n2/2b1p3/2B1P3/2P2N2/PP1P1PPP/RNBQ1RK1": "Italian Game: Classical Variation, Albin Gambit",
+ "r1bqk2r/pppp1ppp/2n2n2/2b1p3/2BPP3/5N2/PPP2PPP/RNBQ1RK1": "Italian Game: Deutz Gambit",
+ "r1bqk1nr/pppp1ppp/2n5/2b1p3/2B1P3/3P1N2/PPP2PPP/RNBQK2R": "Italian Game: Giuoco Pianissimo",
+ "r1bqk2r/ppp2ppp/2np1n2/2b1p1B1/2B1P3/2NP1N2/PPP2PPP/R2QK2R": "Italian Game: Giuoco Pianissimo, Canal Variation",
+ "r1bqk1nr/pppp2pp/2n5/2b1p1N1/2B1Pp2/3P4/PPP2PPP/RNBQK2R": "Italian Game: Giuoco Pianissimo, Dubois Variation",
+ "r1bqk2r/pppp1ppp/2n2n2/2b1p3/2B1P3/2NP1N2/PPP2PPP/R1BQK2R": "Italian Game: Giuoco Pianissimo, Italian Four Knights Variation",
+ "r1bqk1nr/pppp2pp/2n5/2b1pp2/2B1P3/3P1N2/PPP2PPP/RNBQK2R": "Italian Game: Giuoco Pianissimo, Lucchini Gambit",
+ "r1bqk2r/pppp1ppp/2n2n2/2b1p3/2B1P3/3P1N2/PPP2PPP/RNBQK2R": "Italian Game: Giuoco Pianissimo, Normal",
+ "r1bqk1nr/pppp1ppp/2n5/2b1p3/2B1P3/5N2/PPPP1PPP/RNBQK2R": "Italian Game: Giuoco Piano",
+ "r1bqk1nr/ppppbppp/2n5/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R": "Italian Game: Hungarian Defense",
+ "r1bqk2r/ppppbppp/2n5/4P3/2Bpn3/2P2N2/PP3PPP/RNBQK2R": "Italian Game: Hungarian Defense, Tartakower Variation",
+ "r1bqk1nr/pppp1Bpp/2n5/2b1p3/4P3/5N2/PPPP1PPP/RNBQK2R": "Italian Game: Jerome Gambit",
+ "r1bqkbnr/ppp2ppp/2np4/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R": "Italian Game: Paris Defense",
+ "r1bqk1nr/pppp1ppp/2n5/2b1p3/2BPP3/5N2/PPP2PPP/RNBQK2R": "Italian Game: Rosentreter Gambit",
+ "r1bqkbnr/pppp2pp/2n5/4pp2/2B1P3/5N2/PPPP1PPP/RNBQK2R": "Italian Game: Rousseau Gambit",
+ "r1bqk1nr/pppp1ppp/2n5/2b1p3/1PB1P3/5N2/P1PP1PPP/RNBQK2R": "Italian Game: Evans Gambit",
+ "r2qk1nr/ppp2ppp/1bnp4/8/2BPP1b1/2N2N2/P4PPP/R1BQ1RK1": "Italian Game: Evans Gambit",
+ "r1bqk1nr/pppp1ppp/2n5/4p3/1bB1P3/5N2/P1PP1PPP/RNBQK2R": "Italian Game: Evans Gambit Accepted",
+ "r1bqk1nr/pppp1ppp/1bn5/4p3/1PB1P3/5N2/P1PP1PPP/RNBQK2R": "Italian Game: Evans Gambit Declined",
+ "r1bqk1nr/pppp1ppp/1bn5/4p3/PPB1P3/5N2/2PP1PPP/RNBQK2R": "Italian Game: Evans Gambit Declined",
+ "r1bqk1nr/pppp1ppp/1bn5/4p3/1PB1P3/5N2/PBPP1PPP/RN1QK2R": "Italian Game: Evans Gambit Declined, Cordel Variation",
+ "r1bk2nr/pppp1Qpp/1b6/nP2q3/2B1P3/8/PBPP1PPP/RN2K2R": "Italian Game: Evans Gambit Declined, Hicken Variation",
+ "r1b1k1nr/pppp1ppp/1b6/nP2N1q1/2B1P3/8/P1PP1PPP/RNBQK2R": "Italian Game: Evans Gambit Declined, Hirschbach Variation",
+ "r1bqk2r/pppp1ppp/1b5n/nP2N3/2B1P3/8/P1PP1PPP/RNBQK2R": "Italian Game: Evans Gambit Declined, Lange Variation",
+ "r1b3r1/ppp2k1p/1b6/nP2B1q1/3PP3/8/P1PN1PPP/R2QK2R": "Italian Game: Evans Gambit Declined, Pavlov Variation",
+ "r1bqk1nr/1ppp1ppp/pbn5/4p3/PPB1P3/2N2N2/2PP1PPP/R1BQK2R": "Italian Game: Evans Gambit Declined, Showalter Variation",
+ "r1b3nr/ppppkBpp/1b6/nP2N1qQ/4P3/8/P1PP1PPP/RNB1K2R": "Italian Game: Evans Gambit Declined, Vasquez Variation",
+ "r1bqk1nr/ppppbppp/2n5/4p3/2B1P3/2P2N2/P2P1PPP/RNBQK2R": "Italian Game: Evans Gambit, Anderssen Variation",
+ "r1bqk1nr/ppppbppp/8/n3p3/2BPP3/2P2N2/P4PPP/RNBQK2R": "Italian Game: Evans Gambit, Anderssen Variation, Cordel Line",
+ "r1bqk1nr/p1pp1ppp/2n5/1pb1p3/1PB1P3/5N2/P1PP1PPP/RNBQK2R": "Italian Game: Evans Gambit, Fontaine Countergambit",
+ "r2qk1nr/ppp2ppp/1bnp4/8/Q1BPP1b1/2N2N2/P4PPP/R1B2RK1": "Italian Game: Evans Gambit, Fraser Attack",
+ "r2q1knr/pppb1Bpp/1b1p4/n7/3PP3/2N2N2/P1Q2PPP/R1B2RK1": "Italian Game: Evans Gambit, Fraser-Mortimer Attack",
+ "r1bqk1nr/ppp2ppp/1b1p4/n5B1/2BPP3/2N2N2/P4PPP/R2Q1RK1": "Italian Game: Evans Gambit, Göring Attack",
+ "r1bqk1nr/pppp1ppp/2n5/8/1bBPP3/5N2/P2B1PPP/RN1QK2R": "Italian Game: Evans Gambit, Harding Variation",
+ "r1bqk1nr/ppp2ppp/2n5/2bpp3/1PB1P3/5N2/P1PP1PPP/RNBQK2R": "Italian Game: Evans Gambit, Hein Countergambit",
+ "r1bqkbnr/pppp1ppp/2n5/4p3/2B1P3/2P2N2/P2P1PPP/RNBQK2R": "Italian Game: Evans Gambit, Mayet Defense",
+ "r1bqk1nr/pppp1ppp/2n5/2b1p3/2B1P3/2P2N2/P2P1PPP/RNBQK2R": "Italian Game: Evans Gambit, McDonnell Defense",
+ "r1bqk1nr/ppp2ppp/1bnp4/8/2BPP3/5N2/P4PPP/RNBQ1RK1": "Italian Game: Evans Gambit, McDonnell Defense, Main Line",
+ "r1bqk1nr/ppp2ppp/1bnp4/8/2BPP3/2N2N2/P4PPP/R1BQ1RK1": "Italian Game: Evans Gambit, Morphy Attack",
+ "r2q2nr/pppb1kpp/1b1p4/n7/3PP3/2N2N2/P1Q2PPP/R1B2RK1": "Italian Game: Evans Gambit, Mortimer-Evans Gambit",
+ "r1bqk2r/ppp1nppp/1b1p4/n2P4/2B1P3/5N2/PB3PPP/RN1Q1RK1": "Italian Game: Evans Gambit, Paulsen Variation",
+ "r1bqk1nr/ppp3pp/1b1p1p2/n7/2BPP3/2N1BN2/P4PPP/R2Q1RK1": "Italian Game: Evans Gambit, Steinitz Variation",
+ "r1bqk1nr/pppp1ppp/2nb4/4p3/2B1P3/2P2N2/P2P1PPP/RNBQK2R": "Italian Game: Evans Gambit, Stone-Ware Variation",
+ "r1bqk1nr/ppp2ppp/1b1p4/n2P4/2B1P3/5N2/PB3PPP/RN1Q1RK1": "Italian Game: Evans Gambit, Ulvestad Variation",
+ "r1bqk1nr/ppp2ppp/2np4/b3p3/2B1P3/2P2N2/P2P1PPP/RNBQ1RK1": "Italian Game: Evans Gambit",
+ "r2qk1nr/ppp2ppp/2np4/b3p3/2BPP1b1/2P2N2/P4PPP/RNBQ1RK1": "Italian Game: Evans Gambit, Alapin-Steinitz Variation",
+ "r1bqk2r/pppp1ppp/2n2n2/b7/2BpP3/2P2N2/P4PPP/RNBQ1RK1": "Italian Game: Evans Gambit, Anderssen Defense",
+ "r1bqk1nr/ppp2ppp/2np4/b3p3/2BPP3/2P2N2/P4PPP/RNBQK2R": "Italian Game: Evans Gambit, Bronstein Defense",
+ "r1bqk1nr/pppp1ppp/2n5/b7/2B1P3/2p2N2/P4PPP/RNBQ1RK1": "Italian Game: Evans Gambit, Compromised Defense",
+ "r1b1k2r/ppppnppp/2n3q1/b3P3/2B5/BQN2N2/P4PPP/R4RK1": "Italian Game: Evans Gambit, Compromised Defense, Main Line",
+ "r1b1k2r/ppppnppp/2n3q1/b3P3/2B5/1QN2N2/P4PPP/R1BR2K1": "Italian Game: Evans Gambit, Compromised Defense, Potter Variation",
+ "r1bqk1nr/pppp1ppp/2n5/b7/2B1P3/2Pp1N2/P4PPP/RNBQ1RK1": "Italian Game: Evans Gambit, Dufresne Defense",
+ "r1bqk1nr/p1pp1ppp/2n5/bp6/2BpP3/2P2N2/P4PPP/RNBQ1RK1": "Italian Game: Evans Gambit, Johner Defense",
+ "r1bqk2r/pppp1ppp/2n2n2/b3p3/2BPP3/2P2N2/P4PPP/RNBQK2R": "Italian Game: Evans Gambit, Laroche Variation",
+ "r1bqk1nr/ppp2ppp/1bnp4/4p3/2BPP3/2P2N2/P4PPP/RNBQ1RK1": "Italian Game: Evans Gambit, Lasker Defense",
+ "r1bqk1nr/p1pp1ppp/2n5/bp2p3/2BPP3/2P2N2/P4PPP/RNBQK2R": "Italian Game: Evans Gambit, Leonhardt Countergambit",
+ "r1b1k1nr/pppq1ppp/1b6/n3N3/2B1P3/BQP5/P4PPP/RN3RK1": "Italian Game: Evans Gambit, Levenfish Variation",
+ "r1bqk1nr/pppp1ppp/2n5/b3p3/2B1P3/2P2N2/P2P1PPP/RNBQK2R": "Italian Game: Evans Gambit, Main Line",
+ "r1bqk2r/ppppnppp/2n5/b7/2BpP3/2P2N2/P4PPP/RNBQ1RK1": "Italian Game: Evans Gambit, Mieses Defense",
+ "r1bqk1nr/pppp1ppp/2n5/b7/2BpP3/2P2N2/P4PPP/RNBQK2R": "Italian Game: Evans Gambit, Pierce Defense",
+ "r1bq1rk1/pppp1ppp/2n2n2/b3N3/2BPP3/2P5/P4PPP/RNBQ1RK1": "Italian Game: Evans Gambit, Richardson Attack",
+ "r2qk1nr/pppb1ppp/2np4/b3p3/2BPP3/2P2N2/P4PPP/RNBQ1RK1": "Italian Game: Evans Gambit, Sanders-Alapin Variation",
+ "r1bqk1nr/pppp1ppp/2n5/b3p3/2B1P3/2P2N2/P2P1PPP/RNBQ1RK1": "Italian Game: Evans Gambit, Slow Variation",
+ "r1bqk1nr/ppp2ppp/2np4/b3p1B1/2BPP3/2P2N2/P4PPP/RN1QK2R": "Italian Game: Evans Gambit, Sokolsky Variation",
+ "r1bqk1nr/ppp2ppp/2np4/b3p3/2BPP3/1QP2N2/P4PPP/RNB1K2R": "Italian Game: Evans Gambit, Tartakower Attack",
+ "r1bqk1nr/ppp2ppp/2np4/b7/2BpP3/1QP2N2/P4PPP/RNB2RK1": "Italian Game: Evans Gambit, Waller Attack",
+ "r1bqk2r/pppp1ppp/2n2n2/2b1p3/1PB1P3/2P2N2/P2P1PPP/RNBQK2R": "Italian Game: Bird's Attack",
+ "r1bqk1nr/pppp1ppp/2n5/2b1p3/2B1P3/2P2N2/PP1P1PPP/RNBQK2R": "Italian Game: Classical Variation",
+ "r1bqk2r/pppp1ppp/2n2n2/2b1p3/2B1P3/2P2N2/PP1P1PPP/RNBQK2R": "Italian Game: Classical Variation",
+ "r1bqk1nr/pppp2pp/2n5/2b1pp2/2B1P3/2P2N2/PP1P1PPP/RNBQK2R": "Italian Game: Classical Variation, Alexandre Gambit",
+ "r1bqk2r/pppp1ppp/2n2n2/2b1p3/2BPP3/2P2N2/PP3PPP/RNBQK2R": "Italian Game: Classical Variation, Center Attack",
+ "r1b1k1nr/ppppqppp/1bn5/4p3/2BPP3/2P2N2/PP3PPP/RNBQK2R": "Italian Game: Classical Variation, Center Holding Variation",
+ "r1b1k1nr/ppppqppp/2n5/2b1p3/2B1P3/2P2N2/PP1P1PPP/RNBQK2R": "Italian Game: Classical Variation, Closed Variation",
+ "r1bqk2r/pppp1ppp/2n2n2/2b1p3/2B1P3/2PP1N2/PP3PPP/RNBQK2R": "Italian Game: Classical Variation, Giuoco Pianissimo",
+ "r1bq1rk1/bpp2ppp/p1np1n2/4p3/4P3/1BPP1N1P/PP3PP1/RNBQR1K1": "Italian Game: Classical Variation, Giuoco Pianissimo, Main Line",
+ "r1bqk2r/ppp2ppp/2n2n2/2bpP3/2Bp4/2P2N2/PP3PPP/RNBQK2R": "Italian Game: Classical Variation, Greco Gambit",
+ "r1bqk2r/ppp2ppp/2n5/1B1pP3/1b1Pn3/5N2/PP3PPP/RNBQK2R": "Italian Game: Classical Variation, Greco Gambit, Anderssen Variation",
+ "r1bqk1nr/ppp2ppp/1bnp4/8/2BPP3/5N2/PP3PPP/RNBQK2R": "Italian Game: Classical Variation, La Bourdonnais Variation",
+ "r1b1k2r/1pp1qppp/pbnp1n2/4p3/P1BPP3/2P2N1P/1P3PP1/RNBQR1K1": "Italian Game: Classical Variation, Tarrasch Variation",
+ "rnb1k1nr/ppppqppp/1b1P4/4p3/2B1P3/2P2N2/PP3PPP/RNBQK2R": "Italian Game: Giuoco Piano, Eisinger Variation",
+ "r1bqk2r/pppp1ppp/2n5/2bBP3/8/2p2NK1/PP4PP/RNBQ3R": "Italian Game: Giuoco Piano, Ghulam-Kassim Variation",
+ "r1b1k1nr/ppppqppp/1bn5/4p1B1/2BPP3/2P2N2/PP3PPP/RN1QK2R": "Italian Game: Giuoco Piano, Mestel Variation",
+ "r1bqk2r/pppp1ppp/2n2n2/2b5/2BpP3/2P2N2/PP3PPP/RNBQ1RK1": "Italian Game: Scotch Gambit, Walbrodt-Baird Gambit",
+ "r1bqk2r/pppp1ppp/2n5/8/1bBP4/2n2N2/PP3PPP/R1BQ1RK1": "Italian Game: Classical Variation, Greco Gambit, Greco Variation",
+ "r1bqk2r/pppp1ppp/2n5/8/2BPn3/2b2N2/PP3PPP/R1BQ1RK1": "Italian Game: Classical Variation, Greco Gambit, Main Line",
+ "r1bqk2r/ppp1nppp/3p1b2/3P4/2B1R1P1/5N2/PP3P1P/R1BQ2K1": "Italian Game: Classical Variation, Greco Gambit, Moeller-Bayonet Attack",
+ "r1bqk2r/pppp1ppp/2n5/3P4/2B1n3/2b2N2/PP3PPP/R1BQ1RK1": "Italian Game: Classical Variation, Greco Gambit, Moeller-Therkatz Attack",
+ "r1bqk2r/pppp1ppp/2n2n2/2b5/2BPP3/5N2/PP3PPP/RNBQK2R": "Italian Game: Classical Variation, Greco Gambit, Traditional Line",
+ "r1bqk2r/pppp1ppp/2n5/8/2BP4/B1b2N2/P4PPP/R2Q1RK1": "Italian Game: Giuoco Piano, Aitken Variation",
+ "r1bqk2r/ppp2ppp/2n5/3p4/2BP4/1Qb2N2/P4PPP/R1B2RK1": "Italian Game: Giuoco Piano, Bernstein Variation",
+ "r1bqk2r/pppp1ppp/2n2n2/8/1bBPP3/5N2/PP3PPP/RNBQ1K1R": "Italian Game: Giuoco Piano, Cracow Variation",
+ "r1bqk2r/pppp1ppp/2n2n2/8/1bBPP3/2N2N2/PP3PPP/R1BQK2R": "Italian Game: Giuoco Piano, Greco's Attack",
+ "r1bq3r/ppp3pp/5k2/3pN3/1n1Pn3/1Q3P2/PP4PP/RN2K2R": "Italian Game: Giuoco Piano, Krause Variation",
+ "r1bqk2r/ppp2ppp/2n5/3p4/2BPn3/B1P2N2/P4PPP/R2Q1RK1": "Italian Game: Giuoco Piano, Steinitz Variation",
+ "r1bq1rk1/ppp1nppN/3p4/3P4/2B1R3/8/PP3PPP/R2Q2K1": "Italian Game: Giuoco Piano, Therkatz-Herzog Variation",
+ "r1bqk2r/ppp2ppp/3p1n2/4p1B1/2BnP3/8/PPP2PPP/RN1Q1RK1": "Italian Game: Giuoco Piano",
+ "r1b1k2r/ppp1qppp/5n2/4p1B1/2BnP3/2N5/PPP3PP/R2Q1RK1": "Italian Game: Giuoco Piano, Holzhausen Attack",
+ "r1bqk2r/pppp1p2/5n1p/4p1p1/2BnPP1B/8/PPP3PP/RN1Q1RK1": "Italian Game: Giuoco Piano, Rosentreter Variation",
+ "r1bqkb1r/pppp1ppp/2n2n2/8/2BpP3/5N2/PPP2PPP/RNBQ1RK1": "Italian Game: Scotch Gambit",
+ "r1bqkb1r/ppp2ppp/2np1n2/8/2BpP3/5N2/PPP2PPP/RNBQ1RK1": "Italian Game: Scotch Gambit, Janowski Defense",
+ "r1bqk2r/pppp1ppp/2n2n2/2b5/2BpP3/5N2/PPP2PPP/RNBQ1RK1": "Italian Game: Scotch Gambit, Max Lange Attack",
+ "r2qk2r/ppp2pPp/2n1b3/2b5/2pp4/5N2/PPP2PPP/RNBQR1K1": "Italian Game: Scotch Gambit, Max Lange Attack Accepted",
+ "r3k2r/ppp2ppp/2n1bP2/2b2qN1/2ppN3/8/PPP2PPP/R1BQR1K1": "Italian Game: Scotch Gambit, Max Lange Attack, Long Variation",
+ "r1bqk2r/pppp1ppp/2n5/2b1P3/2Bp2n1/5N2/PPP2PPP/RNBQ1RK1": "Italian Game: Scotch Gambit, Max Lange Attack, Spielmann Defense",
+ "r1bqk2r/ppppbppp/2n2n2/8/2BpP3/5N2/PPP2PPP/RNBQ1RK1": "Italian Game: Scotch Gambit, de Riviere Defense",
+ "r1bqkb1r/ppp2ppp/2np1n2/4p3/2BPP3/5N2/PPP2PPP/RNBQK2R": "Italian Game: Scotch Invitation Declined",
+ "r1bqkb1r/pppp1ppp/2n2n2/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R": "Italian Game: Two Knights Defense",
+ "r1bqkb1r/pppp1ppp/2n5/4p3/2BPn3/5N2/PPP2PPP/RNBQK2R": "Italian Game: Two Knights Defense",
+ "r1b1k2r/ppp2ppp/2N5/1B1pP3/4n2q/8/PPP2bPP/RNBQ1K1R": "Italian Game: Two Knights Defense, Keidansky Variation",
+ "r1bqk2r/pppp1ppp/2n2n2/2b1P3/2Bp4/5N2/PPP2PPP/RNBQ1RK1": "Italian Game: Two Knights Defense, Max Lange Attack",
+ "2kr3r/ppp2ppp/1bn1bPq1/6N1/2ppNPP1/8/PPP4P/R1BQR1K1": "Italian Game: Two Knights Defense, Max Lange Attack, Berger Variation",
+ "r1bqk2r/pppp1ppp/2n5/2b1P3/2Bp2n1/2P2N2/PP3PPP/RNBQ1RK1": "Italian Game: Two Knights Defense, Max Lange Attack, Krause Variation",
+ "r2qk2r/ppp2p1p/2n1bPp1/2b3N1/2pp4/8/PPP2PPP/RNBQR1K1": "Italian Game: Two Knights Defense, Max Lange Attack, Loman Defense",
+ "r3kb1r/ppp2ppp/2n1bP2/5qN1/2ppN3/8/PPP2PPP/R1BQR1K1": "Italian Game: Two Knights Defense, Max Lange Attack, Rubinstein Variation",
+ "r1bqkb1r/pppp1ppp/2n2n2/4p3/2B1P3/3P1N2/PPP2PPP/RNBQK2R": "Italian Game: Two Knights Defense, Modern Bishop's Opening",
+ "r1bqkb1r/pppp1ppp/2n2n2/4p3/2BPP3/5N2/PPP2PPP/RNBQK2R": "Italian Game: Two Knights Defense, Open Variation",
+ "r1bqkb1r/pppp1ppp/2n2n2/6N1/2BpP3/8/PPP2PPP/RNBQK2R": "Italian Game: Two Knights Defense, Perreux Variation",
+ "r1b1kb1r/ppp2ppp/2n5/3q4/3pn3/2N2N2/PPP2PPP/R1BQR1K1": "Italian Game: Scotch Gambit, Anderssen Attack",
+ "r3kb1r/ppp2ppp/2n1b3/3q2B1/3pN3/5N2/PPP2PPP/R2QR1K1": "Italian Game: Scotch Gambit, Anderssen Attack, Main Line",
+ "r1bqkb1r/ppp2ppp/2n5/3p4/2Bpn3/2N2N2/PPP2PPP/R1BQR1K1": "Italian Game: Scotch Gambit, Canal Variation",
+ "r1bqkb1r/pppp1ppp/2n5/8/2Bpn3/5N2/PPP2PPP/RNBQ1RK1": "Italian Game: Scotch Gambit, Double Gambit Accepted",
+ "r1bqkb1r/pppp1ppp/2n5/8/2Bpn3/2N2N2/PPP2PPP/R1BQ1RK1": "Italian Game: Scotch Gambit, Nakhmanson Gambit",
+ "r4b1r/ppp1kp2/2n1bN1p/q5p1/1P1p3B/5N2/P1P2PPP/R2QR1K1": "Italian Game: Two Knights Defense, Yurdansky Attack",
+ "r1bq1b1r/ppn3pp/2p1k3/3np3/2BPQ3/P1N5/1PP2PPP/R1B1K2R": "Italian Game: Two Knights Defense, Fegatello Attack, Leonhardt Variation",
+ "r1bqkb1r/ppp2Npp/2n5/3np3/2B5/8/PPPP1PPP/RNBQK2R": "Italian Game: Two Knights Defense, Fried Liver Attack",
+ "r1bqkb1r/ppp2ppp/5n2/3Pp1N1/2Bn4/8/PPPP1PPP/RNBQK2R": "Italian Game: Two Knights Defense, Fritz Variation",
+ "r1bqkb1r/p1p2ppp/8/1p1np3/3nN3/2P5/PP1P1PPP/RNBQKB1R": "Italian Game: Two Knights Defense, Fritz, Gruber Variation",
+ "r1bqkb1r/ppp2ppp/5n2/3Pp1N1/1nB5/8/PPPP1PPP/RNBQK2R": "Italian Game: Two Knights Defense, Kloss Gambit",
+ "r1bqkb1r/pppp1ppp/2n2n2/4p1N1/2B1P3/8/PPPP1PPP/RNBQK2R": "Italian Game: Two Knights Defense, Knight Attack",
+ "r1bqkb1r/ppp2ppp/2n2n2/3pp1N1/2B1P3/8/PPPP1PPP/RNBQK2R": "Italian Game: Two Knights Defense, Knight Attack, Normal Variation",
+ "r1bqkb1r/ppp2ppp/2n5/3np1N1/2BP4/8/PPP2PPP/RNBQK2R": "Italian Game: Two Knights Defense, Lolli Attack",
+ "r1bqk2r/ppp2ppp/2n5/3np1N1/1bBP4/8/PPP2PPP/RNBQK2R": "Italian Game: Two Knights Defense, Pincus Variation",
+ "r1bqkb1r/pppp1ppp/2n5/4p1N1/2B1n3/8/PPPP1PPP/RNBQK2R": "Italian Game: Two Knights Defense, Ponziani-Steinitz Gambit",
+ "r1bqk2r/pppp1ppp/2n2n2/2b1p1N1/2B1P3/8/PPPP1PPP/RNBQK2R": "Italian Game: Two Knights Defense, Traxler Counterattack",
+ "r1bqk2r/pppp1Bpp/2n2n2/2b1p1N1/4P3/8/PPPP1PPP/RNBQK2R": "Italian Game: Two Knights Defense, Traxler Counterattack, Bishop Sacrifice Line",
+ "r1bqk2r/pppp1Npp/2n5/4p3/2B1n3/4K3/PPPP2PP/RNBQ3R": "Italian Game: Two Knights Defense, Traxler Counterattack, King March Line",
+ "r1bqk2r/pppp1Npp/2n2n2/2b1p3/2B1P3/8/PPPP1PPP/RNBQK2R": "Italian Game: Two Knights Defense, Traxler Counterattack, Knight Sacrifice Line",
+ "r1bq3r/ppppkBpp/2n2n2/2b1p1N1/3PP3/8/PPP2PPP/RNBQK2R": "Italian Game: Two Knights Defense, Traxler Variation, Trencianske-Teplice Gambit",
+ "r1bqkb1r/p1p2ppp/2n2n2/1p1Pp1N1/2B5/8/PPPP1PPP/RNBQK2R": "Italian Game: Two Knights Defense, Ulvestad Variation",
+ "r1bqkb1r/p1p2Np1/2n2n1p/1p1Pp3/8/8/PPPP1PPP/RNBQKB1R": "Italian Game: Two Knights Defense, Ulvestad Variation, Kurkin Gambit",
+ "r1bqkb1r/p4ppp/2p2n2/n3p1N1/8/8/PPPPBPPP/RNBQK2R": "Italian Game: Two Knights Defense",
+ "r1bqkb1r/p4ppp/5n2/np2p1N1/8/5Q2/PPPP1PPP/RNB1K2R": "Italian Game: Two Knights Defense, Blackburne Variation",
+ "1rbqkb1r/p4ppp/2p2n2/nB2p1N1/8/5Q2/PPPP1PPP/RNB1K2R": "Italian Game: Two Knights Defense, Colman Variation",
+ "r1bqk2r/ppp1bpp1/5n1p/3P4/2P1p3/5N2/PPP1QPPP/RNB1K2R": "Italian Game: Two Knights Defense, Maróczy Variation",
+ "r1b1kb1r/p1q2ppp/2p2n2/n3p1N1/8/3B1Q2/PPPP1PPP/RNB1K2R": "Italian Game: Two Knights Defense, Paoli Variation",
+ "r1bqkb1r/ppp2ppp/5n2/n2Pp1N1/2B5/8/PPPP1PPP/RNBQK2R": "Italian Game: Two Knights Defense, Polerio Defense",
+ "r1bqkb1r/ppp2ppp/5n2/nB1Pp1N1/8/8/PPPP1PPP/RNBQK2R": "Italian Game: Two Knights Defense, Polerio Defense, Bishop Check Line",
+ "r1bqkb1r/p4ppp/2p2n2/nB2p1N1/8/5Q2/PPPP1PPP/RNB1K2R": "Italian Game: Two Knights Defense, Polerio Defense, Bogoljubov Variation",
+ "r1bqkb1r/ppp2ppp/5n2/n2Pp1N1/2B5/3P4/PPP2PPP/RNBQK2R": "Italian Game: Two Knights Defense, Polerio Defense, Kieseritzky Variation",
+ "r1bqk2r/ppp2pp1/5n1p/2bP4/2P1p3/8/PPPNQPPP/RNB1K2R": "Italian Game: Two Knights Defense, Polerio Defense, Yankovich Variation",
+ "r1b1k2r/p1q2pp1/2pb1n1p/n3N3/3Pp3/8/PPPBBPPP/RN1QK2R": "Italian Game: Two Knights Defense, Knorre Variation",
+ "r1b1kb1r/p1q2pp1/2p2n1p/n3N3/4p3/8/PPPPBPPP/RNBQK2R": "Italian Game: Two Knights Defense, Polerio Defense, Göring Variation",
+ "r1bqkb1r/p4pp1/2p2n1p/n3p1N1/8/8/PPPPBPPP/RNBQK2R": "Italian Game: Two Knights Defense, Polerio Defense, Suhle Defense",
+ "r1bqkb1r/p4pp1/2p2n1p/n3p3/8/7N/PPPPBPPP/RNBQK2R": "Italian Game: Two Knights Defense, Steinitz Variation",
+ "r1bqkbnr/pppp1ppp/2n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez",
+ "r1bqk1nr/pppp1ppp/2n5/1B2p3/1b2P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Alapin Defense",
+ "r1bqk1nr/ppp2ppp/2p5/b3p3/4P3/2P2N2/PP1P1PPP/RNBQK2R": "Ruy Lopez: Alapin Defense, Alapin Gambit",
+ "r1bqkbnr/pppp1p1p/2n5/1B2p1p1/4P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Brentano Gambit",
+ "r1bqkbnr/1ppp1ppp/2n5/pB2p3/4P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Bulgarian Variation",
+ "r1bqkb1r/ppppnppp/2n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Cozio Defense",
+ "r1bqkb1r/ppppnp1p/2n3p1/1B2p3/4P3/2N2N2/PPPP1PPP/R1BQK2R": "Ruy Lopez: Cozio Defense, Paulsen Variation",
+ "r1bq1rk1/ppp1npbp/2n3p1/1B1p4/3NP3/2N1B3/PPPQ1PPP/R3K2R": "Ruy Lopez: Cozio Defense, Tartakower Gambit",
+ "r1bqkbnr/pppp1p1p/2n3p1/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Fianchetto Defense",
+ "r1bqkbnr/pppp3p/2n3p1/1B2pp2/4P3/2P2N2/PP1P1PPP/RNBQK2R": "Ruy Lopez: Fianchetto Defense, Kevitz Gambit",
+ "r1bqk1nr/ppppbppp/2n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Lucena Variation",
+ "r1bqkbnr/pppp2pp/2n2p2/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Nürnberg Variation",
+ "r1bqkbnr/pppp1ppp/8/nB2p3/4P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Pollock Defense",
+ "rnbqkbnr/pppp1ppp/8/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Retreat Variation",
+ "r1bqkbnr/p1pp1ppp/1pn5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Rotary-Albany Gambit",
+ "r1bqkbnr/ppp2ppp/2n5/1B1pp3/4P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Spanish Countergambit",
+ "r1b1kbnr/ppp2ppp/2n5/1B1pN1q1/4P3/8/PPPP1PPP/RNBQ1RK1": "Ruy Lopez: Spanish Countergambit, Harding Countergambit, Fricke Gambit",
+ "r1b1kbnr/ppp2ppp/2N5/1B1p2q1/4P3/8/PPPP1PPP/RNBQK2R": "Ruy Lopez: Spanish Countergambit, Harding Gambit",
+ "r1b1kbnr/ppppqppp/2n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Vinogradov Variation",
+ "r1bqkbnr/pppp1ppp/8/1B2p3/3nP3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Bird Variation",
+ "r1bqkb1r/ppppnppp/8/1B6/3pP3/8/PPPP1PPP/RNBQ1RK1": "Ruy Lopez: Bird Variation, Paulsen Variation",
+ "r2qkbnr/pppb1ppp/2np4/1B2p3/2PPP3/5N2/PP3PPP/RNBQK2R": "Ruy Lopez: Old Steinitz Defense, Semi-Duras Variation",
+ "r1bqkbnr/ppp2ppp/2np4/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Steinitz Defense",
+ "r1bqkbnr/ppp2ppp/2np4/1B6/3pP3/5N2/PPP2PPP/RNBQ1RK1": "Ruy Lopez: Steinitz Defense, Center Gambit",
+ "r2qkb1r/pppb1ppp/2Bp1n2/4p3/3PP3/2N2N2/PPP2PPP/R1BQK2R": "Ruy Lopez: Steinitz Defense, Nimzowitsch Attack",
+ "r1bqkbnr/pppp2pp/2n5/1B2pp2/4P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Schliemann Defense",
+ "r1b1kbnr/ppp3pp/2N5/1B4q1/4p3/8/PPPP1PPP/R1BQK2R": "Ruy Lopez: Schliemann Defense, Classical Variation",
+ "r1bqkbnr/pppp2pp/2n5/1B2pp2/4P3/2N2N2/PPPP1PPP/R1BQK2R": "Ruy Lopez: Schliemann Defense, Dyckhoff Variation",
+ "r1bqkbnr/pppp2pp/2B5/4pp2/4P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Schliemann Defense, Exchange Variation",
+ "r1bqkbnr/pppp2pp/2n5/1B2pP2/8/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Schliemann Defense, Jaenisch Gambit Accepted",
+ "r1bqk1nr/ppppb1pp/2n5/1B2p3/4N3/5N2/PPPP1PPP/R1BQK2R": "Ruy Lopez: Schliemann Defense, Kostić Defense",
+ "r1b1kbnr/ppp3pp/2N5/1B1q4/4p3/8/PPPP1PPP/R1BQK2R": "Ruy Lopez: Schliemann Defense, Möhring Variation",
+ "r1bqkbnr/pppp2pp/2n5/1B2pp2/3PP3/5N2/PPP2PPP/RNBQK2R": "Ruy Lopez: Schliemann Defense, Schönemann Attack",
+ "r1bqkb1r/pppp2pp/2n2n2/1B2p3/4N3/5N2/PPPP1PPP/R1BQK2R": "Ruy Lopez: Schliemann Defense, Tartakower Variation",
+ "r1bq1rk1/pppp1ppp/1bn2n2/1B2p3/3PP3/2P2N2/PP3PPP/RNBQ1RK1": "Ruy Lopez: Classical Defense, Benelux Variation",
+ "r1b1k1nr/ppppqppp/2n5/1Bb1p3/4P3/2P2N2/PP1P1PPP/RNBQK2R": "Ruy Lopez: Classical Defense, Boden Variation",
+ "r1bqk1nr/pppp1ppp/8/1Bb1p3/1P1nP3/5N2/P1PP1PPP/RNBQ1RK1": "Ruy Lopez: Classical Defense, Zaitsev Variation",
+ "r1bqk1nr/pppp1ppp/2n5/1Bb1p3/4P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Classical Variation",
+ "r1bqk1nr/pppp1ppp/2n5/1Bb1p3/4P3/2P2N2/PP1P1PPP/RNBQK2R": "Ruy Lopez: Classical Variation, Central Variation",
+ "r1bqk1nr/pppp1ppp/1bn5/1B2p3/4P3/2P2N2/PP1P1PPP/RNBQK2R": "Ruy Lopez: Classical Variation, Charousek Variation",
+ "r1bqk1nr/pppp2pp/2n5/1Bb1pp2/4P3/2P2N2/PP1P1PPP/RNBQK2R": "Ruy Lopez: Classical Variation, Cordel Gambit",
+ "r1bqk1nr/ppp2ppp/2n5/1Bbpp3/4P3/2P2N2/PP1P1PPP/RNBQK2R": "Ruy Lopez: Classical Variation, Konikowski Gambit",
+ "r1bq1rk1/pppp1ppp/1bn2n2/1B2p1B1/3PP3/2P2N2/PP3PPP/RN1Q1RK1": "Ruy Lopez: Classical Variation, Modern Main Line",
+ "r1bqk1nr/pppp1ppp/2n5/1Bb1p3/1P2P3/5N2/P1PP1PPP/RNBQK2R": "Ruy Lopez: Classical Variation, Spanish Wing Gambit",
+ "r1bqkb1r/pppp1ppp/2n2n2/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Berlin Defense",
+ "r1bqkb1r/pppp1ppp/2n2n2/1B2p3/4P3/5N2/PPPP1PPP/RNBQ1RK1": "Ruy Lopez: Berlin Defense",
+ "r1bqkb1r/ppp2ppp/2Bp1n2/4p3/4P3/3P1N2/PPP2PPP/RNBQK2R": "Ruy Lopez: Berlin Defense, Anderssen Variation",
+ "r1bqk2r/pppp1ppp/2n2n2/1Bb1p3/4P3/5N2/PPPP1PPP/RNBQ1RK1": "Ruy Lopez: Berlin Defense, Beverwijk Variation",
+ "r1bqkb1r/ppp2ppp/2np1n2/1B2p3/2P1P3/3P1N2/PP3PPP/RNBQK2R": "Ruy Lopez: Berlin Defense, Duras Variation",
+ "r1bqkb1r/pppp1ppp/2n5/1B2p3/4P1n1/5N2/PPPP1PPP/RNBQ1RK1": "Ruy Lopez: Berlin Defense, Fishing Pole Variation",
+ "r1bqk2r/pppp1ppp/2n2n2/1Bb1p3/4P3/3PBN2/PPP2PPP/RN1QK2R": "Ruy Lopez: Berlin Defense, Kaufmann Variation",
+ "r1bqkb1r/pp1pnppp/2p2n2/1B2N3/4P3/3P4/PPP2PPP/RNBQK2R": "Ruy Lopez: Berlin Defense, Mortimer Trap",
+ "r1bqkb1r/ppppnppp/5n2/1B2p3/4P3/3P1N2/PPP2PPP/RNBQK2R": "Ruy Lopez: Berlin Defense, Mortimer Variation",
+ "r1bqkb1r/pppp1ppp/2n2n2/1B6/3pP3/5N2/PPP2PPP/RNBQ1RK1": "Ruy Lopez: Berlin Defense, Nyholm Attack",
+ "r1bqk2r/pppp1ppp/2n2n2/1Bb1p3/4P3/2P2N2/PP1P1PPP/RNBQ1RK1": "Ruy Lopez: Classical Variation, Zukertort Gambit",
+ "r1bqkb1r/pppp1ppp/2n2n2/1B2N3/4P3/8/PPPP1PPP/RNBQK2R": "Ruy Lopez: Halloween Attack",
+ "r2qk2r/pppbbppp/2np1n2/1B2p1B1/3PP3/2N2N2/PPP2PPP/R2Q1RK1": "Ruy Lopez: Berlin Defense, Closed Bernstein Variation",
+ "r2qk2r/pppbbppp/2Bp1n2/4p3/3PP3/2N2N2/PPP2PPP/R1BQ1RK1": "Ruy Lopez: Berlin Defense, Closed Showalter Variation",
+ "r2qkb1r/pppb1ppp/2np1n2/1B6/3pP3/2N2N2/PPP2PPP/R1BQ1RK1": "Ruy Lopez: Berlin Defense, Closed Wolf Variation",
+ "r2qk2r/pppbbppp/2np1n2/1B2p3/3PP3/2N2N2/PPP2PPP/R1BQ1RK1": "Ruy Lopez: Berlin Defense, Hedgehog Variation",
+ "r1bqkb1r/ppp2ppp/2np1n2/1B2p3/4P3/5N2/PPPP1PPP/RNBQ1RK1": "Ruy Lopez: Berlin Defense, Improved Steinitz Defense",
+ "r2q1rk1/pppbbppp/2np1n2/1B2p3/3PP3/2N2N2/PPP2PPP/R1BQR1K1": "Ruy Lopez: Berlin Defense, Tarrasch Trap",
+ "r1bqkb1r/pppn1ppp/2np4/1B2p3/3PP3/5N2/PPP2PPP/RNBQ1RK1": "Ruy Lopez: Closed Berlin Defense, Chigorin Variation",
+ "r2k1b1r/pppb1ppp/2p5/4Pn2/8/2N2N2/PPP2PPP/R1B2RK1": "Ruy Lopez: Berlin Defense, Berlin Wall",
+ "r1bqk2r/p1ppbppp/2p5/4Pn2/8/5N2/PPP1QPPP/RNB2RK1": "Ruy Lopez: Berlin Defense, Cordel Variation",
+ "r1bqk2r/ppppbppp/2n5/1B2P3/4n3/5N2/PPP2PPP/RNBQ1RK1": "Ruy Lopez: Berlin Defense, Minckwitz Variation",
+ "r1bqk2r/pnppbppp/2p5/4P3/8/1P3N2/P1P1QPPP/RNB2RK1": "Ruy Lopez: Berlin Defense, Pillsbury Variation",
+ "r1bqkb1r/pppp1ppp/2n5/1B2p3/4n3/5N2/PPPP1PPP/RNBQ1RK1": "Ruy Lopez: Berlin Defense, Rio Gambit Accepted",
+ "r1bqk2r/ppppbppp/2n5/1B2p3/3Pn3/5N2/PPP2PPP/RNBQ1RK1": "Ruy Lopez: Berlin Defense, Rio de Janeiro Variation",
+ "r1bq1rk1/p1ppbppp/8/2p1P3/3B4/2N5/PPP1QPPP/R3R1K1": "Ruy Lopez: Berlin Defense, Rio de Janeiro Variation",
+ "r1bqkb1r/1ppp1ppp/p1n5/1B2p3/3Pn3/5N2/PPP2PPP/RNBQ1RK1": "Ruy Lopez: Berlin Defense, Rosenthal Variation",
+ "r1bqk2r/ppp1bppp/2n5/1B1pp3/3Pn3/5N2/PPP1QPPP/RNB2RK1": "Ruy Lopez: Berlin Defense, Trifunovic Variation",
+ "r1bqk2r/pnppbppp/2p5/4P3/3N4/8/PPP1QPPP/RNB2RK1": "Ruy Lopez: Berlin Defense, Winawer Attack",
+ "r1bqk2r/pnppbppp/2p5/4P3/2P5/5N2/PP2QPPP/RNB2RK1": "Ruy Lopez: Berlin Defense, Zukertort Variation",
+ "r1bqkb1r/pppp1ppp/2nn4/1B2p3/3P4/5N2/PPP2PPP/RNBQ1RK1": "Ruy Lopez: Berlin Defense, l'Hermet Variation",
+ "r1bk1b1r/ppp2ppp/2p5/4Pn2/8/5N2/PPP2PPP/RNB2RK1": "Ruy Lopez: Berlin Defense, l'Hermet Variation, Berlin Wall Defense",
+ "r1bqkb1r/ppp2ppp/2p5/4P3/4n3/5N2/PPP2PPP/RNBQ1RK1": "Ruy Lopez: Berlin Defense, l'Hermet Variation, Westerinen Line",
+ "r1bqkb1r/pppp1ppp/2nn4/4p3/B2P4/5N2/PPP2PPP/RNBQ1RK1": "Ruy Lopez: Open Berlin Defense, Showalter Variation",
+ "r1bqkb1r/pppp1ppp/2nn4/1B2P3/8/5N2/PPP2PPP/RNBQ1RK1": "Ruy Lopez: Open Berlin Defense, l'Hermet Variation",
+ "r1bqkbnr/1ppp1ppp/p1B5/4p3/4P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Exchange Variation",
+ "r1b1k1nr/1pp2ppp/p1pb4/8/3NP3/8/PPP2PPP/RNB1K2R": "Ruy Lopez: Exchange Variation, Alekhine Variation",
+ "r1bqkbnr/1pp2ppp/p1p5/4p3/4P3/2N2N2/PPPP1PPP/R1BQK2R": "Ruy Lopez: Exchange Variation, Keres Variation",
+ "r1bqkbnr/2pp1ppp/p1p5/4p3/4P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Exchange Variation, Lutikov Variation",
+ "r1bqkbnr/1pp3pp/p1p2p2/4p3/4P3/2NP1N2/PPP2PPP/R1BQK2R": "Ruy Lopez: Exchange Variation, Romanovsky Variation",
+ "r3kbnr/1ppb1ppp/p1p5/8/3NP3/8/PPP2PPP/RNB1K2R": "Ruy Lopez: Exchange, Alekhine Variation",
+ "r2qkbnr/1pp2pp1/p1p5/4p2p/4P1b1/5N1P/PPPP1PP1/RNBQ1RK1": "Ruy Lopez: Exchange Variation, Alapin Gambit",
+ "r1b1kbnr/1pp2ppp/p1pq4/4p3/4P3/5N2/PPPP1PPP/RNBQ1RK1": "Ruy Lopez: Exchange Variation, Bronstein Variation",
+ "r1bqkbnr/1pp3pp/p1p2p2/4p3/4P3/5N2/PPPP1PPP/RNBQ1RK1": "Ruy Lopez: Exchange Variation, Gligoric Variation",
+ "r1bqk1nr/1pp2ppp/p1pb4/4p3/4P3/5N2/PPPP1PPP/RNBQ1RK1": "Ruy Lopez: Exchange Variation, King's Bishop Variation",
+ "r1bqkbnr/1pp2ppp/p1p5/4p3/4P3/5N2/PPPP1PPP/RNBQ1RK1": "Ruy Lopez: Exchange Variation, Normal Variation",
+ "r1bqkbnr/1ppp1ppp/p7/4p3/B2nP3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Bird's Defense Deferred",
+ "r1bqkbnr/1ppp1ppp/p1n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Morphy Defense",
+ "r1bqk1nr/1ppp1ppp/p1n5/4p3/Bb2P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Morphy Defense, Alapin's Defense Deferred",
+ "r1bqkbnr/2pp1ppp/p1n5/1p2p3/B3P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Morphy Defense, Caro Variation",
+ "r1bqk1nr/1ppp1ppp/p1n5/2b1p3/B3P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Morphy Defense, Classical Defense Deferred",
+ "r1bqkb1r/1pppnppp/p1n5/4p3/B3P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Morphy Defense, Cozio Defense",
+ "r1bqkbnr/1ppp1p1p/p1n3p1/4p3/B3P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Morphy Defense, Fianchetto Defense Deferred",
+ "r1bqk1nr/2pp1ppp/p1n5/1pb1p3/4P3/1B3N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Morphy Defense, Graz Variation",
+ "r1bqkbnr/2pp1ppp/p7/np2p3/4P3/1B3N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Morphy Defense, Norwegian Variation",
+ "r1bqkbnr/2pp1Bpp/p7/np2p3/4P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Morphy Defense, Norwegian Variation, Nightingale Gambit",
+ "r1bqkbnr/1ppp2pp/p1n5/4pp2/B3P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Morphy Defense, Schliemann Defense Deferred",
+ "r1bqkbnr/1ppp2pp/p1n5/4pP2/B7/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Morphy Defense, Schliemann Defense Deferred, Jaenisch Gambit Deferred",
+ "r1bqkbnr/1pp2ppp/p1np4/4p3/B3P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Morphy Defense, Modern Steinitz Defense",
+ "r1bqkbnr/1pp2ppp/p1np4/4p3/B3P3/2N2N2/PPPP1PPP/R1BQK2R": "Ruy Lopez: Morphy Defense, Modern Steinitz Defense",
+ "r1bqkbnr/1pp2ppp/p1np4/4p3/B1P1P3/5N2/PP1P1PPP/RNBQK2R": "Ruy Lopez: Morphy Defense, Modern Steinitz Defense",
+ "r1bqkbnr/5ppp/p2p4/1pp5/3QP3/1B6/PPP2PPP/RNB1K2R": "Ruy Lopez: Noah's Ark Trap",
+ "r2qbrk1/1pp1bppp/p1np1n2/4p3/B2PP3/2P2N2/PP1N1PPP/R1BQR1K1": "Ruy Lopez: Closed, Kecskemet Variation",
+ "r1bqkbnr/1pp2ppp/p1np4/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1": "Ruy Lopez: Morphy Defense, Modern Steinitz Defense",
+ "r1bqkbnr/2p2ppp/p1pp4/4p3/3PP3/5N2/PPP2PPP/RNBQK2R": "Ruy Lopez: Morphy Defense, Modern Steinitz Defense",
+ "r1bqkbnr/2p3pp/p1pp1p2/4p3/3PP3/5N2/PPP2PPP/RNBQK2R": "Ruy Lopez: Morphy Defense, Modern Steinitz Defense",
+ "r1bqkbnr/1pp2ppp/p1np4/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R": "Ruy Lopez: Morphy Defense, Modern Steinitz Defense",
+ "r2qkbnr/1pp3pp/p1np4/4pb2/B7/2P2N2/PP1P1PPP/RNBQ1RK1": "Ruy Lopez: Morphy Defense, Modern Steinitz Defense",
+ "r1bqkbnr/1pp3pp/p1np4/4pp2/B3P3/2P2N2/PP1P1PPP/RNBQK2R": "Ruy Lopez: Morphy Defense, Modern Steinitz Defense, Siesta Variation",
+ "r2qkbnr/1ppb1ppp/p1np4/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R": "Ruy Lopez: Morphy Defense, Modern Steinitz Defense",
+ "r2qkb1r/1ppbnppp/p1np4/4p3/B2PP3/2P2N2/PP3PPP/RNBQK2R": "Ruy Lopez: Morphy Defense, Modern Steinitz Defense",
+ "r2qkbnr/1ppb1p1p/p1np2p1/4p3/B2PP3/2P2N2/PP3PPP/RNBQK2R": "Ruy Lopez: Morphy Defense, Modern Steinitz Defense, Fianchetto Variation",
+ "r1bqkb1r/1ppp1ppp/p1n2n2/4p3/B3P3/3P1N2/PPP2PPP/RNBQK2R": "Ruy Lopez: Morphy Defense, Anderssen Variation",
+ "r1bqkb1r/1ppp1ppp/p1B2n2/4p3/4P3/5N2/PPPP1PPP/RNBQK2R": "Ruy Lopez: Morphy Defense, Bayreuth Variation",
+ "r1bqkb1r/1pp2ppp/p1np1n2/4p3/B1P1P3/3P1N2/PP3PPP/RNBQK2R": "Ruy Lopez: Morphy Defense, Duras Variation",
+ "r1bqkb1r/1ppp1ppp/p1n2n2/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R": "Ruy Lopez: Morphy Defense, Jaffe Gambit",
+ "r1bqkb1r/1ppp1ppp/p1n2n2/4p3/B2PP3/5N2/PPP2PPP/RNBQK2R": "Ruy Lopez: Morphy Defense, Mackenzie Variation",
+ "r1bqkb1r/1ppp1ppp/p1n2n2/4p3/B3P3/2N2N2/PPPP1PPP/R1BQK2R": "Ruy Lopez: Morphy Defense, Tarrasch Variation",
+ "r1bqkb1r/1ppp1ppp/p1n2n2/4p3/B3P3/5N2/PPPPQPPP/RNB1K2R": "Ruy Lopez: Morphy Defense, Wormald Attack",
+ "r2qk2r/2p1bppp/p1np1n2/1p2p3/3PP1b1/1BP2N2/PP2QPPP/RNB1K2R": "Ruy Lopez: Wormald Attack, Grünfeld Variation",
+ "r1bqkb1r/1ppp1p1p/p1n2np1/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1": "Ruy Lopez: Brix Variation",
+ "r1bqkb1r/1pp2ppp/p1n2n2/3pp3/B3P3/5N2/PPPP1PPP/RNBQ1RK1": "Ruy Lopez: Central Countergambit",
+ "r1bqkb1r/1ppp1ppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1": "Ruy Lopez: Morphy Defense",
+ "r1bqkb1r/2p2ppp/p1np1n2/1p2p3/4P3/1B3N2/PPPP1PPP/RNBQ1RK1": "Ruy Lopez: Morphy Defense",
+ "r2qkb1r/1bpp1ppp/p1n2n2/1p2p3/4P3/1B3N2/PPPP1PPP/RNBQ1RK1": "Ruy Lopez: Morphy Defense, Arkhangelsk Variation",
+ "r1bqk2r/1ppp1ppp/p1n2n2/2b1p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1": "Ruy Lopez: Morphy Defense, Neo-Arkhangelsk Variation",
+ "r1bqk2r/2ppbppp/p1n2n2/1p2p3/P3P3/1B3N2/1PPP1PPP/RNBQ1RK1": "Ruy Lopez: Morphy Defense, Wing Attack",
+ "r1bq1k1r/2p2ppp/p4n2/1pbPR1N1/3n4/1B6/PPPP1PPP/RNBQ2K1": "Ruy Lopez: Rabinovich Variation",
+ "r1bqkb1r/1pp2ppp/p1np1n2/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1": "Ruy Lopez: Morphy Defense, Steinitz Deferred",
+ "r1bqkb1r/2p2ppp/p1pp4/4p3/3Pn3/5N2/PPP2PPP/RNBQ1RK1": "Ruy Lopez: Morphy Defense, Steinitz Deferred",
+ "r1bqkb1r/2p3pp/p1p5/3pPp2/4n3/2N2N2/PPP2PPP/R1BQR1K1": "Ruy Lopez: Steinitz Defense Deferred, Boleslavsky Variation",
+ "r2qkb1r/2p2ppp/p1pp1n2/4p3/3PP1b1/5N2/PPP2PPP/RNBQ1RK1": "Ruy Lopez: Steinitz Defense Deferred, Lipnitsky Variation",
+ "r1bqkb1r/1ppp1ppp/p1n5/4p3/B3n3/5N2/PPPPQPPP/RNB2RK1": "Ruy Lopez: Morphy Defense, Tartakower Variation",
+ "r1bqkb1r/1ppp1ppp/p1n5/4p3/B3n3/5N2/PPPP1PPP/RNBQ1RK1": "Ruy Lopez: Open",
+ "r1bqkb1r/1ppp1ppp/p1n5/4p3/B2Pn3/5N2/PPP2PPP/RNBQ1RK1": "Ruy Lopez: Open",
+ "r1bqkb1r/2pp1ppp/p1n5/1p2p3/3Pn3/1B3N2/PPP2PPP/RNBQ1RK1": "Ruy Lopez: Open",
+ "r1bqkb1r/2p2ppp/p1n5/1p1pP3/4n3/1B3N2/PPP2PPP/RNBQ1RK1": "Ruy Lopez: Open",
+ "r1bqkb1r/2p2ppp/p7/1p1p4/P2pn3/1BN5/1PP2PPP/R1BQ1RK1": "Ruy Lopez: Open, Berger Variation",
+ "r2qkb1r/2p2ppp/p1n1b3/1p1pP3/4n3/1B3N2/PPPN1PPP/R1BQ1RK1": "Ruy Lopez: Open, Bernstein Variation",
+ "r2qk2r/2p2ppp/p1n1b3/1pbpP3/4n3/1B3N2/PPPN1PPP/R1B1QRK1": "Ruy Lopez: Open, Bernstein Variation, Luther Line",
+ "r1bqkb1r/2pp1ppp/p1n5/1p2N3/B2Pn3/8/PPP2PPP/RNBQ1RK1": "Ruy Lopez: Open, Friess Attack",
+ "r1bqkb1r/2p2ppp/p1n5/1p1pp3/2PPn3/1B3N2/PP3PPP/RNBQ1RK1": "Ruy Lopez: Open, Harksen Gambit",
+ "r2qkb1r/2p2ppp/p1n1b3/1pn1P1N1/3p4/1BP5/PP1N1PPP/R1BQ1RK1": "Ruy Lopez: Open, Karpov Gambit",
+ "r1bqkb1r/1ppp1ppp/p1n5/4p3/B3n3/2N2N2/PPPP1PPP/R1BQ1RK1": "Ruy Lopez: Open, Knorre Variation",
+ "r2qkb1r/2p2ppp/p1n1b3/1p1pP3/4n3/1B3N2/PPP2PPP/RNBQ1RK1": "Ruy Lopez: Open, Main Line",
+ "r1bqkb1r/2pp1ppp/p1n5/1p1Pp3/B3n3/5N2/PPP2PPP/RNBQ1RK1": "Ruy Lopez: Open, Richter Variation",
+ "r1bqkb1r/1ppp1ppp/p1n5/8/B2pn3/5N2/PPP2PPP/RNBQ1RK1": "Ruy Lopez: Open, Riga Variation",
+ "r1bqkb1r/2p2ppp/p7/1p1pp3/P2nn3/1B3N2/1PP2PPP/RNBQ1RK1": "Ruy Lopez: Open, Schlechter Defense",
+ "r1bqkb1r/1pp2ppp/p1n5/3pp3/B3n3/5N2/PPPP1PPP/RNBQR1K1": "Ruy Lopez: Open, Skipworth Gambit",
+ "r1bqkb1r/2p1nppp/p7/1p1pP3/4n3/1B3N2/PPP2PPP/RNBQ1RK1": "Ruy Lopez: Open, Zukertort Variation",
+ "r2qkb1r/2p2ppp/p1n1b3/1p1pP3/4n3/1B3N2/PPP1QPPP/RNB2RK1": "Ruy Lopez: Open, Howell Attack",
+ "r2qk2r/2p1bppp/p1n1b3/1p1pP3/2P1n3/1B3N2/PP2QPPP/RNB2RK1": "Ruy Lopez: Open, Howell Attack",
+ "r4rk1/2pqbppp/p1n1b3/3pP3/2B1n3/5N2/PP2QPPP/RNBR2K1": "Ruy Lopez: Open, Howell Attack, Ekstrom Variation",
+ "r2qkb1r/2p2ppp/p1n1b3/1p1pP3/4n3/1BP2N2/PP3PPP/RNBQ1RK1": "Ruy Lopez: Open",
+ "r2qkb1r/2p2ppp/p1n1b3/1pnpP3/8/1BP2N2/PP3PPP/RNBQ1RK1": "Ruy Lopez: Open, Berlin Variation",
+ "r2q1rk1/2p2ppp/p1n1b3/1pbpP3/8/2P2N2/PPBN1nPP/R1BQ1RK1": "Ruy Lopez: Open, Dilworth Variation",
+ "r2qk2r/2p2ppp/p1n1b3/1pbpP3/4n3/1BP2N2/PP3PPP/RNBQ1RK1": "Ruy Lopez: Open, Italian Variation",
+ "r2qk2r/2p2ppp/p1n1b3/1pbpP3/4n3/1BPQ1N2/PP3PPP/RNB2RK1": "Ruy Lopez: Open, Motzko Attack",
+ "r2qk2r/2p1nppp/p3b3/1pbpP3/4n3/1BPQ1N2/PP3PPP/RNB2RK1": "Ruy Lopez: Open, Motzko Attack, Nenarokov Variation",
+ "r2qk2r/2p2ppp/p1n1b3/1pbpP3/4n3/1BP2N2/PP1N1PPP/R1BQ1RK1": "Ruy Lopez: Open, St. Petersburg Variation",
+ "r2q1rk1/2p1bppp/p3b3/1p1pn3/3Nn3/1BP5/PP3PPP/RNBQR1K1": "Ruy Lopez: Open, Breslau Variation",
+ "r2qk2r/2p1bppp/p1n1b3/1p1pP3/4n3/1BP2N2/PP3PPP/RNBQ1RK1": "Ruy Lopez: Open, Classical Defense",
+ "r2qk2r/2p1bppp/p1n1b3/1p1pP3/4n3/1BP2N2/PP3PPP/RNBQR1K1": "Ruy Lopez: Open, Classical Defense, Main Line",
+ "r2q1rk1/2p1bppp/p1n1b3/1p1pP3/4n3/1BP2N2/PP1NQPPP/R1B2RK1": "Ruy Lopez: Open, Malkin Variation",
+ "r4rk1/2pqb1pp/p1n1p3/1p1pP3/4R3/1BP5/PP3PPP/RNBQ2K1": "Ruy Lopez: Open, Tarrasch Trap",
+ "r1bqk2r/1pppbppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1": "Ruy Lopez: Closed",
+ "r1bqk2r/1pppbppp/p1n5/4P3/B2pn3/2P2N2/PP3PPP/RNBQ1RK1": "Ruy Lopez: Closed, Basque Gambit",
+ "r1bqk2r/1pppbppp/p1n2n2/4p3/B2PP3/5N2/PPP2PPP/RNBQ1RK1": "Ruy Lopez: Closed, Center Attack",
+ "r1bqk2r/1pppbppp/p1n5/4P3/B3n3/2p2N2/PP3PPP/RNBQ1RK1": "Ruy Lopez: Closed, Center Attack, Basque Gambit",
+ "r1bqk2r/1pppbppp/p1n2n2/4p3/B3P3/3P1N2/PPP2PPP/RNBQ1RK1": "Ruy Lopez: Closed, Martinez Variation",
+ "r1bqk2r/1pppbppp/p1n2n2/4p3/B3P3/2N2N2/PPPP1PPP/R1BQ1RK1": "Ruy Lopez: Closed, Morphy Attack",
+ "r1bqk2r/1pppbppp/p1B2n2/4p3/4P3/5N2/PPPP1PPP/RNBQ1RK1": "Ruy Lopez: Closed, Delayed Exchange",
+ "r1bqk2r/1pppbppp/p1n2n2/4p3/B3P3/5N2/PPPPQPPP/RNB2RK1": "Ruy Lopez: Closed, Worrall Attack",
+ "r1bq1rk1/2ppbppp/p1n2n2/1p2p3/4P3/1B3N2/PPPPQPPP/RNB2RK1": "Ruy Lopez: Closed, Worrall Attack, Castling Line",
+ "r1bqk2r/2p1bppp/p1np1n2/1p2p3/4P3/1B3N2/PPPPQPPP/RNB2RK1": "Ruy Lopez: Closed, Worrall Attack, Delayed Castling Line",
+ "r1bqk2r/1pp1bppp/p1np1n2/4p3/B3P3/5N2/PPPP1PPP/RNBQR1K1": "Ruy Lopez: Closed, Averbakh Variation",
+ "r1bqk2r/2ppbppp/p1n2n2/1p2p3/4P3/1B3N2/PPPP1PPP/RNBQR1K1": "Ruy Lopez: Closed",
+ "r1bq1rk1/2ppbppp/p1n2n2/1p2p3/4P3/1B3N2/PPPP1PPP/RNBQR1K1": "Ruy Lopez: Closed",
+ "r4rk1/2q1bppp/p2p1n2/npp1p3/3PP3/2P1NQ2/PPB2PPP/R1B1R1K1": "Ruy Lopez: Closed, Alekhine Gambit",
+ "r1bq1rk1/2ppbppp/p1n2n2/1p2p3/P3P3/1B3N2/1PPP1PPP/RNBQR1K1": "Ruy Lopez: Closed, Anti-Marshall",
+ "r1b1k2r/2q1bppp/p2p1n2/npp1p3/P2PP3/2P2N2/1PB2PPP/RNBQR1K1": "Ruy Lopez: Closed, Balla Variation",
+ "rnb1k2r/2q1bp1p/p2p1n2/1ppPp1p1/4P3/2P2N1P/PPBN1PP1/R1BQR1K1": "Ruy Lopez: Closed, Leonhardt Variation",
+ "r1bqk2r/2p1bppp/p1np1n2/1p2p3/3PP3/1B3N2/PPP2PPP/RNBQR1K1": "Ruy Lopez: Closed, Rosen Attack",
+ "r2qk2r/1bppbppp/p1n2n2/1p2p3/4P3/1B3N2/PPPP1PPP/RNBQR1K1": "Ruy Lopez: Closed, Trajkovic Counterattack",
+ "r1bqk2r/4bppp/p2p1n2/1pp5/3QP3/1B6/PPP2PPP/RNB1R1K1": "Ruy Lopez: Noah's Ark Trap",
+ "r1bq1rk1/2p1bppp/p1n2n2/1p1pp3/4P3/1BP2N2/PP1P1PPP/RNBQR1K1": "Ruy Lopez: Marshall Attack",
+ "r1bq1rk1/4bppp/p1p5/1p1nR3/3P4/1BP5/PP3PPP/RNBQ2K1": "Ruy Lopez: Marshall Attack, Main Line",
+ "5rk1/5ppp/p1pbr3/1p1n3q/P2P2b1/1BPQB1P1/1P1N1P1P/R3R1K1": "Ruy Lopez: Marshall Attack, Main Line, Spassky Variation",
+ "r1b2rk1/5ppp/p1pb4/1p1n4/3P4/1BP3Pq/PP3P1P/RNBQR1K1": "Ruy Lopez: Marshall Attack, Modern Main Line",
+ "r1bq1rk1/4bppp/p1p5/1p1nR3/8/1BP5/PP1P1PPP/RNBQ2K1": "Ruy Lopez: Marshall Attack, Modern Variation",
+ "r1bq1rk1/2p1bppp/p4n2/1p2R3/8/1BP5/PP1P1PPP/RNBQ2K1": "Ruy Lopez: Marshall Attack, Original Marshall Attack",
+ "r1bq1rk1/5ppp/p2b4/1p1p4/3P4/2P1R3/PP3PPP/RNBQ2K1": "Ruy Lopez: Marshall Attack, Re3 Variation",
+ "r1bq1rk1/2p1bppp/p1n2n2/1p1P4/4p3/1BP2N2/PP1P1PPP/RNBQR1K1": "Ruy Lopez: Marshall Attack, Steiner Variation",
+ "r1bq1rk1/2p1bppp/p1np1n2/1p2p3/4P3/1BP2N2/PP1P1PPP/RNBQR1K1": "Ruy Lopez: Closed",
+ "r1bq1rk1/2p1bppp/p1np1n2/1p2p3/4P3/2P2N2/PPBP1PPP/RNBQR1K1": "Ruy Lopez: Closed, Lutikov Variation",
+ "r1bq1rk1/2p1bppp/p1np1n2/1p2p3/4P3/1BPP1N2/PP3PPP/RNBQR1K1": "Ruy Lopez: Closed, Pilnik Variation",
+ "r1bq1rk1/2p1bppp/p1np1n2/1p2p3/4P3/PBP2N2/1P1P1PPP/RNBQR1K1": "Ruy Lopez: Closed, Suetin Variation",
+ "r2q1rk1/2p1bppp/p1np1n2/1p2p3/3PP1b1/1BP2N2/PP3PPP/RNBQR1K1": "Ruy Lopez: Closed, Bogoljubov Variation",
+ "r1bq1rk1/2p1bppp/p1np1n2/1p2p3/3PP3/1BP2N2/PP3PPP/RNBQR1K1": "Ruy Lopez: Closed, Yates Variation",
+ "r2q1rk1/2p1bppp/p1np1n2/1p2p3/P2PP1b1/1BP2N2/1P3PPP/RNBQR1K1": "Ruy Lopez: Closed, Yates Variation, Short Attack",
+ "r1bq1rk1/2p1bppp/p1np1n2/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1": "Ruy Lopez: Closed",
+ "r2q1rk1/1bp1bppp/p1np1n2/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1": "Ruy Lopez: Closed, Flohr System",
+ "r1bq1rk1/2pnbppp/p1np4/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1": "Ruy Lopez: Closed, Karpov Variation",
+ "r2q1rk1/2p1bppp/p1npbn2/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1": "Ruy Lopez: Closed, Kholmov Variation",
+ "r2qrbk1/1bp2pp1/p1np1n1p/1p2p3/3PP3/PBP2N1P/1P1N1PP1/R1BQR1K1": "Ruy Lopez: Closed, Smyslov-Breyer-Zaitsev Hybrid",
+ "r1bqr1k1/2p1bppp/p1np1n2/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1": "Ruy Lopez: Closed, Zaitsev System",
+ "r1bq1rk1/2p1bpp1/p1np1n1p/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1": "Ruy Lopez: Closed, Smyslov Defense",
+ "rnbq1rk1/2p1bppp/p2p1n2/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1": "Ruy Lopez: Closed, Breyer Defense",
+ "rnbq1rk1/2p1bppp/p2p1n2/1p2p3/4P3/1BPP1N1P/PP3PP1/RNBQR1K1": "Ruy Lopez: Closed, Breyer Defense, Quiet Variation",
+ "rnbq1rk1/2p1bppp/p2p1n2/1p2p3/3PP3/1BP2N1P/PP3PP1/RNBQR1K1": "Ruy Lopez: Closed, Breyer",
+ "r2q1rk1/1b1nbppp/p2p1n2/1pp1p3/3PP3/2P2N1P/PPBN1PP1/R1BQR1K1": "Ruy Lopez: Closed, Breyer Defense",
+ "r1bq1rk1/2pnbppp/p2p1n2/1p2p3/3PP2N/1BP4P/PP3PP1/RNBQR1K1": "Ruy Lopez: Closed, Breyer Defense",
+ "r1bq1rk1/2pnbppp/p2p1n2/1p2p3/3PP3/1BP2N1P/PP3PP1/RNBQR1K1": "Ruy Lopez: Closed, Breyer Defense, Zaitsev Hybrid",
+ "r1bq1rk1/4bppp/p1np1n2/1pp1p3/3PP3/2P2N1P/PPB2PP1/RNBQR1K1": "Ruy Lopez: Closed, Borisenko Variation",
+ "r1bq1rk1/2p1bppp/p2p1n2/np2p3/4P3/2P2N1P/PPBP1PP1/RNBQR1K1": "Ruy Lopez: Closed, Chigorin Defense",
+ "r1bq1rk1/4bppp/p2p1n2/npp1p3/4P3/2P2N1P/PPBP1PP1/RNBQR1K1": "Ruy Lopez: Closed, Chigorin Defense",
+ "r1bq1rk1/3nbppp/p2p4/npp1p3/3PP3/2P2N1P/PPB2PP1/RNBQR1K1": "Ruy Lopez: Closed, Keres Defense",
+ "r1b2rk1/2q1bppp/p1pp1n2/np2p3/3PP3/2P2N1P/PPB2PP1/RNBQR1K1": "Ruy Lopez: Closed, Rossolimo Defense",
+ "r1bq1rk1/2p1bppp/p2p1n2/np2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1": "Ruy Lopez: Closed, Chigorin Defense",
+ "r1b2rk1/2q1bppp/p2p1n2/npp1p3/3PP3/2P2N1P/PPB2PP1/RNBQR1K1": "Ruy Lopez: Closed, Chigorin Defense",
+ "r3r1k1/2qbbp1p/p2p1np1/npp1p3/3PP3/2P1NN1P/PPB2PP1/R1BQR1K1": "Ruy Lopez: Closed, Chigorin, Yugoslav System",
+ "r1b2rk1/2q1bppp/p1np1n2/1pp1p3/3PP3/2P2N1P/PPBN1PP1/R1BQR1K1": "Ruy Lopez: Closed, Chigorin Defense",
+ "r1b2rk1/2q1bppp/p1np1n2/1pP1p3/4P3/2P2N1P/PPBN1PP1/R1BQR1K1": "Ruy Lopez: Closed, Chigorin Defense",
+ "r1b2rk1/2q1bppp/p2p1n2/np2p3/3PP3/5N1P/PPBN1PP1/R1BQR1K1": "Ruy Lopez: Closed, Chigorin Defense, Panov System",
+ "rnbqkbnr/ppp1pppp/8/3p4/3P4/3Q4/PPP1PPPP/RNB1KBNR": "Amazon Attack",
+ "rnbqkbnr/ppp1pppp/8/3p4/3PP3/8/PPP2PPP/RNBQKBNR": "Blackmar-Diemer Gambit",
+ "rnbqkb1r/ppp1pppp/5n2/8/3Pp3/2N5/PPP2PPP/R1BQKBNR": "Blackmar-Diemer Gambit",
+ "rnbqkb1r/ppp1pppp/5n2/8/3P4/2N2p2/PPP3PP/R1BQKBNR": "Blackmar-Diemer Gambit Accepted",
+ "rnbqkb1r/ppp1pp1p/5np1/8/3P4/2N2N2/PPP3PP/R1BQKB1R": "Blackmar-Diemer Gambit Accepted: Bogoljubow Defense",
+ "rnbq1rk1/ppp1ppbp/5np1/8/2BP4/2N2N2/PPP3PP/R1BQ1R1K": "Blackmar-Diemer Gambit Accepted: Bogoljubow Defense, Kloss Attack",
+ "rnbqk2r/ppp1ppbp/5np1/8/2BP3P/2N2N2/PPP3P1/R1BQK2R": "Blackmar-Diemer Gambit Accepted: Bogoljubow Defense, Mad Dog Attack",
+ "rnbqk2r/ppp1ppbp/5np1/4N3/2BP4/2N5/PPP3PP/R1BQK2R": "Blackmar-Diemer Gambit Accepted: Bogoljubow Defense, Nimzowitsch Attack",
+ "rnbq1rk1/ppp1ppbp/5np1/8/2BP4/2N2N2/PPP3PP/R1B1QRK1": "Blackmar-Diemer Gambit Accepted: Bogoljubow Defense, Studier Attack",
+ "rnbqkb1r/ppp2ppp/4pn2/8/3P4/2N2N2/PPP3PP/R1BQKB1R": "Blackmar-Diemer Gambit Accepted: Euwe Defense",
+ "r1bqk2r/ppp1bppp/4pn2/6B1/3n4/2NB1N2/PPP3PP/R2Q1R1K": "Blackmar-Diemer Gambit Accepted: Euwe Defense, Zilbermints Gambit",
+ "rn1qkb1r/ppp1pppp/5n2/5b2/3P4/2N2N2/PPP3PP/R1BQKB1R": "Blackmar-Diemer Gambit Accepted: Gunderam Defense",
+ "rn1qkb1r/ppp2ppp/4pn2/4N3/3Pb1P1/2N5/PPP4P/R1BQKB1R": "Blackmar-Diemer Gambit Accepted: Gunderam Defense, Stader Variation",
+ "rnb1kb1r/ppp1pppp/3q1n2/8/3P4/2N2N2/PPP3PP/R1BQKB1R": "Blackmar-Diemer Gambit Accepted: Holwell Defense",
+ "rnbqkb1r/pp2pppp/5n2/2p5/3P4/2N2N2/PPP3PP/R1BQKB1R": "Blackmar-Diemer Gambit Accepted: Kaulich Defense",
+ "r1bqkb1r/ppp1pppp/2n2n2/8/3P4/2N2N2/PPP3PP/R1BQKB1R": "Blackmar-Diemer Gambit Accepted: Pietrowsky Defense",
+ "rnbqkb1r/p1p1pppp/1p3n2/8/3P4/2N2N2/PPP3PP/R1BQKB1R": "Blackmar-Diemer Gambit Accepted: Ritter Defense",
+ "rnbqkb1r/ppp1pppp/5n2/8/3P4/2N2Q2/PPP3PP/R1B1KBNR": "Blackmar-Diemer Gambit Accepted: Ryder Gambit",
+ "r1bqkb1r/pppnpppp/5n2/8/3P4/2N2N2/PPP3PP/R1BQKB1R": "Blackmar-Diemer Gambit Accepted: Schlutter Defense",
+ "rn1qkb1r/ppp1pppp/5n2/8/3P2b1/2N2N2/PPP3PP/R1BQKB1R": "Blackmar-Diemer Gambit Accepted: Teichmann Defense",
+ "rn1qkb1r/pp2pppp/2p2n2/8/3P4/2N4P/PPP2QP1/R1B1KB1R": "Blackmar-Diemer Gambit Accepted: Teichmann Defense, Ciesielski Variation",
+ "rn1qkb1r/pp2pppp/2p2n2/8/3P4/2N1BQ1P/PPP3P1/R3KB1R": "Blackmar-Diemer Gambit Accepted: Teichmann Defense, Classical Variation",
+ "rn1qkb1r/pp2pppp/2p2n2/8/3P2P1/2N2Q1P/PPP5/R1B1KB1R": "Blackmar-Diemer Gambit Accepted: Teichmann Defense, Seidel-Hall Attack",
+ "rnbqkb1r/pp2pppp/2p2n2/8/3P4/2N2N2/PPP3PP/R1BQKB1R": "Blackmar-Diemer Gambit Accepted: Ziegler Defense",
+ "rnbqkb1r/pp2pppp/5n2/2p5/3Pp3/2N2P2/PPP3PP/R1BQKBNR": "Blackmar-Diemer Gambit Declined: Brombacher Countergambit",
+ "rnbqkb1r/ppp2ppp/5n2/4p3/3Pp3/2N2P2/PPP3PP/R1BQKBNR": "Blackmar-Diemer Gambit Declined: Elbert Countergambit",
+ "rnbqkb1r/1pp1pppp/p4n2/8/3Pp3/2N2P2/PPP3PP/R1BQKBNR": "Blackmar-Diemer Gambit Declined: Gedult Defense",
+ "r1bqkb1r/ppp1pppp/2n2n2/8/3Pp3/2N2P2/PPP3PP/R1BQKBNR": "Blackmar-Diemer Gambit Declined: Lamb Defense",
+ "rnbqkb1r/ppp1pppp/5n2/8/3P4/2N1pP2/PPP3PP/R1BQKBNR": "Blackmar-Diemer Gambit Declined: Langeheinicke Defense",
+ "rnbqkb1r/pp2pppp/2p2n2/8/3Pp3/2N2P2/PPP3PP/R1BQKBNR": "Blackmar-Diemer Gambit Declined: O'Kelly Defense",
+ "rn1qkb1r/ppp1pppp/5n2/5b2/3Pp3/2N2P2/PPP3PP/R1BQKBNR": "Blackmar-Diemer Gambit Declined: Vienna Defense",
+ "rnbqkb1r/ppp2ppp/4pn2/8/3Pp3/2N2P2/PPP3PP/R1BQKBNR": "Blackmar-Diemer Gambit Declined: Weinsbach Defense",
+ "rnbqkbnr/ppp1pppp/8/8/3Pp3/5P2/PPP3PP/RNBQKBNR": "Blackmar-Diemer Gambit: Blackmar Gambit",
+ "rnbqkbnr/ppp1pppp/8/8/3Pp3/4B3/PPP2PPP/RN1QKBNR": "Blackmar-Diemer Gambit: Diemer-Rosenberg Attack",
+ "rnbqkbnr/ppp1pppp/8/8/2BPp3/8/PPP2PPP/RNBQK1NR": "Blackmar-Diemer Gambit: Fritz Attack",
+ "rnbqkbnr/ppp2ppp/8/4p3/3Pp3/2N5/PPP2PPP/R1BQKBNR": "Blackmar-Diemer Gambit: Lemberger Countergambit",
+ "rnbqkbnr/ppp2ppp/8/4P3/4p3/2N5/PPP2PPP/R1BQKBNR": "Blackmar-Diemer Gambit: Lemberger Countergambit, Endgame Variation",
+ "rnbqkbnr/ppp2ppp/8/4p3/3Pp3/2N5/PPP1NPPP/R1BQKB1R": "Blackmar-Diemer Gambit: Lemberger Countergambit, Rasmussen Attack",
+ "rnbqkbnr/ppp2ppp/8/4p2Q/3Pp3/2N5/PPP2PPP/R1B1KBNR": "Blackmar-Diemer Gambit: Lemberger Countergambit, Sneiders Attack",
+ "rnbqkbnr/ppp2ppp/8/4p3/3Pp3/2N1B3/PPP2PPP/R2QKBNR": "Blackmar-Diemer Gambit: Lemberger Countergambit, Soller Attack",
+ "rnbqkbnr/ppp1p1pp/8/5p2/3Pp3/2N5/PPP2PPP/R1BQKBNR": "Blackmar-Diemer Gambit: Netherlands Variation",
+ "rnbqkb1r/ppp1pppp/5n2/8/3Pp3/2N1B3/PPP2PPP/R2QKBNR": "Blackmar-Diemer Gambit: Rasa-Studier Gambit",
+ "rnbqkbnr/pp2pppp/8/2p5/3Pp3/2N5/PPP2PPP/R1BQKBNR": "Blackmar-Diemer Gambit: Reversed Albin Countergambit",
+ "rn1qkbnr/ppp1pppp/8/5b2/3Pp3/2N5/PPP2PPP/R1BQKBNR": "Blackmar-Diemer Gambit: Zeller Defense",
+ "rn1qkb1r/ppp1pppp/5n2/5b2/2BPp3/2N2P2/PPP3PP/R1BQK1NR": "Blackmar-Diemer Gambit: Zeller Defense, Soller Attack",
+ "rnbqkb1r/ppp1pppp/5n2/6B1/3Pp3/2N5/PPP2PPP/R2QKBNR": "Blackmar-Diemer Gambit: von Popiel Gambit",
+ "rn1qk2r/ppp2ppp/5pb1/1Q6/1b1Pp1P1/2N5/PPP2P1P/R3KBNR": "Blackmar-Diemer Gambit: von Popiel Gambit, Zilbermints Variation",
+ "rnbqkbnr/ppp1pppp/8/3p4/3P4/8/PPP1PPPP/RNBQKBNR": "Queen's Pawn Game",
+ "rnbqkbnr/ppp1pppp/8/3p4/3P4/4P3/PPP2PPP/RNBQKBNR": "Queen's Pawn Game",
+ "rnbqkb1r/ppp1pppp/5n2/3p4/3P4/4P3/PPP2PPP/RNBQKBNR": "Queen's Pawn Game",
+ "rnbqkbnr/ppp1pppp/8/3p4/3P1B2/8/PPP1PPPP/RN1QKBNR": "Queen's Pawn Game: Accelerated London System",
+ "rnbqkbnr/pp2pppp/8/2pp4/3P1B2/8/PPP1PPPP/RN1QKBNR": "Queen's Pawn Game: Accelerated London System, Steinitz Countergambit",
+ "rnbqkbnr/pp2pppp/8/2Pp4/5B2/8/PPP1PPPP/RN1QKBNR": "Queen's Pawn Game: Accelerated London System, Steinitz Countergambit Accepted",
+ "rnbqkbnr/pp2pppp/8/2pp4/3PPB2/8/PPP2PPP/RN1QKBNR": "Queen's Pawn Game: Accelerated London System, Steinitz Countergambit, Morris Countergambit",
+ "rnbqkbnr/pp2pppp/8/2p5/3PpB2/8/PPP2PPP/RN1QKBNR": "Queen's Pawn Game: Accelerated London System, Steinitz Countergambit, Morris Countergambit Accepted",
+ "rnbqkbnr/ppp1pppp/8/3p4/3P4/2N5/PPP1PPPP/R1BQKBNR": "Queen's Pawn Game: Chigorin Variation",
+ "rn1qkbnr/ppp1pppp/8/3p1b2/3P4/2N5/PPP1PPPP/R1BQKBNR": "Queen's Pawn Game: Chigorin Variation, Alburt Defense",
+ "rn1qkbnr/ppp1pppp/8/3p4/3P2b1/2N5/PPP1PPPP/R1BQKBNR": "Queen's Pawn Game: Chigorin Variation, Anti-Veresov",
+ "rnbqk1nr/ppp1ppbp/6p1/3p4/3P4/2N2N2/PPP1PPPP/R1BQKB1R": "Queen's Pawn Game: Chigorin Variation, Fianchetto Defense",
+ "rnbqkbnr/pp2pppp/8/2pp4/3P4/2N5/PPP1PPPP/R1BQKBNR": "Queen's Pawn Game: Chigorin Variation, Irish Gambit",
+ "rnbqkbnr/ppp2ppp/8/3pp3/3P4/2N5/PPP1PPPP/R1BQKBNR": "Queen's Pawn Game: Chigorin Variation, Shaviliuk Gambit",
+ "rnbqkbnr/ppp1ppp1/8/3p3p/3P4/2N5/PPP1PPPP/R1BQKBNR": "Queen's Pawn Game: Chigorin Variation, Shropshire Defense",
+ "rnbqkb1r/ppp1pppp/5n2/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR": "Queen's Pawn Game: Hübsch Gambit",
+ "rnbqkbnr/ppp1pppp/8/3p2B1/3P4/8/PPP1PPPP/RN1QKBNR": "Queen's Pawn Game: Levitsky Attack",
+ "rn1qkbnr/ppp1pppp/8/3p2B1/3P2b1/8/PPP1PPPP/RN1QKBNR": "Queen's Pawn Game: Levitsky Attack, Welling Variation",
+ "rnbqkbnr/ppp1pppp/8/3p4/3P1P2/8/PPP1P1PP/RNBQKBNR": "Queen's Pawn Game: Mason Attack",
+ "rnbqkb1r/ppp1pppp/5n2/3p4/3P4/3BP3/PPP2PPP/RNBQK1NR": "Queen's Pawn Game: Stonewall Attack",
+ "rnbqkbnr/ppp1pppp/8/3p4/3P2P1/8/PPP1PP1P/RNBQKBNR": "Queen's Pawn Game: Zurich Gambit",
+ "rnbqkb1r/ppp1pppp/5n2/3p4/3P1B2/2N5/PPP1PPPP/R2QKBNR": "Rapport-Jobava System",
+ "rnbqkb1r/ppp1pppp/5n2/3p2B1/3P4/2N5/PPP1PPPP/R2QKBNR": "Richter-Veresov Attack",
+ "rn1qkb1r/ppp1pppp/5n2/3p1bB1/3P4/2N5/PPP1PPPP/R2QKBNR": "Richter-Veresov Attack",
+ "rnbqkb1r/ppp1pppp/8/3p2B1/3Pn3/2N5/PPP1PPPP/R2QKBNR": "Richter-Veresov Attack: Boyce Defense",
+ "rnbqkb1r/pp2pp1p/5p2/2pP4/4p3/2N5/PPP2PPP/R2QKBNR": "Richter-Veresov Attack: Malich Gambit",
+ "rn1qkb1r/ppp1pppp/5n2/3p1bB1/3P4/2N2P2/PPP1P1PP/R2QKBNR": "Richter-Veresov Attack: Richter Variation",
+ "r1bqkb1r/pppnpppp/5n2/3p2B1/3P4/2N2N2/PPP1PPPP/R2QKB1R": "Richter-Veresov Attack: Two Knights System",
+ "r1bqkb1r/pppnpp1p/5np1/3p2B1/3P4/2N2N2/PPP1PPPP/R2QKB1R": "Richter-Veresov Attack: Two Knights System, Grünfeld Defense",
+ "rn1qkb1r/ppp1pppp/5B2/3p1b2/3P4/2N5/PPP1PPPP/R2QKBNR": "Richter-Veresov Attack: Veresov Variation",
+ "rnb1kb1r/pp2pppp/1q3n2/2pp4/3P1B2/2N1PN2/PPP2PPP/R2QKB1R": "London System: Poisoned Pawn Variation",
+ "rn1qkbnr/pp3ppp/2p1p3/3p1b2/2PP4/2N2N2/PP2PPPP/R1BQKB1R": "Queen's Gambit Declined: Baltic Defense, Pseudo-Slav",
+ "rn1qkbnr/ppp1pppp/8/3p4/3P2b1/5N2/PPP1PPPP/RNBQKB1R": "Queen's Pawn Game: Anti-Torre",
+ "rnbqkbnr/pp2pppp/8/3p4/3p4/5NP1/PPP1PPBP/RNBQK2R": "Queen's Pawn Game: Chandler Gambit",
+ "r1bqkbnr/ppp1pppp/2n5/3p4/3P4/5N2/PPP1PPPP/RNBQKB1R": "Queen's Pawn Game: Chigorin Variation",
+ "rnbqkbnr/pp2pppp/8/2pp4/3P4/5N2/PPP1PPPP/RNBQKB1R": "Queen's Pawn Game: Krause Variation",
+ "rnb1kbnr/pp2ppp1/1qp4p/3p4/3P3B/5N2/PPP1PPPP/RN1QKB1R": "Queen's Pawn Game: Levitsky Attack, Euwe Variation, Modern Line",
+ "rnbqkb1r/ppp1pppp/5n2/3p4/3P1B2/5N2/PPP1PPPP/RN1QKB1R": "Queen's Pawn Game: London System",
+ "rnb1k1nr/pp1pppbp/6p1/q7/3P1B2/5N2/PP2PPPP/RN1QKB1R": "Queen's Pawn Game: London System, Pterodactyl Variation",
+ "rnbqkb1r/ppp1pppp/5n2/3p4/3P4/5N2/PPP1PPPP/RNBQKB1R": "Queen's Pawn Game: Symmetrical Variation",
+ "rnbqkb1r/ppp1pppp/5n2/3p4/3P4/5NP1/PPP1PP1P/RNBQKB1R": "Queen's Pawn Game: Symmetrical Variation, Pseudo-Catalan",
+ "rnbqkb1r/p1p1pppp/5n2/1p1p4/2PP4/5N2/PP2PPPP/RNBQKB1R": "Queen's Pawn Game: Zilbermints Countergambit",
+ "rnbqkbnr/ppp1pppp/8/3p4/3P4/5N2/PPP1PPPP/RNBQKB1R": "Queen's Pawn Game: Zukertort Variation",
+ "rnbqkb1r/ppp1pppp/5n2/3p2B1/3P4/5N2/PPP1PPPP/RN1QKB1R": "Queen's Pawn Game: Torre Attack",
+ "rnbqkb1r/ppp1pppp/8/3p2B1/3Pn3/5N2/PPP1PPPP/RN1QKB1R": "Queen's Pawn Game: Torre Attack, Gossip Variation",
+ "rnbqkb1r/ppp1pp1p/5np1/3p2B1/3P4/5N2/PPP1PPPP/RN1QKB1R": "Queen's Pawn Game: Torre Attack, Grünfeld Variation",
+ "rnbqkb1r/ppp1pppp/5n2/3p4/3P4/4PN2/PPP2PPP/RNBQKB1R": "Queen's Pawn Game: Colle System",
+ "rn1qkb1r/ppp1pppp/5n2/3p1b2/3P4/4PN2/PPP2PPP/RNBQKB1R": "Queen's Pawn Game: Colle System, Anti-Colle",
+ "rnbqk2r/ppp1ppbp/5np1/3p4/3P4/3BPN2/PPP2PPP/RNBQK2R": "Queen's Pawn Game: Colle System, Grünfeld Formation",
+ "rnbqkb1r/ppp2ppp/4pn2/3p4/3P4/4PN2/PPP2PPP/RNBQKB1R": "Queen's Pawn Game: Colle System",
+ "rnbqkb1r/ppp2ppp/4pn2/3p4/3P4/3BPN2/PPP2PPP/RNBQK2R": "Queen's Pawn Game: Colle System",
+ "rnbqkb1r/pp3ppp/4pn2/2pp4/3P4/2PBPN2/PP3PPP/RNBQK2R": "Queen's Pawn Game: Colle System, Traditional Colle",
+ "rnbqkb1r/pp3ppp/4pn2/2pp4/3P4/1P2PN2/P1PN1PPP/R1BQKB1R": "Queen's Pawn Game: Zukertort Variation",
+ "rnbqkb1r/pp3ppp/4pn2/2pp4/3P4/1P1BPN2/P1P2PPP/RNBQK2R": "Rubinstein Opening",
+ "r1bq1rk1/pp3ppp/2nbpn2/2pp4/3P4/1P1BPN2/PBP2PPP/RN1Q1RK1": "Rubinstein Opening: Bogoljubov Defense",
+ "r1bq1rk1/pp2bppp/2n1pn2/2pp4/3P4/1P1BPN2/PBP2PPP/RN1Q1RK1": "Rubinstein Opening: Classical Defense",
+ "r1bq1rk1/pppn1ppp/3bpn2/3p4/3P4/1P1BPN2/PBP2PPP/RN1Q1RK1": "Rubinstein Opening: Semi-Slav Defense",
+ "rnbqkbnr/ppp1pppp/8/3p4/2PP4/8/PP2PPPP/RNBQKBNR": "Queen's Gambit",
+ "rnbqkbnr/pp2pppp/8/2P5/2Pp4/8/PP2PPPP/RNBQKBNR": "Queen's Gambit Declined: Austrian Attack, Salvio Countergambit",
+ "rnbqkbnr/pp2pppp/8/2pp4/2PP4/8/PP2PPPP/RNBQKBNR": "Queen's Gambit Declined: Austrian Defense",
+ "rnbqkb1r/pp2pppp/5n2/2pP4/3P4/8/PP2PPPP/RNBQKBNR": "Queen's Gambit Declined: Austrian Defense, Gusev Countergambit",
+ "rnb1kb1r/pp2pppp/8/q1PP4/4n3/8/PP3PPP/RNBQKBNR": "Queen's Gambit Declined: Austrian Defense, Haberditz Variation",
+ "rn1qkbnr/ppp1pppp/8/3p1b2/2PP4/8/PP2PPPP/RNBQKBNR": "Queen's Gambit Declined: Baltic Defense",
+ "r2qkbnr/pp2pppp/2n5/8/Q2P4/8/PP2PPPP/RbB1KBNR": "Queen's Gambit Declined: Baltic Defense, Argentinian Gambit",
+ "r2qkbnr/ppp2ppp/2n1p3/3p1b2/2PP4/2N2N2/PP2PPPP/R1BQKB1R": "Queen's Gambit Declined: Baltic Defense, Pseudo-Chigorin",
+ "rn1qkbnr/ppp1pppp/8/3p1b2/2PP4/1Q6/PP2PPPP/RNB1KBNR": "Queen's Gambit Declined: Baltic Defense, Queen Attack",
+ "rn1qkbnr/ppp2ppp/4p3/3p1b2/2PP4/1QN5/PP2PPPP/R1B1KBNR": "Queen's Gambit Declined: Baltic Defense, Queen Attack Deferred",
+ "rnbqkb1r/ppp1pppp/5n2/3p4/2PP4/8/PP2PPPP/RNBQKBNR": "Queen's Gambit Declined: Marshall Defense",
+ "rnbqkb1r/pp2pppp/2p2n2/3P4/3P4/8/PP2PPPP/RNBQKBNR": "Queen's Gambit Declined: Marshall Defense, Tan Gambit",
+ "rnbqkbnr/p1p1pppp/8/1p1p4/2PP4/8/PP2PPPP/RNBQKBNR": "Queen's Gambit Declined: Zilbermints Gambit",
+ "r1bqkbnr/ppp1pppp/2n5/3p4/2PP4/8/PP2PPPP/RNBQKBNR": "Queen's Gambit Declined: Chigorin Defense",
+ "r1bqkbnr/ppp1pppp/2n5/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR": "Queen's Gambit Declined: Chigorin Defense",
+ "r1bqkbnr/ppp1pppp/2n5/8/2pP4/2N5/PP2PPPP/R1BQKBNR": "Queen's Gambit Declined: Chigorin Defense",
+ "r1b1kbnr/ppp1pppp/2n5/3q4/3P4/8/PP2PPPP/RNBQKBNR": "Queen's Gambit Declined: Chigorin Defense, Exchange Variation",
+ "r1b1k1nr/ppp2ppp/2n5/3q4/3p4/2B1P3/PP2NPPP/R2QKB1R": "Queen's Gambit Declined: Chigorin Defense, Exchange Variation, Costa's Line",
+ "r1bqkbnr/ppp1pppp/2n5/8/2pP4/2N2N2/PP2PPPP/R1BQKB1R": "Queen's Gambit Declined: Chigorin Defense, Janowski Variation",
+ "r1bqkbnr/ppp2ppp/2n5/3pp3/2PP4/5N2/PP2PPPP/RNBQKB1R": "Queen's Gambit Declined: Chigorin Defense, Lazard Gambit",
+ "r2qkbnr/ppp1pppp/2n5/3p4/2PP2b1/5N2/PP2PPPP/RNBQKB1R": "Queen's Gambit Declined: Chigorin Defense, Main Line",
+ "r2qkbnr/ppp1pppp/2n5/3p4/Q1PP2b1/5N2/PP2PPPP/RNB1KB1R": "Queen's Gambit Declined: Chigorin Defense, Main Line, Alekhine Variation",
+ "r1bqkb1r/ppp1pppp/2n2n2/8/2pP4/2N2N2/PP2PPPP/R1BQKB1R": "Queen's Gambit Declined: Chigorin Defense, Modern Gambit",
+ "r1bqkbnr/ppp2ppp/2n5/3pp3/2PP4/2N5/PP2PPPP/R1BQKBNR": "Queen's Gambit Declined: Chigorin Defense, Tartakower Gambit",
+ "rnbqkbnr/ppp2ppp/8/3pp3/2PP4/8/PP2PPPP/RNBQKBNR": "Queen's Gambit Declined: Albin Countergambit",
+ "r1b1kbnr/ppp1qppp/2n5/4P3/2Pp4/5N2/PP1NPPPP/R1BQKB1R": "Queen's Gambit Declined: Albin Countergambit, Balogh Variation",
+ "r1bqkbnr/ppp3pp/2n2p2/4P3/2Pp4/5N2/PP1NPPPP/R1BQKB1R": "Queen's Gambit Declined: Albin Countergambit, Janowski Variation",
+ "r3k1nr/ppp1qppp/2n5/4P3/1bPp4/5N1P/PP1BPPP1/R2QKB1R": "Queen's Gambit Declined: Albin Countergambit, Krenosz Variation",
+ "rnbqk1nr/ppp2ppp/8/4P3/1bP5/4p3/PP1B1PPP/RN1QKBNR": "Queen's Gambit Declined: Albin Countergambit, Lasker Trap",
+ "r1bqkbnr/ppp2ppp/2n5/4P3/2Pp4/5N2/PP1NPPPP/R1BQKB1R": "Queen's Gambit Declined: Albin Countergambit, Modern Line",
+ "rnbqkbnr/ppp2ppp/8/4P3/2Pp4/5N2/PP2PPPP/RNBQKB1R": "Queen's Gambit Declined: Albin Countergambit, Normal Line",
+ "rnbqkbnr/pp3ppp/8/2p1P3/2Pp4/5N2/PP2PPPP/RNBQKB1R": "Queen's Gambit Declined: Albin Countergambit, Tartakower Defense",
+ "r1bqkbnr/ppp2ppp/2n5/4P3/2Pp4/5NP1/PP2PP1P/RNBQKB1R": "Queen's Gambit Declined: Albin Countergambit, Fianchetto Variation",
+ "r2qkbnr/ppp2ppp/2n1b3/4P3/2Pp4/5NP1/PP2PP1P/RNBQKB1R": "Queen's Gambit Declined: Albin Countergambit, Fianchetto Variation, Be6 Line",
+ "r2qkbnr/ppp2ppp/2n5/4Pb2/2Pp4/5NP1/PP2PP1P/RNBQKB1R": "Queen's Gambit Declined: Albin Countergambit, Fianchetto Variation, Bf5 Line",
+ "r2qkbnr/ppp2ppp/2n5/4P3/2Pp2b1/5NP1/PP2PP1P/RNBQKB1R": "Queen's Gambit Declined: Albin Countergambit, Fianchetto Variation, Bg4 Line",
+ "rnbqkbnr/pp2pppp/2p5/3p4/2PP4/8/PP2PPPP/RNBQKBNR": "Slav Defense",
+ "rnbqkbnr/pp2pppp/2p5/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR": "Slav Defense",
+ "rnbqkbnr/pp2pppp/2p5/8/2pP4/2N5/PP2PPPP/R1BQKBNR": "Slav Defense",
+ "rnbqkbnr/pp2pppp/2p5/3p4/2PPP3/8/PP3PPP/RNBQKBNR": "Slav Defense: Diemer Gambit",
+ "rnbqkbnr/pp2pppp/2p5/3P4/3P4/8/PP2PPPP/RNBQKBNR": "Slav Defense: Exchange Variation",
+ "rnbqkb1r/pp2pppp/5n2/3p4/3P4/2N2P2/PP2P1PP/R1BQKBNR": "Slav Defense: Exchange Variation, Boor Attack",
+ "rnbqkbnr/pp2pppp/2p5/8/2pPP3/2N5/PP3PPP/R1BQKBNR": "Slav Defense: Slav Gambit, Alekhine Attack",
+ "rnbqkbnr/pp3ppp/2p5/3pp3/2PP4/2N5/PP2PPPP/R1BQKBNR": "Slav Defense: Winawer Countergambit",
+ "rnbqkbnr/pp3ppp/2p5/3pp3/2PPP3/2N5/PP3PPP/R1BQKBNR": "Slav Defense: Winawer Countergambit, Anti-Winawer Gambit",
+ "rnbqkb1r/pp2pppp/2p2n2/3p2B1/2PP4/5N2/PP2PPPP/RN1QKB1R": "Slav Defense: Bonet Gambit",
+ "rnbqkb1r/pp2pppp/2p2n2/3p4/2PP4/5N2/PP1NPPPP/R1BQKB1R": "Slav Defense: Breyer Variation",
+ "rnbqkbnr/pp2pppp/2p5/3p4/2PP4/5N2/PP2PPPP/RNBQKB1R": "Slav Defense: Modern Line",
+ "rnbqkb1r/pp2pppp/2p2n2/3p4/2PP4/4PN2/PP3PPP/RNBQKB1R": "Slav Defense: Quiet Variation",
+ "rn1qkb1r/pp2pppp/2p2n2/3p4/2PP2b1/4PN2/PP3PPP/RNBQKB1R": "Slav Defense: Quiet Variation, Pin Defense",
+ "rn1qkb1r/pp1n1ppp/4p3/3pNb2/3P4/2N1P3/PP3PPP/R1BQKB1R": "Slav Defense: Quiet Variation, Amsterdam Variation",
+ "rnq1kb1r/pp3ppp/4pn2/3p1b2/3P4/NQ2PN2/PP1B1PPP/R3KB1R": "Slav Defense: Quiet Variation, Landau Variation",
+ "rn1qkb1r/pp2pppp/2p2n2/3p1b2/2PP4/4PN2/PP3PPP/RNBQKB1R": "Slav Defense: Quiet Variation, Schallopp Defense",
+ "rnbqkb1r/pp2pppp/5n2/3p4/3P4/5N2/PP2PPPP/RNBQKB1R": "Slav Defense: Exchange Variation",
+ "rn1qkb1r/pp2pppp/5n2/3p1b2/3P4/2N1PN2/PP3PPP/R1BQKB1R": "Slav Defense: Exchange Variation, Schallopp Variation",
+ "r2qkb1r/pp2pppp/2n2n2/3p1b2/3P1B2/2N2N2/PP2PPPP/R2QKB1R": "Slav Defense: Exchange Variation, Symmetrical Line",
+ "r2qk2r/pp3ppp/2n1pn2/3p1b2/1b1P1B2/1QN1PN2/PP3PPP/R3KB1R": "Slav Defense: Exchange Variation, Trifunovic Variation",
+ "rnbqkb1r/pp2pppp/2p2n2/8/2pP4/2N1PN2/PP3PPP/R1BQKB1R": "Slav Defense: Alekhine Variation",
+ "rnbqkb1r/1p2pppp/p1p2n2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R": "Slav Defense: Chameleon Variation",
+ "rnbqkb1r/1p2pppp/p1p2n2/2Pp4/3P4/2N2N2/PP2PPPP/R1BQKB1R": "Slav Defense: Chameleon Variation, Advance System",
+ "rnbqkb1r/pp2pppp/2p2n2/8/2pPP3/2N2N2/PP3PPP/R1BQKB1R": "Slav Defense: Geller Gambit",
+ "rnbqkb1r/p3pppp/2p2n2/1p2P3/2pP4/2N2N2/PP3PPP/R1BQKB1R": "Slav Defense: Geller Gambit",
+ "rnbqkb1r/pp2pp1p/2p2np1/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R": "Slav Defense: Schlechter Variation",
+ "rnb1kb1r/pp2pppp/1qp2n2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R": "Slav Defense: Süchting Variation",
+ "rnbqkb1r/pp2pppp/2p2n2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R": "Slav Defense: Three Knights Variation",
+ "rnbqkb1r/pp2pppp/2p2n2/8/2pP4/2N2N2/PP2PPPP/R1BQKB1R": "Slav Defense: Two Knights Attack",
+ "rnbqkb1r/pp2pppp/2p2n2/8/P1pP4/2N2N2/1P2PPPP/R1BQKB1R": "Slav Defense: Alapin Variation",
+ "r1bqkb1r/pp2pppp/n1p2n2/8/P1pP4/2N2N2/1P2PPPP/R1BQKB1R": "Slav Defense: Smyslov Variation",
+ "rnbqkb1r/pp3ppp/2p1pn2/8/P1pP4/2N2N2/1P2PPPP/R1BQKB1R": "Slav Defense: Soultanbeieff Variation",
+ "rn1qkb1r/pp2pppp/2p2n2/8/P1pP2b1/2N2N2/1P2PPPP/R1BQKB1R": "Slav Defense: Steiner Variation",
+ "rn1qkb1r/pp2pppp/2p2n2/5b2/P1pP4/2N2N2/1P2PPPP/R1BQKB1R": "Slav Defense: Czech Variation",
+ "rn1qkb1r/pp2pppp/2p2n2/5b2/P1pP3N/2N5/1P2PPPP/R1BQKB1R": "Slav Defense: Czech Variation, Bled Attack",
+ "r3kb1r/ppqn1ppp/2p2n2/4pb2/P1NP4/2N3P1/1P2PP1P/R1BQKB1R": "Slav Defense: Czech Variation, Carlsbad Variation",
+ "r3kb1r/ppqn1p1p/2p5/4nbp1/P1N2B2/2N3P1/1P2PPBP/R2QK2R": "Slav Defense: Czech Variation, Carlsbad Variation, Morozevich Variation",
+ "rn1qkb1r/pp2pppp/2p2n2/4Nb2/P1pP4/2N5/1P2PPPP/R1BQKB1R": "Slav Defense: Czech Variation, Krause Attack",
+ "r2qkb1r/pp2pppp/n1p2n2/4Nb2/P1pPP3/2N5/1P3PPP/R1BQKB1R": "Slav Defense: Czech Variation, Krause Attack, Fazekas Gambit",
+ "rn1qkb1r/pp3ppp/2p1pn2/4Nb2/P1pP4/2N5/1P2PPPP/R1BQKB1R": "Slav Defense: Czech Variation, Wiesbaden Variation",
+ "rn1qk2r/pp3ppp/2p1pn2/4Nb2/PbpPP3/2N2P2/1P4PP/R1BQKB1R": "Slav Defense: Czech Variation, Wiesbaden Variation, Sharp Line",
+ "rn1qkb1r/pp2pppp/2p2n2/5b2/P1pP4/2N1PN2/1P3PPP/R1BQKB1R": "Slav Defense: Czech Variation, Classical System",
+ "r2qkb1r/pp2pppp/n1p2n2/5b2/P1pP4/2N1PN2/1P3PPP/R1BQKB1R": "Slav Defense: Czech Variation, Lasker Variation",
+ "rn1q1rk1/pp3ppp/2p1pn2/5b2/PbBP4/2N1PN2/1P2QPPP/R1B2RK1": "Slav Defense: Czech Variation, Classical System, Main Line",
+ "rn1qk2r/pp3ppp/2p1pn2/5b2/PbBP4/2N1PN2/1P3PPP/R1BQ1RK1": "Slav Defense: Czech Variation, Dutch Variation",
+ "rn1q1rk1/pp3ppp/2p1p3/5b2/PbBPn1P1/2N1PN2/1P2QP1P/R1B2RK1": "Slav Defense: Czech Variation, Dutch Variation, Sämisch Variation",
+ "rnbqkbnr/ppp1pppp/8/8/2pP4/8/PP2PPPP/RNBQKBNR": "Queen's Gambit Accepted",
+ "rnbqkbnr/ppp1pppp/8/8/Q1pP4/8/PP2PPPP/RNB1KBNR": "Queen's Gambit Accepted: Accelerated Mannheim Variation",
+ "rnbqkb1r/ppp1pppp/5n2/8/2pPP3/8/PP3PPP/RNBQKBNR": "Queen's Gambit Accepted: Central Variation, Alekhine System",
+ "rnbqkbnr/p1p1pppp/8/1p6/2pPP3/8/PP3PPP/RNBQKBNR": "Queen's Gambit Accepted: Central Variation, Greco Variation",
+ "rnbqkbnr/ppp2ppp/8/4p3/2pPP3/8/PP3PPP/RNBQKBNR": "Queen's Gambit Accepted: Central Variation, McDonnell Defense",
+ "rnbqkbnr/ppp2ppp/8/4p3/2BPP3/8/PP3PPP/RNBQK1NR": "Queen's Gambit Accepted: Central Variation, McDonnell Defense, Somov Gambit",
+ "r1bqkbnr/ppp1pppp/2n5/8/2pPP3/8/PP3PPP/RNBQKBNR": "Queen's Gambit Accepted: Central Variation, Modern Defense",
+ "rnbqkbnr/pp2pppp/8/2p5/2pPP3/8/PP3PPP/RNBQKBNR": "Queen's Gambit Accepted: Central Variation, Rubinstein Defense",
+ "rnbqkbnr/p3pppp/8/1ppP4/2p1P3/8/PP3PPP/RNBQKBNR": "Queen's Gambit Accepted: Central Variation, Rubinstein Defense, Yefimov Gambit",
+ "rnbqkb1r/p3pppp/5n2/1ppP4/2p1P3/2N5/PP3PPP/R1BQKBNR": "Queen's Gambit Accepted: Linares Variation",
+ "rnbqkbnr/ppp1pppp/8/8/2pP4/4P3/PP3PPP/RNBQKBNR": "Queen's Gambit Accepted: Old Variation",
+ "rnb1kbnr/ppp1qppp/8/8/2Bp4/PQ2P3/1P3PPP/RNB1K1NR": "Queen's Gambit Accepted: Old Variation, Billinger Gambit",
+ "rnb1kbnr/ppp1qppp/8/8/2Bp4/1Q2PN2/PP3PPP/RNB1K2R": "Queen's Gambit Accepted: Old Variation, Christensen Gambit",
+ "rnb1kbnr/ppp1qppp/8/8/2Bp4/1Q2P3/PP3PPP/RNB2KNR": "Queen's Gambit Accepted: Old Variation, Korchnoi Gambit",
+ "rnb1kbnr/ppp1qppp/8/8/2Bp4/1Q2P3/PP1N1PPP/R1B1K1NR": "Queen's Gambit Accepted: Old Variation, Novikov Gambit",
+ "rnbqkbnr/ppp1pppp/8/8/2pPP3/8/PP3PPP/RNBQKBNR": "Queen's Gambit Accepted: Saduleto Variation",
+ "rnbqkbnr/ppp1p1pp/8/5p2/2pPP3/8/PP3PPP/RNBQKBNR": "Queen's Gambit Accepted: Schwartz Defense",
+ "rnbqkbnr/1pp1pppp/p7/8/2pPP3/5N2/PP3PPP/RNBQKB1R": "Queen's Gambit Accepted: Alekhine Defense, Borisenko-Furman Variation",
+ "r1bqkbnr/pppnpppp/8/8/2pP4/5N2/PP2PPPP/RNBQKB1R": "Queen's Gambit Accepted: Godes Variation",
+ "rnbqkbnr/pp2pppp/8/2p5/2pP4/5N2/PP2PPPP/RNBQKB1R": "Queen's Gambit Accepted: Gunsberg Defense",
+ "rnbqkbnr/ppp1pppp/8/8/2pP4/5N2/PP2PPPP/RNBQKB1R": "Queen's Gambit Accepted: Normal Variation",
+ "rnbqkbnr/ppp2ppp/4p3/8/2pP4/5N2/PP2PPPP/RNBQKB1R": "Queen's Gambit Accepted: Rosenthal Variation",
+ "rnbqkbnr/p1p1pppp/8/1p6/2pP4/5N2/PP2PPPP/RNBQKB1R": "Queen's Gambit Accepted: Slav Gambit",
+ "rnbqkbnr/1pp1pppp/p7/8/2pP4/5N2/PP2PPPP/RNBQKB1R": "Queen's Gambit Accepted: Alekhine Defense",
+ "rn1qkbnr/1pp2ppp/p3p3/3P4/2B3b1/4PN2/PP3PPP/RNBQK2R": "Queen's Gambit Accepted: Alekhine Defense, Alatortsev Variation",
+ "rnbqkbnr/2p1pppp/p7/1p6/2pP4/4PN2/PP3PPP/RNBQKB1R": "Queen's Gambit Accepted: Alekhine Defense, Haberditz Variation",
+ "rnbqkb1r/ppp1pppp/5n2/8/2pP4/5N2/PP2PPPP/RNBQKB1R": "Queen's Gambit Accepted",
+ "rnbqkb1r/ppp1pppp/5n2/8/Q1pP4/5N2/PP2PPPP/RNB1KB1R": "Queen's Gambit Accepted: Mannheim Variation",
+ "rnbqkb1r/1pp1pppp/p4n2/8/2pPP3/2N2N2/PP3PPP/R1BQKB1R": "Queen's Gambit Accepted: Bogoljubov Defense",
+ "rnbqkb1r/pp3ppp/5n2/2ppP3/2p5/2N2N2/PP3PPP/R1BQKB1R": "Queen's Gambit Accepted: Gunsberg Defense, Prianishenmo Gambit",
+ "rnbqkb1r/ppp1pppp/5n2/8/2pP4/2N2N2/PP2PPPP/R1BQKB1R": "Queen's Gambit Accepted: Showalter Variation",
+ "rn1qkb1r/ppp1pppp/5n2/8/2pP2b1/4PN2/PP3PPP/RNBQKB1R": "Queen's Gambit Accepted: Janowski-Larsen Variation",
+ "rnbqkb1r/ppp1pppp/5n2/8/2pP4/4PN2/PP3PPP/RNBQKB1R": "Queen's Gambit Accepted: Normal Variation",
+ "rnbqkb1r/ppp1pp1p/5np1/8/2pP4/4PN2/PP3PPP/RNBQKB1R": "Queen's Gambit Accepted: Smyslov Variation",
+ "rn1qkb1r/ppp1pppp/4bn2/8/2pP4/4PN2/PP3PPP/RNBQKB1R": "Queen's Gambit Accepted: Winawer Defense",
+ "rnbqkb1r/pp3ppp/4pn2/2p5/2BP4/4PN2/PP3PPP/RNBQK2R": "Queen's Gambit Accepted: Classical Defense",
+ "rnbqkb1r/pp3ppp/4pn2/2p5/2BP4/4PN2/PP3PPP/RNBQ1RK1": "Queen's Gambit Accepted: Classical Defense, Normal Line",
+ "r1bqkb1r/pp3ppp/2n1pn2/2p5/2BP4/4PN2/PP3PPP/RNBQ1RK1": "Queen's Gambit Accepted: Classical Defense, Steinitz Variation, Development Variation",
+ "rnbqkb1r/pp3ppp/4pn2/8/2Bp4/4PN2/PP3PPP/RNBQ1RK1": "Queen's Gambit Accepted: Classical Defense, Steinitz Variation, Exchange Variation",
+ "r1bqk2r/5ppp/p1n1pn2/1pb1P3/2B5/5N2/PP2QPPP/RNB2RK1": "Queen's Gambit Accepted: Classical, Furman Variation",
+ "rnbqkb1r/ppp2ppp/4pn2/8/2pP4/4PN2/PP3PPP/RNBQKB1R": "Queen's Gambit Accepted: Normal Variation, Traditional System",
+ "rnbqkb1r/1p3ppp/p3pn2/2p5/2BP4/4PN2/PP3PPP/RNBQ1RK1": "Queen's Gambit Accepted: Classical Defense, Main Line",
+ "rnbqkb1r/1p3ppp/p3pn2/2p5/P1BP4/4PN2/1P3PPP/RNBQ1RK1": "Queen's Gambit Accepted: Classical Defense, Rubinstein Variation",
+ "rnbqkb1r/1p3ppp/p3pn2/2p5/2BPP3/5N2/PP3PPP/RNBQ1RK1": "Queen's Gambit Accepted: Classical Defense, Russian Gambit",
+ "rnbqk2r/1p3ppp/p3pn2/2b5/2B5/4PN2/PP3PPP/RNBQ1RK1": "Queen's Gambit Accepted: Furman Variation",
+ "rnbqkb1r/1p3ppp/p3pn2/2p5/2BP4/4PN2/PP2QPPP/RNB2RK1": "Queen's Gambit Accepted: Classical Defense, Alekhine System",
+ "rnbqkb1r/5ppp/p3pn2/1pp5/2BP4/4PN2/PP2QPPP/RNB2RK1": "Queen's Gambit Accepted: Classical Defense, Alekhine System",
+ "r3kb1r/1bq2ppp/p3pn2/1p1P4/2p5/2N1PN2/PPQ2PPP/R1BR2K1": "Queen's Gambit Accepted: Classical, Flohr Variation",
+ "rn1qkb1r/1b3ppp/p3pn2/1pp5/3P4/1B2PN2/PP2QPPP/RNB2RK1": "Queen's Gambit Accepted: Classical Defense, Alekhine System, Main Line",
+ "r2qk2r/1b1n1ppp/p2bpn2/1pp5/3P4/1BN1PN2/PP2QPPP/R1BR2K1": "Queen's Gambit Accepted: Classical Defense, Alekhine System, Smyslov Variation",
+ "rnbqkbnr/ppp2ppp/4p3/3p4/2PP4/8/PP2PPPP/RNBQKBNR": "Queen's Gambit Declined",
+ "rnbqkb1r/ppp2pp1/4pn1p/3p2B1/2PP4/5N2/PP2PPPP/RN1QKB1R": "Queen's Gambit Declined: Capablanca Variation",
+ "r1bqkb1r/pp1n1ppp/2p1pn2/3p2B1/2PP4/4PN2/PP1N1PPP/R2QKB1R": "Queen's Gambit Declined: Capablanca Variation",
+ "r1bqkb1r/pp1n1ppp/4pn2/2pp4/2PP4/3BPN2/PP1N1PPP/R1BQK2R": "Queen's Gambit Declined: Semmering Variation",
+ "rnbqkb1r/pp3p1p/2p1pnp1/3p4/2PP4/4PN2/PP1N1PPP/R1BQKB1R": "Queen's Gambit Declined: Spielmann Variation",
+ "rnbqkb1r/pp4pp/2p1p3/3p1p2/2PPn3/3BPN2/PP1N1PPP/R1BQK2R": "Queen's Gambit Declined: Stonewall Variation",
+ "rnbqkbnr/pp3ppp/4p3/2pp4/2PP4/5N2/PP2PPPP/RNBQKB1R": "Queen's Gambit Declined: Tarrasch Defense, Pseudo-Tarrasch",
+ "rnbqkbnr/pp3ppp/8/2pp2B1/3P4/5N2/PP2PPPP/RN1QKB1R": "Queen's Gambit Declined: Tarrasch Defense, Pseudo-Tarrasch Bishop Attack",
+ "rnbqkb1r/ppp2ppp/4pn2/3p2B1/2PP4/5N2/PP2PPPP/RN1QKB1R": "Queen's Gambit Declined: Traditional Variation",
+ "rnbqk2r/ppp2ppp/4pn2/3p2B1/1bPP4/5N2/PP2PPPP/RN1QKB1R": "Queen's Gambit Declined: Vienna Variation",
+ "rnbqkb1r/pp3ppp/2p1pn2/3p4/2PP4/4PN2/PP1N1PPP/R1BQKB1R": "Semi-Slav Defense: Quiet Variation",
+ "r1bqkb1r/pp1n1ppp/2p1pn2/3p4/2PP4/4PN2/PP1N1PPP/R1BQKB1R": "Semi-Slav Defense: Quiet Variation",
+ "rnbqkbnr/p1p2ppp/1p2p3/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR": "Queen's Gambit Declined: Alapin Variation",
+ "rnbqk1nr/ppp1bppp/4p3/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR": "Queen's Gambit Declined: Charousek Variation",
+ "rnbqk1nr/ppp1bppp/4p3/8/2PPp3/2N2P2/PP4PP/R1BQKBNR": "Queen's Gambit Declined: Charousek Variation, Miladinovic Gambit",
+ "rnbqkbnr/1pp2ppp/p3p3/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR": "Queen's Gambit Declined: Janowski Variation",
+ "rnbqkbnr/ppp2ppp/4p3/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR": "Queen's Gambit Declined: Queen's Knight Variation",
+ "rnbqk1nr/5ppp/2p1p3/pp6/PbpP4/2N1PN2/1P1B1PPP/R2QKB1R": "Queen's Gambit Declined: Semi-Slav, Abrahams Variation",
+ "rnb1k1nr/p4ppp/1qp1p3/1p6/PbpP4/2N1PN2/1P1B1PPP/R2QKB1R": "Queen's Gambit Declined: Semi-Slav, Junge Variation",
+ "rnb1k1nr/p3qppp/2p1p3/1p6/PbpP4/2N1PN2/1P1B1PPP/R2QKB1R": "Queen's Gambit Declined: Semi-Slav, Koomen Variation",
+ "rnbq1rk1/ppp1bpp1/4pn1p/8/2pP3B/2N2N2/PP2PPPP/2RQKB1R": "Queen's Gambit Declined: Uhlmann Variation",
+ "rnbqkbnr/pp3ppp/2p1p3/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR": "Semi-Slav Defense: Accelerated Move Order",
+ "rnbqkbnr/pp4pp/2p1p3/3p1p2/2PP2P1/2N1P3/PP3P1P/R1BQKBNR": "Semi-Slav Defense: Anti-Noteboom, Stonewall Variation, Portisch Gambit",
+ "rnbqkbnr/pp3ppp/2p1p3/8/2PPp3/2N2P2/PP4PP/R1BQKBNR": "Semi-Slav Defense: Gunderam Gambit",
+ "rnbqkbnr/pp3ppp/2p1p3/3p4/2PPP3/2N5/PP3PPP/R1BQKBNR": "Semi-Slav Defense: Marshall Gambit",
+ "rnbqk1nr/pp3ppp/2p1p3/8/1bPP4/2N5/PP3PPP/R1BQKBNR": "Semi-Slav Defense: Marshall Gambit, Forgotten Variation",
+ "rnbqk1nr/pp3ppp/2p1p3/8/1bPPN3/8/PP1B1PPP/R2QKBNR": "Semi-Slav Defense: Marshall Gambit, Main Line",
+ "rnb1k1nr/pp3ppp/4p3/2B5/2P5/8/PP2BPqP/R2QK1NR": "Semi-Slav Defense: Marshall Gambit, Tolush Variation",
+ "rnbqkbnr/pp3ppp/2p1p3/8/2pP4/2N2N2/PP2PPPP/R1BQKB1R": "Semi-Slav Defense: Noteboom Variation",
+ "rnbqk1nr/p4ppp/4p3/1p6/2pP4/2P1PN2/5PPP/R1BQKB1R": "Semi-Slav Defense: Noteboom Variation, Abrahams Variation",
+ "rnbqkbnr/pp3ppp/2p1p3/8/2pP4/2N2NP1/PP2PP1P/R1BQKB1R": "Semi-Slav Defense: Noteboom Variation, Anti-Noteboom Gambit",
+ "rnbqkbnr/pp3ppp/2p1p3/6B1/2pP4/2N2N2/PP2PPPP/R2QKB1R": "Semi-Slav Defense: Noteboom Variation, Anti-Noteboom Variation",
+ "rnbqkbnr/pp4pp/2p1pp2/6B1/2pP4/2N2N2/PP2PPPP/R2QKB1R": "Semi-Slav Defense: Noteboom Variation, Anti-Noteboom Variation, Belyavsky Line",
+ "rnbqkbnr/pp3ppp/8/2pp4/3P4/2N5/PP2PPPP/R1BQKBNR": "Queen's Gambit Declined: Tarrasch Defense",
+ "rnbqkbnr/pp3ppp/4p3/2pp4/2PP4/2N5/PP2PPPP/R1BQKBNR": "Tarrasch Defense",
+ "r1bqkbnr/p4ppp/2n5/1pP5/N2p4/5N2/PP2PPPP/R1BQKB1R": "Tarrasch Defense: Grünfeld Gambit",
+ "rnbqkbnr/pp3ppp/8/2pp4/3PP3/2N5/PP3PPP/R1BQKBNR": "Tarrasch Defense: Marshall Gambit",
+ "rnbqkbnr/pp3ppp/4p3/3P4/3p4/2N5/PP2PPPP/R1BQKBNR": "Tarrasch Defense: Schara Gambit",
+ "r1bqkb1r/pp3ppp/2n1pn2/2pp4/2PP4/2N1PN2/PP3PPP/R1BQKB1R": "Tarrasch Defense: Symmetrical Variation",
+ "rnbqkbnr/p4ppp/8/1pP5/N2p4/8/PP2PPPP/R1BQKBNR": "Tarrasch Defense: Tarrasch Gambit",
+ "rnbqkbnr/pp3ppp/8/2pp4/3P4/2N2N2/PP2PPPP/R1BQKB1R": "Tarrasch Defense: Two Knights Variation",
+ "r2qkbnr/pp3ppp/2n1b3/3Q4/8/2N5/PP2PPPP/R1B1KBNR": "Tarrasch Defense: von Hennig Gambit",
+ "r1bqk2r/pp3ppp/2n2n2/2bp4/3N4/2N3P1/PP2PPBP/R1BQK2R": "Tarrasch Defense: Dubov Tarrasch",
+ "r1bqkb1r/pp3ppp/2n2n2/2pp4/3P4/2N2NP1/PP2PP1P/R1BQKB1R": "Tarrasch Defense: Prague Variation",
+ "r1bqkbnr/pp3ppp/2n5/2pp4/3P4/2N2NP1/PP2PP1P/R1BQKB1R": "Tarrasch Defense: Rubinstein System",
+ "r1bqkbnr/pp3ppp/2n5/3p4/2pP4/2N2NP1/PP2PP1P/R1BQKB1R": "Tarrasch Defense: Swedish Variation",
+ "r1bqkbnr/pp3ppp/2n5/3p4/2pPP3/2N2NP1/PP3P1P/R1BQKB1R": "Tarrasch Defense: Swedish Variation, Central Break",
+ "r2qkb1r/pp3ppp/2n2n2/2pp4/3P2b1/2N2NP1/PP2PPBP/R1BQK2R": "Tarrasch Defense: Wagner Variation",
+ "r2q1rk1/p3bppp/1pn1bn2/2pp2B1/3P4/2N2NP1/PP2PPBP/2RQ1RK1": "Queen's Gambit Declined: Tarrasch Defense, Stoltz Variation",
+ "r1bq1rk1/pp2bppp/2n2n2/2pp4/3P4/2N2NP1/PP2PPBP/R1BQ1RK1": "Tarrasch Defense: Classical Variation",
+ "r1bq1rk1/pp2bppp/2n2n2/3p2B1/2pP4/2N2NP1/PP2PPBP/R2Q1RK1": "Tarrasch Defense: Classical Variation, Advance Variation",
+ "r2q1rk1/pp2bppp/2n1bn2/3p2B1/2pP4/2N2NP1/PP2PPBP/2RQ1RK1": "Tarrasch Defense: Classical Variation, Bogoljubov Variation",
+ "r1bq1rk1/pp2bppp/2n2n2/2pp2B1/3P4/2N2NP1/PP2PPBP/R2Q1RK1": "Tarrasch Defense: Classical Variation, Carlsbad Variation",
+ "r2qr1k1/pp2bpp1/2n1bn1p/3p4/3N4/2N1B1P1/PP2PPBP/2RQ1RK1": "Tarrasch Defense: Classical Variation, Chandler Variation",
+ "r1bq1rk1/pp2bppp/2n2n2/2P5/3p4/2N2NP1/PP2PPBP/R1BQ1RK1": "Tarrasch Defense: Classical Variation, Classical Tarrasch Gambit",
+ "r2q1rk1/pp2bppp/2n1bn2/2pp2B1/3P4/2N2NP1/PP2PPBP/R2Q1RK1": "Tarrasch Defense: Classical Variation, Endgame Variation",
+ "r1bqr1k1/pp2bpp1/2n2n1p/3p4/3N4/2N1B1P1/PP2PPBP/R2Q1RK1": "Tarrasch Defense: Classical Variation, Main Line",
+ "r1bqr1k1/pp2bppp/2n2n2/3p2B1/3N4/2N3P1/PP2PPBP/R2Q1RK1": "Tarrasch Defense: Classical Variation, Petursson Variation",
+ "r1bq1rk1/pp3ppp/2n2n2/2bp4/N7/5NP1/PP2PPBP/R1BQ1RK1": "Tarrasch Defense: Classical Variation, Réti Variation",
+ "r2q1rk1/pp2bpp1/2n2n1p/3p4/3N2b1/2N1B1P1/PP2PPBP/R2Q1RK1": "Tarrasch Defense: Classical Variation, Spassky Variation",
+ "r1bqk2r/pp2bppp/2n2n2/2pp4/3P4/2N2NP1/PP2PPBP/R1BQK2R": "Tarrasch Defense: Prague Variation, Main Line",
+ "rnbqkb1r/ppp2ppp/4pn2/3P4/3P4/2N5/PP2PPPP/R1BQKBNR": "Queen's Gambit Declined: Exchange Variation",
+ "r1bqrnk1/ppp1bppp/5n2/3p2B1/3P4/2NBP3/PPQ1NPPP/2KR3R": "Queen's Gambit Declined: Exchange Variation, Chameleon Variation",
+ "rnbqkb1r/ppp2ppp/5n2/3p2B1/3P4/2N5/PP2PPPP/R2QKBNR": "Queen's Gambit Declined: Exchange Variation, Positional Variation",
+ "rnbqkb1r/pp3ppp/2p2n2/3p2B1/3P4/2N5/PP2PPPP/R2QKBNR": "Queen's Gambit Declined: Exchange Variation, Positional Variation",
+ "r1bqkb1r/pppn1ppp/5n2/3p4/3P1B2/2N2N2/PP2PPPP/R2QKB1R": "Queen's Gambit Declined: Exchange Variation, Sämisch Variation",
+ "rnbqkb1r/ppp2ppp/4pn2/3p4/2PP1B2/2N5/PP2PPPP/R2QKBNR": "Queen's Gambit Declined: Harrwitz Attack",
+ "rnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR": "Queen's Gambit Declined: Normal Defense",
+ "rnbqkb1r/pp3ppp/2p2n2/3p2B1/3P4/2N5/PPQ1PPPP/R3KBNR": "Queen's Gambit Declined: Exchange Variation, Reshevsky Variation",
+ "r1bqkb1r/pppn1ppp/4pn2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R": "Queen's Gambit Declined: Barmen Variation",
+ "rnbqk2r/ppp1bppp/4pn2/3p4/2PP1B2/2N2N2/PP2PPPP/R2QKB1R": "Queen's Gambit Declined: Harrwitz Attack",
+ "r1b2rk1/pp3ppp/2n1pn2/q1bp4/2P2B2/P1N1PN2/1PQ2PPP/3RKB1R": "Queen's Gambit Declined: Harrwitz Attack",
+ "r1b2rk1/pp3ppp/2n1pn2/q1bp4/2P2B2/P1N1PN2/1PQ2PPP/2KR1B1R": "Queen's Gambit Declined: Harrwitz Attack",
+ "rnbq1rk1/p1p1bppp/1p2pn2/3p4/2PP1B2/2N1PN2/PP3PPP/R2QKB1R": "Queen's Gambit Declined: Harrwitz Attack, Fianchetto Defense",
+ "rnbq1rk1/pp3ppp/4pn2/2bp4/2P2B2/2N1PN2/PP3PPP/R2QKB1R": "Queen's Gambit Declined: Harrwitz Attack, Main Line",
+ "rnbq1rk1/pp2bppp/2p1pn2/3p4/2PP1B2/2N1PN2/PP3PPP/R2QKB1R": "Queen's Gambit Declined: Harrwitz Attack, Orthodox Defense",
+ "r1bq1rk1/pppnbppp/4pn2/3p4/2PP1B2/2N1PN2/PP3PPP/R2QKB1R": "Queen's Gambit Declined: Harrwitz Attack, Two Knights Defense",
+ "r1bq1rk1/pppnbppp/4pn2/2Pp4/3P1B2/2N1PN2/PP3PPP/R2QKB1R": "Queen's Gambit Declined: Harrwitz Attack, Two Knights Defense, Blockade Line",
+ "r1bqkb1r/pppn1pp1/4pn1p/8/2pP3B/2N2N2/PP2PPPP/R2QKB1R": "Queen's Gambit Declined: Knight Defense, Alekhine Gambit",
+ "rnbq1rk1/ppp1bppp/4pn2/3p2B1/2PP4/2N2N2/PPQ1PPPP/R3KB1R": "Queen's Gambit Declined: Miles Variation",
+ "rnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R": "Queen's Gambit Declined: Three Knights Variation",
+ "rnbqkb1r/ppp2ppp/4pn2/8/2pP4/2N2N2/PP2PPPP/R1BQKB1R": "Queen's Gambit Declined: Three Knights, Vienna Variation",
+ "rnbqkb1r/ppp2ppp/4pn2/8/2pP4/2N1PN2/PP3PPP/R1BQKB1R": "Queen's Gambit Declined: Vienna Variation, Quiet Variation",
+ "rnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/2N2N2/PP2PPPP/R1BQKB1R": "Queen's Gambit Declined: Ragozin Defense",
+ "rnbqk2r/ppp2ppp/4pn2/3p4/QbPP4/2N2N2/PP2PPPP/R1B1KB1R": "Queen's Gambit Declined: Ragozin Defense, Alekhine Variation",
+ "r1bqk2r/pp1n1ppp/4pn2/2pp2B1/1bPP4/2N1PN2/PP3PPP/R2QKB1R": "Queen's Gambit Declined: Westphalian Variation",
+ "rnbqk2r/ppp2ppp/4pn2/6B1/1bpP4/2N2N2/PP2PPPP/R2QKB1R": "Queen's Gambit Declined: Ragozin Defense, Vienna Variation",
+ "rnbqkb1r/pp3ppp/4pn2/2pp4/2PP4/2N2N2/PP2PPPP/R1BQKB1R": "Queen's Gambit Declined: Semi-Tarrasch Defense",
+ "r1b2rk1/pp2qppp/2n1pn2/2bp4/2P1P3/2NB1N2/PP2QPPP/R1B2RK1": "Queen's Gambit Declined: Semi-Tarrasch Defense, Levenfish Variation",
+ "rnbqkb1r/pp3ppp/4pn2/2pp2B1/2PP4/2N2N2/PP2PPPP/R2QKB1R": "Queen's Gambit Declined: Semi-Tarrasch Defense, Pillsbury Variation",
+ "r1bq1rk1/pp3ppp/2nbpn2/2pp4/2PP4/2NBPN2/PP3PPP/R1BQ1RK1": "Queen's Gambit Declined: Semi-Tarrasch Defense, Symmetrical Variation",
+ "rnbqkb1r/pp3ppp/4pn2/2pP4/3P4/2N2N2/PP2PPPP/R1BQKB1R": "Queen's Gambit Declined: Semi-Tarrasch Defense",
+ "rnbqkb1r/pp3ppp/4p3/2pn4/3PP3/2N2N2/PP3PPP/R1BQKB1R": "Queen's Gambit Declined: Semi-Tarrasch Defense, Exchange Variation",
+ "rnbq1rk1/pp3ppp/4p3/1B6/3PP3/5N2/P2Q1PPP/R3K2R": "Queen's Gambit Declined: Semi-Tarrasch Defense, Kmoch Variation",
+ "rnbqkb1r/pp3ppp/4p3/2pn4/3P4/2N1PN2/PP3PPP/R1BQKB1R": "Queen's Gambit Declined: Semi-Tarrasch Defense, Pillsbury Variation",
+ "rnb1k2r/pp3ppp/4p3/q7/1b1PP3/5N2/P2B1PPP/R2QKB1R": "Queen's Gambit Declined: Semi-Tarrasch Defense, San Sebastian Variation",
+ "r1bqkb1r/pp3ppp/2n1p3/2pn4/3P4/2NBPN2/PP3PPP/R1BQK2R": "Queen's Gambit Declined: Semi-Tarrasch Defense, Main Line",
+ "rnb1kb1r/pp3pp1/2p1pq1p/3p4/2PP4/1QN2N2/PP2PPPP/R3KB1R": "Queen's Gambit Declined: Hastings Variation",
+ "rnbqkb1r/pp3ppp/2p1pn2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R": "Semi-Slav Defense",
+ "rnbqkb1r/pp3pp1/2p1pn1p/3p4/2PP3B/2N2N2/PP2PPPP/R2QKB1R": "Semi-Slav Defense: Anti-Moscow Gambit",
+ "rnbqkb1r/pp3ppp/2p1pn2/6B1/2pP4/2N2N2/PP2PPPP/R2QKB1R": "Semi-Slav Defense Accepted",
+ "rnbqkb1r/pp3ppp/2p1pn2/6B1/2pPP3/2N2N2/PP3PPP/R2QKB1R": "Semi-Slav Defense: Botvinnik Variation",
+ "rnbqkb1r/p4p2/2p1pn1p/1p2P1N1/2pP3B/2N5/PP3PPP/R2QKB1R": "Semi-Slav Defense: Botvinnik Variation",
+ "rnbqkb1r/p4p2/2p1p2p/1p1nP1N1/2pP3B/2N5/PP3PPP/R2QKB1R": "Semi-Slav Defense: Botvinnik Variation, Alatortsev System",
+ "rnbqkb1r/p4p2/2p1pP1p/1p2N3/2pP3p/2N5/PP3PPP/R2QKB1R": "Semi-Slav Defense: Botvinnik Variation, Ekstrom Variation",
+ "r1bqkb1r/p2n1p2/2p1pn2/1p2P1B1/2pP4/2N3P1/PP3P1P/R2QKB1R": "Semi-Slav Defense: Botvinnik Variation, Lilienthal Variation",
+ "r1bqkb1r/p2n1p2/2p1pn2/1p2P1B1/2pP4/2N2Q2/PP3PPP/R3KB1R": "Semi-Slav Defense: Botvinnik Variation, Szabo Variation",
+ "rnbqkb1r/1p3ppp/p1p1pn2/3p4/2PP4/2N1PN2/PP3PPP/R1BQKB1R": "Semi-Slav Defense: Accelerated Meran Variation",
+ "rnbqkb1r/pp3ppp/2p1pn2/3p4/2PP4/2N1PN2/PP3PPP/R1BQKB1R": "Semi-Slav Defense: Main Line",
+ "r1bqkb1r/pp1n1ppp/2p1pn2/3p4/2PP4/2N1PN2/PP3PPP/R1BQKB1R": "Semi-Slav Defense: Normal Variation",
+ "r1bqkb1r/pp1n1ppp/2p1pn2/3pN3/2PP4/2N1P3/PP3PPP/R1BQKB1R": "Semi-Slav Defense: Rubinstein System",
+ "r1bqkb1r/pp1n1ppp/2p1pn2/3p4/2PP4/2N1PN2/PPQ2PPP/R1B1KB1R": "Semi-Slav Defense: Stoltz Variation",
+ "r1bqk2r/pp1n1ppp/2pbpn2/3p4/2PPP3/2N2N2/PPQ2PPP/R1B1KB1R": "Semi-Slav Defense: Stoltz Variation, Center Variation",
+ "r1bqk2r/pp1n1ppp/2pb4/4P3/2P1Q3/5N2/PP3PPP/R1B1KB1R": "Semi-Slav Defense: Stoltz Variation, Center Variation, Mikhalchishin Line",
+ "r1bqk2r/pp1n1ppp/2pbpn2/3p4/2PP2P1/2N1PN2/PPQ2P1P/R1B1KB1R": "Semi-Slav Defense: Stoltz Variation, Shabalov Attack",
+ "rnbqkb1r/pp4pp/2p1p3/3p1p2/2PPn3/2NBPN2/PP3PPP/R1BQK2R": "Semi-Slav Defense: Stonewall Defense",
+ "r1bqk2r/pp1nbppp/2p1pn2/3p4/2PP4/2NBPN2/PP3PPP/R1BQK2R": "Semi-Slav Defense: Bogoljubov Variation",
+ "r1bqk2r/pp1n1ppp/2pbpn2/3p4/2PP4/2NBPN2/PP3PPP/R1BQK2R": "Semi-Slav Defense: Chigorin Defense",
+ "r1bqkb1r/pp1n1ppp/2p1pn2/3p4/2PP4/2NBPN2/PP3PPP/R1BQK2R": "Semi-Slav Defense: Main Line",
+ "r1bqk2r/pp1n1ppp/2p1pn2/3p4/1bPP4/2NBPN2/PP3PPP/R1BQK2R": "Semi-Slav Defense: Romih Variation",
+ "r1bqkb1r/p2n1ppp/2p1pn2/1p6/2BP4/2N1PN2/PP3PPP/R1BQK2R": "Semi-Slav Defense: Meran Variation",
+ "r1bqkb1r/p2n1ppp/2p1pn2/8/1p1P4/2NBPN2/PP3PPP/R1BQK2R": "Semi-Slav Defense: Meran Variation, Lundin Variation",
+ "r2qkb1r/pb1n1ppp/2p1pn2/1p6/3P4/2NBPN2/PP3PPP/R1BQK2R": "Semi-Slav Defense: Meran Variation, Wade Variation",
+ "r2qkb1r/pb1n1ppp/4p3/3nP3/Np1N4/3B4/PP3PPP/R1BQ1RK1": "Semi-Slav Defense: Meran Variation, Wade Variation, Kaidanov Gambit",
+ "r2qkb1r/pb1n1ppp/4p3/2pnP3/Np1P4/3B1N2/PP3PPP/R1BQK2R": "Semi-Slav Defense: Meran Variation, Wade Variation, Larsen Variation",
+ "r1bqkb1r/pp1n1ppp/2p1pn2/8/2BP4/2N1PN2/PP3PPP/R1BQK2R": "Semi-Slav Defense: Semi-Meran Variation",
+ "r1bqkb1r/3n1ppp/p1p1pn2/1p6/3P4/2NBPN2/PP3PPP/R1BQK2R": "Semi-Slav Defense: Meran Variation",
+ "r1bqkb1r/3n1ppp/p3pn2/1pp5/3PP3/2NB1N2/PP3PPP/R1BQK2R": "Semi-Slav Defense: Meran Variation",
+ "r1bqkb1r/3n1ppp/p3pn2/1pp1P3/3P4/2NB1N2/PP3PPP/R1BQK2R": "Semi-Slav Defense: Meran Variation, Old Variation",
+ "r1bqkb1r/3n1ppp/p1p1pn2/8/1p1PP3/2NB1N2/PP3PPP/R1BQK2R": "Semi-Slav Defense: Meran Variation, Pirc Variation",
+ "r1bqkb1r/3n1ppp/p3pn2/1ppP4/4P3/2NB1N2/PP3PPP/R1BQK2R": "Semi-Slav Defense: Meran Variation, Reynolds' Variation",
+ "r1bqkb1r/3n1ppp/p3pn2/1N2P3/3p4/3B1N2/PP3PPP/R1BQK2R": "Semi-Slav Defense: Meran Variation, Blumenfeld Variation",
+ "r1bqkb1r/3n1ppp/p3p3/1N2P3/3p2n1/3B1N2/PP3PPP/R1BQK2R": "Semi-Slav Defense: Meran Variation, Rabinovich Variation",
+ "r3kb1r/5ppp/b3pn2/1p1qN1B1/3p4/3B4/PP2QPPP/R4RK1": "Semi-Slav Defense: Meran Variation, Rellstab Attack",
+ "r1bqkb1r/5ppp/p3pn2/1N2n3/3p4/3B1N2/PP3PPP/R1BQK2R": "Semi-Slav Defense: Meran Variation, Sozin Variation",
+ "r1bqkb1r/5ppp/4pn2/1p2N3/3p4/3B4/PP3PPP/R1BQ1RK1": "Semi-Slav Defense: Meran Variation, Sozin Variation",
+ "r1bqkb1r/5ppp/4pn2/1p2N3/3p4/3B1Q2/PP3PPP/R1B1K2R": "Semi-Slav Defense: Meran Variation, Stahlberg Variation",
+ "rnbqkb1r/pp3ppp/4pn2/2pp2B1/2PP4/2N5/PP2PPPP/R2QKBNR": "Queen's Gambit Declined: Been-Koomen Variation",
+ "rnbqkb1r/ppp2ppp/4pn2/3p2B1/2PP4/2N5/PP2PPPP/R2QKBNR": "Queen's Gambit Declined: Modern Variation",
+ "rnbqkb1r/pp3ppp/4pn2/2pP2B1/3P4/2N5/PP2PPPP/R2QKBNR": "Queen's Gambit Declined: Pseudo-Tarrasch Variation",
+ "rnb1kb1r/pp3ppp/1q2pn2/2pP2B1/3P4/2N5/PP2PPPP/R2QKBNR": "Queen's Gambit Declined: Pseudo-Tarrasch Variation, Canal Variation",
+ "rnbqkb1r/pp3ppp/4pn2/3p2B1/2PQ4/2N2N2/PP2PPPP/R3KB1R": "Queen's Gambit Declined: Pseudo-Tarrasch Variation, Primitive Pillsbury Variation",
+ "rnbqkb1r/1p3ppp/p4n2/1N1pp1B1/Q1P5/2N5/PP2PPPP/R3KB1R": "Queen's Gambit Declined: Semi-Tarrasch Defense, Krause Variation",
+ "r1bqkb1r/pp1n1ppp/2p1pn2/3p2B1/2PPP3/2N2N2/PP3PPP/R2QKB1R": "Queen's Gambit Declined: Alekhine Variation",
+ "r1bqkb1r/pp1n1ppp/2p1pn2/3p2B1/2PP4/P1N1P3/1P3PPP/R2QKBNR": "Queen's Gambit Declined: Capablanca Variation, Anti-Cambridge Springs Variation",
+ "r1bqk2r/pppn1ppp/4pn2/3p2B1/1bPP4/2N1P3/PP3PPP/R2QKBNR": "Queen's Gambit Declined: Manhattan Variation",
+ "r1bqkb1r/pppn1ppp/4pn2/3p2B1/2PP4/2N5/PP2PPPP/R2QKBNR": "Queen's Gambit Declined: Modern Variation, Knight Defense",
+ "r1bqkb1r/pppn1ppp/4pn2/3p2B1/2PP4/2N1P3/PP3PPP/R2QKBNR": "Queen's Gambit Declined: Modern Variation, Knight Defense",
+ "r1bqkb1r/pp1n1ppp/2p1pn2/3p2B1/2PP4/2N1P3/PP3PPP/R2QKBNR": "Queen's Gambit Declined: Modern Variation, Knight Defense",
+ "r1b1kb1r/pp1n1ppp/2p1pn2/q2p4/2PP4/2N2N2/PP1BPPPP/2RQKB1R": "Queen's Gambit Declined: Rochlin Variation",
+ "r1bqkb1r/pp1n1ppp/2p1pn2/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R": "Queen's Gambit Declined",
+ "r1b1kb1r/pp1n1ppp/2p1pn2/q2p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R": "Queen's Gambit Declined: Cambridge Springs Defense",
+ "r1b1kb1r/pp1n1ppp/2p1pn2/q2P2B1/3P4/2N1PN2/PP3PPP/R2QKB1R": "Queen's Gambit Declined: Cambridge Springs Defense",
+ "r1b2rk1/pp1n1ppp/2p1pn2/q2p4/1bPP3B/2N1P3/PPQN1PPP/R3KB1R": "Queen's Gambit Declined: Cambridge Springs Defense, Argentine Variation",
+ "r1b1k2r/pp1n1ppp/2p1pn2/q2p2B1/1bPP4/2N1P3/PPQN1PPP/R3KB1R": "Queen's Gambit Declined: Cambridge Springs Defense, Bogoljubov Variation",
+ "r1b1kb1r/pp1n1ppp/2p1pB2/q2p4/2PP4/2N1PN2/PP3PPP/R2QKB1R": "Queen's Gambit Declined: Cambridge Springs Defense, Capablanca Variation",
+ "r1b1kb1r/pp1n1ppp/2p1pn2/q5B1/2pP4/2N1P3/PP1N1PPP/R2QKB1R": "Queen's Gambit Declined: Cambridge Springs Defense, Rubinstein Variation",
+ "r1b1kb1r/pp1n1ppp/2p1p3/q2n2B1/3P4/2N1PN2/PP3PPP/R2QKB1R": "Queen's Gambit Declined: Cambridge Springs Defense, Yugoslav Variation",
+ "rnbqk2r/ppp1bppp/4pn2/3p2B1/2PP4/2N5/PP2PPPP/R2QKBNR": "Queen's Gambit Declined",
+ "rnbqk2r/ppp1bppp/4p3/3p2B1/2PPn3/2N1P3/PP3PPP/R2QKBNR": "Queen's Gambit Declined: Lasker Defense",
+ "rnbqk2r/ppp1bppp/4pB2/3p4/2PP4/2N5/PP2PPPP/R2QKBNR": "Queen's Gambit Declined: Modern Variation, Heral Variation",
+ "rnbq1rk1/ppp1bppp/4pn2/3p2B1/2PP4/2N1P3/PP3PPP/2RQKBNR": "Queen's Gambit Declined: Neo-Orthodox Variation",
+ "rnbq1rk1/ppp1bpp1/4pB1p/3p4/2PP4/2N1PN2/PP3PPP/R2QKB1R": "Queen's Gambit Declined: Anti-Tartakower Variation",
+ "r1bq1rk1/pp1n1pp1/2p1pb1p/8/2BP4/2N1PN2/PP3PPP/2RQ1RK1": "Queen's Gambit Declined: Anti-Tartakower Variation, Petrosian Variation",
+ "rnbq1rk1/ppp1bppp/4pn2/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R": "Queen's Gambit Declined: Modern Variation, Normal Line",
+ "rnbq1rk1/ppp1bpp1/4pn1p/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R": "Queen's Gambit Declined: Neo-Orthodox Variation",
+ "rnbq1rk1/ppp1bpp1/4pn1p/3p4/2PP3B/2N1PN2/PP3PPP/R2QKB1R": "Queen's Gambit Declined: Neo-Orthodox Variation, Main Line",
+ "rn1q1rk1/pbp1bppp/1p3n2/3pN1B1/3P4/2NBP3/PP3PPP/R2QK2R": "Queen's Gambit Declined: Pillsbury Attack",
+ "rnbq1rk1/ppp1bpp1/4p2p/3p4/2PPn2B/2N1PN2/PP3PPP/R2QKB1R": "Queen's Gambit Declined: Lasker Defense",
+ "r4rk1/pp1bqpp1/2n1pn1p/2p5/2BP4/2N1PN2/PPQ2PPP/R2R2K1": "Queen's Gambit Declined: Lasker Defense, Russian Variation",
+ "rnb2rk1/ppp1qpp1/4p2p/3p4/2PPn3/2N1PN2/PPQ2PPP/R3KB1R": "Queen's Gambit Declined: Lasker Defense, Teichmann Variation",
+ "rnb2rk1/ppp2pp1/3q3p/3p4/3P4/1QP1PN2/P4PPP/R3KB1R": "Queen's Gambit Declined: Lasker Defense, Bernstein Variation",
+ "rn1r2k1/ppp1qpp1/4b2p/3p4/2PP4/1Q2PN2/P4PPP/R3KB1R": "Queen's Gambit Declined: Lasker Defense, Bernstein Variation, Mar del Plata Gambit",
+ "rnb2rk1/ppp1qpp1/4p2p/3P4/3P4/2P1PN2/P4PPP/R2QKB1R": "Queen's Gambit Declined: Lasker Defense, Main Line",
+ "rnbq1rk1/p1p1bpp1/1p2pn1p/3p4/2PP3B/2N1PN2/PP3PPP/R2QKB1R": "Queen's Gambit Declined: Tartakower Defense",
+ "rnbq1rk1/p1p1bpp1/1p3n1p/3p4/3P3B/2N1PN2/PP3PPP/R2QKB1R": "Queen's Gambit Declined: Tartakower Defense, Exchange Variation",
+ "rn3rk1/p1p1qpp1/1p2b2p/3p4/3P4/4PN2/PP3PPP/2RQKB1R": "Queen's Gambit Declined: Tartakower Defense",
+ "rnbq1rk1/p1p1bpp1/1p2p2p/3n4/3P3B/2N1PN2/PP3PPP/R2QKB1R": "Queen's Gambit Declined: Tartakower Defense, Makogonov Exchange Variation",
+ "r1bq1rk1/pppnbppp/4pn2/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R": "Queen's Gambit Declined: Orthodox Defense",
+ "r1bq1rk1/pppnbppp/4pn2/3p2B1/2PP4/2NBPN2/PP3PPP/R2QK2R": "Queen's Gambit Declined: Orthodox Defense, Botvinnik Variation",
+ "r1bq1rk1/pppnbppp/4pn2/3p2B1/2PP4/1QN1PN2/PP3PPP/R3KB1R": "Queen's Gambit Declined: Orthodox Defense, Rauzer Variation",
+ "r1bq1rk1/pppnbppp/4pn2/3p2B1/2PP4/2N1PN2/PPQ2PPP/R3KB1R": "Queen's Gambit Declined: Orthodox Defense, Rubinstein Variation",
+ "r1bq1rk1/pp1nbppp/4pn2/2pP2B1/3P4/2N1PN2/PPQ2PPP/R3KB1R": "Queen's Gambit Declined: Orthodox Defense, Rubinstein Variation, Flohr Line",
+ "r1bq1rk1/p1pnbppp/1p3n2/1B1p2B1/3P4/2N1PN2/PP3PPP/2RQK2R": "Queen's Gambit Declined: Orthodox Defense, Capablanca Variation",
+ "r1bq1rk1/1ppnbppp/p3pn2/3p2B1/2PP4/2N1PN2/PP3PPP/2RQKB1R": "Queen's Gambit Declined: Orthodox Defense, Henneberger Variation",
+ "r1bq1rk1/pppnbppp/4pn2/3p2B1/2PP4/2N1PN2/PP3PPP/2RQKB1R": "Queen's Gambit Declined: Orthodox Defense, Main Line",
+ "r1bq1rk1/pp1nbppp/2p1pn2/3p2B1/2PP4/2N1PN2/PP3PPP/2RQKB1R": "Queen's Gambit Declined: Orthodox Defense, Main Line",
+ "r1bq1rk1/p1pnbppp/1p3n2/3p2B1/3P4/2NBPN2/PP3PPP/2RQK2R": "Queen's Gambit Declined: Orthodox Defense, Pillsbury Variation",
+ "r1bq1rk1/1ppnbppp/p3pn2/3P2B1/3P4/2N1PN2/PP3PPP/2RQKB1R": "Queen's Gambit Declined: Orthodox Defense, Swiss, Karlsbad Variation",
+ "r1bq1rk1/1p1nbppp/p1p1pn2/3p2B1/2PP4/P1N1PN2/1PQ2PPP/2R1KB1R": "Queen's Gambit Declined: Orthodox Defense, Rubinstein Attack",
+ "r1bq1rk1/pp1nbppp/2p1pn2/3p2B1/2PP4/2N1PN2/PPQ2PPP/2R1KB1R": "Queen's Gambit Declined: Orthodox Defense, Rubinstein Attack",
+ "r1bq1rk1/1p1nbppp/p1p1pn2/3p2B1/2PP4/2N1PN2/PPQ2PPP/2R1KB1R": "Queen's Gambit Declined: Orthodox Defense, Rubinstein Attack",
+ "r1bq1rk1/pp1nbppp/2p1p3/3p2B1/2PPn3/2N1PN2/PPQ2PPP/2R1KB1R": "Queen's Gambit Declined: Orthodox Defense, Rubinstein Attack",
+ "r1bq1rk1/1p1nbppp/p1p1pn2/3P2B1/3P4/2N1PN2/PPQ2PPP/2R1KB1R": "Queen's Gambit Declined: Orthodox Defense, Rubinstein Attack",
+ "r1bq1rk1/pp1nbppp/2p1pn2/3p2B1/2PP4/2NBPN2/PP3PPP/2RQK2R": "Queen's Gambit Declined: Orthodox Defense, Bd3 Line",
+ "r1bq1rk1/p2nbppp/2p1pn2/1p4B1/2BP4/2N1PN2/PP3PPP/2RQK2R": "Queen's Gambit Declined: Orthodox Defense, Fianchetto Variation",
+ "r1b2rk1/pp1nqppp/2p1p3/3n4/2BPN3/4PN2/PP3PPP/2RQK2R": "Queen's Gambit Declined: Orthodox Defense, Alekhine Variation",
+ "r1b2rk1/pp1nqppp/2p1p3/3n4/2BP4/2N1PN2/PP3PPP/2RQK2R": "Queen's Gambit Declined: Orthodox Defense, Bd3 Line",
+ "r1bq1rk1/pp1nbppp/2p1p3/3n2B1/2BP4/2N1PN2/PP3PPP/2RQK2R": "Queen's Gambit Declined: Orthodox Defense, Capablanca System",
+ "r1bq1rk1/pp1nbppp/2p1p3/3n2B1/2BP3P/2N1PN2/PP3PP1/2RQK2R": "Queen's Gambit Declined: Orthodox Defense, Janowski Variation",
+ "r1b2rk1/pp1nqppp/2p1p3/3n4/2BP4/2N1PN2/PP3PPP/2RQ1RK1": "Queen's Gambit Declined: Orthodox Defense, Main Line",
+ "r1b2rk1/pp1nqppp/2p5/4p3/2BP4/2R1PN2/PP3PPP/3Q1RK1": "Queen's Gambit Declined: Orthodox Defense, Classical Variation",
+ "r1b2rk1/pp1nqppp/2p5/4p3/2BP4/2R1PN2/PP3PPP/1Q3RK1": "Queen's Gambit Declined: Orthodox Defense, Classical Variation",
+ "r1b2rk1/pp1nqppp/2p5/4p3/2BP4/2R1PN2/PPQ2PPP/5RK1": "Queen's Gambit Declined: Orthodox Defense, Classical Variation",
+ "r1b2rk1/pp3ppp/2p5/4q3/2B5/2R1P3/PP3PPP/3Q1RK1": "Queen's Gambit Declined: Orthodox Defense, Classical Variation",
+ "rnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/5P2/PP2P1PP/RNBQKBNR": "Neo-Grünfeld Defense: Goglidze Attack",
+ "rnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/5N2/PP2PPPP/RNBQKB1R": "Neo-Grünfeld Defense: with Nf3",
+ "rnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/6P1/PP2PP1P/RNBQKBNR": "Neo-Grünfeld Defense: with g3",
+ "rnbqk2r/ppp1ppbp/6p1/3n4/3P4/6P1/PP2PPBP/RNBQK1NR": "Neo-Grünfeld Defense: Exchange Variation",
+ "rnbq1rk1/ppp1ppbp/6p1/3n4/3P4/5NP1/PP2PPBP/RNBQ1RK1": "Neo-Grünfeld Defense: Delayed Exchange Variation",
+ "rnbq1rk1/pp2ppbp/6p1/2pn4/3P4/2N2NP1/PP2PPBP/R1BQ1RK1": "Neo-Grünfeld Defense: Delayed Exchange Variation",
+ "rnbq1rk1/pp2ppbp/6p1/2Pn4/8/5NP1/PP2PPBP/RNBQ1RK1": "Neo-Grünfeld Defense: Delayed Exchange Variation",
+ "rnbq1rk1/ppp1ppbp/1n4p1/8/3P4/5NP1/PP2PPBP/RNBQ1RK1": "Neo-Grünfeld Defense: Delayed Exchange Variation",
+ "rnbq1rk1/ppp1ppbp/5np1/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1": "Neo-Grünfeld Defense: Classical Variation",
+ "rnbq1rk1/ppp1ppbp/5np1/8/2pP4/5NP1/PP2PPBP/RNBQ1RK1": "Neo-Grünfeld Defense: Classical Variation, Modern Defense",
+ "r1bq1rk1/ppp1ppbp/2n2np1/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1": "Neo-Grünfeld Defense: Classical Variation, Polgar Variation",
+ "rnbq1rk1/pp2ppbp/2p2np1/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1": "Neo-Grünfeld Defense: Classical Variation, Original Defense",
+ "rnbq1rk1/pp2ppbp/5np1/3p4/3P4/5NP1/PP2PPBP/RNBQ1RK1": "Neo-Grünfeld Defense: Ultra-Delayed Exchange Variation",
+ "rnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR": "Grünfeld Defense",
+ "rnbqkb1r/ppp1pp1p/5np1/3p4/2PP2P1/2N5/PP2PP1P/R1BQKBNR": "Grünfeld Defense: Gibbon Gambit",
+ "rnbqkb1r/pp2pp1p/6p1/2p3B1/2PPp3/8/PP1QPPPP/R3KBNR": "Grünfeld Defense: Lundin Variation",
+ "rnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/2N2P2/PP2P1PP/R1BQKBNR": "Grünfeld Defense: Lutikov Variation",
+ "rnbqkb1r/pp2pp1p/6p1/2pn4/N2P4/5P2/PP2P1PP/R1BQKBNR": "Grünfeld Defense: Lutikov Variation, Murrey Attack",
+ "rnbqkb1r/ppp1pp1p/5np1/3p2B1/2PP4/2N5/PP2PPPP/R2QKBNR": "Grünfeld Defense: Stockholm Variation",
+ "rnbqkb1r/ppp1pp1p/5np1/3p4/2PP3P/2N5/PP2PPP1/R1BQKBNR": "Grünfeld Defense: Zaitsev Gambit",
+ "rnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/1QN5/PP2PPPP/R1B1KBNR": "Grünfeld Defense: Russian Variation, Accelerated Variation",
+ "rnbqkb1r/ppp1pp1p/5np1/3p4/2PP1B2/2N5/PP2PPPP/R2QKBNR": "Grünfeld Defense: Brinckmann Attack",
+ "rnbq1rk1/ppp1ppbp/5np1/3p4/2PP1B2/2N1P3/PP3PPP/R2QKBNR": "Grünfeld Defense: Brinckmann Attack, Grünfeld Gambit",
+ "rn1q1rk1/pp2ppbp/4bnp1/2Pp4/2P2B2/2N1P3/PP3PPP/2RQKBNR": "Grünfeld Defense: Brinckmann Attack, Grünfeld Gambit, Botvinnik Variation",
+ "rnbq1rk1/ppp1ppbp/5np1/3p4/2PP1B2/2N1P3/PP3PPP/2RQKBNR": "Grünfeld Defense: Brinckmann Attack, Grünfeld Gambit, Capablanca Variation",
+ "rnb2rk1/pp2ppbp/5np1/q1Pp4/2P2B2/2N1P3/PP3PPP/2RQKBNR": "Grünfeld Defense: Brinckmann Attack, Reshevsky Gambit",
+ "rnb2rk1/ppB1ppbp/6p1/3q4/3P4/4P3/PP3PPP/R2QKBNR": "Grünfeld Defense: Brinckmann Attack, Grünfeld Gambit Accepted",
+ "rnbqkb1r/ppp1pp1p/6p1/3n4/3P4/2N5/PP2PPPP/R1BQKBNR": "Grünfeld Defense: Exchange Variation",
+ "rnbqk2r/ppp1ppbp/6p1/8/3PP3/2P2N2/P4PPP/R1BQKB1R": "Grünfeld Defense: Exchange Variation, Modern Exchange Variation",
+ "rnbqk2r/pp2ppbp/6p1/2p5/3PP3/2P2N1P/P4PP1/R1BQKB1R": "Grünfeld Defense: Exchange Variation, Modern Exchange Variation, Kramnik's Line",
+ "r1bq1rk1/pp2pp1p/2n3p1/2pP4/4P3/2b2N2/P3BPPP/1RBQK2R": "Grünfeld Defense: Exchange Variation, Modern Exchange Variation, Pawn Grab Line",
+ "rnbqkb1r/ppp1pp1p/6p1/3n4/N2P4/8/PP2PPPP/R1BQKBNR": "Grünfeld Defense: Exchange Variation, Nadanian Attack",
+ "rnbqk2r/ppp1ppbp/6p1/8/2BPP3/2P5/P4PPP/R1BQK1NR": "Grünfeld Defense: Exchange Variation, Classical Variation",
+ "rnb2rk1/pppqppbp/6p1/8/2BPP3/2P5/P3NPPP/R1BQK2R": "Grünfeld Defense: Exchange Variation, Larsen Variation",
+ "rnb2rk1/p1pqppbp/1p4p1/8/2BPP3/2P5/P3NPPP/R1BQ1RK1": "Grünfeld Defense: Exchange Variation, Larsen Variation",
+ "r1bq1rk1/ppp1ppbp/2n3p1/8/2BPP3/2P5/P3NPPP/R1BQK2R": "Grünfeld Defense: Exchange Variation, Simagin's Improved Variation",
+ "rnbq1rk1/p1p1ppbp/1p4p1/8/2BPP3/2P5/P3NPPP/R1BQK2R": "Grünfeld Defense: Exchange Variation, Simagin's Lesser Variation",
+ "r2q1rk1/pp2pBbp/6p1/n1p5/3PP1b1/2P1BP2/P3N1PP/R2Q1RK1": "Grünfeld Defense: Exchange Variation, Seville Variation",
+ "rnbq1rk1/pp2ppbp/6p1/2p5/2BPP3/2P5/P3NPPP/R1BQK2R": "Grünfeld Defense: Exchange Variation, Spassky Variation",
+ "r1bq1rk1/pp2ppbp/2n3p1/8/2BPP3/4B3/P3NPPP/R2Q1RK1": "Grünfeld Defense: Exchange Variation, Spassky Variation",
+ "r2q1rk1/pp2ppbp/4b1p1/n2P4/4P3/3BBP2/P3N1PP/R2Q1RK1": "Grünfeld Defense: Exchange Variation, Sokolsky Variation",
+ "r2q1rk1/pp2ppbp/4b1p1/n7/3PP3/3BBP2/P3N1PP/R2Q1RK1": "Grünfeld Defense: Exchange Variation, Spassky Variation",
+ "rnbqk2r/ppp1ppbp/5np1/3p4/Q1PP4/2N2N2/PP2PPPP/R1B1KB1R": "Grünfeld Defense: Flohr Variation",
+ "rnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R": "Grünfeld Defense: Three Knights Variation",
+ "rnbqk2r/ppp1ppbp/5np1/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R": "Grünfeld Defense: Three Knights Variation",
+ "rnbqk2r/ppp1ppbp/5np1/3p2B1/2PP4/2N2N2/PP2PPPP/R2QKB1R": "Grünfeld Defense: Three Knights Variation, Petrosian System",
+ "rnbqk2r/ppp1ppbp/5np1/3p4/2PP1B2/2N2N2/PP2PPPP/R2QKB1R": "Grünfeld Defense: Three Knights Variation, Hungarian Attack",
+ "rnbq1rk1/ppp1ppbp/5np1/3p4/2PP1B2/2N1PN2/PP3PPP/R2QKB1R": "Grünfeld Defense: Three Knights Variation, Hungarian Variation",
+ "rn1q1rk1/pp2ppbp/2p2np1/3p1b2/2PP4/2NBPN2/PP3PPP/R1BQ1RK1": "Grünfeld Defense: Flohr Defense",
+ "rnbq1rk1/ppp1ppbp/5np1/3p4/1PPP4/2N1PN2/P4PPP/R1BQKB1R": "Grünfeld Defense: Makogonov Variation",
+ "rnbq1rk1/ppp1ppbp/5np1/3p4/2PP4/2N1PN2/PP1B1PPP/R2QKB1R": "Grünfeld Defense: Opocensky Variation",
+ "rn1q1rk1/pp2ppbp/2p2np1/3p4/2PP2b1/2NBPN2/PP3PPP/R1BQ1RK1": "Grünfeld Defense: Smyslov Defense",
+ "rnbqk2r/ppp1ppbp/5np1/3p4/2PP4/2N1PN2/PP3PPP/R1BQKB1R": "Grünfeld Defense: Three Knights Variation, Burille Variation",
+ "rnbq1rk1/ppp1ppbp/5np1/3p4/2PP4/2NBPN2/PP3PPP/R1BQK2R": "Grünfeld Defense: Three Knights Variation, Paris Variation",
+ "rnbq1rk1/ppp2pbp/4pnp1/3p4/2PP4/1QN1PN2/PP3PPP/R1B1KB1R": "Grünfeld Defense: Botvinnik Variation",
+ "r1bq1rk1/pppnppbp/5np1/6N1/2BP4/1QN1P3/PP3PPP/R1B1K2R": "Grünfeld Defense: Pachman Variation",
+ "rnbq1rk1/ppp1ppbp/5np1/3p4/2PP4/1QN1PN2/PP3PPP/R1B1KB1R": "Grünfeld Defense: Three Knights Variation, Vienna Variation",
+ "rnbqk2r/ppp1ppbp/5np1/3p4/2PP4/1QN2N2/PP2PPPP/R1B1KB1R": "Grünfeld Defense: Russian Variation",
+ "rnbq1rk1/ppp1ppbp/5np1/8/2QPP3/2N2N2/PP3PPP/R1B1KB1R": "Grünfeld Defense: Russian Variation",
+ "r1bq1rk1/ppp1ppbp/2n2np1/8/2QPP3/2N2N2/PP3PPP/R1B1KB1R": "Grünfeld Defense: Russian Variation, Byrne Variation",
+ "rnbq1rk1/1pp1ppbp/p4np1/8/2QPP3/2N2N2/PP3PPP/R1B1KB1R": "Grünfeld Defense: Russian Variation, Hungarian Variation",
+ "rnbq1rk1/p1p1ppbp/1p3np1/8/2QPP3/2N2N2/PP3PPP/R1B1KB1R": "Grünfeld Defense: Russian Variation, Levenfish Variation",
+ "r1bq1rk1/ppp1ppbp/n4np1/8/2QPP3/2N2N2/PP3PPP/R1B1KB1R": "Grünfeld Defense: Russian Variation, Prins Variation",
+ "rnbq1rk1/pp2ppbp/2p2np1/8/2QPP3/2N2N2/PP3PPP/R1B1KB1R": "Grünfeld Defense: Russian Variation, Szabo Variation",
+ "r2q1rk1/ppp1ppbp/1nn3p1/8/3PP1b1/2NQBN2/PP2BPPP/2KR3R": "Grünfeld Defense: Russian Variation, Keres Variation",
+ "rn1q1rk1/ppp1ppbp/5np1/8/2QPP1b1/2N2N2/PP3PPP/R1B1KB1R": "Grünfeld Defense: Russian Variation, Smyslov Variation",
+ "rn1q1rk1/pppnppbp/6p1/8/3PP1b1/1QN1BN2/PP3PPP/R3KB1R": "Grünfeld Defense: Russian Variation, Smyslov Variation",
+ "rn1q1rk1/pp1nppbp/6p1/2p5/3PP1b1/1QN1BN2/PP3PPP/R3KB1R": "Grünfeld Defense: Russian Variation, Yugoslav Variation",
+ "rnbqkb1r/pppp1ppp/4pn2/8/2PP4/6P1/PP2PP1P/RNBQKBNR": "Catalan Opening",
+ "rnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/6P1/PP2PP1P/RNBQKBNR": "Catalan Opening",
+ "rnbqkb1r/pppp1ppp/5n2/4p3/2PP4/6P1/PP2PP1P/RNBQKBNR": "Catalan Opening: Hungarian Gambit",
+ "rnbqkb1r/pppp1ppp/4pn2/8/2PP4/1Q6/PP2PPPP/RNB1KBNR": "Indian Defense",
+ "rnbqkb1r/pppp1ppp/4pn2/8/2PP2P1/8/PP2PP1P/RNBQKBNR": "Indian Defense: Devin Gambit",
+ "rnbqkb1r/pppp1ppp/4pn2/6B1/2PP4/8/PP2PPPP/RN1QKBNR": "Indian Defense: Seirawan Attack",
+ "rnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/6P1/PP2PPBP/RNBQK1NR": "Catalan Opening: Closed",
+ "rnbqkb1r/ppp2ppp/4pn2/8/2pP4/6P1/PP2PPBP/RNBQK1NR": "Catalan Opening: Open Defense",
+ "r1bqkb1r/pppn1ppp/4pn2/8/2QP4/6P1/PP2PPBP/RNB1K1NR": "Catalan Opening: Open Defense",
+ "r1bqkb1r/1ppn1ppp/p3pn2/8/3P4/6P1/PPQ1PPBP/RNB1K1NR": "Catalan Opening: Open Defense, Alekhine Variation",
+ "rnbqkb1r/ppp2ppp/4pn2/8/2pP4/5NP1/PP2PPBP/RNBQK2R": "Catalan Opening: Open Defense",
+ "r1bqk2r/ppp2ppp/2n1pn2/8/QbpP4/5NP1/PP2PPBP/RNB1K2R": "Catalan Opening: Open Defense, Modern Sharp Variation",
+ "rnbqk2r/ppp1bppp/4pn2/8/2pP4/5NP1/PP2PPBP/RNBQK2R": "Catalan Opening: Open Defense, Classical Line",
+ "rnbqk2r/ppp1bppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQK2R": "Catalan Opening: Closed",
+ "r1bq1rk1/pppnbppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1": "Catalan Opening: Closed",
+ "r1bq1rk1/pp1nbppp/2p1pn2/3p4/2PP4/2NQ1NP1/PP2PPBP/R1B2RK1": "Catalan Opening: Closed, Botvinnik Variation",
+ "r1bq1rk1/pp1nbppp/2p1pn2/3p4/2PP4/1P3NP1/P1Q1PPBP/RNB2RK1": "Catalan Opening: Closed",
+ "r1bq1rk1/pppnbppp/4pn2/3p4/2PP4/5NP1/PPQ1PPBP/RNB2RK1": "Catalan Opening: Closed",
+ "r2q1rk1/pb1nbppp/2p1pn2/1p1p4/2PP4/1PN2NP1/P1Q1PPBP/R1BR2K1": "Catalan Opening: Closed, Spassky Gambit",
+ "r1bq1rk1/p2nbppp/1pp1pn2/3p4/P1PP4/5NP1/1PQ1PPBP/RNBR2K1": "Catalan Opening: Closed, Zagoryansky Variation",
+ "r1bq1rk1/p2nbppp/2p1pn2/1p1p4/2PP4/5NP1/PPQNPPBP/R1B2RK1": "Catalan Opening: Closed Variation, Rabinovich Variation",
+ "r1bq1rk1/p2nbppp/1pp1pn2/3p4/2PP4/5NP1/PPQNPPBP/R1B2RK1": "Catalan Opening: Closed Variation, Traditional Variation",
+ "r1bq1rk1/pp1nbppp/2p1pn2/3p4/2PP4/5NP1/PPQNPPBP/R1B2RK1": "Catalan Opening: Closed, Main Line",
+ "r2q1rk1/3nbppp/bpp1pn2/p2p4/2PP4/1P3NP1/PBQNPPBP/R4RK1": "Catalan Opening: Closed, Sokolsky Variation",
+ "rnbqkb1r/p2p1ppp/4pn2/1ppP4/2P5/5N2/PP2PPPP/RNBQKB1R": "Blumenfeld Countergambit",
+ "rnbqkb1r/p5pp/4pn2/1Ppp4/8/5N2/PP2PPPP/RNBQKB1R": "Blumenfeld Countergambit Accepted",
+ "rnbqkb1r/p2p1ppp/4pn2/1ppP2B1/2P5/5N2/PP2PPPP/RN1QKB1R": "Blumenfeld Countergambit: Dus-Khotimirsky Variation",
+ "rnbqkb1r/p2p1pp1/5n1p/1ppP2B1/8/5N2/PP2PPPP/RN1QKB1R": "Blumenfeld Countergambit: Spielmann Variation",
+ "rnbqkb1r/pppp1ppp/4pn2/8/2PP4/5N2/PP2PPPP/RNBQKB1R": "Indian Defense: Anti-Nimzo-Indian",
+ "rnbqkb1r/1ppp1ppp/p3pn2/8/2PP4/5N2/PP2PPPP/RNBQKB1R": "Indian Defense: Dzindzi-Indian Defense",
+ "rnbqkb1r/pppp1ppp/4p3/8/2PPn3/5N2/PP2PPPP/RNBQKB1R": "Indian Defense: Döry Indian",
+ "rnbqk2r/pppp1ppp/4pn2/8/1bPP4/5N2/PP2PPPP/RNBQKB1R": "Bogo-Indian Defense",
+ "rnbqk2r/pppp1ppp/4pn2/8/2PP4/5N2/PP1bPPPP/RN1QKB1R": "Bogo-Indian Defense: Exchange Variation",
+ "rnbqk2r/pppp1ppp/4pn2/8/1bPP4/5N2/PP1NPPPP/R1BQKB1R": "Bogo-Indian Defense: Grünfeld Variation",
+ "r1bqk2r/pppp1ppp/2n1pn2/8/1bPP4/5N2/PP1BPPPP/RN1QKB1R": "Bogo-Indian Defense: Haiti Variation",
+ "rn1q1rk1/pbpp1ppp/1p2p3/6N1/2PP4/2n3P1/PPQ1PPBP/R3K2R": "Bogo-Indian Defense: Monticelli Trap",
+ "rnbqk2r/pppp1ppp/4pn2/8/1bPP4/8/PP1NPPPP/RNBQKB1R": "Bogo-Indian Defense: New England Variation",
+ "rnb1k2r/ppppqppp/4pn2/8/1bPP4/5N2/PP1BPPPP/RN1QKB1R": "Bogo-Indian Defense: Nimzowitsch Variation",
+ "rnbqk2r/ppppbppp/4pn2/8/2PP4/5N2/PP1BPPPP/RN1QKB1R": "Bogo-Indian Defense: Retreat Variation",
+ "rnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/5N2/PP1BPPPP/RN1QKB1R": "Bogo-Indian Defense: Vitolins Variation",
+ "rnbqk2r/1ppp1ppp/4pn2/p7/1bPP4/5N2/PP1BPPPP/RN1QKB1R": "Bogo-Indian Defense: Wade-Smyslov Variation",
+ "rnbqk2r/p1pp1ppp/1p2pn2/8/1bPP4/2N2N2/PP2PPPP/R1BQKB1R": "Nimzo-Indian Defense: Three Knights Variation, Duchamp Variation",
+ "rn1qk2r/pbpp1ppp/1p2pn2/6B1/1bPP4/2N5/PP1NPPPP/R2QKB1R": "Nimzo-Indian Defense: Three Knights Variation, Duchamp Variation, Modern Line",
+ "rnbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/5N2/PP2PPPP/RNBQKB1R": "Queen's Indian Defense",
+ "rnbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/2N2N2/PP2PPPP/R1BQKB1R": "Queen's Indian Defense: Kasparov Variation",
+ "rn1qkb1r/pbpp1p2/1p2p2p/6pn/2PP4/2N2NB1/PP2PPPP/R2QKB1R": "Queen's Indian Defense: Kasparov Variation, Botvinnik Attack",
+ "rn1qkb1r/pbpp1ppp/1p2pn2/8/2PP4/P1N2N2/1P2PPPP/R1BQKB1R": "Queen's Indian Defense: Kasparov-Petrosian Variation",
+ "rn1qkb1r/pbpp1ppp/1p2p3/8/2PPn3/P1N2N2/1P2PPPP/R1BQKB1R": "Queen's Indian Defense: Kasparov-Petrosian Variation, Andersson Variation",
+ "rn1qkb1r/pbp2ppp/1p3n2/3p4/3P4/P1N2N2/1P2PPPP/R1BQKB1R": "Queen's Indian Defense: Kasparov-Petrosian Variation, Classical Variation",
+ "rn1qkb1r/pbpp1p1p/1p2pnp1/8/2PP4/P1N2N2/1P2PPPP/R1BQKB1R": "Queen's Indian Defense: Kasparov-Petrosian Variation, Hedgehog Variation",
+ "rn1qkb1r/pbp2ppp/1p2p3/3n4/3P4/P1N2N2/1PQ1PPPP/R1B1KB1R": "Queen's Indian Defense: Kasparov-Petrosian Variation, Kasparov Attack",
+ "rn1qkb1r/pbp2ppp/1p2pn2/3p4/2PP4/P1N2N2/1P2PPPP/R1BQKB1R": "Queen's Indian Defense: Kasparov-Petrosian Variation, Main Line",
+ "rn1qk2r/pbppbppp/1p2pn2/8/2PP4/P1N2N2/1P2PPPP/R1BQKB1R": "Queen's Indian Defense: Kasparov-Petrosian Variation, Marco Defense",
+ "rn1qkb1r/pbp2ppp/1p2p3/3n4/3P4/P1N2N2/1P2PPPP/R1BQKB1R": "Queen's Indian Defense: Kasparov-Petrosian Variation, Modern Variation",
+ "rn1qkb1r/pbp2ppp/1p2p3/3n4/3P4/P1N1PN2/1P3PPP/R1BQKB1R": "Queen's Indian Defense: Kasparov-Petrosian Variation, Petrosian Attack",
+ "rn1qkb1r/pbp2ppp/1p2p3/3n4/3PP3/P1N2N2/1P3PPP/R1BQKB1R": "Queen's Indian Defense: Kasparov-Petrosian Variation, Polovodin Gambit",
+ "rn1qkb1r/pbp2ppp/1p2p3/3n4/Q2P4/P1N2N2/1P2PPPP/R1B1KB1R": "Queen's Indian Defense: Kasparov-Petrosian Variation, Rashkovsky Attack",
+ "rn1qkb1r/pbp2ppp/1p2p3/3n4/3P4/P1N2N2/1P1BPPPP/R2QKB1R": "Queen's Indian Defense: Kasparov-Petrosian Variation, Romanishin Attack",
+ "rnbqkb1r/p1pp1ppp/1p2pn2/8/2PP1B2/5N2/PP2PPPP/RN1QKB1R": "Queen's Indian Defense: Miles Variation",
+ "rnbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/P4N2/1P2PPPP/RNBQKB1R": "Queen's Indian Defense: Petrosian Variation",
+ "rn1qkb1r/pbpp1ppp/1p2pn2/8/2PP4/P4N2/1PQ1PPPP/RNB1KB1R": "Queen's Indian Defense: Petrosian Variation, Farago Defense",
+ "rn1qk2r/pbpp1pp1/1p2pn1p/8/1bPP3B/2N2N2/PP2PPPP/R2QKB1R": "Queen's Indian Defense: Kasparov Variation",
+ "rn1q1rk1/pb1pbppp/1p2pn2/8/2PN4/1P1BP3/PB3PPP/RN1Q1RK1": "Queen's Indian Defense: Averbakh Variation",
+ "rnbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/4PN2/PP3PPP/RNBQKB1R": "Queen's Indian Defense: Spassky System",
+ "rn1qkb1r/pb1p1ppp/1p3n2/2pp2N1/2P5/6P1/PP2PPBP/RNBQK2R": "Queen's Indian Defense: Buerger Variation",
+ "rn1qkb1r/pbpp1ppp/1p2pn2/8/2PP4/5NP1/PP2PP1P/RNBQKB1R": "Queen's Indian Defense: Fianchetto Traditional",
+ "rnbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/5NP1/PP2PP1P/RNBQKB1R": "Queen's Indian Defense: Fianchetto Variation",
+ "rn1qk2r/p1pp1ppp/bp2pn2/8/1bPP4/1P3NP1/P3PP1P/RNBQKB1R": "Queen's Indian Defense: Fianchetto Variation, Check Variation",
+ "rn1qk2r/p1ppbppp/bp2pn2/8/2PP4/1P3NP1/P2BPP1P/RN1QKB1R": "Queen's Indian Defense: Fianchetto Variation, Check Variation, Intermezzo Line",
+ "rn2k2r/p1ppqppp/bp2pn2/8/1bPP4/1P3NP1/P2BPP1P/RN1QKB1R": "Queen's Indian Defense: Fianchetto Variation, Check Variation, Modern Line",
+ "rn1qkb1r/p1pp1ppp/bp2pn2/8/2PP4/5NP1/PP2PP1P/RNBQKB1R": "Queen's Indian Defense: Fianchetto Variation, Nimzowitsch Variation",
+ "rn1qkb1r/p1pp1ppp/bp2pn2/8/Q1PP4/5NP1/PP2PP1P/RNB1KB1R": "Queen's Indian Defense: Fianchetto Variation, Nimzowitsch Variation, Nimzowitsch Attack",
+ "rn1qkb1r/p1pp1ppp/bp2pn2/8/2PP4/1P3NP1/P3PP1P/RNBQKB1R": "Queen's Indian Defense: Fianchetto Variation, Nimzowitsch Variation, Quiet Line",
+ "rn1qkb1r/p1pp1ppp/bp2pn2/8/2PP4/1Q3NP1/PP2PP1P/RNB1KB1R": "Queen's Indian Defense: Fianchetto Variation, Nimzowitsch Variation, Timman's Line",
+ "rn1qkb1r/pb1p1ppp/1p3n2/2pp4/2P4N/6P1/PP2PPBP/RNBQK2R": "Queen's Indian Defense: Fianchetto Variation, Rubinstein Variation",
+ "rn1qkb1r/pb1p1ppp/1p2pn2/2p5/2PP4/5NP1/PP2PPBP/RNBQK2R": "Queen's Indian Defense: Fianchetto Variation, Sämisch Variation",
+ "rn1qk2r/pbpp1ppp/1p2pn2/8/1bPP4/5NP1/PP2PPBP/RNBQK2R": "Queen's Indian Defense: Capablanca Variation",
+ "rn1qk2r/pbppbppp/1p2pn2/8/2PP4/5NP1/PP1BPPBP/RN1QK2R": "Queen's Indian Defense: Riumin Variation",
+ "rn1qk2r/1bpp1ppp/1p2pn2/p7/1bPP4/5NP1/PP1BPPBP/RN1QK2R": "Queen's Indian Defense: Yates Variation",
+ "rn1qk2r/pbppbppp/1p2pn2/8/2PP4/2N2NP1/PP2PPBP/R1BQK2R": "Queen's Indian Defense: Anti-Queen's Indian System",
+ "rn1qk2r/pbppbppp/1p2pn2/8/2PP4/5NP1/PP2PPBP/RNBQ1RK1": "Queen's Indian Defense: Classical Variation",
+ "rn1q1rk1/pbppbppp/1p3n2/3p4/2P4N/6P1/PP2PPBP/RNBQ1RK1": "Queen's Indian Defense: Classical Variation, Polugaevsky Gambit",
+ "rn1q1rk1/pbppbppp/1p3n2/3p4/2PN4/6P1/PP2PPBP/RNBQ1RK1": "Queen's Indian Defense: Classical Variation, Taimanov Gambit",
+ "rn1q1rk1/pbppbppp/1p2pn2/8/2PP4/1P3NP1/P3PPBP/RNBQ1RK1": "Queen's Indian Defense: Euwe Variation",
+ "rn1q1rk1/pbppbppp/1p2pn2/8/2PP4/5NP1/PP2PPBP/RNBQR1K1": "Queen's Indian Defense: Fianchetto Variation, Kramnik Variation",
+ "rn1qk2r/pbppbppp/1p2p3/8/2PPn3/2N2NP1/PP1BPPBP/R2QK2R": "Queen's Indian Defense: Opocensky Variation",
+ "rn1qk2r/pbppbppp/1p2pn2/8/2PP4/5NP1/PP2PPBP/RNBQK2R": "Queen's Indian Defense: Traditional Variation",
+ "r2q1rk1/pbppbppp/np2pn2/8/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1": "Queen's Indian Defense: Classical Variation, Tiviakov Defense",
+ "rn1q1rk1/pbppbppp/1p2pn2/8/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1": "Queen's Indian Defense: Classical Variation, Traditional Variation",
+ "rn1q1rk1/pbp1bppp/1p2pn2/3p4/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1": "Queen's Indian Defense: Classical Variation, Traditional Variation, Nimzowitsch Line",
+ "rn1q1rk1/pbppbppp/1p2p3/8/2PP4/2Q2NP1/PP2PPBP/R1B2RK1": "Queen's Indian Defense: Classical Variation, Traditional Variation, Main Line",
+ "rnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N5/PP2PPPP/R1BQKBNR": "Nimzo-Indian Defense",
+ "rnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N2P2/PP2P1PP/R1BQKBNR": "Nimzo-Indian Defense: Kmoch Variation",
+ "rnbqk2r/pppp1ppp/4pn2/8/1bPP4/2NQ4/PP2PPPP/R1B1KBNR": "Nimzo-Indian Defense: Mikenas Attack",
+ "rnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N3P1/PP2PP1P/R1BQKBNR": "Nimzo-Indian Defense: Romanishin Variation",
+ "rnbq1rk1/pp1p1ppp/4pn2/2p5/1bPP4/2N2NP1/PP2PPBP/R1BQK2R": "Nimzo-Indian Defense: Romanishin Variation",
+ "rnbq1rk1/pp3ppp/4p3/3n4/1b1N4/2N3P1/PP2PPBP/R1BQK2R": "Nimzo-Indian Defense: Romanishin Variation, English Hybrid",
+ "rnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N2N2/PP2PPPP/R1BQKB1R": "Nimzo-Indian Defense: Three Knights Variation",
+ "rnbqk2r/pp1p1ppp/4p3/2pP4/1bP1n3/2N2N2/PP2PPPP/R1BQKB1R": "Nimzo-Indian Defense: Three Knights Variation, Euwe Variation",
+ "rnbqk2r/pp1p1ppp/4pn2/2pP4/1bP5/2N2N2/PP2PPPP/R1BQKB1R": "Nimzo-Indian Defense: Three Knights Variation, Korchnoi Variation",
+ "rnbqk2r/p2p1ppp/4pn2/1ppP4/1bP5/2N2N2/PP2PPPP/R1BQKB1R": "Nimzo-Indian Defense: Three Knights Variation, Shocron Gambit",
+ "rnbqk2r/pppp1ppp/4pn2/8/1bPP4/1QN5/PP2PPPP/R1B1KBNR": "Nimzo-Indian Defense: Spielmann Variation",
+ "r1bqk2r/pp1p1ppp/2n1p3/2P5/1bP5/1QN2N2/PP1nPPPP/R3KB1R": "Nimzo-Indian Defense: Spielmann Variation, Karlsbad Variation",
+ "r1bqk2r/pp1p1ppp/2n1pn2/2P5/1bP5/1QN5/PP2PPPP/R1B1KBNR": "Nimzo-Indian Defense: Spielmann Variation, Romanovsky Gambit",
+ "r1bqk2r/pp1p1ppp/2n1p3/2n5/1bP5/1QN2N2/PP1BPPPP/R3KB1R": "Nimzo-Indian Defense: Spielmann Variation, Stahlberg Variation",
+ "r1bqk2r/pp1p2pp/2n1p3/2n2p2/1bP5/2N2NP1/PPQBPP1P/R3KB1R": "Nimzo-Indian Defense: Spielmann Variation, Stahlberg Variation",
+ "rnbqk2r/pppp1ppp/4pn2/8/2PP4/P1P5/4PPPP/R1BQKBNR": "Nimzo-Indian Defense: Sämisch Variation, Accelerated",
+ "rnbq1rk1/pp3ppp/4p3/2pn4/3P4/P1P1PP2/6PP/R1BQKBNR": "Nimzo-Indian Defense: Sämisch Variation, Botvinnik Variation",
+ "rnbqk2r/pp3ppp/4pn2/2pP4/3P4/P1P2P2/4P1PP/R1BQKBNR": "Nimzo-Indian Defense: Sämisch Variation",
+ "rnbqk2r/pp3ppp/4p3/2Pn4/8/P1P2P2/4P1PP/R1BQKBNR": "Nimzo-Indian Defense: Sämisch Variation, Keres Variation",
+ "rnbqk2r/pp4pp/4p3/2Pn1p2/8/P1P2P2/4P1PP/R1BQKBNR": "Nimzo-Indian Defense: Sämisch Variation, Romanovsky Variation",
+ "rnbqk2r/pp1p1ppp/4pn2/2p5/2PP4/P1P1P3/5PPP/R1BQKBNR": "Nimzo-Indian Defense: Sämisch Variation",
+ "rnbqk2r/p2p1ppp/1p2pn2/2p5/2PP4/P1P1P3/5PPP/R1BQKBNR": "Nimzo-Indian Defense: Sämisch Variation, O'Kelly Variation",
+ "rnbq1rk1/pppp1ppp/4pn2/8/2PP4/P1P5/4PPPP/R1BQKBNR": "Nimzo-Indian Defense: Sämisch Variation",
+ "rnbq1rk1/pppp1ppp/4pn2/8/2PP4/P1P1P3/5PPP/R1BQKBNR": "Nimzo-Indian Defense: Sämisch Variation",
+ "r1bq1rk1/pp1p1ppp/2n1pn2/2p5/2PP4/P1PBP3/5PPP/R1BQK1NR": "Nimzo-Indian Defense: Sämisch Variation",
+ "r1bqnrk1/p2p1ppp/1pn1p3/2p5/2PPP3/P1PB4/4NPPP/R1BQK2R": "Nimzo-Indian Defense: Sämisch Variation, Capablanca Variation",
+ "rnbqk2r/pppp1ppp/4pn2/6B1/1bPP4/2N5/PP2PPPP/R2QKBNR": "Nimzo-Indian Defense: Leningrad Variation",
+ "rnbqk2r/p2p1pp1/4pn1p/1ppP4/1bP4B/2N5/PP2PPPP/R2QKBNR": "Nimzo-Indian Defense: Leningrad Variation, Averbakh Gambit",
+ "rnbqk2r/pp3pp1/3ppn1p/2pP4/1bP4B/2N5/PP2PPPP/R2QKBNR": "Nimzo-Indian Defense: Leningrad Variation, Benoni Defense",
+ "rnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N5/PPQ1PPPP/R1B1KBNR": "Nimzo-Indian Defense: Classical Variation",
+ "rnbq1rk1/p1pp1ppp/1p2pn2/8/2PP4/P1Q5/1P2PPPP/R1B1KBNR": "Nimzo-Indian Defense: Classical Variation, Keres Defense",
+ "rnbq1rk1/p1pp1ppp/4pn2/1p6/2PP4/P1Q5/1P2PPPP/R1B1KBNR": "Nimzo-Indian Defense: Classical Variation, Vitolins-Adorjan Gambit",
+ "r1bqk2r/ppp2ppp/2nppn2/8/1bPP4/2N2N2/PPQ1PPPP/R1B1KB1R": "Nimzo-Indian Defense: Classical Variation, Milner-Barry Variation",
+ "r1bqk2r/pppp1ppp/2n1pn2/8/1bPP4/2N5/PPQ1PPPP/R1B1KBNR": "Nimzo-Indian Defense: Classical Variation, Zurich Variation",
+ "rnb1k2r/ppp2ppp/5n2/4pq2/1b1P4/2N2N2/PP2PPPP/R1BQKB1R": "Nimzo-Indian Defense: Classical Variation, Belyavsky Gambit",
+ "rnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/2N5/PPQ1PPPP/R1B1KBNR": "Nimzo-Indian Defense: Classical Variation, Noa Variation",
+ "rnbqk2r/ppp2ppp/5n2/3p4/1b1P4/2N5/PPQ1PPPP/R1B1KBNR": "Nimzo-Indian Defense: Classical Variation, Noa Variation",
+ "rnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/P1N5/1PQ1PPPP/R1B1KBNR": "Nimzo-Indian Defense: Classical Variation, Noa Variation",
+ "r1bqk2r/ppp2ppp/2n1pn2/3p4/2PP4/P1Q5/1P2PPPP/R1B1KBNR": "Nimzo-Indian Defense: Classical Variation, Noa Variation, Botvinnik Variation",
+ "rnbqk2r/ppp2ppp/4p3/3p4/2PPn3/P1Q5/1P2PPPP/R1B1KBNR": "Nimzo-Indian Defense: Classical Variation, Noa Variation, Main Line",
+ "rnbqk2r/ppp2ppp/4p3/3p4/2PPn3/P7/1PQ1PPPP/R1B1KBNR": "Nimzo-Indian Defense: Classical Variation, Noa Variation",
+ "r1bqk2r/ppp2ppp/2n5/3pp3/2PPn3/P3P3/1PQ2PPP/R1B1KBNR": "Nimzo-Indian Defense: Classical Variation, Noa Variation, San Remo Variation",
+ "rnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2N5/PPQ1PPPP/R1B1KBNR": "Nimzo-Indian Defense: Classical Variation, Berlin Variation",
+ "rnbqk2r/pp1p1ppp/4pn2/2P5/2P5/2b5/PPQ1PPPP/R1B1KBNR": "Nimzo-Indian Defense: Classical Variation, Berlin Variation, Steiner Variation",
+ "rnbq1rk1/p2p1ppp/1p2pn2/2b5/2P2B2/P1N2N2/1PQ1PPPP/R3KB1R": "Nimzo-Indian Defense: Classical Variation, Berlin Variation, Macieja System",
+ "rnbq1rk1/pp1p1ppp/4pn2/2P5/1bP5/2N5/PPQ1PPPP/R1B1KBNR": "Nimzo-Indian Defense: Classical Variation, Berlin Variation, Pirc Variation",
+ "rnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N1P3/PP3PPP/R1BQKBNR": "Nimzo-Indian Defense: Normal Line",
+ "r1bqk2r/pppp1ppp/2n1pn2/8/1bPP4/2N1P3/PP3PPP/R1BQKBNR": "Nimzo-Indian Defense: Normal Variation, Taimanov Variation",
+ "rnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2N1P3/PP3PPP/R1BQKBNR": "Nimzo-Indian Defense: Hübner Variation",
+ "r1bqk2r/pp3ppp/2nppn2/2p5/2PP4/2PBPN2/P4PPP/R1BQK2R": "Nimzo-Indian Defense: Hübner Variation, Main Line",
+ "rnbq1rk1/pp1p1ppp/4pn2/2p5/1bPP4/2N1PN2/PP3PPP/R1BQKB1R": "Nimzo-Indian Defense: Normal Variation, Hübner Deferred",
+ "rnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2N1P3/PP2NPPP/R1BQKB1R": "Nimzo-Indian Defense: Hübner Variation, Rubinstein Variation",
+ "rnbq1rk1/pp1p1ppp/4pn2/8/1bPP4/P1N5/1P2NPPP/R1BQKB1R": "Nimzo-Indian Defense: Hübner Variation, Rubinstein Variation, Main Line",
+ "rnbq1rk1/pp1p1ppp/4pn2/2P5/1b1P4/2N5/PP2NPPP/R1BQKB1R": "Nimzo-Indian Defense: Hübner Variation, Rubinstein Variation, Sherbakov Attack",
+ "rnbqk2r/p1pp1ppp/1p2pn2/8/1bPP4/2N1P3/PP3PPP/R1BQKBNR": "Nimzo-Indian Defense: St. Petersburg Variation",
+ "rnbqk2r/p1pp1ppp/1p2pn2/8/1bPP4/2N1P3/PP2NPPP/R1BQKB1R": "Nimzo-Indian Defense: Fischer Variation",
+ "rn1qk2r/p1pp1ppp/bp2pn2/8/1bPP4/2N1P3/PP2NPPP/R1BQKB1R": "Nimzo-Indian Defense: Normal Variation, Bronstein (Byrne) Variation",
+ "rnbq1rk1/pppp1ppp/4pn2/8/1bPP4/2N1P3/PP3PPP/R1BQKBNR": "Nimzo-Indian Defense: Normal Variation",
+ "rnbq1rk1/pppp1ppp/4pn2/8/1bPP4/2N1P3/PP2NPPP/R1BQKB1R": "Nimzo-Indian Defense: Reshevsky Variation",
+ "rnbq1rk1/ppp2ppp/3bpn2/3p4/2PP4/P1N1P3/1P2NPPP/R1BQKB1R": "Nimzo-Indian Defense: Simagin Variation",
+ "rnbq1rk1/pppp1ppp/4pn2/8/1bPP4/2NBP3/PP3PPP/R1BQK1NR": "Nimzo-Indian Defense: Normal Variation, Bishop Attack",
+ "rnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/2NBP3/PP3PPP/R1BQK1NR": "Nimzo-Indian Defense: Normal Variation, Bishop Attack, Classical Defense",
+ "r1bq1rk1/ppp2ppp/2n1pn2/3p4/1bPP4/2NBPN2/PP3PPP/R1BQ1RK1": "Nimzo-Indian Defense: Ragozin Defense",
+ "rnbq1rk1/ppp2ppp/4pn2/3p4/2PP4/P1PBP3/5PPP/R1BQK1NR": "Nimzo-Indian Defense: Normal Variation, Botvinnik System",
+ "rnbq1rk1/pppp1ppp/4pn2/8/1bPP4/2N1PN2/PP3PPP/R1BQKB1R": "Nimzo-Indian Defense",
+ "rnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/2N1PN2/PP3PPP/R1BQKB1R": "Nimzo-Indian Defense: Normal Variation, Ragozin Variation",
+ "rnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/P1N1PN2/1P3PPP/R1BQKB1R": "Nimzo-Indian Defense: Normal Variation, Sämisch Deferred",
+ "r1bq1rk1/ppp2ppp/2n1pn2/8/1bpP4/2NBPN2/PP3PPP/R1BQ1RK1": "Nimzo-Indian Defense: Ragozin Variation",
+ "rnbq1rk1/p1p2ppp/1p2pn2/3p4/1bPP4/2NBPN2/PP3PPP/R1BQK2R": "Nimzo-Indian Defense: Normal Variation, Schlechter Defense",
+ "rnbq1rk1/pp3ppp/4pn2/2pp4/1bPP4/2NBPN2/PP3PPP/R1BQK2R": "Nimzo-Indian Defense: Normal Variation, Gligoric System",
+ "r1bq1rk1/pp1n1ppp/4pn2/2pp4/1bPP4/2NBPN2/PP3PPP/R1BQ1RK1": "Nimzo-Indian Defense: Normal Variation, Gligoric System",
+ "rnbq1rk1/p4ppp/1p2pn2/2pp4/1bPP4/2NBPN2/PP3PPP/R1BQ1RK1": "Nimzo-Indian Defense: Normal Variation, Gligoric System, Keres Variation",
+ "rnbq1rk1/pp3ppp/4pn2/2p5/1bBP4/2N1PN2/PP3PPP/R1BQ1RK1": "Nimzo-Indian Defense: Normal Variation, Gligoric System, Exchange Variation",
+ "rnb2rk1/pp2qppp/4pn2/2p5/1bBP4/2N1PN2/PP3PPP/R1BQ1RK1": "Nimzo-Indian Defense: Normal Variation, Gligoric System, Smyslov Variation",
+ "r1bq1rk1/pp1n1ppp/4pn2/2p5/1bBP4/2N1PN2/PP3PPP/R1BQ1RK1": "Nimzo-Indian Defense: Normal Variation, Gligoric System, Bronstein Variation",
+ "r1bq1rk1/pp3ppp/2n1pn2/2pp4/1bPP4/2NBPN2/PP3PPP/R1BQ1RK1": "Nimzo-Indian Defense: Normal Variation, Gligoric System, Bernstein Defense",
+ "r1bq1rk1/pp3ppp/2n1pn2/2pp4/2PP4/P1PBPN2/5PPP/R1BQ1RK1": "Nimzo-Indian Defense: Normal Variation, Bernstein Defense, Exchange Line",
+ "r1bq1rk1/pp3ppp/2n1pn2/2p5/2BP4/P1P1PN2/5PPP/R1BQ1RK1": "Nimzo-Indian Defense: Normal Variation, Bernstein Defense",
+ "rnbqk2r/ppp1ppbp/5np1/3p4/2PP4/6P1/PP2PPBP/RNBQK1NR": "Grünfeld Defense: Counterthrust Variation",
+ "rnbqkb1r/p1pppp1p/5np1/1p1P4/2P5/8/PP2PPPP/RNBQKBNR": "Indian Defense: Anti-Grünfeld, Adorjan Gambit",
+ "rnbqkb1r/pppppp1p/5np1/3P4/2P5/8/PP2PPPP/RNBQKBNR": "Indian Defense: Anti-Grünfeld, Advance Variation",
+ "rnbqkb1r/pppppp1p/5np1/8/2PP4/5P2/PP2P1PP/RNBQKBNR": "Indian Defense: Anti-Grünfeld, Alekhine Variation",
+ "rnbqkb1r/pppp1p1p/5np1/4p3/2PP4/5P2/PP2P1PP/RNBQKBNR": "Indian Defense: Anti-Grünfeld, Alekhine Variation, Leko Gambit",
+ "rnbqkb1r/pppppp1p/5np1/8/2PP3P/8/PP2PPP1/RNBQKBNR": "Indian Defense: Anti-Grünfeld, Basman-Williams Attack",
+ "rnbqk2r/ppppppbp/5np1/8/2PP4/6P1/PP2PPBP/RNBQK1NR": "Indian Defense: King's Indian Variation, Fianchetto Variation",
+ "rnbqkb1r/pppppp1p/5np1/8/2PP4/8/PP2PPPP/RNBQKBNR": "Indian Defense: West Indian Defense",
+ "rnbqkb1r/pppppp1p/5np1/8/2PP4/6P1/PP2PP1P/RNBQKBNR": "King's Indian Defense: Fianchetto Variation, Immediate Fianchetto",
+ "rnb1k2r/pp1pppbp/5np1/q1p5/2PP4/5NP1/PP2PPBP/RNBQK2R": "King's Indian Defense: Fianchetto Variation, Pterodactyl Variation",
+ "rnbq1rk1/pp2ppbp/3p1np1/2p5/2PP4/5NP1/PP2PPBP/RNBQ1RK1": "King's Indian Defense: Fianchetto Variation, Yugoslav System",
+ "rnbqkb1r/pppppp1p/5np1/8/2PP4/5N2/PP2PPPP/RNBQKB1R": "King's Indian Defense: Normal Variation, King's Knight Variation",
+ "rnbqk2r/ppppppbp/5np1/8/1PPP4/5N2/P3PPPP/RNBQKB1R": "King's Indian Defense: Santasiere Variation",
+ "rnbq1rk1/pp2ppbp/2pp1np1/8/2PP4/2N1PN2/PP2BPPP/R1BQK2R": "King's Indian Defense: Semi-Classical Variation, Benoni Variation",
+ "r1bq1rk1/ppp1ppbp/2np1np1/8/2PP4/2N1PN2/PP2BPPP/R1BQK2R": "King's Indian Defense: Semi-Classical Variation, Hollywood Variation",
+ "rnbqkb1r/pppppp1p/5np1/8/2PP4/8/PPQ1PPPP/RNB1KBNR": "Queen's Pawn, Mengarini Attack",
+ "rnbqkb1r/pppppp1p/5np1/8/2PP4/2N5/PP2PPPP/R1BQKBNR": "King's Indian Defense",
+ "rnb2rk1/pp2ppbp/1qpp1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1": "King's Indian Defense: Fianchetto Variation, Benjamin Defense",
+ "rnbq1rk1/ppp1ppbp/3p1np1/8/2PP4/2N1PN2/PP2BPPP/R1BQK2R": "King's Indian Defense: Semi-Classical Variation",
+ "r1bq1rk1/pppn1pbp/5np1/4p3/2P5/2N1PN2/PP2BPPP/R1BQ1RK1": "King's Indian Defense: Semi-Classical Variation, Exchange Variation",
+ "r1bq1rk1/pppn1pbp/3p1np1/4p3/1PPP4/2N1PN2/P3BPPP/R1BQ1RK1": "King's Indian Defense: Semi-Classical Variation, Queenside Storm Line",
+ "rnbqk2r/ppp1ppbp/3p1np1/6B1/2PP4/2N2N2/PP2PPPP/R2QKB1R": "King's Indian Defense: Smyslov Variation",
+ "rnbqk2r/ppp1ppbp/3p1np1/8/2PP4/2N2NP1/PP2PP1P/R1BQKB1R": "King's Indian Defense: Fianchetto Variation, Delayed Fianchetto",
+ "r1bq1rk1/ppp1ppbp/2np1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQK2R": "King's Indian Defense: Fianchetto Variation, Karlsbad Variation",
+ "rnb2rk1/pp2ppbp/2pp1np1/q7/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1": "King's Indian Defense: Fianchetto Variation, Kavalek Defense",
+ "rn1q1rk1/pp2ppbp/2pp1np1/5b2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1": "King's Indian Defense: Fianchetto Variation, Larsen Defense",
+ "r2q1rk1/ppp1ppbp/2np1np1/5b2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1": "King's Indian Defense: Fianchetto Variation, Lesser Simagin (Spassky)",
+ "r2q1rk1/ppp1ppbp/2np1np1/8/2PP2b1/2N2NP1/PP2PPBP/R1BQ1RK1": "King's Indian Defense: Fianchetto Variation, Simagin Variation",
+ "r1bq1rk1/ppp2pbp/2np1np1/4p3/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1": "King's Indian Defense: Fianchetto Variation, Uhlmann-Szabo System",
+ "r1bq1rk1/1pp1ppbp/p1np1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1": "King's Indian Defense: Fianchetto Variation, Panno Variation",
+ "r1bq1rk1/1p3pbp/p2p1np1/n1pPp3/2P5/2N3P1/PPQNPPBP/R1B2RK1": "King's Indian Defense: Fianchetto Variation, Panno Variation, Blockade Line",
+ "1rbq1rk1/4pp1p/p2p1npb/n1pP4/2P5/2N3P1/PBQNPPBP/R4RK1": "King's Indian Defense: Fianchetto Variation, Panno Variation, Donner Line",
+ "1rbq1rk1/2p1ppbp/p1np1np1/1p6/2PP4/2N1B1PP/PP1NPPB1/R2Q1RK1": "King's Indian Defense: Fianchetto Variation, Panno Variation, Korchnoi Line",
+ "rnbq1rk1/pp2ppbp/3p1np1/2p5/2PP4/2N2NP1/PP2PPBP/R1BQK2R": "King's Indian Defense: Fianchetto Variation, Yugoslav Variation, Rare Line",
+ "rnbq1rk1/pp2ppbp/3p1np1/2p5/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1": "King's Indian Defense: Fianchetto Variation, Yugoslav Variation",
+ "r1bq1rk1/pp2ppbp/2n2np1/2p5/2P5/2N2NP1/PP2PPBP/R1BQ1RK1": "King's Indian Defense: Fianchetto Variation, Yugoslav Variation, Exchange Line",
+ "r1bq1rk1/pp2ppbp/2np1np1/2pP4/2P5/2N2NP1/PP2PPBP/R1BQ1RK1": "King's Indian Defense: Fianchetto Variation, Yugoslav Variation, Advance Line",
+ "r1bq1rk1/pppn1pbp/3p1np1/4p3/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1": "King's Indian Defense: Fianchetto Variation, Classical Fianchetto",
+ "r1bq1rk1/pppnppbp/3p1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQK2R": "King's Indian Defense: Fianchetto Variation, Debrecen Defense",
+ "r1bq1rk1/pppn1pbp/3p1np1/4p3/2PP4/1PN2NP1/P3PPBP/R1BQ1RK1": "King's Indian Defense: Fianchetto Variation, Double Fianchetto Attack",
+ "r1bq1rk1/1ppnppbp/p2p1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1": "King's Indian Defense: Fianchetto Variation, Hungarian Variation",
+ "r1bq1rk1/pppn1pbp/3p1np1/4p3/2PPP3/2N2NP1/PP3PBP/R1BQ1RK1": "King's Indian Defense: Fianchetto Variation, Classical Variation",
+ "r1bqr1k1/1pp2pbp/3p1np1/p1n5/2PNP3/2N3PP/PP3PB1/R1BQR1K1": "King's Indian Defense: Fianchetto Variation, Long Variation",
+ "r1bq1rk1/pp1n1pbp/2pp1np1/4p3/2PPP3/2N2NPP/PP3PB1/R1BQ1RK1": "King's Indian Defense: Fianchetto Variation, Classical Main Line",
+ "rnbqk2r/ppp1ppbp/3p1np1/6B1/2PPP3/2N5/PP3PPP/R2QKBNR": "King's Indian Defense: Accelerated Averbakh Variation",
+ "rnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N5/PP2NPPP/R1BQKB1R": "King's Indian Defense: Kramer Variation",
+ "rnbqk2r/ppppppbp/5np1/8/2PPP3/2N5/PP3PPP/R1BQKBNR": "King's Indian Defense: Normal Variation",
+ "rnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N5/PP3PPP/R1BQKBNR": "King's Indian Defense: Normal Variation",
+ "rnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N4P/PP3PP1/R1BQKBNR": "King's Indian Defense: Makogonov Variation",
+ "rnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N3P1/PP3P1P/R1BQKBNR": "King's Indian Defense: Normal Variation, Deferred Fianchetto",
+ "rnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N3P1/PP2NPBP/R1BQK2R": "King's Indian Defense: Pomar System",
+ "rnbq1rk1/ppp1ppbp/3p1np1/6B1/2PPP3/2N5/PP2BPPP/R2QK1NR": "King's Indian Defense: Averbakh Variation",
+ "rnbq1rk1/ppp1ppb1/3p1npp/6B1/2PPP3/2N5/PP2BPPP/R2QK1NR": "King's Indian Defense: Averbakh Variation, Flexible Defense",
+ "r1bq1rk1/pppnppbp/3p1np1/6B1/2PPP3/2N5/PP2BPPP/R2QK1NR": "King's Indian Defense: Averbakh Variation, Geller Defense",
+ "r1bq1rk1/ppp1ppbp/n2p1np1/6B1/2PPP3/2N5/PP2BPPP/R2QK1NR": "King's Indian Defense: Averbakh Variation, Modern Defense",
+ "r1bq1rk1/pp2ppbp/n1pp1np1/6B1/2PPP3/2N5/PP1QBPPP/R3K1NR": "King's Indian Defense: Averbakh Variation, Modern Defense, Burgess Line",
+ "r1bq1rk1/ppp1ppbp/2np1np1/6B1/2PPP3/2N5/PP2BPPP/R2QK1NR": "King's Indian Defense: Averbakh Variation, Nc6 Defense",
+ "rnbq1rk1/1pp1ppbp/p2p1np1/6B1/2PPP3/2N5/PP2BPPP/R2QK1NR": "King's Indian Defense: Averbakh Variation, Spanish Defense",
+ "rnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N5/PP2BPPP/R1BQK1NR": "King's Indian Defense: Normal Variation, Standard Development",
+ "rnbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N1B3/PP2BPPP/R2QK1NR": "King's Indian Defense: Semi-Averbakh System",
+ "rnbq1rk1/pp2ppbp/3p1np1/2p3B1/2PPP3/2N5/PP2BPPP/R2QK1NR": "King's Indian Defense: Averbakh Variation, Benoni Defense",
+ "rnbq1rk1/pp2ppbp/3p1np1/2pP2B1/2P1P3/2N5/PP2BPPP/R2QK1NR": "King's Indian Defense: Averbakh Variation, Benoni Defense, Advance Variation",
+ "rnbq1rk1/pp2ppbp/3p1np1/2P3B1/2P1P3/2N5/PP2BPPP/R2QK1NR": "King's Indian Defense: Averbakh Variation, Benoni Defense, Exchange Variation",
+ "rnbq1rk1/pp3pbp/3ppnp1/2pP2B1/2P1P3/2N5/PP2BPPP/R2QK1NR": "King's Indian Defense: Averbakh Variation, Main Line",
+ "rnbqk2r/ppp1ppbp/3p1np1/8/2PPPP2/2N5/PP4PP/R1BQKBNR": "King's Indian Defense: Four Pawns Attack",
+ "rnbq1rk1/pp2ppbp/3p1np1/2pP4/2P1PP2/2N2N2/PP4PP/R1BQKB1R": "King's Indian Defense: Four Pawns Attack, Dynamic Attack",
+ "r1bqk2r/ppp1ppbp/n2p1np1/8/2PPPP2/2N5/PP4PP/R1BQKBNR": "King's Indian Defense: Four Pawns Attack, Modern Defense",
+ "rnbq1rk1/ppp1ppbp/3p1np1/8/2PPPP2/2N5/PP2B1PP/R1BQK1NR": "King's Indian Defense: Four Pawns Attack",
+ "rnbq1rk1/pp3pbp/3p1np1/2ppP3/2P2P2/2N2N2/PP2B1PP/R1BQK2R": "King's Indian Defense: Four Pawns Attack, Florentine Gambit",
+ "rnbq1rk1/pp3pbp/3ppnp1/2pP4/2P1PP2/2N2N2/PP2B1PP/R1BQK2R": "King's Indian Defense: Four Pawns Attack, Normal Attack",
+ "r1bq1rk1/pp4bp/2nppnp1/2p5/2P1PPPP/2N5/PP2B3/R1BQK1NR": "King's Indian Defense: Six Pawns Attack",
+ "rnbq1rk1/pp2ppbp/3p1np1/2p5/2PPPP2/2N2N2/PP2B1PP/R1BQK2R": "King's Indian Defense: Four Pawns Attack, Fluid Attack",
+ "r1bq1rk1/pp2ppbp/2np1np1/8/2PNPP2/2N1B3/PP2B1PP/R2QK2R": "King's Indian Defense: Four Pawns Attack, Exchange Variation",
+ "rnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N2P2/PP4PP/R1BQKBNR": "King's Indian Defense: Sämisch Variation",
+ "rnbq1rk1/ppp1ppbp/3p1np1/6B1/2PPP3/2N2P2/PP4PP/R2QKBNR": "King's Indian Defense: Steiner Attack",
+ "rnbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N2P2/PP2N1PP/R1BQKB1R": "King's Indian Defense: Sämisch Variation, Bobotsov-Korchnoi-Petrosian Variation",
+ "rnbq1rk1/1p2ppbp/p1pp1np1/8/2PPP3/2NBBP2/PP4PP/R2QK1NR": "King's Indian Defense: Sämisch Variation, Byrne Defense",
+ "rnbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N2P2/PP4PP/R1BQKBNR": "King's Indian Defense: Sämisch Variation, Normal Defense",
+ "rnbq1rk1/pp2ppbp/3p1np1/2p5/2PPP3/2N1BP2/PP4PP/R2QKBNR": "King's Indian Defense: Sämisch Variation, Sämisch Gambit",
+ "rnbq1rk1/p1p1ppbp/1p1p1np1/8/2PPP3/2N1BP2/PP4PP/R2QKBNR": "King's Indian Defense: Sämisch Variation, Double Fianchetto",
+ "r1bq1rk1/1pp1ppbp/p1np1np1/8/2PPP3/2N1BP2/PP2N1PP/R2QKB1R": "King's Indian Defense: Sämisch Variation, Panno Formation",
+ "1rbq1rk1/ppp1ppbp/2np1np1/8/2PPP3/2N1BP2/PP2N1PP/R2QKB1R": "King's Indian Defense: Sämisch Variation, Ruban Variation",
+ "r1bq1rk1/ppp1ppbp/2np1np1/8/2PPP3/2N1BP2/PP4PP/R2QKBNR": "King's Indian Defense: Sämisch Variation, Yates Defense",
+ "1rbq1rk1/1pp1ppbp/p1np1np1/8/2PPP3/2N1BP2/PP1QN1PP/R3KB1R": "King's Indian Defense: Sämisch Variation, Panno Main Line",
+ "rnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N1BP2/PP4PP/R2QKBNR": "King's Indian Defense: Sämisch Variation, Orthodox Variation",
+ "rnbq1rk1/pp3pbp/2pp1np1/4p3/2PPP3/2N1BP2/PP2N1PP/R2QKB1R": "King's Indian Defense: Sämisch Variation",
+ "rnb2rk1/ppp2pbp/3p2p1/3Pp3/2P1P2Q/2N1nP2/PP2K2P/R5NR": "King's Indian Defense: Sämisch Variation, Bronstein Defense",
+ "rnbq1rk1/ppp2pbp/3p1np1/3Pp3/2P1P3/2N1BP2/PP4PP/R2QKBNR": "King's Indian Defense: Sämisch Variation, Closed Variation",
+ "rnb2rk1/ppp2pbp/3p2p1/3Pp3/2n1P2Q/2N2P2/PP2K2P/R5NR": "King's Indian Defense: Sämisch Variation, Orthodox Variation, Bronstein Variation",
+ "rnbq1rk1/pp3pbp/3p1np1/3pp3/2P1P3/2N1BP2/PP2N1PP/R2QKB1R": "King's Indian Defense: Sämisch Variation, Closed Variation, Main Line",
+ "rnbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N1BN2/PP3PPP/R2QKB1R": "King's Indian Defense: Larsen Variation",
+ "rnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N2N2/PP3PPP/R1BQKB1R": "King's Indian Defense: Normal Variation, Rare Defenses",
+ "rnbq1rk1/ppp1ppbp/3p1np1/6B1/2PPP3/2N2N2/PP3PPP/R2QKB1R": "King's Indian Defense: Zinnowitz Variation",
+ "r1bq1rk1/ppp1ppbp/n2p1np1/8/2PPP3/2N2N2/PP2BPPP/R1BQK2R": "King's Indian Defense: Kazakh Variation",
+ "rnbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N2N2/PP2BPPP/R1BQK2R": "King's Indian Defense: Orthodox Variation",
+ "rnbq1rk1/ppp2pbp/3p1np1/4P3/2P1P3/2N2N2/PP2BPPP/R1BQK2R": "King's Indian Defense: Exchange Variation",
+ "rnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQK2R": "King's Indian Defense: Orthodox Variation",
+ "rnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N1BN2/PP2BPPP/R2QK2R": "King's Indian Defense: Orthodox Variation, Gligoric-Taimanov System",
+ "rnbq1rk1/ppp2pbp/3p1np1/3Pp3/2P1P3/2N2N2/PP2BPPP/R1BQK2R": "King's Indian Defense: Petrosian Variation",
+ "rnbq1rk1/1pp2pbp/3p1np1/p2Pp3/2P1P3/2N2N2/PP2BPPP/R1BQK2R": "King's Indian Defense: Petrosian Variation, Stein Defense",
+ "r1bq1rk1/pppn1pb1/3p3p/3Pp1pn/2P1P2P/2N2NB1/PP2BPP1/R2QK2R": "King's Indian Defense: Petrosian Variation, Keres Defense",
+ "r1bq1rk1/pppn1pbp/3p1np1/3Pp3/2P1P3/2N2N2/PP2BPPP/R1BQK2R": "King's Indian Defense: Petrosian Variation, Normal Defense",
+ "rnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQ1RK1": "King's Indian Defense: Orthodox Variation",
+ "rnbq1rk1/pp3pbp/2pp1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQ1RK1": "King's Indian Defense: Orthodox Variation, Donner Defense",
+ "r1bq1rk1/ppp2pbp/n2p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQ1RK1": "King's Indian Defense: Orthodox Variation, Glek Defense",
+ "r1bq1rk1/pppn1pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQ1RK1": "King's Indian Defense: Orthodox Variation, Positional Defense",
+ "r1bq1rk1/pppn1pbp/3p1np1/3Pp3/2P1P3/2N2N2/PP2BPPP/R1BQ1RK1": "King's Indian Defense: Orthodox Variation, Positional Defense, Closed Line",
+ "rnbq1rk1/1pp2pbp/3p1np1/p3p3/2PPP3/2N2N2/PP2BPPP/R1BQ1RK1": "King's Indian Defense: Orthodox Variation, Ukrainian Defense",
+ "r1bq1rk1/pppn1pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQR1K1": "King's Indian Defense: Orthodox Variation",
+ "r1bq1rk1/1p1n1pbp/2pp1np1/p3p3/2PPP3/2N2N2/PP3PPP/R1BQRBK1": "King's Indian Defense: Orthodox Variation, Positional Defense, Main Line",
+ "r1bq1rk1/ppp2pbp/2np1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQ1RK1": "King's Indian Defense: Orthodox Variation, Aronin-Taimanov Defense",
+ "r1bq1rk1/ppp1npbp/3p1np1/3Pp3/1PP1P3/2N2N2/P3BPPP/R1BQ1RK1": "King's Indian Defense: Orthodox Variation, Bayonet Attack",
+ "r1bq1rk1/ppp1npbp/3p2p1/3Pp2n/1PP1P3/2N2N2/P3BPPP/R1BQR1K1": "King's Indian Defense: Orthodox Variation, Bayonet Attack, Sokolov's Line",
+ "r1bq1rk1/ppp1npbp/3p2p1/3Pp2n/1PP1P3/2N2N2/P1Q1BPPP/R1B2RK1": "King's Indian Defense: Orthodox Variation, Bayonet Attack, Yepishin's Line",
+ "r1bq1rk1/ppp1npbp/3p1np1/3Pp3/2P1P3/2N2N2/PP1BBPPP/R2Q1RK1": "King's Indian Defense: Orthodox Variation, Korchnoi Attack",
+ "r1bq1rk1/ppp1npbp/3p1np1/3Pp3/2P1P3/2N5/PP1NBPPP/R1BQ1RK1": "King's Indian Defense: Orthodox Variation, Modern System",
+ "r1bq1rk1/ppp1npbp/3p1np1/3Pp3/2P1P3/2N5/PP2BPPP/R1BQNRK1": "King's Indian Defense: Orthodox Variation, Classical System",
+ "r1bq1rk1/pppn2bp/3p2n1/2PPp1p1/4Pp2/2N2P2/PP2BBPP/2RQNRK1": "King's Indian Defense: Orthodox Variation, Classical System, Kozul Gambit",
+ "r1bq1rk1/pppnnpbp/3p2p1/3Pp3/2P1P3/2N1B3/PP2BPPP/R2QNRK1": "King's Indian Defense: Orthodox Variation, Classical System, Neo-Classical Line",
+ "r1bq1rk1/pppnn1bp/3p2p1/3Ppp2/2P1P1P1/2N2P2/PP2B2P/R1BQNRK1": "King's Indian Defense: Orthodox Variation, Classical System, Benko Attack",
+ "r1bq1rk1/pppnn1bp/3p2p1/3Ppp2/2P1P3/2N2P2/PP2B1PP/R1BQNRK1": "King's Indian Defense: Orthodox Variation, Classical System, Traditional Line"
+}
\ No newline at end of file
diff --git a/output.nnue b/output.nnue
new file mode 100644
index 0000000000000000000000000000000000000000..b129b162badfc40a9dea383dc911b64a9df25b41
--- /dev/null
+++ b/output.nnue
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a91f3d2cd46fcac0c95fcc06c34435b2d57682ed7a25b0eb280117219da8d636
+size 6480707
diff --git a/small_output.nnue b/small_output.nnue
new file mode 100644
index 0000000000000000000000000000000000000000..c483505c9ea314b6ab414e41bf91823d7347c96c
--- /dev/null
+++ b/small_output.nnue
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d6e84f3019891b33db86da21922f79dce91eabb9918f96c10a60633bf37f30fa
+size 3508587
diff --git a/src/Makefile b/src/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..4eb64ffef42045c2050fbbd616ab6ef185f1a6e1
--- /dev/null
+++ b/src/Makefile
@@ -0,0 +1,1184 @@
+# Stockfish, a UCI chess playing engine derived from Glaurung 2.1
+# Copyright (C) 2004-2026 The Stockfish developers (see AUTHORS file)
+#
+# Stockfish is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Stockfish is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+
+### ==========================================================================
+### Section 1. General Configuration
+### ==========================================================================
+
+### Establish the operating system name
+KERNEL := $(shell uname -s)
+ifeq ($(KERNEL),Linux)
+ OS := $(shell uname -o)
+endif
+
+### Command prefix to run the built executable (e.g. wine, sde, qemu)
+### Backward compatible alias: WINE_PATH (deprecated)
+ifneq ($(strip $(WINE_PATH)),)
+ifeq ($(strip $(RUN_PREFIX)),)
+RUN_PREFIX := $(WINE_PATH)
+endif
+ifeq ($(MAKELEVEL),0)
+ifneq ($(strip $(RUN_PREFIX)),$(strip $(WINE_PATH)))
+$(warning *** Both RUN_PREFIX and WINE_PATH are set; ignoring WINE_PATH. ***)
+else
+$(warning *** WINE_PATH is deprecated; use RUN_PREFIX instead. ***)
+endif
+endif
+endif
+
+### Target Windows OS
+ifeq ($(OS),Windows_NT)
+ ifneq ($(COMP),ndk)
+ target_windows = yes
+ endif
+else ifeq ($(COMP),mingw)
+ target_windows = yes
+ ifeq ($(RUN_PREFIX),)
+ RUN_PREFIX := $(shell which wine)
+ endif
+endif
+
+### Executable name
+ifeq ($(target_windows),yes)
+ EXE = stockfish.exe
+else
+ EXE = stockfish
+endif
+
+### Installation dir definitions
+PREFIX = /usr/local
+BINDIR = $(PREFIX)/bin
+
+### Built-in benchmark for pgo-builds
+PGOBENCH = $(RUN_PREFIX) ./$(EXE) bench
+
+### Source and object files
+SRCS = benchmark.cpp bitboard.cpp evaluate.cpp main.cpp \
+ misc.cpp movegen.cpp movepick.cpp position.cpp \
+ search.cpp thread.cpp timeman.cpp tt.cpp uci.cpp ucioption.cpp tune.cpp syzygy/tbprobe.cpp \
+ nnue/nnue_accumulator.cpp nnue/nnue_misc.cpp nnue/network.cpp \
+ nnue/features/half_ka_v2_hm.cpp nnue/features/full_threats.cpp \
+ engine.cpp score.cpp memory.cpp
+
+HEADERS = benchmark.h bitboard.h evaluate.h misc.h movegen.h movepick.h history.h \
+ nnue/nnue_misc.h nnue/features/half_ka_v2_hm.h nnue/features/full_threats.h \
+ nnue/layers/affine_transform.h nnue/layers/affine_transform_sparse_input.h \
+ nnue/layers/clipped_relu.h nnue/layers/sqr_clipped_relu.h nnue/nnue_accumulator.h \
+ nnue/nnue_architecture.h nnue/nnue_common.h nnue/nnue_feature_transformer.h nnue/simd.h \
+ position.h search.h syzygy/tbprobe.h thread.h thread_win32_osx.h timeman.h \
+ tt.h tune.h types.h uci.h ucioption.h perft.h nnue/network.h engine.h score.h numa.h memory.h shm.h shm_linux.h
+
+OBJS = $(notdir $(SRCS:.cpp=.o))
+
+VPATH = syzygy:nnue:nnue/features
+
+### ==========================================================================
+### Section 2. High-level Configuration
+### ==========================================================================
+#
+# flag --- Comp switch --- Description
+# ----------------------------------------------------------------------------
+#
+# debug = yes/no --- -DNDEBUG --- Enable/Disable debug mode
+# sanitize = none/ ... (-fsanitize )
+# --- ( undefined ) --- enable undefined behavior checks
+# --- ( thread ) --- enable threading error checks
+# --- ( address ) --- enable memory access checks
+# --- ...etc... --- see compiler documentation for supported sanitizers
+# optimize = yes/no --- (-O3/-fast etc.) --- Enable/Disable optimizations
+# arch = (name) --- (-arch) --- Target architecture
+# bits = 64/32 --- -DIS_64BIT --- 64-/32-bit operating system
+# prefetch = yes/no --- -DUSE_PREFETCH --- Use prefetch asm-instruction
+# popcnt = yes/no --- -DUSE_POPCNT --- Use popcnt asm-instruction
+# pext = yes/no --- -DUSE_PEXT --- Use pext x86_64 asm-instruction
+# sse = yes/no --- -msse --- Use Intel Streaming SIMD Extensions
+# mmx = yes/no --- -mmmx --- Use Intel MMX instructions
+# sse2 = yes/no --- -msse2 --- Use Intel Streaming SIMD Extensions 2
+# ssse3 = yes/no --- -mssse3 --- Use Intel Supplemental Streaming SIMD Extensions 3
+# sse41 = yes/no --- -msse4.1 --- Use Intel Streaming SIMD Extensions 4.1
+# avx2 = yes/no --- -mavx2 --- Use Intel Advanced Vector Extensions 2
+# avxvnni = yes/no --- -mavxvnni --- Use Intel Vector Neural Network Instructions AVX
+# avx512 = yes/no --- -mavx512bw --- Use Intel Advanced Vector Extensions 512
+# vnni512 = yes/no --- -mavx512vnni --- Use Intel Vector Neural Network Instructions 512
+# avx512icl = yes/no --- ... multiple ... --- Use All AVX-512 features available on both Intel Ice Lake and AMD Zen 4
+# altivec = yes/no --- -maltivec --- Use PowerPC Altivec SIMD extension
+# vsx = yes/no --- -mvsx --- Use POWER VSX SIMD extension
+# neon = yes/no --- -DUSE_NEON --- Use ARM SIMD architecture
+# dotprod = yes/no --- -DUSE_NEON_DOTPROD --- Use ARM advanced SIMD Int8 dot product instructions
+# lsx = yes/no --- -mlsx --- Use Loongson SIMD eXtension
+# lasx = yes/no --- -mlasx --- use Loongson Advanced SIMD eXtension
+#
+# Note that Makefile is space sensitive, so when adding new architectures
+# or modifying existing flags, you have to make sure there are no extra spaces
+# at the end of the line for flag values.
+#
+# Example of use for these flags:
+# make build ARCH=x86-64-avx512 debug=yes sanitize="address undefined"
+
+
+### 2.1. General and architecture defaults
+
+ifeq ($(ARCH),)
+ ARCH = native
+endif
+
+ifeq ($(ARCH), native)
+ override ARCH := $(shell $(SHELL) ../scripts/get_native_properties.sh | cut -d " " -f 1)
+endif
+
+# explicitly check for the list of supported architectures (as listed with make help),
+# the user can override with `make ARCH=x86-64-avx512icl SUPPORTED_ARCH=true`
+ifeq ($(ARCH), $(filter $(ARCH), \
+ x86-64-avx512icl x86-64-vnni512 x86-64-avx512 x86-64-avxvnni \
+ x86-64-bmi2 x86-64-avx2 x86-64-sse41-popcnt x86-64-modern x86-64-ssse3 x86-64-sse3-popcnt \
+ x86-64 x86-32-sse41-popcnt x86-32-sse2 x86-32 ppc-64 ppc-64-altivec ppc-64-vsx ppc-32 e2k \
+ armv7 armv7-neon armv8 armv8-dotprod apple-silicon general-64 general-32 riscv64 \
+ loongarch64 loongarch64-lsx loongarch64-lasx))
+ SUPPORTED_ARCH=true
+else
+ SUPPORTED_ARCH=false
+endif
+
+optimize = yes
+debug = no
+sanitize = none
+bits = 64
+prefetch = no
+popcnt = no
+pext = no
+sse = no
+mmx = no
+sse2 = no
+ssse3 = no
+sse41 = no
+avx2 = no
+avxvnni = no
+avx512 = no
+vnni512 = no
+avx512icl = no
+altivec = no
+vsx = no
+neon = no
+dotprod = no
+arm_version = 0
+lsx = no
+lasx = no
+STRIP = strip
+
+ifneq ($(shell which clang-format-20 2> /dev/null),)
+ CLANG-FORMAT = clang-format-20
+else
+ CLANG-FORMAT = clang-format
+endif
+
+### 2.2 Architecture specific
+
+ifeq ($(findstring x86,$(ARCH)),x86)
+
+# x86-32/64
+
+ifeq ($(findstring x86-32,$(ARCH)),x86-32)
+ arch = i386
+ bits = 32
+ sse = no
+ mmx = yes
+else
+ arch = x86_64
+ sse = yes
+ sse2 = yes
+endif
+
+ifeq ($(findstring -sse,$(ARCH)),-sse)
+ sse = yes
+endif
+
+ifeq ($(findstring -popcnt,$(ARCH)),-popcnt)
+ popcnt = yes
+endif
+
+ifeq ($(findstring -mmx,$(ARCH)),-mmx)
+ mmx = yes
+endif
+
+ifeq ($(findstring -sse2,$(ARCH)),-sse2)
+ sse = yes
+ sse2 = yes
+endif
+
+ifeq ($(findstring -ssse3,$(ARCH)),-ssse3)
+ sse = yes
+ sse2 = yes
+ ssse3 = yes
+endif
+
+ifeq ($(findstring -sse41,$(ARCH)),-sse41)
+ sse = yes
+ sse2 = yes
+ ssse3 = yes
+ sse41 = yes
+endif
+
+ifeq ($(findstring -modern,$(ARCH)),-modern)
+ $(warning *** ARCH=$(ARCH) is deprecated, defaulting to ARCH=x86-64-sse41-popcnt. Execute `make help` for a list of available architectures. ***)
+ $(shell sleep 5)
+ popcnt = yes
+ sse = yes
+ sse2 = yes
+ ssse3 = yes
+ sse41 = yes
+endif
+
+ifeq ($(findstring -avx2,$(ARCH)),-avx2)
+ popcnt = yes
+ sse = yes
+ sse2 = yes
+ ssse3 = yes
+ sse41 = yes
+ avx2 = yes
+endif
+
+ifeq ($(findstring -avxvnni,$(ARCH)),-avxvnni)
+ popcnt = yes
+ sse = yes
+ sse2 = yes
+ ssse3 = yes
+ sse41 = yes
+ avx2 = yes
+ avxvnni = yes
+ pext = yes
+endif
+
+ifeq ($(findstring -bmi2,$(ARCH)),-bmi2)
+ popcnt = yes
+ sse = yes
+ sse2 = yes
+ ssse3 = yes
+ sse41 = yes
+ avx2 = yes
+ pext = yes
+endif
+
+ifeq ($(findstring -avx512,$(ARCH)),-avx512)
+ popcnt = yes
+ sse = yes
+ sse2 = yes
+ ssse3 = yes
+ sse41 = yes
+ avx2 = yes
+ pext = yes
+ avx512 = yes
+endif
+
+ifeq ($(findstring -vnni512,$(ARCH)),-vnni512)
+ popcnt = yes
+ sse = yes
+ sse2 = yes
+ ssse3 = yes
+ sse41 = yes
+ avx2 = yes
+ pext = yes
+ avx512 = yes
+ vnni512 = yes
+endif
+
+ifeq ($(findstring -avx512icl,$(ARCH)),-avx512icl)
+ popcnt = yes
+ sse = yes
+ sse2 = yes
+ ssse3 = yes
+ sse41 = yes
+ avx2 = yes
+ pext = yes
+ avx512 = yes
+ vnni512 = yes
+ avx512icl = yes
+endif
+
+ifeq ($(sse),yes)
+ prefetch = yes
+endif
+
+# 64-bit pext is not available on x86-32
+ifeq ($(bits),32)
+ pext = no
+endif
+
+else
+
+# all other architectures
+
+ifeq ($(ARCH),general-32)
+ arch = any
+ bits = 32
+endif
+
+ifeq ($(ARCH),general-64)
+ arch = any
+endif
+
+ifeq ($(ARCH),armv7)
+ arch = armv7
+ prefetch = yes
+ bits = 32
+ arm_version = 7
+endif
+
+ifeq ($(ARCH),armv7-neon)
+ arch = armv7
+ prefetch = yes
+ popcnt = yes
+ neon = yes
+ bits = 32
+ arm_version = 7
+endif
+
+ifeq ($(ARCH),armv8)
+ arch = armv8
+ prefetch = yes
+ popcnt = yes
+ neon = yes
+ arm_version = 8
+endif
+
+ifeq ($(ARCH),armv8-dotprod)
+ arch = armv8
+ prefetch = yes
+ popcnt = yes
+ neon = yes
+ dotprod = yes
+ arm_version = 8
+endif
+
+ifeq ($(ARCH),apple-silicon)
+ arch = arm64
+ prefetch = yes
+ popcnt = yes
+ neon = yes
+ dotprod = yes
+ arm_version = 8
+endif
+
+ifeq ($(ARCH),ppc-32)
+ arch = ppc
+ bits = 32
+endif
+
+ifeq ($(ARCH),ppc-64)
+ arch = ppc64
+ popcnt = yes
+ prefetch = yes
+endif
+
+ifeq ($(ARCH),ppc-64-altivec)
+ arch = ppc64
+ popcnt = yes
+ prefetch = yes
+ altivec = yes
+endif
+
+ifeq ($(ARCH),ppc-64-vsx)
+ arch = ppc64
+ popcnt = yes
+ prefetch = yes
+ vsx = yes
+endif
+
+ifeq ($(findstring e2k,$(ARCH)),e2k)
+ arch = e2k
+ mmx = yes
+ bits = 64
+ sse = yes
+ sse2 = yes
+ ssse3 = yes
+ sse41 = yes
+ popcnt = yes
+endif
+
+ifeq ($(ARCH),riscv64)
+ arch = riscv64
+endif
+
+ifeq ($(findstring loongarch64,$(ARCH)),loongarch64)
+ arch = loongarch64
+ prefetch = yes
+
+ifeq ($(findstring -lasx,$(ARCH)),-lasx)
+ lsx = yes
+ lasx = yes
+endif
+
+ifeq ($(findstring -lsx,$(ARCH)),-lsx)
+ lsx = yes
+endif
+
+endif
+endif
+
+
+### ==========================================================================
+### Section 3. Low-level Configuration
+### ==========================================================================
+
+### 3.1 Selecting compiler (default = gcc)
+ifeq ($(MAKELEVEL),0)
+ export ENV_CXXFLAGS := $(CXXFLAGS)
+ export ENV_DEPENDFLAGS := $(DEPENDFLAGS)
+ export ENV_LDFLAGS := $(LDFLAGS)
+endif
+
+CXXFLAGS = $(ENV_CXXFLAGS) -Wall -Wcast-qual -fno-exceptions -std=c++17 $(EXTRACXXFLAGS)
+DEPENDFLAGS = $(ENV_DEPENDFLAGS) -std=c++17
+LDFLAGS = $(ENV_LDFLAGS) $(EXTRALDFLAGS)
+
+ifeq ($(COMP),)
+ COMP=gcc
+endif
+
+ifeq ($(COMP),gcc)
+ comp=gcc
+ CXX=g++
+ CXXFLAGS += -pedantic -Wextra -Wshadow -Wmissing-declarations
+
+ ifeq ($(arch),$(filter $(arch),armv7 armv8 riscv64))
+ ifeq ($(OS),Android)
+ CXXFLAGS += -m$(bits)
+ LDFLAGS += -m$(bits)
+ endif
+ ifeq ($(ARCH),riscv64)
+ CXXFLAGS += -latomic
+ endif
+ else ifeq ($(arch),loongarch64)
+ CXXFLAGS += -latomic
+ else
+ CXXFLAGS += -m$(bits)
+ LDFLAGS += -m$(bits)
+ endif
+
+ ifeq ($(arch),$(filter $(arch),armv7))
+ LDFLAGS += -latomic
+ endif
+
+ ifneq ($(KERNEL),Darwin)
+ LDFLAGS += -Wl,--no-as-needed
+ endif
+endif
+
+ifeq ($(target_windows),yes)
+ LDFLAGS += -static
+endif
+
+ifeq ($(COMP),mingw)
+ comp=mingw
+
+ ifeq ($(bits),64)
+ ifeq ($(shell which x86_64-w64-mingw32-c++-posix 2> /dev/null),)
+ CXX=x86_64-w64-mingw32-c++
+ else
+ CXX=x86_64-w64-mingw32-c++-posix
+ endif
+ else
+ ifeq ($(shell which i686-w64-mingw32-c++-posix 2> /dev/null),)
+ CXX=i686-w64-mingw32-c++
+ else
+ CXX=i686-w64-mingw32-c++-posix
+ endif
+ endif
+ CXXFLAGS += -pedantic -Wextra -Wshadow -Wmissing-declarations
+endif
+
+ifeq ($(COMP),icx)
+ comp=icx
+ CXX=icpx
+ CXXFLAGS += --intel -pedantic -Wextra -Wshadow -Wmissing-prototypes \
+ -Wconditional-uninitialized -Wabi -Wdeprecated
+endif
+
+ifeq ($(COMP),clang)
+ comp=clang
+ CXX=clang++
+ ifeq ($(target_windows),yes)
+ CXX=x86_64-w64-mingw32-clang++
+ endif
+
+ CXXFLAGS += -pedantic -Wextra -Wshadow -Wmissing-prototypes \
+ -Wconditional-uninitialized -flax-vector-conversions=none
+
+ ifeq ($(filter $(KERNEL),Darwin OpenBSD FreeBSD),)
+ ifeq ($(target_windows),)
+ ifneq ($(RTLIB),compiler-rt)
+ LDFLAGS += -latomic
+ endif
+ endif
+ endif
+
+ ifeq ($(arch),$(filter $(arch),armv7 armv8 riscv64))
+ ifeq ($(OS),Android)
+ CXXFLAGS += -m$(bits)
+ LDFLAGS += -m$(bits)
+ endif
+ ifeq ($(ARCH),riscv64)
+ CXXFLAGS += -latomic
+ endif
+ else ifeq ($(arch),loongarch64)
+ CXXFLAGS += -latomic
+ else
+ CXXFLAGS += -m$(bits)
+ LDFLAGS += -m$(bits)
+ endif
+endif
+
+ifeq ($(KERNEL),Darwin)
+ CXXFLAGS += -mmacosx-version-min=10.15
+ LDFLAGS += -mmacosx-version-min=10.15
+ ifneq ($(arch),any)
+ CXXFLAGS += -arch $(arch)
+ LDFLAGS += -arch $(arch)
+ endif
+ XCRUN = xcrun
+endif
+
+# To cross-compile for Android, use NDK version r27c or later.
+ifeq ($(COMP),ndk)
+ CXXFLAGS += -stdlib=libc++
+ comp=clang
+ ifeq ($(arch),armv7)
+ CXX=armv7a-linux-androideabi29-clang++
+ CXXFLAGS += -mthumb -march=armv7-a -mfloat-abi=softfp -mfpu=neon
+ ifneq ($(shell which arm-linux-androideabi-strip 2>/dev/null),)
+ STRIP=arm-linux-androideabi-strip
+ else
+ STRIP=llvm-strip
+ endif
+ endif
+ ifeq ($(arch),armv8)
+ CXX=aarch64-linux-android29-clang++
+ ifneq ($(shell which aarch64-linux-android-strip 2>/dev/null),)
+ STRIP=aarch64-linux-android-strip
+ else
+ STRIP=llvm-strip
+ endif
+ endif
+ ifeq ($(arch),x86_64)
+ CXX=x86_64-linux-android29-clang++
+ ifneq ($(shell which x86_64-linux-android-strip 2>/dev/null),)
+ STRIP=x86_64-linux-android-strip
+ else
+ STRIP=llvm-strip
+ endif
+ endif
+ LDFLAGS += -static-libstdc++
+endif
+
+### Allow overwriting CXX from command line
+ifdef COMPCXX
+ CXX=$(COMPCXX)
+endif
+
+# llvm-profdata must be version compatible with the specified CXX (be it clang, or the gcc alias)
+# make -j profile-build CXX=clang++-20 COMP=clang
+# Locate the version in the same directory as the compiler used,
+# with fallback to a generic one if it can't be located
+ LLVM_PROFDATA := $(dir $(realpath $(shell which $(CXX) 2> /dev/null)))llvm-profdata
+# for icx
+ifeq ($(wildcard $(LLVM_PROFDATA)),)
+ LLVM_PROFDATA := $(dir $(realpath $(shell which $(CXX) 2> /dev/null)))/compiler/llvm-profdata
+endif
+ifeq ($(wildcard $(LLVM_PROFDATA)),)
+ LLVM_PROFDATA := llvm-profdata
+endif
+
+ifeq ($(comp),icx)
+ profile_make = icx-profile-make
+ profile_use = icx-profile-use
+else ifeq ($(comp),clang)
+ profile_make = clang-profile-make
+ profile_use = clang-profile-use
+else
+ profile_make = gcc-profile-make
+ profile_use = gcc-profile-use
+ ifeq ($(KERNEL),Darwin)
+ EXTRAPROFILEFLAGS = -fvisibility=hidden
+ endif
+endif
+
+### Sometimes gcc is really clang
+ifeq ($(COMP),gcc)
+ gccversion := $(shell $(CXX) --version 2>/dev/null)
+ gccisclang := $(findstring clang,$(gccversion))
+ ifneq ($(gccisclang),)
+ profile_make = clang-profile-make
+ profile_use = clang-profile-use
+ else
+ CXXFLAGS += -Wstack-usage=128000
+ endif
+endif
+
+### On mingw use Windows threads, otherwise POSIX
+ifneq ($(comp),mingw)
+ CXXFLAGS += -DUSE_PTHREADS
+ # On Android Bionic's C library comes with its own pthread implementation bundled in
+ ifneq ($(OS),Android)
+ # Haiku has pthreads in its libroot, so only link it in on other platforms
+ ifneq ($(KERNEL),Haiku)
+ ifneq ($(COMP),ndk)
+ LDFLAGS += -lpthread
+
+ add_lrt = yes
+ ifeq ($(target_windows),yes)
+ add_lrt = no
+ endif
+
+ ifeq ($(KERNEL),Darwin)
+ add_lrt = no
+ endif
+
+ ifeq ($(add_lrt),yes)
+ LDFLAGS += -lrt
+ endif
+ endif
+ endif
+ endif
+endif
+
+### 3.2.1 Debugging
+ifeq ($(debug),no)
+ CXXFLAGS += -DNDEBUG
+else
+ CXXFLAGS += -g
+ CXXFLAGS += -D_GLIBCXX_ASSERTIONS -D_GLIBCXX_DEBUG
+endif
+
+### 3.2.2 Debugging with undefined behavior sanitizers
+ifneq ($(sanitize),none)
+ CXXFLAGS += -g3 $(addprefix -fsanitize=,$(sanitize))
+ LDFLAGS += $(addprefix -fsanitize=,$(sanitize))
+endif
+
+### 3.3 Optimization
+ifeq ($(optimize),yes)
+
+ CXXFLAGS += -O3 -funroll-loops
+
+ ifeq ($(comp),gcc)
+ ifeq ($(OS), Android)
+ CXXFLAGS += -fno-gcse -mthumb -march=armv7-a -mfloat-abi=softfp
+ endif
+ endif
+
+ ifeq ($(KERNEL),Darwin)
+ ifeq ($(comp),$(filter $(comp),clang icx))
+ CXXFLAGS += -mdynamic-no-pic
+ endif
+
+ ifeq ($(comp),gcc)
+ ifneq ($(arch),arm64)
+ CXXFLAGS += -mdynamic-no-pic
+ endif
+ endif
+ endif
+
+ ifeq ($(comp),clang)
+ clangmajorversion := $(shell $(CXX) -dumpversion 2>/dev/null | cut -f1 -d.)
+ ifeq ($(shell expr $(clangmajorversion) \< 16),1)
+ CXXFLAGS += -fexperimental-new-pass-manager
+ endif
+ endif
+endif
+
+### 3.4 Bits
+ifeq ($(bits),64)
+ CXXFLAGS += -DIS_64BIT
+endif
+
+### 3.5 prefetch and popcount
+ifeq ($(prefetch),yes)
+ ifeq ($(sse),yes)
+ CXXFLAGS += -msse
+ endif
+else
+ CXXFLAGS += -DNO_PREFETCH
+endif
+
+ifeq ($(popcnt),yes)
+ ifeq ($(arch),$(filter $(arch),ppc64 ppc64-altivec ppc64-vsx armv7 armv8 arm64))
+ CXXFLAGS += -DUSE_POPCNT
+ else
+ CXXFLAGS += -msse3 -mpopcnt -DUSE_POPCNT
+ endif
+endif
+
+### 3.6 SIMD architectures
+ifeq ($(avx2),yes)
+ CXXFLAGS += -DUSE_AVX2
+ ifeq ($(comp),$(filter $(comp),gcc clang mingw icx))
+ CXXFLAGS += -mavx2 -mbmi
+ endif
+endif
+
+ifeq ($(avxvnni),yes)
+ CXXFLAGS += -DUSE_VNNI -DUSE_AVXVNNI
+ ifeq ($(comp),$(filter $(comp),gcc clang mingw icx))
+ CXXFLAGS += -mavxvnni
+ endif
+endif
+
+ifeq ($(avx512),yes)
+ CXXFLAGS += -DUSE_AVX512
+ ifeq ($(comp),$(filter $(comp),gcc clang mingw icx))
+ CXXFLAGS += -mavx512f -mavx512bw -mavx512dq -mavx512vl
+ endif
+endif
+
+ifeq ($(vnni512),yes)
+ CXXFLAGS += -DUSE_VNNI
+ ifeq ($(comp),$(filter $(comp),gcc clang mingw icx))
+ CXXFLAGS += -mavx512f -mavx512bw -mavx512vnni -mavx512dq -mavx512vl
+ endif
+endif
+
+ifeq ($(avx512icl),yes)
+ CXXFLAGS += -DUSE_AVX512 -DUSE_VNNI -DUSE_AVX512ICL
+ ifeq ($(comp),$(filter $(comp),gcc clang mingw icx))
+ CXXFLAGS += -mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw -mavx512ifma -mavx512vbmi -mavx512vbmi2 -mavx512vpopcntdq -mavx512bitalg -mavx512vnni -mvpclmulqdq -mgfni -mvaes
+ endif
+endif
+
+ifeq ($(sse41),yes)
+ CXXFLAGS += -DUSE_SSE41
+ ifeq ($(comp),$(filter $(comp),gcc clang mingw icx))
+ CXXFLAGS += -msse4.1
+ endif
+endif
+
+ifeq ($(ssse3),yes)
+ CXXFLAGS += -DUSE_SSSE3
+ ifeq ($(comp),$(filter $(comp),gcc clang mingw icx))
+ CXXFLAGS += -mssse3
+ endif
+endif
+
+ifeq ($(sse2),yes)
+ CXXFLAGS += -DUSE_SSE2
+ ifeq ($(comp),$(filter $(comp),gcc clang mingw icx))
+ CXXFLAGS += -msse2
+ endif
+endif
+
+ifeq ($(mmx),yes)
+ ifeq ($(comp),$(filter $(comp),gcc clang mingw icx))
+ CXXFLAGS += -mmmx
+ endif
+endif
+
+ifeq ($(altivec),yes)
+ CXXFLAGS += -maltivec
+ ifeq ($(COMP),gcc)
+ CXXFLAGS += -mabi=altivec
+ endif
+endif
+
+ifeq ($(vsx),yes)
+ CXXFLAGS += -mvsx
+ ifeq ($(COMP),gcc)
+ CXXFLAGS += -DNO_WARN_X86_INTRINSICS -DUSE_SSE2
+ endif
+endif
+
+ifeq ($(neon),yes)
+ CXXFLAGS += -DUSE_NEON=$(arm_version)
+ ifeq ($(KERNEL),Linux)
+ ifneq ($(COMP),ndk)
+ ifneq ($(arch),armv8)
+ CXXFLAGS += -mfpu=neon
+ endif
+ endif
+ endif
+endif
+
+ifeq ($(dotprod),yes)
+ CXXFLAGS += -march=armv8.2-a+dotprod -DUSE_NEON_DOTPROD
+endif
+
+ifeq ($(lasx),yes)
+ ifeq ($(comp),$(filter $(comp),gcc clang mingw icx))
+ CXXFLAGS += -mlasx
+ endif
+endif
+
+ifeq ($(lsx),yes)
+ ifeq ($(comp),$(filter $(comp),gcc clang mingw icx))
+ CXXFLAGS += -mlsx
+ endif
+endif
+
+### 3.7 pext
+ifeq ($(pext),yes)
+ CXXFLAGS += -DUSE_PEXT
+ ifeq ($(comp),$(filter $(comp),gcc clang mingw icx))
+ CXXFLAGS += -mbmi2
+ endif
+endif
+
+### 3.8.1 Try to include git commit sha for versioning
+GIT_SHA := $(shell git rev-parse HEAD 2>/dev/null | cut -c 1-8)
+ifneq ($(GIT_SHA), )
+ CXXFLAGS += -DGIT_SHA=$(GIT_SHA)
+endif
+
+### 3.8.2 Try to include git commit date for versioning
+GIT_DATE := $(shell git show -s --date=format:'%Y%m%d' --format=%cd HEAD 2>/dev/null)
+ifneq ($(GIT_DATE), )
+ CXXFLAGS += -DGIT_DATE=$(GIT_DATE)
+endif
+
+### 3.8.3 Try to include architecture
+ifneq ($(ARCH), )
+ CXXFLAGS += -DARCH=$(ARCH)
+endif
+
+### 3.9 Link Time Optimization
+### This is a mix of compile and link time options because the lto link phase
+### needs access to the optimization flags.
+ifeq ($(optimize),yes)
+ifeq ($(debug),no)
+ ifneq ($(KERNEL),Darwin)
+ LLD_BIN := $(shell command -v ld.lld 2>/dev/null)
+ ifeq ($(LLD_BIN),)
+ LLD_BIN := $(shell command -v lld 2>/dev/null)
+ endif
+ ifneq ($(LLD_BIN),)
+ ifeq ($(comp),clang)
+ LDFLAGS += -fuse-ld=lld
+ else ifeq ($(comp),gcc)
+ ifneq ($(gccisclang),)
+ LDFLAGS += -fuse-ld=lld
+ endif
+ endif
+ endif
+ endif
+
+ ifeq ($(comp),$(filter $(comp),clang icx))
+ CXXFLAGS += -flto=full
+ ifeq ($(comp),icx)
+ CXXFLAGS += -fwhole-program-vtables
+ endif
+ LDFLAGS += $(CXXFLAGS)
+
+# GCC and CLANG use different methods for parallelizing LTO and CLANG pretends to be
+# GCC on some systems.
+ else ifeq ($(comp),gcc)
+ ifeq ($(gccisclang),)
+ CXXFLAGS += -flto -flto-partition=one
+ LDFLAGS += $(CXXFLAGS) -flto=jobserver
+ else
+ CXXFLAGS += -flto=full
+ LDFLAGS += $(CXXFLAGS)
+ endif
+
+# To use LTO and static linking on Windows,
+# the tool chain requires gcc version 10.1 or later.
+ else ifeq ($(comp),mingw)
+ CXXFLAGS += -flto -flto-partition=one
+ LDFLAGS += $(CXXFLAGS) -save-temps
+ endif
+endif
+endif
+
+### 3.10 Android 5 can only run position independent executables. Note that this
+### breaks Android 4.0 and earlier.
+ifeq ($(OS), Android)
+ CXXFLAGS += -fPIE
+ LDFLAGS += -fPIE -pie
+endif
+
+### 3.11 Inline settings
+ifeq ($(optimize), yes)
+ ifeq ($(comp), clang)
+ CXXFLAGS += -Xclang -mllvm -Xclang -inline-threshold=500
+ endif
+endif
+
+### ==========================================================================
+### Section 4. Public Targets
+### ==========================================================================
+
+help:
+ @echo "" && \
+ echo "To compile stockfish, type: " && \
+ echo "" && \
+ echo "make -j target [ARCH=arch] [COMP=compiler] [COMPCXX=cxx]" && \
+ echo "" && \
+ echo "Supported targets:" && \
+ echo "" && \
+ echo "help > Display architecture details" && \
+ echo "profile-build > standard build with profile-guided optimization" && \
+ echo "build > skip profile-guided optimization" && \
+ echo "net > Download the default nnue nets" && \
+ echo "strip > Strip executable" && \
+ echo "install > Install executable" && \
+ echo "clean > Clean up" && \
+ echo "" && \
+ echo "Supported archs:" && \
+ echo "" && \
+ echo "native > select the best architecture for the host processor (default)" && \
+ echo "x86-64-avx512icl > x86 64-bit with minimum avx512 support of Intel Ice Lake or AMD Zen 4" && \
+ echo "x86-64-vnni512 > x86 64-bit with vnni 512bit support" && \
+ echo "x86-64-avx512 > x86 64-bit with avx512 support" && \
+ echo "x86-64-avxvnni > x86 64-bit with vnni 256bit support" && \
+ echo "x86-64-bmi2 > x86 64-bit with bmi2 support" && \
+ echo "x86-64-avx2 > x86 64-bit with avx2 support" && \
+ echo "x86-64-sse41-popcnt > x86 64-bit with sse41 and popcnt support" && \
+ echo "x86-64-modern > deprecated, currently x86-64-sse41-popcnt" && \
+ echo "x86-64-ssse3 > x86 64-bit with ssse3 support" && \
+ echo "x86-64-sse3-popcnt > x86 64-bit with sse3 compile and popcnt support" && \
+ echo "x86-64 > x86 64-bit generic (with sse2 support)" && \
+ echo "x86-32-sse41-popcnt > x86 32-bit with sse41 and popcnt support" && \
+ echo "x86-32-sse2 > x86 32-bit with sse2 support" && \
+ echo "x86-32 > x86 32-bit generic (with mmx compile support)" && \
+ echo "ppc-64 > PPC 64-bit" && \
+ echo "ppc-64-altivec > PPC 64-bit with altivec support" && \
+ echo "ppc-64-vsx > PPC 64-bit with vsx support" && \
+ echo "ppc-32 > PPC 32-bit" && \
+ echo "armv7 > ARMv7 32-bit" && \
+ echo "armv7-neon > ARMv7 32-bit with popcnt and neon" && \
+ echo "armv8 > ARMv8 64-bit with popcnt and neon" && \
+ echo "armv8-dotprod > ARMv8 64-bit with popcnt, neon and dot product support" && \
+ echo "e2k > Elbrus 2000" && \
+ echo "apple-silicon > Apple silicon ARM64" && \
+ echo "general-64 > unspecified 64-bit" && \
+ echo "general-32 > unspecified 32-bit" && \
+ echo "riscv64 > RISC-V 64-bit" && \
+ echo "loongarch64 > LoongArch 64-bit" && \
+ echo "loongarch64-lsx > LoongArch 64-bit with SIMD eXtension" && \
+ echo "loongarch64-lasx > LoongArch 64-bit with Advanced SIMD eXtension" && \
+ echo "" && \
+ echo "Supported compilers:" && \
+ echo "" && \
+ echo "gcc > GNU compiler (default)" && \
+ echo "mingw > GNU compiler with MinGW under Windows" && \
+ echo "clang > LLVM Clang compiler" && \
+ echo "icx > Intel oneAPI DPC++/C++ Compiler" && \
+ echo "ndk > Google NDK to cross-compile for Android" && \
+ echo "" && \
+ echo "Simple examples. If you don't know what to do, you likely want to run one of: " && \
+ echo "" && \
+ echo "make -j profile-build ARCH=x86-64-avx2 # typically a fast compile for common systems " && \
+ echo "make -j profile-build ARCH=x86-64-sse41-popcnt # A more portable compile for 64-bit systems " && \
+ echo "make -j profile-build ARCH=x86-64 # A portable compile for 64-bit systems " && \
+ echo "" && \
+ echo "Advanced examples, for experienced users: " && \
+ echo "" && \
+ echo "make -j profile-build ARCH=x86-64-avxvnni" && \
+ echo "make -j profile-build ARCH=x86-64-avxvnni COMP=gcc COMPCXX=g++-12.0" && \
+ echo "make -j build ARCH=x86-64-ssse3 COMP=clang" && \
+ echo ""
+ifneq ($(SUPPORTED_ARCH), true)
+ @echo "Specify a supported architecture with the ARCH option for more details"
+ @echo ""
+endif
+
+
+.PHONY: help analyze build profile-build strip install clean net \
+ objclean profileclean config-sanity \
+ icx-profile-use icx-profile-make \
+ gcc-profile-use gcc-profile-make \
+ clang-profile-use clang-profile-make FORCE \
+ format analyze
+
+analyze: net config-sanity objclean
+ $(MAKE) -k ARCH=$(ARCH) COMP=$(COMP) $(OBJS)
+
+build: net config-sanity
+ $(MAKE) ARCH=$(ARCH) COMP=$(COMP) all
+
+profile-build: net config-sanity objclean profileclean
+ @echo ""
+ @echo "Step 1/4. Building instrumented executable ..."
+ $(MAKE) ARCH=$(ARCH) COMP=$(COMP) $(profile_make)
+ @echo ""
+ @echo "Step 2/4. Running benchmark for pgo-build ..."
+ $(PGOBENCH) > PGOBENCH.out 2>&1
+ tail -n 4 PGOBENCH.out
+ @echo ""
+ @echo "Step 3/4. Building optimized executable ..."
+ $(MAKE) ARCH=$(ARCH) COMP=$(COMP) objclean
+ $(MAKE) ARCH=$(ARCH) COMP=$(COMP) $(profile_use)
+ @echo ""
+ @echo "Step 4/4. Deleting profile data ..."
+ $(MAKE) ARCH=$(ARCH) COMP=$(COMP) profileclean
+
+strip:
+ $(STRIP) $(EXE)
+
+install:
+ -mkdir -p -m 755 $(BINDIR)
+ -cp $(EXE) $(BINDIR)
+ $(STRIP) $(BINDIR)/$(EXE)
+
+# clean all
+clean: objclean profileclean
+ @rm -f .depend *~ core
+
+# clean binaries and objects
+objclean:
+ @rm -f stockfish stockfish.exe *.o ./syzygy/*.o ./nnue/*.o ./nnue/features/*.o
+
+# clean auxiliary profiling files
+profileclean:
+ @rm -rf profdir
+ @rm -f bench.txt *.gcda *.gcno ./syzygy/*.gcda ./nnue/*.gcda ./nnue/features/*.gcda *.s PGOBENCH.out
+ @rm -f stockfish.profdata *.profraw
+ @rm -f stockfish.*args*
+ @rm -f stockfish.*lt*
+ @rm -f stockfish.res
+ @rm -f ./-lstdc++.res
+
+# evaluation network (nnue)
+net:
+ @$(SHELL) ../scripts/net.sh
+
+format:
+ $(CLANG-FORMAT) -i $(SRCS) $(HEADERS) -style=file
+
+### ==========================================================================
+### Section 5. Private Targets
+### ==========================================================================
+
+all: $(EXE) .depend
+
+config-sanity: net
+ @echo ""
+ @echo "Config:" && \
+ echo "debug: '$(debug)'" && \
+ echo "sanitize: '$(sanitize)'" && \
+ echo "optimize: '$(optimize)'" && \
+ echo "arch: '$(arch)'" && \
+ echo "bits: '$(bits)'" && \
+ echo "kernel: '$(KERNEL)'" && \
+ echo "os: '$(OS)'" && \
+ echo "prefetch: '$(prefetch)'" && \
+ echo "popcnt: '$(popcnt)'" && \
+ echo "pext: '$(pext)'" && \
+ echo "sse: '$(sse)'" && \
+ echo "mmx: '$(mmx)'" && \
+ echo "sse2: '$(sse2)'" && \
+ echo "ssse3: '$(ssse3)'" && \
+ echo "sse41: '$(sse41)'" && \
+ echo "avx2: '$(avx2)'" && \
+ echo "avxvnni: '$(avxvnni)'" && \
+ echo "avx512: '$(avx512)'" && \
+ echo "vnni512: '$(vnni512)'" && \
+ echo "avx512icl: '$(avx512icl)'" && \
+ echo "altivec: '$(altivec)'" && \
+ echo "vsx: '$(vsx)'" && \
+ echo "neon: '$(neon)'" && \
+ echo "dotprod: '$(dotprod)'" && \
+ echo "arm_version: '$(arm_version)'" && \
+ echo "lsx: '$(lsx)'" && \
+ echo "lasx: '$(lasx)'" && \
+ echo "target_windows: '$(target_windows)'" && \
+ echo "" && \
+ echo "Flags:" && \
+ echo "CXX: $(CXX)" && \
+ echo "CXXFLAGS: $(CXXFLAGS)" && \
+ echo "LDFLAGS: $(LDFLAGS)" && \
+ echo "" && \
+ echo "Testing config sanity. If this fails, try 'make help' ..." && \
+ echo "" && \
+ (test "$(debug)" = "yes" || test "$(debug)" = "no") && \
+ (test "$(optimize)" = "yes" || test "$(optimize)" = "no") && \
+ (test "$(SUPPORTED_ARCH)" = "true") && \
+ (test "$(arch)" = "any" || test "$(arch)" = "x86_64" || test "$(arch)" = "i386" || \
+ test "$(arch)" = "ppc64" || test "$(arch)" = "ppc" || test "$(arch)" = "e2k" || \
+ test "$(arch)" = "armv7" || test "$(arch)" = "armv8" || test "$(arch)" = "arm64" || \
+ test "$(arch)" = "riscv64" || test "$(arch)" = "loongarch64") && \
+ (test "$(bits)" = "32" || test "$(bits)" = "64") && \
+ (test "$(prefetch)" = "yes" || test "$(prefetch)" = "no") && \
+ (test "$(popcnt)" = "yes" || test "$(popcnt)" = "no") && \
+ (test "$(pext)" = "yes" || test "$(pext)" = "no") && \
+ (test "$(sse)" = "yes" || test "$(sse)" = "no") && \
+ (test "$(mmx)" = "yes" || test "$(mmx)" = "no") && \
+ (test "$(sse2)" = "yes" || test "$(sse2)" = "no") && \
+ (test "$(ssse3)" = "yes" || test "$(ssse3)" = "no") && \
+ (test "$(sse41)" = "yes" || test "$(sse41)" = "no") && \
+ (test "$(avx2)" = "yes" || test "$(avx2)" = "no") && \
+ (test "$(avx512)" = "yes" || test "$(avx512)" = "no") && \
+ (test "$(vnni512)" = "yes" || test "$(vnni512)" = "no") && \
+ (test "$(avx512icl)" = "yes" || test "$(avx512icl)" = "no") && \
+ (test "$(altivec)" = "yes" || test "$(altivec)" = "no") && \
+ (test "$(vsx)" = "yes" || test "$(vsx)" = "no") && \
+ (test "$(neon)" = "yes" || test "$(neon)" = "no") && \
+ (test "$(lsx)" = "yes" || test "$(lsx)" = "no") && \
+ (test "$(lasx)" = "yes" || test "$(lasx)" = "no") && \
+ (test "$(comp)" = "gcc" || test "$(comp)" = "icx" || test "$(comp)" = "mingw" || \
+ test "$(comp)" = "clang" || test "$(comp)" = "armv7a-linux-androideabi16-clang" || \
+ test "$(comp)" = "aarch64-linux-android21-clang")
+
+$(EXE): $(OBJS)
+ +$(CXX) -o $@ $(OBJS) $(LDFLAGS)
+
+# Force recompilation to ensure version info is up-to-date
+misc.o: FORCE
+FORCE:
+
+clang-profile-make:
+ $(MAKE) ARCH=$(ARCH) COMP=$(COMP) \
+ EXTRACXXFLAGS='-fprofile-generate ' \
+ EXTRALDFLAGS=' -fprofile-generate' \
+ all
+
+clang-profile-use:
+ $(XCRUN) $(LLVM_PROFDATA) merge -output=stockfish.profdata *.profraw
+ $(MAKE) ARCH=$(ARCH) COMP=$(COMP) \
+ EXTRACXXFLAGS='-fprofile-use=stockfish.profdata' \
+ EXTRALDFLAGS='-fprofile-use ' \
+ all
+
+gcc-profile-make:
+ @mkdir -p profdir
+ $(MAKE) ARCH=$(ARCH) COMP=$(COMP) \
+ EXTRACXXFLAGS='-fprofile-generate=profdir' \
+ EXTRACXXFLAGS+=$(EXTRAPROFILEFLAGS) \
+ EXTRALDFLAGS='-lgcov' \
+ all
+
+gcc-profile-use:
+ $(MAKE) ARCH=$(ARCH) COMP=$(COMP) \
+ EXTRACXXFLAGS='-fprofile-use=profdir -fno-peel-loops -fno-tracer' \
+ EXTRACXXFLAGS+=$(EXTRAPROFILEFLAGS) \
+ EXTRALDFLAGS='-lgcov' \
+ all
+
+icx-profile-make:
+ $(MAKE) ARCH=$(ARCH) COMP=$(COMP) \
+ EXTRACXXFLAGS='-fprofile-instr-generate ' \
+ EXTRALDFLAGS=' -fprofile-instr-generate' \
+ all
+
+icx-profile-use:
+ $(XCRUN) $(LLVM_PROFDATA) merge -output=stockfish.profdata *.profraw
+ $(MAKE) ARCH=$(ARCH) COMP=$(COMP) \
+ EXTRACXXFLAGS='-fprofile-instr-use=stockfish.profdata' \
+ EXTRALDFLAGS='-fprofile-use ' \
+ all
+
+.depend: $(SRCS)
+ -@$(CXX) $(DEPENDFLAGS) -MM $(SRCS) > $@ 2> /dev/null
+
+ifeq (, $(filter $(MAKECMDGOALS), help strip install clean net objclean profileclean format config-sanity))
+-include .depend
+endif
diff --git a/src/benchmark.cpp b/src/benchmark.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..03bf10ae1cb3ffd95c8e087d22e5deb0f4674fdc
--- /dev/null
+++ b/src/benchmark.cpp
@@ -0,0 +1,516 @@
+/*
+ Stockfish, a UCI chess playing engine derived from Glaurung 2.1
+ Copyright (C) 2004-2026 The Stockfish developers (see AUTHORS file)
+
+ Stockfish is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Stockfish is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+#include "benchmark.h"
+#include "numa.h"
+
+#include
+#include
+#include
+#include
+
+namespace {
+
+// clang-format off
+const std::vector Defaults = {
+ "setoption name UCI_Chess960 value false",
+ "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1",
+ "r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - 0 10",
+ "8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - - 0 11",
+ "4rrk1/pp1n3p/3q2pQ/2p1pb2/2PP4/2P3N1/P2B2PP/4RRK1 b - - 7 19",
+ "rq3rk1/ppp2ppp/1bnpb3/3N2B1/3NP3/7P/PPPQ1PP1/2KR3R w - - 7 14 moves d4e6",
+ "r1bq1r1k/1pp1n1pp/1p1p4/4p2Q/4Pp2/1BNP4/PPP2PPP/3R1RK1 w - - 2 14 moves g2g4",
+ "r3r1k1/2p2ppp/p1p1bn2/8/1q2P3/2NPQN2/PPP3PP/R4RK1 b - - 2 15",
+ "r1bbk1nr/pp3p1p/2n5/1N4p1/2Np1B2/8/PPP2PPP/2KR1B1R w kq - 0 13",
+ "r1bq1rk1/ppp1nppp/4n3/3p3Q/3P4/1BP1B3/PP1N2PP/R4RK1 w - - 1 16",
+ "4r1k1/r1q2ppp/ppp2n2/4P3/5Rb1/1N1BQ3/PPP3PP/R5K1 w - - 1 17",
+ "2rqkb1r/ppp2p2/2npb1p1/1N1Nn2p/2P1PP2/8/PP2B1PP/R1BQK2R b KQ - 0 11",
+ "r1bq1r1k/b1p1npp1/p2p3p/1p6/3PP3/1B2NN2/PP3PPP/R2Q1RK1 w - - 1 16",
+ "3r1rk1/p5pp/bpp1pp2/8/q1PP1P2/b3P3/P2NQRPP/1R2B1K1 b - - 6 22",
+ "r1q2rk1/2p1bppp/2Pp4/p6b/Q1PNp3/4B3/PP1R1PPP/2K4R w - - 2 18",
+ "4k2r/1pb2ppp/1p2p3/1R1p4/3P4/2r1PN2/P4PPP/1R4K1 b - - 3 22",
+ "3q2k1/pb3p1p/4pbp1/2r5/PpN2N2/1P2P2P/5PP1/Q2R2K1 b - - 4 26",
+ "6k1/6p1/6Pp/ppp5/3pn2P/1P3K2/1PP2P2/3N4 b - - 0 1",
+ "3b4/5kp1/1p1p1p1p/pP1PpP1P/P1P1P3/3KN3/8/8 w - - 0 1",
+ "2K5/p7/7P/5pR1/8/5k2/r7/8 w - - 0 1 moves g5g6 f3e3 g6g5 e3f3",
+ "8/6pk/1p6/8/PP3p1p/5P2/4KP1q/3Q4 w - - 0 1",
+ "7k/3p2pp/4q3/8/4Q3/5Kp1/P6b/8 w - - 0 1",
+ "8/2p5/8/2kPKp1p/2p4P/2P5/3P4/8 w - - 0 1",
+ "8/1p3pp1/7p/5P1P/2k3P1/8/2K2P2/8 w - - 0 1",
+ "8/pp2r1k1/2p1p3/3pP2p/1P1P1P1P/P5KR/8/8 w - - 0 1",
+ "8/3p4/p1bk3p/Pp6/1Kp1PpPp/2P2P1P/2P5/5B2 b - - 0 1",
+ "5k2/7R/4P2p/5K2/p1r2P1p/8/8/8 b - - 0 1",
+ "6k1/6p1/P6p/r1N5/5p2/7P/1b3PP1/4R1K1 w - - 0 1",
+ "1r3k2/4q3/2Pp3b/3Bp3/2Q2p2/1p1P2P1/1P2KP2/3N4 w - - 0 1",
+ "6k1/4pp1p/3p2p1/P1pPb3/R7/1r2P1PP/3B1P2/6K1 w - - 0 1",
+ "8/3p3B/5p2/5P2/p7/PP5b/k7/6K1 w - - 0 1",
+ "5rk1/q6p/2p3bR/1pPp1rP1/1P1Pp3/P3B1Q1/1K3P2/R7 w - - 93 90",
+ "4rrk1/1p1nq3/p7/2p1P1pp/3P2bp/3Q1Bn1/PPPB4/1K2R1NR w - - 40 21",
+ "r3k2r/3nnpbp/q2pp1p1/p7/Pp1PPPP1/4BNN1/1P5P/R2Q1RK1 w kq - 0 16",
+ "3Qb1k1/1r2ppb1/pN1n2q1/Pp1Pp1Pr/4P2p/4BP2/4B1R1/1R5K b - - 11 40",
+ "4k3/3q1r2/1N2r1b1/3ppN2/2nPP3/1B1R2n1/2R1Q3/3K4 w - - 5 1",
+ "1r6/1P4bk/3qr1p1/N6p/3pp2P/6R1/3Q1PP1/1R4K1 w - - 1 42",
+
+ // Positions with high numbers of changed threats
+ "k7/2n1n3/1nbNbn2/2NbRBn1/1nbRQR2/2NBRBN1/3N1N2/7K w - - 0 1",
+ "K7/8/8/BNQNQNB1/N5N1/R1Q1q2r/n5n1/bnqnqnbk w - - 0 1",
+
+ // 5-man positions
+ "8/8/8/8/5kp1/P7/8/1K1N4 w - - 0 1", // Kc2 - mate
+ "8/8/8/5N2/8/p7/8/2NK3k w - - 0 1", // Na2 - mate
+ "8/3k4/8/8/8/4B3/4KB2/2B5 w - - 0 1", // draw
+
+ // 6-man positions
+ "8/8/1P6/5pr1/8/4R3/7k/2K5 w - - 0 1", // Re5 - mate
+ "8/2p4P/8/kr6/6R1/8/8/1K6 w - - 0 1", // Ka2 - mate
+ "8/8/3P3k/8/1p6/8/1P6/1K3n2 b - - 0 1", // Nd2 - draw
+
+ // 7-man positions
+ "8/R7/2q5/8/6k1/8/1P5p/K6R w - - 0 124", // Draw
+
+ // Mate and stalemate positions
+ "6k1/3b3r/1p1p4/p1n2p2/1PPNpP1q/P3Q1p1/1R1RB1P1/5K2 b - - 0 1",
+ "r2r1n2/pp2bk2/2p1p2p/3q4/3PN1QP/2P3R1/P4PP1/5RK1 w - - 0 1",
+ "8/8/8/8/8/6k1/6p1/6K1 w - -",
+ "7k/7P/6K1/8/3B4/8/8/8 b - -",
+
+ // Chess 960
+ "setoption name UCI_Chess960 value true",
+ "bbqnnrkr/pppppppp/8/8/8/8/PPPPPPPP/BBQNNRKR w HFhf - 0 1 moves g2g3 d7d5 d2d4 c8h3 c1g5 e8d6 g5e7 f7f6",
+ "nqbnrkrb/pppppppp/8/8/8/8/PPPPPPPP/NQBNRKRB w KQkq - 0 1",
+ "setoption name UCI_Chess960 value false"
+};
+// clang-format on
+
+// clang-format off
+// human-randomly picked 5 games with <60 moves from
+// https://tests.stockfishchess.org/tests/view/665c71f9fd45fb0f907c21e0
+// only moves for one side
+const std::vector> BenchmarkPositions = {
+ {
+ "rnbq1k1r/ppp1bppp/4pn2/8/2B5/2NP1N2/PPP2PPP/R1BQR1K1 b - - 2 8",
+ "rnbq1k1r/pp2bppp/4pn2/2p5/2B2B2/2NP1N2/PPP2PPP/R2QR1K1 b - - 1 9",
+ "r1bq1k1r/pp2bppp/2n1pn2/2p5/2B1NB2/3P1N2/PPP2PPP/R2QR1K1 b - - 3 10",
+ "r1bq1k1r/pp2bppp/2n1p3/2p5/2B1PB2/5N2/PPP2PPP/R2QR1K1 b - - 0 11",
+ "r1b2k1r/pp2bppp/2n1p3/2p5/2B1PB2/5N2/PPP2PPP/3RR1K1 b - - 0 12",
+ "r1b1k2r/pp2bppp/2n1p3/2p5/2B1PB2/2P2N2/PP3PPP/3RR1K1 b - - 0 13",
+ "r1b1k2r/1p2bppp/p1n1p3/2p5/4PB2/2P2N2/PP2BPPP/3RR1K1 b - - 1 14",
+ "r1b1k2r/4bppp/p1n1p3/1pp5/P3PB2/2P2N2/1P2BPPP/3RR1K1 b - - 0 15",
+ "r1b1k2r/4bppp/p1n1p3/1P6/2p1PB2/2P2N2/1P2BPPP/3RR1K1 b - - 0 16",
+ "r1b1k2r/4bppp/2n1p3/1p6/2p1PB2/1PP2N2/4BPPP/3RR1K1 b - - 0 17",
+ "r3k2r/3bbppp/2n1p3/1p6/2P1PB2/2P2N2/4BPPP/3RR1K1 b - - 0 18",
+ "r3k2r/3bbppp/2n1p3/8/1pP1P3/2P2N2/3BBPPP/3RR1K1 b - - 1 19",
+ "1r2k2r/3bbppp/2n1p3/8/1pPNP3/2P5/3BBPPP/3RR1K1 b - - 3 20",
+ "1r2k2r/3bbppp/2n1p3/8/2PNP3/2B5/4BPPP/3RR1K1 b - - 0 21",
+ "1r2k2r/3bb1pp/2n1pp2/1N6/2P1P3/2B5/4BPPP/3RR1K1 b - - 1 22",
+ "1r2k2r/3b2pp/2n1pp2/1N6/1BP1P3/8/4BPPP/3RR1K1 b - - 0 23",
+ "1r2k2r/3b2pp/4pp2/1N6/1nP1P3/8/3RBPPP/4R1K1 b - - 1 24",
+ "1r5r/3bk1pp/4pp2/1N6/1nP1PP2/8/3RB1PP/4R1K1 b - - 0 25",
+ "1r5r/3bk1pp/2n1pp2/1N6/2P1PP2/8/3RBKPP/4R3 b - - 2 26",
+ "1r5r/3bk1pp/2n2p2/1N2p3/2P1PP2/6P1/3RBK1P/4R3 b - - 0 27",
+ "1r1r4/3bk1pp/2n2p2/1N2p3/2P1PP2/6P1/3RBK1P/R7 b - - 2 28",
+ "1r1r4/N3k1pp/2n1bp2/4p3/2P1PP2/6P1/3RBK1P/R7 b - - 4 29",
+ "1r1r4/3bk1pp/2N2p2/4p3/2P1PP2/6P1/3RBK1P/R7 b - - 0 30",
+ "1r1R4/4k1pp/2b2p2/4p3/2P1PP2/6P1/4BK1P/R7 b - - 0 31",
+ "3r4/4k1pp/2b2p2/4P3/2P1P3/6P1/4BK1P/R7 b - - 0 32",
+ "3r4/R3k1pp/2b5/4p3/2P1P3/6P1/4BK1P/8 b - - 1 33",
+ "8/3rk1pp/2b5/R3p3/2P1P3/6P1/4BK1P/8 b - - 3 34",
+ "8/3r2pp/2bk4/R1P1p3/4P3/6P1/4BK1P/8 b - - 0 35",
+ "8/2kr2pp/2b5/R1P1p3/4P3/4K1P1/4B2P/8 b - - 2 36",
+ "1k6/3r2pp/2b5/RBP1p3/4P3/4K1P1/7P/8 b - - 4 37",
+ "8/1k1r2pp/2b5/R1P1p3/4P3/3BK1P1/7P/8 b - - 6 38",
+ "1k6/3r2pp/2b5/2P1p3/4P3/3BK1P1/7P/R7 b - - 8 39",
+ "1k6/r5pp/2b5/2P1p3/4P3/3BK1P1/7P/5R2 b - - 10 40",
+ "1k3R2/6pp/2b5/2P1p3/4P3/r2BK1P1/7P/8 b - - 12 41",
+ "5R2/2k3pp/2b5/2P1p3/4P3/r2B2P1/3K3P/8 b - - 14 42",
+ "5R2/2k3pp/2b5/2P1p3/4P3/3BK1P1/r6P/8 b - - 16 43",
+ "5R2/2k3pp/2b5/2P1p3/4P3/r2B2P1/4K2P/8 b - - 18 44",
+ "5R2/2k3pp/2b5/2P1p3/4P3/3B1KP1/r6P/8 b - - 20 45",
+ "8/2k2Rpp/2b5/2P1p3/4P3/r2B1KP1/7P/8 b - - 22 46",
+ "3k4/5Rpp/2b5/2P1p3/4P3/r2B2P1/4K2P/8 b - - 24 47",
+ "3k4/5Rpp/2b5/2P1p3/4P3/3B1KP1/r6P/8 b - - 26 48",
+ "3k4/5Rpp/2b5/2P1p3/4P3/r2B2P1/4K2P/8 b - - 28 49",
+ "3k4/5Rpp/2b5/2P1p3/4P3/3BK1P1/r6P/8 b - - 30 50",
+ "3k4/5Rpp/2b5/2P1p3/4P3/r2B2P1/3K3P/8 b - - 32 51",
+ "3k4/5Rpp/2b5/2P1p3/4P3/2KB2P1/r6P/8 b - - 34 52",
+ "3k4/5Rpp/2b5/2P1p3/4P3/r2B2P1/2K4P/8 b - - 36 53",
+ "3k4/5Rpp/2b5/2P1p3/4P3/1K1B2P1/r6P/8 b - - 38 54",
+ "3k4/6Rp/2b5/2P1p3/4P3/1K1B2P1/7r/8 b - - 0 55",
+ "3k4/8/2b3Rp/2P1p3/4P3/1K1B2P1/7r/8 b - - 1 56",
+ "8/2k3R1/2b4p/2P1p3/4P3/1K1B2P1/7r/8 b - - 3 57",
+ "3k4/8/2b3Rp/2P1p3/4P3/1K1B2P1/7r/8 b - - 5 58",
+ "8/2k5/2b3Rp/2P1p3/1K2P3/3B2P1/7r/8 b - - 7 59",
+ "8/2k5/2b3Rp/2P1p3/4P3/2KB2P1/3r4/8 b - - 9 60",
+ "8/2k5/2b3Rp/2P1p3/1K2P3/3B2P1/6r1/8 b - - 11 61",
+ "8/2k5/2b3Rp/2P1p3/4P3/2KB2P1/3r4/8 b - - 13 62",
+ "8/2k5/2b3Rp/2P1p3/2K1P3/3B2P1/6r1/8 b - - 15 63",
+ "4b3/2k3R1/7p/2P1p3/2K1P3/3B2P1/6r1/8 b - - 17 64",
+ },
+ {
+ "r1bqkbnr/npp1pppp/p7/3P4/4pB2/2N5/PPP2PPP/R2QKBNR w KQkq - 1 6",
+ "r1bqkb1r/npp1pppp/p4n2/3P4/4pB2/2N5/PPP1QPPP/R3KBNR w KQkq - 3 7",
+ "r2qkb1r/npp1pppp/p4n2/3P1b2/4pB2/2N5/PPP1QPPP/2KR1BNR w kq - 5 8",
+ "r2qkb1r/1pp1pppp/p4n2/1n1P1b2/4pB2/2N4P/PPP1QPP1/2KR1BNR w kq - 1 9",
+ "r2qkb1r/1pp1pppp/5n2/1p1P1b2/4pB2/7P/PPP1QPP1/2KR1BNR w kq - 0 10",
+ "r2qkb1r/1ppbpppp/5n2/1Q1P4/4pB2/7P/PPP2PP1/2KR1BNR w kq - 1 11",
+ "3qkb1r/1Qpbpppp/5n2/3P4/4pB2/7P/rPP2PP1/2KR1BNR w k - 0 12",
+ "q3kb1r/1Qpbpppp/5n2/3P4/4pB2/7P/rPP2PP1/1K1R1BNR w k - 2 13",
+ "r3kb1r/2pbpppp/5n2/3P4/4pB2/7P/1PP2PP1/1K1R1BNR w k - 0 14",
+ "r3kb1r/2Bb1ppp/4pn2/3P4/4p3/7P/1PP2PP1/1K1R1BNR w k - 0 15",
+ "r3kb1r/2Bb2pp/4pn2/8/4p3/7P/1PP2PP1/1K1R1BNR w k - 0 16",
+ "r3k2r/2Bb2pp/4pn2/2b5/4p3/7P/1PP1NPP1/1K1R1B1R w k - 2 17",
+ "r6r/2Bbk1pp/4pn2/2b5/3Np3/7P/1PP2PP1/1K1R1B1R w - - 4 18",
+ "r6r/b2bk1pp/4pn2/4B3/3Np3/7P/1PP2PP1/1K1R1B1R w - - 6 19",
+ "r1r5/b2bk1pp/4pn2/4B3/2BNp3/7P/1PP2PP1/1K1R3R w - - 8 20",
+ "r7/b2bk1pp/4pn2/2r1B3/2BNp3/1P5P/2P2PP1/1K1R3R w - - 1 21",
+ "rb6/3bk1pp/4pn2/2r1B3/2BNpP2/1P5P/2P3P1/1K1R3R w - - 1 22",
+ "1r6/3bk1pp/4pn2/2r5/2BNpP2/1P5P/2P3P1/1K1R3R w - - 0 23",
+ "1r6/3bk1p1/4pn1p/2r5/2BNpP2/1P5P/2P3P1/2KR3R w - - 0 24",
+ "8/3bk1p1/1r2pn1p/2r5/2BNpP1P/1P6/2P3P1/2KR3R w - - 1 25",
+ "8/3bk3/1r2pnpp/2r5/2BNpP1P/1P6/2P3P1/2K1R2R w - - 0 26",
+ "2b5/4k3/1r2pnpp/2r5/2BNpP1P/1P4P1/2P5/2K1R2R w - - 1 27",
+ "8/1b2k3/1r2pnpp/2r5/2BNpP1P/1P4P1/2P5/2K1R1R1 w - - 3 28",
+ "8/1b1nk3/1r2p1pp/2r5/2BNpPPP/1P6/2P5/2K1R1R1 w - - 1 29",
+ "8/1b2k3/1r2p1pp/2r1nP2/2BNp1PP/1P6/2P5/2K1R1R1 w - - 1 30",
+ "8/1b2k3/1r2p1p1/2r1nPp1/2BNp2P/1P6/2P5/2K1R1R1 w - - 0 31",
+ "8/1b2k3/1r2p1n1/2r3p1/2BNp2P/1P6/2P5/2K1R1R1 w - - 0 32",
+ "8/1b2k3/1r2p1n1/6r1/2BNp2P/1P6/2P5/2K1R3 w - - 0 33",
+ "8/1b2k3/1r2p3/4n1P1/2BNp3/1P6/2P5/2K1R3 w - - 1 34",
+ "8/1b2k3/1r2p3/4n1P1/2BN4/1P2p3/2P5/2K4R w - - 0 35",
+ "8/1b2k3/1r2p2R/6P1/2nN4/1P2p3/2P5/2K5 w - - 0 36",
+ "8/1b2k3/3rp2R/6P1/2PN4/4p3/2P5/2K5 w - - 1 37",
+ "8/4k3/3rp2R/6P1/2PN4/2P1p3/6b1/2K5 w - - 1 38",
+ "8/4k3/r3p2R/2P3P1/3N4/2P1p3/6b1/2K5 w - - 1 39",
+ "8/3k4/r3p2R/2P2NP1/8/2P1p3/6b1/2K5 w - - 3 40",
+ "8/3k4/4p2R/2P3P1/8/2P1N3/6b1/r1K5 w - - 1 41",
+ "8/3k4/4p2R/2P3P1/8/2P1N3/3K2b1/6r1 w - - 3 42",
+ "8/3k4/4p2R/2P3P1/8/2PKNb2/8/6r1 w - - 5 43",
+ "8/4k3/4p1R1/2P3P1/8/2PKNb2/8/6r1 w - - 7 44",
+ "8/4k3/4p1R1/2P3P1/3K4/2P1N3/8/6rb w - - 9 45",
+ "8/3k4/4p1R1/2P1K1P1/8/2P1N3/8/6rb w - - 11 46",
+ "8/3k4/4p1R1/2P3P1/5K2/2P1N3/8/4r2b w - - 13 47",
+ "8/3k4/2b1p2R/2P3P1/5K2/2P1N3/8/4r3 w - - 15 48",
+ "8/3k4/2b1p3/2P3P1/5K2/2P1N2R/8/6r1 w - - 17 49",
+ "2k5/7R/2b1p3/2P3P1/5K2/2P1N3/8/6r1 w - - 19 50",
+ "2k5/7R/4p3/2P3P1/b1P2K2/4N3/8/6r1 w - - 1 51",
+ "2k5/3bR3/4p3/2P3P1/2P2K2/4N3/8/6r1 w - - 3 52",
+ "3k4/3b2R1/4p3/2P3P1/2P2K2/4N3/8/6r1 w - - 5 53",
+ "3kb3/6R1/4p1P1/2P5/2P2K2/4N3/8/6r1 w - - 1 54",
+ "3kb3/6R1/4p1P1/2P5/2P2KN1/8/8/2r5 w - - 3 55",
+ "3kb3/6R1/4p1P1/2P1N3/2P2K2/8/8/5r2 w - - 5 56",
+ "3kb3/6R1/4p1P1/2P1N3/2P5/4K3/8/4r3 w - - 7 57",
+ },
+ {
+ "rnbq1rk1/ppp1npb1/4p1p1/3P3p/3PP3/2N2N2/PP2BPPP/R1BQ1RK1 b - - 0 8",
+ "rnbq1rk1/ppp1npb1/6p1/3pP2p/3P4/2N2N2/PP2BPPP/R1BQ1RK1 b - - 0 9",
+ "rn1q1rk1/ppp1npb1/6p1/3pP2p/3P2b1/2N2N2/PP2BPPP/R1BQR1K1 b - - 2 10",
+ "r2q1rk1/ppp1npb1/2n3p1/3pP2p/3P2bN/2N5/PP2BPPP/R1BQR1K1 b - - 4 11",
+ "r4rk1/pppqnpb1/2n3p1/3pP2p/3P2bN/2N4P/PP2BPP1/R1BQR1K1 b - - 0 12",
+ "r4rk1/pppqnpb1/2n3p1/3pP2p/3P3N/7P/PP2NPP1/R1BQR1K1 b - - 0 13",
+ "r4rk1/pppq1pb1/2n3p1/3pPN1p/3P4/7P/PP2NPP1/R1BQR1K1 b - - 0 14",
+ "r4rk1/ppp2pb1/2n3p1/3pPq1p/3P1N2/7P/PP3PP1/R1BQR1K1 b - - 1 15",
+ "r4rk1/pppq1pb1/2n3p1/3pP2p/P2P1N2/7P/1P3PP1/R1BQR1K1 b - - 0 16",
+ "r2n1rk1/pppq1pb1/6p1/3pP2p/P2P1N2/R6P/1P3PP1/2BQR1K1 b - - 2 17",
+ "r4rk1/pppq1pb1/4N1p1/3pP2p/P2P4/R6P/1P3PP1/2BQR1K1 b - - 0 18",
+ "r4rk1/ppp2pb1/4q1p1/3pP1Bp/P2P4/R6P/1P3PP1/3QR1K1 b - - 1 19",
+ "r3r1k1/ppp2pb1/4q1p1/3pP1Bp/P2P1P2/R6P/1P4P1/3QR1K1 b - - 0 20",
+ "r3r1k1/ppp3b1/4qpp1/3pP2p/P2P1P1B/R6P/1P4P1/3QR1K1 b - - 1 21",
+ "r3r1k1/ppp3b1/4q1p1/3pP2p/P4P1B/R6P/1P4P1/3QR1K1 b - - 0 22",
+ "r4rk1/ppp3b1/4q1p1/3pP1Bp/P4P2/R6P/1P4P1/3QR1K1 b - - 2 23",
+ "r4rk1/pp4b1/4q1p1/2ppP1Bp/P4P2/3R3P/1P4P1/3QR1K1 b - - 1 24",
+ "r4rk1/pp4b1/4q1p1/2p1P1Bp/P2p1PP1/3R3P/1P6/3QR1K1 b - - 0 25",
+ "r4rk1/pp4b1/4q1p1/2p1P1B1/P2p1PP1/3R4/1P6/3QR1K1 b - - 0 26",
+ "r5k1/pp3rb1/4q1p1/2p1P1B1/P2p1PP1/6R1/1P6/3QR1K1 b - - 2 27",
+ "5rk1/pp3rb1/4q1p1/2p1P1B1/P2pRPP1/6R1/1P6/3Q2K1 b - - 4 28",
+ "5rk1/1p3rb1/p3q1p1/P1p1P1B1/3pRPP1/6R1/1P6/3Q2K1 b - - 0 29",
+ "4r1k1/1p3rb1/p3q1p1/P1p1P1B1/3pRPP1/1P4R1/8/3Q2K1 b - - 0 30",
+ "4r1k1/5rb1/pP2q1p1/2p1P1B1/3pRPP1/1P4R1/8/3Q2K1 b - - 0 31",
+ "4r1k1/5rb1/pq4p1/2p1P1B1/3pRPP1/1P4R1/4Q3/6K1 b - - 1 32",
+ "4r1k1/1r4b1/pq4p1/2p1P1B1/3pRPP1/1P4R1/2Q5/6K1 b - - 3 33",
+ "4r1k1/1r4b1/1q4p1/p1p1P1B1/3p1PP1/1P4R1/2Q5/4R1K1 b - - 1 34",
+ "4r1k1/3r2b1/1q4p1/p1p1P1B1/2Qp1PP1/1P4R1/8/4R1K1 b - - 3 35",
+ "4r1k1/3r2b1/4q1p1/p1p1P1B1/2Qp1PP1/1P4R1/5K2/4R3 b - - 5 36",
+ "4r1k1/3r2b1/6p1/p1p1P1B1/2Pp1PP1/6R1/5K2/4R3 b - - 0 37",
+ "4r1k1/3r2b1/6p1/p1p1P1B1/2P2PP1/3p2R1/5K2/3R4 b - - 1 38",
+ "5rk1/3r2b1/6p1/p1p1P1B1/2P2PP1/3p2R1/8/3RK3 b - - 3 39",
+ "5rk1/6b1/6p1/p1p1P1B1/2Pr1PP1/3R4/8/3RK3 b - - 0 40",
+ "5rk1/3R2b1/6p1/p1p1P1B1/2r2PP1/8/8/3RK3 b - - 1 41",
+ "5rk1/3R2b1/6p1/p1p1P1B1/4rPP1/8/3K4/3R4 b - - 3 42",
+ "1r4k1/3R2b1/6p1/p1p1P1B1/4rPP1/2K5/8/3R4 b - - 5 43",
+ "1r4k1/3R2b1/6p1/p1p1P1B1/2K2PP1/4r3/8/3R4 b - - 7 44",
+ "1r3bk1/8/3R2p1/p1p1P1B1/2K2PP1/4r3/8/3R4 b - - 9 45",
+ "1r3bk1/8/6R1/2p1P1B1/p1K2PP1/4r3/8/3R4 b - - 0 46",
+ "1r3b2/5k2/R7/2p1P1B1/p1K2PP1/4r3/8/3R4 b - - 2 47",
+ "5b2/1r3k2/R7/2p1P1B1/p1K2PP1/4r3/8/7R b - - 4 48",
+ "5b2/5k2/R7/2pKP1B1/pr3PP1/4r3/8/7R b - - 6 49",
+ "5b2/5k2/R1K5/2p1P1B1/p2r1PP1/4r3/8/7R b - - 8 50",
+ "8/R4kb1/2K5/2p1P1B1/p2r1PP1/4r3/8/7R b - - 10 51",
+ "8/R5b1/2K3k1/2p1PPB1/p2r2P1/4r3/8/7R b - - 0 52",
+ "8/6R1/2K5/2p1PPk1/p2r2P1/4r3/8/7R b - - 0 53",
+ "8/6R1/2K5/2p1PP2/p2r1kP1/4r3/8/5R2 b - - 2 54",
+ "8/6R1/2K2P2/2p1P3/p2r2P1/4r1k1/8/5R2 b - - 0 55",
+ "8/5PR1/2K5/2p1P3/p2r2P1/4r3/6k1/5R2 b - - 0 56",
+ },
+ {
+ "rn1qkb1r/p1pbpppp/5n2/8/2pP4/2N5/1PQ1PPPP/R1B1KBNR w KQkq - 0 7",
+ "r2qkb1r/p1pbpppp/2n2n2/8/2pP4/2N2N2/1PQ1PPPP/R1B1KB1R w KQkq - 2 8",
+ "r2qkb1r/p1pbpppp/5n2/8/1npPP3/2N2N2/1PQ2PPP/R1B1KB1R w KQkq - 1 9",
+ "r2qkb1r/p1pb1ppp/4pn2/8/1npPP3/2N2N2/1P3PPP/R1BQKB1R w KQkq - 0 10",
+ "r2qk2r/p1pbbppp/4pn2/8/1nBPP3/2N2N2/1P3PPP/R1BQK2R w KQkq - 1 11",
+ "r2q1rk1/p1pbbppp/4pn2/8/1nBPP3/2N2N2/1P3PPP/R1BQ1RK1 w - - 3 12",
+ "r2q1rk1/2pbbppp/p3pn2/8/1nBPPB2/2N2N2/1P3PPP/R2Q1RK1 w - - 0 13",
+ "r2q1rk1/2p1bppp/p3pn2/1b6/1nBPPB2/2N2N2/1P3PPP/R2QR1K1 w - - 2 14",
+ "r2q1rk1/4bppp/p1p1pn2/1b6/1nBPPB2/1PN2N2/5PPP/R2QR1K1 w - - 0 15",
+ "r4rk1/3qbppp/p1p1pn2/1b6/1nBPPB2/1PN2N2/3Q1PPP/R3R1K1 w - - 2 16",
+ "r4rk1/1q2bppp/p1p1pn2/1b6/1nBPPB2/1PN2N1P/3Q1PP1/R3R1K1 w - - 1 17",
+ "r3r1k1/1q2bppp/p1p1pn2/1b6/1nBPPB2/1PN2N1P/4QPP1/R3R1K1 w - - 3 18",
+ "r3r1k1/1q1nbppp/p1p1p3/1b6/1nBPPB2/1PN2N1P/4QPP1/3RR1K1 w - - 5 19",
+ "r3rbk1/1q1n1ppp/p1p1p3/1b6/1nBPPB2/1PN2N1P/3RQPP1/4R1K1 w - - 7 20",
+ "r3rbk1/1q3ppp/pnp1p3/1b6/1nBPPB2/1PN2N1P/3RQPP1/4R2K w - - 9 21",
+ "2r1rbk1/1q3ppp/pnp1p3/1b6/1nBPPB2/1PN2N1P/3RQPP1/1R5K w - - 11 22",
+ "2r1rbk1/1q4pp/pnp1pp2/1b6/1nBPPB2/1PN2N1P/4QPP1/1R1R3K w - - 0 23",
+ "2r1rbk1/5qpp/pnp1pp2/1b6/1nBPP3/1PN1BN1P/4QPP1/1R1R3K w - - 2 24",
+ "2r1rbk1/5qp1/pnp1pp1p/1b6/1nBPP3/1PN1BN1P/4QPP1/1R1R2K1 w - - 0 25",
+ "2r1rbk1/5qp1/pnp1pp1p/1b6/2BPP3/1P2BN1P/n3QPP1/1R1R2K1 w - - 0 26",
+ "r3rbk1/5qp1/pnp1pp1p/1b6/2BPP3/1P2BN1P/Q4PP1/1R1R2K1 w - - 1 27",
+ "rr3bk1/5qp1/pnp1pp1p/1b6/2BPP3/1P2BN1P/Q4PP1/R2R2K1 w - - 3 28",
+ "rr2qbk1/6p1/pnp1pp1p/1b6/2BPP3/1P2BN1P/4QPP1/R2R2K1 w - - 5 29",
+ "rr2qbk1/6p1/1np1pp1p/pb6/2BPP3/1P1QBN1P/5PP1/R2R2K1 w - - 0 30",
+ "rr2qbk1/6p1/1n2pp1p/pp6/3PP3/1P1QBN1P/5PP1/R2R2K1 w - - 0 31",
+ "rr2qbk1/6p1/1n2pp1p/1p1P4/p3P3/1P1QBN1P/5PP1/R2R2K1 w - - 0 32",
+ "rr2qbk1/3n2p1/3Ppp1p/1p6/p3P3/1P1QBN1P/5PP1/R2R2K1 w - - 1 33",
+ "rr3bk1/3n2p1/3Ppp1p/1p5q/pP2P3/3QBN1P/5PP1/R2R2K1 w - - 1 34",
+ "rr3bk1/3n2p1/3Ppp1p/1p5q/1P2P3/p2QBN1P/5PP1/2RR2K1 w - - 0 35",
+ "1r3bk1/3n2p1/r2Ppp1p/1p5q/1P2P3/pQ2BN1P/5PP1/2RR2K1 w - - 2 36",
+ "1r2qbk1/2Rn2p1/r2Ppp1p/1p6/1P2P3/pQ2BN1P/5PP1/3R2K1 w - - 4 37",
+ "1r2qbk1/2Rn2p1/r2Ppp1p/1pB5/1P2P3/1Q3N1P/p4PP1/3R2K1 w - - 0 38",
+ "1r2q1k1/2Rn2p1/r2bpp1p/1pB5/1P2P3/1Q3N1P/p4PP1/R5K1 w - - 0 39",
+ "1r2q1k1/2Rn2p1/3rpp1p/1p6/1P2P3/1Q3N1P/p4PP1/R5K1 w - - 0 40",
+ "2r1q1k1/2Rn2p1/3rpp1p/1p6/1P2P3/5N1P/Q4PP1/R5K1 w - - 1 41",
+ "1r2q1k1/1R1n2p1/3rpp1p/1p6/1P2P3/5N1P/Q4PP1/R5K1 w - - 3 42",
+ "2r1q1k1/2Rn2p1/3rpp1p/1p6/1P2P3/5N1P/Q4PP1/R5K1 w - - 5 43",
+ "1r2q1k1/1R1n2p1/3rpp1p/1p6/1P2P3/5N1P/Q4PP1/R5K1 w - - 7 44",
+ "1rq3k1/R2n2p1/3rpp1p/1p6/1P2P3/5N1P/Q4PP1/R5K1 w - - 9 45",
+ "2q3k1/Rr1n2p1/3rpp1p/1p6/1P2P3/5N1P/4QPP1/R5K1 w - - 11 46",
+ "Rrq3k1/3n2p1/3rpp1p/1p6/1P2P3/5N1P/4QPP1/R5K1 w - - 13 47",
+ },
+ {
+ "rn1qkb1r/1pp2ppp/p4p2/3p1b2/5P2/1P2PN2/P1PP2PP/RN1QKB1R b KQkq - 1 6",
+ "r2qkb1r/1pp2ppp/p1n2p2/3p1b2/3P1P2/1P2PN2/P1P3PP/RN1QKB1R b KQkq - 0 7",
+ "r2qkb1r/1pp2ppp/p4p2/3p1b2/1n1P1P2/1P1BPN2/P1P3PP/RN1QK2R b KQkq - 2 8",
+ "r2qkb1r/1pp2ppp/p4p2/3p1b2/3P1P2/1P1PPN2/P5PP/RN1QK2R b KQkq - 0 9",
+ "r2qk2r/1pp2ppp/p2b1p2/3p1b2/3P1P2/1PNPPN2/P5PP/R2QK2R b KQkq - 2 10",
+ "r2qk2r/1p3ppp/p1pb1p2/3p1b2/3P1P2/1PNPPN2/P5PP/R2Q1RK1 b kq - 1 11",
+ "r2q1rk1/1p3ppp/p1pb1p2/3p1b2/3P1P2/1PNPPN2/P2Q2PP/R4RK1 b - - 3 12",
+ "r2qr1k1/1p3ppp/p1pb1p2/3p1b2/3P1P2/1P1PPN2/P2QN1PP/R4RK1 b - - 5 13",
+ "r3r1k1/1p3ppp/pqpb1p2/3p1b2/3P1P2/1P1PPNN1/P2Q2PP/R4RK1 b - - 7 14",
+ "r3r1k1/1p3ppp/pqp2p2/3p1b2/1b1P1P2/1P1PPNN1/P1Q3PP/R4RK1 b - - 9 15",
+ "r3r1k1/1p1b1ppp/pqp2p2/3p4/1b1P1P2/1P1PPNN1/P4QPP/R4RK1 b - - 11 16",
+ "2r1r1k1/1p1b1ppp/pqp2p2/3p4/1b1PPP2/1P1P1NN1/P4QPP/R4RK1 b - - 0 17",
+ "2r1r1k1/1p1b1ppp/pq3p2/2pp4/1b1PPP2/PP1P1NN1/5QPP/R4RK1 b - - 0 18",
+ "2r1r1k1/1p1b1ppp/pq3p2/2Pp4/4PP2/PPbP1NN1/5QPP/R4RK1 b - - 0 19",
+ "2r1r1k1/1p1b1ppp/p4p2/2Pp4/4PP2/PqbP1NN1/5QPP/RR4K1 b - - 1 20",
+ "2r1r1k1/1p1b1ppp/p4p2/2Pp4/q3PP2/P1bP1NN1/R4QPP/1R4K1 b - - 3 21",
+ "2r1r1k1/1p3ppp/p4p2/1bPP4/q4P2/P1bP1NN1/R4QPP/1R4K1 b - - 0 22",
+ "2r1r1k1/1p3ppp/p4p2/2PP4/q4P2/P1bb1NN1/R4QPP/2R3K1 b - - 1 23",
+ "2r1r1k1/1p3ppp/p2P1p2/2P5/2q2P2/P1bb1NN1/R4QPP/2R3K1 b - - 0 24",
+ "2rr2k1/1p3ppp/p2P1p2/2P5/2q2P2/P1bb1NN1/R4QPP/2R4K b - - 2 25",
+ "2rr2k1/1p3ppp/p2P1p2/2Q5/5P2/P1bb1NN1/R5PP/2R4K b - - 0 26",
+ "3r2k1/1p3ppp/p2P1p2/2r5/5P2/P1bb1N2/R3N1PP/2R4K b - - 1 27",
+ "3r2k1/1p3ppp/p2P1p2/2r5/5P2/P1b2N2/4R1PP/2R4K b - - 0 28",
+ "3r2k1/1p3ppp/p2P1p2/2r5/1b3P2/P4N2/4R1PP/3R3K b - - 2 29",
+ "3r2k1/1p2Rppp/p2P1p2/b1r5/5P2/P4N2/6PP/3R3K b - - 4 30",
+ "3r2k1/1R3ppp/p1rP1p2/b7/5P2/P4N2/6PP/3R3K b - - 0 31",
+ "3r2k1/1R3ppp/p2R1p2/b7/5P2/P4N2/6PP/7K b - - 0 32",
+ "6k1/1R3ppp/p2r1p2/b7/5P2/P4NP1/7P/7K b - - 0 33",
+ "6k1/1R3p1p/p2r1pp1/b7/5P1P/P4NP1/8/7K b - - 0 34",
+ "6k1/3R1p1p/pr3pp1/b7/5P1P/P4NP1/8/7K b - - 2 35",
+ "6k1/5p2/pr3pp1/b2R3p/5P1P/P4NP1/8/7K b - - 1 36",
+ "6k1/5p2/pr3pp1/7p/5P1P/P1bR1NP1/8/7K b - - 3 37",
+ "6k1/5p2/p1r2pp1/7p/5P1P/P1bR1NP1/6K1/8 b - - 5 38",
+ "6k1/5p2/p1r2pp1/b2R3p/5P1P/P4NP1/6K1/8 b - - 7 39",
+ "6k1/5p2/p4pp1/b2R3p/5P1P/P4NPK/2r5/8 b - - 9 40",
+ "6k1/2b2p2/p4pp1/7p/5P1P/P2R1NPK/2r5/8 b - - 11 41",
+ "6k1/2b2p2/5pp1/p6p/3N1P1P/P2R2PK/2r5/8 b - - 1 42",
+ "6k1/2b2p2/5pp1/p6p/3N1P1P/P1R3PK/r7/8 b - - 3 43",
+ "6k1/5p2/1b3pp1/p6p/5P1P/P1R3PK/r1N5/8 b - - 5 44",
+ "8/5pk1/1bR2pp1/p6p/5P1P/P5PK/r1N5/8 b - - 7 45",
+ "3b4/5pk1/2R2pp1/p4P1p/7P/P5PK/r1N5/8 b - - 0 46",
+ "8/4bpk1/2R2pp1/p4P1p/6PP/P6K/r1N5/8 b - - 0 47",
+ "8/5pk1/2R2pP1/p6p/6PP/b6K/r1N5/8 b - - 0 48",
+ "8/6k1/2R2pp1/p6P/7P/b6K/r1N5/8 b - - 0 49",
+ "8/6k1/2R2p2/p6p/7P/b5K1/r1N5/8 b - - 1 50",
+ "8/8/2R2pk1/p6p/7P/b4K2/r1N5/8 b - - 3 51",
+ "8/8/2R2pk1/p6p/7P/4NK2/rb6/8 b - - 5 52",
+ "2R5/8/5pk1/7p/p6P/4NK2/rb6/8 b - - 1 53",
+ "6R1/8/5pk1/7p/p6P/4NK2/1b6/r7 b - - 3 54",
+ "R7/5k2/5p2/7p/p6P/4NK2/1b6/r7 b - - 5 55",
+ "R7/5k2/5p2/7p/7P/p3N3/1b2K3/r7 b - - 1 56",
+ "8/R4k2/5p2/7p/7P/p3N3/1b2K3/7r b - - 3 57",
+ "8/8/5pk1/7p/R6P/p3N3/1b2K3/7r b - - 5 58",
+ "8/8/5pk1/7p/R6P/p7/4K3/2bN3r b - - 7 59",
+ "8/8/5pk1/7p/R6P/p7/4KN1r/2b5 b - - 9 60",
+ "8/8/5pk1/7p/R6P/p3K3/1b3N1r/8 b - - 11 61",
+ "8/8/R4pk1/7p/7P/p1b1K3/5N1r/8 b - - 13 62",
+ "8/8/5pk1/7p/7P/2b1K3/R4N1r/8 b - - 0 63",
+ "8/8/5pk1/7p/3K3P/8/R4N1r/4b3 b - - 2 64",
+ }
+};
+// clang-format on
+
+} // namespace
+
+namespace Stockfish::Benchmark {
+
+// Builds a list of UCI commands to be run by bench. There
+// are five parameters: TT size in MB, number of search threads that
+// should be used, the limit value spent for each position, a file name
+// where to look for positions in FEN format, and the type of the limit:
+// depth, perft, nodes and movetime (in milliseconds). Examples:
+//
+// bench : search default positions up to depth 13
+// bench 64 1 15 : search default positions up to depth 15 (TT = 64MB)
+// bench 64 1 100000 default nodes : search default positions for 100K nodes each
+// bench 64 4 5000 current movetime : search current position with 4 threads for 5 sec
+// bench 16 1 5 blah perft : run a perft 5 on positions in file "blah"
+std::vector setup_bench(const std::string& currentFen, std::istream& is) {
+
+ std::vector fens, list;
+ std::string go, token;
+
+ // Assign default values to missing arguments
+ std::string ttSize = (is >> token) ? token : "16";
+ std::string threads = (is >> token) ? token : "1";
+ std::string limit = (is >> token) ? token : "13";
+ std::string fenFile = (is >> token) ? token : "default";
+ std::string limitType = (is >> token) ? token : "depth";
+
+ go = limitType == "eval" ? "eval" : "go " + limitType + " " + limit;
+
+ if (fenFile == "default")
+ fens = Defaults;
+
+ else if (fenFile == "current")
+ fens.push_back(currentFen);
+
+ else
+ {
+ std::string fen;
+ std::ifstream file(fenFile);
+
+ if (!file.is_open())
+ {
+ std::cerr << "Unable to open file " << fenFile << std::endl;
+ exit(EXIT_FAILURE);
+ }
+
+ while (getline(file, fen))
+ if (!fen.empty())
+ fens.push_back(fen);
+
+ file.close();
+ }
+
+ list.emplace_back("setoption name Threads value " + threads);
+ list.emplace_back("setoption name Hash value " + ttSize);
+ list.emplace_back("ucinewgame");
+
+ for (const std::string& fen : fens)
+ if (fen.find("setoption") != std::string::npos)
+ list.emplace_back(fen);
+ else
+ {
+ list.emplace_back("position fen " + fen);
+ list.emplace_back(go);
+ }
+
+ return list;
+}
+
+BenchmarkSetup setup_benchmark(std::istream& is) {
+ // TT_SIZE_PER_THREAD is chosen such that roughly half of the hash is used all positions
+ // for the current sequence have been searched.
+ static constexpr int TT_SIZE_PER_THREAD = 128;
+
+ static constexpr int DEFAULT_DURATION_S = 150;
+
+ BenchmarkSetup setup{};
+
+ // Assign default values to missing arguments
+ int desiredTimeS;
+
+ if (!(is >> setup.threads))
+ setup.threads = int(get_hardware_concurrency());
+ else
+ setup.originalInvocation += std::to_string(setup.threads);
+
+ if (!(is >> setup.ttSize))
+ setup.ttSize = TT_SIZE_PER_THREAD * setup.threads;
+ else
+ setup.originalInvocation += " " + std::to_string(setup.ttSize);
+
+ if (!(is >> desiredTimeS))
+ desiredTimeS = DEFAULT_DURATION_S;
+ else
+ setup.originalInvocation += " " + std::to_string(desiredTimeS);
+
+ setup.filledInvocation += std::to_string(setup.threads) + " " + std::to_string(setup.ttSize)
+ + " " + std::to_string(desiredTimeS);
+
+ auto getCorrectedTime = [&](int ply) {
+ // time per move is fit roughly based on LTC games
+ // seconds = 50/{ply+15}
+ // ms = 50000/{ply+15}
+ // with this fit 10th move gets 2000ms
+ // adjust for desired 10th move time
+ return 50000.0 / (static_cast(ply) + 15.0);
+ };
+
+ float totalTime = 0;
+ for (const auto& game : BenchmarkPositions)
+ {
+ int ply = 1;
+ for (int i = 0; i < static_cast(game.size()); ++i)
+ {
+ const float correctedTime = float(getCorrectedTime(ply));
+ totalTime += correctedTime;
+ ply += 1;
+ }
+ }
+
+ float timeScaleFactor = static_cast(desiredTimeS * 1000) / totalTime;
+
+ for (const auto& game : BenchmarkPositions)
+ {
+ setup.commands.emplace_back("ucinewgame");
+ int ply = 1;
+ for (const std::string& fen : game)
+ {
+ setup.commands.emplace_back("position fen " + fen);
+
+ const int correctedTime = static_cast(getCorrectedTime(ply) * timeScaleFactor);
+ setup.commands.emplace_back("go movetime " + std::to_string(correctedTime));
+
+ ply += 1;
+ }
+ }
+
+ return setup;
+}
+
+} // namespace Stockfish
diff --git a/src/benchmark.h b/src/benchmark.h
new file mode 100644
index 0000000000000000000000000000000000000000..a6606e78cad6feb990fc4b84ddc7fe7e31d1dc5f
--- /dev/null
+++ b/src/benchmark.h
@@ -0,0 +1,42 @@
+/*
+ Stockfish, a UCI chess playing engine derived from Glaurung 2.1
+ Copyright (C) 2004-2026 The Stockfish developers (see AUTHORS file)
+
+ Stockfish is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Stockfish is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+#ifndef BENCHMARK_H_INCLUDED
+#define BENCHMARK_H_INCLUDED
+
+#include
+#include
+#include
+
+namespace Stockfish::Benchmark {
+
+std::vector setup_bench(const std::string&, std::istream&);
+
+struct BenchmarkSetup {
+ int ttSize;
+ int threads;
+ std::vector commands;
+ std::string originalInvocation;
+ std::string filledInvocation;
+};
+
+BenchmarkSetup setup_benchmark(std::istream&);
+
+} // namespace Stockfish
+
+#endif // #ifndef BENCHMARK_H_INCLUDED
diff --git a/src/bitboard.cpp b/src/bitboard.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..0861222cf0e108380ceb296f0449c37a49ce9d8b
--- /dev/null
+++ b/src/bitboard.cpp
@@ -0,0 +1,189 @@
+/*
+ Stockfish, a UCI chess playing engine derived from Glaurung 2.1
+ Copyright (C) 2004-2026 The Stockfish developers (see AUTHORS file)
+
+ Stockfish is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Stockfish is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+#include "bitboard.h"
+
+#include
+#include
+#include
+
+#include "misc.h"
+
+namespace Stockfish {
+
+uint8_t PopCnt16[1 << 16];
+uint8_t SquareDistance[SQUARE_NB][SQUARE_NB];
+
+Bitboard LineBB[SQUARE_NB][SQUARE_NB];
+Bitboard BetweenBB[SQUARE_NB][SQUARE_NB];
+Bitboard RayPassBB[SQUARE_NB][SQUARE_NB];
+
+alignas(64) Magic Magics[SQUARE_NB][2];
+
+namespace {
+
+Bitboard RookTable[0x19000]; // To store rook attacks
+Bitboard BishopTable[0x1480]; // To store bishop attacks
+
+void init_magics(PieceType pt, Bitboard table[], Magic magics[][2]);
+}
+
+// Returns an ASCII representation of a bitboard suitable
+// to be printed to standard output. Useful for debugging.
+std::string Bitboards::pretty(Bitboard b) {
+
+ std::string s = "+---+---+---+---+---+---+---+---+\n";
+
+ for (Rank r = RANK_8;; --r)
+ {
+ for (File f = FILE_A; f <= FILE_H; ++f)
+ s += b & make_square(f, r) ? "| X " : "| ";
+
+ s += "| " + std::to_string(1 + r) + "\n+---+---+---+---+---+---+---+---+\n";
+
+ if (r == RANK_1)
+ break;
+ }
+ s += " a b c d e f g h\n";
+
+ return s;
+}
+
+
+// Initializes various bitboard tables. It is called at
+// startup and relies on global objects to be already zero-initialized.
+void Bitboards::init() {
+
+ for (unsigned i = 0; i < (1 << 16); ++i)
+ PopCnt16[i] = uint8_t(std::bitset<16>(i).count());
+
+ for (Square s1 = SQ_A1; s1 <= SQ_H8; ++s1)
+ for (Square s2 = SQ_A1; s2 <= SQ_H8; ++s2)
+ SquareDistance[s1][s2] = std::max(distance(s1, s2), distance(s1, s2));
+
+ init_magics(ROOK, RookTable, Magics);
+ init_magics(BISHOP, BishopTable, Magics);
+
+ for (Square s1 = SQ_A1; s1 <= SQ_H8; ++s1)
+ {
+ for (PieceType pt : {BISHOP, ROOK})
+ for (Square s2 = SQ_A1; s2 <= SQ_H8; ++s2)
+ {
+ if (PseudoAttacks[pt][s1] & s2)
+ {
+ LineBB[s1][s2] = (attacks_bb(pt, s1, 0) & attacks_bb(pt, s2, 0)) | s1 | s2;
+ BetweenBB[s1][s2] =
+ (attacks_bb(pt, s1, square_bb(s2)) & attacks_bb(pt, s2, square_bb(s1)));
+ RayPassBB[s1][s2] =
+ attacks_bb(pt, s1, 0) & (attacks_bb(pt, s2, square_bb(s1)) | s2);
+ }
+ BetweenBB[s1][s2] |= s2;
+ }
+ }
+}
+
+namespace {
+// Computes all rook and bishop attacks at startup. Magic
+// bitboards are used to look up attacks of sliding pieces. As a reference see
+// https://www.chessprogramming.org/Magic_Bitboards. In particular, here we use
+// the so called "fancy" approach.
+void init_magics(PieceType pt, Bitboard table[], Magic magics[][2]) {
+
+#ifndef USE_PEXT
+ // Optimal PRNG seeds to pick the correct magics in the shortest time
+ int seeds[][RANK_NB] = {{8977, 44560, 54343, 38998, 5731, 95205, 104912, 17020},
+ {728, 10316, 55013, 32803, 12281, 15100, 16645, 255}};
+
+ Bitboard occupancy[4096];
+ int epoch[4096] = {}, cnt = 0;
+#endif
+ Bitboard reference[4096];
+ int size = 0;
+
+ for (Square s = SQ_A1; s <= SQ_H8; ++s)
+ {
+ // Board edges are not considered in the relevant occupancies
+ Bitboard edges = ((Rank1BB | Rank8BB) & ~rank_bb(s)) | ((FileABB | FileHBB) & ~file_bb(s));
+
+ // Given a square 's', the mask is the bitboard of sliding attacks from
+ // 's' computed on an empty board. The index must be big enough to contain
+ // all the attacks for each possible subset of the mask and so is 2 power
+ // the number of 1s of the mask. Hence we deduce the size of the shift to
+ // apply to the 64 or 32 bits word to get the index.
+ Magic& m = magics[s][pt - BISHOP];
+ m.mask = Bitboards::sliding_attack(pt, s, 0) & ~edges;
+#ifndef USE_PEXT
+ m.shift = (Is64Bit ? 64 : 32) - popcount(m.mask);
+#endif
+ // Set the offset for the attacks table of the square. We have individual
+ // table sizes for each square with "Fancy Magic Bitboards".
+ m.attacks = s == SQ_A1 ? table : magics[s - 1][pt - BISHOP].attacks + size;
+ size = 0;
+
+ // Use Carry-Rippler trick to enumerate all subsets of masks[s] and
+ // store the corresponding sliding attack bitboard in reference[].
+ Bitboard b = 0;
+ do
+ {
+#ifndef USE_PEXT
+ occupancy[size] = b;
+#endif
+ reference[size] = Bitboards::sliding_attack(pt, s, b);
+
+ if (HasPext)
+ m.attacks[pext(b, m.mask)] = reference[size];
+
+ size++;
+ b = (b - m.mask) & m.mask;
+ } while (b);
+
+#ifndef USE_PEXT
+ PRNG rng(seeds[Is64Bit][rank_of(s)]);
+
+ // Find a magic for square 's' picking up an (almost) random number
+ // until we find the one that passes the verification test.
+ for (int i = 0; i < size;)
+ {
+ for (m.magic = 0; popcount((m.magic * m.mask) >> 56) < 6;)
+ m.magic = rng.sparse_rand();
+
+ // A good magic must map every possible occupancy to an index that
+ // looks up the correct sliding attack in the attacks[s] database.
+ // Note that we build up the database for square 's' as a side
+ // effect of verifying the magic. Keep track of the attempt count
+ // and save it in epoch[], little speed-up trick to avoid resetting
+ // m.attacks[] after every failed attempt.
+ for (++cnt, i = 0; i < size; ++i)
+ {
+ unsigned idx = m.index(occupancy[i]);
+
+ if (epoch[idx] < cnt)
+ {
+ epoch[idx] = cnt;
+ m.attacks[idx] = reference[i];
+ }
+ else if (m.attacks[idx] != reference[i])
+ break;
+ }
+ }
+#endif
+ }
+}
+}
+
+} // namespace Stockfish
diff --git a/src/bitboard.h b/src/bitboard.h
new file mode 100644
index 0000000000000000000000000000000000000000..7d36b0a62ed65ee7982e11f378c518b1a8616e2b
--- /dev/null
+++ b/src/bitboard.h
@@ -0,0 +1,458 @@
+/*
+ Stockfish, a UCI chess playing engine derived from Glaurung 2.1
+ Copyright (C) 2004-2026 The Stockfish developers (see AUTHORS file)
+
+ Stockfish is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Stockfish is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+#ifndef BITBOARD_H_INCLUDED
+#define BITBOARD_H_INCLUDED
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "types.h"
+
+namespace Stockfish {
+
+namespace Bitboards {
+
+void init();
+std::string pretty(Bitboard b);
+
+} // namespace Stockfish::Bitboards
+
+constexpr Bitboard FileABB = 0x0101010101010101ULL;
+constexpr Bitboard FileBBB = FileABB << 1;
+constexpr Bitboard FileCBB = FileABB << 2;
+constexpr Bitboard FileDBB = FileABB << 3;
+constexpr Bitboard FileEBB = FileABB << 4;
+constexpr Bitboard FileFBB = FileABB << 5;
+constexpr Bitboard FileGBB = FileABB << 6;
+constexpr Bitboard FileHBB = FileABB << 7;
+
+constexpr Bitboard Rank1BB = 0xFF;
+constexpr Bitboard Rank2BB = Rank1BB << (8 * 1);
+constexpr Bitboard Rank3BB = Rank1BB << (8 * 2);
+constexpr Bitboard Rank4BB = Rank1BB << (8 * 3);
+constexpr Bitboard Rank5BB = Rank1BB << (8 * 4);
+constexpr Bitboard Rank6BB = Rank1BB << (8 * 5);
+constexpr Bitboard Rank7BB = Rank1BB << (8 * 6);
+constexpr Bitboard Rank8BB = Rank1BB << (8 * 7);
+
+extern uint8_t PopCnt16[1 << 16];
+extern uint8_t SquareDistance[SQUARE_NB][SQUARE_NB];
+
+extern Bitboard BetweenBB[SQUARE_NB][SQUARE_NB];
+extern Bitboard LineBB[SQUARE_NB][SQUARE_NB];
+extern Bitboard RayPassBB[SQUARE_NB][SQUARE_NB];
+
+// Magic holds all magic bitboards relevant data for a single square
+struct Magic {
+ Bitboard mask;
+ Bitboard* attacks;
+#ifndef USE_PEXT
+ Bitboard magic;
+ unsigned shift;
+#endif
+
+ // Compute the attack's index using the 'magic bitboards' approach
+ unsigned index(Bitboard occupied) const {
+
+#ifdef USE_PEXT
+ return unsigned(pext(occupied, mask));
+#else
+ if (Is64Bit)
+ return unsigned(((occupied & mask) * magic) >> shift);
+
+ unsigned lo = unsigned(occupied) & unsigned(mask);
+ unsigned hi = unsigned(occupied >> 32) & unsigned(mask >> 32);
+ return (lo * unsigned(magic) ^ hi * unsigned(magic >> 32)) >> shift;
+#endif
+ }
+
+ Bitboard attacks_bb(Bitboard occupied) const { return attacks[index(occupied)]; }
+};
+
+extern Magic Magics[SQUARE_NB][2];
+
+constexpr Bitboard square_bb(Square s) {
+ assert(is_ok(s));
+ return 1ULL << s;
+}
+
+
+// Overloads of bitwise operators between a Bitboard and a Square for testing
+// whether a given bit is set in a bitboard, and for setting and clearing bits.
+
+constexpr Bitboard operator&(Bitboard b, Square s) { return b & square_bb(s); }
+constexpr Bitboard operator|(Bitboard b, Square s) { return b | square_bb(s); }
+constexpr Bitboard operator^(Bitboard b, Square s) { return b ^ square_bb(s); }
+constexpr Bitboard& operator|=(Bitboard& b, Square s) { return b |= square_bb(s); }
+constexpr Bitboard& operator^=(Bitboard& b, Square s) { return b ^= square_bb(s); }
+
+constexpr Bitboard operator&(Square s, Bitboard b) { return b & s; }
+constexpr Bitboard operator|(Square s, Bitboard b) { return b | s; }
+constexpr Bitboard operator^(Square s, Bitboard b) { return b ^ s; }
+
+constexpr Bitboard operator|(Square s1, Square s2) { return square_bb(s1) | s2; }
+
+constexpr bool more_than_one(Bitboard b) { return b & (b - 1); }
+
+
+// rank_bb() and file_bb() return a bitboard representing all the squares on
+// the given file or rank.
+
+constexpr Bitboard rank_bb(Rank r) { return Rank1BB << (8 * r); }
+
+constexpr Bitboard rank_bb(Square s) { return rank_bb(rank_of(s)); }
+
+constexpr Bitboard file_bb(File f) { return FileABB << f; }
+
+constexpr Bitboard file_bb(Square s) { return file_bb(file_of(s)); }
+
+
+// Moves a bitboard one or two steps as specified by the direction D
+template
+constexpr Bitboard shift(Bitboard b) {
+ return D == NORTH ? b << 8
+ : D == SOUTH ? b >> 8
+ : D == NORTH + NORTH ? b << 16
+ : D == SOUTH + SOUTH ? b >> 16
+ : D == EAST ? (b & ~FileHBB) << 1
+ : D == WEST ? (b & ~FileABB) >> 1
+ : D == NORTH_EAST ? (b & ~FileHBB) << 9
+ : D == NORTH_WEST ? (b & ~FileABB) << 7
+ : D == SOUTH_EAST ? (b & ~FileHBB) >> 7
+ : D == SOUTH_WEST ? (b & ~FileABB) >> 9
+ : 0;
+}
+
+
+// Returns the squares attacked by pawns of the given color
+// from the squares in the given bitboard.
+template
+constexpr Bitboard pawn_attacks_bb(Bitboard b) {
+ return C == WHITE ? shift(b) | shift(b)
+ : shift(b) | shift(b);
+}
+
+
+// Returns a bitboard representing an entire line (from board edge
+// to board edge) that intersects the two given squares. If the given squares
+// are not on a same file/rank/diagonal, the function returns 0. For instance,
+// line_bb(SQ_C4, SQ_F7) will return a bitboard with the A2-G8 diagonal.
+inline Bitboard line_bb(Square s1, Square s2) {
+
+ assert(is_ok(s1) && is_ok(s2));
+ return LineBB[s1][s2];
+}
+
+
+// Returns a bitboard representing the squares in the semi-open
+// segment between the squares s1 and s2 (excluding s1 but including s2). If the
+// given squares are not on a same file/rank/diagonal, it returns s2. For instance,
+// between_bb(SQ_C4, SQ_F7) will return a bitboard with squares D5, E6 and F7, but
+// between_bb(SQ_E6, SQ_F8) will return a bitboard with the square F8. This trick
+// allows to generate non-king evasion moves faster: the defending piece must either
+// interpose itself to cover the check or capture the checking piece.
+inline Bitboard between_bb(Square s1, Square s2) {
+
+ assert(is_ok(s1) && is_ok(s2));
+ return BetweenBB[s1][s2];
+}
+
+// distance() functions return the distance between x and y, defined as the
+// number of steps for a king in x to reach y.
+
+template
+inline int distance(Square x, Square y);
+
+template<>
+inline int distance(Square x, Square y) {
+ return std::abs(file_of(x) - file_of(y));
+}
+
+template<>
+inline int distance(Square x, Square y) {
+ return std::abs(rank_of(x) - rank_of(y));
+}
+
+template<>
+inline int distance(Square x, Square y) {
+ return SquareDistance[x][y];
+}
+
+inline int edge_distance(File f) { return std::min(f, File(FILE_H - f)); }
+
+
+constexpr int constexpr_popcount(Bitboard b) {
+ b = b - ((b >> 1) & 0x5555555555555555ULL);
+ b = (b & 0x3333333333333333ULL) + ((b >> 2) & 0x3333333333333333ULL);
+ b = (b + (b >> 4)) & 0x0F0F0F0F0F0F0F0FULL;
+ return static_cast((b * 0x0101010101010101ULL) >> 56);
+}
+
+// Counts the number of non-zero bits in a bitboard.
+inline int popcount(Bitboard b) {
+
+#ifndef USE_POPCNT
+
+ std::uint16_t indices[4];
+ std::memcpy(indices, &b, sizeof(b));
+ return PopCnt16[indices[0]] + PopCnt16[indices[1]] + PopCnt16[indices[2]]
+ + PopCnt16[indices[3]];
+
+#elif defined(_MSC_VER)
+
+ return int(_mm_popcnt_u64(b));
+
+#else // Assumed gcc or compatible compiler
+
+ return __builtin_popcountll(b);
+
+#endif
+}
+
+// Returns the least significant bit in a non-zero bitboard.
+inline Square lsb(Bitboard b) {
+ assert(b);
+
+#if defined(__GNUC__) // GCC, Clang, ICX
+
+ return Square(__builtin_ctzll(b));
+
+#elif defined(_MSC_VER)
+ #ifdef _WIN64 // MSVC, WIN64
+
+ unsigned long idx;
+ _BitScanForward64(&idx, b);
+ return Square(idx);
+
+ #else // MSVC, WIN32
+ unsigned long idx;
+
+ if (b & 0xffffffff)
+ {
+ _BitScanForward(&idx, int32_t(b));
+ return Square(idx);
+ }
+ else
+ {
+ _BitScanForward(&idx, int32_t(b >> 32));
+ return Square(idx + 32);
+ }
+ #endif
+#else // Compiler is neither GCC nor MSVC compatible
+ #error "Compiler not supported."
+#endif
+}
+
+// Returns the most significant bit in a non-zero bitboard.
+inline Square msb(Bitboard b) {
+ assert(b);
+
+#if defined(__GNUC__) // GCC, Clang, ICX
+
+ return Square(63 ^ __builtin_clzll(b));
+
+#elif defined(_MSC_VER)
+ #ifdef _WIN64 // MSVC, WIN64
+
+ unsigned long idx;
+ _BitScanReverse64(&idx, b);
+ return Square(idx);
+
+ #else // MSVC, WIN32
+
+ unsigned long idx;
+
+ if (b >> 32)
+ {
+ _BitScanReverse(&idx, int32_t(b >> 32));
+ return Square(idx + 32);
+ }
+ else
+ {
+ _BitScanReverse(&idx, int32_t(b));
+ return Square(idx);
+ }
+ #endif
+#else // Compiler is neither GCC nor MSVC compatible
+ #error "Compiler not supported."
+#endif
+}
+
+// Returns the bitboard of the least significant
+// square of a non-zero bitboard. It is equivalent to square_bb(lsb(bb)).
+inline Bitboard least_significant_square_bb(Bitboard b) {
+ assert(b);
+ return b & -b;
+}
+
+// Finds and clears the least significant bit in a non-zero bitboard.
+inline Square pop_lsb(Bitboard& b) {
+ assert(b);
+ const Square s = lsb(b);
+ b &= b - 1;
+ return s;
+}
+
+namespace Bitboards {
+// Returns the bitboard of target square for the given step
+// from the given square. If the step is off the board, returns empty bitboard.
+constexpr Bitboard safe_destination(Square s, int step) {
+ constexpr auto abs = [](int v) { return v < 0 ? -v : v; };
+ Square to = Square(s + step);
+ return is_ok(to) && abs(file_of(s) - file_of(to)) <= 2 ? square_bb(to) : Bitboard(0);
+}
+
+constexpr Bitboard sliding_attack(PieceType pt, Square sq, Bitboard occupied) {
+ Bitboard attacks = 0;
+ Direction RookDirections[4] = {NORTH, SOUTH, EAST, WEST};
+ Direction BishopDirections[4] = {NORTH_EAST, SOUTH_EAST, SOUTH_WEST, NORTH_WEST};
+
+ for (Direction d : (pt == ROOK ? RookDirections : BishopDirections))
+ {
+ Square s = sq;
+ while (safe_destination(s, d))
+ {
+ attacks |= (s += d);
+ if (occupied & s)
+ {
+ break;
+ }
+ }
+ }
+
+ return attacks;
+}
+
+constexpr Bitboard knight_attack(Square sq) {
+ Bitboard b = {};
+ for (int step : {-17, -15, -10, -6, 6, 10, 15, 17})
+ b |= safe_destination(sq, step);
+ return b;
+}
+
+constexpr Bitboard king_attack(Square sq) {
+ Bitboard b = {};
+ for (int step : {-9, -8, -7, -1, 1, 7, 8, 9})
+ b |= safe_destination(sq, step);
+ return b;
+}
+
+constexpr Bitboard pseudo_attacks(PieceType pt, Square sq) {
+ switch (pt)
+ {
+ case PieceType::ROOK :
+ case PieceType::BISHOP :
+ return sliding_attack(pt, sq, 0);
+ case PieceType::QUEEN :
+ return sliding_attack(PieceType::ROOK, sq, 0) | sliding_attack(PieceType::BISHOP, sq, 0);
+ case PieceType::KNIGHT :
+ return knight_attack(sq);
+ case PieceType::KING :
+ return king_attack(sq);
+ default :
+ assert(false);
+ return 0;
+ }
+}
+
+}
+
+inline constexpr auto PseudoAttacks = []() constexpr {
+ std::array, PIECE_TYPE_NB> attacks{};
+
+ for (Square s1 = SQ_A1; s1 <= SQ_H8; ++s1)
+ {
+ attacks[WHITE][s1] = pawn_attacks_bb(square_bb(s1));
+ attacks[BLACK][s1] = pawn_attacks_bb(square_bb(s1));
+
+ attacks[KING][s1] = Bitboards::pseudo_attacks(KING, s1);
+ attacks[KNIGHT][s1] = Bitboards::pseudo_attacks(KNIGHT, s1);
+ attacks[QUEEN][s1] = attacks[BISHOP][s1] = Bitboards::pseudo_attacks(BISHOP, s1);
+ attacks[QUEEN][s1] |= attacks[ROOK][s1] = Bitboards::pseudo_attacks(ROOK, s1);
+ }
+
+ return attacks;
+}();
+
+
+// Returns the pseudo attacks of the given piece type
+// assuming an empty board.
+template
+inline Bitboard attacks_bb(Square s, Color c = COLOR_NB) {
+
+ assert((Pt != PAWN || c < COLOR_NB) && is_ok(s));
+ return Pt == PAWN ? PseudoAttacks[c][s] : PseudoAttacks[Pt][s];
+}
+
+
+// Returns the attacks by the given piece
+// assuming the board is occupied according to the passed Bitboard.
+// Sliding piece attacks do not continue passed an occupied square.
+template
+inline Bitboard attacks_bb(Square s, Bitboard occupied) {
+
+ assert(Pt != PAWN && is_ok(s));
+
+ switch (Pt)
+ {
+ case BISHOP :
+ case ROOK :
+ return Magics[s][Pt - BISHOP].attacks_bb(occupied);
+ case QUEEN :
+ return attacks_bb(s, occupied) | attacks_bb(s, occupied);
+ default :
+ return PseudoAttacks[Pt][s];
+ }
+}
+
+// Returns the attacks by the given piece
+// assuming the board is occupied according to the passed Bitboard.
+// Sliding piece attacks do not continue passed an occupied square.
+inline Bitboard attacks_bb(PieceType pt, Square s, Bitboard occupied) {
+
+ assert(pt != PAWN && is_ok(s));
+
+ switch (pt)
+ {
+ case BISHOP :
+ return attacks_bb(s, occupied);
+ case ROOK :
+ return attacks_bb(s, occupied);
+ case QUEEN :
+ return attacks_bb(s, occupied) | attacks_bb(s, occupied);
+ default :
+ return PseudoAttacks[pt][s];
+ }
+}
+
+inline Bitboard attacks_bb(Piece pc, Square s, Bitboard occupied) {
+ return type_of(pc) == PAWN ? PseudoAttacks[color_of(pc)][s]
+ : attacks_bb(type_of(pc), s, occupied);
+}
+
+} // namespace Stockfish
+
+#endif // #ifndef BITBOARD_H_INCLUDED
diff --git a/src/engine.cpp b/src/engine.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..be0fe3c4086e9aeede5707a97503679ef803d947
--- /dev/null
+++ b/src/engine.cpp
@@ -0,0 +1,411 @@
+/*
+ Stockfish, a UCI chess playing engine derived from Glaurung 2.1
+ Copyright (C) 2004-2026 The Stockfish developers (see AUTHORS file)
+
+ Stockfish is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Stockfish is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+#include "engine.h"
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "evaluate.h"
+#include "misc.h"
+#include "nnue/network.h"
+#include "nnue/nnue_common.h"
+#include "nnue/nnue_misc.h"
+#include "numa.h"
+#include "perft.h"
+#include "position.h"
+#include "search.h"
+#include "shm.h"
+#include "syzygy/tbprobe.h"
+#include "types.h"
+#include "uci.h"
+#include "ucioption.h"
+
+namespace Stockfish {
+
+namespace NN = Eval::NNUE;
+
+constexpr auto StartFEN = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
+constexpr int MaxHashMB = Is64Bit ? 33554432 : 2048;
+int MaxThreads = std::max(1024, 4 * int(get_hardware_concurrency()));
+
+// The default configuration will attempt to group L3 domains up to 32 threads.
+// This size was found to be a good balance between the Elo gain of increased
+// history sharing and the speed loss from more cross-cache accesses (see
+// PR#6526). The user can always explicitly override this behavior.
+constexpr NumaAutoPolicy DefaultNumaPolicy = BundledL3Policy{32};
+
+Engine::Engine(std::optional path) :
+ binaryDirectory(path ? CommandLine::get_binary_directory(*path) : ""),
+ numaContext(NumaConfig::from_system(DefaultNumaPolicy)),
+ states(new std::deque(1)),
+ threads(),
+ networks(numaContext, get_default_networks()) {
+
+ pos.set(StartFEN, false, &states->back());
+
+ options.add( //
+ "Debug Log File", Option("", [](const Option& o) {
+ start_logger(o);
+ return std::nullopt;
+ }));
+
+ options.add( //
+ "NumaPolicy", Option("auto", [this](const Option& o) {
+ set_numa_config_from_option(o);
+ return numa_config_information_as_string() + "\n"
+ + thread_allocation_information_as_string();
+ }));
+
+ options.add( //
+ "Threads", Option(1, 1, MaxThreads, [this](const Option&) {
+ resize_threads();
+ return thread_allocation_information_as_string();
+ }));
+
+ options.add( //
+ "Hash", Option(16, 1, MaxHashMB, [this](const Option& o) {
+ set_tt_size(o);
+ return std::nullopt;
+ }));
+
+ options.add( //
+ "Clear Hash", Option([this](const Option&) {
+ search_clear();
+ return std::nullopt;
+ }));
+
+ options.add( //
+ "Ponder", Option(false));
+
+ options.add( //
+ "MultiPV", Option(1, 1, MAX_MOVES));
+
+ options.add("Skill Level", Option(20, 0, 20));
+
+ options.add("Move Overhead", Option(10, 0, 5000));
+
+ options.add("nodestime", Option(0, 0, 10000));
+
+ options.add("UCI_Chess960", Option(false));
+
+ options.add("UCI_LimitStrength", Option(false));
+
+ options.add("UCI_Elo",
+ Option(Stockfish::Search::Skill::LowestElo, Stockfish::Search::Skill::LowestElo,
+ Stockfish::Search::Skill::HighestElo));
+
+ options.add("UCI_ShowWDL", Option(false));
+
+ options.add( //
+ "SyzygyPath", Option("", [](const Option& o) {
+ Tablebases::init(o);
+ return std::nullopt;
+ }));
+
+ options.add("SyzygyProbeDepth", Option(1, 1, 100));
+
+ options.add("Syzygy50MoveRule", Option(true));
+
+ options.add("SyzygyProbeLimit", Option(7, 0, 7));
+
+ options.add( //
+ "EvalFile", Option(EvalFileDefaultNameBig, [this](const Option& o) {
+ load_big_network(o);
+ return std::nullopt;
+ }));
+
+ options.add( //
+ "EvalFileSmall", Option(EvalFileDefaultNameSmall, [this](const Option& o) {
+ load_small_network(o);
+ return std::nullopt;
+ }));
+
+ threads.clear();
+ threads.ensure_network_replicated();
+ resize_threads();
+}
+
+std::uint64_t Engine::perft(const std::string& fen, Depth depth, bool isChess960) {
+ verify_networks();
+
+ return Benchmark::perft(fen, depth, isChess960);
+}
+
+void Engine::go(Search::LimitsType& limits) {
+ assert(limits.perft == 0);
+ verify_networks();
+
+ threads.start_thinking(options, pos, states, limits);
+}
+void Engine::stop() { threads.stop = true; }
+
+void Engine::search_clear() {
+ wait_for_search_finished();
+
+ tt.clear(threads);
+ threads.clear();
+
+ // @TODO wont work with multiple instances
+ Tablebases::init(options["SyzygyPath"]); // Free mapped files
+}
+
+void Engine::set_on_update_no_moves(std::function&& f) {
+ updateContext.onUpdateNoMoves = std::move(f);
+}
+
+void Engine::set_on_update_full(std::function&& f) {
+ updateContext.onUpdateFull = std::move(f);
+}
+
+void Engine::set_on_iter(std::function&& f) {
+ updateContext.onIter = std::move(f);
+}
+
+void Engine::set_on_bestmove(std::function&& f) {
+ updateContext.onBestmove = std::move(f);
+}
+
+void Engine::set_on_verify_networks(std::function&& f) {
+ onVerifyNetworks = std::move(f);
+}
+
+void Engine::wait_for_search_finished() { threads.main_thread()->wait_for_search_finished(); }
+
+void Engine::set_position(const std::string& fen, const std::vector& moves) {
+ // Drop the old state and create a new one
+ states = StateListPtr(new std::deque(1));
+ pos.set(fen, options["UCI_Chess960"], &states->back());
+
+ for (const auto& move : moves)
+ {
+ auto m = UCIEngine::to_move(pos, move);
+
+ if (m == Move::none())
+ break;
+
+ states->emplace_back();
+ pos.do_move(m, states->back());
+ }
+}
+
+// modifiers
+
+void Engine::set_numa_config_from_option(const std::string& o) {
+ if (o == "auto" || o == "system")
+ {
+ numaContext.set_numa_config(NumaConfig::from_system(DefaultNumaPolicy));
+ }
+ else if (o == "hardware")
+ {
+ // Don't respect affinity set in the system.
+ numaContext.set_numa_config(NumaConfig::from_system(DefaultNumaPolicy, false));
+ }
+ else if (o == "none")
+ {
+ numaContext.set_numa_config(NumaConfig{});
+ }
+ else
+ {
+ numaContext.set_numa_config(NumaConfig::from_string(o));
+ }
+
+ // Force reallocation of threads in case affinities need to change.
+ resize_threads();
+ threads.ensure_network_replicated();
+}
+
+void Engine::resize_threads() {
+ threads.wait_for_search_finished();
+ threads.set(numaContext.get_numa_config(), {options, threads, tt, sharedHists, networks},
+ updateContext);
+
+ // Reallocate the hash with the new threadpool size
+ set_tt_size(options["Hash"]);
+ threads.ensure_network_replicated();
+}
+
+void Engine::set_tt_size(size_t mb) {
+ wait_for_search_finished();
+ tt.resize(mb, threads);
+}
+
+void Engine::set_ponderhit(bool b) { threads.main_manager()->ponder = b; }
+
+// network related
+
+void Engine::verify_networks() const {
+ networks->big.verify(options["EvalFile"], onVerifyNetworks);
+ networks->small.verify(options["EvalFileSmall"], onVerifyNetworks);
+
+ auto statuses = networks.get_status_and_errors();
+ for (size_t i = 0; i < statuses.size(); ++i)
+ {
+ const auto [status, error] = statuses[i];
+ std::string message = "Network replica " + std::to_string(i + 1) + ": ";
+ if (status == SystemWideSharedConstantAllocationStatus::NoAllocation)
+ {
+ message += "No allocation.";
+ }
+ else if (status == SystemWideSharedConstantAllocationStatus::LocalMemory)
+ {
+ message += "Local memory.";
+ }
+ else if (status == SystemWideSharedConstantAllocationStatus::SharedMemory)
+ {
+ message += "Shared memory.";
+ }
+ else
+ {
+ message += "Unknown status.";
+ }
+
+ if (error.has_value())
+ {
+ message += " " + *error;
+ }
+
+ onVerifyNetworks(message);
+ }
+}
+
+std::unique_ptr Engine::get_default_networks() const {
+
+ auto networks_ =
+ std::make_unique(NN::EvalFile{EvalFileDefaultNameBig, "None", ""},
+ NN::EvalFile{EvalFileDefaultNameSmall, "None", ""});
+
+ networks_->big.load(binaryDirectory, "");
+ networks_->small.load(binaryDirectory, "");
+
+ return networks_;
+}
+
+void Engine::load_big_network(const std::string& file) {
+ networks.modify_and_replicate(
+ [this, &file](NN::Networks& networks_) { networks_.big.load(binaryDirectory, file); });
+ threads.clear();
+ threads.ensure_network_replicated();
+}
+
+void Engine::load_small_network(const std::string& file) {
+ networks.modify_and_replicate(
+ [this, &file](NN::Networks& networks_) { networks_.small.load(binaryDirectory, file); });
+ threads.clear();
+ threads.ensure_network_replicated();
+}
+
+void Engine::save_network(const std::pair, std::string> files[2]) {
+ networks.modify_and_replicate([&files](NN::Networks& networks_) {
+ networks_.big.save(files[0].first);
+ networks_.small.save(files[1].first);
+ });
+}
+
+// utility functions
+
+void Engine::trace_eval() const {
+ StateListPtr trace_states(new std::deque(1));
+ Position p;
+ p.set(pos.fen(), options["UCI_Chess960"], &trace_states->back());
+
+ verify_networks();
+
+ sync_cout << "\n" << Eval::trace(p, *networks) << sync_endl;
+}
+
+const OptionsMap& Engine::get_options() const { return options; }
+OptionsMap& Engine::get_options() { return options; }
+
+std::string Engine::fen() const { return pos.fen(); }
+
+void Engine::flip() { pos.flip(); }
+
+std::string Engine::visualize() const {
+ std::stringstream ss;
+ ss << pos;
+ return ss.str();
+}
+
+int Engine::get_hashfull(int maxAge) const { return tt.hashfull(maxAge); }
+
+std::vector> Engine::get_bound_thread_count_by_numa_node() const {
+ auto counts = threads.get_bound_thread_count_by_numa_node();
+ const NumaConfig& cfg = numaContext.get_numa_config();
+ std::vector> ratios;
+ NumaIndex n = 0;
+ for (; n < counts.size(); ++n)
+ ratios.emplace_back(counts[n], cfg.num_cpus_in_numa_node(n));
+ if (!counts.empty())
+ for (; n < cfg.num_numa_nodes(); ++n)
+ ratios.emplace_back(0, cfg.num_cpus_in_numa_node(n));
+ return ratios;
+}
+
+std::string Engine::get_numa_config_as_string() const {
+ return numaContext.get_numa_config().to_string();
+}
+
+std::string Engine::numa_config_information_as_string() const {
+ auto cfgStr = get_numa_config_as_string();
+ return "Available processors: " + cfgStr;
+}
+
+std::string Engine::thread_binding_information_as_string() const {
+ auto boundThreadsByNode = get_bound_thread_count_by_numa_node();
+ std::stringstream ss;
+ if (boundThreadsByNode.empty())
+ return ss.str();
+
+ bool isFirst = true;
+
+ for (auto&& [current, total] : boundThreadsByNode)
+ {
+ if (!isFirst)
+ ss << ":";
+ ss << current << "/" << total;
+ isFirst = false;
+ }
+
+ return ss.str();
+}
+
+std::string Engine::thread_allocation_information_as_string() const {
+ std::stringstream ss;
+
+ size_t threadsSize = threads.size();
+ ss << "Using " << threadsSize << (threadsSize > 1 ? " threads" : " thread");
+
+ auto boundThreadsByNodeStr = thread_binding_information_as_string();
+ if (boundThreadsByNodeStr.empty())
+ return ss.str();
+
+ ss << " with NUMA node thread binding: ";
+ ss << boundThreadsByNodeStr;
+
+ return ss.str();
+}
+}
diff --git a/src/engine.h b/src/engine.h
new file mode 100644
index 0000000000000000000000000000000000000000..92d6282dcd6fb56dffd59279e1bd1ee4be283b86
--- /dev/null
+++ b/src/engine.h
@@ -0,0 +1,134 @@
+/*
+ Stockfish, a UCI chess playing engine derived from Glaurung 2.1
+ Copyright (C) 2004-2026 The Stockfish developers (see AUTHORS file)
+
+ Stockfish is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Stockfish is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+#ifndef ENGINE_H_INCLUDED
+#define ENGINE_H_INCLUDED
+
+#include
+#include
+#include
+#include