{"id":43297,"date":"2026-09-14T10:20:26","date_gmt":"2026-09-14T08:20:26","guid":{"rendered":"https:\/\/www.finanzen.net\/ratgeber\/?p=43297"},"modified":"2026-10-20T18:59:59","modified_gmt":"2026-10-20T16:59:59","slug":"rentenlueckerechner","status":"publish","type":"post","link":"https:\/\/www.finanzen.net\/ratgeber\/altersvorsorgedepot\/rentenlueckerechner\/","title":{"rendered":"Rentenl\u00fcckenrechner"},"content":{"rendered":"\n<div class=\"container container--narrow\">\n    <div class=\"header\">\n                    <div class=\"header__image\">\n                <img loading=\"lazy\" decoding=\"async\" width=\"1376\" height=\"768\" src=\"https:\/\/www.finanzen.net\/ratgeber\/wp-content\/uploads\/2026\/09\/rentenluecke_a1_puzzle_v2.png\" class=\"attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" srcset=\"https:\/\/www.finanzen.net\/ratgeber\/wp-content\/uploads\/2026\/09\/rentenluecke_a1_puzzle_v2.png 1376w, https:\/\/www.finanzen.net\/ratgeber\/wp-content\/uploads\/2026\/09\/rentenluecke_a1_puzzle_v2-300x167.png 300w, https:\/\/www.finanzen.net\/ratgeber\/wp-content\/uploads\/2026\/09\/rentenluecke_a1_puzzle_v2-1024x572.png 1024w, https:\/\/www.finanzen.net\/ratgeber\/wp-content\/uploads\/2026\/09\/rentenluecke_a1_puzzle_v2-768x429.png 768w\" sizes=\"auto, (max-width: 1376px) 100vw, 1376px\" \/>                                    <div class=\"header__image-credit\">Bildquelle: Mit KI generiertes Symbolbild \/ finanzen.net Ratgeber<\/div>\n                            <\/div>\n                <div class=\"header__text\">\n                            <div class=\"headline headline--preline headline--h4 header__preline\">\n                    Rentenrechner                <\/div>\n                                        <h1 class=\"headline headline--h1 header__headline headline--has-preline\">\n                    Rentenrechner: So gro\u00df ist deine Rentenl\u00fccke                <\/h1>\n                        <div class=\"header__excerpt flow-content\">\n                                    <p>Die Renteninformation nennt einen Bruttobetrag. Was davon nach Steuern, Kranken- und Pflegeversicherung \u00fcbrig bleibt, steht dort nicht. Genau dort setzt der Rente-Rechner an: Er stellt deiner voraussichtlichen Nettorente gegen\u00fcber, was du im Alter tats\u00e4chlich brauchst, rechnet die Differenz in das Kapital um, das dir zum Rentenbeginn fehlt, und zeigt die monatliche Sparrate, die n\u00f6tig ist, um es aufzubauen.<\/p>\n                            <\/div>\n            <div class=\"header__footer\">\n                <span class=\"header__meta\">\n                    <img loading=\"lazy\" decoding=\"async\" class=\"header__author-image\"\n                         src=\"https:\/\/www.finanzen.net\/ratgeber\/wp-content\/uploads\/2025\/10\/Roland_Kuse-1-150x150.jpg\"\n                         width=\"58\"\n                         height=\"58\"\n                         alt=\"\">\n                    <span class=\"header__meta-info\">\n                        <span class=\"header__author-name\">\n                            von <a href=\"https:\/\/www.finanzen.net\/ratgeber\/author\/roland-kruse\/\" rel=\"author\" class=\"link link--no-underline\">Roland Kuse<\/a>                        <\/span>\n                        <span class=\"header__date\">\n                            <span class=\"hide-on-smartphone\">Aktualisiert am<\/span>\n                            <time datetime=\"2026-10-20 18:59\"\n                                  title=\"Aktualisiert am 20.10.2026\">\n                                20.10.26                            <\/time>\n                        <\/span>\n                    <\/span>\n                <\/span>\n\n                                    <div class=\"header__buttons\">\n                                                    <a class=\"fnet-button fnet-button--small\"\n                                                                  style=\"--button-background:#d2042d;--button-hover-background:#d2042d;\"\n                                                              href=\"https:\/\/www.finanzen.net\/ratgeber\/vorsorge\/altersvorsorgedepot-rechner\/\"\n                               target=\"\">\n                                zum Altersvorsorgedepot Rechner                            <\/a>\n                                            <\/div>\n                            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n\n\n<div class=\"container container--narrow\" >\n    <div class=\"text\">\n        <div class=\"text__inner flow-content\">\n                            <!-- ============================================================\r\n  AVD Embed-Build | Tool 8.6 PreLaunch\r\n  Quelle: Tool_8.6_-_Rentenrechner_PreLaunch_Styleguided_Preview.html\r\n  Generiert via Inline Embed\/_build\/embed_build.js\r\n  EINBAU: Kompletten Inhalt dieser Datei in EINEN WordPress-Custom-HTML-Block kopieren.\r\n  KEINE <link>-Stylesheets noetig; nur EIN Tool pro Seite einbinden.\r\n  ZEICHENSATZ: UTF-8 \u2014 \u00c4\u00d6\u00dc\u00e4\u00f6\u00fc\u00df\u20ac. Nicht entfernen: siehe Kommentar in embed_build.js.\r\n============================================================ -->\r\n<div class=\"avd-embed avdemb-t83pl\" data-avd-tool=\"8.6 PreLaunch\">\r\n<style>\r\n  .avdemb-t83pl {\r\n    --bg:       #f0f4f8;\r\n    --surface:  #ffffff;\r\n    --surface2: #f4f6f9;\r\n    --border:   #dce3ea;\r\n    --accent:   #2691ff;\r\n    --accent2:  #0d4d8a;\r\n    --pink:     #E8327A;\r\n    --text:     #1a2332;\r\n    --muted:    #6c7a8a;\r\n    --warning:  #d97706;\r\n    --error:    #dc2626;\r\n    --success:  #16a34a;\r\n    --success-bg: rgba(22,163,74,0.08);\r\n    --danger:   #dc2626;\r\n    --info:     #0d6efd;\r\n  }\r\n\r\n  \/* WP-Outward: Reset auf .tool-wrapper gescopt (kein globales * mehr) *\/\r\n  .avdemb-t83pl .tool-wrapper,\r\n  .avdemb-t83pl .tool-wrapper *,\r\n  .avdemb-t83pl .tool-wrapper *::before,\r\n  .avdemb-t83pl .tool-wrapper *::after { margin: 0; padding: 0; box-sizing: border-box; }\r\n\r\n  \/* WP-Inward: generische Tags gegen einstr\u00f6mendes Theme-CSS abschirmen (Zero-Specificity).\r\n     button\/a bewusst ausgelassen (externe .button-Styleguide-Klasse; PreLaunch-Konvention).\r\n     list-style bewusst NICHT gesetzt (SCHUTZREGEL B: Disclaimer-<ul style=\"list-style:disc\"> bleibt sichtbar). *\/\r\n  .avdemb-t83pl .tool-wrapper :where(h1,h2,h3,h4,p,ul,ol,li,input,select,textarea,label,img) {\r\n    font-family: inherit; font-size: inherit; line-height: inherit; color: inherit;\r\n    background: none; border: 0;\r\n  }\r\n  .avdemb-t83pl .tool-wrapper :where(input,select,textarea) { appearance: auto; }\r\n\r\n  .avdemb-t83pl .tool-wrapper {\r\n    max-width: 900px;\r\n    margin: 0 auto;\r\n    padding: 40px 24px;\r\n    position: relative;\r\n    z-index: 1;\r\n    \/* aus ehem. nackter body-Regel \u00fcbernommen (min-height\/overflow-x sind Seiten-Level \u2192 entfallen) *\/\r\n    font-family: \"OpenSans\", Arial, Helvetica, sans-serif;\r\n    background: var(--bg);\r\n    color: var(--text);\r\n  }\r\n\r\n  .avdemb-t83pl .header { margin-bottom: 48px; animation: kft83pl-fadeUp 0.6s ease both; }\r\n\r\n  .avdemb-t83pl .badge {\r\n    display: inline-flex;\r\n    align-items: center;\r\n    background: #2691ff;\r\n    color: #ffffff;\r\n    border-radius: 4px;\r\n    padding: 6px 14px;\r\n    font-size: 12px;\r\n    font-weight: 600;\r\n    letter-spacing: 0.04em;\r\n    text-transform: uppercase;\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  .avdemb-t83pl .tool-wrapper h1 {\r\n    font-family: \"OpenSans\", Arial, Helvetica, sans-serif;\r\n    font-size: clamp(28px, 5vw, 44px);\r\n    font-weight: 700;\r\n    line-height: 1.1;\r\n    margin-bottom: 12px;\r\n  }\r\n\r\n  .avdemb-t83pl .tool-wrapper h1 span { color: var(--accent); }\r\n\r\n  .avdemb-t83pl .subtitle {\r\n    color: var(--muted);\r\n    font-size: 16px;\r\n    line-height: 1.6;\r\n    max-width: 560px;\r\n  }\r\n\r\n  \/* Form sections *\/\r\n  .avdemb-t83pl .form-section {\r\n    background: var(--surface);\r\n    border: 1px solid var(--border);\r\n    border-radius: 16px;\r\n    padding: 24px;\r\n    margin-bottom: 16px;\r\n    animation: kft83pl-fadeUp 0.6s ease both;\r\n  }\r\n\r\n  .avdemb-t83pl .section-label {\r\n    font-family: \"OpenSans\", Arial, Helvetica, sans-serif;\r\n    font-size: 11px;\r\n    font-weight: 700;\r\n    letter-spacing: 0.1em;\r\n    text-transform: uppercase;\r\n    color: var(--muted);\r\n    margin-bottom: 20px;\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 8px;\r\n  }\r\n\r\n  .avdemb-t83pl .section-label::after {\r\n    content: '';\r\n    flex: 1;\r\n    height: 1px;\r\n    background: var(--border);\r\n  }\r\n\r\n  \/* Collapsible *\/\r\n  .avdemb-t83pl .collapsible-header {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    cursor: pointer;\r\n    padding: 18px 24px;\r\n    background: var(--surface);\r\n    border: 1px solid var(--border);\r\n    border-radius: 16px;\r\n    margin-bottom: 4px;\r\n    transition: border-color 0.2s;\r\n  }\r\n\r\n  .avdemb-t83pl .collapsible-header:hover { border-color: var(--border); }\r\n  .avdemb-t83pl .collapsible-header.open { border-radius: 16px 16px 0 0; border-bottom-color: transparent; margin-bottom: 0; }\r\n\r\n  .avdemb-t83pl .collapsible-title {\r\n    font-family: \"OpenSans\", Arial, Helvetica, sans-serif;\r\n    font-size: 14px;\r\n    font-weight: 700;\r\n    color: var(--text);\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 10px;\r\n  }\r\n\r\n  .avdemb-t83pl .step-badge {\r\n    width: 24px;\r\n    height: 24px;\r\n    border-radius: 50%;\r\n    background: rgba(38,145,255,0.12);\r\n    border: 1px solid rgba(38,145,255,0.3);\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    font-size: 11px;\r\n    font-weight: 700;\r\n    color: var(--accent);\r\n  }\r\n\r\n  .avdemb-t83pl .collapsible-chevron {\r\n    color: var(--muted);\r\n    font-size: 18px;\r\n    transition: transform 0.3s;\r\n  }\r\n\r\n  .avdemb-t83pl .collapsible-chevron.open { transform: rotate(180deg); }\r\n\r\n  .avdemb-t83pl .collapsible-body {\r\n    background: var(--surface);\r\n    border: 1px solid var(--border);\r\n    border-top: none;\r\n    border-radius: 0 0 16px 16px;\r\n    padding: 24px;\r\n    display: none;\r\n    margin-bottom: 16px;\r\n  }\r\n\r\n  .avdemb-t83pl .collapsible-body.open { display: block; }\r\n\r\n  \/* Fields *\/\r\n  .avdemb-t83pl .fields-row {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\r\n    gap: 16px;\r\n  }\r\n\r\n  .avdemb-t83pl .field { display: flex; flex-direction: column; gap: 8px; }\r\n\r\n  .avdemb-t83pl .tool-wrapper label {\r\n    font-size: 13px;\r\n    font-weight: 500;\r\n    color: var(--muted);\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 6px;\r\n  }\r\n\r\n  .avdemb-t83pl .tooltip-wrap { position: relative; display: inline-block; }\r\n\r\n  .avdemb-t83pl .tooltip-icon {\r\n    width: 16px;\r\n    height: 16px;\r\n    border-radius: 50%;\r\n    background: var(--surface2);\r\n    border: 1px solid var(--border);\r\n    color: var(--muted);\r\n    font-size: 10px;\r\n    display: inline-flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    cursor: help;\r\n    flex-shrink: 0;\r\n  }\r\n\r\n  .avdemb-t83pl .tooltip-icon:hover .tooltip-text { display: block; }\r\n\r\n  .avdemb-t83pl .tooltip-text {\r\n    display: none;\r\n    position: absolute;\r\n    bottom: 24px;\r\n    left: 50%;\r\n    transform: translateX(-50%);\r\n    background: #2691ff;\r\n    border: none;\r\n    border-radius: 8px;\r\n    padding: 10px 12px;\r\n    font-size: 12px;\r\n    color: #ffffff;\r\n    width: 240px;\r\n    z-index: 100;\r\n    line-height: 1.6;\r\n    box-shadow: 0 4px 16px rgba(0,0,0,0.2);\r\n  }\r\n\r\n  \/* Tooltip with image *\/\r\n  .avdemb-t83pl .tooltip-img {\r\n    display: none;\r\n    position: absolute;\r\n    bottom: 28px;\r\n    left: 50%;\r\n    transform: translateX(-50%);\r\n    background: #2691ff;\r\n    border: none;\r\n    border-radius: 12px;\r\n    padding: 12px;\r\n    width: 280px;\r\n    z-index: 100;\r\n    box-shadow: 0 4px 16px rgba(0,0,0,0.2);\r\n  }\r\n\r\n  .avdemb-t83pl .tooltip-icon:hover .tooltip-img { display: block; }\r\n\r\n  .avdemb-t83pl .tooltip-img-mockup {\r\n    background: #ffffff;\r\n    border-radius: 8px;\r\n    padding: 12px;\r\n    margin-bottom: 8px;\r\n    font-family: \"OpenSans\", Arial, Helvetica, sans-serif;\r\n  }\r\n\r\n  .avdemb-t83pl .mockup-header {\r\n    font-size: 11px;\r\n    font-weight: 700;\r\n    color: #003366;\r\n    margin-bottom: 8px;\r\n    border-bottom: 2px solid #003366;\r\n    padding-bottom: 4px;\r\n  }\r\n\r\n  .avdemb-t83pl .mockup-row {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    font-size: 10px;\r\n    color: #333;\r\n    padding: 3px 0;\r\n    border-bottom: 1px solid #eee;\r\n  }\r\n\r\n  .avdemb-t83pl .mockup-highlight {\r\n    background: rgba(232,50,122,0.15);\r\n    border: 2px solid var(--accent);\r\n    border-radius: 4px;\r\n    padding: 4px 6px;\r\n    margin-top: 6px;\r\n  }\r\n\r\n  .avdemb-t83pl .mockup-highlight-label {\r\n    font-size: 9px;\r\n    color: var(--accent);\r\n    font-weight: 700;\r\n    margin-bottom: 2px;\r\n  }\r\n\r\n  .avdemb-t83pl .mockup-highlight-value {\r\n    font-size: 13px;\r\n    font-weight: 700;\r\n    color: #003366;\r\n  }\r\n\r\n  .avdemb-t83pl .tooltip-img-text {\r\n    font-size: 11px;\r\n    color: #ffffff;\r\n    line-height: 1.4;\r\n  }\r\n\r\n  .avdemb-t83pl .input-wrap { position: relative; }\r\n\r\n  .avdemb-t83pl .tool-wrapper input[type=\"number\"]::-webkit-inner-spin-button,\r\n  .avdemb-t83pl .tool-wrapper input[type=\"number\"]::-webkit-outer-spin-button { -webkit-appearance:none; margin:0; }\r\n  .avdemb-t83pl .tool-wrapper input[type=\"number\"] { -moz-appearance:textfield; }\r\n  .avdemb-t83pl .tool-wrapper input[type=\"number\"], .avdemb-t83pl .tool-wrapper input[type=\"text\"] {\r\n    width: 100%;\r\n    background: var(--surface2);\r\n    border: 1px solid var(--border);\r\n    border-radius: 10px;\r\n    padding: 12px 48px 12px 16px;\r\n    color: var(--text);\r\n    font-family: \"OpenSans\", Arial, Helvetica, sans-serif;\r\n    font-size: 15px;\r\n    font-weight: 500;\r\n    transition: border-color 0.2s, box-shadow 0.2s;\r\n    appearance: none;\r\n    -webkit-appearance: none;\r\n  }\r\n\r\n  .avdemb-t83pl .tool-wrapper input[type=\"number\"]:focus, .avdemb-t83pl .tool-wrapper input[type=\"text\"]:focus {\r\n    outline: none;\r\n    border-color: var(--accent2);\r\n    box-shadow: 0 0 0 3px rgba(232,50,122,0.08);\r\n  }\r\n\r\n  .avdemb-t83pl .tool-wrapper input.error { border-color: var(--error) !important; }\r\n\r\n  \/* Toggle Monatlich\/J\u00e4hrlich *\/\r\n  .avdemb-t83pl .toggle-bar {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 8px;\r\n    margin-bottom: 24px;\r\n    animation: kft83pl-fadeUp 0.5s ease both;\r\n  }\r\n  .avdemb-t83pl .toggle-btn {\r\n    background: var(--surface2);\r\n    border: 1px solid var(--border);\r\n    border-radius: 8px;\r\n    padding: 8px 16px;\r\n    color: var(--muted);\r\n    font-size: 13px;\r\n    font-weight: 500;\r\n    cursor: pointer;\r\n    transition: all 0.2s;\r\n    font-family: \"OpenSans\", Arial, Helvetica, sans-serif;\r\n  }\r\n  .avdemb-t83pl .toggle-btn.active {\r\n    background: rgba(232,50,122,0.12);\r\n    border-color: #E8327A;\r\n    color: #E8327A;\r\n  }\r\n\r\n  .avdemb-t83pl .currency-suffix {\r\n    position: absolute;\r\n    right: 14px;\r\n    top: 50%;\r\n    transform: translateY(-50%);\r\n    color: var(--muted);\r\n    font-size: 13px;\r\n    pointer-events: none;\r\n  }\r\n\r\n  .avdemb-t83pl .error-msg {\r\n    font-size: 12px;\r\n    color: var(--error);\r\n    display: none;\r\n    margin-top: 4px;\r\n  }\r\n\r\n  \/* Slider *\/\r\n  .avdemb-t83pl .slider-wrap { display: flex; flex-direction: column; gap: 6px; }\r\n\r\n  .avdemb-t83pl .slider-row { display: flex; align-items: center; gap: 12px; }\r\n\r\n  .avdemb-t83pl .tool-wrapper input[type=\"range\"] {\r\n    flex: 1;\r\n    -webkit-appearance: none;\r\n    height: 4px;\r\n    border-radius: 2px;\r\n    background: var(--border);\r\n    cursor: pointer;\r\n  }\r\n\r\n  .avdemb-t83pl .tool-wrapper input[type=\"range\"]::-webkit-slider-thumb {\r\n    -webkit-appearance: none;\r\n    width: 18px;\r\n    height: 18px;\r\n    border-radius: 50%;\r\n    background: var(--accent);\r\n    cursor: pointer;\r\n    border: 2px solid var(--bg);\r\n  }\r\n\r\n  .avdemb-t83pl .slider-val {\r\n    font-size: 14px;\r\n    font-weight: 600;\r\n    color: var(--accent);\r\n    min-width: 50px;\r\n    text-align: right;\r\n  }\r\n\r\n  \/* Toggle *\/\r\n  .avdemb-t83pl .toggle-group {\r\n    display: flex;\r\n    gap: 4px;\r\n    background: var(--surface2);\r\n    border: 1px solid var(--border);\r\n    border-radius: 10px;\r\n    padding: 4px;\r\n  }\r\n\r\n  .avdemb-t83pl .toggle-option {\r\n    flex: 1;\r\n    text-align: center;\r\n    padding: 8px 10px;\r\n    font-size: 12px;\r\n    font-weight: 500;\r\n    color: var(--muted);\r\n    cursor: pointer;\r\n    border-radius: 7px;\r\n    transition: all 0.2s;\r\n    user-select: none;\r\n  }\r\n\r\n  .avdemb-t83pl .toggle-option.active {\r\n    background: #2691ff;\r\n    color: #ffffff;\r\n    border: 1px solid #2691ff;\r\n  }\r\n\r\n  \/* Switch *\/\r\n  .avdemb-t83pl .switch-wrap {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 10px;\r\n    font-size: 13px;\r\n    color: var(--muted);\r\n  }\r\n\r\n  .avdemb-t83pl .switch { position: relative; width: 36px; height: 20px; }\r\n  .avdemb-t83pl .switch input { opacity: 0; width: 0; height: 0; }\r\n\r\n  .avdemb-t83pl .switch-slider {\r\n    position: absolute;\r\n    cursor: pointer;\r\n    top: 0; left: 0; right: 0; bottom: 0;\r\n    background: var(--surface2);\r\n    border: 1px solid var(--border);\r\n    border-radius: 20px;\r\n    transition: 0.3s;\r\n  }\r\n\r\n  .avdemb-t83pl .switch-slider::before {\r\n    content: '';\r\n    position: absolute;\r\n    height: 14px;\r\n    width: 14px;\r\n    left: 2px;\r\n    bottom: 2px;\r\n    background: var(--muted);\r\n    border-radius: 50%;\r\n    transition: 0.3s;\r\n  }\r\n\r\n  .avdemb-t83pl .switch input:checked + .switch-slider { background: rgba(232,50,122,0.3); border-color: var(--accent); }\r\n  .avdemb-t83pl .switch input:checked + .switch-slider::before { transform: translateX(16px); background: var(--accent); }\r\n\r\n  \/* Results *\/\r\n  .avdemb-t83pl .result-section { margin-top: 32px; animation: kft83pl-fadeUp 0.5s ease both; }\r\n\r\n  \/* Szenario-Regler im Ergebnis (Rentenanpassung, aus Wizard-Schritt 5 \u2013 erst nach Berechnung editierbar) *\/\r\n  .avdemb-t83pl .szenario-panel { border: 1px solid #bcd9ff; background: #f4f9ff; border-radius: 12px; padding: 16px 18px; margin-bottom: 20px; }\r\n  .avdemb-t83pl .szenario-panel .sz-frage { font-size: 14px; font-weight: 700; color: var(--text); display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }\r\n  .avdemb-t83pl .szenario-panel .sz-help { font-size: 12px; color: var(--muted); line-height: 1.5; margin: 6px 0 2px; }\r\n\r\n  .avdemb-t83pl .result-title {\r\n    font-family: \"OpenSans\", Arial, Helvetica, sans-serif;\r\n    font-size: 11px;\r\n    font-weight: 700;\r\n    letter-spacing: 0.1em;\r\n    text-transform: uppercase;\r\n    color: var(--muted);\r\n    margin-bottom: 16px;\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 8px;\r\n  }\r\n\r\n  .avdemb-t83pl .result-title::after { content: ''; flex: 1; height: 1px; background: var(--border); }\r\n\r\n  \/* Abzuschlag Hinweis *\/\r\n  .avdemb-t83pl .abzuschlag-box {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 10px;\r\n    padding: 10px 14px;\r\n    border-radius: 10px;\r\n    font-size: 13px;\r\n    margin-top: 8px;\r\n  }\r\n\r\n  .avdemb-t83pl .abzuschlag-box.abschlag {\r\n    background: rgba(226,75,74,0.1);\r\n    border: 1px solid rgba(226,75,74,0.3);\r\n    color: var(--danger);\r\n  }\r\n\r\n  .avdemb-t83pl .abzuschlag-box.zuschlag {\r\n    background: rgba(29,158,117,0.1);\r\n    border: 1px solid rgba(29,158,117,0.3);\r\n    color: var(--success);\r\n  }\r\n\r\n  \/* Metric cards *\/\r\n  .avdemb-t83pl .metric-grid {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\r\n    gap: 12px;\r\n    margin-bottom: 16px;\r\n  }\r\n\r\n  .avdemb-t83pl .metric-card {\r\n    background: var(--surface);\r\n    border: 1px solid var(--border);\r\n    border-radius: 12px;\r\n    padding: 16px;\r\n    display: flex;\r\n    flex-direction: column;\r\n  }\r\n\r\n  \/* Label auf 2 Zeilen H\u00f6he fixieren -> Werte starten karten\u00fcbergreifend auf einer Stufe *\/\r\n  .avdemb-t83pl .metric-label { font-size: 12px; color: var(--muted); margin-bottom: 6px; min-height: 2.8em; line-height: 1.4; display: flex; align-items: flex-start; }\r\n  .avdemb-t83pl .metric-value { font-size: 22px; font-weight: 700; font-family: \"OpenSans\", Arial, Helvetica, sans-serif; }\r\n  .avdemb-t83pl .metric-value.positive { color: #16a34a; }\r\n  .avdemb-t83pl .metric-value.negative { color: #dc2626; }\r\n  .avdemb-t83pl .metric-value.neutral { color: var(--text); }\r\n  .avdemb-t83pl .metric-value.accent { color: #2691ff; }\r\n  \/* Sub-Zeile an den Card-Boden -> ebenfalls karten\u00fcbergreifend auf einer Linie *\/\r\n  .avdemb-t83pl .metric-sub { font-size: 12px; color: var(--muted); margin-top: auto; padding-top: 2px; }\r\n\r\n  \/* Comparison table *\/\r\n  .avdemb-t83pl .compare-table {\r\n    background: var(--surface);\r\n    border: 1px solid var(--border);\r\n    border-radius: 16px;\r\n    padding: 20px;\r\n    margin-bottom: 16px;\r\n    overflow-x: auto;\r\n  }\r\n\r\n  .avdemb-t83pl .compare-grid {\r\n    display: grid;\r\n    grid-template-columns: 2fr 1fr 1fr;\r\n    gap: 0;\r\n    font-size: 13px;\r\n    min-width: 400px;\r\n  }\r\n\r\n  .avdemb-t83pl .compare-header {\r\n    padding: 8px 12px;\r\n    font-weight: 600;\r\n    border-bottom: 1px solid var(--border);\r\n    color: var(--muted);\r\n    font-size: 12px;\r\n  }\r\n\r\n  .avdemb-t83pl .compare-header.accent { color: var(--accent); }\r\n\r\n  .avdemb-t83pl .compare-cell {\r\n    padding: 10px 12px;\r\n    border-bottom: 1px solid rgba(30,58,110,0.4);\r\n    color: var(--text);\r\n  }\r\n\r\n  .avdemb-t83pl .compare-cell.label { color: var(--muted); }\r\n  .avdemb-t83pl .compare-cell.today { font-weight: 500; }\r\n  .avdemb-t83pl .compare-cell.future { font-weight: 600; color: #2691ff; }\r\n  .avdemb-t83pl .compare-cell.total {\r\n    font-weight: 700;\r\n    font-family: \"OpenSans\", Arial, Helvetica, sans-serif;\r\n    font-size: 15px;\r\n    border-top: 1px solid var(--border);\r\n    border-bottom: none;\r\n  }\r\n\r\n  .avdemb-t83pl .arrow-cell {\r\n    padding: 10px 4px;\r\n    color: var(--accent);\r\n    font-size: 16px;\r\n    border-bottom: 1px solid rgba(30,58,110,0.4);\r\n    text-align: center;\r\n  }\r\n\r\n  \/* Abz\u00fcge box *\/\r\n  .avdemb-t83pl .abzuege-box {\r\n    background: var(--surface);\r\n    border: 1px solid var(--border);\r\n    border-radius: 16px;\r\n    padding: 20px;\r\n    margin-bottom: 16px;\r\n  }\r\n\r\n  .avdemb-t83pl .abzuege-row {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    font-size: 13px;\r\n    padding: 8px 0;\r\n    border-bottom: 1px solid rgba(30,58,110,0.4);\r\n    color: var(--muted);\r\n  }\r\n\r\n  .avdemb-t83pl .abzuege-row:last-child { border-bottom: none; }\r\n  .avdemb-t83pl .abzuege-row .val { font-weight: 600; color: #dc2626; }\r\n  .avdemb-t83pl .abzuege-row.total .val { color: var(--text); font-size: 16px; }\r\n  .avdemb-t83pl .abzuege-row.netto .val { color: #16a34a; font-size: 18px; }\r\n\r\n  \/* Kaufkraft box *\/\r\n  .avdemb-t83pl .kaufkraft-box {\r\n    background: #2691ff;\r\n    border: none;\r\n    box-shadow: 0 4px 20px rgba(38,145,255,0.25);\r\n    border-radius: 12px;\r\n    padding: 20px 24px;\r\n    margin-bottom: 16px;\r\n    display: flex;\r\n    flex-wrap: wrap;\r\n    gap: 24px;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n  }\r\n\r\n  .avdemb-t83pl .kaufkraft-item { text-align: center; }\r\n  .avdemb-t83pl .kaufkraft-label { font-size: 12px; color: #ffffff; margin-bottom: 4px; }\r\n  .avdemb-t83pl .kaufkraft-value { font-size: 22px; font-weight: 700; font-family: \"OpenSans\", Arial, Helvetica, sans-serif; color: #ffffff; }\r\n  .avdemb-t83pl .kaufkraft-arrow { font-size: 24px; color: #ffffff; }\r\n\r\n  \/* Hint box *\/\r\n  .avdemb-t83pl .hint-box {\r\n    background: #eff6ff;\r\n    border: 1px solid #bfdbfe;\r\n    border-radius: 10px;\r\n    padding: 12px 16px;\r\n    font-size: 12px;\r\n    color: #1e40af;\r\n    margin-bottom: 16px;\r\n    line-height: 1.5;\r\n  }\r\n\r\n  \/* CTA *\/\r\n  .avdemb-t83pl .cta-section {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\r\n    gap: 12px;\r\n    margin-top: 32px;\r\n    margin-bottom: 24px;\r\n  }\r\n\r\n  .avdemb-t83pl .btn-primary {\r\n    background: var(--accent);\r\n    color: #fff;\r\n    border: none;\r\n    border-radius: 10px;\r\n    padding: 14px 24px;\r\n    font-size: 14px;\r\n    font-weight: 600;\r\n    cursor: pointer;\r\n    font-family: \"OpenSans\", Arial, Helvetica, sans-serif;\r\n    transition: all 0.2s;\r\n    text-align: center;\r\n  }\r\n\r\n  .avdemb-t83pl .btn-primary:hover { background: var(--accent2); transform: translateY(-1px); }\r\n\r\n  .avdemb-t83pl .btn-secondary {\r\n    background: rgba(232,50,122,0.12);\r\n    color: var(--accent);\r\n    border: 1px solid rgba(232,50,122,0.4);\r\n    border-radius: 10px;\r\n    padding: 14px 24px;\r\n    font-size: 14px;\r\n    font-weight: 600;\r\n    cursor: pointer;\r\n    font-family: \"OpenSans\", Arial, Helvetica, sans-serif;\r\n    transition: all 0.2s;\r\n    text-align: center;\r\n  }\r\n\r\n  .avdemb-t83pl .btn-secondary:hover { background: rgba(232,50,122,0.2); }\r\n\r\n  \/* Disclaimer *\/\r\n  \/* Hinweise-Box \u2013 Design aus Tool 1.3 Preview (graue Box, navy \u00dcberschrift) *\/\r\n  .avdemb-t83pl .disclaimer {\r\n    background: #eaf0f6;\r\n    border: 1.5px solid #b9c6d5;\r\n    border-radius: 10px;\r\n    padding: 16px 20px;\r\n    font-size: 11px;\r\n    color: #4a5563;\r\n    margin: 0 auto 24px auto;\r\n    line-height: 1.7;\r\n  }\r\n\r\n  .avdemb-t83pl .disclaimer strong {\r\n    color: #093967;\r\n    font-weight: 700;\r\n    font-size: 13px;\r\n  }\r\n  \/* Hervorhebungen in den Listenpunkten in Textfarbe \u2013 nur die \u201eHinweise\"-\u00dcberschrift bleibt navy *\/\r\n  .avdemb-t83pl .disclaimer li strong {\r\n    color: inherit;\r\n    font-size: inherit;\r\n  }\r\n\r\n  @keyframes kft83pl-fadeUp {\r\n    from { opacity: 0; transform: translateY(16px); }\r\n    to { opacity: 1; transform: translateY(0); }\r\n  }\r\n\r\n  @keyframes kft83pl-pulse {\r\n    0%, 100% { opacity: 1; }\r\n    50% { opacity: 0.4; }\r\n  }\r\n\r\n  .avdemb-t83pl .hidden { display: none !important; }\r\n\r\n  @media (max-width: 600px) {\r\n    .avdemb-t83pl .fields-row { grid-template-columns: 1fr; }\r\n    .avdemb-t83pl .cta-section { grid-template-columns: 1fr; }\r\n  }\r\n\r\n  .avdemb-t83pl .tool-wrapper label { color: var(--muted) !important; }\r\n  \/* Vormerkungs-Formular liegt auf blauem Grund \u2192 Labels wei\u00df (\u00fcberschreibt die graue Default-Regel oben).\r\n     #cta-kasten statt #ctaSection, damit es auch VOR dem Berechnen greift (Box wird erst beim Berechnen nach #ctaSection verschoben). *\/\r\n  .avdemb-t83pl #cta-kasten label, .avdemb-t83pl #ctaSection label { color: #ffffff !important; }\r\n  .avdemb-t83pl .tip {\r\n    display: inline-flex; align-items: center; justify-content: center;\r\n    width: 16px; height: 16px; border-radius: 50%;\r\n    background: var(--surface2); border: 1px solid var(--border);\r\n    color: var(--muted); font-size: 10px; cursor: help;\r\n    vertical-align: middle; position: relative; flex-shrink: 0;\r\n  }\r\n  .avdemb-t83pl .tip .tip-text {\r\n    display: none; position: absolute; bottom: calc(100% + 8px);\r\n    left: 50%; transform: translateX(-50%);\r\n    background: #2691ff; color: #ffffff; font-size: 12px;\r\n    line-height: 1.6; padding: 10px 12px; border-radius: 8px;\r\n    width: 260px; z-index: 9999; pointer-events: none;\r\n    box-shadow: 0 4px 16px rgba(0,0,0,0.2); white-space: normal;\r\n    font-weight: 400; text-transform: none; letter-spacing: normal;\r\n  }\r\n  .avdemb-t83pl .tip .tip-text::after {\r\n    content: ''; position: absolute; top: 100%; left: 50%;\r\n    transform: translateX(-50%); border: 6px solid transparent;\r\n    border-top-color: #2691ff;\r\n  }\r\n  \/* Wizard-Frage-Tooltips (.wiz-q): rechtsbuendig zum Icon statt mittig -> laufen auf Desktop nicht mehr rechts aus dem Card *\/\r\n  .avdemb-t83pl .wiz-q .tip .tip-text { left: auto; right: 0; transform: none; }\r\n  .avdemb-t83pl .wiz-q .tip .tip-text::after { left: auto; right: 7px; transform: none; }\r\n  .avdemb-t83pl .tip:hover .tip-text { display: block; }\r\n  \/* BFSG Flag D: Tooltips per Tastatur erreichbar (Fokus \u00f6ffnet) *\/\r\n  .avdemb-t83pl .tip:focus .tip-text { display: block; }\r\n  .avdemb-t83pl .tip:focus-visible { outline: 3px solid #2691ff; outline-offset: 2px; }\r\n  .avdemb-t83pl .button--primary, .avdemb-t83pl a.button--primary {\r\n    background-color: #E8327A !important; border-color: #E8327A !important; color: #ffffff !important;\r\n  }\r\n  .avdemb-t83pl .button--primary:hover { background-color: #C8305A !important; border-color: #C8305A !important; }\r\n\r\n  \/* CTA-Button Desktop\/Mobile Textvarianten *\/\r\n  .avdemb-t83pl .cta-btn-mobile  { display: none; }\r\n  .avdemb-t83pl .cta-btn-desktop { display: inline; }\r\n\r\n  \/* \u2500\u2500 Mobile Fixes (640px) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n     Breakpoint 640px. Desktop unver\u00e4ndert.\r\n  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500*\/\r\n  @media (max-width: 640px) {\r\n\r\n    \/* Wrapper: Seitenabstand reduzieren *\/\r\n    .avdemb-t83pl .tool-wrapper {\r\n      padding-left: 16px;\r\n      padding-right: 16px;\r\n    }\r\n\r\n    \/* 3-Spalten-Grids (inline style) \u2192 1 Spalte *\/\r\n    .avdemb-t83pl #opt-bj, .avdemb-t83pl #opt-rp, .avdemb-t83pl #opt-rg { grid-template-columns: 1fr !important; } .avdemb-t83pl #opt-bj .field:empty, .avdemb-t83pl #opt-rp .field:empty, .avdemb-t83pl #opt-rg .field:empty { display: none; } .avdemb-t83pl .fields-row[style*=\"grid-template-columns:repeat(3\"] {\r\n      grid-template-columns: 1fr !important;\r\n      gap: 16px !important;\r\n    }\r\n\r\n    \/* Section-Label umbrechen *\/\r\n    .avdemb-t83pl .section-label {\r\n      flex-wrap: wrap;\r\n      gap: 6px;\r\n    }\r\n\r\n    \/* CTA-Button: Mobile Kurztext *\/\r\n    .avdemb-t83pl .cta-btn-desktop { display: none !important; }\r\n    .avdemb-t83pl .cta-btn-mobile  { display: inline !important; }\r\n\r\n    \/* CTA-Button volle Breite, sauberer Umbruch *\/\r\n    .avdemb-t83pl #ctaSection button[type=\"submit\"] {\r\n      white-space: normal !important;\r\n      line-height: 1.35 !important;\r\n    }\r\n\r\n    \/* .tip .tip-text (\u00f6ffnet nach oben): position:fixed am unteren Rand *\/\r\n    .avdemb-t83pl .tip .tip-text {\r\n      position: fixed !important;\r\n      bottom: 20px !important;\r\n      left: 16px !important;\r\n      right: 16px !important;\r\n      top: auto !important;\r\n      width: auto !important;\r\n      max-width: none !important;\r\n      transform: none !important;\r\n      white-space: normal !important;\r\n      border-radius: 10px !important;\r\n      z-index: 9999 !important;\r\n    }\r\n    .avdemb-t83pl .tip .tip-text::after {\r\n      display: none !important;\r\n    }\r\n\r\n    \/* .tooltip-text (\u00f6ffnet nach oben via .tooltip-wrap): position:fixed *\/\r\n    .avdemb-t83pl .tooltip-text {\r\n      position: fixed !important;\r\n      bottom: 20px !important;\r\n      left: 16px !important;\r\n      right: 16px !important;\r\n      top: auto !important;\r\n      width: auto !important;\r\n      transform: none !important;\r\n      white-space: normal !important;\r\n      border-radius: 10px !important;\r\n      z-index: 9999 !important;\r\n    }\r\n\r\n    \/* .tooltip-img (DRV-Brief Mockup): position:fixed, kompakter *\/\r\n    .avdemb-t83pl .tooltip-img {\r\n      position: fixed !important;\r\n      bottom: 20px !important;\r\n      left: 16px !important;\r\n      right: 16px !important;\r\n      top: auto !important;\r\n      width: auto !important;\r\n      transform: none !important;\r\n      border-radius: 10px !important;\r\n      z-index: 9999 !important;\r\n    }\r\n\r\n    \/* Kaufkraft-Box: umbrechen *\/\r\n    .avdemb-t83pl .kaufkraft-box {\r\n      flex-direction: column;\r\n      align-items: flex-start;\r\n      gap: 16px;\r\n    }\r\n\r\n    \/* Metric-Grid: 2 Spalten auf Mobile *\/\r\n    .avdemb-t83pl .metric-grid {\r\n      grid-template-columns: 1fr 1fr;\r\n    }\r\n\r\n    \/* Collapsible Header: kompakter *\/\r\n    .avdemb-t83pl .collapsible-header {\r\n      padding: 14px 16px;\r\n    }\r\n\r\n    \/* Toggle-Bar: umbrechen *\/\r\n    .avdemb-t83pl .toggle-bar {\r\n      flex-wrap: wrap;\r\n    }\r\n  }\r\n\r\n  \/* \u2500\u2500 Interaktiver Eingabe-Wizard (Tool 1.3-System) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  .avdemb-t83pl .wiz { background: var(--surface); border: 1px solid var(--border); border-radius: 16px; padding: 28px 28px 22px; box-shadow: 0 4px 20px rgba(38,145,255,0.10); margin-bottom: 16px; }\r\n  .avdemb-t83pl .wiz-progress { height: 6px; border-radius: 99px; background: var(--surface2); overflow: hidden; margin-bottom: 10px; }\r\n  .avdemb-t83pl .wiz-progress-bar { height: 100%; background: linear-gradient(90deg,#2691ff,#56a9ff); border-radius: 99px; transition: width .4s cubic-bezier(.4,0,.2,1); }\r\n  .avdemb-t83pl .wiz-stepinfo { font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); margin-bottom: 18px; }\r\n  .avdemb-t83pl .wiz-step { display: none; animation: kft83pl-wizIn .35s ease both; }\r\n  .avdemb-t83pl .wiz-step.active { display: block; }\r\n  @keyframes kft83pl-wizIn { from { opacity: 0; transform: translateX(14px); } to { opacity: 1; transform: translateX(0); } }\r\n  .avdemb-t83pl .wiz-q { font-size: clamp(20px,3vw,26px); font-weight: 700; color: var(--text); line-height: 1.25; margin-bottom: 6px; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }\r\n  .avdemb-t83pl .wiz-help { font-size: 13px; color: var(--muted); line-height: 1.5; margin-bottom: 20px; }\r\n  .avdemb-t83pl .wiz-sub { font-size: 12px; font-weight: 700; color: var(--text); margin: 22px 0 8px; display: flex; align-items: center; gap: 6px; }\r\n  .avdemb-t83pl .wiz-tiles { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }\r\n  .avdemb-t83pl .wiz-tiles-3 { grid-template-columns: repeat(3, 1fr); }\r\n  .avdemb-t83pl .wiz-tile { text-align: left; background: var(--surface2); border: 2px solid var(--border); border-radius: 12px; padding: 16px; cursor: pointer; transition: border-color .15s, box-shadow .15s, transform .12s; font-family: inherit; }\r\n  .avdemb-t83pl .wiz-tile:hover { border-color: #2691ff; transform: translateY(-2px); box-shadow: 0 6px 16px rgba(38,145,255,.12); }\r\n  .avdemb-t83pl .wiz-tile.sel { border-color: #2691ff; background: #f5faff; box-shadow: 0 4px 14px rgba(38,145,255,.16); }\r\n  .avdemb-t83pl .wiz-tile:focus-visible { outline: 3px solid #2691ff; outline-offset: 2px; }\r\n  .avdemb-t83pl .wiz-tile-v { font-size: 18px; font-weight: 700; color: var(--text); }\r\n  .avdemb-t83pl .wiz-tile-s { font-size: 12px; color: var(--muted); margin-top: 2px; }\r\n  .avdemb-t83pl .wiz-nav { display: flex; justify-content: space-between; align-items: center; gap: 12px; margin-top: 26px; }\r\n  .avdemb-t83pl .wiz-back { background: transparent; border: 1px solid var(--border); border-radius: 10px; padding: 11px 18px; font-size: 13px; font-weight: 600; color: var(--muted); cursor: pointer; font-family: inherit; transition: all .15s; }\r\n  .avdemb-t83pl .wiz-back:hover { border-color: var(--muted); color: var(--text); }\r\n  .avdemb-t83pl .wiz-next { background: #E8327A; border: none; border-radius: 10px; padding: 13px 26px; font-size: 15px; font-weight: 700; color: #fff; cursor: pointer; font-family: inherit; transition: all .2s; box-shadow: 0 4px 14px rgba(232,50,122,.28); }\r\n  .avdemb-t83pl .wiz-next:hover { background: #C8305A; transform: translateY(-1px); box-shadow: 0 8px 22px rgba(232,50,122,.35); }\r\n  .avdemb-t83pl .wiz-back:focus-visible, .avdemb-t83pl .wiz-next:focus-visible { outline: 3px solid #2691ff; outline-offset: 2px; }\r\n  @media (max-width: 480px) { .avdemb-t83pl .wiz-tiles, .avdemb-t83pl .wiz-tiles-3 { grid-template-columns: 1fr; } .avdemb-t83pl .wiz { padding: 22px 18px 18px; } .avdemb-t83pl .wiz-next { flex: 1; } }\r\n\r\n  \/* Compact-Modus: nach \u201eBerechnen\" klappt der Wizard zu einem Eingabe-Panel zusammen *\/\r\n  .avdemb-t83pl .wiz-compact-head { display: none; }\r\n  .avdemb-t83pl .wiz.compact .wiz-compact-head { display: block; font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); margin-bottom: 16px; }\r\n  .avdemb-t83pl .wiz.compact .wiz-progress, .avdemb-t83pl .wiz.compact .wiz-stepinfo, .avdemb-t83pl .wiz.compact .wiz-nav { display: none; }\r\n  .avdemb-t83pl .wiz.compact .wiz-step { display: block; animation: none; }\r\n  .avdemb-t83pl .wiz.compact .wiz-step + .wiz-step { border-top: 1px solid var(--border); padding-top: 14px; margin-top: 14px; }\r\n  .avdemb-t83pl .wiz.compact .wiz-q { font-size: 14px; font-weight: 700; margin-bottom: 10px; }\r\n  .avdemb-t83pl .wiz.compact .wiz-help { display: none; }\r\n\r\n  \/* kk-switch (Toggle wie Tool 1.3) *\/\r\n  .avdemb-t83pl .kk-switch { position: relative; display: inline-block; width: 40px; height: 22px; flex-shrink: 0; }\r\n  .avdemb-t83pl .kk-switch input { opacity: 0; width: 0; height: 0; }\r\n  .avdemb-t83pl .kk-slider-track { position: absolute; cursor: pointer; inset: 0; background: var(--border); border-radius: 22px; transition: background .2s; }\r\n  .avdemb-t83pl .kk-slider-track::before { content: ''; position: absolute; height: 16px; width: 16px; left: 3px; bottom: 3px; background: #fff; border-radius: 50%; transition: transform .2s; box-shadow: 0 1px 3px rgba(0,0,0,0.2); }\r\n  .avdemb-t83pl .kk-switch input:checked + .kk-slider-track { background: #E8327A; }\r\n  .avdemb-t83pl .kk-switch input:checked + .kk-slider-track::before { transform: translateX(18px); }\r\n\r\n  \/* Partner-Typ-Pills im Ehegattensplitting *\/\r\n  .avdemb-t83pl .netto-pt8 { padding: 6px 12px; border-radius: 20px; font-size: 12px; font-weight: 600; border: 1px solid var(--border); background: #fff; color: var(--muted); cursor: pointer; font-family: \"OpenSans\", Arial, sans-serif; transition: all .15s; }\r\n  .avdemb-t83pl .netto-pt8.sel { background: var(--accent); border-color: var(--accent); color: #fff; }\r\n<\/style>\r\n\r\n<div class=\"tool-wrapper\">\r\n\r\n  <!-- Header (8.3: blaue Box + Chip entfernt; Datum im Vormerken-Button) -->\r\n  <div class=\"header\">\r\n    <div style=\"display:flex;justify-content:space-between;align-items:flex-start;gap:20px;flex-wrap:wrap;\">\r\n      <h1 style=\"flex:1;min-width:240px;margin:0;\">Wie viel <span>Rente<\/span> bekommst du?<\/h1>\r\n      <a href=\"#cta-kasten\" onclick=\"var c=document.getElementById('cta-kasten');if(c){event.preventDefault();c.scrollIntoView({behavior:'smooth',block:'start'});}\" style=\"flex-shrink:0;display:inline-flex;flex-direction:column;align-items:flex-start;gap:2px;background:#ffffff;color:#2691ff;border:1.5px solid #2691ff;border-radius:10px;padding:10px 17px;text-decoration:none;cursor:pointer;\">\r\n        <span style=\"font-size:14px;font-weight:700;display:flex;align-items:center;gap:6px;\">\ud83d\udd14 Vormerken<\/span>\r\n        <span style=\"font-size:11.5px;font-weight:600;color:#0d63c4;\">AVD-Start: 01.01.2027<\/span>\r\n      <\/a>\r\n    <\/div>\r\n    <p class=\"subtitle\">Berechne deine gesetzliche Rente.<\/p>\r\n  <\/div>\r\n\r\n  <!-- \u2550\u2550\u2550 Interaktiver Eingabe-Wizard (Tool 1.3-System) \u2550\u2550\u2550 -->\r\n  <div class=\"wiz\" id=\"wiz\">\r\n    <div class=\"wiz-compact-head\">Deine Eingaben \u2013 jederzeit anpassbar<\/div>\r\n    <div class=\"wiz-progress\"><div class=\"wiz-progress-bar\" id=\"wiz-bar\" style=\"width:25%;\"><\/div><\/div>\r\n    <div class=\"wiz-stepinfo\"><span id=\"wiz-stepnum\">Schritt 1<\/span> von 4<\/div>\r\n\r\n    <!-- Schritt 1: Alter + Renteneintritt -->\r\n    <div class=\"wiz-step active\" data-step=\"1\">\r\n      <div class=\"wiz-q\">Wie alt bist du, und wann m\u00f6chtest du in Rente gehen?<\/div>\r\n      <div class=\"wiz-help\">Daraus ergibt sich, wie lange deine Rente bis zum Eintritt hochgerechnet wird. Renteneintritt zwischen 63 und 70.<\/div>\r\n\r\n      <div class=\"wiz-sub\">Dein aktuelles Alter\r\n        <span class=\"tip\">i<span class=\"tip-text\">\u2022 G\u00fcltige Eingabe: 16\u201369 Jahre<br>\u2022 Basis f\u00fcr die Hochrechnung bis zum Renteneintritt<\/span><\/span>\r\n      <\/div>\r\n      <div class=\"input-wrap\" style=\"max-width:220px;\">\r\n        <input type=\"number\" id=\"alter\" min=\"16\" max=\"69\" step=\"1\" value=\"40\" placeholder=\"z.B. 40\" oninput=\"if(this.value.includes('.'))this.value=Math.round(this.value);berechne()\">\r\n      <\/div>\r\n      <span class=\"error-msg\" id=\"alterErr\" role=\"alert\">Alter muss zwischen 16 und 69 liegen<\/span>\r\n\r\n      <div class=\"wiz-sub\" style=\"margin-top:22px;\">Renteneintrittsalter\r\n        <span class=\"tip\">i<span class=\"tip-text\">\u2022 Ab 63 m\u00f6glich (mit Abschl\u00e4gen)<br>\u2022 0,3% Abschlag pro Monat vor deiner Regelaltersgrenze<br>\u2022 Regelaltersgrenze nach Jahrgang: 65 bis 67 Jahre \u2013 ab Jahrgang 1964 immer 67<br>\u2022 Jeder Monat sp\u00e4ter bringt +0,5% Zuschlag<\/span><\/span>\r\n      <\/div>\r\n      <div style=\"display:flex;align-items:center;gap:12px;margin-top:8px;\">\r\n        <input type=\"range\" id=\"ra\" min=\"63\" max=\"70\" step=\"1\" value=\"67\" oninput=\"updateSlider('ra','raVal','J.');berechne()\" style=\"flex:1;\" aria-label=\"Renteneintrittsalter\">\r\n        <span class=\"slider-val\" id=\"raVal\" style=\"min-width:64px;text-align:right;\">67 J.<\/span>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- Schritt 2: Jahresbrutto -->\r\n    <div class=\"wiz-step\" data-step=\"2\">\r\n      <div class=\"wiz-q\">Was verdienst du aktuell brutto im Jahr?\r\n        <span class=\"tip\">i<span class=\"tip-text\">\u2022 Dein aktuelles Bruttojahreseinkommen<br>\u2022 Basis f\u00fcr die Rentenprognose<br>\u2022 Beitragsbemessungsgrenze 2026: 101.400 \u20ac\/Jahr<\/span><\/span>\r\n      <\/div>\r\n      <div class=\"wiz-help\">Gib dein aktuelles Bruttojahreseinkommen ein.<br><span style=\"font-size:11px;color:#6c7a8a;\">Deine Angaben werden nicht gespeichert oder weitergegeben \u2013 die Berechnung l\u00e4uft nur in deinem Browser.<\/span><\/div>\r\n      <div class=\"input-wrap\" style=\"max-width:260px;\">\r\n        <input type=\"text\" id=\"brutto\" inputmode=\"numeric\" value=\"45.000\" placeholder=\"z.B. 45.000\">\r\n        <span class=\"currency-suffix\">\u20ac\/Jahr<\/span>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- Schritt 3: Berechnungsmethode -->\r\n    <div class=\"wiz-step\" data-step=\"3\">\r\n      <div class=\"wiz-q\">Wie genau m\u00f6chtest du rechnen?<\/div>\r\n      <div class=\"wiz-help\">Je nachdem, welche Unterlagen du zur Hand hast, wird die Prognose genauer. W\u00e4hle aus, was am besten passt \u2013 \u00e4ndern kannst du es jederzeit.<\/div>\r\n\r\n    <!-- Zeile 2: Optionale Pr\u00e4zisierung -->\r\n    <div style=\"margin-bottom:16px;margin-top:24px;\">\r\n\r\n      <!-- Methoden-Auswahlkarten (selbsterkl\u00e4rend, von einfach bis genau) -->\r\n      <div style=\"display:flex;flex-direction:column;gap:10px;margin-bottom:18px;\">\r\n        <button id=\"optBtn-bj\" type=\"button\" onclick=\"setOptMode('bj')\" style=\"text-align:left;width:100%;border-radius:12px;padding:14px 16px;cursor:pointer;font-family:'OpenSans',Arial,sans-serif;transition:all .15s;border:2px solid #2691ff;background:#f5faff;box-shadow:0 4px 14px rgba(38,145,255,.16);\">\r\n          <div style=\"font-size:14px;font-weight:700;color:var(--text);\">Einfach sch\u00e4tzen <span style=\"font-weight:600;color:var(--muted);\">\u00b7 \u00fcber deine Beitragsjahre<\/span><\/div>\r\n          <div style=\"font-size:12px;color:var(--muted);line-height:1.5;margin-top:3px;\">Du sagst nur, wie viele Jahre du ungef\u00e4hr in die gesetzliche Rente einzahlst (inkl. Ausbildung &amp; Kindererziehung). Grobe Orientierung \u2013 ganz ohne Unterlagen.<\/div>\r\n        <\/button>\r\n        <button id=\"optBtn-rp\" type=\"button\" onclick=\"setOptMode('rp')\" style=\"text-align:left;width:100%;border-radius:12px;padding:14px 16px;cursor:pointer;font-family:'OpenSans',Arial,sans-serif;transition:all .15s;border:2px solid #dce3ea;background:#ffffff;\">\r\n          <div style=\"font-size:14px;font-weight:700;color:var(--text);\">Mit Rentenpunkten <span style=\"font-weight:600;color:var(--muted);\">\u00b7 genauer<\/span><\/div>\r\n          <div style=\"font-size:12px;color:var(--muted);line-height:1.5;margin-top:3px;\">Du \u00fcbertr\u00e4gst deine bisher gesammelten \u201eEntgeltpunkte&#8220;. Die stehen in deiner j\u00e4hrlichen Renteninformation der Deutschen Rentenversicherung (DRV).<\/div>\r\n        <\/button>\r\n        <button id=\"optBtn-rg\" type=\"button\" onclick=\"setOptMode('rg')\" style=\"text-align:left;width:100%;border-radius:12px;padding:14px 16px;cursor:pointer;font-family:'OpenSans',Arial,sans-serif;transition:all .15s;border:2px solid #dce3ea;background:#ffffff;\">\r\n          <div style=\"font-size:14px;font-weight:700;color:var(--text);\">Mit DRV-Brief <span style=\"font-weight:600;color:var(--muted);\">\u00b7 am genauesten<\/span><\/div>\r\n          <div style=\"font-size:12px;color:var(--muted);line-height:1.5;margin-top:3px;\">Du nimmst den fertigen Rentenbetrag direkt aus deinem \u201eDRV-Brief&#8220; \u2013 der j\u00e4hrlichen Renteninformation, die ab 27 automatisch per Post kommt.<\/div>\r\n        <\/button>\r\n      <\/div>\r\n\r\n      <!-- Beitragsjahre -->\r\n      <div id=\"opt-bj\" class=\"fields-row\" style=\"grid-template-columns:repeat(3,1fr);\">\r\n        <div class=\"field\">\r\n          <label>\r\n            Beitragsjahre (erwartet)\r\n            <span class=\"tip\">i<span class=\"tip-text\">\u2022 Gesamte Jahre in der gesetzlichen Rentenversicherung<br>\u2022 Inkl. Ausbildung, Elternzeit, Kindererziehung<br>\u2022 Typisch: 35\u201345 Jahre<br>\u2022 Wird f\u00fcr die Hochrechnung bis Renteneintritt ben\u00f6tigt<\/span><\/span>\r\n          <\/label>\r\n          <div class=\"input-wrap\">\r\n            <input type=\"number\" id=\"beitragsjahre\" min=\"1\" max=\"50\" step=\"1\" placeholder=\"z.B. 40\" value=\"40\" oninput=\"if(this.value.includes('.'))this.value=Math.round(this.value);syncRentenFelder()\">\r\n            <span class=\"currency-suffix\">Jahre<\/span>\r\n          <\/div>\r\n        <\/div>\r\n        <div class=\"field\"><\/div>\r\n        <div class=\"field\"><\/div>\r\n      <\/div>\r\n\r\n      <!-- Rentenpunkte -->\r\n      <div id=\"opt-rp\" class=\"fields-row\" style=\"display:none;\">\r\n        <div class=\"field\">\r\n          <label>\r\n            Rentenpunkte (bisher)\r\n            <span class=\"tip\">i<span class=\"tip-text\">\u2022 Aus der j\u00e4hrlichen Renteninformation der DRV<br>\u2022 Aktuelle bisherige Entgeltpunkte<br>\u2022 Jeder Punkt = 42,52 \u20ac\/Mo. Rente (Stand 2026)<br>\u2022 Zuk\u00fcnftige Punkte werden aus Jahresbrutto gesch\u00e4tzt<\/span><\/span>\r\n          <\/label>\r\n          <div class=\"input-wrap\">\r\n            <input type=\"text\" id=\"rentenpunkte\" inputmode=\"decimal\" placeholder=\"z.B. 28,5\">\r\n            <span class=\"currency-suffix\">Pkt.<\/span>\r\n          <\/div>\r\n        <\/div>\r\n        <div class=\"field\"><\/div>\r\n        <div class=\"field\"><\/div>\r\n      <\/div>\r\n\r\n      <!-- Regelaltersrente -->\r\n      <div id=\"opt-rg\" class=\"fields-row\" style=\"display:none;\">\r\n        <div class=\"field\">\r\n          <label>\r\n            Regelaltersrente (DRV-Brief)\r\n            <span class=\"tooltip-wrap\">\r\n              <span class=\"tooltip-icon\">i\r\n                <span class=\"tooltip-img\">\r\n                  <div class=\"tooltip-img-mockup\">\r\n                    <div class=\"mockup-header\">Deutsche Rentenversicherung<\/div>\r\n                    <div style=\"font-size:10px;color:#003366;margin-bottom:6px;font-weight:600;\">Ihre voraussichtliche Altersrente<\/div>\r\n                    <div class=\"mockup-row\"><span>Bei 0% Lohnentwicklung<\/span><span>1.050 \u20ac<\/span><\/div>\r\n                    <div class=\"mockup-row\"><span>Bei 1% Lohnentwicklung<\/span><span style=\"font-weight:700;\">1.200 \u20ac<\/span><\/div>\r\n                    <div class=\"mockup-row\"><span>Bei 2% Lohnentwicklung<\/span><span>1.380 \u20ac<\/span><\/div>\r\n                    <div class=\"mockup-highlight\">\r\n                      <div class=\"mockup-highlight-label\">\u2191 Diesen Wert eingeben<\/div>\r\n                      <div class=\"mockup-highlight-value\">1.200 \u20ac<\/div>\r\n                    <\/div>\r\n                  <\/div>\r\n                  <div class=\"tooltip-img-text\">\u2022 J\u00e4hrlicher DRV-Brief (ab 27 Jahren)<br>\u2022 Mittleren Wert (1% Lohnentwicklung) eingeben<br>\u2022 Genaueste Methode \u2013 inkl. Kindererziehung, L\u00fccken<br>\u2022 Bereits auf den Renteneintritt hochgerechnet \u2013 wird unver\u00e4ndert \u00fcbernommen<\/div>\r\n                <\/span>\r\n              <\/span>\r\n            <\/span>\r\n          <\/label>\r\n          <div class=\"input-wrap\">\r\n            <input type=\"text\" id=\"rente\" inputmode=\"numeric\" placeholder=\"z.B. 1.200\">\r\n            <span class=\"currency-suffix\">\u20ac\/Mo.<\/span>\r\n          <\/div>\r\n        <\/div>\r\n        <div class=\"field\"><\/div>\r\n        <div class=\"field\"><\/div>\r\n      <\/div>\r\n\r\n      <div id=\"renteHinweis\" style=\"font-size:11px;color:var(--muted);margin-top:8px;display:none;\"><\/div>\r\n    <\/div><!-- end Pr\u00e4zisierung -->\r\n\r\n    <\/div><!-- \/Schritt 3 -->\r\n\r\n    <!-- Schritt 4: Betriebsrente (bAV) -->\r\n    <div class=\"wiz-step\" data-step=\"4\">\r\n      <div class=\"wiz-q\">Hast du eine Betriebsrente (bAV)?\r\n        <span class=\"tip\">i<span class=\"tip-text\">\u2022 Optional \u2013 nur wenn bAV vorhanden<br>\u2022 Wird mit 1% p.a. hochgerechnet (\u00a716 BetrAVG)<br>\u2022 Betrag aus Standmitteilung des Arbeitgebers<\/span><\/span>\r\n      <\/div>\r\n      <div class=\"wiz-help\">Wenn du keine hast, belasse die Auswahl bei \u201eKeine bAV&#8220;.<\/div>\r\n      <div class=\"wiz-tiles\">\r\n        <button type=\"button\" class=\"wiz-tile sel\" data-wiz=\"bav\" data-val=\"nein\"><div class=\"wiz-tile-v\">Keine bAV<\/div><div class=\"wiz-tile-s\">\u00fcberspringen<\/div><\/button>\r\n        <button type=\"button\" class=\"wiz-tile\" data-wiz=\"bav\" data-val=\"ja\"><div class=\"wiz-tile-v\">Ja, vorhanden<\/div><div class=\"wiz-tile-s\">Betrag eingeben<\/div><\/button>\r\n      <\/div>\r\n      <div id=\"bav-betrag\" style=\"display:none;margin-top:18px;\">\r\n        <div class=\"wiz-sub\">Betriebsrente pro Monat<\/div>\r\n        <div style=\"font-size:12px;color:#6c7a8a;line-height:1.5;margin-bottom:10px;\">Der <strong style=\"color:var(--text);\">aktuelle<\/strong> Monatsbetrag aus deiner <strong style=\"color:var(--text);\">Standmitteilung des Arbeitgebers<\/strong> \u2013 also das, was dir heute bereits zugesagt ist. Der Rechner projiziert diesen Betrag mit 1&thinsp;% p.&thinsp;a. bis zum Renteneintritt hoch (gesetzl. Mindestanpassung \u00a7&thinsp;16 BetrAVG).<\/div>\r\n        <div class=\"input-wrap\" style=\"max-width:220px;\">\r\n          <input type=\"text\" id=\"bavInput\" inputmode=\"numeric\" placeholder=\"z.B. 300\">\r\n          <span class=\"currency-suffix\">\u20ac\/Mo.<\/span>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- Schritt 5: Annahmen (Rentenanpassung + Inflation) -->\r\n    <!-- Schritt 5 (Annahmen) entfernt:\r\n         Der Rentenanpassungs-Slider lebt jetzt als Szenario-Regler im Ergebnis (#result1) \u2013 erst nach der Berechnung editierbar.\r\n         Der Inflation-Toggle ist ins Abz\u00fcge-\/Netto-Panel gewandert (wie 6.6). -->\r\n\r\n    <!-- Navigation -->\r\n    <div class=\"wiz-nav\">\r\n      <button type=\"button\" class=\"wiz-back\" id=\"wiz-back\" style=\"visibility:hidden;\">\u2190 Zur\u00fcck<\/button>\r\n      <button type=\"button\" class=\"wiz-next\" id=\"wiz-next\">Weiter \u2192<\/button>\r\n    <\/div>\r\n  <\/div>\r\n  <!-- \/Wizard -->\r\n\r\n  <!-- Abz\u00fcge\/Netto-Panel (separater Block nach dem Wizard \u2013 wie Tool 1.3 Netto-Toggle) -->\r\n  <div class=\"form-section\" id=\"abzuegePanel\" style=\"margin-bottom:16px;\">\r\n    <!-- Inflation-Toggle (aus Wizard-Schritt 5 hierher verschoben, wie 6.6) -->\r\n    <div style=\"display:flex;align-items:center;gap:10px;\">\r\n      <label class=\"kk-switch\"><input type=\"checkbox\" id=\"inflation-toggle\" checked onchange=\"toggleInflation8(this)\" aria-label=\"Inflation ber\u00fccksichtigen (2 % pro Jahr)\"><span class=\"kk-slider-track\"><\/span><\/label>\r\n      <span style=\"font-size:13px;font-weight:600;color:var(--text);line-height:1.4;\">Inflation ber\u00fccksichtigen <span style=\"font-weight:400;color:var(--muted);\">(2 % p. a.)<\/span><span class=\"tip\">i<span class=\"tip-text\">\u2022 Zeigt zus\u00e4tzlich, was deine Rente in heutiger Kaufkraft wert ist<br>\u2022 Feste Annahme: 2% Inflation pro Jahr (EZB-Ziel)<br>\u2022 Ohne: nominale Betr\u00e4ge ohne Kaufkraftverlust<\/span><\/span><\/span>\r\n    <\/div>\r\n    <input type=\"hidden\" id=\"inflation\" value=\"2\">\r\n    <div style=\"border-top:1px solid var(--border);margin:14px 0;\"><\/div>\r\n    <div style=\"display:flex;align-items:center;gap:10px;\">\r\n      <label class=\"kk-switch\"><input type=\"checkbox\" id=\"netto-toggle8\" onchange=\"toggleNetto8(this)\" aria-label=\"Nettorente nach Steuer berechnen\"><span class=\"kk-slider-track\"><\/span><\/label>\r\n      <span style=\"font-size:14px;font-weight:600;color:var(--text);line-height:1.4;\">Nettorente berechnen <span style=\"font-weight:400;color:var(--muted);\">(nach Steuer, KV &amp; Pflege)<\/span><span class=\"tip\">i<span class=\"tip-text\">\u2022 Einkommensteuer: nachgelagert, nur der steuerpflichtige Anteil (Besteuerungsanteil je nach Rentenbeginn)<br>\u2022 Kranken- &amp; Pflegeversicherung: Standards\u00e4tze auf gesetzliche Rente &amp; Betriebsrente<br>\u2022 Kirchensteuer optional<br>\u2022 Vereinfachte Annahme \u2013 ersetzt keine Steuerberatung<\/span><\/span><\/span>\r\n    <\/div>\r\n    <div id=\"abzuegeBody2\" style=\"display:none;margin-top:18px;\">\r\n      <div style=\"display:flex;gap:9px;background:#eaf4ff;border:1px solid #bcdcff;border-radius:8px;padding:11px 13px;margin-bottom:14px;font-size:12px;color:#274a6b;line-height:1.5;\">\r\n        <span aria-hidden=\"true\">\ud83d\udca1<\/span><span>Abgezogen werden <b>Einkommensteuer<\/b> (nachgelagert \u2013 gesetzliche Rente nur mit Besteuerungsanteil, Betriebsrente voll) sowie <b>Kranken- &amp; Pflegeversicherung<\/b> (Standards\u00e4tze: gesetzliche Rente halber KV-Satz + volle Pflege, Betriebsrente voller Satz). Kirchensteuer optional.<\/span>\r\n      <\/div>\r\n      <div class=\"fields-row\" style=\"margin-bottom:14px;\">\r\n        <div class=\"field\">\r\n          <label>Zusatzbeitrag KV <span class=\"tip\">i<span class=\"tip-text\">\u2022 Kassenindividuell \u2013 \u00d8 2026 \u2248 2,9%<br>\u2022 Bei der gesetzlichen Rente tr\u00e4gst du die H\u00e4lfte, bei der Betriebsrente den vollen Zusatzbeitrag<\/span><\/span><\/label>\r\n          <div class=\"input-wrap\" style=\"max-width:160px;\">\r\n            <input type=\"number\" id=\"kv-zusatz8\" min=\"0\" max=\"5\" step=\"0.1\" value=\"2.9\" oninput=\"berechne()\" aria-label=\"Zusatzbeitrag Krankenversicherung in Prozent\">\r\n            <span class=\"currency-suffix\">%<\/span>\r\n          <\/div>\r\n        <\/div>\r\n        <div class=\"field\">\r\n          <label>Kirchensteuer <span class=\"tip\">i<span class=\"tip-text\">\u2022 Bayern &amp; Baden-W\u00fcrttemberg: 8%<br>\u2022 \u00dcbrige Bundesl\u00e4nder: 9%<br>\u2022 Nur wenn du Kirchenmitglied bist<\/span><\/span><\/label>\r\n          <div class=\"toggle-group\">\r\n            <div class=\"toggle-option active\" id=\"kist8_keine\" onclick=\"setKiSt8('keine')\">Keine<\/div>\r\n            <div class=\"toggle-option\" id=\"kist8_8\" onclick=\"setKiSt8('8')\">8%<\/div>\r\n            <div class=\"toggle-option\" id=\"kist8_9\" onclick=\"setKiSt8('9')\">9%<\/div>\r\n          <\/div>\r\n        <\/div>\r\n        <!-- Pflege-Zuschlag f\u00fcr Kinderlose (E-052): eigene Frage, nicht aus anderen Angaben abgeleitet.\r\n             Die Gruppe tr\u00e4gt aria-label, aber keine role: sonst \u00fcberspringt das a11y-Modul sie. -->\r\n        <div class=\"field\">\r\n          <label>Hast du Kinder? <span class=\"tip\">i<span class=\"tip-text\">\u2022 Kinderlose zahlen in der Pflegeversicherung ab 23 Jahren dauerhaft 0,6 Prozentpunkte mehr<br>\u2022 Einmal reicht: Wer Kinder hat oder hatte, zahlt den normalen Satz \u2013 auch wenn die Kinder l\u00e4ngst erwachsen sind<\/span><\/span><\/label>\r\n          <div class=\"toggle-group\" aria-label=\"Hast du Kinder?\">\r\n            <div class=\"toggle-option active\" id=\"pflk8_ja\" onclick=\"setKinderPV8('ja')\">Ja<\/div>\r\n            <div class=\"toggle-option\" id=\"pflk8_nein\" onclick=\"setKinderPV8('nein')\">Nein<\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n      <div style=\"display:flex;align-items:flex-start;gap:10px;\">\r\n        <label class=\"kk-switch\" style=\"margin-top:1px;\"><input type=\"checkbox\" id=\"split-toggle8\" onchange=\"toggleSplitting8(this)\" aria-label=\"Ehegattensplitting anwenden\"><span class=\"kk-slider-track\"><\/span><\/label>\r\n        <div style=\"flex:1;\">\r\n          <span style=\"font-size:13px;font-weight:600;color:var(--text);line-height:1.4;\">Verheiratet \/ zusammenveranlagt <span style=\"font-weight:400;color:var(--muted);\">\u2013 Ehegattensplitting<\/span><span class=\"tip\">i<span class=\"tip-text\">\u2022 Bei Zusammenveranlagung gilt: Steuer = 2 \u00d7 Tarif(zvE \u00f7 2)<br>\u2022 Senkt die Steuer im Alter sp\u00fcrbar<br>\u2022 Was der Partner steuerlich mitbringt, z\u00e4hlt mit: Rente (nur steuerpflichtiger Anteil) oder Erwerbseinkommen (voll)<\/span><\/span><\/span>\r\n          <div id=\"partner-wrap8\" style=\"display:none;margin-top:10px;\">\r\n            <div style=\"font-size:12px;color:var(--muted);margin-bottom:6px;\">Was bringt dein Partner steuerlich mit?<\/div>\r\n            <div style=\"display:flex;gap:6px;flex-wrap:wrap;\">\r\n              <button type=\"button\" class=\"netto-pt8 sel\" id=\"pt-rente8\" onclick=\"setPartnerTyp8('rente')\">Bezieht Rente<\/button>\r\n              <button type=\"button\" class=\"netto-pt8\" id=\"pt-job8\" onclick=\"setPartnerTyp8('job')\">Noch berufst\u00e4tig<\/button>\r\n            <\/div>\r\n            <div class=\"field\" style=\"max-width:280px;margin-top:10px;\">\r\n              <label id=\"partner-label8\" style=\"font-size:12px;\">Rente des Partners<\/label>\r\n              <div class=\"input-wrap\">\r\n                <input type=\"text\" inputmode=\"numeric\" id=\"partner-rente8\" value=\"0\" placeholder=\"z.B. 1200\" oninput=\"lesePartner8()\" aria-label=\"Einkommen des Partners\">\r\n                <span class=\"currency-suffix\" id=\"partner-suffix8\">\u20ac\/Mo.<\/span>\r\n              <\/div>\r\n            <\/div>\r\n            <div style=\"font-size:11px;color:var(--muted);line-height:1.5;margin-top:8px;\">Leer\/0 \u20ac = Partner ohne eigenes steuerpflichtiges Einkommen (maximaler Splitting-Vorteil). Rente z\u00e4hlt nur mit Besteuerungsanteil, Erwerbseinkommen voll.<\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <!-- Jetzt berechnen -->\r\n  <button type=\"button\" class=\"button button--primary button--stretch\" id=\"berechnenBtn\" onclick=\"startBerechnung8()\" style=\"display:none;align-items:center;justify-content:center;margin:8px auto 32px;padding:16px 24px;font-size:16px;font-weight:700;line-height:1.4;border-radius:12px;letter-spacing:0.02em;background:#E8327A;border-color:#E8327A;color:#ffffff;width:100%;box-sizing:border-box;\">\r\n    <span class=\"cta-btn-desktop\">Zum Ergebnis \u2192<\/span><span class=\"cta-btn-mobile\">Zum Ergebnis \u2192<\/span>\r\n  <\/button>\r\n\r\n  <!-- CTA Vormerkung (8.3: aus #ctaSection herausgezogen \u2192 vor der Berechnung sichtbar; wandert beim ersten Berechnen in #cta-slot) -->\r\n  <div id=\"cta-kasten\" style=\"display:block;margin-bottom:24px;scroll-margin-top:16px;\">\r\n    <div style=\"background:#2691ff;border-radius:12px;padding:28px;box-shadow:0 4px 20px rgba(38,145,255,0.25);\">\r\n      <div style=\"font-size:18px;font-weight:700;margin-bottom:4px;color:#ffffff;\">Rente bekannt. L\u00fccke offen.<\/div>\r\n      <div style=\"font-size:14px;font-weight:600;color:#ffffff;margin-bottom:4px;\">Kostenlos f\u00fcr das <a href=\"https:\/\/www.finanzen.net\/ratgeber\/vorsorge\/altersvorsorgedepot\/\" data-ilm-light=\"96\" title=\"Altersvorsorgedepot\">Altersvorsorgedepot<\/a> vormerken<\/div>\r\n      <div style=\"font-size:12px;color:#ffffff;margin-bottom:20px;line-height:1.5;\">Wir speichern deine E-Mail-Adresse, um dich \u00fcber den Start des Altersvorsorgedepots zu informieren. N\u00e4heres in der <a href=\"https:\/\/www.finanzen.net\/datenschutz\" target=\"_blank\" style=\"color:#ffffff;text-decoration:underline;\">Datenschutzerkl\u00e4rung<\/a>.<\/div>\r\n      <form id=\"vormerkForm8a\" onsubmit=\"submitVormerkung8(event)\" style=\"display:flex;flex-direction:column;gap:12px;\">\r\n        <div aria-hidden=\"true\" style=\"position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;\"><label>Bitte frei lassen<\/label><input type=\"text\" name=\"avd_hp\" tabindex=\"-1\" autocomplete=\"off\" value=\"\"><\/div>\r\n        <div>\r\n          <label style=\"font-size:12px;font-weight:600;color:#ffffff;display:block;margin-bottom:6px;text-transform:uppercase;letter-spacing:0.05em;\">E-Mail Adresse <span style=\"color:#E8327A;\">*<\/span><\/label>\r\n          <input type=\"email\" required placeholder=\"deine@email.de\"\r\n            style=\"width:100%;background:#ffffff;border:1px solid #dce3ea;border-radius:8px;padding:12px 16px;color:#1a2332;font-size:14px;outline:none;box-sizing:border-box;\"\r\n            onfocus=\"this.style.borderColor='#E8327A'\"\r\n            onblur=\"this.style.borderColor='#dce3ea'\"\r\n            >\r\n        <\/div>\r\n        <!-- LEGAL P3\/P4: \u00a77-UWG-Einwilligung (Pflicht) \u2013 \u00fcber dem Button -->\r\n        <label style=\"display:flex;align-items:flex-start;gap:10px;cursor:pointer;font-size:13px;color:#ffffff;line-height:1.5;\">\r\n          <input type=\"checkbox\" required style=\"margin-top:2px;accent-color:#E8327A;width:16px;height:16px;flex-shrink:0;\">\r\n          <span>Ich m\u00f6chte per E-Mail benachrichtigt werden, sobald das Altersvorsorgedepot der finanzen.net zero GmbH verf\u00fcgbar ist. Diese Einwilligung kann ich jederzeit mit Wirkung f\u00fcr die Zukunft widerrufen. <span style=\"color:#E8327A;\">*<\/span><\/span>\r\n        <\/label>\r\n        <!-- Riester (optional) \u2013 im K\u00e4stchen abgesetzt -->\r\n        <label style=\"display:flex;align-items:flex-start;gap:10px;cursor:pointer;font-size:13px;color:#ffffff;line-height:1.5;background:rgba(255,255,255,0.2);border:1px solid rgba(255,255,255,0.55);border-radius:8px;padding:12px;\">\r\n          <input type=\"checkbox\" id=\"riesterCheck8\" style=\"margin-top:2px;accent-color:#E8327A;width:16px;height:16px;flex-shrink:0;\">\r\n          <span>Ich interessiere mich f\u00fcr einen Wechsel meiner Riester-F\u00f6rderung in das Altersvorsorgedepot und willige ein, dass die finanzen.net zero GmbH meine Angabe speichert und mich hierzu per E-Mail kontaktiert. <span style=\"font-weight:400;opacity:0.7;\">(optional)<\/span><\/span>\r\n        <\/label>\r\n        <button type=\"submit\" class=\"button button--primary button--stretch\" style=\"display:flex;align-items:center;justify-content:center;padding:16px;font-size:15px;font-weight:700;line-height:1.4;border-radius:8px;letter-spacing:0.02em;background:#E8327A;border-color:#E8327A;color:#ffffff;width:100%;box-sizing:border-box;\">\r\n          <span class=\"cta-btn-desktop\">Kostenlos f\u00fcr das Altersvorsorgedepot vormerken \u2192<\/span><span class=\"cta-btn-mobile\">Kostenlos vormerken \u2192<\/span>\r\n        <\/button>\r\n        <!-- LEGAL P3: DOI-Hinweis -->\r\n        <div style=\"font-size:11px;color:#ffffff;opacity:0.85;line-height:1.5;text-align:center;\">Kostenlos und unverbindlich.<\/div>\r\n      <\/form>\r\n    <\/div>\r\n  <\/div>\r\n\r\n\r\n  <!-- Sofortergebnis -->\r\n  <div id=\"result1\" class=\"result-section hidden\" aria-live=\"polite\" aria-atomic=\"true\">\r\n    <div class=\"result-title\">Deine gesetzliche Rente<\/div>\r\n\r\n    <!-- Szenario-Regler: Rentenanpassung (aus Wizard-Schritt 5 ins Ergebnis \u2013 erst nach Berechnung editierbar) -->\r\n    <div class=\"szenario-panel\">\r\n      <div class=\"sz-frage\">Rentenanpassung pro Jahr \u2013 Szenario\r\n        <span class=\"tip\">i<span class=\"tip-text\">\u2022 J\u00e4hrliche Anpassung zum 1. Juli<br>\u2022 Historischer Durchschnitt: 1,5\u20132% p.a.<br>\u2022 Wird j\u00e4hrlich vom BMAS festgelegt<\/span><\/span>\r\n      <\/div>\r\n      <div class=\"sz-help\">Die gesetzliche Rente steigt jedes Jahr (zum 1. Juli) \u2013 \u00e4hnlich einer Gehaltserh\u00f6hung, damit sie mit L\u00f6hnen und Preisen Schritt h\u00e4lt (im Schnitt zuletzt ~1,5\u20132 %). Schieb den Regler, um zu sehen, wie sich verschiedene j\u00e4hrliche Steigerungen auf deine Rente auswirken.<\/div>\r\n      <div style=\"display:flex;align-items:center;gap:12px;margin-top:8px;\">\r\n        <input type=\"range\" id=\"anpassung\" min=\"0\" max=\"3\" step=\"0.5\" value=\"2\" oninput=\"updateSlider('anpassung','anpassungVal','%');berechne()\" style=\"flex:1;\" aria-label=\"Rentenanpassung pro Jahr (Szenario)\">\r\n        <span class=\"slider-val\" id=\"anpassungVal\" style=\"min-width:64px;text-align:right;\">2,0%<\/span>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div id=\"abzuschlagBox\"><\/div>\r\n\r\n    <div class=\"metric-grid\">\r\n      <div class=\"metric-card\">\r\n        <div class=\"metric-label\">Aktueller Rentenanspruch<\/div>\r\n        <div class=\"metric-value neutral\" id=\"r1bereinigt\">\u2013<\/div>\r\n        <div class=\"metric-sub\">Brutto \u00b7 vor Steuern &amp; Abgaben<\/div>\r\n      <\/div>\r\n      <div class=\"metric-card\">\r\n        <div class=\"metric-label\">Erwartete Rente bei Eintritt<\/div>\r\n        <div class=\"metric-value positive\" id=\"r1nominal\">\u2013<\/div>\r\n        <div class=\"metric-sub\">Brutto \u00b7 hochgerechnet mit Rentenanpassung<\/div>\r\n      <\/div>\r\n      <div class=\"metric-card\" id=\"bavResultCard\" style=\"display:none;\">\r\n        <div class=\"metric-label\">Betriebsrente bei Eintritt<\/div>\r\n        <div class=\"metric-value neutral\" id=\"r1bav\">\u2013<\/div>\r\n        <div class=\"metric-sub\">Brutto \u00b7 1% p.a. hochgerechnet<\/div>\r\n      <\/div>\r\n      <div class=\"metric-card\">\r\n        <div class=\"metric-label\">Kaufkraft heute<\/div>\r\n        <div class=\"metric-value accent\" id=\"r1kaufkraft\">\u2013<\/div>\r\n        <div class=\"metric-sub\">\u20ac\/Monat (real)<\/div>\r\n      <\/div>\r\n      <div class=\"metric-card\">\r\n        <div class=\"metric-label\">Kaufkraftverlust<\/div>\r\n        <div class=\"metric-value negative\" id=\"r1verlust\">\u2013<\/div>\r\n        <div class=\"metric-sub\">Weniger Kaufkraft durch Inflation<\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n\r\n  <\/div>\r\n\r\n\r\n\r\n  <!-- Netto-Ergebnis (separat, erscheint wenn \u201eNettorente berechnen\" aktiv ist) -->\r\n  <div id=\"result3\" class=\"result-section\" style=\"display:none;margin-bottom:24px;\" aria-live=\"polite\">\r\n    <div class=\"result-title\">Nettorente nach Abz\u00fcgen<\/div>\r\n    <div class=\"abzuege-box\">\r\n      <div class=\"abzuege-row\">\r\n        <span>Bruttorente gesamt<\/span>\r\n        <span class=\"val\" style=\"color:var(--text);\" id=\"az_brutto\">\u2013<\/span>\r\n      <\/div>\r\n      <div class=\"abzuege-row\">\r\n        <span id=\"az_kv_label\">Krankenversicherung<\/span>\r\n        <span class=\"val\" id=\"az_kv\">\u2013<\/span>\r\n      <\/div>\r\n      <div class=\"abzuege-row\">\r\n        <span id=\"az_pv_label\">Pflegeversicherung<\/span>\r\n        <span class=\"val\" id=\"az_pv\">\u2013<\/span>\r\n      <\/div>\r\n      <div class=\"abzuege-row\">\r\n        <span id=\"az_est_label\">Einkommensteuer<\/span>\r\n        <span class=\"val\" id=\"az_est\">\u2013<\/span>\r\n      <\/div>\r\n      <div class=\"abzuege-row\" id=\"az_kist_row\" style=\"display:none;\">\r\n        <span id=\"az_kist_label\">Kirchensteuer<\/span>\r\n        <span class=\"val\" id=\"az_kist\">\u2013<\/span>\r\n      <\/div>\r\n      <div class=\"abzuege-row total\">\r\n        <span>Gesamtabz\u00fcge<\/span>\r\n        <span class=\"val\" id=\"az_gesamt\">\u2013<\/span>\r\n      <\/div>\r\n      <div class=\"abzuege-row netto\">\r\n        <span>Nettorente<\/span>\r\n        <span class=\"val\" id=\"az_netto\">\u2013<\/span>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"kaufkraft-box\">\r\n      <div class=\"kaufkraft-item\">\r\n        <div class=\"kaufkraft-label\">Nettorente bei Rente<\/div>\r\n        <div class=\"kaufkraft-value\" id=\"kk_netto\">\u2013<\/div>\r\n        <div style=\"font-size:12px;color:#ffffff;\">\u20ac\/Monat<\/div>\r\n      <\/div>\r\n      <div class=\"kaufkraft-arrow\">\u2192<\/div>\r\n      <div class=\"kaufkraft-item\">\r\n        <div class=\"kaufkraft-label\">Kaufkraft heute (real)<\/div>\r\n        <div class=\"kaufkraft-value\" id=\"kk_netto_real\">\u2013<\/div>\r\n        <div style=\"font-size:12px;color:#ffffff;\">\u20ac\/Monat<\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- Delta Kaufkraftverlust -->\r\n    <div id=\"nettoVerlustBox\" style=\"display:none;background:#fff8f0;border:1px solid #fcd34d;border-radius:12px;padding:14px 18px;margin-top:12px;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;\">\r\n      <div style=\"font-size:13px;color:var(--muted);line-height:1.5;\">\r\n        Durch Inflation hat deine Nettorente bis zum Renteneintritt rechnerisch <strong style=\"color:var(--danger);\" id=\"nettoVerlustVal\">\u2013<\/strong> weniger Kaufkraft als heute.\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <!-- CTAs -->\r\n  <div id=\"ctaSection\" class=\"hidden\" style=\"margin-bottom:24px;\">\r\n    <!-- Ziel-Slot: #cta-kasten wird beim ersten Berechnen hierher (Originalposition) verschoben -->\r\n    <div id=\"cta-slot\"><\/div>\r\n\r\n    <!-- Regul\u00e4res Depot (Legal P1: Produktidentit\u00e4t) \u2013 navy wie 1.3, bewusst andersfarbig als die AVD-Vormerkung -->\r\n    <div style=\"background:#093967;border-radius:12px;padding:28px;margin-top:16px;box-shadow:0 4px 20px rgba(9,57,103,0.25);\">\r\n      <div style=\"font-size:18px;font-weight:700;color:#ffffff;margin-bottom:12px;\">Schon heute investieren?<\/div>\r\n      <div style=\"display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:800;background:#ffffff;color:#093967;padding:4px 10px;border-radius:999px;margin-bottom:12px;\">ab 0&nbsp;\u20ac Ordergeb\u00fchren<\/div>\r\n      <p style=\"font-size:13px;color:#ffffff;line-height:1.55;margin:0 0 14px 0;\">Investiere bei finanzen.net zero <strong>ab 0&nbsp;\u20ac Ordergeb\u00fchren<\/strong> (zzgl. Spreads) in Aktien, ETFs, Kryptos oder Sparpl\u00e4ne.<\/p>\r\n      <div style=\"background:rgba(255,255,255,0.12);border:1px solid rgba(255,255,255,0.22);border-radius:8px;padding:12px 14px;font-size:13px;color:#ffffff;line-height:1.55;margin-bottom:16px;\">\r\n        Das <strong>Altersvorsorgedepot kommt erst ab 1.&nbsp;Januar&nbsp;2027.<\/strong> Unabh\u00e4ngig davon kannst du schon heute ein <strong>regul\u00e4res Wertpapierdepot<\/strong> bei finanzen.net zero er\u00f6ffnen \u2013 <strong>ohne<\/strong> AVD-F\u00f6rderung (keine Zulagen, keine Steuervorteile).\r\n      <\/div>\r\n      <p style=\"font-size:13px;color:#ffffff;line-height:1.6;margin:0 0 16px 0;\">\r\n        M\u00f6chtest du auf das gef\u00f6rderte AVD warten? Dann trag dich oben zur <strong style=\"color:#ffffff;\">Vormerkung<\/strong> ein \u2013 wir informieren dich rechtzeitig zum Start.\r\n      <\/p>\r\n      <button class=\"button button--primary button--stretch\" data-zero-cta=\"https:\/\/g.finanzen.net\/zero-fnet_331m-ratgeber-avd-rentenrechner\" style=\"display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:700;padding:13px 18px;line-height:1.4;border-radius:8px;background:#E8327A;border-color:#E8327A;color:#ffffff;width:100%;box-sizing:border-box;\">\r\n        Regul\u00e4res finanzen.net zero Depot er\u00f6ffnen \u2192\r\n      <\/button>\r\n      <div style=\"font-size:11px;color:#ffd9e6;margin-top:8px;text-align:center;\">Regul\u00e4res Depot \u2013 nicht das gef\u00f6rderte AVD<\/div>\r\n      <div style=\"font-size:10px;color:rgba(255,255,255,0.78);line-height:1.45;text-align:center;margin-top:8px;\">ab 0&nbsp;\u20ac Ordergeb\u00fchren an ausgew\u00e4hlten Handelspl\u00e4tzen unter Bedingungen; zzgl. Spreads. Es gelten die Konditionen im Preis- und Leistungsverzeichnis von finanzen.net zero.<\/div>\r\n      <div style=\"font-size:9px;color:rgba(255,255,255,0.8);line-height:1.4;text-align:center;margin-top:5px;\">finanzen.net zero ist vertraglich gebundener Vermittler der DonauCapital Wertpapier GmbH. Depotbank ist die Baader Bank AG.<\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <!-- Produkttabelle entfernt in Pre-Launch -->\r\n\r\n  <!-- Disclaimer -->\r\n  <div class=\"disclaimer\" id=\"disclaimerBox\">\r\n    <details class=\"avd-hin\"><summary class=\"avd-hin-sum\"><strong>Hinweise<\/strong><span class=\"avd-hin-chev\" aria-hidden=\"true\">&#9662;<\/span><span class=\"avd-hin-hint\">Keine Anlage- oder Handlungsempfehlung &#8211; nur zur ersten Orientierung<\/span><\/summary>\r\n    <ul style=\"list-style:disc;padding-left:20px;display:flex;flex-direction:column;gap:5px;margin-top:8px;\">\r\n      <li>Keine Anlage- oder Handlungsempfehlung \u2013 nur zur ersten Orientierung<\/li>\r\n      <li>Dieser Rechner ermittelt die gesetzliche und betriebliche Rente \u2013 er berechnet <strong>keine<\/strong> Auszahlung aus einem Altersvorsorgedepot (AVD). Beim AVD wird die Auszahlung ab der Reform 2027 in zwei T\u00f6pfen besteuert: der gef\u00f6rderte Teil (Beitr\u00e4ge bis 1.800 \u20ac\/Jahr + Zulagen) voll nachgelagert, der ungef\u00f6rderte Teil g\u00fcnstiger (nur halber Gewinn bzw. Ertragsanteil). F\u00fcr die AVD-Auszahlung nutze bitte den Auszahlungs- bzw. Vergleichsrechner.<\/li>\r\n      <li>Briefwert basiert auf der pers\u00f6nlichen Renteninformation der DRV \u2013 keine Garantie auf tats\u00e4chliche Rente<\/li>\r\n      <li>Rentenanpassung basiert auf eingegebenem Wert \u2013 tats\u00e4chliche Anpassungen werden j\u00e4hrlich neu festgelegt<\/li>\r\n      <li>Berechnungsgrundlagen 2026: Rentenwert 42,52 \u20ac\/Punkt (g\u00fcltig ab 1. Juli 2026), Durchschnittsentgelt 51.944 \u20ac\/Jahr, Beitragsbemessungsgrenze 101.400 \u20ac\/Jahr \u2013 Werte werden j\u00e4hrlich zum 1. Juli angepasst<\/li>\r\n      <li>Nettorente (optionaler Schalter): stark vereinfachte Sch\u00e4tzung nach Steuer. Gesetzliche Rente und Betriebsrente werden im Alter <em>nachgelagert<\/em> besteuert \u2013 angesetzt werden der steuerpflichtige Anteil der gesetzlichen Rente (Besteuerungsanteil gem. \u00a722 Nr.1 EStG je nach Rentenbeginn-Jahr, 2026 \u2248 84 %, steigend bis 100 %) und die Betriebsrente voll. Einkommensteuer nach \u00a732a EStG (Steuertarif 2026, Grundfreibetrag 12.348 \u20ac, Werbungskostenpauschale 102 \u20ac, Sonderausgabenpauschale 36 \u20ac). <em>Verheiratete<\/em> k\u00f6nnen das Ehegattensplitting aktivieren (Steuer = 2 \u00d7 Tarif(zvE \u00f7 2)); das Partnereinkommen geht je nach Angabe als Rente (nur steuerpflichtiger Anteil) oder Erwerbseinkommen (voll) ein. Der Steuertarif des laufenden Jahres dient als N\u00e4herung auch f\u00fcr k\u00fcnftige Renteneintritte \u2013 tats\u00e4chliche Steuerbelastung kann abweichen<\/li>\r\n      <li>bAV mit 1% p.a. angepasst gem\u00e4\u00df gesetzlicher Mindestanpassungspflicht \u00a716 BetrAVG<\/li>\r\n      <li>Kranken- &amp; Pflegeversicherung (Nettorente): vereinfacht mit Standards\u00e4tzen. Gesetzliche Rente (KVdR): halber allgemeiner KV-Satz (7,3 %) + halber Zusatzbeitrag, Pflege voll (3,6 %, f\u00fcr Kinderlose ab 23 Jahren 4,2 % \u2013 \u00fcber \u201eHast du Kinder?\u201c einstellbar). Betriebsrente: voller KV-Satz (14,6 %) + voller Zusatzbeitrag auf den Teil oberhalb des Freibetrags (197,75 \u20ac\/Mo.), Pflege auf den vollen Betrag, aber nur, wenn die Betriebsrente diese 197,75 \u20ac\/Mo. \u00fcbersteigt. Kirchensteuer optional (8\/9 % auf die Einkommensteuer). Tats\u00e4chliche Beitr\u00e4ge, Freibetr\u00e4ge und Kassens\u00e4tze k\u00f6nnen abweichen \u2013 kein Ersatz f\u00fcr eine steuerliche Beratung<\/li>\r\n      <li>West\/Ost-Unterscheidung entf\u00e4llt \u2013 Rentenwerte seit Juli 2024 bundesweit angeglichen<\/li>\r\n      <li>Renteneintritt vor 63 nur unter besonderen Voraussetzungen m\u00f6glich<\/li>\r\n      <li>F\u00fcr individuelle Beratung bitte zugelassenen Finanzberater hinzuziehen<\/li>\r\n    <\/ul>\r\n    <\/details>\r\n  <\/div>\r\n\r\n<\/div>\r\n\r\n<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n     WORDPRESS-LOADER (wie Tool 1.3 \/ Tool 5.2 Final)\r\n     Der gesamte Tool-JS liegt Base64-codiert in #avd8-code-b64 (einzeilig).\r\n     Base64 = nur [A-Za-z0-9+\/=] -> immun gegen Entity-Encoding (< > &),\r\n     wptexturize (Quotes\/Gedankenstrich\/Ellipse) UND wpautop (p\/br).\r\n     Der Loader dekodiert UTF8-sicher und fuehrt den Code per Script-\r\n     Injektion im globalen Scope aus -> function\/var\/let\/const bleiben\r\n     global, daher funktionieren auch zur Laufzeit erzeugte on*-Handler\r\n     (Produkttabelle \"weitere anzeigen\"). Der Loader selbst enthaelt\r\n     KEINE Zeichen, die WP veraendern koennte.\r\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\r\n<script type=\"text\/plain\" id=\"avd8-code-b64\">Ci8vIOKUgOKUgCBCRlNHIEZsYWcgRDogLnRpcC1Ub29sdGlwcyBmb2t1c3NpZXJiYXIgKyBTY3JlZW5yZWFkZXItQmVzY2hyaWZ0dW5nIOKUgOKUgOKUgOKUgOKUgOKUgAooZnVuY3Rpb24oKXsKICBmdW5jdGlvbiBpbml0VGlwcygpewogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRpcCcpLmZvckVhY2goZnVuY3Rpb24odCl7CiAgICAgIGlmKHQuaGFzQXR0cmlidXRlKCd0YWJpbmRleCcpKSByZXR1cm47CiAgICAgIHQuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsJzAnKTsKICAgICAgdC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCdpbWcnKTsKICAgICAgdmFyIHR4dD10LnF1ZXJ5U2VsZWN0b3IoJy50aXAtdGV4dCcpOwogICAgICBpZih0eHQgJiYgIXQuaGFzQXR0cmlidXRlKCdhcmlhLWxhYmVsJykpewogICAgICAgIHQuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywnSGlud2VpczogJyt0eHQudGV4dENvbnRlbnQucmVwbGFjZSgvXHMrL2csJyAnKS50cmltKCkpOwogICAgICB9CiAgICB9KTsKICB9CiAgaWYoZG9jdW1lbnQucmVhZHlTdGF0ZT09PSdsb2FkaW5nJyl7IGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLGluaXRUaXBzKTsgfSBlbHNlIHsgaW5pdFRpcHMoKTsgfQp9KSgpOwovLyDilIDilIAgVm9ybWVya3VuZyBTdWJtaXQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIExJVkUtTU9EVVM6IEVjaHRlciBCcmV2byBET0ktQ2FsbCDDvGJlciBXb3JkUHJlc3MgQmFja2VuZC1Qcm94eS4KLy8gUHJveHktRW5kcHVua3Q6IC93cC1qc29uL2F2ZC92MS9zdWJzY3JpYmUgKFNjaHJpdHQgMiDigJMgbm9jaCB6dSBiYXVlbikKLy8gQnJldm86IExpc3RlICM2MiDCtyBUZW1wbGF0ZSAjODIgwrcgUmVkaXJlY3Qg4oaSIC4uLi9uZXdzbGV0dGVyLWFsdGVyc3ZvcnNvcmdlLWRhbmtlLwphc3luYyBmdW5jdGlvbiBzdWJtaXRWb3JtZXJrdW5nOChldmVudCkgewogIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgY29uc3QgZm9ybSAgICAgICAgICAgPSBldmVudC50YXJnZXQ7CiAgY29uc3Qgcmllc3RlckNoZWNrICAgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W2lkXj0icmllc3RlckNoZWNrIl0nKTsKICBjb25zdCByaWVzdGVyV2VjaHNlbCA9IHJpZXN0ZXJDaGVjayA\/IHJpZXN0ZXJDaGVjay5jaGVja2VkIDogZmFsc2U7CiAgY29uc3Qgc3VibWl0QnRuICAgICAgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvblt0eXBlPSJzdWJtaXQiXScpOwogIGlmIChzdWJtaXRCdG4gJiYgc3VibWl0QnRuLmRpc2FibGVkKSByZXR1cm47ICAgLy8gUmVlbnRyYW5jeS1HdWFyZDogdmVyaGluZGVydCBEb3BwZWwtUE9TVCAoSW5saW5lLW9uc3VibWl0ICsgZGVsZWdpZXJ0ZXIgc3VibWl0LUxpc3RlbmVyKQogIGNvbnN0IG9yaWdpbmFsSFRNTCAgID0gc3VibWl0QnRuLmlubmVySFRNTDsKCiAgaWYgKCFmb3JtLmNoZWNrVmFsaWRpdHkoKSkgewogICAgZm9ybS5yZXBvcnRWYWxpZGl0eSgpOwogICAgcmV0dXJuOwogIH0KCiAgY29uc3QgZW1haWwgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImVtYWlsIl0nKS52YWx1ZS50cmltKCk7CiAgICBjb25zdCBhdmRIcCA9IGZvcm0ucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT0iYXZkX2hwIl0nKTsKICAgIGNvbnN0IGF2ZEhwVmFsID0gYXZkSHAgPyBhdmRIcC52YWx1ZSA6ICcnOwoKICBzdWJtaXRCdG4uZGlzYWJsZWQgICAgPSB0cnVlOwogIHN1Ym1pdEJ0bi50ZXh0Q29udGVudCA9ICdXaXJkIGdlc2VuZGV0Li4uJzsKCiAgdHJ5IHsKICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goKGxvY2F0aW9uLnBhdGhuYW1lLmluZGV4T2YoJy9yYXRnZWJlci8nKSA9PT0gMCA\/ICcvcmF0Z2ViZXInIDogJycpICsgJy93cC1qc29uL2F2ZC92MS9zdWJzY3JpYmUnLCB7CiAgICAgIG1ldGhvZDogICdQT1NUJywKICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sCiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsKICAgICAgICBlbWFpbCwKICAgICAgICBocDogYXZkSHBWYWwsCiAgICAgICAgYXR0cmlidXRlczogICAgIHsgVE9PTDogJ0FWRF9SRU5URU5SRUNITkVSJywgUklFU1RFUl9XRUNIU0VMOiByaWVzdGVyV2VjaHNlbCB9LAogICAgICAgIGluY2x1ZGVMaXN0SWRzOiBbNjJdLAogICAgICAgIHRlbXBsYXRlSWQ6ICAgICA4MiwKICAgICAgICByZWRpcmVjdGlvblVybDogJ2h0dHBzOi8vd3d3LmZpbmFuemVuLm5ldC96ZXJvL25ld3NsZXR0ZXItYWx0ZXJzdm9yc29yZ2UtZGFua2UvJwogICAgICB9KQogICAgfSk7CgogICAgaWYgKCFyZXNwb25zZS5vaykgdGhyb3cgbmV3IEVycm9yKCdIVFRQICcgKyByZXNwb25zZS5zdGF0dXMpOwogICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTsKCiAgICBpZiAoZGF0YS5zdWNjZXNzKSB7CiAgICAgIHZhciBva0JveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgIG9rQm94LnNldEF0dHJpYnV0ZSgncm9sZScsICdzdGF0dXMnKTsKICAgICAgICBva0JveC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGl2ZScsICdwb2xpdGUnKTsKICAgICAgICBva0JveC5zdHlsZS5jc3NUZXh0ID0gJ2JhY2tncm91bmQ6I2VhZmFmMTtib3JkZXI6MXB4IHNvbGlkICMwYThhM2Y7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoyMHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiMwYTNkMWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjEuNTsnOwogICAgICAgIG9rQm94LnRleHRDb250ZW50ID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5BVkRfRE9JKQogICAgICAgICAgPyAn8J+TpyBGYXN0IGdlc2NoYWZmdCEgQml0dGUgcHLDvGZlIGRlaW4gUG9zdGZhY2ggdW5kIGJlc3TDpHRpZ2UgZGVpbmUgQW5tZWxkdW5nLicKICAgICAgICAgIDogJ+KckyBEdSBiaXN0IHZvcmdlbWVya3QhIFdpciBpbmZvcm1pZXJlbiBkaWNoIHp1bSBTdGFydC4nOwogICAgICAgIGZvcm0uaW5uZXJIVE1MID0gJyc7CiAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChva0JveCk7CiAgICB9IGVsc2UgewogICAgICBhbGVydCgnRXMgaXN0IGVpbiBGZWhsZXIgYXVmZ2V0cmV0ZW4uIEJpdHRlIHZlcnN1Y2hlIGVzIGVybmV1dC4nKTsKICAgICAgc3VibWl0QnRuLmRpc2FibGVkICAgID0gZmFsc2U7CiAgICAgIHN1Ym1pdEJ0bi5pbm5lckhUTUwgPSBvcmlnaW5hbEhUTUw7CiAgICB9CiAgfSBjYXRjaCAoZXJyKSB7CiAgICBhbGVydCgnVmVyYmluZHVuZ3NmZWhsZXIuIEJpdHRlIHByw7xmZSBkZWluZSBJbnRlcm5ldHZlcmJpbmR1bmcuJyk7CiAgICBzdWJtaXRCdG4uZGlzYWJsZWQgICAgPSBmYWxzZTsKICAgIHN1Ym1pdEJ0bi5pbm5lckhUTUwgPSBvcmlnaW5hbEhUTUw7CiAgfQp9CgovLyDilIDilIAgUHJvZHVrdGRhdGVuIGVudGZlcm50IGluIFByZS1MYXVuY2gg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmNvbnN0IHJrQ29sb3JzID0gWycjNGZjM2Y3JywnIzgxYzc4NCcsJyNmZmI3NGQnLCcjZmY4YTY1JywnI2YwNjI5MiddOwpjb25zdCBya0xhYmVscyA9IFsnU1JJIDEg4oCTIFNlaHIga29uc2VydmF0aXYnLCdTUkkgMiDigJMgS29uc2VydmF0aXYnLCdTUkkgMyDigJMgQXVzZ2V3b2dlbicsJ1NSSSA0IOKAkyBXYWNoc3R1bScsJ1NSSSA1IOKAkyBPZmZlbnNpdiddOwoKbGV0IGFjdGl2ZVJLID0gMzsKCmxldCBvcHRNb2RlID0gJ2JqJzsKCmZ1bmN0aW9uIHNldE9wdE1vZGUobW9kZSkgewogIG9wdE1vZGUgPSBtb2RlOwogIFsnYmonLCdycCcsJ3JnJ10uZm9yRWFjaChtID0+IHsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvcHQtJyttKS5zdHlsZS5kaXNwbGF5ID0gbSA9PT0gbW9kZSA\/ICcnIDogJ25vbmUnOwogICAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29wdEJ0bi0nK20pOwogICAgaWYgKCFidG4pIHJldHVybjsKICAgIGNvbnN0IG9uID0gbSA9PT0gbW9kZTsKICAgIGJ0bi5zdHlsZS5ib3JkZXIgPSBvbiA\/ICcycHggc29saWQgIzI2OTFmZicgOiAnMnB4IHNvbGlkICNkY2UzZWEnOwogICAgYnRuLnN0eWxlLmJhY2tncm91bmQgPSBvbiA\/ICcjZjVmYWZmJyA6ICcjZmZmZmZmJzsKICAgIGJ0bi5zdHlsZS5ib3hTaGFkb3cgPSBvbiA\/ICcwIDRweCAxNHB4IHJnYmEoMzgsMTQ1LDI1NSwuMTYpJyA6ICdub25lJzsKICB9KTsKICBzeW5jUmVudGVuRmVsZGVyKCk7Cn0KCmxldCB0b2dnbGU4ID0gJ21vbmF0bGljaCc7CgpmdW5jdGlvbiBzZXRUb2dnbGU4KHQpIHsKICBjb25zdCBvbGQgPSB0b2dnbGU4OwogIHRvZ2dsZTggPSB0OwogIGNvbnN0IGZhY3RvciA9IChvbGQgPT09ICdtb25hdGxpY2gnICYmIHQgPT09ICdqYWVocmxpY2gnKSA\/IDEyIDogKG9sZCA9PT0gJ2phZWhybGljaCcgJiYgdCA9PT0gJ21vbmF0bGljaCcpID8gMS8xMiA6IDE7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bk1vbmF0bGljaDgnKS5jbGFzc0xpc3QudG9nZ2xlKCdhY3RpdmUnLCB0ID09PSAnbW9uYXRsaWNoJyk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bkphZWhybGljaDgnKS5jbGFzc0xpc3QudG9nZ2xlKCdhY3RpdmUnLCB0ID09PSAnamFlaHJsaWNoJyk7CiAgY29uc3Qgc3VmZml4ID0gdCA9PT0gJ21vbmF0bGljaCcgPyAn4oKsL01vLicgOiAn4oKsL0phaHInOwogIC8vIFVwZGF0ZSByZW50ZSBzdWZmaXggb25seSAoYnJ1dHRvIHN0YXlzIOKCrC9KYWhyIGFsd2F5cykKICBjb25zdCByZW50ZVN1ZmZpeCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNyZW50ZSArIC5jdXJyZW5jeS1zdWZmaXgnKSB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY3VycmVuY3ktc3VmZml4Jyk7CiAgLy8gQ29udmVydCB2YWx1ZXMKICBpZiAoZmFjdG9yICE9PSAxKSB7CiAgICBbJ3JlbnRlJ10uZm9yRWFjaChpZCA9PiB7CiAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwogICAgICBpZiAoZWwgJiYgZWwudmFsdWUgJiYgcGFyc2VGbG9hdChlbC52YWx1ZSkgPiAwKSB7CiAgICAgICAgZWwudmFsdWUgPSBNYXRoLnJvdW5kKHBhcnNlRmxvYXQoZWwudmFsdWUpICogZmFjdG9yKTsKICAgICAgfQogICAgfSk7CiAgfQogIHN5bmNSZW50ZW5GZWxkZXIoKTsKfQoKZnVuY3Rpb24gZ2V0VmFsOChpZCkgewogIGNvbnN0IHYgPSBwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS52YWx1ZSkgfHwgMDsKICByZXR1cm4gdG9nZ2xlOCA9PT0gJ2phZWhybGljaCcgPyB2IC8gMTIgOiB2Owp9Cgpjb25zdCBwcm9kdWN0cyA9IHsKICAxOlsKICAgIHtuYW1lOidYdHJhY2tlcnMgR2xvYmFsIEdvdiBCb25kIEVURicsaXNpbjonREUwMDBBMkg5QVo2Jyx0eXA6J0VURicsdGVyOjAuMjAscmVuZGl0ZToxLjMsdm9sOjMuMixhdXM6J1RoZXMuJyxlc2c6ZmFsc2V9LAogICAge25hbWU6J2lTaGFyZXMgRXVybyBHb3Z0IEJvbmQgRVRGJyxpc2luOidJRTAwQjRXWEpKNjQnLHR5cDonRVRGJyx0ZXI6MC4xNSxyZW5kaXRlOjEuNSx2b2w6My41LGF1czonQXVzc2NoLicsZXNnOmZhbHNlfSwKICAgIHtuYW1lOidMeXhvciBPdmVybmlnaHQgUmV0dXJuIEVURicsaXNpbjonTFUxMTkwNDE3NTk5Jyx0eXA6J0VURicsdGVyOjAuMTAscmVuZGl0ZToxLjEsdm9sOjEuMixhdXM6J1RoZXMuJyxlc2c6dHJ1ZX0sCiAgICB7bmFtZTonRFdTIEVTRyBHZWxkbWFya3QgRm9uZHMnLGlzaW46J0RFMDAwODQ3NDUwMycsdHlwOidGb25kcycsdGVyOjAuMzAscmVuZGl0ZToxLjIsdm9sOjEuNSxhdXM6J1RoZXMuJyxlc2c6dHJ1ZX0sCiAgICB7bmFtZTonaVNoYXJlcyBDb3JlIOKCrCBHb3Z0IEJvbmQnLGlzaW46J0lFMDBCNFdYSkg0MScsdHlwOidFVEYnLHRlcjowLjA5LHJlbmRpdGU6MS40LHZvbDozLjgsYXVzOidBdXNzY2guJyxlc2c6ZmFsc2V9LAogICAge25hbWU6J1Zhbmd1YXJkIOKCrCBHb3Z0IEJvbmQgRVRGJyxpc2luOidJRTAwQjRXWEpLMTEnLHR5cDonRVRGJyx0ZXI6MC4wNyxyZW5kaXRlOjEuMyx2b2w6My40LGF1czonQXVzc2NoLicsZXNnOmZhbHNlfSwKICAgIHtuYW1lOidBbXVuZGkgRXVybyBTaG9ydC1UZXJtIEdvdnQgRVRGJyxpc2luOidMVTE2NTA0ODkwNDAnLHR5cDonRVRGJyx0ZXI6MC4xNCxyZW5kaXRlOjEuMix2b2w6Mi4xLGF1czonVGhlcy4nLGVzZzpmYWxzZX0sCiAgICB7bmFtZTonU1BEUiBCbG9vbWJlcmcgMS0zWSBFdXJvIEdvdnQnLGlzaW46J0lFMDBCNllYNUQ0MCcsdHlwOidFVEYnLHRlcjowLjE1LHJlbmRpdGU6MS4xLHZvbDoxLjksYXVzOidBdXNzY2guJyxlc2c6ZmFsc2V9LAogICAge25hbWU6J1h0cmFja2VycyBFU0cgRVVSIEdvdnQgQm9uZCcsaXNpbjonTFUyMTY5NzM5MDEyJyx0eXA6J0VURicsdGVyOjAuMTIscmVuZGl0ZToxLjQsdm9sOjMuMyxhdXM6J1RoZXMuJyxlc2c6dHJ1ZX0sCiAgICB7bmFtZTonSW52ZXNjbyBFdXJvIEdvdnQgQm9uZCBFVEYnLGlzaW46J0lFMDBCM1pXMEsxOCcsdHlwOidFVEYnLHRlcjowLjEwLHJlbmRpdGU6MS41LHZvbDozLjYsYXVzOidBdXNzY2guJyxlc2c6ZmFsc2V9LAogIF0sCiAgMjpbCiAgICB7bmFtZTonVmFuZ3VhcmQgR2xvYmFsIEJvbmQgSW5kZXgnLGlzaW46J0lFMDBCMThHQzg4OCcsdHlwOidFVEYnLHRlcjowLjE1LHJlbmRpdGU6Mi4yLHZvbDo1LjEsYXVzOidBdXNzY2guJyxlc2c6ZmFsc2V9LAogICAge25hbWU6J2lTaGFyZXMgQ29yZSBHbG9iYWwgQWdnIEJvbmQnLGlzaW46J0lFMDBCM0Y4MVIzNScsdHlwOidFVEYnLHRlcjowLjEwLHJlbmRpdGU6Mi4wLHZvbDo0LjgsYXVzOidUaGVzLicsZXNnOmZhbHNlfSwKICAgIHtuYW1lOidYdHJhY2tlcnMg4oKsIENvcnAgQm9uZCBFVEYnLGlzaW46J0xVMDQ3ODIwNTM3OScsdHlwOidFVEYnLHRlcjowLjE2LHJlbmRpdGU6Mi41LHZvbDo1LjUsYXVzOidUaGVzLicsZXNnOnRydWV9LAogICAge25hbWU6J1BJTUNPIEVTRyBJbmNvbWUgQm9uZCBGb25kcycsaXNpbjonSUUwMEJGOEhWNjAwJyx0eXA6J0ZvbmRzJyx0ZXI6MC41NSxyZW5kaXRlOjIuMyx2b2w6NC45LGF1czonQXVzc2NoLicsZXNnOnRydWV9LAogICAge25hbWU6J0FtdW5kaSBFdXJvIENvcnAgQm9uZCBFVEYnLGlzaW46J0xVMTY4MTA0NTc0NScsdHlwOidFVEYnLHRlcjowLjE0LHJlbmRpdGU6Mi4xLHZvbDo1LjAsYXVzOidUaGVzLicsZXNnOmZhbHNlfSwKICAgIHtuYW1lOidpU2hhcmVzIOKCrCBDb3JwIEJvbmQgRVNHIEVURicsaXNpbjonSUUwMEJZWlRWVDU2Jyx0eXA6J0VURicsdGVyOjAuMTUscmVuZGl0ZToyLjQsdm9sOjUuMixhdXM6J1RoZXMuJyxlc2c6dHJ1ZX0sCiAgICB7bmFtZTonVmFuZ3VhcmQgRVVSIENvcnAgQm9uZCBFVEYnLGlzaW46J0lFMDBCM0I4UTI3NScsdHlwOidFVEYnLHRlcjowLjA5LHJlbmRpdGU6Mi4yLHZvbDo1LjAsYXVzOidBdXNzY2guJyxlc2c6ZmFsc2V9LAogICAge25hbWU6J1h0cmFja2VycyBFVVIgSGlnaCBZaWVsZCBCb25kJyxpc2luOidMVTAyOTAzNTg0OTcnLHR5cDonRVRGJyx0ZXI6MC4yMCxyZW5kaXRlOjIuOCx2b2w6Ni4xLGF1czonQXVzc2NoLicsZXNnOmZhbHNlfSwKICAgIHtuYW1lOidTUERSIEJsb29tYmVyZyBFdXJvIEFnZyBCb25kJyxpc2luOidJRTAwQjQxUllMNjMnLHR5cDonRVRGJyx0ZXI6MC4xNyxyZW5kaXRlOjIuMCx2b2w6NC43LGF1czonQXVzc2NoLicsZXNnOmZhbHNlfSwKICAgIHtuYW1lOidMeXhvciBFU0cgRVVSIENvcnAgQm9uZCBFVEYnLGlzaW46J0xVMTYyMDE1NTE2OCcsdHlwOidFVEYnLHRlcjowLjE0LHJlbmRpdGU6Mi4zLHZvbDo1LjEsYXVzOidUaGVzLicsZXNnOnRydWV9LAogIF0sCiAgMzpbCiAgICB7bmFtZTonVmFuZ3VhcmQgTGlmZVN0cmF0ZWd5IDYwJSBFcXVpdHknLGlzaW46J0lFMDBCTVZCNUswNycsdHlwOidFVEYnLHRlcjowLjI1LHJlbmRpdGU6My41LHZvbDo5LjgsYXVzOidBdXNzY2guJyxlc2c6ZmFsc2V9LAogICAge25hbWU6J2lTaGFyZXMgRVNHIEJhbGFuY2VkIE11bHRpLUFzc2V0Jyxpc2luOidJRTAwQllWSlJQODcnLHR5cDonRVRGJyx0ZXI6MC4yNSxyZW5kaXRlOjMuOCx2b2w6MTAuMixhdXM6J1RoZXMuJyxlc2c6dHJ1ZX0sCiAgICB7bmFtZTonQW11bmRpIE1TQ0kgV29ybGQgRVNHIEVURicsaXNpbjonTFUxNjgxMDQ1MjQwJyx0eXA6J0VURicsdGVyOjAuMTgscmVuZGl0ZTozLjIsdm9sOjkuMSxhdXM6J1RoZXMuJyxlc2c6dHJ1ZX0sCiAgICB7bmFtZTonWHRyYWNrZXJzIFBvcnRmb2xpbyBFVEYnLGlzaW46J0xVMDM5NzIyMTk0NScsdHlwOidFVEYnLHRlcjowLjcwLHJlbmRpdGU6My45LHZvbDoxMC41LGF1czonVGhlcy4nLGVzZzpmYWxzZX0sCiAgICB7bmFtZTonRFdTIENvbmNlcHQgS2FsZGVtb3JnZW4nLGlzaW46J0RFMDAwRFdTMFYzNCcsdHlwOidGb25kcycsdGVyOjEuNTAscmVuZGl0ZTozLjYsdm9sOjguNyxhdXM6J0F1c3NjaC4nLGVzZzpmYWxzZX0sCiAgICB7bmFtZTonVmFuZ3VhcmQgTGlmZVN0cmF0ZWd5IDQwJSBFcXVpdHknLGlzaW46J0lFMDBCTVZCNUo5OScsdHlwOidFVEYnLHRlcjowLjI1LHJlbmRpdGU6My4xLHZvbDo4LjUsYXVzOidBdXNzY2guJyxlc2c6ZmFsc2V9LAogICAge25hbWU6J2lTaGFyZXMgQ29yZSBBbGxvY2F0aW9uIEVURicsaXNpbjonSUUwMEI0TDVZWDIxJyx0eXA6J0VURicsdGVyOjAuMjUscmVuZGl0ZTozLjcsdm9sOjkuOSxhdXM6J1RoZXMuJyxlc2c6ZmFsc2V9LAogICAge25hbWU6J1h0cmFja2VycyBQb3J0Zm9saW8gSW5jb21lIEVURicsaXNpbjonTFUwMzk3MjIxNzg4Jyx0eXA6J0VURicsdGVyOjAuNjUscmVuZGl0ZTozLjQsdm9sOjkuMCxhdXM6J0F1c3NjaC4nLGVzZzpmYWxzZX0sCiAgICB7bmFtZTonQW11bmRpIE11bHRpLUFzc2V0IE1vZGVyYXRlIEVURicsaXNpbjonTFUxOTAwMDY4MzQ0Jyx0eXA6J0VURicsdGVyOjAuMzAscmVuZGl0ZTozLjMsdm9sOjguOCxhdXM6J1RoZXMuJyxlc2c6dHJ1ZX0sCiAgICB7bmFtZTonSFNCQyBHSUYgTXVsdGktQXNzZXQgR3Jvd3RoIEZvbmRzJyxpc2luOidMVTAxNjUwNzI2MjAnLHR5cDonRm9uZHMnLHRlcjoxLjIwLHJlbmRpdGU6My44LHZvbDoxMC4xLGF1czonVGhlcy4nLGVzZzpmYWxzZX0sCiAgXSwKICA0OlsKICAgIHtuYW1lOidpU2hhcmVzIENvcmUgTVNDSSBXb3JsZCBFVEYnLGlzaW46J0lFMDBCNEw1WTk4MycsdHlwOidFVEYnLHRlcjowLjIwLHJlbmRpdGU6NS41LHZvbDoxNC44LGF1czonVGhlcy4nLGVzZzpmYWxzZX0sCiAgICB7bmFtZTonVmFuZ3VhcmQgRlRTRSBBbGwtV29ybGQgRVRGJyxpc2luOidJRTAwQjNSQldNMjUnLHR5cDonRVRGJyx0ZXI6MC4yMixyZW5kaXRlOjUuOCx2b2w6MTUuMixhdXM6J0F1c3NjaC4nLGVzZzpmYWxzZX0sCiAgICB7bmFtZTonQW11bmRpIE1TQ0kgV29ybGQgRVNHIEVURicsaXNpbjonTFUxNjgxMDQ1MjQwJyx0eXA6J0VURicsdGVyOjAuMTgscmVuZGl0ZTo1LjIsdm9sOjE0LjUsYXVzOidUaGVzLicsZXNnOnRydWV9LAogICAge25hbWU6J1h0cmFja2VycyBNU0NJIFdvcmxkIFN3YXAgRVRGJyxpc2luOidMVTAyNzQyMDg2OTInLHR5cDonRVRGJyx0ZXI6MC4xOSxyZW5kaXRlOjUuNix2b2w6MTQuOSxhdXM6J1RoZXMuJyxlc2c6ZmFsc2V9LAogICAge25hbWU6J2lTaGFyZXMgTVNDSSBXb3JsZCBFU0cgU2NyZWVuZWQnLGlzaW46J0lFMDBCRk5NM1AzNicsdHlwOidFVEYnLHRlcjowLjIwLHJlbmRpdGU6NS4zLHZvbDoxNC42LGF1czonVGhlcy4nLGVzZzp0cnVlfSwKICAgIHtuYW1lOidTUERSIE1TQ0kgV29ybGQgRVRGJyxpc2luOidJRTAwQkZZMEdUMTQnLHR5cDonRVRGJyx0ZXI6MC4xMixyZW5kaXRlOjUuNyx2b2w6MTUuMCxhdXM6J1RoZXMuJyxlc2c6ZmFsc2V9LAogICAge25hbWU6J0x5eG9yIE1TQ0kgV29ybGQgRVRGJyxpc2luOidGUjAwMTAzMTU3NzAnLHR5cDonRVRGJyx0ZXI6MC4yMCxyZW5kaXRlOjUuNSx2b2w6MTQuNyxhdXM6J0F1c3NjaC4nLGVzZzpmYWxzZX0sCiAgICB7bmFtZTonSW52ZXNjbyBNU0NJIFdvcmxkIEVTRyBFVEYnLGlzaW46J0lFMDBCTUY5SEs3MycsdHlwOidFVEYnLHRlcjowLjE5LHJlbmRpdGU6NS4zLHZvbDoxNC40LGF1czonVGhlcy4nLGVzZzp0cnVlfSwKICAgIHtuYW1lOidGbG9zc2JhY2ggdm9uIFN0b3JjaCBNdWx0aXBsZSBPcHAuJyxpc2luOidMVTAzMjM1Nzg2NTcnLHR5cDonRm9uZHMnLHRlcjoxLjU2LHJlbmRpdGU6NS45LHZvbDoxMy44LGF1czonVGhlcy4nLGVzZzpmYWxzZX0sCiAgICB7bmFtZTonRFdTIFRvcCBEaXZpZGVuZGUnLGlzaW46J0RFMDAwOTg0ODExOScsdHlwOidGb25kcycsdGVyOjEuNDUscmVuZGl0ZTo1LjEsdm9sOjEzLjUsYXVzOidBdXNzY2guJyxlc2c6ZmFsc2V9LAogIF0sCiAgNTpbCiAgICB7bmFtZTonaVNoYXJlcyBNU0NJIFdvcmxkIFNtYWxsIENhcCBFVEYnLGlzaW46J0lFMDBCRjRSRkgzMScsdHlwOidFVEYnLHRlcjowLjM1LHJlbmRpdGU6Ny4yLHZvbDoxOS41LGF1czonVGhlcy4nLGVzZzpmYWxzZX0sCiAgICB7bmFtZTonWHRyYWNrZXJzIE1TQ0kgRW1lcmdpbmcgTWFya2V0cycsaXNpbjonSUUwMEJUSlJNUDM1Jyx0eXA6J0VURicsdGVyOjAuMTgscmVuZGl0ZTo3LjUsdm9sOjIwLjEsYXVzOidUaGVzLicsZXNnOmZhbHNlfSwKICAgIHtuYW1lOidpU2hhcmVzIENvcmUgTVNDSSBFTSBJTUkgRVRGJyxpc2luOidJRTAwQktNNEdaNjYnLHR5cDonRVRGJyx0ZXI6MC4xOCxyZW5kaXRlOjcuMCx2b2w6MTkuMixhdXM6J1RoZXMuJyxlc2c6ZmFsc2V9LAogICAge25hbWU6J1Zhbmd1YXJkIEZUU0UgRW1lcmdpbmcgTWFya2V0cycsaXNpbjonSUUwMEIzVlZNTTg0Jyx0eXA6J0VURicsdGVyOjAuMjIscmVuZGl0ZTo3LjMsdm9sOjE5LjgsYXVzOidBdXNzY2guJyxlc2c6ZmFsc2V9LAogICAge25hbWU6J0FtdW5kaSBNU0NJIEVNIEVTRyBMZWFkZXJzIEVURicsaXNpbjonTFUxNjgxMDQ1OTA5Jyx0eXA6J0VURicsdGVyOjAuMjAscmVuZGl0ZTo3LjEsdm9sOjE5LjQsYXVzOidUaGVzLicsZXNnOnRydWV9LAogICAge25hbWU6J2lTaGFyZXMgTVNDSSBXb3JsZCBNb21lbnR1bSBFVEYnLGlzaW46J0lFMDBCUDNRWkI1OScsdHlwOidFVEYnLHRlcjowLjMwLHJlbmRpdGU6Ny44LHZvbDoxOC45LGF1czonVGhlcy4nLGVzZzpmYWxzZX0sCiAgICB7bmFtZTonWHRyYWNrZXJzIFMmUCA1MDAgU3dhcCBFVEYnLGlzaW46J0xVMDQ5MDYxODU0MicsdHlwOidFVEYnLHRlcjowLjE1LHJlbmRpdGU6Ny42LHZvbDoxNy41LGF1czonVGhlcy4nLGVzZzpmYWxzZX0sCiAgICB7bmFtZTonaVNoYXJlcyBNU0NJIEVNIEVTRyBFbmhhbmNlZCcsaXNpbjonSUUwMEJGTk0zRDE0Jyx0eXA6J0VURicsdGVyOjAuMjMscmVuZGl0ZTo3LjIsdm9sOjE5LjMsYXVzOidUaGVzLicsZXNnOnRydWV9LAogICAge25hbWU6J1Zhbmd1YXJkIFVTIDUwMCBTdG9jayBJbmRleCBFVEYnLGlzaW46J0lFMDAzMjYyMDc4NycsdHlwOidFVEYnLHRlcjowLjEwLHJlbmRpdGU6Ny43LHZvbDoxNy4yLGF1czonQXVzc2NoLicsZXNnOmZhbHNlfSwKICAgIHtuYW1lOidMeXhvciBNU0NJIEVtZXJnaW5nIE1hcmtldHMgRVRGJyxpc2luOidGUjAwMTA0MjkwNjgnLHR5cDonRVRGJyx0ZXI6MC4xNCxyZW5kaXRlOjcuMCx2b2w6MjAuMCxhdXM6J0F1c3NjaC4nLGVzZzpmYWxzZX0sCiAgXSwKfTsKY29uc3QgcHJvZHVjdHNOb3JtYWwgPSB7CiAgMTpbCiAgICB7bmFtZTonRGVrYSBEZXV0c2NoZSBCb2Vyc2UgRVVST0dPViBHZXJtYW55IDEwKycsaXNpbjonREUwMDBFVEZMMjI3Jyx0eXA6J0VURicsdGVyOjAuMTUscmVuZGl0ZToxLjQsdm9sOjMuOSxhdXM6J0F1c3NjaC4nLGVzZzpmYWxzZX0sCiAgICB7bmFtZTonaVNoYXJlcyBlYi5yZXh4IEdvdmVybm1lbnQgR2VybWFueSBFVEYnLGlzaW46J0RFMDAwNjI4OTQ3MycsdHlwOidFVEYnLHRlcjowLjA5LHJlbmRpdGU6MS4zLHZvbDozLjYsYXVzOidBdXNzY2guJyxlc2c6ZmFsc2V9LAogICAge25hbWU6J1h0cmFja2VycyBJSSBHZXJtYW55IEdvdmVybm1lbnQgQm9uZCBFVEYnLGlzaW46J0xVMDQ2ODg5NjU3NScsdHlwOidFVEYnLHRlcjowLjA5LHJlbmRpdGU6MS4yLHZvbDozLjEsYXVzOidUaGVzLicsZXNnOmZhbHNlfSwKICAgIHtuYW1lOidTUERSIEJsb29tYmVyZyBHZXJtYW55IEFnZ3JlZ2F0ZSBCb25kIEVURicsaXNpbjonSUUwMEJHUVo3VjQ0Jyx0eXA6J0VURicsdGVyOjAuMTIscmVuZGl0ZToxLjMsdm9sOjMuMyxhdXM6J0F1c3NjaC4nLGVzZzpmYWxzZX0sCiAgICB7bmFtZTonQW11bmRpIEdlcm1hbiBHb3Z0IEJvbmQgRVRGJyxpc2luOidMVTE2ODEwNDI3MDAnLHR5cDonRVRGJyx0ZXI6MC4xMCxyZW5kaXRlOjEuMSx2b2w6My4wLGF1czonVGhlcy4nLGVzZzpmYWxzZX0sCiAgICB7bmFtZTonVmFuZ3VhcmQgRVVSIEV1cm96b25lIEdvdmVybm1lbnQgQm9uZCBFVEYnLGlzaW46J0lFMDBCSDA0R0wzOScsdHlwOidFVEYnLHRlcjowLjA3LHJlbmRpdGU6MS40LHZvbDozLjUsYXVzOidBdXNzY2guJyxlc2c6ZmFsc2V9LAogICAge25hbWU6J2lTaGFyZXMgQ29yZSDigqwgR292dCBCb25kIFVDSVRTIEVURicsaXNpbjonSUUwMEI0V1hKSjY0Jyx0eXA6J0VURicsdGVyOjAuMDcscmVuZGl0ZToxLjUsdm9sOjMuNyxhdXM6J0F1c3NjaC4nLGVzZzpmYWxzZX0sCiAgICB7bmFtZTonTHl4b3IgRXVybyBHb3Zlcm5tZW50IEJvbmQgRVRGJyxpc2luOidGUjAwMTA1MTA4MDAnLHR5cDonRVRGJyx0ZXI6MC4xNyxyZW5kaXRlOjEuMyx2b2w6My40LGF1czonQXVzc2NoLicsZXNnOmZhbHNlfSwKICAgIHtuYW1lOidIU0JDIEV1cm8gR292ZXJubWVudCBCb25kIEVURicsaXNpbjonREUwMDBBMFJGRUIxJyx0eXA6J0VURicsdGVyOjAuMTAscmVuZGl0ZToxLjIsdm9sOjMuMixhdXM6J1RoZXMuJyxlc2c6ZmFsc2V9LAogICAge25hbWU6J0ludmVzY28gRXVybyBHb3Zlcm5tZW50IEJvbmQgRVRGJyxpc2luOidJRTAwQjNaVzBLMTgnLHR5cDonRVRGJyx0ZXI6MC4xMCxyZW5kaXRlOjEuNCx2b2w6My42LGF1czonQXVzc2NoLicsZXNnOmZhbHNlfSwKICBdLAogIDI6WwogICAge25hbWU6J2lTaGFyZXMgR2xvYmFsIENvcnAgQm9uZCBVQ0lUUyBFVEYnLGlzaW46J0lFMDBCN0o3VEI0NScsdHlwOidFVEYnLHRlcjowLjIwLHJlbmRpdGU6Mi40LHZvbDo1LjMsYXVzOidBdXNzY2guJyxlc2c6ZmFsc2V9LAogICAge25hbWU6J1Zhbmd1YXJkIEdsb2JhbCBCb25kIEluZGV4IEZ1bmQnLGlzaW46J0lFMDBCMThHQzg4OCcsdHlwOidFVEYnLHRlcjowLjE1LHJlbmRpdGU6Mi4yLHZvbDo1LjAsYXVzOidBdXNzY2guJyxlc2c6ZmFsc2V9LAogICAge25hbWU6J1NQRFIgQmxvb21iZXJnIEdsb2JhbCBBZ2dyZWdhdGUgQm9uZCBFVEYnLGlzaW46J0lFMDBCNDNRSko0MCcsdHlwOidFVEYnLHRlcjowLjEwLHJlbmRpdGU6Mi4xLHZvbDo0LjksYXVzOidBdXNzY2guJyxlc2c6ZmFsc2V9LAogICAge25hbWU6J1h0cmFja2VycyBHbG9iYWwgQWdncmVnYXRlIEJvbmQgRVRGJyxpc2luOidJRTAwQkw2Szk5ODgnLHR5cDonRVRGJyx0ZXI6MC4xMCxyZW5kaXRlOjIuMCx2b2w6NC44LGF1czonVGhlcy4nLGVzZzpmYWxzZX0sCiAgICB7bmFtZTonaVNoYXJlcyDigqwgQ29ycCBCb25kIEVTRyBFVEYnLGlzaW46J0lFMDBCWVpUVlQ1NicsdHlwOidFVEYnLHRlcjowLjE1LHJlbmRpdGU6Mi40LHZvbDo1LjIsYXVzOidUaGVzLicsZXNnOnRydWV9LAogICAge25hbWU6J0x5eG9yIEdyZWVuIEJvbmQgRVRGJyxpc2luOidGUjAwMTI3NDA5ODMnLHR5cDonRVRGJyx0ZXI6MC4yNSxyZW5kaXRlOjIuMCx2b2w6NC43LGF1czonQXVzc2NoLicsZXNnOnRydWV9LAogICAge25hbWU6J1BJTUNPIEdJUyBJbmNvbWUgRnVuZCcsaXNpbjonSUUwMEI4SzVCUDM3Jyx0eXA6J0ZvbmRzJyx0ZXI6MC44NSxyZW5kaXRlOjIuOCx2b2w6NS44LGF1czonQXVzc2NoLicsZXNnOmZhbHNlfSwKICAgIHtuYW1lOidEV1MgRXVybyBDb3Jwb3JhdGUgQm9uZCcsaXNpbjonREUwMDA4NDkwOTg4Jyx0eXA6J0ZvbmRzJyx0ZXI6MC43NSxyZW5kaXRlOjIuMyx2b2w6NS4wLGF1czonVGhlcy4nLGVzZzpmYWxzZX0sCiAgICB7bmFtZTonRmxvc3NiYWNoIHZvbiBTdG9yY2ggQm9uZCBPcHBvcnR1bml0aWVzJyxpc2luOidMVTAzOTkwMjk1NzEnLHR5cDonRm9uZHMnLHRlcjoxLjA2LHJlbmRpdGU6Mi42LHZvbDo1LjUsYXVzOidUaGVzLicsZXNnOmZhbHNlfSwKICAgIHtuYW1lOidDYXJtaWduYWMgU8OpY3VyaXTDqScsaXNpbjonRlIwMDEwMTQ5MTIwJyx0eXA6J0ZvbmRzJyx0ZXI6MS4wMCxyZW5kaXRlOjIuMSx2b2w6NC41LGF1czonVGhlcy4nLGVzZzpmYWxzZX0sCiAgXSwKICAzOlsKICAgIHtuYW1lOidWYW5ndWFyZCBMaWZlU3RyYXRlZ3kgNjAlIEVxdWl0eSBFVEYnLGlzaW46J0lFMDBCTVZCNUswNycsdHlwOidFVEYnLHRlcjowLjI1LHJlbmRpdGU6My44LHZvbDoxMC41LGF1czonQXVzc2NoLicsZXNnOmZhbHNlfSwKICAgIHtuYW1lOidpU2hhcmVzIE1TQ0kgV29ybGQgRVNHIFNjcmVlbmVkIEVURicsaXNpbjonSUUwMEJGTk0zUDM2Jyx0eXA6J0VURicsdGVyOjAuMjAscmVuZGl0ZTozLjUsdm9sOjkuOCxhdXM6J1RoZXMuJyxlc2c6dHJ1ZX0sCiAgICB7bmFtZTonRmxvc3NiYWNoIHZvbiBTdG9yY2ggTXVsdGlwbGUgT3BwLiBSJyxpc2luOidMVTAzMjM1Nzg2NTcnLHR5cDonRm9uZHMnLHRlcjoxLjU2LHJlbmRpdGU6NC4yLHZvbDoxMS4wLGF1czonVGhlcy4nLGVzZzpmYWxzZX0sCiAgICB7bmFtZTonRFdTIENvbmNlcHQgS2FsZGVtb3JnZW4nLGlzaW46J0RFMDAwRFdTMFYzNCcsdHlwOidGb25kcycsdGVyOjEuNTAscmVuZGl0ZTozLjksdm9sOjkuOCxhdXM6J0F1c3NjaC4nLGVzZzpmYWxzZX0sCiAgICB7bmFtZTonTm9yZGVhIDEgU3RhYmxlIFJldHVybiBGdW5kJyxpc2luOidMVTAyMjczODQwMjAnLHR5cDonRm9uZHMnLHRlcjoxLjUwLHJlbmRpdGU6My40LHZvbDo4LjUsYXVzOidBdXNzY2guJyxlc2c6ZmFsc2V9LAogICAge25hbWU6J0JsYWNrUm9jayBHbG9iYWwgQWxsb2NhdGlvbiBGdW5kJyxpc2luOidMVTAxNzEyODk0OTgnLHR5cDonRm9uZHMnLHRlcjoxLjc1LHJlbmRpdGU6My43LHZvbDo5LjksYXVzOidUaGVzLicsZXNnOmZhbHNlfSwKICAgIHtuYW1lOidDYXJtaWduYWMgUGF0cmltb2luZScsaXNpbjonRlIwMDEwMTM1MTAzJyx0eXA6J0ZvbmRzJyx0ZXI6MS44MCxyZW5kaXRlOjMuNSx2b2w6OS4yLGF1czonQXVzc2NoLicsZXNnOmZhbHNlfSwKICAgIHtuYW1lOidYVFJBQ0tFUlMgTVNDSSBBQ1dJIEVURicsaXNpbjonSUUwMEJHSFEwRzgwJyx0eXA6J0VURicsdGVyOjAuMTcscmVuZGl0ZTozLjcsdm9sOjEwLjMsYXVzOidUaGVzLicsZXNnOmZhbHNlfSwKICAgIHtuYW1lOidBbXVuZGkgTVNDSSBXb3JsZCBFU0cgTGVhZGVycyBFVEYnLGlzaW46J0xVMTYwMjE0NDczMicsdHlwOidFVEYnLHRlcjowLjE4LHJlbmRpdGU6My4zLHZvbDo5LjUsYXVzOidUaGVzLicsZXNnOnRydWV9LAogICAge25hbWU6J1NQRFIgTVNDSSBBQ1dJIEVURicsaXNpbjonSUUwMEI0NFo1QjQ4Jyx0eXA6J0VURicsdGVyOjAuNDAscmVuZGl0ZTozLjcsdm9sOjEwLjIsYXVzOidUaGVzLicsZXNnOmZhbHNlfSwKICBdLAogIDQ6WwogICAge25hbWU6J2lTaGFyZXMgQ29yZSBNU0NJIFdvcmxkIFVDSVRTIEVURicsaXNpbjonSUUwMEI0TDVZOTgzJyx0eXA6J0VURicsdGVyOjAuMjAscmVuZGl0ZTo1Ljgsdm9sOjE1LjUsYXVzOidUaGVzLicsZXNnOmZhbHNlfSwKICAgIHtuYW1lOidWYW5ndWFyZCBGVFNFIEFsbC1Xb3JsZCBVQ0lUUyBFVEYnLGlzaW46J0lFMDBCM1JCV00yNScsdHlwOidFVEYnLHRlcjowLjIyLHJlbmRpdGU6NS45LHZvbDoxNS44LGF1czonQXVzc2NoLicsZXNnOmZhbHNlfSwKICAgIHtuYW1lOidTUERSIE1TQ0kgV29ybGQgRVRGJyxpc2luOidJRTAwQkZZMEdUMTQnLHR5cDonRVRGJyx0ZXI6MC4xMixyZW5kaXRlOjUuNyx2b2w6MTUuMixhdXM6J1RoZXMuJyxlc2c6ZmFsc2V9LAogICAge25hbWU6J0ludmVzY28gTVNDSSBXb3JsZCBFVEYnLGlzaW46J0lFMDBCNjBTWDM5NCcsdHlwOidFVEYnLHRlcjowLjE5LHJlbmRpdGU6NS42LHZvbDoxNS4wLGF1czonVGhlcy4nLGVzZzpmYWxzZX0sCiAgICB7bmFtZTonQW11bmRpIE1TQ0kgV29ybGQgRVRGJyxpc2luOidMVTE2ODEwNDM1OTknLHR5cDonRVRGJyx0ZXI6MC4xMixyZW5kaXRlOjUuNyx2b2w6MTUuMSxhdXM6J1RoZXMuJyxlc2c6ZmFsc2V9LAogICAge25hbWU6J0ZpZGVsaXR5IE1TQ0kgV29ybGQgSW5kZXggRVRGJyxpc2luOidJRTAwQllYNU5YMzMnLHR5cDonRVRGJyx0ZXI6MC4xMixyZW5kaXRlOjUuOCx2b2w6MTUuMyxhdXM6J1RoZXMuJyxlc2c6ZmFsc2V9LAogICAge25hbWU6J0Zsb3NzYmFjaCB2b24gU3RvcmNoIE11bHRpcGxlIE9wcC4nLGlzaW46J0xVMDMyMzU3ODY1NycsdHlwOidGb25kcycsdGVyOjEuNTYscmVuZGl0ZTo2LjEsdm9sOjE0LjUsYXVzOidUaGVzLicsZXNnOmZhbHNlfSwKICAgIHtuYW1lOidEV1MgVG9wIERpdmlkZW5kZScsaXNpbjonREUwMDA5ODQ4MTE5Jyx0eXA6J0ZvbmRzJyx0ZXI6MS40NSxyZW5kaXRlOjUuNCx2b2w6MTMuOCxhdXM6J0F1c3NjaC4nLGVzZzpmYWxzZX0sCiAgICB7bmFtZTonQWxsaWFueiBJbnRlcmdsb2JhbCcsaXNpbjonREUwMDA4NDc1MDcwJyx0eXA6J0ZvbmRzJyx0ZXI6MS42MCxyZW5kaXRlOjUuNix2b2w6MTQuMixhdXM6J1RoZXMuJyxlc2c6ZmFsc2V9LAogICAge25hbWU6J0x5eG9yIE1TQ0kgV29ybGQgRVRGJyxpc2luOidGUjAwMTAzMTU3NzAnLHR5cDonRVRGJyx0ZXI6MC4yMCxyZW5kaXRlOjUuNSx2b2w6MTQuOCxhdXM6J0F1c3NjaC4nLGVzZzpmYWxzZX0sCiAgXSwKICA1OlsKICAgIHtuYW1lOidpU2hhcmVzIE1TQ0kgV29ybGQgU21hbGwgQ2FwIEVURicsaXNpbjonSUUwMEJGNFJGSDMxJyx0eXA6J0VURicsdGVyOjAuMzUscmVuZGl0ZTo3LjUsdm9sOjIwLjIsYXVzOidUaGVzLicsZXNnOmZhbHNlfSwKICAgIHtuYW1lOidYdHJhY2tlcnMgTVNDSSBVU0EgU3dhcCBFVEYnLGlzaW46J0xVMDI3NDIxMDY3MicsdHlwOidFVEYnLHRlcjowLjE1LHJlbmRpdGU6Ny44LHZvbDoxOC41LGF1czonVGhlcy4nLGVzZzpmYWxzZX0sCiAgICB7bmFtZTonaVNoYXJlcyBDb3JlIFMmUCA1MDAgRVRGJyxpc2luOidJRTAwQjVCTVIwODcnLHR5cDonRVRGJyx0ZXI6MC4wNyxyZW5kaXRlOjcuOSx2b2w6MTcuOCxhdXM6J1RoZXMuJyxlc2c6ZmFsc2V9LAogICAge25hbWU6J1Zhbmd1YXJkIFMmUCA1MDAgRVRGJyxpc2luOidJRTAwQjNYWFJQMDknLHR5cDonRVRGJyx0ZXI6MC4wNyxyZW5kaXRlOjcuOCx2b2w6MTcuNixhdXM6J0F1c3NjaC4nLGVzZzpmYWxzZX0sCiAgICB7bmFtZTonaVNoYXJlcyBOQVNEQVEgMTAwIEVURicsaXNpbjonSUUwMEI1M1NaQjE5Jyx0eXA6J0VURicsdGVyOjAuMzMscmVuZGl0ZTo4LjUsdm9sOjIyLjAsYXVzOidUaGVzLicsZXNnOmZhbHNlfSwKICAgIHtuYW1lOidYdHJhY2tlcnMgTVNDSSBFbWVyZ2luZyBNYXJrZXRzJyxpc2luOidJRTAwQlRKUk1QMzUnLHR5cDonRVRGJyx0ZXI6MC4xOCxyZW5kaXRlOjcuNSx2b2w6MjAuNSxhdXM6J1RoZXMuJyxlc2c6ZmFsc2V9LAogICAge25hbWU6J2lTaGFyZXMgTVNDSSBFbWVyZ2luZyBNYXJrZXRzIEVURicsaXNpbjonSUUwMEI0TDVZQzE4Jyx0eXA6J0VURicsdGVyOjAuMTgscmVuZGl0ZTo3LjMsdm9sOjIwLjAsYXVzOidUaGVzLicsZXNnOmZhbHNlfSwKICAgIHtuYW1lOidMeXhvciBNU0NJIEVtZXJnaW5nIE1hcmtldHMgRVRGJyxpc2luOidGUjAwMTA0MjkwNjgnLHR5cDonRVRGJyx0ZXI6MC4xNCxyZW5kaXRlOjcuMSx2b2w6MjAuMyxhdXM6J0F1c3NjaC4nLGVzZzpmYWxzZX0sCiAgICB7bmFtZTonaVNoYXJlcyBOQVNEQVEgMTAwIEVURicsaXNpbjonSUUwMEI1M1NaQjE5Jyx0eXA6J0VURicsdGVyOjAuMzMscmVuZGl0ZTo4LjUsdm9sOjIyLjAsYXVzOidUaGVzLicsZXNnOmZhbHNlfSwKICAgIHtuYW1lOidJbnZlc2NvIFFRUSBOQVNEQVEgMTAwIEVURicsaXNpbjonSUUwMDMyMDc3MDEyJyx0eXA6J0VURicsdGVyOjAuMjAscmVuZGl0ZTo4LjQsdm9sOjIxLjgsYXVzOidUaGVzLicsZXNnOmZhbHNlfSwKICBdLAp9OwpsZXQgYWN0aXZlUHJvZFRhYiA9ICJmb2VyZCI7CmxldCBwcm9kRXhwYW5kZWQgPSBmYWxzZTsKCmZ1bmN0aW9uIHNldFByb2RUYWIodGFiKSB7IGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2R1Y3RCb2R5Iik7IGlmICghZWwpIHJldHVybjsKICBhY3RpdmVQcm9kVGFiID0gdGFiOwogIHByb2RFeHBhbmRlZCA9IGZhbHNlOwogIGNvbnN0IHRpdGxlRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJvZFRhYmxlVGl0bGUnKTsKICBpZiAodGl0bGVFbCkgdGl0bGVFbC50ZXh0Q29udGVudCA9IHRhYiA9PT0gJ2ZvZXJkJyA\/ICdGw7ZyZGVyZsOkaGlnZSBFVEYgLyBGb25kcyBmw7xyIGRlaW5lIFJlbmRpdGVlcndhcnR1bmcnIDogJ05pY2h0LWbDtnJkZXJmw6RoaWdlIEVURiAvIEZvbmRzIGbDvHIgZGVpbmUgUmVuZGl0ZWVyd2FydHVuZyc7CiAgY29uc3QgYnRuRiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcm9kVGFiLWZvZXJkJyk7CiAgY29uc3QgYnRuTiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcm9kVGFiLW5vcm1hbCcpOwogIGlmIChidG5GICYmIGJ0bk4pIHsKICAgIGJ0bkYuc3R5bGUuYm9yZGVyID0gdGFiID09PSAnZm9lcmQnID8gJzFweCBzb2xpZCB2YXIoLS1hY2NlbnQpJyA6ICcxcHggc29saWQgdmFyKC0tYm9yZGVyKSc7CiAgICBidG5GLnN0eWxlLmJhY2tncm91bmQgPSB0YWIgPT09ICdmb2VyZCcgPyAncmdiYSgyMzIsNTAsMTIyLDAuMTUpJyA6ICd2YXIoLS1zdXJmYWNlMiknOwogICAgYnRuRi5zdHlsZS5jb2xvciA9IHRhYiA9PT0gJ2ZvZXJkJyA\/ICd2YXIoLS1hY2NlbnQpJyA6ICd2YXIoLS1tdXRlZCknOwogICAgYnRuTi5zdHlsZS5ib3JkZXIgPSB0YWIgPT09ICdub3JtYWwnID8gJzFweCBzb2xpZCAjMDBDMkZGJyA6ICcxcHggc29saWQgdmFyKC0tYm9yZGVyKSc7CiAgICBidG5OLnN0eWxlLmJhY2tncm91bmQgPSB0YWIgPT09ICdub3JtYWwnID8gJ3JnYmEoMCwxOTQsMjU1LDAuMTIpJyA6ICd2YXIoLS1zdXJmYWNlMiknOwogICAgYnRuTi5zdHlsZS5jb2xvciA9IHRhYiA9PT0gJ25vcm1hbCcgPyAnIzAwQzJGRicgOiAndmFyKC0tbXV0ZWQpJzsKICB9CiAgcHJvZFNob3duID0gNTsKICByZW5kZXJQcm9kdWN0c1BhZ2UoYWN0aXZlUkspOwp9CgpmdW5jdGlvbiByZW5kZXJSS1RhYnMoYWN0aXZlKSB7IGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJrVGFicyIpKSByZXR1cm47CiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JrVGFicycpOwogIGlmICghY29udGFpbmVyKSByZXR1cm47CiAgY29udGFpbmVyLmlubmVySFRNTCA9ICcnOwogIGZvciAobGV0IGkgPSAxOyBpIDw9IDU7IGkrKykgewogICAgY29uc3QgYnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgICBidG4uc3R5bGUuY3NzVGV4dCA9IGBwYWRkaW5nOjZweCAxNHB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7Ym9yZGVyOjFweCBzb2xpZCAke2kgPT09IGFjdGl2ZSA\/IHJrQ29sb3JzW2ktMV0gOiAndmFyKC0tYm9yZGVyKSd9O2JhY2tncm91bmQ6JHtpID09PSBhY3RpdmUgPyBya0NvbG9yc1tpLTFdICsgJzIyJyA6ICd2YXIoLS1zdXJmYWNlMiknfTtjb2xvcjoke2kgPT09IGFjdGl2ZSA\/IHJrQ29sb3JzW2ktMV0gOiAndmFyKC0tbXV0ZWQpJ307Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjphbGwgMC4ycztmb250LWZhbWlseToiT3BlblNhbnMiLEFyaWFsLHNhbnMtc2VyaWY7YDsKICAgIGJ0bi50ZXh0Q29udGVudCA9ICdTUkkgJyArIGk7CiAgICBidG4udGl0bGUgPSBya0xhYmVsc1tpLTFdOwogICAgYnRuLm9uY2xpY2sgPSAoKSA9PiB7IGFjdGl2ZVJLID0gaTsgcHJvZFNob3duID0gNTsgcmVuZGVyUktUYWJzKGkpOyByZW5kZXJQcm9kdWN0c1BhZ2UoaSk7IH07CiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoYnRuKTsKICB9Cn0KCmxldCBwcm9kU2hvd24gPSA1OwoKZnVuY3Rpb24gcmVuZGVyUHJvZHVjdHMocmspIHsgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZHVjdEJvZHkiKSkgcmV0dXJuOyBwcm9kU2hvd24gPSA1OyByZW5kZXJQcm9kdWN0c1BhZ2UocmspOyB9CgpmdW5jdGlvbiByZW5kZXJQcm9kdWN0c1BhZ2UocmspIHsgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZHVjdEJvZHkiKSkgcmV0dXJuOwogIGNvbnN0IHRib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb2R1Y3RCb2R5Jyk7CiAgY29uc3QgZGF0YXNldCA9IGFjdGl2ZVByb2RUYWIgPT09ICdub3JtYWwnID8gcHJvZHVjdHNOb3JtYWwgOiBwcm9kdWN0czsKICBjb25zdCBwcm9kcyA9IChkYXRhc2V0W3JrXSB8fCBbXSk7CiAgY29uc3QgdmlzaWJsZSA9IHByb2RzLnNsaWNlKDAsIHByb2RTaG93bik7CiAgY29uc3QgaGFzTW9yZSA9IHByb2RzLmxlbmd0aCA+IHByb2RTaG93bjsKCiAgdGJvZHkuaW5uZXJIVE1MID0gdmlzaWJsZS5tYXAocCA9PiBgCiAgICA8dHI+CiAgICAgIDx0ZCBzdHlsZT0icGFkZGluZzoxMHB4IDEycHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYm9yZGVyKTsiPgogICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtd2VpZ2h0OjUwMDsiPiR7cC5uYW1lfSR7cC5lc2cgPyAnIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTBweDtiYWNrZ3JvdW5kOnJnYmEoMjksMTU4LDExNywwLjE1KTtjb2xvcjojMUQ5RTc1O3BhZGRpbmc6MnB4IDZweDtib3JkZXItcmFkaXVzOjEwcHg7Ij5FU0c8L3NwYW4+JyA6ICcnfTwvZGl2PgogICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLW11dGVkKTsiPiR7cC5pc2lufTwvZGl2PgogICAgICA8L3RkPgogICAgICA8dGQgc3R5bGU9InBhZGRpbmc6MTBweCAxMnB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7Ij4KICAgICAgICA8c3BhbiBzdHlsZT0iYmFja2dyb3VuZDoke3JrQ29sb3JzW3JrLTFdfTIyO2NvbG9yOiR7cmtDb2xvcnNbcmstMV19O2JvcmRlcjoxcHggc29saWQgJHtya0NvbG9yc1tyay0xXX00NDtwYWRkaW5nOjJweCA4cHg7Ym9yZGVyLXJhZGl1czoyMHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjYwMDt3aGl0ZS1zcGFjZTpub3dyYXA7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ij5TUkkgJHtya308L3NwYW4+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZCBzdHlsZT0icGFkZGluZzoxMHB4IDEycHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYm9yZGVyKTtjb2xvcjojNGZjM2Y3OyI+JHtwLnRlcn0lPC90ZD4KICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nOjEwcHggMTJweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpO2NvbG9yOiM0ZmMzZjc7Ij4ke3AucmVuZGl0ZX0lPC90ZD4KICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nOjEwcHggMTJweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpO2NvbG9yOiM0ZmMzZjc7Ij4ke3Audm9sID8gcC52b2wrJyUnIDogJ+KAkyd9PC90ZD4KICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nOjEwcHggMTJweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpO2NvbG9yOnZhcigtLW11dGVkKTsiPiR7cC5hdXN9PC90ZD4KICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nOjEwcHggMTJweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOyI+CiAgICAgICAgPGJ1dHRvbiBzdHlsZT0iYmFja2dyb3VuZDpyZ2JhKDIzMiw1MCwxMjIsMC4xNSk7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDIzMiw1MCwxMjIsMC40KTtjb2xvcjp2YXIoLS1hY2NlbnQpO3BhZGRpbmc6NnB4IDEycHg7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwO2N1cnNvcjpwb2ludGVyO3doaXRlLXNwYWNlOm5vd3JhcDtmb250LWZhbWlseToiT3BlblNhbnMiLEFyaWFsLHNhbnMtc2VyaWY7Ij5KZXR6dCBTcGFyZW4g4oaSPC9idXR0b24+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIGApLmpvaW4oJycpICsgKGhhc01vcmUgPyBgCiAgICA8dHI+PHRkIGNvbHNwYW49IjciIHN0eWxlPSJwYWRkaW5nOjEycHg7dGV4dC1hbGlnbjpjZW50ZXI7Ij4KICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJwcm9kU2hvd24rPTU7cmVuZGVyUHJvZHVjdHNQYWdlKGFjdGl2ZVJLKSIgc3R5bGU9ImJhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtjb2xvcjp2YXIoLS1tdXRlZCk7Zm9udC1zaXplOjEzcHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mYW1pbHk6Ik9wZW5TYW5zIixBcmlhbCxzYW5zLXNlcmlmO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Ij4rIHdlaXRlcmUgYW56ZWlnZW48L2J1dHRvbj4KICAgIDwvdGQ+PC90cj5gIDogKHByb2RTaG93biA+IDUgPyBgCiAgICA8dHI+PHRkIGNvbHNwYW49IjciIHN0eWxlPSJwYWRkaW5nOjEycHg7dGV4dC1hbGlnbjpjZW50ZXI7Ij4KICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJwcm9kU2hvd249NTtyZW5kZXJQcm9kdWN0c1BhZ2UoYWN0aXZlUkspIiBzdHlsZT0iYmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2NvbG9yOnZhcigtLW11dGVkKTtmb250LXNpemU6MTNweDtjdXJzb3I6cG9pbnRlcjtmb250LWZhbWlseToiT3BlblNhbnMiLEFyaWFsLHNhbnMtc2VyaWY7Ij53ZW5pZ2VyIGFuemVpZ2VuPC9idXR0b24+CiAgICA8L3RkPjwvdHI+YCA6ICcnKSk7Cn0KCgovLyDilIDilIAgU3RldWVyLU1vZGVsbCAobmFjaGdlbGFnZXJ0ZSBCZXN0ZXVlcnVuZyArIEVoZWdhdHRlbnNwbGl0dGluZykg4oCTIFNjaGVtYSB3aWUgVG9vbCAxLjMg4pSA4pSACnZhciBzcGxpdHRpbmdBa3RpdjggPSBmYWxzZSwgcGFydG5lclR5cDggPSAncmVudGUnLCBwYXJ0bmVyV2VydDggPSAwOwp2YXIga2lTdFNhdHo4ID0gMDsgICAvLyBLaXJjaGVuc3RldWVyOiAwIC8gMC4wOCAvIDAuMDkKLy8gU296aWFsYWJnYWJlbiBSZW50bmVyIChTdGFuZGFyZHPDpHR6ZSAyMDI1LCB2ZXJlaW5mYWNodCk6Ci8vIGdlc2V0emxpY2hlIFJlbnRlID0gaGFsYmVyIEtWLVNhdHogKDcsMyUpICsgaGFsYmVyIFp1c2F0emJlaXRyYWcsIFBmbGVnZSB2b2xsOwovLyBCZXRyaWVic3JlbnRlIChWZXJzb3JndW5nc2JlenVnKSA9IHZvbGxlciBLVi1TYXR6ICgxNCw2JSkgKyB2b2xsZXIgWnVzYXR6YmVpdHJhZyBvYmVyaGFsYiBGcmVpYmV0cmFnLCBQZmxlZ2Ugdm9sbC4KdmFyIFNPWjggPSB7IGt2SGFsYjogMC4wNzMsIGt2Vm9sbDogMC4xNDYsIHB2U2F0ejogMC4wMzYsIGJhdkZyZWliZXRyYWc6IDE5Ny43NSB9OyAgLy8gYkFWOiBLVi1GcmVpYmV0cmFnIFVORCBQZmxlZ2UtRnJlaWdyZW56ZSAyMDI2ID0gQmV6dWdzZ3LDtsOfZSAzLjk1NSDigqwgw7cgMjAgKHNpZWhlIFBmbGVnZXBvc3RlbiBkZXIgQmV0cmllYnNyZW50ZSkKLy8gwqczMmEgRVN0RywgU3RldWVydGFyaWYgMjAyNiAoasOkaHJsaWNoIHBmbGVnZW4pCnZhciBTVEVVRVI4ID0gewogIGdydW5kZnJlaWJldHJhZzogMTIzNDgsCiAgejJfYmlzOiAxNzc5OSwgejJfYTogOTE0LjUxLCB6Ml9iOiAxNDAwLAogIHozX2JpczogNjk4NzgsIHozX2E6IDE3My4xMCwgejNfYjogMjM5NywgejNfYzogMTAzNC44NywKICB6NF9iaXM6IDI3NzgyNSwgejRfc2F0ejogMC40MiwgejRfYWJ6dWc6IDExMTM1LjYzLAogIHo1X3NhdHo6IDAuNDUsIHo1X2FienVnOiAxOTQ3MC4zOCwKICB3ZXJidW5nc2tvc3RlbjogMTAyLCBzb25kZXJhdXNnYWJlbjogMzYsCiAgcmVudGVfYmFfYmFzaXNqYWhyOiAyMDIzLCByZW50ZV9iYV9iYXNpc3dlcnQ6IDAuODI1LCByZW50ZV9iYV9wcm9KYWhyOiAwLjAwNQp9OwpmdW5jdGlvbiBlaW5rb21tZW5zdGV1ZXI4KHp2RSkgewogIHZhciBnZmIgPSBTVEVVRVI4LmdydW5kZnJlaWJldHJhZzsKICBpZiAoenZFIDw9IGdmYikgcmV0dXJuIDA7CiAgaWYgKHp2RSA8PSBTVEVVRVI4LnoyX2JpcykgeyB2YXIgeSA9ICh6dkUgLSBnZmIpIC8gMTAwMDA7IHJldHVybiAoU1RFVUVSOC56Ml9hICogeSArIFNURVVFUjguejJfYikgKiB5OyB9CiAgaWYgKHp2RSA8PSBTVEVVRVI4LnozX2JpcykgeyB2YXIgeiA9ICh6dkUgLSBTVEVVRVI4LnoyX2JpcykgLyAxMDAwMDsgcmV0dXJuIChTVEVVRVI4LnozX2EgKiB6ICsgU1RFVUVSOC56M19iKSAqIHogKyBTVEVVRVI4LnozX2M7IH0KICBpZiAoenZFIDw9IFNURVVFUjguejRfYmlzKSByZXR1cm4gU1RFVUVSOC56NF9zYXR6ICogenZFIC0gU1RFVUVSOC56NF9hYnp1ZzsKICByZXR1cm4gU1RFVUVSOC56NV9zYXR6ICogenZFIC0gU1RFVUVSOC56NV9hYnp1ZzsKfQpmdW5jdGlvbiBiZXN0ZXVlcnVuZ3NhbnRlaWw4KHJlbnRlbmphaHIpIHsKICByZXR1cm4gTWF0aC5taW4oMSwgU1RFVUVSOC5yZW50ZV9iYV9iYXNpc3dlcnQgKyBNYXRoLm1heCgwLCByZW50ZW5qYWhyIC0gU1RFVUVSOC5yZW50ZV9iYV9iYXNpc2phaHIpICogU1RFVUVSOC5yZW50ZV9iYV9wcm9KYWhyKTsKfQovLyBUYXJpZiBpbmtsLiBFaGVnYXR0ZW5zcGxpdHRpbmc6IFN0ZXVlciA9IDIgw5cgVGFyaWYoenZFIMO3IDIpCmZ1bmN0aW9uIHRhcmlmOCh6dkUpIHsgdmFyIHogPSBNYXRoLm1heCgwLCB6dkUpOyByZXR1cm4gc3BsaXR0aW5nQWt0aXY4ID8gMiAqIGVpbmtvbW1lbnN0ZXVlcjgoeiAvIDIpIDogZWlua29tbWVuc3RldWVyOCh6KTsgfQoKZnVuY3Rpb24gdG9nZ2xlQkFWKCkgewogIGJhdk9mZmVuID0gIWJhdk9mZmVuOwogIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmF2Qm9keScpOwogIGNvbnN0IHRyYWNrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhdlRyYWNrJyk7CiAgY29uc3Qga25vYiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYXZLbm9iJyk7CgogIGJlcmVjaG5lKCk7Cn0KbGV0IHdlaXRlcmVPZmZlbiA9IGZhbHNlOwpsZXQgYWJ6dWVnZU9mZmVuID0gZmFsc2U7CnZhciBoYXRCZXJlY2huZXQ4ID0gZmFsc2U7ICAgLy8gdHJ1ZSBhYiBkZW0gZXJzdGVuIGV4cGxpeml0ZW4g4oCeSmV0enQgYmVyZWNobmVuIiAoV2l6YXJkLUZsb3cpCgovLyDilIDilIAgVXRpbHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIGZtdCh2KSB7IHJldHVybiBNYXRoLnJvdW5kKHYpLnRvTG9jYWxlU3RyaW5nKCdkZS1ERScpICsgJyDigqwnOyB9CmZ1bmN0aW9uIGZtdE0odikgeyByZXR1cm4gTWF0aC5yb3VuZCh2KS50b0xvY2FsZVN0cmluZygnZGUtREUnKSArICcg4oKsL01vLic7IH0KCmZ1bmN0aW9uIHVwZGF0ZVNsaWRlcihpZCwgb3V0SWQsIHN1ZmZpeCkgewogIGNvbnN0IHYgPSBwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS52YWx1ZSk7CiAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvdXRJZCk7CiAgaWYgKHN1ZmZpeCA9PT0gJyUnKSBlbC50ZXh0Q29udGVudCA9IHYudG9GaXhlZCgxKS5yZXBsYWNlKCcuJywgJywnKSArICclJzsKICBlbHNlIGVsLnRleHRDb250ZW50ID0gdiArICcgJyArIHN1ZmZpeDsKfQoKZnVuY3Rpb24gdG9nZ2xlQ29sbGFwc2libGUoaWQpIHsKICBjb25zdCBib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQgKyAnQm9keScpOwogIGNvbnN0IGhlYWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkICsgJ0hlYWRlcicpOwogIGNvbnN0IGlzT3BlbiA9IGJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdvcGVuJyk7CiAgYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdvcGVuJywgIWlzT3Blbik7CiAgaGVhZGVyLmNsYXNzTGlzdC50b2dnbGUoJ29wZW4nLCAhaXNPcGVuKTsKCiAgLy8gVG9nZ2xlIHN3aXRjaCBzdHlsZSAoYWJ6dWVnZSB1c2VzIHRyYWNrL2tub2IpCiAgY29uc3QgdHJhY2sgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCArICdUcmFjaycpOwogIGNvbnN0IGtub2IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCArICdLbm9iJyk7CiAgaWYgKHRyYWNrICYmIGtub2IpIHsKICAgIHRyYWNrLnN0eWxlLmJhY2tncm91bmQgPSAhaXNPcGVuID8gJyNFODMyN0EnIDogJ3ZhcigtLWNvbG9yLWJvcmRlci1zZWNvbmRhcnkpJzsKICAgIGtub2Iuc3R5bGUudHJhbnNmb3JtID0gIWlzT3BlbiA\/ICd0cmFuc2xhdGVYKDIwcHgpJyA6ICdub25lJzsKICB9IGVsc2UgewogICAgY29uc3QgY2hldnJvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkICsgJ0NoZXZyb24nKTsKICAgIGlmIChjaGV2cm9uKSBjaGV2cm9uLmNsYXNzTGlzdC50b2dnbGUoJ29wZW4nLCAhaXNPcGVuKTsKICB9CgogIGlmIChpZCA9PT0gJ3dlaXRlcmUnKSB3ZWl0ZXJlT2ZmZW4gPSAhaXNPcGVuOwogIGlmIChpZCA9PT0gJ2FienVlZ2UnKSBhYnp1ZWdlT2ZmZW4gPSAhaXNPcGVuOwp9CgovLyDilIDilIAgS2lyY2hlbnN0ZXVlciAob3B0aW9uYWwpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiBzZXRLaVN0OCh2YWwpIHsKICBraVN0U2F0ejggPSB2YWwgPT09ICc4JyA\/IDAuMDggOiB2YWwgPT09ICc5JyA\/IDAuMDkgOiAwOwogIFsna2VpbmUnLCc4JywnOSddLmZvckVhY2goZnVuY3Rpb24odil7CiAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna2lzdDhfJyArIHYpOyBpZiAoZWwpIGVsLmNsYXNzTGlzdC50b2dnbGUoJ2FjdGl2ZScsIHYgPT09IHZhbCk7CiAgfSk7CiAgdmFyIHJvdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhel9raXN0X3JvdycpOyBpZiAocm93KSByb3cuc3R5bGUuZGlzcGxheSA9IHZhbCA9PT0gJ2tlaW5lJyA\/ICdub25lJyA6ICdmbGV4JzsKICBiZXJlY2huZSgpOwp9CgovLyDilIDilIAgUGZsZWdlLVp1c2NobGFnIGZ1ZXIgS2luZGVybG9zZSAoRS0wNTIpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBLaW5kZXJsb3NlIHphaGxlbiBhYiAyMyBkYXVlcmhhZnQgMCw2IFB1bmt0ZSBtZWhyICgzLDYgLT4gNCwyICUpLiBEZXIgU2F0eiB3aXJkIGRpcmVrdCBpbgovLyBTT1o4LnB2U2F0eiBnZXNjaHJpZWJlbiwgd2VpbCBkYXJhdXMgcHZHZXMsIHB2QmF2IFVORCBkYXMgTGFiZWwgZGVyIEFienVnc3plaWxlIGxlc2VuLgovLyBWb3JiZWxlZ3VuZyB0cnVlID0gMyw2ICU6IG9obmUgS2xpY2sgYmxlaWJ0IGRhcyBFcmdlYm5pcyBleGFrdCB3aWUgYmlzaGVyLgp2YXIgaGF0S2luZGVyUFY4ID0gdHJ1ZTsKZnVuY3Rpb24gc2V0S2luZGVyUFY4KHdlcnQpIHsKICBoYXRLaW5kZXJQVjggPSAod2VydCAhPT0gJ25laW4nKTsKICBTT1o4LnB2U2F0eiA9IGhhdEtpbmRlclBWOCA\/IDAuMDM2IDogMC4wNDI7CiAgWydqYScsJ25laW4nXS5mb3JFYWNoKGZ1bmN0aW9uKHYpewogICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BmbGs4XycgKyB2KTsgaWYgKGVsKSBlbC5jbGFzc0xpc3QudG9nZ2xlKCdhY3RpdmUnLCAodiA9PT0gJ2phJykgPT09IGhhdEtpbmRlclBWOCk7CiAgfSk7CiAgYmVyZWNobmUoKTsKfQoKLy8g4pSA4pSAIEVoZWdhdHRlbnNwbGl0dGluZy1TdGV1ZXJ1bmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHRvZ2dsZVNwbGl0dGluZzgoY2IpIHsKICBzcGxpdHRpbmdBa3RpdjggPSBjYi5jaGVja2VkOwogIHZhciBwdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXJ0bmVyLXdyYXA4Jyk7IGlmIChwdykgcHcuc3R5bGUuZGlzcGxheSA9IGNiLmNoZWNrZWQgPyAnYmxvY2snIDogJ25vbmUnOwogIGxlc2VQYXJ0bmVyOCgpOwp9CmZ1bmN0aW9uIHNldFBhcnRuZXJUeXA4KHQpIHsKICBwYXJ0bmVyVHlwOCA9IHQ7CiAgdmFyIHByID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B0LXJlbnRlOCcpLCBwaiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwdC1qb2I4Jyk7CiAgaWYgKHByKSBwci5jbGFzc0xpc3QudG9nZ2xlKCdzZWwnLCB0ID09PSAncmVudGUnKTsKICBpZiAocGopIHBqLmNsYXNzTGlzdC50b2dnbGUoJ3NlbCcsIHQgPT09ICdqb2InKTsKICB2YXIgbGFiID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcnRuZXItbGFiZWw4Jyk7IGlmIChsYWIpIGxhYi50ZXh0Q29udGVudCA9IHQgPT09ICdyZW50ZScgPyAnUmVudGUgZGVzIFBhcnRuZXJzJyA6ICdCcnV0dG8tSmFocmVzZWlua29tbWVuIGRlcyBQYXJ0bmVycyc7CiAgdmFyIHN1ZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXJ0bmVyLXN1ZmZpeDgnKTsgaWYgKHN1Zikgc3VmLnRleHRDb250ZW50ID0gdCA9PT0gJ3JlbnRlJyA\/ICfigqwvTW8uJyA6ICfigqwvSmFocic7CiAgbGVzZVBhcnRuZXI4KCk7Cn0KZnVuY3Rpb24gbGVzZVBhcnRuZXI4KCkgewogIHZhciBwRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFydG5lci1yZW50ZTgnKTsKICB2YXIgcCA9IHBFbCA\/IHBhcnNlRmxvYXQoKHBFbC52YWx1ZSB8fCAnJykucmVwbGFjZSgvW14wLTldL2csICcnKSkgOiAwOwogIHBhcnRuZXJXZXJ0OCA9IChpc05hTihwKSB8fCBwIDwgMCkgPyAwIDogcDsKICBiZXJlY2huZSgpOwp9CgovLyDilIDilIAgUmVnZWxyZW50ZW5hbHRlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gcmVnZWxyZW50ZW5hbHRlcihhbHRlcikgewogIC8vIFJlZ2VsYWx0ZXJzZ3JlbnplIG5hY2ggR2VidXJ0c2phaHIgKMKnMjM1IFNHQiBWSSksIEdlYnVydHNqYWhyIGF1cyBBbHRlciBnZW7DpGhlcnQKICB2YXIgZ2ogPSAobmV3IERhdGUoKS5nZXRGdWxsWWVhcigpKSAtIGFsdGVyOwogIGlmIChnaiA+PSAxOTY0KSByZXR1cm4gNjc7CiAgaWYgKGdqIDw9IDE5NDYpIHJldHVybiA2NTsKICBpZiAoZ2ogPj0gMTk1OSkgcmV0dXJuIDY2ICsgKGdqIC0gMTk1OCkgKiAyIC8gMTI7ICAgLy8gMTk1OSAtPiA2NisyTSAuLi4gMTk2MyAtPiA2NisxME0KICByZXR1cm4gNjUgKyAoZ2ogLSAxOTQ2KSAvIDEyOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE5NDcgLT4gNjUrMU0gLi4uIDE5NTggLT4gNjYKfQoKLy8g4pSA4pSAIEhhdXB0YmVyZWNobnVuZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gUmVudGVud2VydCB1bmQgRHVyY2hzY2huaXR0c2VudGdlbHQgMjAyNgpjb25zdCBSRU5URU5XRVJUID0gNDIuNTI7IC8vIFN0YW5kIEp1bGkgMjAyNiAoKzQsMjQgJSkKY29uc3QgRFVSQ0hTQ0hOSVRUU0VOVEdFTFQgPSA1MTk0NDsgLy8gMjAyNiAodm9ybMOkdWZpZykKCmZ1bmN0aW9uIHN5bmNSZW50ZW5GZWxkZXIoKSB7CiAgY29uc3QgYnJ1dHRvID0gcGFyc2VJbnQoKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdicnV0dG8nKS52YWx1ZSB8fCAnJykucmVwbGFjZSgvW14wLTldL2csICcnKSkgfHwgMDsKICBjb25zdCBoaW53ZWlzRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVudGVIaW53ZWlzJyk7CgogIGlmIChvcHRNb2RlID09PSAncmcnKSB7CiAgICBjb25zdCByZW50ZVJhdyA9IHBhcnNlSW50KChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVudGUnKS52YWx1ZSB8fCAnJykucmVwbGFjZSgvW14wLTldL2csICcnKSkgfHwgMDsKICAgIGNvbnN0IHJlbnRlRGlyID0gcmVudGVSYXc7IC8vIOKCrC9Nby4gZGlyZWt0CiAgICBpZiAocmVudGVEaXIgPiAwICYmIGJydXR0byA+IDApIHsKICAgICAgY29uc3QgYWx0ZXIgPSBwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWx0ZXInKS52YWx1ZSkgfHwgMDsKICAgICAgY29uc3QgcmEgPSBwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmEnKS52YWx1ZSkgfHwgNjc7CiAgICAgIGNvbnN0IHJlc3RKYWhyZSA9IE1hdGgubWF4KDAsIHJhIC0gYWx0ZXIpOwogICAgICBoaW53ZWlzRWwudGV4dENvbnRlbnQgPSBgVm9yYXVzc2ljaHRsaWNoZSBBbHRlcnNyZW50ZSBsYXV0IERSVi1CcmllZjogJHtNYXRoLnJvdW5kKHJlbnRlRGlyKX0g4oKsL01vLiAoYmVyZWl0cyBob2NoZ2VyZWNobmV0IOKAkyBrZWluZSB3ZWl0ZXJlIEFucGFzc3VuZyBuw7Z0aWcpLmA7CiAgICAgIGhpbndlaXNFbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgIH0gZWxzZSBpZiAocmVudGVEaXIgPiAwKSB7CiAgICAgIGhpbndlaXNFbC50ZXh0Q29udGVudCA9IGBSZWdlbGFsdGVyc3JlbnRlIGF1cyBEUlYtQnJpZWY6ICR7TWF0aC5yb3VuZChyZW50ZURpcil9IOKCrC9Nby5gOwogICAgICBoaW53ZWlzRWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICB9IGVsc2UgeyBoaW53ZWlzRWwuc3R5bGUuZGlzcGxheSA9ICdub25lJzsgfQogIH0gZWxzZSBpZiAob3B0TW9kZSA9PT0gJ3JwJykgewogICAgY29uc3QgcHVua3RlID0gcGFyc2VGbG9hdCgoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlbnRlbnB1bmt0ZScpLnZhbHVlIHx8ICcnKS5yZXBsYWNlKCcsJywgJy4nKSkgfHwgMDsKICAgIGlmIChwdW5rdGUgPiAwKSB7CiAgICAgIGNvbnN0IGdlc2NoID0gTWF0aC5yb3VuZChwdW5rdGUgKiBSRU5URU5XRVJUKTsKICAgICAgaGlud2Vpc0VsLnRleHRDb250ZW50ID0gYCR7cHVua3RlfSBSZW50ZW5wdW5rdGUgw5cgJHtSRU5URU5XRVJUfSDigqwgPSAke2dlc2NofSDigqwvTW8uIChiaXNoZXJpZ2UgUHVua3RlKWA7CiAgICAgIGhpbndlaXNFbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgIH0gZWxzZSB7IGhpbndlaXNFbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyB9CiAgfSBlbHNlIHsKICAgIGNvbnN0IGJqID0gTWF0aC5taW4ocGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JlaXRyYWdzamFocmUnKS52YWx1ZSkgfHwgNDAsIDUwKTsKICAgIGlmIChicnV0dG8gPiAwKSB7CiAgICAgIGNvbnN0IGVwSmFociA9IE1hdGgubWluKGJydXR0bywgMTAxNDAwKSAvIERVUkNIU0NITklUVFNFTlRHRUxUOwogICAgICBjb25zdCBlcEdlc2FtdCA9IGVwSmFociAqIGJqOwogICAgICBjb25zdCBnZXNjaCA9IE1hdGgucm91bmQoZXBHZXNhbXQgKiBSRU5URU5XRVJUKTsKICAgICAgaGlud2Vpc0VsLnRleHRDb250ZW50ID0gYEdlc2Now6R0enRlIFJlbnRlOiAke2dlc2NofSDigqwvTW8uICgke2VwR2VzYW10LnRvRml4ZWQoMSl9IFJlbnRlbnB1bmt0ZSDDlyAke1JFTlRFTldFUlR9IOKCrClgOwogICAgICBoaW53ZWlzRWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICB9IGVsc2UgeyBoaW53ZWlzRWwuc3R5bGUuZGlzcGxheSA9ICdub25lJzsgfQogIH0KICBiZXJlY2huZSgpOwp9CgovLyBSZXR1cm5zIHsgYmFzaXMsIHNraXBBbnBhc3N1bmcgfQovLyBiYXNpczogUmVudGUgaW4gaGV1dGlnZW4g4oKsL01vLiAodm9yIEFiLS9adXNjaGxhZyB1bmQgQW5wYXNzdW5nKQovLyBza2lwQW5wYXNzdW5nOiB0cnVlIHdlbm4gRFJWLUJyaWVmIGJlcmVpdHMgSG9jaHJlY2hudW5nIGVudGjDpGx0CmZ1bmN0aW9uIGdldFJlbnRlT2JqKCkgewogIGNvbnN0IGJydXR0byA9IHBhcnNlSW50KChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnJ1dHRvJykudmFsdWUgfHwgJycpLnJlcGxhY2UoL1teMC05XS9nLCAnJykpIHx8IDA7CiAgY29uc3QgYWx0ZXIgPSBwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWx0ZXInKS52YWx1ZSkgfHwgMDsKICBjb25zdCByYSA9IHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYScpLnZhbHVlKSB8fCA2NzsKICBjb25zdCByZXN0SmFocmUgPSBNYXRoLm1heCgwLCByYSAtIGFsdGVyKTsKCiAgaWYgKG9wdE1vZGUgPT09ICdyZycpIHsKICAgIC8vIERSVi1CcmllZjogdm9yYXVzc2ljaHRsaWNoZSBSZW50ZSBiZWkgUmVudGVuZWludHJpdHQKICAgIC8vIOKGkiBiZXJlaXRzIGhvY2hnZXJlY2huZXQsIFJlbnRlbmFucGFzc3VuZyBOSUNIVCBub2NobWFscyBhbndlbmRlbgogICAgY29uc3QgcmVudGVSYXcgPSBwYXJzZUludCgoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlbnRlJykudmFsdWUgfHwgJycpLnJlcGxhY2UoL1teMC05XS9nLCAnJykpIHx8IDA7CiAgICBjb25zdCByZW50ZURpciA9IHJlbnRlUmF3OyAvLyBpbW1lciDigqwvTW8uCiAgICAvLyBWYXJpYW50ZSBCOiBCcmllZndlcnQgPSBiZXJlaXRzIGhvY2hnZXJlY2huZXRlIHZvcmF1c3NpY2h0bGljaGUgQWx0ZXJzcmVudGUKICAgIC8vIOKGkiBrZWluIG5vY2htYWxpZ2VzIEF1ZmFkZGllcmVuIHp1a8O8bmZ0aWdlciBFUCAodmVybWVpZGV0IERvcHBlbHrDpGhsdW5nKQogICAgcmV0dXJuIHsgYmFzaXM6IHJlbnRlRGlyLCBza2lwQW5wYXNzdW5nOiB0cnVlIH07CgogIH0gZWxzZSBpZiAob3B0TW9kZSA9PT0gJ3JwJykgewogICAgLy8gQmlzaGVyaWdlIFJlbnRlbnB1bmt0ZSDDlyBha3R1ZWxsZXIgUmVudGVud2VydCArIHp1a8O8bmZ0aWdlIEVQIGF1cyBCcnV0dG8KICAgIGNvbnN0IHB1bmt0ZSA9IHBhcnNlRmxvYXQoKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZW50ZW5wdW5rdGUnKS52YWx1ZSB8fCAnJykucmVwbGFjZSgnLCcsICcuJykpIHx8IDA7CiAgICAvLyAiMCIgb2RlciBaYWhsIGVpbmdlZ2ViZW4g4oaSIGVjaHRlcyBFcmdlYm5pcyAoaW5rbC4gWnVrdW5mdHNwdW5rdGUgYXVzIEJydXR0byk7IG51ciBMRUVSRVMgRmVsZCA9IFBmbGljaHRmZWxkIOKGkiBrZWluIEVyZ2VibmlzCiAgICBjb25zdCBycExlZXIgPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlbnRlbnB1bmt0ZScpLnZhbHVlIHx8ICcnKS50cmltKCkgPT09ICcnOwogICAgaWYgKCFycExlZXIpIHsKICAgICAgY29uc3QgZXBadWt1bmZ0ID0gYnJ1dHRvID4gMCAmJiBhbHRlciA+IDAgPyAoTWF0aC5taW4oYnJ1dHRvLCAxMDE0MDApIC8gRFVSQ0hTQ0hOSVRUU0VOVEdFTFQpICogcmVzdEphaHJlIDogMDsKICAgICAgcmV0dXJuIHsgYmFzaXM6IChwdW5rdGUgKyBlcFp1a3VuZnQpICogUkVOVEVOV0VSVCwgc2tpcEFucGFzc3VuZzogZmFsc2UgfTsKICAgIH0KICAgIHJldHVybiB7IGJhc2lzOiAwLCBza2lwQW5wYXNzdW5nOiBmYWxzZSB9OyAvLyBQZmxpY2h0ZmVsZCBsZWVyIOKGkiBrZWluIHN0aWxsZXIgQnJ1dHRvLUZhbGxiYWNrCgogIH0gZWxzZSB7CiAgICAvLyBCZWl0cmFnc2phaHJlOiBCcnV0dG8gw5cgRVAgw5cgUmVudGVud2VydAogICAgY29uc3QgYmogPSBNYXRoLm1pbihwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmVpdHJhZ3NqYWhyZScpLnZhbHVlKSB8fCA0MCwgNTApOwogICAgY29uc3QgYnJ1dHRvR2VrYXBwdCA9IE1hdGgubWluKGJydXR0bywgMTAxNDAwKTsKICAgIHJldHVybiB7IGJhc2lzOiBicnV0dG8gPiAwID8gKGJydXR0b0dla2FwcHQgLyBEVVJDSFNDSE5JVFRTRU5UR0VMVCkgKiBiaiAqIFJFTlRFTldFUlQgOiAwLCBza2lwQW5wYXNzdW5nOiBmYWxzZSB9OwogIH0KfQoKZnVuY3Rpb24gZ2V0UmVudGUoKSB7CiAgcmV0dXJuIGdldFJlbnRlT2JqKCkuYmFzaXM7Cn0KCi8vIOKUgOKUgCBBbHRlcnNtZWxkdW5nIHVuZCByb3RlciBSYWhtZW4gemVudHJhbCBzY2hhbHRlbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gV2lyZCBhdXMgZGVtIFdpemFyZCAoU2Nocml0dCAxKSB1bmQgYXVzIGJlcmVjaG5lKCkgYmVudXR6dCwgZGFtaXQgZGllIE1lbGR1bmcKLy8gYW4gYmVpZGVuIFN0ZWxsZW4gZ2xlaWNoIHJlYWdpZXJ0LgpmdW5jdGlvbiB6ZWlnZUFsdGVyTWVsZHVuZzgob2spIHsKICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWx0ZXInKTsKICB2YXIgZSAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWx0ZXJFcnInKTsKICBpZiAoZSkgZS5zdHlsZS5kaXNwbGF5ID0gb2sgPyAnbm9uZScgOiAnYmxvY2snOwogIGlmIChlbCkgZWwuY2xhc3NMaXN0LnRvZ2dsZSgnZXJyb3InLCAhb2spOwp9CgpmdW5jdGlvbiBiZXJlY2huZSgpIHsKICBjb25zdCByZW50ZSA9IGdldFJlbnRlKCk7CiAgY29uc3QgYWx0ZXIgPSBwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWx0ZXInKS52YWx1ZSk7CiAgY29uc3QgcmEgICAgPSBwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmEnKS52YWx1ZSk7CgogIC8vIEFsdGVyc21lbGR1bmc6IHZlcnNjaHdpbmRldCwgc29iYWxkIGRlciBXZXJ0IGd1ZWx0aWcgaXN0LiBOYWNoIGRlciBlcnN0ZW4KICAvLyBCZXJlY2hudW5nIGVyc2NoZWludCBzaWUgYXVjaCBpbSBrb21wYWt0ZW4gWnVzdGFuZCwgc3RhdHQgZGFzIEVyZ2VibmlzCiAgLy8ga29tbWVudGFybG9zIGF1c3p1YmxlbmRlbi4KICB2YXIgYWx0ZXJPazggPSAhKCFhbHRlciB8fCBhbHRlciA8IDE2IHx8IGFsdGVyID4gNjkpOwogIGlmIChhbHRlck9rOCB8fCBoYXRCZXJlY2huZXQ4KSB6ZWlnZUFsdGVyTWVsZHVuZzgoYWx0ZXJPazgpOwoKICAvLyBWYWxpZGF0aW9uCiAgaWYgKCFyZW50ZSB8fCByZW50ZSA8PSAwIHx8ICFhbHRlciB8fCBhbHRlciA8IDE2IHx8IGFsdGVyID4gNjkpIHsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQxJykuY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7CiAgICBpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmF2SGVhZGVyJykpIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYXZIZWFkZXInKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgaWYgKGhhdEJlcmVjaG5ldDgpIHsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N0YVNlY3Rpb24nKS5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTsgfSBlbHNlIHsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N0YVNlY3Rpb24nKS5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTsgfQogICAgcmV0dXJuOwogIH0KCiAgaWYgKHJhIDw9IGFsdGVyKSB7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0MScpLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpOwogICAgcmV0dXJuOwogIH0KCiAgY29uc3QgYW5wYXNzdW5nID0gcGFyc2VGbG9hdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYW5wYXNzdW5nJykudmFsdWUpIC8gMTAwOwogIGNvbnN0IGluZmxhdGlvbiA9IHBhcnNlRmxvYXQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luZmxhdGlvbicpLnZhbHVlKSAvIDEwMDsKICBjb25zdCBqYWhyZSAgICAgPSByYSAtIGFsdGVyOwogIGNvbnN0IGJhdkhldXRlICA9IHBhcnNlSW50KChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmF2SW5wdXQnKS52YWx1ZSB8fCAnJykucmVwbGFjZSgvW14wLTldL2csICcnKSkgfHwgMDsKICBjb25zdCByZW50ZU9iaiAgPSBnZXRSZW50ZU9iaigpOwoKICAvLyBTY2hyaXR0IDE6IEFiLS9adXNjaGxhZwogIGNvbnN0IHJyYSAgICAgICAgID0gcmVnZWxyZW50ZW5hbHRlcihhbHRlcik7CiAgY29uc3QgbW9uYXRlRGlmZiAgPSAocmEgLSBycmEpICogMTI7CiAgbGV0IGZha3RvciA9IDEuMDsKICBsZXQgaGlud2Vpc1R5cCA9ICcnOwogIGxldCBoaW53ZWlzVGV4dCA9ICcnOwoKICBpZiAobW9uYXRlRGlmZiA8IDApIHsKICAgIGNvbnN0IGFic2NobGFnID0gTWF0aC5hYnMobW9uYXRlRGlmZikgKiAwLjAwMzsKICAgIGZha3RvciA9IDEgLSBhYnNjaGxhZzsKICAgIGhpbndlaXNUeXAgPSAnYWJzY2hsYWcnOwogICAgaGlud2Vpc1RleHQgPSBgRnLDvGhyZW50ZW5hYnNjaGxhZzogJHsoYWJzY2hsYWcgKiAxMDApLnRvRml4ZWQoMSkucmVwbGFjZSgnLicsICcsJyl9JSAoJHtNYXRoLnJvdW5kKE1hdGguYWJzKG1vbmF0ZURpZmYpKX0gTW9uYXRlIGZyw7xoZXIgw5cgMCwzJSlgOwogIH0gZWxzZSBpZiAobW9uYXRlRGlmZiA+IDApIHsKICAgIGNvbnN0IHp1c2NobGFnID0gbW9uYXRlRGlmZiAqIDAuMDA1OwogICAgZmFrdG9yID0gMSArIHp1c2NobGFnOwogICAgaGlud2Vpc1R5cCA9ICd6dXNjaGxhZyc7CiAgICBoaW53ZWlzVGV4dCA9IGBTcMOkdHJlbnRlbi1adXNjaGxhZzogKyR7KHp1c2NobGFnICogMTAwKS50b0ZpeGVkKDEpLnJlcGxhY2UoJy4nLCAnLCcpfSUgKCR7TWF0aC5yb3VuZChtb25hdGVEaWZmKX0gTW9uYXRlIHNww6R0ZXIgw5cgMCw1JSlgOwogIH0KCiAgLy8gU2Nocml0dCAyOiBIb2NocmVjaG51bmcg4oCTIERSVi1CcmllZiBiZXJlaXRzIGhvY2hnZXJlY2huZXQsIEFucGFzc3VuZyDDvGJlcnNwcmluZ2VuCiAgY29uc3QgcmVudGVCZXJlaW5pZ3QgPSByZW50ZSAqIGZha3RvcjsKICBjb25zdCByZW50ZU5vbWluYWwgICA9IHJlbnRlT2JqLnNraXBBbnBhc3N1bmcgPyByZW50ZUJlcmVpbmlndCA6IHJlbnRlQmVyZWluaWd0ICogTWF0aC5wb3coMSArIGFucGFzc3VuZywgamFocmUpOwogIC8vIGJBViBob2NocmVjaG5lbgogIGNvbnN0IGJhdk5vbWluYWw4ID0gYmF2SGV1dGUgKiBNYXRoLnBvdygxICsgMC4wMSwgamFocmUpOwogIGNvbnN0IGdlc2FtdE5vbWluYWwgPSByZW50ZU5vbWluYWwgKyBiYXZOb21pbmFsODsKICAvLyBLYXVma3JhZnQgJiBWZXJsdXN0IGF1ZiBkaWUgR2VzYW10cmVudGUgKGlua2wuIGJBVikgYmV6aWVoZW4g4oCTIGtvbnNpc3RlbnQgbWl0IHIxbm9taW5hbAogIGNvbnN0IGthdWZrcmFmdEdlc2FtdCA9IGdlc2FtdE5vbWluYWwgLyBNYXRoLnBvdygxICsgaW5mbGF0aW9uLCBqYWhyZSk7CiAgLy8gQmV0cmllYnNyZW50ZSBzZXBhcmF0IGF1c3dlaXNlbiwgc3RhdHQgc2llIHN0aWxsIGluIGRpZSBnZXNldHpsaWNoZSBSZW50ZSB6dSBmYWx0ZW4KICBjb25zdCBiYXZDYXJkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhdlJlc3VsdENhcmQnKTsKICBpZiAoYmF2Q2FyZCkgewogICAgaWYgKGJhdkhldXRlID4gMCkgewogICAgICBjb25zdCByMWJhdkVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3IxYmF2Jyk7CiAgICAgIGlmIChyMWJhdkVsKSByMWJhdkVsLnRleHRDb250ZW50ID0gZm10TShiYXZOb21pbmFsOCk7CiAgICAgIGJhdkNhcmQuc3R5bGUuZGlzcGxheSA9ICcnOwogICAgfSBlbHNlIHsgYmF2Q2FyZC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyB9CiAgfQoKICAvLyBFcmdlYm5pcyAxIGFuemVpZ2VuIOKAkyBhYmVyIGVyc3QgbmFjaCBleHBsaXppdGVtIOKAnkpldHp0IGJlcmVjaG5lbiIgKFdpemFyZC1GbG93KQogIGlmIChoYXRCZXJlY2huZXQ4KSB7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0MScpLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N0YVNlY3Rpb24nKS5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTsKICB9CiAgc2V0UHJvZFRhYignZm9lcmQnKTsKICByZW5kZXJSS1RhYnMoYWN0aXZlUkspOwogIHJlbmRlclByb2R1Y3RzUGFnZShhY3RpdmVSSyk7CgogIC8vIEFiLS9adXNjaGxhZyBIaW53ZWlzCiAgY29uc3QgYWJ6dXNjaGxhZ0JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhYnp1c2NobGFnQm94Jyk7CiAgaWYgKGhpbndlaXNUeXApIHsKICAgIGFienVzY2hsYWdCb3guaW5uZXJIVE1MID0gYAogICAgICA8ZGl2IGNsYXNzPSJhYnp1c2NobGFnLWJveCAke2hpbndlaXNUeXAgPT09ICdhYnNjaGxhZycgPyAnYWJzY2hsYWcnIDogJ3p1c2NobGFnJ30iIHN0eWxlPSJtYXJnaW4tYm90dG9tOjE2cHg7Ij4KICAgICAgICAke2hpbndlaXNUeXAgPT09ICdhYnNjaGxhZycgPyAn4pqg77iPJyA6ICfinJMnfSAke2hpbndlaXNUZXh0fQogICAgICA8L2Rpdj5gOwogIH0gZWxzZSB7CiAgICBhYnp1c2NobGFnQm94LmlubmVySFRNTCA9ICcnOwogIH0KCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3IxYmVyZWluaWd0JykudGV4dENvbnRlbnQgID0gZm10TShyZW50ZUJlcmVpbmlndCk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Ixbm9taW5hbCcpLnRleHRDb250ZW50ICAgID0gZm10TShnZXNhbXROb21pbmFsKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncjFrYXVma3JhZnQnKS50ZXh0Q29udGVudCAgPSBmbXRNKGthdWZrcmFmdEdlc2FtdCk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3IxdmVybHVzdCcpLnRleHRDb250ZW50ICAgID0gJ+KAkycgKyBmbXRNKGdlc2FtdE5vbWluYWwgLSBrYXVma3JhZnRHZXNhbXQpOwoKICAvLyBXZWl0ZXJlIEVpbm5haG1lbgogIGNvbnN0IGJhdiA9IDA7CiAgY29uc3QgcHJpdmF0ID0gMDsKICBjb25zdCBzb25zdGlnZSA9IDA7CgogIGNvbnN0IGJhdk5vbWluYWwgICAgICA9IGJhdiAgICAgKiBNYXRoLnBvdygxICsgMC4wMSwgamFocmUpOwogIGNvbnN0IHByaXZhdE5vbWluYWwgICA9IHByaXZhdCAgKiBNYXRoLnBvdygxICsgMC4wMDI1LCBqYWhyZSk7CiAgY29uc3Qgc29uc3RpZ2VOb21pbmFsID0gc29uc3RpZ2UgKiBNYXRoLnBvdygxICsgaW5mbGF0aW9uLCBqYWhyZSk7CgogIGNvbnN0IGdlc2FtdEhldXRlVG90YWwgID0gcmVudGUgKyBiYXYgKyBwcml2YXQgKyBzb25zdGlnZTsKICBjb25zdCBnZXNhbXRCcnV0dG9Ob21pbmFsID0gcmVudGVOb21pbmFsICsgYmF2Tm9taW5hbCArIHByaXZhdE5vbWluYWwgKyBzb25zdGlnZU5vbWluYWw7CiAgY29uc3Qga2F1ZmtyYWZ0R2VzYW10QnJ1dHRvID0gZ2VzYW10QnJ1dHRvTm9taW5hbCAvIE1hdGgucG93KDEgKyBpbmZsYXRpb24sIGphaHJlKTsKCiAgLy8gVmVyZ2xlaWNoc3RhYmVsbGUgYmVmw7xsbGVuCiAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0X2dlc2V0el9oZXV0ZScpKSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndF9nZXNldHpfaGV1dGUnKS50ZXh0Q29udGVudCA9IGZtdE0ocmVudGUpOwogIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndF9nZXNldHpfcmVudGUnKSkgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RfZ2VzZXR6X3JlbnRlJykudGV4dENvbnRlbnQgPSBmbXRNKHJlbnRlTm9taW5hbCk7CiAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0X2Jhdl9oZXV0ZScpKSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndF9iYXZfaGV1dGUnKS50ZXh0Q29udGVudCA9IGZtdE0oYmF2KTsKICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RfYmF2X3JlbnRlJykpIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0X2Jhdl9yZW50ZScpLnRleHRDb250ZW50ID0gZm10TShiYXZOb21pbmFsKTsKICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RfcHJpdmF0X2hldXRlJykpIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0X3ByaXZhdF9oZXV0ZScpLnRleHRDb250ZW50ID0gZm10TShwcml2YXQpOwogIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndF9wcml2YXRfcmVudGUnKSkgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RfcHJpdmF0X3JlbnRlJykudGV4dENvbnRlbnQgPSBmbXRNKHByaXZhdE5vbWluYWwpOwogIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndF9zb25zdGlnZV9oZXV0ZScpKSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndF9zb25zdGlnZV9oZXV0ZScpLnRleHRDb250ZW50ID0gZm10TShzb25zdGlnZSk7CiAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0X3NvbnN0aWdlX3JlbnRlJykpIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0X3NvbnN0aWdlX3JlbnRlJykudGV4dENvbnRlbnQgPSBmbXRNKHNvbnN0aWdlTm9taW5hbCk7CiAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0X2dlc2FtdF9oZXV0ZScpKSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndF9nZXNhbXRfaGV1dGUnKS50ZXh0Q29udGVudCA9IGZtdE0oZ2VzYW10SGV1dGVUb3RhbCk7CiAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0X2dlc2FtdF9yZW50ZScpKSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndF9nZXNhbXRfcmVudGUnKS50ZXh0Q29udGVudCA9IGZtdE0oZ2VzYW10QnJ1dHRvTm9taW5hbCk7CiAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdra19icnV0dG8nKSkgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2trX2JydXR0bycpLnRleHRDb250ZW50ID0gZm10TShnZXNhbXRCcnV0dG9Ob21pbmFsKTsKICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2trX3JlYWwnKSkgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2trX3JlYWwnKS50ZXh0Q29udGVudCA9IGZtdE0oa2F1ZmtyYWZ0R2VzYW10QnJ1dHRvKTsKCiAgLy8gSGludHMgYW5wYXNzZW4KICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hpbnRXZWl0ZXJlRWlubmFobWVuJykpIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoaW50V2VpdGVyZUVpbm5haG1lbicpLnN0eWxlLmRpc3BsYXkgPSB3ZWl0ZXJlT2ZmZW4gPyAnbm9uZScgOiAnYmxvY2snOwogIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGludEFienVlZ2UnKSkgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hpbnRBYnp1ZWdlJykuc3R5bGUuZGlzcGxheSA9IGFienVlZ2VPZmZlbiA\/ICdub25lJyA6ICdibG9jayc7CgogIC8vIEFiesO8Z2U6IHNob3cvaGlkZSByZXN1bHQzIChudXIgbmFjaCDigJ5CZXJlY2huZW4iIHVuZCB3ZW5uIE5ldHRvLVRvZ2dsZSBhbikKICBjb25zdCByMyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQzJyk7CiAgaWYgKHIzKSByMy5zdHlsZS5kaXNwbGF5ID0gKGhhdEJlcmVjaG5ldDggJiYgYWJ6dWVnZU9mZmVuKSA\/ICdibG9jaycgOiAnbm9uZSc7CgogIC8vIOKUgOKUgCBOZXR0b3JlbnRlOiBuYWNoZ2VsYWdlcnRlIEJlc3RldWVydW5nICsgRWhlZ2F0dGVuc3BsaXR0aW5nIChTY2hlbWEgd2llIFRvb2wgMS4zKSDilIDilIAKICBpZiAoYWJ6dWVnZU9mZmVuKSB7CiAgICBjb25zdCBhYnp1Z3NCYXNpcyA9IGdlc2FtdE5vbWluYWw7ICAgICAgICAgICAgICAgICAvLyBCcnV0dG8tTW9uYXRzcmVudGUgKGdlc2V0emxpY2ggKyBiQVYpCgogICAgLy8gQmVzdGV1ZXJ1bmdzYW50ZWlsIGplIG5hY2ggUmVudGVuYmVnaW5uLUphaHIgKMKnMjIgTnIuMSBFU3RHKQogICAgY29uc3QgY3VycmVudFllYXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7CiAgICBjb25zdCByZW50ZW5CZWdpbm5KYWhyID0gY3VycmVudFllYXIgKyBqYWhyZTsKICAgIGNvbnN0IGJhID0gYmVzdGV1ZXJ1bmdzYW50ZWlsOChyZW50ZW5CZWdpbm5KYWhyKTsKCiAgICAvLyBTdGV1ZXJwZmxpY2h0aWdlcyBKYWhyZXNlaW5rb21tZW46IGdlc2V0emxpY2hlIFJlbnRlIG51ciBtaXQgQmVzdGV1ZXJ1bmdzYW50ZWlsLCBiQVYgdm9sbAogICAgY29uc3QgZWlnZW5TdGV1ZXJwZmxpY2h0aWdKYWhyID0gcmVudGVOb21pbmFsICogMTIgKiBiYSArIGJhdk5vbWluYWw4ICogMTI7CiAgICBjb25zdCBwYXVzY2ggPSBTVEVVRVI4LndlcmJ1bmdza29zdGVuICsgU1RFVUVSOC5zb25kZXJhdXNnYWJlbjsKICAgIGNvbnN0IGVpZ2VuWnZFID0gTWF0aC5tYXgoMCwgZWlnZW5TdGV1ZXJwZmxpY2h0aWdKYWhyIC0gcGF1c2NoKTsKCiAgICAvLyBQYXJ0bmVyLUVpbmtvbW1lbiAobnVyIGJlaSBFaGVnYXR0ZW5zcGxpdHRpbmcgcmVsZXZhbnQpCiAgICBsZXQgYW5kZXJlSmFociA9IDA7CiAgICBpZiAoc3BsaXR0aW5nQWt0aXY4KSB7CiAgICAgIGFuZGVyZUphaHIgPSAocGFydG5lclR5cDggPT09ICdyZW50ZScpID8gcGFydG5lcldlcnQ4ICogMTIgKiBiYSA6IHBhcnRuZXJXZXJ0ODsgLy8gSm9iLUZlbGQgPSDigqwvSmFocgogICAgfQoKICAgIC8vIE1hcmdpbmFsZSBTdGV1ZXIgYXVmIGRpZSBSZW50ZSAoaW5rbC4gU3BsaXR0aW5nIMO8YmVyIHRhcmlmOCkKICAgIGNvbnN0IGVzdEphaHIgID0gTWF0aC5tYXgoMCwgdGFyaWY4KGFuZGVyZUphaHIgKyBlaWdlblp2RSkgLSB0YXJpZjgoYW5kZXJlSmFocikpOwogICAgY29uc3QgZXN0TW9uYXQgPSBlc3RKYWhyIC8gMTI7CgogICAgLy8g4pSA4pSAIEtyYW5rZW4tICYgUGZsZWdldmVyc2ljaGVydW5nIChTdGFuZGFyZHPDpHR6ZSwgS1ZkUiB2ZXJlaW5mYWNodCkg4pSA4pSACiAgICBjb25zdCB6dXNhdHogPSAocGFyc2VGbG9hdCgoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2t2LXp1c2F0ejgnKSB8fCB7fSkudmFsdWUpIHx8IDApIC8gMTAwOwogICAgLy8gZ2VzZXR6bGljaGUgUmVudGU6IGhhbGJlciBLVi1TYXR6ICsgaGFsYmVyIFp1c2F0emJlaXRyYWcsIFBmbGVnZSB2b2xsCiAgICBjb25zdCBrdkdlcyA9IHJlbnRlTm9taW5hbCAqIChTT1o4Lmt2SGFsYiArIHp1c2F0eiAvIDIpOwogICAgY29uc3QgcHZHZXMgPSByZW50ZU5vbWluYWwgKiBTT1o4LnB2U2F0ejsKICAgIC8vIEJldHJpZWJzcmVudGUgKFZlcnNvcmd1bmdzYmV6dWcpOiB2b2xsZXIgS1YtU2F0eiArIHZvbGxlciBadXNhdHpiZWl0cmFnIG9iZXJoYWxiIEZyZWliZXRyYWcsIFBmbGVnZSB2b2xsCiAgICBjb25zdCBiYXZLdkJhc2lzID0gTWF0aC5tYXgoMCwgYmF2Tm9taW5hbDggLSBTT1o4LmJhdkZyZWliZXRyYWcpOwogICAgY29uc3Qga3ZCYXYgPSBiYXZLdkJhc2lzICogKFNPWjgua3ZWb2xsICsgenVzYXR6KTsKICAgIC8vIFBmbGVnZSBhdWYgZGllIEJldHJpZWJzcmVudGU6IEZyZWlncmVuemUsIGtlaW4gRnJlaWJldHJhZyAoRS0wNTMpIC0gYmlzIHp1bSBHcmVuendlcnQgYmVpdHJhZ3NmcmVpLAogICAgLy8gZGFydWViZXIgYXVmIGRlbiB2b2xsZW4gQmV0cmFnLiBHbGVpY2hlciBXZXJ0IHdpZSBkZXIgS1YtRnJlaWJldHJhZywgZGVyIG51ciBpbiBkZXIgS1YgYWJnZXpvZ2VuIHdpcmQuCiAgICBjb25zdCBwdkJhdiA9IChiYXZOb21pbmFsOCA+IFNPWjguYmF2RnJlaWJldHJhZyA\/IGJhdk5vbWluYWw4IDogMCkgKiBTT1o4LnB2U2F0ejsKICAgIGNvbnN0IGt2QWJ6dWcgPSBrdkdlcyArIGt2QmF2OwogICAgY29uc3QgcHZBYnp1ZyA9IHB2R2VzICsgcHZCYXY7CgogICAgLy8gS2lyY2hlbnN0ZXVlciAob3B0aW9uYWwpIGF1ZiBkaWUgRWlua29tbWVuc3RldWVyCiAgICBjb25zdCBraVN0QWJ6dWcgPSBlc3RNb25hdCAqIGtpU3RTYXR6ODsKCiAgICBjb25zdCBnZXNBYnp1ZyA9IGVzdE1vbmF0ICsga3ZBYnp1ZyArIHB2QWJ6dWcgKyBraVN0QWJ6dWc7CiAgICBjb25zdCBuZXR0byA9IGFienVnc0Jhc2lzIC0gZ2VzQWJ6dWc7CiAgICBjb25zdCBrYXVma3JhZnROZXR0byA9IG5ldHRvIC8gTWF0aC5wb3coMSArIGluZmxhdGlvbiwgamFocmUpOwoKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhel9icnV0dG8nKS50ZXh0Q29udGVudCAgICA9IGZtdE0oYWJ6dWdzQmFzaXMpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F6X2t2X2xhYmVsJykudGV4dENvbnRlbnQgID0gYEtyYW5rZW52ZXJzaWNoZXJ1bmcgKOKJiCAkeygoU09aOC5rdkhhbGIgKyB6dXNhdHogLyAyKSAqIDEwMCkudG9GaXhlZCgxKS5yZXBsYWNlKCcuJywgJywnKX0gJSlgOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F6X2t2JykudGV4dENvbnRlbnQgICAgICAgID0gJ+KAkycgKyBmbXRNKGt2QWJ6dWcpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F6X3B2X2xhYmVsJykudGV4dENvbnRlbnQgID0gYFBmbGVnZXZlcnNpY2hlcnVuZyAoJHsoU09aOC5wdlNhdHogKiAxMDApLnRvRml4ZWQoMSkucmVwbGFjZSgnLicsICcsJyl9ICUpYDsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhel9wdicpLnRleHRDb250ZW50ICAgICAgICA9ICfigJMnICsgZm10TShwdkFienVnKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhel9lc3RfbGFiZWwnKS50ZXh0Q29udGVudCA9IGBFaW5rb21tZW5zdGV1ZXIgKCR7KGJhICogMTAwKS50b0ZpeGVkKDApfSAlIEJlc3RldWVydW5nc2FudGVpbCR7c3BsaXR0aW5nQWt0aXY4ID8gJywgU3BsaXR0aW5nJyA6ICcnfSlgOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F6X2VzdCcpLnRleHRDb250ZW50ICAgICAgID0gJ+KAkycgKyBmbXRNKGVzdE1vbmF0KTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhel9raXN0X2xhYmVsJykudGV4dENvbnRlbnQgPSBgS2lyY2hlbnN0ZXVlciAoJHsoa2lTdFNhdHo4ICogMTAwKS50b0ZpeGVkKDApfSAlKWA7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXpfa2lzdCcpLnRleHRDb250ZW50ICAgICAgPSAn4oCTJyArIGZtdE0oa2lTdEFienVnKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhel9nZXNhbXQnKS50ZXh0Q29udGVudCAgICA9ICfigJMnICsgZm10TShnZXNBYnp1Zyk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXpfbmV0dG8nKS50ZXh0Q29udGVudCAgICAgPSBmbXRNKG5ldHRvKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdra19uZXR0bycpLnRleHRDb250ZW50ICAgICA9IGZtdE0obmV0dG8pOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2trX25ldHRvX3JlYWwnKS50ZXh0Q29udGVudCA9IGZtdE0oa2F1ZmtyYWZ0TmV0dG8pOwogICAgY29uc3QgbmV0dG9WZXJsdXN0ID0gbmV0dG8gLSBrYXVma3JhZnROZXR0bzsKICAgIGNvbnN0IHZlcmx1c3RFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduZXR0b1Zlcmx1c3RWYWwnKTsKICAgIGlmICh2ZXJsdXN0RWwpIHZlcmx1c3RFbC50ZXh0Q29udGVudCA9IGZtdE0obmV0dG9WZXJsdXN0KTsKICAgIGNvbnN0IHZlcmx1c3RCb3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmV0dG9WZXJsdXN0Qm94Jyk7CiAgICBpZiAodmVybHVzdEJveCkgdmVybHVzdEJveC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnOwogIH0KfQoKLy8gSW5pdAp1cGRhdGVTbGlkZXIoJ3JhJywncmFWYWwnLCdKLicpOwp1cGRhdGVTbGlkZXIoJ2FucGFzc3VuZycsJ2FucGFzc3VuZ1ZhbCcsJyUnKTsKc2V0UHJvZFRhYignZm9lcmQnKTsKcmVuZGVyUktUYWJzKGFjdGl2ZVJLKTsKcmVuZGVyUHJvZHVjdHNQYWdlKGFjdGl2ZVJLKTsKCi8vIFJlbnRlbnB1bmt0ZTogZGVjaW1hbCB3aXRoIGNvbW1hLCBtYXggMiBwbGFjZXMKY29uc3QgcnBFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZW50ZW5wdW5rdGUnKTsKaWYgKHJwRWwpIHsKICBycEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24oKSB7CiAgICBsZXQgdiA9IHRoaXMudmFsdWUucmVwbGFjZSgvXC4vZywgJywnKS5yZXBsYWNlKC9bXjAtOSxdL2csICcnKTsKICAgIGNvbnN0IHBhcnRzID0gdi5zcGxpdCgnLCcpOwogICAgaWYgKHBhcnRzLmxlbmd0aCA+IDIpIHYgPSBwYXJ0c1swXSArICcsJyArIHBhcnRzLnNsaWNlKDEpLmpvaW4oJycpOwogICAgaWYgKHBhcnRzWzFdICYmIHBhcnRzWzFdLmxlbmd0aCA+IDIpIHYgPSBwYXJ0c1swXSArICcsJyArIHBhcnRzWzFdLnNsaWNlKDAsMik7CiAgICB0aGlzLnZhbHVlID0gdjsKICAgIHN5bmNSZW50ZW5GZWxkZXIoKTsKICB9KTsKfQoKZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhdklucHV0JykuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbigpIHsKICBsZXQgcmF3ID0gdGhpcy52YWx1ZS5yZXBsYWNlKC9bXjAtOV0vZywgJycpOwogIHRoaXMudmFsdWUgPSByYXcgPyBwYXJzZUludChyYXcpLnRvTG9jYWxlU3RyaW5nKCdkZS1ERScpIDogJyc7CiAgYmVyZWNobmUoKTsKfSk7CgpbJ2JydXR0bycsJ3JlbnRlJ10uZm9yRWFjaChmdW5jdGlvbihpZCkgewogIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwogIGlmICghZWwpIHJldHVybjsKICBlbC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uKCkgewogICAgbGV0IHJhdyA9IHRoaXMudmFsdWUucmVwbGFjZSgvW14wLTldL2csICcnKTsKICAgIGlmIChyYXcpIHsKICAgICAgdGhpcy52YWx1ZSA9IHBhcnNlSW50KHJhdykudG9Mb2NhbGVTdHJpbmcoJ2RlLURFJyk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLnZhbHVlID0gJyc7CiAgICB9CiAgICBzeW5jUmVudGVuRmVsZGVyKCk7CiAgfSk7Cn0pOwoKLy8g4pSA4pSAIEluZmxhdGlvbjogZmVzdGVyIFRvZ2dsZSAoMiAlIHAuIGEuKSBzdGF0dCBTbGlkZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHRvZ2dsZUluZmxhdGlvbjgoY2IpIHsKICB2YXIgaW5mID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luZmxhdGlvbicpOwogIGlmIChpbmYpIGluZi52YWx1ZSA9IGNiLmNoZWNrZWQgPyAnMicgOiAnMCc7ICAgLy8gYW4gPSAyICUgS2F1ZmtyYWZ0YWJ6dWcgwrcgYXVzID0gMCAlCiAgYmVyZWNobmUoKTsKfQoKLy8g4pSA4pSAIE5ldHRvLS9BYnrDvGdlLVBhbmVsIChzZXBhcmF0ZXIgQmxvY2sgbmFjaCBkZW0gV2l6YXJkKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdG9nZ2xlTmV0dG84KGNiKSB7CiAgYWJ6dWVnZU9mZmVuID0gY2IuY2hlY2tlZDsKICB2YXIgYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhYnp1ZWdlQm9keTInKTsKICBpZiAoYm9keSkgYm9keS5zdHlsZS5kaXNwbGF5ID0gY2IuY2hlY2tlZCA\/ICdibG9jaycgOiAnbm9uZSc7CiAgYmVyZWNobmUoKTsKfQoKLy8g4pSA4pSAIOKAnkpldHp0IGJlcmVjaG5lbiIgKFdpemFyZC1BYnNjaGx1c3Mgb2RlciBkaXJla3RlciBCdXR0b24pIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiBzdGFydEJlcmVjaG51bmc4KCkgewogIGhhdEJlcmVjaG5ldDggPSB0cnVlOwogIHZhciB3eiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3aXonKTsgaWYgKHd6KSB3ei5jbGFzc0xpc3QuYWRkKCdjb21wYWN0Jyk7CiAgYmVyZWNobmUoKTsKICAvLyA4LjM6IFZvcm1lcmstS2FzdGVuIGJlaW0gZXJzdGVuIEJlcmVjaG5lbiBhbiBPcmlnaW5hbHBvc2l0aW9uIHZlcnNjaGllYmVuCiAgdmFyIGN0YVNsb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3RhLXNsb3QnKTsKICB2YXIgY3RhS2FzdGVuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N0YS1rYXN0ZW4nKTsKICBpZiAoY3RhU2xvdCAmJiBjdGFLYXN0ZW4gJiYgY3RhS2FzdGVuLnBhcmVudE5vZGUgIT09IGN0YVNsb3QpIHsKICAgIGN0YVNsb3QuYXBwZW5kQ2hpbGQoY3RhS2FzdGVuKTsgdmFyIF9jczggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3RhU2VjdGlvbicpOyBpZiAoX2NzOCkgX2NzOC5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTsKICB9CiAgdmFyIHIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0MScpOwogIGlmIChyICYmICFyLmNsYXNzTGlzdC5jb250YWlucygnaGlkZGVuJykpIHIuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnc3RhcnQnIH0pOwp9CgovLyDilIDilIAgSW50ZXJha3RpdmVyIEVpbmdhYmUtV2l6YXJkIChUb29sIDEuMy1TeXN0ZW0pIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAooZnVuY3Rpb24gKCkgewogIHZhciBXSVpfVE9UQUwgPSA0LCBzdGVwID0gMTsKICBmdW5jdGlvbiAkKGlkKSB7IHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7IH0KCiAgZnVuY3Rpb24gc2hvdyhuKSB7CiAgICBzdGVwID0gTWF0aC5tYXgoMSwgTWF0aC5taW4oV0laX1RPVEFMLCBuKSk7CiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcud2l6LXN0ZXAnKS5mb3JFYWNoKGZ1bmN0aW9uIChzKSB7CiAgICAgIHMuY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJywgcGFyc2VJbnQocy5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3RlcCcpLCAxMCkgPT09IHN0ZXApOwogICAgfSk7CiAgICB2YXIgYmFyID0gJCgnd2l6LWJhcicpOyBpZiAoYmFyKSBiYXIuc3R5bGUud2lkdGggPSAoc3RlcCAvIFdJWl9UT1RBTCAqIDEwMCkgKyAnJSc7CiAgICB2YXIgbnVtID0gJCgnd2l6LXN0ZXBudW0nKTsgaWYgKG51bSkgbnVtLnRleHRDb250ZW50ID0gJ1NjaHJpdHQgJyArIHN0ZXA7CiAgICB2YXIgYmFjayA9ICQoJ3dpei1iYWNrJyk7IGlmIChiYWNrKSBiYWNrLnN0eWxlLnZpc2liaWxpdHkgPSBzdGVwID09PSAxID8gJ2hpZGRlbicgOiAndmlzaWJsZSc7CiAgICB2YXIgbmV4dCA9ICQoJ3dpei1uZXh0Jyk7IGlmIChuZXh0KSBuZXh0LnRleHRDb250ZW50ID0gc3RlcCA9PT0gV0laX1RPVEFMID8gJ0VyZ2VibmlzIGJlcmVjaG5lbiDihpInIDogJ1dlaXRlciDihpInOwogIH0KCiAgZnVuY3Rpb24gdmFsaWRTdGVwMSgpIHsKICAgIHZhciBlbCA9ICQoJ2FsdGVyJyk7IGlmICghZWwpIHJldHVybiB0cnVlOwogICAgdmFyIHYgPSBwYXJzZUludChlbC52YWx1ZSwgMTApOwogICAgdmFyIG9rID0gIShpc05hTih2KSB8fCB2IDwgMTYgfHwgdiA+IDY5KTsKICAgIHplaWdlQWx0ZXJNZWxkdW5nOChvayk7CiAgICByZXR1cm4gb2s7CiAgfQoKICBmdW5jdGlvbiBnb05leHQoKSB7CiAgICBpZiAoc3RlcCA9PT0gMSAmJiAhdmFsaWRTdGVwMSgpKSByZXR1cm47CiAgICBpZiAoc3RlcCA8IFdJWl9UT1RBTCkgeyBzaG93KHN0ZXAgKyAxKTsgcmV0dXJuOyB9CiAgICBpZiAodHlwZW9mIHN0YXJ0QmVyZWNobnVuZzggPT09ICdmdW5jdGlvbicpIHN0YXJ0QmVyZWNobnVuZzgoKTsKICB9CiAgZnVuY3Rpb24gZ29QcmV2KCkgeyBzaG93KHN0ZXAgLSAxKTsgfQoKICBmdW5jdGlvbiBzZWxlY3RUaWxlKHRpbGUpIHsKICAgIHZhciBib3ggPSB0aWxlLmNsb3Nlc3QoJy53aXotdGlsZXMnKTsKICAgIGlmIChib3gpIGJveC5xdWVyeVNlbGVjdG9yQWxsKCcud2l6LXRpbGUnKS5mb3JFYWNoKGZ1bmN0aW9uICh0KSB7IHQuY2xhc3NMaXN0LnJlbW92ZSgnc2VsJyk7IH0pOwogICAgdGlsZS5jbGFzc0xpc3QuYWRkKCdzZWwnKTsKICB9CgogIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHsKICAgIGlmICghZS50YXJnZXQuY2xvc2VzdCkgcmV0dXJuOwogICAgaWYgKGUudGFyZ2V0LmNsb3Nlc3QoJyN3aXotbmV4dCcpKSB7IGdvTmV4dCgpOyByZXR1cm47IH0KICAgIGlmIChlLnRhcmdldC5jbG9zZXN0KCcjd2l6LWJhY2snKSkgeyBnb1ByZXYoKTsgcmV0dXJuOyB9CiAgICB2YXIgdGlsZSA9IGUudGFyZ2V0LmNsb3Nlc3QoJy53aXotdGlsZScpOyBpZiAoIXRpbGUpIHJldHVybjsKICAgIHZhciBraW5kID0gdGlsZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtd2l6Jyk7CiAgICB2YXIgdmFsICA9IHRpbGUuZ2V0QXR0cmlidXRlKCdkYXRhLXZhbCcpOwogICAgc2VsZWN0VGlsZSh0aWxlKTsKICAgIGlmIChraW5kID09PSAnYnJ1dHRvJykgewogICAgICB2YXIgYiA9ICQoJ2JydXR0bycpOyBpZiAoYikgYi52YWx1ZSA9IHBhcnNlSW50KHZhbCwgMTApLnRvTG9jYWxlU3RyaW5nKCdkZS1ERScpOwogICAgICBpZiAodHlwZW9mIHN5bmNSZW50ZW5GZWxkZXIgPT09ICdmdW5jdGlvbicpIHN5bmNSZW50ZW5GZWxkZXIoKTsKICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gJ2JhdicpIHsKICAgICAgdmFyIGJveCA9ICQoJ2Jhdi1iZXRyYWcnKTsgaWYgKGJveCkgYm94LnN0eWxlLmRpc3BsYXkgPSAodmFsID09PSAnamEnKSA\/ICdibG9jaycgOiAnbm9uZSc7CiAgICAgIGlmICh2YWwgIT09ICdqYScpIHsgdmFyIGJpID0gJCgnYmF2SW5wdXQnKTsgaWYgKGJpKSBiaS52YWx1ZSA9ICcnOyB9CiAgICAgIGlmICh0eXBlb2YgYmVyZWNobmUgPT09ICdmdW5jdGlvbicpIGJlcmVjaG5lKCk7CiAgICB9CiAgfSk7CgogIC8vIEZyZWllIEJydXR0by1FaW5nYWJlIOKGkiBwYXNzZW5kZSBLYWNoZWwgbWFya2llcmVuIChvZGVyIGFsbGUgYWJ3w6RobGVuKQogIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24gKGUpIHsKICAgIHZhciB0ID0gZS50YXJnZXQ7IGlmICghdCB8fCB0LmlkICE9PSAnYnJ1dHRvJykgcmV0dXJuOwogICAgdmFyIHJhdyA9ICh0LnZhbHVlIHx8ICcnKS5yZXBsYWNlKC9bXjAtOV0vZywgJycpOwogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtd2l6PSJicnV0dG8iXScpLmZvckVhY2goZnVuY3Rpb24gKHRpbGUpIHsKICAgICAgdGlsZS5jbGFzc0xpc3QudG9nZ2xlKCdzZWwnLCB0aWxlLmdldEF0dHJpYnV0ZSgnZGF0YS12YWwnKSA9PT0gcmF3KTsKICAgIH0pOwogIH0pOwoKICBzaG93KDEpOwp9KSgpOwoKOwovKiDilIDilIAgV1AtRXZlbnQtRGVsZWdhdGlvbiAoaW4gZGVuIEJsb2IgaW50ZWdyaWVydCDihpIgYmFzZTY0LWdlc2Now7x0enQsIGRhIFdvcmRQcmVzcyBzdGF0aXNjaGUgSW5saW5lLW9uKi1IYW5kbGVyIHN0cmlwcHQpIOKUgOKUgCAqLwooZnVuY3Rpb24gKCkgewogIGlmICh3aW5kb3cuX19BVkQ4X0RFTEVHX18pIHJldHVybjsKICB3aW5kb3cuX19BVkQ4X0RFTEVHX18gPSB0cnVlOwogIGZ1bmN0aW9uIHJ1bihuYW1lKSB7CiAgICB2YXIgZiA9IHdpbmRvd1tuYW1lXTsKICAgIGlmICh0eXBlb2YgZiAhPT0gImZ1bmN0aW9uIikgcmV0dXJuOwogICAgdHJ5IHsgZi5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTsgfQogICAgY2F0Y2ggKGUpIHsgY29uc29sZS53YXJuKCJbQVZEOF0gIiArIG5hbWUsIGUpOyB9CiAgfQogIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24gKGUpIHsKICAgIGlmICghZS50YXJnZXQuY2xvc2VzdCkgcmV0dXJuOwogICAgdmFyIGN0YSA9IGUudGFyZ2V0LmNsb3Nlc3QoIltkYXRhLXplcm8tY3RhXSIpOwogICAgaWYgKGN0YSkgeyB3aW5kb3cub3BlbihjdGEuZ2V0QXR0cmlidXRlKCJkYXRhLXplcm8tY3RhIiksICJfYmxhbmsiKTsgcmV0dXJuOyB9CiAgICB2YXIgZWwgPSBlLnRhcmdldC5jbG9zZXN0KCJbaWRdIik7CiAgICBpZiAoIWVsKSByZXR1cm47CiAgICB2YXIgaWQgPSBlbC5pZDsKICAgIGlmIChpZCA9PT0gIm9wdEJ0bi1iaiIpICAgeyBydW4oInNldE9wdE1vZGUiLCAiYmoiKTsgcmV0dXJuOyB9CiAgICBpZiAoaWQgPT09ICJvcHRCdG4tcnAiKSAgIHsgcnVuKCJzZXRPcHRNb2RlIiwgInJwIik7IHJldHVybjsgfQogICAgaWYgKGlkID09PSAib3B0QnRuLXJnIikgICB7IHJ1bigic2V0T3B0TW9kZSIsICJyZyIpOyByZXR1cm47IH0KICAgIGlmIChpZCA9PT0gImtpc3Q4X2tlaW5lIikgeyBydW4oInNldEtpU3Q4IiwgImtlaW5lIik7IHJldHVybjsgfQogICAgaWYgKGlkID09PSAia2lzdDhfOCIpICAgICB7IHJ1bigic2V0S2lTdDgiLCAiOCIpOyByZXR1cm47IH0KICAgIGlmIChpZCA9PT0gImtpc3Q4XzkiKSAgICAgeyBydW4oInNldEtpU3Q4IiwgIjkiKTsgcmV0dXJuOyB9CiAgICBpZiAoaWQgPT09ICJwZmxrOF9qYSIpICAgIHsgcnVuKCJzZXRLaW5kZXJQVjgiLCAiamEiKTsgcmV0dXJuOyB9CiAgICBpZiAoaWQgPT09ICJwZmxrOF9uZWluIikgIHsgcnVuKCJzZXRLaW5kZXJQVjgiLCAibmVpbiIpOyByZXR1cm47IH0KICAgIGlmIChpZCA9PT0gInB0LXJlbnRlOCIpICAgeyBydW4oInNldFBhcnRuZXJUeXA4IiwgInJlbnRlIik7IHJldHVybjsgfQogICAgaWYgKGlkID09PSAicHQtam9iOCIpICAgICB7IHJ1bigic2V0UGFydG5lclR5cDgiLCAiam9iIik7IHJldHVybjsgfQogICAgaWYgKGlkID09PSAiYmVyZWNobmVuQnRuIil7IHJ1bigic3RhcnRCZXJlY2hudW5nOCIpOyByZXR1cm47IH0KICB9KTsKICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCBmdW5jdGlvbiAoZSkgewogICAgdmFyIHQgPSBlLnRhcmdldDsgaWYgKCF0IHx8ICF0LmlkKSByZXR1cm47CiAgICBpZiAodC5pZCA9PT0gImluZmxhdGlvbi10b2dnbGUiKSAgIHJ1bigidG9nZ2xlSW5mbGF0aW9uOCIsIHQpOwogICAgZWxzZSBpZiAodC5pZCA9PT0gIm5ldHRvLXRvZ2dsZTgiKSBydW4oInRvZ2dsZU5ldHRvOCIsIHQpOwogICAgZWxzZSBpZiAodC5pZCA9PT0gInNwbGl0LXRvZ2dsZTgiKSBydW4oInRvZ2dsZVNwbGl0dGluZzgiLCB0KTsKICB9KTsKICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsIGZ1bmN0aW9uIChlKSB7CiAgICB2YXIgdCA9IGUudGFyZ2V0OyBpZiAoIXQgfHwgIXQuaWQpIHJldHVybjsKICAgIHN3aXRjaCAodC5pZCkgewogICAgICBjYXNlICJhbHRlciI6CiAgICAgICAgaWYgKFN0cmluZyh0LnZhbHVlKS5pbmRleE9mKCIuIikgIT09IC0xKSB0LnZhbHVlID0gTWF0aC5yb3VuZCh0LnZhbHVlKTsKICAgICAgICBydW4oImJlcmVjaG5lIik7IGJyZWFrOwogICAgICBjYXNlICJyYSI6CiAgICAgICAgcnVuKCJ1cGRhdGVTbGlkZXIiLCAicmEiLCAicmFWYWwiLCAiSi4iKTsgcnVuKCJiZXJlY2huZSIpOyBicmVhazsKICAgICAgY2FzZSAiYmVpdHJhZ3NqYWhyZSI6CiAgICAgICAgaWYgKFN0cmluZyh0LnZhbHVlKS5pbmRleE9mKCIuIikgIT09IC0xKSB0LnZhbHVlID0gTWF0aC5yb3VuZCh0LnZhbHVlKTsKICAgICAgICBydW4oInN5bmNSZW50ZW5GZWxkZXIiKTsgYnJlYWs7CiAgICAgIGNhc2UgImFucGFzc3VuZyI6CiAgICAgICAgcnVuKCJ1cGRhdGVTbGlkZXIiLCAiYW5wYXNzdW5nIiwgImFucGFzc3VuZ1ZhbCIsICIlIik7IHJ1bigiYmVyZWNobmUiKTsgYnJlYWs7CiAgICAgIGNhc2UgImt2LXp1c2F0ejgiOgogICAgICAgIHJ1bigiYmVyZWNobmUiKTsgYnJlYWs7CiAgICAgIGNhc2UgInBhcnRuZXItcmVudGU4IjoKICAgICAgICBydW4oImxlc2VQYXJ0bmVyOCIpOyBicmVhazsKICAgIH0KICB9KTsKICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzdWJtaXQiLCBmdW5jdGlvbiAoZSkgewogICAgaWYgKGUudGFyZ2V0ICYmIGUudGFyZ2V0LmlkID09PSAidm9ybWVya0Zvcm04YSIpIHJ1bigic3VibWl0Vm9ybWVya3VuZzgiLCBlKTsKICB9KTsKfSkoKTsKCi8vIOKUgOKUgCBaYWhsZW5laW5nYWJlbjogQnVjaHN0YWJlbiBibG9ja2VuICsgTGl2ZS1UYXVzZW5kZXJwdW5rdGUgKGRlLURFKSDilIDilIAKKGZ1bmN0aW9uICgpIHsKICB2YXIgTlVNX0ZFTERFUiA9IFsncGFydG5lci1yZW50ZTgnXTsKICBmdW5jdGlvbiBmbXRGZWxkKGVsKSB7CiAgICB2YXIgcmF3ID0gKGVsLnZhbHVlIHx8ICcnKS5yZXBsYWNlKC9bXjAtOV0vZywgJycpOwogICAgdmFyIHR4dCA9IHJhdyA\/IHBhcnNlSW50KHJhdywgMTApLnRvTG9jYWxlU3RyaW5nKCdkZS1ERScpIDogJyc7CiAgICBpZiAoZWwudmFsdWUgIT09IHR4dCkgZWwudmFsdWUgPSB0eHQ7CiAgfQogIGZ1bmN0aW9uIGluaXRGbXQoKSB7CiAgICBOVU1fRkVMREVSLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7CiAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKICAgICAgaWYgKCFlbCkgcmV0dXJuOwogICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uICgpIHsgZm10RmVsZCh0aGlzKTsgfSk7CiAgICAgIGZtdEZlbGQoZWwpOwogICAgfSk7CiAgfQogIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycpIHsgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGluaXRGbXQpOyB9IGVsc2UgeyBpbml0Rm10KCk7IH0KICAvLyBCdWNoc3RhYmVuIGluIGFsbGVuIFphaGxlbmZlbGRlcm4gdmVyaGluZGVybiAoYXVjaCBkeW5hbWlzY2ggZXJ6ZXVndGUgRmVsZGVyKQogIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbiAoZSkgewogICAgdmFyIHQgPSBlLnRhcmdldDsKICAgIGlmICghdCB8fCB0LnRhZ05hbWUgIT09ICdJTlBVVCcpIHJldHVybjsKICAgIHZhciBpbSA9IHQuZ2V0QXR0cmlidXRlKCdpbnB1dG1vZGUnKTsKICAgIGlmICh0LnR5cGUgIT09ICdudW1iZXInICYmIGltICE9PSAnbnVtZXJpYycgJiYgaW0gIT09ICdkZWNpbWFsJykgcmV0dXJuOwogICAgaWYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkgfHwgZS5hbHRLZXkpIHJldHVybjsKICAgIGlmIChlLmtleSAmJiBlLmtleS5sZW5ndGggPT09IDEgJiYgIS9bMC05LixdLy50ZXN0KGUua2V5KSkgZS5wcmV2ZW50RGVmYXVsdCgpOwogIH0pOwp9KSgpOwo=<\/script>\r\n<script>\r\n(function () {\r\n  if (window.__AVD8_LOADED__) return;\r\n  window.__AVD8_LOADED__ = true;\r\n  var raw = document.getElementById(\"avd8-code-b64\");\r\n  if (!raw) { console.error(\"[AVD8] code missing\"); return; }\r\n  var code;\r\n  try { code = decodeURIComponent(escape(atob(raw.textContent.replace(\/\\s\/g, \"\")))); }\r\n  catch (e) { console.error(\"[AVD8] decode\", e); return; }\r\n  var s = document.createElement(\"script\");\r\n  s.textContent = code;\r\n  (document.body || document.documentElement).appendChild(s);\r\n})();\r\n<\/script>\r\n\r\n\r\n<!-- AVD Leerfeld-Guard: leere Pflichtfelder blockieren Berechnung\/Weiter still (keine Warnung); Bereichs-Checks fuer nicht-leere Werte bleiben. WP-safe, idempotent. -->\r\n<style id=\"avd-reqguard-css\">\r\n.avdemb-t83pl .tool-wrapper .avd-reqwarn{display:none;margin-top:4px;font-size:12px;line-height:1.35;color:#b91c1c;max-width:100%;overflow-wrap:break-word;word-break:break-word;}\r\n.avdemb-t83pl .tool-wrapper .avd-reqwarn.avd-show{display:block;}\r\n.avdemb-t83pl .tool-wrapper .avd-field-invalid{border-color:#b91c1c !important;}\r\n<\/style>\r\n<script id=\"avd-reqguard-js\">\r\n(function(){\r\n  if(window.__AVD_REQGUARD__)return; window.__AVD_REQGUARD__=true;\r\n  var REQ=[\"alter\",\"brutto\",\"rentenpunkte\",\"rente\",\"beitragsjahre\"];\r\n  var MSG={\"alter\":\"Bitte dein Alter eingeben\",\"brutto\":\"Bitte dein Bruttoeinkommen eingeben\",\"brutto-jahr\":\"Bitte dein Bruttoeinkommen eingeben\",\"einzahlung\":\"Bitte einen Sparbetrag eingeben\",\"rentenpunkte\":\"Bitte deine Rentenpunkte eingeben\",\"rente\":\"Bitte deine Regelaltersrente eingeben\",\"beitragsjahre\":\"Bitte deine Beitragsjahre eingeben\"};\r\n  var ANCHOR={\"einzahlung\":\"einzahlung-max\"};\r\n  function byId(id){return document.getElementById(id);}\r\n  function isEmpty(el){ if(!el)return false; var v=(el.value==null?\"\":String(el.value)); return v.replace(\/[^0-9]\/g,\"\").length===0; }\r\n  function visible(el){ return !!(el && el.offsetParent!==null); }\r\n  function spanFor(id){\r\n    var sid=\"avd-warn-\"+id; var sp=byId(sid); if(sp)return sp;\r\n    var el=byId(id); if(!el)return null;\r\n    sp=document.createElement(\"span\"); sp.id=sid; sp.className=\"avd-reqwarn\"; sp.setAttribute(\"role\",\"alert\"); sp.textContent=(MSG[id]||\"Bitte dieses Feld ausf\\u00fcllen\");\r\n    var anchor=null;\r\n    if(ANCHOR[id]) anchor=byId(ANCHOR[id]);\r\n    if(!anchor && el.closest) anchor=el.closest(\".input-wrap\");\r\n    if(!anchor) anchor=el.parentElement;\r\n    if(anchor && anchor.parentNode){ anchor.parentNode.insertBefore(sp, anchor.nextSibling); }\r\n    else if(el.parentNode){ el.parentNode.insertBefore(sp, el.nextSibling); }\r\n    return sp;\r\n  }\r\n  function fieldBad(id){ var el=byId(id); return !!(el && visible(el) && isEmpty(el)); }\r\n  function mark(id){ var el=byId(id); if(!el)return; var bad=fieldBad(id); var sp=spanFor(id); el.classList.toggle(\"avd-field-invalid\", bad); if(sp) sp.classList.toggle(\"avd-show\", bad); }\r\n  function anyEmpty(){ for(var i=0;i<REQ.length;i++){ if(fieldBad(REQ[i])) return true; } return false; }\r\n  function flagAll(){ for(var i=0;i<REQ.length;i++) mark(REQ[i]); }\r\n  function wire(){ for(var i=0;i<REQ.length;i++){ (function(id){ var el=byId(id); if(!el)return; var f=function(){ mark(id); }; el.addEventListener(\"input\",f); el.addEventListener(\"blur\",f); })(REQ[i]); } }\r\n  document.addEventListener(\"click\",function(e){\r\n    var t=e.target; if(!t||!t.closest)return;\r\n    if(!t.closest(\".tool-wrapper\"))return;\r\n    if(!t.closest(\"#berechnenBtn,#wiz-next,[onclick*=\\\"wizNext\\\"],[onclick*=\\\"wizGoNext\\\"],[onclick*=\\\"goNext\\\"],[onclick*=\\\"berechne\\\"],[onclick*=\\\"avdStartBerechnung\\\"],[onclick*=\\\"startBerechnung\\\"]\"))return;\r\n    if(anyEmpty()){ flagAll(); e.preventDefault(); e.stopImmediatePropagation(); e.stopPropagation(); }\r\n  },true);\r\n  if(document.readyState===\"loading\") document.addEventListener(\"DOMContentLoaded\", wire); else wire();\r\n})();\r\n<\/script>\r\n\r\n<!-- AVD BFSG-A11y-Modul: Labels(\u2460)+Radiogroups\/Tastatur(\u2461)+Tooltip-Fokus(\u2462)+Chart-Zoom-Dialog(\u2464). WP-safe, .tool-wrapper-scoped, idempotent. -->\r\n<style id=\"avd-a11y-css\">\r\n.avdemb-t83pl .tool-wrapper .tooltip-icon:focus .tooltip-text,\r\n.avdemb-t83pl .tool-wrapper .tooltip-icon:focus-within .tooltip-text,\r\n.avdemb-t83pl .tool-wrapper .tip:focus .tip-text,\r\n.avdemb-t83pl .tool-wrapper .tip:focus-within .tip-text,\r\n.avdemb-t83pl .tool-wrapper .tooltip-wrap:focus-within .tooltip-img{visibility:visible!important;opacity:1!important;}\r\n.avdemb-t83pl .tool-wrapper [data-a11y-focus]:focus-visible,\r\n.avdemb-t83pl .tool-wrapper .avd7-tap-wrap:focus-visible,\r\n.avdemb-t83pl .tool-wrapper .chart-tap-wrapper:focus-visible{outline:3px solid #2691ff!important;outline-offset:2px;border-radius:8px;}\r\n<\/style>\r\n<script id=\"avd-a11y-js\">\r\n(function(){\r\n  if(window.__AVD_A11Y__)return; window.__AVD_A11Y__=true;\r\n  function ready(fn){ if(document.readyState===\"loading\")document.addEventListener(\"DOMContentLoaded\",fn); else fn(); }\r\n  function cssEsc(s){ return (window.CSS&&CSS.escape)?CSS.escape(s):String(s).replace(\/[^a-zA-Z0-9_-]\/g,\"\\\\$&\"); }\r\n  ready(function(){\r\n    var root=document.querySelector(\".tool-wrapper\"); if(!root) return;   \/\/ Nie auf die ganze WP-Seite ausweichen (kein document.body-Fallback)\r\n    var ACCENT=\"rgb(38, 145, 255)\";\r\n\r\n    \/\/ ---------- \u2462 TOOLTIPS: fokussierbar + benannt, Fokus zeigt Inhalt (CSS), Esc schlie\u00dft ----------\r\n    \/\/ Kein role=button (Enter\/Space l\u00f6sen keine Aktion aus, w\u00fcrde SR-Nutzer irref\u00fchren): fokussierbar + aria-label tr\u00e4gt den Hinweis; CSS zeigt bei Fokus.\r\n    root.querySelectorAll(\".tooltip-icon,.tip,.tooltip-wrap\").forEach(function(t){\r\n      if(t.getAttribute(\"tabindex\")===null) t.setAttribute(\"tabindex\",\"0\");\r\n      var rl=t.getAttribute(\"role\"); if(rl===\"img\"||rl===\"button\") t.removeAttribute(\"role\"); \/\/ irref\u00fchrende Rolle f\u00fcr ein fokussierbares Hinweis-Element entfernen\r\n      t.setAttribute(\"data-a11y-focus\",\"\");\r\n      if(!t.getAttribute(\"aria-label\")){\r\n        var tx=t.querySelector(\".tooltip-text,.tip-text,.tooltip-img-text\");\r\n        t.setAttribute(\"aria-label\", tx ? (\"Hinweis: \"+tx.textContent.replace(\/\\s+\/g,\" \").trim().slice(0,200)) : \"Mehr Informationen\");\r\n      }\r\n      t.addEventListener(\"keydown\",function(e){ if(e.key===\"Escape\") t.blur(); });\r\n    });\r\n\r\n    \/\/ ---------- \u2460 LABELS: fehlenden zug\u00e4nglichen Namen aus sichtbarem Label erg\u00e4nzen ----------\r\n    root.querySelectorAll(\"input,select,textarea\").forEach(function(inp){\r\n      if(inp.type===\"hidden\") return;\r\n      if(inp.closest(\"label\")) return;                                                    \/\/ umschlie\u00dfendes <label> liefert bereits den VOLLEN Namen -> nicht mit gek\u00fcrztem aria-label \u00fcberschreiben (z.B. Consent-Checkboxen)\r\n      if(inp.closest('[aria-hidden=\"true\"]') || inp.getAttribute(\"tabindex\")===\"-1\") return; \/\/ versteckte\/Honeypot-Felder nicht benennen\r\n      if(inp.getAttribute(\"aria-label\")||inp.getAttribute(\"aria-labelledby\")) return;\r\n      if(inp.id && root.querySelector('label[for=\"'+cssEsc(inp.id)+'\"]')) return;\r\n      var name=labelFor(inp);\r\n      if(name) inp.setAttribute(\"aria-label\",name);\r\n    });\r\n\r\n    \/\/ ---------- \u2461 AUSWAHL-GRUPPEN: role=radiogroup\/radio, aria-checked, Roving-Tabindex, Pfeiltasten ----------\r\n    \/\/ sel=Initial-\/Backstop-Erkennung; observe=true nur f\u00fcr KLASSEN-basierte Gruppen (sofort & zuverl\u00e4ssig; z.B. Slider \u00e4ndert Kachel).\r\n    \/\/ Modus-Buttons f\u00e4rben ihren Rand VERZ\u00d6GERT (getComputedStyle w\u00e4re racy) -> rein klickgesteuert, kein Observer.\r\n    var DEFS=[\r\n      {q:'[id^=\"optBtn-\"]', sel:function(b){ return getComputedStyle(b).borderTopColor===ACCENT; }, label:\"Rechenmethode\", observe:false},\r\n      {q:\".ra-kachel\",      sel:function(b){ return b.classList.contains(\"ra-sel\"); },              label:\"Auswahl\",        observe:true},\r\n      {q:\".wiz-tile\",       sel:function(b){ return b.classList.contains(\"sel\"); },                 label:\"Auswahl\",        observe:true},\r\n      {q:\".kinder-btn\",     sel:function(b){ return b.classList.contains(\"active\"); },              label:\"Anzahl Kinder\",  observe:true},\r\n      {q:'[id^=\"kBtn\"]',    sel:function(b){ return b.classList.contains(\"kinder-active\"); },       label:\"Anzahl Kinder\",  observe:true}, \/\/ Tool 6.6-Variante der Kinder-Buttons\r\n      {q:\".netto-pt,.netto-pt8,.pt7\", sel:function(b){ return b.classList.contains(\"sel\"); },       label:\"Einkommensart Partner\", observe:true},\r\n      {q:\".toggle-option\", sel:function(b){ return b.classList.contains(\"active\"); },                          label:\"Kirchensteuer\",  observe:true}, \/\/ Tool 5.x Partner-Typ (vorher nicht angesagt)\r\n      {q:\".toggle-btn\",     sel:function(b){ return b.classList.contains(\"active\"); },              label:\"Auswahl\",        observe:true}\r\n    ];\r\n    DEFS.forEach(function(d){\r\n      var all=Array.prototype.slice.call(root.querySelectorAll(d.q));\r\n      if(!all.length) return;\r\n      var groups=[];\r\n      all.forEach(function(b){ var p=b.parentElement; var g=null; for(var i=0;i<groups.length;i++){ if(groups[i].p===p){g=groups[i];break;} } if(!g){g={p:p,m:[]};groups.push(g);} g.m.push(b); });\r\n      groups.forEach(function(g){\r\n        if(g.m.length<2) return;\r\n        var parent=g.p, members=g.m;\r\n        if(parent.getAttribute(\"role\")===\"radiogroup\") return; \/\/ idempotent\r\n        parent.setAttribute(\"role\",\"radiogroup\");\r\n        if(!parent.getAttribute(\"aria-label\")) parent.setAttribute(\"aria-label\",d.label);\r\n        members.forEach(function(b){ b.setAttribute(\"role\",\"radio\"); b.setAttribute(\"data-a11y-focus\",\"\"); });\r\n        function setChecked(idx){ members.forEach(function(b,i){ b.setAttribute(\"aria-checked\", i===idx?\"true\":\"false\"); b.setAttribute(\"tabindex\", i===idx?\"0\":\"-1\"); }); }\r\n        function detect(){ var idx=-1; members.forEach(function(b,i){ try{ if(d.sel(b)) idx=i; }catch(e){} }); return idx; }\r\n        var di=detect(); setChecked(di<0?0:di);\r\n        \/\/ Klick auf ein Mitglied (Maus ODER via Pfeiltaste ausgel\u00f6st) = dieses Mitglied ausgew\u00e4hlt (deterministisch, ohne Tool-State zu lesen)\r\n        members.forEach(function(b,i){ b.addEventListener(\"click\",function(){ setChecked(i); }); if(b.tagName!==\"BUTTON\"){ if(b.tagName!==\"INPUT\"){ b.addEventListener(\"keydown\",function(e){ if(e.key===\"Enter\"||e.key===\" \"){ e.preventDefault(); b.click(); } }); } } });\r\n        \/\/ Backstop nur f\u00fcr Klassen-Gruppen (z.B. Slider \u00e4ndert Auswahl ohne Klick) \u2013 Klasse ist sofort\/zuverl\u00e4ssig lesbar\r\n        if(d.observe){ var mo=new MutationObserver(function(){ var idx=detect(); if(idx>=0) setChecked(idx); }); members.forEach(function(b){ mo.observe(b,{attributes:true,attributeFilter:[\"class\"]}); }); }\r\n        parent.addEventListener(\"keydown\",function(e){\r\n          var i=members.indexOf(document.activeElement); if(i<0) return;\r\n          var n=-1;\r\n          if(e.key===\"ArrowRight\"||e.key===\"ArrowDown\") n=(i+1)%members.length;\r\n          else if(e.key===\"ArrowLeft\"||e.key===\"ArrowUp\") n=(i-1+members.length)%members.length;\r\n          else return;\r\n          e.preventDefault(); members[n].focus(); members[n].click(); \/\/ click -> setChecked(n)\r\n        });\r\n      });\r\n    });\r\n\r\n    \/\/ ---------- \u2464 CHART-ZOOM: Fl\u00e4che als Button + Dialog-Fokusf\u00fchrung ----------\r\n    root.querySelectorAll(\".avd7-tap-wrap,.chart-tap-wrapper\").forEach(function(w){\r\n      if(w.getAttribute(\"tabindex\")===null) w.setAttribute(\"tabindex\",\"0\");\r\n      w.setAttribute(\"role\",\"button\");\r\n      w.setAttribute(\"aria-haspopup\",\"dialog\");\r\n      if(!w.getAttribute(\"aria-label\")) w.setAttribute(\"aria-label\",\"Diagramm vergr\u00f6\u00dfern\");\r\n      w.addEventListener(\"keydown\",function(e){ if(e.key===\"Enter\"||e.key===\" \"){ e.preventDefault(); w.click(); } });\r\n    });\r\n    var lastTrigger=null;\r\n    document.addEventListener(\"click\",function(e){ var t=e.target&&e.target.closest?e.target.closest(\".avd7-tap-wrap,.chart-tap-wrapper\"):null; if(t) lastTrigger=t; },true);\r\n    \/\/ Chart-Vollbild-Overlay liegt AUSSERHALB .tool-wrapper (an <body>) -> document-weit, aber NUR \u00fcber tool-eigene IDs (7.6: #avd7-overlay; 1.8\/1.9\/6.6: #chart-overlay). KEINE generischen .chart-* Klassen (die fremde WP-Seiten-Elemente treffen k\u00f6nnten).\r\n    document.querySelectorAll('#avd7-overlay,.avd7-overlay,#chart-overlay').forEach(setupDialog);\r\n    function setupDialog(ov){\r\n      if(!ov||ov.__a11yDlg) return; ov.__a11yDlg=true;\r\n      ov.setAttribute(\"role\",\"dialog\"); ov.setAttribute(\"aria-modal\",\"true\");\r\n      function foc(){ return Array.prototype.slice.call(ov.querySelectorAll('button,a[href],[tabindex]:not([tabindex=\"-1\"])')).filter(function(el){return el.offsetParent!==null;}); }\r\n      function isOpen(){ return ov.classList.contains(\"open\") || (ov.offsetParent!==null && getComputedStyle(ov).visibility!==\"hidden\" && parseFloat(getComputedStyle(ov).opacity||\"1\")>0.01); }\r\n      var mo=new MutationObserver(function(){\r\n        var o=isOpen();\r\n        if(o&&!ov.__open){ ov.__open=true;\r\n          var c=ov.querySelector('.avd7-close,.chart-close,.chart-overlay-close,[aria-label*=\"chlie\"]')||foc()[0];\r\n          if(c){ [30,160,340].forEach(function(ms){ setTimeout(function(){ if(ov.__open && document.activeElement!==c){ try{c.focus();}catch(e){} } },ms); }); } }\r\n        else if(!o&&ov.__open){ ov.__open=false; if(lastTrigger) setTimeout(function(){try{lastTrigger.focus();}catch(e){}},40); }\r\n      });\r\n      mo.observe(ov,{attributes:true,attributeFilter:[\"class\",\"style\"]});\r\n      ov.addEventListener(\"keydown\",function(e){\r\n        if(e.key===\"Escape\"){ var c=ov.querySelector(\".avd7-close,.chart-close\"); if(c) c.click(); }\r\n        else if(e.key===\"Tab\"){ var f=foc(); if(!f.length) return; var first=f[0],last=f[f.length-1];\r\n          if(e.shiftKey&&document.activeElement===first){ e.preventDefault(); last.focus(); }\r\n          else if(!e.shiftKey&&document.activeElement===last){ e.preventDefault(); first.focus(); } }\r\n      });\r\n    }\r\n\r\n    \/\/ ---------- Helpers ----------\r\n    function labelFor(inp){\r\n      var lab=inp.closest(\"label\"); if(lab) return clean(lab);\r\n      var field=inp.closest(\".field\"); if(field){ var l=field.querySelector(\"label,.wiz-sub\"); if(l) return clean(l); }\r\n      var wrap=inp.closest(\".input-wrap\")||inp; var pv=wrap.previousElementSibling;\r\n      while(pv){ if(\/^(LABEL|DIV|SPAN|P)$\/.test(pv.tagName)){ var c=clean(pv); if(c) return c; } pv=pv.previousElementSibling; }\r\n      var step=inp.closest(\".wiz-step,.fields-row,.field-row\"); if(step){ var s=step.querySelector(\"label,.wiz-sub,.wiz-q\"); if(s) return clean(s); }\r\n      return inp.getAttribute(\"placeholder\")||\"\";\r\n    }\r\n    function clean(el){ var c=el.cloneNode(true); c.querySelectorAll(\".tooltip-icon,.tip,.tooltip-wrap,.tooltip-text,.tip-text\").forEach(function(x){x.remove();}); return c.textContent.replace(\/\\s+\/g,\" \").trim().slice(0,120); }\r\n  });\r\n})();\r\n<\/script>\r\n\r\n<!-- AVD Hinweis-Aufklapp-Modul (avd-hin): \"Hinweise\"-Disclaimerbox als natives Aufklappfeld (details\/summary, kein JS, collapsed by default). WP-safe, .tool-wrapper-scoped, idempotent. -->\r\n<style id=\"avd-hin-css\">\r\n.avdemb-t83pl .tool-wrapper details.avd-hin{display:block;margin:0;padding:0;border:0;background:transparent;}\r\n.avdemb-t83pl .tool-wrapper .avd-hin-sum{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;padding:4px 0;border:0;background:transparent;cursor:pointer;list-style:none;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;scroll-margin-top:64px;}\r\n.avdemb-t83pl .tool-wrapper .avd-hin-sum::-webkit-details-marker{display:none;}\r\n.avdemb-t83pl .tool-wrapper .avd-hin-sum::marker{content:none;}\r\n.avdemb-t83pl .tool-wrapper .avd-hin-sum::before,.avdemb-t83pl .tool-wrapper .avd-hin-sum::after{content:none;}\r\n.avdemb-t83pl .tool-wrapper .avd-hin-sum:focus-visible{outline:3px solid #093967;outline-offset:2px;border-radius:6px;}\r\n.avdemb-t83pl .tool-wrapper .avd-hin-chev{margin-left:auto;color:#093967;font-size:13px;line-height:1;transition:transform .2s ease;}\r\n.avdemb-t83pl .tool-wrapper details.avd-hin[open] .avd-hin-chev{transform:rotate(180deg);}\r\n.avdemb-t83pl .tool-wrapper .avd-hin-hint{display:block;flex-basis:100%;font-size:11px;font-weight:400;color:#4a5563;user-select:text;-webkit-user-select:text;}\r\n@media (prefers-reduced-motion:reduce){.avdemb-t83pl .tool-wrapper .avd-hin-chev{transition:none;}}\r\n\/* Print: zugeklappte Hinweise im Ausdruck vollstaendig ausgeben (Browser mit ::details-content; aeltere drucken nur die Summary-Zeile) *\/\r\n@media print{.avdemb-t83pl .tool-wrapper details.avd-hin::details-content{content-visibility:visible;}}\r\n\/* Gate: Disclaimerbox erst nach Berechnung sichtbar (fail-open in Browsern ohne :has) *\/\r\n.avdemb-t83pl .tool-wrapper:has(#result1.hidden) #disclaimerBox{display:none;}\r\n<\/style>\r\n\r\n<\/div>\r\n\n\n<p>Der Rechner vergleicht zwei Zahlen: was du im Alter voraussichtlich netto bekommst und was du netto brauchst. Die Differenz ist deine Rentenl\u00fccke. Daraus ergibt sich, wie viel Kapital dir zum Rentenbeginn fehlt und welche monatliche Sparrate n\u00f6tig ist, um es aufzubauen. Alle Annahmen stehen weiter unten offen, und die wichtigsten kannst du im Ergebnis selbst ver\u00e4ndern.<\/p>\n<h2>Was der Rechner ausgibt<\/h2>\n<p><strong>Die L\u00fccke auf einen Blick.<\/strong> Deine voraussichtliche Nettorente und deine Wunschrente als Balken nebeneinander, dazu die Differenz in Euro pro Monat.<\/p>\n<p><strong>Die Zusammensetzung.<\/strong> Eine Aufschl\u00fcsselung, woraus dein Alterseinkommen besteht: gesetzliche Rente, Betriebsrente, private Vorsorge, sonstige Eink\u00fcnfte, jeweils brutto und nach Steuern und Sozialabgaben.<\/p>\n<p><strong>Der Kapitalbedarf.<\/strong> Welches Verm\u00f6gen du zum Rentenbeginn brauchst, um die monatliche L\u00fccke \u00fcber die gew\u00e4hlte Auszahlungsdauer zu schlie\u00dfen.<\/p>\n<p><strong>Der Sparratenvergleich.<\/strong> Zwei Wege zum selben Ziel: das Altersvorsorgedepot mit staatlicher F\u00f6rderung, erg\u00e4nzt um ein normales Depot f\u00fcr alles oberhalb der F\u00f6rderh\u00f6chstgrenze, gegen\u00fcber einem reinen ETF-Depot. Weil beide unterschiedlich besteuert werden, unterscheiden sich sowohl das n\u00f6tige Kapital als auch die monatliche Sparrate.<\/p>\n<h2>Welche Angaben du brauchst<\/h2>\n<p>Der Rechner f\u00fchrt dich in sieben Schritten durch die Eingaben. Nichts davon wird gespeichert oder \u00fcbertragen, die Berechnung l\u00e4uft in deinem Browser.<\/p>\n<p><strong>Alter und Renteneintritt.<\/strong> Daraus ergibt sich die Zeit bis zum Rentenbeginn. W\u00e4hlbar ist ein Eintritt zwischen 63 und 70 Jahren.<\/p>\n<p><strong>Deine Wunschrente.<\/strong> Der Betrag, den du im Alter netto zur Verf\u00fcgung haben willst, einschlie\u00dflich Miete, Lebenshaltung und Freizeit. \u00dcber den Schalter am Feld w\u00e4hlst du, ob du in heutiger Kaufkraft denkst \u2014 dann rechnet der Rechner die Inflation selbst dazu \u2014 oder direkt den nominalen Betrag zum Rentenbeginn eingibst. Das ist die wichtigste Eingabe und zugleich die, bei der die meisten raten. Mehr dazu weiter unten.<\/p>\n<p><strong>Dein Bruttojahreseinkommen.<\/strong> Grundlage f\u00fcr die Rentenprognose und f\u00fcr den Steuervorteil in der Einzahlphase. Beitr\u00e4ge fallen nur bis zur Beitragsbemessungsgrenze an, 2026 sind das 101.400 Euro im Jahr.<\/p>\n<p><strong>Familienstand.<\/strong> Bei Zusammenveranlagung wird die Steuer im Alter mit dem Splittingtarif berechnet, also zweimal der Tarif auf das halbe zu versteuernde Einkommen. Das senkt die Steuerlast sp\u00fcrbar. Optional kannst du angeben, was dein Partner an Rente oder Erwerbseinkommen mitbringt.<\/p>\n<p><strong>Deine Ansparphase.<\/strong> Bereits vorhandenes Startkapital und die Zahl der Kinder, denn daraus ergeben sich die Zulagen im Altersvorsorgedepot.<\/p>\n<p><strong>Die Rechenmethode.<\/strong> Drei Wege stehen zur Wahl, dazu gleich mehr.<\/p>\n<p><strong>Weitere Einkommensquellen.<\/strong> Betriebsrente, private Rentenversicherung, Riester oder R\u00fcrup und Sonstiges. Diese Felder sind optional, ver\u00e4ndern das Ergebnis aber erheblich, weil sie unterschiedlich besteuert und verbeitragt werden.<\/p>\n<h2>Drei Wege zur Rentenprognose<\/h2>\n<p>Wie genau das Ergebnis wird, entscheidet sich hier. Die drei Methoden unterscheiden sich nicht in der Rechenlogik, sondern darin, wie belastbar die Ausgangszahl ist.<\/p>\n<p><strong>\u00dcber die Beitragsjahre.<\/strong> Du gibst an, wie viele Jahre du ungef\u00e4hr in die gesetzliche Rentenversicherung einzahlst, inklusive Ausbildung und Kindererziehungszeiten. Der Rechner sch\u00e4tzt daraus deine Entgeltpunkte. Das ist die grobe Orientierung f\u00fcr alle, die keine Unterlagen zur Hand haben.<\/p>\n<p><strong>\u00dcber deine Rentenpunkte.<\/strong> Du \u00fcbertr\u00e4gst die bisher gesammelten Entgeltpunkte aus deiner j\u00e4hrlichen Renteninformation. Deutlich genauer, weil deine tats\u00e4chliche Erwerbsbiografie einflie\u00dft und nicht eine Annahme dar\u00fcber.<\/p>\n<p><strong>\u00dcber den Rentenbescheid.<\/strong> Du nimmst den Rentenbetrag direkt aus der Renteninformation der Deutschen Rentenversicherung. Am genauesten, weil die Beh\u00f6rde bereits alle Zeiten bewertet hat.<\/p>\n<h3>Was ein Rentenpunkt wert ist<\/h3>\n<p>Ein Entgeltpunkt entsteht, wenn dein rentenversicherungspflichtiges Jahreseinkommen genau dem Durchschnittsentgelt aller Versicherten entspricht. 2026 liegt dieses vorl\u00e4ufig bei 51.944 Euro. Wer 60.000 Euro verdient, sammelt in diesem Jahr rund 1,155 Punkte, wer 30.000 Euro verdient, rund 0,58 Punkte.<\/p>\n<p>Seit dem 1. Juli 2026 ist ein Entgeltpunkt 42,52 Euro monatliche Bruttorente wert, nach der Anpassung um 4,24 Prozent von zuvor 40,79 Euro. Der Wert wird jedes Jahr zum 1. Juli an die Lohnentwicklung angepasst und kann nach \u00a7 68a SGB VI nicht sinken.<\/p>\n<p>Nach oben begrenzt die Beitragsbemessungsgrenze von 101.400 Euro den Punkteerwerb. Mehr als rund 1,95 Punkte im Jahr sind 2026 nicht m\u00f6glich. Genau deshalb ist die gesetzliche Rente f\u00fcr Gutverdiener anteilig am wenigsten wert: Vom Einkommen oberhalb der Grenze entsteht kein zus\u00e4tzlicher Anspruch.<\/p>\n<p>Zur Einordnung: Die sogenannte Standardrente unterstellt 45 Jahre mit Durchschnittsverdienst, also 45 Entgeltpunkte. Das ergibt seit Juli 2026 rund 1.913 Euro brutto im Monat. Die tats\u00e4chlich gezahlten Durchschnittsrenten liegen darunter, weil kaum jemand 45 volle Punkte erreicht.<\/p>\n<h2>Was die Rentenl\u00fccke wirklich ist<\/h2>\n<p>Die Rentenl\u00fccke ist die Differenz zwischen dem, was im Alter monatlich auf dem Konto landet, und dem, was du dort brauchst. Zwei Punkte werden dabei regelm\u00e4\u00dfig \u00fcbersehen.<\/p>\n<p><strong>Beide Seiten sind Nettobetr\u00e4ge.<\/strong> Die Bruttorente aus der Renteninformation ist nicht das, was ankommt. Davon gehen Steuern sowie Kranken- und Pflegeversicherungsbeitr\u00e4ge ab. Wer seine Bruttorente mit seinem heutigen Nettobedarf vergleicht, untersch\u00e4tzt die L\u00fccke systematisch.<\/p>\n<p><strong>Die Wunschrente ist keine Formel.<\/strong> H\u00e4ufig liest man die Faustregel, 80 Prozent des letzten Nettoeinkommens seien n\u00f6tig. Das ist ein Ausgangspunkt, kein Ergebnis. Manche Kosten entfallen im Alter, etwa Beitr\u00e4ge zur Renten- und Arbeitslosenversicherung, Fahrten zur Arbeit oder die Unterst\u00fctzung von Kindern. Andere kommen hinzu, vor allem Gesundheit, Pflege und mehr Zeit, die Geld kostet. Wer zur Miete wohnt, braucht im Alter deutlich mehr als jemand mit abbezahlter Immobilie. Die ehrlichste Methode ist, die heutigen Ausgaben eines Monats durchzugehen und Posten f\u00fcr Posten zu fragen, ob sie im Ruhestand wegfallen, bleiben oder steigen.<\/p>\n<h2>Warum von der Bruttorente so wenig \u00fcbrig bleibt<\/h2>\n<p>Der Rechner zieht drei Posten ab, bevor er die L\u00fccke ausweist.<\/p>\n<h3>Kranken- und Pflegeversicherung<\/h3>\n<p>Pflichtversicherte Rentner zahlen auf die gesetzliche Rente 7,3 Prozent Krankenversicherung plus den halben Zusatzbeitrag, die andere H\u00e4lfte tr\u00e4gt die Rentenversicherung. Der durchschnittliche Zusatzbeitrag liegt 2026 bei 2,9 Prozent und l\u00e4sst sich im Rechner an deine Kasse anpassen. Die Pflegeversicherung tr\u00e4gst du allein: 3,6 Prozent mit Kindern, 4,2 Prozent f\u00fcr zuschlagspflichtige Kinderlose.<\/p>\n<p>Auf eine Betriebsrente sieht es anders aus. Dort zahlst du den vollen Krankenkassenbeitrag von 14,6 Prozent plus den vollen Zusatzbeitrag, allerdings erst oberhalb eines Freibetrags von 197,75 Euro im Monat (Stand 2026). Dieser Unterschied ist der Grund, warum eine Betriebsrente netto schlechter abschneidet, als die Bruttozahl vermuten l\u00e4sst.<\/p>\n<p>Private Renten, Riester, R\u00fcrup und sonstige Eink\u00fcnfte bleiben beitragsfrei.<\/p>\n<h3>Steuern<\/h3>\n<p>Von der gesetzlichen Rente ist nicht alles steuerpflichtig. Ma\u00dfgeblich ist der Besteuerungsanteil im Jahr des Rentenbeginns. Wer 2026 erstmals Rente bezieht, versteuert 84 Prozent, bei Rentenbeginn 2027 sind es 84,5 Prozent. Der Anteil steigt seit dem Wachstumschancengesetz um 0,5 Prozentpunkte pro Jahr, erst ab Rentenbeginn 2058 ist die Rente voll steuerpflichtig.<\/p>\n<p>Der steuerfreie Rest wird im ersten vollen Rentenjahr als Eurobetrag festgeschrieben und bleibt lebenslang gleich. Jede sp\u00e4tere Rentenerh\u00f6hung kommt oben drauf und ist zu 100 Prozent steuerpflichtig. Der effektiv steuerfreie Anteil sinkt also mit den Jahren, auch wenn der Prozentsatz beim Rentenbeginn festgelegt wurde.<\/p>\n<p>Betriebsrenten und Leistungen aus Riester-Vertr\u00e4gen sind in voller H\u00f6he steuerpflichtig. Bei privaten Rentenversicherungen wird nur der Ertragsanteil besteuert, dessen H\u00f6he vom Alter bei Rentenbeginn abh\u00e4ngt.<\/p>\n<p>Auf das gesamte zu versteuernde Einkommen wird dann der Einkommensteuertarif angewendet, mit dem Grundfreibetrag von 12.348 Euro im Jahr 2026. Bei Verheirateten mit Zusammenveranlagung greift das Splittingverfahren.<\/p>\n<h3>Inflation<\/h3>\n<p>Zwei Prozent Inflation pro Jahr klingen harmlos. \u00dcber 30 Jahre entwerten sie einen festen Betrag auf gut die H\u00e4lfte seiner heutigen Kaufkraft. Aus 2.000 Euro werden in heutiger Kaufkraft rund 1.100 Euro.<\/p>\n<p>Der Rechner setzt 2 Prozent pro Jahr an. \u00dcber den Schalter im Ergebnis kannst du zus\u00e4tzlich die kaufkraftbereinigten Werte einblenden, also alle Betr\u00e4ge in heutigem Geld. Diese Ansicht ist die ehrlichere, weil sich mit ihr entscheiden l\u00e4sst, ob eine Rente zum Leben reicht. Ein nominaler Betrag von 3.500 Euro in 30 Jahren sagt dar\u00fcber nichts aus.<\/p>\n<h2>Vom Monatsbetrag zum Kapitalbedarf<\/h2>\n<p>Eine L\u00fccke von 500 Euro im Monat ist keine Zahl, mit der sich sparen l\u00e4sst. Der Rechner \u00fcbersetzt sie deshalb in das Kapital, das du zum Rentenbeginn brauchst.<\/p>\n<p>Drei Gr\u00f6\u00dfen bestimmen das Ergebnis. Die <strong>Auszahlungsdauer<\/strong> legt fest, \u00fcber wie viele Jahre das Kapital reichen soll. Die <strong>Rendite im Ruhestand<\/strong> bestimmt, wie viel das verbleibende Kapital w\u00e4hrenddessen noch erwirtschaftet. Und die <strong>Besteuerung<\/strong> entscheidet, wie viel brutto entnommen werden muss, damit netto die gew\u00fcnschte Summe ankommt.<\/p>\n<p>Der letzte Punkt ist der, den die meisten \u00dcberschlagsrechnungen auslassen. Je nachdem, ob das Kapital im Altersvorsorgedepot oder im normalen Depot liegt, unterscheidet sich der n\u00f6tige Bruttobetrag deutlich. Genau deshalb weist der Rechner zwei Kapitalbedarfe aus statt einen.<\/p>\n<p>Im Ergebnis kannst du beides verstellen: die Auszahlungsdauer und, \u00fcber den Renditeregler, die Annahme f\u00fcr Anspar- und Auszahlungsphase. Der Regler koppelt drei Annahmen zugleich, damit sie zueinander passen und nicht versehentlich eine optimistische Ansparrendite mit einer pessimistischen Rentenanpassung kombiniert wird.<\/p>\n<h2>Wie du die L\u00fccke schlie\u00dft<\/h2>\n<p>Ab dem 1. Januar 2027 gibt es daf\u00fcr ein gef\u00f6rdertes Produkt: das Altersvorsorgedepot, den Nachfolger der <a href=\"https:\/\/www.finanzen.net\/ratgeber\/altersvorsorgedepot\/riester-rente-umwandeln\/\" data-ilm-light=\"58\" title=\"Riester Rente\">Riester-Rente<\/a>. Der Staat legt auf die ersten 360 Euro Eigenbeitrag im Jahr 50 Cent je Euro drauf, auf die weiteren Beitr\u00e4ge bis 1.800 Euro 25 Cent je Euro. Maximal sind das 540 Euro Grundzulage im Jahr. F\u00fcr jedes Kind mit Kindergeldbezug kommen bis zu 300 Euro hinzu, in voller H\u00f6he bereits ab 300 Euro Eigenbeitrag. Der Mindesteigenbeitrag liegt bei 120 Euro im Jahr.<\/p>\n<p>Einzahlen kannst du bis zu 6.840 Euro im Jahr, also 570 Euro im Monat. Gef\u00f6rdert wird davon nur der Teil bis 1.800 Euro. Alles dar\u00fcber w\u00e4chst zwar steuerfrei, bringt aber keine zus\u00e4tzliche Zulage und bleibt bis zum Rentenalter gebunden.<\/p>\n<p>Daraus ergibt sich die Aufteilung, die der Rechner als AVD-Weg ausweist: das Altersvorsorgedepot bis zur F\u00f6rderh\u00f6chstgrenze, ein normales ETF-Depot f\u00fcr den Rest. Dagegen steht der reine Depotweg ohne F\u00f6rderung, daf\u00fcr ohne Bindung und mit g\u00fcnstigerer Besteuerung bei der Auszahlung. Welcher Weg die niedrigere Sparrate erfordert, h\u00e4ngt von Zulagenh\u00f6he, Laufzeit, Steuersatz im Erwerbsleben und Einkommen im Ruhestand ab. Genau das rechnet der Vergleich f\u00fcr deine Angaben durch.<\/p>\n<p>Ausf\u00fchrlich zu Zulagen, Kosten und zur \u00dcbertragung eines Riester-Vertrags: <a href=\"https:\/\/www.finanzen.net\/ratgeber\/vorsorge\/altersvorsorgedepot\/\">unser Ratgeber zum Altersvorsorgedepot<\/a>.<\/p>\n<h2>F\u00fcnf Fehler, die die L\u00fccke kleiner aussehen lassen<\/h2>\n<p><strong>Brutto mit netto vergleichen.<\/strong> Die Renteninformation nennt einen Bruttobetrag. Nach Steuern und Beitr\u00e4gen bleiben davon je nach Situation 15 bis 25 Prozent weniger \u00fcbrig.<\/p>\n<p><strong>Die Inflation weglassen.<\/strong> Eine L\u00fccke von 500 Euro heute ist in 30 Jahren eine L\u00fccke von rund 900 Euro nominal. Wer die heutige Zahl anspart, hat zu wenig.<\/p>\n<p><strong>Die Renteninformation f\u00fcr eine Prognose halten.<\/strong> Sie schreibt deinen bisherigen Durchschnittsverdienst fort. Bei Gehaltsspr\u00fcngen, Teilzeit oder Selbstst\u00e4ndigkeit liegt sie daneben.<\/p>\n<p><strong>Einen zu fr\u00fchen Rentenbeginn unterstellen.<\/strong> Jedes Jahr vor der Regelaltersgrenze kostet 3,6 Prozent Abschlag, und zwar dauerhaft. Gleichzeitig verl\u00e4ngert sich die Zeit, \u00fcber die das Kapital reichen muss.<\/p>\n<p><strong>Die Betriebsrente zu optimistisch ansetzen.<\/strong> Auf sie f\u00e4llt der volle Krankenkassenbeitrag an, und sie ist voll steuerpflichtig. Netto bleibt deutlich weniger als die zugesagte Zahl vermuten l\u00e4sst.<\/p>\n<h2>So rechnet der Rechner<\/h2>\n<p><strong>Gesetzliche Rente.<\/strong> Je nach gew\u00e4hlter Methode aus Beitragsjahren, Entgeltpunkten oder dem Betrag aus der Renteninformation. Bis zum Rentenbeginn wird mit 2 Prozent j\u00e4hrlicher Anpassung hochgerechnet, das entspricht etwa dem historischen Durchschnitt.<\/p>\n<p><strong>Weitere Eink\u00fcnfte.<\/strong> Die Betriebsrente wird mit 1 Prozent pro Jahr angepasst, entsprechend der gesetzlichen Mindestanpassungspflicht nach \u00a7 16 BetrAVG. Private Lebens- und Rentenversicherungen mit 1,0 Prozent, entsprechend dem gesetzlichen H\u00f6chstrechnungszins f\u00fcr Neuvertr\u00e4ge seit 2025.. Sonstige Eink\u00fcnfte mit 2 Prozent.<\/p>\n<p><strong>Sozialabgaben.<\/strong> Auf die gesetzliche Rente 7,3 Prozent Krankenversicherung plus halber Zusatzbeitrag, auf die Betriebsrente 14,6 Prozent plus voller Zusatzbeitrag, aber nur auf den Teil oberhalb des Freibetrags von 197,75 Euro im Monat. In der Pflegeversicherung gibt es diesen Freibetrag nicht: Dort wirkt der Betrag als Freigrenze, und sobald sie \u00fcberschritten ist, sind 3,6 Prozent auf die volle Betriebsrente f\u00e4llig. Auf die gesetzliche Rente fallen 3,6 Prozent Pflegeversicherung an, f\u00fcr zuschlagspflichtige Kinderlose 4,2 Prozent. Der Zusatzbeitrag ist voreingestellt auf den durchschnittlichen Satz von 2,9 Prozent und im Ergebnis anpassbar. Unterstellt ist die gesetzliche Krankenversicherung der Rentner. Privat Versicherte zahlen abweichende Festbeitr\u00e4ge.<\/p>\n<p><strong>Steuer.<\/strong> Einkommensteuer nach dem progressiven Tarif 2026 gem\u00e4\u00df \u00a7 32a EStG, mit Grundfreibetrag und bei Zusammenveranlagung mit Splittingverfahren. Die gesetzliche Rente geht nur mit ihrem steuerpflichtigen Anteil ein. Kirchensteuer bleibt au\u00dfen vor. Die Tarifeckwerte werden nicht an die Inflation angepasst. Weil k\u00fcnftige Renten nominal h\u00f6her liegen, wird die Steuer dadurch eher \u00fcber- als untersch\u00e4tzt. Die ausgewiesene L\u00fccke f\u00e4llt also tendenziell etwas zu gro\u00df aus.<\/p>\n<p><strong>Auszahlung aus dem Altersvorsorgedepot.<\/strong> Die Entnahme wird in zwei T\u00f6pfen besteuert. Der gef\u00f6rderte Teil, also Eigenbeitr\u00e4ge bis 1.800 Euro im Jahr zuz\u00fcglich Zulagen, ist voll als Einkommen zu versteuern und wird auf das \u00fcbrige Renteneinkommen aufgeschlagen. Beim ungef\u00f6rderten Teil dar\u00fcber ist bei einer Laufzeit ab zw\u00f6lf Jahren nur die H\u00e4lfte des Gewinnanteils steuerpflichtig, die eingezahlte Substanz bleibt steuerfrei. Sozialabgaben fallen nicht an, das Restkapital bleibt w\u00e4hrend der Auszahlungsphase investiert.<\/p>\n<p><strong>Auszahlung aus dem normalen Depot.<\/strong> Besteuert wird nur der Gewinnanteil jeder Entnahme, mit 26,375 Prozent Abgeltungsteuer, unter Ber\u00fccksichtigung der Teilfreistellung von 30 Prozent f\u00fcr Aktienfonds und des Sparerpauschbetrags.<\/p>\n<p><strong>Startkapital.<\/strong> Es wird mit der gew\u00e4hlten Rendite verzinst und auf den Kapitalbedarf angerechnet. Vereinfachend gilt es als ins Altersvorsorgedepot eingebracht. Liegt es stattdessen in einem normalen Depot, fiele auf den Gewinnanteil Abgeltungsteuer an, die n\u00f6tige Sparrate w\u00e4re dann etwas h\u00f6her.<\/p>\n<p><strong>Inflation.<\/strong> Fest 2 Prozent pro Jahr. Der Schalter im Ergebnis blendet die kaufkraftbereinigten Werte zus\u00e4tzlich ein.<\/p>\n<p><strong>Was der Rechner nicht abbildet.<\/strong> Er unterstellt eine konstante Rendite, w\u00e4hrend die M\u00e4rkte schwanken. Die Reihenfolge von Gewinn- und Verlustjahren ver\u00e4ndert das Ergebnis erheblich, selbst bei gleicher Durchschnittsrendite. Ebenfalls nicht enthalten sind k\u00fcnftige \u00c4nderungen des Steuertarifs und des Rentenrechts, Abschl\u00e4ge bei vorzeitigem Rentenbeginn, Erwerbsunterbrechungen, Kirchensteuer und individuelle Sonderausgaben.<\/p>\n<h2>H\u00e4ufige Fragen<\/h2>\n<p><strong>Welche Methode soll ich w\u00e4hlen?<\/strong><br \/>\nWenn du deine Renteninformation zur Hand hast, nimm den Rentenbetrag oder die Entgeltpunkte daraus. Nur wenn keine Unterlagen vorliegen, ist die Sch\u00e4tzung \u00fcber die Beitragsjahre die richtige Wahl.<\/p>\n<p><strong>Ab wann bekomme ich eine Renteninformation?<\/strong><br \/>\nAb 27 Jahren und mindestens f\u00fcnf Jahren Versicherungszeit verschickt die Deutsche Rentenversicherung sie j\u00e4hrlich automatisch.<\/p>\n<p><strong>Warum weicht das Ergebnis von meiner Renteninformation ab?<\/strong><br \/>\nDie Renteninformation schreibt deinen bisherigen Durchschnittsverdienst fort und nennt zus\u00e4tzlich eine Hochrechnung mit angenommener Rentenanpassung. Der Rechner arbeitet mit deinen eigenen Annahmen zu Einkommen und Anpassung und zieht anschlie\u00dfend Steuern und Sozialabgaben ab, die in der Renteninformation nicht enthalten sind.<\/p>\n<p><strong>Was ist eine realistische Wunschrente?<\/strong><br \/>\nStatt einer Faustregel hilft der Blick auf die eigenen Ausgaben. Gehe einen typischen Monat durch und pr\u00fcfe, welche Posten im Ruhestand wegfallen, welche bleiben und welche steigen. Die Wohnsituation ist dabei der gr\u00f6\u00dfte Hebel.<\/p>\n<p><strong>Warum sind zwei Kapitalbedarfe ausgewiesen?<\/strong><br \/>\nWeil Altersvorsorgedepot und normales Depot bei der Auszahlung unterschiedlich besteuert werden. F\u00fcr dieselbe Nettorente ist deshalb ein unterschiedlich hohes Bruttokapital n\u00f6tig.<\/p>\n<p><strong>Rechnet der Rechner mit Rentenabschl\u00e4gen?<\/strong><br \/>\nNein. Ein fr\u00fcherer Rentenbeginn verk\u00fcrzt im Modell nur die Ansparzeit und verl\u00e4ngert die Auszahlungsdauer. Die dauerhaften Abschl\u00e4ge von 3,6 Prozent je vorgezogenem Jahr sind nicht ber\u00fccksichtigt. Deine tats\u00e4chliche L\u00fccke w\u00e4re bei fr\u00fchem Rentenbeginn also gr\u00f6\u00dfer.<\/p>\n<p><strong>Werden meine Eingaben gespeichert?<\/strong><br \/>\nNein. Die Berechnung l\u00e4uft vollst\u00e4ndig in deinem Browser. Es werden keine Daten \u00fcbertragen oder gespeichert.<\/p>\n<h2>\u00dcber diesen Rechner<\/h2>\n<p>Der Rechner bildet den Rechtsstand 2026 ab. Die Rentenwerte beruhen auf \u00a7 68 SGB VI und der Rentenwertbestimmungsverordnung 2026: aktueller Rentenwert 42,52 Euro seit dem 1. Juli 2026, vorl\u00e4ufiges Durchschnittsentgelt 51.944 Euro, Beitragsbemessungsgrenze 101.400 Euro. Die Besteuerung folgt \u00a7 22 und \u00a7 32a EStG mit dem Tarif 2026 und einem Grundfreibetrag von 12.348 Euro. Die F\u00f6rderregeln des Altersvorsorgedepots stammen aus dem Altersvorsorgereformgesetz, verk\u00fcndet am 29. Mai 2026 (BGBl. I 2026 Nr. 156) und anwendbar ab dem 1. Januar 2027.<\/p>\n<p>Die Rechnung ist eine Modellrechnung zur Orientierung. Sie beruht auf vereinfachten Annahmen und Durchschnittswerten, die oben vollst\u00e4ndig offengelegt sind. Eine aktuarielle oder steuerrechtliche Begutachtung durch Dritte hat nicht stattgefunden. Der Rechner ersetzt keine Beratung und stellt keine Anlageempfehlung dar. \u00c4ndern sich Rentenwert, Steuertarif oder Beitragss\u00e4tze, aktualisieren wir die Werte und vermerken das Datum hier.<\/p>\n<p><strong>Quellen<\/strong><\/p>\n<p><a href=\"https:\/\/www.bundesfinanzministerium.de\/Content\/DE\/FAQ\/reform-der-privaten-altersvorsorge.html\" target=\"_blank\" rel=\"noopener\">Bundesministerium der Finanzen: Fragen und Antworten zur Reform der gef\u00f6rderten privaten Altersvorsorge<\/a><\/p>\n<p><a href=\"https:\/\/www.recht.bund.de\/bgbl\/1\/2026\/156\/regelungstext.pdf?__blob=publicationFile&amp;v=1\" target=\"_blank\" rel=\"noopener\">Altersvorsorgereformgesetz, Regelungstext im Bundesgesetzblatt (BGBl. I 2026 Nr. 156)<\/a><\/p>\n<p><a href=\"https:\/\/www.bundesfinanzministerium.de\/Web\/DE\/Service\/Apps_Rechner\/Abgabenrechner\/abgabenrechner.html\" target=\"_blank\" rel=\"noopener\">Bundesministerium der Finanzen: Lohn- und Einkommensteuerrechner<\/a><\/p>\n<p><a href=\"https:\/\/www.bundesregierung.de\/breg-de\/aktuelles\/reform-private-altersvorsorge-2400072\" target=\"_blank\" rel=\"noopener\">Bundesregierung: Fragen und Antworten zur Reform der privaten Altersvorsorge<\/a><\/p>\n<p><a href=\"https:\/\/www.verbraucherzentrale.de\/wissen\/geld-versicherungen\/altersvorsorge\/neues-altersvorsorgedepot-rentenchance-oder-teure-verkaufsfalle-118178\" target=\"_blank\" rel=\"noopener\">Verbraucherzentrale: Einordnung der neuen Altersvorsorgeangebote<\/a><\/p>\n                    <\/div>\n    <\/div>\n<\/div>\n\n\n\n<div class=\"container container--narrow\">\n    <\/div>\n\n\n<div class=\"container container--narrow\" >\n    <div class=\"disclaimer flow-content\">\n                    <small>\n                <p style=\"font-size: 11pt\">Disclaimer: Die in diesem Artikel enthaltenen Inhalte dienen ausschlie\u00dflich allgemeinen Informations-, Bildungs- und Marketingzwecken ohne Gew\u00e4hr auf Vollst\u00e4ndigkeit, Richtigkeit und Aktualit\u00e4t. Die Inhalte stellen keine Anlageberatung, Anlagestrategieempfehlung oder Aufforderung zum Kauf oder Verkauf von Wertpapieren oder sonstigen Finanzinstrumenten dar. Die Informationen ber\u00fccksichtigen nicht die individuellen Anlageziele und finanzielle Situation des Lesers. Jede Anlageentscheidung sollte eigenverantwortlich getroffen und sorgf\u00e4ltig gepr\u00fcft werden. Vor einer Anlageentscheidung sollte der Rat eines Anlage- und Steuerberaters eingeholt werden. Der Handel mit Wertpapieren oder sonstigen Finanzinstrumenten ist mit hohen Risiken verbunden, bis hin zum Totalverlust des eingesetzten Kapitals. Die in der Vergangenheit erzielte Performance ist kein Indikator f\u00fcr zuk\u00fcnftige Wertentwicklungen. Aussagen \u00fcber zuk\u00fcnftige wirtschaftliche Entwicklungen basieren grunds\u00e4tzlich auf Annahmen und Einsch\u00e4tzungen, die sich im Zeitablauf als nicht zutreffend erweisen k\u00f6nnen. Wir \u00fcbernehmen keine Haftung f\u00fcr Verluste, die durch die Umsetzung der in diesem Artikel genannten Informationen entstehen.<\/p>\n<p style=\"font-size: 11pt\"><sup>1<\/sup>Hinweis zu ZERO: <a href=\"https:\/\/www.finanzen.net\/zero\/?utm_source=finnet-ratgeber&amp;utm_medium=web&amp;utm_term=fnet_017m&amp;utm_campaign=content&amp;utm_content=[current_slug]\" target=\"_blank\" rel=\"noopener\">finanzen.net zero<\/a> ist ein Angebot der <a href=\"https:\/\/www.finanzen.net\/zero\/impressum\/?utm_source=finnet-ratgeber&amp;utm_medium=web&amp;utm_term=fnet_017m&amp;utm_campaign=content&amp;utm_content=[current_slug]\" target=\"_blank\" rel=\"noopener\">finanzen.net zero GmbH<\/a>, einer Tochter der <a href=\"https:\/\/www.finanzen.net\/impressum\">finanzen.net GmbH<\/a>.<\/p>\n<p style=\"font-size: 11pt\"><sup>*<\/sup>Hinweis zu Affiliate-Links: Unsere Ratgeber-Artikel sind objektiv und unabh\u00e4ngig erstellt, wobei mit Sternchen gekennzeichnete Links zur Finanzierung der kostenlosen Inhalte dienen. Die Verg\u00fctung aus diesen Links hat keinen Einfluss auf unsere Inhalte.<\/p>\n            <\/small>\n                    <\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Nettorente, Rentenl\u00fccke und n\u00f6tige Sparrate berechnen. Mit Steuern, Kassenbeitr\u00e4gen und Inflation, auf Basis deiner Rentenpunkte.<\/p>\n","protected":false},"author":6,"featured_media":44685,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":"","_members_access_role":[],"_members_access_error":""},"categories":[1466,1194,359],"tags":[],"class_list":["post-43297","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-altersvorsorgedepot","category-rechner-vergleiche","category-vorsorge"],"acf":[],"yoast_head":"<title>Rentenrechner: So gro\u00df ist deine Rentenl\u00fccke<\/title>\n<meta name=\"description\" content=\"Rente-Rechner: Nettorente, Rentenl\u00fccke und n\u00f6tige Sparrate berechnen. Mit Steuern, Kassenbeitr\u00e4gen und Inflation, auf Basis deiner Rentenpunkte.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.finanzen.net\/ratgeber\/altersvorsorgedepot\/rentenlueckerechner\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Rentenrechner: So gro\u00df ist deine Rentenl\u00fccke\" \/>\n<meta property=\"og:description\" content=\"Rente-Rechner: Nettorente, Rentenl\u00fccke und n\u00f6tige Sparrate berechnen. Mit Steuern, Kassenbeitr\u00e4gen und Inflation, auf Basis deiner Rentenpunkte.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.finanzen.net\/ratgeber\/altersvorsorgedepot\/rentenlueckerechner\/\" \/>\n<meta property=\"og:site_name\" content=\"Finanzen.net Ratgeber: Finanzwissen, das dich weiterbringt\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-14T08:20:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-20T16:59:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.finanzen.net\/ratgeber\/wp-content\/uploads\/2026\/09\/rentenluecke_a1_puzzle_v2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1376\" \/>\n\t<meta property=\"og:image:height\" content=\"768\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Roland Kuse\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Geschrieben von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Roland Kuse\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"21\u00a0Minuten\" \/>","yoast_head_json":{"title":"Rentenrechner: So gro\u00df ist deine Rentenl\u00fccke","description":"Rente-Rechner: Nettorente, Rentenl\u00fccke und n\u00f6tige Sparrate berechnen. Mit Steuern, Kassenbeitr\u00e4gen und Inflation, auf Basis deiner Rentenpunkte.","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:\/\/www.finanzen.net\/ratgeber\/altersvorsorgedepot\/rentenlueckerechner\/","og_locale":"de_DE","og_type":"article","og_title":"Rentenrechner: So gro\u00df ist deine Rentenl\u00fccke","og_description":"Rente-Rechner: Nettorente, Rentenl\u00fccke und n\u00f6tige Sparrate berechnen. Mit Steuern, Kassenbeitr\u00e4gen und Inflation, auf Basis deiner Rentenpunkte.","og_url":"https:\/\/www.finanzen.net\/ratgeber\/altersvorsorgedepot\/rentenlueckerechner\/","og_site_name":"Finanzen.net Ratgeber: Finanzwissen, das dich weiterbringt","article_published_time":"2026-09-14T08:20:26+00:00","article_modified_time":"2026-10-20T16:59:59+00:00","og_image":[{"width":1376,"height":768,"url":"https:\/\/www.finanzen.net\/ratgeber\/wp-content\/uploads\/2026\/09\/rentenluecke_a1_puzzle_v2.png","type":"image\/png"}],"author":"Roland Kuse","twitter_card":"summary_large_image","twitter_misc":{"Geschrieben von":"Roland Kuse","Gesch\u00e4tzte Lesezeit":"21\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.finanzen.net\/ratgeber\/altersvorsorgedepot\/rentenlueckerechner\/#article","isPartOf":{"@id":"https:\/\/www.finanzen.net\/ratgeber\/altersvorsorgedepot\/rentenlueckerechner\/"},"author":{"name":"Roland Kuse","@id":"https:\/\/www.finanzen.net\/ratgeber\/#\/schema\/person\/751e702863ee767bd02fc5016b3d10e6"},"headline":"Rentenl\u00fcckenrechner","datePublished":"2026-09-14T08:20:26+00:00","dateModified":"2026-10-20T16:59:59+00:00","mainEntityOfPage":{"@id":"https:\/\/www.finanzen.net\/ratgeber\/altersvorsorgedepot\/rentenlueckerechner\/"},"wordCount":4243,"image":{"@id":"https:\/\/www.finanzen.net\/ratgeber\/altersvorsorgedepot\/rentenlueckerechner\/#primaryimage"},"thumbnailUrl":"https:\/\/www.finanzen.net\/ratgeber\/wp-content\/uploads\/2026\/09\/rentenluecke_a1_puzzle_v2.png","articleSection":["Altersvorsorgedepot","Rechner &amp; Vergleiche","Vorsorge"],"inLanguage":"de"},{"@type":["WebPage","ItemPage"],"@id":"https:\/\/www.finanzen.net\/ratgeber\/altersvorsorgedepot\/rentenlueckerechner\/","url":"https:\/\/www.finanzen.net\/ratgeber\/altersvorsorgedepot\/rentenlueckerechner\/","name":"Rentenrechner: So gro\u00df ist deine Rentenl\u00fccke","isPartOf":{"@id":"https:\/\/www.finanzen.net\/ratgeber\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.finanzen.net\/ratgeber\/altersvorsorgedepot\/rentenlueckerechner\/#primaryimage"},"image":{"@id":"https:\/\/www.finanzen.net\/ratgeber\/altersvorsorgedepot\/rentenlueckerechner\/#primaryimage"},"thumbnailUrl":"https:\/\/www.finanzen.net\/ratgeber\/wp-content\/uploads\/2026\/09\/rentenluecke_a1_puzzle_v2.png","datePublished":"2026-09-14T08:20:26+00:00","dateModified":"2026-10-20T16:59:59+00:00","author":{"@id":"https:\/\/www.finanzen.net\/ratgeber\/#\/schema\/person\/751e702863ee767bd02fc5016b3d10e6"},"description":"Rente-Rechner: Nettorente, Rentenl\u00fccke und n\u00f6tige Sparrate berechnen. Mit Steuern, Kassenbeitr\u00e4gen und Inflation, auf Basis deiner Rentenpunkte.","breadcrumb":{"@id":"https:\/\/www.finanzen.net\/ratgeber\/altersvorsorgedepot\/rentenlueckerechner\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.finanzen.net\/ratgeber\/altersvorsorgedepot\/rentenlueckerechner\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.finanzen.net\/ratgeber\/altersvorsorgedepot\/rentenlueckerechner\/#primaryimage","url":"https:\/\/www.finanzen.net\/ratgeber\/wp-content\/uploads\/2026\/09\/rentenluecke_a1_puzzle_v2.png","contentUrl":"https:\/\/www.finanzen.net\/ratgeber\/wp-content\/uploads\/2026\/09\/rentenluecke_a1_puzzle_v2.png","width":1376,"height":768},{"@type":"BreadcrumbList","@id":"https:\/\/www.finanzen.net\/ratgeber\/altersvorsorgedepot\/rentenlueckerechner\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/www.finanzen.net\/ratgeber\/"},{"@type":"ListItem","position":2,"name":"Altersvorsorgedepot","item":"https:\/\/www.finanzen.net\/ratgeber\/.\/altersvorsorgedepot\/"},{"@type":"ListItem","position":3,"name":"Rentenl\u00fcckenrechner"}]},{"@type":"WebSite","@id":"https:\/\/www.finanzen.net\/ratgeber\/#website","url":"https:\/\/www.finanzen.net\/ratgeber\/","name":"Finanzen.net Ratgeber - Die Ganze Welt der Finanzen","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.finanzen.net\/ratgeber\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Person","@id":"https:\/\/www.finanzen.net\/ratgeber\/#\/schema\/person\/751e702863ee767bd02fc5016b3d10e6","name":"Roland Kuse","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.finanzen.net\/ratgeber\/wp-content\/uploads\/2025\/10\/Roland_Kuse-1-150x150.jpg","url":"https:\/\/www.finanzen.net\/ratgeber\/wp-content\/uploads\/2025\/10\/Roland_Kuse-1-150x150.jpg","contentUrl":"https:\/\/www.finanzen.net\/ratgeber\/wp-content\/uploads\/2025\/10\/Roland_Kuse-1-150x150.jpg","caption":"Roland Kuse"},"description":"Roland Kuse leitet den Finanzratgeber gemeinsam mit Volker Altvater. Mit \u00fcber 25 Jahren Erfahrung im digitalen Publishing verantwortet der Experte die inhaltliche Strategie und redaktionelle Qualit\u00e4t. Zudem treibt er die Entwicklung interaktiver Formate voran \u2013 vom Altersvorsorgedepot-Rechner bis hin zu anschaulichen Infografiken. Sein Ziel ist es, Finanzen verst\u00e4ndlich, fundiert und verl\u00e4sslich aufzubereiten.","sameAs":["https:\/\/www.linkedin.com\/in\/roland-kuse-959574103\/"],"url":"https:\/\/www.finanzen.net\/ratgeber\/author\/roland-kruse\/"}]}},"_links":{"self":[{"href":"https:\/\/www.finanzen.net\/ratgeber\/wp-json\/wp\/v2\/posts\/43297","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.finanzen.net\/ratgeber\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.finanzen.net\/ratgeber\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.finanzen.net\/ratgeber\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.finanzen.net\/ratgeber\/wp-json\/wp\/v2\/comments?post=43297"}],"version-history":[{"count":6,"href":"https:\/\/www.finanzen.net\/ratgeber\/wp-json\/wp\/v2\/posts\/43297\/revisions"}],"predecessor-version":[{"id":43375,"href":"https:\/\/www.finanzen.net\/ratgeber\/wp-json\/wp\/v2\/posts\/43297\/revisions\/43375"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.finanzen.net\/ratgeber\/wp-json\/wp\/v2\/media\/44685"}],"wp:attachment":[{"href":"https:\/\/www.finanzen.net\/ratgeber\/wp-json\/wp\/v2\/media?parent=43297"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.finanzen.net\/ratgeber\/wp-json\/wp\/v2\/categories?post=43297"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.finanzen.net\/ratgeber\/wp-json\/wp\/v2\/tags?post=43297"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}