diff --git a/docs/tasarim/DESIGN.md b/docs/tasarim/DESIGN.md index 6363d72..6ec313d 100644 --- a/docs/tasarim/DESIGN.md +++ b/docs/tasarim/DESIGN.md @@ -352,7 +352,13 @@ aşağı kaymış, kare boyları farklı — ne tepeler ne bitişler hizalı.** Başlığın altında kurumun kimliği; navbar haplarının ölçüsünde: `inline-flex h-10 items-center gap-2 rounded-full border border-slate-200 bg-white px-4 text-sm font-semibold text-slate-800` + başta `size-4 text-primary` ikon (`Landmark` devlet, `Building2` vakıf, `MapPin` il). Tür -renkle değil ikonla ayrılır. Etkileşimli değildir; rozet (§4.2) değildir. +renkle değil ikonla ayrılır. Rozet (§4.2) değildir. Tür hapı etkileşimsizdir; **il hapı şehir +sayfasına link**tir (Bilal, 24 Eyl 2026: "şehirlerin geçtiği her yer tıklanabilir") — aynı +sınıf + `hover:border-orange-500 hover:bg-orange-50/60 hover:text-orange-500 active:scale-[0.97]`. +Kural genel: bir şehir adı nerede geçerse geçsin (`/universiteler` listesi, bölüm/sonuç/listem/ +tadımlık satırlarındaki tür-il-süre metası) `ilSayfaHref(il)` ile `/universiteler/[il]`'e +gider; satır metasında `SATIR_IKINCIL_LINK`. İstisna: satırın tamamı zaten link olan yerler +(URAP sıralaması, arama sonucu) — iç içe `` olmaz, orada düz metin kalır. ### 4.13 Piksel sıra şeridi — `PixelSira`, `src/components/pixel-decor.tsx` Bir sıranın (ör. 198 içinde 5.) yerini tek satır piksel şeridinde gösterir; sıranın düştüğü @@ -441,11 +447,29 @@ bulunulan şehir `border-primary bg-primary text-white` + `aria-current="page"`. - Çip satırında yalnız **2+ üniversiteli** şehirler (≈28) durur; 90'ı aşkın şehrin tamamı `/universiteler#tum-sehirler` altındaki A–Z üç sütunlu metin listesindedir (§1.1 "sık bakılan önde, ayrıntı bir dokunuş derinde"). Satırın sonunda "Tüm şehirler (N)" çipi. -- Şehir sayfası (`il-icerik.tsx`) katalog detay düzenindedir (§5.2): yol satırı, h1 +- Şehir sayfası (`il-icerik.tsx`) katalog detay düzenindedir (§5.2): yol satırı, **başlık + yüzeyi** (`SehirYuzeyi`: `relative isolate overflow-hidden rounded-3xl border border-slate-200 + bg-white p-6 sm:p-8`, `PikselZemin ton="acik"` seed 31, harita kabı `haric`), içinde h1 "İstanbul Üniversiteleri Taban Puanları 2026", kimlik hapları (`MapPin` il + üniversite - sayısı), özet paragraf, kompakt `CtaSiraForm`, `PagePixelDivider` (seed 71), devlet / - vakıf / KKTC-yurt dışı öbekleri (`UniLinkleri`), altta "Diğer şehirler" çipleri ve CTA - bandı. Şehir adı `trBaslikDuzeni` + tire sonrası baş harf (Bakü-Azerbaycan). + sayısı), özet paragraf; sağda (lg, 24rem sütun) ya da altta (telefon) **şehri temsil eden + piksel harita** `SehirPikselHaritasi`. Sonra kompakt `CtaSiraForm`, `PagePixelDivider` + (seed 71), devlet / vakıf / KKTC-yurt dışı öbekleri (`UniLinkleri`), "Diğer şehirler" + çipleri ve mavi CTA bandı. Şehir adı `trBaslikDuzeni` + tire sonrası baş harf + (Bakü-Azerbaycan). Bir üniversite programı olan her ilde sayılır (ODTÜ Ankara + KKTC). +- **Şehir piksel haritası** — `sehir-piksel-haritasi.tsx`: **hero'daki dot-matrix Türkiye'nin + kendisi** (Bilal, 24 Eyl 2026: ince taramalı ilk sürüm "oyunsu Apple/Duolingo hissine + uymuyor" diye geri alındı; seçenekler A/B/C arasından "A, pikseller C'deki gibi iri" + seçildi). Izgara 72 sütun × 31 satır (`scripts/il-izgara-uret.ts` → + `src/lib/il-izgara-verisi.ts`; her il en az 2×2 kare), kare hücrenin %74'ü, altı farklı + opaklık, kıyının altına seyrelen serpinti, `text-primary` zemin, imleç yaklaşınca turuncuya + ısınma (`usePixelHeat`). Bulunulan ilin kareleri `fill-orange-500`, hücrenin %88'i kadar + iri, 35 ms arayla belirir (`kt-piksel-belir`) ve grup hâlinde nabız atar (`animate-pulse` + 3.6 s); hareketi azalt açıkken dolu ve durağan. KKTC/yurt dışı: ülke kontürü mavi doku, + şehir merkezinde 2×2 hücrelik tek iri turuncu kare; şehri bilinmeyen "KIBRIS" için ülkenin + tamamı turuncu. Markup hero'daki gibi deterministik string (`dangerouslySetInnerHTML`). + `role="img"` + "İstanbul Türkiye haritasında". Üniversite sayfasının konum kartı + (`universite-konum-haritasi.tsx`) aynı bileşeni kullanır. Veri taşıyan pikseldir (§1.2), + süs ayraç yasağına girmez. ## 5. Yerleşim @@ -726,11 +750,17 @@ karar. sm:py-5` + ilk çocuk `PikselZemin`), kenarlık saydam kalır ki iki hâlin kutusu aynı olsun. Aynı sayfadaki iki band farklı `seed` alır. -**Piksel zemin yalnız CTA yüzeylerinde — `PikselZemin`, `src/components/piksel-zemin.tsx`** +**Piksel zemin yalnız CTA ve başlık yüzeylerinde — `PikselZemin`, `src/components/piksel-zemin.tsx`** (Bilal, 24 Eyl 2026: önce "her CTA benzeri kısmın arkasında olmalı", sonra "/sonuc'taki kartın -arkasına da piksel koymuşsun; pikseller CTA'larda olacak sadece"). CTA yüzeyi = renkli zeminli -çağrı yüzeyi: mavi `CtaBandi`, koyu kapanış kartı `PikselCtaYuzeyi`, arama penceresindeki koyu -kart. Beyaz içerik kartlarına (tadımlık, `/listem` üretim/kilit kartları, paket kartı, kaydet +arkasına da piksel koymuşsun; pikseller CTA'larda olacak sadece"). CTA yüzeyi = çağrı yüzeyi: +mavi `CtaBandi`, koyu kapanış kartı `PikselCtaYuzeyi`, arama penceresindeki koyu kart. +**Ton ikidir:** `ton="koyu"` (renkli zemin, beyaz kareler) ve `ton="acik"` (beyaz zemin, +`text-slate-400` kareler; turuncu vurgu kareleri aynı). Bilal (24 Eyl 2026): "her kısımda mavi +arka kullanmışsın, çeşitlendir; beyaz arka planda piksel de güzel görünüyor" — bu yüzden +`CtaBandi ton="beyaz"` (slate kenarlık, koyu yazı, paragraf `text-slate-600`) var ve aynı +sayfada iki bant üst üste gelmesin diye dönüşümlü kullanılır: `/universiteler` altı ve +`/meraklisina` kapanışı beyaz; şehir sayfası altı, `/sonuc` panelleri, çekmece altı mavi. +Şehir sayfasının başlık yüzeyi (§4.17) de açık tonlu piksel zemindir. Beyaz içerik kartlarına (tadımlık, `/listem` üretim/kilit kartları, paket kartı, kaydet bandı, katalog üstü kompakt satırın **form** hâli, boş durumlar, sıralama-yok sayfası) **konmaz** — 24 Eyl'de denendi ve geri alındı. Aynı kompakt satırın kayıtlı sıralamalı hâli ise formsuz tek butonlu bir çağrı olduğundan mavi banttır ve dokuyu alır (yukarıda). Kap `relative isolate overflow-hidden`; zemin ilk çocuk; kareler beyaz. diff --git a/scripts/il-izgara-uret.ts b/scripts/il-izgara-uret.ts new file mode 100644 index 0000000..e6119e9 --- /dev/null +++ b/scripts/il-izgara-uret.ts @@ -0,0 +1,170 @@ +// Şehir haritası (DESIGN.md §4.17) için il ve ülke kontürlerini hero'nun +// dot-matrix ızgarasına rasterize eder. Hero'daki TurkeyPixelMap 64 sütun; +// burada 72 sütun ki her il en az birkaç kare alsın (Yalova, Kilis gibi +// küçük iller için 2×2 blok garantisi vardır). Çıktı +// src/lib/il-izgara-verisi.ts dosyasına yazılır ve commit'lenir. +// +// Kaynak: turkey-map-react il path'leri (viewBox 1050×585, üstten 138 kırpık) +// ve harita-ulkeler-verisi.ts ülke kontürleri (1050×447). Hücre merkezi +// poligonun içindeyse hücre o ile aittir (ray casting; Bézier eğrileri uç +// noktalarıyla düzleştirilir — hücre ölçeğinde fark etmez). +// +// Çalıştırma: pnpm tsx scripts/il-izgara-uret.ts + +import fs from "node:fs"; +import path from "node:path"; +import { cities } from "turkey-map-react/lib/data"; +import { normalizeIlAdi, HARITA_UST_KIRPMA, HARITA_GENISLIK, HARITA_YUKSEKLIK } from "../src/lib/harita"; +import { ULKE_HARITALARI } from "../src/lib/harita-ulkeler-verisi"; + +const SUTUN = 72; +const HUCRE = HARITA_GENISLIK / SUTUN; +const YUKSEKLIK = HARITA_YUKSEKLIK - HARITA_UST_KIRPMA; // 447 +const SATIR = Math.ceil(YUKSEKLIK / HUCRE); + +type Nokta = [number, number]; +type Hucre = [number, number]; + +function poligonlar(d: string): Nokta[][] { + const toks = d.match(/[MLHVCZmlhvcz]|-?\d*\.?\d+(?:e-?\d+)?/g) ?? []; + const polys: Nokta[][] = []; + let cur: Nokta[] = []; + let x = 0; + let y = 0; + let cmd = ""; + let i = 0; + const num = () => Number(toks[i++]); + const kapat = () => { + if (cur.length > 2) polys.push(cur); + cur = []; + }; + while (i < toks.length) { + const t = toks[i]; + if (/[A-Za-z]/.test(t)) { + cmd = t; + i++; + if (cmd === "Z" || cmd === "z") kapat(); + continue; + } + switch (cmd) { + case "M": x = num(); y = num(); kapat(); cur = [[x, y]]; cmd = "L"; break; + case "m": x += num(); y += num(); kapat(); cur = [[x, y]]; cmd = "l"; break; + case "L": x = num(); y = num(); cur.push([x, y]); break; + case "l": x += num(); y += num(); cur.push([x, y]); break; + case "H": x = num(); cur.push([x, y]); break; + case "h": x += num(); cur.push([x, y]); break; + case "V": y = num(); cur.push([x, y]); break; + case "v": y += num(); cur.push([x, y]); break; + case "C": num(); num(); num(); num(); x = num(); y = num(); cur.push([x, y]); break; + case "c": num(); num(); num(); num(); x += num(); y += num(); cur.push([x, y]); break; + default: i++; + } + } + kapat(); + return polys; +} + +function icinde(px: number, py: number, poly: Nokta[]): boolean { + let ic = false; + for (let i = 0, j = poly.length - 1; i < poly.length; j = i++) { + const [xi, yi] = poly[i]; + const [xj, yj] = poly[j]; + if (yi > py !== yj > py && px < ((xj - xi) * (py - yi)) / (yj - yi) + xi) ic = !ic; + } + return ic; +} + +/** Her hücre merkezini ilk eşleşen bölgeye verir; sıra öncelik demektir. */ +function rasterize( + bolgeler: { ad: string; polys: Nokta[][] }[], + ustKirpma: number, +): Map { + const sonuc = new Map(); + for (let r = 0; r < SATIR; r++) { + for (let q = 0; q < SUTUN; q++) { + const px = (q + 0.5) * HUCRE; + const py = ustKirpma + (r + 0.5) * HUCRE; + const b = bolgeler.find((b) => b.polys.some((p) => icinde(px, py, p))); + if (!b) continue; + const liste = sonuc.get(b.ad) ?? []; + liste.push([q, r]); + sonuc.set(b.ad, liste); + } + } + return sonuc; +} + +// ---- Türkiye illeri +const iller = cities.map((c) => ({ ad: normalizeIlAdi(c.name), polys: poligonlar(c.path) })); +const ilHucre = rasterize(iller, HARITA_UST_KIRPMA); +// Küçük il garantisi: 4 hücreden azı olan il bbox merkezinde 2×2 blok alır, +// o hücreler komşulardan düşer. +for (const il of iller) { + const mevcut = ilHucre.get(il.ad) ?? []; + if (mevcut.length >= 4) continue; + const pts = il.polys.flat(); + const cx = (Math.min(...pts.map((p) => p[0])) + Math.max(...pts.map((p) => p[0]))) / 2; + const cy = (Math.min(...pts.map((p) => p[1])) + Math.max(...pts.map((p) => p[1]))) / 2; + const q0 = Math.min(SUTUN - 2, Math.max(0, Math.round(cx / HUCRE) - 1)); + const r0 = Math.min(SATIR - 2, Math.max(0, Math.round((cy - HARITA_UST_KIRPMA) / HUCRE) - 1)); + const blok: Hucre[] = [[q0, r0], [q0 + 1, r0], [q0, r0 + 1], [q0 + 1, r0 + 1]]; + const anahtar = new Set(blok.map(([q, r]) => `${q},${r}`)); + for (const [ad, liste] of ilHucre) { + if (ad === il.ad) continue; + ilHucre.set(ad, liste.filter(([q, r]) => !anahtar.has(`${q},${r}`))); + } + const birlesik = new Map(mevcut.map((h) => [`${h[0]},${h[1]}`, h])); + for (const h of blok) birlesik.set(`${h[0]},${h[1]}`, h); + ilHucre.set(il.ad, [...birlesik.values()]); +} + +// ---- Ülkeler (KKTC, yurt dışı): ülke öncelikli, bağlam ikincil +const ulkeHucre: Record = {}; +for (const [kod, harita] of Object.entries(ULKE_HARITALARI)) { + const r = rasterize( + [ + { ad: "ulke", polys: harita.ulke.flatMap(poligonlar) }, + { ad: "baglam", polys: harita.baglam.flatMap(poligonlar) }, + ], + 0, + ); + ulkeHucre[kod] = { ulke: r.get("ulke") ?? [], baglam: r.get("baglam") ?? [] }; +} + +const enKucuk = [...ilHucre.entries()].sort((a, b) => a[1].length - b[1].length).slice(0, 5); +console.log( + `${SUTUN}×${SATIR}, hücre ${HUCRE.toFixed(3)}; kara ${[...ilHucre.values()].reduce((a, b) => a + b.length, 0)}; en küçük: ${enKucuk.map(([a, l]) => `${a}:${l.length}`).join(" ")}`, +); + +const satirlar = [...ilHucre.entries()] + .sort((a, b) => a[0].localeCompare(b[0], "tr-TR")) + .map(([ad, liste]) => ` ${JSON.stringify(ad)}: ${JSON.stringify(liste)},`); +const ulkeSatirlar = Object.entries(ulkeHucre).map( + ([kod, v]) => ` ${JSON.stringify(kod)}: { ulke: ${JSON.stringify(v.ulke)}, baglam: ${JSON.stringify(v.baglam)} },`, +); +const cikti = `// Bu dosya scripts/il-izgara-uret.ts tarafından üretildi — elle düzenleme. +// Hero'nun dot-matrix ızgarasında (${SUTUN} sütun × ${SATIR} satır, hücre ${HUCRE.toFixed(4)} +// viewBox birimi) her ilin ve ülkenin kapladığı hücreler [sütun, satır]. + +import type { UlkeKodu } from "./harita-ulkeler-verisi"; + +export const IL_IZGARA = { + sutun: ${SUTUN}, + satir: ${SATIR}, + hucre: ${HUCRE.toFixed(4)}, +} as const; + +export type IzgaraHucre = readonly [number, number]; + +/** Anahtar DB biçiminde il adı (normalizeIlAdi). */ +export const IL_HUCRELERI: Record = { +${satirlar.join("\n")} +}; + +export const ULKE_HUCRELERI: Record = { +${ulkeSatirlar.join("\n")} +}; +`; +const hedef = path.join(process.cwd(), "src/lib/il-izgara-verisi.ts"); +fs.writeFileSync(hedef, cikti); +console.log("yazıldı:", hedef, `${(cikti.length / 1024).toFixed(0)} KB`); diff --git a/src/app/globals.css b/src/app/globals.css index b36c592..56dc64b 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -322,6 +322,31 @@ animation: kt-piksel-nabiz 0.42s cubic-bezier(0.23, 1, 0.32, 1); } +/* Şehir haritasında (sehir-piksel-haritasi.tsx) ilin kareleri sırayla + belirir; her karenin gecikmesi inline (35 ms × sıra). DESIGN.md §4.17. */ +@keyframes kt-piksel-belir { + from { + opacity: 0; + transform: scale(0.6); + } + to { + opacity: 1; + transform: scale(1); + } +} + +.kt-piksel-belir { + transform-box: fill-box; + transform-origin: center; + animation: kt-piksel-belir 0.42s cubic-bezier(0.23, 1, 0.32, 1) both; +} + +@media (prefers-reduced-motion: reduce) { + .kt-piksel-belir { + animation: none; + } +} + /* Bildirim (toast, sonner) — DESIGN.md §4.16. Başlık ve açıklama slate tonlarında okunur; aksiyon düğmesi üst çubuktaki koyu hap dilinde. ".toaster" öneki şart: sonner kendi stilini çalışma anında enjekte eder, diff --git a/src/features/katalog/components/il-icerik.tsx b/src/features/katalog/components/il-icerik.tsx index f0e69b2..897d74e 100644 --- a/src/features/katalog/components/il-icerik.tsx +++ b/src/features/katalog/components/il-icerik.tsx @@ -20,6 +20,8 @@ import { import { BASLIK_YILI, SON_YIL, TERCIH_YILI } from "@/lib/veri-yillari"; import { NavBaslik } from "./nav-baslik"; import { SehirCipleri, oneCikanIller } from "./sehir-cipleri"; +import { SehirPikselHaritasi } from "./sehir-piksel-haritasi"; +import { SehirYuzeyi } from "./sehir-yuzeyi"; import { UniLinkleri } from "./universite-listesi"; const sayi = (n: number) => n.toLocaleString("tr-TR"); @@ -123,39 +125,49 @@ export function IlIcerik({ slug }: { slug: string }) { -

