{"id":12778,"date":"2026-11-15T09:01:00","date_gmt":"2026-11-15T08:01:00","guid":{"rendered":"https:\/\/iocharts.io\/blog\/?p=12778"},"modified":"2026-11-14T16:26:51","modified_gmt":"2026-11-14T15:26:51","slug":"devizakalkulator-megeri-devizaban-tartani-a-penzed","status":"publish","type":"post","link":"https:\/\/iocharts.io\/blog\/devizakalkulator-megeri-devizaban-tartani-a-penzed\/","title":{"rendered":"Devizakalkul\u00e1tor I. r\u00e9sz: meg\u00e9ri deviz\u00e1ban tartani a p\u00e9nzed?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Az infl\u00e1ci\u00f3kalkul\u00e1tor ut\u00e1n itt a devizakalkul\u00e1tor befektet\u00e9sekhez. Egy ideje m\u00e1r akartam \u00edrni egyet, hogy megn\u00e9zzem, hosszabb t\u00e1von <strong>merre mozognak a deviz\u00e1k<\/strong> egym\u00e1shoz k\u00e9pest \u00e9s hogy <strong>megk\u00f6nny\u00edtsem az ad\u00f3bevall\u00e1s kit\u00f6lt\u00e9s\u00e9t<\/strong>, ha r\u00e9szv\u00e9nyeket tartok (err\u0151l majd a sorozat m\u00e1sodik r\u00e9szben). Mivel ez m\u00e1r a harmadik kalkul\u00e1tor az oldalon, \u00e9rdemes az el\u0151z\u0151ket is megn\u00e9zned.<\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-wp-embed is-provider-io-charts wp-block-embed-io-charts\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"AxwZ8ViCdJ\"><a href=\"https:\/\/iocharts.io\/blog\/inflaciokalkulator-ennyit-buksz-lathatatlanul\/\">Infl\u00e1ci\u00f3kalkul\u00e1tor: ennyit buksz l\u00e1thatatlanul<\/a><\/blockquote><iframe class=\"wp-embedded-content lazyload\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"\u201cInfl\u00e1ci\u00f3kalkul\u00e1tor: ennyit buksz l\u00e1thatatlanul\u201d \u2014 iO Charts\" data-src=\"https:\/\/iocharts.io\/blog\/inflaciokalkulator-ennyit-buksz-lathatatlanul\/embed\/#?secret=n38F79TyRT#?secret=AxwZ8ViCdJ\" data-secret=\"AxwZ8ViCdJ\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" data-load-mode=\"1\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Kezdj\u00fck el\u0151sz\u00f6r a devizap\u00e1rok mozg\u00e1s\u00e1val, mert m\u00e1r t\u00f6bbsz\u00f6r hallottam, hogy kell tartani m\u00e1s deviz\u00e1kat is a hazai deviza mellett. De mire alapozz\u00e1k ezt a \u201ehitet\u201d az emberek? Legink\u00e1bb meg\u00e9rz\u00e9kesekre, sz\u00f3val \u00fagy d\u00f6nt\u00f6ttem, hogy enn\u00e9l egy picit tudom\u00e1nyosabbra helyezem az alapokat, \u00e9s betervezem ezt is a devizakalkul\u00e1torba.<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">\ud83d\udd22<strong>Csak a kalkul\u00e1tor \u00e9rdekel? Akkor ugorj k\u00f6zvetlen\u00fcl oda a link megnyom\u00e1s\u00e1val: <a href=\"#inflaciokalkulator\">devizakalkul\u00e1tor<\/a>.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sz\u00e1mold ki a devizakalkul\u00e1tor seg\u00edts\u00e9g\u00e9vel: mennyit nyert\u00e9l, ha deviz\u00e1t tartott\u00e1l?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Az els\u0151 \u00e9s legfontosabb: <strong>a deviz\u00e1ban tartott p\u00e9nz \u00f6nmag\u00e1ban nem befektet\u00e9s. <\/strong>Ez csak egy eszk\u00f6z, amivel valamit csin\u00e1lnod kell ahhoz, hogy termel\u00e9sre fogd. Szerencs\u00e9s esetben a deviz\u00e1k k\u00f6z\u00f6tti \u00e1rfolyamk\u00fcl\u00f6nbs\u00e9gen realiz\u00e1lhatsz nyeres\u00e9get, pechesebb esetben viszont bukhatsz rajta. De mennyi az annyi? Ehhez a devizakalkul\u00e1tor els\u0151 k\u00e9t f\u00fcl\u00e9t kell haszn\u00e1lnod; a m\u00e1sik kett\u0151t egyel\u0151re tegy\u00fck f\u00e9lre, azokr\u00f3l a m\u00e1sodik r\u00e9szben lesz sz\u00f3.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u2757<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">V<strong>olt egy prekoncepci\u00f3m, miszerint a forint hosszabb t\u00e1von \"csak gyeng\u00fclhet\" a doll\u00e1rral \u00e9s az eur\u00f3val szemben.<\/strong><\/mark><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Persze ilyenkor mindig az a k\u00e9rd\u00e9s, hogy csak a nyaral\u00e1s miatt v\u00e1ltasz-e deviz\u00e1t, hogy legyen mit elverni a tengerparton, vagy hosszabb id\u0151t\u00e1vra tervezel. Ez mindenkin\u00e9l m\u00e1s: sim\u00e1n lehet 1, 3, 5, 10, de ak\u00e1r 20 \u00e9v is.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"950\" height=\"430\" data-src=\"https:\/\/iocharts.io\/blog\/wp-content\/smush-webp\/devizakalkulator-alap-huf-usd-1990-01-2026-09.png.webp\" alt=\"devizakalkul\u00e1tor k\u00e9pkimenete: az USD\/HUF \u00e1rfolyamv\u00e1ltoz\u00e1sa \u00e9s a re\u00e1l\u00e9rt\u00e9k v\u00e1ltoz\u00e1s a rendszerv\u00e1lt\u00e1s \u00f3ta\" class=\"wp-image-12831 lazyload\" data-srcset=\"https:\/\/iocharts.io\/blog\/wp-content\/smush-webp\/devizakalkulator-alap-huf-usd-1990-01-2026-09.png.webp 950w, https:\/\/iocharts.io\/blog\/wp-content\/uploads\/devizakalkulator-alap-huf-usd-1990-01-2026-09-414x187.png 414w, https:\/\/iocharts.io\/blog\/wp-content\/uploads\/devizakalkulator-alap-huf-usd-1990-01-2026-09-767x347.png 767w\" data-sizes=\"(max-width: 950px) 100vw, 950px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 950px; --smush-placeholder-aspect-ratio: 950\/430;\" \/><figcaption class=\"wp-element-caption\">forr\u00e1s: <a href=\"https:\/\/iocharts.io\/blog\/\" target=\"_blank\" rel=\"noreferrer noopener\">iO Charts blog<\/a>, devizakalkul\u00e1tor k\u00e9pkimenete: az USD\/HUF \u00e1rfolyamv\u00e1ltoz\u00e1sa \u00e9s a re\u00e1l\u00e9rt\u00e9k v\u00e1ltoz\u00e1sa a rendszerv\u00e1lt\u00e1s \u00f3ta<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">A forint eset\u00e9ben nyilv\u00e1n a rendszerv\u00e1lt\u00e1s ut\u00e1ni \u00e1rfolyam az els\u0151, amit sz\u00e1m\u00edt\u00e1sba vehetsz:<strong> az els\u0151 adat 1990 janu\u00e1rj\u00e1b\u00f3l van,<\/strong> ami a cikk \u00edr\u00e1sakor b\u0151 36 \u00e9ves id\u0151t\u00e1vot jelent. A grafikonon jel\u00f6ltem az USD\/HUF \u00e1rfolyam v\u00e1ltoz\u00e1s\u00e1t (+404.5%), ami<strong> \u00e9vi +4.5%-os emelked\u00e9st jelent<\/strong>. Ha viszont a magyarorsz\u00e1gi infl\u00e1ci\u00f3t is figyelembe veszed, akkor a v\u00e1s\u00e1rl\u00f3er\u0151d nagy r\u00e9sze \u00edgy is elveszett, <strong>78.9%-os a cs\u00f6kken\u00e9s.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"950\" height=\"430\" data-src=\"https:\/\/iocharts.io\/blog\/wp-content\/smush-webp\/devizakalkulator-alap-huf-usd-2006-11-2026-09.png.webp\" alt=\"devizakalkul\u00e1tor k\u00e9pkimenete: az USD\/HUF \u00e1rfolyamv\u00e1ltoz\u00e1sa \u00e9s a re\u00e1l\u00e9rt\u00e9k v\u00e1ltoz\u00e1sa 20 \u00e9ves t\u00e1von\" class=\"wp-image-12833 lazyload\" data-srcset=\"https:\/\/iocharts.io\/blog\/wp-content\/smush-webp\/devizakalkulator-alap-huf-usd-2006-11-2026-09.png.webp 950w, https:\/\/iocharts.io\/blog\/wp-content\/uploads\/devizakalkulator-alap-huf-usd-2006-11-2026-09-414x187.png 414w, https:\/\/iocharts.io\/blog\/wp-content\/uploads\/devizakalkulator-alap-huf-usd-2006-11-2026-09-767x347.png 767w\" data-sizes=\"(max-width: 950px) 100vw, 950px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 950px; --smush-placeholder-aspect-ratio: 950\/430;\" \/><figcaption class=\"wp-element-caption\">forr\u00e1s: <a href=\"https:\/\/iocharts.io\/blog\/\" target=\"_blank\" rel=\"noreferrer noopener\">iO Charts blog<\/a>, devizakalkul\u00e1tor k\u00e9pkimenete: az USD\/HUF \u00e1rfolyamv\u00e1ltoz\u00e1sa \u00e9s a re\u00e1l\u00e9rt\u00e9k v\u00e1ltoz\u00e1sa 20 \u00e9ves t\u00e1von<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">20 \u00e9ves t\u00e1von ugyanez m\u00e1r nem ilyen egy\u00e9rtelm\u0171: a teljes \u00e1rfolyam-emelked\u00e9s nagyj\u00e1b\u00f3l a heted\u00e9re, 56.6%-ra esett, az \u00e9vi emelked\u00e9s pedig l\u00e9nyeg\u00e9ben a fel\u00e9re,<strong> +2.3%-ra olvadt.<\/strong> A re\u00e1l\u00e9rt\u00e9k-vesztes\u00e9g ugyanakkor szint\u00e9n j\u00f3val kisebb lett.<strong> <\/strong>Mi k\u00f6vetkezik ebb\u0151l? Az, hogy <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">\ud83d\udc46b\u00e1rmennyit is nyersz a devizav\u00e1lt\u00e1son, az infl\u00e1ci\u00f3t is figyelembe kell venned, k\u00fcl\u00f6nben csak nomin\u00e1lis sz\u00e1mokat kapsz, amelyek a re\u00e1l\u00e9rt\u00e9khez k\u00e9pest megt\u00e9veszt\u0151k.<\/mark><\/strong><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"950\" height=\"430\" data-src=\"https:\/\/iocharts.io\/blog\/wp-content\/smush-webp\/devizakalkulator-alap-huf-usd-2016-11-11-2026-10-30.png.webp\" alt=\"\" class=\"wp-image-12834 lazyload\" data-srcset=\"https:\/\/iocharts.io\/blog\/wp-content\/smush-webp\/devizakalkulator-alap-huf-usd-2016-11-11-2026-10-30.png.webp 950w, https:\/\/iocharts.io\/blog\/wp-content\/uploads\/devizakalkulator-alap-huf-usd-2016-11-11-2026-10-30-414x187.png 414w, https:\/\/iocharts.io\/blog\/wp-content\/uploads\/devizakalkulator-alap-huf-usd-2016-11-11-2026-10-30-767x347.png 767w\" data-sizes=\"(max-width: 950px) 100vw, 950px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 950px; --smush-placeholder-aspect-ratio: 950\/430;\" \/><figcaption class=\"wp-element-caption\">forr\u00e1s: <a href=\"https:\/\/iocharts.io\/blog\/\" target=\"_blank\" rel=\"noreferrer noopener\">iO Charts blog<\/a>, devizakalkul\u00e1tor k\u00e9pkimenete: az USD\/HUF \u00e1rfolyamv\u00e1ltoz\u00e1sa \u00e9s a re\u00e1l\u00e9rt\u00e9k v\u00e1ltoz\u00e1sa 10 \u00e9ves t\u00e1von<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">10 \u00e9ves id\u0151t\u00e1v? L\u00e9nyeg\u00e9ben nincs v\u00e1ltoz\u00e1s: 15.6%-kal v\u00e1ltozott az USD\/HUF \u00e1rfolyam,<strong> az \u00e9vi v\u00e1ltoz\u00e1s 1.5%-ra olvadt,<\/strong> a p\u00e9nz viszont re\u00e1l\u00e9rt\u00e9ken majdnem ugyanannyit vesztett a v\u00e1s\u00e1rl\u00f3erej\u00e9b\u0151l, mint 20 \u00e9ves t\u00e1von. Mi\u00e9rt? Mert 2010 ut\u00e1n \u00e9vekig nagyon alacsony volt az infl\u00e1ci\u00f3, 2022-ben viszont felpattant \u2013 ekkor volt a 440 Ft k\u00f6r\u00fcli USD\/HUF-cs\u00facs \u2013, majd az infl\u00e1ci\u00f3 \u00e9s az \u00e1rfolyam is visszakorrig\u00e1lt a kor\u00e1bbi szintekre. A 2022\u20132023-as magas infl\u00e1ci\u00f3 teh\u00e1t a 10 \u00e9ves id\u0151szakba is beleesik.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"950\" height=\"430\" data-src=\"https:\/\/iocharts.io\/blog\/wp-content\/smush-webp\/devizakalkulator-alap-huf-usd-2021-05-17-2022-10-13.png.webp\" alt=\"devizakalkul\u00e1tor k\u00e9pkimenete: az USD\/HUF \u00e1rfolyamv\u00e1ltoz\u00e1sa egy extr\u00e9m p\u00e9ld\u00e1val illusztr\u00e1lva\" class=\"wp-image-12836 lazyload\" data-srcset=\"https:\/\/iocharts.io\/blog\/wp-content\/smush-webp\/devizakalkulator-alap-huf-usd-2021-05-17-2022-10-13.png.webp 950w, https:\/\/iocharts.io\/blog\/wp-content\/uploads\/devizakalkulator-alap-huf-usd-2021-05-17-2022-10-13-767x347.png 767w, https:\/\/iocharts.io\/blog\/wp-content\/uploads\/devizakalkulator-alap-huf-usd-2021-05-17-2022-10-13-414x187.png 414w\" data-sizes=\"(max-width: 950px) 100vw, 950px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 950px; --smush-placeholder-aspect-ratio: 950\/430;\" \/><figcaption class=\"wp-element-caption\">forr\u00e1s: <a href=\"https:\/\/iocharts.io\/blog\/\" target=\"_blank\" rel=\"noreferrer noopener\">iO Charts blog<\/a>, devizakalkul\u00e1tor k\u00e9pkimenete: az USD\/HUF \u00e1rfolyamv\u00e1ltoz\u00e1sa egy extr\u00e9m p\u00e9ld\u00e1val illusztr\u00e1lva<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e9zz\u00fcnk egy eg\u00e9szen extr\u00e9m esetet: <strong>a devizakalkul\u00e1tor kezd\u0151- \u00e9s v\u00e9gpontj\u00e1t mesters\u00e9gesen a nekem kedvez\u0151, a narrat\u00edv\u00e1mat t\u00e1mogat\u00f3 helyre \u00e1ll\u00edtom, <\/strong>ahogyan azt a banki prospektusok eset\u00e9ben is szokt\u00e1k a sz\u00e1mokat. Hopp, m\u00e1ris realiz\u00e1ltam <strong>52%-os \u00e1rfolyamnyeres\u00e9get, ami \u00e9vi 34.8%, re\u00e1l\u00e9rt\u00e9ken pedig 26.1%.<\/strong> Ehhez viszont egyszerre kellett eltal\u00e1lnod az alj\u00e1t \u00c9S a tetej\u00e9t az \u00e1rfolyamnak, ami szinte lehetetlen.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>\ud83d\udca1<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">A devizakalkul\u00e1tor eredm\u00e9nyei alapj\u00e1n meglep\u0151 lehet, hogy m\u00e9g hossz\u00fa id\u0151t\u00e1von sem lehet re\u00e1lhozamot el\u00e9rni puszt\u00e1n a devizav\u00e1lt\u00e1ssal, kiv\u00e9ve, ha olyan szerencs\u00e9s vagy, mint az el\u0151z\u0151 k\u00e9pen. <\/mark><\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"devizakalkulator\"><strong>(A sz\u00e1m\u00edt\u00e1s a deviz\u00e1ra kapott kamatot nem tartalmazza;<\/strong> ha a deviz\u00e1t bet\u00e9tben vagy p\u00e9nzpiaci alapban tartod, a kalkul\u00e1torban a kamatot is megadhatod.) Mi ebb\u0151l a tanuls\u00e1g? Az, hogy<strong> a devizav\u00e1lt\u00e1s \u00f6nmag\u00e1ban nem befektet\u00e9s: <\/strong>ebb\u0151l a p\u00e9nzb\u0151l valamilyen instrumentumot kell v\u00e1s\u00e1rolnod. <strong>R\u00e9szv\u00e9nyt, ETF-et, k\u00f6tv\u00e9nyt, <\/strong>b\u00e1rmit, de feleslegesen ne parkoltasd a p\u00e9nzed, mert szinte mindig megeszi az infl\u00e1ci\u00f3.<\/p>\n\n\n\n<pre id=\"devizakalkulator\" class=\"wp-block-preformatted\" style=\"text-align:center;white-space:pre-wrap\">\ud83e\udd14<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\"><strong>A t\u00f6bbi kalkul\u00e1tort pedig ezen a linken \u00e9red el: <a href=\"https:\/\/iocharts.io\/blog\/category\/kalkulatorok\/\" target=\"_blank\" rel=\"noreferrer noopener\">Kalkul\u00e1torok<\/a><\/strong><\/mark>\u2757<\/pre>\n\n\n\n<!-- ============================================================\r\n     DEVIZAKALKUL\u00c1TOR \u2013 iO Charts (WPCode-v\u00e1ltozat)\r\n     VERZI\u00d3: 1.18 (2026-11-14)\r\n     ------------------------------------------------------------\r\n     V\u00c1LTOZ\u00c1SOK\r\n       1.18 (2026-11-14) \"Devizahitel\" f\u00fcl: a f\u0151 eredm\u00e9nyk\u00e1rty\u00e1k a havi\r\n           t\u00f6rleszt\u0151r\u0151l sz\u00f3lnak \u2013 most \/ a v\u00e9g\u00e9n, a legmagasabb, \u00e9s a\r\n           cs\u00facsig tart\u00f3 emelked\u00e9s felbont\u00e1sa \u00e1rfolyam- \u00e9s kamathat\u00e1sra\r\n           (a kett\u0151 \u00f6sszege pontosan az emelked\u00e9s). Az \u00f6sszes\u00edtett\r\n           (teljes futamid\u0151s) sz\u00e1mok a kis k\u00e1rty\u00e1kra ker\u00fcltek, egy\u00e9rtelm\u0171\r\n           felirattal (\"\u2026 \u00f6sszesen, a teljes futamid\u0151 alatt\"). A r\u00e9szlet-\r\n           grafikon s\u00fag\u00f3ja havonta mutatja ugyanezt a felbont\u00e1st.\r\n       1.17 (2026-11-14) \"Devizahitel\" f\u00fcl: kamatoz\u00e1s v\u00e1laszthat\u00f3 \u2013 fix,\r\n           vagy v\u00e1ltoz\u00f3 (a hitel deviz\u00e1j\u00e1nak 3 havi referenciakamata +\r\n           a felv\u00e9telkor r\u00f6gz\u00fcl\u0151 fel\u00e1r; CHF: LIBOR\/SARON, EUR: EURIBOR,\r\n           HUF: BUBOR; negyed\u00e9ves kamatfordul\u00f3, minden fordul\u00f3n \u00faj\r\n           annuit\u00e1s). A forinthitel-\u00f6sszevet\u00e9s \u00e9s a forintos\u00edt\u00e1s ut\u00e1ni\r\n           forintkamat is a BUBOR-t k\u00f6veti; v\u00e1laszthat\u00f3 a 2022-es\r\n           kamatstop (BUBOR legfeljebb 2,02%). \u00daj grafikon: magyar\r\n           infl\u00e1ci\u00f3, referenciakamatok \u00e9s a hitel kamata; a r\u00e9szlet-\r\n           grafikonon a r\u00e9szlet re\u00e1l\u00e9rt\u00e9ken (felv\u00e9telkori forintban).\r\n           \u00daj eredm\u00e9nyek: a kamatv\u00e1ltoz\u00e1s hat\u00e1sa a fix kamathoz k\u00e9pest,\r\n           re\u00e1l\u00e9rt\u00e9ken befizetett \u00f6sszeg. Be\u00e9p\u00edtett referenciakamatok:\r\n           OECD (FRED), \u00e9l\u0151ben a PHP-snippet 1.6 friss\u00edti\r\n           (window.IOC_REFKAMAT_API). \u00daj linkparam\u00e9terek: dv_hkt=valt,\r\n           dv_hks=0 (kamatstop n\u00e9lk\u00fcl).\r\n       1.16 (2026-11-13) \"Napi \u00e1rfolyam\" f\u00fcl: az \u00f6sszefoglal\u00f3 sz\u00f6veg \u00e9s a\r\n           grafikonok az \u00d6SSZES be\u00e1razott poz\u00edci\u00f3r\u00f3l sz\u00f3lnak (eddig csak a\r\n           kiv\u00e1lasztott sorr\u00f3l). \u00daj: \u00f6sszefoglal\u00f3 sz\u00f6veg (\u00f6sszes eredm\u00e9ny,\r\n           legjobb \/ leggyeng\u00e9bb poz\u00edci\u00f3, a deviza hat\u00e1sa); v\u00edzes\u00e9s az eg\u00e9sz\r\n           portf\u00f3li\u00f3ra; poz\u00edci\u00f3nk\u00e9nti s\u00e1vgrafikon (r\u00e9szv\u00e9ny- \u00e9s devizahat\u00e1s,\r\n           eredm\u00e9ny szerint rendezve); \u00e9v szerinti bont\u00e1s az elad\u00e1s \u00e9ve\r\n           szerint (a nyitott poz\u00edci\u00f3k k\u00fcl\u00f6n sorban), v\u00e9g\u00f6sszeggel \u2013 ez a CSV\r\n           v\u00e9g\u00e9re is beker\u00fcl. A devizagrafikon a \ud83d\udcc8 gombbal v\u00e1lasztott\r\n           poz\u00edci\u00f3hoz marad, kieg\u00e9sz\u00edt\u00e9sk\u00e9nt.\r\n       1.15 (2026-11-13) Let\u00f6lt\u00e9s (PNG, CSV) a claude.ai-on k\u00f6zz\u00e9tett\r\n           el\u0151n\u00e9zetben is: ha az oldal ott fut (window.claude.use), a\r\n           \"downloads\" k\u00e9pess\u00e9gen \u00e1t ment (a n\u00e9z\u0151 meger\u0151s\u00edti); m\u00e1shol,\r\n           p\u00e9ld\u00e1ul a WordPressben, v\u00e1ltozatlanul sima let\u00f6lt\u0151linkkel.\r\n       1.14 (2026-11-13) \"Napi \u00e1rfolyam\" f\u00fcl: poz\u00edci\u00f3nk\u00e9nt darabsz\u00e1m,\r\n           v\u00e9tel\u00e1r \u00e9s elad\u00e1si \u00e1r deviz\u00e1ban (a br\u00f3keri kimutat\u00e1s szerint;\r\n           \u00fcres darabsz\u00e1mn\u00e1l az \u00e1r a teljes \u00f6sszeg, \u00edgy a d\u00edjakkal n\u00f6velt\r\n           beker\u00fcl\u00e9si \u00e9rt\u00e9k is megadhat\u00f3). Ebb\u0151l: v\u00e9teli \u00e9s elad\u00e1si \u00e9rt\u00e9k\r\n           forintban a k\u00e9t nap MNB-\u00e1rfolyam\u00e1n, eredm\u00e9ny forintban, \u00e9s\r\n           felbont\u00e1sa: r\u00e9szv\u00e9nyhat\u00e1s = (elad\u00e1si \u2212 v\u00e9teli \u00e9rt\u00e9k deviz\u00e1ban)\r\n           \u00d7 v\u00e9teli \u00e1rfolyam; devizahat\u00e1s = elad\u00e1si \u00e9rt\u00e9k deviz\u00e1ban \u00d7\r\n           (elad\u00e1si \u2212 v\u00e9teli \u00e1rfolyam). A kett\u0151 \u00f6sszege pontosan a forintos\r\n           eredm\u00e9ny. \u00d6sszes\u00edt\u0151 az \u00f6sszes be\u00e1razott poz\u00edci\u00f3ra, v\u00edzes\u00e9s-\r\n           grafikon a kiv\u00e1lasztott poz\u00edci\u00f3hoz (v\u00e9telkor \u2192 r\u00e9szv\u00e9ny \u2192\r\n           deviza \u2192 elad\u00e1skor). A devizagrafikon c\u00edme egy\u00e9rtelm\u0171bb\r\n           (a poz\u00edci\u00f3 tart\u00e1sa alatti deviza\u00e1rfolyam). CSV \u00e9s link a\r\n           mez\u0151kkel b\u0151v\u00fcl (a r\u00e9gi, 4 mez\u0151s linkek is m\u0171k\u00f6dnek).\r\n       1.13 (2026-11-13) F\u00fclsorrend: Megtakar\u00edt\u00e1s deviz\u00e1ban, Befektet\u0151i\r\n           n\u00e9zet, Napi \u00e1rfolyam, Devizahitel (a hitel az utols\u00f3).\r\n       1.12 (2026-11-13) A \"Mib\u0151l?\" \u00e9s a \"Melyik deviz\u00e1ba?\" lista azonos:\r\n           a c\u00e9lp\u00e9nznem is lehet forint (pl. EUR \u2192 HUF), \u00edgy a k\u00e9t oldal\r\n           felcser\u00e9lhet\u0151. Ha a k\u00e9t oldal ugyanaz lenne, a m\u00e1sik oldal v\u00e1lt\r\n           (forintra, vagy forintn\u00e1l eur\u00f3ra). Napi m\u00f3dban a forint mint\r\n           c\u00e9l a m\u00e1sik deviza napi sor\u00e1b\u00f3l (1 \/ \u00e1rfolyam). Forint c\u00e9ln\u00e1l az\r\n           \u00e1rfolyam \"1 EUR = \u2026 Ft\" alakban. Jav\u00edt\u00e1s: \"az eur\u00f3ban m\u00e9rt hozamot\".\r\n       1.11 (2026-11-13) A napi \u00e1rfolyam az alap\u00e9rtelmez\u00e9s (Megtakar\u00edt\u00e1s,\r\n           Befektet\u0151i n\u00e9zet, Devizahitel); a kapcsol\u00f3n a \"Napi \u00e1rfolyam\"\r\n           gomb \u00e1ll el\u00f6l. Ha a v\u00e1lasztott \u00e1tv\u00e1lt\u00e1si nap kor\u00e1bbi, mint a\r\n           devizap\u00e1r els\u0151 napi \u00e1rfolyama, az els\u0151 el\u00e9rhet\u0151 napt\u00f3l sz\u00e1mol\r\n           (a sz\u00f6veg jelzi), nem hib\u00e1t ad. Link: a dv_r mindig beker\u00fcl\r\n           (napi \/ havi); a dv_r n\u00e9lk\u00fcli r\u00e9gi linkek havi m\u00f3dban ny\u00edlnak,\r\n           ahogy eredetileg k\u00e9sz\u00fcltek.\r\n       1.10 (2026-11-13) A p\u00e9nznemv\u00e1laszt\u00f3k a hivatalos ISO-k\u00f3dot mutatj\u00e1k:\r\n           \"HUF \u2013 forint\" (eddig \"Ft \u2013 forint\"). Az \u00f6sszegekn\u00e9l marad az \"Ft\".\r\n       1.9 (2026-11-13) A havi \/ napi \u00e1rfolyam kapcsol\u00f3 a \"Befektet\u0151i\r\n           n\u00e9zet\" \u00e9s a \"Devizahitel\" f\u00fcl\u00f6n is. Befektet\u0151i n\u00e9zet napi\r\n           m\u00f3dban: ingadoz\u00e1s a napi log-v\u00e1ltoz\u00e1sokb\u00f3l, a t\u00e9nyleges \u00e9vi\r\n           jegyz\u00e9si napsz\u00e1mmal \u00e9ves\u00edtve; legnagyobb visszaes\u00e9s \u00e9s\r\n           visszat\u00e9r\u00e9s napra pontosan; g\u00f6rd\u00fcl\u0151 id\u0151szakok minden lehets\u00e9ges\r\n           kezd\u0151napra (a tart\u00e1s v\u00e9ge az utols\u00f3 jegyz\u00e9s a c\u00e9ld\u00e1tumon vagy\r\n           el\u0151tte); devizahat\u00e1s napi sorral; devizamix a t\u00e9telek k\u00f6z\u00f6s\r\n           jegyz\u00e9si napjain (korrel\u00e1ci\u00f3 napi v\u00e1ltoz\u00e1sokb\u00f3l); re\u00e1l\u00e1rfolyam\r\n           napi \u00e1rfolyammal, az \u00e9ves infl\u00e1ci\u00f3t napra elosztva.\r\n           Devizahitel napi m\u00f3dban: a hitel a felv\u00e9tel napj\u00e1nak\r\n           \u00e1rfolyam\u00e1n, a r\u00e9szletek havonta ugyanazon a napon esed\u00e9kesek\r\n           (h\u00f3nap v\u00e9g\u00e9re igaz\u00edtva), mindegyik a saj\u00e1t napj\u00e1nak\r\n           \u00e1rfolyam\u00e1n (nem jegyz\u00e9si napon az el\u0151z\u0151 jegyz\u00e9si nap\u00e9n); a\r\n           forintos\u00edt\u00e1s a 2015. febru\u00e1r 1-j\u00e9t\u0151l esed\u00e9kes r\u00e9szletekre.\r\n           A grafikonok napi m\u00f3dban napi id\u0151tengellyel.\r\n       1.8 (2026-11-13) \"Megtakar\u00edt\u00e1s deviz\u00e1ban\": v\u00e1laszthat\u00f3 \u00e1rfolyam \u2013\r\n           havi \u00e1tlag (eddigi m\u0171k\u00f6d\u00e9s) vagy napi \u00e1rfolyam. Napi m\u00f3dban a\r\n           k\u00e9t id\u0151pont egy-egy nap (d\u00e1tummez\u0151), az \u00e1tv\u00e1lt\u00e1s \u00e9s a\r\n           visszav\u00e1lt\u00e1s az adott nap MNB-\u00e1rfolyam\u00e1n t\u00f6rt\u00e9nik (ha aznap\r\n           nem volt jegyz\u00e9s, az el\u0151z\u0151 jegyz\u00e9si nap\u00e9n, ezt a sz\u00f6veg jelzi).\r\n           Napi \u00e1rfolyammal sz\u00e1mol: a f\u0151 eredm\u00e9ny, a kamat (napra\r\n           ar\u00e1nyosan), a re\u00e1l\u00e9rt\u00e9k (az infl\u00e1ci\u00f3 napra elosztva), a\r\n           grafikon, a statisztika (12 h\u00f3napos v\u00e1ltoz\u00e1s 365 napra), az\r\n           \u00e9venk\u00e9nti t\u00e1bla \u00e9s a CSV. Havi \u00e1tlaggal marad: rendszeres\r\n           v\u00e1s\u00e1rl\u00e1s, id\u0151z\u00edt\u00e9s, deviz\u00e1k versenye, befektet\u0151i \u00e9s hiteln\u00e9zet\r\n           (a d\u00e1tumokhoz tartoz\u00f3 h\u00f3napokkal). Nem forint alapdeviz\u00e1n\u00e1l a\r\n           kereszt\u00e1rfolyam a k\u00e9t deviza k\u00f6z\u00f6s jegyz\u00e9si napjaib\u00f3l. Link:\r\n           dv_r=napi&dv_tn=\u00c9\u00c9\u00c9\u00c9-HH-NN&dv_vn=\u00c9\u00c9\u00c9\u00c9-HH-NN.\r\n       1.7 (2026-11-13) \u00daj \"Napi \u00e1rfolyam\" f\u00fcl r\u00e9szv\u00e9nypoz\u00edci\u00f3khoz:\r\n           poz\u00edci\u00f3nk\u00e9nt (megnevez\u00e9s, deviza, v\u00e9tel napja, elad\u00e1s napja)\r\n           a v\u00e9tel \u00e9s az elad\u00e1s napj\u00e1nak MNB-\u00e1rfolyama; ha aznap nem\r\n           volt jegyz\u00e9s (h\u00e9tv\u00e9ge, \u00fcnnep), az el\u0151z\u0151 jegyz\u00e9si nap\u00e9, a\r\n           d\u00e1tummal egy\u00fctt. \u00dcres elad\u00e1si nap = nyitott poz\u00edci\u00f3, a\r\n           legut\u00f3bbi \u00e1rfolyammal. Napi grafikon a kiv\u00e1lasztott\r\n           poz\u00edci\u00f3hoz (v\u00e9tel\u2013elad\u00e1s jel\u00f6lve), CSV-let\u00f6lt\u00e9s, megoszthat\u00f3\r\n           link (dv_n=napi&dv_poz=...), a poz\u00edci\u00f3k a b\u00f6ng\u00e9sz\u0151ben\r\n           megmaradnak. Adat: a PHP-snippet \/ioc\/v1\/deviza-sor v\u00e9gpontja\r\n           (window.IOC_DEVIZA_SOR_API, PHP 1.4+); a napi n\u00e9zet deviz\u00e1i\r\n           k\u00f6z\u00f6tt a RON, BGN, TRY \u00e9s HKD is szerepel. Tesztadat:\r\n           window.IOC_DEVIZA_SOR_TESZT = { 'USD': { datumok: [...], arf: [...] } }.\r\n       1.6 (2026-11-13) Jav\u00edt\u00e1s: a \"Deviz\u00e1k versenye\" mondata akkor is\r\n           \"dr\u00e1gult a legjobban\"-t \u00edrt, ha minden deviza olcs\u00f3bb lett\r\n           (pl. \u22122,0%). Most h\u00e1rom eset van: mind dr\u00e1gult \/ mind\r\n           olcs\u00f3bb lett \/ vegyes. Jav\u00edt\u00e1s: az \u00e1llapotsor \"utols\u00f3\r\n           sikeres lek\u00e9r\u00e9s\" d\u00e1tuma a napi kis friss\u00edt\u00e9st is figyelembe\r\n           veszi (a PHP 1.5 a napi friss\u00edt\u00e9sn\u00e9l is be\u00edrja az\r\n           utolso_siker-t; r\u00e9gebbi PHP-n\u00e9l a napi_frissites.ido-b\u00f3l\r\n           olvassa ki).\r\n       1.5 (2026-10-20) Kamatad\u00f3-kapcsol\u00f3 (28%: 15% SZJA + 13% szocho)\r\n           a bet\u00e9ti kamatokra. Rendszeres v\u00e1s\u00e1rl\u00e1s: \u00f6sszevet\u00e9s\r\n           ugyanazokkal a havi befizet\u00e9sekkel forintbet\u00e9tben. A kezd\u0151\r\n           h\u00f3nap alap\u00e9rt\u00e9ke a legkor\u00e1bbi el\u00e9rhet\u0151 h\u00f3nap (1990. janu\u00e1r),\r\n           \u00edgy a 30 \u00e9ves tart\u00e1si id\u0151 is v\u00e1laszthat\u00f3. Szigor\u00fabb\r\n           linkellen\u0151rz\u00e9s (csak tiszta eg\u00e9sz\/tizedes sz\u00e1m, h\u00f3nap 01\u201312),\r\n           a p\u00e9nznemv\u00e1laszt\u00f3 csak ismert deviz\u00e1t fogad el.\r\n       1.4 (2026-10-20) \u00daj \"Devizahitel\" f\u00fcl (annuit\u00e1sos t\u00f6rleszt\u00e9s\r\n           deviz\u00e1ban, r\u00e9szlet \u00e9s tartoz\u00e1s forintban, opcion\u00e1lis\r\n           forintos\u00edt\u00e1s 2015 febru\u00e1rj\u00e1ban a t\u00f6rv\u00e9nyes \u00e1rfolyamon,\r\n           \u00f6sszevet\u00e9s forinthitellel). Kamatmez\u0151k az alapn\u00e9zetben\r\n           (devizabet\u00e9t \u00e9s forintbet\u00e9t, alapb\u00f3l 0). Id\u0151z\u00edt\u00e9s: a\r\n           legolcs\u00f3bb \u00e9s legdr\u00e1g\u00e1bb h\u00f3nap \u00e9venk\u00e9nt, h\u00f3napok \u00e1tlagos\r\n           elt\u00e9r\u00e9se. Befektet\u0151i n\u00e9zet 5.: re\u00e1l\u00e1rfolyam EUR-ra \u00e9s USD-re\r\n           (KSH, Eurostat, Vil\u00e1gbank infl\u00e1ci\u00f3). Megoszt\u00e1s-gomb a\r\n           befektet\u0151i \u00e9s a hitel n\u00e9zetben is. Jav\u00edt\u00e1s: a hiteln\u00e9zet\r\n           \u00e1rfolyamhat\u00e1s-k\u00e1rty\u00e1j\u00e1nak felirata (\"\u2026t\u00f6bbet fizetsz\").\r\n       1.3 (2026-10-20) Egy gomb: \"Rendszerv\u00e1lt\u00e1s\" = a legkor\u00e1bbi el\u00e9rhet\u0151\r\n           h\u00f3nap. G\u00f6rd\u00fcl\u0151 id\u0151szakok: a fent be\u00e1ll\u00edtott id\u0151szakon bel\u00fcl,\r\n           tart\u00e1si id\u0151 1\u201330 \u00e9v vagy a teljes id\u0151szak.\r\n       1.2 (2026-10-20) Rendszeres v\u00e1s\u00e1rl\u00e1s (havi devizav\u00e1s\u00e1rl\u00e1s, p\u00e9nzs\u00falyozott\r\n           hozam, \u00e1tlagos v\u00e9teli \u00e1rfolyam, egy\u00f6sszeg\u0171 \u00f6sszevet\u00e9s); befektet\u0151i\r\n           n\u00e9zet 4.: portf\u00f3li\u00f3 devizamix (ingadoz\u00e1s, visszaes\u00e9s, korrel\u00e1ci\u00f3).\r\n       1.1 (2026-10-20) Ahol az MNB-sor k\u00e9s\u0151bb indul (EUR 1999, CZK \u00e9s\r\n           PLN 1997, CNY 2007), az elej\u00e9t a be\u00e9p\u00edtett ECB\/Eurostat-adat\r\n           p\u00f3tolja, \u00edgy minden deviza 1990-t\u0151l (vagy a legkor\u00e1bbi\r\n           el\u00e9rhet\u0151 h\u00f3napt\u00f3l) sz\u00e1molhat\u00f3.\r\n       1.0 (2026-10-20) Els\u0151 v\u00e1ltozat: megtakar\u00edt\u00e1s deviz\u00e1ban,\r\n           k\u00e9t deviza egym\u00e1shoz, deviz\u00e1k versenye, re\u00e1l\u00e9rt\u00e9k, statisztika,\r\n           t\u00f6rt\u00e9nelmi pillanatok; befektet\u0151i n\u00e9zet: kock\u00e1zat,\r\n           g\u00f6rd\u00fcl\u0151 id\u0151szakok, devizahat\u00e1s.\r\n     ------------------------------------------------------------\r\n     1. Ez a k\u00f3d: WPCode, HTML Snippet, Insert Method: Shortcode, Active,\r\n        shortcode: [wpcode id=\"12777\"].\r\n     2. A cikk Egy\u00e9ni HTML blokkj\u00e1ba k\u00e9t sor kell:\r\n          [wpcode id=\"12777\"]\r\n          <ioc-deviza><\/ioc-deviza>\r\n     Az \u00e9l\u0151 \u00e1rfolyamokat az \"IOC \u2013 Deviza\u00e1rfolyamok friss\u00edt\u00e9se\", a magyar\r\n     infl\u00e1ci\u00f3t az \"IOC \u2013 Infl\u00e1ci\u00f3s adatok friss\u00edt\u00e9se\" PHP-snippet adja.\r\n     ============================================================ -->\r\n<script>\r\n(function () {\r\n  'use strict';\r\n  if (customElements.get('ioc-deviza')) return;   \/\/ ha k\u00e9tszer ker\u00fclne be a k\u00f3d\r\n\r\n  \/* ==========================================================\r\n     1. ADATOK (tartal\u00e9k; \u00e9l\u0151 adat eset\u00e9n fel\u00fcl\u00edr\u00f3dnak)\r\n     ----------------------------------------------------------\r\n     Havi \u00e1tlag\u00e1rfolyamok, forint \/ 1 egys\u00e9g deviza (a JPY is 1 jenre).\r\n     Be\u00e9p\u00edtett forr\u00e1s: ECB-referencia\u00e1rfolyamok havi \u00e1tlaga 1999-t\u0151l,\r\n     el\u0151tte az Eurostat ECU-\u00e1rfolyamai (ert_bil_eur_m), a forint\u00e1rfolyam\r\n     a kett\u0151 h\u00e1nyadosa. Az \u00e9l\u0151 adat az MNB hivatalos \u00e1rfolyama\r\n     (PHP-snippet: \"IOC \u2013 Deviza\u00e1rfolyamok friss\u00edt\u00e9se\").\r\n     Form\u00e1tum: { k\u00f3d: { k: '\u00c9\u00c9\u00c9\u00c9-HH' (els\u0151 h\u00f3nap), v: [havi \u00e9rt\u00e9kek, null = nincs adat] } }\r\n     ========================================================== *\/\r\n  var ARFOLYAM = {\"EUR\":{\"k\":\"1990-01\",\"v\":[74.97,77.96,78.63,79.08,79.54,79.48,80.75,82.07,81.91,83.04,83.69,83.22,93.84,96.26,92.76,90.99,90.64,88.61,88.78,89.7,91.13,91.14,97.07,99.95,99.54,98.26,98.01,99.35,100.41,102.28,106.16,107.37,107.08,104.46,102.35,102.76,101.56,101.29,102.63,106.94,106.77,106.97,107.6,107.92,110.24,113.8,112.52,112.87,113.6,115.11,117.71,117.66,119.47,121.56,123.31,131.52,133.64,135.61,135.52,135.69,138.35,140.78,153.47,161.26,163.53,167.13,169.95,170.25,172.27,177.02,179.69,181.28,183.3,186.07,187.12,188.1,189.38,191.43,194.58,197.56,198.81,200.15,203.55,204.79,201.94,202.03,203.34,205.81,208.53,210.32,211.98,212.25,215.52,219.42,223.51,224.03,224.2,226.16,228.3,230.79,233.69,237.77,238.94,244.21,254.39,257.56,253.44,254.24,250.79,250.3,253.64,252.37,250.21,249.35,250.43,253.52,255.28,257.63,254.96,254.37,254.91,256.12,257.08,258.44,259.03,259.73,260.22,260.88,262.35,262.92,264.09,264.95,265.0,265.69,266.47,266.99,258.29,247.25,248.94,251.02,255.94,255.23,251.36,247.31,243.84,243.51,244.78,242.26,243.8,242.71,246.72,245.3,243.89,243.53,238.25,236.07,240.39,245.12,245.6,245.59,245.78,261.21,263.73,259.56,255.46,255.77,259.31,264.74,264.32,263.14,253.33,250.41,252.91,253.02,249.89,248.85,247.66,246.69,245.36,245.8,246.48,243.69,244.81,248.19,251.95,249.04,246.47,244.49,245.83,251.85,251.04,252.68,250.71,251.57,260.85,265.47,262.37,272.39,277.49,274.41,274.42,267.1,258.84,253.97,253.88,253.3,249.86,246.0,248.42,250.29,246.9,255.2,253.33,251.02,254.5,253.18,256.03,262.15,259.94,253.75,247.69,242.42,231.82,235.88,240.68,260.15,265.32,265.02,279.86,298.3,304.14,295.26,281.93,280.46,272.06,270.05,271.84,268.49,270.92,273.22,269.43,271.21,265.4,265.53,276.78,281.49,283.75,281.45,282.1,274.01,275.51,277.62,275.33,271.15,270.89,265.29,266.96,266.87,267.68,272.37,285.05,296.79,309.15,304.19,307.33,290.68,292.26,294.81,293.67,293.57,286.28,278.93,284.22,282.09,282.26,285.79,294.01,292.73,303.01,298.67,292.38,295.7,294.9,299.46,299.75,294.76,297.68,300.24,302.48,310.19,311.49,307.37,304.58,305.87,309.81,313.91,313.2,307.85,306.89,310.83,316.5,306.88,303.45,299.43,306.33,311.96,311.53,311.61,313.14,311.27,312.27,314.4,314.68,310.37,311.15,311.46,314.58,313.98,314.35,310.21,308.68,307.0,308.82,312.24,308.99,308.5,309.71,311.57,309.77,308.28,306.71,304.37,308.37,309.95,311.89,313.16,309.27,311.74,312.19,311.72,316.93,322.7,324.6,323.02,324.82,323.84,322.33,322.74,319.8,317.91,315.92,321.18,324.98,322.56,325.27,326.91,332.45,331.46,333.62,330.71,334.38,337.17,345.68,356.69,350.76,347.69,351.16,348.93,360.61,362.53,359.84,359.02,359.19,358.15,365.61,360.58,353.65,349.94,357.26,351.84,352.51,360.82,364.5,367.5,358.68,356.97,376.64,374.87,384.45,396.66,404.1,402.1,404.19,418.31,406.68,407.68,396.03,384.91,385.01,375.34,372.37,370.6,379.04,385.05,386.43,385.33,379.19,381.8,382.04,388.04,395.09,392.41,387.18,394.76,392.84,394.7,394.86,401.9,409.25,411.99,411.73,403.13,399.81,406.44,403.94,402.08,399.19,396.45,391.63,389.91,384.2,384.97,384.18,378.61,389.19,368.96,358.23,353.94,359.47,363.38,365.12]},\"USD\":{\"k\":\"1990-01\",\"v\":[62.3607,63.9908,65.6728,65.2691,64.5512,64.993,64.006,62.3537,62.3696,61.411,60.6054,60.8689,69.1271,69.547,72.4348,75.1611,75.5837,76.9652,77.2739,76.2496,75.4512,75.2353,77.1683,76.861,76.8886,77.8051,79.657,79.9662,79.1815,78.4837,77.4551,76.5889,77.2193,78.8258,82.6136,82.9379,83.7816,85.672,87.0705,87.5768,87.7177,90.27,94.5103,95.2263,93.495,97.7747,99.6811,99.9823,101.97,103.0,103.08,103.28,102.6,102.71,100.92,107.52,108.18,107.55,108.97,111.61,111.5,111.85,116.52,120.22,123.74,125.53,126.38,130.52,133.67,133.88,135.74,138.99,141.9,144.4,146.04,148.83,151.91,152.79,153.14,153.96,156.65,159.05,159.41,163.79,166.04,173.3,176.85,179.75,181.44,185.04,191.85,197.87,195.95,195.86,196.16,201.54,206.12,207.79,210.55,211.52,210.72,215.88,217.71,221.69,220.42,215.75,217.66,216.91,216.07,223.37,233.08,235.77,235.44,240.29,241.95,239.11,243.12,240.65,246.66,251.6,251.53,260.47,266.59,273.01,285.97,273.66,276.96,288.59,300.9,307.56,308.41,295.4,282.47,288.3,293.1,299.35,295.49,289.83,289.31,278.78,280.93,281.77,282.98,277.15,276.11,279.9,279.5,273.5,265.9,254.11,248.7,250.89,248.68,248.23,237.93,231.9,226.31,227.54,227.32,226.43,212.26,224.01,231.93,233.07,227.77,218.77,221.64,215.56,209.57,208.09,206.61,208.97,210.67,208.47,203.75,204.4,202.71,197.56,188.89,183.35,187.9,187.28,185.49,191.84,198.53,204.72,204.77,198.9,200.63,209.63,213.02,213.14,207.16,210.73,217.01,216.37,205.47,215.38,218.78,214.2,215.61,211.8,200.97,192.22,195.33,193.75,188.71,182.01,183.87,186.53,180.02,187.37,182.35,176.44,173.33,173.78,173.97,177.79,167.47,161.12,159.24,155.89,147.01,157.59,167.54,195.75,208.43,197.43,211.62,233.37,233.33,223.89,206.61,200.11,193.14,189.28,186.72,181.23,181.67,187.05,188.82,198.19,195.61,198.1,220.42,230.6,222.25,218.35,216.07,197.17,201.83,210.01,206.19,198.67,193.53,183.73,186.13,185.51,187.69,189.91,207.15,216.6,228.11,230.89,238.23,219.84,221.4,224.0,229.78,234.39,233.0,224.96,221.13,217.43,220.06,217.84,221.28,219.16,233.75,229.31,225.22,224.23,225.47,225.0,224.6,216.2,220.62,219.1,222.25,227.11,225.36,222.53,221.81,225.03,228.83,235.74,242.78,242.93,246.06,252.1,272.41,270.4,280.09,277.82,274.81,278.22,283.33,279.8,279.08,277.1,290.89,289.06,289.78,279.82,280.37,274.68,278.16,279.67,284.01,276.69,275.31,278.47,286.09,296.18,291.13,289.88,289.9,290.59,280.2,274.54,266.5,257.8,258.83,263.67,265.73,264.59,253.55,252.48,253.08,253.94,268.36,276.35,277.78,279.73,278.62,282.01,283.58,283.5,280.13,280.07,279.53,285.8,290.56,285.62,289.96,293.83,302.13,299.92,301.9,297.58,301.25,309.21,312.68,328.39,321.77,308.94,306.46,295.0,305.83,307.88,303.99,295.01,295.14,296.05,307.28,301.03,291.2,290.53,302.21,298.89,299.53,311.01,319.43,325.11,317.03,314.78,341.84,346.59,363.44,375.49,397.06,397.12,408.31,425.82,398.8,385.04,367.82,359.24,359.67,342.23,342.68,341.91,342.83,352.97,361.73,364.82,350.89,350.21,350.35,359.48,363.4,365.82,358.11,366.94,362.27,358.46,355.55,368.61,385.07,393.18,397.69,387.18,370.0,362.55,358.18,349.18,341.89,340.86,333.82,335.26,332.35,328.79,327.33,320.21,336.73,315.22,306.89,307.32,314.84,313.46,314.63]},\"CHF\":{\"k\":\"1990-01\",\"v\":[41.111,43.0148,43.442,43.8773,45.5321,45.6126,45.9486,47.6237,47.7275,47.928,48.2085,47.6578,54.3685,54.9053,52.3093,52.1911,51.9576,50.2638,49.8624,50.151,50.8311,50.8707,53.7248,55.3801,54.9186,53.4312,52.8156,52.7335,53.1382,55.0514,58.0935,58.9233,60.5965,59.9174,57.7889,58.3764,56.6741,56.3881,57.3032,60.0517,60.5547,61.2938,62.4094,63.6133,65.9291,67.8633,66.5641,68.286,69.3106,70.65,72.1395,71.7877,72.5952,74.7096,76.1831,81.5628,83.7396,85.0593,84.1426,83.9562,86.5607,87.9985,99.4299,105.65,106.0,108.41,109.31,109.16,112.36,116.89,118.77,119.4,120.32,120.83,122.1,121.98,121.08,121.58,124.22,128.02,127.19,126.41,125.08,123.43,119.45,119.23,120.73,122.98,126.88,128.3,129.59,130.77,133.09,134.95,139.44,140.14,139.76,141.97,141.48,140.48,142.55,144.51,143.84,148.34,157.28,161.43,157.25,159.47,156.21,156.65,158.98,157.59,156.14,156.32,156.13,158.41,159.4,161.6,158.85,158.86,158.3,159.39,160.25,164.2,166.46,166.41,167.83,168.24,171.41,173.77,173.56,175.04,173.31,173.0,173.54,174.66,168.43,162.4,164.48,165.75,171.69,172.54,171.43,167.67,165.37,164.82,166.77,165.28,167.3,164.88,168.71,167.6,166.49,166.24,162.38,160.82,164.41,167.05,167.13,164.13,162.18,169.49,170.41,168.55,165.1,165.18,166.34,170.32,168.82,167.25,161.66,161.07,164.23,166.56,163.65,161.73,160.5,159.92,161.25,159.99,159.34,157.21,158.0,160.39,163.09,161.81,158.21,157.45,158.64,162.59,162.5,163.25,161.81,161.47,166.24,168.57,168.58,174.59,176.9,173.95,173.24,168.01,162.56,159.04,157.16,156.25,154.97,150.23,150.5,151.3,149.04,155.79,153.78,150.26,154.4,152.6,158.04,163.03,165.35,158.97,152.45,150.21,143.17,145.5,150.98,171.47,175.03,172.22,187.41,200.16,201.75,194.94,186.49,185.15,178.97,177.25,179.46,177.35,179.36,181.91,182.48,184.86,183.27,185.21,195.19,204.56,210.83,209.97,215.58,203.71,205.04,216.78,215.51,209.02,210.56,204.44,213.0,220.74,227.67,243.42,237.52,241.4,251.19,247.82,253.81,240.81,242.32,245.2,244.48,244.42,238.36,232.23,235.12,233.18,234.21,236.37,239.29,238.04,247.04,244.84,235.46,239.98,238.48,242.73,242.94,239.33,241.69,245.2,245.59,254.0,255.81,252.16,249.56,251.1,254.99,259.04,259.36,254.88,255.16,258.47,291.26,289.06,286.06,288.49,294.8,298.39,296.95,289.15,286.95,286.04,288.26,290.39,287.64,281.7,284.95,284.97,284.47,288.26,289.29,285.09,282.71,282.01,287.07,290.44,288.41,289.41,289.28,290.47,284.09,283.51,277.38,267.05,268.85,268.47,267.96,267.91,263.82,270.08,267.2,262.18,269.13,279.11,279.3,283.06,287.82,283.75,283.32,285.79,283.1,279.66,279.34,283.76,287.51,288.86,293.69,300.13,304.92,301.87,303.91,302.7,310.65,316.66,326.41,338.26,331.73,324.59,327.87,324.06,334.34,337.59,333.66,331.99,332.78,329.87,330.43,326.87,322.43,319.87,329.11,326.94,324.68,336.97,346.43,353.09,344.87,341.27,367.68,367.14,371.32,387.3,409.21,415.0,419.39,427.36,413.24,413.26,397.62,388.61,388.66,381.23,381.9,379.56,392.28,401.61,402.53,403.61,393.59,404.42,407.81,410.1,409.2,402.05,393.9,410.59,406.01,417.69,419.47,428.2,437.47,441.15,437.37,428.25,418.77,433.83,431.74,428.64,428.1,422.37,418.87,419.75,413.59,412.55,414.35,414.22,427.97,400.45,391.53,384.49,388.37,388.15,387.77]},\"GBP\":{\"k\":\"1990-01\",\"v\":[102.97,108.53,106.68,106.83,108.44,111.16,115.67,118.46,117.27,119.46,119.03,117.33,133.7,136.69,132.47,131.48,130.47,126.78,127.35,128.32,130.08,129.56,137.17,140.17,139.37,138.29,137.37,140.46,143.44,145.51,148.64,148.6,143.09,130.5,126.15,128.73,128.42,123.17,127.2,135.49,135.87,136.46,141.51,142.07,142.56,147.03,147.6,149.06,152.2,152.34,153.78,153.18,154.28,156.66,155.98,165.81,169.11,172.73,173.19,173.99,175.5,175.79,186.47,193.38,196.48,200.22,201.56,204.71,208.18,211.27,212.16,213.96,217.16,221.8,223.03,225.54,230.2,235.6,237.97,238.62,244.29,252.16,265.02,272.46,275.75,281.76,283.97,292.86,296.39,304.26,320.71,317.16,313.51,319.51,331.16,334.74,337.11,340.67,349.81,353.64,344.97,356.5,357.88,362.06,370.47,365.55,361.7,362.27,356.81,363.56,377.89,379.52,380.12,383.48,380.73,384.05,394.73,398.9,400.26,406.01,412.34,416.72,421.04,432.26,430.88,412.77,417.69,429.75,431.73,446.23,439.89,431.97,417.46,419.09,423.59,429.48,421.18,406.11,409.08,400.53,410.88,409.08,406.49,398.82,395.48,398.16,397.55,394.52,388.11,376.86,386.3,385.51,386.77,386.6,373.96,367.63,365.81,366.05,359.84,356.45,344.63,372.07,376.54,371.24,366.57,366.68,374.33,377.16,381.92,388.74,377.43,376.38,376.61,380.92,375.35,371.77,363.51,356.78,351.21,353.71,352.8,353.34,353.61,363.44,368.36,372.29,358.49,356.8,362.81,369.64,369.54,372.04,365.47,368.35,378.38,382.18,383.99,396.68,403.43,405.52,406.49,397.13,384.07,377.44,382.74,379.22,367.34,362.12,364.6,370.45,366.11,376.59,367.86,360.59,359.02,351.35,342.65,349.12,335.53,319.28,312.73,306.27,292.31,297.55,301.18,330.71,319.53,293.57,304.94,336.35,330.88,328.98,318.79,327.38,316.01,313.08,305.11,293.3,301.4,303.71,305.19,309.6,294.37,303.64,322.93,340.13,339.57,341.74,336.0,312.68,322.28,327.35,325.08,320.39,312.68,300.48,304.15,300.74,302.6,310.69,327.02,341.01,360.58,360.47,369.38,347.33,350.23,358.7,365.43,364.31,363.21,353.61,356.08,349.72,351.13,351.79,353.17,339.42,352.4,351.08,344.34,347.11,342.15,348.62,356.12,347.95,355.32,358.98,365.88,375.96,374.54,372.49,373.56,380.42,390.63,393.72,395.9,390.38,388.24,394.33,412.82,414.44,419.45,415.24,424.83,432.87,440.74,436.36,428.22,424.79,441.96,433.14,417.12,400.24,398.83,393.18,404.56,397.41,373.78,362.76,362.24,343.48,355.57,369.8,358.91,361.79,357.81,367.34,362.15,351.44,346.14,334.06,344.81,348.0,351.27,354.81,350.14,352.66,353.64,357.43,361.28,367.18,365.85,360.17,363.82,366.88,365.82,359.51,360.98,364.32,368.13,372.69,372.83,361.99,361.65,357.1,373.19,378.71,389.02,390.32,393.75,400.96,386.45,407.41,395.56,386.84,388.19,387.37,396.54,399.53,401.6,396.18,402.41,410.44,425.77,416.74,409.98,407.52,417.3,412.56,411.41,426.05,429.95,433.02,429.54,426.07,450.38,448.12,452.48,462.54,475.7,475.87,462.13,480.49,468.07,469.0,448.95,434.68,436.61,425.97,427.82,431.64,441.5,448.29,448.51,443.96,435.64,443.1,444.91,454.03,461.96,458.12,452.51,466.4,465.82,463.54,469.97,481.35,490.84,497.54,490.71,485.28,477.67,476.06,478.9,473.16,461.67,458.18,450.71,447.39,436.61,439.97,442.46,435.03,449.26,424.41,413.83,409.79,420.97,424.48,425.39]},\"JPY\":{\"k\":\"1990-01\",\"v\":[0.4301,0.4396,0.4287,0.412,0.4203,0.4224,0.4291,0.4231,0.4496,0.4732,0.4699,0.4556,0.5174,0.5335,0.5283,0.5484,0.5472,0.5503,0.5604,0.5573,0.5608,0.5756,0.5953,0.5998,0.6144,0.61,0.5995,0.5993,0.6059,0.6185,0.6162,0.6065,0.6294,0.6507,0.6669,0.6689,0.6699,0.7086,0.7443,0.7804,0.7943,0.8414,0.8784,0.9174,0.8872,0.9143,0.9242,0.9093,0.9154,0.9689,0.9809,0.9992,0.9894,1.001,1.0237,1.0765,1.0946,1.0924,1.1119,1.1144,1.1181,1.1386,1.2864,1.4334,1.4568,1.4844,1.4487,1.3804,1.3311,1.3292,1.3327,1.3655,1.3434,1.3673,1.3792,1.388,1.4285,1.4035,1.402,1.4273,1.4259,1.4155,1.42,1.4384,1.4096,1.4098,1.4428,1.4317,1.5299,1.6191,1.6665,1.6784,1.623,1.6192,1.5672,1.5564,1.5918,1.6532,1.6322,1.601,1.5614,1.5405,1.548,1.5323,1.6378,1.7865,1.8087,1.8509,1.9096,1.9145,1.9486,1.9695,1.9292,1.9898,2.0245,2.1121,2.2734,2.27,2.3562,2.4526,2.3934,2.3801,2.5064,2.587,2.6411,2.5793,2.5668,2.6695,2.8186,2.836,2.8321,2.6357,2.419,2.4816,2.4153,2.4199,2.4262,2.372,2.3223,2.2958,2.3655,2.3234,2.313,2.1822,2.0823,2.0951,2.1336,2.092,2.1043,2.0605,2.1069,2.1092,2.0606,2.0032,1.9585,1.9008,1.906,1.9062,1.9165,1.8878,1.8099,1.8924,1.954,1.9617,1.9816,1.9966,2.0287,1.9994,1.9708,1.9529,1.9039,1.9401,1.8808,1.9048,1.8638,1.8499,1.8415,1.8143,1.803,1.7667,1.8176,1.7849,1.7634,1.7878,1.8612,1.8837,1.8292,1.7981,1.8068,1.8244,1.7984,1.7977,1.7933,1.7873,1.8504,1.8489,1.8387,1.877,1.8916,1.8475,1.8419,1.7848,1.7131,1.6406,1.6217,1.6073,1.6099,1.5311,1.522,1.5212,1.4809,1.6057,1.5856,1.5219,1.5628,1.5481,1.6142,1.6598,1.6601,1.5709,1.5263,1.4583,1.3762,1.4421,1.5717,1.9619,2.1534,2.165,2.3424,2.5233,2.3847,2.2682,2.1388,2.0716,2.045,1.9961,2.0419,2.0057,2.0378,2.0826,2.0684,2.1972,2.1576,2.1189,2.3937,2.5368,2.5402,2.5593,2.561,2.4107,2.4455,2.5217,2.4953,2.4046,2.3686,2.2034,2.2928,2.3059,2.3646,2.4666,2.698,2.8258,2.9447,2.9673,3.0954,2.8037,2.6847,2.7555,2.8825,2.9585,2.9502,2.8588,2.8288,2.7533,2.7171,2.6058,2.4856,2.3539,2.4641,2.3434,2.23,2.3033,2.2617,2.2977,2.264,2.2111,2.206,2.1196,2.1385,2.2262,2.2018,2.1704,2.1796,2.205,2.2495,2.2895,2.2634,2.2497,2.1166,2.1139,2.3035,2.2786,2.3273,2.3226,2.2734,2.2487,2.2962,2.2726,2.3223,2.3087,2.373,2.3755,2.4525,2.4384,2.4817,2.5063,2.5532,2.6532,2.7285,2.7335,2.7027,2.682,2.6414,2.5511,2.5299,2.5674,2.5666,2.6344,2.4964,2.4748,2.3689,2.3468,2.3376,2.3347,2.3559,2.3435,2.2866,2.3393,2.3858,2.3588,2.4465,2.5109,2.4926,2.5201,2.4888,2.4987,2.5028,2.5239,2.5721,2.5376,2.5141,2.5606,2.6434,2.6422,2.6793,2.7663,2.8117,2.7741,2.7724,2.7278,2.7554,2.8092,2.9075,3.0495,3.0018,2.8709,2.8699,2.7825,2.897,2.9265,2.9113,2.843,2.8438,2.8093,2.8259,2.7634,2.6679,2.6387,2.741,2.7215,2.719,2.7501,2.8018,2.8533,2.759,2.7326,2.8843,2.7445,2.8221,2.8023,2.9041,2.9383,2.856,2.8918,2.8025,2.8546,2.8182,2.7039,2.6932,2.5622,2.5005,2.4208,2.4308,2.4378,2.4489,2.4384,2.3431,2.4289,2.396,2.4046,2.4274,2.378,2.2976,2.3248,2.2959,2.451,2.4825,2.4628,2.5077,2.5581,2.5428,2.5501,2.481,2.5141,2.476,2.415,2.3273,2.3078,2.2567,2.2137,2.1429,2.1095,2.0887,2.0639,2.1221,1.9818,1.9395,1.9121,1.9374,1.974,2.0209]},\"CZK\":{\"k\":\"1993-01\",\"v\":[2.8966,2.9516,2.9982,3.0739,3.0667,3.1063,3.1729,3.2101,3.2435,3.3776,3.3626,3.3607,3.385,3.4249,3.484,3.4837,3.5135,3.5555,3.5798,3.8235,3.8665,3.8955,3.9232,3.9549,4.0165,4.0831,4.444,4.6526,4.7268,4.803,4.8593,4.8929,4.9703,5.0891,5.1562,5.2132,5.2555,5.3366,5.3556,5.4052,5.4813,5.4986,5.658,5.8106,5.8942,5.8709,5.9387,5.9885,6.0315,6.1404,6.0547,6.004,5.8299,5.7154,5.7056,5.784,5.8312,5.9423,5.9086,5.8061,5.83,6.0155,6.1956,6.2732,6.4756,6.4863,6.8315,6.8747,7.2004,7.3956,7.3137,7.2326,7.019,6.6221,6.6765,6.6446,6.6396,6.7227,6.8606,6.9625,7.0306,7.0361,7.01,7.0564,7.08,7.1775,7.2159,7.1152,7.0878,7.2199,7.3079,7.3786,7.4026,7.4624,7.6309,7.606,7.544,7.67,7.7039,7.7267,7.5136,7.2819,7.3502,7.3719,7.4932,7.6077,7.5504,7.6027,7.6045,7.6603,7.791,7.9861,7.9799,8.0118,8.3029,7.9661,8.0787,7.9434,7.7473,7.5681,7.635,7.747,7.7351,7.7675,7.8307,8.3157,8.2727,8.0396,7.8967,7.9959,8.1099,8.1892,8.0779,8.0087,7.6804,7.7008,7.9099,8.0039,7.9221,7.8668,7.837,7.8336,7.8427,8.0235,8.1337,8.1345,8.223,8.2362,8.3375,8.2919,8.1667,8.2617,8.3853,8.4869,8.578,8.7215,8.7292,8.856,9.1047,9.3145,9.2805,9.5953,9.7542,9.7333,9.6686,9.4418,9.2345,9.143,9.1195,8.9718,8.9054,8.781,8.7995,8.7683,8.7073,9.1616,9.1876,9.1837,9.5209,9.6207,9.8288,10.3317,10.3129,10.1245,9.8682,9.9702,9.8536,9.713,9.8266,10.5016,10.5326,10.1474,10.2996,10.481,11.1698,11.0278,10.5466,10.566,10.5474,10.5301,10.7253,10.3825,10.4966,10.4734,10.31,10.4396,10.3912,10.4919,10.7854,10.9186,11.2045,11.3462,11.4436,11.1699,11.1842,11.0282,11.2619,11.1696,11.1058,10.9172,10.9493,10.989,10.9999,11.2215,11.6072,11.9478,12.1412,11.9224,12.0358,11.6075,11.844,11.8833,11.6006,11.4504,11.25,11.1488,11.4834,11.3111,11.1278,11.3349,11.5018,11.491,11.809,11.5581,11.2948,11.4798,11.3669,11.5993,11.6233,11.4865,11.0594,10.9094,11.0049,11.303,11.3703,11.1975,11.1009,11.1427,11.2829,11.2853,11.3482,11.1589,11.0921,11.2455,11.3466,11.1156,11.0835,10.9125,11.181,11.4244,11.498,11.5238,11.5598,11.4838,11.5486,11.6329,11.6433,11.4779,11.5025,11.5223,11.64,11.6025,11.6247,11.4786,11.4231,11.361,11.4235,11.5511,11.4349,11.4171,11.4618,11.6163,11.6579,11.7378,11.7611,11.6612,11.8262,12.0296,12.213,12.2114,12.1511,12.312,12.277,12.2895,12.3609,12.518,12.5569,12.578,12.6815,12.5427,12.4285,12.4925,12.468,12.3574,12.304,12.5084,12.6116,12.5978,12.7317,12.6699,12.852,12.9028,13.0672,12.9703,13.2611,13.4601,13.0118,13.0834,12.8637,13.0311,13.2443,13.3346,13.4856,13.3217,13.5974,13.645,13.7408,13.8415,13.9664,13.9092,13.8364,13.7479,13.9357,13.8142,13.8826,14.1523,14.356,14.5583,14.6578,14.6072,15.0626,15.3409,15.5348,16.0466,16.431,16.3661,16.4459,17.0541,16.6886,16.7978,16.5298,16.2323,16.2555,16.0148,15.7822,15.6405,15.8642,15.9717,15.8504,15.6743,15.4872,15.5983,15.4572,15.3793,15.6212,15.524,15.6008,15.9316,15.5283,15.6758,15.732,15.8867,16.1752,16.3902,16.3621,16.0757,15.9915,16.2322,16.2075,16.21,16.2111,16.1708,16.0854,16.0356,15.8537,15.8688,15.8241,15.6064,15.9256,15.1323,14.7341,14.6206,14.8497,15.029,15.0755]},\"PLN\":{\"k\":\"1990-01\",\"v\":[65.516,67.3579,69.1314,68.6995,67.9481,68.417,67.3759,65.635,65.6541,64.6427,63.793,64.0745,72.7667,73.2071,76.2453,79.1217,73.8472,67.4558,67.4825,67.4944,67.6591,67.4312,69.3952,69.3471,68.2482,65.6511,59.2528,58.7487,57.8432,57.2997,57.2878,56.3918,55.8727,54.9038,54.2367,53.6746,52.7283,52.4764,52.4023,52.9354,52.2052,52.0409,52.4904,51.4517,47.5726,48.7491,48.0342,47.4284,47.2133,46.9933,46.8442,46.0581,45.6445,45.387,44.7537,47.0084,46.8025,46.4227,46.1423,45.9064,45.8052,45.7672,48.6851,50.2102,51.714,53.5381,53.43,53.494,54.301,54.8067,54.9141,55.378,56.5078,56.7546,56.691,56.7729,56.8606,56.2847,56.4098,56.4119,56.3904,56.4232,56.6124,57.3144,56.7215,57.2355,57.4342,57.5886,57.2114,57.1366,56.4858,56.8288,56.686,57.2286,55.9951,57.1636,58.3611,58.7154,60.8946,61.9005,61.5946,62.1166,62.9568,61.9351,61.2412,61.7088,63.1186,62.1963,61.1111,58.9209,59.0406,58.9734,59.8523,60.9143,62.3425,60.4149,59.4975,58.5382,57.9986,60.3402,61.2804,62.8069,65.1531,64.514,63.6057,62.2475,64.2117,66.1426,66.9868,66.2832,67.7236,68.3884,68.6751,70.5308,72.1335,74.3701,74.1339,72.9917,68.8735,65.6455,66.5376,68.14,69.1571,68.9303,67.8958,66.8644,67.5646,67.4012,65.686,63.0602,60.357,60.0714,59.9208,60.2334,60.21,59.2294,59.0567,58.8465,56.6413,57.1601,56.71,58.9133,59.4442,59.3968,57.2507,55.6671,56.1592,56.8195,56.0867,54.1849,53.1774,52.6109,53.5779,55.1224,55.9694,56.1631,56.6113,57.1294,57.6359,59.448,60.4219,61.1288,61.0358,59.7249,60.3529,61.3317,60.1396,60.4638,62.7811,64.2048,63.2391,65.6306,65.6305,66.3072,67.1641,67.7662,67.3625,67.6455,69.4384,70.2803,69.2115,68.458,67.6732,66.6151,65.443,65.0431,64.2972,64.4956,65.6878,65.7355,65.5217,66.9506,66.8567,67.7426,69.5836,70.3,70.9384,73.2948,73.5058,73.7203,72.7673,71.8565,71.1387,71.6634,71.3331,72.739,71.1226,66.2213,66.1816,64.2114,65.8232,66.6262,63.9263,62.2074,63.3331,65.3702,65.3778,63.7032,65.0561,65.9334,66.1949,67.5637,68.2161,68.4696,68.237,68.5625,69.5296,70.5409,71.3349,69.3793,69.7153,69.4725,70.7876,69.0614,67.4812,66.8367,67.7498,67.2181,67.0023,66.1283,65.7114,68.2032,69.757,67.9471,70.2235,69.4822,70.6441,70.5587,68.3945,68.3086,68.4288,68.1434,68.7464,68.6853,68.3089,69.7854,70.9807,70.2002,72.8993,72.2142,69.956,69.0288,68.9996,70.7991,70.7453,70.3458,71.0668,71.8947,72.3618,74.316,74.1888,73.4398,72.8653,73.9669,74.7525,74.8845,74.7505,73.1828,72.8593,73.7374,73.9772,73.4876,73.5455,74.5238,75.0619,75.0152,75.0248,74.2775,74.2477,73.2288,73.4852,73.2917,71.416,70.5879,72.4827,72.2659,71.433,71.3684,71.505,72.1357,71.4432,71.2685,70.3327,70.3923,70.7552,71.6101,72.2458,73.5271,73.7584,73.2056,72.4037,71.3375,72.2282,72.7136,73.7907,74.5049,74.2864,74.8407,74.1705,74.3322,73.9616,74.979,75.0722,75.3709,75.5284,75.2322,74.9305,75.2306,74.5176,73.6336,73.5243,74.9301,75.6509,75.6563,76.3613,75.2104,76.3703,77.0624,77.8482,77.4024,78.664,78.8431,77.8483,78.4992,77.5201,78.2196,78.9246,79.3108,80.6247,79.8286,80.059,80.1631,79.2341,79.6458,79.5025,79.0506,78.0981,77.7538,78.3177,77.0126,77.1682,78.5957,78.451,79.655,78.7926,78.476,79.2557,80.6414,82.7174,85.3618,84.7478,85.1263,85.2398,87.0709,86.5943,87.0508,84.3109,81.1817,82.1025,81.0343,82.1235,83.0825,85.3106,86.3337,84.0552,85.4062,86.1504,88.1048,87.5286,89.7094,91.7345,91.2051,90.4721,91.3612,91.7481,91.9672,92.343,93.0982,94.481,96.4753,96.9531,96.6221,95.602,95.2932,94.9603,94.2569,93.8364,93.0357,91.9562,91.7702,90.6638,91.143,91.1957,89.7521,91.1127,86.8064,84.4647,83.148,83.2491,84.32,84.4583]},\"CNY\":{\"k\":\"2005-04\",\"v\":[23.1784,23.9875,24.7356,24.9095,24.5508,24.7941,25.9139,26.3518,26.3928,25.6818,26.1748,27.0082,26.9934,25.6343,26.9012,27.3806,26.8662,27.178,26.803,25.5582,24.5723,25.0805,24.9994,24.3867,23.564,23.9601,24.4396,23.7645,24.7412,24.2405,23.5175,23.3584,23.5761,24.0277,24.8097,23.6711,23.0206,22.8385,22.5971,21.5033,23.0004,24.5021,28.6347,30.5204,28.7919,30.9564,34.1339,34.1293,32.7726,30.2752,29.2822,28.271,27.7036,27.3446,26.546,26.609,27.3954,27.6581,29.021,28.6559,29.0214,32.2829,33.8189,32.7968,32.1677,32.0359,29.5716,30.335,31.5952,31.2451,30.1827,29.4795,28.1441,28.6554,28.651,29.0622,29.6529,32.416,34.0043,35.8901,36.416,37.7383,34.8931,35.0748,35.5543,36.3607,36.8499,36.572,35.3706,34.9762,34.6601,35.2862,34.934,35.5551,35.1554,37.5974,37.0755,36.678,36.5528,36.7576,36.7552,36.699,35.4185,36.2053,36.0666,36.7229,37.3482,36.5053,35.748,35.5583,36.1134,36.9103,38.2993,39.5444,39.6547,40.1636,40.7253,43.8028,43.2484,44.89,44.7886,44.2997,44.8335,45.634,44.1496,43.8219,43.6364,45.6576,44.796,44.0787,42.7226,43.088,42.3984,42.5924,42.4202,42.5323,41.6196,41.2575,41.377,41.8042,42.7833,42.2191,42.1798,42.0322,42.169,40.6957,40.3209,39.3444,38.6468,39.4047,39.7942,40.1309,40.1117,39.449,39.9336,40.0351,40.3031,42.0982,42.7362,41.3533,40.8429,40.6409,40.7462,40.864,41.168,41.2634,41.5654,41.6424,42.5472,42.3523,41.3881,42.1617,41.6048,42.4474,42.2539,43.0096,42.4125,43.5247,44.1911,44.5164,46.4094,45.2765,43.6077,43.7186,42.5783,44.8946,45.7637,46.0444,45.1014,45.6249,45.837,47.1975,46.1986,45.2774,45.2202,46.679,46.1517,46.3836,48.434,49.9955,51.047,49.874,49.6189,53.8778,53.8607,54.2785,56.084,58.9687,58.3782,58.1546,59.2005,55.5865,55.2004,54.127,52.5541,52.1702,49.6757,49.0295,47.7349,47.6944,48.6827,49.5666,49.9154,48.5618,49.0334,48.8553,49.973,50.4604,50.5343,49.51,50.5807,49.8863,50.132,50.2307,52.0098,53.4183,53.9979,54.4912,53.2219,51.0298,49.6707,49.6586,48.623,47.6648,47.5145,46.8544,47.0861,46.769,46.6682,46.9668,46.3526,48.8319,46.1204,45.146,45.3535,46.4615,46.5335,46.8707]},\"CAD\":{\"k\":\"1999-01\",\"v\":[142.14,149.14,153.65,158.31,161.16,163.58,162.69,160.15,164.54,163.0,168.21,170.66,173.63,179.51,182.58,186.1,191.22,185.29,187.42,194.62,202.71,203.49,200.03,193.74,187.99,189.42,188.13,192.07,191.72,189.98,189.34,181.17,179.51,179.44,177.61,175.71,172.55,175.45,176.07,172.95,171.57,165.96,161.11,160.0,158.02,157.32,151.43,148.79,146.89,150.4,154.08,154.95,153.48,165.39,168.07,166.73,166.68,165.16,168.82,164.21,161.72,156.48,155.29,155.85,152.91,153.43,154.07,155.49,157.08,158.13,157.9,150.53,153.49,151.11,152.44,155.22,158.07,164.82,167.33,165.0,170.19,178.01,180.06,183.42,178.78,183.33,187.41,188.94,185.13,193.36,194.02,191.41,193.21,187.63,176.9,166.96,166.11,165.46,161.5,160.43,167.95,175.12,171.26,176.99,177.5,180.72,179.86,173.23,172.3,177.87,167.65,158.96,159.48,153.41,145.12,149.67,158.35,166.24,171.18,159.78,172.47,187.15,184.71,182.44,179.44,178.03,171.98,173.98,172.59,171.92,171.42,177.52,181.08,187.68,191.1,197.2,211.99,222.12,213.01,209.88,208.86,193.63,199.3,208.33,207.49,201.1,198.18,191.78,192.3,189.79,196.31,193.6,206.69,212.29,222.48,225.7,235.12,220.34,222.75,225.6,227.39,228.02,229.77,226.51,225.9,220.4,220.75,220.12,222.97,217.21,228.12,225.14,220.56,217.5,216.54,216.19,216.95,208.67,210.46,205.93,203.24,205.52,202.9,202.47,203.73,207.7,213.32,215.79,220.62,216.59,217.1,218.67,225.48,216.14,222.16,224.96,225.78,225.19,220.61,212.95,210.43,211.98,219.17,211.04,203.77,202.68,211.72,213.98,215.09,216.9,217.88,213.09,210.33,210.38,212.78,221.93,220.21,221.28,216.51,216.31,205.96,206.35,209.49,204.43,210.66,209.42,208.26,207.28,203.93,200.78,195.83,199.54,208.57,210.54,211.38,214.46,213.55,216.84,214.91,211.28,210.45,212.02,209.17,213.62,215.82,214.88,221.38,221.37,228.06,227.32,228.04,225.89,230.24,232.79,224.24,233.32,230.48,227.93,226.88,222.92,231.37,233.01,232.58,230.2,231.84,233.27,244.26,240.79,240.05,237.84,241.3,237.31,236.45,249.96,254.21,254.11,251.14,247.54,270.01,274.6,282.94,293.03,306.63,307.5,306.51,310.41,296.71,283.57,273.63,267.31,262.84,253.77,253.55,257.11,259.33,261.88,267.32,266.24,255.75,260.56,261.12,266.43,268.29,267.66,261.98,267.66,264.23,262.27,262.6,268.06,275.53,276.23,276.28,270.69,257.66,258.86,258.18,255.25,249.78,246.92,241.36,239.5,236.46,238.11,237.55,234.57,245.59,229.22,223.52,218.96,223.02,225.38,227.4]},\"AUD\":{\"k\":\"1999-01\",\"v\":[136.42,142.92,146.98,151.33,155.94,157.78,159.04,154.12,157.75,156.98,157.61,161.03,165.33,163.77,162.44,162.79,165.02,162.7,162.87,167.52,166.61,162.55,161.17,161.36,156.89,154.16,147.47,149.66,153.64,150.15,147.44,146.21,142.06,142.18,146.41,142.57,142.67,143.56,146.63,146.5,146.33,144.59,137.74,135.95,136.06,136.59,133.5,130.62,131.96,135.35,136.84,137.88,137.58,148.87,153.49,151.69,150.56,151.67,158.73,159.26,161.43,161.84,154.78,155.15,148.51,144.73,145.84,145.13,142.37,144.69,145.48,140.77,143.76,146.19,145.67,148.29,152.06,156.89,154.03,151.45,153.59,158.03,156.62,158.17,155.23,156.24,157.74,159.33,156.98,159.26,164.5,163.45,162.97,159.62,155.15,151.04,152.93,151.6,149.58,150.59,151.69,157.12,156.19,155.24,154.06,158.51,155.55,151.58,153.36,162.28,155.15,149.86,151.2,148.33,141.47,139.08,137.21,134.59,136.98,131.86,142.53,151.25,155.23,159.58,158.11,160.6,155.44,158.1,160.82,164.32,167.0,168.82,172.45,175.77,178.35,183.61,191.8,196.67,194.56,196.32,202.34,193.46,199.49,208.72,205.31,200.22,195.56,194.18,198.71,196.73,202.07,199.57,211.82,219.51,230.5,233.98,247.74,235.82,233.13,231.81,228.98,233.9,239.98,235.59,229.74,223.97,228.92,228.14,232.3,226.04,241.76,238.23,222.71,211.59,206.54,203.16,208.48,205.73,205.73,197.02,196.71,203.79,204.72,207.25,206.42,210.72,214.85,219.44,219.91,213.26,212.66,208.23,219.99,210.67,216.66,214.84,216.91,214.71,209.91,204.18,196.95,199.74,208.07,209.5,202.94,199.56,209.93,210.45,203.48,206.98,213.94,211.18,209.03,212.21,215.5,217.52,216.83,222.18,220.96,218.82,208.24,207.47,207.65,204.01,206.32,205.28,202.63,202.23,201.62,198.76,196.5,195.17,201.98,207.14,205.55,204.94,200.64,200.43,205.57,203.69,200.19,200.01,197.97,203.26,201.65,198.33,202.53,198.97,205.71,203.72,206.19,204.73,206.55,206.17,194.4,206.6,209.75,213.02,215.4,212.35,221.13,219.44,221.23,222.09,227.86,229.54,236.74,231.98,225.96,222.03,224.33,218.31,219.13,230.32,233.44,232.9,227.46,225.63,252.04,255.67,256.39,263.69,272.05,276.4,272.73,270.38,263.15,259.96,255.13,248.13,240.14,229.05,227.81,229.41,230.81,228.96,232.5,231.62,227.97,233.94,232.65,234.7,238.21,238.27,237.29,243.62,241.68,238.36,240.81,247.33,251.61,249.28,247.65,243.91,233.02,227.82,230.55,226.89,223.49,221.24,220.08,219.3,216.19,218.32,222.02,225.87,236.33,223.74,220.35,215.95,219.26,222.6,225.98]},\"SEK\":{\"k\":\"1999-01\",\"v\":[27.6204,28.0993,28.3713,28.3121,27.8874,28.2478,28.6381,28.9682,29.5678,29.5214,29.5342,29.6241,29.6528,30.093,30.6489,31.2627,31.4355,31.2272,30.9528,31.089,31.1785,30.8431,30.6067,30.591,29.7567,29.5977,29.1988,29.3024,28.5164,26.8448,26.8729,26.9604,26.458,26.6496,26.6934,26.2111,26.4257,26.5197,27.0195,26.5197,26.4416,26.6335,26.6241,26.5254,26.6038,26.7472,26.2331,25.9536,26.2038,26.8031,26.6189,26.8288,26.8447,28.6479,28.7108,28.0978,28.1734,28.3866,28.8314,29.3445,28.9297,28.678,27.4334,27.3224,27.7084,27.6739,27.1737,27.0908,27.239,27.2227,27.2691,27.3668,27.2433,26.8222,26.9359,27.0743,27.4069,26.8905,26.1435,26.1771,26.3369,26.7302,26.2562,26.7915,26.9261,26.9313,27.7469,28.44,28.1178,29.4958,30.1074,29.7955,29.6141,28.8637,28.4414,28.101,27.9625,27.567,26.8697,26.6324,26.9845,26.829,26.8835,27.3723,27.2881,27.3637,27.3989,26.843,27.1463,27.9964,27.648,27.0818,26.6031,25.863,24.5142,25.0987,25.1675,26.401,26.2039,24.6533,26.0956,27.3614,27.2197,27.1407,26.6419,25.8022,25.1341,26.4213,26.6579,26.0413,26.2187,26.2498,26.4305,27.262,27.2826,27.484,28.6404,29.4069,29.8832,29.874,30.5826,29.5298,29.5736,30.6574,30.8936,30.855,30.4875,29.5753,29.8054,29.2883,29.306,29.7177,31.2048,32.5668,33.8303,33.7324,34.7262,32.9579,32.885,33.2562,32.6566,33.0785,33.5062,33.6862,33.4667,32.7473,32.7925,33.0367,34.102,34.4077,36.3014,35.3711,34.107,34.0543,34.0517,34.4082,34.5507,33.6967,33.5232,33.5115,34.2414,34.9641,35.1319,34.0291,33.7301,33.6447,33.5562,34.1659,34.0696,33.5376,33.2191,33.0525,33.6105,32.3394,32.8262,32.1094,32.9267,33.6471,33.193,32.7487,33.3405,33.2976,33.5298,34.0073,33.9009,32.9824,33.5139,33.8452,33.8448,33.6398,33.181,32.6835,32.2707,31.6266,31.3522,32.1588,32.488,32.5562,32.506,32.4748,31.9046,31.6069,31.9855,31.8766,32.3462,32.2419,31.6728,31.5151,31.4939,31.3678,30.7263,30.0559,30.6516,31.3945,31.4912,30.8641,31.1068,31.1874,31.3195,31.4057,31.1453,30.2825,30.0897,30.6425,30.2672,30.3556,30.8013,30.4507,31.0797,30.6843,31.3279,31.5483,31.6813,31.9058,31.7836,32.7708,33.1007,33.1548,33.9166,33.8477,34.5816,34.8714,35.1723,35.2928,35.5808,35.5013,35.9534,35.4846,34.8521,34.5881,35.0322,34.4421,34.6588,35.8854,36.2858,35.7748,34.6317,33.8869,35.7146,36.3332,36.6301,37.4201,38.2155,38.2864,37.4794,38.2027,37.38,37.1162,35.3451,34.453,34.2939,33.1078,32.7562,31.7402,32.5833,32.6022,32.6384,33.0871,32.8419,34.0844,33.8591,34.4941,34.9502,33.8561,33.3258,34.9823,34.0691,34.4551,34.7668,35.2401,35.3334,35.8125,35.8657,35.8429,36.4566,37.0368,37.123,36.5237,35.6476,35.5219,35.602,35.5441,34.955,35.3347,35.9676,35.6007,36.1668,34.0515,32.9827,32.3108,32.5436,32.9662,32.6952]},\"NOK\":{\"k\":\"1999-01\",\"v\":[28.9905,28.9379,29.822,30.3388,30.3847,30.5308,30.6132,30.6926,31.03,31.0838,31.1292,31.4123,31.3891,31.6247,31.6952,31.6936,31.5934,31.4874,31.8259,32.2248,32.6851,32.8528,33.0324,32.5765,32.1779,32.3516,32.6575,32.9035,32.3151,31.1552,31.2293,31.1612,31.9993,31.9161,31.7273,30.948,30.7858,31.2795,31.7143,31.7847,32.4184,32.781,33.3259,33.0243,33.1289,33.179,32.5515,32.3621,32.7813,32.497,31.3073,31.3594,31.2248,32.005,31.8168,31.4425,31.1741,31.0882,31.6358,32.1322,30.7641,29.9891,29.664,30.1827,30.8168,30.5393,29.4859,29.8703,29.6233,29.9577,30.1383,29.901,30.0138,29.2908,29.8993,30.3556,31.1795,31.5521,31.1202,30.8844,31.4823,32.1459,32.064,31.6913,31.1974,31.2156,32.6999,33.8562,33.6424,34.6689,34.954,34.3362,33.238,31.8135,31.3952,31.1345,30.6727,31.3195,30.7188,30.2977,30.5212,31.0567,31.1034,32.0059,32.3517,32.6159,32.0108,31.6024,32.1796,32.9865,32.6149,31.8669,31.4938,30.335,28.8026,29.5886,29.5124,30.2651,30.124,28.1608,30.4092,33.9619,34.4103,33.6036,32.0606,31.3793,30.4004,31.1833,31.6232,32.1174,32.1973,32.5025,32.9306,33.4961,33.0223,33.4773,35.0833,35.6036,35.3803,35.4806,35.6406,33.7833,33.8218,35.135,35.213,34.6741,34.6023,33.9831,34.0597,34.0836,34.3934,34.973,36.9003,38.3116,39.7027,39.2747,40.0406,38.4903,38.8085,38.9458,38.8182,38.9321,38.3878,38.087,38.4387,38.0811,38.4704,38.8811,39.8288,39.4348,40.4741,39.5922,38.6797,38.2179,37.4077,37.7289,37.6023,36.2975,36.2823,35.7214,36.0396,37.1239,37.5722,37.2541,37.3657,37.2381,36.9351,38.0439,38.2903,37.0363,36.1437,34.6258,35.4402,35.6072,35.1101,35.2117,36.4236,35.6328,34.8667,33.9453,33.6489,33.5115,33.7332,33.2251,32.8153,32.4569,32.9965,33.413,33.8134,33.6614,33.5544,33.3468,33.565,34.1084,34.0084,34.5981,34.338,34.8185,34.0695,33.8708,32.9541,32.454,32.6351,32.6575,33.0606,32.983,32.4663,31.8228,32.0621,32.2345,32.5731,32.4028,33.1393,34.0598,34.1779,33.5929,33.7652,34.1633,33.4839,32.9203,32.7563,32.6251,32.5104,33.3754,33.2315,33.0963,33.6767,32.7758,33.5127,32.769,33.0035,32.9335,33.6465,33.278,30.6657,31.4695,31.9307,32.405,32.9606,32.9839,33.4697,33.1928,33.4936,33.8691,34.6518,34.8443,36.0344,35.9247,35.0438,34.4957,34.4303,33.769,34.6113,36.7706,36.5772,36.2812,35.8438,35.5061,38.6845,38.9755,37.8999,38.526,39.6924,40.91,39.748,40.2532,39.3485,39.023,36.9654,35.1432,34.1132,32.5916,31.7404,31.6355,33.4124,33.7484,33.7442,33.1456,32.1487,33.1191,33.6602,34.086,34.2938,33.5897,33.3848,34.5764,33.5411,33.4803,33.5064,34.0868,34.8612,35.0798,35.0542,34.5819,34.6306,34.3434,34.8338,34.7143,33.6772,33.4142,33.5586,33.4313,32.7265,32.5069,32.9306,33.4456,34.858,33.4391,33.19,32.0847,32.4432,33.2551,33.8817]},\"DKK\":{\"k\":\"1999-01\",\"v\":[33.7033,33.6643,34.1266,33.9546,33.6608,33.5541,33.6654,34.0865,34.3402,34.6588,34.2853,34.1874,34.2441,34.4008,34.5192,34.6882,34.7366,34.8127,34.8869,34.9811,35.1546,35.304,35.418,35.5251,35.5024,35.6003,35.6992,35.774,34.6177,33.1709,33.4386,33.7161,34.3948,34.321,33.7611,33.2262,32.8055,32.7746,32.9341,32.5882,32.7876,32.6537,33.2052,33.0287,32.8379,32.7783,32.0741,31.7878,32.3436,32.9832,33.0662,33.0739,33.104,35.1805,35.4799,34.9236,34.3954,34.424,34.8672,35.5747,35.4885,35.3162,34.0075,33.6414,33.9917,34.035,33.6082,33.4639,33.2956,33.1669,33.0164,33.0655,33.1273,32.7417,32.8753,33.3145,33.8452,33.4515,33.0455,32.7748,32.9605,33.7507,33.6528,33.8984,33.6011,33.704,34.9609,35.5775,35.1866,36.5303,37.1962,36.7797,36.7847,35.8256,34.7133,34.0672,34.0605,33.981,33.5412,33.0066,33.3368,33.6173,33.1815,34.288,34.0014,33.6783,34.1418,33.9391,34.3643,35.1693,34.8627,34.0135,33.1983,32.5022,31.0753,31.6219,32.2702,34.8989,35.6202,35.5717,37.5551,40.0324,40.8193,39.6368,37.8591,37.6674,36.5388,36.2772,36.524,36.0681,36.4073,36.7137,36.2016,36.4333,35.6637,35.6761,37.1953,37.8295,38.0764,37.7812,37.8785,36.7472,36.9577,37.2498,36.9475,36.3696,36.3249,35.5737,35.8015,35.7837,35.9016,36.5605,38.2809,39.8689,41.5459,40.9181,41.3337,39.1001,39.306,39.6283,39.5069,39.4979,38.4873,37.4637,38.13,37.8223,37.8431,38.3076,39.4046,39.2412,40.6429,40.0612,39.2261,39.6511,39.5417,40.1535,40.192,39.5166,39.9107,40.2449,40.5385,41.5686,41.7337,41.1712,40.8053,41.0075,41.549,42.1063,42.0688,41.3505,41.2399,41.7774,42.5372,41.1923,40.6803,40.1083,41.0561,41.8161,41.7511,41.7565,41.9709,41.7252,41.8581,42.1375,42.1714,41.5884,41.7271,41.8477,42.2902,42.2188,42.2573,41.6898,41.4475,41.2621,41.5044,41.9885,41.5558,41.4943,41.653,41.8907,41.6356,41.4497,41.2437,40.9211,41.4465,41.6439,41.9098,42.073,41.5379,41.8675,41.9109,41.8536,42.5515,43.3187,43.5568,43.3246,43.5512,43.4121,43.2012,43.2317,42.8358,42.5998,42.335,43.025,43.5189,43.1982,43.5692,43.8201,44.5435,44.3765,44.6488,44.2593,44.7456,45.1285,46.2744,47.8026,47.0334,46.6396,47.1571,46.861,48.4568,48.7114,48.3273,48.247,48.2874,48.1597,49.166,48.4867,47.5574,47.0572,48.036,47.3107,47.4059,48.4989,49.0104,49.42,48.203,47.9748,50.6212,50.3912,51.6705,53.3207,54.2951,54.0506,54.3507,56.2323,54.671,54.8131,53.2423,51.7031,51.7097,50.3686,49.9925,49.7504,50.8718,51.6692,51.8239,51.6504,50.8434,51.21,51.2314,52.0509,52.985,52.6049,51.8973,52.9233,52.6548,52.898,52.931,53.8795,54.8721,55.234,55.1845,54.0444,53.5957,54.4469,54.1473,53.9,53.493,53.1173,52.4665,52.2107,51.4467,51.538,51.4275,50.6823,52.0882,49.3737,47.9379,47.3533,48.0882,48.6097,48.8471]}};\r\n  var BEEPITETT_IG = '2026-09-14';          \/\/ a be\u00e9p\u00edtett adat utols\u00f3 napja\r\n  var ADAT_FORRAS = 'be\u00e9p\u00edtett';\r\n  var POTOLT = {};                            \/\/ k\u00f3d \u2192 h\u00f3napindex: eddig a be\u00e9p\u00edtett adatb\u00f3l p\u00f3tolva             \/\/ 'MNB' | 'Eurostat' | 'be\u00e9p\u00edtett'\r\n  var UTOLSO_NAP = BEEPITETT_IG;              \/\/ a legfrissebb napi adat (a h\u00f3nap r\u00e9szleges lehet)\r\n\r\n  \/* Magyar infl\u00e1ci\u00f3 (KSH, \u00e9ves \u00e1tlag, %), a re\u00e1l\u00e9rt\u00e9khez. Az infl\u00e1ci\u00f3kalkul\u00e1tor\r\n     PHP-snippetje \u00e9l\u0151ben friss\u00edti (window.IOC_INFLACIO_API). *\/\r\n  var KSH_INFL = {\r\n    1990: 28.9, 1991: 35.0, 1992: 23.0, 1993: 22.5, 1994: 18.8, 1995: 28.2, 1996: 23.6, 1997: 18.3, 1998: 14.3, 1999: 10.0,\r\n    2000: 9.8, 2001: 9.2, 2002: 5.3, 2003: 4.7, 2004: 6.8, 2005: 3.6, 2006: 3.9, 2007: 8.0, 2008: 6.1, 2009: 4.2,\r\n    2010: 4.9, 2011: 3.9, 2012: 5.7, 2013: 1.7, 2014: -0.2, 2015: -0.1, 2016: 0.4, 2017: 2.4, 2018: 2.8, 2019: 3.4,\r\n    2020: 3.3, 2021: 5.1, 2022: 14.5, 2023: 17.6, 2024: 3.7, 2025: 4.4, 2026: 1.7\r\n  };\r\n  var KSH_ELOZETES = 2026;   \/\/ el\u0151zetes \u00e9v (a havi adatok \u00e1tlaga)\r\n\r\n  \/* K\u00fclf\u00f6ldi infl\u00e1ci\u00f3 (\u00e9ves \u00e1tlag, %) a re\u00e1l\u00e1rfolyamhoz. Ugyanaz a forr\u00e1s, mint az\r\n     infl\u00e1ci\u00f3kalkul\u00e1torn\u00e1l: EU-27 \u2013 Eurostat HICP (prc_hicp_ainr), 2001-t\u0151l;\r\n     USA \u2013 Vil\u00e1gbank (FP.CPI.TOTL.ZG). \u00c9l\u0151ben ugyanaz a PHP-snippet friss\u00edti. *\/\r\n  var KULF_INFL = {\r\n    EUR: (function () { var o = {}; [3.6, 2.8, 2.3, 2.5, 2.3, 2.3, 2.4, 3.7, 0.8, 1.8, 2.9, 2.6, 1.3, 0.4, 0.1, 0.2, 1.7, 1.8, 1.4, 0.7, 2.9, 9.2, 6.4, 2.6, 2.5].forEach(function (v, i) { o[2001 + i] = v; }); return o; })(),\r\n    USD: {\r\n      1990: 5.398, 1991: 4.235, 1992: 3.029, 1993: 2.952, 1994: 2.607, 1995: 2.805, 1996: 2.931, 1997: 2.338, 1998: 1.552, 1999: 2.188,\r\n      2000: 3.377, 2001: 2.826, 2002: 1.586, 2003: 2.270, 2004: 2.677, 2005: 3.393, 2006: 3.226, 2007: 2.853, 2008: 3.839, 2009: -0.356,\r\n      2010: 1.640, 2011: 3.157, 2012: 2.069, 2013: 1.465, 2014: 1.622, 2015: 0.119, 2016: 1.262, 2017: 2.130, 2018: 2.443, 2019: 1.812,\r\n      2020: 1.234, 2021: 4.698, 2022: 8.003, 2023: 4.116, 2024: 2.950\r\n    }\r\n  };\r\n  var KULF_NEV = { EUR: 'az EU-ban', USD: 'az USA-ban' };\r\n\r\n  \/* Devizahitelek forintos\u00edt\u00e1sa (2014. \u00e9vi LXXVII. t\u00f6rv\u00e9ny): a jelz\u00e1loghitelek\r\n     2015. febru\u00e1rt\u00f3l forintban t\u00f6rlesztenek, r\u00f6gz\u00edtett (kedvezm\u00e9nyes) \u00e1rfolyamon.\r\n     Forr\u00e1s: MNB, \"Milyen \u00e1rfolyamon forintos\u00edtj\u00e1k a tartoz\u00e1som?\" *\/\r\n  var FORINTOSITAS = { honap: '2015-02', arf: { CHF: 256.47, EUR: 308.97, JPY: 2.163 } };\r\n\r\n  \/* P\u00e9nznemek \u00e9s ragozott alakjaik (a mondatokhoz).\r\n     ra: \"doll\u00e1rra\", ban: \"doll\u00e1rban\", t: \"doll\u00e1rt\" *\/\r\n  var DEVIZAK = {\r\n    HUF: { nev: 'forint', ra: 'forintra', ban: 'forintban', t: 'forintot', jel: 'Ft', egyseg: 1 },\r\n    EUR: { nev: 'eur\u00f3', ra: 'eur\u00f3ra', ban: 'eur\u00f3ban', t: 'eur\u00f3t', jel: 'EUR', egyseg: 1 },\r\n    USD: { nev: 'amerikai doll\u00e1r', ra: 'amerikai doll\u00e1rra', ban: 'amerikai doll\u00e1rban', t: 'amerikai doll\u00e1rt', jel: 'USD', egyseg: 1 },\r\n    CHF: { nev: 'sv\u00e1jci frank', ra: 'sv\u00e1jci frankra', ban: 'sv\u00e1jci frankban', t: 'sv\u00e1jci frankot', jel: 'CHF', egyseg: 1 },\r\n    GBP: { nev: 'angol font', ra: 'angol fontra', ban: 'angol fontban', t: 'angol fontot', jel: 'GBP', egyseg: 1 },\r\n    JPY: { nev: 'jap\u00e1n jen', ra: 'jap\u00e1n jenre', ban: 'jap\u00e1n jenben', t: 'jap\u00e1n jent', jel: 'JPY', egyseg: 100, bol: 'b\u0151l' },\r\n    CZK: { nev: 'cseh korona', ra: 'cseh koron\u00e1ra', ban: 'cseh koron\u00e1ban', t: 'cseh koron\u00e1t', jel: 'CZK', egyseg: 1 },\r\n    PLN: { nev: 'lengyel zloty', ra: 'lengyel zlotyra', ban: 'lengyel zlotyban', t: 'lengyel zlotyt', jel: 'PLN', egyseg: 1 },\r\n    CNY: { nev: 'k\u00ednai j\u00fcan', ra: 'k\u00ednai j\u00fcanra', ban: 'k\u00ednai j\u00fcanban', t: 'k\u00ednai j\u00fcant', jel: 'CNY', egyseg: 1 },\r\n    CAD: { nev: 'kanadai doll\u00e1r', ra: 'kanadai doll\u00e1rra', ban: 'kanadai doll\u00e1rban', t: 'kanadai doll\u00e1rt', jel: 'CAD', egyseg: 1 },\r\n    AUD: { nev: 'ausztr\u00e1l doll\u00e1r', ra: 'ausztr\u00e1l doll\u00e1rra', ban: 'ausztr\u00e1l doll\u00e1rban', t: 'ausztr\u00e1l doll\u00e1rt', jel: 'AUD', egyseg: 1 },\r\n    SEK: { nev: 'sv\u00e9d korona', ra: 'sv\u00e9d koron\u00e1ra', ban: 'sv\u00e9d koron\u00e1ban', t: 'sv\u00e9d koron\u00e1t', jel: 'SEK', egyseg: 1 },\r\n    NOK: { nev: 'norv\u00e9g korona', ra: 'norv\u00e9g koron\u00e1ra', ban: 'norv\u00e9g koron\u00e1ban', t: 'norv\u00e9g koron\u00e1t', jel: 'NOK', egyseg: 1 },\r\n    DKK: { nev: 'd\u00e1n korona', ra: 'd\u00e1n koron\u00e1ra', ban: 'd\u00e1n koron\u00e1ban', t: 'd\u00e1n koron\u00e1t', jel: 'DKK', egyseg: 1 },\r\n    \/\/ 1.7: csak a napi n\u00e9zetben (havi be\u00e9p\u00edtett adat nincs hozz\u00e1juk)\r\n    RON: { nev: 'rom\u00e1n lej', ra: 'rom\u00e1n lejre', ban: 'rom\u00e1n lejben', t: 'rom\u00e1n lejt', jel: 'RON', egyseg: 1, bol: 'b\u0151l' },\r\n    BGN: { nev: 'bolg\u00e1r leva', ra: 'bolg\u00e1r lev\u00e1ra', ban: 'bolg\u00e1r lev\u00e1ban', t: 'bolg\u00e1r lev\u00e1t', jel: 'BGN', egyseg: 1 },\r\n    TRY: { nev: 't\u00f6r\u00f6k l\u00edra', ra: 't\u00f6r\u00f6k l\u00edr\u00e1ra', ban: 't\u00f6r\u00f6k l\u00edr\u00e1ban', t: 't\u00f6r\u00f6k l\u00edr\u00e1t', jel: 'TRY', egyseg: 1 },\r\n    HKD: { nev: 'hongkongi doll\u00e1r', ra: 'hongkongi doll\u00e1rra', ban: 'hongkongi doll\u00e1rban', t: 'hongkongi doll\u00e1rt', jel: 'HKD', egyseg: 1 }\r\n  };\r\n  \/\/ A havi n\u00e9zetek p\u00e9nznemei (ezekhez van be\u00e9p\u00edtett havi adat)\r\n  var DEVIZA_SOR = ['HUF', 'EUR', 'USD', 'CHF', 'GBP', 'JPY', 'CZK', 'PLN', 'CNY', 'CAD', 'AUD', 'SEK', 'NOK', 'DKK'];\r\n  function ismertDeviza(k) { return typeof k === 'string' && DEVIZA_SOR.indexOf(k) >= 0; }\r\n  \/\/ A napi n\u00e9zet deviz\u00e1i: ugyanaz a lista, mint a PHP-snippet ioc_dev_kodok()-ja\r\n  var NAPI_DEVIZAK = ['USD', 'EUR', 'GBP', 'CHF', 'HKD', 'JPY', 'CAD', 'AUD', 'SEK', 'NOK', 'DKK', 'CZK', 'PLN', 'RON', 'BGN', 'TRY', 'CNY'];\r\n  function napiDeviza(k) { return typeof k === 'string' && NAPI_DEVIZAK.indexOf(k) >= 0; }\r\n  var NAPI_MAX_HEZAG = 10;          \/\/ legfeljebb ennyi nappal kor\u00e1bbi jegyz\u00e9st fogadunk el (mint a PHP ioc_dev_nap)\r\n  var POZ_MAX = 40;                 \/\/ poz\u00edci\u00f3k legfeljebb\r\n  var POZ_TAROLO = 'ioc_deviza_poziciok_v1';   \/\/ localStorage-kulcs (csak ebben a b\u00f6ng\u00e9sz\u0151ben)\r\n\r\n  \/\/ T\u00f6rt\u00e9nelmi pillanatok (gyorsgombok): a kezd\u0151 h\u00f3napot \u00e1ll\u00edtj\u00e1k be\r\n  var PILLANATOK = [\r\n    { cim: 'EU-csatlakoz\u00e1s', h: '2004-05', leiras: '2004. m\u00e1jus' },\r\n    { cim: '2008-as v\u00e1ls\u00e1g', h: '2008-09', leiras: '2008. szeptember (Lehman-cs\u0151d)' },\r\n    { cim: 'Covid', h: '2020-03', leiras: '2020. m\u00e1rcius' },\r\n    { cim: '2022', h: '2022-02', leiras: '2022. febru\u00e1r (h\u00e1bor\u00fa, energiav\u00e1ls\u00e1g)' }\r\n  ];\r\n  var ELSO_HONAP = '1990-01';\r\n  var TARTASOK = [1, 2, 3, 5, 10, 15, 20, 25, 30, 0];   \/\/ tart\u00e1si id\u0151 \u00e9vekben; 0 = a teljes v\u00e1lasztott id\u0151szak   \/\/ a forint 1990 el\u0151tt nem volt szabadon \u00e1tv\u00e1lthat\u00f3, ez\u00e9rt innen indulunk\r\n\r\n  \/* ==========================================================\r\n     2. \u00c9L\u0150 ADAT \u2013 a WordPress-snippetek REST-v\u00e9gpontjair\u00f3l\r\n     ----------------------------------------------------------\r\n     Tesztel\u00e9shez: ?dv_adat=beepitett \u2192 csak be\u00e9p\u00edtett adat.\r\n     ========================================================== *\/\r\n  var ADAT_ALLAPOT = { elo: false, szoveg: '' };\r\n  var HONAPOK = ['janu\u00e1r', 'febru\u00e1r', 'm\u00e1rcius', '\u00e1prilis', 'm\u00e1jus', 'j\u00fanius', 'j\u00falius', 'augusztus', 'szeptember', 'okt\u00f3ber', 'november', 'december'];\r\n  var HONAPOK_BAN = ['janu\u00e1rj\u00e1ban', 'febru\u00e1rj\u00e1ban', 'm\u00e1rcius\u00e1ban', '\u00e1prilis\u00e1ban', 'm\u00e1jus\u00e1ban', 'j\u00fanius\u00e1ban', 'j\u00falius\u00e1ban', 'augusztus\u00e1ban', 'szeptember\u00e9ben', 'okt\u00f3ber\u00e9ben', 'november\u00e9ben', 'december\u00e9ben'];\r\n  var HONAPOK_ROVID = ['jan.', 'febr.', 'm\u00e1rc.', '\u00e1pr.', 'm\u00e1j.', 'j\u00fan.', 'j\u00fal.', 'aug.', 'szept.', 'okt.', 'nov.', 'dec.'];\r\n\r\n  \/\/ \"2026. szeptember 14-ig\" (a napsz\u00e1m ut\u00e1n nincs pont, ha toldal\u00e9k j\u00f6n)\r\n  function napIg(iso) {\r\n    var m = \/^(\\d{4})-(\\d{2})(?:-(\\d{2}))?$\/.exec(String(iso || ''));\r\n    if (!m) return '';\r\n    return m[1] + '. ' + HONAPOK[Number(m[2]) - 1] + (m[3] ? ' ' + Number(m[3]) + '-ig' : 'ig');\r\n  }\r\n  function napSzoveg(iso) {\r\n    var m = \/^(\\d{4})-(\\d{2})(?:-(\\d{2}))?$\/.exec(String(iso || ''));\r\n    if (!m) return '';\r\n    return m[1] + '. ' + HONAPOK[Number(m[2]) - 1] + (m[3] ? ' ' + Number(m[3]) + '.' : '');\r\n  }\r\n\r\n  \/\/ Egy havi sor ellen\u0151rz\u00e9se: { k: '\u00c9\u00c9\u00c9\u00c9-HH', v: [...] }\r\n  function sorRendben(s) {\r\n    if (!s || typeof s !== 'object' || typeof s.k !== 'string' || !\/^(19[89]\\d|20\\d\\d)-(0[1-9]|1[0-2])$\/.test(s.k) || !Array.isArray(s.v)) return false;\r\n    if (s.v.length < 12 || s.v.length > 1200) return false;\r\n    return s.v.every(function (x) { return x === null || (typeof x === 'number' && isFinite(x) && x > 0.0005 && x < 20000); });\r\n  }\r\n\r\n  function devizaAdatAtvetel(j) {\r\n    if (!j || j.verzio !== 1 || !j.adat || typeof j.adat !== 'object' || !j.adat.havi || typeof j.adat.havi !== 'object') return false;\r\n    var valtozott = false;\r\n    Object.keys(DEVIZAK).forEach(function (k) {\r\n      if (k === 'HUF') return;\r\n      var s = j.adat.havi[k];\r\n      if (!Object.prototype.hasOwnProperty.call(j.adat.havi, k) || !sorRendben(s)) return;\r\n      var regi = ARFOLYAM[k], uj0 = hIdx(s.k), ujVeg = uj0 + s.v.length;\r\n      \/\/ a v\u00e9g\u00e9r\u0151l nem vesz\u00edthet\u00fcnk adatot: a friss sor legal\u00e1bb addig tartson, mint a be\u00e9p\u00edtett\r\n      if (regi && ujVeg < hIdx(regi.k) + regi.v.length) return;\r\n      if (regi && uj0 > hIdx(regi.k)) {\r\n        \/\/ Az MNB-sor k\u00e9s\u0151bb indul (pl. az eur\u00f3 1999-t\u0151l, a cseh korona \u00e9s a zloty 1997-t\u0151l):\r\n        \/\/ az elej\u00e9t a be\u00e9p\u00edtett (ECB\/Eurostat) adatb\u00f3l p\u00f3toljuk, onnant\u00f3l az MNB-adat j\u00f6n.\r\n        ARFOLYAM[k] = { k: regi.k, v: regi.v.slice(0, uj0 - hIdx(regi.k)).concat(s.v) };\r\n        POTOLT[k] = uj0;\r\n      } else ARFOLYAM[k] = { k: s.k, v: s.v.slice() };\r\n      valtozott = true;\r\n    });\r\n    if (!valtozott) return false;\r\n    if (j.adat.forras === 'MNB' || j.adat.forras === 'Eurostat') ADAT_FORRAS = j.adat.forras;\r\n    if (\/^\\d{4}-\\d{2}(-\\d{2})?$\/.test(String(j.adat.utolso_nap || ''))) UTOLSO_NAP = j.adat.utolso_nap;\r\n    \/\/ utols\u00f3 sikeres lek\u00e9r\u00e9s: a heti teljes vagy a napi kis friss\u00edt\u00e9s k\u00f6z\u00fcl a frissebb\r\n    \/\/ (az 1.4-es PHP a napi friss\u00edt\u00e9sn\u00e9l csak a napi_frissites.ido-t \u00edrta, az utolso_siker-t nem)\r\n    var sikerIso = \/^\\d{4}-\\d{2}-\\d{2}\/.test(String(j.utolso_siker || '')) ? String(j.utolso_siker).slice(0, 10) : '';\r\n    var nf = j.napi_frissites;\r\n    if (nf && nf.ok === true && \/^\\d{4}-\\d{2}-\\d{2}\/.test(String(nf.ido || '')) && String(nf.ido).slice(0, 10) > sikerIso) sikerIso = String(nf.ido).slice(0, 10);\r\n    var siker = sikerIso ? napSzoveg(sikerIso) : '';\r\n    ADAT_ALLAPOT = {\r\n      elo: true,\r\n      szoveg: '\u00c9l\u0151 adatok (' + (ADAT_FORRAS === 'MNB' ? 'MNB hivatalos \u00e1rfolyamok' : 'Eurostat\/ECB havi \u00e1tlagok') + ')' +\r\n        (siker ? ' \u00b7 utols\u00f3 sikeres lek\u00e9r\u00e9s: ' + siker : '') + (UTOLSO_NAP ? ' \u00b7 legfrissebb \u00e1rfolyam: ' + napSzoveg(UTOLSO_NAP) : '') + (\/\\.$\/.test(UTOLSO_NAP ? napSzoveg(UTOLSO_NAP) : siker) ? '' : '.')\r\n    };\r\n    return true;\r\n  }\r\n\r\n  function inflAdatAtvetel(j) {\r\n    if (!j || j.verzio !== 1 || !j.adat || !j.adat.HU || typeof j.adat.HU !== 'object') return false;\r\n    var most = new Date().getFullYear(), volt = false;\r\n    Object.keys(j.adat.HU).forEach(function (e) {\r\n      var ev = Number(e), v = Number(j.adat.HU[e]);\r\n      if (j.adat.HU[e] === null || !isFinite(v) || ev < 1985 || ev > most + 1 || v < -20 || v > 400) return;\r\n      KSH_INFL[ev] = v; volt = true;\r\n    });\r\n    \/\/ k\u00fclf\u00f6ldi infl\u00e1ci\u00f3 (EU-27, USA) a re\u00e1l\u00e1rfolyamhoz\r\n    [['EU', 'EUR'], ['US', 'USD']].forEach(function (p) {\r\n      var d = j.adat[p[0]];\r\n      if (!d || typeof d !== 'object') return;\r\n      Object.keys(d).forEach(function (e) {\r\n        var ev = Number(e), v = Number(d[e]);\r\n        if (d[e] === null || !isFinite(v) || ev < 1990 || ev > most + 1 || v < -10 || v > 50) return;\r\n        KULF_INFL[p[1]][ev] = v;\r\n      });\r\n    });\r\n    var el = j.adat.HU_elozetes;\r\n    if (el && isFinite(Number(el.ev)) && isFinite(Number(el.ertek)) && Number(el.ev) >= 1990 && Number(el.ev) <= most + 1 && Number(el.ertek) >= -20 && Number(el.ertek) <= 400) {\r\n      KSH_INFL[Number(el.ev)] = Number(el.ertek); KSH_ELOZETES = Number(el.ev); volt = true;\r\n    } else if (j.adat.HU[KSH_ELOZETES] != null) { KSH_ELOZETES = null; }\r\n    return volt;\r\n  }\r\n\r\n  function jsonLekeres(cim, ms) {\r\n    var vezerlo = window.AbortController ? new AbortController() : null;\r\n    var idozito = setTimeout(function () { if (vezerlo) vezerlo.abort(); }, ms || 9000);\r\n    return fetch(cim, { credentials: 'omit', signal: vezerlo ? vezerlo.signal : undefined })\r\n      .then(function (v) { clearTimeout(idozito); if (!v.ok) throw new Error('HTTP ' + v.status); return v.json(); });\r\n  }\r\n\r\n  \/\/ Egyetlen lek\u00e9r\u00e9s oldalank\u00e9nt, ak\u00e1rh\u00e1ny kalkul\u00e1tor van rajta\r\n  var eloAdatIgeret = null;\r\n  function eloAdatBetoltes() {\r\n    if (eloAdatIgeret) return eloAdatIgeret;\r\n    var csak = \/[?&]dv_adat=beepitett(&|$)\/.test(location.search);\r\n    if (csak || !window.fetch) {\r\n      if (csak) ADAT_ALLAPOT.szoveg = 'Be\u00e9p\u00edtett adatok (' + napIg(BEEPITETT_IG) + '), teszt\u00fczemm\u00f3d: az \u00e9l\u0151 adatok kikapcsolva.';\r\n      return (eloAdatIgeret = Promise.resolve(false));\r\n    }\r\n    var dev = window.IOC_DEVIZA_API ? jsonLekeres(window.IOC_DEVIZA_API).then(devizaAdatAtvetel).catch(function () { return false; }) : Promise.resolve(false);\r\n    var inf = window.IOC_INFLACIO_API ? jsonLekeres(window.IOC_INFLACIO_API).then(inflAdatAtvetel).catch(function () { return false; }) : Promise.resolve(false);\r\n    \/\/ 1.17: referenciakamatok (CHF, EUR, HUF) \u2013 a deviza\u00e1rfolyam-PHP-snippet 1.6-t\u00f3l\r\n    var ref = window.IOC_REFKAMAT_API ? jsonLekeres(window.IOC_REFKAMAT_API).then(refAdatAtvetel).catch(function () { return false; }) : Promise.resolve(false);\r\n    eloAdatIgeret = Promise.all([dev, inf, ref]).then(function (r) {\r\n      if (!r[0]) ADAT_ALLAPOT.szoveg = 'Be\u00e9p\u00edtett adatok (ECB\/Eurostat havi \u00e1tlagok, ' + napIg(BEEPITETT_IG) + ')' + (window.IOC_DEVIZA_API ? '; az \u00e9l\u0151 adat most nem \u00e9rhet\u0151 el.' : '.');\r\n      return r[0] || r[1] || r[2];\r\n    });\r\n    return eloAdatIgeret;\r\n  }\r\n  ADAT_ALLAPOT.szoveg = 'Be\u00e9p\u00edtett adatok (ECB\/Eurostat havi \u00e1tlagok, ' + napIg(BEEPITETT_IG) + ').';\r\n\r\n  \/* ==========================================================\r\n     2\/b. NAPI \u00c1RFOLYAMOK (a \"Napi \u00e1rfolyam\" n\u00e9zethez, 1.7)\r\n     ----------------------------------------------------------\r\n     Forr\u00e1s: a PHP-snippet \/ioc\/v1\/deviza-sor?deviza=XXX v\u00e9gpontja\r\n     (window.IOC_DEVIZA_SOR_API): egy deviza teljes napi MNB-id\u0151sora,\r\n     { verzio: 1, deviza, datumok: ['\u00c9\u00c9\u00c9\u00c9-HH-NN', ...], arf: [forint \/ 1 egys\u00e9g, ...] },\r\n     csak a jegyz\u00e9si napokkal. Deviz\u00e1nk\u00e9nt egyszer k\u00e9rj\u00fck le, ut\u00e1na a\r\n     b\u00f6ng\u00e9sz\u0151ben keres\u00fcnk benne. Tesztadat: window.IOC_DEVIZA_SOR_TESZT.\r\n     Ha a k\u00e9rt nap frissebb az adatn\u00e1l, a \/deviza-nap v\u00e9gpont egyszeri\r\n     megsz\u00f3l\u00edt\u00e1sa h\u00e1tt\u00e9rfriss\u00edt\u00e9st ind\u00edt a szerveren (PHP 1.3+).\r\n     ========================================================== *\/\r\n  var napiCache = {};            \/\/ k\u00f3d \u2192 Promise({ datumok, arf, forras })\r\n  var napiKesz = {};             \/\/ k\u00f3d \u2192 bet\u00f6lt\u00f6tt sor (azonnali, szinkron sz\u00e1mol\u00e1shoz)\r\n  var napiHiba = {};             \/\/ k\u00f3d \u2192 a legut\u00f3bbi sikertelen lek\u00e9r\u00e9s oka\r\n  var napiFrissitesKerve = false;\r\n\r\n  function napiSorEllenoriz(j, kod) {\r\n    if (!j || !Array.isArray(j.datumok) || !Array.isArray(j.arf) || j.datumok.length !== j.arf.length || j.datumok.length < 2) return null;\r\n    var d = j.datumok, v = j.arf;\r\n    for (var i = 0; i < d.length; i++) {\r\n      if (typeof d[i] !== 'string' || !\/^(19|20)\\d\\d-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$\/.test(d[i])) return null;\r\n      if (i && d[i] <= d[i - 1]) return null;                              \/\/ szigor\u00faan n\u00f6vekv\u0151 d\u00e1tumok\r\n      if (typeof v[i] !== 'number' || !isFinite(v[i]) || v[i] < 0.0005 || v[i] > 20000) return null;\r\n    }\r\n    return { datumok: d, arf: v, kod: kod };\r\n  }\r\n\r\n  function napiSorBetoltes(kod) {\r\n    if (napiCache[kod]) return napiCache[kod];\r\n    var teszt = window.IOC_DEVIZA_SOR_TESZT;\r\n    var p;\r\n    if (teszt && teszt[kod]) {\r\n      var t = napiSorEllenoriz(teszt[kod], kod);\r\n      p = t ? Promise.resolve(Object.assign(t, { forras: teszt.forras || 'teszt' })) : Promise.reject(new Error('hibas'));\r\n    } else if (!window.IOC_DEVIZA_SOR_API || !window.fetch) {\r\n      p = Promise.reject(new Error('nincs-api'));\r\n    } else {\r\n      var api = String(window.IOC_DEVIZA_SOR_API);\r\n      \/\/ a rest_url() \"?rest_route=\" alak\u00fa is lehet (egyszer\u0171 permalinkekn\u00e9l)\r\n      p = jsonLekeres(api + (api.indexOf('?') >= 0 ? '&' : '?') + 'deviza=' + encodeURIComponent(kod), 25000).then(function (j) {\r\n        if (j && j.ures) throw new Error('ures');\r\n        if (!j || j.verzio !== 1) throw new Error('hibas');\r\n        var s = napiSorEllenoriz(j, kod);\r\n        if (!s) throw new Error('hibas');\r\n        s.forras = 'MNB';\r\n        return s;\r\n      });\r\n    }\r\n    napiCache[kod] = p;\r\n    \/\/ sikertelen lek\u00e9r\u00e9s ut\u00e1n a k\u00f6vetkez\u0151 sz\u00e1mol\u00e1s \u00fajrapr\u00f3b\u00e1lhatja\r\n    p.catch(function () { if (napiCache[kod] === p) delete napiCache[kod]; });\r\n    return p;\r\n  }\r\n\r\n  \/\/ Egyszeri jelz\u00e9s a szervernek, hogy hi\u00e1nyzik egy friss nap (h\u00e1tt\u00e9rfriss\u00edt\u00e9st ind\u00edt)\r\n  function napiFrissitesKeres(datum) {\r\n    if (napiFrissitesKerve || !window.IOC_DEVIZA_NAP_API || !window.fetch) return;\r\n    napiFrissitesKerve = true;\r\n    var api = String(window.IOC_DEVIZA_NAP_API);\r\n    fetch(api + (api.indexOf('?') >= 0 ? '&' : '?') + 'datum=' + encodeURIComponent(datum), { credentials: 'omit' }).catch(function () { \/* nem baj *\/ });\r\n  }\r\n\r\n  function napSorszam(iso) { return Math.round(Date.UTC(Number(iso.slice(0, 4)), Number(iso.slice(5, 7)) - 1, Number(iso.slice(8, 10))) \/ 86400000); }\r\n  function sorszamNap(n) { var d = new Date(n * 86400000); return d.getUTCFullYear() + '-' + ('0' + (d.getUTCMonth() + 1)).slice(-2) + '-' + ('0' + d.getUTCDate()).slice(-2); }\r\n  function maISO() { var d = new Date(); return d.getFullYear() + '-' + ('0' + (d.getMonth() + 1)).slice(-2) + '-' + ('0' + d.getDate()).slice(-2); }\r\n  function datumRendben(s) {\r\n    if (typeof s !== 'string' || !\/^(19|20)\\d\\d-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$\/.test(s)) return false;\r\n    return sorszamNap(napSorszam(s)) === s;                                 \/\/ pl. 2025-02-30 nem \u00e9rv\u00e9nyes\r\n  }\r\n  var NAPNEVEK = ['vas\u00e1rnap', 'h\u00e9tf\u0151', 'kedd', 'szerda', 'cs\u00fct\u00f6rt\u00f6k', 'p\u00e9ntek', 'szombat'];\r\n  function napNev(iso) { return NAPNEVEK[new Date(napSorszam(iso) * 86400000).getUTCDay()]; }\r\n\r\n  \/* Az adott napon \u00e9rv\u00e9nyes \u00e1rfolyam: a k\u00e9rt nap, vagy ha aznap nem volt jegyz\u00e9s,\r\n     az azt megel\u0151z\u0151 utols\u00f3 jegyz\u00e9si nap\u00e9 (legfeljebb NAPI_MAX_HEZAG nappal kor\u00e1bbi).\r\n     Vissza: { ertek, datum, i, kesobbi } vagy { hiba: 'korai' | 'hezag' | 'nincs_meg', ... } *\/\r\n  function napiKeres(s, datum) {\r\n    var d = s.datumok, n = d.length;\r\n    if (datum < d[0]) return { hiba: 'korai', elso: d[0] };\r\n    var lo = 0, hi = n - 1;\r\n    while (lo < hi) { var mid = (lo + hi + 1) >> 1; if (d[mid] <= datum) lo = mid; else hi = mid - 1; }\r\n    var kul = napSorszam(datum) - napSorszam(d[lo]);\r\n    if (kul > NAPI_MAX_HEZAG) return { hiba: datum > d[n - 1] ? 'nincs_meg' : 'hezag', utolso: d[n - 1], datum: d[lo] };\r\n    return { ertek: s.arf[lo], datum: d[lo], i: lo, kesobbi: datum > d[n - 1] };\r\n  }\r\n\r\n  function rovidNap(iso) { return iso.replace(\/-\/g, '.') + '.'; }          \/\/ \"2026.11.07.\"\r\n\r\n  \/* Napi grafikon x-tengelye (napsorsz\u00e1m): beoszt\u00e1s h\u00f3nap- vagy \u00e9vhat\u00e1rokra,\r\n     legfeljebb ~9 felirattal; 75 napn\u00e1l r\u00f6videbb szakaszn\u00e1l napokra. *\/\r\n  function napiTickek(min, max) {\r\n    var span = max - min, ki = [];\r\n    if (span < 75) { var l = Math.max(1, Math.ceil(span \/ 8)); for (var n = min; n <= max; n += l) ki.push(n); return ki; }\r\n    var lepes = [1, 2, 3, 6, 12, 24, 60, 120].filter(function (x) { return span \/ 30.44 \/ x <= 9; })[0] || 120;\r\n    var d = new Date(min * 86400000), e = d.getUTCFullYear(), h = d.getUTCMonth() + 1;\r\n    for (var k = 0; k < 600; k++) {\r\n      var t = Date.UTC(e, h - 1, 1) \/ 86400000;\r\n      if (t > max) break;\r\n      var jo = lepes >= 12 ? (h === 1 && e % (lepes \/ 12) === 0) : ((h - 1) % lepes === 0);\r\n      if (t >= min && jo) ki.push(t);\r\n      h++; if (h > 12) { h = 1; e++; }\r\n    }\r\n    return ki;\r\n  }\r\n  function napiTickCimke(v, span) {\r\n    var d = sorszamNap(v), h = Number(d.slice(5, 7));\r\n    if (span < 75) return HONAPOK_ROVID[h - 1] + ' ' + Number(d.slice(8, 10)) + '.';\r\n    return h === 1 ? d.slice(0, 4) : HONAPOK_ROVID[h - 1];\r\n  }\r\n\r\n  \/* ==========================================================\r\n     5\/b. NAPI \u00c1RFOLYAMMAL SZ\u00c1MOLT ALAPEREDM\u00c9NY (\"Megtakar\u00edt\u00e1s deviz\u00e1ban\", 1.8)\r\n     ----------------------------------------------------------\r\n     Ugyanazokat a mez\u0151ket adja vissza, mint a havi szamitas(), \u00edgy a\r\n     ki\u00edr\u00e1s \u00e9s a grafikon k\u00f6z\u00f6s; a sor elemei itt jegyz\u00e9si napok\r\n     (s.d: d\u00e1tum, s.n: napsorsz\u00e1m, s.i: a nap h\u00f3napindexe).\r\n     ========================================================== *\/\r\n  \/\/ Toldal\u00e9k a napsz\u00e1m ut\u00e1n: \"1-j\u00e9n\", \"2-\u00e1n\", \"15-\u00e9n\" (a kiejt\u00e9s szerint)\r\n  var NAP_RAG = ['j\u00e9n', '\u00e1n', '\u00e1n', '\u00e9n', '\u00e9n', '\u00e1n', '\u00e9n', '\u00e1n', '\u00e9n', '\u00e9n', '\u00e9n', '\u00e9n', '\u00e1n', '\u00e9n', '\u00e9n', '\u00e1n', '\u00e9n', '\u00e1n', '\u00e9n', '\u00e1n', '\u00e9n', '\u00e9n', '\u00e1n', '\u00e9n', '\u00e9n', '\u00e1n', '\u00e9n', '\u00e1n', '\u00e9n', '\u00e1n', '\u00e9n'];\r\n  function napBan(iso) { var d = Number(iso.slice(8, 10)); return iso.slice(0, 4) + '. ' + HONAPOK[Number(iso.slice(5, 7)) - 1] + ' ' + d + '-' + NAP_RAG[d - 1]; }   \/\/ \"2024. janu\u00e1r 15-\u00e9n\"\r\n  function napI(iso) { var d = Number(iso.slice(8, 10)); return iso.slice(0, 4) + '. ' + HONAPOK[Number(iso.slice(5, 7)) - 1] + ' ' + d + (d === 1 ? '-jei' : '-i'); }   \/\/ \"2026. november 13-i\"\r\n  \/\/ T\u00f6rt h\u00f3napindex egy naphoz (a havi sz\u00e1m\u00edt\u00e1s a h\u00f3nap k\u00f6zep\u00e9t veszi eg\u00e9sz indexnek) \u2013 az \u00e1rszinthez\r\n  function napHonapTort(iso) {\r\n    var e = Number(iso.slice(0, 4)), h = Number(iso.slice(5, 7)) - 1, d = Number(iso.slice(8, 10));\r\n    var hossz = new Date(Date.UTC(e, h + 1, 0)).getUTCDate();\r\n    return e * 12 + h + (d - 0.5) \/ hossz - 0.5;\r\n  }\r\n  var HONAP_NAP = 365.2425 \/ 12;\r\n  \/\/ Egy h\u00f3napindex els\u0151 munkanapja (h\u00e9tv\u00e9ge \u00e9s janu\u00e1r 1. n\u00e9lk\u00fcl) \u2013 alap\u00e9rt\u00e9k a napi m\u00f3dhoz\r\n  function elsoMunkanap(i) {\r\n    if (!isFinite(i)) return '';\r\n    var n = Date.UTC(hEv(i), hHo(i), hHo(i) === 0 ? 2 : 1) \/ 86400000;\r\n    while ([0, 6].indexOf(new Date(n * 86400000).getUTCDay()) >= 0) n++;\r\n    return sorszamNap(n);\r\n  }\r\n  \/\/ Egy h\u00f3napindex utols\u00f3 napja\r\n  function utolsoNap(i) { return isFinite(i) ? sorszamNap(Date.UTC(hEv(i), hHo(i) + 1, 0) \/ 86400000) : ''; }     \/\/ egy h\u00f3nap napokban (kamathoz, \u00e9ves\u00edt\u00e9shez)\r\n\r\n  \/* Devizap\u00e1r napi sora: 1 egys\u00e9g B \u00e1ra A-ban. Forintn\u00e1l a B sora, egy\u00e9bk\u00e9nt a k\u00e9t\r\n     deviza k\u00f6z\u00f6s jegyz\u00e9si napjain a h\u00e1nyados. null, ha m\u00e9g nincs bet\u00f6ltve. *\/\r\n  var napiParCache = {};\r\n  function napiPar(a, b) {\r\n    \/\/ 1.9: a forint mint \"deviza\" (devizamix nem forint alapdeviz\u00e1n\u00e1l): 1 Ft \u00e1ra A-ban = 1 \/ (A forint\u00e1rfolyama)\r\n    if (b === 'HUF') {\r\n      var Sx = napiKesz[a];\r\n      if (!Sx) return null;\r\n      var kh = a + '\/HUF', ch = napiParCache[kh];\r\n      if (ch && ch._a === Sx) return ch;\r\n      return (napiParCache[kh] = { datumok: Sx.datumok, arf: Sx.arf.map(function (x) { return 1 \/ x; }), forras: Sx.forras, _a: Sx });\r\n    }\r\n    var Sb = napiKesz[b], Sa = a === 'HUF' ? null : napiKesz[a];\r\n    if (!Sb || (a !== 'HUF' && !Sa)) return null;\r\n    if (!Sa) return Sb;\r\n    var k = a + '\/' + b, c = napiParCache[k];\r\n    if (c && c._a === Sa && c._b === Sb) return c;\r\n    var d = [], v = [], j = 0;\r\n    for (var i = 0; i < Sb.datumok.length; i++) {\r\n      while (j < Sa.datumok.length && Sa.datumok[j] < Sb.datumok[i]) j++;\r\n      if (j < Sa.datumok.length && Sa.datumok[j] === Sb.datumok[i]) { d.push(Sb.datumok[i]); v.push(Sb.arf[i] \/ Sa.arf[j]); }\r\n    }\r\n    c = { datumok: d, arf: v, forras: Sb.forras === Sa.forras ? Sb.forras : Sb.forras + ', ' + Sa.forras, _a: Sa, _b: Sb };\r\n    napiParCache[k] = c;\r\n    return c;\r\n  }\r\n\r\n  function szamitasNapi(b, P) {\r\n    if (!P || P.datumok.length < 2) return { hiba: 'Erre a devizap\u00e1rra nincs napi \u00e1rfolyam.' };\r\n    var utolso = P.datumok.length - 1;\r\n    var r0 = napiKeres(P, b.d0), r1 = napiKeres(P, b.d1);\r\n    \/\/ 1.11: ha a k\u00e9rt nap kor\u00e1bbi az els\u0151 napi \u00e1rfolyamn\u00e1l, az els\u0151 el\u00e9rhet\u0151 napt\u00f3l sz\u00e1molunk (a sz\u00f6veg jelzi)\r\n    var kezdesIgazitva = null;\r\n    if (r0.hiba === 'korai') { kezdesIgazitva = b.d0; r0 = { ertek: P.arf[0], datum: P.datumok[0], i: 0 }; }\r\n    if (r0.hiba === 'nincs_meg') return { hiba: 'Az \u00e1tv\u00e1lt\u00e1s napj\u00e1ra m\u00e9g nincs \u00e1rfolyam (a legfrissebb: ' + napSzoveg(r0.utolso) + ').' };\r\n    if (r0.hiba) return { hiba: 'Az \u00e1tv\u00e1lt\u00e1s napj\u00e1ra nincs jegyz\u00e9s (adathi\u00e1ny): v\u00e1lassz m\u00e1sik napot.' };\r\n    \/\/ a visszav\u00e1lt\u00e1sn\u00e1l, ha a nap m\u00e9g nincs k\u00f6zz\u00e9t\u00e9ve, a legfrissebb \u00e1rfolyammal sz\u00e1molunk (a sz\u00f6veg jelzi)\r\n    if (r1.hiba === 'nincs_meg') r1 = { ertek: P.arf[utolso], datum: P.datumok[utolso], i: utolso, kesobbi: true };\r\n    else if (r1.hiba === 'korai') return { hiba: 'A visszav\u00e1lt\u00e1s napj\u00e1ra m\u00e9g nincs adat.' };\r\n    else if (r1.hiba) return { hiba: 'A visszav\u00e1lt\u00e1s napj\u00e1ra nincs jegyz\u00e9s (adathi\u00e1ny): v\u00e1lassz m\u00e1sik napot.' };\r\n    if (r1.i <= r0.i) return { hiba: 'A visszav\u00e1lt\u00e1s napja legyen k\u00e9s\u0151bbi, mint az \u00e1tv\u00e1lt\u00e1s\u00e9 (legal\u00e1bb egy jegyz\u00e9si nappal).' };\r\n    var A = arszintEvek(), kb = b.kb || 0, ka = b.ka || 0;\r\n    var p0 = r0.ertek, p1 = r1.ertek, egyseg = b.osszeg \/ p0, n0 = napSorszam(r0.datum);\r\n    var l0 = arszintHonap(A, napHonapTort(r0.datum));\r\n    var sor = [], minP = null, maxP = null, osszP = 0;\r\n    for (var k = r0.i; k <= r1.i; k++) {\r\n      var d = P.datumok[k], p = P.arf[k], n = napSorszam(d), m = (n - n0) \/ HONAP_NAP;\r\n      var x = { i: hIdx(d.slice(0, 7)), d: d, n: n, arf: p, ertek: egyseg * kamatSzorzo(kb, m) * p };\r\n      if (ka) x.betet = b.osszeg * kamatSzorzo(ka, m);\r\n      if (b.a === 'HUF') x.inflacio = b.osszeg * arszintHonap(A, napHonapTort(d)) \/ l0;\r\n      sor.push(x);\r\n      if (!minP || p < minP.arf) minP = x;\r\n      if (!maxP || p > maxP.arf) maxP = x;\r\n      osszP += p;\r\n    }\r\n    var honapok = (napSorszam(r1.datum) - n0) \/ HONAP_NAP, egysegVeg = egyseg * kamatSzorzo(kb, honapok), ertek = egysegVeg * p1;\r\n    var betet = b.osszeg * kamatSzorzo(ka, honapok);\r\n    var e = {\r\n      napi: true, r0: r0, r1: r1, forras: P.forras, kezdesIgazitva: kezdesIgazitva,\r\n      sor: sor, egyseg: egyseg, egysegVeg: egysegVeg, p0: p0, p1: p1, ertek: ertek, honapok: honapok, kb: kb, ka: ka, betet: betet, ado: !!b.ado,\r\n      valtozas: (p1 \/ p0 - 1) * 100,\r\n      eviAtlag: (Math.pow(p1 \/ p0, 12 \/ honapok) - 1) * 100,\r\n      ertekValt: (ertek \/ b.osszeg - 1) * 100,\r\n      ertekEvi: (Math.pow(ertek \/ b.osszeg, 12 \/ honapok) - 1) * 100,\r\n      min: minP, max: maxP, atlag: osszP \/ sor.length\r\n    };\r\n    var ev12 = ev12Napi(sor);\r\n    e.legjobb12 = ev12.legj; e.legrosszabb12 = ev12.legr;\r\n    if (b.a === 'HUF') {\r\n      var l1 = arszintHonap(A, napHonapTort(r1.datum));\r\n      e.arszintValt = (l1 \/ l0 - 1) * 100;\r\n      e.realErtek = ertek * l0 \/ l1;\r\n      e.realValt = (e.realErtek \/ b.osszeg - 1) * 100;\r\n      e.forintReal = betet * l0 \/ l1;\r\n      e.kellett = b.osszeg * l1 \/ l0;\r\n    }\r\n    return e;\r\n  }\r\n\r\n  \/\/ 12 havi (365 napos) legnagyobb dr\u00e1gul\u00e1s \/ olcs\u00f3bbod\u00e1s napi sorb\u00f3l: minden naphoz az egy \u00e9vvel kor\u00e1bbi utols\u00f3 jegyz\u00e9s\r\n  function ev12Napi(sor) {\r\n    var legj = null, legr = null, q = 0;\r\n    for (var j = 0; j < sor.length; j++) {\r\n      var cel = sor[j].n - 365;\r\n      if (sor[0].n > cel) continue;\r\n      while (q + 1 < sor.length && sor[q + 1].n <= cel) q++;\r\n      if (cel - sor[q].n > NAPI_MAX_HEZAG) continue;\r\n      var v = (sor[j].arf \/ sor[q].arf - 1) * 100;\r\n      if (!legj || v > legj.v) legj = { v: v, d0: sor[q].d, d: sor[j].d };\r\n      if (!legr || v < legr.v) legr = { v: v, d0: sor[q].d, d: sor[j].d };\r\n    }\r\n    return { legj: legj, legr: legr };\r\n  }\r\n\r\n  \/* ==========================================================\r\n     5\/c. NAPI SZ\u00c1M\u00cdT\u00c1SOK A BEFEKTET\u0150I \u00c9S A HITELN\u00c9ZETHEZ (1.9)\r\n     ----------------------------------------------------------\r\n     A sorok elemei napi m\u00f3dban jegyz\u00e9si napok ({ i: h\u00f3napindex, d, n, arf, ... }),\r\n     havi m\u00f3dban h\u00f3napok ({ i, arf, ... }). A T seg\u00e9d mindkett\u0151t ki\u00edrja:\r\n     T.sz(x) \"2024. janu\u00e1r 15.\" \/ \"2024. janu\u00e1r\", T.ban(x) \"2024. janu\u00e1r 15-\u00e9n\" \/\r\n     \"2024 janu\u00e1rj\u00e1ban\", T.rovid(x) \"2024.01.15.\" \/ \"2024. jan.\", T.i(x) \"\u202615-i\" \/ \"\u2026janu\u00e1ri\".\r\n     Sz\u00e1m (h\u00f3napindex) is \u00e1tadhat\u00f3: azt havi alakban \u00edrja.\r\n     ========================================================== *\/\r\n  function tAlak(napiF, haviF) {\r\n    return function (x) { if (x !== null && typeof x === 'object') return x.d ? napiF(x.d) : haviF(x.i); return haviF(x); };\r\n  }\r\n  var T = { sz: tAlak(napSzoveg, hSzoveg), ban: tAlak(napBan, hBan), rovid: tAlak(rovidNap, hRovid), i: tAlak(napI, hI) };\r\n  function vanNap(sor) { return !!(sor && sor.length && sor[0].n !== undefined); }\r\n  \/\/ \u00c9ves\u00edt\u00e9s napi adatb\u00f3l: a megfigyel\u00e9sek t\u00e9nyleges \u00e9vi sz\u00e1ma (MNB: kb. 250 jegyz\u00e9si nap \u00e9vente)\r\n  function evesFaktor(sor) {\r\n    if (!vanNap(sor) || sor.length < 2) return 12;\r\n    var ev = (sor[sor.length - 1].n - sor[0].n) \/ 365.2425;\r\n    return ev > 0 ? (sor.length - 1) \/ ev : 250;\r\n  }\r\n  \/\/ Id\u0151k\u00fcl\u00f6nbs\u00e9g \u00e9vekben k\u00e9t elem k\u00f6z\u00f6tt (napi: napokb\u00f3l, havi: h\u00f3napokb\u00f3l)\r\n  function evKul(a, z) { return a.n !== undefined && z.n !== undefined ? (z.n - a.n) \/ 365.2425 : (z.i - a.i) \/ 12; }\r\n\r\n  \/* G\u00f6rd\u00fcl\u0151 id\u0151szakok napi sorb\u00f3l: minden jegyz\u00e9si nap lehet kezd\u00e9s, a tart\u00e1s v\u00e9ge\r\n     az utols\u00f3 jegyz\u00e9s a kezd\u00e9s + H napon vagy el\u0151tte (legfeljebb 10 nappal). *\/\r\n  function gorduloNapi(b, sor, evek) {\r\n    var N = sor.length;\r\n    if (N < 3) return null;\r\n    var span = sor[N - 1].n - sor[0].n, H = evek ? Math.round(evek * 365.2425) : span;\r\n    if (H > span || H < 1) return null;\r\n    var A = arszintEvek(), ki = [], q = 0;\r\n    for (var j = 0; j < N; j++) {\r\n      var cel = sor[j].n + H;\r\n      if (cel > sor[N - 1].n) break;\r\n      if (q < j) q = j;\r\n      while (q + 1 < N && sor[q + 1].n <= cel) q++;\r\n      if (cel - sor[q].n > NAPI_MAX_HEZAG) continue;\r\n      var v = (sor[q].arf \/ sor[j].arf - 1) * 100;\r\n      var real = b.a === 'HUF' ? ((sor[q].arf \/ sor[j].arf) * arszintHonap(A, napHonapTort(sor[j].d)) \/ arszintHonap(A, napHonapTort(sor[q].d)) - 1) * 100 : null;\r\n      ki.push({ i: sor[j].i, d: sor[j].d, n: sor[j].n, veg: sor[q], v: v, real: real });\r\n    }\r\n    if (!ki.length) return null;\r\n    var rend = ki.map(function (x) { return x.v; }).sort(function (a, c) { return a - c; });\r\n    var median = rend.length % 2 ? rend[(rend.length - 1) \/ 2] : (rend[rend.length \/ 2 - 1] + rend[rend.length \/ 2]) \/ 2;\r\n    return {\r\n      napi: true, db: ki.length, tol: sor[0], utolsoKezdes: ki[ki.length - 1], H: H, adat: ki,\r\n      nyero: ki.filter(function (x) { return x.v > 0; }).length \/ ki.length * 100,\r\n      inflVero: b.a === 'HUF' ? ki.filter(function (x) { return x.real > 0; }).length \/ ki.length * 100 : null,\r\n      median: median,\r\n      legrosszabb: ki.reduce(function (a, x) { return x.v < a.v ? x : a; }), legjobb: ki.reduce(function (a, x) { return x.v > a.v ? x : a; })\r\n    };\r\n  }\r\n\r\n  \/* Devizamix napi \u00e1rfolyammal: a t\u00e9telek (alapdeviz\u00e1ban m\u00e9rt) napi sorainak k\u00f6z\u00f6s jegyz\u00e9si napjain,\r\n     az \u00e1tv\u00e1lt\u00e1s napj\u00e1n (vagy az el\u0151tte l\u00e9v\u0151 utols\u00f3 k\u00f6z\u00f6s jegyz\u00e9si napon) sz\u00e9tosztva, majd tartva. *\/\r\n  function portfolioNapi(b, tetelek) {\r\n    var maps = tetelek.map(function (x) {\r\n      if (x.k === b.a) return null;\r\n      var P = napiPar(b.a, x.k), m = {};\r\n      if (!P) return undefined;\r\n      for (var j = 0; j < P.datumok.length; j++) m[P.datumok[j]] = P.arf[j];\r\n      return m;\r\n    });\r\n    if (maps.some(function (m) { return m === undefined; })) return { varakozik: true };\r\n    var elso = maps.filter(Boolean)[0];\r\n    if (!elso) return null;   \/\/ csak alapdeviza: nincs mit m\u00e9rni\r\n    var napok = Object.keys(elso).filter(function (d) { return d <= b.d1 && maps.every(function (m) { return !m || m[d] !== undefined; }); }).sort();\r\n    var i0 = -1;\r\n    for (var j = 0; j < napok.length; j++) { if (napok[j] <= b.d0) i0 = j; else break; }\r\n    if (i0 < 0 || napSorszam(b.d0) - napSorszam(napok[i0]) > NAPI_MAX_HEZAG) return { hiba: 'A devizamix t\u00e9teleire az \u00e1tv\u00e1lt\u00e1s napj\u00e1n nincs k\u00f6z\u00f6s \u00e1rfolyam.' };\r\n    napok = napok.slice(i0);\r\n    if (napok.length < 60) return { hiba: 'A devizamixhez legal\u00e1bb 60 k\u00f6z\u00f6s jegyz\u00e9si nap kell.' };\r\n    var ossz = tetelek.reduce(function (t, x) { return t + x.suly; }, 0);\r\n    var p0 = maps.map(function (m) { return m ? m[napok[0]] : 1; });\r\n    var db = tetelek.map(function (x, j) { return { k: x.k, suly: x.suly \/ ossz, egyseg: b.osszeg * x.suly \/ ossz \/ p0[j] }; });\r\n    var sor = [], komp = {};\r\n    db.forEach(function (x) { komp[x.k] = []; });\r\n    napok.forEach(function (d) {\r\n      var v = 0, n = napSorszam(d), i = hIdx(d.slice(0, 7));\r\n      db.forEach(function (x, j) { var p = maps[j] ? maps[j][d] : 1; v += x.egyseg * p; komp[x.k].push({ i: i, d: d, n: n, arf: p }); });\r\n      sor.push({ i: i, d: d, n: n, arf: v \/ b.osszeg, ertek: v });\r\n    });\r\n    var e = { sor: sor, p0: sor[0].arf, p1: sor[sor.length - 1].arf };\r\n    var k = kockazat(b, e), ev12 = ev12Napi(sor);\r\n    var hozamok = {}, egyenkent = db.map(function (x) {\r\n      var ks = komp[x.k], ee = { sor: ks, p0: ks[0].arf, p1: ks[ks.length - 1].arf }, kk = kockazat(b, ee);\r\n      hozamok[x.k] = ks.map(function (q, j) { return j ? Math.log(q.arf \/ ks[j - 1].arf) : null; }).slice(1);\r\n      return { k: x.k, suly: x.suly, valt: (ee.p1 \/ ee.p0 - 1) * 100, ingadozas: kk.ingadozas, visszaeses: kk.visszaeses.v };\r\n    });\r\n    var kod = db.map(function (x) { return x.k; });\r\n    var korr = kod.map(function (a) {\r\n      return kod.map(function (c) {\r\n        if (a === c) return 1;\r\n        var x = hozamok[a], y = hozamok[c], n = Math.min(x.length, y.length);\r\n        if (n < 20 || a === b.a || c === b.a) return null;\r\n        var mx = 0, my = 0; for (var j = 0; j < n; j++) { mx += x[j]; my += y[j]; } mx \/= n; my \/= n;\r\n        var sxy = 0, sxx = 0, syy = 0; for (j = 0; j < n; j++) { sxy += (x[j] - mx) * (y[j] - my); sxx += (x[j] - mx) * (x[j] - mx); syy += (y[j] - my) * (y[j] - my); }\r\n        return sxx && syy ? sxy \/ Math.sqrt(sxx * syy) : null;\r\n      });\r\n    });\r\n    var evek = evKul(sor[0], sor[sor.length - 1]);\r\n    return {\r\n      napi: true, sor: sor, valt: (e.p1 - 1) * 100, evi: evek > 0 ? (Math.pow(e.p1, 1 \/ evek) - 1) * 100 : 0,\r\n      ingadozas: k.ingadozas, visszaeses: k.visszaeses, legrosszabb12: ev12.legr, egyenkent: egyenkent, kodok: kod, korr: korr,\r\n      komp: komp, ertek: sor[sor.length - 1].ertek\r\n    };\r\n  }\r\n\r\n  \/* Re\u00e1l\u00e1rfolyam napi \u00e1rfolyammal (csak forint\/EUR, forint\/USD): a napi alapsorb\u00f3l (szamitasNapi),\r\n     a k\u00e9t orsz\u00e1g \u00e9ves infl\u00e1ci\u00f3ja napra elosztva. Ugyanazokat a mez\u0151ket adja, mint a havi v\u00e1ltozat;\r\n     s0, min, max itt sorelemek (d\u00e1tummal). *\/\r\n  function realarfolyamNapi(b, sor) {\r\n    if (b.a !== 'HUF' || !KULF_INFL[b.b]) return null;\r\n    var kezd = realKezdet(b.b), j0 = -1;\r\n    for (var j = 0; j < sor.length; j++) if (sor[j].i >= kezd) { j0 = j; break; }\r\n    if (j0 < 0 || sor[sor.length - 1].n - sor[j0].n < 365) return { rovid: true, s0: j0 < 0 ? kezd : sor[j0] };\r\n    var H = arszintEvek(), F = arszintEvek(KULF_INFL[b.b]), s0 = sor[j0];\r\n    var p0 = s0.arf, h0 = arszintHonap(H, napHonapTort(s0.d)), f0 = arszintHonap(F, napHonapTort(s0.d)), ki = [], ossz = 0;\r\n    for (j = j0; j < sor.length; j++) {\r\n      var t = napHonapTort(sor[j].d), hu = arszintHonap(H, t) \/ h0, kf = arszintHonap(F, t) \/ f0, ppp = p0 * hu \/ kf;\r\n      var x = { i: sor[j].i, d: sor[j].d, n: sor[j].n, arf: sor[j].arf, ppp: ppp, index: sor[j].arf \/ ppp * 100, hu: hu, kf: kf };\r\n      ki.push(x); ossz += x.index;\r\n    }\r\n    var u = ki[ki.length - 1], atl = ossz \/ ki.length;\r\n    return {\r\n      napi: true, s0: s0, sor: ki, p0: p0, p1: u.arf, ppp1: u.ppp, elteres: (u.arf \/ u.ppp - 1) * 100,\r\n      huInfl: (u.hu - 1) * 100, kfInfl: (u.kf - 1) * 100, atlIndex: atl, atlElteres: (u.index \/ atl - 1) * 100,\r\n      min: ki.reduce(function (m, x) { return x.index < m.index ? x : m; }), max: ki.reduce(function (m, x) { return x.index > m.index ? x : m; })\r\n    };\r\n  }\r\n\r\n  \/\/ Egy d\u00e1tum + k h\u00f3nap, a h\u00f3nap v\u00e9g\u00e9re igaz\u00edtva (jan. 31. + 1 h\u00f3nap = febr. 28\/29.)\r\n  function honapLepes(iso, k) {\r\n    var e = Number(iso.slice(0, 4)), m = Number(iso.slice(5, 7)) - 1 + k, d = Number(iso.slice(8, 10));\r\n    var ee = e + Math.floor(m \/ 12), mm = ((m % 12) + 12) % 12, hossz = new Date(Date.UTC(ee, mm + 1, 0)).getUTCDate();\r\n    return ee + '-' + ('0' + (mm + 1)).slice(-2) + '-' + ('0' + Math.min(d, hossz)).slice(-2);\r\n  }\r\n\r\n  \/* ==========================================================\r\n     KAMATOZ\u00c1S \u00c9S REFERENCIAKAMATOK (1.17)\r\n     ----------------------------------------------------------\r\n     V\u00e1ltoz\u00f3 kamatn\u00e1l a hitel kamata a hitel deviz\u00e1j\u00e1nak 3 havi bankk\u00f6zi\r\n     referenciakamat\u00e1t k\u00f6veti: CHF \u2013 LIBOR (2022-t\u0151l SARON), EUR \u2013 EURIBOR,\r\n     HUF \u2013 BUBOR. A fel\u00e1r a felv\u00e9telkor r\u00f6gz\u00fcl:\r\n         fel\u00e1r = a megadott kezd\u0151 kamat \u2212 a referenciakamat a felv\u00e9tel h\u00f3napj\u00e1ban,\r\n     \u00e9s a kamat negyed\u00e9vente (KAMAT_IGAZITAS h\u00f3naponk\u00e9nt) igazodik:\r\n         kamat = max(0, fel\u00e1r + a referenciakamat az id\u0151szak els\u0151 h\u00f3napj\u00e1ban).\r\n     Minden kamatv\u00e1ltoz\u00e1skor a h\u00e1tral\u00e9v\u0151 tartoz\u00e1sra \u00e9s futamid\u0151re \u00faj annuit\u00e1s\r\n     (\u00faj t\u00f6rleszt\u0151r\u00e9szlet) j\u00f6n ki \u2013 \u00edgy m\u0171k\u00f6dtek a v\u00e1ltoz\u00f3 kamat\u00fa hitelek.\r\n     A bankok egyoldal\u00fa kamatemel\u00e9seit (2009\u20132011) ez nem tartalmazza.\r\n     Be\u00e9p\u00edtett adat: OECD Main Economic Indicators, 3 havi bankk\u00f6zi kamatok\r\n     havi \u00e1tlaga (FRED: IR3TIB01CHM156N, IR3TIB01EZM156N, IR3TIB01HUM156N);\r\n     a BUBOR-sor n\u00e9h\u00e1ny hi\u00e1nyz\u00f3 h\u00f3napja a szomsz\u00e9dos h\u00f3napok k\u00f6z\u00e9 illesztve.\r\n     \u00c9l\u0151ben a deviza\u00e1rfolyam-PHP-snippet (1.6+) friss\u00edti: window.IOC_REFKAMAT_API.\r\n     ========================================================== *\/\r\n  var REF_KAMAT = {\r\n    CHF: { nev: 'CHF-LIBOR \/ SARON 3 h\u00f3nap', k: '1999-07', v: [0.95,0.92,0.9,1.88,1.69,1.74,1.73,2.24,2.43,2.81,3.01,3.2,3.29,3.31,3.32,3.34,3.35,3.26,3.25,3.34,3.26,3.13,3.05,3.1,3.13,3.08,2.67,2.07,1.94,1.74,1.6,1.57,1.6,1.46,1.16,1.15,1,0.67,0.61,0.63,0.59,0.54,0.51,0.49,0.23,0.17,0.16,0.16,0.16,0.15,0.14,0.13,0.14,0.14,0.13,0.15,0.16,0.19,0.18,0.33,0.42,0.47,0.58,0.62,0.65,0.65,0.65,0.68,0.67,0.67,0.67,0.67,0.67,0.68,0.67,0.72,0.87,0.93,0.92,1,1.11,1.18,1.3,1.37,1.43,1.52,1.64,1.75,1.81,1.91,2.05,2.11,2.16,2.22,2.32,2.44,2.61,2.61,2.49,2.46,2.29,2.34,2.29,2.42,2.29,2.18,2.04,2.14,2.21,2.18,2.12,1.41,0.7,0.11,0.09,0.11,0.11,0.09,0.09,0.09,0.07,0.07,0.07,0.09,0.12,0.12,0.09,0.1,0.1,0.09,0.08,0.12,0.18,0.21,0.21,0.25,0.19,0.19,0.15,0.14,0.16,0.14,0.12,0.1,0.09,-0.07,-0.06,-0.09,-0.07,0.08,0.04,0.02,0.05,0.01,-0.02,-0.06,-0.17,-0.21,-0.15,-0.06,-0.14,-0.05,-0.11,-0.06,-0.06,-0.06,-0.06,-0.06,-0.06,-0.06,-0.05,0.02,-0.02,0.02,-0.04,-0.05,-0.04,-0.03,-0.03,-0.01,0.03,0.04,0.03,0.04,0.04,0.04,-0.42,-0.68,-0.79,-0.69,-0.82,-0.77,-0.74,-0.78,-0.76,-0.84,-0.68,-0.74,-0.75,-0.89,-0.77,-0.75,-0.77,-0.72,-0.77,-0.75,-0.75,-0.75,-0.76,-0.8,-0.93,-0.8,-0.81,-0.79,-0.9,-0.78,-0.81,-0.81,-0.85,-0.93,-0.91,-0.86,-0.87,-0.87,-0.8,-0.8,-0.79,-0.79,-0.78,-0.78,-0.78,-0.83,-0.81,-0.78,-0.81,-0.77,-0.76,-0.75,-0.78,-0.78,-0.84,-0.81,-0.79,-0.76,-0.71,-0.74,-0.75,-0.72,-0.68,-0.62,-0.66,-0.67,-0.69,-0.71,-0.71,-0.7,-0.73,-0.74,-0.73,-0.73,-0.73,-0.73,-0.74,-0.74,-0.74,-0.74,-0.82,-0.73,-0.69,-0.72,-0.71,-0.68,-0.68,-0.67,-0.69,-0.51,-0.11,-0.02,0.15,0.53,0.54,0.74,0.99,1,1.36,1.45,1.45,1.59,1.72,1.77,1.77,1.77,1.73,1.65,1.69,1.7,1.5,1.5,1.5,1.43,1.19,1.07,1.02,0.89,0.81,0.6,0.41,0.37,0.31,0.16,0.09,0.04,-0.04,-0.06,-0.06,-0.06,-0.05,-0.05,-0.04,-0.04,-0.04,-0.04,-0.04,-0.05,-0.04,-0.04,-0.04] },\r\n    EUR: { nev: 'EURIBOR 3 h\u00f3nap', k: '1994-01', v: [6.91,6.86,6.75,6.57,6.24,6.3,6.34,6.43,6.38,6.43,6.4,6.69,6.66,6.59,7.58,7.29,7.04,7.08,6.92,6.66,6.5,6.75,6.45,6.32,5.81,5.58,5.5,5.27,5.06,5.08,5.06,5.08,4.86,4.69,4.57,4.5,4.39,4.43,4.5,4.39,4.3,4.29,4.3,4.36,4.31,4.44,4.49,4.37,4.26,4.24,4.11,4.09,4.06,4.02,3.95,3.93,3.93,3.81,3.69,3.37,3.13,3.09,3.05,2.7,2.58,2.63,2.68,2.69,2.73,3.38,3.47,3.45,3.34,3.54,3.75,3.93,4.36,4.5,4.58,4.78,4.85,5.04,5.09,4.94,4.77,4.76,4.71,4.68,4.64,4.45,4.47,4.35,3.98,3.6,3.39,3.34,3.34,3.36,3.39,3.41,3.47,3.46,3.41,3.35,3.31,3.26,3.12,2.94,2.83,2.69,2.53,2.53,2.4,2.15,2.13,2.14,2.15,2.14,2.16,2.15,2.09,2.07,2.03,2.05,2.09,2.11,2.12,2.11,2.12,2.15,2.17,2.17,2.15,2.14,2.14,2.14,2.13,2.11,2.12,2.13,2.14,2.2,2.36,2.47,2.51,2.6,2.72,2.79,2.89,2.99,3.1,3.23,3.34,3.5,3.6,3.68,3.75,3.82,3.89,3.98,4.07,4.15,4.22,4.54,4.74,4.69,4.64,4.85,4.48,4.36,4.6,4.78,4.86,4.94,4.96,4.97,5.02,5.11,4.24,3.29,2.46,1.94,1.64,1.42,1.28,1.23,0.97,0.86,0.77,0.74,0.72,0.71,0.68,0.66,0.65,0.64,0.69,0.73,0.85,0.9,0.88,1,1.04,1.02,1.02,1.09,1.18,1.32,1.43,1.49,1.6,1.55,1.54,1.58,1.48,1.43,1.22,1.05,0.86,0.74,0.68,0.66,0.5,0.33,0.25,0.21,0.19,0.19,0.2,0.22,0.21,0.21,0.2,0.21,0.22,0.23,0.22,0.23,0.22,0.27,0.29,0.29,0.31,0.33,0.32,0.24,0.2,0.19,0.1,0.08,0.08,0.08,0.06,0.05,0.03,0,-0.01,-0.01,-0.02,-0.03,-0.04,-0.05,-0.09,-0.13,-0.15,-0.18,-0.23,-0.25,-0.26,-0.27,-0.29,-0.3,-0.3,-0.31,-0.31,-0.32,-0.33,-0.33,-0.33,-0.33,-0.33,-0.33,-0.33,-0.33,-0.33,-0.33,-0.33,-0.33,-0.33,-0.33,-0.33,-0.33,-0.33,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.31,-0.31,-0.31,-0.31,-0.31,-0.31,-0.33,-0.36,-0.41,-0.42,-0.41,-0.4,-0.39,-0.39,-0.41,-0.42,-0.25,-0.27,-0.38,-0.44,-0.48,-0.49,-0.51,-0.52,-0.54,-0.55,-0.54,-0.54,-0.54,-0.54,-0.54,-0.54,-0.55,-0.55,-0.55,-0.57,-0.58,-0.56,-0.53,-0.5,-0.45,-0.39,-0.24,0.04,0.39,1.01,1.43,1.83,2.06,2.34,2.64,2.91,3.17,3.37,3.54,3.67,3.78,3.88,3.97,3.97,3.93,3.93,3.92,3.92,3.89,3.81,3.72,3.68,3.55,3.43,3.17,3.01,2.82,2.7,2.52,2.44,2.25,2.09,1.98,1.99,2.02,2.03,2.03,2.04,2.05,2.03] },\r\n    HUF: { nev: 'BUBOR 3 h\u00f3nap', k: '1991-01', v: [34.2,34.5,34.7,34.9,34.9,34.7,35.2,35.3,34.9,34.1,34,32.4,31.6,31.4,28.9,27.4,27.2,25.3,19.8,17.1,17.9,17,14.4,14.7,14.6,14.6,13.7,10.5,12.2,12.6,16.7,16.9,21.9,24.2,24.4,24.3,23.4,23.4,23.6,24.2,24.3,24.9,27.1,31,30.4,29.7,29.6,31.6,31.9,32.2,33,33.4,33.9,32.8,32.6,32.7,31.8,30.3,29.8,30.1,29.1,25,25,24.1,24.1,24,23.9,23.4,22.5,22.6,22.1,21.7,21.8,20.9,20.7,20.8,20.6,20.5,19.7,19.5,19.4,19.3,19.2,19.2,19.3,19.2,19,19,18.4,17.4,17.5,16.2,16.6,18.7,17.4,17.2,15.8,15.3,15.3,15.4,14.9,14.7,14.6,14.4,14,14,14,13.41,12.88,11.78,10.97,11.07,10.96,11.07,10.78,10.78,10.92,11.48,12.05,11.92,11.45,10.93,11.11,11.25,11.19,10.85,11,11,10.82,10.83,10.17,9.8,8.93,8.59,8.58,8.4,8.85,9.42,9.6,10.03,9.88,9.85,9.6,8.77,6.27,5.49,6.87,6.71,6.57,7.66,9.9,9.55,9.53,9.54,10.59,13.15,12.57,12.58,12.25,11.87,11.48,11.1,11.1,11.1,11.09,11.09,11.09,10.21,9.33,8.45,7.94,7.43,7.52,7.01,6.5,6.35,5.65,6.15,6.2,6.21,6.02,6.1,6.18,6.26,6.47,6.69,6.9,7.11,7.88,8.2,8.2,8.2,8.15,8.12,8.1,8.2,8.11,8.02,7.87,7.83,7.72,7.6,7.51,7.63,7.78,8,8.21,8.54,8.4,8.87,8.99,8.33,8.62,8.95,11.35,11.18,9.8,9.72,9.64,9.56,11.3,10.57,9.99,9.02,8.78,7.34,7.56,7.47,6.78,6.59,6.65,6.14,6.23,5.43,6.17,5.82,6.41,5.9,5.87,6.17,6.13,6.93,6.64,6.08,6.88,6.27,6.74,7.12,6.19,6.18,7.25,6.5,8.54,8.83,8.51,8.19,8.22,8.11,8,7.77,7.31,6.84,6.49,6.14,5.8,5.39,4.98,4.57,4.71,4.48,4.36,3.92,3.76,3.6,3.33,3,2.99,2.99,3.25,2.94,2.55,2.86,2.29,2.06,1.98,1.91,2.04,2.06,1.98,1.85,1.82,1.64,1.42,1.57,1.26,1.14,1.29,1.32,1.25,1.35,1.19,1.34,1.19,1.18,0.98,0.93,0.89,0.75,0.8,0.86,0.67,0.66,0.23,0.3,0.34,0.25,0.22,0.25,0.53,0.21,0.14,0.05,0.05,0.06,0.04,0.03,0.04,0.07,0.08,0.2,0.25,0.13,0.16,0.14,0.12,0.13,0.13,0.18,0.13,0.14,0.16,0.25,0.26,0.27,0.19,0.2,0.17,0.15,0.18,0.44,0.49,1.09,0.93,0.89,0.69,0.6,0.84,0.75,0.74,0.78,0.75,0.82,0.76,0.75,0.88,0.85,1.2,1.56,1.74,2,2.58,3.72,4.06,4.42,5.96,6.36,6.57,7.47,11.09,11.96,13.1,16.71,15.52,16.45,16.69,17.03,15.83,17.12,14.83,15.94,10.31,13.91,13.42,8.56,9.44,10.57,7.05,8.4,8.38,7.96,7.4,7.03,6.79,6.73,6.96,6.47,6.6,6.49,6.5,6.5,6.47,6.5,6.5,6.51,6.5,6.61,6.64,6.5,6.54,6.78,6.44,6.59,6.4,6.36,6.18,5.98,5.7,5.39] }\r\n  };\r\n  function nevelo(sz) { return (\/^[A\u00c1E\u00c9I\u00cdO\u00d3\u00d6\u0150U\u00da\u00dc\u0170]\/.test(sz) ? 'az ' : 'a ') + sz; }   \/\/ \"az EURIBOR\", \"a BUBOR\"\r\n  var KAMAT_IGAZITAS = 3;   \/\/ h\u00f3nap: ennyi id\u0151nk\u00e9nt igazodik a v\u00e1ltoz\u00f3 kamat\r\n  \/* Kamatstop (a 2021. okt\u00f3ber 27. el\u0151tt k\u00f6t\u00f6tt, referencia-kamatl\u00e1bhoz k\u00f6t\u00f6tt forint jelz\u00e1loghitelekn\u00e9l):\r\n     2022. janu\u00e1rt\u00f3l a kamatfordul\u00f3kor alkalmazott 3 havi BUBOR legfeljebb a 2021. okt\u00f3ber 27-i 2,02% lehet.\r\n     A kivezet\u00e9s d\u00e1tuma bizonytalan volt (2026 nyar\u00e1n szeptember 30-ra tervezt\u00e9k, \u0151sszel ezt elhalasztott\u00e1k),\r\n     ez\u00e9rt v\u00e9ge nincs megadva: ha lesz v\u00e9gleges d\u00e1tum, a \"veg\" mez\u0151be \u00edrand\u00f3 ('\u00c9\u00c9\u00c9\u00c9-HH', az els\u0151 szabad h\u00f3nap).\r\n     Forr\u00e1s: Bankmonitor, Bank360, Portfolio, Economx (2021\u20132026). *\/\r\n  var KAMATSTOP = { kezd: '2022-01', szerzodesIg: '2021-10', plafon: 2.02, veg: null };\r\n  function kamatstopAktiv(i, i0) {\r\n    return i >= hIdx(KAMATSTOP.kezd) && i0 <= hIdx(KAMATSTOP.szerzodesIg) && (KAMATSTOP.veg === null || i < hIdx(KAMATSTOP.veg));\r\n  }\r\n  \/\/ a kod deviza referenciakamata az i. h\u00f3napban (%); az adatsor v\u00e9ge ut\u00e1n az utols\u00f3 ismert \u00e9rt\u00e9k\r\n  function refKamat(kod, i) {\r\n    var s = REF_KAMAT[kod];\r\n    if (!s) return undefined;\r\n    var j = i - hIdx(s.k);\r\n    return j < 0 || !s.v.length ? undefined : s.v[Math.min(j, s.v.length - 1)];\r\n  }\r\n  function refUtolsoHonap(kod) { var s = REF_KAMAT[kod]; return s ? hIdx(s.k) + s.v.length - 1 : NaN; }\r\n  \/\/ \u00e9l\u0151 adat: { adat: { CHF: { '\u00c9\u00c9\u00c9\u00c9-HH': %, \u2026 }, EUR: \u2026, HUF: \u2026 } } \u2013 a be\u00e9p\u00edtett sort fel\u00fcl\u00edrja \/ folytatja\r\n  function refAdatAtvetel(j) {\r\n    if (!j || !j.adat || typeof j.adat !== 'object') return false;\r\n    var volt = false;\r\n    Object.keys(REF_KAMAT).forEach(function (kod) {\r\n      var d = j.adat[kod], s = REF_KAMAT[kod], i0 = hIdx(s.k);\r\n      if (!d || typeof d !== 'object') return;\r\n      Object.keys(d).sort().forEach(function (h) {\r\n        var i = hIdx(h), v = Number(d[h]);\r\n        if (isNaN(i) || d[h] === null || !isFinite(v) || v < -5 || v > 60 || i < i0 || i > i0 + 12 * 60) return;\r\n        while (i0 + s.v.length < i) s.v.push(s.v[s.v.length - 1]);   \/\/ hi\u00e1nyz\u00f3 h\u00f3nap: az el\u0151z\u0151 \u00e9rt\u00e9k\r\n        s.v[i - i0] = Math.round(v * 100) \/ 100; volt = true;\r\n      });\r\n    });\r\n    return volt;\r\n  }\r\n  \/* A k. r\u00e9szlet (k = 1..n) id\u0151szak\u00e1ra \u00e9rv\u00e9nyes \u00e9vi kamat (%) t\u00f6mbje (r[0] \u00fcres).\r\n     i0: a felv\u00e9tel h\u00f3napja; kezdo: a megadott (kezd\u0151) kamat. Ha a v\u00e1ltoz\u00f3 kamathoz\r\n     nincs referenciakamat, fix kamattal sz\u00e1mol, \u00e9s a \"hiba\" elmondja, mi\u00e9rt. *\/\r\n  function kamatPalya(kod, kezdo, i0, n, valtozo, kamatstop, szerzodes) {\r\n    var r = [null], k, ki = { r: r, valtozo: false, felar: null, ref0: null, hiba: '', stopHonap: 0 };\r\n    szerzodes = szerzodes === undefined ? i0 : szerzodes;   \/\/ a szerz\u0151d\u00e9sk\u00f6t\u00e9s h\u00f3napja (a kamatstophoz)\r\n    if (valtozo) {\r\n      var s = REF_KAMAT[kod], ref0 = refKamat(kod, i0);\r\n      if (!s) ki.hiba = 'A(z) ' + kod + ' deviz\u00e1hoz nincs be\u00e9p\u00edtett referenciakamat (csak sv\u00e1jci frank, eur\u00f3 \u00e9s forint), ez\u00e9rt fix kamattal sz\u00e1molok.';\r\n      else if (ref0 === undefined) ki.hiba = nevelo(s.nev).replace(\/^a\/, 'A') + ' referenciakamat ' + hSzoveg(hIdx(s.k)) + ' \u00f3ta \u00e9rhet\u0151 el, ez\u00e9rt erre a h\u00f3napra fix kamattal sz\u00e1molok.';\r\n      else { ki.valtozo = true; ki.ref0 = ref0; ki.felar = kezdo - ref0; ki.nev = s.nev; }\r\n    }\r\n    for (k = 1; k <= n; k++) {\r\n      if (!ki.valtozo) { r.push(kezdo); continue; }\r\n      var ih = i0 + Math.floor((k - 1) \/ KAMAT_IGAZITAS) * KAMAT_IGAZITAS, ref = refKamat(kod, ih);\r\n      if (kamatstop && kod === 'HUF' && kamatstopAktiv(ih, szerzodes) && ref > KAMATSTOP.plafon) { ref = KAMATSTOP.plafon; ki.stopHonap++; }\r\n      r.push(Math.max(0, ki.felar + ref));\r\n    }\r\n    return ki;\r\n  }\r\n  \/* Annuit\u00e1sos t\u00f6rleszt\u00e9s tetsz\u0151leges kamatp\u00e1ly\u00e1val: D[k] a k. r\u00e9szlet ut\u00e1ni tartoz\u00e1s,\r\n     R[k] a k. r\u00e9szlet. Kamatv\u00e1ltoz\u00e1skor a h\u00e1tral\u00e9v\u0151 futamid\u0151re \u00faj r\u00e9szlet. Fix kamatn\u00e1l\r\n     ugyanazt adja, mint az annuitas() + tartozas() z\u00e1rt k\u00e9plet. *\/\r\n  function torlesztes(L, n, r, k0) {\r\n    k0 = k0 || 0;\r\n    var D = [], R = [], Rk = 0, elozo = null;\r\n    D[k0] = L;\r\n    for (var k = k0 + 1; k <= n; k++) {\r\n      var rk = r[k] \/ 1200;\r\n      if (elozo === null || r[k] !== elozo) Rk = annuitas(D[k - 1], rk, n - k + 1);\r\n      R[k] = Rk; D[k] = Math.max(0, D[k - 1] * (1 + rk) - Rk); elozo = r[k];\r\n      if (Math.abs(D[k]) < 1e-9 * L) D[k] = 0;\r\n    }\r\n    return { D: D, R: R };\r\n  }\r\n  \/\/ magyar \u00e1rszint az i. h\u00f3napban (re\u00e1l\u00e9rt\u00e9khez), egyszer fel\u00e9p\u00edtve \u00e9s az \u00e9l\u0151 adat ut\u00e1n \u00fajra\r\n  var arszintCache = null;\r\n  function huArszint(i) {\r\n    if (!arszintCache || arszintCache.D !== KSH_INFL || arszintCache.n !== Object.keys(KSH_INFL).length) { arszintCache = arszintEvek(); arszintCache.n = Object.keys(KSH_INFL).length; }\r\n    return arszintHonap(arszintCache, i);\r\n  }\r\n\r\n  \/* Devizahitel \u2013 k\u00f6z\u00f6s motor a havi \u00e9s a napi v\u00e1ltozatnak (1.17).\r\n     o: { L: tartoz\u00e1s deviz\u00e1ban, p0, n, i0: felv\u00e9tel h\u00f3napja,\r\n          lepes(k) \u2192 { i, p, ... } vagy null (nincs t\u00f6bb adat),\r\n          fortosK(k, lp) \u2192 igaz, ha a k. r\u00e9szlet m\u00e1r forintos\u00edtott }\r\n     A kamatp\u00e1lya a hitel deviz\u00e1j\u00e1nak referenciakamat\u00e1t (v\u00e1ltoz\u00f3) vagy a megadott kamatot (fix)\r\n     k\u00f6veti; a forintos\u00edt\u00e1s ut\u00e1n a forint (BUBOR) referenciakamat\u00e1t, a h.utanaKamat (vagy az\r\n     addigi kamat) kezd\u0151\u00e9rt\u00e9kkel. *\/\r\n  function hitelMotor(b, h, o) {\r\n    var n = o.n, L = o.L, p0 = o.p0;\r\n    var kp = kamatPalya(b.b, h.kamat, o.i0, n, h.valtozo, h.kamatstop), r = kp.r.slice();\r\n    var fixArf = b.a === 'HUF' ? FORINTOSITAS.arf[b.b] : undefined;\r\n    var t = torlesztes(L, n, r);\r\n    var sor = [], fizetve = 0, fizetveReal = 0, forint = null, csucs = null, arfHatas = 0;\r\n    var ar0 = b.a === 'HUF' ? huArszint(o.i0) : null;\r\n    for (var k = 1; k <= n; k++) {\r\n      var lp = o.lepes(k);\r\n      if (!lp) break;\r\n      var p = lp.p, reszlet, tart, kamat;\r\n      if (o.fortos && o.fortosK(k, lp)) {\r\n        if (!forint) {\r\n          var Dd = t.D[k - 1], maradek = n - (k - 1);\r\n          var alapF = h.utanaKamat === null ? r[k] : h.utanaKamat;   \/\/ \"mint el\u0151tte\": az akkori kamat\r\n          var kf = kamatPalya('HUF', alapF, lp.i, maradek, h.valtozo, h.kamatstop, o.i0);\r\n          var rf = [], j;\r\n          for (j = 0; j < k; j++) rf[j] = null;\r\n          for (j = 1; j <= maradek; j++) rf[k - 1 + j] = kf.r[j];\r\n          forint = { D: Dd * fixArf, Ddev: Dd, k0: k - 1, i: lp.i, d: lp.d, piaci: p, r: rf, kp: kf, kamat0: alapF };\r\n          forint.t = torlesztes(forint.D, n, rf, k - 1);\r\n          forint.R = forint.t.R[k];\r\n        }\r\n        reszlet = forint.t.R[k]; tart = forint.t.D[k]; kamat = forint.r[k];\r\n      } else {\r\n        reszlet = t.R[k] * p; tart = t.D[k] * p; kamat = r[k];\r\n        arfHatas += t.R[k] * (p - p0);\r\n      }\r\n      fizetve += reszlet;\r\n      var x = {\r\n        i: lp.i, k: k, reszlet: reszlet, tart: tart, alapReszlet: t.R[k] * p0, alapTart: t.D[k] * p0, fizetve: fizetve, arf: p,\r\n        kamat: kamat, ref: refKamat(b.b, lp.i), bubor: refKamat('HUF', lp.i)\r\n      };\r\n      if (ar0) { x.reszletReal = reszlet * ar0 \/ huArszint(lp.i); fizetveReal += x.reszletReal; x.infl = KSH_INFL[hEv(lp.i)]; }\r\n      if (lp.d) { x.d = lp.d; x.n = lp.n; x.dArf = lp.dArf; }\r\n      sor.push(x);\r\n      if (!csucs || reszlet > csucs.reszlet) csucs = x;\r\n    }\r\n    var R1 = t.R[1];\r\n    if (!sor.length) return { L: L, R: R1, p0: p0, n: n, sor: [], ures: true, kp: kp };\r\n    var u = sor[sor.length - 1], lejart = u.k >= n;\r\n    var alapFiz = 0; sor.forEach(function (x) { alapFiz += x.alapReszlet; });\r\n    \/\/ a m\u00e9g nyitott devizatartoz\u00e1s \u00e1rfolyamhat\u00e1sa (forintos\u00edt\u00e1sn\u00e1l a r\u00f6gz\u00edt\u00e9skor)\r\n    var tartHatas = forint ? (forint.Ddev * fixArf - forint.Ddev * p0) : (lejart ? 0 : (u.tart - u.alapTart));\r\n    var ki = {\r\n      L: L, R: R1, p0: p0, n: n, sor: sor, utolso: u, lejart: lejart, fizetve: fizetve, fizetveReal: ar0 ? fizetveReal : null, csucs: csucs,\r\n      elsoReszlet: sor[0].reszlet, arfHatasFizetett: arfHatas, arfHatasTartozas: tartHatas, alapFiz: alapFiz,\r\n      forintositas: forint, fixArf: fixArf, kp: kp,\r\n      kamatMin: sor.reduce(function (m, x) { return x.kamat < m.kamat ? x : m; }), kamatMax: sor.reduce(function (m, x) { return x.kamat > m.kamat ? x : m; })\r\n    };\r\n    \/\/ \u00f6sszevet\u00e9s: forinthitel (A-ban) ugyanakkora \u00f6sszegre \u00e9s futamid\u0151re; v\u00e1ltoz\u00f3 kamatn\u00e1l A referenciakamat\u00e1t k\u00f6veti\r\n    if (h.forintKamat !== null) {\r\n      var fk = kamatPalya(b.a, h.forintKamat, o.i0, n, h.valtozo, h.kamatstop), ft = torlesztes(b.osszeg, n, fk.r), ff = 0, ffReal = 0;\r\n      sor.forEach(function (x) { x.fR = ft.R[x.k]; x.fT = ft.D[x.k]; x.fKamat = fk.r[x.k]; ff += x.fR; if (ar0) ffReal += x.fR * ar0 \/ huArszint(x.i); });\r\n      ki.forint = { R: ft.R[u.k], R1: ft.R[1], fizetve: ff, fizetveReal: ar0 ? ffReal : null, tart: ft.D[u.k], kp: fk,\r\n        csucs: sor.reduce(function (m, x) { return x.fR > m.fR ? x : m; }) };\r\n    }\r\n    return ki;\r\n  }\r\n\r\n  \/* Devizahitel napi \u00e1rfolyammal: felv\u00e9tel a b.d0 napon (az aznapi vagy az el\u0151z\u0151 jegyz\u00e9si nap \u00e1rfolyam\u00e1n),\r\n     a k. r\u00e9szlet a b.d0 + k h\u00f3nap napj\u00e1n esed\u00e9kes, az akkori (vagy el\u0151z\u0151 jegyz\u00e9si napi) \u00e1rfolyamon.\r\n     Forintos\u00edt\u00e1s: a 2015. febru\u00e1r 1-j\u00e9n vagy ut\u00e1na esed\u00e9kes r\u00e9szletek forintban, a r\u00f6gz\u00edtett \u00e1rfolyamon.\r\n     Ugyanazokat a mez\u0151ket adja, mint a havi devizahitel(); a sor elemei d\u00e1tummal (d, n). 1.17: hitelMotor. *\/\r\n  var FORINTOSITAS_NAP = '2015-02-01';\r\n  function devizahitelNapi(b, h, P) {\r\n    if (!P || !datumRendben(b.d0)) return null;\r\n    var r0 = napiKeres(P, b.d0);\r\n    if (r0.hiba) return { hiba: r0.hiba === 'korai' ? 'Erre a devizap\u00e1rra ' + napSzoveg(r0.elso) + ' \u00f3ta van napi \u00e1rfolyam: v\u00e1lassz k\u00e9s\u0151bbi felv\u00e9teli napot.' : 'A felv\u00e9tel napj\u00e1ra nincs \u00e1rfolyam.' };\r\n    var p0 = r0.ertek, n = h.futamido * 12;\r\n    var vegDatum = honapLepes(b.d0, n), utolsoD = P.datumok[P.datumok.length - 1];\r\n    var fixArf = b.a === 'HUF' ? FORINTOSITAS.arf[b.b] : undefined;\r\n    var forintosithato = !!fixArf && b.d0 < FORINTOSITAS_NAP && vegDatum > FORINTOSITAS_NAP;\r\n    var ki = hitelMotor(b, h, {\r\n      L: b.osszeg \/ p0, p0: p0, n: n, i0: hIdx(b.d0.slice(0, 7)), fortos: !!(h.forintositas && forintosithato),\r\n      lepes: function (k) {\r\n        var d = honapLepes(b.d0, k);\r\n        if (d > utolsoD) return null;\r\n        var rk = napiKeres(P, d);\r\n        return rk.hiba ? null : { i: hIdx(d.slice(0, 7)), p: rk.ertek, d: d, n: napSorszam(d), dArf: rk.datum };\r\n      },\r\n      fortosK: function (k, lp) { return lp.d >= FORINTOSITAS_NAP; }\r\n    });\r\n    ki.napi = true; ki.r0 = r0; ki.vegDatum = vegDatum; ki.forintosithato = forintosithato;\r\n    return ki;\r\n  }\r\n\r\n  \/* Havi kateg\u00f3ria-tengelyes grafikon-be\u00e1ll\u00edt\u00e1s \u00e1talak\u00edt\u00e1sa napi line\u00e1ris id\u0151tengelyre.\r\n     A sor elemei a grafikon pontjai (azonos sorrendben); a tooltip-visszah\u00edv\u00e1sok\r\n     az eredeti dataIndex-et \u00e9s raw \u00e9rt\u00e9ket kapj\u00e1k, \u00edgy a havi \u00e9s a napi m\u00f3d k\u00f6z\u00f6s. *\/\r\n  function napiraAlakit(cfg, sor) {\r\n    if (!cfg || !vanNap(sor)) return cfg;\r\n    var idx = {};\r\n    sor.forEach(function (x, j) { idx[x.n] = j; });\r\n    cfg.data.datasets.forEach(function (ds) {\r\n      ds.data = ds.data.map(function (y, j) { return { x: sor[j].n, y: y === undefined ? null : y }; });\r\n      ds.tension = 0;\r\n    });\r\n    delete cfg.data.labels;\r\n    var min = sor[0].n, max = sor[sor.length - 1].n, span = max - min, o = cfg.options;\r\n    o.parsing = false; o.normalized = true;\r\n    o.scales.x = {\r\n      type: 'linear', min: min, max: max, grid: { display: false },\r\n      afterBuildTicks: function (ax) { ax.ticks = napiTickek(min, max).map(function (v) { return { value: v }; }); },\r\n      ticks: { color: SZIN.muted, maxRotation: 0, autoSkip: false, callback: function (v) { return napiTickCimke(v, span); } }\r\n    };\r\n    var cb = o.plugins && o.plugins.tooltip && o.plugins.tooltip.callbacks;\r\n    var atir = function (c) {\r\n      var c2 = Object.create(c);\r\n      Object.defineProperty(c2, 'raw', { value: c.raw && typeof c.raw === 'object' ? c.raw.y : c.raw });\r\n      Object.defineProperty(c2, 'dataIndex', { value: c.raw && typeof c.raw === 'object' ? idx[c.raw.x] : c.dataIndex });\r\n      return c2;\r\n    };\r\n    if (cb && cb.title) { var t = cb.title; cb.title = function (it) { return t.call(this, it.map(atir)); }; }\r\n    if (cb && cb.label) { var l = cb.label; cb.label = function (c) { return l.call(this, atir(c)); }; }\r\n    cfg.kulcs = 'napi';\r\n    return cfg;\r\n  }\r\n\r\n  \/\/ \u00c1r- \u00e9s darabmez\u0151 (1.14): sz\u00e1mjegyek \u00e9s egy tizedesjel, legfeljebb 6 tizedes; \u00fcres = nincs megadva\r\n  function arTisztit(x) {\r\n    var t = String(x || '').replace(\/\\s\/g, '').replace(\/\\.\/g, ',').replace(\/[^\\d,]\/g, '');\r\n    var i = t.indexOf(',');\r\n    if (i >= 0) t = t.slice(0, i + 1) + t.slice(i + 1).replace(\/,\/g, '').slice(0, 6);\r\n    return t.slice(0, 20);\r\n  }\r\n  function elojelesPenzK(x, kod) { return (x > 0.5 ? '+' : x < -0.5 ? '\u2212' : '') + penz(Math.abs(x), kod); }   \/\/ 1.18: b\u00e1rmely p\u00e9nznemben\r\n  function elojelesPenz(x) { return (x > 0 ? '+' : '') + penz(x, 'HUF'); }   \/\/ \"+83 940 Ft\", \"\u22124023 Ft\" (1.16)\r\n  function arErtek(x) { var v = beolvas(x); return v > 0 && isFinite(v) ? v : null; }\r\n\r\n  function esc(s) { return String(s).replace(\/[&<>\"']\/g, function (c) { return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' }[c]; }); }\r\n  \/\/ Megnevez\u00e9s: bet\u0171, sz\u00e1m, sz\u00f3k\u00f6z \u00e9s n\u00e9h\u00e1ny jel, legfeljebb 24 karakter (a linkbe \u00e9s a CSV-be is \u00edgy megy)\r\n  function nevTisztit(s) { return String(s || '').replace(\/[^0-9A-Za-z\u00c0-\u017e .\\-&\/]\/g, '').slice(0, 24); }\r\n\r\n  \/* ==========================================================\r\n     3. SZ\u00cdNEK \u2013 a GYIK-blokkal azonos paletta\r\n     ========================================================== *\/\r\n  var SZIN = {\r\n    navy: '#1b3a5f', accent: '#e2662c', text: '#333333', line: '#dfe5ec', hover: '#eef4fa', bg: '#f4f8fc', muted: '#6b7785',\r\n    zold: '#2e8540', piros: '#b3261e',\r\n    accentHalvany: 'rgba(226, 102, 44, 0.28)', accentNagyonHalvany: 'rgba(226, 102, 44, 0.12)', navyHalvany: 'rgba(27, 58, 95, 0.10)', navyKozep: 'rgba(27, 58, 95, 0.55)'\r\n  };\r\n  var VERSENY_SZINEK = [SZIN.navy, SZIN.accent, '#2a9d8f', '#8e5ea2', '#4f86c6'];\r\n  var VERSENY_ALAP = ['EUR', 'USD', 'CHF', 'GBP', 'CZK'];\r\n\r\n  \/* ==========================================================\r\n     4. SEG\u00c9DF\u00dcGGV\u00c9NYEK \u2013 h\u00f3napok, sz\u00e1mform\u00e1z\u00e1s, ragoz\u00e1s\r\n     ========================================================== *\/\r\n  \/\/ H\u00f3napindex: \u00e9v \u00d7 12 + (h\u00f3nap \u2212 1); \u00edgy k\u00e9t h\u00f3nap k\u00fcl\u00f6nbs\u00e9ge egyszer\u0171 kivon\u00e1s\r\n  function hIdx(s) { var m = \/^(\\d{4})-(0[1-9]|1[0-2])$\/.exec(s); return m ? Number(m[1]) * 12 + Number(m[2]) - 1 : NaN; }\r\n  function hStr(i) { var e = Math.floor(i \/ 12), h = i % 12 + 1; return e + '-' + (h < 10 ? '0' : '') + h; }\r\n  function hEv(i) { return Math.floor(i \/ 12); }\r\n  function hHo(i) { return i % 12; }\r\n  function hSzoveg(i) { return hEv(i) + '. ' + HONAPOK[hHo(i)] + csillag(i); }        \/\/ \"1990. janu\u00e1r\"\r\n  function hBan(i) { return hEv(i) + ' ' + HONAPOK_BAN[hHo(i)]; }                     \/\/ \"1990 janu\u00e1rj\u00e1ban\"\r\n  function hI(i) { return hEv(i) + '. ' + HONAPOK[hHo(i)] + 'i'; }                    \/\/ \"1990. janu\u00e1ri\"\r\n  function hTol(i) { return hBan(i).replace(\/ban$\/, 't\u00f3l').replace(\/ben$\/, 't\u0151l'); }      \/\/ \"1990 janu\u00e1rj\u00e1t\u00f3l\"\r\n  function hRovid(i) { return hEv(i) + '. ' + HONAPOK_ROVID[hHo(i)]; }                \/\/ \"1990. jan.\"\r\n  \/\/ A legut\u00f3bbi (r\u00e9szleges) h\u00f3nap csillagot kap: a h\u00f3nap eddigi napjainak \u00e1tlaga\r\n  function reszlegesHonap() {\r\n    var m = \/^(\\d{4})-(\\d{2})-(\\d{2})$\/.exec(UTOLSO_NAP || '');\r\n    if (!m) return null;\r\n    var nap = new Date(Number(m[1]), Number(m[2]), 0).getDate();   \/\/ a h\u00f3nap utols\u00f3 napja\r\n    return Number(m[3]) < nap - 2 ? Number(m[1]) * 12 + Number(m[2]) - 1 : null;\r\n  }\r\n  function csillag(i) { return i === reszlegesHonap() ? '*' : ''; }\r\n\r\n  \/\/ Forint \/ 1 egys\u00e9g deviza az i. h\u00f3napban (a forint mindig 1); undefined, ha nincs adat\r\n  function arf(kod, i) {\r\n    if (kod === 'HUF') return 1;\r\n    var s = ARFOLYAM[kod];\r\n    if (!s) return undefined;\r\n    var x = s.v[i - hIdx(s.k)];\r\n    return typeof x === 'number' ? x : undefined;\r\n  }\r\n  \/\/ 1 egys\u00e9g B \u00e1ra A-ban (A = HUF eset\u00e9n a forint\u00e1rfolyam)\r\n  function par(a, b, i) {\r\n    var x = arf(a, i), y = arf(b, i);\r\n    return x && y ? y \/ x : undefined;\r\n  }\r\n  \/\/ A k\u00e9t deviza k\u00f6z\u00f6s adattartom\u00e1nya (h\u00f3napindexek), 1990-t\u0151l\r\n  function tartomany(a, b) {\r\n    var tol = hIdx(ELSO_HONAP), ig = -Infinity;\r\n    [a, b].forEach(function (k) {\r\n      if (k === 'HUF') return;\r\n      var s = ARFOLYAM[k]; if (!s) { tol = Infinity; return; }\r\n      var e = hIdx(s.k), u = e + s.v.length - 1;\r\n      while (u > e && typeof s.v[u - e] !== 'number') u--;\r\n      tol = Math.max(tol, e);\r\n      ig = ig === -Infinity ? u : Math.min(ig, u);\r\n    });\r\n    if (ig === -Infinity) ig = tol;\r\n    \/\/ az elej\u00e9n l\u00e9v\u0151 \u00fcres h\u00f3napokat \u00e1tugorjuk\r\n    while (tol <= ig && par(a, b, tol) === undefined) tol++;\r\n    return { tol: tol, ig: ig };\r\n  }\r\n\r\n  var fmtSzam = new Intl.NumberFormat('hu-HU', { maximumFractionDigits: 0 });\r\n  var fmt1 = new Intl.NumberFormat('hu-HU', { minimumFractionDigits: 1, maximumFractionDigits: 1 });\r\n  var fmt2 = new Intl.NumberFormat('hu-HU', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\r\n  var fmt4 = new Intl.NumberFormat('hu-HU', { minimumFractionDigits: 4, maximumFractionDigits: 4 });\r\n  var fmtRovid = new Intl.NumberFormat('hu-HU', { notation: 'compact', compactDisplay: 'short', maximumFractionDigits: 1 });\r\n  function kerek1(x) { var v = Math.round(x * 10) \/ 10; return v === 0 ? 0 : v; }   \/\/ \u22120,0 helyett 0,0\r\n  function szazalek(x) { return fmt1.format(kerek1(x)).replace('-', '\u2212') + '%'; }\r\n  \/\/ Kamatl\u00e1b ki\u00edr\u00e1sa legfeljebb k\u00e9t tizedessel: \"4,5%\", \"\u22120,75%\"\r\n  var fmtKamat = new Intl.NumberFormat('hu-HU', { maximumFractionDigits: 2 });\r\n  function kamatSz(x) { return fmtKamat.format(x).replace('-', '\u2212') + '%'; }\r\n  function elojeles(x) { var v = kerek1(x); return (v > 0 ? '+' : '') + szazalek(v); }\r\n  function szazalekpont(x) { var v = kerek1(x); return (v > 0 ? '+' : '') + fmt1.format(v).replace('-', '\u2212') + '\u00a0%\u2011pont'; }\r\n  function penz(x, kod) {\r\n    var d = DEVIZAK[kod], abs = Math.abs(x);\r\n    var szam = kod === 'HUF' || abs >= 1000 ? fmtSzam.format(Math.round(x)) : fmt2.format(x);\r\n    return szam.replace('-', '\u2212') + '\u00a0' + d.jel;\r\n  }\r\n  \/\/ \u00c1rfolyam ki\u00edr\u00e1sa: \"1 USD = 313,46 Ft\", JPY-n\u00e1l 100 jenre\r\n  function arfSzoveg(a, b, ertek) {\r\n    \/\/ 1.12: ha a c\u00e9lp\u00e9nznem a forint, a megszokott alakban: \"1 EUR = 366,33 Ft\" (nem \"1 Ft = 0,0027 EUR\")\r\n    if (b === 'HUF' && a !== 'HUF') { var ea = DEVIZAK[a].egyseg, y = ea \/ ertek; return ea + ' ' + DEVIZAK[a].jel + ' = ' + (y >= 10 ? fmt2.format(y) : fmt4.format(y)) + ' Ft'; }\r\n    var eg = DEVIZAK[b].egyseg, x = ertek * eg;\r\n    return eg + '\u00a0' + DEVIZAK[b].jel + '\u00a0=\u00a0' + (x >= 10 ? fmt2.format(x) : fmt4.format(x)) + '\u00a0' + DEVIZAK[a].jel;\r\n  }\r\n  function arfSzam(b, ertek) { var x = ertek * DEVIZAK[b].egyseg; return x >= 10 ? fmt2.format(x) : fmt4.format(x); }\r\n  \/\/ N\u00e9vel\u0151 a deviza neve el\u00e9: \"az amerikai doll\u00e1r\", \"a sv\u00e1jci frank\"; nagy: mondat elej\u00e9n\r\n  \/\/ N\u00e9vel\u0151 b\u00e1rmely sz\u00f3 el\u00e9: \"az amerikai doll\u00e1rban\", \"a forintban\"\r\n  function az(szo, nagy) { var v = \/^[a\u00e1e\u00e9i\u00edo\u00f3\u00f6\u0151u\u00fa\u00fc\u0171]\/i.test(szo); return (nagy ? (v ? 'Az' : 'A') : (v ? 'az' : 'a')) + ' ' + szo; }\r\n  function nevelos(d, nagy) { var az = \/^[a\u00e1e\u00e9i\u00edo\u00f3\u00f6\u0151u\u00fa\u00fc\u0171]\/i.test(d.nev); return (nagy ? (az ? 'Az' : 'A') : (az ? 'az' : 'a')) + ' ' + d.nev; }\r\n  \/\/ \"-b\u00f3l\/-b\u0151l\" a p\u00e9nznemjel ut\u00e1n a kiejt\u00e9s szerint: \"100 000 Ft-b\u00f3l\", \"100 000 JPY-b\u0151l\"\r\n  function bol(kod) { return '-' + (DEVIZAK[kod].bol || 'b\u00f3l'); }\r\n  \/\/ N\u00e9vel\u0151 sz\u00e1m el\u00e9 a kiejt\u00e9s szerint: \"az 5 \u00e9v\", \"a 381 h\u00f3nap\", \"az 1200\"\r\n  function szamNevelo(x) {\r\n    var n = Math.floor(Math.abs(x)), g = n; while (g >= 1000) g = Math.floor(g \/ 1000);\r\n    var vok = g === 1 || g === 5 || (g >= 50 && g < 60) || (g >= 500 && g < 600);\r\n    return vok ? 'az' : 'a';\r\n  }\r\n  function szazalekpontSzoveg(x) { var v = kerek1(x); return (v > 0 ? '+' : '') + fmt1.format(v).replace('-', '\u2212') + '\\u00a0sz\u00e1zal\u00e9kpont'; }\r\n\r\n  function beolvas(szoveg) {\r\n    var s = String(szoveg).replace(\/[\\s\u00a0\u202f]\/g, '').replace(',', '.').replace('\u2212', '-');\r\n    if (s === '') return NaN;\r\n    var x = parseFloat(s);\r\n    return isFinite(x) ? x : NaN;\r\n  }\r\n\r\n  \/* BEVITELI KORL\u00c1TOK \u2013 g\u00e9pel\u00e9s k\u00f6zben sz\u0171r\u00fcnk: bet\u0171, sz\u00f3k\u00f6z \u00e9s m\u00e1s jel nem ker\u00fclhet a mez\u0151be.\r\n     \u00d6sszeg: eg\u00e9sz sz\u00e1m, legfeljebb 100 milli\u00e1rd. \u00c9ves hozam: \u221230 \u2026 50%, k\u00e9t tizedes.\r\n     Ha valaki a hat\u00e1r f\u00f6l\u00e9 \u00edr, a mez\u0151 a hat\u00e1rra \u00e1ll, \u00e9s egy pillanatra narancss\u00e1rg\u00e1n felvillan. *\/\r\n  var OSSZEG_MAX = 100000000000, HOZAM_MIN = -30, HOZAM_MAX = 50;\r\n  \/\/ Kamatok (%\/\u00e9v): bet\u00e9t \u22125 \u2026 40 (a frank \u00e9s az eur\u00f3 kamata negat\u00edv is volt), hitel 0 \u2026 30, futamid\u0151 1 \u2026 40 \u00e9v\r\n  var BETET_MIN = -5, BETET_MAX = 40, HITEL_KAMAT_MAX = 30, FUTAMIDO_MAX = 40;\r\n  \/\/ Kamatad\u00f3 a jelenlegi m\u00e9rt\u00e9kkel: 15% SZJA + 13% szoci\u00e1lis hozz\u00e1j\u00e1rul\u00e1si ad\u00f3 = 28%\r\n  var KAMATADO = 0.28;\r\n  function villan(mezo) {\r\n    mezo.classList.add('figy');\r\n    clearTimeout(mezo._villanas);\r\n    mezo._villanas = setTimeout(function () { mezo.classList.remove('figy'); }, 1500);\r\n  }\r\n  function elofoTagolas(mezo) {\r\n    var poz = mezo.selectionStart || 0;\r\n    var szamjegyElotte = mezo.value.slice(0, poz).replace(\/\\D\/g, '').length;\r\n    var csakSzam = mezo.value.replace(\/\\D\/g, '').replace(\/^0+(?=\\d)\/, '');\r\n    if (csakSzam && Number(csakSzam) > OSSZEG_MAX) { csakSzam = String(OSSZEG_MAX); villan(mezo); }\r\n    var uj = csakSzam ? fmtSzam.format(Number(csakSzam)) : '';\r\n    mezo.value = uj;\r\n    var db = 0, i = 0;\r\n    while (i < uj.length && db < szamjegyElotte) { if (\/\\d\/.test(uj[i])) db++; i++; }\r\n    try { mezo.setSelectionRange(i, i); } catch (e) { \/* n\u00e9h\u00e1ny mobilb\u00f6ng\u00e9sz\u0151 nem engedi *\/ }\r\n  }\r\n  \/\/ Eg\u00e9sz sz\u00e1m mez\u0151 (pl. ar\u00e1ny, %): csak sz\u00e1mjegy, 0 \u2026 max\r\n  function egeszSzuro(mezo, max) {\r\n    var regi = mezo.value, t = regi.replace(\/\\D\/g, '').replace(\/^0+(?=\\d)\/, '');\r\n    if (t !== '' && Number(t) > max) { t = String(max); villan(mezo); }\r\n    if (t !== regi) mezo.value = t;\r\n  }\r\n  function tizedesSzuro(mezo, min, max) {\r\n    var regi = mezo.value, poz = mezo.selectionStart || 0;\r\n    var neg = min < 0 && \/^\\s*[-\u2212]\/.test(regi);\r\n    var t = regi.replace(\/\\.\/g, ',').replace(\/[^\\d,]\/g, '');\r\n    var i = t.indexOf(',');\r\n    if (i >= 0) t = t.slice(0, i + 1) + t.slice(i + 1).replace(\/,\/g, '').slice(0, 2);\r\n    t = t.replace(\/^0+(?=\\d)\/, '');\r\n    if (t.charAt(0) === ',') t = '0' + t;          \/\/ \",5\" \u2192 \"0,5\"\r\n    var x = t === '' || t === ',' ? 0 : Number(t.replace(',', '.')) * (neg ? -1 : 1);\r\n    if (x > max) { t = String(max); villan(mezo); }\r\n    else if (x < min) { t = String(-min); villan(mezo); }\r\n    var uj = (neg ? '\u2212' : '') + t;\r\n    if (uj !== regi) {\r\n      mezo.value = uj;\r\n      var p = Math.max(0, Math.min(uj.length, poz - (regi.length - uj.length)));\r\n      try { mezo.setSelectionRange(p, p); } catch (e) { \/* n\u00e9h\u00e1ny mobilb\u00f6ng\u00e9sz\u0151 nem engedi *\/ }\r\n    }\r\n  }\r\n\r\n  \/* ==========================================================\r\n     5. SZ\u00c1M\u00cdT\u00c1S\r\n     ========================================================== *\/\r\n\r\n  \/* Magyar \u00e1rszint havonta: az \u00e9ves \u00e1tlagos \u00e1rszintet az \u00e9v k\u00f6zep\u00e9re tessz\u00fck,\r\n     \u00e9s a szomsz\u00e9dos \u00e9vek k\u00f6z\u00f6tt m\u00e9rtani \u00e1tlaggal (egyenletes havi \u00fctemmel) t\u00f6ltj\u00fck ki.\r\n     A legutols\u00f3 adat\u00e9v ut\u00e1n az utols\u00f3 ismert \u00e9ves \u00fctemmel folytatjuk. *\/\r\n  function arszintEvek(D) {\r\n    D = D || KSH_INFL;                              \/\/ alapb\u00f3l a magyar infl\u00e1ci\u00f3\r\n    var evek = Object.keys(D).map(Number).sort(function (a, b) { return a - b; });\r\n    var L = {}, elso = evek[0] - 1; L[elso] = 100;\r\n    for (var e = evek[0]; e <= evek[evek.length - 1]; e++) L[e] = L[e - 1] * (1 + (D[e] || 0) \/ 100);\r\n    return { L: L, elso: elso, utolso: evek[evek.length - 1], D: D };\r\n  }\r\n  function arszintHonap(A, i) {\r\n    var t = hEv(i) + (hHo(i) + 0.5) \/ 12 - 0.5;   \/\/ \u00e9ves pontok az \u00e9v k\u00f6zep\u00e9n\r\n    var a = Math.floor(t), f = t - a;\r\n    var Lx = function (ev) {\r\n      if (ev < A.elso) return A.L[A.elso] \/ Math.pow(1 + A.D[A.elso + 1] \/ 100, A.elso - ev);\r\n      if (ev > A.utolso) return A.L[A.utolso] * Math.pow(1 + A.D[A.utolso] \/ 100, ev - A.utolso);\r\n      return A.L[ev];\r\n    };\r\n    return Lx(a) * Math.pow(Lx(a + 1) \/ Lx(a), f);\r\n  }\r\n\r\n  \/* Alapsz\u00e1m\u00edt\u00e1s: \u00f6sszeg A p\u00e9nznemben a t0. h\u00f3napban B-re v\u00e1ltva, a t1. h\u00f3napban visszav\u00e1ltva.\r\n     sor: havonta az \u00e9rt\u00e9k A-ban, \u00e9s (forintn\u00e1l) az az \u00f6sszeg, amely az infl\u00e1ci\u00f3t pontosan k\u00f6vette volna. *\/\r\n  \/\/ Kamatszorz\u00f3: \u00e9vi r% (effekt\u00edv) kamat m h\u00f3napra, havi t\u0151k\u00e9s\u00edt\u00e9ssel\r\n  function kamatSzorzo(r, m) { return r ? Math.pow(1 + r \/ 100, m \/ 12) : 1; }\r\n\r\n  function szamitas(b) {\r\n    var A = arszintEvek(), kb = b.kb || 0, ka = b.ka || 0;\r\n    var p0 = par(b.a, b.b, b.t0), p1 = par(b.a, b.b, b.t1);\r\n    var egyseg = b.osszeg \/ p0;                    \/\/ ennyi B-t kapt\u00e1l volna\r\n    var sor = [], minP = null, maxP = null, osszP = 0, db = 0;\r\n    for (var i = b.t0; i <= b.t1; i++) {\r\n      var p = par(b.a, b.b, i);\r\n      if (p === undefined) continue;\r\n      \/\/ \u00e9rt\u00e9k: a deviza mennyis\u00e9ge a devizakamattal n\u0151, az \u00e1rfolyammal szorozva\r\n      var s = { i: i, arf: p, ertek: egyseg * kamatSzorzo(kb, i - b.t0) * p };\r\n      if (ka) s.betet = b.osszeg * kamatSzorzo(ka, i - b.t0);   \/\/ ha A-ban, bet\u00e9tben maradt volna\r\n      if (b.a === 'HUF') s.inflacio = b.osszeg * arszintHonap(A, i) \/ arszintHonap(A, b.t0);\r\n      sor.push(s);\r\n      if (!minP || p < minP.arf) minP = s;\r\n      if (!maxP || p > maxP.arf) maxP = s;\r\n      osszP += p; db++;\r\n    }\r\n    var honapok = b.t1 - b.t0, egysegVeg = egyseg * kamatSzorzo(kb, honapok), ertek = egysegVeg * p1;\r\n    var betet = b.osszeg * kamatSzorzo(ka, honapok);\r\n    var e = {\r\n      sor: sor, egyseg: egyseg, egysegVeg: egysegVeg, p0: p0, p1: p1, ertek: ertek, honapok: honapok, kb: kb, ka: ka, betet: betet, ado: !!b.ado,\r\n      valtozas: (p1 \/ p0 - 1) * 100,                                      \/\/ csak az \u00e1rfolyam\r\n      eviAtlag: honapok > 0 ? (Math.pow(p1 \/ p0, 12 \/ honapok) - 1) * 100 : 0,\r\n      ertekValt: (ertek \/ b.osszeg - 1) * 100,                             \/\/ \u00e1rfolyam + devizakamat\r\n      ertekEvi: honapok > 0 ? (Math.pow(ertek \/ b.osszeg, 12 \/ honapok) - 1) * 100 : 0,\r\n      min: minP, max: maxP, atlag: db ? osszP \/ db : p0\r\n    };\r\n    \/\/ 12 havi legnagyobb dr\u00e1gul\u00e1s \/ olcs\u00f3bbod\u00e1s (B \u00e1ra A-ban)\r\n    var legjobb = null, legrosszabb = null;\r\n    sor.forEach(function (s) {\r\n      var x = par(b.a, b.b, s.i - 12);\r\n      if (x === undefined || s.i - 12 < b.t0) return;\r\n      var v = (s.arf \/ x - 1) * 100;\r\n      if (!legjobb || v > legjobb.v) legjobb = { v: v, i: s.i };\r\n      if (!legrosszabb || v < legrosszabb.v) legrosszabb = { v: v, i: s.i };\r\n    });\r\n    e.legjobb12 = legjobb; e.legrosszabb12 = legrosszabb;\r\n    \/\/ Re\u00e1l\u00e9rt\u00e9k (csak forintn\u00e1l): a mostani \u00e9rt\u00e9k a kezd\u0151 h\u00f3nap \u00e1rszintj\u00e9n\r\n    if (b.a === 'HUF') {\r\n      var l0 = arszintHonap(A, b.t0), l1 = arszintHonap(A, b.t1);\r\n      e.arszintValt = (l1 \/ l0 - 1) * 100;\r\n      e.realErtek = ertek * l0 \/ l1;\r\n      e.realValt = (e.realErtek \/ b.osszeg - 1) * 100;\r\n      e.forintReal = betet * l0 \/ l1;               \/\/ ha forintban (a megadott forintkamattal) tartottad volna\r\n      e.kellett = b.osszeg * l1 \/ l0;               \/\/ ennyi forint kellene ma ugyanahhoz a v\u00e1s\u00e1rl\u00f3er\u0151h\u00f6z\r\n    }\r\n    return e;\r\n  }\r\n\r\n  \/* Kock\u00e1zati mutat\u00f3k a v\u00e1lasztott id\u0151szakra:\r\n     ingadoz\u00e1s: a havi v\u00e1ltoz\u00e1sok sz\u00f3r\u00e1sa \u00e9ves\u00edtve (\u00d7\u221a12), log-hozamokb\u00f3l;\r\n     legnagyobb visszaes\u00e9s: a cs\u00facst\u00f3l m\u00e9rt legm\u00e9lyebb es\u00e9s, a cs\u00facs, a m\u00e9lypont \u00e9s a visszat\u00e9r\u00e9s h\u00f3napj\u00e1val. *\/\r\n  function kockazat(b, e) {\r\n    var s = e.sor, r = [];\r\n    var napi = vanNap(s);   \/\/ 1.9: napi sor (jegyz\u00e9si napok)\r\n    for (var k = 1; k < s.length; k++) if (napi || s[k].i === s[k - 1].i + 1) r.push(Math.log(s[k].arf \/ s[k - 1].arf));\r\n    var atl = r.reduce(function (a, x) { return a + x; }, 0) \/ (r.length || 1);\r\n    var szoras = Math.sqrt(r.reduce(function (a, x) { return a + (x - atl) * (x - atl); }, 0) \/ Math.max(1, r.length - 1));\r\n    var csucs = s[0], dd = { v: 0, csucs: s[0], melypont: s[0], vissza: null }, aktCsucs = s[0];\r\n    var esesek = [];\r\n    s.forEach(function (x) {\r\n      if (x.arf > aktCsucs.arf) aktCsucs = x;\r\n      var v = (x.arf \/ aktCsucs.arf - 1) * 100;\r\n      esesek.push({ i: x.i, d: x.d, n: x.n, v: v });\r\n      if (v < dd.v) dd = { v: v, csucs: aktCsucs, melypont: x, vissza: null };\r\n    });\r\n    if (dd.v < 0) {\r\n      for (var j = 0; j < s.length; j++) if (s[j].i > dd.melypont.i && s[j].arf >= dd.csucs.arf) { dd.vissza = s[j]; break; }\r\n    }\r\n    return { ingadozas: szoras * Math.sqrt(napi ? evesFaktor(s) : 12) * 100, visszaeses: dd, esesek: esesek, honapok: r.length, napi: napi };\r\n  }\r\n\r\n  \/* G\u00f6rd\u00fcl\u0151 id\u0151szakok: a fent be\u00e1ll\u00edtott id\u0151szakon (t0 \u2026 t1) bel\u00fcl minden kezd\u0151 h\u00f3napt\u00f3l H h\u00f3napos tart\u00e1s.\r\n     H = 0: a teljes id\u0151szak (egyetlen eset, ez maga a fenti eredm\u00e9ny). *\/\r\n  function gordulo(b, evek) {\r\n    var t = { tol: b.t0, ig: b.t1 }, H = evek ? evek * 12 : b.t1 - b.t0, A = arszintEvek(), ki = [];\r\n    if (H > b.t1 - b.t0 || H < 1) return null;\r\n    for (var i = t.tol; i + H <= t.ig; i++) {\r\n      var p0 = par(b.a, b.b, i), p1 = par(b.a, b.b, i + H);\r\n      if (p0 === undefined || p1 === undefined) continue;\r\n      var v = (p1 \/ p0 - 1) * 100;\r\n      var real = b.a === 'HUF' ? ((p1 \/ p0) * arszintHonap(A, i) \/ arszintHonap(A, i + H) - 1) * 100 : null;\r\n      ki.push({ i: i, v: v, real: real });\r\n    }\r\n    if (!ki.length) return null;\r\n    var rend = ki.map(function (x) { return x.v; }).sort(function (a, c) { return a - c; });\r\n    var median = rend.length % 2 ? rend[(rend.length - 1) \/ 2] : (rend[rend.length \/ 2 - 1] + rend[rend.length \/ 2]) \/ 2;\r\n    var legr = ki.reduce(function (a, x) { return x.v < a.v ? x : a; }), legj = ki.reduce(function (a, x) { return x.v > a.v ? x : a; });\r\n    return {\r\n      db: ki.length, tol: t.tol, ig: t.ig, H: H, adat: ki,\r\n      nyero: ki.filter(function (x) { return x.v > 0; }).length \/ ki.length * 100,\r\n      inflVero: b.a === 'HUF' ? ki.filter(function (x) { return x.real > 0; }).length \/ ki.length * 100 : null,\r\n      median: median, legrosszabb: legr, legjobb: legj\r\n    };\r\n  }\r\n\r\n  \/* Devizahat\u00e1s egy k\u00fclf\u00f6ldi befektet\u00e9sen: a befektet\u00e9s \u00e9vi r%-ot hoz B-ben.\r\n     Forintban (A-ban) m\u00e9rve: \u00e9rt\u00e9k = \u00f6sszeg \u00d7 (1+r)^(\u00e9v) \u00d7 \u00e1rfolyamv\u00e1ltoz\u00e1s.\r\n     Fedezett (hedged) v\u00e1ltozat: csak a befektet\u00e9s hozama, \u00e1rfolyamhat\u00e1s n\u00e9lk\u00fcl\r\n     (a fedez\u00e9s k\u00f6lts\u00e9g\u00e9t, a kamatk\u00fcl\u00f6nb\u00f6zetet nem sz\u00e1moljuk). *\/\r\n  function devizahatas(b, e, hozam) {\r\n    var sor = e.sor.map(function (s) {\r\n      var f = Math.pow(1 + hozam \/ 100, s.n !== undefined ? (s.n - e.sor[0].n) \/ 365.2425 : (s.i - b.t0) \/ 12);\r\n      return { i: s.i, d: s.d, n: s.n, fedezetlen: b.osszeg * f * s.arf \/ e.p0, fedezett: b.osszeg * f };\r\n    });\r\n    var veg = sor[sor.length - 1], ev = e.honapok \/ 12;\r\n    var huf = ev > 0 ? (Math.pow(veg.fedezetlen \/ b.osszeg, 1 \/ ev) - 1) * 100 : 0;\r\n    var fx = e.eviAtlag;\r\n    return { sor: sor, fedezetlen: veg.fedezetlen, fedezett: veg.fedezett, eviHuf: huf, eviFx: fx, hatasPont: huf - hozam, hozam: hozam };\r\n  }\r\n\r\n  \/* Rendszeres v\u00e1s\u00e1rl\u00e1s: a t0. h\u00f3napt\u00f3l a t1. h\u00f3napig minden h\u00f3napban \"havi\" \u00f6sszeget v\u00e1ltunk B-re\r\n     (az utols\u00f3 h\u00f3napban m\u00e1r nem vesz\u00fcnk, akkor \u00e9rt\u00e9kel\u00fcnk). P\u00e9nzs\u00falyozott hozam (bels\u0151 megt\u00e9r\u00fcl\u00e9si r\u00e1ta):\r\n     az a havi r, amelyn\u00e9l a befizet\u00e9sek r-rel felkamatozott \u00e9rt\u00e9ke \u00e9ppen a v\u00e9gs\u0151 \u00e9rt\u00e9k. *\/\r\n  function rendszeres(b, havi) {\r\n    var A = arszintEvek(), egyseg = 0, befizetve = 0, inflBef = 0, sor = [], befizetesek = [], piaciOssz = 0, db = 0, vettEgyseg = 0;\r\n    var l1 = arszintHonap(A, b.t1), g = kamatSzorzo(b.kb || 0, 1), elozo = b.t0;\r\n    var betet = 0, gA = kamatSzorzo(b.ka || 0, 1), elozoA = b.t0;\r\n    for (var i = b.t0; i <= b.t1; i++) {\r\n      var p = par(b.a, b.b, i);\r\n      if (p === undefined) continue;\r\n      egyseg *= Math.pow(g, i - elozo); elozo = i;   \/\/ a m\u00e1r megl\u00e9v\u0151 deviza kamatozik\r\n      if (i < b.t1) { vettEgyseg += havi \/ p; egyseg += havi \/ p; befizetve += havi; befizetesek.push(i); piaciOssz += p; db++; if (b.a === 'HUF') inflBef += havi * l1 \/ arszintHonap(A, i); }\r\n      \/\/ \u00f6sszevet\u00e9s: ugyanezek a befizet\u00e9sek A-ban, bet\u00e9tben (b.ka kamattal)\r\n      if (b.ka) { betet = betet * Math.pow(gA, i - elozoA) + (i < b.t1 ? havi : 0); elozoA = i; }\r\n      sor.push({ i: i, befizetve: befizetve, ertek: egyseg * p, betet: b.ka ? betet : undefined });\r\n    }\r\n    if (!db) return null;\r\n    var p1 = par(b.a, b.b, b.t1), ertek = egyseg * p1;\r\n    var f = function (r) { return befizetesek.reduce(function (s, i) { return s + havi * Math.pow(1 + r, b.t1 - i); }, 0) - ertek; };\r\n    var lo = -0.5, hi = 0.5;\r\n    for (var k = 0; k < 80; k++) { var mid = (lo + hi) \/ 2; if (f(mid) > 0) hi = mid; else lo = mid; }\r\n    var r = (lo + hi) \/ 2;\r\n    \/\/ \u00f6sszevet\u00e9s: ugyanennyi p\u00e9nz egy \u00f6sszegben, az els\u0151 h\u00f3napban v\u00e1ltva\r\n    var egyben = befizetve \/ par(b.a, b.b, b.t0) * kamatSzorzo(b.kb || 0, b.t1 - b.t0) * p1;\r\n    return {\r\n      sor: sor, honapok: db, befizetve: befizetve, ertek: ertek, egyseg: egyseg,\r\n      valtozas: (ertek \/ befizetve - 1) * 100, eviHozam: (Math.pow(1 + r, 12) - 1) * 100,\r\n      atlagVetel: befizetve \/ vettEgyseg,        \/\/ \u00e1tlagos v\u00e9teli \u00e1rfolyam (forint \/ 1 egys\u00e9g B)\r\n      atlagPiaci: piaciOssz \/ db,                \/\/ a v\u00e9teli h\u00f3napok \u00e1tlag\u00e1rfolyama\r\n      egyben: egyben, inflBef: b.a === 'HUF' ? inflBef : null, p1: p1,\r\n      betet: b.ka ? sor[sor.length - 1].betet : null\r\n    };\r\n  }\r\n\r\n  \/* Portf\u00f3li\u00f3 devizamix: a t0. h\u00f3napban a s\u00falyok szerint sz\u00e9tosztjuk az \u00f6sszeget, \u00e9s tartjuk\r\n     (nincs \u00fajras\u00falyoz\u00e1s). A mix \u00e9rt\u00e9k\u00e9t A-ban m\u00e9rj\u00fck; a kock\u00e1zati mutat\u00f3k ugyanazok, mint egy deviz\u00e1n\u00e1l. *\/\r\n  function portfolio(b, tetelek) {\r\n    var ossz = tetelek.reduce(function (s, x) { return s + x.suly; }, 0);\r\n    var db = tetelek.map(function (x) { return { k: x.k, suly: x.suly \/ ossz, egyseg: b.osszeg * x.suly \/ ossz \/ par(b.a, x.k, b.t0) }; });\r\n    var sor = [], komp = {};\r\n    db.forEach(function (x) { komp[x.k] = []; });\r\n    for (var i = b.t0; i <= b.t1; i++) {\r\n      var v = 0, hiany = false;\r\n      db.forEach(function (x) { var p = par(b.a, x.k, i); if (p === undefined) hiany = true; else { v += x.egyseg * p; komp[x.k].push({ i: i, arf: p }); } });\r\n      if (!hiany) sor.push({ i: i, arf: v \/ b.osszeg, ertek: v });\r\n    }\r\n    if (sor.length < 13) return null;\r\n    var e = { sor: sor, p0: sor[0].arf, p1: sor[sor.length - 1].arf };\r\n    var k = kockazat(b, e);\r\n    var legr = null;\r\n    sor.forEach(function (s, j) { if (j >= 12 && sor[j - 12].i === s.i - 12) { var v = (s.arf \/ sor[j - 12].arf - 1) * 100; if (!legr || v < legr.v) legr = { v: v, i: s.i }; } });\r\n    \/\/ az egyes \u00f6sszetev\u0151k saj\u00e1t mutat\u00f3i \u00e9s havi hozamai (a korrel\u00e1ci\u00f3hoz)\r\n    var hozamok = {}, egyenkent = db.map(function (x) {\r\n      var ks = komp[x.k], ee = { sor: ks, p0: ks[0].arf, p1: ks[ks.length - 1].arf };\r\n      var kk = kockazat(b, ee);\r\n      hozamok[x.k] = ks.map(function (s, j) { return j ? Math.log(s.arf \/ ks[j - 1].arf) : null; }).slice(1);\r\n      return { k: x.k, suly: x.suly, valt: (ee.p1 \/ ee.p0 - 1) * 100, ingadozas: kk.ingadozas, visszaeses: kk.visszaeses.v };\r\n    });\r\n    var kod = db.map(function (x) { return x.k; });\r\n    var korr = kod.map(function (a) {\r\n      return kod.map(function (c) {\r\n        if (a === c) return 1;\r\n        var x = hozamok[a], y = hozamok[c], n = Math.min(x.length, y.length);\r\n        if (n < 12 || a === b.a || c === b.a) return null;\r\n        var mx = 0, my = 0; for (var j = 0; j < n; j++) { mx += x[j]; my += y[j]; } mx \/= n; my \/= n;\r\n        var sxy = 0, sxx = 0, syy = 0; for (j = 0; j < n; j++) { sxy += (x[j] - mx) * (y[j] - my); sxx += (x[j] - mx) * (x[j] - mx); syy += (y[j] - my) * (y[j] - my); }\r\n        return sxx && syy ? sxy \/ Math.sqrt(sxx * syy) : null;\r\n      });\r\n    });\r\n    var honapok = sor[sor.length - 1].i - sor[0].i;\r\n    return {\r\n      sor: sor, valt: (e.p1 - 1) * 100, evi: honapok ? (Math.pow(e.p1, 12 \/ honapok) - 1) * 100 : 0,\r\n      ingadozas: k.ingadozas, visszaeses: k.visszaeses, legrosszabb12: legr, egyenkent: egyenkent, kodok: kod, korr: korr,\r\n      komp: komp, ertek: sor[sor.length - 1].ertek\r\n    };\r\n  }\r\n\r\n  \/* Id\u0151z\u00edt\u00e9s: a fent be\u00e1ll\u00edtott id\u0151szak minden napt\u00e1ri \u00e9v\u00e9ben melyik h\u00f3napban volt a legolcs\u00f3bb\r\n     \u00e9s a legdr\u00e1g\u00e1bb B (A-ban m\u00e9rve), \u00e9s mekkora a kett\u0151 k\u00f6z\u00f6tt a k\u00fcl\u00f6nbs\u00e9g.\r\n     szezon: a teljes (12 h\u00f3napos) \u00e9vekben az egyes napt\u00e1ri h\u00f3napok \u00e1tlagos elt\u00e9r\u00e9se az \u00e9ves \u00e1tlagt\u00f3l. *\/\r\n  function idozites(b) {\r\n    var evek = {}, sorrend = [];\r\n    for (var i = b.t0; i <= b.t1; i++) {\r\n      var p = par(b.a, b.b, i);\r\n      if (p === undefined) continue;\r\n      var ev = hEv(i);\r\n      if (!evek[ev]) { evek[ev] = []; sorrend.push(ev); }\r\n      evek[ev].push({ i: i, p: p });\r\n    }\r\n    var ki = [], szezon = [], legolcsobbDb = [];\r\n    for (var h = 0; h < 12; h++) { szezon.push({ ossz: 0, db: 0 }); legolcsobbDb.push(0); }\r\n    sorrend.forEach(function (ev) {\r\n      var t = evek[ev];\r\n      if (t.length < 2) return;\r\n      var min = t[0], max = t[0], ossz = 0;\r\n      t.forEach(function (x) { if (x.p < min.p) min = x; if (x.p > max.p) max = x; ossz += x.p; });\r\n      var atl = ossz \/ t.length;\r\n      var r = { ev: ev, min: min, max: max, atl: atl, db: t.length, teljes: t.length === 12,\r\n        kulonbseg: (max.p \/ min.p - 1) * 100,          \/\/ a legdr\u00e1g\u00e1bb a legolcs\u00f3bbhoz k\u00e9pest\r\n        nyeres: (atl \/ min.p - 1) * 100 };             \/\/ ennyivel t\u00f6bb deviz\u00e1t kapt\u00e1l a legjobb h\u00f3napban, mint \u00e1tlagosan\r\n      ki.push(r);\r\n      if (r.teljes) {\r\n        t.forEach(function (x) { var s = szezon[hHo(x.i)]; s.ossz += (x.p \/ atl - 1) * 100; s.db++; });\r\n        legolcsobbDb[hHo(min.i)]++;\r\n      }\r\n    });\r\n    if (!ki.length) return null;\r\n    var teljesek = ki.filter(function (r) { return r.teljes; }), alap = teljesek.length ? teljesek : ki;\r\n    var atlag = function (f) { return alap.reduce(function (s, r) { return s + r[f]; }, 0) \/ alap.length; };\r\n    \/\/ a kezd\u0151 h\u00f3nap helyez\u00e9se a saj\u00e1t napt\u00e1ri \u00e9v\u00e9ben (az \u00e9v \u00f6sszes el\u00e9rhet\u0151 h\u00f3napja k\u00f6z\u00fcl)\r\n    var sajat = [], ev0 = hEv(b.t0);\r\n    for (var j = ev0 * 12; j < ev0 * 12 + 12; j++) { var q = par(b.a, b.b, j); if (q !== undefined) sajat.push({ i: j, p: q }); }\r\n    sajat.sort(function (x, y) { return x.p - y.p; });\r\n    var hely = sajat.map(function (x) { return x.i; }).indexOf(b.t0) + 1;\r\n    return {\r\n      evek: ki, teljesDb: teljesek.length, atlagKulonbseg: atlag('kulonbseg'), atlagNyeres: atlag('nyeres'),\r\n      legnagyobb: ki.reduce(function (m, r) { return r.kulonbseg > m.kulonbseg ? r : m; }),\r\n      szezon: szezon.map(function (s, h) { return { h: h, v: s.db ? s.ossz \/ s.db : null, db: s.db, legolcsobb: legolcsobbDb[h] }; }),\r\n      hely: hely, helyDb: sajat.length, ev0: ev0\r\n    };\r\n  }\r\n\r\n  \/* Re\u00e1l\u00e1rfolyam (relat\u00edv v\u00e1s\u00e1rl\u00f3er\u0151-parit\u00e1s): ha az \u00e1rfolyam csak a k\u00e9t orsz\u00e1g infl\u00e1ci\u00f3j\u00e1nak\r\n     k\u00fcl\u00f6nbs\u00e9g\u00e9t k\u00f6vette volna, ma ennyi lenne: p(s0) \u00d7 (magyar \u00e1rszint-v\u00e1ltoz\u00e1s \/ k\u00fclf\u00f6ldi \u00e1rszint-v\u00e1ltoz\u00e1s).\r\n     re\u00e1l-index: a t\u00e9nyleges \u00e1rfolyam ehhez k\u00e9pest, s0 = 100. 100 alatt a forint re\u00e1lisan er\u0151s\u00f6d\u00f6tt. *\/\r\n  function realKezdet(kod) {\r\n    var evek = Object.keys(KULF_INFL[kod] || {}).map(Number);\r\n    return evek.length ? Math.min.apply(null, evek) * 12 : NaN;   \/\/ az els\u0151 adat\u00e9v janu\u00e1rja\r\n  }\r\n  function realarfolyam(b) {\r\n    if (b.a !== 'HUF' || !KULF_INFL[b.b]) return null;\r\n    var s0 = Math.max(b.t0, realKezdet(b.b));\r\n    if (!(b.t1 - s0 >= 12)) return { rovid: true, s0: s0 };\r\n    var H = arszintEvek(), F = arszintEvek(KULF_INFL[b.b]);\r\n    var p0 = par('HUF', b.b, s0), h0 = arszintHonap(H, s0), f0 = arszintHonap(F, s0), sor = [], ossz = 0;\r\n    for (var i = s0; i <= b.t1; i++) {\r\n      var p = par('HUF', b.b, i);\r\n      if (p === undefined) continue;\r\n      var hu = arszintHonap(H, i) \/ h0, kf = arszintHonap(F, i) \/ f0, ppp = p0 * hu \/ kf;\r\n      var x = { i: i, arf: p, ppp: ppp, index: p \/ ppp * 100, hu: hu, kf: kf };\r\n      sor.push(x); ossz += x.index;\r\n    }\r\n    var u = sor[sor.length - 1], atl = ossz \/ sor.length;\r\n    return {\r\n      s0: s0, sor: sor, p0: p0, p1: u.arf, ppp1: u.ppp, elteres: (u.arf \/ u.ppp - 1) * 100,\r\n      huInfl: (u.hu - 1) * 100, kfInfl: (u.kf - 1) * 100, atlIndex: atl, atlElteres: (u.index \/ atl - 1) * 100,\r\n      min: sor.reduce(function (m, x) { return x.index < m.index ? x : m; }), max: sor.reduce(function (m, x) { return x.index > m.index ? x : m; })\r\n    };\r\n  }\r\n\r\n  \/* Devizahitel: a t0. h\u00f3napban \"osszeg\" A-t veszel fel B-ben (a havi \u00e1tlag\u00e1rfolyamon \u00e1tsz\u00e1m\u00edtva),\r\n     annuit\u00e1sos t\u00f6rleszt\u00e9ssel, \"futamido\" \u00e9vre, \u00e9vi \"kamat\"% (n\u00e9vleges) B-kamattal.\r\n     A t\u00f6rleszt\u0151r\u00e9szlet B-ben \u00e1lland\u00f3, A-ban az aktu\u00e1lis havi \u00e1rfolyamon fizeted.\r\n     Forintos\u00edt\u00e1s (csak forint\/CHF, EUR, JPY): 2015 febru\u00e1rj\u00e1t\u00f3l a marad\u00e9k tartoz\u00e1s a r\u00f6gz\u00edtett\r\n     \u00e1rfolyamon forinthitell\u00e9 v\u00e1lik, \u00e9s a h\u00e1tral\u00e9v\u0151 futamid\u0151re \u00fajrasz\u00e1molt forintr\u00e9szlettel t\u00f6rlesztesz.\r\n     forintKamat: \u00f6sszevet\u00e9s egy ugyanakkor felvett, ugyanilyen futamidej\u0171 forinthitellel. *\/\r\n  function annuitas(L, r, n) { return n <= 0 ? 0 : r ? L * r \/ (1 - Math.pow(1 + r, -n)) : L \/ n; }\r\n  function tartozas(L, r, R, k) { return r ? L * Math.pow(1 + r, k) - R * (Math.pow(1 + r, k) - 1) \/ r : L - R * k; }\r\n  function devizahitel(b, h, utolso) {\r\n    var p0 = par(b.a, b.b, b.t0);\r\n    if (p0 === undefined) return null;\r\n    var n = h.futamido * 12, veg = Math.min(b.t0 + n, utolso);\r\n    var fH = hIdx(FORINTOSITAS.honap), fixArf = b.a === 'HUF' ? FORINTOSITAS.arf[b.b] : undefined;\r\n    var forintosithato = !!fixArf && b.t0 < fH && b.t0 + n > fH;\r\n    var ki = hitelMotor(b, h, {   \/\/ 1.17: k\u00f6z\u00f6s motor (fix vagy v\u00e1ltoz\u00f3 kamat)\r\n      L: b.osszeg \/ p0, p0: p0, n: n, i0: b.t0, fortos: !!(h.forintositas && forintosithato),\r\n      lepes: function (k) { var i = b.t0 + k, p = i <= veg ? par(b.a, b.b, i) : undefined; return p === undefined ? null : { i: i, p: p }; },\r\n      fortosK: function (k, lp) { return lp.i >= fH; }\r\n    });\r\n    ki.forintosithato = forintosithato;\r\n    return ki;\r\n  }\r\n\r\n  \/* ==========================================================\r\n     6. ST\u00cdLUS \u2013 a GYIK-blokk (.io-faq) \u00e9s a t\u00f6bbi kalkul\u00e1tor mint\u00e1j\u00e1ra\r\n     ========================================================== *\/\r\n  var CSS = `\r\n    :host { display: block; margin: 2.5em 0; }\r\n    * { box-sizing: border-box; }\r\n    [hidden] { display: none !important; }\r\n    .kartya { background: ${SZIN.bg}; padding: 2em 2em 1.5em; border-radius: 10px; color: ${SZIN.text}; line-height: 1.6; }\r\n    .cim { text-align: center; color: ${SZIN.navy}; margin: 0 0 .9em; font-size: 1.5em; line-height: 1.3; font-weight: 700; }\r\n    .adat-allapot { text-align: center; margin: -.5em auto 1.2em; font-size: .8em; line-height: 1.5; color: ${SZIN.text}; opacity: .75; }\r\n    .adat-allapot:empty { display: none; }\r\n    .adat-allapot.elo::before { content: '\u25cf'; color: ${SZIN.zold}; margin-right: .4em; }\r\n    .alcim { display: flex; align-items: center; gap: 1.1em; color: ${SZIN.accent}; margin: 0 0 1.4em; font-size: .95em; white-space: nowrap; }\r\n    .alcim::before, .alcim::after { content: \"\"; flex: 1; height: 1px; opacity: .45; }\r\n    .alcim::before { background: linear-gradient(to right, transparent, ${SZIN.accent}); }\r\n    .alcim::after  { background: linear-gradient(to left, transparent, ${SZIN.accent}); }\r\n\r\n    \/* N\u00e9zetv\u00e1lt\u00f3 (k\u00e9t\u00e1ll\u00e1s\u00fa kapcsol\u00f3) *\/\r\n    .irany { display: flex; margin: 0 auto 1.4em; max-width: 740px; background: #fff; border: 1px solid ${SZIN.line}; border-radius: 8px; padding: 4px; gap: 4px; }\r\n    .irany button { flex: 1; font: inherit; font-size: .88em; font-weight: 700; color: ${SZIN.navy}; background: transparent; border: 0; border-radius: 6px; padding: 9px 8px; cursor: pointer; transition: background .15s ease, color .15s ease; }\r\n    .irany button:hover { background: ${SZIN.hover}; }\r\n    .irany button[aria-pressed=\"true\"] { background: ${SZIN.navy}; color: #fff; }\r\n    .irany button:focus-visible { outline: 2px solid ${SZIN.accent}; outline-offset: 2px; }\r\n\r\n    \/* Beviteli mez\u0151k *\/\r\n    .mezok { display: grid; grid-template-columns: 1.2fr 1fr 1fr; gap: 14px; margin: 0 0 1em; }\r\n    .mezok.idok { grid-template-columns: 1fr 1fr; }\r\n    .mezo label, .mezo .felirat { display: block; font-size: .85em; font-weight: 700; color: ${SZIN.navy}; margin: 0 0 6px; line-height: 1.3; }\r\n    .mezo input, .mezo select {\r\n      width: 100%; padding: 10px 12px; font: inherit; font-size: 1em; color: ${SZIN.text};\r\n      background: #fff; border: 1px solid ${SZIN.line}; border-radius: 6px; appearance: none; -webkit-appearance: none;\r\n    }\r\n    .mezo select {\r\n      background-image: linear-gradient(45deg, transparent 50%, ${SZIN.navy} 50%), linear-gradient(135deg, ${SZIN.navy} 50%, transparent 50%);\r\n      background-position: calc(100% - 18px) 55%, calc(100% - 13px) 55%; background-size: 5px 5px; background-repeat: no-repeat; padding-right: 32px;\r\n    }\r\n    .mezo input:focus, .mezo select:focus { outline: none; border-color: ${SZIN.accent}; box-shadow: 0 0 0 3px ${SZIN.accentHalvany}; }\r\n    .mezo input.figy { border-color: ${SZIN.accent}; box-shadow: 0 0 0 3px ${SZIN.accentHalvany}; }\r\n    .mezo .sugo { display: block; font-size: .75em; color: ${SZIN.muted}; margin-top: 5px; line-height: 1.35; }\r\n    .utotag { position: relative; }\r\n    .utotag input { padding-right: 48px; }\r\n    .utotag span { position: absolute; right: 12px; top: 50%; transform: translateY(-50%); color: ${SZIN.muted}; font-size: .9em; pointer-events: none; }\r\n    \/* H\u00f3napv\u00e1laszt\u00f3: [\u2212] [\u00e9v] [h\u00f3nap] [+] *\/\r\n    .honap { display: grid; grid-template-columns: 34px 1fr 1.3fr 34px; }\r\n    .honap select { border-radius: 0; border-left: 0; text-align: center; text-align-last: center; padding-left: 6px; padding-right: 22px; background-position: calc(100% - 13px) 55%, calc(100% - 8px) 55%; }\r\n    .honap select + select { border-left: 1px solid ${SZIN.line}; }\r\n    .honap button { font: inherit; font-size: 1.1em; font-weight: 700; color: ${SZIN.navy}; background: ${SZIN.bg}; border: 1px solid ${SZIN.line}; cursor: pointer; padding: 0; line-height: 1; }\r\n    .honap button:first-child { border-radius: 6px 0 0 6px; }\r\n    .honap button:last-child { border-radius: 0 6px 6px 0; border-left: 0; }\r\n    .honap button:hover:not(:disabled) { background: ${SZIN.hover}; color: ${SZIN.accent}; }\r\n    .honap button:disabled { opacity: .35; cursor: default; }\r\n\r\n    \/* T\u00f6rt\u00e9nelmi pillanatok *\/\r\n    .pillanatok { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; margin: 0 0 1.2em; }\r\n    .pillanatok .felirat { font-size: .8em; color: ${SZIN.muted}; margin-right: 4px; }\r\n    .gomb {\r\n      flex: 0 0 auto; font: inherit; font-size: .8em; font-weight: 700; color: ${SZIN.navy};\r\n      background: #fff; border: 1px solid ${SZIN.line}; border-radius: 6px; padding: 6px 10px; cursor: pointer;\r\n    }\r\n    .gomb:hover { background: ${SZIN.hover}; border-color: ${SZIN.navy}; }\r\n    .gomb[aria-pressed=\"true\"] { background: ${SZIN.navy}; color: #fff; border-color: ${SZIN.navy}; }\r\n\r\n    .hiba { color: ${SZIN.piros}; font-size: .85em; margin: 0 0 1em; }\r\n    .hiba:empty { display: none; }\r\n    .info { color: ${SZIN.navy}; font-size: .85em; margin: -.4em 0 1em; padding: 8px 12px; background: #fff; border-left: 3px solid ${SZIN.accent}; border-radius: 4px; }\r\n    .info:empty { display: none; }\r\n\r\n    \/* Eredm\u00e9nyk\u00e1rty\u00e1k *\/\r\n    .eredmenyek { display: grid; grid-template-columns: 1.4fr 1fr 1fr 1.2fr; gap: 12px; margin: 0 0 1em; }\r\n    .eredmenyek.harom { grid-template-columns: 1.4fr 1fr 1fr; }\r\n    .stat { background: #fff; border: 1px solid ${SZIN.line}; border-radius: 8px; padding: 14px 16px; }\r\n    .stat.fo { border-top: 3px solid ${SZIN.accent}; }\r\n    .stat .nev { font-size: .8em; color: ${SZIN.muted}; margin: 0 0 4px; line-height: 1.35; }\r\n    .stat .ertek { font-size: 1.35em; font-weight: 700; color: ${SZIN.navy}; line-height: 1.2; word-break: break-word; white-space: nowrap; }\r\n    .stat.fo .ertek { font-size: 1.6em; }\r\n    .stat .ertek.hosszu { font-size: 1.05em; }\r\n    .stat.fo .ertek.hosszu { font-size: 1.2em; }\r\n    .stat .al { font-size: .75em; color: ${SZIN.muted}; margin-top: 4px; line-height: 1.35; }\r\n    .stat .ertek.poz { color: ${SZIN.zold}; }\r\n    .stat .ertek.neg { color: ${SZIN.piros}; }\r\n    .mondat { margin: 0 0 1.5em; line-height: 1.7; }\r\n    .mondat strong { color: ${SZIN.navy}; }\r\n    .mondat p { margin: 0 0 .7em; }\r\n    .mondat p:last-child { margin: 0; }\r\n\r\n    \/* Doboz (grafikon) *\/\r\n    .doboz { background: #fff; border: 1px solid ${SZIN.line}; border-radius: 8px; padding: 14px 12px 10px; margin: 0 0 1em; }\r\n    .doboz-fej { display: flex; justify-content: space-between; align-items: center; gap: 10px; margin: 0 4px 8px; }\r\n    .doboz-cim { font-weight: 700; color: ${SZIN.navy}; font-size: .95em; }\r\n    .vaszon { position: relative; width: 100%; height: 330px; }\r\n    .vaszon.alacsony { height: 230px; }\r\n    .grafikon-hiba { padding: 2em 1em; text-align: center; color: ${SZIN.muted}; font-size: .9em; }\r\n    .megjegyzes { font-size: .8em; color: ${SZIN.muted}; margin: 10px 4px 0; line-height: 1.5; }\r\n\r\n    \/* Statisztika-r\u00e1cs *\/\r\n    .statok { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin: 0 0 1em; }\r\n    .mini { background: #fff; border: 1px solid ${SZIN.line}; border-radius: 8px; padding: 10px 12px; }\r\n    .mini .nev { font-size: .75em; color: ${SZIN.muted}; margin: 0 0 2px; line-height: 1.3; }\r\n    .mini .ertek { font-weight: 700; color: ${SZIN.navy}; font-size: 1.02em; line-height: 1.3; }\r\n    .mini .al { font-size: .75em; color: ${SZIN.muted}; line-height: 1.3; }\r\n\r\n    .szekcio-cim { font-size: 1.1em; font-weight: 700; color: ${SZIN.navy}; margin: 1.6em 0 .4em; }\r\n    .szekcio-cim:first-child { margin-top: .4em; }\r\n    .szekcio-bev { font-size: .9em; margin: 0 0 1em; line-height: 1.6; }\r\n    .sor-mezok { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 12px; margin: 0 0 1em; }\r\n    .sor-mezok .mezo { width: 200px; }\r\n\r\n    \/* Megoszt\u00e1s *\/\r\n    .megosztas { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin: -0.6em 0 1.4em; }\r\n    .megosztas .allapot { font-size: .8em; color: ${SZIN.muted}; }\r\n    .megosztas .allapot.ok { color: #1b7a4b; font-weight: 700; }\r\n    .link-mezo { flex: 1 1 260px; font: inherit; font-size: .8em; padding: 6px 8px; border: 1px solid ${SZIN.line}; border-radius: 6px; color: ${SZIN.text}; background: #fff; }\r\n\r\n    \/* Lenyithat\u00f3 t\u00e1bl\u00e1k *\/\r\n    .tabla { margin: 1em 0 0; background: #fff; border: 1px solid ${SZIN.line}; border-radius: 8px; }\r\n    .tabla summary { list-style: none; cursor: pointer; padding: 14px 44px 14px 16px; position: relative; font-weight: 700; color: ${SZIN.navy}; font-size: .95em; transition: background .15s ease; border-radius: 8px; }\r\n    .tabla summary::-webkit-details-marker { display: none; }\r\n    .tabla summary:hover { background: ${SZIN.hover}; }\r\n    .tabla summary::after { content: \"\"; position: absolute; right: 18px; top: 50%; width: 8px; height: 8px; border-right: 2px solid ${SZIN.navy}; border-bottom: 2px solid ${SZIN.navy}; transform: translateY(-70%) rotate(45deg); transition: transform .25s ease; }\r\n    .tabla[open] summary { color: ${SZIN.accent}; }\r\n    .tabla[open] summary::after { border-color: ${SZIN.accent}; transform: translateY(-25%) rotate(-135deg); }\r\n    .tabla-belso { padding: 0 12px 12px; }\r\n    .gorgeto { max-height: 360px; overflow: auto; border: 1px solid ${SZIN.line}; border-radius: 6px; }\r\n    table { width: 100%; border-collapse: collapse; font-size: .85em; font-variant-numeric: tabular-nums; }\r\n    th, td { padding: 7px 10px; text-align: right; border-bottom: 1px solid ${SZIN.line}; white-space: nowrap; }\r\n    th:first-child, td:first-child { text-align: left; }\r\n    thead th { position: sticky; top: 0; background: ${SZIN.bg}; color: ${SZIN.navy}; font-weight: 700; }\r\n    tbody tr:hover { background: ${SZIN.hover}; }\r\n    .tabla-lab { display: flex; justify-content: space-between; align-items: center; gap: 10px; margin-top: 10px; font-size: .78em; color: ${SZIN.muted}; }\r\n    .verseny-mezok { display: grid; grid-template-columns: repeat(5, 1fr); gap: 10px; margin: 0 0 12px; }\r\n    .jelolo { display: inline-block; width: 10px; height: 10px; border-radius: 50%; margin-right: 6px; }\r\n    .tabla .bev { margin: 0 4px 12px; font-size: .9em; line-height: 1.6; }\r\n\r\n    .port-sorok { display: grid; grid-template-columns: repeat(5, 1fr); gap: 10px; margin: 0 0 8px; }\r\n    .port-tetel { display: grid; grid-template-columns: 1fr 78px; gap: 6px; }\r\n    .port-tetel .utotag input { padding-right: 26px; }\r\n    .port-tetel .utotag span { right: 8px; }\r\n    .port-ossz { font-size: .85em; margin: 0 0 1em; }\r\n    .port-ossz.rossz { color: ${SZIN.piros}; font-weight: 700; }\r\n    td.korr-poz { background: rgba(27, 58, 95, .12); }\r\n    td.korr-neg { background: rgba(226, 102, 44, .14); }\r\n    .disclaimer { margin: 2em 0 0; padding: 16px 18px; border-left: 3px solid ${SZIN.accent}; background: rgba(255, 255, 255, .55); border-radius: 6px; font-size: .85em; font-style: italic; line-height: 1.6; opacity: .9; }\r\n    .disclaimer strong { font-style: normal; color: ${SZIN.navy}; }\r\n    .disclaimer p { margin: 0 0 .6em; }\r\n    .disclaimer p:last-child { margin: 0; }\r\n\r\n    .kamat-mezok { margin: 0 0 1.2em; }\r\n    .kamat-mezok .mezo { width: 170px; }\r\n    .ado-pipa { flex: 0 0 auto; }\r\n    .kamat-sugo { flex: 1; min-width: 220px; font-size: .78em; color: ${SZIN.muted}; line-height: 1.45; }\r\n    .hitel-sugo { font-size: .78em; color: ${SZIN.muted}; line-height: 1.45; margin: -.4em 0 1.2em; }\r\n    .pipa { display: flex; align-items: center; gap: 8px; font-size: .88em; font-weight: 700; color: ${SZIN.navy}; cursor: pointer; padding-bottom: 10px; flex: 0 1 auto; }\r\n    .pipa input { width: 18px; height: 18px; accent-color: ${SZIN.navy}; margin: 0; flex: 0 0 auto; }\r\n    .pipa.tiltva { opacity: .5; cursor: default; }\r\n    tr.reszleges td:first-child { font-style: italic; }\r\n    #nezet-bef .megosztas, #nezet-hitel .megosztas { margin: 1.2em 0 1.4em; }\r\n\r\n    @media (max-width: 760px) {\r\n      .eredmenyek, .eredmenyek.harom { grid-template-columns: 1fr 1fr; }\r\n      .eredmenyek .stat.fo { grid-column: 1 \/ -1; }\r\n      .eredmenyek:not(.harom) .stat:nth-child(4) { grid-column: 1 \/ -1; }\r\n      .statok { grid-template-columns: 1fr 1fr; }\r\n      .verseny-mezok { grid-template-columns: 1fr 1fr; }\r\n      .port-sorok { grid-template-columns: 1fr 1fr; }\r\n    }\r\n    @media (max-width: 640px) {\r\n      .kartya { padding: 1.5em 1.1em 1em; }\r\n      .cim { font-size: 1.25em; }\r\n      .mezok, .mezok.idok { grid-template-columns: 1fr 1fr; }\r\n      .mezok .osszeg-mezo { grid-column: 1 \/ -1; }\r\n      .mezok.idok { grid-template-columns: 1fr; }\r\n      .vaszon { height: 270px; }\r\n      .doboz-fej { flex-wrap: wrap; }\r\n      .tabla-lab { flex-wrap: wrap; }\r\n      .sor-mezok .mezo, .kamat-mezok .mezo { width: 100%; }\r\n      .port-sorok { grid-template-columns: 1fr; }\r\n      .port-tetel { grid-template-columns: 1fr 110px; }\r\n    }\r\n    \/* \u00c1rfolyam-m\u00f3d kapcsol\u00f3 \u00e9s d\u00e1tummez\u0151k (1.8) *\/\r\n    .arf-mod { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; margin: 0 0 .8em; }\r\n    .arf-mod .felirat { font-size: .8em; color: ${SZIN.muted}; margin-right: 4px; }\r\n    .arf-mod .sugo { font-size: .75em; color: ${SZIN.muted}; margin-left: 4px; }\r\n    .mezo input.nap-mezo { width: 100%; }\r\n    .napi-megj { font-size: .8em; color: ${SZIN.muted}; margin: -.4em 0 1em; }\r\n    .napi-megj:empty { display: none; }\r\n\r\n    \/* Napi \u00e1rfolyam: poz\u00edci\u00f3t\u00e1bla (1.7) *\/\r\n    .poz-gorgeto { overflow-x: auto; border: 1px solid ${SZIN.line}; border-radius: 6px; background: #fff; margin: 0 0 10px; }\r\n    .poz-tabla th, .poz-tabla td { padding: 6px 4px; }\r\n    .poz-tabla th { line-height: 1.25; font-size: .95em; }\r\n    .poz-tabla td { vertical-align: middle; }\r\n    .poz-tabla td.arf { line-height: 1.3; white-space: normal; min-width: 108px; max-width: 132px; }\r\n    .poz-tabla td.arf small { display: block; color: ${SZIN.muted}; font-size: .85em; }\r\n    .poz-tabla td.arf small.figy { color: ${SZIN.accent}; }\r\n    .poz-tabla td.arf small.hiba-sz { color: ${SZIN.piros}; }\r\n    .poz-tabla input, .poz-tabla select { font: inherit; font-size: .95em; color: ${SZIN.text}; background: #fff; border: 1px solid ${SZIN.line}; border-radius: 5px; padding: 5px 7px; }\r\n    .poz-tabla select { padding-right: 6px; }\r\n    .poz-tabla input:focus, .poz-tabla select:focus { outline: none; border-color: ${SZIN.accent}; box-shadow: 0 0 0 2px ${SZIN.accentHalvany}; }\r\n    .poz-tabla input.nev { width: 92px; }\r\n    .poz-tabla .ket { display: grid; gap: 4px; }                       \/* k\u00e9t mez\u0151 egym\u00e1s alatt (1.14) *\/\r\n    .poz-tabla input.ar { width: 92px; text-align: right; }\r\n    .poz-tabla td.eredm { line-height: 1.3; white-space: normal; min-width: 118px; max-width: 150px; }\r\n    .poz-tabla td.eredm b { display: block; font-size: 1.05em; }\r\n    .poz-tabla td.eredm b.poz { color: ${SZIN.zold}; }\r\n    .poz-tabla td.eredm b.neg { color: ${SZIN.piros}; }\r\n    td.poz-sz { color: ${SZIN.zold}; } td.neg-sz { color: ${SZIN.piros}; }\r\n    tr.ossz td { border-top: 2px solid ${SZIN.line}; font-weight: 700; }\r\n    .poz-tabla td.eredm small { display: block; color: ${SZIN.muted}; font-size: .85em; white-space: nowrap; }\r\n    .poz-tabla input[type=\"date\"] { width: 132px; }\r\n    .poz-tabla tr.kivalasztott td { background: ${SZIN.hover}; }\r\n    .poz-tabla .ikon { font: inherit; font-size: .85em; border: 1px solid ${SZIN.line}; background: #fff; color: ${SZIN.navy}; border-radius: 5px; padding: 4px 7px; cursor: pointer; }\r\n    .poz-tabla .ikon:hover { border-color: ${SZIN.navy}; background: ${SZIN.hover}; }\r\n    .poz-tabla .ikon[aria-pressed=\"true\"] { background: ${SZIN.navy}; color: #fff; border-color: ${SZIN.navy}; }\r\n    .poz-tabla td.gombok { width: 1%; white-space: nowrap; }\r\n    @media (min-width: 761px) { .poz-tabla td.gombok .ikon { display: block; margin: 2px 0; } }\r\n    .poz-tabla .torol:hover { color: ${SZIN.piros}; border-color: ${SZIN.piros}; }\r\n    .poz-tabla td.valt.poz { color: ${SZIN.zold}; font-weight: 700; }\r\n    .poz-tabla td.valt.neg { color: ${SZIN.piros}; font-weight: 700; }\r\n    .poz-gombok { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 1em; }\r\n    .napi-allapot { font-size: .8em; color: ${SZIN.muted}; margin: 0 0 1em; }\r\n    \/* keskeny kijelz\u0151n a poz\u00edci\u00f3k k\u00e1rtyak\u00e9nt, a cell\u00e1k saj\u00e1t felirattal (data-c) *\/\r\n    @media (max-width: 760px) {\r\n      .poz-gorgeto { border: 0; background: transparent; overflow: visible; }\r\n      .poz-tabla thead { display: none; }\r\n      .poz-tabla, .poz-tabla tbody { display: block; }\r\n      .poz-tabla tr { display: grid; grid-template-columns: 1fr 1fr; gap: 8px 12px; background: #fff; border: 1px solid ${SZIN.line}; border-radius: 8px; padding: 10px 12px; margin: 0 0 10px; }\r\n      .poz-tabla tr.kivalasztott { border-color: ${SZIN.navy}; }\r\n      .poz-tabla tr.kivalasztott td { background: transparent; }\r\n      .poz-tabla td { display: block; border: 0; padding: 0; text-align: left; white-space: normal; max-width: none; min-width: 0; }\r\n      .poz-tabla td::before { content: attr(data-c); display: block; font-size: .72em; font-weight: 700; color: ${SZIN.navy}; margin-bottom: 3px; }\r\n      .poz-tabla td:last-child::before { content: none; }\r\n      .poz-tabla td:last-child { align-self: end; text-align: right; }\r\n      .poz-tabla input.nev, .poz-tabla input[type=\"date\"], .poz-tabla select, .poz-tabla input.ar { width: 100%; }\r\n    }\r\n\r\n    @media (max-width: 560px) { .irany { flex-wrap: wrap; } .irany button { flex: 1 1 45%; } }\r\n    @media (max-width: 420px) { .alcim { gap: .6em; font-size: .85em; } .irany button { font-size: .8em; } }\r\n  `;\r\n\r\n  \/* ==========================================================\r\n     7. HTML-V\u00c1Z\r\n     ========================================================== *\/\r\n  function devizaOpciok(kiv, csakDeviza) {\r\n    return DEVIZA_SOR.filter(function (k) { return !csakDeviza || k !== 'HUF'; }).map(function (k) {\r\n      var d = DEVIZAK[k];\r\n      \/\/ ISO-k\u00f3d a list\u00e1ban (HUF, nem Ft); az \u00f6sszegek ki\u00edr\u00e1sa tov\u00e1bbra is d.jel-lel megy\r\n      return '<option value=\"' + k + '\"' + (k === kiv ? ' selected' : '') + '>' + k + ' \u2013 ' + d.nev + '<\/option>';\r\n    }).join('');\r\n  }\r\n  function honapOpciok() { return HONAPOK.map(function (h, i) { return '<option value=\"' + i + '\">' + h + '<\/option>'; }).join(''); }\r\n\r\n  function vaz() {\r\n    return `\r\n    <div class=\"kartya\">\r\n      <h2 class=\"cim\">Devizakalkul\u00e1tor<\/h2>\r\n      <p id=\"adat-allapot\" class=\"adat-allapot\"><\/p>\r\n      <p class=\"alcim\">Mennyit \u00e9rt volna deviz\u00e1ban a p\u00e9nzed?<\/p>\r\n\r\n      <div class=\"irany\" role=\"group\" aria-label=\"N\u00e9zet\">\r\n        <button type=\"button\" data-nezet=\"alap\" aria-pressed=\"true\">Megtakar\u00edt\u00e1s deviz\u00e1ban<\/button>\r\n        <button type=\"button\" data-nezet=\"bef\" aria-pressed=\"false\">Befektet\u0151i n\u00e9zet<\/button>\r\n        <button type=\"button\" data-nezet=\"napi\" aria-pressed=\"false\">Napi \u00e1rfolyam<\/button>\r\n        <button type=\"button\" data-nezet=\"hitel\" aria-pressed=\"false\">Devizahitel<\/button>\r\n      <\/div>\r\n\r\n      <!-- a havi n\u00e9zetek k\u00f6z\u00f6s mez\u0151i (a napi n\u00e9zetben rejtve) -->\r\n      <div id=\"kozos\">\r\n      <div class=\"mezok\">\r\n        <div class=\"mezo osszeg-mezo\">\r\n          <label for=\"osszeg\" id=\"osszeg-cimke\">\u00d6sszeg<\/label>\r\n          <div class=\"utotag\"><input id=\"osszeg\" type=\"text\" inputmode=\"numeric\" autocomplete=\"off\" value=\"100 000\"><span id=\"osszeg-jel\">Ft<\/span><\/div>\r\n        <\/div>\r\n        <div class=\"mezo\">\r\n          <label for=\"a\" id=\"a-cimke\">Mib\u0151l?<\/label>\r\n          <select id=\"a\">${devizaOpciok('HUF')}<\/select>\r\n        <\/div>\r\n        <div class=\"mezo\">\r\n          <label for=\"b\" id=\"b-cimke\">Melyik deviz\u00e1ba?<\/label>\r\n          <select id=\"b\">${devizaOpciok('USD')}<\/select>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"arf-mod\" id=\"arf-mod-sor\" role=\"group\" aria-label=\"\u00c1rfolyam\">\r\n        <span class=\"felirat\">\u00c1rfolyam:<\/span>\r\n        <button type=\"button\" class=\"gomb\" data-arfmod=\"napi\" aria-pressed=\"true\" title=\"Az adott nap hivatalos MNB-\u00e1rfolyama\">Napi \u00e1rfolyam (adott nap)<\/button>\r\n        <button type=\"button\" class=\"gomb\" data-arfmod=\"havi\" aria-pressed=\"false\" title=\"Havi \u00e1tlag\u00e1rfolyam, h\u00f3napra pontosan\">Havi \u00e1tlag<\/button>\r\n        <span class=\"sugo\" id=\"arf-mod-sugo\"><\/span>\r\n      <\/div>\r\n      <p class=\"napi-megj\" id=\"alap-napi-megj\" aria-live=\"polite\"><\/p>\r\n      <div class=\"mezok idok\">\r\n        <div class=\"mezo\" id=\"t0-mezo\">\r\n          <span class=\"felirat\" id=\"t0-cimke\">Mikor v\u00e1ltottad \u00e1t?<\/span>\r\n          <div class=\"honap\" role=\"group\" aria-labelledby=\"t0-cimke\">\r\n            <button type=\"button\" data-lep=\"t0\" data-irany=\"-1\" aria-label=\"Egy h\u00f3nappal kor\u00e1bban\">\u2212<\/button>\r\n            <select id=\"t0-ev\" aria-label=\"Kezd\u0151 \u00e9v\"><\/select><select id=\"t0-ho\" aria-label=\"Kezd\u0151 h\u00f3nap\">${honapOpciok()}<\/select>\r\n            <button type=\"button\" data-lep=\"t0\" data-irany=\"1\" aria-label=\"Egy h\u00f3nappal k\u00e9s\u0151bb\">+<\/button>\r\n          <\/div>\r\n          <input type=\"date\" id=\"t0-nap\" class=\"nap-mezo\" min=\"1990-01-01\" aria-labelledby=\"t0-cimke\" hidden>\r\n        <\/div>\r\n        <div class=\"mezo\" id=\"t1-mezo\">\r\n          <span class=\"felirat\" id=\"t1-cimke\">Mikor v\u00e1ltan\u00e1d vissza?<\/span>\r\n          <div class=\"honap\" role=\"group\" aria-labelledby=\"t1-cimke\">\r\n            <button type=\"button\" data-lep=\"t1\" data-irany=\"-1\" aria-label=\"Egy h\u00f3nappal kor\u00e1bban\">\u2212<\/button>\r\n            <select id=\"t1-ev\" aria-label=\"Z\u00e1r\u00f3 \u00e9v\"><\/select><select id=\"t1-ho\" aria-label=\"Z\u00e1r\u00f3 h\u00f3nap\">${honapOpciok()}<\/select>\r\n            <button type=\"button\" data-lep=\"t1\" data-irany=\"1\" aria-label=\"Egy h\u00f3nappal k\u00e9s\u0151bb\">+<\/button>\r\n          <\/div>\r\n          <input type=\"date\" id=\"t1-nap\" class=\"nap-mezo\" min=\"1990-01-01\" aria-labelledby=\"t1-cimke\" hidden>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"pillanatok\">\r\n        <span class=\"felirat\">T\u00f6rt\u00e9nelmi pillanatok:<\/span>\r\n        <button type=\"button\" class=\"gomb\" data-pillanat=\"max\" title=\"A legkor\u00e1bbi h\u00f3nap, amelyre a v\u00e1lasztott deviz\u00e1kra adat van (forint eset\u00e9n 1990. janu\u00e1r)\">Rendszerv\u00e1lt\u00e1s<\/button>\r\n        ${PILLANATOK.map(function (p, i) { return '<button type=\"button\" class=\"gomb\" data-pillanat=\"' + i + '\" title=\"' + p.leiras + '\">' + p.cim + '<\/button>'; }).join('')}\r\n      <\/div>\r\n\r\n      <p class=\"hiba\" aria-live=\"polite\"><\/p>\r\n      <p class=\"info\" aria-live=\"polite\"><\/p>\r\n      <\/div>\r\n\r\n      <!-- ===== ALAPN\u00c9ZET ===== -->\r\n      <section id=\"nezet-alap\">\r\n        <div class=\"sor-mezok kamat-mezok\">\r\n          <div class=\"mezo\">\r\n            <label for=\"kb\" id=\"kb-cimke\">Kamat deviz\u00e1ban<\/label>\r\n            <div class=\"utotag\"><input id=\"kb\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" value=\"0\"><span>%\/\u00e9v<\/span><\/div>\r\n          <\/div>\r\n          <div class=\"mezo\">\r\n            <label for=\"ka\" id=\"ka-cimke\">Kamat forintban<\/label>\r\n            <div class=\"utotag\"><input id=\"ka\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" value=\"0\"><span>%\/\u00e9v<\/span><\/div>\r\n          <\/div>\r\n          <label class=\"pipa ado-pipa\"><input type=\"checkbox\" id=\"ado\"> Kamatad\u00f3val (28%)<\/label>\r\n          <span class=\"sugo kamat-sugo\">Nem k\u00f6telez\u0151. \u00c1tlagos \u00e9ves brutt\u00f3 bet\u00e9ti kamat az eg\u00e9sz id\u0151szakra; 0 = k\u00e9szp\u00e9nz. A forintkamat az \u00f6sszevet\u00e9shez kell. Kamatad\u00f3: 15% SZJA + 13% szocho, a mai m\u00e9rt\u00e9kkel.<\/span>\r\n        <\/div>\r\n        <div class=\"eredmenyek\" id=\"ered-alap\" aria-live=\"polite\">\r\n          <div class=\"stat fo\"><p class=\"nev\" data-nev=\"1\"><\/p><div class=\"ertek\" data-ertek=\"1\">\u2013<\/div><div class=\"al\" data-al=\"1\"><\/div><\/div>\r\n          <div class=\"stat\"><p class=\"nev\" data-nev=\"2\"><\/p><div class=\"ertek\" data-ertek=\"2\">\u2013<\/div><div class=\"al\" data-al=\"2\"><\/div><\/div>\r\n          <div class=\"stat\"><p class=\"nev\" data-nev=\"3\"><\/p><div class=\"ertek\" data-ertek=\"3\">\u2013<\/div><div class=\"al\" data-al=\"3\"><\/div><\/div>\r\n          <div class=\"stat\" id=\"stat-real\"><p class=\"nev\" data-nev=\"4\"><\/p><div class=\"ertek\" data-ertek=\"4\">\u2013<\/div><div class=\"al\" data-al=\"4\"><\/div><\/div>\r\n        <\/div>\r\n        <div class=\"mondat\" id=\"mondat-alap\" aria-live=\"polite\"><\/div>\r\n\r\n        <div class=\"megosztas\">\r\n          <button class=\"gomb\" data-link type=\"button\">\ud83d\udd17 Eredm\u00e9ny megoszt\u00e1sa (link m\u00e1sol\u00e1sa)<\/button>\r\n          <span class=\"allapot\" aria-live=\"polite\"><\/span>\r\n          <input class=\"link-mezo\" type=\"text\" readonly hidden aria-label=\"Megoszthat\u00f3 link\">\r\n        <\/div>\r\n\r\n        <div class=\"doboz\">\r\n          <div class=\"doboz-fej\">\r\n            <span class=\"doboz-cim\" id=\"cim-alap\"><\/span>\r\n            <button class=\"gomb\" data-png=\"alap\" type=\"button\" title=\"A grafikon ment\u00e9se k\u00e9pk\u00e9nt\">\u2913 Let\u00f6lt\u00e9s PNG-k\u00e9nt<\/button>\r\n          <\/div>\r\n          <div class=\"vaszon\"><canvas id=\"v-alap\" role=\"img\"><\/canvas><\/div>\r\n          <p class=\"megjegyzes\" id=\"megj-alap\"><\/p>\r\n        <\/div>\r\n\r\n        <div class=\"statok\" id=\"statok\"><\/div>\r\n\r\n        <details class=\"tabla\" id=\"rendszeres\" open>\r\n          <summary>Rendszeres v\u00e1s\u00e1rl\u00e1s: havonta egy kicsit<\/summary>\r\n          <div class=\"tabla-belso\">\r\n            <p class=\"bev\">Mi lett volna, ha nem egyszerre v\u00e1ltasz, hanem a fent be\u00e1ll\u00edtott id\u0151szakban <strong>minden h\u00f3napban<\/strong> ugyanannyit? A havi v\u00e1s\u00e1rl\u00e1s kisim\u00edtja az \u00e1rfolyam ingadoz\u00e1s\u00e1t: dr\u00e1g\u00e1n kevesebbet, olcs\u00f3n t\u00f6bbet veszel ugyanannyi p\u00e9nz\u00e9rt.<\/p>\r\n            <div class=\"sor-mezok\">\r\n              <div class=\"mezo\">\r\n                <label for=\"havi\">Havi \u00f6sszeg<\/label>\r\n                <div class=\"utotag\"><input id=\"havi\" type=\"text\" inputmode=\"numeric\" autocomplete=\"off\" value=\"10 000\"><span id=\"havi-jel\">Ft<\/span><\/div>\r\n              <\/div>\r\n            <\/div>\r\n            <div class=\"eredmenyek\" id=\"ered-dca\">\r\n              <div class=\"stat fo\"><p class=\"nev\" data-nev=\"d1\"><\/p><div class=\"ertek\" data-ertek=\"d1\">\u2013<\/div><div class=\"al\" data-al=\"d1\"><\/div><\/div>\r\n              <div class=\"stat\"><p class=\"nev\" data-nev=\"d2\"><\/p><div class=\"ertek\" data-ertek=\"d2\">\u2013<\/div><div class=\"al\" data-al=\"d2\"><\/div><\/div>\r\n              <div class=\"stat\"><p class=\"nev\" data-nev=\"d3\"><\/p><div class=\"ertek\" data-ertek=\"d3\">\u2013<\/div><div class=\"al\" data-al=\"d3\"><\/div><\/div>\r\n              <div class=\"stat\"><p class=\"nev\" data-nev=\"d4\"><\/p><div class=\"ertek\" data-ertek=\"d4\">\u2013<\/div><div class=\"al\" data-al=\"d4\"><\/div><\/div>\r\n            <\/div>\r\n            <div class=\"mondat\" id=\"mondat-dca\"><\/div>\r\n            <div class=\"doboz\">\r\n              <div class=\"doboz-fej\">\r\n                <span class=\"doboz-cim\" id=\"cim-dca\"><\/span>\r\n                <button class=\"gomb\" data-png=\"dca\" type=\"button\" title=\"A grafikon ment\u00e9se k\u00e9pk\u00e9nt\">\u2913 Let\u00f6lt\u00e9s PNG-k\u00e9nt<\/button>\r\n              <\/div>\r\n              <div class=\"vaszon\"><canvas id=\"v-dca\" role=\"img\"><\/canvas><\/div>\r\n              <p class=\"megjegyzes\" id=\"megj-dca\"><\/p>\r\n            <\/div>\r\n          <\/div>\r\n        <\/details>\r\n\r\n        <details class=\"tabla\" id=\"idozites\">\r\n          <summary>Id\u0151z\u00edt\u00e9s: mennyit sz\u00e1m\u00edtott, melyik h\u00f3napban v\u00e1ltasz?<\/summary>\r\n          <div class=\"tabla-belso\">\r\n            <p class=\"bev\" id=\"idoz-bev\"><\/p>\r\n            <div class=\"eredmenyek\" id=\"ered-idoz\">\r\n              <div class=\"stat fo\"><p class=\"nev\" data-nev=\"i1\"><\/p><div class=\"ertek\" data-ertek=\"i1\">\u2013<\/div><div class=\"al\" data-al=\"i1\"><\/div><\/div>\r\n              <div class=\"stat\"><p class=\"nev\" data-nev=\"i2\"><\/p><div class=\"ertek\" data-ertek=\"i2\">\u2013<\/div><div class=\"al\" data-al=\"i2\"><\/div><\/div>\r\n              <div class=\"stat\"><p class=\"nev\" data-nev=\"i3\"><\/p><div class=\"ertek\" data-ertek=\"i3\">\u2013<\/div><div class=\"al\" data-al=\"i3\"><\/div><\/div>\r\n              <div class=\"stat\"><p class=\"nev\" data-nev=\"i4\"><\/p><div class=\"ertek\" data-ertek=\"i4\">\u2013<\/div><div class=\"al\" data-al=\"i4\"><\/div><\/div>\r\n            <\/div>\r\n            <div class=\"mondat\" id=\"mondat-idoz\"><\/div>\r\n            <div class=\"doboz\">\r\n              <div class=\"doboz-fej\">\r\n                <span class=\"doboz-cim\" id=\"cim-idoz\"><\/span>\r\n                <button class=\"gomb\" data-png=\"idoz\" type=\"button\" title=\"A grafikon ment\u00e9se k\u00e9pk\u00e9nt\">\u2913 Let\u00f6lt\u00e9s PNG-k\u00e9nt<\/button>\r\n              <\/div>\r\n              <div class=\"vaszon alacsony\"><canvas id=\"v-idoz\" role=\"img\"><\/canvas><\/div>\r\n              <p class=\"megjegyzes\" id=\"megj-idoz\"><\/p>\r\n            <\/div>\r\n            <div class=\"gorgeto\">\r\n              <table>\r\n                <thead><tr><th>\u00c9v<\/th><th>Legkedvez\u0151bb h\u00f3nap<\/th><th>Legdr\u00e1g\u00e1bb h\u00f3nap<\/th><th>K\u00fcl\u00f6nbs\u00e9g<\/th><th>A legjobb h\u00f3nap az \u00e1tlaghoz k\u00e9pest<\/th><\/tr><\/thead>\r\n                <tbody id=\"tbody-idoz\"><\/tbody>\r\n              <\/table>\r\n            <\/div>\r\n            <div class=\"tabla-lab\"><span>Havi \u00e1tlag\u00e1rfolyamok; a legjobb napot eltal\u00e1lva a k\u00fcl\u00f6nbs\u00e9g enn\u00e9l is nagyobb lehetett. A d\u0151lt \u00e9vek nem teljesek (nem mind a 12 h\u00f3napjuk esik az id\u0151szakba).<\/span><\/div>\r\n          <\/div>\r\n        <\/details>\r\n\r\n        <details class=\"tabla\">\r\n          <summary>\u00c9venk\u00e9nti bont\u00e1s t\u00e1bl\u00e1zatban<\/summary>\r\n          <div class=\"tabla-belso\">\r\n            <div class=\"gorgeto\">\r\n              <table>\r\n                <thead><tr><th>\u00c9v<\/th><th id=\"th-arf\">\u00c1tlag\u00e1rfolyam<\/th><th id=\"th-ertek\">Az \u00f6sszeg \u00e9rt\u00e9ke<\/th><th>V\u00e1ltoz\u00e1s a kezd\u00e9shez k\u00e9pest<\/th><th>\u00c9ves v\u00e1ltoz\u00e1s<\/th><\/tr><\/thead>\r\n                <tbody id=\"tbody-ev\"><\/tbody>\r\n              <\/table>\r\n            <\/div>\r\n            <div class=\"tabla-lab\">\r\n              <span id=\"ev-lab\">\u00c1tlag\u00e1rfolyam: a v\u00e1lasztott id\u0151szakba es\u0151 h\u00f3napok havi \u00e1tlagainak \u00e1tlaga. \u00c9rt\u00e9k: az \u00e9v utols\u00f3 v\u00e1lasztott h\u00f3napj\u00e1ban. * R\u00e9szleges h\u00f3nap.<\/span>\r\n              <button class=\"gomb\" id=\"csv\" type=\"button\">\u2913 Let\u00f6lt\u00e9s CSV-k\u00e9nt (Excel)<\/button>\r\n            <\/div>\r\n          <\/div>\r\n        <\/details>\r\n\r\n        <details class=\"tabla\" id=\"verseny\" open>\r\n          <summary>Deviz\u00e1k versenye<\/summary>\r\n          <div class=\"tabla-belso\">\r\n            <p class=\"bev\">V\u00e1lassz legfeljebb \u00f6t deviz\u00e1t. A grafikon a fent be\u00e1ll\u00edtott id\u0151szakban mutatja, hogyan v\u00e1ltozott az \u00e1ruk <span class=\"alap-nev\">forintban<\/span>, a kezd\u0151 h\u00f3napot 100-nak v\u00e9ve. A 200 azt jelenti, hogy a deviza \u00e1ra a dupl\u00e1j\u00e1ra n\u0151tt.<\/p>\r\n            <div class=\"verseny-mezok\">\r\n              ${[0, 1, 2, 3, 4].map(function (i) {\r\n                return '<div class=\"mezo\"><label for=\"vs-' + i + '\"><span class=\"jelolo\" style=\"background:' + VERSENY_SZINEK[i] + '\"><\/span>' + (i + 1) + '. deviza<\/label><select id=\"vs-' + i + '\" data-vs><option value=\"\">\u2014 nincs \u2014<\/option>' + DEVIZA_SOR.filter(function (k) { return k !== 'HUF'; }).map(function (k) { return '<option value=\"' + k + '\"' + (k === VERSENY_ALAP[i] ? ' selected' : '') + ' title=\"' + DEVIZAK[k].nev + '\">' + k + '<\/option>'; }).join('') + '<\/select><\/div>';\r\n              }).join('')}\r\n            <\/div>\r\n            <p class=\"mondat\" id=\"mondat-verseny\"><\/p>\r\n            <div class=\"doboz\">\r\n              <div class=\"doboz-fej\">\r\n                <span class=\"doboz-cim\" id=\"cim-verseny\"><\/span>\r\n                <button class=\"gomb\" data-png=\"verseny\" type=\"button\" title=\"A grafikon ment\u00e9se k\u00e9pk\u00e9nt\">\u2913 Let\u00f6lt\u00e9s PNG-k\u00e9nt<\/button>\r\n              <\/div>\r\n              <div class=\"vaszon\"><canvas id=\"v-verseny\" role=\"img\"><\/canvas><\/div>\r\n              <p class=\"megjegyzes\" id=\"megj-verseny\"><\/p>\r\n            <\/div>\r\n            <div class=\"gorgeto\">\r\n              <table>\r\n                <thead><tr><th>Deviza<\/th><th>Kezd\u0151 \u00e1rfolyam<\/th><th>Z\u00e1r\u00f3 \u00e1rfolyam<\/th><th>Teljes v\u00e1ltoz\u00e1s<\/th><th>\u00c9vi \u00e1tlag<\/th><th>Legnagyobb visszaes\u00e9s<\/th><\/tr><\/thead>\r\n                <tbody id=\"tbody-verseny\"><\/tbody>\r\n              <\/table>\r\n            <\/div>\r\n          <\/div>\r\n        <\/details>\r\n      <\/section>\r\n\r\n      <!-- ===== BEFEKTET\u0150I N\u00c9ZET ===== -->\r\n      <section id=\"nezet-bef\" hidden>\r\n        <p class=\"szekcio-bev\">A befektet\u0151i n\u00e9zet a fent be\u00e1ll\u00edtott devizap\u00e1rt \u00e9s id\u0151szakot n\u00e9zi kock\u00e1zati szemmel: mennyit ingadozott az \u00e1rfolyam, mekkor\u00e1t lehetett vele esni, mekkora es\u00e9llyel j\u00e1rt\u00e1l volna j\u00f3l, \u00e9s mennyit tett hozz\u00e1 vagy vett el a deviza\u00e1rfolyam egy k\u00fclf\u00f6ldi befektet\u00e9s hozam\u00e1b\u00f3l.<\/p>\r\n\r\n        <h3 class=\"szekcio-cim\">1. Mekkora a devizakock\u00e1zat?<\/h3>\r\n        <div class=\"eredmenyek\" id=\"ered-kock\">\r\n          <div class=\"stat fo\"><p class=\"nev\" data-nev=\"k1\"><\/p><div class=\"ertek\" data-ertek=\"k1\">\u2013<\/div><div class=\"al\" data-al=\"k1\"><\/div><\/div>\r\n          <div class=\"stat\"><p class=\"nev\" data-nev=\"k2\"><\/p><div class=\"ertek\" data-ertek=\"k2\">\u2013<\/div><div class=\"al\" data-al=\"k2\"><\/div><\/div>\r\n          <div class=\"stat\"><p class=\"nev\" data-nev=\"k3\"><\/p><div class=\"ertek\" data-ertek=\"k3\">\u2013<\/div><div class=\"al\" data-al=\"k3\"><\/div><\/div>\r\n          <div class=\"stat\"><p class=\"nev\" data-nev=\"k4\"><\/p><div class=\"ertek\" data-ertek=\"k4\">\u2013<\/div><div class=\"al\" data-al=\"k4\"><\/div><\/div>\r\n        <\/div>\r\n        <div class=\"mondat\" id=\"mondat-kock\"><\/div>\r\n        <div class=\"doboz\">\r\n          <div class=\"doboz-fej\">\r\n            <span class=\"doboz-cim\" id=\"cim-kock\"><\/span>\r\n            <button class=\"gomb\" data-png=\"kock\" type=\"button\" title=\"A grafikon ment\u00e9se k\u00e9pk\u00e9nt\">\u2913 Let\u00f6lt\u00e9s PNG-k\u00e9nt<\/button>\r\n          <\/div>\r\n          <div class=\"vaszon alacsony\"><canvas id=\"v-kock\" role=\"img\"><\/canvas><\/div>\r\n          <p class=\"megjegyzes\">A g\u00f6rbe azt mutatja, h\u00e1ny sz\u00e1zal\u00e9kkal volt az \u00e1rfolyam az addigi cs\u00facsa alatt. A 0 azt jelenti, hogy \u00e9pp \u00faj cs\u00facson volt.<\/p>\r\n        <\/div>\r\n\r\n        <h3 class=\"szekcio-cim\">2. Mekkora es\u00e9llyel j\u00e1rt\u00e1l volna j\u00f3l?<\/h3>\r\n        <p class=\"szekcio-bev\" id=\"gord-bev\"><\/p>\r\n        <div class=\"sor-mezok\">\r\n          <div class=\"mezo\">\r\n            <label for=\"tartas\">Tart\u00e1si id\u0151<\/label>\r\n            <select id=\"tartas\">${TARTASOK.map(function (e) { return '<option value=\"' + e + '\"' + (e === 5 ? ' selected' : '') + '>' + (e ? e + ' \u00e9v' : 'a teljes id\u0151szak') + '<\/option>'; }).join('')}<\/select>\r\n          <\/div>\r\n        <\/div>\r\n        <div class=\"eredmenyek\" id=\"ered-gord\">\r\n          <div class=\"stat fo\"><p class=\"nev\" data-nev=\"g1\"><\/p><div class=\"ertek\" data-ertek=\"g1\">\u2013<\/div><div class=\"al\" data-al=\"g1\"><\/div><\/div>\r\n          <div class=\"stat\"><p class=\"nev\" data-nev=\"g2\"><\/p><div class=\"ertek\" data-ertek=\"g2\">\u2013<\/div><div class=\"al\" data-al=\"g2\"><\/div><\/div>\r\n          <div class=\"stat\"><p class=\"nev\" data-nev=\"g3\"><\/p><div class=\"ertek\" data-ertek=\"g3\">\u2013<\/div><div class=\"al\" data-al=\"g3\"><\/div><\/div>\r\n          <div class=\"stat\"><p class=\"nev\" data-nev=\"g4\"><\/p><div class=\"ertek\" data-ertek=\"g4\">\u2013<\/div><div class=\"al\" data-al=\"g4\"><\/div><\/div>\r\n        <\/div>\r\n        <div class=\"mondat\" id=\"mondat-gord\"><\/div>\r\n        <div class=\"doboz\">\r\n          <div class=\"doboz-fej\">\r\n            <span class=\"doboz-cim\" id=\"cim-gord\"><\/span>\r\n            <button class=\"gomb\" data-png=\"gord\" type=\"button\" title=\"A grafikon ment\u00e9se k\u00e9pk\u00e9nt\">\u2913 Let\u00f6lt\u00e9s PNG-k\u00e9nt<\/button>\r\n          <\/div>\r\n          <div class=\"vaszon alacsony\"><canvas id=\"v-gord\" role=\"img\"><\/canvas><\/div>\r\n          <p class=\"megjegyzes\" id=\"megj-gord\">H\u00e1ny kezd\u0151 h\u00f3napban v\u00e9gz\u0151d\u00f6tt a tart\u00e1s az adott hozams\u00e1vban. Narancs: vesztes\u00e9g, k\u00e9k: nyeres\u00e9g.<\/p>\r\n        <\/div>\r\n\r\n        <h3 class=\"szekcio-cim\">3. Mennyit tett hozz\u00e1 a deviza a k\u00fclf\u00f6ldi befektet\u00e9sedhez?<\/h3>\r\n        <p class=\"szekcio-bev\" id=\"fx-bev\"><\/p>\r\n        <div class=\"sor-mezok\">\r\n          <div class=\"mezo\">\r\n            <label for=\"hozam\" id=\"hozam-cimke\">A befektet\u00e9s \u00e9vi hozama deviz\u00e1ban<\/label>\r\n            <div class=\"utotag\"><input id=\"hozam\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" value=\"10\"><span>%<\/span><\/div>\r\n          <\/div>\r\n          <span class=\"sugo\" style=\"flex:1;min-width:220px;font-size:.8em;color:${SZIN.muted};line-height:1.45\">P\u00e9ld\u00e1ul egy amerikai r\u00e9szv\u00e9nyindex hossz\u00fa t\u00e1v\u00fa \u00e1tlaga \u00e9vi 8\u201310% doll\u00e1rban. Ide azt \u00edrd, amit a befektet\u00e9sed a saj\u00e1t deviz\u00e1j\u00e1ban hozott (osztal\u00e9kkal egy\u00fctt).<\/span>\r\n        <\/div>\r\n        <div class=\"eredmenyek\" id=\"ered-fx\">\r\n          <div class=\"stat fo\"><p class=\"nev\" data-nev=\"f1\"><\/p><div class=\"ertek\" data-ertek=\"f1\">\u2013<\/div><div class=\"al\" data-al=\"f1\"><\/div><\/div>\r\n          <div class=\"stat\"><p class=\"nev\" data-nev=\"f2\"><\/p><div class=\"ertek\" data-ertek=\"f2\">\u2013<\/div><div class=\"al\" data-al=\"f2\"><\/div><\/div>\r\n          <div class=\"stat\"><p class=\"nev\" data-nev=\"f3\"><\/p><div class=\"ertek\" data-ertek=\"f3\">\u2013<\/div><div class=\"al\" data-al=\"f3\"><\/div><\/div>\r\n          <div class=\"stat\"><p class=\"nev\" data-nev=\"f4\"><\/p><div class=\"ertek\" data-ertek=\"f4\">\u2013<\/div><div class=\"al\" data-al=\"f4\"><\/div><\/div>\r\n        <\/div>\r\n        <div class=\"mondat\" id=\"mondat-fx\"><\/div>\r\n        <div class=\"doboz\">\r\n          <div class=\"doboz-fej\">\r\n            <span class=\"doboz-cim\" id=\"cim-fx\"><\/span>\r\n            <button class=\"gomb\" data-png=\"fx\" type=\"button\" title=\"A grafikon ment\u00e9se k\u00e9pk\u00e9nt\">\u2913 Let\u00f6lt\u00e9s PNG-k\u00e9nt<\/button>\r\n          <\/div>\r\n          <div class=\"vaszon\"><canvas id=\"v-fx\" role=\"img\"><\/canvas><\/div>\r\n          <p class=\"megjegyzes\">Fedezett: mintha a devizakock\u00e1zatot teljesen kisz\u0171rted volna (a fedez\u00e9s k\u00f6lts\u00e9ge, a k\u00e9t deviza kamatk\u00fcl\u00f6nb\u00f6zete n\u00e9lk\u00fcl). Fedezetlen: a befektet\u00e9s hozama \u00e9s az \u00e1rfolyamv\u00e1ltoz\u00e1s egy\u00fctt.<\/p>\r\n        <\/div>\r\n\r\n        <h3 class=\"szekcio-cim\">4. Mennyi a devizakock\u00e1zata a vagyonodnak? (devizamix)<\/h3>\r\n        <p class=\"szekcio-bev\" id=\"port-bev\">Add meg, hogyan oszlik meg a p\u00e9nzed deviz\u00e1k k\u00f6z\u00f6tt. A kalkul\u00e1tor a fent be\u00e1ll\u00edtott \u00f6sszeget a kezd\u0151 h\u00f3napban a s\u00falyok szerint sz\u00e9tosztja, majd tartja (nem s\u00falyoz \u00fajra), \u00e9s megmutatja, mennyit ingadozott a mix \u00e9rt\u00e9ke, \u00e9s mennyit cs\u00f6kkentett a kock\u00e1zaton a t\u00f6bbf\u00e9le deviza.<\/p>\r\n        <div class=\"port-sorok\">\r\n          ${[['USD', 50], ['EUR', 20], ['HUF', 30], ['', 0], ['', 0]].map(function (t, i) {\r\n            return '<div class=\"mezo\"><label for=\"pk-' + i + '\"><span class=\"jelolo\" style=\"background:' + VERSENY_SZINEK[i] + '\"><\/span>' + (i + 1) + '. t\u00e9tel<\/label><div class=\"port-tetel\"><select id=\"pk-' + i + '\" data-pk><option value=\"\">\u2014 nincs \u2014<\/option>' +\r\n              DEVIZA_SOR.map(function (k) { return '<option value=\"' + k + '\"' + (k === t[0] ? ' selected' : '') + ' title=\"' + DEVIZAK[k].nev + '\">' + k + '<\/option>'; }).join('') +\r\n              '<\/select><div class=\"utotag\"><input id=\"ps-' + i + '\" data-ps type=\"text\" inputmode=\"numeric\" autocomplete=\"off\" value=\"' + (t[1] || '') + '\" aria-label=\"' + (i + 1) + '. t\u00e9tel ar\u00e1nya\"><span>%<\/span><\/div><\/div><\/div>';\r\n          }).join('')}\r\n        <\/div>\r\n        <p class=\"port-ossz\" id=\"port-ossz\"><\/p>\r\n        <div class=\"eredmenyek\" id=\"ered-port\">\r\n          <div class=\"stat fo\"><p class=\"nev\" data-nev=\"p1\"><\/p><div class=\"ertek\" data-ertek=\"p1\">\u2013<\/div><div class=\"al\" data-al=\"p1\"><\/div><\/div>\r\n          <div class=\"stat\"><p class=\"nev\" data-nev=\"p2\"><\/p><div class=\"ertek\" data-ertek=\"p2\">\u2013<\/div><div class=\"al\" data-al=\"p2\"><\/div><\/div>\r\n          <div class=\"stat\"><p class=\"nev\" data-nev=\"p3\"><\/p><div class=\"ertek\" data-ertek=\"p3\">\u2013<\/div><div class=\"al\" data-al=\"p3\"><\/div><\/div>\r\n          <div class=\"stat\"><p class=\"nev\" data-nev=\"p4\"><\/p><div class=\"ertek\" data-ertek=\"p4\">\u2013<\/div><div class=\"al\" data-al=\"p4\"><\/div><\/div>\r\n        <\/div>\r\n        <div class=\"mondat\" id=\"mondat-port\"><\/div>\r\n        <div class=\"doboz\">\r\n          <div class=\"doboz-fej\">\r\n            <span class=\"doboz-cim\" id=\"cim-port\"><\/span>\r\n            <button class=\"gomb\" data-png=\"port\" type=\"button\" title=\"A grafikon ment\u00e9se k\u00e9pk\u00e9nt\">\u2913 Let\u00f6lt\u00e9s PNG-k\u00e9nt<\/button>\r\n          <\/div>\r\n          <div class=\"vaszon\"><canvas id=\"v-port\" role=\"img\"><\/canvas><\/div>\r\n          <p class=\"megjegyzes\" id=\"megj-port\"><\/p>\r\n        <\/div>\r\n        <div class=\"gorgeto\" style=\"margin-bottom:1em\">\r\n          <table>\r\n            <thead><tr><th>T\u00e9tel<\/th><th>Ar\u00e1ny<\/th><th>V\u00e1ltoz\u00e1s<\/th><th>Ingadoz\u00e1s<\/th><th>Legnagyobb visszaes\u00e9s<\/th><\/tr><\/thead>\r\n            <tbody id=\"tbody-port\"><\/tbody>\r\n          <\/table>\r\n        <\/div>\r\n        <div class=\"gorgeto\" id=\"korr-doboz\">\r\n          <table>\r\n            <thead id=\"thead-korr\"><\/thead>\r\n            <tbody id=\"tbody-korr\"><\/tbody>\r\n          <\/table>\r\n        <\/div>\r\n        <p class=\"megjegyzes\">Egy\u00fcttmozg\u00e1s (korrel\u00e1ci\u00f3): a havi \u00e1rfolyamv\u00e1ltoz\u00e1sok \u00f6sszef\u00fcgg\u00e9se \u22121 \u00e9s +1 k\u00f6z\u00f6tt. +1 k\u00f6zel\u00e9ben a k\u00e9t deviza egy\u00fctt mozog ${'(nem cs\u00f6kkenti a kock\u00e1zatot)'}, 0 k\u00f6r\u00fcl f\u00fcggetlenek, negat\u00edv \u00e9rt\u00e9kn\u00e9l ellent\u00e9tesen mozognak, ilyenkor az egyik ellens\u00falyozza a m\u00e1sikat.<\/p>\r\n\r\n        <h3 class=\"szekcio-cim\">5. Dr\u00e1ga vagy olcs\u00f3 most a deviza? (re\u00e1l\u00e1rfolyam)<\/h3>\r\n        <p class=\"szekcio-bev\" id=\"real-bev\"><\/p>\r\n        <div id=\"real-blokk\">\r\n          <div class=\"eredmenyek\" id=\"ered-real\">\r\n            <div class=\"stat fo\"><p class=\"nev\" data-nev=\"r1\"><\/p><div class=\"ertek\" data-ertek=\"r1\">\u2013<\/div><div class=\"al\" data-al=\"r1\"><\/div><\/div>\r\n            <div class=\"stat\"><p class=\"nev\" data-nev=\"r2\"><\/p><div class=\"ertek\" data-ertek=\"r2\">\u2013<\/div><div class=\"al\" data-al=\"r2\"><\/div><\/div>\r\n            <div class=\"stat\"><p class=\"nev\" data-nev=\"r3\"><\/p><div class=\"ertek\" data-ertek=\"r3\">\u2013<\/div><div class=\"al\" data-al=\"r3\"><\/div><\/div>\r\n            <div class=\"stat\"><p class=\"nev\" data-nev=\"r4\"><\/p><div class=\"ertek\" data-ertek=\"r4\">\u2013<\/div><div class=\"al\" data-al=\"r4\"><\/div><\/div>\r\n          <\/div>\r\n          <div class=\"mondat\" id=\"mondat-real\"><\/div>\r\n          <div class=\"doboz\">\r\n            <div class=\"doboz-fej\">\r\n              <span class=\"doboz-cim\" id=\"cim-real\"><\/span>\r\n              <button class=\"gomb\" data-png=\"real\" type=\"button\" title=\"A grafikon ment\u00e9se k\u00e9pk\u00e9nt\">\u2913 Let\u00f6lt\u00e9s PNG-k\u00e9nt<\/button>\r\n            <\/div>\r\n            <div class=\"vaszon\"><canvas id=\"v-real\" role=\"img\"><\/canvas><\/div>\r\n            <p class=\"megjegyzes\" id=\"megj-real\"><\/p>\r\n          <\/div>\r\n        <\/div>\r\n        <div class=\"megosztas\">\r\n          <button class=\"gomb\" data-link type=\"button\">\ud83d\udd17 Eredm\u00e9ny megoszt\u00e1sa (link m\u00e1sol\u00e1sa)<\/button>\r\n          <span class=\"allapot\" aria-live=\"polite\"><\/span>\r\n          <input class=\"link-mezo\" type=\"text\" readonly hidden aria-label=\"Megoszthat\u00f3 link\">\r\n        <\/div>\r\n      <\/section>\r\n\r\n      <!-- ===== DEVIZAHITEL ===== -->\r\n      <section id=\"nezet-hitel\" hidden>\r\n        <p class=\"szekcio-bev\" id=\"hitel-bev\">Mi t\u00f6rt\u00e9nt volna egy devizahitellel? A fenti \u00f6sszeget a kezd\u0151 h\u00f3napban hitelk\u00e9nt veszed fel a v\u00e1lasztott deviz\u00e1ban, \u00e9s havonta, egyenl\u0151 r\u00e9szletekben (annuit\u00e1ssal) t\u00f6rleszted. A r\u00e9szlet deviz\u00e1ban \u00e1lland\u00f3, de forintban mindig az aktu\u00e1lis \u00e1rfolyamon fizeted, ez\u00e9rt az \u00e1rfolyam v\u00e1ltoz\u00e1sa k\u00f6zvetlen\u00fcl a t\u00f6rleszt\u0151r\u00e9szletben \u00e9s a tartoz\u00e1sban jelenik meg.<\/p>\r\n        <div class=\"pillanatok\">\r\n          <span class=\"felirat\">P\u00e9lda:<\/span>\r\n          <button type=\"button\" class=\"gomb\" id=\"hitel-pelda\" title=\"10 milli\u00f3 forint sv\u00e1jcifrank-alap\u00fa hitel 2007 janu\u00e1rj\u00e1ban, 20 \u00e9vre, \u00e9vi 4,5%-os kezd\u0151, v\u00e1ltoz\u00f3 kamattal, forintos\u00edt\u00e1ssal, \u00f6sszevetve egy 10%-os forinthitellel\">Tipikus sv\u00e1jcifrank-hitel (2007)<\/button>\r\n          <button type=\"button\" class=\"gomb\" id=\"hitel-pelda2\" title=\"10 milli\u00f3 forint eur\u00f3s hitel 2008 j\u00falius\u00e1ban, 20 \u00e9vre, \u00e9vi 6%-os kezd\u0151, v\u00e1ltoz\u00f3 (EURIBOR) kamattal, \u00f6sszevetve egy 10%-os v\u00e1ltoz\u00f3 kamat\u00fa forinthitellel\">Eur\u00f3hitel a cs\u00facson (2008)<\/button>\r\n        <\/div>\r\n        <div class=\"sor-mezok\">\r\n          <div class=\"mezo\">\r\n            <label for=\"hkt\">Kamatoz\u00e1s<\/label>\r\n            <select id=\"hkt\"><option value=\"fix\">Fix<\/option><option value=\"valt\">V\u00e1ltoz\u00f3 (referenciakamat + fel\u00e1r)<\/option><\/select>\r\n          <\/div>\r\n          <div class=\"mezo\">\r\n            <label for=\"hf\">Futamid\u0151<\/label>\r\n            <div class=\"utotag\"><input id=\"hf\" type=\"text\" inputmode=\"numeric\" autocomplete=\"off\" value=\"20\"><span>\u00e9v<\/span><\/div>\r\n          <\/div>\r\n          <div class=\"mezo\">\r\n            <label for=\"hk\" id=\"hk-cimke\">Kamat deviz\u00e1ban<\/label>\r\n            <div class=\"utotag\"><input id=\"hk\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" value=\"4,5\"><span>%\/\u00e9v<\/span><\/div>\r\n          <\/div>\r\n          <div class=\"mezo\">\r\n            <label for=\"hfk\">Forinthitel kamata<\/label>\r\n            <div class=\"utotag\"><input id=\"hfk\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" value=\"\" placeholder=\"nincs\"><span>%\/\u00e9v<\/span><\/div>\r\n          <\/div>\r\n        <\/div>\r\n        <div class=\"sor-mezok\" id=\"kamatstop-sor\" hidden>\r\n          <label class=\"pipa\"><input type=\"checkbox\" id=\"hks\" checked> Kamatstop 2022 janu\u00e1rj\u00e1t\u00f3l (a 2021. okt\u00f3ber 27. el\u0151tt k\u00f6t\u00f6tt forinthitelekn\u00e9l a 3 havi BUBOR legfeljebb 2,02%)<\/label>\r\n        <\/div>\r\n        <p class=\"sugo hitel-sugo\" id=\"hkt-sugo\"><\/p>\r\n        <div class=\"sor-mezok\" id=\"fortos-sor\">\r\n          <label class=\"pipa\"><input type=\"checkbox\" id=\"hz\" checked> Forintos\u00edt\u00e1s 2015 febru\u00e1rj\u00e1ban, a t\u00f6rv\u00e9ny szerinti r\u00f6gz\u00edtett \u00e1rfolyamon<\/label>\r\n          <div class=\"mezo\">\r\n            <label for=\"hu\">Kamat a forintos\u00edt\u00e1s ut\u00e1n<\/label>\r\n            <div class=\"utotag\"><input id=\"hu\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" value=\"\" placeholder=\"mint el\u0151tte\"><span>%\/\u00e9v<\/span><\/div>\r\n          <\/div>\r\n        <\/div>\r\n        <p class=\"sugo hitel-sugo\">A szerz\u0151d\u00e9s szerinti kamatot add meg (nem a THM-et). Fix kamatoz\u00e1sn\u00e1l ez az eg\u00e9sz futamid\u0151re \u00e9rv\u00e9nyes; v\u00e1ltoz\u00f3n\u00e1l ez a kezd\u0151 kamat, \u00e9s a fel\u00e1r (a kezd\u0151 kamat \u00e9s az akkori referenciakamat k\u00fcl\u00f6nbs\u00e9ge) r\u00f6gz\u00fcl. A futamid\u0151 1\u201340 \u00e9v, a kamat 0\u201330% lehet. A \u201eForinthitel kamata\u201d mez\u0151ben egy ugyanakkor felvett forinthitellel vetheted \u00f6ssze; \u00fcresen hagyva nincs \u00f6sszevet\u00e9s.<\/p>\r\n        <p class=\"hiba\" id=\"hitel-hiba\" aria-live=\"polite\"><\/p>\r\n        <div class=\"eredmenyek\" id=\"ered-hitel\">\r\n          <div class=\"stat fo\"><p class=\"nev\" data-nev=\"h1\"><\/p><div class=\"ertek\" data-ertek=\"h1\">\u2013<\/div><div class=\"al\" data-al=\"h1\"><\/div><\/div>\r\n          <div class=\"stat\"><p class=\"nev\" data-nev=\"h2\"><\/p><div class=\"ertek\" data-ertek=\"h2\">\u2013<\/div><div class=\"al\" data-al=\"h2\"><\/div><\/div>\r\n          <div class=\"stat\"><p class=\"nev\" data-nev=\"h3\"><\/p><div class=\"ertek\" data-ertek=\"h3\">\u2013<\/div><div class=\"al\" data-al=\"h3\"><\/div><\/div>\r\n          <div class=\"stat\"><p class=\"nev\" data-nev=\"h4\"><\/p><div class=\"ertek\" data-ertek=\"h4\">\u2013<\/div><div class=\"al\" data-al=\"h4\"><\/div><\/div>\r\n        <\/div>\r\n        <div class=\"mondat\" id=\"mondat-hitel\"><\/div>\r\n        <div class=\"megosztas\">\r\n          <button class=\"gomb\" data-link type=\"button\">\ud83d\udd17 Eredm\u00e9ny megoszt\u00e1sa (link m\u00e1sol\u00e1sa)<\/button>\r\n          <span class=\"allapot\" aria-live=\"polite\"><\/span>\r\n          <input class=\"link-mezo\" type=\"text\" readonly hidden aria-label=\"Megoszthat\u00f3 link\">\r\n        <\/div>\r\n        <div class=\"doboz\">\r\n          <div class=\"doboz-fej\">\r\n            <span class=\"doboz-cim\" id=\"cim-hr\"><\/span>\r\n            <button class=\"gomb\" data-png=\"hr\" type=\"button\" title=\"A grafikon ment\u00e9se k\u00e9pk\u00e9nt\">\u2913 Let\u00f6lt\u00e9s PNG-k\u00e9nt<\/button>\r\n          <\/div>\r\n          <div class=\"vaszon\"><canvas id=\"v-hr\" role=\"img\"><\/canvas><\/div>\r\n          <p class=\"megjegyzes\" id=\"megj-hr\"><\/p>\r\n        <\/div>\r\n        <div class=\"doboz\">\r\n          <div class=\"doboz-fej\">\r\n            <span class=\"doboz-cim\" id=\"cim-ht\"><\/span>\r\n            <button class=\"gomb\" data-png=\"ht\" type=\"button\" title=\"A grafikon ment\u00e9se k\u00e9pk\u00e9nt\">\u2913 Let\u00f6lt\u00e9s PNG-k\u00e9nt<\/button>\r\n          <\/div>\r\n          <div class=\"vaszon alacsony\"><canvas id=\"v-ht\" role=\"img\"><\/canvas><\/div>\r\n          <p class=\"megjegyzes\" id=\"megj-ht\"><\/p>\r\n        <\/div>\r\n        <div class=\"doboz\">\r\n          <div class=\"doboz-fej\">\r\n            <span class=\"doboz-cim\" id=\"cim-hi\"><\/span>\r\n            <button class=\"gomb\" data-png=\"hi\" type=\"button\" title=\"A grafikon ment\u00e9se k\u00e9pk\u00e9nt\">\u2913 Let\u00f6lt\u00e9s PNG-k\u00e9nt<\/button>\r\n          <\/div>\r\n          <div class=\"vaszon alacsony\"><canvas id=\"v-hi\" role=\"img\"><\/canvas><\/div>\r\n          <p class=\"megjegyzes\" id=\"megj-hi\"><\/p>\r\n        <\/div>\r\n        <div class=\"statok\" id=\"statok-hitel\"><\/div>\r\n      <\/section>\r\n\r\n      <!-- ===== NAPI \u00c1RFOLYAM (1.7) ===== -->\r\n      <section id=\"nezet-napi\" hidden>\r\n        <p class=\"szekcio-bev\">R\u00e9szv\u00e9ny- vagy egy\u00e9b deviz\u00e1s poz\u00edci\u00f3idhoz: add meg, melyik deviz\u00e1ban vetted, mikor vetted \u00e9s mikor adtad el, \u00e9s a kalkul\u00e1tor kikeresi <strong>a k\u00e9t nap hivatalos MNB-\u00e1rfolyam\u00e1t<\/strong>. Ha a darabsz\u00e1mot, a v\u00e9tel\u00e1rat \u00e9s az elad\u00e1si \u00e1rat is be\u00edrod deviz\u00e1ban (a br\u00f3kered kimutat\u00e1sa szerint), kisz\u00e1molja <strong>az eredm\u00e9nyt forintban<\/strong>, \u00e9s azt is, mennyi j\u00f6tt bel\u0151le a r\u00e9szv\u00e9nyb\u0151l \u00e9s mennyi a deviz\u00e1b\u00f3l. \u00dcres darabsz\u00e1mn\u00e1l az \u00e1r a teljes \u00f6sszeg (\u00edgy a d\u00edjakkal egy\u00fctti beker\u00fcl\u00e9si \u00e9rt\u00e9k is megadhat\u00f3); nyitott poz\u00edci\u00f3n\u00e1l az elad\u00e1si \u00e1r hely\u00e9re a mai \u00e1rat \u00edrd. Ha aznap nem volt jegyz\u00e9s (h\u00e9tv\u00e9ge, \u00fcnnepnap), az azt megel\u0151z\u0151 utols\u00f3 jegyz\u00e9si nap \u00e1rfolyama szerepel, a d\u00e1tum\u00e1val egy\u00fctt. \u00dcresen hagyott elad\u00e1si nap: a poz\u00edci\u00f3 m\u00e9g nyitott, a legut\u00f3bbi \u00e1rfolyammal sz\u00e1molok. A poz\u00edci\u00f3k ebben a b\u00f6ng\u00e9sz\u0151ben megmaradnak.<\/p>\r\n        <div class=\"poz-gorgeto\">\r\n          <table class=\"poz-tabla\">\r\n            <thead><tr><th>Megnevez\u00e9s<br>darab<\/th><th>Deviza<\/th><th>V\u00e9tel napja<br>v\u00e9tel\u00e1r \/ db<\/th><th>MNB-\u00e1rfolyam<br>v\u00e9telkor<\/th><th>Elad\u00e1s napja<br>elad\u00e1si \u00e1r \/ db<\/th><th>MNB-\u00e1rfolyam<br>elad\u00e1skor<\/th><th>Eredm\u00e9ny<\/th><th><\/th><\/tr><\/thead>\r\n            <tbody id=\"tbody-poz\"><\/tbody>\r\n          <\/table>\r\n        <\/div>\r\n        <div class=\"poz-gombok\">\r\n          <button class=\"gomb\" type=\"button\" id=\"poz-uj\">+ \u00daj poz\u00edci\u00f3<\/button>\r\n          <button class=\"gomb\" type=\"button\" id=\"poz-csv\">\u2913 Let\u00f6lt\u00e9s CSV-k\u00e9nt (Excel)<\/button>\r\n          <button class=\"gomb\" type=\"button\" id=\"poz-urit\">\u00d6sszes t\u00f6rl\u00e9se<\/button>\r\n        <\/div>\r\n        <p class=\"napi-allapot\" id=\"napi-allapot\" aria-live=\"polite\"><\/p>\r\n        <div class=\"eredmenyek\" id=\"ered-napi\" hidden>\r\n          <div class=\"stat fo\"><p class=\"nev\" data-nev=\"n1\"><\/p><div class=\"ertek\" data-ertek=\"n1\">\u2013<\/div><div class=\"al\" data-al=\"n1\"><\/div><\/div>\r\n          <div class=\"stat\"><p class=\"nev\" data-nev=\"n2\"><\/p><div class=\"ertek\" data-ertek=\"n2\">\u2013<\/div><div class=\"al\" data-al=\"n2\"><\/div><\/div>\r\n          <div class=\"stat\"><p class=\"nev\" data-nev=\"n3\"><\/p><div class=\"ertek\" data-ertek=\"n3\">\u2013<\/div><div class=\"al\" data-al=\"n3\"><\/div><\/div>\r\n          <div class=\"stat\"><p class=\"nev\" data-nev=\"n4\"><\/p><div class=\"ertek\" data-ertek=\"n4\">\u2013<\/div><div class=\"al\" data-al=\"n4\"><\/div><\/div>\r\n        <\/div>\r\n        <div class=\"mondat\" id=\"mondat-napi\" aria-live=\"polite\"><\/div>\r\n        <div class=\"doboz\" id=\"doboz-napi-poz\" hidden>\r\n          <div class=\"doboz-fej\">\r\n            <span class=\"doboz-cim\" id=\"cim-napi-poz\">Poz\u00edci\u00f3nk\u00e9nt: eredm\u00e9ny forintban, r\u00e9szv\u00e9ny \u00e9s deviza<\/span>\r\n            <button class=\"gomb\" data-png=\"napiPoz\" type=\"button\" title=\"A grafikon ment\u00e9se k\u00e9pk\u00e9nt\">\u2913 Let\u00f6lt\u00e9s PNG-k\u00e9nt<\/button>\r\n          <\/div>\r\n          <div class=\"vaszon\" id=\"vaszon-napi-poz\"><canvas id=\"v-napiPoz\" role=\"img\"><\/canvas><\/div>\r\n          <p class=\"megjegyzes\">K\u00e9k: a r\u00e9szv\u00e9ny \u00e1rfolyamv\u00e1ltoz\u00e1sa (deviz\u00e1ban, a v\u00e9teli \u00e1rfolyamon forintra sz\u00e1molva). Narancs: a deviza\u00e1rfolyam v\u00e1ltoz\u00e1s\u00e1nak hat\u00e1sa. Jobbra nyeres\u00e9g, balra vesztes\u00e9g; a k\u00e9t s\u00e1v \u00f6sszege a poz\u00edci\u00f3 forintos eredm\u00e9nye (a n\u00e9v mellett).<\/p>\r\n        <\/div>\r\n        <div class=\"doboz\" id=\"doboz-napi-ev\" hidden>\r\n          <div class=\"doboz-fej\"><span class=\"doboz-cim\">\u00c9v szerinti bont\u00e1s (az elad\u00e1s \u00e9ve)<\/span><\/div>\r\n          <div class=\"gorgeto\">\r\n            <table>\r\n              <thead><tr><th>\u00c9v<\/th><th>Poz\u00edci\u00f3k<\/th><th>V\u00e9teli \u00e9rt\u00e9k<\/th><th>Elad\u00e1si \u00e9rt\u00e9k<\/th><th>Eredm\u00e9ny<\/th><th>Ebb\u0151l r\u00e9szv\u00e9ny<\/th><th>Ebb\u0151l deviza<\/th><\/tr><\/thead>\r\n              <tbody id=\"tbody-napi-ev\"><\/tbody>\r\n            <\/table>\r\n          <\/div>\r\n          <p class=\"megjegyzes\">A lez\u00e1rt \u00fcgyletek az elad\u00e1s \u00e9ve szerint; a nyitott poz\u00edci\u00f3k a megadott mai \u00e1ron \u00e9s a legut\u00f3bbi MNB-\u00e1rfolyamon, k\u00fcl\u00f6n sorban. D\u00edjak \u00e9s ad\u00f3 n\u00e9lk\u00fcl, hacsak nem a d\u00edjakkal n\u00f6velt \u00f6sszeget adtad meg.<\/p>\r\n        <\/div>\r\n        <div class=\"doboz\" id=\"doboz-napi-er\" hidden>\r\n          <div class=\"doboz-fej\">\r\n            <span class=\"doboz-cim\" id=\"cim-napi-er\"><\/span>\r\n            <button class=\"gomb\" data-png=\"napiEr\" type=\"button\" title=\"A grafikon ment\u00e9se k\u00e9pk\u00e9nt\">\u2913 Let\u00f6lt\u00e9s PNG-k\u00e9nt<\/button>\r\n          <\/div>\r\n          <div class=\"vaszon alacsony\"><canvas id=\"v-napiEr\" role=\"img\"><\/canvas><\/div>\r\n          <p class=\"megjegyzes\" id=\"megj-napi-er\"><\/p>\r\n        <\/div>\r\n        <div class=\"doboz\" id=\"doboz-napi\">\r\n          <div class=\"doboz-fej\">\r\n            <span class=\"doboz-cim\" id=\"cim-napi\"><\/span>\r\n            <button class=\"gomb\" data-png=\"napi\" type=\"button\" title=\"A grafikon ment\u00e9se k\u00e9pk\u00e9nt\">\u2913 Let\u00f6lt\u00e9s PNG-k\u00e9nt<\/button>\r\n          <\/div>\r\n          <div class=\"vaszon\"><canvas id=\"v-napi\" role=\"img\"><\/canvas><\/div>\r\n          <p class=\"megjegyzes\" id=\"megj-napi\"><\/p>\r\n        <\/div>\r\n        <div class=\"megosztas\">\r\n          <button class=\"gomb\" data-link type=\"button\">\ud83d\udd17 Poz\u00edci\u00f3k megoszt\u00e1sa (link m\u00e1sol\u00e1sa)<\/button>\r\n          <span class=\"allapot\" aria-live=\"polite\"><\/span>\r\n          <input class=\"link-mezo\" type=\"text\" readonly hidden aria-label=\"Megoszthat\u00f3 link\">\r\n        <\/div>\r\n      <\/section>\r\n\r\n      <div class=\"disclaimer\">\r\n        <p id=\"adatforras\"><\/p>\r\n        <p><strong>Fontos:<\/strong> a kalkul\u00e1tor alapb\u00f3l kamat n\u00e9lk\u00fcli k\u00e9szp\u00e9nztart\u00e1ssal sz\u00e1mol; a kamatmez\u0151kben \u00e1tlagos \u00e9ves kamatot adhatsz meg, amelyet az eg\u00e9sz id\u0151szakra \u00e1lland\u00f3nak vesz (d\u00edjak n\u00e9lk\u00fcl; a kamatad\u00f3 bekapcsolhat\u00f3, a mai 28%-os m\u00e9rt\u00e9kkel). A forintbet\u00e9t kamata az \u00e9vtizedek alatt jellemz\u0151en magasabb volt a devizabet\u00e9t\u00e9n\u00e9l, ami r\u00e9szben ellens\u00falyozta a forint gyeng\u00fcl\u00e9s\u00e9t. A sz\u00e1m\u00edt\u00e1s havi \u00e1tlag\u00e1rfolyamokkal dolgozik, a bankok v\u00e9teli \u00e9s elad\u00e1si \u00e1rfolyama enn\u00e9l kedvez\u0151tlenebb, \u00e9s a v\u00e1lt\u00e1snak k\u00f6lts\u00e9ge is van. A devizahitel-sz\u00e1m\u00edt\u00e1s egyszer\u0171s\u00edtett modell: nem tartalmazza a bankok egyoldal\u00fa kamat- \u00e9s d\u00edjemel\u00e9seit, az \u00e1rfolyamr\u00e9st, a 2015-\u00f6s elsz\u00e1mol\u00e1st (visszat\u00e9r\u00edt\u00e9st), a 2011-es v\u00e9gt\u00f6rleszt\u00e9st \u00e9s az \u00e1rfolyamg\u00e1tat, ez\u00e9rt a val\u00f3di t\u00f6rleszt\u00e9s ett\u0151l elt\u00e9rhetett. A re\u00e1l\u00e1rfolyam a k\u00e9t orsz\u00e1g \u00e9ves infl\u00e1ci\u00f3j\u00e1b\u00f3l becs\u00fclt, t\u00e1j\u00e9koztat\u00f3 mutat\u00f3, nem \u00e1rfolyam-el\u0151rejelz\u00e9s. A m\u00faltbeli \u00e1rfolyammozg\u00e1s nem garancia a j\u00f6v\u0151re. A \u201eNapi \u00e1rfolyam\u201d f\u00fcl az MNB hivatalos napi \u00e1rfolyam\u00e1t mutatja; hogy egy \u00fcgyletn\u00e9l ad\u00f3z\u00e1s szempontj\u00e1b\u00f3l melyik nap (p\u00e9ld\u00e1ul a k\u00f6t\u00e9s vagy a teljes\u00edt\u00e9s napja) \u00e9s melyik \u00e1rfolyam sz\u00e1m\u00edt, azt a br\u00f3kered igazol\u00e1sa vagy ad\u00f3szak\u00e9rt\u0151 alapj\u00e1n ellen\u0151rizd.<\/p>\r\n        <p><strong>Jogi \u00e9s felel\u0151ss\u00e9gi nyilatkozat (aka. disclaimer):<\/strong> a kalkul\u00e1tor kiz\u00e1r\u00f3lag t\u00e1j\u00e9koztat\u00f3 jelleg\u0171, az eredm\u00e9nyek becsl\u00e9sek, \u00e9s nem min\u0151s\u00fclnek befektet\u00e9si, ad\u00f3z\u00e1si vagy p\u00e9nz\u00fcgyi tan\u00e1csad\u00e1snak, sem aj\u00e1nlatt\u00e9telnek. A sz\u00e1m\u00edt\u00e1s helyess\u00e9g\u00e9\u00e9rt \u00e9s a felhaszn\u00e1lt adatok teljess\u00e9g\u00e9\u00e9rt felel\u0151ss\u00e9get nem v\u00e1llalok. A meghozott d\u00f6nt\u00e9seitek\u00e9rt KIZ\u00c1R\u00d3LAG TI vagytok a felel\u0151sek.<\/p>\r\n      <\/div>\r\n    <\/div>`;\r\n  }\r\n\r\n  \/* ==========================================================\r\n     8. CHART.JS BET\u00d6LT\u00c9SE (egyszer, megosztva a t\u00f6bbi kalkul\u00e1torral)\r\n     ========================================================== *\/\r\n  var CHARTJS_URL = 'https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/Chart.js\/4.4.1\/chart.umd.min.js';\r\n  function chartJsBetoltes() {\r\n    if (window.Chart) return Promise.resolve(window.Chart);\r\n    if (!window.__iocChartJs) {\r\n      window.__iocChartJs = new Promise(function (ok, hiba) {\r\n        var s = document.createElement('script');\r\n        s.src = CHARTJS_URL; s.async = true;\r\n        s.onload = function () { ok(window.Chart); };\r\n        s.onerror = hiba;\r\n        document.head.appendChild(s);\r\n      });\r\n    }\r\n    return window.__iocChartJs;\r\n  }\r\n  \/\/ Feh\u00e9r h\u00e1tt\u00e9r a v\u00e1szonra, hogy a let\u00f6lt\u00f6tt PNG ne legyen \u00e1tl\u00e1tsz\u00f3\r\n  var feherHatter = {\r\n    id: 'iocFeherHatter',\r\n    beforeDraw: function (chart) {\r\n      var c = chart.ctx; c.save(); c.globalCompositeOperation = 'destination-over';\r\n      c.fillStyle = '#ffffff'; c.fillRect(0, 0, chart.width, chart.height); c.restore();\r\n    }\r\n  };\r\n  \/\/ Havi tengely: csak az \u00e9vsz\u00e1mokat \u00edrjuk ki (janu\u00e1rn\u00e1l), s\u0171r\u0171 adatn\u00e1l ritk\u00edtva\r\n  function evTengely(sor, ido) {\r\n    return {\r\n      grid: { display: false },\r\n      ticks: {\r\n        color: SZIN.muted, maxRotation: 0, autoSkip: false,\r\n        callback: function (v, idx) {\r\n          var i = ido(idx); if (i === undefined) return '';\r\n          \/\/ ennyi \u00e9vsz\u00e1m f\u00e9r el a tengelyen (kb. 42 k\u00e9ppont \u00e9vsz\u00e1monk\u00e9nt); ehhez v\u00e1lasztunk 1, 2, 5 vagy 10 \u00e9ves l\u00e9p\u00e9st\r\n          var n = sor.length, fer = Math.max(2, Math.floor((this.width || 600) \/ 42)), kell = Math.ceil(n \/ 12 \/ fer);\r\n          var lepes = [1, 2, 5, 10, 20].filter(function (l) { return l >= kell; })[0] || 20;\r\n          if (n <= 36) return hHo(i) === 0 || idx === 0 ? String(hEv(i)) : (hHo(i) % 3 === 0 ? HONAPOK_ROVID[hHo(i)] : '');\r\n          return hHo(i) === 0 && hEv(i) % lepes === 0 ? String(hEv(i)) : '';\r\n        }\r\n      }\r\n    };\r\n  }\r\n\r\n  \/* ==========================================================\r\n     9. A KALKUL\u00c1TOR ELEM (<ioc-deviza>), Shadow DOM-mal\r\n     ========================================================== *\/\r\n  class IocDeviza extends HTMLElement {\r\n    connectedCallback() {\r\n      if (this._kesz) return;\r\n      this._kesz = true;\r\n      var root = this.attachShadow({ mode: 'open' });\r\n      root.innerHTML = '<style>' + CSS + '<\/style>' + vaz();\r\n      this._r = root;\r\n      this._chartok = {};\r\n      this._nezet = 'alap';\r\n      this._idoModositva = false;\r\n      this._evOpciokFrissit(true);\r\n      this._arfMod = 'napi';                    \/\/ 1.8: 'havi' | 'napi'; 1.11: alapb\u00f3l napi\r\n      this._poz = this._pozBetolt();            \/\/ napi n\u00e9zet: a b\u00f6ng\u00e9sz\u0151ben t\u00e1rolt poz\u00edci\u00f3k (a link fel\u00fcl\u00edrhatja)\r\n      this._pozKiv = 0;\r\n      var volt = this._parameterekBetoltese();\r\n      if (this._arfMod === 'napi') this._arfModValt('napi');   \/\/ 1.11: a d\u00e1tummez\u0151k kit\u00f6lt\u00e9se a h\u00f3napokb\u00f3l (ha \u00fcresek)\r\n      this._esemenyek();\r\n      this._napiEsemenyek();\r\n      this._idoMezokFrissit();\r\n      this._pozRajzol();\r\n      this._allapotKiir();\r\n      this._szamol();\r\n      this._napiSzamol();\r\n\r\n      var self = this;\r\n      chartJsBetoltes().then(function () { self._rajzol(); }).catch(function () {\r\n        self._r.querySelectorAll('.vaszon').forEach(function (v) { v.innerHTML = '<div class=\"grafikon-hiba\">A grafikon most nem t\u00f6lthet\u0151 be. Az eredm\u00e9nyek \u00e9s a t\u00e1bl\u00e1zat \u00edgy is pontosak.<\/div>'; });\r\n      });\r\n      eloAdatBetoltes().then(function (valtozott) {\r\n        self._allapotKiir();\r\n        if (valtozott) {\r\n          self._evOpciokFrissit(!self._idoModositva);\r\n          self._szamol(); self._rajzol();\r\n        }\r\n      });\r\n      if (volt) setTimeout(function () { self.scrollIntoView({ behavior: 'smooth', block: 'start' }); }, 400);\r\n    }\r\n\r\n    $(s) { return this._r.querySelector(s); }\r\n\r\n    _allapotKiir() {\r\n      this.$('#adat-allapot').textContent = ADAT_ALLAPOT.szoveg;\r\n      this.$('#adat-allapot').classList.toggle('elo', ADAT_ALLAPOT.elo);\r\n      this.$('#adatforras').innerHTML = '<strong>Adatforr\u00e1s:<\/strong> ' + (ADAT_FORRAS === 'MNB'\r\n        ? 'Magyar Nemzeti Bank, hivatalos deviza\u00e1rfolyamok (napi adatokb\u00f3l sz\u00e1molt havi \u00e1tlagok). '\r\n        : 'ECB-referencia\u00e1rfolyamok havi \u00e1tlaga 1999-t\u0151l, el\u0151tte az Eurostat ECU-\u00e1rfolyamai (ert_bil_eur_m); a forint\u00e1rfolyam ezek h\u00e1nyadosa, ez\u00e9rt kiss\u00e9 elt\u00e9rhet az MNB hivatalos \u00e1rfolyam\u00e1t\u00f3l. ') +\r\n        (Object.keys(POTOLT).length ? 'Ahol az MNB-sor k\u00e9s\u0151bb indul, az elej\u00e9t az ECB\/Eurostat havi \u00e1tlagaib\u00f3l p\u00f3toltam (' + Object.keys(POTOLT).map(function (k) { return k + ': ' + hSzoveg(POTOLT[k]) + ' el\u0151tt'; }).join(', ') + '). ' : '') +\r\n        'Az eur\u00f3 1999 el\u0151tti \u00e1rfolyama az el\u0151dj\u00e9nek, az ECU-nak (az eur\u00f3pai valutakos\u00e1rnak) az \u00e1rfolyama; 1999. janu\u00e1r 1-j\u00e9n 1 ECU = 1 eur\u00f3. ' +\r\n        'A cseh korona 1993-t\u00f3l, a k\u00ednai j\u00fcan \u00e9s n\u00e9h\u00e1ny m\u00e1s deviza a be\u00e9p\u00edtett adatokban r\u00f6videbb ideje \u00e9rhet\u0151 el. A forint 1990 el\u0151tt nem volt szabadon \u00e1tv\u00e1lthat\u00f3, ez\u00e9rt a kalkul\u00e1tor 1990-t\u0151l sz\u00e1mol. ' +\r\n        'A re\u00e1l\u00e9rt\u00e9k a KSH \u00e9ves fogyaszt\u00f3i\u00e1r-index\u00e9vel sz\u00e1mol (havonta egyenletesen elosztva)' + (KSH_ELOZETES ? '; a ' + KSH_ELOZETES + '. \u00e9vi adat el\u0151zetes' : '') + '. ' +\r\n        (reszlegesHonap() !== null ? '* A legut\u00f3bbi h\u00f3nap r\u00e9szleges: az eddigi napok \u00e1tlaga.' : '');\r\n    }\r\n\r\n    \/* \u00c9v- \u00e9s h\u00f3napv\u00e1laszt\u00f3k a v\u00e1lasztott devizap\u00e1r adattartom\u00e1ny\u00e1hoz.\r\n       ujAlap: a h\u00f3napokat alap\u00e9rt\u00e9kre \u00e1ll\u00edtjuk (kezd\u00e9s: a legkor\u00e1bbi el\u00e9rhet\u0151 h\u00f3nap, forintn\u00e1l 1990. janu\u00e1r; v\u00e9ge: a legut\u00f3bbi). *\/\r\n    _evOpciokFrissit(ujAlap) {\r\n      var a = this.$('#a').value, b = this.$('#b').value, t = tartomany(a, b);\r\n      this._tart = t;\r\n      var regi0 = this._t0(), regi1 = this._t1();\r\n      var opciok = '';\r\n      for (var e = hEv(t.tol); e <= hEv(t.ig); e++) opciok += '<option value=\"' + e + '\">' + e + '<\/option>';\r\n      this.$('#t0-ev').innerHTML = opciok; this.$('#t1-ev').innerHTML = opciok;\r\n      var t0 = ujAlap || !isFinite(regi0) ? t.tol : regi0 < t.tol ? t.tol : regi0 > t.ig ? Math.max(t.tol, t.ig - 12) : regi0;\r\n      var t1 = ujAlap || !(regi1 >= t.tol && regi1 <= t.ig) ? t.ig : regi1;\r\n      if (t0 >= t1) t0 = Math.max(t.tol, t1 - 12);\r\n      this._honapBeallit('t0', t0); this._honapBeallit('t1', t1);\r\n    }\r\n    _honapBeallit(id, i) {\r\n      var t = this._tart; i = Math.max(t.tol, Math.min(t.ig, i));\r\n      this.$('#' + id + '-ev').value = String(hEv(i)); this.$('#' + id + '-ho').value = String(hHo(i));\r\n    }\r\n    _t0() { var e = Number(this.$('#t0-ev').value), h = Number(this.$('#t0-ho').value); return e && h >= 0 ? e * 12 + h : NaN; }\r\n    _t1() { var e = Number(this.$('#t1-ev').value), h = Number(this.$('#t1-ho').value); return e && h >= 0 ? e * 12 + h : NaN; }\r\n\r\n    _esemenyek() {\r\n      var self = this, idozito;\r\n      var ujra = function () { clearTimeout(idozito); idozito = setTimeout(function () { self._szamol(); self._rajzol(); }, 150); };\r\n      this.$('#osszeg').addEventListener('input', function (e) { elofoTagolas(e.target); ujra(); });\r\n      this.$('#hozam').addEventListener('input', function (e) { tizedesSzuro(e.target, HOZAM_MIN, HOZAM_MAX); ujra(); });\r\n      ['#t0-ev', '#t0-ho', '#t1-ev', '#t1-ho'].forEach(function (s) { self.$(s).addEventListener('change', function () { self.$('.info').textContent = ''; self._idoModositva = true; self._pillanatJeloles(); ujra(); }); });\r\n      ['#a', '#b'].forEach(function (s) {\r\n        self.$(s).addEventListener('change', function () {\r\n          \/\/ ugyanaz a deviza nem lehet mindk\u00e9t oldalon: a m\u00e1sikat forintra\/eur\u00f3ra \u00e1ll\u00edtjuk\r\n          var a = self.$('#a'), b = self.$('#b');\r\n          \/\/ csak ismert p\u00e9nznem maradhat a mez\u0151ben (fejleszt\u0151i eszk\u00f6zzel be\u00edrt \u00e9rt\u00e9k ellen)\r\n          if (!ismertDeviza(a.value)) a.value = 'HUF';\r\n          if (!ismertDeviza(b.value)) b.value = a.value === 'USD' ? 'EUR' : 'USD';\r\n          \/\/ 1.12: ha a k\u00e9t oldal egyezne, a m\u00e1sik oldal forintra v\u00e1lt (forintn\u00e1l eur\u00f3ra)\r\n          if (a.value === b.value) { if (s === '#a') b.value = a.value === 'HUF' ? 'EUR' : 'HUF'; else a.value = b.value === 'HUF' ? 'EUR' : 'HUF'; }\r\n          var regi = self._t0();\r\n          self._evOpciokFrissit(false);\r\n          self.$('.info').textContent = regi < self._tart.tol ? 'Erre a devizap\u00e1rra csak ' + hSzoveg(self._tart.tol) + ' \u00f3ta van adat, ez\u00e9rt a kezd\u0151 h\u00f3napot erre \u00e1ll\u00edtottam.' : '';\r\n          ujra();\r\n        });\r\n      });\r\n      this.$('#tartas').addEventListener('change', ujra);\r\n      \/\/ 1.8: havi \/ napi \u00e1rfolyam \u00e9s a napi d\u00e1tummez\u0151k\r\n      this._r.querySelectorAll('[data-arfmod]').forEach(function (g) {\r\n        g.addEventListener('click', function () { self._arfModValt(g.dataset.arfmod); ujra(); });\r\n      });\r\n      ['#t0-nap', '#t1-nap'].forEach(function (sel) {\r\n        self.$(sel).addEventListener('change', function () { self._napHonapSzinkron(); self._idoModositva = true; self._pillanatJeloles(); ujra(); });\r\n      });\r\n      ['#kb', '#ka'].forEach(function (s) { self.$(s).addEventListener('input', function (e) { tizedesSzuro(e.target, BETET_MIN, BETET_MAX); ujra(); }); });\r\n      ['#hk', '#hu'].forEach(function (s) { self.$(s).addEventListener('input', function (e) { tizedesSzuro(e.target, 0, HITEL_KAMAT_MAX); ujra(); }); });\r\n      this.$('#hfk').addEventListener('input', function (e) { tizedesSzuro(e.target, 0, BETET_MAX); ujra(); });\r\n      this.$('#hf').addEventListener('input', function (e) { egeszSzuro(e.target, FUTAMIDO_MAX); ujra(); });\r\n      this.$('#hz').addEventListener('change', ujra);\r\n      this.$('#hkt').addEventListener('change', ujra);   \/\/ 1.17\r\n      this.$('#hks').addEventListener('change', ujra);\r\n      this.$('#ado').addEventListener('change', ujra);\r\n      this.$('#hitel-pelda').addEventListener('click', function () {\r\n        self.$('#a').value = 'HUF'; self.$('#b').value = 'CHF'; self.$('#osszeg').value = fmtSzam.format(10000000);\r\n        self._evOpciokFrissit(false); self._honapBeallit('t0', hIdx('2007-01')); self._idoModositva = true;\r\n        if (self._arfMod === 'napi') self.$('#t0-nap').value = elsoMunkanap(hIdx('2007-01'));\r\n        self.$('#hf').value = '20'; self.$('#hk').value = '4,5'; self.$('#hz').checked = true; self.$('#hu').value = '';\r\n        self.$('#hkt').value = 'valt'; self.$('#hfk').value = '10'; self.$('#hks').checked = true;   \/\/ 1.17\r\n        self.$('.info').textContent = ''; self._pillanatJeloles(); ujra();\r\n      });\r\n      \/\/ 1.17: eur\u00f3hitel 2008 j\u00falius\u00e1ban (a forint cs\u00facs\u00e1n), v\u00e1ltoz\u00f3 kamattal\r\n      this.$('#hitel-pelda2').addEventListener('click', function () {\r\n        self.$('#a').value = 'HUF'; self.$('#b').value = 'EUR'; self.$('#osszeg').value = fmtSzam.format(10000000);\r\n        self._evOpciokFrissit(false); self._honapBeallit('t0', hIdx('2008-07')); self._idoModositva = true;\r\n        if (self._arfMod === 'napi') self.$('#t0-nap').value = elsoMunkanap(hIdx('2008-07'));\r\n        self.$('#hf').value = '20'; self.$('#hk').value = '6'; self.$('#hz').checked = true; self.$('#hu').value = '';\r\n        self.$('#hkt').value = 'valt'; self.$('#hfk').value = '10'; self.$('#hks').checked = true;\r\n        self.$('.info').textContent = ''; self._pillanatJeloles(); ujra();\r\n      });\r\n      this.$('#havi').addEventListener('input', function (e) { elofoTagolas(e.target); ujra(); });\r\n      this._r.querySelectorAll('[data-pk]').forEach(function (s) { s.addEventListener('change', ujra); });\r\n      this._r.querySelectorAll('[data-ps]').forEach(function (s) { s.addEventListener('input', function (e) { egeszSzuro(e.target, 100); ujra(); }); });\r\n      this._r.querySelectorAll('[data-vs]').forEach(function (s) { s.addEventListener('change', ujra); });\r\n      this._r.querySelectorAll('[data-lep]').forEach(function (g) {\r\n        g.addEventListener('click', function () {\r\n          var id = g.dataset.lep, i = (id === 't0' ? self._t0() : self._t1()) + Number(g.dataset.irany);\r\n          self._honapBeallit(id, i); self._idoModositva = true; self._pillanatJeloles(); ujra();\r\n        });\r\n      });\r\n      this._r.querySelectorAll('[data-pillanat]').forEach(function (g) {\r\n        g.addEventListener('click', function () {\r\n          var p = g.dataset.pillanat, i = p === 'max' ? self._tart.tol : hIdx(PILLANATOK[Number(p)].h);\r\n          \/\/ ha a devizap\u00e1rra ekkor m\u00e9g nincs adat, a legkor\u00e1bbi h\u00f3napra \u00e1llunk, \u00e9s ezt jelezz\u00fck\r\n          self.$('.info').textContent = i < self._tart.tol ? 'Erre a devizap\u00e1rra csak ' + hSzoveg(self._tart.tol) + ' \u00f3ta van adat, ez\u00e9rt ' + hEv(self._tart.tol) + ' ' + HONAPOK_BAN[hHo(self._tart.tol)] + ' kezdtem a sz\u00e1m\u00edt\u00e1st.' : '';\r\n          self._honapBeallit('t0', i); self._honapBeallit('t1', self._tart.ig);\r\n          if (self._arfMod === 'napi') { self.$('#t0-nap').value = elsoMunkanap(Math.max(i, self._tart.tol)); self.$('#t1-nap').value = maISO(); }\r\n          self._idoModositva = true; self._pillanatJeloles(); ujra();\r\n        });\r\n      });\r\n      this._r.querySelectorAll('[data-nezet]').forEach(function (g) {\r\n        g.addEventListener('click', function () { self._nezetValtas(g.dataset.nezet); });\r\n      });\r\n      this._r.querySelectorAll('[data-png]').forEach(function (g) { g.addEventListener('click', function () { self._pngLetoltes(g.dataset.png); }); });\r\n      this.$('#csv').addEventListener('click', function () { self._csvLetoltes(); });\r\n      this._r.querySelectorAll('[data-link]').forEach(function (g) { g.addEventListener('click', function () { self._linkMasolas(g); }); });\r\n    }\r\n\r\n    _nezetValtas(n, csendes) {\r\n      this._nezet = n === 'bef' || n === 'hitel' || n === 'napi' ? n : 'alap';\r\n      var self = this, h = this._nezet === 'hitel', napi = this._nezet === 'napi';\r\n      this._r.querySelectorAll('[data-nezet]').forEach(function (x) { x.setAttribute('aria-pressed', String(x.dataset.nezet === self._nezet)); });\r\n      this.$('#nezet-alap').hidden = this._nezet !== 'alap';\r\n      this.$('#nezet-bef').hidden = this._nezet !== 'bef';\r\n      this.$('#nezet-hitel').hidden = !h;\r\n      \/\/ a napi n\u00e9zetnek saj\u00e1t mez\u0151i \u00e9s saj\u00e1t adat\u00e1llapota van: a havi k\u00f6z\u00f6s mez\u0151k \u00e9s a havi adatsor rejtve\r\n      this.$('#nezet-napi').hidden = !napi;\r\n      this.$('#kozos').hidden = napi;\r\n      this.$('#adat-allapot').hidden = napi;\r\n      if (napi && !csendes) { this._napiSzamol(); this._rajzol(); return; }\r\n      \/\/ a hiteln\u00e9zetben a z\u00e1r\u00f3 h\u00f3napot a futamid\u0151 adja, a mez\u0151k felirata is a hitelhez igazodik\r\n      this.$('#t1-mezo').hidden = h;\r\n      this.$('#osszeg-cimke').textContent = h ? 'Hitel\u00f6sszeg' : '\u00d6sszeg';\r\n      this.$('#a-cimke').textContent = h ? 'Milyen p\u00e9nzben kaptad?' : 'Mib\u0151l?';\r\n      this.$('#b-cimke').textContent = h ? 'Melyik deviz\u00e1ban vetted fel?' : 'Melyik deviz\u00e1ba?';\r\n      this.$('#t0-cimke').textContent = h ? 'Mikor vetted fel a hitelt?' : 'Mikor v\u00e1ltottad \u00e1t?';\r\n      this._idoMezokFrissit();   \/\/ a napi \/ havi id\u0151mez\u0151k \u00e9s feliratok (1.8\u20131.9)\r\n      if (!csendes) { this._szamol(); this._rajzol(); }\r\n    }\r\n\r\n    \/* ---------- HAVI \/ NAPI \u00c1RFOLYAM AZ ALAPN\u00c9ZETBEN (1.8) ---------- *\/\r\n    _arfModValt(m) {\r\n      this._arfMod = m === 'napi' ? 'napi' : 'havi';\r\n      if (this._arfMod === 'napi') {\r\n        \/\/ els\u0151 bekapcsol\u00e1skor a d\u00e1tumok a be\u00e1ll\u00edtott h\u00f3napokb\u00f3l: a kezd\u0151 h\u00f3nap els\u0151 munkanapja, a v\u00e9ge ma\r\n        if (!datumRendben(this.$('#t0-nap').value)) this.$('#t0-nap').value = elsoMunkanap(this._t0());\r\n        if (!datumRendben(this.$('#t1-nap').value)) this.$('#t1-nap').value = this._t1() >= this._tart.ig ? maISO() : utolsoNap(this._t1());\r\n        this._napHonapSzinkron();\r\n      }\r\n      this._idoMezokFrissit();\r\n    }\r\n    \/\/ A d\u00e1tummez\u0151k \u00e9s a h\u00f3napv\u00e1laszt\u00f3k l\u00e1that\u00f3s\u00e1ga; napi m\u00f3dban a feliratok is a naphoz igazodnak\r\n    _idoMezokFrissit() {\r\n      var alap = this._nezet !== 'napi', napi = alap && this._arfMod === 'napi', self = this;   \/\/ 1.9: a havi n\u00e9zetek mindegyik\u00e9ben\r\n      this.$('#arf-mod-sor').hidden = !alap;\r\n      this.$('#alap-napi-megj').hidden = !alap;\r\n      this._r.querySelectorAll('[data-arfmod]').forEach(function (g) { g.setAttribute('aria-pressed', String(g.dataset.arfmod === self._arfMod)); });\r\n      ['t0', 't1'].forEach(function (id) {\r\n        self.$('#' + id + '-mezo .honap').hidden = napi;\r\n        self.$('#' + id + '-nap').hidden = !napi;\r\n        self.$('#' + id + '-nap').max = maISO();\r\n      });\r\n      if (this._nezet !== 'hitel') {\r\n        this.$('#t0-cimke').textContent = napi ? 'Melyik napon v\u00e1ltottad \u00e1t?' : 'Mikor v\u00e1ltottad \u00e1t?';\r\n        this.$('#t1-cimke').textContent = napi ? 'Melyik napon v\u00e1ltan\u00e1d vissza?' : 'Mikor v\u00e1ltan\u00e1d vissza?';\r\n      } else this.$('#t0-cimke').textContent = napi ? 'Melyik napon vetted fel a hitelt?' : 'Mikor vetted fel a hitelt?';\r\n      this.$('#arf-mod-sugo').textContent = napi ? 'az adott nap hivatalos MNB-\u00e1rfolyama' : '';\r\n    }\r\n    \/\/ napi m\u00f3dban a h\u00f3napv\u00e1laszt\u00f3k k\u00f6vetik a d\u00e1tumokat (a havi r\u00e9szek ezekkel sz\u00e1molnak)\r\n    _napHonapSzinkron() {\r\n      var d0 = this.$('#t0-nap').value, d1 = this.$('#t1-nap').value;\r\n      if (datumRendben(d0)) this._honapBeallit('t0', hIdx(d0.slice(0, 7)));\r\n      if (datumRendben(d1)) this._honapBeallit('t1', hIdx(d1.slice(0, 7)));\r\n    }\r\n    \/* Napi alaperedm\u00e9ny: { e } ha k\u00e9sz, { varakozik: true } am\u00edg a napi sor t\u00f6lt\u0151dik, { hiba } ha nem sz\u00e1molhat\u00f3.\r\n       A hi\u00e1nyz\u00f3 napi sorokat bet\u00f6lti, \u00e9s ut\u00e1na \u00fajrasz\u00e1mol. *\/\r\n    \/* A megadott deviz\u00e1k napi sorai: {} ha mind megvan, { varakozik: true } am\u00edg t\u00f6lt\u0151dnek\r\n       (bet\u00f6lt\u00e9s ut\u00e1n az eg\u00e9sz kalkul\u00e1tor \u00fajrasz\u00e1mol), { hiba } ha valamelyik nem \u00e9rhet\u0151 el. (1.9) *\/\r\n    _napiKell(kell) {\r\n      var self = this, hiba = null, varakozik = false;\r\n      if (!this._napiVar) this._napiVar = {};\r\n      kell.forEach(function (k) {\r\n        if (napiKesz[k]) return;\r\n        if (napiHiba[k]) { hiba = 'A napi \u00e1rfolyam most nem \u00e9rhet\u0151 el (' + k + ').'; return; }\r\n        varakozik = true;\r\n        if (self._napiVar[k]) return;\r\n        self._napiVar[k] = true;\r\n        napiSorBetoltes(k).then(function (s) { napiKesz[k] = s; }, function (e) { napiHiba[k] = e && e.message || 'hiba'; })\r\n          .then(function () { delete self._napiVar[k]; self._szamol(); self._rajzol(); if (self._nezet === 'napi') self._napiKiir(); });\r\n      });\r\n      return hiba ? { hiba: hiba } : varakozik ? { varakozik: true } : {};\r\n    }\r\n    _napiAlap(b) {\r\n      var self = this, kell = [b.a, b.b].filter(function (k) { return k !== 'HUF'; }), hiba = null, varakozik = false;\r\n      if (!this._napiVar) this._napiVar = {};\r\n      kell.forEach(function (k) {\r\n        if (napiKesz[k]) return;\r\n        if (napiHiba[k] && !self._napiUjra) { hiba = 'A napi \u00e1rfolyam most nem \u00e9rhet\u0151 el (' + k + ').'; return; }\r\n        varakozik = true;\r\n        if (self._napiVar[k]) return;\r\n        self._napiVar[k] = true; delete napiHiba[k];\r\n        napiSorBetoltes(k).then(function (s) { napiKesz[k] = s; }, function (e) { napiHiba[k] = e && e.message || 'hiba'; })\r\n          .then(function () { delete self._napiVar[k]; self._szamol(); self._rajzol(); if (self._nezet === 'napi') self._napiKiir(); });\r\n      });\r\n      this._napiUjra = false;\r\n      if (hiba) return { hiba: hiba };\r\n      if (varakozik) return { varakozik: true };\r\n      if (!datumRendben(b.d0) || !datumRendben(b.d1)) return { hiba: 'Add meg az \u00e1tv\u00e1lt\u00e1s \u00e9s a visszav\u00e1lt\u00e1s napj\u00e1t.' };\r\n      if (b.d1 <= b.d0) return { hiba: 'A visszav\u00e1lt\u00e1s napja legyen k\u00e9s\u0151bbi, mint az \u00e1tv\u00e1lt\u00e1s\u00e9.' };\r\n      var e = szamitasNapi(b, napiPar(b.a, b.b));\r\n      return e.hiba ? { hiba: e.hiba } : { e: e };\r\n    }\r\n\r\n    _pillanatJeloles() {\r\n      var t0 = this._t0(), t1 = this._t1(), self = this;\r\n      this._r.querySelectorAll('[data-pillanat]').forEach(function (g) {\r\n        var p = g.dataset.pillanat, i = p === 'max' ? self._tart.tol : hIdx(PILLANATOK[Number(p)].h);\r\n        g.setAttribute('aria-pressed', String(i === t0 && t1 === self._tart.ig));\r\n      });\r\n    }\r\n\r\n    _bemenet() {\r\n      var b = {\r\n        osszeg: beolvas(this.$('#osszeg').value),\r\n        a: this.$('#a').value, b: this.$('#b').value,\r\n        t0: this._t0(), t1: this._t1(),\r\n        hozam: beolvas(this.$('#hozam').value),\r\n        tartas: TARTASOK.indexOf(Number(this.$('#tartas').value)) >= 0 ? Number(this.$('#tartas').value) : 5,\r\n        havi: beolvas(this.$('#havi').value),\r\n        kb: beolvas(this.$('#kb').value), ka: beolvas(this.$('#ka').value),\r\n        port: [],\r\n        hiba: ''\r\n      };\r\n      \/\/ devizamix: csak ismert deviza, pozit\u00edv ar\u00e1ny, minden deviza egyszer\r\n      var lattam = {};\r\n      for (var pi = 0; pi < 5; pi++) {\r\n        var pk = this.$('#pk-' + pi).value, ps = beolvas(this.$('#ps-' + pi).value);\r\n        if (ismertDeviza(pk) && ps > 0 && !lattam[pk]) { lattam[pk] = 1; b.port.push({ k: pk, suly: Math.min(100, ps), i: pi }); }\r\n      }\r\n      var t = this._tart;\r\n      \/\/ kamat: \u00fcres vagy hib\u00e1s mez\u0151 = 0 (kamat n\u00e9lk\u00fcl)\r\n      b.kb = b.kb >= BETET_MIN && b.kb <= BETET_MAX ? b.kb : 0;\r\n      b.ka = b.ka >= BETET_MIN && b.ka <= BETET_MAX ? b.ka : 0;\r\n      \/\/ kamatad\u00f3: a sz\u00e1m\u00edt\u00e1s a nett\u00f3 kamattal megy; a brutt\u00f3t a linkhez meg\u0151rizz\u00fck (negat\u00edv kamatn\u00e1l nincs ad\u00f3)\r\n      b.ado = this.$('#ado').checked; b.kbBr = b.kb; b.kaBr = b.ka;\r\n      if (b.ado) { if (b.kb > 0) b.kb *= 1 - KAMATADO; if (b.ka > 0) b.ka *= 1 - KAMATADO; }\r\n      \/\/ 1.8: napi \u00e1rfolyam az alapn\u00e9zetben\r\n      b.napi = this._arfMod === 'napi';\r\n      b.d0 = this.$('#t0-nap').value; b.d1 = this.$('#t1-nap').value;\r\n      if (b.napi && (this._nezet === 'alap' || this._nezet === 'bef') && b.t1 <= b.t0) {\r\n        \/\/ a havi r\u00e9szek (rendszeres v\u00e1s\u00e1rl\u00e1s, id\u0151z\u00edt\u00e9s stb.) legal\u00e1bb k\u00e9t h\u00f3napot k\u00e9rnek\r\n        if (b.t0 < t.ig) b.t1 = b.t0 + 1; else b.t0 = b.t1 - 1;\r\n        b.honapIgazitva = true;\r\n      }\r\n      \/\/ a hiteln\u00e9zetben a (rejtett) z\u00e1r\u00f3 h\u00f3nap nem lehet hibaforr\u00e1s: ott a legutols\u00f3 adatig sz\u00e1molunk\r\n      if (this._nezet === 'hitel' && !(b.t1 > b.t0 && b.t1 <= t.ig)) b.t1 = t.ig;\r\n      \/\/ l\u00e9ptet\u0151gombok a tartom\u00e1ny k\u00e9t v\u00e9g\u00e9n letilt\u00f3dnak\r\n      this.$('[data-lep=\"t0\"][data-irany=\"-1\"]').disabled = b.t0 <= t.tol;\r\n      this.$('[data-lep=\"t0\"][data-irany=\"1\"]').disabled = b.t0 >= t.ig;\r\n      this.$('[data-lep=\"t1\"][data-irany=\"-1\"]').disabled = b.t1 <= t.tol;\r\n      this.$('[data-lep=\"t1\"][data-irany=\"1\"]').disabled = b.t1 >= t.ig;\r\n      if (!(b.osszeg > 0)) b.hiba = 'Adj meg egy null\u00e1n\u00e1l nagyobb \u00f6sszeget.';\r\n      else if (b.osszeg > OSSZEG_MAX) b.hiba = 'Legfeljebb 100 milli\u00e1rdos \u00f6sszeggel sz\u00e1molok.';\r\n      else if (!ismertDeviza(b.a) || !ismertDeviza(b.b) || b.a === b.b) b.hiba = 'V\u00e1lassz k\u00e9t k\u00fcl\u00f6nb\u00f6z\u0151 p\u00e9nznemet.';\r\n      else if (this._nezet === 'hitel' && b.t0 >= t.ig) b.hiba = 'A felv\u00e9tel h\u00f3napja ut\u00e1n m\u00e9g nincs \u00e1rfolyamadat: v\u00e1lassz kor\u00e1bbi h\u00f3napot.';\r\n      else if (!(b.t0 >= t.tol && b.t1 <= t.ig)) b.hiba = 'Erre a devizap\u00e1rra ' + hSzoveg(t.tol) + ' \u00e9s ' + hSzoveg(t.ig) + ' k\u00f6z\u00f6tt van adat.';\r\n      else if (!(b.t1 > b.t0)) b.hiba = 'Az \u00e1tv\u00e1lt\u00e1s id\u0151pontja legyen kor\u00e1bbi, mint a visszav\u00e1lt\u00e1s\u00e9.';\r\n      else if (par(b.a, b.b, b.t0) === undefined || par(b.a, b.b, b.t1) === undefined) b.hiba = 'A v\u00e1lasztott h\u00f3napra nincs \u00e1rfolyamadat, v\u00e1lassz egy m\u00e1sikat.';\r\n      if (!(b.hozam >= HOZAM_MIN && b.hozam <= HOZAM_MAX)) b.hozam = null;\r\n      if (!(b.havi > 0 && b.havi <= OSSZEG_MAX)) b.havi = null;\r\n      var span = b.t1 - b.t0, sel = this.$('#tartas');\r\n      Array.prototype.forEach.call(sel.options, function (o) { var e = Number(o.value); o.disabled = e > 0 && e * 12 > span; });\r\n      b.tartasModositva = false;\r\n      if (b.tartas > 0 && b.tartas * 12 > span && span > 0) {\r\n        var leg = TARTASOK.filter(function (e) { return e > 0 && e * 12 <= span; }).pop();\r\n        b.tartas = leg || 0; b.tartasModositva = true;\r\n        sel.value = String(b.tartas);\r\n      }\r\n      return b;\r\n    }\r\n\r\n    _kiir(n, nev, ertek, al, osztaly) {\r\n      this.$('[data-nev=\"' + n + '\"]').innerHTML = nev;\r\n      var x = this.$('[data-ertek=\"' + n + '\"]');\r\n      x.textContent = ertek;\r\n      x.className = 'ertek' + (String(ertek).length > 13 ? ' hosszu' : '') + (osztaly ? ' ' + osztaly : '');\r\n      var a = this.$('[data-al=\"' + n + '\"]'); if (a) a.innerHTML = al || '';\r\n    }\r\n    _urit() {\r\n      this._r.querySelectorAll('[data-ertek]').forEach(function (x) { x.textContent = '\u2013'; x.className = 'ertek'; });\r\n      this._r.querySelectorAll('[data-al]').forEach(function (x) { x.innerHTML = ''; });\r\n      ['#mondat-alap', '#mondat-kock', '#mondat-gord', '#mondat-fx', '#mondat-verseny', '#statok', '#tbody-ev', '#tbody-verseny', '#mondat-dca', '#mondat-port', '#tbody-port', '#thead-korr', '#tbody-korr', '#port-ossz',\r\n        '#mondat-idoz', '#tbody-idoz', '#mondat-real', '#mondat-hitel', '#statok-hitel'].forEach(function (s) { this.$(s).innerHTML = ''; }, this);\r\n      this._idoz = this._real = this._hitel = null;\r\n    }\r\n\r\n    _szamol() {\r\n      var b = this._bemenet();\r\n      this.$('.hiba').textContent = b.hiba;\r\n      this.$('#osszeg-jel').textContent = DEVIZAK[b.a] ? DEVIZAK[b.a].jel : '';\r\n      this.$('#havi-jel').textContent = DEVIZAK[b.a] ? DEVIZAK[b.a].jel : '';\r\n      this._adat = null;\r\n      if (b.hiba) { this._urit(); this.$('#alap-napi-megj').textContent = ''; return; }\r\n      var e = szamitas(b), ea = e, megj = '';\r\n      \/\/ 1.8: napi m\u00f3dban az alapn\u00e9zet f\u0151 r\u00e9sze napi \u00e1rfolyammal (ea); a t\u00f6bbi r\u00e9sz havi (e)\r\n      if (b.napi && this._nezet !== 'hitel') {\r\n        var n = this._napiAlap(b);\r\n        if (n.e) ea = n.e;\r\n        else if (n.varakozik) megj = 'Napi \u00e1rfolyamok bet\u00f6lt\u00e9se\u2026 addig a havi \u00e1tlaggal sz\u00e1molt eredm\u00e9ny l\u00e1tszik.';\r\n        else megj = n.hiba + ' Addig a havi \u00e1tlaggal sz\u00e1molt eredm\u00e9ny l\u00e1tszik.';\r\n      }\r\n      var forrasSz = ea.napi ? (ea.forras === 'MNB' ? 'MNB hivatalos napi deviza\u00e1rfolyamok' : ea.forras) : '';\r\n      if (ea.napi && this._nezet === 'alap') megj = 'Napi \u00e1rfolyammal: ' + forrasSz + '. A rendszeres v\u00e1s\u00e1rl\u00e1s, az id\u0151z\u00edt\u00e9s \u00e9s a deviz\u00e1k versenye havi \u00e1tlaggal, ' + hSzoveg(b.t0) + ' \u00e9s ' + hSzoveg(b.t1) + ' k\u00f6z\u00f6tt sz\u00e1mol.';\r\n      if (ea.napi && this._nezet === 'bef') megj = 'Napi \u00e1rfolyammal: ' + forrasSz + '. Az ingadoz\u00e1s a napi v\u00e1ltoz\u00e1sokb\u00f3l, a t\u00e9nyleges \u00e9vi jegyz\u00e9si napsz\u00e1mmal \u00e9ves\u00edtve; a g\u00f6rd\u00fcl\u0151 id\u0151szakok minden lehets\u00e9ges kezd\u0151napra; a 12 havi mutat\u00f3k 365 napra.';\r\n      this._adat = { b: b, e: e, ea: ea };\r\n      this._alapKiir(b, ea);\r\n      this._versenySzamol(b);\r\n      this._befSzamol(b, ea);      \/\/ 1.9: napi m\u00f3dban a napi alaperedm\u00e9nyb\u0151l\r\n      this._dcaSzamol(b, e);\r\n      this._portSzamol(b, ea);\r\n      this._idozSzamol(b, e);\r\n      this._realSzamol(b, ea);\r\n      this._hitelSzamol(b);\r\n      if (b.napi && this._nezet === 'hitel') {\r\n        var ha = this._hitelNapiAllapot;\r\n        megj = ha === 'ok' ? 'Napi \u00e1rfolyammal: a hitel a felv\u00e9tel napj\u00e1nak, a r\u00e9szletek a havi esed\u00e9kess\u00e9g napj\u00e1nak \u00e1rfolyam\u00e1n (ha az nem jegyz\u00e9si nap, az el\u0151z\u0151 jegyz\u00e9si nap\u00e9n).' : ha;\r\n      }\r\n      this.$('#alap-napi-megj').textContent = b.napi ? megj : '';\r\n    }\r\n\r\n    \/* ---------- RENDSZERES V\u00c1S\u00c1RL\u00c1S ---------- *\/\r\n    _dcaSzamol(b, e) {\r\n      var A = DEVIZAK[b.a], B = DEVIZAK[b.b];\r\n      this._dca = null;\r\n      if (b.havi === null) { ['d1', 'd2', 'd3', 'd4'].forEach(function (n) { this._kiir(n, '', '\u2013'); }, this); this.$('#mondat-dca').textContent = 'Adj meg egy null\u00e1n\u00e1l nagyobb havi \u00f6sszeget (legfeljebb 100 milli\u00e1rd).'; return; }\r\n      var d = rendszeres(b, b.havi);\r\n      if (!d) return;\r\n      this._dca = d;\r\n      this._kiir('d1', 'Ennyit \u00e9rne ' + hBan(b.t1) + csillag(b.t1), penz(d.ertek, b.a), 'befizetve: ' + penz(d.befizetve, b.a) + ' (' + fmtSzam.format(d.honapok) + ' \u00d7 ' + penz(b.havi, b.a) + ')');\r\n      this._kiir('d2', 'Nyeres\u00e9g \/ vesztes\u00e9g', elojeles(d.valtozas), penz(d.ertek - d.befizetve, b.a), d.valtozas >= 0 ? 'poz' : 'neg');\r\n      this._kiir('d3', '\u00c9vi hozam (p\u00e9nzs\u00falyozott)', elojeles(d.eviHozam), 'a befizet\u00e9sek id\u0151z\u00edt\u00e9s\u00e9t is figyelembe v\u00e9ve');\r\n      this._kiir('d4', '\u00c1tlagos v\u00e9teli \u00e1rfolyam', arfSzoveg(b.a, b.b, d.atlagVetel), 'a v\u00e9teli h\u00f3napok \u00e1tlaga: ' + arfSzam(b.b, d.atlagPiaci) + ' ' + A.jel);\r\n      var m = '<p>Ha ' + hSzoveg(b.t0) + ' \u00e9s ' + hSzoveg(b.t1 - 1) + ' k\u00f6z\u00f6tt havonta ' + penz(b.havi, b.a) + bol(b.a) + ' ' + B.t + ' vett\u00e9l volna, \u00f6sszesen <strong>' + penz(d.egyseg, b.b) + '<\/strong> gy\u0171lt volna \u00f6ssze, ' + penz(d.befizetve, b.a) + ' befizet\u00e9sb\u0151l. ' +\r\n        hBan(b.t1) + csillag(b.t1) + ' ez ennyit \u00e9rne: <strong>' + penz(d.ertek, b.a) + '<\/strong>, ami \u00e9vi <strong>' + szazalek(d.eviHozam) + '<\/strong> p\u00e9nzs\u00falyozott hozam. ';\r\n      m += 'A havi v\u00e1s\u00e1rl\u00e1ssal \u00e1tlagosan ' + arfSzoveg(b.a, b.b, d.atlagVetel) + ' \u00e1rfolyamon vett\u00e9l, ' + (d.atlagVetel < d.atlagPiaci ? 'ami kedvez\u0151bb' : 'ami nem kedvez\u0151bb') + ', mint a v\u00e9teli h\u00f3napok \u00e1tlag\u00e1rfolyama (' + arfSzam(b.b, d.atlagPiaci) + '\\u00a0' + A.jel + '): az olcs\u00f3 h\u00f3napokban ugyanannyi p\u00e9nz\u00e9rt t\u00f6bb ' + B.nev + ' jutott.<\/p>';\r\n      m += '<p>Ha ugyanezt az \u00f6sszeget egyben, ' + hBan(b.t0) + ' v\u00e1ltottad volna, ma ennyit \u00e9rne: <strong>' + penz(d.egyben, b.a) + '<\/strong>. ' +\r\n        (d.egyben > d.ertek ? 'Ebben az id\u0151szakban teh\u00e1t az egy\u00f6sszeg\u0171 v\u00e1lt\u00e1s j\u00e1rt jobban, mert ' + nevelos(B) + ' \u00f6sszess\u00e9g\u00e9ben dr\u00e1gult, \u00e9s a kor\u00e1n v\u00e1ltott p\u00e9nz t\u00f6bbet \u00e9rt.' : 'Ebben az id\u0151szakban teh\u00e1t a havi v\u00e1s\u00e1rl\u00e1s j\u00e1rt jobban.') +\r\n        ' Az egy\u00f6sszeg\u0171 v\u00e1lt\u00e1sn\u00e1l viszont az eg\u00e9sz p\u00e9nz kezdett\u0151l ki van t\u00e9ve az \u00e1rfolyamnak, \u00e9s aki rossz pillanatban v\u00e1lt, nagyot vesz\u00edthet.';\r\n      m += '<\/p>';\r\n      if (d.betet !== null) {\r\n        var kul = d.ertek - d.betet;\r\n        m += '<p>Ha ugyanezeket a havi \u00f6sszegeket ' + A.ban + ', \u00e9vi ' + kamatSz(b.ka) + '-os ' + (b.ado ? 'nett\u00f3 ' : '') + 'kamatoz\u00e1s\u00fa bet\u00e9tbe tetted volna, ' + hBan(b.t1) + csillag(b.t1) + ' <strong>' + penz(d.betet, b.a) + '<\/strong> lenne. ' +\r\n          (Math.abs(kul) < d.befizetve * 0.0005 ? 'A k\u00e9t megold\u00e1s nagyj\u00e1b\u00f3l ugyanannyit hozott.' : 'A k\u00fcl\u00f6nbs\u00e9g ' + az(kul > 0 ? 'deviz\u00e1ban gy\u0171jt\u00e9s' : A.nev + 'bet\u00e9t') + ' jav\u00e1ra: <strong>' + penz(Math.abs(kul), b.a) + '<\/strong>.') + '<\/p>';\r\n      }\r\n      m += '<p>';\r\n      if (d.inflBef !== null) m += 'A befizet\u00e9sek mai p\u00e9nzben, a magyar infl\u00e1ci\u00f3val felszorozva ' + penz(d.inflBef, 'HUF') + '-nak felelnek meg; ehhez k\u00e9pest a deviz\u00e1ban gy\u0171jt\u00f6tt p\u00e9nz re\u00e1l\u00e9rt\u00e9ken ' + elojeles((d.ertek \/ d.inflBef - 1) * 100) + '.';\r\n      m += '<\/p>';\r\n      this.$('#mondat-dca').innerHTML = m.replace('<p><\/p>', '');\r\n      this.$('#cim-dca').textContent = 'Havi ' + penz(b.havi, b.a) + ' ' + B.ban + ', ' + A.ban + ' m\u00e9rve';\r\n      this.$('#megj-dca').textContent = 'Sz\u00fcrke vonal: az addig befizetett \u00f6sszeg.' + (b.a === 'HUF' ? ' Szaggatott: a befizet\u00e9sek az infl\u00e1ci\u00f3val felszorozva (ennyit kellett volna \u00e9rnie a v\u00e1s\u00e1rl\u00f3er\u0151 meg\u0151rz\u00e9s\u00e9hez).' : '') + (b.ka ? ' Z\u00f6ld: a befizet\u00e9sek ' + A.ban + ', \u00e9vi ' + kamatSz(b.ka) + ' kamattal.' : '') + ' Havi \u00e1tlag\u00e1rfolyamok, ' + (b.kb ? '\u00e9vi ' + kamatSz(b.kb) + (b.ado ? ' nett\u00f3' : '') + ' devizakamattal.' : 'kamat n\u00e9lk\u00fcl.');\r\n    }\r\n\r\n    \/* ---------- PORTF\u00d3LI\u00d3 DEVIZAMIX ---------- *\/\r\n    _portSzamol(b, ea) {\r\n      var N = !!(ea && ea.napi), P0 = N ? ea.sor[0] : b.t0, P1 = N ? ea.sor[ea.sor.length - 1] : b.t1;   \/\/ 1.9\r\n      var A = DEVIZAK[b.a], ossz = b.port.reduce(function (s, x) { return s + x.suly; }, 0);\r\n      this._port = null;\r\n      var osszEl = this.$('#port-ossz');\r\n      osszEl.className = 'port-ossz' + (b.port.length && Math.abs(ossz - 100) > 0.01 ? ' rossz' : '');\r\n      if (!b.port.length) { osszEl.textContent = 'Adj meg legal\u00e1bb egy deviz\u00e1t \u00e9s egy null\u00e1n\u00e1l nagyobb ar\u00e1nyt.'; return; }\r\n      osszEl.textContent = '\u00d6sszesen: ' + fmtSzam.format(ossz) + '%' + (Math.abs(ossz - 100) > 0.01 ? ' \u2013 nem 100%, ez\u00e9rt az ar\u00e1nyokat 100%-ra ar\u00e1nyos\u00edtva sz\u00e1molok.' : '') + ' Az \u00f6sszeg \u00e9s az id\u0151szak a fenti be\u00e1ll\u00edt\u00e1s (' + penz(b.osszeg, b.a) + ', ' + T.rovid(P0) + ' \u2013 ' + T.rovid(P1) + '); a ' + A.ban + ' tartott r\u00e9sz nem ingadozik.';\r\n      var uritPort = function (szoveg) {\r\n        ['p1', 'p2', 'p3', 'p4'].forEach(function (n) { this._kiir(n, '', '\u2013'); }, this);\r\n        this.$('#mondat-port').textContent = szoveg;\r\n        this.$('#tbody-port').innerHTML = ''; this.$('#thead-korr').innerHTML = ''; this.$('#tbody-korr').innerHTML = '';\r\n      }.bind(this);\r\n      var p;\r\n      if (N) {\r\n        \/\/ napi m\u00f3d: a mix deviz\u00e1inak napi sorai kellenek (bet\u00f6lt\u00e9s ut\u00e1n \u00fajrasz\u00e1mol)\r\n        var nk = this._napiKell(b.port.map(function (x) { return x.k; }).concat([b.a]).filter(function (k) { return k !== 'HUF'; }));\r\n        if (nk.varakozik) { uritPort('A devizamix napi \u00e1rfolyamainak bet\u00f6lt\u00e9se\u2026'); return; }\r\n        if (nk.hiba) { uritPort(nk.hiba); return; }\r\n        var bp = Object.create(b); bp.d0 = ea.r0.datum; bp.d1 = ea.r1.datum;   \/\/ a t\u00e9nyleges k\u00e9t jegyz\u00e9si nap\r\n        p = portfolioNapi(bp, b.port);\r\n        if (!p) { uritPort('Adj meg legal\u00e1bb egy, az alapdeviz\u00e1t\u00f3l elt\u00e9r\u0151 deviz\u00e1t.'); return; }\r\n        if (p.hiba || p.varakozik) { uritPort(p.hiba || 'A devizamix napi \u00e1rfolyamainak bet\u00f6lt\u00e9se\u2026'); return; }\r\n      }\r\n      var hianyzik = N ? [] : b.port.filter(function (x) { return x.k !== b.a && (par(b.a, x.k, b.t0) === undefined || par(b.a, x.k, b.t1) === undefined); });\r\n      if (hianyzik.length) {\r\n        ['p1', 'p2', 'p3', 'p4'].forEach(function (n) { this._kiir(n, '', '\u2013'); }, this);\r\n        this.$('#mondat-port').textContent = 'Erre az id\u0151szakra nincs adat: ' + hianyzik.map(function (x) { return x.k; }).join(', ') + '. V\u00e1lassz k\u00e9s\u0151bbi kezd\u0151 h\u00f3napot, vagy vedd ki a deviz\u00e1t a mixb\u0151l.';\r\n        this.$('#tbody-port').innerHTML = ''; this.$('#thead-korr').innerHTML = ''; this.$('#tbody-korr').innerHTML = ''; return;\r\n      }\r\n      if (!N) p = portfolio(b, b.port);\r\n      if (!p) { this.$('#mondat-port').textContent = 'Legal\u00e1bb 13 h\u00f3napos id\u0151szak kell a kock\u00e1zati mutat\u00f3khoz.'; return; }\r\n      this._port = p;\r\n      var devizak = p.egyenkent.filter(function (x) { return x.k !== b.a; });\r\n      var legkock = devizak.length ? devizak.reduce(function (m, x) { return x.ingadozas > m.ingadozas ? x : m; }) : null;\r\n      this._kiir('p1', 'A mix \u00e9rt\u00e9ke ' + T.ban(P1) + (N ? '' : csillag(b.t1)), penz(p.ertek, b.a), elojeles(p.valt) + ', \u00e9vi ' + szazalek(p.evi), p.valt >= 0 ? '' : '');\r\n      this._kiir('p2', 'Ingadoz\u00e1s (\u00e9ves\u00edtett)', szazalek(p.ingadozas), legkock ? 'a legkock\u00e1zatosabb t\u00e9tel\u00e9 (' + legkock.k + '): ' + szazalek(legkock.ingadozas) : '');\r\n      this._kiir('p3', 'Legnagyobb visszaes\u00e9s', szazalek(p.visszaeses.v), p.visszaeses.v < 0 ? T.rovid(p.visszaeses.csucs) + ' \u2192 ' + T.rovid(p.visszaeses.melypont) : 'nem volt', p.visszaeses.v < 0 ? 'neg' : '');\r\n      this._kiir('p4', 'Legrosszabb 12 h\u00f3nap', p.legrosszabb12 ? elojeles(p.legrosszabb12.v) : '\u2013', p.legrosszabb12 ? (p.legrosszabb12.d ? rovidNap(p.legrosszabb12.d0) + ' \u2013 ' + rovidNap(p.legrosszabb12.d) : hRovid(p.legrosszabb12.i - 12) + ' \u2013 ' + hRovid(p.legrosszabb12.i)) : '', p.legrosszabb12 && p.legrosszabb12.v < 0 ? 'neg' : '');\r\n      \/\/ magyar\u00e1zat: mennyit cs\u00f6kkentett a kock\u00e1zaton a kever\u00e9s\r\n      var m = '<p>A mix \u00e9vi ingadoz\u00e1sa <strong>' + szazalek(p.ingadozas) + '<\/strong>';\r\n      if (legkock) {\r\n        var sulyozott = p.egyenkent.reduce(function (s, x) { return s + x.suly * x.ingadozas; }, 0);\r\n        m += ', szemben a legkock\u00e1zatosabb t\u00e9tel (' + DEVIZAK[legkock.k].nev + ') ' + szazalek(legkock.ingadozas) + '-\u00e1val. ';\r\n        m += sulyozott > p.ingadozas + 0.05\r\n          ? 'Ez kevesebb, mint a t\u00e9telek ingadoz\u00e1s\u00e1nak s\u00falyozott \u00e1tlaga (' + szazalek(sulyozott) + '): a deviz\u00e1k nem mindig egyszerre mozognak, ez\u00e9rt r\u00e9szben kioltj\u00e1k egym\u00e1s kileng\u00e9seit. Ez a diverzifik\u00e1ci\u00f3 haszna.'\r\n          : 'A t\u00e9telek nagyj\u00e1b\u00f3l egy\u00fctt mozognak, ez\u00e9rt a kever\u00e9s alig cs\u00f6kkentette a kock\u00e1zatot.';\r\n      } else m += '.';\r\n      m += ' A legrosszabb pillanatban a mix a cs\u00facs\u00e1t\u00f3l ' + szazalek(-p.visszaeses.v) + '-kal esett vissza ' + A.ban + '.<\/p>';\r\n      this.$('#mondat-port').innerHTML = m;\r\n      this.$('#cim-port').textContent = 'A devizamix \u00e9rt\u00e9ke ' + A.ban + ', ' + T.rovid(N ? p.sor[0] : b.t0) + ' = 100';\r\n      this.$('#megj-port').textContent = 'Vastag vonal: a mix; v\u00e9kony vonalak: az egyes t\u00e9telek, mindegyik a ' + (N ? 'kezd\u0151nap' : 'kezd\u0151 h\u00f3nap') + ' = 100 alapon. V\u00e9tel \u00e9s tart\u00e1s, \u00fajras\u00falyoz\u00e1s \u00e9s kamat n\u00e9lk\u00fcl.' + (N ? ' Napi \u00e1rfolyamok, a t\u00e9telek k\u00f6z\u00f6s jegyz\u00e9si napjain; az egy\u00fcttmozg\u00e1s napi v\u00e1ltoz\u00e1sokb\u00f3l.' : '');\r\n      this.$('#tbody-port').innerHTML = p.egyenkent.map(function (x, j) {\r\n        return '<tr><td><span class=\"jelolo\" style=\"background:' + VERSENY_SZINEK[b.port[j].i] + '\"><\/span>' + x.k + ' \u2013 ' + DEVIZAK[x.k].nev + '<\/td><td>' + szazalek(x.suly * 100) + '<\/td><td>' + elojeles(x.valt) + '<\/td><td>' + szazalek(x.ingadozas) + '<\/td><td>' + szazalek(x.visszaeses) + '<\/td><\/tr>';\r\n      }).join('') + '<tr><td><strong>A mix<\/strong><\/td><td>100,0%<\/td><td><strong>' + elojeles(p.valt) + '<\/strong><\/td><td><strong>' + szazalek(p.ingadozas) + '<\/strong><\/td><td><strong>' + szazalek(p.visszaeses.v) + '<\/strong><\/td><\/tr>';\r\n      \/\/ korrel\u00e1ci\u00f3s t\u00e1bla (csak a nem-alap deviz\u00e1k k\u00f6z\u00f6tt van \u00e9rtelme)\r\n      var kk = p.kodok, kor = p.korr, idx = kk.map(function (k, j) { return j; }).filter(function (j) { return kk[j] !== b.a; });\r\n      this.$('#korr-doboz').hidden = idx.length < 2;\r\n      this.$('#thead-korr').innerHTML = idx.length < 2 ? '' : '<tr><th>Egy\u00fcttmozg\u00e1s ' + A.ban + '<\/th>' + idx.map(function (j) { return '<th>' + kk[j] + '<\/th>'; }).join('') + '<\/tr>';\r\n      this.$('#tbody-korr').innerHTML = idx.length < 2 ? '' : idx.map(function (j) {\r\n        return '<tr><td>' + kk[j] + '<\/td>' + idx.map(function (l) { var v = kor[j][l]; return '<td class=\"' + (j === l ? '' : v > 0.5 ? 'korr-poz' : v < 0 ? 'korr-neg' : '') + '\">' + (v === null ? '\u2013' : fmt2.format(v).replace('-', '\u2212')) + '<\/td>'; }).join('') + '<\/tr>';\r\n      }).join('');\r\n    }\r\n\r\n    \/* ---------- ALAPN\u00c9ZET ---------- *\/\r\n    _alapKiir(b, e) {\r\n      var A = DEVIZAK[b.a], B = DEVIZAK[b.b], huf = b.a === 'HUF', N = !!e.napi;\r\n      \/\/ id\u0151pontok sz\u00f6vegesen: havi m\u00f3dban h\u00f3nap, napi m\u00f3dban nap (a t\u00e9nyleges jegyz\u00e9si nap, ha a k\u00e9rt nem volt az)\r\n      var d1 = N ? (e.r1.kesobbi ? e.r1.datum : b.d1) : null;\r\n      var d0 = N ? (e.kezdesIgazitva ? e.r0.datum : b.d0) : null;   \/\/ 1.11: igaz\u00edtott kezd\u0151nap\r\n      var t0Ban = N ? napBan(d0) : hBan(b.t0);\r\n      var t1Ban = N ? napBan(d1) : hBan(b.t1) + csillag(b.t1);\r\n      var t0Sz = N ? napSzoveg(d0) : hSzoveg(b.t0);\r\n      var arfNev1 = N ? 'a ' + napI(e.r1.datum) + (e.forras === 'MNB' ? ' MNB-\u00e1rfolyamon' : ' \u00e1rfolyamon') : 'a ' + hI(b.t1) + ' \u00e1tlag\u00e1rfolyamon';\r\n      var pont = function (x) { return N ? napSzoveg(x.d) : hSzoveg(x.i); };\r\n      var szakasz = function (x) { return N ? rovidNap(x.d0) + ' \u2013 ' + rovidNap(x.d) : hRovid(x.i - 12) + ' \u2013 ' + hRovid(x.i); };\r\n      this._kiir(1, 'Ennyit \u00e9rne ' + t1Ban, penz(e.ertek, b.a), arfNev1 + ' (' + arfSzoveg(b.a, b.b, e.p1) + ')');\r\n      this.$('#kb-cimke').textContent = 'Kamat ' + B.ban;\r\n      this.$('#ka-cimke').textContent = 'Kamat ' + A.ban;\r\n      this._kiir(2, 'V\u00e1ltoz\u00e1s ' + t0Sz + ' \u00f3ta', elojeles(e.ertekValt), (e.ertek >= b.osszeg ? 'nyeres\u00e9g: ' : 'vesztes\u00e9g: ') + penz(e.ertek - b.osszeg, b.a) + (e.kb ? ' (kamattal)' : ''), e.ertekValt >= 0 ? 'poz' : 'neg');\r\n      this._kiir(3, '\u00c9vi \u00e1tlagos v\u00e1ltoz\u00e1s', elojeles(e.ertekEvi), fmt1.format(e.honapok \/ 12) + ' \u00e9v alatt' + (e.kb ? ', a devizakamattal egy\u00fctt; csak az \u00e1rfolyam: ' + elojeles(e.eviAtlag) : ', kamatos kamattal sz\u00e1molva'));\r\n      this.$('#stat-real').hidden = !huf;\r\n      this.$('#ered-alap').classList.toggle('harom', !huf);\r\n      if (huf) {\r\n        this._kiir(4, 'Infl\u00e1ci\u00f3 ut\u00e1n (re\u00e1l\u00e9rt\u00e9ken)', elojeles(e.realValt), 'a v\u00e1s\u00e1rl\u00f3er\u0151 v\u00e1ltoz\u00e1sa; ' + (e.ka ? 'forintbet\u00e9tben' : 'forintban tartva') + ': ' + elojeles((e.forintReal \/ b.osszeg - 1) * 100), e.realValt >= 0 ? 'poz' : 'neg');\r\n      }\r\n\r\n      \/\/ magyar\u00e1z\u00f3 mondatok\r\n      var m = '<p>Ha ' + t0Ban + ' <strong>' + penz(b.osszeg, b.a) + '<\/strong>' + bol(b.a) + ' ' + B.t + ' vett\u00e9l volna, <strong>' + penz(e.egyseg, b.b) + '<\/strong> lett volna a ti\u00e9d (' + arfSzoveg(b.a, b.b, e.p0) + '). ';\r\n      \/\/ napi m\u00f3dban: ha a k\u00e9rt napon nem volt jegyz\u00e9s, vagy a visszav\u00e1lt\u00e1s napj\u00e1ra m\u00e9g nincs \u00e1rfolyam\r\n      var jegyz = [];\r\n      if (N && e.kezdesIgazitva) jegyz.push('erre a devizap\u00e1rra ' + napSzoveg(e.r0.datum) + ' \u00f3ta van napi \u00e1rfolyam, ez\u00e9rt ett\u0151l a napt\u00f3l sz\u00e1moltam (a k\u00e9rt nap: ' + napSzoveg(e.kezdesIgazitva) + ')');\r\n      else if (N && e.r0.datum !== b.d0) jegyz.push(napSzoveg(b.d0) + ' nem volt jegyz\u00e9si nap, ez\u00e9rt az el\u0151z\u0151 jegyz\u00e9si nap (' + napSzoveg(e.r0.datum) + ') \u00e1rfolyam\u00e1val v\u00e1ltottam');\r\n      if (N && e.r1.kesobbi) jegyz.push(napSzoveg(b.d1) + (b.d1 === maISO() ? ' (ma)' : '') + ' \u00e1rfolyama m\u00e9g nincs k\u00f6zz\u00e9t\u00e9ve, ez\u00e9rt a legfrissebbel (' + napSzoveg(e.r1.datum) + ') sz\u00e1moltam');\r\n      else if (N && e.r1.datum !== b.d1) jegyz.push(napSzoveg(b.d1) + ' nem volt jegyz\u00e9si nap, ez\u00e9rt az el\u0151z\u0151 jegyz\u00e9si nap (' + napSzoveg(e.r1.datum) + ') \u00e1rfolyam\u00e1val v\u00e1ltottam vissza');\r\n      if (e.kb) m += '\u00c9vi ' + kamatSz(e.kb) + '-os ' + (e.ado ? 'nett\u00f3 (kamatad\u00f3 ut\u00e1ni) ' : '') + 'devizakamattal ez ' + t1Ban + ' ' + penz(e.egysegVeg, b.b) + ' lett volna. ';\r\n      m += t1Ban + ' ennyit \u00e9rne: <strong>' + penz(e.ertek, b.a) + '<\/strong> (' + arfSzoveg(b.a, b.b, e.p1) + '). ' + nevelos(B, true) + ' \u00e1ra ' + A.ban + ' ' + (e.valtozas >= 0 ? '<strong>' + szazalek(e.valtozas) + '<\/strong>-kal n\u0151tt' : '<strong>' + szazalek(-e.valtozas) + '<\/strong>-kal cs\u00f6kkent') + ', \u00e9vente \u00e1tlagosan ' + szazalek(Math.abs(e.eviAtlag)) + '-kal.' + (jegyz.length ? ' <em>' + jegyz.join('; ').replace(\/^.\/, function (c) { return c.toUpperCase(); }) + '.<\/em>' : '') + '<\/p>';\r\n      if (huf) {\r\n        m += '<p>K\u00f6zben az \u00e1rak Magyarorsz\u00e1gon <strong>' + szazalek(e.arszintValt) + '<\/strong>-kal emelkedtek: ugyanahhoz a v\u00e1s\u00e1rl\u00f3er\u0151h\u00f6z ma <strong>' + penz(e.kellett, 'HUF') + '<\/strong> kellene. ';\r\n        m += e.realValt >= 0\r\n          ? nevelos(B, true) + ' teh\u00e1t <strong>meg\u0151rizte \u00e9s ' + szazalek(e.realValt) + '-kal n\u00f6velte<\/strong> a p\u00e9nzed v\u00e1s\u00e1rl\u00f3erej\u00e9t, '\r\n          : nevelos(B, true) + ' teh\u00e1t <strong>nem v\u00e9dett meg teljesen az infl\u00e1ci\u00f3t\u00f3l<\/strong>: a v\u00e1s\u00e1rl\u00f3er\u0151d ' + szazalek(-e.realValt) + '-kal cs\u00f6kkent, ';\r\n        m += 'm\u00edg ' + (e.ka ? 'az \u00e9vi ' + kamatSz(e.ka) + '-os ' + (e.ado ? 'nett\u00f3 kamatoz\u00e1s\u00fa ' : '') + 'forintbet\u00e9tben' : 'a p\u00e1rnacih\u00e1ban, forintban') + ' tartott p\u00e9nz v\u00e1s\u00e1rl\u00f3ereje ' + szazalek(Math.abs((e.forintReal \/ b.osszeg - 1) * 100)) + '-kal ' + (e.forintReal >= b.osszeg ? 'n\u0151tt' : 'cs\u00f6kkent') + '.' + (e.ka ? '' : ' A forintbet\u00e9t kamata ezt a k\u00fcl\u00f6nbs\u00e9get a val\u00f3s\u00e1gban r\u00e9szben cs\u00f6kkentette; a kamatmez\u0151ben kipr\u00f3b\u00e1lhatod.') + '<\/p>';\r\n      }\r\n      if (e.ka) {\r\n        var jobb = e.ertek - e.betet;\r\n        m += '<p>Ha a p\u00e9nzt ' + A.ban + ' hagyod, \u00e9vi ' + kamatSz(e.ka) + '-os ' + (e.ado ? 'nett\u00f3 ' : '') + 'kamattal ' + t1Ban + ' <strong>' + penz(e.betet, b.a) + '<\/strong> lenne. ' +\r\n          (Math.abs(jobb) < b.osszeg * 0.0005 ? 'A k\u00e9t megold\u00e1s nagyj\u00e1b\u00f3l ugyanannyit hozott.' : 'A k\u00fcl\u00f6nbs\u00e9g ' + az(jobb > 0 ? B.ban : A.ban) + ' tart\u00e1s jav\u00e1ra: <strong>' + penz(Math.abs(jobb), b.a) + '<\/strong>' + (e.kb ? ' (a devizakamattal egy\u00fctt).' : ' (devizakamat n\u00e9lk\u00fcl).')) + '<\/p>';\r\n      }\r\n      this.$('#mondat-alap').innerHTML = m;\r\n      this.$('#cim-alap').textContent = penz(b.osszeg, b.a) + ' ' + B.ban + ' tartva, ' + A.ban + ' m\u00e9rve';\r\n      this.$('#megj-alap').textContent = (huf ? 'Szaggatott vonal: az az \u00f6sszeg, amely pontosan k\u00f6vette volna a magyar infl\u00e1ci\u00f3t (KSH). Ha a k\u00e9k g\u00f6rbe felette van, a deviza a v\u00e1s\u00e1rl\u00f3er\u0151t is meg\u0151rizte. ' : '') + (N ? 'Napi \u00e1rfolyamok (jegyz\u00e9si napok)' + (huf ? '; az \u00e9ves infl\u00e1ci\u00f3t napra elosztva' : '') + '.' : 'Havi \u00e1tlag\u00e1rfolyamok.');\r\n\r\n      \/\/ statisztika\r\n      var st = [\r\n        ['Legolcs\u00f3bb volt ' + nevelos(B), arfSzoveg(b.a, b.b, e.min.arf), pont(e.min)],\r\n        ['Legdr\u00e1g\u00e1bb volt ' + nevelos(B), arfSzoveg(b.a, b.b, e.max.arf), pont(e.max)],\r\n        ['\u00c1tlag\u00e1rfolyam az id\u0151szakban', arfSzoveg(b.a, b.b, e.atlag), fmtSzam.format(e.sor.length) + (N ? ' napi jegyz\u00e9sb\u0151l' : ' havi \u00e1tlagb\u00f3l')],\r\n        ['Legnagyobb 12 havi dr\u00e1gul\u00e1s', e.legjobb12 ? elojeles(e.legjobb12.v) : '\u2013', e.legjobb12 ? szakasz(e.legjobb12) : (N ? 'legal\u00e1bb egy \u00e9v kell' : 'legal\u00e1bb 13 h\u00f3nap kell')],\r\n        ['Legnagyobb 12 havi olcs\u00f3bbod\u00e1s', e.legrosszabb12 ? elojeles(e.legrosszabb12.v) : '\u2013', e.legrosszabb12 ? szakasz(e.legrosszabb12) : (N ? 'legal\u00e1bb egy \u00e9v kell' : 'legal\u00e1bb 13 h\u00f3nap kell')],\r\n        ['Most a cs\u00facst\u00f3l', elojeles((e.p1 \/ e.max.arf - 1) * 100), 'a ' + (N ? napI(e.max.d) : hI(e.max.i)) + ' cs\u00facshoz k\u00e9pest']\r\n      ];\r\n      this.$('#statok').innerHTML = st.map(function (s) { return '<div class=\"mini\"><p class=\"nev\">' + s[0] + '<\/p><div class=\"ertek\">' + s[1] + '<\/div><div class=\"al\">' + s[2] + '<\/div><\/div>'; }).join('');\r\n\r\n      \/\/ \u00e9venk\u00e9nti t\u00e1bla\r\n      this.$('#th-arf').textContent = '\u00c1tlag\u00e1rfolyam (' + B.egyseg + ' ' + B.jel + ', ' + A.jel + ')';\r\n      this.$('#th-ertek').textContent = 'Az \u00f6sszeg \u00e9rt\u00e9ke (' + A.jel + ')';\r\n      this.$('#ev-lab').textContent = N\r\n        ? '\u00c1tlag\u00e1rfolyam: az \u00e9v v\u00e1lasztott id\u0151szakba es\u0151 jegyz\u00e9si napjainak \u00e1tlaga. \u00c9rt\u00e9k: az \u00e9v utols\u00f3 jegyz\u00e9si napj\u00e1n (az utols\u00f3 \u00e9vben a visszav\u00e1lt\u00e1s napj\u00e1n).'\r\n        : '\u00c1tlag\u00e1rfolyam: a v\u00e1lasztott id\u0151szakba es\u0151 h\u00f3napok havi \u00e1tlagainak \u00e1tlaga. \u00c9rt\u00e9k: az \u00e9v utols\u00f3 v\u00e1lasztott h\u00f3napj\u00e1ban. * R\u00e9szleges h\u00f3nap.';\r\n      this._evSorok = this._evesBontas(b, e);\r\n      this.$('#tbody-ev').innerHTML = this._evSorok.map(function (r) {\r\n        return '<tr><td>' + r.ev + r.cs + '<\/td><td>' + arfSzam(b.b, r.atlag) + '<\/td><td>' + penz(r.ertek, b.a) + '<\/td><td>' + elojeles(r.valt) + '<\/td><td>' + (r.evesValt === null ? '\u2013' : elojeles(r.evesValt)) + '<\/td><\/tr>';\r\n      }).join('');\r\n    }\r\n\r\n    _evesBontas(b, e) {\r\n      var evek = {}, sorrend = [];\r\n      e.sor.forEach(function (s) {\r\n        var ev = hEv(s.i);\r\n        if (!evek[ev]) { evek[ev] = { ev: ev, ossz: 0, db: 0 }; sorrend.push(ev); }\r\n        evek[ev].ossz += s.arf; evek[ev].db++; evek[ev].utolso = s;\r\n      });\r\n      var elozo = null;\r\n      return sorrend.map(function (ev) {\r\n        var r = evek[ev], u = r.utolso;\r\n        var sor = { ev: ev, cs: u.d ? '' : csillag(u.i), atlag: r.ossz \/ r.db, ertek: u.ertek, valt: (u.ertek \/ b.osszeg - 1) * 100, evesValt: elozo ? (u.ertek \/ elozo - 1) * 100 : null, honap: u.i };\r\n        elozo = u.ertek;\r\n        return sor;\r\n      });\r\n    }\r\n\r\n    \/* ---------- DEVIZ\u00c1K VERSENYE ---------- *\/\r\n    _versenySzamol(b) {\r\n      var kodok = [], self = this;\r\n      this._r.querySelectorAll('[data-vs]').forEach(function (s, i) {\r\n        var k = s.value;\r\n        if (ismertDeviza(k) && k !== b.a && kodok.map(function (x) { return x.k; }).indexOf(k) < 0) kodok.push({ k: k, szin: VERSENY_SZINEK[i] });\r\n      });\r\n      var A = DEVIZAK[b.a];\r\n      this._r.querySelectorAll('.alap-nev').forEach(function (x) { x.textContent = A.ban; });\r\n      if (!kodok.length) { this._verseny = null; this.$('#mondat-verseny').textContent = 'V\u00e1lassz legal\u00e1bb egy deviz\u00e1t.'; this.$('#tbody-verseny').innerHTML = ''; return; }\r\n      \/\/ k\u00f6z\u00f6s id\u0151szak: a fenti id\u0151szak, a deviz\u00e1k k\u00f6z\u00f6s adattartom\u00e1ny\u00e1ra sz\u0171k\u00edtve\r\n      var tol = b.t0, ig = b.t1, kimaradt = [];\r\n      kodok = kodok.filter(function (x) {\r\n        var t = tartomany(b.a, x.k);\r\n        if (t.tol > b.t1 - 1 || t.ig < b.t0 + 1) { kimaradt.push(DEVIZAK[x.k].jel); return false; }\r\n        tol = Math.max(tol, t.tol); ig = Math.min(ig, t.ig); return true;\r\n      });\r\n      if (!kodok.length || ig <= tol) { this._verseny = null; this.$('#mondat-verseny').textContent = 'A v\u00e1lasztott deviz\u00e1kra ebben az id\u0151szakban nincs k\u00f6z\u00f6s adat.'; this.$('#tbody-verseny').innerHTML = ''; return; }\r\n      var adat = kodok.map(function (x) {\r\n        var p0 = par(b.a, x.k, tol), sor = [], csucs = 0, dd = 0;\r\n        for (var i = tol; i <= ig; i++) {\r\n          var p = par(b.a, x.k, i);\r\n          var idx = p === undefined ? null : p \/ p0 * 100;\r\n          sor.push(idx);\r\n          if (idx !== null) { csucs = Math.max(csucs, idx); dd = Math.min(dd, (idx \/ csucs - 1) * 100); }\r\n        }\r\n        var p1 = par(b.a, x.k, ig);\r\n        return { k: x.k, szin: x.szin, sor: sor, p0: p0, p1: p1, valt: (p1 \/ p0 - 1) * 100, evi: (Math.pow(p1 \/ p0, 12 \/ (ig - tol)) - 1) * 100, dd: dd };\r\n      });\r\n      this._verseny = { tol: tol, ig: ig, adat: adat, a: b.a };\r\n      var rend = adat.slice().sort(function (x, y) { return y.valt - x.valt; });\r\n      var leg = rend[0], legk = rend[rend.length - 1];\r\n      \/\/ a deviza neve kiemelve, n\u00e9vel\u0151vel: \"az <strong>angol font<\/strong>\"\r\n      var kiemel = function (x) { return nevelos(DEVIZAK[x.k]).replace(\/^(az?) (.*)$\/, '$1 <strong>$2<\/strong>'); };\r\n      var szoveg;\r\n      if (rend.length < 2) {\r\n        szoveg = nevelos(DEVIZAK[leg.k]) + ' \u00e1ra ' + A.ban + ' ' + szazalek(Math.abs(leg.valt)) + '-kal ' + (leg.valt >= 0 ? 'n\u0151tt.' : 'cs\u00f6kkent.');\r\n      } else if (legk.valt >= 0) {\r\n        \/\/ mind dr\u00e1gult (vagy nem v\u00e1ltozott)\r\n        szoveg = 'a v\u00e1lasztott deviz\u00e1k k\u00f6z\u00fcl ' + kiemel(leg) + ' dr\u00e1gult a legjobban ' + A.ban + ' (' + elojeles(leg.valt) + ', \u00e9vi ' + szazalek(leg.evi) + '), ' + kiemel(legk) + ' a legkev\u00e9sb\u00e9 (' + elojeles(legk.valt) + ').';\r\n      } else if (leg.valt < 0) {\r\n        \/\/ mind olcs\u00f3bb lett: a legkisebb es\u00e9s a \"legjobb\"\r\n        szoveg = (rend.length === 2 ? 'mindk\u00e9t v\u00e1lasztott deviza' : 'mindegyik v\u00e1lasztott deviza') + ' olcs\u00f3bb lett ' + A.ban + ': ' + kiemel(leg) + ' a legkev\u00e9sb\u00e9 (' + elojeles(leg.valt) + ', \u00e9vi ' + szazalek(leg.evi) + '), ' + kiemel(legk) + ' a legjobban (' + elojeles(legk.valt) + ').';\r\n      } else {\r\n        \/\/ vegyes: volt, ami dr\u00e1gult, \u00e9s volt, ami olcs\u00f3bb lett\r\n        szoveg = 'a v\u00e1lasztott deviz\u00e1k k\u00f6z\u00fcl ' + kiemel(leg) + ' dr\u00e1gult a legjobban ' + A.ban + ' (' + elojeles(leg.valt) + ', \u00e9vi ' + szazalek(leg.evi) + '), ' + kiemel(legk) + ' pedig a legjobban olcs\u00f3bb lett (' + elojeles(legk.valt) + ').';\r\n      }\r\n      var m = hSzoveg(tol) + ' \u00e9s ' + hSzoveg(ig) + ' k\u00f6z\u00f6tt ' + szoveg;\r\n      if (tol !== b.t0 || ig !== b.t1) m += ' Az id\u0151szakot a k\u00f6z\u00f6s adattartom\u00e1nyra sz\u0171k\u00edtettem.';\r\n      if (kimaradt.length) m += ' Kimaradt (nincs adat erre az id\u0151szakra): ' + kimaradt.join(', ') + '.';\r\n      this.$('#mondat-verseny').innerHTML = m;\r\n      this.$('#cim-verseny').textContent = 'Deviz\u00e1k \u00e1ra ' + A.ban + ', ' + hRovid(tol) + ' = 100';\r\n      this.$('#megj-verseny').textContent = 'Az index a deviza ' + A.ban + ' m\u00e9rt \u00e1r\u00e1t mutatja a kezd\u0151 h\u00f3naphoz k\u00e9pest. Havi \u00e1tlag\u00e1rfolyamok.';\r\n      this.$('#tbody-verseny').innerHTML = rend.map(function (x) {\r\n        return '<tr><td><span class=\"jelolo\" style=\"background:' + x.szin + '\"><\/span>' + DEVIZAK[x.k].jel + ' \u2013 ' + DEVIZAK[x.k].nev + '<\/td><td>' + arfSzam(x.k, x.p0) + '<\/td><td>' + arfSzam(x.k, x.p1) + '<\/td><td>' + elojeles(x.valt) + '<\/td><td>' + elojeles(x.evi) + '<\/td><td>' + szazalek(x.dd) + '<\/td><\/tr>';\r\n      }).join('');\r\n    }\r\n\r\n    \/* ---------- BEFEKTET\u0150I N\u00c9ZET ---------- *\/\r\n    _befSzamol(b, e) {\r\n      var A = DEVIZAK[b.a], B = DEVIZAK[b.b];\r\n      \/\/ 1.9: napi m\u00f3dban e a napi alaperedm\u00e9ny (szamitasNapi); P0 \/ P1 az id\u0151szak k\u00e9t v\u00e9ge (napi: sorelem, havi: h\u00f3napindex)\r\n      var N = !!e.napi, P0 = N ? e.sor[0] : b.t0, P1 = N ? e.sor[e.sor.length - 1] : b.t1;\r\n      \/\/ 1. kock\u00e1zat\r\n      var k = kockazat(b, e);\r\n      this._kock = k;\r\n      var dd = k.visszaeses;\r\n      this._kiir('k1', 'Ingadoz\u00e1s (\u00e9ves\u00edtett sz\u00f3r\u00e1s)', szazalek(k.ingadozas), 'ennyit mozog jellemz\u0151en egy \u00e9v alatt ' + nevelos(B) + ' \u00e1ra ' + A.ban);\r\n      this._kiir('k2', 'Legnagyobb visszaes\u00e9s', dd.v < 0 ? szazalek(dd.v) : '0,0%', dd.v < 0 ? T.rovid(dd.csucs) + ' cs\u00facs \u2192 ' + T.rovid(dd.melypont) + ' m\u00e9lypont' : 'nem volt visszaes\u00e9s', dd.v < 0 ? 'neg' : '');\r\n      var vissza = dd.v >= 0 ? '\u2013' : dd.vissza ? fmt1.format(evKul(dd.csucs, dd.vissza)) + ' \u00e9v' : 'm\u00e9g nem';\r\n      this._kiir('k3', 'Mennyi id\u0151 alatt j\u00f6tt vissza?', vissza, dd.v >= 0 ? '' : dd.vissza ? 'a cs\u00facst\u00f3l ' + T.rovid(dd.vissza) + '-ig' : 'a cs\u00facs \u00f3ta ' + fmt1.format(evKul(dd.csucs, N ? P1 : { i: b.t1 })) + ' \u00e9v telt el');\r\n      this._kiir('k4', 'Legrosszabb 12 h\u00f3nap', e.legrosszabb12 ? elojeles(e.legrosszabb12.v) : '\u2013', e.legrosszabb12 ? 'legjobb: ' + elojeles(e.legjobb12.v) : (N ? 'legal\u00e1bb egy \u00e9v kell' : 'legal\u00e1bb 13 h\u00f3nap kell'), e.legrosszabb12 && e.legrosszabb12.v < 0 ? 'neg' : '');\r\n      var szint = k.ingadozas < 6 ? 'alacsony' : k.ingadozas < 11 ? 'k\u00f6zepes' : 'magas';\r\n      this.$('#mondat-kock').innerHTML = '<p>' + T.sz(P0) + ' \u00e9s ' + T.sz(P1) + ' k\u00f6z\u00f6tt ' + nevelos(B) + ' ' + A.ban + ' m\u00e9rt ' + (N ? 'napi ' : '') + '\u00e1r\u00e1nak ingadoz\u00e1sa <strong>' + szint + '<\/strong> volt (\u00e9vi ' + szazalek(k.ingadozas) + '; \u00f6sszehasonl\u00edt\u00e1sul: egy sz\u00e9les r\u00e9szv\u00e9nyindex\u00e9 jellemz\u0151en 15\u201320%). ' +\r\n        (dd.v < 0 ? 'Aki a legrosszabbkor, ' + T.ban(dd.csucs) + ' v\u00e1ltott ' + B.ra + ', annak a p\u00e9nze ' + T.ban(dd.melypont) + ' m\u00e1r <strong>' + szazalek(-dd.v) + '<\/strong>-kal kevesebbet \u00e9rt ' + A.ban + ', \u00e9s ' + (dd.vissza ? T.ban(dd.vissza) + ' j\u00f6tt vissza a kiindul\u00f3 szintre.' : 'az\u00f3ta sem j\u00f6tt vissza a kiindul\u00f3 szintre.') : 'Az id\u0151szakban nem volt visszaes\u00e9s.') + '<\/p>';\r\n      this.$('#cim-kock').textContent = 'Visszaes\u00e9s a cs\u00facst\u00f3l (' + B.jel + '\/' + A.jel + ')';\r\n\r\n      \/\/ 2. g\u00f6rd\u00fcl\u0151 id\u0151szakok\r\n      var g = N ? gorduloNapi(b, e.sor, b.tartas) : gordulo(b, b.tartas);\r\n      this.$('#megj-gord').textContent = 'H\u00e1ny ' + (N ? 'kezd\u0151napon' : 'kezd\u0151 h\u00f3napban') + ' v\u00e9gz\u0151d\u00f6tt a tart\u00e1s az adott hozams\u00e1vban. Narancs: vesztes\u00e9g, k\u00e9k: nyeres\u00e9g.';\r\n      var gVege = function (x) { return g.napi ? T.rovid(x.veg) : hRovid(x.i + g.H); };\r\n      this._gord = g;\r\n      if (!g) {\r\n        ['g1', 'g2', 'g3', 'g4'].forEach(function (n) { this._kiir(n, '', '\u2013'); }, this);\r\n        this.$('#mondat-gord').textContent = 'A fent be\u00e1ll\u00edtott id\u0151szak ehhez t\u00fal r\u00f6vid: legal\u00e1bb k\u00e9t h\u00f3nap kell.';\r\n        this.$('#gord-bev').textContent = '';\r\n      } else {\r\n        this.$('#gord-bev').innerHTML = g.db > 1 && g.napi\r\n          ? 'Mi lett volna, ha a fent be\u00e1ll\u00edtott id\u0151szakban (' + T.sz(P0) + ' \u2013 ' + T.sz(P1) + ') <strong>b\u00e1rmelyik napon<\/strong> ' + B.t + ' veszel, \u00e9s ' + b.tartas + ' \u00e9vig tartod? A kezd\u0151nap ' + T.sz(g.tol) + ' \u00e9s ' + T.sz(g.utolsoKezdes) + ' k\u00f6z\u00e9 eshet, hogy a tart\u00e1s legk\u00e9s\u0151bb ' + T.ban(P1) + ' v\u00e9get \u00e9rjen: ez ' + szamNevelo(g.db) + ' ' + fmtSzam.format(g.db) + ' lehets\u00e9ges kezd\u0151nap (jegyz\u00e9si nap), mindegyikre lefut a sz\u00e1m\u00edt\u00e1s.' +\r\n            (b.tartasModositva ? ' <em>A v\u00e1lasztott tart\u00e1si id\u0151 hosszabb volt, mint az id\u0151szak, ez\u00e9rt a leghosszabb lehets\u00e9gessel sz\u00e1molok.<\/em>' : '') +\r\n            ' Ha hosszabb tart\u00e1si id\u0151t szeretn\u00e9l, \u00e1ll\u00edtsd kor\u00e1bbra az \u00e1tv\u00e1lt\u00e1s napj\u00e1t.'\r\n          : g.db > 1\r\n          ? 'Mi lett volna, ha a fent be\u00e1ll\u00edtott id\u0151szakban (' + hSzoveg(b.t0) + ' \u2013 ' + hSzoveg(b.t1) + ') <strong>b\u00e1rmelyik h\u00f3napban<\/strong> ' + B.t + ' veszel, \u00e9s ' + b.tartas + ' \u00e9vig tartod? A kezd\u0151 h\u00f3nap ' + hSzoveg(g.tol) + ' \u00e9s ' + hSzoveg(g.ig - g.H) + ' k\u00f6z\u00e9 eshet, hogy a tart\u00e1s legk\u00e9s\u0151bb ' + hBan(b.t1) + ' v\u00e9get \u00e9rjen: ez ' + szamNevelo(g.db) + ' ' + fmtSzam.format(g.db) + ' lehets\u00e9ges kezd\u00e9s, mindegyikre lefut a sz\u00e1m\u00edt\u00e1s.' +\r\n            (b.tartasModositva ? ' <em>A v\u00e1lasztott tart\u00e1si id\u0151 hosszabb volt, mint az id\u0151szak, ez\u00e9rt a leghosszabb lehets\u00e9gessel sz\u00e1molok.<\/em>' : '') +\r\n            ' Ha hosszabb tart\u00e1si id\u0151t szeretn\u00e9l, \u00e1ll\u00edtsd kor\u00e1bbra a kezd\u0151 h\u00f3napot (p\u00e9ld\u00e1ul a Rendszerv\u00e1lt\u00e1s gombbal).'\r\n          : 'A teljes id\u0151szakos tart\u00e1s egyetlen eset: ' + T.sz(P0) + ' \u2013 ' + T.sz(P1) + ', ez megegyezik a fenti eredm\u00e9nnyel. A g\u00f6rd\u00fcl\u0151 elemz\u00e9shez v\u00e1lassz r\u00f6videbb tart\u00e1si id\u0151t.';\r\n        this._kiir('g1', 'Nyeres\u00e9ggel z\u00e1rt', szazalek(g.nyero), 'az esetek ennyi sz\u00e1zal\u00e9k\u00e1ban \u00e9rt t\u00f6bbet ' + A.ban, g.nyero >= 50 ? 'poz' : 'neg');\r\n        if (g.inflVero !== null) this._kiir('g2', 'Az infl\u00e1ci\u00f3t is legy\u0151zte', szazalek(g.inflVero), 'ennyi esetben n\u0151tt a v\u00e1s\u00e1rl\u00f3er\u0151 is', g.inflVero >= 50 ? 'poz' : 'neg');\r\n        else this._kiir('g2', 'K\u00f6z\u00e9ps\u0151 eredm\u00e9ny (medi\u00e1n)', elojeles(g.median), 'az esetek fele enn\u00e9l jobb, fele rosszabb');\r\n        this._kiir('g3', 'Legrosszabb eset', elojeles(g.legrosszabb.v), T.rovid(g.legrosszabb) + ' \u2013 ' + gVege(g.legrosszabb), g.legrosszabb.v < 0 ? 'neg' : 'poz');\r\n        this._kiir('g4', 'Legjobb eset', elojeles(g.legjobb.v), T.rovid(g.legjobb) + ' \u2013 ' + gVege(g.legjobb), g.legjobb.v >= 0 ? 'poz' : 'neg');\r\n        this.$('#mondat-gord').innerHTML = g.db === 1 ? '' : '<p>' + b.tartas + ' \u00e9ves tart\u00e1sn\u00e1l ' + nevelos(B) + ' az esetek <strong>' + szazalek(g.nyero) + '<\/strong>-\u00e1ban \u00e9rt t\u00f6bbet ' + A.ban + ' a v\u00e9g\u00e9n, mint az elej\u00e9n' +\r\n          (g.inflVero !== null ? ', \u00e9s <strong>' + szazalek(g.inflVero) + '<\/strong>-\u00e1ban a magyar infl\u00e1ci\u00f3n\u00e1l is jobban dr\u00e1gult, vagyis a v\u00e1s\u00e1rl\u00f3er\u0151t is n\u00f6velte' : '') + '. A k\u00f6z\u00e9ps\u0151 eredm\u00e9ny ' + elojeles(g.median) + '. ' +\r\n          'Hosszabb tart\u00e1si id\u0151vel jellemz\u0151en n\u0151 a nyer\u0151 esetek ar\u00e1nya, \u00e9s sz\u0171k\u00fcl a legrosszabb eset: \u00e9rdemes kipr\u00f3b\u00e1lni a v\u00e1laszt\u00f3val.<\/p>';\r\n        this.$('#cim-gord').textContent = (b.tartas ? b.tartas + ' \u00e9ves' : 'Teljes id\u0151szakos') + ' tart\u00e1s eredm\u00e9nyei (' + B.jel + '\/' + A.jel + ')';\r\n      }\r\n\r\n      \/\/ 3. devizahat\u00e1s\r\n      this.$('#hozam-cimke').textContent = 'A befektet\u00e9s \u00e9vi hozama ' + B.ban;\r\n      this.$('#fx-bev').innerHTML = 'Tegy\u00fck fel, hogy ' + T.ban(P0) + ' ' + penz(b.osszeg, b.a) + ' \u00e9rt\u00e9kben vett\u00e9l egy ' + B.ban + ' jegyzett befektet\u00e9st (p\u00e9ld\u00e1ul egy r\u00e9szv\u00e9nyindexet k\u00f6vet\u0151 alapot), amely ' + B.ban + ' m\u00e9rve \u00e9vi ' + (b.hozam === null ? '\u2026' : szazalek(b.hozam)) + ' hozamot \u00e9rt el. Mennyit hozott ez ' + A.ban + ', \u00e9s ebb\u0151l mennyi j\u00f6tt az \u00e1rfolyamb\u00f3l?';\r\n      if (b.hozam === null) {\r\n        ['f1', 'f2', 'f3', 'f4'].forEach(function (n) { this._kiir(n, '', '\u2013'); }, this);\r\n        this._fx = null;\r\n        this.$('#mondat-fx').textContent = 'A hozamot \u221230 \u00e9s 50% k\u00f6z\u00f6tt adhatod meg.';\r\n      } else {\r\n        var f = devizahatas(b, e, b.hozam);\r\n        this._fx = f;\r\n        this._kiir('f1', '\u00c9vi hozam ' + A.ban + ' m\u00e9rve', elojeles(f.eviHuf), 'a befektet\u00e9s ' + B.ban + ': ' + elojeles(b.hozam), f.eviHuf >= 0 ? 'poz' : 'neg');\r\n        this._kiir('f2', 'Ebb\u0151l a devizahat\u00e1s', szazalekpont(f.hatasPont), f.hatasPont >= 0 ? 'az \u00e1rfolyam n\u00f6velte a hozamot' : 'az \u00e1rfolyam cs\u00f6kkentette a hozamot', f.hatasPont >= 0 ? 'poz' : 'neg');\r\n        this._kiir('f3', 'V\u00e9g\u00f6sszeg, fedezetlen\u00fcl', penz(f.fedezetlen, b.a), T.sz(P1));\r\n        this._kiir('f4', 'V\u00e9g\u00f6sszeg, devizafedezettel', penz(f.fedezett, b.a), 'k\u00fcl\u00f6nbs\u00e9g: ' + penz(f.fedezetlen - f.fedezett, b.a));\r\n        this.$('#mondat-fx').innerHTML = '<p>' + fmt1.format(e.honapok \/ 12) + ' \u00e9v alatt ' + penz(b.osszeg, b.a) + ' befektet\u00e9sed ' + A.ban + ' m\u00e9rve <strong>' + penz(f.fedezetlen, b.a) + '<\/strong> lett volna, \u00e9vi <strong>' + szazalek(f.eviHuf) + '<\/strong>. ' +\r\n          nevelos(B, true) + ' ' + (f.eviFx >= 0 ? 'er\u0151s\u00f6d\u00e9se' : 'gyeng\u00fcl\u00e9se') + ' \u00e9vente <strong>' + szazalekpontSzoveg(f.hatasPont) + 'tal<\/strong> ' + (f.hatasPont >= 0 ? 'n\u00f6velte' : 'cs\u00f6kkentette') + ' ' + az(A.ban) + ' m\u00e9rt hozamot. ' +\r\n          'Ha a devizakock\u00e1zatot teljesen kisz\u0171rted volna (fedezett befektet\u00e9s), ' + penz(f.fedezett, b.a) + ' lett volna a v\u00e9geredm\u00e9ny, ' + (f.fedezett > f.fedezetlen ? 'vagyis a fedez\u00e9s meg\u00e9rte volna.' : 'vagyis a fedez\u00e9s nem \u00e9rte volna meg.') + '<\/p>';\r\n        this.$('#cim-fx').textContent = '\u00c9vi ' + szazalek(b.hozam) + '-os ' + B.jel + '-befektet\u00e9s ' + A.ban + ' m\u00e9rve';\r\n      }\r\n    }\r\n\r\n    \/* ---------- ID\u0150Z\u00cdT\u00c9S ---------- *\/\r\n    _idozSzamol(b, e) {\r\n      var A = DEVIZAK[b.a], B = DEVIZAK[b.b], t = idozites(b);\r\n      this._idoz = t;\r\n      this.$('#idoz-bev').innerHTML = 'Egy \u00e9ven bel\u00fcl is sokat mozoghat az \u00e1rfolyam. Itt a fent be\u00e1ll\u00edtott id\u0151szak minden \u00e9v\u00e9re megn\u00e9zz\u00fck, melyik h\u00f3napban volt a legolcs\u00f3bb \u00e9s a legdr\u00e1g\u00e1bb ' + nevelos(B) + ' ' + A.ban + ', \u00e9s mennyit nyerhett\u00e9l volna a \u201et\u00f6k\u00e9letes\u201d id\u0151z\u00edt\u00e9ssel.';\r\n      if (!t) {\r\n        ['i1', 'i2', 'i3', 'i4'].forEach(function (n) { this._kiir(n, '', '\u2013'); }, this);\r\n        this.$('#mondat-idoz').textContent = 'Ehhez legal\u00e1bb k\u00e9t h\u00f3nap kell egy napt\u00e1ri \u00e9ven bel\u00fcl.';\r\n        this.$('#tbody-idoz').innerHTML = ''; return;\r\n      }\r\n      var leg = t.legnagyobb, teljes = t.teljesDb;\r\n      this._kiir('i1', '\u00c1tlagos k\u00fcl\u00f6nbs\u00e9g egy \u00e9ven bel\u00fcl', szazalek(t.atlagKulonbseg), 'a legolcs\u00f3bb \u00e9s a legdr\u00e1g\u00e1bb h\u00f3nap k\u00f6z\u00f6tt, ' + (teljes ? fmtSzam.format(teljes) + ' teljes \u00e9v \u00e1tlaga' : 'r\u00e9szleges \u00e9vekb\u0151l'));\r\n      this._kiir('i2', 'Legnagyobb k\u00fcl\u00f6nbs\u00e9g', szazalek(leg.kulonbseg), leg.ev + ': ' + HONAPOK_ROVID[hHo(leg.min.i)] + ' (legolcs\u00f3bb) \u2013 ' + HONAPOK_ROVID[hHo(leg.max.i)] + ' (legdr\u00e1g\u00e1bb)');\r\n      this._kiir('i3', 'A legjobb h\u00f3nap eltal\u00e1l\u00e1sa', elojeles(t.atlagNyeres), 'ennyivel t\u00f6bb ' + B.nev + ' jutott, mint egy \u00e1tlagos h\u00f3napban');\r\n      this._kiir('i4', 'A kezd\u0151 h\u00f3napod (' + hRovid(b.t0) + ')', t.hely ? t.hely + '. legolcs\u00f3bb' : '\u2013', t.hely ? t.ev0 + ' ' + fmtSzam.format(t.helyDb) + ' h\u00f3napja k\u00f6z\u00fcl' : '');\r\n      var m = '<p>A fent be\u00e1ll\u00edtott id\u0151szakban egy \u00e9ven bel\u00fcl \u00e1tlagosan <strong>' + szazalek(t.atlagKulonbseg) + '<\/strong> volt a k\u00fcl\u00f6nbs\u00e9g a legolcs\u00f3bb \u00e9s a legdr\u00e1g\u00e1bb h\u00f3nap \u00e1rfolyama k\u00f6z\u00f6tt. Aki minden \u00e9vben eltal\u00e1lta volna a legjobb h\u00f3napot, \u00e1tlagosan ' + szazalek(t.atlagNyeres) + '-kal t\u00f6bb ' + B.t + ' kapott volna ugyanannyi p\u00e9nz\u00e9rt, mint egy \u00e1tlagos h\u00f3napban. ';\r\n      if (t.hely) m += 'A te kezd\u0151 h\u00f3napod, ' + hSzoveg(b.t0) + ', ' + t.ev0 + ' ' + fmtSzam.format(t.helyDb) + ' h\u00f3napja k\u00f6z\u00fcl ' +\r\n        (t.hely === 1 ? 'a legolcs\u00f3bb volt: j\u00f3l id\u0151z\u00edtett\u00e9l. ' : t.hely === t.helyDb ? 'a legdr\u00e1g\u00e1bb volt. ' : szamNevelo(t.hely) + ' ' + t.hely + '. legolcs\u00f3bb volt. ');\r\n      if (Math.abs(e.valtozas) > 2 * t.atlagKulonbseg) m += 'Ehhez k\u00e9pest a teljes id\u0151szak alatt ' + nevelos(B) + ' \u00e1ra ' + szazalek(Math.abs(e.valtozas)) + '-kal ' + (e.valtozas >= 0 ? 'n\u0151tt' : 'cs\u00f6kkent') + ': hossz\u00fa t\u00e1von sokkal t\u00f6bbet sz\u00e1m\u00edt, mennyi ideig tartod a deviz\u00e1t, mint az, hogy melyik h\u00f3napban vetted.';\r\n      m += '<\/p>';\r\n      var szez = t.szezon.filter(function (x) { return x.v !== null; });\r\n      if (teljes >= 3 && szez.length === 12) {\r\n        var olcso = szez.reduce(function (a, x) { return x.v < a.v ? x : a; }), draga = szez.reduce(function (a, x) { return x.v > a.v ? x : a; });\r\n        m += '<p>' + fmtSzam.format(teljes) + ' teljes \u00e9v alapj\u00e1n \u00e1tlagosan <strong>' + HONAPOK[olcso.h] + '<\/strong> volt a legkedvez\u0151bb h\u00f3nap (' + szazalek(Math.abs(olcso.v)) + '-kal az \u00e9ves \u00e1tlag ' + (olcso.v <= 0 ? 'alatt' : 'felett') + '), ' + HONAPOK[draga.h] + ' a legdr\u00e1g\u00e1bb (' + elojeles(draga.v) + '). ' +\r\n          'De ' + HONAPOK[olcso.h] + ' csak ' + fmtSzam.format(olcso.legolcsobb) + ' \u00e9vben volt t\u00e9nylegesen az \u00e9v legolcs\u00f3bb h\u00f3napja, ez\u00e9rt erre nem \u00e9rdemes szab\u00e1lyt \u00e9p\u00edteni: a h\u00f3napok k\u00f6z\u00f6tti elt\u00e9r\u00e9s kicsi, \u00e9s \u00e9vr\u0151l \u00e9vre v\u00e1ltozik. Ha nem akarsz id\u0151z\u00edteni, a rendszeres (havi) v\u00e1s\u00e1rl\u00e1s kisim\u00edtja ezt a kock\u00e1zatot.<\/p>';\r\n      }\r\n      this.$('#mondat-idoz').innerHTML = m;\r\n      this.$('#cim-idoz').textContent = 'Melyik h\u00f3napban volt olcs\u00f3bb ' + nevelos(B) + '? (elt\u00e9r\u00e9s az \u00e9ves \u00e1tlagt\u00f3l)';\r\n      this.$('#megj-idoz').textContent = teljes ? 'A napt\u00e1ri h\u00f3napok \u00e1tlagos elt\u00e9r\u00e9se az adott \u00e9v \u00e1tlag\u00e1rfolyam\u00e1t\u00f3l, ' + fmtSzam.format(teljes) + ' teljes \u00e9v alapj\u00e1n. K\u00e9k: \u00e1tlagosan olcs\u00f3bb (j\u00f3 v\u00e9telre), narancs: \u00e1tlagosan dr\u00e1g\u00e1bb.' : 'A h\u00f3napok \u00f6sszevet\u00e9s\u00e9hez legal\u00e1bb egy teljes napt\u00e1ri \u00e9v kell az id\u0151szakban.';\r\n      this.$('#tbody-idoz').innerHTML = t.evek.map(function (r) {\r\n        return '<tr' + (r.teljes ? '' : ' class=\"reszleges\"') + '><td>' + r.ev + (r.teljes ? '' : ' (' + r.db + ' h\u00f3)') + '<\/td><td>' + HONAPOK_ROVID[hHo(r.min.i)] + ' (' + arfSzam(b.b, r.min.p) + ')<\/td><td>' + HONAPOK_ROVID[hHo(r.max.i)] + ' (' + arfSzam(b.b, r.max.p) + ')<\/td><td>' + szazalek(r.kulonbseg) + '<\/td><td>' + elojeles(r.nyeres) + '<\/td><\/tr>';\r\n      }).join('');\r\n    }\r\n\r\n    \/* ---------- RE\u00c1L\u00c1RFOLYAM ---------- *\/\r\n    _realSzamol(b, ea) {\r\n      var B = DEVIZAK[b.b], blokk = this.$('#real-blokk'), bev = this.$('#real-bev');\r\n      \/\/ 1.9: napi m\u00f3dban a napi alapsorb\u00f3l\r\n      var N = !!(ea && ea.napi), P1 = N ? ea.sor[ea.sor.length - 1] : b.t1;\r\n      var r = N ? realarfolyamNapi(b, ea.sor) : realarfolyam(b);\r\n      this._real = r && !r.rovid ? r : null;\r\n      if (!r) {\r\n        blokk.hidden = true;\r\n        bev.innerHTML = 'Ez az elemz\u00e9s <strong>forint\u2013eur\u00f3<\/strong> \u00e9s <strong>forint\u2013doll\u00e1r<\/strong> p\u00e1rra \u00e9rhet\u0151 el, mert ezekhez van megb\u00edzhat\u00f3, hossz\u00fa infl\u00e1ci\u00f3s id\u0151sor (EU-27: Eurostat, USA: Vil\u00e1gbank). V\u00e1laszd fent a \u201eMib\u0151l?\u201d mez\u0151ben a forintot, a deviz\u00e1nak pedig az eur\u00f3t vagy az amerikai doll\u00e1rt.';\r\n        return;\r\n      }\r\n      if (r.rovid) {\r\n        blokk.hidden = true;\r\n        bev.textContent = 'A re\u00e1l\u00e1rfolyamhoz legal\u00e1bb 12 h\u00f3napos id\u0151szak kell' + (b.b === 'EUR' ? ', \u00e9s az EU-s infl\u00e1ci\u00f3s adat ' + hTol(realKezdet('EUR')) + ' \u00e9rhet\u0151 el.' : '.');\r\n        return;\r\n      }\r\n      blokk.hidden = false;\r\n      var kulf = KULF_NEV[b.b], s0 = r.s0;\r\n      bev.innerHTML = 'Hossz\u00fa t\u00e1von az \u00e1rfolyam nagyj\u00e1b\u00f3l a k\u00e9t orsz\u00e1g infl\u00e1ci\u00f3j\u00e1nak k\u00fcl\u00f6nbs\u00e9g\u00e9t szokta k\u00f6vetni (relat\u00edv v\u00e1s\u00e1rl\u00f3er\u0151-parit\u00e1s): ha n\u00e1lunk gyorsabban n\u0151nek az \u00e1rak, a forint ennyivel gyeng\u00fcl. Mennyibe ker\u00fclne most ' + nevelos(B) + ', ha ' + T.sz(s0) + ' \u00f3ta csak az infl\u00e1ci\u00f3k\u00fcl\u00f6nb\u00f6zet mozgatta volna?' +\r\n        (N ? (s0.n > ea.sor[0].n ? ' <em>Az EU-s infl\u00e1ci\u00f3s adat ' + hTol(s0.i) + ' \u00e9rhet\u0151 el, ez\u00e9rt innen sz\u00e1molok.<\/em>' : '') : s0 > b.t0 ? ' <em>Az EU-s infl\u00e1ci\u00f3s adat ' + hTol(s0) + ' \u00e9rhet\u0151 el, ez\u00e9rt innen sz\u00e1molok.<\/em>' : '');\r\n      this._kiir('r1', 'Az infl\u00e1ci\u00f3k\u00fcl\u00f6nb\u00f6zet szerinti \u00e1rfolyam', arfSzoveg('HUF', b.b, r.ppp1), 'a t\u00e9nyleges ' + T.i(P1) + (N ? '' : csillag(b.t1)) + ': ' + arfSzoveg('HUF', b.b, r.p1));\r\n      this._kiir('r2', 'A t\u00e9nyleges \u00e1rfolyam ehhez k\u00e9pest', elojeles(r.elteres), r.elteres < 0 ? 'a forint re\u00e1lisan er\u0151s\u00f6d\u00f6tt' : 'a forint re\u00e1lisan gyeng\u00fclt');\r\n      this._kiir('r3', 'Infl\u00e1ci\u00f3 Magyarorsz\u00e1gon', szazalek(r.huInfl), kulf + ': ' + szazalek(r.kfInfl) + ', ' + T.rovid(s0) + ' \u00f3ta');\r\n      this._kiir('r4', 'A re\u00e1l\u00e1rfolyam az id\u0151szak \u00e1tlag\u00e1hoz k\u00e9pest', elojeles(r.atlElteres), r.atlElteres < 0 ? nevelos(B) + ' re\u00e1lisan olcs\u00f3bb az \u00e1tlagn\u00e1l' : nevelos(B) + ' re\u00e1lisan dr\u00e1g\u00e1bb az \u00e1tlagn\u00e1l');\r\n      var m = '<p>' + T.sz(s0) + ' \u00f3ta az \u00e1rak Magyarorsz\u00e1gon <strong>' + szazalek(r.huInfl) + '<\/strong>-kal, ' + kulf + ' ' + szazalek(r.kfInfl) + '-kal emelkedtek. Ha az \u00e1rfolyam csak ezt a k\u00fcl\u00f6nbs\u00e9get k\u00f6vette volna, ' + nevelos(B) + ' ma <strong>' + arfSzoveg('HUF', b.b, r.ppp1) + '<\/strong> lenne; a t\u00e9nyleges \u00e1rfolyam ' + arfSzoveg('HUF', b.b, r.p1) + '. ';\r\n      m += r.elteres < 0\r\n        ? 'A deviza teh\u00e1t ' + szazalek(-r.elteres) + '-kal olcs\u00f3bb ann\u00e1l, amit az infl\u00e1ci\u00f3 indokolna: <strong>a forint re\u00e1lisan er\u0151s\u00f6d\u00f6tt<\/strong>, vagyis forintban sz\u00e1molva dr\u00e1g\u00e1bb lett az orsz\u00e1g, mint a k\u00fclf\u00f6ld.'\r\n        : 'A deviza teh\u00e1t ' + szazalek(r.elteres) + '-kal dr\u00e1g\u00e1bb ann\u00e1l, amit az infl\u00e1ci\u00f3 indokolna: <strong>a forint re\u00e1lisan gyeng\u00fclt<\/strong>, vagyis forintban sz\u00e1molva olcs\u00f3bb lett az orsz\u00e1g a k\u00fclf\u00f6ldh\u00f6z k\u00e9pest.';\r\n      m += '<\/p><p>Re\u00e1l\u00e9rt\u00e9ken a forint az id\u0151szakban ' + T.ban(r.min) + ' volt a leger\u0151sebb (re\u00e1l\u00e1rfolyam-index: ' + fmt1.format(r.min.index) + '), ' + T.ban(r.max) + ' a leggyeng\u00e9bb (' + fmt1.format(r.max.index) + '); a kezd\u00e9s 100, a kisebb sz\u00e1m er\u0151sebb forintot jelent. Most ' + nevelos(B) + ' re\u00e1lisan ' + szazalek(Math.abs(r.atlElteres)) + '-kal ' + (r.atlElteres < 0 ? 'olcs\u00f3bb' : 'dr\u00e1g\u00e1bb') + ', mint az id\u0151szak \u00e1tlag\u00e1ban. ';\r\n      m += 'Felz\u00e1rk\u00f3z\u00f3 gazdas\u00e1gokn\u00e1l megszokott, hogy a valuta hossz\u00fa t\u00e1von re\u00e1lisan er\u0151s\u00f6dik (a termel\u00e9kenys\u00e9g gyorsabban n\u0151, ez az \u00fagynevezett Balassa\u2013Samuelson-hat\u00e1s), ez\u00e9rt a kezd\u00e9shez k\u00e9pesti elt\u00e9r\u00e9s \u00f6nmag\u00e1ban nem jelenti, hogy a forint t\u00fal er\u0151s vagy t\u00fal gyenge. A mutat\u00f3 azt jelzi, merre t\u00e9rt el az \u00e1rfolyam a \u201esemleges\u201d p\u00e1ly\u00e1t\u00f3l, nem azt, merre fog mozogni.<\/p>';\r\n      this.$('#mondat-real').innerHTML = m;\r\n      this.$('#cim-real').textContent = nevelos(B, true) + ' \u00e1ra forintban: t\u00e9nyleges \u00e9s infl\u00e1ci\u00f3k\u00fcl\u00f6nb\u00f6zet szerinti';\r\n      this.$('#megj-real').textContent = 'Infl\u00e1ci\u00f3k\u00fcl\u00f6nb\u00f6zet szerinti \u00e1rfolyam: a ' + T.i(s0) + ' \u00e1rfolyam a magyar (KSH) \u00e9s ' + (b.b === 'EUR' ? 'az EU-27 (Eurostat HICP)' : 'az amerikai (Vil\u00e1gbank)') + ' \u00e1rszint v\u00e1ltoz\u00e1s\u00e1nak ar\u00e1ny\u00e1ban tov\u00e1bbvezetve. Az \u00e9ves infl\u00e1ci\u00f3t ' + (N ? 'napokra' : 'havonta') + ' egyenletesen osztom el.' + (N ? ' Napi \u00e1rfolyamok.' : '');\r\n    }\r\n\r\n    \/* ---------- DEVIZAHITEL ---------- *\/\r\n    _hitelBemenet() {\r\n      var futamido = beolvas(this.$('#hf').value), kamat = beolvas(this.$('#hk').value);\r\n      var fk = this.$('#hfk').value.trim() === '' ? null : beolvas(this.$('#hfk').value);\r\n      var uk = this.$('#hu').value.trim() === '' ? null : beolvas(this.$('#hu').value);\r\n      var h = { futamido: futamido, kamat: kamat, forintKamat: fk, utanaKamat: uk, forintositas: this.$('#hz').checked, hiba: '',\r\n        valtozo: this.$('#hkt').value === 'valt', kamatstop: this.$('#hks').checked };   \/\/ 1.17\r\n      if (!(futamido >= 1 && futamido <= FUTAMIDO_MAX && Math.round(futamido) === futamido)) h.hiba = 'A futamid\u0151 1 \u00e9s ' + FUTAMIDO_MAX + ' \u00e9v k\u00f6z\u00f6tt lehet (eg\u00e9sz \u00e9v).';\r\n      else if (!(kamat >= 0 && kamat <= HITEL_KAMAT_MAX)) h.hiba = 'A hitel kamata 0 \u00e9s ' + HITEL_KAMAT_MAX + '% k\u00f6z\u00f6tt lehet.';\r\n      if (!(fk === null || (fk >= 0 && fk <= BETET_MAX))) h.forintKamat = null;\r\n      if (!(uk === null || (uk >= 0 && uk <= HITEL_KAMAT_MAX))) h.utanaKamat = null;\r\n      return h;\r\n    }\r\n    _hitelSzamol(b) {\r\n      var A = DEVIZAK[b.a], B = DEVIZAK[b.b], h = this._hitelBemenet(), self = this;\r\n      this._hitel = null;\r\n      this.$('#hk-cimke').textContent = (h.valtozo ? 'Kezd\u0151 kamat ' : 'Kamat ') + B.ban;\r\n      this.$('#hitel-hiba').textContent = h.hiba;\r\n      var urit = function (szoveg) {\r\n        ['h1', 'h2', 'h3', 'h4'].forEach(function (n) { self._kiir(n, '', '\u2013'); });\r\n        self.$('#mondat-hitel').textContent = szoveg || ''; self.$('#statok-hitel').innerHTML = ''; self.$('#hkt-sugo').textContent = '';\r\n      };\r\n      this._hitelNapiAllapot = '';\r\n      if (h.hiba) { urit(); return; }\r\n      \/\/ 1.9: napi m\u00f3dban a felv\u00e9tel \u00e9s a r\u00e9szletek napi \u00e1rfolyamon (a napi sor bet\u00f6lt\u00e9se ut\u00e1n \u00fajrasz\u00e1mol)\r\n      var d = null, N = false;\r\n      if (b.napi) {\r\n        var nk = this._napiKell([b.a, b.b].filter(function (k) { return k !== 'HUF'; }));\r\n        if (nk.varakozik) this._hitelNapiAllapot = 'Napi \u00e1rfolyamok bet\u00f6lt\u00e9se\u2026 addig a havi \u00e1tlaggal sz\u00e1molt eredm\u00e9ny l\u00e1tszik.';\r\n        else if (nk.hiba) this._hitelNapiAllapot = nk.hiba + ' Addig a havi \u00e1tlaggal sz\u00e1molt eredm\u00e9ny l\u00e1tszik.';\r\n        else if (!datumRendben(b.d0)) this._hitelNapiAllapot = 'Add meg a hitel felv\u00e9tel\u00e9nek napj\u00e1t.';\r\n        else {\r\n          d = devizahitelNapi(b, h, napiPar(b.a, b.b));\r\n          if (d && d.hiba) { this._hitelNapiAllapot = d.hiba + ' Addig a havi \u00e1tlaggal sz\u00e1molt eredm\u00e9ny l\u00e1tszik.'; d = null; }\r\n          else if (d) { N = true; this._hitelNapiAllapot = 'ok'; }\r\n        }\r\n      }\r\n      if (!N) d = devizahitel(b, h, this._tart.ig);\r\n      var K0 = N ? { d: b.d0 } : b.t0;   \/\/ a felv\u00e9tel ideje a sz\u00f6vegekhez\r\n      \/\/ a forintos\u00edt\u00e1s csak forint\/CHF, EUR, JPY p\u00e1rn\u00e1l \u00e9s 2015 febru\u00e1rj\u00e1n \u00e1tny\u00fal\u00f3 hiteln\u00e9l \u00e9rtelmezhet\u0151\r\n      var fs = this.$('#fortos-sor');\r\n      fs.hidden = !(d && d.forintosithato);\r\n      this.$('#hu').closest('.mezo').hidden = !h.forintositas;\r\n      if (!d || d.ures) { urit('A felv\u00e9tel h\u00f3napja ut\u00e1n m\u00e9g nincs \u00e1rfolyamadat: v\u00e1lassz kor\u00e1bbi kezd\u0151 h\u00f3napot.'); return; }\r\n      this._hitel = d; this._hitelH = h;\r\n      var u = d.utolso, fo = d.forintositas, alapFiz = d.alapFiz;\r\n      \/* 1.17: kamatoz\u00e1s. A \"fix\" p\u00e1rhuzamos sz\u00e1m\u00edt\u00e1s ugyanazzal az \u00e1rfolyamp\u00e1ly\u00e1val, v\u00e9gig a megadott kamattal:\r\n         a kett\u0151 k\u00fcl\u00f6nbs\u00e9ge a kamatv\u00e1ltoz\u00e1s hat\u00e1sa. *\/\r\n      var kp = d.kp, valt = kp.valtozo, dFix = null, kamatHatas = 0;\r\n      if (valt || (fo && fo.kp.valtozo) || (d.forint && d.forint.kp.valtozo)) {\r\n        var hf = Object.assign({}, h, { valtozo: false });\r\n        dFix = N ? devizahitelNapi(b, hf, napiPar(b.a, b.b)) : devizahitel(b, hf, this._tart.ig);\r\n        if (dFix && !dFix.ures && !dFix.hiba) kamatHatas = (d.fizetve + (d.lejart ? 0 : u.tart)) - (dFix.fizetve + (dFix.lejart ? 0 : dFix.utolso.tart));\r\n        else dFix = null;\r\n      }\r\n      this._hitelFix = dFix;\r\n      var stopVolt = h.valtozo && h.kamatstop && ((fo && fo.kp.stopHonap) || (d.forint && d.forint.kp.stopHonap));\r\n      this.$('#kamatstop-sor').hidden = !(h.valtozo && (b.a === 'HUF' || b.b === 'HUF') && (d.forint || d.forintosithato) && hEv(u.i) >= 2022 && (N ? b.d0 < '2021-10-27' : b.t0 <= hIdx(KAMATSTOP.szerzodesIg)));\r\n      var sugo = '';\r\n      if (!h.valtozo) sugo = 'Fix kamat: a teljes futamid\u0151re (a forintos\u00edt\u00e1sig) \u00e9vi ' + kamatSz(h.kamat) + '.';\r\n      else if (!valt) sugo = kp.hiba;\r\n      else sugo = 'V\u00e1ltoz\u00f3 kamat: ' + kp.nev + ' + ' + fmtKamat.format(kp.felar).replace('-', '\u2212') + ' sz\u00e1zal\u00e9kpont fel\u00e1r (felv\u00e9telkor a referenciakamat ' + kamatSz(kp.ref0) + ' volt). A kamat ' + KAMAT_IGAZITAS + ' havonta igazodik, \u00e9s minden kamatfordul\u00f3n \u00faj t\u00f6rleszt\u0151r\u00e9szlet j\u00f6n ki. A bankok egyoldal\u00fa kamatemel\u00e9sei nincsenek benne.';\r\n      if (h.valtozo && d.forint && !d.forint.kp.valtozo && d.forint.kp.hiba) sugo += ' Forinthitel: ' + d.forint.kp.hiba;\r\n      this.$('#hkt-sugo').textContent = sugo;\r\n      var tobblet = (d.fizetve - alapFiz) + (u.tart - u.alapTart);\r\n      \/* 1.18: a f\u0151 k\u00e1rty\u00e1k a havi t\u00f6rleszt\u0151r\u0151l. A kezdethez k\u00e9pesti emelked\u00e9s felbont\u00e1sa:\r\n         kamatr\u00e9sz = (a r\u00e9szlet a felv\u00e9telkori \u00e1rfolyamon most) \u2212 (ugyanez az els\u0151 h\u00f3napban),\r\n         \u00e1rfolyamr\u00e9sz = a teljes emelked\u00e9s \u2212 kamatr\u00e9sz; \u00edgy a kett\u0151 \u00f6sszege pontosan az emelked\u00e9s. *\/\r\n      var elso = d.elsoReszlet, s0 = d.sor[0];\r\n      var bont = function (x) { var kam = x.alapReszlet - s0.alapReszlet, ossz = x.reszlet - elso; return { ossz: ossz, kam: kam, arf: ossz - kam, sz: (x.reszlet \/ elso - 1) * 100 }; };\r\n      this._hitelBont = bont;\r\n      var bu = bont(u), bc = bont(d.csucs), csucsFo = fo && d.csucs.k > fo.k0;\r\n      this._kiir('h1', 'Havi t\u00f6rleszt\u0151 ' + (d.lejart ? 'a v\u00e9g\u00e9n' : 'most') + ' (' + T.rovid(u) + ')', penz(u.reszlet, b.a), 'kezdetben ' + penz(elso, b.a) + ' \u00b7 ' + elojelesPenzK(bu.ossz, b.a) + ' (' + elojeles(bu.sz) + ')', bu.sz > 0.5 ? 'neg' : bu.sz < -0.5 ? 'poz' : '');\r\n      this._kiir('h2', 'A legmagasabb havi t\u00f6rleszt\u0151', penz(d.csucs.reszlet, b.a), T.sz(d.csucs) + ' \u00b7 ' + elojelesPenzK(bc.ossz, b.a) + ' (' + elojeles(bc.sz) + ') a kezdethez k\u00e9pest', bc.sz > 0.5 ? 'neg' : '');\r\n      this._kiir('h3', 'Ebb\u0151l az \u00e1rfolyam miatt (havonta, a cs\u00facson)', elojelesPenzK(bc.arf, b.a), '\u00e1rfolyam: ' + arfSzoveg(b.a, b.b, d.p0) + ' \u2192 ' + arfSzoveg(b.a, b.b, csucsFo ? d.fixArf : d.csucs.arf) + (csucsFo ? ' (forintos\u00edtva)' : ''), bc.arf > 0.5 ? 'neg' : bc.arf < -0.5 ? 'poz' : '');\r\n      this._kiir('h4', 'Ebb\u0151l a kamat miatt (havonta, a cs\u00facson)', elojelesPenzK(bc.kam, b.a), (Math.abs(d.csucs.kamat - s0.kamat) < 0.005 ? 'a kamat nem v\u00e1ltozott (' + kamatSz(s0.kamat) + ')' : 'kamat: ' + kamatSz(s0.kamat) + ' \u2192 ' + kamatSz(d.csucs.kamat)), bc.kam > 0.5 ? 'neg' : bc.kam < -0.5 ? 'poz' : '');\r\n\r\n      var m = '<p>Ha ' + T.ban(K0) + ' <strong>' + penz(b.osszeg, b.a) + '<\/strong> hitelt vett\u00e9l fel ' + B.ban + ', ' + h.futamido + ' \u00e9vre, \u00e9vi ' + kamatSz(h.kamat) + '-os ' + (valt ? 'kezd\u0151, v\u00e1ltoz\u00f3 kamattal (' + kp.nev + ' + ' + fmtKamat.format(kp.felar).replace('-', '\u2212') + ' sz\u00e1zal\u00e9kpont)' : 'fix kamattal') + ', a tartoz\u00e1sod <strong>' + penz(d.L, b.b) + '<\/strong> lett (' + arfSzoveg(b.a, b.b, d.p0) + (N && d.r0.datum !== b.d0 ? ', ' + napI(d.r0.datum) + ' \u00e1rfolyam, mert ' + napSzoveg(b.d0) + ' nem volt jegyz\u00e9si nap' : '') + '). A havi r\u00e9szlet ' + B.ban + ' ' + (valt ? 'kezdetben ' : '') + penz(d.R, b.b) + ', ami ' + penz(d.elsoReszlet, b.a) + ' volt.';\r\n      if (d.csucs.reszlet > d.elsoReszlet * 1.005) m += ' A legmagasabb r\u00e9szletet ' + T.ban(d.csucs) + ' kellett fizetni: <strong>' + penz(d.csucs.reszlet, b.a) + '<\/strong>, ' + szazalek((d.csucs.reszlet \/ d.elsoReszlet - 1) * 100) + '-kal t\u00f6bbet, mint az elej\u00e9n.';\r\n      m += '<\/p>';\r\n      if (fo) {\r\n        m += '<p>A <strong>forintos\u00edt\u00e1skor<\/strong> (' + (N ? 'a ' + napI(fo.d) + ' r\u00e9szlett\u0151l' : hSzoveg(fo.i)) + ') a m\u00e9g fenn\u00e1ll\u00f3 ' + penz(fo.Ddev, b.b) + ' tartoz\u00e1s ' + arfSzoveg(b.a, b.b, d.fixArf) + ' r\u00f6gz\u00edtett \u00e1rfolyamon <strong>' + penz(fo.D, b.a) + '<\/strong> forinthitell\u00e9 v\u00e1lt, ' + (fo.D > b.osszeg ? 'ami m\u00e9g mindig t\u00f6bb, mint a felvett \u00f6sszeg. ' : 'ami m\u00e1r kevesebb, mint a felvett \u00f6sszeg. ') +\r\n          'A piaci \u00e1rfolyam ' + (N ? 'akkor' : 'abban a h\u00f3napban') + ' ' + arfSzoveg(b.a, b.b, fo.piaci) + ' volt. Innent\u0151l a r\u00e9szlet ' + penz(fo.R, b.a) + ', \u00e9s az \u00e1rfolyam m\u00e1r nem hat r\u00e1' + (h.utanaKamat !== null && h.utanaKamat !== h.kamat ? ' (\u00e9vi ' + kamatSz(h.utanaKamat) + '-os kamattal)' : '') + '.<\/p>';\r\n      } else if (d.forintosithato && !h.forintositas) {\r\n        m += '<p>A forintos\u00edt\u00e1st kikapcsoltad: a sz\u00e1m\u00edt\u00e1s \u00fagy folytat\u00f3dik, mintha a hitel ' + B.ban + ' maradt volna.<\/p>';\r\n      }\r\n      m += '<p>' + (d.lejart ? 'A futamid\u0151 v\u00e9g\u00e9ig' : N ? napIg(u.d) : napIg(hStr(u.i)) + csillag(u.i)) + ' \u00f6sszesen <strong>' + penz(d.fizetve, b.a) + '<\/strong> t\u00f6rleszt\u00e9st fizett\u00e9l' + (d.lejart ? '. ' : ', \u00e9s m\u00e9g <strong>' + penz(u.tart, b.a) + '<\/strong> a tartoz\u00e1s. ') +\r\n        'Ha az \u00e1rfolyam v\u00e9gig a felv\u00e9telkori szinten maradt volna, ' + (d.lejart ? '\u00f6sszesen ' + penz(alapFiz, b.a) + ' lett volna a t\u00f6rleszt\u00e9s. ' : 'eddig ' + penz(alapFiz, b.a) + '-ot fizett\u00e9l volna, \u00e9s ' + penz(u.alapTart, b.a) + ' lenne a tartoz\u00e1s. ') +\r\n        'Az \u00e1rfolyam ' + (tobblet >= 0 ? 'v\u00e1ltoz\u00e1sa miatt teh\u00e1t \u00f6sszesen <strong>' + penz(tobblet, b.a) + '<\/strong> a t\u00f6bbletteher.' : 'v\u00e1ltoz\u00e1sa teh\u00e1t \u00f6sszesen <strong>' + penz(-tobblet, b.a) + '<\/strong>-ot sp\u00f3rolt meg neked.') +\r\n        (fo && h.utanaKamat !== null && h.utanaKamat !== h.kamat ? ' (Ebben a forintos\u00edt\u00e1s ut\u00e1ni kamatv\u00e1ltoz\u00e1s hat\u00e1sa is benne van.)' : '') + '<\/p>';\r\n      \/\/ 1.17: a kamat p\u00e1ly\u00e1ja \u00e9s hat\u00e1sa (a fix kamat\u00fa v\u00e1ltozathoz k\u00e9pest, ugyanazzal az \u00e1rfolyammal)\r\n      if (dFix) {\r\n        m += '<p><strong>A kamat<\/strong> ' + (valt ? 'a referenciakamattal egy\u00fctt mozgott: a legalacsonyabb ' + kamatSz(d.kamatMin.kamat) + ' volt (' + T.sz(d.kamatMin) + '), a legmagasabb ' + kamatSz(d.kamatMax.kamat) + ' (' + T.sz(d.kamatMax) + ')' + (d.lejart ? ', a v\u00e9g\u00e9n ' : ', most ') + kamatSz(u.kamat) + '. ' : 'a forintos\u00edt\u00e1s ut\u00e1n a BUBOR-t k\u00f6vette' + (d.lejart ? ', a v\u00e9g\u00e9n ' : ', most ') + kamatSz(u.kamat) + '. ') +\r\n          'Ha v\u00e9gig fix ' + kamatSz(h.kamat) + '-os kamattal fizetted volna, ' + (Math.abs(kamatHatas) < b.osszeg * 0.005 ? 'nagyj\u00e1b\u00f3l ugyanennyibe ker\u00fclt volna.' : 'a befizetett \u00e9s a m\u00e9g h\u00e1tral\u00e9v\u0151 \u00f6sszeget egy\u00fctt n\u00e9zve <strong>' + penz(Math.abs(kamatHatas), b.a) + '<\/strong>-tal ' + (kamatHatas > 0 ? 'kevesebbe' : 't\u00f6bbe') + ' ker\u00fclt volna: a kamatv\u00e1ltoz\u00e1s ennyivel ' + (kamatHatas > 0 ? 'dr\u00e1g\u00edtotta' : 'olcs\u00f3bb\u00edtotta') + ' a hitelt.') +\r\n          (stopVolt ? ' A kamatstop ' + (fo && fo.kp.stopHonap ? 'a forintos\u00edtott hitel' : 'a forinthitel') + ' kamat\u00e1t 2022-t\u0151l a 2,02%-os BUBOR-szinthez k\u00f6t\u00f6tte.' : '') + '<\/p>';\r\n        if (valt && (b.b === 'CHF' || b.b === 'EUR') && b.a === 'HUF')\r\n          m += '<p class=\"sugo\">A magyar devizahitelek kamat\u00e1t a bankok 2009 \u00e9s 2011 k\u00f6z\u00f6tt a referenciakamatt\u00f3l f\u00fcggetlen\u00fcl, egyoldal\u00faan is emelt\u00e9k (a frankhitelekn\u00e9l jellemz\u0151en 1\u20132 sz\u00e1zal\u00e9kponttal), ezt a sz\u00e1m\u00edt\u00e1s nem tartalmazza. A t\u00e9nyleges kamatot a \u201eKezd\u0151 kamat\u201d magasabbra \u00e1ll\u00edt\u00e1s\u00e1val k\u00f6zel\u00edtheted.<\/p>';\r\n      }\r\n      if (d.fizetveReal !== null && hEv(u.i) > hEv(d.sor[0].i)) {\r\n        var rr = (u.reszletReal \/ d.elsoReszlet - 1) * 100;\r\n        m += '<p><strong>Re\u00e1l\u00e9rt\u00e9ken<\/strong> (a felv\u00e9telkori forint v\u00e1s\u00e1rl\u00f3erej\u00e9re \u00e1tsz\u00e1m\u00edtva, a KSH-infl\u00e1ci\u00f3 alapj\u00e1n) ' + (d.lejart ? '\u00f6sszesen ' : 'eddig ') + penz(d.fizetveReal, b.a) + ' a befizetett \u00f6sszeg' + (d.forint && d.forint.fizetveReal !== null ? ', a forinthiteln\u00e9l ' + penz(d.forint.fizetveReal, b.a) : '') + '. A ' + (d.lejart ? 'legutols\u00f3' : 'mostani') + ' r\u00e9szlet re\u00e1l\u00e9rt\u00e9ke ' + penz(u.reszletReal, b.a) + ', ' + (Math.abs(rr) < 0.5 ? 'annyi, mint az els\u0151 r\u00e9szlet\u00e9.' : szazalek(Math.abs(rr)) + '-kal ' + (rr > 0 ? 't\u00f6bb' : 'kevesebb') + ', mint az els\u0151 r\u00e9szlet\u00e9: ' + (rr > 0 ? 'az \u00e1rfolyam' + (dFix ? ' \u00e9s a kamat egy\u00fctt' : '') + ' gyorsabban dr\u00e1g\u00edtotta, mint ahogy az infl\u00e1ci\u00f3 elinfl\u00e1lta.' : 'az infl\u00e1ci\u00f3 gyorsabban cs\u00f6kkentette a terhet, mint ahogy az \u00e1rfolyam' + (dFix ? ' \u00e9s a kamat' : '') + ' n\u00f6velte.')) + '<\/p>';\r\n      }\r\n      if (d.forint) {\r\n        var kul = (d.fizetve + (d.lejart ? 0 : u.tart)) - (d.forint.fizetve + (d.lejart ? 0 : d.forint.tart));\r\n        var fv = d.forint.kp.valtozo;\r\n        m += '<p>\u00d6sszevet\u00e9s\u00fcl: egy ugyanekkor felvett, \u00e9vi ' + kamatSz(h.forintKamat) + '-os ' + (fv ? 'kezd\u0151, v\u00e1ltoz\u00f3 kamat\u00fa (' + d.forint.kp.nev + ' + ' + fmtKamat.format(d.forint.kp.felar).replace('-', '\u2212') + ' sz\u00e1zal\u00e9kpont) ' : 'fix kamat\u00fa ') + A.nev + 'hitel r\u00e9szlete ' + (fv ? 'kezdetben ' + penz(d.forint.R1, b.a) + ', legfeljebb ' + penz(d.forint.csucs.fR, b.a) + ' (' + T.sz(d.forint.csucs) + '), ' + (d.lejart ? 'a v\u00e9g\u00e9n ' : 'most ') + penz(d.forint.R, b.a) + ' lett volna. ' : 'v\u00e9gig ' + penz(d.forint.R, b.a) + ' lett volna. ') + (d.lejart ? '\u00d6sszesen ' + penz(d.forint.fizetve, b.a) + '-ot fizett\u00e9l volna. ' : 'Eddig ' + penz(d.forint.fizetve, b.a) + '-ot fizett\u00e9l volna, \u00e9s ' + penz(d.forint.tart, b.a) + ' lenne a tartoz\u00e1s. ') +\r\n          'A devizahitel ' + (d.lejart ? '' : 'a befizetett \u00e9s a m\u00e9g h\u00e1tral\u00e9v\u0151 \u00f6sszeget egy\u00fctt n\u00e9zve ') + (Math.abs(kul) < b.osszeg * 0.005 ? 'nagyj\u00e1b\u00f3l ugyanannyiba ker\u00fclt.' : kul > 0 ? '<strong>' + penz(kul, b.a) + '<\/strong>-tal dr\u00e1g\u00e1bbnak bizonyult.' : '<strong>' + penz(-kul, b.a) + '<\/strong>-tal olcs\u00f3bbnak bizonyult.') + '<\/p>';\r\n      }\r\n      if (b.a !== 'HUF') m = m.replace(\/(\\d) ([A-Z]{3})-(ot|tal)\/g, '$1 $2');   \/\/ nem forintn\u00e1l toldal\u00e9k n\u00e9lk\u00fcl\r\n      this.$('#mondat-hitel').innerHTML = m;\r\n      this.$('#cim-hr').textContent = 'Havi t\u00f6rleszt\u0151r\u00e9szlet ' + A.ban;\r\n      this.$('#megj-hr').textContent = 'K\u00e9k: a devizahitel r\u00e9szlete ' + (N ? 'az esed\u00e9kess\u00e9g napj\u00e1nak \u00e1rfolyam\u00e1n (ha az nem jegyz\u00e9si nap, az el\u0151z\u0151\u00e9n).' : 'az aktu\u00e1lis havi \u00e1tlag\u00e1rfolyamon.') + ' Sz\u00fcrke szaggatott: ha az \u00e1rfolyam a felv\u00e9telkori szinten maradt volna.' + (fo ? ' ' + (N ? napSzoveg(fo.d) + ' \u00f3ta' : hTol(fo.i)) + ' forintos\u00edtva, r\u00f6gz\u00edtett r\u00e9szlettel.' : '') + (d.forint ? ' Narancs: forinthitel ugyanakkora \u00f6sszegre \u00e9s futamid\u0151re.' : '') + ' Bankk\u00f6lts\u00e9gek \u00e9s \u00e1rfolyamr\u00e9s n\u00e9lk\u00fcl.';\r\n      if (d.fizetveReal !== null) this.$('#megj-hr').textContent += ' Z\u00f6ld pontozott: a r\u00e9szlet re\u00e1l\u00e9rt\u00e9ken, felv\u00e9telkori forintban (KSH-infl\u00e1ci\u00f3).';\r\n      if (d.forint && d.forint.kp.valtozo) this.$('#megj-hr').textContent = this.$('#megj-hr').textContent.replace('Narancs: forinthitel', 'Narancs: v\u00e1ltoz\u00f3 kamat\u00fa forinthitel');\r\n      this.$('#cim-hi').textContent = 'Kamatok \u00e9s infl\u00e1ci\u00f3 (\u00e9vi %)';\r\n      var refNevek = [REF_KAMAT[b.b] ? REF_KAMAT[b.b].nev : null, b.b !== 'HUF' && b.a === 'HUF' ? REF_KAMAT.HUF.nev : null].filter(Boolean);\r\n      this.$('#megj-hi').textContent = (b.a === 'HUF' ? 'Sz\u00fcrke s\u00e1v: magyar infl\u00e1ci\u00f3 (KSH, \u00e9ves \u00e1tlag). ' : '') + 'K\u00e9k: a hitel kamata' + (fo ? ' (a forintos\u00edt\u00e1s ut\u00e1n a forinthitel\u00e9)' : '') + '.' + (refNevek.length ? ' Szaggatott: ' + refNevek.map(nevelo).join(' \u00e9s ') + ' (OECD, 3 havi bankk\u00f6zi kamatok havi \u00e1tlaga, FRED).' : '') + (d.forint ? ' Narancs: a forinthitel kamata.' : '') + (stopVolt ? ' A kamatstop 2022-t\u0151l 2,02%-on tartotta a forinthitelek BUBOR-j\u00e1t.' : '');\r\n      this.$('#cim-ht').textContent = 'Fennmarad\u00f3 tartoz\u00e1s ' + A.ban;\r\n      this.$('#megj-ht').textContent = 'A m\u00e9g fenn\u00e1ll\u00f3 tartoz\u00e1s ' + A.ban + (N ? ' az adott r\u00e9szlet napj\u00e1nak \u00e1rfolyam\u00e1n' : ' az adott h\u00f3nap \u00e1rfolyam\u00e1n') + (fo ? ' (a forintos\u00edt\u00e1s ut\u00e1n a forinthitel tartoz\u00e1sa)' : '') + '. Sz\u00fcrke szaggatott: v\u00e1ltozatlan \u00e1rfolyammal.';\r\n      var st = [\r\n        ['Tartoz\u00e1s felv\u00e9telkor', penz(d.L, b.b), arfSzoveg(b.a, b.b, d.p0)],\r\n        ['Havi r\u00e9szlet ' + B.ban, penz(d.R, b.b), fmtSzam.format(d.n) + ' h\u00f3napon \u00e1t'],\r\n        ['\u00c1rfolyam ' + (d.lejart ? 'a v\u00e9g\u00e9n' : 'most'), arfSzoveg(b.a, b.b, u.arf), elojeles((u.arf \/ d.p0 - 1) * 100) + ' a felv\u00e9telhez k\u00e9pest'],\r\n        [d.lejart ? '\u00d6sszesen befizetve' : 'Eddig befizetve', penz(d.fizetve, b.a), fmtSzam.format(u.k) + ' r\u00e9szlet; a felvett \u00f6sszeg ' + fmtSzam.format(d.fizetve \/ b.osszeg * 100) + '%-a'],\r\n        ['Fennmarad\u00f3 tartoz\u00e1s', d.lejart ? penz(0, b.a) : penz(u.tart, b.a), d.lejart ? 'a hitel ' + T.ban(u) + ' lej\u00e1rt' : fmtSzam.format(d.n - u.k) + ' r\u00e9szlet van h\u00e1tra'],\r\n        ['Az \u00e1rfolyam miatt \u00f6sszesen', elojelesPenzK(tobblet, b.a), 'a teljes futamid\u0151 alatt (befizet\u00e9s' + (d.lejart ? ')' : ' + tartoz\u00e1s)')],\r\n        ['Kamat ' + (d.lejart ? 'a v\u00e9g\u00e9n' : 'most'), kamatSz(u.kamat), valt || (fo && fo.kp.valtozo) ? 'legalacsonyabb ' + kamatSz(d.kamatMin.kamat) + ', legmagasabb ' + kamatSz(d.kamatMax.kamat) : 'fix kamat'],\r\n        ['Futamid\u0151', h.futamido + ' \u00e9v', d.lejart ? 'lej\u00e1rt: ' + T.sz(u) : 'v\u00e9ge: ' + (N ? napSzoveg(d.vegDatum) : hSzoveg(b.t0 + d.n))]\r\n      ];\r\n      if (dFix) st.splice(6, 0, ['A kamat miatt \u00f6sszesen', elojelesPenzK(kamatHatas, b.a), 'a teljes futamid\u0151 alatt, a v\u00e9gig fix ' + kamatSz(h.kamat) + '-os kamathoz k\u00e9pest']);\r\n      if (d.fizetveReal !== null) st.push(['Befizetve re\u00e1l\u00e9rt\u00e9ken', penz(d.fizetveReal, b.a), 'felv\u00e9telkori forintban (KSH)']);\r\n      this.$('#statok-hitel').innerHTML = st.map(function (x) { return '<div class=\"mini\"><p class=\"nev\">' + x[0] + '<\/p><div class=\"ertek\">' + x[1] + '<\/div><div class=\"al\">' + x[2] + '<\/div><\/div>'; }).join('');\r\n    }\r\n\r\n    \/* ---------- NAPI \u00c1RFOLYAM (1.7) ----------\r\n       this._poz: [{ nev, k: devizak\u00f3d, v: v\u00e9tel napja '\u00c9\u00c9\u00c9\u00c9-HH-NN', e: elad\u00e1s napja vagy '' (nyitott) }]\r\n       this._pozKiv: a grafikonon mutatott poz\u00edci\u00f3 indexe\r\n       this._napiEredm: soronk\u00e9nt { p, i, s: napi sor, vk \/ ek: napiKeres eredm\u00e9nye, valt, nyitott, hibaSz } *\/\r\n    _pozAlap() { return [{ nev: '', k: 'USD', v: (new Date().getFullYear() - 1) + '-01-02', e: '' }]; }\r\n    _pozBetolt() {\r\n      var lista = null;\r\n      try { lista = JSON.parse(window.localStorage.getItem(POZ_TAROLO) || 'null'); } catch (e) { lista = null; }\r\n      var ki = this._pozTisztit(lista);\r\n      return ki.length ? ki : this._pozAlap();\r\n    }\r\n    \/\/ csak ismert deviza, \u00e9rv\u00e9nyes d\u00e1tum \u00e9s tiszt\u00edtott megnevez\u00e9s maradhat (localStorage \u00e9s link ellen is)\r\n    _pozTisztit(lista) {\r\n      if (!Array.isArray(lista)) return [];\r\n      return lista.slice(0, POZ_MAX).map(function (p) {\r\n        if (!p || typeof p !== 'object' || !napiDeviza(p.k)) return null;\r\n        return { nev: nevTisztit(p.nev), k: p.k, v: datumRendben(p.v) ? p.v : '', e: datumRendben(p.e) ? p.e : '', db: arTisztit(p.db), av: arTisztit(p.av), ae: arTisztit(p.ae) };\r\n      }).filter(Boolean);\r\n    }\r\n    \/\/ csak a felhaszn\u00e1l\u00f3 szerkeszt\u00e9se ut\u00e1n ment\u00fcnk (egy megnyitott megosztott link nem \u00edrja fel\u00fcl a saj\u00e1tot)\r\n    _pozMent() { try { window.localStorage.setItem(POZ_TAROLO, JSON.stringify(this._poz)); } catch (e) { \/* priv\u00e1t m\u00f3d, tiltott t\u00e1rol\u00f3 *\/ } }\r\n\r\n    _pozRajzol() {\r\n      var self = this, ma = maISO();\r\n      var opciok = function (kiv) { return NAPI_DEVIZAK.map(function (k) { return '<option value=\"' + k + '\"' + (k === kiv ? ' selected' : '') + ' title=\"' + DEVIZAK[k].nev + '\">' + k + '<\/option>'; }).join(''); };\r\n      if (this._pozKiv >= this._poz.length) this._pozKiv = Math.max(0, this._poz.length - 1);\r\n      this.$('#tbody-poz').innerHTML = this._poz.map(function (p, i) {\r\n        return '<tr data-i=\"' + i + '\"' + (i === self._pozKiv ? ' class=\"kivalasztott\"' : '') + '>' +\r\n          '<td data-c=\"Megnevez\u00e9s, darab\"><div class=\"ket\"><input class=\"nev\" data-m=\"nev\" type=\"text\" maxlength=\"24\" autocomplete=\"off\" placeholder=\"pl. AAPL\" value=\"' + esc(p.nev) + '\" aria-label=\"' + (i + 1) + '. poz\u00edci\u00f3 megnevez\u00e9se\">' +\r\n          '<input class=\"ar\" data-m=\"db\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" placeholder=\"darab\" value=\"' + esc(p.db || '') + '\" aria-label=\"Darabsz\u00e1m (\u00fcresen: az \u00e1r a teljes \u00f6sszeg)\" title=\"\u00dcresen: a v\u00e9tel\u00e1r \u00e9s az elad\u00e1si \u00e1r a teljes \u00f6sszeg\"><\/div><\/td>' +\r\n          '<td data-c=\"Deviza\"><select data-m=\"k\" aria-label=\"Deviza\">' + opciok(p.k) + '<\/select><\/td>' +\r\n          '<td data-c=\"V\u00e9tel napja, v\u00e9tel\u00e1r\"><div class=\"ket\"><input data-m=\"v\" type=\"date\" min=\"1990-01-01\" max=\"' + ma + '\" value=\"' + p.v + '\" aria-label=\"V\u00e9tel napja\">' +\r\n          '<input class=\"ar\" data-m=\"av\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" placeholder=\"v\u00e9tel\u00e1r ' + p.k + '\" value=\"' + esc(p.av || '') + '\" aria-label=\"V\u00e9tel\u00e1r deviz\u00e1ban (darabonk\u00e9nt)\"><\/div><\/td>' +\r\n          '<td class=\"arf\" data-o=\"v\" data-c=\"V\u00e9teli \u00e1rfolyam\">\u2013<\/td>' +\r\n          '<td data-c=\"Elad\u00e1s napja, elad\u00e1si \u00e1r\"><div class=\"ket\"><input data-m=\"e\" type=\"date\" min=\"1990-01-01\" max=\"' + ma + '\" value=\"' + p.e + '\" aria-label=\"Elad\u00e1s napja (\u00fcresen: nyitott poz\u00edci\u00f3)\" title=\"\u00dcresen: a poz\u00edci\u00f3 m\u00e9g nyitott\">' +\r\n          '<input class=\"ar\" data-m=\"ae\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" placeholder=\"' + (p.e ? 'elad\u00e1si \u00e1r ' : 'mai \u00e1r ') + p.k + '\" value=\"' + esc(p.ae || '') + '\" aria-label=\"Elad\u00e1si \u00e1r deviz\u00e1ban (darabonk\u00e9nt; nyitott poz\u00edci\u00f3n\u00e1l a mai \u00e1r)\"><\/div><\/td>' +\r\n          '<td class=\"arf\" data-o=\"e\" data-c=\"Elad\u00e1si \u00e1rfolyam\">\u2013<\/td>' +\r\n          '<td class=\"eredm\" data-o=\"valt\" data-c=\"Eredm\u00e9ny\">\u2013<\/td>' +\r\n          '<td class=\"gombok\"><button type=\"button\" class=\"ikon\" data-graf aria-pressed=\"' + (i === self._pozKiv) + '\" title=\"Grafikon ehhez a poz\u00edci\u00f3hoz\" aria-label=\"Grafikon\">\ud83d\udcc8<\/button> ' +\r\n          '<button type=\"button\" class=\"ikon torol\" data-torol title=\"Poz\u00edci\u00f3 t\u00f6rl\u00e9se\" aria-label=\"Poz\u00edci\u00f3 t\u00f6rl\u00e9se\">\u2715<\/button><\/td><\/tr>';\r\n      }).join('');\r\n      this.$('#poz-uj').disabled = this._poz.length >= POZ_MAX;\r\n    }\r\n    _pozJeloles() {\r\n      var kiv = this._pozKiv;\r\n      this._r.querySelectorAll('#tbody-poz tr[data-i]').forEach(function (tr) {\r\n        var ez = Number(tr.dataset.i) === kiv;\r\n        tr.classList.toggle('kivalasztott', ez);\r\n        tr.querySelector('[data-graf]').setAttribute('aria-pressed', String(ez));\r\n      });\r\n    }\r\n\r\n    _napiEsemenyek() {\r\n      var self = this, tb = this.$('#tbody-poz'), idozito;\r\n      var ujra = function () { clearTimeout(idozito); idozito = setTimeout(function () { self._napiSzamol(); }, 200); };\r\n      var mezo = function (e) {\r\n        var t = e.target, tr = t.closest('tr[data-i]');\r\n        if (!tr || !t.dataset.m) return;\r\n        var i = Number(tr.dataset.i), p = self._poz[i];\r\n        if (!p) return;\r\n        if (t.dataset.m === 'nev') { var tiszta = nevTisztit(t.value); if (tiszta !== t.value) t.value = tiszta; p.nev = tiszta; }\r\n        else if (t.dataset.m === 'k') {\r\n          p.k = napiDeviza(t.value) ? t.value : 'USD';\r\n          \/\/ a p\u00e9nznem a hely\u0151rz\u0151kben is l\u00e1tszik\r\n          tr.querySelector('[data-m=\"av\"]').placeholder = 'v\u00e9tel\u00e1r ' + p.k; tr.querySelector('[data-m=\"ae\"]').placeholder = (p.e ? 'elad\u00e1si \u00e1r ' : 'mai \u00e1r ') + p.k;\r\n        }\r\n        else if (t.dataset.m === 'db' || t.dataset.m === 'av' || t.dataset.m === 'ae') { var tt = arTisztit(t.value); if (tt !== t.value) t.value = tt; p[t.dataset.m] = tt; }\r\n        else {\r\n          p[t.dataset.m] = datumRendben(t.value) ? t.value : '';\r\n          if (t.dataset.m === 'e') tr.querySelector('[data-m=\"ae\"]').placeholder = (p.e ? 'elad\u00e1si \u00e1r ' : 'mai \u00e1r ') + p.k;\r\n        }\r\n        if (t.dataset.m !== 'nev' && self._pozKiv !== i) { self._pozKiv = i; self._pozJeloles(); }   \/\/ amit szerkeszt, azt mutatja a grafikon\r\n        self._pozMent(); ujra();\r\n      };\r\n      tb.addEventListener('input', mezo);\r\n      tb.addEventListener('change', mezo);\r\n      tb.addEventListener('click', function (e) {\r\n        var g = e.target.closest('button'); if (!g) return;\r\n        var i = Number(g.closest('tr').dataset.i);\r\n        if (g.hasAttribute('data-torol')) {\r\n          self._poz.splice(i, 1);\r\n          if (!self._poz.length) self._poz.push({ nev: '', k: 'USD', v: '', e: '' });\r\n          if (self._pozKiv > i || self._pozKiv >= self._poz.length) self._pozKiv = Math.max(0, self._pozKiv - 1);\r\n          self._pozMent(); self._pozRajzol(); self._napiSzamol();\r\n        } else if (g.hasAttribute('data-graf')) {\r\n          self._pozKiv = i; self._pozJeloles(); self._napiSzamol();\r\n        }\r\n      });\r\n      this.$('#poz-uj').addEventListener('click', function () {\r\n        if (self._poz.length >= POZ_MAX) return;\r\n        var utolso = self._poz[self._poz.length - 1];\r\n        self._poz.push({ nev: '', k: utolso ? utolso.k : 'USD', v: '', e: '', db: '', av: '', ae: '' });\r\n        self._pozKiv = self._poz.length - 1;\r\n        self._pozMent(); self._pozRajzol(); self._napiSzamol();\r\n        var uj = self.$('#tbody-poz tr:last-child input.nev'); if (uj) uj.focus();\r\n      });\r\n      \/\/ t\u00f6rl\u00e9s k\u00e9t kattint\u00e1ssal (b\u00f6ng\u00e9sz\u0151-p\u00e1rbesz\u00e9dablak n\u00e9lk\u00fcl)\r\n      var urit = this.$('#poz-urit'), uritIdo;\r\n      urit.addEventListener('click', function () {\r\n        if (!urit.dataset.biztos) {\r\n          urit.dataset.biztos = '1'; urit.textContent = 'Biztosan? Kattints \u00fajra';\r\n          clearTimeout(uritIdo); uritIdo = setTimeout(function () { delete urit.dataset.biztos; urit.textContent = '\u00d6sszes t\u00f6rl\u00e9se'; }, 3000);\r\n          return;\r\n        }\r\n        clearTimeout(uritIdo); delete urit.dataset.biztos; urit.textContent = '\u00d6sszes t\u00f6rl\u00e9se';\r\n        self._poz = [{ nev: '', k: 'USD', v: '', e: '' }]; self._pozKiv = 0;\r\n        self._pozMent(); self._pozRajzol(); self._napiSzamol();\r\n      });\r\n      this.$('#poz-csv').addEventListener('click', function () { self._napiCsv(); });\r\n    }\r\n\r\n    \/\/ A hi\u00e1nyz\u00f3 deviz\u00e1k napi sor\u00e1t bet\u00f6lti, k\u00f6zben a megl\u00e9v\u0151kkel azonnal sz\u00e1mol\r\n    _napiSzamol() {\r\n      var self = this;\r\n      if (!this._napiVar) this._napiVar = {};\r\n      this._poz.forEach(function (p) {\r\n        if (napiKesz[p.k] || self._napiVar[p.k]) return;\r\n        self._napiVar[p.k] = true;\r\n        delete napiHiba[p.k];\r\n        napiSorBetoltes(p.k).then(function (s) { napiKesz[p.k] = s; }, function (e) { napiHiba[p.k] = e && e.message || 'hiba'; })\r\n          .then(function () { delete self._napiVar[p.k]; self._napiKiir(); });\r\n      });\r\n      this._napiKiir();\r\n    }\r\n\r\n    _napiCella(k, r, kert, nyitott) {\r\n      if (r.hiba === 'korai') return '<small class=\"hiba-sz\">nincs adat ' + rovidNap(r.elso) + ' el\u0151tt<\/small>';\r\n      if (r.hiba === 'nincs_meg') return '<small class=\"figy\">m\u00e9g nincs \u00e1rfolyam (legfrissebb: ' + rovidNap(r.utolso) + ')<\/small>';\r\n      if (r.hiba === 'hezag') return '<small class=\"hiba-sz\">erre a napra nincs jegyz\u00e9s<\/small>';\r\n      var al = '', figy = false;\r\n      if (nyitott) { al = 'nyitott \u00b7 ' + (r.datum === kert ? 'mai \u00e1rfolyam' : 'legut\u00f3bbi: ' + rovidNap(r.datum)); figy = !!r.regi; }\r\n      else if (r.kesobbi) { al = rovidNap(kert) + ' m\u00e9g nincs k\u00f6zz\u00e9t\u00e9ve \u00b7 ' + rovidNap(r.datum) + ' \u00e1rfolyama'; figy = true; }\r\n      else if (r.datum !== kert) al = rovidNap(r.datum) + ' (' + napNev(r.datum) + ') \u00e1rfolyama';\r\n      return arfSzoveg('HUF', k, r.ertek) + (al ? '<small' + (figy ? ' class=\"figy\"' : '') + '>' + al + '<\/small>' : '');\r\n    }\r\n\r\n    _napiKiir() {\r\n      var self = this, ma = maISO(), eredm = [], forrasok = {}, frissKell = null, legfrissebb = '', hibak = {};\r\n      var sorokEl = this.$('#tbody-poz').querySelectorAll('tr[data-i]');\r\n      this._poz.forEach(function (p, i) {\r\n        var tr = sorokEl[i]; if (!tr) return;\r\n        var cV = tr.querySelector('[data-o=\"v\"]'), cE = tr.querySelector('[data-o=\"e\"]'), cX = tr.querySelector('[data-o=\"valt\"]');\r\n        var s = napiKesz[p.k], r = { p: p, i: i, nyitott: !p.e };\r\n        eredm.push(r);\r\n        cX.className = 'valt';\r\n        if (!s) {\r\n          var h = napiHiba[p.k];\r\n          if (h) hibak[h] = true;\r\n          cV.innerHTML = cE.innerHTML = '<small class=\"' + (h ? 'hiba-sz' : '') + '\">' + (h ? 'nem \u00e9rhet\u0151 el' : 'bet\u00f6lt\u00e9s\u2026') + '<\/small>';\r\n          cX.textContent = '\u2013';\r\n          return;\r\n        }\r\n        r.s = s; forrasok[s.forras] = true;\r\n        var utolso = s.datumok[s.datumok.length - 1]; if (utolso > legfrissebb) legfrissebb = utolso;\r\n        var eladas = p.e || ma;\r\n        if (p.e && p.v && p.e < p.v) r.hibaSz = 'az elad\u00e1s a v\u00e9tel el\u0151tti';\r\n        r.vk = p.v ? napiKeres(s, p.v) : null;\r\n        r.ek = napiKeres(s, eladas);\r\n        \/\/ nyitott poz\u00edci\u00f3: ha a szerver adata p\u00e1r napn\u00e1l r\u00e9gebbi, a legut\u00f3bbi \u00e1rfolyamot mutatjuk, figyelmeztet\u00e9ssel\r\n        if (r.nyitott && r.ek.hiba === 'nincs_meg') { var n = s.datumok.length - 1; r.ek = { ertek: s.arf[n], datum: s.datumok[n], i: n, kesobbi: true, regi: true }; }\r\n        cV.innerHTML = r.vk ? self._napiCella(p.k, r.vk, p.v, false) : '<small>add meg a v\u00e9tel napj\u00e1t<\/small>';\r\n        cE.innerHTML = self._napiCella(p.k, r.ek, eladas, r.nyitott);\r\n        cX.className = 'eredm';\r\n        if (r.vk && r.vk.ertek && r.ek.ertek && !r.hibaSz) {\r\n          r.valt = (r.ek.ertek \/ r.vk.ertek - 1) * 100;\r\n          var eg = DEVIZAK[p.k].egyseg;\r\n          \/\/ 1.14: forintos eredm\u00e9ny, ha a darabsz\u00e1m (vagy teljes \u00f6sszeg) \u00e9s a k\u00e9t \u00e1r megvan\r\n          var db = arErtek(p.db), av = arErtek(p.av), ae = arErtek(p.ae);\r\n          if (av !== null && ae !== null) {\r\n            var m = db !== null ? db : 1, V0 = m * av, V1 = m * ae;\r\n            var F0 = V0 * r.vk.ertek, F1 = V1 * r.ek.ertek;\r\n            r.ert = { db: db, av: av, ae: ae, V0: V0, V1: V1, F0: F0, F1: F1, E: F1 - F0, Ep: (F1 \/ F0 - 1) * 100,\r\n              reszveny: (V1 - V0) * r.vk.ertek, deviza: V1 * (r.ek.ertek - r.vk.ertek), devHozam: (V1 \/ V0 - 1) * 100 };\r\n            var E = r.ert.E;\r\n            cX.innerHTML = '<b class=\"' + (E > 0 ? 'poz' : E < 0 ? 'neg' : '') + '\">' + (E > 0 ? '+' : '') + penz(E, 'HUF') + '<\/b>' +\r\n              '<small>' + elojeles(r.ert.Ep) + ' forintban<\/small>' +\r\n              '<small>r\u00e9szv\u00e9ny: ' + (r.ert.reszveny >= 0 ? '+' : '') + penz(r.ert.reszveny, 'HUF') + '<\/small>' +\r\n              '<small>deviza: ' + (r.ert.deviza >= 0 ? '+' : '') + penz(r.ert.deviza, 'HUF') + '<\/small>' +\r\n              '<small>' + p.k + '\/HUF: ' + elojeles(r.valt) + '<\/small>';\r\n            \/\/ a k\u00e9t \u00e1rfolyamcell\u00e1ba a forint\u00e9rt\u00e9k is\r\n            cV.innerHTML += '<small>\u00e9rt\u00e9k: ' + penz(F0, 'HUF') + '<\/small>';\r\n            cE.innerHTML += '<small>\u00e9rt\u00e9k: ' + penz(F1, 'HUF') + '<\/small>';\r\n          } else {\r\n            cX.innerHTML = '<b class=\"' + (r.valt > 0.05 ? 'poz' : r.valt < -0.05 ? 'neg' : '') + '\">' + elojeles(r.valt) + '<\/b><small>' + p.k + ' forint\u00e1rfolyama<\/small>' +\r\n              (av !== null || ae !== null ? '<small>a forintos eredm\u00e9nyhez ' + (av === null ? 'a v\u00e9tel\u00e1r' : 'az elad\u00e1si \u00e1r') + ' is kell<\/small>' : '');\r\n          }\r\n        } else cX.innerHTML = r.hibaSz ? '<small class=\"hiba-sz\">' + r.hibaSz + '<\/small>' : '\u2013';\r\n        if (r.ek.kesobbi || r.ek.hiba === 'nincs_meg') frissKell = eladas;\r\n      });\r\n      if (frissKell && forrasok.MNB) napiFrissitesKeres(frissKell);\r\n      this._napiEredm = eredm;\r\n      \/\/ \u00e1llapotsor: forr\u00e1s \u00e9s a legfrissebb jegyz\u00e9s\r\n      var all = [];\r\n      if (forrasok.MNB) all.push('Forr\u00e1s: MNB hivatalos napi deviza\u00e1rfolyamok');\r\n      Object.keys(forrasok).forEach(function (f) { if (f !== 'MNB') all.push('Forr\u00e1s: ' + f); });\r\n      if (legfrissebb) all.push('legfrissebb jegyz\u00e9s: ' + napSzoveg(legfrissebb));\r\n      if (hibak['nincs-api'] || hibak.ures || hibak.hibas || hibak.hiba || Object.keys(hibak).length)\r\n        all.push('Egyes deviz\u00e1k napi \u00e1rfolyamai most nem \u00e9rhet\u0151k el, pr\u00f3b\u00e1ld \u00fajra k\u00e9s\u0151bb');\r\n      var allSz = all.join(' \u00b7 ');\r\n      this.$('#napi-allapot').textContent = allSz + (allSz && !\/\\.$\/.test(allSz) ? '.' : '');\r\n      this._napiOsszesito();\r\n      this._napiMondat();\r\n      if (this._nezet === 'napi') this._rajzol();\r\n    }\r\n\r\n    \/\/ \u00d6sszes\u00edt\u0151 a be\u00e1razott poz\u00edci\u00f3kra (1.14): forintos eredm\u00e9ny \u00e9s felbont\u00e1sa\r\n    \/\/ \u00d6sszes\u00edt\u00e9s a be\u00e1razott poz\u00edci\u00f3kra (1.14\u20131.16): k\u00e1rty\u00e1k, \u00e9ves bont\u00e1s; az eredm\u00e9ny this._napiOssz-ba\r\n    _napiOsszesito() {\r\n      var osszes = this._napiEredm || [], lista = osszes.filter(function (r) { return r.ert; });\r\n      var arNelkul = osszes.filter(function (r) { return !r.ert && r.vk && r.vk.ertek && !r.hibaSz; }).length;\r\n      this.$('#ered-napi').hidden = !lista.length;\r\n      this.$('#doboz-napi-ev').hidden = !lista.length;\r\n      this._napiOssz = null;\r\n      if (!lista.length) return;\r\n      var gyujt = function (l) { return l.reduce(function (a, r) { a.F0 += r.ert.F0; a.F1 += r.ert.F1; a.R += r.ert.reszveny; a.D += r.ert.deviza; a.db++; a.ny += r.nyitott ? 1 : 0; return a; }, { F0: 0, F1: 0, R: 0, D: 0, db: 0, ny: 0 }); };\r\n      var o = gyujt(lista), E = o.F1 - o.F0;\r\n      \/\/ \u00e9v szerint (az elad\u00e1s \u00e9ve; nyitott k\u00fcl\u00f6n)\r\n      var evek = {};\r\n      lista.forEach(function (r) { var k = r.nyitott ? 'nyitott' : r.p.e.slice(0, 4); (evek[k] = evek[k] || []).push(r); });\r\n      var kulcsok = Object.keys(evek).sort(function (x, y) { return x === 'nyitott' ? 1 : y === 'nyitott' ? -1 : x < y ? -1 : 1; });\r\n      var evSorok = kulcsok.map(function (k) { var g = gyujt(evek[k]); g.kulcs = k; return g; });\r\n      this._napiOssz = { lista: lista, o: o, E: E, evSorok: evSorok, arNelkul: arNelkul };\r\n      this._kiir('n1', 'Eredm\u00e9ny forintban (' + lista.length + ' poz\u00edci\u00f3)', elojelesPenz(E), elojeles((o.F1 \/ o.F0 - 1) * 100) + ' a v\u00e9teli \u00e9rt\u00e9khez k\u00e9pest' + (o.ny ? '; ebb\u0151l ' + o.ny + ' nyitott, a megadott mai \u00e1ron' : ''), E >= 0 ? 'poz' : 'neg');\r\n      this._kiir('n2', 'Ebb\u0151l a r\u00e9szv\u00e9nyek', elojelesPenz(o.R), 'az \u00e1rfolyamv\u00e1ltoz\u00e1s deviz\u00e1ban, a v\u00e9teli \u00e1rfolyamon', o.R >= 0 ? 'poz' : 'neg');\r\n      this._kiir('n3', 'Ebb\u0151l a deviza\u00e1rfolyam', elojelesPenz(o.D), 'a deviz\u00e1k forint\u00e1rfolyam\u00e1nak v\u00e1ltoz\u00e1sa', o.D >= 0 ? 'poz' : 'neg');\r\n      this._kiir('n4', 'V\u00e9teli \u2192 elad\u00e1si \u00e9rt\u00e9k', penz(o.F0, 'HUF'), '\u2192 ' + penz(o.F1, 'HUF') + (o.ny ? ' (nyitottak: mai \u00e9rt\u00e9k)' : ''));\r\n      var td = function (x) { return '<td class=\"' + (x > 0 ? 'poz-sz' : x < 0 ? 'neg-sz' : '') + '\">' + elojelesPenz(x) + '<\/td>'; };\r\n      this.$('#tbody-napi-ev').innerHTML = evSorok.map(function (g) {\r\n        return '<tr><td>' + (g.kulcs === 'nyitott' ? 'nyitott' : g.kulcs) + '<\/td><td>' + g.db + '<\/td><td>' + penz(g.F0, 'HUF') + '<\/td><td>' + penz(g.F1, 'HUF') + '<\/td>' + td(g.F1 - g.F0) + td(g.R) + td(g.D) + '<\/tr>';\r\n      }).join('') + (evSorok.length > 1 ? '<tr class=\"ossz\"><td><strong>\u00d6sszesen<\/strong><\/td><td>' + o.db + '<\/td><td>' + penz(o.F0, 'HUF') + '<\/td><td>' + penz(o.F1, 'HUF') + '<\/td>' + td(E) + td(o.R) + td(o.D) + '<\/tr>' : '');\r\n    }\r\n\r\n    _napiJo(r) { return !!(r && r.s && r.vk && r.vk.ertek && r.ek && r.ek.ertek && !r.hibaSz); }\r\n\r\n    \/\/ A poz\u00edci\u00f3 neve a sz\u00f6vegekhez \u00e9s a grafikonhoz: a megnevez\u00e9s, vagy \"3. poz\u00edci\u00f3 (USD)\"\r\n    _pozNev(r) { return r.p.nev || (r.i + 1) + '. poz\u00edci\u00f3 (' + r.p.k + ')'; }\r\n\r\n    \/* \u00d6sszefoglal\u00f3 sz\u00f6veg az \u00d6SSZES be\u00e1razott poz\u00edci\u00f3r\u00f3l (1.16), \u00e9s a kieg\u00e9sz\u00edt\u0151 devizagrafikon\r\n       feliratai a \ud83d\udcc8 gombbal v\u00e1lasztott poz\u00edci\u00f3hoz. *\/\r\n    _napiMondat() {\r\n      var self = this, el = this.$('#mondat-napi'), O = this._napiOssz;\r\n      \/\/ n\u00e9vel\u0151vel, a kiejt\u00e9s szerint: \"az AAPL\", \"a Tencent\"\r\n      var nevS = function (r) { var n = self._pozNev(r); return az(n).split(' ')[0] + ' <strong>' + esc(n) + '<\/strong>'; };\r\n      var m = '';\r\n      if (O) {\r\n        var o = O.o, l = O.lista;\r\n        m += '<p>' + (l.length === 1 ? 'A be\u00e1razott poz\u00edci\u00f3' : 'A be\u00e1razott ' + l.length + ' poz\u00edci\u00f3 egy\u00fctt') + ' <strong>' + elojelesPenz(O.E) + '<\/strong> eredm\u00e9nyt ' + (O.E >= 0 ? 'hozott' : 'jelent') + ' forintban (' + elojeles((o.F1 \/ o.F0 - 1) * 100) + ' a ' + penz(o.F0, 'HUF') + ' v\u00e9teli \u00e9rt\u00e9khez k\u00e9pest). ' +\r\n          'Ebb\u0151l a r\u00e9szv\u00e9nyek \u00e1rfolyamv\u00e1ltoz\u00e1sa ' + elojelesPenz(o.R) + ', a deviza\u00e1rfolyamok v\u00e1ltoz\u00e1sa ' + elojelesPenz(o.D) + '.';\r\n        if (o.D * o.R < 0 && Math.abs(o.D) > 0.25 * Math.abs(o.R)) m += ' A deviza\u00e1rfolyam ' + (o.D < 0 ? 'jelent\u0151sen rontott' : 'jelent\u0151sen jav\u00edtott') + ' az eredm\u00e9nyen.';\r\n        if (l.length > 1) {\r\n          var rend = l.slice().sort(function (x, y) { return y.ert.E - x.ert.E; }), leg = rend[0], gy = rend[rend.length - 1];\r\n          m += ' A legt\u00f6bbet ' + nevS(leg) + ' hozta (' + elojelesPenz(leg.ert.E) + '), ' + (gy.ert.E < 0 ? 'a legnagyobb vesztes\u00e9g ' + nevS(gy) + ' volt (' + elojelesPenz(gy.ert.E) + ').' : 'a legkevesebbet ' + nevS(gy) + ' (' + elojelesPenz(gy.ert.E) + ').');\r\n        }\r\n        m += '<\/p>';\r\n        var lezart = O.evSorok.filter(function (g) { return g.kulcs !== 'nyitott'; }), nyit = O.evSorok.filter(function (g) { return g.kulcs === 'nyitott'; })[0];\r\n        if (lezart.length) {\r\n          m += '<p>Lez\u00e1rt \u00fcgyletek az elad\u00e1s \u00e9ve szerint: ' + lezart.map(function (g) { return g.kulcs + ': ' + elojelesPenz(g.F1 - g.F0) + ' (' + g.db + ' poz\u00edci\u00f3)'; }).join('; ') + '.' +\r\n            (nyit ? ' Nyitott poz\u00edci\u00f3k a mai \u00e1ron: ' + elojelesPenz(nyit.F1 - nyit.F0) + ' (' + nyit.db + ').' : '') + '<\/p>';\r\n        }\r\n        if (O.arNelkul) m += '<p><em>' + O.arNelkul + ' poz\u00edci\u00f3n\u00e1l nincs megadva a v\u00e9tel\u00e1r \u00e9s az elad\u00e1si \u00e1r, ez\u00e9rt az \u00f6sszes\u00edt\u00e9sb\u0151l kimaradt.<\/em><\/p>';\r\n      } else if ((this._napiEredm || []).some(function (r) { return r.vk && r.vk.ertek; })) {\r\n        m = '<p><em>A forintos eredm\u00e9nyhez \u00edrd be poz\u00edci\u00f3nk\u00e9nt a darabsz\u00e1mot (vagy hagyd \u00fcresen, \u00e9s \u00edrd a teljes \u00f6sszeget), a v\u00e9tel\u00e1rat \u00e9s az elad\u00e1si \u00e1rat deviz\u00e1ban. Addig csak a deviza\u00e1rfolyamok v\u00e1ltoz\u00e1sa l\u00e1tszik soronk\u00e9nt.<\/em><\/p>';\r\n      }\r\n      el.innerHTML = m;\r\n      this.$('#doboz-napi-er').hidden = !O;\r\n      this.$('#doboz-napi-poz').hidden = !O;\r\n      if (O) {\r\n        this.$('#cim-napi-er').textContent = (O.lista.length > 1 ? '\u00d6sszes poz\u00edci\u00f3' : this._pozNev(O.lista[0])) + ': eredm\u00e9ny forintban \u2013 r\u00e9szv\u00e9ny \u00e9s deviza';\r\n        this.$('#megj-napi-er').textContent = 'V\u00e9teli \u00e9rt\u00e9k: a v\u00e9tel\u00e1rak a v\u00e9tel napj\u00e1nak MNB-\u00e1rfolyam\u00e1n. R\u00e9szv\u00e9nyek: az \u00e1rfolyamv\u00e1ltoz\u00e1s deviz\u00e1ban, a v\u00e9teli \u00e1rfolyamon forintra sz\u00e1molva. Deviza: az elad\u00e1si \u00e9rt\u00e9kek deviz\u00e1ban, szorozva a deviza\u00e1rfolyam v\u00e1ltoz\u00e1s\u00e1val. Elad\u00e1si \u00e9rt\u00e9k: az elad\u00e1s napj\u00e1nak (nyitottn\u00e1l a legut\u00f3bbi) MNB-\u00e1rfolyam\u00e1n.';\r\n        this.$('#vaszon-napi-poz').style.height = Math.max(160, 70 + 36 * O.lista.length) + 'px';\r\n      }\r\n      \/\/ kieg\u00e9sz\u00edt\u0151: a \ud83d\udcc8 gombbal v\u00e1lasztott poz\u00edci\u00f3 deviza\u00e1rfolyama\r\n      var r = this._napiEredm && this._napiEredm[this._pozKiv], jo = this._napiJo(r);\r\n      this.$('#doboz-napi').hidden = !jo;\r\n      if (!jo) return;\r\n      var B = DEVIZAK[r.p.k];\r\n      this.$('#cim-napi').textContent = B.jel + ' forint\u00e1rfolyama ' + az(this._pozNev(r)) + ' tart\u00e1sa alatt (' + (r.s.forras === 'MNB' ? 'MNB, ' : '') + 'napi)';\r\n      this.$('#megj-napi').textContent = 'A \ud83d\udcc8 gombbal v\u00e1lasztott poz\u00edci\u00f3: v\u00e9telkor (' + rovidNap(r.vk.datum) + ') ' + arfSzoveg('HUF', r.p.k, r.vk.ertek) + ', ' + (r.nyitott ? 'legut\u00f3bb' : 'elad\u00e1skor') + ' (' + rovidNap(r.ek.datum) + ') ' + arfSzoveg('HUF', r.p.k, r.ek.ertek) + ' (' + elojeles(r.valt) + '). A narancs pontok a k\u00e9t napot jel\u00f6lik. M\u00e1sik poz\u00edci\u00f3hoz kattints a sor\u00e1ban a \ud83d\udcc8 gombra.';\r\n    }\r\n\r\n    \/\/ V\u00edzes\u00e9s az \u00f6sszes be\u00e1razott poz\u00edci\u00f3ra (1.16)\r\n    _napiErCfg() {\r\n      var O = this._napiOssz;\r\n      if (!O) return null;\r\n      var o = O.o, a = o.F0, b1 = o.F0 + o.R, c = o.F1;\r\n      var szin = function (v) { return v >= 0 ? SZIN.zold : SZIN.piros; };\r\n      var ertek = [o.F0, o.R, o.D, o.F1];\r\n      return {\r\n        type: 'bar', plugins: [feherHatter],\r\n        data: { labels: ['V\u00e9teli \u00e9rt\u00e9k', 'R\u00e9szv\u00e9nyek', 'Deviza', o.ny === o.db ? 'Mai \u00e9rt\u00e9k' : 'Elad\u00e1si \u00e9rt\u00e9k'], datasets: [{ label: 'forint', data: [[0, a], [a, b1], [b1, c], [0, c]],\r\n          backgroundColor: [SZIN.navyKozep, szin(o.R), szin(o.D), SZIN.navyKozep], borderColor: [SZIN.navy, szin(o.R), szin(o.D), SZIN.navy], borderWidth: 1, borderRadius: 3, borderSkipped: false }] },\r\n        options: {\r\n          responsive: true, maintainAspectRatio: false, animation: { duration: 300 },\r\n          scales: { x: { grid: { display: false }, ticks: { color: SZIN.muted } }, y: { beginAtZero: true, grid: { color: SZIN.line }, ticks: { color: SZIN.muted, callback: function (v) { return fmtRovid.format(v); } } } },\r\n          plugins: { legend: { display: false }, tooltip: { backgroundColor: SZIN.navy, padding: 10, cornerRadius: 6, callbacks: {\r\n            label: function (q) { var v = ertek[q.dataIndex]; return ' ' + (q.dataIndex === 1 || q.dataIndex === 2 ? elojelesPenz(v) : penz(v, 'HUF')); } } } }\r\n        }\r\n      };\r\n    }\r\n\r\n    \/\/ Poz\u00edci\u00f3nk\u00e9nt: r\u00e9szv\u00e9ny- \u00e9s devizahat\u00e1s egym\u00e1s mellett (v\u00edzszintes, halmozott), eredm\u00e9ny szerint rendezve (1.16)\r\n    _napiPozCfg() {\r\n      var O = this._napiOssz, self = this;\r\n      if (!O) return null;\r\n      var l = O.lista.slice().sort(function (x, y) { return y.ert.E - x.ert.E; });\r\n      return {\r\n        type: 'bar', plugins: [feherHatter],\r\n        data: { labels: l.map(function (r) { return self._pozNev(r) + '  ' + elojelesPenz(r.ert.E); }), datasets: [\r\n          { label: 'r\u00e9szv\u00e9ny', data: l.map(function (r) { return r.ert.reszveny; }), backgroundColor: SZIN.navyKozep, borderColor: SZIN.navy, borderWidth: 1, stack: 'e' },\r\n          { label: 'deviza', data: l.map(function (r) { return r.ert.deviza; }), backgroundColor: 'rgba(226, 102, 44, 0.55)', borderColor: SZIN.accent, borderWidth: 1, stack: 'e' }\r\n        ] },\r\n        options: {\r\n          indexAxis: 'y', responsive: true, maintainAspectRatio: false, animation: { duration: 300 },\r\n          scales: {\r\n            x: { stacked: true, grid: { color: function (c) { return c.tick && c.tick.value === 0 ? SZIN.muted : SZIN.line; } }, ticks: { color: SZIN.muted, callback: function (v) { return fmtRovid.format(v); } } },\r\n            y: { stacked: true, grid: { display: false }, ticks: { color: SZIN.text } }\r\n          },\r\n          plugins: {\r\n            legend: { position: 'bottom', labels: { color: SZIN.text, boxWidth: 12, boxHeight: 12, padding: 14 } },\r\n            tooltip: { backgroundColor: SZIN.navy, padding: 10, cornerRadius: 6, callbacks: {\r\n              title: function (it) { return self._pozNev(l[it[0].dataIndex]); },\r\n              label: function (c) { return ' ' + c.dataset.label + ': ' + elojelesPenz(c.raw); },\r\n              footer: function (it) { return 'Eredm\u00e9ny: ' + elojelesPenz(l[it[0].dataIndex].ert.E); }\r\n            } }\r\n          }\r\n        }\r\n      };\r\n    }\r\n\r\n    _napiCfg() {\r\n      var r = this._napiEredm && this._napiEredm[this._pozKiv];\r\n      if (!this._napiJo(r)) return null;\r\n      var s = r.s, B = DEVIZAK[r.p.k], eg = B.egyseg, k = r.p.k;\r\n      if (!s.nap) s.nap = s.datumok.map(napSorszam);\r\n      var i0 = r.vk.i, i1 = r.ek.i, pad = Math.max(5, Math.round((i1 - i0) * 0.08));\r\n      var a = Math.max(0, i0 - pad), z = Math.min(s.datumok.length - 1, i1 + pad);\r\n      var pontok = [];\r\n      for (var i = a; i <= z; i++) pontok.push({ x: s.nap[i], y: s.arf[i] * eg });\r\n      var jel = [{ x: s.nap[i0], y: s.arf[i0] * eg, c: 'v\u00e9tel' }, { x: s.nap[i1], y: s.arf[i1] * eg, c: r.nyitott ? 'legut\u00f3bbi' : 'elad\u00e1s' }];\r\n      var min = s.nap[a], max = s.nap[z], span = max - min;\r\n      return {\r\n        type: 'line', plugins: [feherHatter],\r\n        data: { datasets: [\r\n          { label: B.egyseg + ' ' + B.jel + ' forintban', data: pontok, borderColor: SZIN.navy, backgroundColor: SZIN.navyHalvany, borderWidth: 1.5, fill: false, pointRadius: 0, pointHoverRadius: 3, tension: 0 },\r\n          { label: 'v\u00e9tel \u00e9s ' + (r.nyitott ? 'legut\u00f3bbi' : 'elad\u00e1s'), data: jel, showLine: false, pointRadius: 6, pointHoverRadius: 8, pointBackgroundColor: SZIN.accent, pointBorderColor: '#fff', pointBorderWidth: 2, borderColor: SZIN.accent, backgroundColor: SZIN.accent }\r\n        ] },\r\n        options: {\r\n          responsive: true, maintainAspectRatio: false, animation: { duration: 300 },\r\n          interaction: { mode: 'nearest', axis: 'x', intersect: false },\r\n          scales: {\r\n            x: {\r\n              type: 'linear', min: min, max: max, grid: { display: false },\r\n              afterBuildTicks: function (ax) { ax.ticks = napiTickek(min, max).map(function (v) { return { value: v }; }); },\r\n              ticks: { color: SZIN.muted, maxRotation: 0, autoSkip: false, callback: function (v) { return napiTickCimke(v, span); } }\r\n            },\r\n            y: { grid: { color: SZIN.line }, ticks: { color: SZIN.muted, callback: function (v) { return fmt2.format(v); } } }\r\n          },\r\n          plugins: {\r\n            legend: { position: 'bottom', labels: { color: SZIN.text, boxWidth: 12, boxHeight: 12, padding: 14 } },\r\n            tooltip: { backgroundColor: SZIN.navy, titleColor: '#fff', bodyColor: '#fff', padding: 10, cornerRadius: 6, callbacks: {\r\n              title: function (it) { var d = sorszamNap(it[0].raw.x); return napSzoveg(d) + ', ' + napNev(d); },\r\n              label: function (c) { return ' ' + (c.raw.c ? c.raw.c + ': ' : '') + arfSzoveg('HUF', k, c.raw.y \/ eg); }\r\n            } }\r\n          }\r\n        }\r\n      };\r\n    }\r\n\r\n    \/\/ CSV: pontosvessz\u0151, magyar tizedesvessz\u0151, BOM az Excelnek (mint az \u00e9venk\u00e9nti t\u00e1bl\u00e1n\u00e1l)\r\n    _napiCsv() {\r\n      var sorok = [['Megnevez\u00e9s', 'Deviza', 'Egys\u00e9g', 'Darab', 'V\u00e9tel napja', '\u00c1rfolyam napja (v\u00e9tel)', 'V\u00e9teli \u00e1rfolyam (Ft)', 'V\u00e9tel\u00e1r (deviza)', 'V\u00e9teli \u00e9rt\u00e9k (deviza)', 'V\u00e9teli \u00e9rt\u00e9k (Ft)',\r\n        'Elad\u00e1s napja', '\u00c1rfolyam napja (elad\u00e1s)', 'Elad\u00e1si \u00e1rfolyam (Ft)', 'Elad\u00e1si \u00e1r (deviza)', 'Elad\u00e1si \u00e9rt\u00e9k (deviza)', 'Elad\u00e1si \u00e9rt\u00e9k (Ft)', 'Eredm\u00e9ny (Ft)', 'Ebb\u0151l r\u00e9szv\u00e9ny (Ft)', 'Ebb\u0151l deviza (Ft)', '\u00c1rfolyam-v\u00e1ltoz\u00e1s (%)', 'Megjegyz\u00e9s']];\r\n      var sz = function (x, t) { return typeof x === 'number' && isFinite(x) ? x.toFixed(t).replace('.', ',') : ''; };\r\n      var forras = {};\r\n      (this._napiEredm || []).forEach(function (r) {\r\n        var eg = DEVIZAK[r.p.k].egyseg, vk = r.vk && r.vk.ertek ? r.vk : null, ek = r.ek && r.ek.ertek ? r.ek : null;\r\n        if (r.s) forras[r.s.forras] = true;\r\n        var megj = !r.s ? 'nincs adat' : r.hibaSz ? r.hibaSz : r.nyitott ? 'nyitott poz\u00edci\u00f3, legut\u00f3bbi \u00e1rfolyam' : (ek && ek.kesobbi ? 'az elad\u00e1s napi \u00e1rfolyama m\u00e9g nincs k\u00f6zz\u00e9t\u00e9ve' : '');\r\n        var x = r.ert || {};\r\n        sorok.push([r.p.nev, r.p.k, eg, r.p.db || '', r.p.v, vk ? vk.datum : '', vk ? arfSzam(r.p.k, vk.ertek) : '', r.p.av || '', sz(x.V0, 2), sz(x.F0, 0),\r\n          r.p.e, ek ? ek.datum : '', ek ? arfSzam(r.p.k, ek.ertek) : '', r.p.ae || '', sz(x.V1, 2), sz(x.F1, 0), sz(x.E, 0), sz(x.reszveny, 0), sz(x.deviza, 0),\r\n          sz(r.valt, 2), megj]);\r\n      });\r\n      sorok.push([]);\r\n      sorok.push(['Forr\u00e1s', forras.MNB ? 'MNB hivatalos napi deviza\u00e1rfolyamok' : Object.keys(forras).join(', ')]);\r\n      sorok.push(['Ha a megadott napon nem volt jegyz\u00e9s, az azt megel\u0151z\u0151 utols\u00f3 jegyz\u00e9si nap \u00e1rfolyama szerepel (\u00c1rfolyam napja oszlop).']);\r\n      sorok.push(['R\u00e9szv\u00e9nyhat\u00e1s = (elad\u00e1si \u00e9rt\u00e9k \u2212 v\u00e9teli \u00e9rt\u00e9k) deviz\u00e1ban \u00d7 v\u00e9teli \u00e1rfolyam; devizahat\u00e1s = elad\u00e1si \u00e9rt\u00e9k deviz\u00e1ban \u00d7 (elad\u00e1si \u2212 v\u00e9teli \u00e1rfolyam). \u00dcres darabsz\u00e1mn\u00e1l az \u00e1r a teljes \u00f6sszeg.']);\r\n      \/\/ 1.16: \u00f6sszes\u00edt\u00e9s az elad\u00e1s \u00e9ve szerint\r\n      var O = this._napiOssz;\r\n      if (O) {\r\n        sorok.push([]);\r\n        sorok.push(['\u00c9v szerinti bont\u00e1s (az elad\u00e1s \u00e9ve)', 'Poz\u00edci\u00f3k', 'V\u00e9teli \u00e9rt\u00e9k (Ft)', 'Elad\u00e1si \u00e9rt\u00e9k (Ft)', 'Eredm\u00e9ny (Ft)', 'Ebb\u0151l r\u00e9szv\u00e9ny (Ft)', 'Ebb\u0151l deviza (Ft)']);\r\n        O.evSorok.forEach(function (g) { sorok.push([g.kulcs, g.db, sz(g.F0, 0), sz(g.F1, 0), sz(g.F1 - g.F0, 0), sz(g.R, 0), sz(g.D, 0)]); });\r\n        sorok.push(['\u00d6sszesen', O.o.db, sz(O.o.F0, 0), sz(O.o.F1, 0), sz(O.E, 0), sz(O.o.R, 0), sz(O.o.D, 0)]);\r\n      }\r\n      var csv = '\ufeff' + sorok.map(function (r) { return r.join(';'); }).join('\\r\\n');\r\n      var csvBlob = new Blob([csv], { type: 'text\/csv;charset=utf-8' }), url = URL.createObjectURL(csvBlob);\r\n      this._letolt(url, 'devizakalkulator-poziciok-' + maISO() + '.csv', csvBlob);\r\n      setTimeout(function () { URL.revokeObjectURL(url); }, 2000);\r\n    }\r\n\r\n    \/* ---------- GRAFIKONOK ---------- *\/\r\n    _rajzol() {\r\n      if (!window.Chart) return;\r\n      if (this._nezet === 'napi') { this._grafikon('napiPoz', this._napiPozCfg()); this._grafikon('napiEr', this._napiErCfg()); this._grafikon('napi', this._napiCfg()); return; }\r\n      if (!this._adat) { Object.keys(this._chartok).forEach(function (k) { this._chartok[k].destroy(); }, this); this._chartok = {}; return; }\r\n      if (this._nezet === 'alap') { this._grafikon('alap', this._adat.ea && this._adat.ea.napi ? this._cfgAlapNapi() : this._cfgAlap()); this._grafikon('verseny', this._verseny ? this._cfgVerseny() : null); this._grafikon('dca', this._dca ? this._cfgDca() : null); this._grafikon('idoz', this._idoz && this._idoz.teljesDb ? this._cfgIdoz() : null); }\r\n      else if (this._nezet === 'bef') {\r\n        \/\/ 1.9: napi sorn\u00e1l (napi m\u00f3d) a napiraAlakit line\u00e1ris id\u0151tengelyre teszi a havi be\u00e1ll\u00edt\u00e1st\r\n        this._grafikon('kock', napiraAlakit(this._cfgKock(), this._kock.esesek));\r\n        this._grafikon('gord', this._gord ? this._cfgGord() : null);\r\n        this._grafikon('fx', this._fx ? napiraAlakit(this._cfgFx(), this._fx.sor) : null);\r\n        this._grafikon('port', this._port ? napiraAlakit(this._cfgPort(), this._port.sor) : null);\r\n        this._grafikon('real', this._real ? napiraAlakit(this._cfgReal(), this._real.sor) : null);\r\n      }\r\n      else { this._grafikon('hr', this._hitel ? napiraAlakit(this._cfgHr(), this._hitel.sor) : null); this._grafikon('ht', this._hitel ? napiraAlakit(this._cfgHt(), this._hitel.sor) : null); this._grafikon('hi', this._hitel ? napiraAlakit(this._cfgHi(), this._hitel.sor) : null); }\r\n    }\r\n    _grafikon(nev, cfg) {\r\n      var c = this._chartok[nev];\r\n      if (!cfg) { if (c) { c.destroy(); delete this._chartok[nev]; } return; }\r\n      \/\/ a \"kulcs\" a tengely fajt\u00e1j\u00e1t jelzi (havi kateg\u00f3ria \/ napi line\u00e1ris): ha v\u00e1ltozik, \u00faj grafikon kell\r\n      if (c && c.config.type === cfg.type && c._iocKulcs === cfg.kulcs) { c.data = cfg.data; c.options = cfg.options; c.update(); }\r\n      else { if (c) c.destroy(); c = this._chartok[nev] = new window.Chart(this.$('#v-' + nev), cfg); c._iocKulcs = cfg.kulcs; }\r\n    }\r\n    _alapOpciok(sor, ido, yCallback, tooltipCim, tooltipSor) {\r\n      return {\r\n        responsive: true, maintainAspectRatio: false, animation: { duration: 300 },\r\n        interaction: { mode: 'index', intersect: false },\r\n        scales: {\r\n          x: evTengely(sor, ido),\r\n          y: { grid: { color: SZIN.line }, ticks: { color: SZIN.muted, callback: yCallback } }\r\n        },\r\n        plugins: {\r\n          legend: { position: 'bottom', labels: { color: SZIN.text, boxWidth: 12, boxHeight: 12, padding: 14 } },\r\n          tooltip: { backgroundColor: SZIN.navy, titleColor: '#fff', bodyColor: '#fff', padding: 10, cornerRadius: 6, callbacks: { title: tooltipCim, label: tooltipSor } }\r\n        }\r\n      };\r\n    }\r\n    _cfgAlap() {\r\n      var b = this._adat.b, e = this._adat.e, sor = e.sor, A = DEVIZAK[b.a], B = DEVIZAK[b.b];\r\n      var ds = [{\r\n        label: B.ban + ' tartva', data: sor.map(function (s) { return s.ertek; }), borderColor: SZIN.navy, backgroundColor: SZIN.navyHalvany,\r\n        borderWidth: 2, fill: true, pointRadius: 0, pointHoverRadius: 4, tension: .15\r\n      }];\r\n      if (b.a === 'HUF') ds.push({ label: 'az infl\u00e1ci\u00f3t k\u00f6vet\u0151 \u00f6sszeg', data: sor.map(function (s) { return s.inflacio; }), borderColor: SZIN.accent, borderDash: [6, 4], borderWidth: 2, fill: false, pointRadius: 0, pointHoverRadius: 4, tension: .15 });\r\n      if (e.ka) ds.push({ label: A.ban + ', \u00e9vi ' + kamatSz(e.ka) + ' kamattal', data: sor.map(function (s) { return s.betet; }), borderColor: '#2a9d8f', borderWidth: 2, fill: false, pointRadius: 0, pointHoverRadius: 4, tension: .15 });\r\n      return {\r\n        type: 'line', plugins: [feherHatter],\r\n        data: { labels: sor.map(function (s) { return hStr(s.i); }), datasets: ds },\r\n        options: this._alapOpciok(sor, function (idx) { return sor[idx] && sor[idx].i; }, function (v) { return fmtRovid.format(v); },\r\n          function (it) { var s = sor[it[0].dataIndex]; return hSzoveg(s.i) + ' \u00b7 ' + arfSzoveg(b.a, b.b, s.arf); },\r\n          function (c) { return ' ' + c.dataset.label + ': ' + penz(c.raw, b.a); })\r\n      };\r\n    }\r\n    \/* Alapgrafikon napi \u00e1rfolyammal (1.8): line\u00e1ris id\u0151tengely napsorsz\u00e1mmal, a napi n\u00e9zet beoszt\u00e1s\u00e1val *\/\r\n    _cfgAlapNapi() {\r\n      var b = this._adat.b, e = this._adat.ea, sor = e.sor, A = DEVIZAK[b.a], B = DEVIZAK[b.b];\r\n      var xy = function (f) { return sor.map(function (s) { return { x: s.n, y: s[f] }; }); };\r\n      var ds = [{ label: B.ban + ' tartva', data: xy('ertek'), borderColor: SZIN.navy, backgroundColor: SZIN.navyHalvany, borderWidth: 1.5, fill: true, pointRadius: 0, pointHoverRadius: 4, tension: 0 }];\r\n      if (b.a === 'HUF') ds.push({ label: 'az infl\u00e1ci\u00f3t k\u00f6vet\u0151 \u00f6sszeg', data: xy('inflacio'), borderColor: SZIN.accent, borderDash: [6, 4], borderWidth: 2, fill: false, pointRadius: 0, pointHoverRadius: 4, tension: 0 });\r\n      if (e.ka) ds.push({ label: A.ban + ', \u00e9vi ' + kamatSz(e.ka) + ' kamattal', data: xy('betet'), borderColor: '#2a9d8f', borderWidth: 2, fill: false, pointRadius: 0, pointHoverRadius: 4, tension: 0 });\r\n      var min = sor[0].n, max = sor[sor.length - 1].n, span = max - min, arfMap = {};\r\n      sor.forEach(function (s) { arfMap[s.n] = s.arf; });\r\n      return {\r\n        type: 'line', kulcs: 'napi', plugins: [feherHatter],\r\n        data: { datasets: ds },\r\n        options: {\r\n          responsive: true, maintainAspectRatio: false, animation: { duration: 300 },\r\n          interaction: { mode: 'index', intersect: false },\r\n          scales: {\r\n            x: {\r\n              type: 'linear', min: min, max: max, grid: { display: false },\r\n              afterBuildTicks: function (ax) { ax.ticks = napiTickek(min, max).map(function (v) { return { value: v }; }); },\r\n              ticks: { color: SZIN.muted, maxRotation: 0, autoSkip: false, callback: function (v) { return napiTickCimke(v, span); } }\r\n            },\r\n            y: { grid: { color: SZIN.line }, ticks: { color: SZIN.muted, callback: function (v) { return fmtRovid.format(v); } } }\r\n          },\r\n          plugins: {\r\n            legend: { position: 'bottom', labels: { color: SZIN.text, boxWidth: 12, boxHeight: 12, padding: 14 } },\r\n            tooltip: { backgroundColor: SZIN.navy, titleColor: '#fff', bodyColor: '#fff', padding: 10, cornerRadius: 6, callbacks: {\r\n              title: function (it) { var n = it[0].raw.x, d = sorszamNap(n); return napSzoveg(d) + ' \u00b7 ' + arfSzoveg(b.a, b.b, arfMap[n]); },\r\n              label: function (c) { return ' ' + c.dataset.label + ': ' + penz(c.raw.y, b.a); }\r\n            } }\r\n          }\r\n        }\r\n      };\r\n    }\r\n    _cfgVerseny() {\r\n      var v = this._verseny, n = v.ig - v.tol + 1, idok = [];\r\n      for (var i = v.tol; i <= v.ig; i++) idok.push(i);\r\n      return {\r\n        type: 'line', plugins: [feherHatter],\r\n        data: { labels: idok.map(hStr), datasets: v.adat.map(function (x) { return { label: DEVIZAK[x.k].jel, data: x.sor, borderColor: x.szin, backgroundColor: x.szin, borderWidth: 2, pointRadius: 0, pointHoverRadius: 4, tension: .15, spanGaps: true }; }) },\r\n        options: this._alapOpciok(idok, function (idx) { return idok[idx]; }, function (v) { return fmtSzam.format(v); },\r\n          function (it) { return hSzoveg(idok[it[0].dataIndex]); },\r\n          function (c) { return c.raw === null ? '' : ' ' + c.dataset.label + ': ' + fmt1.format(c.raw); })\r\n      };\r\n    }\r\n    _cfgKock() {\r\n      var k = this._kock, sor = k.esesek, b = this._adat.b;\r\n      var o = this._alapOpciok(sor, function (idx) { return sor[idx] && sor[idx].i; }, function (v) { return v + '%'; },\r\n        function (it) { return T.sz(sor[it[0].dataIndex]); }, function (c) { return ' A cs\u00facst\u00f3l: ' + szazalek(c.raw); });\r\n      o.plugins.legend.display = false; o.scales.y.max = 0;\r\n      return { type: 'line', plugins: [feherHatter], data: { labels: sor.map(function (s) { return hStr(s.i); }), datasets: [{ label: 'visszaes\u00e9s', data: sor.map(function (s) { return s.v; }), borderColor: SZIN.accent, backgroundColor: SZIN.accentHalvany, fill: 'origin', borderWidth: 1.5, pointRadius: 0, tension: .1 }] }, options: o };\r\n    }\r\n    _cfgGord() {\r\n      var g = this._gord, ertekek = g.adat.map(function (x) { return x.v; });\r\n      var min = Math.min.apply(null, ertekek), max = Math.max.apply(null, ertekek);\r\n      var szel = max - min > 400 ? 50 : max - min > 150 ? 20 : max - min > 60 ? 10 : 5;\r\n      var tol = Math.floor(min \/ szel) * szel, sav = [];\r\n      for (var x = tol; x <= max; x += szel) sav.push({ a: x, f: x + szel, db: 0 });\r\n      ertekek.forEach(function (v) { var i = Math.min(sav.length - 1, Math.floor((v - tol) \/ szel)); sav[i].db++; });\r\n      var cimke = function (s) { return (s.a > 0 ? '+' : '') + s.a + '\u2026' + (s.f > 0 ? '+' : '') + s.f + '%'; };\r\n      return {\r\n        type: 'bar', plugins: [feherHatter],\r\n        data: { labels: sav.map(cimke), datasets: [{ label: 'kezd\u0151 h\u00f3napok', data: sav.map(function (s) { return s.db; }), backgroundColor: sav.map(function (s) { return s.f <= 0 ? SZIN.accentHalvany : SZIN.navyKozep; }), borderColor: sav.map(function (s) { return s.f <= 0 ? SZIN.accent : SZIN.navy; }), borderWidth: 1, borderRadius: 3 }] },\r\n        options: {\r\n          responsive: true, maintainAspectRatio: false, animation: { duration: 300 },\r\n          scales: { x: { grid: { display: false }, ticks: { color: SZIN.muted, maxRotation: 0, autoSkip: true } }, y: { beginAtZero: true, grid: { color: SZIN.line }, ticks: { color: SZIN.muted, precision: 0 } } },\r\n          plugins: { legend: { display: false }, tooltip: { backgroundColor: SZIN.navy, padding: 10, cornerRadius: 6, callbacks: { label: function (c) { return ' ' + c.raw + (g.napi ? ' kezd\u0151nap' : ' kezd\u0151 h\u00f3nap') + ' (' + szazalek(c.raw \/ g.db * 100) + ')'; } } } }\r\n        }\r\n      };\r\n    }\r\n    _cfgFx() {\r\n      var f = this._fx, b = this._adat.b, sor = f.sor;\r\n      return {\r\n        type: 'line', plugins: [feherHatter],\r\n        data: { labels: sor.map(function (s) { return hStr(s.i); }), datasets: [\r\n          { label: 'fedezetlen (befektet\u00e9s + \u00e1rfolyam)', data: sor.map(function (s) { return s.fedezetlen; }), borderColor: SZIN.navy, backgroundColor: SZIN.navyHalvany, fill: true, borderWidth: 2, pointRadius: 0, pointHoverRadius: 4, tension: .15 },\r\n          { label: 'fedezett (csak a befektet\u00e9s)', data: sor.map(function (s) { return s.fedezett; }), borderColor: SZIN.accent, borderDash: [6, 4], borderWidth: 2, fill: false, pointRadius: 0, pointHoverRadius: 4, tension: .15 }\r\n        ] },\r\n        options: this._alapOpciok(sor, function (idx) { return sor[idx] && sor[idx].i; }, function (v) { return fmtRovid.format(v); },\r\n          function (it) { return T.sz(sor[it[0].dataIndex]); }, function (c) { return ' ' + c.dataset.label + ': ' + penz(c.raw, b.a); })\r\n      };\r\n    }\r\n\r\n    _cfgDca() {\r\n      var d = this._dca, b = this._adat.b, sor = d.sor, A = arszintEvek(), l = {};\r\n      var ds = [\r\n        { label: 'a gy\u0171jt\u00f6tt deviza \u00e9rt\u00e9ke', data: sor.map(function (s) { return s.ertek; }), borderColor: SZIN.navy, backgroundColor: SZIN.navyHalvany, fill: true, borderWidth: 2, pointRadius: 0, pointHoverRadius: 4, tension: .15 },\r\n        { label: 'befizetve', data: sor.map(function (s) { return s.befizetve; }), borderColor: SZIN.muted, borderWidth: 1.5, stepped: true, fill: false, pointRadius: 0, pointHoverRadius: 3 }\r\n      ];\r\n      if (b.a === 'HUF') {\r\n        \/\/ a h\u00f3napig befizetett \u00f6sszegek, mindegyik a befizet\u00e9se \u00f3ta eltelt infl\u00e1ci\u00f3val felszorozva\r\n        var vetelek = sor.filter(function (s) { return s.i < b.t1; }).map(function (s) { return { i: s.i, l: arszintHonap(A, s.i) }; });\r\n        var infl = sor.map(function (s) {\r\n          var lv = arszintHonap(A, s.i);\r\n          return vetelek.reduce(function (o, v) { return v.i <= s.i ? o + b.havi * lv \/ v.l : o; }, 0);\r\n        });\r\n        ds.push({ label: 'befizetve, infl\u00e1ci\u00f3val felszorozva', data: infl, borderColor: SZIN.accent, borderDash: [6, 4], borderWidth: 2, fill: false, pointRadius: 0, pointHoverRadius: 3, tension: .15 });\r\n      }\r\n      if (d.betet !== null) ds.push({ label: DEVIZAK[b.a].nev + 'bet\u00e9tben, \u00e9vi ' + kamatSz(b.ka), data: sor.map(function (s) { return s.betet; }), borderColor: '#2a9d8f', borderWidth: 2, fill: false, pointRadius: 0, pointHoverRadius: 3, tension: .15 });\r\n      return {\r\n        type: 'line', plugins: [feherHatter],\r\n        data: { labels: sor.map(function (s) { return hStr(s.i); }), datasets: ds },\r\n        options: this._alapOpciok(sor, function (idx) { return sor[idx] && sor[idx].i; }, function (v) { return fmtRovid.format(v); },\r\n          function (it) { return hSzoveg(sor[it[0].dataIndex].i); }, function (c) { return ' ' + c.dataset.label + ': ' + penz(c.raw, b.a); })\r\n      };\r\n    }\r\n    _cfgPort() {\r\n      var p = this._port, b = this._adat.b, sor = p.sor;\r\n      var ds = [{ label: 'a mix', data: sor.map(function (s) { return s.arf * 100; }), borderColor: SZIN.navy, backgroundColor: SZIN.navyHalvany, fill: false, borderWidth: 3, pointRadius: 0, pointHoverRadius: 4, tension: .15 }];\r\n      b.port.forEach(function (t) {\r\n        if (t.k === b.a) return;\r\n        var ks = p.komp[t.k], p0 = ks[0].arf, m = {}, kulcs = function (s) { return s.n !== undefined ? s.n : s.i; };\r\n        ks.forEach(function (s) { m[kulcs(s)] = s.arf \/ p0 * 100; });\r\n        ds.push({ label: t.k, data: sor.map(function (s) { return m[kulcs(s)] === undefined ? null : m[kulcs(s)]; }), borderColor: VERSENY_SZINEK[t.i], borderWidth: 1.2, fill: false, pointRadius: 0, pointHoverRadius: 3, tension: .15, spanGaps: true });\r\n      });\r\n      ds[0].borderColor = SZIN.text;\r\n      return {\r\n        type: 'line', plugins: [feherHatter],\r\n        data: { labels: sor.map(function (s) { return hStr(s.i); }), datasets: ds },\r\n        options: this._alapOpciok(sor, function (idx) { return sor[idx] && sor[idx].i; }, function (v) { return fmtSzam.format(v); },\r\n          function (it) { return T.sz(sor[it[0].dataIndex]); }, function (c) { return c.raw === null ? '' : ' ' + c.dataset.label + ': ' + fmt1.format(c.raw); })\r\n      };\r\n    }\r\n\r\n    _cfgIdoz() {\r\n      var t = this._idoz, sz = t.szezon;\r\n      return {\r\n        type: 'bar', plugins: [feherHatter],\r\n        data: { labels: HONAPOK_ROVID, datasets: [{ label: '\u00e1tlagos elt\u00e9r\u00e9s', data: sz.map(function (x) { return x.v; }), backgroundColor: sz.map(function (x) { return x.v <= 0 ? SZIN.navyKozep : SZIN.accentHalvany; }), borderColor: sz.map(function (x) { return x.v <= 0 ? SZIN.navy : SZIN.accent; }), borderWidth: 1, borderRadius: 3 }] },\r\n        options: {\r\n          responsive: true, maintainAspectRatio: false, animation: { duration: 300 },\r\n          scales: { x: { grid: { display: false }, ticks: { color: SZIN.muted, maxRotation: 0, autoSkip: true } }, y: { grid: { color: SZIN.line }, ticks: { color: SZIN.muted, callback: function (v) { return fmt1.format(v).replace('-', '\u2212') + '%'; } } } },\r\n          plugins: { legend: { display: false }, tooltip: { backgroundColor: SZIN.navy, padding: 10, cornerRadius: 6, callbacks: {\r\n            title: function (it) { return HONAPOK[it[0].dataIndex]; },\r\n            label: function (c) { var x = sz[c.dataIndex]; return x.v === null ? '' : [' Az \u00e9ves \u00e1tlagt\u00f3l: ' + elojeles(x.v), ' Az \u00e9v legolcs\u00f3bb h\u00f3napja: ' + x.legolcsobb + ' \u00e9vben']; } } } }\r\n        }\r\n      };\r\n    }\r\n    _cfgReal() {\r\n      var r = this._real, b = this._adat.b, sor = r.sor;\r\n      return {\r\n        type: 'line', plugins: [feherHatter],\r\n        data: { labels: sor.map(function (s) { return hStr(s.i); }), datasets: [\r\n          { label: 't\u00e9nyleges \u00e1rfolyam', data: sor.map(function (s) { return s.arf * DEVIZAK[b.b].egyseg; }), borderColor: SZIN.navy, backgroundColor: SZIN.navyHalvany, borderWidth: 2, fill: false, pointRadius: 0, pointHoverRadius: 4, tension: .15 },\r\n          { label: 'az infl\u00e1ci\u00f3k\u00fcl\u00f6nb\u00f6zet szerinti', data: sor.map(function (s) { return s.ppp * DEVIZAK[b.b].egyseg; }), borderColor: SZIN.accent, borderDash: [6, 4], borderWidth: 2, fill: false, pointRadius: 0, pointHoverRadius: 4, tension: .15 }\r\n        ] },\r\n        options: this._alapOpciok(sor, function (idx) { return sor[idx] && sor[idx].i; }, function (v) { return fmtSzam.format(v); },\r\n          function (it) { var s = sor[it[0].dataIndex]; return T.sz(s) + ' \u00b7 elt\u00e9r\u00e9s: ' + elojeles((s.arf \/ s.ppp - 1) * 100); },\r\n          function (c) { return ' ' + c.dataset.label + ': ' + arfSzam(b.b, c.raw \/ DEVIZAK[b.b].egyseg) + ' Ft'; })\r\n      };\r\n    }\r\n    _hitelSor(mezo) {\r\n      var d = this._hitel, b = this._adat.b, sor = d.sor, self = this;\r\n      var ds = [\r\n        { label: 'devizahitel', data: sor.map(function (s) { return s[mezo]; }), borderColor: SZIN.navy, backgroundColor: SZIN.navyHalvany, fill: mezo === 'tart', borderWidth: 2, pointRadius: 0, pointHoverRadius: 4, tension: mezo === 'tart' ? .15 : 0 },\r\n        { label: 'v\u00e1ltozatlan \u00e1rfolyammal', data: sor.map(function (s) { return mezo === 'tart' ? s.alapTart : s.alapReszlet; }), borderColor: SZIN.muted, borderDash: [5, 4], borderWidth: 1.5, fill: false, pointRadius: 0, pointHoverRadius: 3 }\r\n      ];\r\n      if (d.forint) {   \/\/ 1.17: a sor elemei hordozz\u00e1k (v\u00e1ltoz\u00f3 kamatn\u00e1l a r\u00e9szlet is v\u00e1ltozik)\r\n        ds.push({ label: (d.forint.kp.valtozo ? 'v\u00e1ltoz\u00f3 kamat\u00fa ' : '') + 'forinthitel, kezdetben \u00e9vi ' + kamatSz(this._hitelH.forintKamat), data: sor.map(function (s) { return mezo === 'tart' ? s.fT : s.fR; }), borderColor: SZIN.accent, borderWidth: 2, fill: false, pointRadius: 0, pointHoverRadius: 3, stepped: mezo === 'tart' ? false : 'before' });\r\n      }\r\n      if (mezo === 'reszlet' && d.fizetveReal !== null) {\r\n        ds.push({ label: 'r\u00e9szlet re\u00e1l\u00e9rt\u00e9ken (felv\u00e9telkori forint)', data: sor.map(function (s) { return s.reszletReal; }), borderColor: '#2a9d8f', borderDash: [2, 3], borderWidth: 2, fill: false, pointRadius: 0, pointHoverRadius: 3 });\r\n      }\r\n      return {\r\n        type: 'line', plugins: [feherHatter],\r\n        data: { labels: sor.map(function (s) { return hStr(s.i); }), datasets: ds },\r\n        options: this._alapOpciok(sor, function (idx) { return sor[idx] && sor[idx].i; }, function (v) { return fmtRovid.format(v); },\r\n          function (it) { var s = sor[it[0].dataIndex]; return T.sz(s) + ' \u00b7 ' + s.k + '. r\u00e9szlet \u00b7 ' + arfSzoveg(b.a, b.b, s.arf); },\r\n          function (c) {\r\n            var sor0 = ' ' + c.dataset.label + ': ' + penz(c.raw, b.a);\r\n            if (mezo !== 'reszlet' || c.datasetIndex !== 0 || !self._hitelBont) return sor0;\r\n            var x = self._hitelBont(sor[c.dataIndex]);   \/\/ 1.18: a kezdethez k\u00e9pesti emelked\u00e9s felbont\u00e1sa\r\n            return [sor0, '   a kezdethez k\u00e9pest: ' + elojelesPenzK(x.ossz, b.a), '   ebb\u0151l \u00e1rfolyam: ' + elojelesPenzK(x.arf, b.a) + ', kamat: ' + elojelesPenzK(x.kam, b.a)];\r\n          })\r\n      };\r\n    }\r\n    _cfgHr() { return this._hitelSor('reszlet'); }\r\n    _cfgHt() { return this._hitelSor('tart'); }\r\n    \/\/ 1.17: infl\u00e1ci\u00f3, referenciakamat(ok) \u00e9s a hitel kamata\r\n    _cfgHi() {\r\n      var d = this._hitel, b = this._adat.b, sor = d.sor, ds = [];\r\n      ds.push({ label: 'a hitel kamata', data: sor.map(function (s) { return s.kamat; }), borderColor: SZIN.navy, borderWidth: 2.5, fill: false, pointRadius: 0, pointHoverRadius: 4, stepped: 'before' });\r\n      if (d.forint) ds.push({ label: 'forinthitel kamata', data: sor.map(function (s) { return s.fKamat; }), borderColor: SZIN.accent, borderWidth: 2, fill: false, pointRadius: 0, pointHoverRadius: 3, stepped: 'before' });\r\n      if (REF_KAMAT[b.b]) ds.push({ label: REF_KAMAT[b.b].nev, data: sor.map(function (s) { return s.ref === undefined ? null : s.ref; }), borderColor: '#4f86c6', borderDash: [5, 4], borderWidth: 1.5, fill: false, pointRadius: 0, pointHoverRadius: 3 });\r\n      if (b.b !== 'HUF' && b.a === 'HUF') ds.push({ label: REF_KAMAT.HUF.nev, data: sor.map(function (s) { return s.bubor === undefined ? null : s.bubor; }), borderColor: '#8e5ea2', borderDash: [5, 4], borderWidth: 1.5, fill: false, pointRadius: 0, pointHoverRadius: 3 });\r\n      if (b.a === 'HUF') ds.push({ label: 'magyar infl\u00e1ci\u00f3 (KSH, \u00e9ves \u00e1tlag)', data: sor.map(function (s) { return s.infl === undefined ? null : s.infl; }), borderColor: 'rgba(107, 119, 133, 0.6)', backgroundColor: 'rgba(107, 119, 133, 0.16)', borderWidth: 1, fill: 'origin', pointRadius: 0, pointHoverRadius: 3, stepped: 'before', order: 10 });\r\n      return {\r\n        type: 'line', plugins: [feherHatter],\r\n        data: { labels: sor.map(function (s) { return hStr(s.i); }), datasets: ds },\r\n        options: this._alapOpciok(sor, function (idx) { return sor[idx] && sor[idx].i; }, function (v) { return fmtSzam.format(v) + '%'; },\r\n          function (it) { var s = sor[it[0].dataIndex]; return T.sz(s) + ' \u00b7 ' + s.k + '. r\u00e9szlet'; },\r\n          function (c) { return c.raw === null || c.raw === undefined ? '' : ' ' + c.dataset.label + ': ' + kamatSz(c.raw); })\r\n      };\r\n    }\r\n\r\n    \/* ---------- LET\u00d6LT\u00c9S, MEGOSZT\u00c1S ---------- *\/\r\n    \/* Let\u00f6lt\u00e9s. A claude.ai-on k\u00f6zz\u00e9tett oldal elz\u00e1rt keretben fut, ahol a sima let\u00f6lt\u0151link nem m\u0171k\u00f6dik:\r\n       ott (window.claude.use) a \"downloads\" k\u00e9pess\u00e9ggel ment\u00fcnk (a n\u00e9z\u0151 meger\u0151s\u00edti). M\u00e1shol, pl. a\r\n       WordPressben, a megszokott <a download> link. blob: a f\u00e1jl tartalma (a k\u00e9pess\u00e9ghez kell). (1.15) *\/\r\n    _letolt(url, nev, blob) {\r\n      var sima = function () { var a = document.createElement('a'); a.href = url; a.download = nev; document.body.appendChild(a); a.click(); a.remove(); };\r\n      if (blob && window.claude && typeof window.claude.use === 'function') {\r\n        window.claude.use('downloads').then(function (d) {\r\n          if (!d) { sima(); return; }\r\n          d.save({ filename: nev, data: blob }).catch(function () { \/* a n\u00e9z\u0151 elutas\u00edtotta, vagy itt nem \u00e9rhet\u0151 el *\/ });\r\n        }, sima);\r\n        return;\r\n      }\r\n      sima();\r\n    }\r\n\r\n    \/\/ PNG: c\u00edmmel \u00e9s forr\u00e1ssal a k\u00e9pen, hogy \u00f6n\u00e1ll\u00f3an is meg\u00e1llja a hely\u00e9t\r\n    _pngLetoltes(nev) {\r\n      var ch = this._chartok[nev];\r\n      if (!ch) return;\r\n      if (nev === 'napiEr' || nev === 'napiPoz') {\r\n        var O = this._napiOssz;\r\n        if (!O) return;\r\n        this._pngRajz(ch, [nev === 'napiEr' ? this.$('#cim-napi-er').textContent : this.$('#cim-napi-poz').textContent,\r\n          O.lista.length + ' poz\u00edci\u00f3 \u00b7 v\u00e9teli \u00e9rt\u00e9k ' + penz(O.o.F0, 'HUF') + ' \u2192 ' + penz(O.o.F1, 'HUF') + ' \u00b7 eredm\u00e9ny ' + elojelesPenz(O.E) + ' (r\u00e9szv\u00e9ny ' + elojelesPenz(O.o.R) + ', deviza ' + elojelesPenz(O.o.D) + ')'],\r\n          'iocharts.io \u00b7 Devizakalkul\u00e1tor \u00b7 \u00c1rfolyam: ' + (O.lista[0].s.forras === 'MNB' ? 'MNB hivatalos napi deviza\u00e1rfolyamok' : O.lista[0].s.forras),\r\n          'devizakalkulator-' + (nev === 'napiEr' ? 'portfolio-eredmeny' : 'poziciok') + '-' + maISO() + '.png');\r\n        return;\r\n      }\r\n      if (nev === 'napi') {\r\n        var r = this._napiEredm && this._napiEredm[this._pozKiv];\r\n        if (!this._napiJo(r)) return;\r\n        var Bn = DEVIZAK[r.p.k];\r\n        this._pngRajz(ch, [this.$('#cim-napi').textContent,\r\n          'V\u00e9tel: ' + rovidNap(r.vk.datum) + ' \u00b7 ' + arfSzoveg('HUF', r.p.k, r.vk.ertek) + ' \u2192 ' + (r.nyitott ? 'legut\u00f3bbi: ' : 'elad\u00e1s: ') + rovidNap(r.ek.datum) + ' \u00b7 ' + arfSzoveg('HUF', r.p.k, r.ek.ertek) + ' (' + elojeles(r.valt) + ')'],\r\n          'iocharts.io \u00b7 Devizakalkul\u00e1tor \u00b7 Forr\u00e1s: ' + (r.s.forras === 'MNB' ? 'MNB hivatalos napi deviza\u00e1rfolyamok' : r.s.forras),\r\n          'devizakalkulator-napi-' + (r.p.nev ? r.p.nev.replace(\/[^0-9A-Za-z]+\/g, '-').toLowerCase() + '-' : '') + Bn.jel.toLowerCase() + '-' + r.p.v + '-' + r.ek.datum + '.png');\r\n        return;\r\n      }\r\n      if (!this._adat) return;\r\n      var b = this._adat.b, e = this._adat.e, A = DEVIZAK[b.a], B = DEVIZAK[b.b];\r\n      var cimek = {\r\n        alap: (function (ea) { return [penz(b.osszeg, b.a) + ' ' + B.ban + ' (' + (ea.napi ? rovidNap(ea.r0.datum) + ' \u2192 ' + rovidNap(ea.r1.datum) : hRovid(b.t0) + ' \u2192 ' + hRovid(b.t1)) + '): ' + penz(ea.ertek, b.a), 'V\u00e1ltoz\u00e1s: ' + elojeles(ea.ertekValt) + ' \u00b7 \u00e9vi \u00e1tlag: ' + elojeles(ea.ertekEvi) + (b.a === 'HUF' ? ' \u00b7 re\u00e1l\u00e9rt\u00e9ken: ' + elojeles(ea.realValt) : '') + (ea.kb ? ' \u00b7 devizakamat: ' + kamatSz(ea.kb) : '')]; })(this._adat.ea),\r\n        idoz: [this.$('#cim-idoz').textContent, this._idoz ? '\u00c1tlagos \u00e9ven bel\u00fcli k\u00fcl\u00f6nbs\u00e9g: ' + szazalek(this._idoz.atlagKulonbseg) + ' \u00b7 ' + hRovid(b.t0) + ' \u2013 ' + hRovid(b.t1) : ''],\r\n        real: [this.$('#cim-real').textContent, this._real ? 'Elt\u00e9r\u00e9s az infl\u00e1ci\u00f3k\u00fcl\u00f6nb\u00f6zet szerinti \u00e1rfolyamt\u00f3l: ' + elojeles(this._real.elteres) + ' \u00b7 ' + T.rovid(this._real.s0) + ' \u2013 ' + T.rovid(this._real.napi ? this._real.sor[this._real.sor.length - 1] : b.t1) : ''],\r\n        hr: [this.$('#cim-hr').textContent + ' \u00b7 ' + penz(b.osszeg, b.a) + ' ' + B.ban + ', ' + T.rovid(this._hitel && this._hitel.napi ? { d: b.d0 } : b.t0), this._hitel ? 'Kezdetben: ' + penz(this._hitel.elsoReszlet, b.a) + ' \u00b7 legmagasabb: ' + penz(this._hitel.csucs.reszlet, b.a) + ' \u00b7 befizetve: ' + penz(this._hitel.fizetve, b.a) : ''],\r\n        hi: [this.$('#cim-hi').textContent + ' \u00b7 ' + penz(b.osszeg, b.a) + ' ' + B.ban + ', ' + T.rovid(this._hitel && this._hitel.napi ? { d: b.d0 } : b.t0), this._hitel ? (this._hitel.kp.valtozo ? 'V\u00e1ltoz\u00f3 kamat: ' + this._hitel.kp.nev + ' + ' + fmtKamat.format(this._hitel.kp.felar) + ' sz\u00e1zal\u00e9kpont' : 'Fix kamat: ' + kamatSz(this._hitelH.kamat)) + ' \u00b7 legalacsonyabb ' + kamatSz(this._hitel.kamatMin.kamat) + ', legmagasabb ' + kamatSz(this._hitel.kamatMax.kamat) : ''],\r\n        ht: [this.$('#cim-ht').textContent + ' \u00b7 ' + penz(b.osszeg, b.a) + ' ' + B.ban + ', ' + T.rovid(this._hitel && this._hitel.napi ? { d: b.d0 } : b.t0), this._hitel ? 'Most: ' + penz(this._hitel.lejart ? 0 : this._hitel.utolso.tart, b.a) + ' \u00b7 befizetve: ' + penz(this._hitel.fizetve, b.a) : ''],\r\n        verseny: [this.$('#cim-verseny').textContent, this.$('#mondat-verseny').textContent.slice(0, 140)],\r\n        kock: [this.$('#cim-kock').textContent, 'Ingadoz\u00e1s: \u00e9vi ' + szazalek(this._kock.ingadozas) + ' \u00b7 legnagyobb visszaes\u00e9s: ' + szazalek(this._kock.visszaeses.v)],\r\n        gord: [this.$('#cim-gord').textContent, this._gord ? 'Nyeres\u00e9ggel z\u00e1rt: ' + szazalek(this._gord.nyero) + ' \u00b7 medi\u00e1n: ' + elojeles(this._gord.median) : ''],\r\n        fx: [this.$('#cim-fx').textContent, this._fx ? '\u00c9vi hozam ' + A.ban + ': ' + elojeles(this._fx.eviHuf) + ' \u00b7 devizahat\u00e1s: ' + szazalekpont(this._fx.hatasPont) : ''],\r\n        dca: [this.$('#cim-dca').textContent, this._dca ? 'Befizetve: ' + penz(this._dca.befizetve, b.a) + ' \u00b7 ma: ' + penz(this._dca.ertek, b.a) + ' \u00b7 \u00e9vi hozam: ' + elojeles(this._dca.eviHozam) : ''],\r\n        port: [this.$('#cim-port').textContent, this._port ? b.port.map(function (x) { return x.k + ' ' + fmtSzam.format(x.suly) + '%'; }).join(', ') + ' \u00b7 ingadoz\u00e1s: ' + szazalek(this._port.ingadozas) + ' \u00b7 visszaes\u00e9s: ' + szazalek(this._port.visszaeses.v) : '']\r\n      }[nev];\r\n      this._pngRajz(ch, cimek,\r\n        'iocharts.io \u00b7 Devizakalkul\u00e1tor \u00b7 Forr\u00e1s: ' + ((nev === 'alap' || ['kock', 'gord', 'fx', 'port', 'real'].indexOf(nev) >= 0) && this._adat.ea.napi || (nev === 'hr' || nev === 'ht' || nev === 'hi') && this._hitel && this._hitel.napi ? ((this._adat.ea.napi ? this._adat.ea.forras : (napiKesz[b.b === 'HUF' ? b.a : b.b] || {}).forras) === 'MNB' ? 'MNB, napi \u00e1rfolyamok' : 'napi \u00e1rfolyamok (' + (this._adat.ea.napi ? this._adat.ea.forras : (napiKesz[b.b === 'HUF' ? b.a : b.b] || {}).forras) + ')') : (ADAT_FORRAS === 'MNB' ? 'MNB' : 'ECB\/Eurostat') + ', havi \u00e1tlag\u00e1rfolyamok') + (b.a === 'HUF' && nev === 'alap' ? ', KSH' : '') + (nev === 'real' ? ', KSH, ' + (b.b === 'EUR' ? 'Eurostat' : 'Vil\u00e1gbank') : '') + (nev === 'hi' ? ', referenciakamatok: OECD (FRED), infl\u00e1ci\u00f3: KSH' : nev === 'hr' && b.a === 'HUF' ? ', KSH' : ''),\r\n        'devizakalkulator-' + nev + '-' + b.a.toLowerCase() + '-' + b.b.toLowerCase() + '-' + (nev === 'alap' && this._adat.ea.napi ? this._adat.ea.r0.datum + '-' + this._adat.ea.r1.datum : hStr(b.t0) + '-' + hStr(b.t1)) + '.png');\r\n    }\r\n    \/\/ A grafikon k\u00e9pe c\u00edmmel, alc\u00edmmel \u00e9s forr\u00e1ssorral (1.7: k\u00f6z\u00f6s a havi \u00e9s a napi n\u00e9zetnek)\r\n    _pngRajz(ch, cimek, forrasSzoveg, fajlnev) {\r\n      var forras = ch.canvas, arany = forras.width \/ ch.width, fej = 64 * arany, lab = 36 * arany, margo = 20 * arany;\r\n      var v = document.createElement('canvas'); v.width = forras.width + 2 * margo; v.height = forras.height + fej + lab;\r\n      var c = v.getContext('2d'), betu = getComputedStyle(this).fontFamily || 'sans-serif';\r\n      c.fillStyle = '#ffffff'; c.fillRect(0, 0, v.width, v.height);\r\n      c.fillStyle = SZIN.accent; c.fillRect(0, 0, v.width, 4 * arany);\r\n      c.fillStyle = SZIN.navy; c.font = '700 ' + (17 * arany) + 'px ' + betu; c.fillText(cimek[0], margo, 34 * arany);\r\n      c.fillStyle = SZIN.muted; c.font = (13 * arany) + 'px ' + betu; c.fillText(cimek[1], margo, 54 * arany);\r\n      c.drawImage(forras, margo, fej);\r\n      c.font = (12 * arany) + 'px ' + betu;\r\n      c.fillText(forrasSzoveg, margo, v.height - 14 * arany);\r\n      var self = this;\r\n      if (window.claude && typeof window.claude.use === 'function' && v.toBlob) v.toBlob(function (bl) { self._letolt(URL.createObjectURL(bl), fajlnev, bl); }, 'image\/png');\r\n      else this._letolt(v.toDataURL('image\/png'), fajlnev);\r\n    }\r\n\r\n    \/\/ CSV: pontosvessz\u0151, magyar tizedesvessz\u0151, BOM az Excelnek\r\n    _csvLetoltes() {\r\n      if (!this._adat) return;\r\n      var b = this._adat.b, e = this._adat.ea, A = DEVIZAK[b.a], B = DEVIZAK[b.b], N = !!e.napi;   \/\/ 1.8: napi m\u00f3dban a napi sorok\r\n      var sz = function (x, t) { return x === null || x === undefined ? '' : x.toFixed(t).replace('.', ','); };\r\n      var sorok = [[N ? 'Nap' : 'H\u00f3nap', '\u00c1rfolyam (' + B.egyseg + ' ' + B.jel + ', ' + A.jel + ')', 'Az \u00f6sszeg \u00e9rt\u00e9ke (' + A.jel + ')', 'V\u00e1ltoz\u00e1s a kezd\u00e9shez k\u00e9pest (%)'].concat(b.a === 'HUF' ? ['Az infl\u00e1ci\u00f3t k\u00f6vet\u0151 \u00f6sszeg (Ft)'] : []).concat(e.ka ? [A.jel + '-bet\u00e9tben (' + sz(e.ka, 2) + '%\/\u00e9v)'] : [])];\r\n      e.sor.forEach(function (s) {\r\n        sorok.push([s.d || hStr(s.i) + csillag(s.i), sz(s.arf * B.egyseg, 4), sz(s.ertek, 2), sz((s.ertek \/ b.osszeg - 1) * 100, 2)].concat(b.a === 'HUF' ? [sz(s.inflacio, 0)] : []).concat(e.ka ? [sz(s.betet, 2)] : []));\r\n      });\r\n      sorok.push([]);\r\n      sorok.push(['Kiindul\u00f3 \u00f6sszeg (' + A.jel + ')', sz(b.osszeg, 0)]);\r\n      sorok.push(['V\u00e1s\u00e1rolt ' + B.jel, sz(e.egyseg, 2)]);\r\n      sorok.push(['Devizakamat (%\/\u00e9v' + (e.ado ? ', nett\u00f3, 28% kamatad\u00f3 ut\u00e1n' : '') + ')', sz(e.kb, 2)]);\r\n      if (e.ka) sorok.push([A.jel + '-kamat (%\/\u00e9v' + (e.ado ? ', nett\u00f3' : '') + ')', sz(e.ka, 2)]);\r\n      sorok.push(['\u00c9vi \u00e1tlagos v\u00e1ltoz\u00e1s (%)', sz(e.ertekEvi, 2)]);\r\n      sorok.push(['Ebb\u0151l csak az \u00e1rfolyam (%\/\u00e9v)', sz(e.eviAtlag, 2)]);\r\n      if (b.a === 'HUF') sorok.push(['Re\u00e1l\u00e9rt\u00e9k v\u00e1ltoz\u00e1sa (%)', sz(e.realValt, 2)]);\r\n      sorok.push(['Forr\u00e1s', N ? (e.forras === 'MNB' ? 'MNB hivatalos napi \u00e1rfolyamok' : e.forras) : ADAT_FORRAS === 'MNB' ? 'MNB hivatalos \u00e1rfolyamok, havi \u00e1tlag' : 'ECB\/Eurostat havi \u00e1tlag']);\r\n      var csv = '\ufeff' + sorok.map(function (r) { return r.join(';'); }).join('\\r\\n');\r\n      var csvBlob = new Blob([csv], { type: 'text\/csv;charset=utf-8' }), url = URL.createObjectURL(csvBlob);\r\n      this._letolt(url, 'devizakalkulator-' + b.a.toLowerCase() + '-' + b.b.toLowerCase() + '-' + (N ? e.r0.datum + '-' + e.r1.datum : hStr(b.t0) + '-' + hStr(b.t1)) + '.csv', csvBlob);\r\n      setTimeout(function () { URL.revokeObjectURL(url); }, 2000);\r\n    }\r\n\r\n    \/* Megoszthat\u00f3 link: dv_ el\u0151tag\u00fa param\u00e9terek. Minden \u00e9rt\u00e9ket ellen\u0151rz\u00fcnk:\r\n       csak ismert devizak\u00f3d, \u00e9rv\u00e9nyes h\u00f3nap \u00e9s hat\u00e1ron bel\u00fcli sz\u00e1m megy \u00e1t. *\/\r\n    _parameterekBetoltese() {\r\n      var q; try { q = new URLSearchParams(window.location.search); } catch (e) { return false; }\r\n      var volt = false, self = this;\r\n      var a = q.get('dv_a'), bb = q.get('dv_b');\r\n      if (ismertDeviza(a)) { this.$('#a').value = a; volt = true; }\r\n      if (ismertDeviza(bb)) { this.$('#b').value = bb; volt = true; }\r\n      if (this.$('#a').value === this.$('#b').value) this.$('#a').value = this.$('#b').value === 'HUF' ? 'EUR' : 'HUF';\r\n      this._evOpciokFrissit(true);\r\n      \/\/ csak tiszta eg\u00e9sz sz\u00e1m (nincs 1e3, 0x10, tizedes, sz\u00f3k\u00f6z)\r\n      var egesz = function (nev) { var x = q.get(nev); return x !== null && \/^\\d{1,12}$\/.test(x) ? Number(x) : NaN; };\r\n      var o = egesz('dv_o');\r\n      if (o > 0 && o <= OSSZEG_MAX) { this.$('#osszeg').value = fmtSzam.format(Math.round(o)); volt = true; }\r\n      var t0 = hIdx(q.get('dv_t') || ''), t1 = hIdx(q.get('dv_v') || '');\r\n      if (isFinite(t0)) { this._honapBeallit('t0', t0); this._idoModositva = true; volt = true; }\r\n      if (isFinite(t1)) { this._honapBeallit('t1', t1); this._idoModositva = true; volt = true; }\r\n      \/\/ ha a linkb\u0151l \u00e9rkez\u0151 kezd\u0151 h\u00f3nap nem kor\u00e1bbi a z\u00e1r\u00f3n\u00e1l, egy \u00e9vvel a z\u00e1r\u00f3 el\u00e9 tessz\u00fck\r\n      if (this._t0() >= this._t1()) this._honapBeallit('t0', this._t1() - 12);\r\n      if (this._t0() >= this._t1()) this._honapBeallit('t1', this._t0() + 12);   \/\/ a legels\u0151 h\u00f3napn\u00e1l a z\u00e1r\u00f3t toljuk\r\n      var hs = q.get('dv_h'), h = Number(hs);\r\n      if (hs !== null && \/^-?\\d{1,2}(\\.\\d{1,2})?$\/.test(hs) && h >= HOZAM_MIN && h <= HOZAM_MAX) { this.$('#hozam').value = String(h).replace('.', ',').replace('-', '\u2212'); volt = true; }\r\n      var hv = egesz('dv_m');\r\n      if (hv > 0 && hv <= OSSZEG_MAX) { this.$('#havi').value = fmtSzam.format(Math.round(hv)); volt = true; }\r\n      var pq = (q.get('dv_p') || '').split(',').map(function (t) { var m = \/^([A-Z]{3}):(\\d{1,3})$\/.exec(t); return m && ismertDeviza(m[1]) && Number(m[2]) <= 100 ? { k: m[1], s: Number(m[2]) } : null; }).filter(Boolean).slice(0, 5);\r\n      if (pq.length) { for (var pi = 0; pi < 5; pi++) { this.$('#pk-' + pi).value = pq[pi] ? pq[pi].k : ''; this.$('#ps-' + pi).value = pq[pi] ? String(pq[pi].s) : ''; } volt = true; }\r\n      var ti = Number(q.get('dv_ti'));\r\n      if (q.get('dv_ti') !== null && TARTASOK.indexOf(ti) >= 0) { this.$('#tartas').value = String(ti); volt = true; }\r\n      var vs = (q.get('dv_vs') || '').split(',').filter(function (k) { return ismertDeviza(k) && k !== 'HUF'; }).slice(0, 5);\r\n      if (vs.length) {\r\n        this._r.querySelectorAll('[data-vs]').forEach(function (s, i) { s.value = vs[i] || ''; });\r\n        volt = true;\r\n      }\r\n      \/\/ kamatok \u00e9s devizahitel: csak hat\u00e1ron bel\u00fcli sz\u00e1m megy \u00e1t\r\n      var tiz = function (nev, min, max, mezo) {\r\n        var x = q.get(nev); if (x === null || !\/^-?\\d{1,3}(\\.\\d{1,2})?$\/.test(x)) return;\r\n        var v = Number(x); if (v >= min && v <= max) { self.$(mezo).value = String(v).replace('.', ',').replace('-', '\u2212'); volt = true; }\r\n      };\r\n      tiz('dv_kb', BETET_MIN, BETET_MAX, '#kb'); tiz('dv_ka', BETET_MIN, BETET_MAX, '#ka');\r\n      tiz('dv_hk', 0, HITEL_KAMAT_MAX, '#hk'); tiz('dv_hfk', 0, BETET_MAX, '#hfk'); tiz('dv_hu', 0, HITEL_KAMAT_MAX, '#hu');\r\n      var hf = q.get('dv_hf');\r\n      if (hf !== null && \/^\\d{1,2}$\/.test(hf) && Number(hf) >= 1 && Number(hf) <= FUTAMIDO_MAX) { this.$('#hf').value = String(Number(hf)); volt = true; }\r\n      if (q.get('dv_ad') === '1') { this.$('#ado').checked = true; volt = true; }\r\n      if (q.get('dv_hz') === '0' || q.get('dv_hz') === '1') { this.$('#hz').checked = q.get('dv_hz') === '1'; volt = true; }\r\n      if (q.get('dv_hkt') === 'valt' || q.get('dv_hkt') === 'fix') { this.$('#hkt').value = q.get('dv_hkt'); volt = true; }   \/\/ 1.17\r\n      if (q.get('dv_hks') === '0' || q.get('dv_hks') === '1') { this.$('#hks').checked = q.get('dv_hks') === '1'; volt = true; }\r\n      \/\/ 1.8: napi \u00e1rfolyam az alapn\u00e9zetben (dv_r=napi, dv_tn \/ dv_vn: a k\u00e9t nap)\r\n      var vanParam = false; q.forEach(function (v, k) { if (\/^dv_\/.test(k)) vanParam = true; });\r\n      if (q.get('dv_r') === 'havi' || (vanParam && q.get('dv_r') === null && q.get('dv_n') !== 'napi')) this._arfMod = 'havi';   \/\/ r\u00e9gi linkek havi m\u00f3dban\r\n      if (q.get('dv_r') === 'napi') {\r\n        var tn = q.get('dv_tn'), vn = q.get('dv_vn');\r\n        if (datumRendben(tn) && tn >= '1990-01-01') this.$('#t0-nap').value = tn;\r\n        if (datumRendben(vn) && vn >= '1990-01-01') this.$('#t1-nap').value = vn;\r\n        this._arfModValt('napi'); this._idoModositva = true; volt = true;\r\n      }\r\n      var nz = q.get('dv_n');\r\n      if (nz === 'bef' || nz === 'hitel' || nz === 'napi') { this._nezetValtas(nz, true); volt = true; }\r\n      \/\/ napi n\u00e9zet poz\u00edci\u00f3i a linkb\u0151l (1.7): minden mez\u0151t ellen\u0151rz\u00fcnk (_pozTisztit)\r\n      var pz = q.get('dv_poz');\r\n      if (pz && pz.length <= 8000) {\r\n        var lista = this._pozTisztit(pz.split('!').map(function (t) { var f = t.split('~'); return f.length === 4 || f.length === 7 ? { nev: f[0], k: f[1], v: f[2], e: f[3], db: f[4], av: f[5], ae: f[6] } : null; }));\r\n        if (lista.length) { this._poz = lista; this._pozKiv = 0; volt = true; }\r\n      }\r\n      this._pillanatJeloles();\r\n      return volt;\r\n    }\r\n\r\n    _linkMasolas(gomb) {\r\n      var LINK_KULCSOK = ['dv_a', 'dv_b', 'dv_o', 'dv_t', 'dv_v', 'dv_h', 'dv_ti', 'dv_vs', 'dv_n', 'dv_m', 'dv_p', 'dv_kb', 'dv_ka', 'dv_hf', 'dv_hk', 'dv_hfk', 'dv_hu', 'dv_hz', 'dv_hkt', 'dv_hks', 'dv_ad', 'dv_poz', 'dv_r', 'dv_tn', 'dv_vn'];\r\n      if (this._nezet === 'napi') {\r\n        \/\/ poz\u00edci\u00f3k: megnevez\u00e9s~deviza~v\u00e9tel~elad\u00e1s, poz\u00edci\u00f3nk\u00e9nt \"!\" v\u00e1lasztja el (a megnevez\u00e9sben ezek nem fordulhatnak el\u0151)\r\n        var u = new URL(window.location.href);\r\n        LINK_KULCSOK.forEach(function (k) { u.searchParams.delete(k); });\r\n        u.searchParams.set('dv_n', 'napi');\r\n        u.searchParams.set('dv_poz', this._poz.map(function (p) { return [p.nev, p.k, p.v, p.e, p.db || '', p.av || '', p.ae || ''].join('~'); }).join('!'));   \/\/ 1.14: 7 mez\u0151\r\n        u.hash = '';\r\n        return this._linkKiir(gomb, u.toString());\r\n      }\r\n      if (!this._adat) return;\r\n      var b = this._adat.b, url = new URL(window.location.href);\r\n      LINK_KULCSOK.forEach(function (k) { url.searchParams.delete(k); });\r\n      if (b.a !== 'HUF') url.searchParams.set('dv_a', b.a);\r\n      url.searchParams.set('dv_b', b.b);\r\n      url.searchParams.set('dv_o', String(Math.round(b.osszeg)));\r\n      url.searchParams.set('dv_t', hStr(b.t0));\r\n      if (this._nezet !== 'hitel') url.searchParams.set('dv_v', hStr(b.t1));\r\n      url.searchParams.set('dv_r', b.napi ? 'napi' : 'havi');   \/\/ 1.11: mindig (a dv_r n\u00e9lk\u00fcli r\u00e9gi linkek havi m\u00f3dban ny\u00edlnak)\r\n      if (b.napi) {   \/\/ 1.8\u20131.9: napi \u00e1rfolyam a k\u00e9t nappal (hiteln\u00e9l csak a felv\u00e9tel napja)\r\n        if (datumRendben(b.d0)) url.searchParams.set('dv_tn', b.d0);\r\n        if (datumRendben(b.d1) && this._nezet !== 'hitel') url.searchParams.set('dv_vn', b.d1);\r\n      }\r\n      if (this._nezet === 'hitel') {\r\n        var h = this._hitelBemenet();\r\n        url.searchParams.set('dv_n', 'hitel');\r\n        if (!h.hiba) { url.searchParams.set('dv_hf', String(h.futamido)); url.searchParams.set('dv_hk', String(h.kamat)); }\r\n        if (h.forintKamat !== null) url.searchParams.set('dv_hfk', String(h.forintKamat));\r\n        if (h.utanaKamat !== null) url.searchParams.set('dv_hu', String(h.utanaKamat));\r\n        if (!h.forintositas) url.searchParams.set('dv_hz', '0');\r\n        if (h.valtozo) { url.searchParams.set('dv_hkt', 'valt'); if (!h.kamatstop) url.searchParams.set('dv_hks', '0'); }\r\n      } else if (this._nezet === 'bef') {\r\n        url.searchParams.set('dv_n', 'bef');\r\n        if (b.hozam !== null) url.searchParams.set('dv_h', String(b.hozam));\r\n        url.searchParams.set('dv_ti', String(b.tartas));\r\n        if (b.port.length) url.searchParams.set('dv_p', b.port.map(function (x) { return x.k + ':' + Math.round(x.suly); }).join(','));\r\n      } else {\r\n        if (b.havi !== null) url.searchParams.set('dv_m', String(Math.round(b.havi)));\r\n\r\n        if (b.kbBr) url.searchParams.set('dv_kb', String(b.kbBr));\r\n        if (b.kaBr) url.searchParams.set('dv_ka', String(b.kaBr));\r\n        if (b.ado) url.searchParams.set('dv_ad', '1');\r\n        var vs = []; this._r.querySelectorAll('[data-vs]').forEach(function (s) { if (s.value) vs.push(s.value); });\r\n        if (vs.join(',') !== VERSENY_ALAP.join(',')) url.searchParams.set('dv_vs', vs.join(','));\r\n      }\r\n      url.hash = '';\r\n      this._linkKiir(gomb, url.toString());\r\n    }\r\n    _linkKiir(gomb, link) {\r\n      var doboz = gomb && gomb.closest ? gomb.closest('.megosztas') : this.$('.megosztas');\r\n      var allapot = doboz.querySelector('.allapot'), mezo = doboz.querySelector('.link-mezo');\r\n      var siker = function () {\r\n        mezo.hidden = true; allapot.textContent = '\u2713 Link m\u00e1solva, beillesztheted b\u00e1rhov\u00e1'; allapot.classList.add('ok');\r\n        clearTimeout(allapot._t); allapot._t = setTimeout(function () { allapot.textContent = ''; allapot.classList.remove('ok'); }, 4000);\r\n      };\r\n      var tartalek = function () { mezo.hidden = false; mezo.value = link; mezo.focus(); mezo.select(); allapot.classList.remove('ok'); allapot.textContent = 'M\u00e1sold ki a kijel\u00f6lt linket (Ctrl+C):'; };\r\n      if (navigator.clipboard && window.isSecureContext) navigator.clipboard.writeText(link).then(siker, tartalek); else tartalek();\r\n    }\r\n  }\r\n\r\n  customElements.define('ioc-deviza', IocDeviza);\r\n})();\r\n<\/script>\n<ioc-deviza><\/ioc-deviza>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Forr\u00e1sok:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Deviza\u00e1rfolyamok<\/em><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.mnb.hu\/arfolyamok\">MNB \u2013 Hivatalos deviza\u00e1rfolyamok<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.ecb.europa.eu\/stats\/policy_and_exchange_rates\/euro_reference_exchange_rates\/html\/index.en.html\">EKB \u2013 Eur\u00f3 referencia-\u00e1rfolyamok<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/ec.europa.eu\/eurostat\/databrowser\/view\/ert_bil_eur_m\/default\/table\">Eurostat \u2013 Eur\u00f3-\u00e1rfolyamok, havi (ert_bil_eur_m)<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Infl\u00e1ci\u00f3<\/em><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.ksh.hu\/stadat_files\/ara\/hu\/ara0002.html\">KSH \u2013 A fogyaszt\u00f3i\u00e1r-index f\u0151csoportonk\u00e9nt, \u00e9ves (STADAT ara0002)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/ec.europa.eu\/eurostat\/databrowser\/view\/prc_hicp_ainr\/default\/table\">Eurostat \u2013 HICP, \u00e9ves adatok (prc_hicp_ainr)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/data.worldbank.org\/indicator\/FP.CPI.TOTL.ZG?locations=US\">Vil\u00e1gbank \u2013 Fogyaszt\u00f3i \u00e1rindex, USA (FP.CPI.TOTL.ZG)<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Referenciakamatok (devizahitel)<\/em><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/fred.stlouisfed.org\/series\/IR3TIB01CHM156N\">FRED \u2013 3 havi bankk\u00f6zi kamat, Sv\u00e1jc (IR3TIB01CHM156N)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/fred.stlouisfed.org\/series\/IR3TIB01EZM156N\">FRED \u2013 3 havi bankk\u00f6zi kamat, eur\u00f3\u00f6vezet (IR3TIB01EZM156N)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/fred.stlouisfed.org\/series\/IR3TIB01HUM156N\">FRED \u2013 3 havi bankk\u00f6zi kamat, Magyarorsz\u00e1g (IR3TIB01HUM156N)<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Forintos\u00edt\u00e1s \u00e9s kamatstop<\/em><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.mnb.hu\/fogyasztovedelem\/hitel-lizing\/devizahitelek-forintositasa\">MNB \u2013 Milyen \u00e1rfolyamon forintos\u00edtj\u00e1k a tartoz\u00e1som?<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/bankmonitor.hu\/?p=104523\">Bankmonitor \u2013 Mennyit seg\u00edt a kamatstop meghosszabb\u00edt\u00e1sa a magyaroknak?<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.portfolio.hu\/bank\/20260611\/lakashitelesek-figyelem-dontott-a-tisza-kormany-a-kamatstop-sorsarol-842780\">Portfolio \u2013 D\u00f6nt\u00f6tt a korm\u00e1ny a kamatstop sors\u00e1r\u00f3l<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.economx.hu\/magyar-gazdasag\/bankszovetseg-magyar-peter-tisza-kormany-kamatstop\/\">Economx \u2013 A korm\u00e1ny m\u00e9gsem vezeti ki szeptember v\u00e9g\u00e9vel a kamatstopot<\/a><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<!-- ============================================================\n     GYIK ACCORDION - iO Charts (Devizakalkul\u00e1tor)\n     Egy\u00e9ni HTML blokkba. Cikk: https:\/\/iocharts.io\/blog\/devizakalkulator\/\n     (Ha a cikk v\u00e9gleges URL-je m\u00e1s, a lenti JSON-LD-ben is cser\u00e9ld le.)\n     ============================================================ -->\n<style>\n.io-faq {\n  --faq-navy:      #1b3a5f;\n  --faq-accent:    #e2662c;\n  --faq-text:      #333333;\n  --faq-line:      #dfe5ec;\n  --faq-hover:     #eef4fa;\n  --faq-bg:        #f4f8fc;\n\n  background: var(--faq-bg);\n  padding: 2em 2em 1.5em 2em;\n  border-radius: 10px;\n  max-width: 100%;\n  margin: 2.5em 0;\n}\n\n.io-faq__title {\n  text-align: center;\n  color: var(--faq-navy);\n  margin: 0 0 1.5em 0;\n}\n\n.io-faq__subtitle {\n  display: flex;\n  align-items: center;\n  gap: 1.1em;\n  color: var(--faq-accent);\n  margin: 0 0 1.8em 0;\n  font-size: .95em;\n  white-space: nowrap;\n}\n\n.io-faq__subtitle::before,\n.io-faq__subtitle::after {\n  content: \"\";\n  flex: 1;\n  height: 1px;\n  opacity: .45;\n}\n\n.io-faq__subtitle::before {\n  background: linear-gradient(to right, transparent, var(--faq-accent));\n}\n\n.io-faq__subtitle::after {\n  background: linear-gradient(to left, transparent, var(--faq-accent));\n}\n\n.io-faq__intro {\n  text-align: left;\n  color: var(--faq-text);\n  line-height: 1.7;\n  margin: 0 0 2em 0;\n}\n\n.io-faq__intro p { margin: 0 0 .9em 0; }\n.io-faq__intro p:last-child { margin-bottom: 0; }\n\n.io-faq__item {\n  border-bottom: 1px solid var(--faq-line);\n}\n\n.io-faq__item:first-of-type {\n  border-top: 1px solid var(--faq-line);\n}\n\n.io-faq__q {\n  display: block;\n  padding: 18px 44px 18px 4px;\n  margin: 0;\n  cursor: pointer;\n  position: relative;\n  list-style: none;\n  transition: background .15s ease;\n}\n\n.io-faq__q::-webkit-details-marker { display: none; }\n.io-faq__q::marker { content: \"\"; }\n\n.io-faq__q:hover { background: var(--faq-hover); }\n\n.io-faq__q h3 {\n  margin: 0;\n  padding: 0;\n  font-size: 1.08em;\n  font-weight: 700;\n  line-height: 1.45;\n  color: var(--faq-navy);\n  font-family: inherit;\n  border: 0;\n}\n\n.io-faq__q::after {\n  content: \"\";\n  position: absolute;\n  right: 14px;\n  top: 50%;\n  width: 9px;\n  height: 9px;\n  border-right: 2px solid var(--faq-navy);\n  border-bottom: 2px solid var(--faq-navy);\n  transform: translateY(-70%) rotate(45deg);\n  transition: transform .25s ease;\n}\n\n.io-faq__item[open] .io-faq__q h3 { color: var(--faq-accent); }\n\n.io-faq__item[open] .io-faq__q::after {\n  border-color: var(--faq-accent);\n  transform: translateY(-25%) rotate(-135deg);\n}\n\n.io-faq__a {\n  padding: 0 44px 20px 4px;\n  color: var(--faq-text);\n  line-height: 1.7;\n}\n\n.io-faq__a p { margin: 0 0 .8em 0; }\n.io-faq__a p:last-child { margin-bottom: 0; }\n\n.io-faq__disclaimer {\n  margin: 2em 0 0 0;\n  padding: 16px 18px;\n  border-left: 3px solid var(--faq-accent);\n  background: rgba(255, 255, 255, .55);\n  border-radius: 6px;\n  color: var(--faq-text);\n  font-size: .85em;\n  font-style: italic;\n  line-height: 1.6;\n  opacity: .9;\n}\n\n.io-faq__disclaimer strong {\n  font-style: normal;\n  color: var(--faq-navy);\n}\n\n@media (max-width: 600px) {\n  .io-faq { padding: 1.5em 1.2em 1em 1.2em; }\n  .io-faq__q { padding: 15px 38px 15px 2px; }\n  .io-faq__q h3 { font-size: 1em; }\n  .io-faq__a { padding: 0 10px 16px 2px; }\n  .io-faq__disclaimer { padding: 14px; }\n}\n\n@media (max-width: 480px) {\n  .io-faq__subtitle { gap: .6em; font-size: .85em; }\n}\n<\/style>\n\n<div class=\"io-faq\">\n  <h2 class=\"io-faq__title\">Gyakran Ism\u00e9telt K\u00e9rd\u00e9sek: devizakalkul\u00e1tor<\/h2>\n  <p class=\"io-faq__subtitle\">V\u00e1laszok a leggyakoribb k\u00e9rd\u00e9sekre<\/p>\n  <div class=\"io-faq__intro\">\n    <p>Meg\u00e9rte volna deviz\u00e1ban tartani a p\u00e9nzed, \u00e9s mennyit \u00e9r ma forintban \u00e9s re\u00e1l\u00e9rt\u00e9ken? Itt t\u00f6m\u00f6r v\u00e1laszokat tal\u00e1lsz a devizakalkul\u00e1tor haszn\u00e1lat\u00e1r\u00f3l \u00e9s a m\u00f6g\u00f6tte \u00e1ll\u00f3 fogalmakr\u00f3l: honnan sz\u00e1rmaznak az \u00e1rfolyamok, mikor sz\u00e1molj napi \u00e1rfolyammal \u00e9s mikor havi \u00e1tlaggal, mit jelent a re\u00e1l\u00e9rt\u00e9k, \u00e9s hogyan sz\u00e1mol a kalkul\u00e1tor a r\u00e9szv\u00e9nypoz\u00edci\u00f3kkal \u00e9s a devizahitelekkel.<\/p>\n    <p>Kattints b\u00e1rmelyik k\u00e9rd\u00e9sre, \u00e9s kiny\u00edlik a v\u00e1lasz. Ezek sz\u00e1nd\u00e9kosan r\u00f6vid \u00f6sszefoglal\u00f3k: a r\u00e9szleteket feljebb, a cikk megfelel\u0151 fejezeteiben bontom ki. A p\u00e9ld\u00e1kban szerepl\u0151 sz\u00e1mok a cikk \u00edr\u00e1sakor el\u00e9rhet\u0151 MNB- \u00e9s KSH-adatokat t\u00fckr\u00f6zik.<\/p>\n  <\/div>\n  <details class=\"io-faq__item\">\n    <summary class=\"io-faq__q\"><h3>Mi az a devizakalkul\u00e1tor?<\/h3><\/summary>\n    <div class=\"io-faq__a\">\n      <p>A devizakalkul\u00e1tor egy ingyenes online eszk\u00f6z, amellyel kisz\u00e1molhatod, mennyit \u00e9rt volna ma a p\u00e9nzed, ha egy adott napon deviz\u00e1ra v\u00e1ltod, \u00e9s az\u00f3ta abban tartod. Forintban \u00e9s re\u00e1l\u00e9rt\u00e9ken, a magyar infl\u00e1ci\u00f3val korrig\u00e1lva is megmutatja az eredm\u00e9nyt. Az iO Charts devizakalkul\u00e1tora ezen t\u00fal a rendszeres (havi) devizav\u00e1s\u00e1rl\u00e1st, a deviz\u00e1k verseny\u00e9t, r\u00e9szv\u00e9nypoz\u00edci\u00f3k forintban sz\u00e1molt eredm\u00e9ny\u00e9t \u00e9s a devizahitelek t\u00f6rleszt\u0151r\u00e9szlet\u00e9t is kisz\u00e1molja.<\/p>\n    <\/div>\n  <\/details>\n  <details class=\"io-faq__item\">\n    <summary class=\"io-faq__q\"><h3>Honnan sz\u00e1rmaznak a devizakalkul\u00e1tor adatai?<\/h3><\/summary>\n    <div class=\"io-faq__a\">\n      <p>A deviza\u00e1rfolyamok a Magyar Nemzeti Bank hivatalos napi \u00e1rfolyamai, ezekb\u0151l sz\u00e1molja a havi \u00e1tlagokat is. Ahol az MNB-sor k\u00e9s\u0151bb indul, az elej\u00e9t az Eur\u00f3pai K\u00f6zponti Bank \u00e9s az Eurostat adataib\u00f3l p\u00f3tolja; az eur\u00f3 1999 el\u0151tti \u00e1rfolyama az el\u0151dj\u00e9\u00e9, az ECU-\u00e9. A re\u00e1l\u00e9rt\u00e9k a KSH fogyaszt\u00f3i\u00e1r-index\u00e9vel, a re\u00e1l\u00e1rfolyam az Eurostat \u00e9s a Vil\u00e1gbank k\u00fclf\u00f6ldi infl\u00e1ci\u00f3s adataival, a devizahitel v\u00e1ltoz\u00f3 kamata az OECD 3 havi bankk\u00f6zi kamataival sz\u00e1mol. Az adatok automatikusan friss\u00fclnek, a legut\u00f3bbi h\u00f3nap r\u00e9szleges, ezt a kalkul\u00e1tor csillaggal jel\u00f6li.<\/p>\n    <\/div>\n  <\/details>\n  <details class=\"io-faq__item\">\n    <summary class=\"io-faq__q\"><h3>Napi \u00e1rfolyammal vagy havi \u00e1tlaggal sz\u00e1moljak?<\/h3><\/summary>\n    <div class=\"io-faq__a\">\n      <p>Ha egy konkr\u00e9t v\u00e1lt\u00e1st vagy \u00fcgyletet sz\u00e1molsz, a napi \u00e1rfolyamot v\u00e1laszd: a devizakalkul\u00e1tor ilyenkor az adott nap hivatalos MNB-\u00e1rfolyam\u00e1val sz\u00e1mol. H\u00e9tv\u00e9g\u00e9n \u00e9s \u00fcnnepnapon nincs jegyz\u00e9s, ilyenkor az azt megel\u0151z\u0151 utols\u00f3 jegyz\u00e9si nap \u00e1rfolyam\u00e1t haszn\u00e1lja, \u00e9s ezt ki is \u00edrja. A havi \u00e1tlag hossz\u00fa t\u00e1v\u00fa \u00f6sszevet\u00e9sekhez hasznos, mert kisim\u00edtja a napi kileng\u00e9seket; a rendszeres v\u00e1s\u00e1rl\u00e1s, az id\u0151z\u00edt\u00e9s \u00e9s a deviz\u00e1k versenye mindig havi \u00e1tlaggal sz\u00e1mol.<\/p>\n    <\/div>\n  <\/details>\n  <details class=\"io-faq__item\">\n    <summary class=\"io-faq__q\"><h3>Mit jelent az, hogy re\u00e1l\u00e9rt\u00e9ken?<\/h3><\/summary>\n    <div class=\"io-faq__a\">\n      <p>A nomin\u00e1lis eredm\u00e9ny azt mutatja, h\u00e1ny forintot \u00e9r ma a deviz\u00e1d. A re\u00e1l\u00e9rt\u00e9k azt, hogy ennyi forintb\u00f3l ma mennyit tudsz venni ahhoz k\u00e9pest, amennyit a kezd\u00e9skor tudt\u00e1l. A devizakalkul\u00e1tor ehhez a KSH \u00e9ves fogyaszt\u00f3i\u00e1r-index\u00e9t haszn\u00e1lja. Hossz\u00fa t\u00e1von a doll\u00e1r \u00e9s az eur\u00f3 forintban jelent\u0151sen dr\u00e1gult, a magyar infl\u00e1ci\u00f3 viszont enn\u00e9l is gyorsabb volt, ez\u00e9rt kamat n\u00e9lk\u00fcli devizatart\u00e1ssal re\u00e1l\u00e9rt\u00e9ken a legt\u00f6bb id\u0151szakban vesztes\u00e9g j\u00f6n ki.<\/p>\n    <\/div>\n  <\/details>\n  <details class=\"io-faq__item\">\n    <summary class=\"io-faq__q\"><h3>Meg\u00e9ri deviz\u00e1ban tartani a megtakar\u00edt\u00e1st?<\/h3><\/summary>\n    <div class=\"io-faq__a\">\n      <p>\u00d6nmag\u00e1ban ritk\u00e1n. A devizakalkul\u00e1tor eredm\u00e9nyei szerint kamat n\u00e9lk\u00fcli k\u00e9szp\u00e9nzk\u00e9nt tartva a deviza hossz\u00fa t\u00e1von sem \u0151rizte meg teljesen a v\u00e1s\u00e1rl\u00f3er\u0151t, csak kevesebbet vesz\u00edtett, mint a forintban tartott p\u00e9nz. Nyeres\u00e9get f\u0151leg akkor lehetett el\u00e9rni, ha valaki egyszerre tal\u00e1lta el az \u00e1rfolyam alj\u00e1t \u00e9s tetej\u00e9t. A deviz\u00e1t \u00e9rdemes valamilyen befektet\u00e9sbe tenni (r\u00e9szv\u00e9ny, ETF, k\u00f6tv\u00e9ny), vagy legal\u00e1bb kamatoz\u00f3 form\u00e1ban tartani. A kalkul\u00e1tor kamatmez\u0151iben a deviza- \u00e9s a forintkamatot is megadhatod.<\/p>\n    <\/div>\n  <\/details>\n  <details class=\"io-faq__item\">\n    <summary class=\"io-faq__q\"><h3>Mire j\u00f3 a rendszeres v\u00e1s\u00e1rl\u00e1s \u00e9s a deviz\u00e1k versenye?<\/h3><\/summary>\n    <div class=\"io-faq__a\">\n      <p>A rendszeres v\u00e1s\u00e1rl\u00e1s azt sz\u00e1molja ki, mi lett volna, ha nem egyszerre v\u00e1ltasz, hanem havonta ugyanannyit: a havi v\u00e1s\u00e1rl\u00e1s kisim\u00edtja az \u00e1rfolyam ingadoz\u00e1s\u00e1t, \u00e9s \u00f6sszeveti az eredm\u00e9nyt az egy\u00f6sszeg\u0171 v\u00e1lt\u00e1ssal. A deviz\u00e1k verseny\u00e9ben legfeljebb \u00f6t deviz\u00e1t hasonl\u00edthatsz \u00f6ssze: a grafikon a kezd\u0151 h\u00f3napot 100-nak v\u00e9ve mutatja, melyik mennyit dr\u00e1gult forintban, a t\u00e1bl\u00e1zat pedig az \u00e9vi \u00e1tlagos v\u00e1ltoz\u00e1st \u00e9s a legnagyobb visszaes\u00e9st is.<\/p>\n    <\/div>\n  <\/details>\n  <details class=\"io-faq__item\">\n    <summary class=\"io-faq__q\"><h3>Hogyan sz\u00e1molja ki a devizakalkul\u00e1tor a r\u00e9szv\u00e9nyeim forintban el\u00e9rt eredm\u00e9ny\u00e9t?<\/h3><\/summary>\n    <div class=\"io-faq__a\">\n      <p>A Napi \u00e1rfolyam f\u00fcl\u00f6n poz\u00edci\u00f3nk\u00e9nt megadod a deviz\u00e1t, a v\u00e9tel \u00e9s az elad\u00e1s napj\u00e1t, a darabsz\u00e1mot, a v\u00e9tel\u00e1rat \u00e9s az elad\u00e1si \u00e1rat. A devizakalkul\u00e1tor kikeresi a k\u00e9t nap hivatalos MNB-\u00e1rfolyam\u00e1t, kisz\u00e1molja az eredm\u00e9nyt forintban, \u00e9s sz\u00e9tbontja, mennyi j\u00f6tt a r\u00e9szv\u00e9ny \u00e1rfolyam\u00e1b\u00f3l \u00e9s mennyi a deviz\u00e1b\u00f3l. Az \u00f6sszes poz\u00edci\u00f3t egy\u00fctt is \u00f6sszes\u00edti, v\u00edzes\u00e9s\u00e1br\u00e1val \u00e9s \u00e9v szerinti bont\u00e1ssal, amelyet CSV-ben is let\u00f6lthetsz. Hogy az ad\u00f3z\u00e1sn\u00e1l pontosan melyik nap \u00e9s melyik \u00e1rfolyam sz\u00e1m\u00edt, azt a br\u00f3kered igazol\u00e1sa vagy ad\u00f3szak\u00e9rt\u0151 alapj\u00e1n ellen\u0151rizd.<\/p>\n    <\/div>\n  <\/details>\n  <details class=\"io-faq__item\">\n    <summary class=\"io-faq__q\"><h3>Hogyan sz\u00e1mol a devizakalkul\u00e1tor a devizahitellel?<\/h3><\/summary>\n    <div class=\"io-faq__a\">\n      <p>A Devizahitel f\u00fcl\u00f6n megadod a hitel \u00f6sszeg\u00e9t, deviz\u00e1j\u00e1t, a felv\u00e9tel idej\u00e9t, a futamid\u0151t \u00e9s a kamatot. A kalkul\u00e1tor annuit\u00e1sos t\u00f6rleszt\u00e9ssel, az aktu\u00e1lis \u00e1rfolyamon sz\u00e1molja a havi r\u00e9szletet, \u00e9s sz\u00e9tbontja, mennyit emelt rajta az \u00e1rfolyam \u00e9s mennyit a kamat. Fix kamatn\u00e1l a kamat v\u00e9gig \u00e1lland\u00f3. V\u00e1ltoz\u00f3 kamatn\u00e1l a hitel deviz\u00e1j\u00e1nak referenciakamat\u00e1t k\u00f6veti (frank: CHF-LIBOR, majd SARON; eur\u00f3: EURIBOR; forint: BUBOR) a felv\u00e9telkor r\u00f6gz\u00fcl\u0151 fel\u00e1rral. A frank-, eur\u00f3- \u00e9s jenhitelekn\u00e9l a 2015-\u00f6s forintos\u00edt\u00e1s, a forinthitelekn\u00e9l a 2022-es kamatstop is be\u00e1ll\u00edthat\u00f3. A bankok egyoldal\u00fa kamatemel\u00e9seit nem tartalmazza.<\/p>\n    <\/div>\n  <\/details>\n  <details class=\"io-faq__item\">\n    <summary class=\"io-faq__q\"><h3>Mi\u00e9rt n\u0151tt meg ennyire a sv\u00e1jci frank hitelek t\u00f6rleszt\u0151r\u00e9szlete?<\/h3><\/summary>\n    <div class=\"io-faq__a\">\n      <p>Els\u0151sorban az \u00e1rfolyam miatt, nem a kamat miatt. A sv\u00e1jci frank hiteleket 2005 \u00e9s 2008 k\u00f6z\u00f6tt jellemz\u0151en 145\u2013160 forintos frank\u00e1rfolyamon vett\u00e9k fel, az \u00e1rfolyam pedig 2008 v\u00e9g\u00e9t\u0151l, majd 2010\u20132011-ben 250 forint f\u00f6l\u00e9 is felment. A t\u00f6rleszt\u0151r\u00e9szlet frankban nagyj\u00e1b\u00f3l v\u00e1ltozatlan maradt, forintban viszont az \u00e1rfolyammal egy\u00fctt n\u0151tt. A sv\u00e1jci kamatok ugyanekkor nulla k\u00f6zel\u00e9be estek; a terhet a bankok egyoldal\u00fa kamatemel\u00e9sei n\u00f6velt\u00e9k tov\u00e1bb. A devizakalkul\u00e1tor havonta megmutatja, mennyi a r\u00e9szletemelked\u00e9sb\u0151l az \u00e1rfolyamhat\u00e1s \u00e9s mennyi a kamathat\u00e1s.<\/p>\n    <\/div>\n  <\/details>\n  <details class=\"io-faq__item\">\n    <summary class=\"io-faq__q\"><h3>Elmenthetem vagy megoszthatom a devizakalkul\u00e1tor eredm\u00e9ny\u00e9t?<\/h3><\/summary>\n    <div class=\"io-faq__a\">\n      <p>Igen. A grafikonokat PNG-k\u00e9pk\u00e9nt t\u00f6ltheted le, c\u00edmmel \u00e9s forr\u00e1ssal egy\u00fctt, a r\u00e9szv\u00e9nypoz\u00edci\u00f3kat CSV-f\u00e1jlban, amelyet a magyar Excel k\u00f6zvetlen\u00fcl megnyit. A link gombbal olyan linket m\u00e1solhatsz, amely a be\u00e1ll\u00edt\u00e1saidat meg\u0151rzi, \u00edgy k\u00e9s\u0151bb ugyanonnan folytathatod, vagy elk\u00fcldheted valakinek. A sz\u00e1m\u00edt\u00e1s a b\u00f6ng\u00e9sz\u0151dben fut; a be\u00edrt poz\u00edci\u00f3idat csak a saj\u00e1t b\u00f6ng\u00e9sz\u0151d t\u00e1rolja, nem k\u00fcldj\u00fck el \u00e9s nem mentj\u00fck el \u0151ket.<\/p>\n    <\/div>\n  <\/details>\n  <p class=\"io-faq__disclaimer\"><strong>Fontos:<\/strong> a devizakalkul\u00e1tor t\u00e1j\u00e9koztat\u00f3 jelleg\u0171, az eredm\u00e9nyek a hivatalos \u00e1rfolyamokon \u00e9s statisztikai \u00e1tlagokon alapul\u00f3 becsl\u00e9sek, a bankok \u00e1rfolyamr\u00e9s\u00e9t \u00e9s a v\u00e1lt\u00e1s k\u00f6lts\u00e9geit nem tartalmazz\u00e1k, \u00e9s nem min\u0151s\u00fclnek p\u00e9nz\u00fcgyi, befektet\u00e9si vagy ad\u00f3tan\u00e1csad\u00e1snak.<\/p>\n<\/div>\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@graph\": [\n    {\n      \"@type\": \"Article\",\n      \"@id\": \"https:\/\/iocharts.io\/blog\/devizakalkulator\/#article\",\n      \"mainEntityOfPage\": \"https:\/\/iocharts.io\/blog\/devizakalkulator\/\",\n      \"headline\": \"Devizakalkul\u00e1tor: Meg\u00e9ri deviz\u00e1ban tartani a p\u00e9nzed?\",\n      \"inLanguage\": \"hu\",\n      \"author\": {\n        \"@id\": \"https:\/\/iocharts.io\/blog\/#\/schema\/person\/e285f855a6a9b806cd03c0b62f1c5831\"\n      },\n      \"publisher\": {\n        \"@id\": \"https:\/\/iocharts.io\/blog\/#organization\"\n      },\n      \"about\": {\n        \"@type\": \"Thing\",\n        \"name\": \"Devizakalkul\u00e1tor\",\n        \"alternateName\": [\n          \"deviza kalkul\u00e1tor\",\n          \"\u00e1rfolyamkalkul\u00e1tor\",\n          \"deviza\u00e1rfolyam-kalkul\u00e1tor\",\n          \"devizahitel kalkul\u00e1tor\",\n          \"forint \u00e1rfolyam\"\n        ],\n        \"description\": \"Deviz\u00e1ban tartott p\u00e9nz \u00e9rt\u00e9k\u00e9nek kisz\u00e1m\u00edt\u00e1sa forintban \u00e9s re\u00e1l\u00e9rt\u00e9ken MNB-\u00e1rfolyamokkal, r\u00e9szv\u00e9nypoz\u00edci\u00f3k devizahat\u00e1s\u00e1val \u00e9s devizahitelek t\u00f6rleszt\u0151r\u00e9szlet\u00e9vel.\"\n      },\n      \"mentions\": [\n        {\n          \"@type\": \"GovernmentOrganization\",\n          \"name\": \"Magyar Nemzeti Bank\",\n          \"alternateName\": \"MNB\",\n          \"url\": \"https:\/\/www.mnb.hu\/\"\n        },\n        {\n          \"@type\": \"GovernmentOrganization\",\n          \"name\": \"K\u00f6zponti Statisztikai Hivatal\",\n          \"alternateName\": \"KSH\",\n          \"url\": \"https:\/\/www.ksh.hu\/\"\n        },\n        {\n          \"@type\": \"GovernmentOrganization\",\n          \"name\": \"Eur\u00f3pai K\u00f6zponti Bank\",\n          \"alternateName\": [\n            \"EKB\",\n            \"ECB\"\n          ],\n          \"url\": \"https:\/\/www.ecb.europa.eu\/\"\n        },\n        {\n          \"@type\": \"GovernmentOrganization\",\n          \"name\": \"Eurostat\",\n          \"url\": \"https:\/\/ec.europa.eu\/eurostat\"\n        },\n        {\n          \"@type\": \"Organization\",\n          \"name\": \"OECD\",\n          \"url\": \"https:\/\/www.oecd.org\/\"\n        }\n      ],\n      \"citation\": [\n        {\n          \"@type\": \"CreativeWork\",\n          \"name\": \"MNB \u2013 Hivatalos deviza\u00e1rfolyamok\",\n          \"url\": \"https:\/\/www.mnb.hu\/arfolyamok\"\n        },\n        {\n          \"@type\": \"CreativeWork\",\n          \"name\": \"EKB \u2013 Eur\u00f3 referencia-\u00e1rfolyamok\",\n          \"url\": \"https:\/\/www.ecb.europa.eu\/stats\/policy_and_exchange_rates\/euro_reference_exchange_rates\/html\/index.en.html\"\n        },\n        {\n          \"@type\": \"CreativeWork\",\n          \"name\": \"Eurostat \u2013 Eur\u00f3-\u00e1rfolyamok, havi (ert_bil_eur_m)\",\n          \"url\": \"https:\/\/ec.europa.eu\/eurostat\/databrowser\/view\/ert_bil_eur_m\/default\/table\"\n        },\n        {\n          \"@type\": \"CreativeWork\",\n          \"name\": \"KSH STADAT \u2013 A fogyaszt\u00f3i\u00e1r-index f\u0151csoportonk\u00e9nt, \u00e9ves\",\n          \"url\": \"https:\/\/www.ksh.hu\/stadat_files\/ara\/hu\/ara0002.html\"\n        },\n        {\n          \"@type\": \"CreativeWork\",\n          \"name\": \"FRED \u2013 3-Month Interbank Rates: Switzerland (IR3TIB01CHM156N)\",\n          \"url\": \"https:\/\/fred.stlouisfed.org\/series\/IR3TIB01CHM156N\"\n        },\n        {\n          \"@type\": \"CreativeWork\",\n          \"name\": \"FRED \u2013 3-Month Interbank Rates: Euro Area (IR3TIB01EZM156N)\",\n          \"url\": \"https:\/\/fred.stlouisfed.org\/series\/IR3TIB01EZM156N\"\n        },\n        {\n          \"@type\": \"CreativeWork\",\n          \"name\": \"FRED \u2013 3-Month Interbank Rates: Hungary (IR3TIB01HUM156N)\",\n          \"url\": \"https:\/\/fred.stlouisfed.org\/series\/IR3TIB01HUM156N\"\n        }\n      ]\n    },\n    {\n      \"@type\": \"WebApplication\",\n      \"@id\": \"https:\/\/iocharts.io\/blog\/devizakalkulator\/#devizakalkulator\",\n      \"name\": \"Devizakalkul\u00e1tor\",\n      \"url\": \"https:\/\/iocharts.io\/blog\/devizakalkulator\/\",\n      \"isPartOf\": {\n        \"@id\": \"https:\/\/iocharts.io\/blog\/devizakalkulator\/#article\"\n      },\n      \"applicationCategory\": \"FinanceApplication\",\n      \"operatingSystem\": \"Any\",\n      \"browserRequirements\": \"Requires JavaScript\",\n      \"inLanguage\": \"hu\",\n      \"description\": \"Ingyenes devizakalkul\u00e1tor: MNB napi \u00e9s havi \u00e1rfolyamokkal kisz\u00e1molja, mennyit \u00e9r ma a deviz\u00e1ban tartott p\u00e9nz forintban \u00e9s re\u00e1l\u00e9rt\u00e9ken, kamattal \u00e9s kamatad\u00f3val; rendszeres v\u00e1s\u00e1rl\u00e1s, id\u0151z\u00edt\u00e9s, deviz\u00e1k versenye, befektet\u0151i n\u00e9zet re\u00e1l\u00e1rfolyammal, r\u00e9szv\u00e9nypoz\u00edci\u00f3k forintban sz\u00e1molt eredm\u00e9nye r\u00e9szv\u00e9ny- \u00e9s devizahat\u00e1sra bontva, devizahitel fix vagy v\u00e1ltoz\u00f3 kamattal, forintos\u00edt\u00e1ssal \u00e9s kamatstoppal, PNG- \u00e9s CSV-let\u00f6lt\u00e9ssel, megoszthat\u00f3 linkkel.\",\n      \"offers\": {\n        \"@type\": \"Offer\",\n        \"price\": \"0\",\n        \"priceCurrency\": \"HUF\"\n      },\n      \"author\": {\n        \"@id\": \"https:\/\/iocharts.io\/blog\/#\/schema\/person\/e285f855a6a9b806cd03c0b62f1c5831\"\n      }\n    },\n    {\n      \"@type\": \"FAQPage\",\n      \"@id\": \"https:\/\/iocharts.io\/blog\/devizakalkulator\/#faq\",\n      \"isPartOf\": {\n        \"@id\": \"https:\/\/iocharts.io\/blog\/devizakalkulator\/#article\"\n      },\n      \"mainEntity\": [\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Mi az a devizakalkul\u00e1tor?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"A devizakalkul\u00e1tor egy ingyenes online eszk\u00f6z, amellyel kisz\u00e1molhatod, mennyit \u00e9rt volna ma a p\u00e9nzed, ha egy adott napon deviz\u00e1ra v\u00e1ltod, \u00e9s az\u00f3ta abban tartod. Forintban \u00e9s re\u00e1l\u00e9rt\u00e9ken, a magyar infl\u00e1ci\u00f3val korrig\u00e1lva is megmutatja az eredm\u00e9nyt. Az iO Charts devizakalkul\u00e1tora ezen t\u00fal a rendszeres (havi) devizav\u00e1s\u00e1rl\u00e1st, a deviz\u00e1k verseny\u00e9t, r\u00e9szv\u00e9nypoz\u00edci\u00f3k forintban sz\u00e1molt eredm\u00e9ny\u00e9t \u00e9s a devizahitelek t\u00f6rleszt\u0151r\u00e9szlet\u00e9t is kisz\u00e1molja.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Honnan sz\u00e1rmaznak a devizakalkul\u00e1tor adatai?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"A deviza\u00e1rfolyamok a Magyar Nemzeti Bank hivatalos napi \u00e1rfolyamai, ezekb\u0151l sz\u00e1molja a havi \u00e1tlagokat is. Ahol az MNB-sor k\u00e9s\u0151bb indul, az elej\u00e9t az Eur\u00f3pai K\u00f6zponti Bank \u00e9s az Eurostat adataib\u00f3l p\u00f3tolja; az eur\u00f3 1999 el\u0151tti \u00e1rfolyama az el\u0151dj\u00e9\u00e9, az ECU-\u00e9. A re\u00e1l\u00e9rt\u00e9k a KSH fogyaszt\u00f3i\u00e1r-index\u00e9vel, a re\u00e1l\u00e1rfolyam az Eurostat \u00e9s a Vil\u00e1gbank k\u00fclf\u00f6ldi infl\u00e1ci\u00f3s adataival, a devizahitel v\u00e1ltoz\u00f3 kamata az OECD 3 havi bankk\u00f6zi kamataival sz\u00e1mol. Az adatok automatikusan friss\u00fclnek, a legut\u00f3bbi h\u00f3nap r\u00e9szleges, ezt a kalkul\u00e1tor csillaggal jel\u00f6li.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Napi \u00e1rfolyammal vagy havi \u00e1tlaggal sz\u00e1moljak?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"Ha egy konkr\u00e9t v\u00e1lt\u00e1st vagy \u00fcgyletet sz\u00e1molsz, a napi \u00e1rfolyamot v\u00e1laszd: a devizakalkul\u00e1tor ilyenkor az adott nap hivatalos MNB-\u00e1rfolyam\u00e1val sz\u00e1mol. H\u00e9tv\u00e9g\u00e9n \u00e9s \u00fcnnepnapon nincs jegyz\u00e9s, ilyenkor az azt megel\u0151z\u0151 utols\u00f3 jegyz\u00e9si nap \u00e1rfolyam\u00e1t haszn\u00e1lja, \u00e9s ezt ki is \u00edrja. A havi \u00e1tlag hossz\u00fa t\u00e1v\u00fa \u00f6sszevet\u00e9sekhez hasznos, mert kisim\u00edtja a napi kileng\u00e9seket; a rendszeres v\u00e1s\u00e1rl\u00e1s, az id\u0151z\u00edt\u00e9s \u00e9s a deviz\u00e1k versenye mindig havi \u00e1tlaggal sz\u00e1mol.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Mit jelent az, hogy re\u00e1l\u00e9rt\u00e9ken?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"A nomin\u00e1lis eredm\u00e9ny azt mutatja, h\u00e1ny forintot \u00e9r ma a deviz\u00e1d. A re\u00e1l\u00e9rt\u00e9k azt, hogy ennyi forintb\u00f3l ma mennyit tudsz venni ahhoz k\u00e9pest, amennyit a kezd\u00e9skor tudt\u00e1l. A devizakalkul\u00e1tor ehhez a KSH \u00e9ves fogyaszt\u00f3i\u00e1r-index\u00e9t haszn\u00e1lja. Hossz\u00fa t\u00e1von a doll\u00e1r \u00e9s az eur\u00f3 forintban jelent\u0151sen dr\u00e1gult, a magyar infl\u00e1ci\u00f3 viszont enn\u00e9l is gyorsabb volt, ez\u00e9rt kamat n\u00e9lk\u00fcli devizatart\u00e1ssal re\u00e1l\u00e9rt\u00e9ken a legt\u00f6bb id\u0151szakban vesztes\u00e9g j\u00f6n ki.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Meg\u00e9ri deviz\u00e1ban tartani a megtakar\u00edt\u00e1st?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"\u00d6nmag\u00e1ban ritk\u00e1n. A devizakalkul\u00e1tor eredm\u00e9nyei szerint kamat n\u00e9lk\u00fcli k\u00e9szp\u00e9nzk\u00e9nt tartva a deviza hossz\u00fa t\u00e1von sem \u0151rizte meg teljesen a v\u00e1s\u00e1rl\u00f3er\u0151t, csak kevesebbet vesz\u00edtett, mint a forintban tartott p\u00e9nz. Nyeres\u00e9get f\u0151leg akkor lehetett el\u00e9rni, ha valaki egyszerre tal\u00e1lta el az \u00e1rfolyam alj\u00e1t \u00e9s tetej\u00e9t. A deviz\u00e1t \u00e9rdemes valamilyen befektet\u00e9sbe tenni (r\u00e9szv\u00e9ny, ETF, k\u00f6tv\u00e9ny), vagy legal\u00e1bb kamatoz\u00f3 form\u00e1ban tartani. A kalkul\u00e1tor kamatmez\u0151iben a deviza- \u00e9s a forintkamatot is megadhatod.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Mire j\u00f3 a rendszeres v\u00e1s\u00e1rl\u00e1s \u00e9s a deviz\u00e1k versenye?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"A rendszeres v\u00e1s\u00e1rl\u00e1s azt sz\u00e1molja ki, mi lett volna, ha nem egyszerre v\u00e1ltasz, hanem havonta ugyanannyit: a havi v\u00e1s\u00e1rl\u00e1s kisim\u00edtja az \u00e1rfolyam ingadoz\u00e1s\u00e1t, \u00e9s \u00f6sszeveti az eredm\u00e9nyt az egy\u00f6sszeg\u0171 v\u00e1lt\u00e1ssal. A deviz\u00e1k verseny\u00e9ben legfeljebb \u00f6t deviz\u00e1t hasonl\u00edthatsz \u00f6ssze: a grafikon a kezd\u0151 h\u00f3napot 100-nak v\u00e9ve mutatja, melyik mennyit dr\u00e1gult forintban, a t\u00e1bl\u00e1zat pedig az \u00e9vi \u00e1tlagos v\u00e1ltoz\u00e1st \u00e9s a legnagyobb visszaes\u00e9st is.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Hogyan sz\u00e1molja ki a devizakalkul\u00e1tor a r\u00e9szv\u00e9nyeim forintban el\u00e9rt eredm\u00e9ny\u00e9t?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"A Napi \u00e1rfolyam f\u00fcl\u00f6n poz\u00edci\u00f3nk\u00e9nt megadod a deviz\u00e1t, a v\u00e9tel \u00e9s az elad\u00e1s napj\u00e1t, a darabsz\u00e1mot, a v\u00e9tel\u00e1rat \u00e9s az elad\u00e1si \u00e1rat. A devizakalkul\u00e1tor kikeresi a k\u00e9t nap hivatalos MNB-\u00e1rfolyam\u00e1t, kisz\u00e1molja az eredm\u00e9nyt forintban, \u00e9s sz\u00e9tbontja, mennyi j\u00f6tt a r\u00e9szv\u00e9ny \u00e1rfolyam\u00e1b\u00f3l \u00e9s mennyi a deviz\u00e1b\u00f3l. Az \u00f6sszes poz\u00edci\u00f3t egy\u00fctt is \u00f6sszes\u00edti, v\u00edzes\u00e9s\u00e1br\u00e1val \u00e9s \u00e9v szerinti bont\u00e1ssal, amelyet CSV-ben is let\u00f6lthetsz. Hogy az ad\u00f3z\u00e1sn\u00e1l pontosan melyik nap \u00e9s melyik \u00e1rfolyam sz\u00e1m\u00edt, azt a br\u00f3kered igazol\u00e1sa vagy ad\u00f3szak\u00e9rt\u0151 alapj\u00e1n ellen\u0151rizd.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Hogyan sz\u00e1mol a devizakalkul\u00e1tor a devizahitellel?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"A Devizahitel f\u00fcl\u00f6n megadod a hitel \u00f6sszeg\u00e9t, deviz\u00e1j\u00e1t, a felv\u00e9tel idej\u00e9t, a futamid\u0151t \u00e9s a kamatot. A kalkul\u00e1tor annuit\u00e1sos t\u00f6rleszt\u00e9ssel, az aktu\u00e1lis \u00e1rfolyamon sz\u00e1molja a havi r\u00e9szletet, \u00e9s sz\u00e9tbontja, mennyit emelt rajta az \u00e1rfolyam \u00e9s mennyit a kamat. Fix kamatn\u00e1l a kamat v\u00e9gig \u00e1lland\u00f3. V\u00e1ltoz\u00f3 kamatn\u00e1l a hitel deviz\u00e1j\u00e1nak referenciakamat\u00e1t k\u00f6veti (frank: CHF-LIBOR, majd SARON; eur\u00f3: EURIBOR; forint: BUBOR) a felv\u00e9telkor r\u00f6gz\u00fcl\u0151 fel\u00e1rral. A frank-, eur\u00f3- \u00e9s jenhitelekn\u00e9l a 2015-\u00f6s forintos\u00edt\u00e1s, a forinthitelekn\u00e9l a 2022-es kamatstop is be\u00e1ll\u00edthat\u00f3. A bankok egyoldal\u00fa kamatemel\u00e9seit nem tartalmazza.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Mi\u00e9rt n\u0151tt meg ennyire a sv\u00e1jci frank hitelek t\u00f6rleszt\u0151r\u00e9szlete?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"Els\u0151sorban az \u00e1rfolyam miatt, nem a kamat miatt. A sv\u00e1jci frank hiteleket 2005 \u00e9s 2008 k\u00f6z\u00f6tt jellemz\u0151en 145\u2013160 forintos frank\u00e1rfolyamon vett\u00e9k fel, az \u00e1rfolyam pedig 2008 v\u00e9g\u00e9t\u0151l, majd 2010\u20132011-ben 250 forint f\u00f6l\u00e9 is felment. A t\u00f6rleszt\u0151r\u00e9szlet frankban nagyj\u00e1b\u00f3l v\u00e1ltozatlan maradt, forintban viszont az \u00e1rfolyammal egy\u00fctt n\u0151tt. A sv\u00e1jci kamatok ugyanekkor nulla k\u00f6zel\u00e9be estek; a terhet a bankok egyoldal\u00fa kamatemel\u00e9sei n\u00f6velt\u00e9k tov\u00e1bb. A devizakalkul\u00e1tor havonta megmutatja, mennyi a r\u00e9szletemelked\u00e9sb\u0151l az \u00e1rfolyamhat\u00e1s \u00e9s mennyi a kamathat\u00e1s.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Elmenthetem vagy megoszthatom a devizakalkul\u00e1tor eredm\u00e9ny\u00e9t?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"Igen. A grafikonokat PNG-k\u00e9pk\u00e9nt t\u00f6ltheted le, c\u00edmmel \u00e9s forr\u00e1ssal egy\u00fctt, a r\u00e9szv\u00e9nypoz\u00edci\u00f3kat CSV-f\u00e1jlban, amelyet a magyar Excel k\u00f6zvetlen\u00fcl megnyit. A link gombbal olyan linket m\u00e1solhatsz, amely a be\u00e1ll\u00edt\u00e1saidat meg\u0151rzi, \u00edgy k\u00e9s\u0151bb ugyanonnan folytathatod, vagy elk\u00fcldheted valakinek. A sz\u00e1m\u00edt\u00e1s a b\u00f6ng\u00e9sz\u0151dben fut; a be\u00edrt poz\u00edci\u00f3idat csak a saj\u00e1t b\u00f6ng\u00e9sz\u0151d t\u00e1rolja, nem k\u00fcldj\u00fck el \u00e9s nem mentj\u00fck el \u0151ket.\"\n          }\n        }\n      ]\n    }\n  ]\n}\n<\/script>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>Az infl\u00e1ci\u00f3kalkul\u00e1tor ut\u00e1n itt a devizakalkul\u00e1tor befektet\u00e9sekhez. Egy ideje m\u00e1r akartam \u00edrni egyet, hogy megn\u00e9zzem, hosszabb t\u00e1von merre mozognak a deviz\u00e1k egym\u00e1shoz k\u00e9pest \u00e9s hogy megk\u00f6nny\u00edtsem az ad\u00f3bevall\u00e1s kit\u00f6lt\u00e9s\u00e9t, ha r\u00e9szv\u00e9nyeket tartok (err\u0151l majd a sorozat m\u00e1sodik r\u00e9szben). Mivel ez m\u00e1r a harmadik kalkul\u00e1tor az oldalon, \u00e9rdemes az el\u0151z\u0151ket is megn\u00e9zned. Kezdj\u00fck el\u0151sz\u00f6r a devizap\u00e1rok [&hellip;]<\/p>\n<div class=\"read-more\"><a href=\"https:\/\/iocharts.io\/blog\/devizakalkulator-megeri-devizaban-tartani-a-penzed\/\" class=\"btn btn-primary btn-lg\">Tov\u00e1bb<\/a><\/div>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":2,"featured_media":12839,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[459],"tags":[9,468,467,471,470,74],"class_list":["post-12778","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kalkulatorok","tag-befektetes","tag-deviza","tag-devizakalkulator","tag-devizakockazat","tag-kalkulator-2","tag-portfolioblogger"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Devizakalkul\u00e1tor I. r\u00e9sz: meg\u00e9ri deviz\u00e1ban tartani a p\u00e9nzed?<\/title>\n<meta name=\"description\" content=\"Meg\u00e9ri deviz\u00e1t tartani? A devizakalkul\u00e1tor 1990-ig visszamen\u0151leg megmutatja az \u00e1rfolyamnyeres\u00e9get \u00e9s az infl\u00e1ci\u00f3val korrig\u00e1lt re\u00e1lhozamot is.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/iocharts.io\/blog\/devizakalkulator-megeri-devizaban-tartani-a-penzed\/\" \/>\n<meta property=\"og:locale\" content=\"hu_HU\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Devizakalkul\u00e1tor I. r\u00e9sz: meg\u00e9ri deviz\u00e1ban tartani a p\u00e9nzed?\" \/>\n<meta property=\"og:description\" content=\"Meg\u00e9ri deviz\u00e1t tartani? A devizakalkul\u00e1tor 1990-ig visszamen\u0151leg megmutatja az \u00e1rfolyamnyeres\u00e9get \u00e9s az infl\u00e1ci\u00f3val korrig\u00e1lt re\u00e1lhozamot is.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/iocharts.io\/blog\/devizakalkulator-megeri-devizaban-tartani-a-penzed\/\" \/>\n<meta property=\"og:site_name\" content=\"iO Charts\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/iOCharts\" \/>\n<meta property=\"article:published_time\" content=\"2026-11-15T08:01:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/iocharts.io\/blog\/wp-content\/uploads\/Devizalalkulator-001-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1110\" \/>\n\t<meta property=\"og:image:height\" content=\"625\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Marton J. Bulla\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@iOCharts\" \/>\n<meta name=\"twitter:site\" content=\"@iOCharts\" \/>\n<meta name=\"twitter:label1\" content=\"Szerz\u0151:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Marton J. Bulla\" \/>\n\t<meta name=\"twitter:label2\" content=\"Becs\u00fclt olvas\u00e1si id\u0151\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 perc\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/devizakalkulator-megeri-devizaban-tartani-a-penzed\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/devizakalkulator-megeri-devizaban-tartani-a-penzed\\\/\"},\"author\":{\"name\":\"Marton J. Bulla\",\"@id\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/#\\\/schema\\\/person\\\/e285f855a6a9b806cd03c0b62f1c5831\"},\"headline\":\"Devizakalkul\u00e1tor I. r\u00e9sz: meg\u00e9ri deviz\u00e1ban tartani a p\u00e9nzed?\",\"datePublished\":\"2026-11-15T08:01:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/devizakalkulator-megeri-devizaban-tartani-a-penzed\\\/\"},\"wordCount\":2294,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/devizakalkulator-megeri-devizaban-tartani-a-penzed\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/wp-content\\\/uploads\\\/Devizalalkulator-001-scaled.jpg\",\"keywords\":[\"befektet\u00e9s\",\"deviza\",\"devizakalkul\u00e1tor\",\"devizakock\u00e1zat\",\"kalkul\u00e1tor\",\"portfolioblogger\"],\"articleSection\":[\"Kalkul\u00e1torok\"],\"inLanguage\":\"hu\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/iocharts.io\\\/blog\\\/devizakalkulator-megeri-devizaban-tartani-a-penzed\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/devizakalkulator-megeri-devizaban-tartani-a-penzed\\\/\",\"url\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/devizakalkulator-megeri-devizaban-tartani-a-penzed\\\/\",\"name\":\"Devizakalkul\u00e1tor I. r\u00e9sz: meg\u00e9ri deviz\u00e1ban tartani a p\u00e9nzed?\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/devizakalkulator-megeri-devizaban-tartani-a-penzed\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/devizakalkulator-megeri-devizaban-tartani-a-penzed\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/wp-content\\\/uploads\\\/Devizalalkulator-001-scaled.jpg\",\"datePublished\":\"2026-11-15T08:01:00+00:00\",\"description\":\"Meg\u00e9ri deviz\u00e1t tartani? A devizakalkul\u00e1tor 1990-ig visszamen\u0151leg megmutatja az \u00e1rfolyamnyeres\u00e9get \u00e9s az infl\u00e1ci\u00f3val korrig\u00e1lt re\u00e1lhozamot is.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/devizakalkulator-megeri-devizaban-tartani-a-penzed\\\/#breadcrumb\"},\"inLanguage\":\"hu\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/iocharts.io\\\/blog\\\/devizakalkulator-megeri-devizaban-tartani-a-penzed\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"hu\",\"@id\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/devizakalkulator-megeri-devizaban-tartani-a-penzed\\\/#primaryimage\",\"url\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/wp-content\\\/uploads\\\/Devizalalkulator-001-scaled.jpg\",\"contentUrl\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/wp-content\\\/uploads\\\/Devizalalkulator-001-scaled.jpg\",\"width\":1110,\"height\":625},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/devizakalkulator-megeri-devizaban-tartani-a-penzed\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Devizakalkul\u00e1tor I. r\u00e9sz: meg\u00e9ri deviz\u00e1ban tartani a p\u00e9nzed?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/\",\"name\":\"iO Charts\",\"description\":\"Befektet\u00e9s kezd\u0151knek: r\u00e9szv\u00e9ny, ETF, \u00e1llampap\u00edr, kript\u00f3\",\"publisher\":{\"@id\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"hu\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/#organization\",\"name\":\"iO Charts\",\"url\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"hu\",\"@id\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/01\\\/logo_no_text-1.png\",\"contentUrl\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/01\\\/logo_no_text-1.png\",\"width\":113,\"height\":113,\"caption\":\"iO Charts\"},\"image\":{\"@id\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/iOCharts\",\"https:\\\/\\\/x.com\\\/iOCharts\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/io-charts\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/#\\\/schema\\\/person\\\/e285f855a6a9b806cd03c0b62f1c5831\",\"name\":\"Marton J. Bulla\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"hu\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9de36d5ad5c3e201c61d9296de2ac511a3176fe676b33d3949658f37497f5b4d?s=96&d=retro&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9de36d5ad5c3e201c61d9296de2ac511a3176fe676b33d3949658f37497f5b4d?s=96&d=retro&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9de36d5ad5c3e201c61d9296de2ac511a3176fe676b33d3949658f37497f5b4d?s=96&d=retro&r=g\",\"caption\":\"Marton J. Bulla\"},\"description\":\"M\u00e1rton J. Bulla is a fundamental analyst and a committed long-term investor. Instead of forecasting macroeconomic trends, he dives deep into individual companies, focusing on capital allocation, value creation, and sustainable growth. His primary interest lies in the world of serial acquirers, and he increasingly focuses on a concentrated portfolio. M\u00e1rton believes in transparency and authenticity: he manages his entire wealth according to the strategy he publishes on the iO Charts blog. 95% of his assets are invested in individual stocks, while the remaining 5% make up his startup portfolio, a journey he has been documenting since 2021. He holds a degree from IBS, complemented by a background in IT, SEO, and marketing, which allows him to evaluate a company\u2019s technological edge and market position with a unique perspective. When he isn't analyzing financial statements, he is a passionate table soccer player.\",\"url\":\"https:\\\/\\\/iocharts.io\\\/blog\\\/author\\\/marton-bulla\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Devizakalkul\u00e1tor I. r\u00e9sz: meg\u00e9ri deviz\u00e1ban tartani a p\u00e9nzed?","description":"Meg\u00e9ri deviz\u00e1t tartani? A devizakalkul\u00e1tor 1990-ig visszamen\u0151leg megmutatja az \u00e1rfolyamnyeres\u00e9get \u00e9s az infl\u00e1ci\u00f3val korrig\u00e1lt re\u00e1lhozamot is.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/iocharts.io\/blog\/devizakalkulator-megeri-devizaban-tartani-a-penzed\/","og_locale":"hu_HU","og_type":"article","og_title":"Devizakalkul\u00e1tor I. r\u00e9sz: meg\u00e9ri deviz\u00e1ban tartani a p\u00e9nzed?","og_description":"Meg\u00e9ri deviz\u00e1t tartani? A devizakalkul\u00e1tor 1990-ig visszamen\u0151leg megmutatja az \u00e1rfolyamnyeres\u00e9get \u00e9s az infl\u00e1ci\u00f3val korrig\u00e1lt re\u00e1lhozamot is.","og_url":"https:\/\/iocharts.io\/blog\/devizakalkulator-megeri-devizaban-tartani-a-penzed\/","og_site_name":"iO Charts","article_publisher":"https:\/\/www.facebook.com\/iOCharts","article_published_time":"2026-11-15T08:01:00+00:00","og_image":[{"width":1110,"height":625,"url":"https:\/\/iocharts.io\/blog\/wp-content\/uploads\/Devizalalkulator-001-scaled.jpg","type":"image\/jpeg"}],"author":"Marton J. Bulla","twitter_card":"summary_large_image","twitter_creator":"@iOCharts","twitter_site":"@iOCharts","twitter_misc":{"Szerz\u0151:":"Marton J. Bulla","Becs\u00fclt olvas\u00e1si id\u0151":"10 perc"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/iocharts.io\/blog\/devizakalkulator-megeri-devizaban-tartani-a-penzed\/#article","isPartOf":{"@id":"https:\/\/iocharts.io\/blog\/devizakalkulator-megeri-devizaban-tartani-a-penzed\/"},"author":{"name":"Marton J. Bulla","@id":"https:\/\/iocharts.io\/blog\/#\/schema\/person\/e285f855a6a9b806cd03c0b62f1c5831"},"headline":"Devizakalkul\u00e1tor I. r\u00e9sz: meg\u00e9ri deviz\u00e1ban tartani a p\u00e9nzed?","datePublished":"2026-11-15T08:01:00+00:00","mainEntityOfPage":{"@id":"https:\/\/iocharts.io\/blog\/devizakalkulator-megeri-devizaban-tartani-a-penzed\/"},"wordCount":2294,"commentCount":0,"publisher":{"@id":"https:\/\/iocharts.io\/blog\/#organization"},"image":{"@id":"https:\/\/iocharts.io\/blog\/devizakalkulator-megeri-devizaban-tartani-a-penzed\/#primaryimage"},"thumbnailUrl":"https:\/\/iocharts.io\/blog\/wp-content\/uploads\/Devizalalkulator-001-scaled.jpg","keywords":["befektet\u00e9s","deviza","devizakalkul\u00e1tor","devizakock\u00e1zat","kalkul\u00e1tor","portfolioblogger"],"articleSection":["Kalkul\u00e1torok"],"inLanguage":"hu","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/iocharts.io\/blog\/devizakalkulator-megeri-devizaban-tartani-a-penzed\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/iocharts.io\/blog\/devizakalkulator-megeri-devizaban-tartani-a-penzed\/","url":"https:\/\/iocharts.io\/blog\/devizakalkulator-megeri-devizaban-tartani-a-penzed\/","name":"Devizakalkul\u00e1tor I. r\u00e9sz: meg\u00e9ri deviz\u00e1ban tartani a p\u00e9nzed?","isPartOf":{"@id":"https:\/\/iocharts.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/iocharts.io\/blog\/devizakalkulator-megeri-devizaban-tartani-a-penzed\/#primaryimage"},"image":{"@id":"https:\/\/iocharts.io\/blog\/devizakalkulator-megeri-devizaban-tartani-a-penzed\/#primaryimage"},"thumbnailUrl":"https:\/\/iocharts.io\/blog\/wp-content\/uploads\/Devizalalkulator-001-scaled.jpg","datePublished":"2026-11-15T08:01:00+00:00","description":"Meg\u00e9ri deviz\u00e1t tartani? A devizakalkul\u00e1tor 1990-ig visszamen\u0151leg megmutatja az \u00e1rfolyamnyeres\u00e9get \u00e9s az infl\u00e1ci\u00f3val korrig\u00e1lt re\u00e1lhozamot is.","breadcrumb":{"@id":"https:\/\/iocharts.io\/blog\/devizakalkulator-megeri-devizaban-tartani-a-penzed\/#breadcrumb"},"inLanguage":"hu","potentialAction":[{"@type":"ReadAction","target":["https:\/\/iocharts.io\/blog\/devizakalkulator-megeri-devizaban-tartani-a-penzed\/"]}]},{"@type":"ImageObject","inLanguage":"hu","@id":"https:\/\/iocharts.io\/blog\/devizakalkulator-megeri-devizaban-tartani-a-penzed\/#primaryimage","url":"https:\/\/iocharts.io\/blog\/wp-content\/uploads\/Devizalalkulator-001-scaled.jpg","contentUrl":"https:\/\/iocharts.io\/blog\/wp-content\/uploads\/Devizalalkulator-001-scaled.jpg","width":1110,"height":625},{"@type":"BreadcrumbList","@id":"https:\/\/iocharts.io\/blog\/devizakalkulator-megeri-devizaban-tartani-a-penzed\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/iocharts.io\/blog\/"},{"@type":"ListItem","position":2,"name":"Devizakalkul\u00e1tor I. r\u00e9sz: meg\u00e9ri deviz\u00e1ban tartani a p\u00e9nzed?"}]},{"@type":"WebSite","@id":"https:\/\/iocharts.io\/blog\/#website","url":"https:\/\/iocharts.io\/blog\/","name":"iO Charts","description":"Befektet\u00e9s kezd\u0151knek: r\u00e9szv\u00e9ny, ETF, \u00e1llampap\u00edr, kript\u00f3","publisher":{"@id":"https:\/\/iocharts.io\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/iocharts.io\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"hu"},{"@type":"Organization","@id":"https:\/\/iocharts.io\/blog\/#organization","name":"iO Charts","url":"https:\/\/iocharts.io\/blog\/","logo":{"@type":"ImageObject","inLanguage":"hu","@id":"https:\/\/iocharts.io\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/iocharts.io\/blog\/wp-content\/uploads\/2020\/01\/logo_no_text-1.png","contentUrl":"https:\/\/iocharts.io\/blog\/wp-content\/uploads\/2020\/01\/logo_no_text-1.png","width":113,"height":113,"caption":"iO Charts"},"image":{"@id":"https:\/\/iocharts.io\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/iOCharts","https:\/\/x.com\/iOCharts","https:\/\/www.linkedin.com\/company\/io-charts"]},{"@type":"Person","@id":"https:\/\/iocharts.io\/blog\/#\/schema\/person\/e285f855a6a9b806cd03c0b62f1c5831","name":"Marton J. Bulla","image":{"@type":"ImageObject","inLanguage":"hu","@id":"https:\/\/secure.gravatar.com\/avatar\/9de36d5ad5c3e201c61d9296de2ac511a3176fe676b33d3949658f37497f5b4d?s=96&d=retro&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/9de36d5ad5c3e201c61d9296de2ac511a3176fe676b33d3949658f37497f5b4d?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9de36d5ad5c3e201c61d9296de2ac511a3176fe676b33d3949658f37497f5b4d?s=96&d=retro&r=g","caption":"Marton J. Bulla"},"description":"M\u00e1rton J. Bulla is a fundamental analyst and a committed long-term investor. Instead of forecasting macroeconomic trends, he dives deep into individual companies, focusing on capital allocation, value creation, and sustainable growth. His primary interest lies in the world of serial acquirers, and he increasingly focuses on a concentrated portfolio. M\u00e1rton believes in transparency and authenticity: he manages his entire wealth according to the strategy he publishes on the iO Charts blog. 95% of his assets are invested in individual stocks, while the remaining 5% make up his startup portfolio, a journey he has been documenting since 2021. He holds a degree from IBS, complemented by a background in IT, SEO, and marketing, which allows him to evaluate a company\u2019s technological edge and market position with a unique perspective. When he isn't analyzing financial statements, he is a passionate table soccer player.","url":"https:\/\/iocharts.io\/blog\/author\/marton-bulla\/"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/iocharts.io\/blog\/wp-content\/uploads\/Devizalalkulator-001-scaled.jpg","gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/iocharts.io\/blog\/wp-json\/wp\/v2\/posts\/12778","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/iocharts.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/iocharts.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/iocharts.io\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/iocharts.io\/blog\/wp-json\/wp\/v2\/comments?post=12778"}],"version-history":[{"count":13,"href":"https:\/\/iocharts.io\/blog\/wp-json\/wp\/v2\/posts\/12778\/revisions"}],"predecessor-version":[{"id":12851,"href":"https:\/\/iocharts.io\/blog\/wp-json\/wp\/v2\/posts\/12778\/revisions\/12851"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/iocharts.io\/blog\/wp-json\/wp\/v2\/media\/12839"}],"wp:attachment":[{"href":"https:\/\/iocharts.io\/blog\/wp-json\/wp\/v2\/media?parent=12778"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/iocharts.io\/blog\/wp-json\/wp\/v2\/categories?post=12778"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/iocharts.io\/blog\/wp-json\/wp\/v2\/tags?post=12778"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}