- {il.ad} Üniversiteleri Taban Puanları {BASLIK_YILI} -

+ {/* Başlık yüzeyi: beyaz kart + slate piksel doku, şehrin dot-matrix + haritası (DESIGN.md §4.17). lg altında metin ortalı, harita altta. */} + } + metin={ +
+

+ {il.ad} Üniversiteleri Taban Puanları {BASLIK_YILI} +

- {/* Kimlik hapları (DESIGN.md §4.12): il + üniversite sayısı */} -

- - - {il.ad} - - - {devlet.length >= vakif.length ? ( - - ) : ( - - )} - {sayi(il.uniler.length)} üniversite - -

+ {/* Kimlik hapları (DESIGN.md §4.12): il + üniversite sayısı */} +

+ + + {il.ad} + + + {devlet.length >= vakif.length ? ( + + ) : ( + + )} + {sayi(il.uniler.length)} üniversite + +

-

- {il.ad}'da {SON_YIL} YKS yerleştirmesinde öğrenci alan{" "} - {sayi(il.uniler.length)} üniversite - {ozetParcalar.length > 1 ? ` (${ozetParcalar.join(", ")})` : ""} ve - toplam {sayi(il.programSayisi)} program var. - Üniversiteye tıklayınca programlarının taban puanlarını, başarı - sıralamalarını ve kontenjanlarını fakülte fakülte görürsün. Veriler - YÖK Atlas {SON_YIL} yerleştirme sonuçlarına dayanır; {TERCIH_YILI}{" "} - tercihleri için rehber niteliğindedir. -

+

+ {il.ad}'da {SON_YIL} YKS yerleştirmesinde öğrenci alan{" "} + {sayi(il.uniler.length)} üniversite + {ozetParcalar.length > 1 ? ` (${ozetParcalar.join(", ")})` : ""}{" "} + ve toplam {sayi(il.programSayisi)} program var. + Üniversiteye tıklayınca programlarının taban puanlarını, başarı + sıralamalarını ve kontenjanlarını fakülte fakülte görürsün. + Veriler YÖK Atlas {SON_YIL} yerleştirme sonuçlarına dayanır;{" "} + {TERCIH_YILI} tercihleri için rehber niteliğindedir. +

+
+ } + />
@@ -196,12 +208,7 @@ export function IlIcerikSkeleton() { return (
- -
- - -
- +
{Array.from({ length: 6 }, (_, i) => ( diff --git a/src/features/katalog/components/sehir-piksel-haritasi.tsx b/src/features/katalog/components/sehir-piksel-haritasi.tsx new file mode 100644 index 0000000..608a52f --- /dev/null +++ b/src/features/katalog/components/sehir-piksel-haritasi.tsx @@ -0,0 +1,225 @@ +"use client"; + +/** + * Şehri temsil eden piksel harita (DESIGN.md §4.17) — hero'daki dot-matrix + * Türkiye'nin (turkey-pixel-map.tsx) şehir sayfası ve üniversite konum kartı + * için genellenmiş hâli. Aynı dil: iri kareler, altı farklı opaklık, kıyının + * altına seyrelen serpinti, imleç yaklaşınca turuncuya ısınan pikseller + * (usePixelHeat). Fark: ızgara 72 sütun (her il en az 2×2 kare) ve + * bulunulan ilin kareleri turuncu, hücrenin %88'i kadar iri (Bilal, 24 Eyl + * 2026: "C'deki gibi piksel olabilir"), sırayla belirir ve nabız atar. + * + * Markup hero'daki gibi deterministik string olarak üretilir ve + * dangerouslySetInnerHTML ile basılır: ~1300 rect React elemanı olarak + * hydrate edilmez; server ve client aynı çıktıyı verir. + */ + +import { useRef } from "react"; +import { usePixelHeat } from "@/components/use-pixel-heat"; +import { ilUlkeHaritasi, type UlkeKodu } from "@/lib/harita-ulkeler"; +import { + IL_HUCRELERI, + IL_IZGARA, + ULKE_HUCRELERI, + type IzgaraHucre, +} from "@/lib/il-izgara-verisi"; +import { cn } from "@/lib/utils"; + +const { sutun: SUTUN, satir: SATIR, hucre: CELL } = IL_IZGARA; +const DOT = CELL * 0.74; +const INSET = (CELL - DOT) / 2; +// Vurgu kareleri iri ve dolu (C seçeneğinin hissi) +const DOT_VURGU = CELL * 0.88; +const INSET_VURGU = (CELL - DOT_VURGU) / 2; +// Güney kıyının altına seyrelerek dağılan serpinti derinliği (hücre) +const SERPINTI = 5; +const VIEW_W = SUTUN * CELL; +const VIEW_H = (SATIR + SERPINTI) * CELL; +// Hero'nun ısı fırçası 640 birimlik viewBox'ta 34; burada aynı oran. +const ISI_YARICAPI = 34 * (VIEW_W / 640); + +const OPACITIES = [0.3, 0.16, 0.24, 0.12, 0.27, 0.19]; +const opacityFor = (x: number, y: number) => + OPACITIES[(x * 7 + y * 11) % OPACITIES.length]; +const VURGU_OPACITIES = [1, 0.9, 0.82, 0.95]; +const vurguOpacityFor = (x: number, y: number) => + VURGU_OPACITIES[(x * 3 + y * 5) % VURGU_OPACITIES.length]; + +// Deterministik sözde-rastgele (hero ile aynı): server ve client aynı deseni üretir +const hash = (x: number, y: number, seed = 0) => { + const n = Math.sin(x * 127.1 + y * 311.7 + seed * 74.7) * 43758.5453; + return n - Math.floor(n); +}; + +const f = (n: number) => n.toFixed(2); + +function zeminKare(q: number, r: number, op: number) { + return ``; +} + +function vurguKare(q: number, r: number, i: number) { + return ``; +} + +/** + * Zemin (mavi doku) + vurgu (turuncu) hücrelerinden statik SVG içi markup. + * `isaret`: ülke haritasında şehir merkezi — 2×2 hücrelik tek iri kare. + */ +function markupUret( + zemin: readonly IzgaraHucre[], + vurgu: readonly IzgaraHucre[], + isaret: IzgaraHucre | null, +): string { + const parts: string[] = []; + const vurguSet = new Set(vurgu.map(([q, r]) => `${q},${r}`)); + const enAlt: number[] = Array(SUTUN).fill(-1); + for (const [q, r] of zemin) { + if (vurguSet.has(`${q},${r}`)) continue; + parts.push(zeminKare(q, r, opacityFor(q, r))); + if (r > enAlt[q]) enAlt[q] = r; + } + for (const [q, r] of vurgu) if (r > enAlt[q]) enAlt[q] = r; + // Kıyının altına serpinti (hero ile aynı kural): kıyıdan uzaklaştıkça + // seyrelen, derinlikle sönen kareler; ısı fırçasına katılırlar. + for (let q = 0; q < SUTUN; q++) { + if (enAlt[q] < 0) continue; + for (let d = 1; d <= SERPINTI; d++) { + const r = enAlt[q] + d; + if (r >= SATIR + SERPINTI) break; + const density = 0.05 + 0.4 * (1 - (d - 1) / SERPINTI) ** 2; + if (hash(q, r) > density) continue; + const op = Math.round(opacityFor(q, r) * (1 - d / (SERPINTI + 1)) * 100) / 100; + parts.push(zeminKare(q, r, op)); + } + } + // Vurgu: sırayla belirir (kt-piksel-belir), grup hâlinde nabız atar + parts.push( + ``, + ); + vurgu.forEach(([q, r], i) => parts.push(vurguKare(q, r, i))); + if (isaret) { + const [q, r] = isaret; + const boy = 2 * CELL - 2 * INSET_VURGU; + parts.push( + ``, + ); + } + parts.push(""); + return parts.join(""); +} + +const onbellek = new Map(); +function markup(anahtar: string, uret: () => string): string { + let m = onbellek.get(anahtar); + if (!m) { + m = uret(); + onbellek.set(anahtar, m); + } + return m; +} + +function PikselSvg({ + html, + etiket, + className, +}: { + html: string; + etiket: string; + className?: string; +}) { + const svgRef = useRef(null); + usePixelHeat(svgRef, { radius: ISI_YARICAPI }); + return ( + + ); +} + +const TUM_IL_HUCRELERI = Object.values(IL_HUCRELERI).flat(); + +/** Türkiye; `il` (DB biçimi, ör. "İZMİR") turuncu karelerle yanar. */ +export function TurkiyePikselHaritasi({ + il, + etiket, + className, +}: { + il: string; + etiket: string; + className?: string; +}) { + const html = markup(`tr:${il}`, () => + markupUret(TUM_IL_HUCRELERI, IL_HUCRELERI[il] ?? [], null), + ); + return ; +} + +/** + * Ülke (KKTC, yurt dışı). Şehir konumu verilirse ülke mavi kalır ve şehirde + * 2×2 hücrelik iri turuncu kare durur; verilmezse ülkenin tamamı turuncu. + */ +export function UlkePikselHaritasi({ + ulke, + sehir, + etiket, + className, +}: { + ulke: UlkeKodu; + /** viewBox koordinatı (harita-ulkeler'deki proje ile) */ + sehir: { x: number; y: number } | null; + etiket: string; + className?: string; +}) { + const html = markup( + `ulke:${ulke}:${sehir ? `${Math.round(sehir.x)},${Math.round(sehir.y)}` : "-"}`, + () => { + const h = ULKE_HUCRELERI[ulke]; + if (sehir) { + const q = Math.min(SUTUN - 2, Math.max(0, Math.round(sehir.x / CELL) - 1)); + const r = Math.min(SATIR - 2, Math.max(0, Math.round(sehir.y / CELL) - 1)); + return markupUret([...h.baglam, ...h.ulke], [], [q, r]); + } + return markupUret(h.baglam, h.ulke, null); + }, + ); + return ; +} + +/** Şehir sayfası: il değerinden Türkiye ya da ülke haritasını seçer. */ +export function SehirPikselHaritasi({ + il, + ad, + className, +}: { + /** DB biçiminde il ("İSTANBUL", "LEFKOŞA", "KIBRIS") */ + il: string; + /** Görünen ad (etiket için) */ + ad: string; + className?: string; +}) { + if (IL_HUCRELERI[il]) { + return ( + + ); + } + const ulke = ilUlkeHaritasi(il); + if (!ulke) return null; + return ( + + ); +} diff --git a/src/features/katalog/components/sehir-yuzeyi.tsx b/src/features/katalog/components/sehir-yuzeyi.tsx new file mode 100644 index 0000000..94f5e54 --- /dev/null +++ b/src/features/katalog/components/sehir-yuzeyi.tsx @@ -0,0 +1,35 @@ +"use client"; + +import { useRef, type ReactNode } from "react"; +import { PikselZemin } from "@/components/piksel-zemin"; + +/** + * Şehir sayfasının başlık yüzeyi (DESIGN.md §4.17): beyaz kart, slate + * piksel doku, sağda (lg) ya da altta (telefon) şehrin dot-matrix haritası. + * Doku ile harita üst üste binmez: harita kabı `haric` ile zemine verilir + * (§10.8 kuralı). Yalnız ref için client; metin ve harita sunucudan gelir. + */ +export function SehirYuzeyi({ + metin, + harita, + seed = 31, +}: { + metin: ReactNode; + harita: ReactNode; + seed?: number; +}) { + const haritaRef = useRef(null); + return ( +
+ +
+
{metin}
+ {harita ? ( +
+ {harita} +
+ ) : null} +
+
+ ); +} diff --git a/src/features/katalog/components/universite-konum-haritasi.tsx b/src/features/katalog/components/universite-konum-haritasi.tsx index f50311f..1caec36 100644 --- a/src/features/katalog/components/universite-konum-haritasi.tsx +++ b/src/features/katalog/components/universite-konum-haritasi.tsx @@ -1,20 +1,20 @@ +import { normalizeIlAdi } from "@/lib/harita"; +import { uniUlkeKonum, yurtdisiUniKonum } from "@/lib/harita-ulkeler"; import { cities } from "turkey-map-react/lib/data"; import { - HARITA_GENISLIK, - HARITA_UST_KIRPMA, - HARITA_YUKSEKLIK, - normalizeIlAdi, -} from "@/lib/harita"; -import { - ULKE_HARITA_GENISLIK, - ULKE_HARITA_YUKSEKLIK, - uniUlkeKonum, - type UlkeKonum, -} from "@/lib/harita-ulkeler"; + TurkiyePikselHaritasi, + UlkePikselHaritasi, +} from "./sehir-piksel-haritasi"; -const SECILI_DOLGU = "oklch(0.809 0.105 251.8)"; -const ZEMIN_DOLGU = "oklch(0.929 0.013 255.5)"; +// Harita il adları modül yükünde bir kez DB biçimine çevrilir. +const HARITA_ILLERI = new Set(cities.map((c) => normalizeIlAdi(c.name))); +/** + * Üniversite sayfasındaki konum kartı: şehir sayfasıyla aynı dot-matrix + * harita (DESIGN.md §4.17; Bilal, 24 Eyl 2026: "bu kart kısmına piksel + * dokuları ekle"). Türkiye'de il turuncu noktalarla yanar; KKTC/yurt dışında + * ülke kontürü + kampüs şehrinde iri turuncu piksel. + */ export function UniversiteKonumHaritasi({ universite, il, @@ -24,9 +24,15 @@ export function UniversiteKonumHaritasi({ }) { const yurtdisi = uniUlkeKonum(universite, il); if (yurtdisi) { + const konum = yurtdisiUniKonum(universite, il); return ( - +

{yurtdisi.ulkeAd} {yurtdisi.sehir ? ` · ${yurtdisi.sehir}` : ""} @@ -35,31 +41,15 @@ export function UniversiteKonumHaritasi({ ); } - if (!il) return null; + if (!il || !HARITA_ILLERI.has(il)) return null; return ( - - {cities.map((city) => { - const secili = il ? normalizeIlAdi(city.name) === il : false; - return ( - - {city.name} - - ); - })} - + /> ); } @@ -83,30 +73,3 @@ function KonumBolumu({ ); } - -function UlkeHaritasi({ - universite, - konum, -}: { - universite: string; - konum: UlkeKonum; -}) { - const { harita, ulkeAd, sehir } = konum; - return ( - - {harita.baglam.map((d, i) => ( - - ))} - {harita.ulke.map((d, i) => ( - - {ulkeAd} - - ))} - - ); -} diff --git a/src/lib/il-izgara-verisi.ts b/src/lib/il-izgara-verisi.ts new file mode 100644 index 0000000..66b969a --- /dev/null +++ b/src/lib/il-izgara-verisi.ts @@ -0,0 +1,108 @@ +// Bu dosya scripts/il-izgara-uret.ts tarafından üretildi — elle düzenleme. +// Hero'nun dot-matrix ızgarasında (72 sütun × 31 satır, hücre 14.5833 +// viewBox birimi) her ilin ve ülkenin kapladığı hücreler [sütun, satır]. + +import type { UlkeKodu } from "./harita-ulkeler-verisi"; + +export const IL_IZGARA = { + sutun: 72, + satir: 31, + hucre: 14.5833, +} as const; + +export type IzgaraHucre = readonly [number, number]; + +/** Anahtar DB biçiminde il adı (normalizeIlAdi). */ +export const IL_HUCRELERI: Record = { + "ADANA": [[38,19],[38,20],[37,21],[38,21],[34,22],[35,22],[36,22],[37,22],[34,23],[35,23],[36,23],[37,23],[34,24],[35,24],[36,24],[37,24],[35,25],[36,25],[37,25],[34,26],[35,26],[36,26]], + "ADIYAMAN": [[46,20],[47,20],[48,20],[44,21],[45,21],[46,21],[47,21],[48,21],[44,22],[45,22]], + "AFYONKARAHİSAR": [[17,15],[18,15],[19,15],[20,15],[21,15],[16,16],[17,16],[18,16],[19,16],[20,16],[21,16],[16,17],[17,17],[18,17],[19,17],[20,17],[21,17],[16,18],[17,18],[18,18],[16,19],[17,19],[15,20],[16,20]], + "AĞRI": [[61,11],[62,11],[63,11],[64,11],[65,11],[61,12],[62,12],[63,12],[64,12],[65,12],[66,12],[67,12],[62,13],[63,13],[65,13],[62,14],[63,14]], + "AKSARAY": [[30,16],[30,17],[31,17],[28,18],[29,18],[30,18],[31,18],[28,19],[29,19],[30,19],[31,19],[28,20],[29,20],[30,20]], + "AMASYA": [[35,7],[36,7],[37,7],[38,7],[36,8],[37,8],[38,8],[39,8],[36,9]], + "ANKARA": [[25,8],[26,8],[24,9],[25,9],[26,9],[27,9],[20,10],[21,10],[22,10],[23,10],[24,10],[25,10],[26,10],[27,10],[28,10],[29,10],[23,11],[24,11],[25,11],[26,11],[27,11],[28,11],[23,12],[24,12],[25,12],[26,12],[27,12],[24,13],[25,13],[26,13],[27,13],[24,14],[25,14],[26,14],[27,14],[28,14],[23,15],[24,15],[25,15],[29,15],[29,16]], + "ANTALYA": [[16,23],[19,23],[20,23],[21,23],[15,24],[16,24],[17,24],[18,24],[19,24],[20,24],[21,24],[22,24],[15,25],[16,25],[17,25],[19,25],[20,25],[21,25],[22,25],[23,25],[14,26],[15,26],[16,26],[17,26],[22,26],[23,26],[24,26],[13,27],[14,27],[15,27],[16,27],[24,27],[24,28]], + "ARDAHAN": [[61,3],[61,4],[62,4],[61,5],[62,5],[63,5],[60,6],[61,6],[62,6]], + "ARTVİN": [[57,4],[58,4],[59,4],[60,4],[57,5],[58,5],[59,5],[60,5],[57,6],[58,6],[57,7],[58,7]], + "AYDIN": [[9,19],[10,19],[6,20],[7,20],[8,20],[9,20],[10,20],[6,21],[7,21],[8,21],[9,21],[10,21]], + "BALIKESİR": [[8,9],[9,9],[8,10],[9,10],[5,11],[6,11],[7,11],[8,11],[9,11],[10,11],[5,12],[6,12],[7,12],[8,12],[9,12],[10,12],[11,12],[12,12],[9,13],[10,13],[11,13]], + "BARTIN": [[25,3],[26,3],[25,4],[26,4]], + "BATMAN": [[57,18],[58,18],[57,19],[57,20],[57,21],[58,21]], + "BAYBURT": [[52,9],[53,9],[51,10],[52,10],[53,10]], + "BİLECİK": [[16,9],[17,9],[18,9],[16,10],[17,10],[18,10],[16,11]], + "BİNGÖL": [[54,13],[53,14],[54,14],[55,14],[56,14],[54,15],[55,15],[56,15],[54,16],[55,16],[56,16],[53,17],[54,17],[55,17]], + "BİTLİS": [[63,15],[60,16],[61,16],[58,17],[59,17],[60,17],[59,18],[60,18],[61,18],[62,18],[61,19],[62,19]], + "BOLU": [[22,7],[23,7],[24,7],[25,7],[20,8],[21,8],[22,8],[23,8],[24,8],[19,9],[20,9],[21,9],[22,9],[23,9]], + "BURDUR": [[15,21],[16,21],[17,21],[14,22],[15,22],[16,22],[17,22],[18,22],[14,23],[15,23],[17,23],[18,23],[14,24]], + "BURSA": [[15,8],[10,9],[11,9],[12,9],[13,9],[14,9],[15,9],[10,10],[11,10],[12,10],[13,10],[14,10],[15,10],[12,11],[13,11]], + "ÇANAKKALE": [[5,7],[5,8],[6,8],[7,8],[4,9],[5,9],[6,9],[7,9],[3,10],[4,10],[5,10],[6,10],[7,10],[3,11],[4,11]], + "ÇANKIRI": [[26,7],[27,7],[28,7],[29,7],[27,8],[28,8],[29,8],[30,8],[28,9],[29,9],[30,9]], + "ÇORUM": [[32,5],[32,6],[33,6],[34,6],[31,7],[32,7],[33,7],[34,7],[31,8],[32,8],[33,8],[34,8],[35,8],[31,9],[32,9],[33,9],[34,9],[35,9],[31,10],[32,10],[33,10],[34,10]], + "DENİZLİ": [[15,18],[11,19],[12,19],[13,19],[14,19],[15,19],[12,20],[13,20],[14,20],[11,21],[12,21],[13,21],[14,21],[11,22],[12,22],[13,22],[12,23],[13,23],[12,24]], + "DİYARBAKIR": [[56,17],[52,18],[53,18],[54,18],[55,18],[56,18],[50,19],[51,19],[52,19],[53,19],[54,19],[55,19],[56,19],[50,20],[51,20],[52,20],[53,20],[54,20],[55,20],[56,20],[52,21],[53,21],[54,21],[55,21],[52,22],[53,22]], + "DÜZCE": [[20,6],[21,6],[22,6],[20,7],[21,7]], + "EDİRNE": [[5,1],[6,1],[5,2],[6,2],[5,3],[4,4],[5,4],[4,5],[3,6],[4,6]], + "ELAZIĞ": [[52,15],[52,16],[53,16],[47,17],[48,17],[49,17],[52,17],[47,18],[48,18],[49,18],[50,18],[51,18]], + "ERZİNCAN": [[47,11],[48,11],[52,11],[53,11],[47,12],[48,12],[49,12],[50,12],[51,12],[52,12],[53,12],[54,12],[47,13],[48,13],[49,13],[50,13],[47,14],[47,15]], + "ERZURUM": [[59,6],[56,7],[59,7],[60,7],[55,8],[56,8],[57,8],[58,8],[59,8],[60,8],[54,9],[55,9],[56,9],[57,9],[58,9],[59,9],[54,10],[55,10],[56,10],[57,10],[58,10],[59,10],[60,10],[54,11],[55,11],[56,11],[57,11],[58,11],[59,11],[60,11],[55,12],[56,12],[57,12],[58,12],[59,12],[60,12],[55,13],[56,13],[57,13],[58,13],[59,13],[60,13],[59,14]], + "ESKİŞEHİR": [[18,11],[19,11],[20,11],[21,11],[22,11],[17,12],[18,12],[19,12],[20,12],[21,12],[22,12],[18,13],[19,13],[20,13],[21,13],[22,13],[23,13],[18,14],[19,14],[20,14],[21,14],[22,14],[23,14]], + "GAZİANTEP": [[44,23],[41,24],[42,24],[43,24],[44,24],[40,25],[43,25],[44,25]], + "GİRESUN": [[45,7],[46,7],[47,7],[48,7],[45,8],[46,8],[47,8],[46,9],[47,9],[48,9],[46,10],[47,10]], + "GÜMÜŞHANE": [[48,8],[49,8],[50,8],[51,8],[49,9],[50,9],[51,9],[48,10],[49,10],[50,10],[50,11]], + "HAKKARİ": [[67,20],[69,20],[65,21],[66,21],[67,21],[68,21],[69,21],[65,22],[66,22],[67,22],[68,22],[69,22]], + "HATAY": [[38,25],[39,26],[38,27],[39,27],[37,28],[38,28],[39,28],[38,29],[38,30]], + "IĞDIR": [[64,10],[65,10],[66,10],[67,10]], + "ISPARTA": [[19,18],[20,18],[18,19],[19,19],[20,19],[17,20],[18,20],[19,20],[20,20],[18,21],[19,21],[20,21],[19,22],[20,22]], + "İSTANBUL": [[10,4],[11,4],[12,4],[11,5],[12,5],[13,5],[14,5],[15,5],[14,6]], + "İZMİR": [[5,13],[6,13],[5,14],[6,14],[5,15],[3,16],[5,16],[3,17],[4,17],[5,17],[6,17],[7,17],[5,18],[6,18],[7,18],[8,18],[9,18],[6,19],[8,19]], + "KAHRAMANMARAŞ": [[41,18],[42,18],[40,19],[41,19],[42,19],[43,19],[39,20],[40,20],[41,20],[42,20],[43,20],[39,21],[40,21],[41,21],[42,21],[43,21],[39,22],[40,22],[41,22],[42,22],[39,23],[40,23],[41,23],[42,23]], + "KARABÜK": [[27,4],[25,5],[26,5],[25,6],[26,6]], + "KARAMAN": [[29,22],[27,23],[28,23],[29,23],[26,24],[27,24],[28,24],[29,24],[30,24],[26,25],[27,25],[25,26],[26,26],[25,27],[26,27]], + "KARS": [[63,6],[64,6],[62,7],[63,7],[64,7],[61,8],[62,8],[63,8],[64,8],[60,9],[61,9],[62,9],[63,9],[64,9],[61,10],[62,10]], + "KASTAMONU": [[28,2],[29,2],[30,2],[31,2],[27,3],[28,3],[29,3],[30,3],[31,3],[28,4],[29,4],[30,4],[31,4],[32,4],[27,5],[28,5],[29,5],[30,5],[31,5],[28,6],[29,6],[30,6],[31,6]], + "KAYSERİ": [[36,15],[37,15],[35,16],[36,16],[37,16],[38,16],[39,16],[40,16],[35,17],[36,17],[37,17],[38,17],[39,17],[40,17],[34,18],[35,18],[36,18],[37,18],[38,18],[39,18],[40,18],[34,19],[35,19],[36,19],[37,19],[35,20],[36,20],[35,21]], + "KIRIKKALE": [[30,10],[29,11],[30,11],[28,12],[29,12],[30,12],[29,13]], + "KIRKLARELİ": [[7,0],[7,1],[8,1],[9,1],[7,2],[8,2],[9,2],[10,2],[6,3],[7,3],[8,3]], + "KIRŞEHİR": [[30,13],[31,13],[32,13],[29,14],[30,14],[31,14],[32,14],[30,15],[31,15],[32,15],[31,16]], + "KİLİS": [[41,25],[42,26],[42,25],[41,26]], + "KOCAELİ": [[15,6],[16,6],[17,6],[16,7],[17,7]], + "KONYA": [[22,15],[26,15],[27,15],[22,16],[23,16],[24,16],[25,16],[26,16],[27,16],[22,17],[23,17],[24,17],[25,17],[26,17],[27,17],[21,18],[22,18],[23,18],[24,18],[25,18],[26,18],[27,18],[22,19],[23,19],[24,19],[25,19],[26,19],[27,19],[22,20],[23,20],[24,20],[25,20],[26,20],[27,20],[22,21],[23,21],[24,21],[25,21],[26,21],[27,21],[28,21],[29,21],[30,21],[31,21],[21,22],[22,22],[23,22],[24,22],[25,22],[26,22],[27,22],[28,22],[30,22],[31,22],[23,23],[24,23],[25,23],[26,23],[30,23],[31,23],[23,24],[24,24],[25,24],[24,25],[25,25]], + "KÜTAHYA": [[14,11],[15,11],[13,12],[14,12],[15,12],[16,12],[12,13],[13,13],[14,13],[15,13],[16,13],[17,13],[12,14],[13,14],[14,14],[15,14],[16,14],[17,14],[13,15],[14,15],[15,15],[16,15]], + "MALATYA": [[46,15],[44,16],[45,16],[46,16],[47,16],[43,17],[44,17],[45,17],[46,17],[43,18],[44,18],[45,18],[46,18],[44,19],[45,19],[46,19],[47,19],[48,19],[44,20],[45,20]], + "MANİSA": [[7,13],[8,13],[7,14],[8,14],[9,14],[11,14],[6,15],[7,15],[8,15],[9,15],[10,15],[11,15],[12,15],[6,16],[7,16],[8,16],[9,16],[10,16],[11,16],[8,17],[9,17],[10,17],[11,17],[10,18],[11,18]], + "MARDİN": [[54,22],[55,22],[56,22],[58,22],[53,23],[54,23],[55,23],[56,23],[57,23],[58,23],[53,24],[54,24],[55,24]], + "MERSİN": [[32,24],[33,24],[29,25],[30,25],[31,25],[32,25],[33,25],[34,25],[27,26],[28,26],[29,26],[30,26],[31,26],[32,26],[27,27],[28,27],[29,27],[30,27],[25,28],[26,28],[27,28],[28,28],[29,28],[30,28]], + "MUĞLA": [[7,22],[8,22],[9,22],[10,22],[6,23],[7,23],[8,23],[9,23],[10,23],[11,23],[9,24],[10,24],[11,24],[8,25],[11,25],[12,25],[13,25],[14,25],[12,26],[13,26]], + "MUŞ": [[57,14],[60,14],[61,14],[57,15],[58,15],[59,15],[60,15],[61,15],[57,16],[58,16],[59,16]], + "NEVŞEHİR": [[33,14],[33,15],[32,16],[33,16],[32,17],[33,17],[32,18],[33,18]], + "NİĞDE": [[32,19],[33,19],[31,20],[32,20],[33,20],[34,20],[32,21],[33,21],[34,21],[32,22],[33,22],[32,23]], + "ORDU": [[42,6],[41,7],[42,7],[43,7],[44,7],[43,8],[44,8],[44,9]], + "OSMANİYE": [[38,22],[38,23],[38,24],[39,24],[39,25]], + "RİZE": [[55,5],[56,5],[54,6],[55,6],[54,7],[55,7]], + "SAKARYA": [[18,6],[19,6],[18,7],[19,7],[17,8],[18,8],[19,8]], + "SAMSUN": [[36,4],[37,4],[38,4],[34,5],[35,5],[36,5],[37,5],[38,5],[40,5],[35,6],[36,6],[37,6],[38,6],[39,6],[40,6]], + "SİİRT": [[59,19],[60,19],[58,20],[59,20],[60,20],[61,20],[62,20],[60,21]], + "SİNOP": [[32,2],[33,2],[34,2],[33,3],[34,3],[35,3],[33,4],[34,4],[35,4],[33,5]], + "SİVAS": [[45,9],[41,10],[43,10],[44,10],[45,10],[40,11],[41,11],[42,11],[43,11],[44,11],[45,11],[46,11],[38,12],[39,12],[40,12],[41,12],[42,12],[43,12],[44,12],[45,12],[46,12],[38,13],[39,13],[40,13],[41,13],[42,13],[43,13],[44,13],[45,13],[38,14],[39,14],[40,14],[41,14],[42,14],[43,14],[44,14],[45,14],[46,14],[38,15],[39,15],[40,15],[41,15],[42,15],[43,15],[44,15],[45,15],[41,16],[42,16],[41,17],[42,17]], + "ŞANLIURFA": [[49,21],[50,21],[51,21],[48,22],[49,22],[50,22],[51,22],[45,23],[46,23],[47,23],[48,23],[49,23],[50,23],[51,23],[52,23],[45,24],[46,24],[47,24],[48,24],[49,24],[50,24],[51,24],[52,24],[46,25],[47,25],[48,25],[49,25],[50,25],[51,25],[52,25],[53,25],[48,26],[49,26],[50,26]], + "ŞIRNAK": [[62,21],[63,21],[64,21],[59,22],[60,22],[61,22],[62,22],[63,22],[64,22],[59,23],[60,23],[61,23]], + "TEKİRDAĞ": [[9,3],[10,3],[6,4],[7,4],[8,4],[9,4],[6,5],[7,5],[8,5],[9,5],[6,6],[7,6]], + "TOKAT": [[40,7],[40,8],[41,8],[37,9],[38,9],[39,9],[40,9],[41,9],[42,9],[43,9],[36,10],[37,10],[38,10],[39,10],[40,10],[38,11],[39,11]], + "TRABZON": [[49,6],[50,6],[49,7],[50,7],[51,7],[52,7],[53,7],[53,8]], + "TUNCELİ": [[51,13],[52,13],[53,13],[48,14],[49,14],[50,14],[51,14],[48,15],[49,15],[50,15],[51,15],[50,16]], + "UŞAK": [[13,16],[14,16],[15,16],[12,17],[13,17],[14,17],[12,18],[13,18]], + "VAN": [[64,13],[66,13],[64,14],[65,14],[66,14],[67,14],[65,15],[66,15],[67,15],[64,16],[65,16],[66,16],[67,16],[65,17],[66,17],[67,17],[63,18],[64,18],[65,18],[66,18],[67,18],[68,18],[63,19],[64,19],[65,19],[66,19],[67,19],[63,20],[64,20],[65,20],[66,20],[68,20]], + "YALOVA": [[13,7],[14,7],[13,8],[14,8]], + "YOZGAT": [[35,10],[33,11],[34,11],[35,11],[36,11],[37,11],[32,12],[33,12],[34,12],[35,12],[36,12],[37,12],[33,13],[34,13],[35,13],[36,13],[37,13],[34,14],[35,14],[36,14],[37,14],[34,15],[35,15]], + "ZONGULDAK": [[23,4],[24,4],[22,5],[23,5],[24,5]], +}; + +export const ULKE_HUCRELERI: Record = { + "kktc": { ulke: [[57,2],[58,2],[55,3],[56,3],[53,4],[54,4],[55,4],[50,5],[51,5],[52,5],[53,5],[54,5],[49,6],[50,6],[51,6],[52,6],[47,7],[48,7],[49,7],[50,7],[51,7],[44,8],[45,8],[46,8],[47,8],[48,8],[49,8],[26,9],[41,9],[42,9],[43,9],[44,9],[45,9],[46,9],[47,9],[48,9],[26,10],[27,10],[28,10],[29,10],[30,10],[31,10],[32,10],[33,10],[34,10],[35,10],[36,10],[37,10],[38,10],[39,10],[40,10],[41,10],[42,10],[43,10],[44,10],[45,10],[46,10],[47,10],[26,11],[27,11],[28,11],[29,11],[30,11],[31,11],[32,11],[33,11],[34,11],[35,11],[36,11],[37,11],[38,11],[39,11],[40,11],[41,11],[42,11],[43,11],[44,11],[45,11],[26,12],[27,12],[28,12],[29,12],[30,12],[31,12],[32,12],[33,12],[34,12],[35,12],[36,12],[37,12],[38,12],[39,12],[40,12],[41,12],[42,12],[43,12],[44,12],[26,13],[27,13],[28,13],[29,13],[30,13],[31,13],[32,13],[33,13],[34,13],[35,13],[36,13],[37,13],[38,13],[39,13],[40,13],[41,13],[42,13],[43,13],[44,13],[22,14],[25,14],[26,14],[27,14],[28,14],[29,14],[33,14],[36,14],[37,14],[38,14],[39,14],[40,14],[41,14],[42,14],[43,14],[44,14],[24,15],[25,15],[26,15],[36,15],[37,15],[38,15],[39,15],[40,15],[41,15],[42,15],[43,15],[44,15],[45,15],[24,16],[37,16],[38,16],[39,16],[40,16],[41,16],[42,16],[43,16],[44,16],[46,16],[40,17],[42,17]], baglam: [[18,14],[19,14],[20,14],[21,14],[30,14],[31,14],[32,14],[34,14],[35,14],[18,15],[19,15],[20,15],[21,15],[22,15],[23,15],[27,15],[28,15],[29,15],[30,15],[31,15],[32,15],[33,15],[34,15],[35,15],[13,16],[17,16],[18,16],[19,16],[20,16],[21,16],[22,16],[23,16],[25,16],[26,16],[27,16],[28,16],[29,16],[30,16],[31,16],[32,16],[33,16],[34,16],[35,16],[36,16],[45,16],[13,17],[14,17],[15,17],[16,17],[17,17],[18,17],[19,17],[20,17],[21,17],[22,17],[23,17],[24,17],[25,17],[26,17],[27,17],[28,17],[29,17],[30,17],[31,17],[32,17],[33,17],[34,17],[35,17],[36,17],[37,17],[38,17],[39,17],[41,17],[43,17],[44,17],[45,17],[46,17],[47,17],[14,18],[15,18],[16,18],[17,18],[18,18],[19,18],[20,18],[21,18],[22,18],[23,18],[24,18],[25,18],[26,18],[27,18],[28,18],[29,18],[30,18],[31,18],[32,18],[33,18],[34,18],[35,18],[36,18],[37,18],[38,18],[39,18],[40,18],[41,18],[42,18],[43,18],[44,18],[45,18],[46,18],[47,18],[48,18],[14,19],[15,19],[16,19],[17,19],[18,19],[19,19],[20,19],[21,19],[22,19],[23,19],[24,19],[25,19],[26,19],[27,19],[28,19],[29,19],[30,19],[31,19],[32,19],[33,19],[34,19],[35,19],[36,19],[37,19],[38,19],[39,19],[40,19],[44,19],[14,20],[15,20],[16,20],[17,20],[18,20],[19,20],[20,20],[21,20],[22,20],[23,20],[24,20],[25,20],[26,20],[27,20],[28,20],[29,20],[30,20],[31,20],[32,20],[33,20],[34,20],[35,20],[36,20],[37,20],[38,20],[39,20],[14,21],[15,21],[16,21],[17,21],[18,21],[19,21],[20,21],[21,21],[22,21],[23,21],[24,21],[25,21],[26,21],[27,21],[28,21],[29,21],[30,21],[31,21],[32,21],[33,21],[34,21],[35,21],[36,21],[37,21],[38,21],[39,21],[15,22],[16,22],[17,22],[18,22],[19,22],[20,22],[21,22],[22,22],[23,22],[24,22],[25,22],[26,22],[27,22],[28,22],[29,22],[30,22],[31,22],[32,22],[33,22],[34,22],[35,22],[36,22],[37,22],[38,22],[39,22],[16,23],[17,23],[18,23],[19,23],[20,23],[21,23],[22,23],[23,23],[24,23],[25,23],[26,23],[27,23],[28,23],[29,23],[30,23],[31,23],[32,23],[33,23],[34,23],[35,23],[36,23],[37,23],[16,24],[17,24],[18,24],[19,24],[20,24],[21,24],[22,24],[23,24],[24,24],[25,24],[26,24],[27,24],[28,24],[29,24],[30,24],[31,24],[32,24],[33,24],[34,24],[17,25],[18,25],[19,25],[20,25],[21,25],[22,25],[23,25],[24,25],[25,25],[26,25],[27,25],[28,25],[29,25],[30,25],[31,25],[32,25],[20,26],[21,26],[22,26],[23,26],[25,26],[26,26],[27,26],[26,27],[27,27],[26,28],[27,28]] }, + "azerbaycan": { ulke: [[28,2],[41,2],[27,3],[28,3],[29,3],[30,3],[40,3],[41,3],[28,4],[29,4],[30,4],[31,4],[32,4],[39,4],[40,4],[41,4],[42,4],[21,5],[22,5],[29,5],[30,5],[31,5],[32,5],[38,5],[39,5],[40,5],[41,5],[42,5],[43,5],[20,6],[21,6],[22,6],[23,6],[30,6],[31,6],[32,6],[33,6],[37,6],[38,6],[39,6],[40,6],[41,6],[42,6],[43,6],[21,7],[22,7],[23,7],[24,7],[25,7],[26,7],[27,7],[30,7],[31,7],[32,7],[33,7],[34,7],[35,7],[36,7],[37,7],[38,7],[39,7],[40,7],[41,7],[42,7],[43,7],[44,7],[21,8],[22,8],[23,8],[24,8],[25,8],[26,8],[27,8],[28,8],[29,8],[30,8],[31,8],[32,8],[33,8],[34,8],[35,8],[36,8],[37,8],[38,8],[39,8],[40,8],[41,8],[42,8],[43,8],[44,8],[23,9],[24,9],[25,9],[26,9],[27,9],[28,9],[29,9],[30,9],[31,9],[32,9],[33,9],[34,9],[35,9],[36,9],[37,9],[38,9],[39,9],[40,9],[41,9],[42,9],[43,9],[44,9],[45,9],[23,10],[24,10],[25,10],[26,10],[27,10],[28,10],[29,10],[30,10],[31,10],[32,10],[33,10],[34,10],[35,10],[36,10],[37,10],[38,10],[39,10],[40,10],[41,10],[42,10],[43,10],[44,10],[45,10],[46,10],[22,11],[23,11],[24,11],[25,11],[26,11],[27,11],[28,11],[29,11],[30,11],[31,11],[32,11],[33,11],[34,11],[35,11],[36,11],[37,11],[38,11],[39,11],[40,11],[41,11],[42,11],[43,11],[44,11],[45,11],[46,11],[23,12],[24,12],[25,12],[26,12],[27,12],[28,12],[29,12],[30,12],[31,12],[32,12],[33,12],[34,12],[35,12],[36,12],[37,12],[38,12],[39,12],[40,12],[41,12],[42,12],[43,12],[44,12],[45,12],[46,12],[47,12],[48,12],[49,12],[50,12],[24,13],[25,13],[26,13],[27,13],[28,13],[29,13],[30,13],[31,13],[32,13],[33,13],[34,13],[35,13],[36,13],[37,13],[38,13],[39,13],[40,13],[41,13],[42,13],[43,13],[44,13],[45,13],[46,13],[47,13],[48,13],[49,13],[50,13],[51,13],[26,14],[27,14],[28,14],[29,14],[30,14],[31,14],[32,14],[33,14],[34,14],[35,14],[36,14],[37,14],[38,14],[39,14],[40,14],[41,14],[42,14],[43,14],[44,14],[45,14],[46,14],[47,14],[26,15],[27,15],[28,15],[29,15],[30,15],[31,15],[32,15],[33,15],[34,15],[35,15],[36,15],[37,15],[38,15],[39,15],[40,15],[41,15],[42,15],[43,15],[44,15],[45,15],[46,15],[23,16],[24,16],[25,16],[26,16],[27,16],[28,16],[29,16],[30,16],[31,16],[32,16],[33,16],[34,16],[35,16],[36,16],[37,16],[38,16],[39,16],[40,16],[41,16],[42,16],[43,16],[44,16],[45,16],[46,16],[25,17],[26,17],[27,17],[28,17],[29,17],[30,17],[31,17],[32,17],[33,17],[34,17],[35,17],[36,17],[37,17],[38,17],[39,17],[40,17],[41,17],[42,17],[43,17],[44,17],[45,17],[20,18],[26,18],[27,18],[28,18],[29,18],[30,18],[31,18],[32,18],[33,18],[34,18],[35,18],[36,18],[37,18],[38,18],[39,18],[40,18],[41,18],[42,18],[43,18],[44,18],[45,18],[19,19],[20,19],[28,19],[29,19],[30,19],[31,19],[32,19],[33,19],[34,19],[35,19],[38,19],[39,19],[40,19],[41,19],[42,19],[43,19],[44,19],[45,19],[20,20],[21,20],[22,20],[23,20],[24,20],[29,20],[30,20],[31,20],[32,20],[33,20],[39,20],[40,20],[41,20],[42,20],[43,20],[44,20],[21,21],[22,21],[23,21],[24,21],[29,21],[30,21],[31,21],[32,21],[39,21],[40,21],[41,21],[42,21],[43,21],[44,21],[21,22],[22,22],[23,22],[24,22],[25,22],[29,22],[30,22],[31,22],[38,22],[39,22],[40,22],[41,22],[42,22],[43,22],[44,22],[22,23],[23,23],[24,23],[25,23],[29,23],[30,23],[39,23],[40,23],[41,23],[42,23],[24,24],[25,24],[29,24],[39,24],[40,24],[41,24],[42,24],[38,25],[39,25],[40,25],[41,25],[42,25],[39,26],[40,26],[41,26],[42,26],[40,27],[41,27],[42,27],[41,28]], baglam: [] }, + "kirgizistan": { ulke: [[32,2],[33,2],[30,3],[31,3],[32,3],[33,3],[34,3],[35,3],[30,4],[31,4],[32,4],[33,4],[34,4],[35,4],[36,4],[37,4],[41,4],[42,4],[43,4],[44,4],[45,4],[46,4],[47,4],[48,4],[49,4],[50,4],[51,4],[52,4],[53,4],[54,4],[18,5],[19,5],[20,5],[21,5],[22,5],[23,5],[30,5],[31,5],[32,5],[33,5],[34,5],[35,5],[36,5],[37,5],[38,5],[39,5],[40,5],[41,5],[42,5],[43,5],[44,5],[45,5],[46,5],[47,5],[48,5],[49,5],[50,5],[51,5],[52,5],[53,5],[54,5],[55,5],[56,5],[57,5],[17,6],[18,6],[19,6],[20,6],[21,6],[22,6],[23,6],[24,6],[25,6],[26,6],[29,6],[30,6],[31,6],[32,6],[33,6],[34,6],[35,6],[36,6],[37,6],[38,6],[39,6],[40,6],[41,6],[42,6],[43,6],[44,6],[45,6],[46,6],[47,6],[48,6],[49,6],[50,6],[51,6],[52,6],[53,6],[54,6],[55,6],[56,6],[57,6],[58,6],[17,7],[18,7],[19,7],[20,7],[21,7],[22,7],[23,7],[24,7],[25,7],[26,7],[27,7],[28,7],[29,7],[30,7],[31,7],[32,7],[33,7],[34,7],[35,7],[36,7],[37,7],[38,7],[39,7],[40,7],[41,7],[42,7],[43,7],[44,7],[45,7],[46,7],[47,7],[48,7],[49,7],[50,7],[51,7],[52,7],[53,7],[54,7],[55,7],[56,7],[57,7],[58,7],[59,7],[60,7],[61,7],[18,8],[19,8],[20,8],[21,8],[22,8],[23,8],[24,8],[25,8],[26,8],[27,8],[28,8],[29,8],[30,8],[31,8],[32,8],[33,8],[34,8],[35,8],[36,8],[37,8],[38,8],[39,8],[40,8],[41,8],[42,8],[43,8],[44,8],[45,8],[46,8],[47,8],[48,8],[49,8],[50,8],[51,8],[52,8],[53,8],[54,8],[55,8],[56,8],[57,8],[58,8],[59,8],[60,8],[61,8],[62,8],[18,9],[19,9],[20,9],[21,9],[22,9],[23,9],[24,9],[25,9],[26,9],[27,9],[28,9],[29,9],[30,9],[31,9],[32,9],[33,9],[34,9],[35,9],[36,9],[37,9],[38,9],[39,9],[40,9],[41,9],[42,9],[43,9],[44,9],[45,9],[46,9],[47,9],[48,9],[49,9],[50,9],[51,9],[52,9],[53,9],[54,9],[55,9],[56,9],[57,9],[58,9],[59,9],[60,9],[61,9],[62,9],[63,9],[16,10],[17,10],[18,10],[19,10],[20,10],[21,10],[22,10],[23,10],[24,10],[25,10],[26,10],[27,10],[28,10],[29,10],[30,10],[31,10],[32,10],[33,10],[34,10],[35,10],[36,10],[37,10],[38,10],[39,10],[40,10],[41,10],[42,10],[43,10],[44,10],[45,10],[46,10],[47,10],[48,10],[49,10],[50,10],[51,10],[52,10],[53,10],[54,10],[55,10],[56,10],[57,10],[58,10],[59,10],[60,10],[15,11],[16,11],[17,11],[18,11],[19,11],[20,11],[21,11],[22,11],[23,11],[24,11],[25,11],[26,11],[27,11],[28,11],[29,11],[30,11],[31,11],[32,11],[33,11],[34,11],[35,11],[36,11],[37,11],[38,11],[39,11],[40,11],[41,11],[42,11],[43,11],[44,11],[45,11],[46,11],[47,11],[48,11],[49,11],[50,11],[51,11],[52,11],[53,11],[54,11],[55,11],[56,11],[57,11],[58,11],[59,11],[14,12],[15,12],[16,12],[17,12],[18,12],[19,12],[20,12],[21,12],[22,12],[23,12],[24,12],[25,12],[26,12],[27,12],[28,12],[29,12],[30,12],[31,12],[32,12],[33,12],[34,12],[35,12],[36,12],[37,12],[38,12],[39,12],[40,12],[41,12],[42,12],[43,12],[44,12],[45,12],[46,12],[47,12],[48,12],[49,12],[50,12],[51,12],[52,12],[53,12],[54,12],[55,12],[56,12],[14,13],[15,13],[16,13],[17,13],[18,13],[19,13],[21,13],[22,13],[23,13],[24,13],[25,13],[26,13],[27,13],[28,13],[29,13],[30,13],[31,13],[32,13],[33,13],[34,13],[35,13],[36,13],[37,13],[38,13],[39,13],[40,13],[41,13],[42,13],[43,13],[44,13],[45,13],[46,13],[47,13],[48,13],[49,13],[50,13],[51,13],[52,13],[53,13],[54,13],[16,14],[17,14],[18,14],[19,14],[21,14],[22,14],[23,14],[24,14],[25,14],[26,14],[27,14],[28,14],[29,14],[30,14],[31,14],[32,14],[33,14],[34,14],[35,14],[36,14],[37,14],[38,14],[39,14],[40,14],[41,14],[42,14],[43,14],[44,14],[45,14],[46,14],[47,14],[48,14],[49,14],[50,14],[51,14],[52,14],[53,14],[17,15],[18,15],[22,15],[23,15],[24,15],[25,15],[26,15],[27,15],[28,15],[29,15],[30,15],[31,15],[32,15],[33,15],[34,15],[35,15],[36,15],[37,15],[38,15],[39,15],[40,15],[41,15],[42,15],[43,15],[44,15],[45,15],[46,15],[47,15],[48,15],[49,15],[50,15],[51,15],[52,15],[53,15],[23,16],[24,16],[25,16],[26,16],[27,16],[28,16],[29,16],[30,16],[31,16],[32,16],[33,16],[34,16],[35,16],[36,16],[37,16],[38,16],[39,16],[40,16],[41,16],[42,16],[43,16],[44,16],[45,16],[46,16],[47,16],[48,16],[49,16],[50,16],[52,16],[25,17],[26,17],[27,17],[28,17],[29,17],[30,17],[31,17],[32,17],[33,17],[34,17],[35,17],[36,17],[37,17],[38,17],[39,17],[40,17],[41,17],[42,17],[43,17],[44,17],[45,17],[27,18],[28,18],[29,18],[30,18],[31,18],[32,18],[33,18],[34,18],[35,18],[36,18],[37,18],[38,18],[39,18],[40,18],[41,18],[42,18],[43,18],[44,18],[26,19],[27,19],[28,19],[29,19],[30,19],[31,19],[32,19],[33,19],[34,19],[35,19],[36,19],[37,19],[38,19],[39,19],[40,19],[41,19],[42,19],[43,19],[44,19],[23,20],[24,20],[25,20],[26,20],[27,20],[28,20],[29,20],[30,20],[31,20],[32,20],[33,20],[34,20],[35,20],[37,20],[41,20],[42,20],[43,20],[44,20],[18,21],[22,21],[23,21],[24,21],[25,21],[26,21],[27,21],[28,21],[29,21],[30,21],[31,21],[32,21],[33,21],[34,21],[35,21],[11,22],[12,22],[16,22],[17,22],[18,22],[19,22],[20,22],[21,22],[22,22],[23,22],[24,22],[25,22],[26,22],[27,22],[28,22],[29,22],[30,22],[31,22],[32,22],[33,22],[10,23],[11,23],[12,23],[13,23],[14,23],[15,23],[16,23],[17,23],[18,23],[19,23],[20,23],[21,23],[22,23],[23,23],[24,23],[25,23],[26,23],[27,23],[28,23],[29,23],[30,23],[31,23],[9,24],[10,24],[11,24],[12,24],[13,24],[14,24],[15,24],[16,24],[17,24],[18,24],[19,24],[20,24],[21,24],[22,24],[23,24],[24,24],[25,24],[26,24],[27,24],[28,24],[29,24],[30,24],[31,24],[9,25],[10,25],[11,25],[12,25],[13,25],[14,25],[15,25],[16,25],[17,25],[18,25],[19,25],[20,25],[21,25],[22,25],[23,25],[24,25],[25,25],[26,25],[27,25],[28,25],[29,25],[30,25],[31,25],[9,26],[11,26],[13,26],[15,26],[16,26],[17,26],[18,26],[20,26],[21,26],[22,26],[23,26],[24,26],[25,26],[26,26],[27,26],[28,26],[29,26],[30,26],[31,26],[21,27],[22,27],[23,27],[24,27],[25,27],[26,27],[27,27],[28,27],[23,28]], baglam: [] }, + "kazakistan": { ulke: [[38,2],[39,2],[40,2],[34,3],[35,3],[36,3],[37,3],[38,3],[39,3],[40,3],[29,4],[30,4],[31,4],[32,4],[33,4],[34,4],[35,4],[36,4],[37,4],[38,4],[39,4],[40,4],[41,4],[42,4],[43,4],[46,4],[47,4],[29,5],[30,5],[31,5],[32,5],[33,5],[34,5],[35,5],[36,5],[37,5],[38,5],[39,5],[40,5],[41,5],[42,5],[43,5],[44,5],[45,5],[46,5],[47,5],[48,5],[29,6],[30,6],[31,6],[32,6],[33,6],[34,6],[35,6],[36,6],[37,6],[38,6],[39,6],[40,6],[41,6],[42,6],[43,6],[44,6],[45,6],[46,6],[47,6],[48,6],[49,6],[29,7],[30,7],[31,7],[32,7],[33,7],[34,7],[35,7],[36,7],[37,7],[38,7],[39,7],[40,7],[41,7],[42,7],[43,7],[44,7],[45,7],[46,7],[47,7],[48,7],[49,7],[28,8],[29,8],[30,8],[31,8],[32,8],[33,8],[34,8],[35,8],[36,8],[37,8],[38,8],[39,8],[40,8],[41,8],[42,8],[43,8],[44,8],[45,8],[46,8],[47,8],[48,8],[49,8],[50,8],[15,9],[16,9],[17,9],[18,9],[19,9],[29,9],[30,9],[31,9],[32,9],[33,9],[34,9],[35,9],[36,9],[37,9],[38,9],[39,9],[40,9],[41,9],[42,9],[43,9],[44,9],[45,9],[46,9],[47,9],[48,9],[49,9],[50,9],[51,9],[14,10],[15,10],[16,10],[17,10],[18,10],[19,10],[20,10],[21,10],[23,10],[24,10],[25,10],[26,10],[27,10],[28,10],[29,10],[30,10],[31,10],[32,10],[33,10],[34,10],[35,10],[36,10],[37,10],[38,10],[39,10],[40,10],[41,10],[42,10],[43,10],[44,10],[45,10],[46,10],[47,10],[48,10],[49,10],[50,10],[51,10],[52,10],[53,10],[54,10],[55,10],[56,10],[12,11],[14,11],[15,11],[16,11],[17,11],[18,11],[19,11],[20,11],[21,11],[22,11],[23,11],[24,11],[25,11],[26,11],[27,11],[28,11],[29,11],[30,11],[31,11],[32,11],[33,11],[34,11],[35,11],[36,11],[37,11],[38,11],[39,11],[40,11],[41,11],[42,11],[43,11],[44,11],[45,11],[46,11],[47,11],[48,11],[49,11],[50,11],[51,11],[52,11],[53,11],[54,11],[55,11],[56,11],[57,11],[12,12],[13,12],[14,12],[15,12],[16,12],[17,12],[18,12],[19,12],[20,12],[21,12],[22,12],[23,12],[24,12],[25,12],[26,12],[27,12],[28,12],[29,12],[30,12],[31,12],[32,12],[33,12],[34,12],[35,12],[36,12],[37,12],[38,12],[39,12],[40,12],[41,12],[42,12],[43,12],[44,12],[45,12],[46,12],[47,12],[48,12],[49,12],[50,12],[51,12],[52,12],[53,12],[54,12],[55,12],[56,12],[57,12],[58,12],[12,13],[13,13],[14,13],[15,13],[16,13],[17,13],[18,13],[19,13],[20,13],[21,13],[22,13],[23,13],[24,13],[25,13],[26,13],[27,13],[28,13],[29,13],[30,13],[31,13],[32,13],[33,13],[34,13],[35,13],[36,13],[37,13],[38,13],[39,13],[40,13],[41,13],[42,13],[43,13],[44,13],[45,13],[46,13],[47,13],[48,13],[49,13],[50,13],[51,13],[52,13],[53,13],[54,13],[55,13],[56,13],[57,13],[58,13],[59,13],[11,14],[12,14],[13,14],[14,14],[15,14],[16,14],[17,14],[18,14],[19,14],[20,14],[21,14],[22,14],[23,14],[24,14],[25,14],[26,14],[27,14],[28,14],[29,14],[30,14],[31,14],[32,14],[33,14],[34,14],[35,14],[36,14],[37,14],[38,14],[39,14],[40,14],[41,14],[42,14],[43,14],[44,14],[45,14],[46,14],[47,14],[48,14],[49,14],[50,14],[51,14],[52,14],[53,14],[54,14],[55,14],[56,14],[57,14],[58,14],[59,14],[12,15],[13,15],[14,15],[15,15],[16,15],[17,15],[18,15],[19,15],[20,15],[21,15],[22,15],[23,15],[24,15],[25,15],[26,15],[27,15],[28,15],[29,15],[30,15],[31,15],[32,15],[33,15],[34,15],[35,15],[36,15],[37,15],[38,15],[39,15],[40,15],[41,15],[42,15],[43,15],[44,15],[45,15],[46,15],[47,15],[48,15],[49,15],[50,15],[51,15],[52,15],[53,15],[54,15],[55,15],[56,15],[57,15],[58,15],[14,16],[15,16],[16,16],[17,16],[18,16],[19,16],[20,16],[21,16],[22,16],[23,16],[24,16],[25,16],[26,16],[27,16],[28,16],[29,16],[30,16],[31,16],[32,16],[33,16],[34,16],[35,16],[36,16],[37,16],[38,16],[39,16],[40,16],[41,16],[42,16],[43,16],[44,16],[45,16],[46,16],[47,16],[48,16],[49,16],[50,16],[51,16],[52,16],[53,16],[54,16],[55,16],[56,16],[57,16],[58,16],[14,17],[15,17],[19,17],[20,17],[21,17],[22,17],[23,17],[24,17],[25,17],[26,17],[27,17],[28,17],[29,17],[30,17],[31,17],[32,17],[33,17],[34,17],[35,17],[36,17],[37,17],[38,17],[39,17],[40,17],[41,17],[42,17],[43,17],[44,17],[45,17],[46,17],[47,17],[48,17],[49,17],[50,17],[51,17],[52,17],[53,17],[54,17],[55,17],[19,18],[20,18],[21,18],[22,18],[23,18],[24,18],[25,18],[26,18],[27,18],[28,18],[29,18],[30,18],[31,18],[32,18],[33,18],[34,18],[35,18],[36,18],[37,18],[38,18],[39,18],[40,18],[41,18],[42,18],[43,18],[44,18],[45,18],[46,18],[47,18],[48,18],[49,18],[50,18],[51,18],[52,18],[53,18],[54,18],[19,19],[20,19],[21,19],[22,19],[23,19],[24,19],[25,19],[26,19],[27,19],[28,19],[29,19],[30,19],[31,19],[32,19],[33,19],[34,19],[35,19],[36,19],[37,19],[38,19],[39,19],[40,19],[41,19],[42,19],[43,19],[44,19],[45,19],[46,19],[47,19],[48,19],[49,19],[50,19],[51,19],[52,19],[53,19],[54,19],[17,20],[18,20],[19,20],[20,20],[21,20],[22,20],[23,20],[27,20],[28,20],[29,20],[30,20],[31,20],[32,20],[33,20],[34,20],[35,20],[36,20],[37,20],[38,20],[39,20],[40,20],[41,20],[42,20],[43,20],[44,20],[45,20],[46,20],[47,20],[48,20],[49,20],[50,20],[51,20],[52,20],[54,20],[17,21],[18,21],[19,21],[20,21],[21,21],[22,21],[28,21],[29,21],[30,21],[31,21],[32,21],[33,21],[34,21],[35,21],[36,21],[37,21],[38,21],[39,21],[40,21],[41,21],[42,21],[43,21],[44,21],[45,21],[46,21],[47,21],[48,21],[49,21],[50,21],[51,21],[16,22],[17,22],[18,22],[19,22],[20,22],[21,22],[22,22],[29,22],[30,22],[31,22],[32,22],[33,22],[34,22],[35,22],[36,22],[37,22],[38,22],[39,22],[40,22],[41,22],[42,22],[43,22],[44,22],[45,22],[46,22],[47,22],[48,22],[49,22],[50,22],[51,22],[17,23],[18,23],[19,23],[20,23],[21,23],[22,23],[34,23],[35,23],[36,23],[37,23],[38,23],[39,23],[40,23],[41,23],[42,23],[43,23],[44,23],[45,23],[46,23],[47,23],[48,23],[49,23],[50,23],[51,23],[52,23],[18,24],[19,24],[20,24],[21,24],[22,24],[35,24],[36,24],[37,24],[38,24],[39,24],[40,24],[41,24],[42,24],[43,24],[46,24],[47,24],[48,24],[49,24],[50,24],[51,24],[19,25],[20,25],[21,25],[22,25],[35,25],[36,25],[37,25],[38,25],[39,25],[40,25],[18,26],[21,26],[22,26],[36,26],[37,26],[38,26],[39,26],[22,27],[36,27],[37,27],[38,27],[37,28]], baglam: [] }, + "bosna-hersek": { ulke: [[23,2],[28,2],[30,2],[31,2],[23,3],[24,3],[27,3],[28,3],[29,3],[30,3],[31,3],[32,3],[33,3],[34,3],[35,3],[36,3],[38,3],[40,3],[22,4],[23,4],[24,4],[25,4],[27,4],[28,4],[29,4],[30,4],[31,4],[32,4],[33,4],[34,4],[35,4],[36,4],[37,4],[38,4],[39,4],[40,4],[41,4],[42,4],[43,4],[22,5],[23,5],[24,5],[25,5],[26,5],[27,5],[28,5],[29,5],[30,5],[31,5],[32,5],[33,5],[34,5],[35,5],[36,5],[37,5],[38,5],[39,5],[40,5],[41,5],[42,5],[43,5],[22,6],[23,6],[24,6],[25,6],[26,6],[27,6],[28,6],[29,6],[30,6],[31,6],[32,6],[33,6],[34,6],[35,6],[36,6],[37,6],[38,6],[39,6],[40,6],[41,6],[42,6],[43,6],[44,6],[45,6],[46,6],[47,6],[23,7],[24,7],[25,7],[26,7],[27,7],[28,7],[29,7],[30,7],[31,7],[32,7],[33,7],[34,7],[35,7],[36,7],[37,7],[38,7],[39,7],[40,7],[41,7],[42,7],[43,7],[44,7],[45,7],[46,7],[47,7],[24,8],[25,8],[26,8],[27,8],[28,8],[29,8],[30,8],[31,8],[32,8],[33,8],[34,8],[35,8],[36,8],[37,8],[38,8],[39,8],[40,8],[41,8],[42,8],[43,8],[44,8],[45,8],[46,8],[25,9],[26,9],[27,9],[28,9],[29,9],[30,9],[31,9],[32,9],[33,9],[34,9],[35,9],[36,9],[37,9],[38,9],[39,9],[40,9],[41,9],[42,9],[43,9],[44,9],[45,9],[25,10],[26,10],[27,10],[28,10],[29,10],[30,10],[31,10],[32,10],[33,10],[34,10],[35,10],[36,10],[37,10],[38,10],[39,10],[40,10],[41,10],[42,10],[43,10],[44,10],[45,10],[25,11],[26,11],[27,11],[28,11],[29,11],[30,11],[31,11],[32,11],[33,11],[34,11],[35,11],[36,11],[37,11],[38,11],[39,11],[40,11],[41,11],[42,11],[43,11],[44,11],[45,11],[46,11],[26,12],[27,12],[28,12],[29,12],[30,12],[31,12],[32,12],[33,12],[34,12],[35,12],[36,12],[37,12],[38,12],[39,12],[40,12],[41,12],[42,12],[43,12],[44,12],[45,12],[46,12],[47,12],[26,13],[27,13],[28,13],[29,13],[30,13],[31,13],[32,13],[33,13],[34,13],[35,13],[36,13],[37,13],[38,13],[39,13],[40,13],[41,13],[42,13],[43,13],[44,13],[45,13],[46,13],[47,13],[48,13],[27,14],[28,14],[29,14],[30,14],[31,14],[32,14],[33,14],[34,14],[35,14],[36,14],[37,14],[38,14],[39,14],[40,14],[41,14],[42,14],[43,14],[44,14],[45,14],[46,14],[48,14],[49,14],[28,15],[29,15],[30,15],[31,15],[32,15],[33,15],[34,15],[35,15],[36,15],[37,15],[38,15],[39,15],[40,15],[41,15],[42,15],[43,15],[44,15],[45,15],[46,15],[47,15],[29,16],[30,16],[31,16],[32,16],[33,16],[34,16],[35,16],[36,16],[37,16],[38,16],[39,16],[40,16],[41,16],[42,16],[43,16],[44,16],[45,16],[46,16],[47,16],[30,17],[31,17],[32,17],[33,17],[34,17],[35,17],[36,17],[37,17],[38,17],[39,17],[40,17],[41,17],[42,17],[43,17],[44,17],[45,17],[46,17],[47,17],[48,17],[31,18],[32,18],[33,18],[34,18],[35,18],[36,18],[37,18],[38,18],[39,18],[40,18],[41,18],[42,18],[43,18],[44,18],[45,18],[46,18],[47,18],[48,18],[32,19],[33,19],[34,19],[35,19],[36,19],[37,19],[38,19],[39,19],[40,19],[41,19],[42,19],[43,19],[44,19],[33,20],[34,20],[35,20],[36,20],[37,20],[38,20],[39,20],[40,20],[41,20],[42,20],[43,20],[44,20],[45,20],[33,21],[34,21],[35,21],[36,21],[37,21],[38,21],[39,21],[40,21],[41,21],[42,21],[43,21],[45,21],[34,22],[35,22],[36,22],[37,22],[38,22],[39,22],[40,22],[41,22],[42,22],[35,23],[36,23],[37,23],[38,23],[39,23],[40,23],[41,23],[42,23],[36,24],[37,24],[38,24],[39,24],[40,24],[41,24],[37,25],[38,25],[39,25],[40,25],[41,25],[38,26],[39,26],[40,26],[41,26],[39,27],[40,27],[41,27],[41,28]], baglam: [] }, + "makedonya": { ulke: [[42,2],[36,3],[37,3],[38,3],[39,3],[40,3],[41,3],[42,3],[43,3],[44,3],[31,4],[32,4],[33,4],[34,4],[35,4],[36,4],[37,4],[38,4],[39,4],[40,4],[41,4],[42,4],[43,4],[44,4],[45,4],[27,5],[28,5],[30,5],[31,5],[32,5],[33,5],[34,5],[35,5],[36,5],[37,5],[38,5],[39,5],[40,5],[41,5],[42,5],[43,5],[44,5],[45,5],[24,6],[25,6],[26,6],[27,6],[28,6],[30,6],[31,6],[32,6],[33,6],[34,6],[35,6],[36,6],[37,6],[38,6],[39,6],[40,6],[41,6],[42,6],[43,6],[44,6],[45,6],[46,6],[23,7],[24,7],[25,7],[26,7],[27,7],[28,7],[29,7],[30,7],[31,7],[32,7],[33,7],[34,7],[35,7],[36,7],[37,7],[38,7],[39,7],[40,7],[41,7],[42,7],[43,7],[44,7],[45,7],[46,7],[47,7],[48,7],[23,8],[24,8],[25,8],[26,8],[27,8],[28,8],[29,8],[30,8],[31,8],[32,8],[33,8],[34,8],[35,8],[36,8],[37,8],[38,8],[39,8],[40,8],[41,8],[42,8],[43,8],[44,8],[45,8],[46,8],[47,8],[48,8],[49,8],[50,8],[23,9],[24,9],[25,9],[26,9],[27,9],[28,9],[29,9],[30,9],[31,9],[32,9],[33,9],[34,9],[35,9],[36,9],[37,9],[38,9],[39,9],[40,9],[41,9],[42,9],[43,9],[44,9],[45,9],[46,9],[47,9],[48,9],[49,9],[50,9],[23,10],[24,10],[25,10],[26,10],[27,10],[28,10],[29,10],[30,10],[31,10],[32,10],[33,10],[34,10],[35,10],[36,10],[37,10],[38,10],[39,10],[40,10],[41,10],[42,10],[43,10],[44,10],[45,10],[46,10],[47,10],[48,10],[49,10],[50,10],[20,11],[21,11],[22,11],[23,11],[24,11],[25,11],[26,11],[27,11],[28,11],[29,11],[30,11],[31,11],[32,11],[33,11],[34,11],[35,11],[36,11],[37,11],[38,11],[39,11],[40,11],[41,11],[42,11],[43,11],[44,11],[45,11],[46,11],[47,11],[48,11],[49,11],[50,11],[51,11],[20,12],[21,12],[22,12],[23,12],[24,12],[25,12],[26,12],[27,12],[28,12],[29,12],[30,12],[31,12],[32,12],[33,12],[34,12],[35,12],[36,12],[37,12],[38,12],[39,12],[40,12],[41,12],[42,12],[43,12],[44,12],[45,12],[46,12],[47,12],[48,12],[49,12],[50,12],[51,12],[20,13],[21,13],[22,13],[23,13],[24,13],[25,13],[26,13],[27,13],[28,13],[29,13],[30,13],[31,13],[32,13],[33,13],[34,13],[35,13],[36,13],[37,13],[38,13],[39,13],[40,13],[41,13],[42,13],[43,13],[44,13],[45,13],[46,13],[47,13],[48,13],[49,13],[50,13],[51,13],[52,13],[20,14],[21,14],[22,14],[23,14],[24,14],[25,14],[26,14],[27,14],[28,14],[29,14],[30,14],[31,14],[32,14],[33,14],[34,14],[35,14],[36,14],[37,14],[38,14],[39,14],[40,14],[41,14],[42,14],[43,14],[44,14],[45,14],[46,14],[47,14],[48,14],[49,14],[50,14],[51,14],[52,14],[20,15],[21,15],[22,15],[23,15],[24,15],[25,15],[26,15],[27,15],[28,15],[29,15],[30,15],[31,15],[32,15],[33,15],[34,15],[35,15],[36,15],[37,15],[38,15],[39,15],[40,15],[41,15],[42,15],[43,15],[44,15],[45,15],[46,15],[47,15],[48,15],[49,15],[50,15],[51,15],[19,16],[20,16],[21,16],[22,16],[23,16],[24,16],[25,16],[26,16],[27,16],[28,16],[29,16],[30,16],[31,16],[32,16],[33,16],[34,16],[35,16],[36,16],[37,16],[38,16],[39,16],[40,16],[41,16],[42,16],[43,16],[44,16],[45,16],[46,16],[47,16],[48,16],[49,16],[50,16],[51,16],[19,17],[20,17],[21,17],[22,17],[23,17],[24,17],[25,17],[26,17],[27,17],[28,17],[29,17],[30,17],[31,17],[32,17],[33,17],[34,17],[35,17],[36,17],[37,17],[38,17],[39,17],[40,17],[41,17],[42,17],[43,17],[44,17],[45,17],[46,17],[47,17],[48,17],[49,17],[50,17],[51,17],[20,18],[21,18],[22,18],[23,18],[24,18],[25,18],[26,18],[27,18],[28,18],[29,18],[30,18],[31,18],[32,18],[33,18],[34,18],[35,18],[36,18],[37,18],[38,18],[39,18],[40,18],[41,18],[42,18],[43,18],[44,18],[45,18],[46,18],[47,18],[48,18],[49,18],[50,18],[51,18],[20,19],[21,19],[22,19],[23,19],[24,19],[25,19],[26,19],[27,19],[28,19],[29,19],[30,19],[31,19],[32,19],[33,19],[34,19],[35,19],[36,19],[37,19],[38,19],[39,19],[40,19],[41,19],[42,19],[43,19],[44,19],[45,19],[46,19],[47,19],[48,19],[49,19],[50,19],[51,19],[19,20],[20,20],[21,20],[22,20],[23,20],[24,20],[25,20],[26,20],[27,20],[28,20],[29,20],[30,20],[31,20],[32,20],[33,20],[34,20],[35,20],[36,20],[37,20],[38,20],[39,20],[40,20],[41,20],[42,20],[43,20],[44,20],[45,20],[46,20],[47,20],[48,20],[49,20],[20,21],[21,21],[22,21],[23,21],[24,21],[25,21],[26,21],[27,21],[28,21],[29,21],[30,21],[31,21],[32,21],[33,21],[34,21],[35,21],[36,21],[37,21],[38,21],[39,21],[40,21],[41,21],[42,21],[43,21],[44,21],[45,21],[46,21],[47,21],[48,21],[20,22],[21,22],[22,22],[23,22],[24,22],[25,22],[26,22],[27,22],[28,22],[29,22],[30,22],[31,22],[32,22],[33,22],[34,22],[35,22],[36,22],[37,22],[38,22],[39,22],[40,22],[41,22],[42,22],[43,22],[44,22],[45,22],[46,22],[47,22],[48,22],[21,23],[22,23],[23,23],[24,23],[25,23],[26,23],[27,23],[28,23],[29,23],[30,23],[31,23],[32,23],[33,23],[34,23],[35,23],[36,23],[37,23],[38,23],[39,23],[40,23],[41,23],[43,23],[44,23],[45,23],[46,23],[47,23],[21,24],[22,24],[23,24],[24,24],[25,24],[26,24],[27,24],[28,24],[29,24],[30,24],[31,24],[32,24],[33,24],[34,24],[35,24],[36,24],[37,24],[22,25],[23,25],[24,25],[25,25],[26,25],[27,25],[28,25],[29,25],[30,25],[31,25],[32,25],[33,25],[34,25],[35,25],[36,25],[37,25],[22,26],[23,26],[24,26],[25,26],[26,26],[27,26],[28,26],[29,26],[30,26],[31,26],[32,26],[33,26],[34,26],[35,26],[36,26],[22,27],[23,27],[24,27],[25,27],[26,27],[27,27],[28,27],[29,27],[30,27],[31,27],[32,27],[33,27],[34,27],[36,27],[26,28],[27,28],[28,28],[29,28],[30,28]], baglam: [] }, + "arnavutluk": { ulke: [[32,2],[32,3],[33,3],[34,3],[35,3],[31,4],[32,4],[33,4],[34,4],[35,4],[30,5],[31,5],[32,5],[33,5],[34,5],[35,5],[36,5],[37,5],[30,6],[31,6],[32,6],[33,6],[34,6],[35,6],[36,6],[37,6],[38,6],[31,7],[32,7],[33,7],[34,7],[35,7],[36,7],[37,7],[38,7],[31,8],[32,8],[33,8],[34,8],[35,8],[36,8],[37,8],[38,8],[32,9],[33,9],[34,9],[35,9],[36,9],[37,9],[38,9],[32,10],[33,10],[34,10],[35,10],[36,10],[37,10],[31,11],[32,11],[33,11],[34,11],[35,11],[36,11],[37,11],[38,11],[31,12],[32,12],[33,12],[34,12],[35,12],[36,12],[37,12],[31,13],[32,13],[33,13],[34,13],[35,13],[36,13],[37,13],[32,14],[33,14],[34,14],[35,14],[36,14],[37,14],[31,15],[32,15],[33,15],[34,15],[35,15],[36,15],[37,15],[38,15],[31,16],[32,16],[33,16],[34,16],[35,16],[36,16],[37,16],[38,16],[39,16],[32,17],[33,17],[34,17],[35,17],[36,17],[37,17],[38,17],[39,17],[40,17],[31,18],[32,18],[33,18],[34,18],[35,18],[36,18],[37,18],[38,18],[39,18],[40,18],[30,19],[31,19],[32,19],[33,19],[34,19],[35,19],[36,19],[37,19],[38,19],[39,19],[40,19],[41,19],[31,20],[32,20],[33,20],[34,20],[35,20],[36,20],[37,20],[38,20],[39,20],[40,20],[41,20],[31,21],[32,21],[33,21],[34,21],[35,21],[36,21],[37,21],[38,21],[39,21],[40,21],[31,22],[32,22],[33,22],[34,22],[35,22],[36,22],[37,22],[38,22],[39,22],[31,23],[32,23],[33,23],[34,23],[35,23],[36,23],[37,23],[38,23],[39,23],[33,24],[34,24],[35,24],[36,24],[37,24],[38,24],[34,25],[35,25],[36,25],[37,25],[34,26],[35,26],[36,26],[35,27],[36,27],[37,27],[36,28]], baglam: [] }, +};