/* ==========================================================================
   3D-KALENDER — SurpriseCalendar 2026-10-12
   Der konfigurierte Kalender als interaktive 3D-Schachtel unter dem
   Konfigurator (Startseite über der Produktbeschreibung, /calendar; beide
   Marken). Markup: internal/templates/calendar3d.templ (Rahmen) +
   static/js/configurator/components/Calendar3D.js (Modell aus
   core/DoorGeometry.js). Reines CSS-3D: jede Länge im Modell ist
   calc(var(--u) * <mm>) — --u (px je mm) setzt das Skript aus der
   Viewport-Größe. Nur Tokens, keine Markenfarben (brand-css-tokens.test.js);
   die Pappe/Innenleben-Töne sind neutrale Materialfarben.
   ========================================================================== */

.calendar-3d {
    padding: var(--space-6) 0 var(--space-10);
    scroll-margin-top: 6rem; /* Sticky-Header, wie #konfigurator */
}

.calendar-3d .section-title {
    margin-bottom: var(--space-3);
}

.calendar-3d-intro {
    max-width: 62ch;
    margin: 0 auto var(--space-6);
    text-align: center;
    color: var(--color-text-muted);
}

.calendar-3d-card {
    background: var(--color-bg-white);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-lg);
    padding: var(--space-4);
    box-sizing: border-box;
}

/* Bühne: feste Proportion, der Rest wird vom Skript eingepasst */
.calendar-3d-viewport {
    position: relative;
    width: 100%;
    aspect-ratio: 16 / 10;
    max-height: 560px;
    min-height: 240px;
    overflow: hidden;
    border-radius: var(--radius-md);
    background:
        radial-gradient(ellipse at 50% 38%, rgba(255, 255, 255, 0.55) 0%, rgba(255, 255, 255, 0) 60%),
        linear-gradient(180deg, var(--color-bg-warm) 0%, var(--color-bg) 100%);
    touch-action: pan-y;         /* waagrecht drehen, senkrecht scrollt die Seite */
    cursor: grab;
    -moz-user-select: none;
         user-select: none;
    -webkit-user-select: none;
    outline-offset: 2px;
}

.calendar-3d-viewport:focus-visible {
    outline: 3px solid var(--color-primary);
}

.calendar-3d-viewport .cal3d.is-dragging,
.calendar-3d-viewport:active {
    cursor: grabbing;
}

.calendar-3d-loading {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    margin: 0;
    color: var(--color-text-muted);
    font-size: var(--font-size-sm);
}

.calendar-3d-controls {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: var(--space-2) var(--space-3);
    margin-top: var(--space-4);
}

.calendar-3d-hint {
    margin: var(--space-3) 0 0;
    text-align: center;
    font-size: var(--font-size-sm);
    color: var(--color-text-muted);
}

/* ---- Modell ------------------------------------------------------------ */

.cal3d {
    --cal3d-ease: cubic-bezier(0.2, 0.7, 0.2, 1);
    --cal3d-wrap: #ffffff;           /* Umschlag (Seitenflächen) = Druck-Hintergrund */
    --cal3d-board: #f4f1ec;          /* unbedruckte Pappe (Türrückseiten, Rückwand) */
    --cal3d-tray: #efe9e0;           /* Innenleben */
    position: absolute;
    inset: 0;
}

.cal3d-scene {
    position: absolute;
    inset: 0;
    perspective: calc(var(--u) * 1150);
    perspective-origin: 50% 42%;
}

.cal3d-world {
    position: absolute;
    left: 50%;
    top: 50%;
    width: 0;
    height: 0;
    transform-style: preserve-3d;
    transform:
        translateX(calc(var(--u) * var(--shift, 0)))
        rotateX(var(--rx, 0deg))
        rotateY(var(--ry, 0deg));
    transition: transform 0.8s var(--cal3d-ease);
}

.cal3d.is-dragging .cal3d-world {
    transition: none;
}

.cal3d-sleeve,
.cal3d-tray,
.cal3d-cell {
    position: absolute;
    left: 0;
    top: 0;
    width: 0;
    height: 0;
    transform-style: preserve-3d;
}

.cal3d-door,
.cal3d-wing {
    transform-style: preserve-3d;
}

.cal3d-panel,
.cal3d-shadow,
.cal3d-door,
.cal3d-wing,
.cal3d-wing-face,
.cal3d-front-piece,
.cal3d-tray-floor,
.cal3d-tray-wall,
.cal3d-cell-floor,
.cal3d-cell-wall {
    position: absolute;
    box-sizing: border-box;
}

/* Schatten auf dem „Tisch" unter der stehenden Schachtel */
.cal3d-shadow {
    background: radial-gradient(ellipse at 50% 50%, rgba(0, 0, 0, 0.32) 0%, rgba(0, 0, 0, 0.16) 32%, rgba(0, 0, 0, 0) 68%);
    pointer-events: none;
}

/* Hülle: bedruckte Front (mit Türlöchern), Rückwand, drei Wände */
.cal3d-front {
    background-color: #ffffff;
    background-image: var(--cal3d-tex, none);
    background-size: 100% 100%;
    background-repeat: no-repeat;
}

.cal3d-front--pieces {
    background-color: transparent;
}

.cal3d-front-piece {
    background-color: #ffffff;
    background-image: var(--cal3d-tex, none);
    background-size: calc(var(--u) * 330) calc(var(--u) * 240);
    background-repeat: no-repeat;
}

/* Rückwand: unbedruckte Pappe — oder die gedruckte Rückseite der Marke
   (--cal3d-back-tex aus data-back-image, Datei je Marke in internal/brand). */
.cal3d-back {
    background-color: var(--cal3d-board);
    background-image: var(--cal3d-back-tex, linear-gradient(rgba(0, 0, 0, 0.06), rgba(0, 0, 0, 0.06)));
    background-size: 100% 100%;
    background-repeat: no-repeat;
}

.cal3d.has-back .cal3d-back {
    background-color: #ffffff;
}

.cal3d-top {
    background-color: var(--cal3d-wrap);
    background-image: linear-gradient(rgba(255, 255, 255, 0.18), rgba(0, 0, 0, 0.02));
}

.cal3d-bottom {
    background-color: var(--cal3d-wrap);
    background-image: linear-gradient(rgba(0, 0, 0, 0.26), rgba(0, 0, 0, 0.26));
}

.cal3d-side {
    background-color: var(--cal3d-wrap);
    background-image: linear-gradient(rgba(0, 0, 0, 0.12), rgba(0, 0, 0, 0.12));
}

/* Türchen: ein Element je Platz, ein oder zwei Flügel */
.cal3d-door {
    cursor: pointer;
    outline: none;
}

.cal3d-door:focus-visible {
    outline: 2px solid var(--color-primary);
    outline-offset: 2px;
}

.cal3d-wing {
    transition: transform 0.65s var(--cal3d-ease);
    will-change: transform;
}

.cal3d-wing[data-hinge="left"]   { transform-origin: 0 50%; }
.cal3d-wing[data-hinge="right"]  { transform-origin: 100% 50%; }
.cal3d-wing[data-hinge="top"]    { transform-origin: 50% 0; }
.cal3d-wing[data-hinge="bottom"] { transform-origin: 50% 100%; }

/* Öffnungswinkel je Tür in --open (Grad, vom Skript gesetzt) */
.cal3d-door.is-open .cal3d-wing[data-hinge="left"]   { transform: rotateY(calc(var(--open, 110) * -1deg)); }
.cal3d-door.is-open .cal3d-wing[data-hinge="right"]  { transform: rotateY(calc(var(--open, 110) * 1deg)); }
.cal3d-door.is-open .cal3d-wing[data-hinge="top"]    { transform: rotateX(calc(var(--open, 110) * 1deg)); }
.cal3d-door.is-open .cal3d-wing[data-hinge="bottom"] { transform: rotateX(calc(var(--open, 110) * -1deg)); }

.cal3d-wing-face {
    inset: 0;
    backface-visibility: hidden;
    -webkit-backface-visibility: hidden;
}

/* Sichtbare Seite je Flügel, vom Skript berechnet (data-facing) — Ersatz für
   backface-visibility in Engines, die es im 3D-Kontext ignorieren (iPhone-Bug
   2026-10-12, Calendar3D.syncFacing). */
.cal3d-wing[data-facing="back"] .cal3d-wing-front,
.cal3d-wing[data-facing="front"] .cal3d-wing-back {
    visibility: hidden;
}

.cal3d-wing-front {
    background-color: #ffffff;
    background-image: var(--cal3d-tex, none);
    background-size: calc(var(--u) * 330) calc(var(--u) * 240);
    background-repeat: no-repeat;
    /* feine Schnittkante, damit die Tür auch ohne Stanzlinie im Bild ablesbar bleibt */
    box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.06);
}

.cal3d-wing-back {
    transform: rotateY(180deg);
    background-color: var(--cal3d-board);
    background-image: linear-gradient(rgba(0, 0, 0, 0.04), rgba(0, 0, 0, 0.1));
}

/* Nummern-Chip, solange noch keine Textur da ist (Optik wie Konfigurator/Druck) */
.cal3d-chip {
    display: none;
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%) translateZ(calc(var(--u) * 0.3));
    font-family: var(--font-body);
    font-weight: 700;
    font-size: calc(var(--u) * 9);
    line-height: 1;
    color: rgba(255, 255, 255, 0.9);
    text-shadow: 0 1px 3px rgba(0, 0, 0, 0.7);
    background: rgba(0, 0, 0, 0.4);
    padding: 0.1em 0.5em;
    border-radius: var(--radius-sm);
    pointer-events: none;
}

.cal3d:not(.has-texture) .cal3d-door:not(.is-open) .cal3d-chip {
    display: block;
}

/* Innenleben: Boden, vier Wände, ein Fach je Türchen */
.cal3d-tray {
    transform: translateX(calc(var(--u) * var(--pull, 0)));
    transition: transform 0.8s var(--cal3d-ease);
    cursor: pointer;
    outline: none;
}

.cal3d-tray:focus-visible .cal3d-tray-wall {
    outline: 2px solid var(--color-primary);
}

.cal3d-tray-floor {
    background-color: var(--cal3d-tray);
    background-image: linear-gradient(rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05));
}

.cal3d-tray-wall {
    background-color: var(--cal3d-tray);
}

.cal3d-tray-wall--left   { background-image: linear-gradient(90deg, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.18)); }
.cal3d-tray-wall--right  { background-image: linear-gradient(90deg, rgba(0, 0, 0, 0.18), rgba(0, 0, 0, 0.1)); }
.cal3d-tray-wall--top    { background-image: linear-gradient(rgba(0, 0, 0, 0.02), rgba(0, 0, 0, 0.08)); }
.cal3d-tray-wall--bottom { background-image: linear-gradient(rgba(0, 0, 0, 0.28), rgba(0, 0, 0, 0.2)); }

/* Griffwand (Ausgangsseite): leichte Daumenmulde als Hinweis zum Ziehen */
.cal3d-tray-handle {
    background-image:
        radial-gradient(ellipse at 50% 50%, rgba(0, 0, 0, 0.28) 0, rgba(0, 0, 0, 0.28) calc(var(--u) * 3.2), rgba(0, 0, 0, 0) calc(var(--u) * 3.8)),
        linear-gradient(90deg, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.18));
}

.cal3d-cell-floor {
    background: radial-gradient(ellipse at 50% 42%, rgba(0, 0, 0, 0.02) 0%, rgba(0, 0, 0, 0.14) 100%), var(--cal3d-tray);
}

.cal3d-cell-wall {
    background-color: var(--cal3d-tray);
}

.cal3d-cell-wall--left   { background-image: linear-gradient(rgba(0, 0, 0, 0.14), rgba(0, 0, 0, 0.14)); }
.cal3d-cell-wall--right  { background-image: linear-gradient(rgba(0, 0, 0, 0.06), rgba(0, 0, 0, 0.06)); }
.cal3d-cell-wall--top    { background-image: linear-gradient(rgba(0, 0, 0, 0.22), rgba(0, 0, 0, 0.22)); }
.cal3d-cell-wall--bottom { background-image: linear-gradient(rgba(0, 0, 0, 0.03), rgba(0, 0, 0, 0.03)); }

/* ---- Responsiv ---------------------------------------------------------- */

@media (max-width: 600px) {
    .calendar-3d-card {
        padding: var(--space-3);
    }

    .calendar-3d-viewport {
        aspect-ratio: 4 / 3;
    }
}

@media (max-width: 480px) {
    .calendar-3d-controls .btn {
        flex: 1 1 100%;
    }
}

@media (prefers-reduced-motion: reduce) {
    .cal3d-world,
    .cal3d-wing,
    .cal3d-tray {
        transition-duration: 0.01s;
    }
}

/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jc3MvY2FsZW5kYXItM2QuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OytFQVUrRTs7QUFFL0U7SUFDSSx5Q0FBeUM7SUFDekMsdUJBQXVCLEVBQUUscUNBQXFDO0FBQ2xFOztBQUVBO0lBQ0ksNkJBQTZCO0FBQ2pDOztBQUVBO0lBQ0ksZUFBZTtJQUNmLDZCQUE2QjtJQUM3QixrQkFBa0I7SUFDbEIsOEJBQThCO0FBQ2xDOztBQUVBO0lBQ0ksaUNBQWlDO0lBQ2pDLHFDQUFxQztJQUNyQywrQkFBK0I7SUFDL0IsNEJBQTRCO0lBQzVCLHVCQUF1QjtJQUN2QixzQkFBc0I7QUFDMUI7O0FBRUEsaUVBQWlFO0FBQ2pFO0lBQ0ksa0JBQWtCO0lBQ2xCLFdBQVc7SUFDWCxxQkFBcUI7SUFDckIsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsK0JBQStCO0lBQy9COzs4RUFFMEU7SUFDMUUsbUJBQW1CLFVBQVUsa0RBQWtEO0lBQy9FLFlBQVk7SUFDWixzQkFBaUI7U0FBakIsaUJBQWlCO0lBQ2pCLHlCQUF5QjtJQUN6QixtQkFBbUI7QUFDdkI7O0FBRUE7SUFDSSx1Q0FBdUM7QUFDM0M7O0FBRUE7O0lBRUksZ0JBQWdCO0FBQ3BCOztBQUVBO0lBQ0ksa0JBQWtCO0lBQ2xCLFFBQVE7SUFDUixhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLHVCQUF1QjtJQUN2QixTQUFTO0lBQ1QsOEJBQThCO0lBQzlCLDhCQUE4QjtBQUNsQzs7QUFFQTtJQUNJLGFBQWE7SUFDYixlQUFlO0lBQ2YsdUJBQXVCO0lBQ3ZCLGtDQUFrQztJQUNsQywwQkFBMEI7QUFDOUI7O0FBRUE7SUFDSSwwQkFBMEI7SUFDMUIsa0JBQWtCO0lBQ2xCLDhCQUE4QjtJQUM5Qiw4QkFBOEI7QUFDbEM7O0FBRUEsNkVBQTZFOztBQUU3RTtJQUNJLDRDQUE0QztJQUM1QyxxQkFBcUIsWUFBWSxpREFBaUQ7SUFDbEYsc0JBQXNCLFdB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MkJBQTJCLGlGQUFpRixFQUFFO0FBQzlHLDJCQUEyQiwyRUFBMkUsRUFBRTtBQUN4RywyQkFBMkIsMEVBQTBFLEVBQUU7O0FBRXZHLDBFQUEwRTtBQUMxRTtJQUNJOzt1RUFFbUU7QUFDdkU7O0FBRUE7SUFDSSxvSEFBb0g7QUFDeEg7O0FBRUE7SUFDSSxtQ0FBbUM7QUFDdkM7O0FBRUEsMkJBQTJCLDJFQUEyRSxFQUFFO0FBQ3hHLDJCQUEyQiwyRUFBMkUsRUFBRTtBQUN4RywyQkFBMkIsMkVBQTJFLEVBQUU7QUFDeEcsMkJBQTJCLDJFQUEyRSxFQUFFOztBQUV4Ryw4RUFBOEU7O0FBRTlFO0lBQ0k7UUFDSSx1QkFBdUI7SUFDM0I7O0lBRUE7UUFDSSxtQkFBbUI7SUFDdkI7QUFDSjs7QUFFQTtJQUNJO1FBQ0ksY0FBYztJQUNsQjtBQUNKOztBQUVBO0lBQ0k7OztRQUdJLDBCQUEwQjtJQUM5QjtBQUNKIiwiZmlsZSI6ImNhbGVuZGFyLTNkLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAzRC1LQUxFTkRFUiDigJQgU3VycHJpc2VDYWxlbmRhciAyMDI2LTEwLTEyXG4gICBEZXIga29uZmlndXJpZXJ0ZSBLYWxlbmRlciBhbHMgaW50ZXJha3RpdmUgM0QtU2NoYWNodGVsIHVudGVyIGRlbVxuICAgS29uZmlndXJhdG9yIChTdGFydHNlaXRlIMO8YmVyIGRlciBQcm9kdWt0YmVzY2hyZWlidW5nLCAvY2FsZW5kYXI7IGJlaWRlXG4gICBNYXJrZW4pLiBNYXJrdXA6IGludGVybmFsL3RlbXBsYXRlcy9jYWxlbmRhcjNkLnRlbXBsIChSYWhtZW4pICtcbiAgIHN0YXRpYy9qcy9jb25maWd1cmF0b3IvY29tcG9uZW50cy9DYWxlbmRhcjNELmpzIChNb2RlbGwgYXVzXG4gICBjb3JlL0Rvb3JHZW9tZXRyeS5qcykuIFJlaW5lcyBDU1MtM0Q6IGplZGUgTMOkbmdlIGltIE1vZGVsbCBpc3RcbiAgIGNhbGModmFyKC0tdSkgKiA8bW0+KSDigJQgLS11IChweCBqZSBtbSkgc2V0enQgZGFzIFNrcmlwdCBhdXMgZGVyXG4gICBWaWV3cG9ydC1HcsO2w59lLiBOdXIgVG9rZW5zLCBrZWluZSBNYXJrZW5mYXJiZW4gKGJyYW5kLWNzcy10b2tlbnMudGVzdC5qcyk7XG4gICBkaWUgUGFwcGUvSW5uZW5sZWJlbi1Uw7ZuZSBzaW5kIG5ldXRyYWxlIE1hdGVyaWFsZmFyYmVuLlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmNhbGVuZGFyLTNkIHtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS02KSAwIHZhcigtLXNwYWNlLTEwKTtcbiAgICBzY3JvbGwtbWFyZ2luLXRvcDogNnJlbTsgLyogU3RpY2t5LUhlYWRlciwgd2llICNrb25maWd1cmF0b3IgKi9cbn1cblxuLmNhbGVuZGFyLTNkIC5zZWN0aW9uLXRpdGxlIHtcbiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLmNhbGVuZGFyLTNkLWludHJvIHtcbiAgICBtYXgtd2lkdGg6IDYyY2g7XG4gICAgbWFyZ2luOiAwIGF1dG8gdmFyKC0tc3BhY2UtNik7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTtcbn1cblxuLmNhbGVuZGFyLTNkLWNhcmQge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnLXdoaXRlKTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG4gICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWxnKTtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS00KTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4vKiBCw7xobmU6IGZlc3RlIFByb3BvcnRpb24sIGRlciBSZXN0IHdpcmQgdm9tIFNrcmlwdCBlaW5nZXBhc3N0ICovXG4uY2FsZW5kYXItM2Qtdmlld3BvcnQge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBhc3BlY3QtcmF0aW86IDE2IC8gMTA7XG4gICAgbWF4LWhlaWdodDogNTYwcHg7XG4gICAgbWluLWhlaWdodDogMjQwcHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuICAgIGJhY2tncm91bmQ6XG4gICAgICAgIHJhZGlhbC1ncmFkaWVudChlbGxpcHNlIGF0IDUwJSAzOCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NSkgMCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMCkgNjAlKSxcbiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgdmFyKC0tY29sb3ItYmctd2FybSkgMCUsIHZhcigtLWNvbG9yLWJnKSAxMDAlKTtcbiAgICB0b3VjaC1hY3Rpb246IHBhbi15OyAgICAgICAgIC8qIHdhYWdyZWNodCBkcmVoZW4sIHNlbmtyZWNodCBzY3JvbGx0IGRpZSBTZWl0ZSAqL1xuICAgIGN1cnNvcjogZ3JhYjtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAgIG91dGxpbmUtb2Zmc2V0OiAycHg7XG59XG5cbi5jYWxlbmRhci0zZC12aWV3cG9ydDpmb2N1cy12aXNpYmxlIHtcbiAgICBvdXRsaW5lOiAzcHggc29saWQgdmFyKC0tY29sb3ItcHJpbWFyeSk7XG59XG5cbi5jYWxlbmRhci0zZC12aWV3cG9ydCAuY2FsM2QuaXMtZHJhZ2dpbmcsXG4uY2FsZW5kYXItM2Qtdmlld3BvcnQ6YWN0aXZlIHtcbiAgICBjdXJzb3I6IGdyYWJiaW5nO1xufVxuXG4uY2FsZW5kYXItM2QtbG9hZGluZyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBtYXJnaW46IDA7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbn1cblxuLmNhbGVuZGFyLTNkLWNvbnRyb2xzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTMpO1xuICAgIG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTQpO1xufVxuXG4uY2FsZW5kYXItM2QtaGludCB7XG4gICAgbWFyZ2luOiB2YXIoLS1zcGFjZS0zKSAwIDA7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1tdXRlZCk7XG59XG5cbi8qIC0tLS0gTW9kZWxsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4uY2FsM2Qge1xuICAgIC0tY2FsM2QtZWFzZTogY3ViaWMtYmV6aWVyKDAuMiwgMC43LCAwLjIsIDEpO1xuICAgIC0tY2FsM2Qtd3JhcDogI2ZmZmZmZjsgICAgICAgICAgIC8qIFVtc2NobGFnIChTZWl0ZW5mbMOkY2hlbikgPSBEcnVjay1IaW50ZXJncnVuZCAqL1xuICAgIC0tY2FsM2QtYm9hcmQ6ICNmNGYxZWM7ICAgICAgICAgIC8qIHVuYmVkcnVja3RlIFBhcHBlIChUw7xycsO8Y2tzZWl0ZW4sIFLDvGNrd2FuZCkgKi9cbiAgICAtLWNhbDNkLXRyYXk6ICNlZmU5ZTA7ICAgICAgICAgICAvKiBJbm5lbmxlYmVuICovXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAwO1xufVxuXG4uY2FsM2Qtc2NlbmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBpbnNldDogMDtcbiAgICBwZXJzcGVjdGl2ZTogY2FsYyh2YXIoLS11KSAqIDExNTApO1xuICAgIHBlcnNwZWN0aXZlLW9yaWdpbjogNTAlIDQyJTtcbn1cblxuLmNhbDNkLXdvcmxkIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogNTAlO1xuICAgIHRvcDogNTAlO1xuICAgIHdpZHRoOiAwO1xuICAgIGhlaWdodDogMDtcbiAgICB0cmFuc2Zvcm0tc3R5bGU6IHByZXNlcnZlLTNkO1xuICAgIHRyYW5zZm9ybTpcbiAgICAgICAgdHJhbnNsYXRlWChjYWxjKHZhcigtLXUpICogdmFyKC0tc2hpZnQsIDApKSlcbiAgICAgICAgcm90YXRlWCh2YXIoLS1yeCwgMGRlZykpXG4gICAgICAgIHJvdGF0ZVkodmFyKC0tcnksIDBkZWcpKTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC44cyB2YXIoLS1jYWwzZC1lYXNlKTtcbn1cblxuLmNhbDNkLmlzLWRyYWdnaW5nIC5jYWwzZC13b3JsZCB7XG4gICAgdHJhbnNpdGlvbjogbm9uZTtcbn1cblxuLmNhbDNkLXNsZWV2ZSxcbi5jYWwzZC10cmF5LFxuLmNhbDNkLWNlbGwge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAwO1xuICAgIHRvcDogMDtcbiAgICB3aWR0aDogMDtcbiAgICBoZWlnaHQ6IDA7XG4gICAgdHJhbnNmb3JtLXN0eWxlOiBwcmVzZXJ2ZS0zZDtcbn1cblxuLmNhbDNkLWRvb3IsXG4uY2FsM2Qtd2luZyB7XG4gICAgdHJhbnNmb3JtLXN0eWxlOiBwcmVzZXJ2ZS0zZDtcbn1cblxuLmNhbDNkLXBhbmVsLFxuLmNhbDNkLXNoYWRvdyxcbi5jYWwzZC1kb29yLFxuLmNhbDNkLXdpbmcsXG4uY2FsM2Qtd2luZy1mYWNlLFxuLmNhbDNkLWZyb250LXBpZWNlLFxuLmNhbDNkLXRyYXktZmxvb3IsXG4uY2FsM2QtdHJheS13YWxsLFxuLmNhbDNkLWNlbGwtZmxvb3IsXG4uY2FsM2QtY2VsbC13YWxsIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLyogU2NoYXR0ZW4gYXVmIGRlbSDigJ5UaXNjaFwiIHVudGVyIGRlciBzdGVoZW5kZW4gU2NoYWNodGVsICovXG4uY2FsM2Qtc2hhZG93IHtcbiAgICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoZWxsaXBzZSBhdCA1MCUgNTAlLCByZ2JhKDAsIDAsIDAsIDAuMzIpIDAlLCByZ2JhKDAsIDAsIDAsIDAuMTYpIDMyJSwgcmdiYSgwLCAwLCAwLCAwKSA2OCUpO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4vKiBIw7xsbGU6IGJlZHJ1Y2t0ZSBGcm9udCAobWl0IFTDvHJsw7ZjaGVybiksIFLDvGNrd2FuZCwgZHJlaSBXw6RuZGUgKi9cbi5jYWwzZC1mcm9udCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB2YXIoLS1jYWwzZC10ZXgsIG5vbmUpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJSAxMDAlO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG59XG5cbi5jYWwzZC1mcm9udC0tcGllY2VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuLmNhbDNkLWZyb250LXBpZWNlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHZhcigtLWNhbDNkLXRleCwgbm9uZSk7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjYWxjKHZhcigtLXUpICogMzMwKSBjYWxjKHZhcigtLXUpICogMjQwKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xufVxuXG4vKiBSw7xja3dhbmQ6IHVuYmVkcnVja3RlIFBhcHBlIOKAlCBvZGVyIGRpZSBnZWRydWNrdGUgUsO8Y2tzZWl0ZSBkZXIgTWFya2VcbiAgICgtLWNhbDNkLWJhY2stdGV4IGF1cyBkYXRhLWJhY2staW1hZ2UsIERhdGVpIGplIE1hcmtlIGluIGludGVybmFsL2JyYW5kKS4gKi9cbi5jYWwzZC1iYWNrIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jYWwzZC1ib2FyZCk7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdmFyKC0tY2FsM2QtYmFjay10ZXgsIGxpbmVhci1ncmFkaWVudChyZ2JhKDAsIDAsIDAsIDAuMDYpLCByZ2JhKDAsIDAsIDAsIDAuMDYpKSk7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCU7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbn1cblxuLmNhbDNkLmhhcy1iYWNrIC5jYWwzZC1iYWNrIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xufVxuXG4uY2FsM2QtdG9wIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jYWwzZC13cmFwKTtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQocmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KSwgcmdiYSgwLCAwLCAwLCAwLjAyKSk7XG59XG5cbi5jYWwzZC1ib3R0b20ge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNhbDNkLXdyYXApO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChyZ2JhKDAsIDAsIDAsIDAuMjYpLCByZ2JhKDAsIDAsIDAsIDAuMjYpKTtcbn1cblxuLmNhbDNkLXNpZGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNhbDNkLXdyYXApO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChyZ2JhKDAsIDAsIDAsIDAuMTIpLCByZ2JhKDAsIDAsIDAsIDAuMTIpKTtcbn1cblxuLyogVMO8cmNoZW46IGVpbiBFbGVtZW50IGplIFBsYXR6LCBlaW4gb2RlciB6d2VpIEZsw7xnZWwgKi9cbi5jYWwzZC1kb29yIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgb3V0bGluZTogbm9uZTtcbn1cblxuLmNhbDNkLWRvb3I6Zm9jdXMtdmlzaWJsZSB7XG4gICAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICAgIG91dGxpbmUtb2Zmc2V0OiAycHg7XG59XG5cbi5jYWwzZC13aW5nIHtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC42NXMgdmFyKC0tY2FsM2QtZWFzZSk7XG4gICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTtcbn1cblxuLmNhbDNkLXdpbmdbZGF0YS1oaW5nZT1cImxlZnRcIl0gICB7IHRyYW5zZm9ybS1vcmlnaW46IDAgNTAlOyB9XG4uY2FsM2Qtd2luZ1tkYXRhLWhpbmdlPVwicmlnaHRcIl0gIHsgdHJhbnNmb3JtLW9yaWdpbjogMTAwJSA1MCU7IH1cbi5jYWwzZC13aW5nW2RhdGEtaGluZ2U9XCJ0b3BcIl0gICAgeyB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgMDsgfVxuLmNhbDNkLXdpbmdbZGF0YS1oaW5nZT1cImJvdHRvbVwiXSB7IHRyYW5zZm9ybS1vcmlnaW46IDUwJSAxMDAlOyB9XG5cbi8qIMOWZmZudW5nc3dpbmtlbCBqZSBUw7xyIGluIC0tb3BlbiAoR3JhZCwgdm9tIFNrcmlwdCBnZXNldHp0KSAqL1xuLmNhbDNkLWRvb3IuaXMtb3BlbiAuY2FsM2Qtd2luZ1tkYXRhLWhpbmdlPVwibGVmdFwiXSAgIHsgdHJhbnNmb3JtOiByb3RhdGVZKGNhbGModmFyKC0tb3BlbiwgMTEwKSAqIC0xZGVnKSk7IH1cbi5jYWwzZC1kb29yLmlzLW9wZW4gLmNhbDNkLXdpbmdbZGF0YS1oaW5nZT1cInJpZ2h0XCJdICB7IHRyYW5zZm9ybTogcm90YXRlWShjYWxjKHZhcigtLW9wZW4sIDExMCkgKiAxZGVnKSk7IH1cbi5jYWwzZC1kb29yLmlzLW9wZW4gLmNhbDNkLXdpbmdbZGF0YS1oaW5nZT1cInRvcFwiXSAgICB7IHRyYW5zZm9ybTogcm90YXRlWChjYWxjKHZhcigtLW9wZW4sIDExMCkgKiAxZGVnKSk7IH1cbi5jYWwzZC1kb29yLmlzLW9wZW4gLmNhbDNkLXdpbmdbZGF0YS1oaW5nZT1cImJvdHRvbVwiXSB7IHRyYW5zZm9ybTogcm90YXRlWChjYWxjKHZhcigtLW9wZW4sIDExMCkgKiAtMWRlZykpOyB9XG5cbi5jYWwzZC13aW5nLWZhY2Uge1xuICAgIGluc2V0OiAwO1xuICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbn1cblxuLyogU2ljaHRiYXJlIFNlaXRlIGplIEZsw7xnZWwsIHZvbSBTa3JpcHQgYmVyZWNobmV0IChkYXRhLWZhY2luZykg4oCUIEVyc2F0eiBmw7xyXG4gICBiYWNrZmFjZS12aXNpYmlsaXR5IGluIEVuZ2luZXMsIGRpZSBlcyBpbSAzRC1Lb250ZXh0IGlnbm9yaWVyZW4gKGlQaG9uZS1CdWdcbiAgIDIwMjYtMTAtMTIsIENhbGVuZGFyM0Quc3luY0ZhY2luZykuICovXG4uY2FsM2Qtd2luZ1tkYXRhLWZhY2luZz1cImJhY2tcIl0gLmNhbDNkLXdpbmctZnJvbnQsXG4uY2FsM2Qtd2luZ1tkYXRhLWZhY2luZz1cImZyb250XCJdIC5jYWwzZC13aW5nLWJhY2sge1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cblxuLmNhbDNkLXdpbmctZnJvbnQge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdmFyKC0tY2FsM2QtdGV4LCBub25lKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNhbGModmFyKC0tdSkgKiAzMzApIGNhbGModmFyKC0tdSkgKiAyNDApO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgLyogZmVpbmUgU2Nobml0dGthbnRlLCBkYW1pdCBkaWUgVMO8ciBhdWNoIG9obmUgU3RhbnpsaW5pZSBpbSBCaWxkIGFibGVzYmFyIGJsZWlidCAqL1xuICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCByZ2JhKDAsIDAsIDAsIDAuMDYpO1xufVxuXG4uY2FsM2Qtd2luZy1iYWNrIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZVkoMTgwZGVnKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jYWwzZC1ib2FyZCk7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHJnYmEoMCwgMCwgMCwgMC4wNCksIHJnYmEoMCwgMCwgMCwgMC4xKSk7XG59XG5cbi8qIE51bW1lcm4tQ2hpcCwgc29sYW5nZSBub2NoIGtlaW5lIFRleHR1ciBkYSBpc3QgKE9wdGlrIHdpZSBLb25maWd1cmF0b3IvRHJ1Y2spICovXG4uY2FsM2QtY2hpcCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogNTAlO1xuICAgIHRvcDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHRyYW5zbGF0ZVooY2FsYyh2YXIoLS11KSAqIDAuMykpO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWJvZHkpO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgZm9udC1zaXplOiBjYWxjKHZhcigtLXUpICogOSk7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcbiAgICB0ZXh0LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC43KTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNCk7XG4gICAgcGFkZGluZzogMC4xZW0gMC41ZW07XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLmNhbDNkOm5vdCguaGFzLXRleHR1cmUpIC5jYWwzZC1kb29yOm5vdCguaXMtb3BlbikgLmNhbDNkLWNoaXAge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vKiBJbm5lbmxlYmVuOiBCb2RlbiwgdmllciBXw6RuZGUsIGVpbiBGYWNoIGplIFTDvHJjaGVuICovXG4uY2FsM2QtdHJheSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKGNhbGModmFyKC0tdSkgKiB2YXIoLS1wdWxsLCAwKSkpO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjhzIHZhcigtLWNhbDNkLWVhc2UpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBvdXRsaW5lOiBub25lO1xufVxuXG4uY2FsM2QtdHJheTpmb2N1cy12aXNpYmxlIC5jYWwzZC10cmF5LXdhbGwge1xuICAgIG91dGxpbmU6IDJweCBzb2xpZCB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbn1cblxuLmNhbDNkLXRyYXktZmxvb3Ige1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNhbDNkLXRyYXkpO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChyZ2JhKDAsIDAsIDAsIDAuMDUpLCByZ2JhKDAsIDAsIDAsIDAuMDUpKTtcbn1cblxuLmNhbDNkLXRyYXktd2FsbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY2FsM2QtdHJheSk7XG59XG5cbi5jYWwzZC10cmF5LXdhbGwtLWxlZnQgICB7IGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgcmdiYSgwLCAwLCAwLCAwLjEpLCByZ2JhKDAsIDAsIDAsIDAuMTgpKTsgfVxuLmNhbDNkLXRyYXktd2FsbC0tcmlnaHQgIHsgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDkwZGVnLCByZ2JhKDAsIDAsIDAsIDAuMTgpLCByZ2JhKDAsIDAsIDAsIDAuMSkpOyB9XG4uY2FsM2QtdHJheS13YWxsLS10b3AgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQocmdiYSgwLCAwLCAwLCAwLjAyKSwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7IH1cbi5jYWwzZC10cmF5LXdhbGwtLWJvdHRvbSB7IGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChyZ2JhKDAsIDAsIDAsIDAuMjgpLCByZ2JhKDAsIDAsIDAsIDAuMikpOyB9XG5cbi8qIEdyaWZmd2FuZCAoQXVzZ2FuZ3NzZWl0ZSk6IGxlaWNodGUgRGF1bWVubXVsZGUgYWxzIEhpbndlaXMgenVtIFppZWhlbiAqL1xuLmNhbDNkLXRyYXktaGFuZGxlIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOlxuICAgICAgICByYWRpYWwtZ3JhZGllbnQoZWxsaXBzZSBhdCA1MCUgNTAlLCByZ2JhKDAsIDAsIDAsIDAuMjgpIDAsIHJnYmEoMCwgMCwgMCwgMC4yOCkgY2FsYyh2YXIoLS11KSAqIDMuMiksIHJnYmEoMCwgMCwgMCwgMCkgY2FsYyh2YXIoLS11KSAqIDMuOCkpLFxuICAgICAgICBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHJnYmEoMCwgMCwgMCwgMC4xKSwgcmdiYSgwLCAwLCAwLCAwLjE4KSk7XG59XG5cbi5jYWwzZC1jZWxsLWZsb29yIHtcbiAgICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoZWxsaXBzZSBhdCA1MCUgNDIlLCByZ2JhKDAsIDAsIDAsIDAuMDIpIDAlLCByZ2JhKDAsIDAsIDAsIDAuMTQpIDEwMCUpLCB2YXIoLS1jYWwzZC10cmF5KTtcbn1cblxuLmNhbDNkLWNlbGwtd2FsbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY2FsM2QtdHJheSk7XG59XG5cbi5jYWwzZC1jZWxsLXdhbGwtLWxlZnQgICB7IGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChyZ2JhKDAsIDAsIDAsIDAuMTQpLCByZ2JhKDAsIDAsIDAsIDAuMTQpKTsgfVxuLmNhbDNkLWNlbGwtd2FsbC0tcmlnaHQgIHsgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHJnYmEoMCwgMCwgMCwgMC4wNiksIHJnYmEoMCwgMCwgMCwgMC4wNikpOyB9XG4uY2FsM2QtY2VsbC13YWxsLS10b3AgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQocmdiYSgwLCAwLCAwLCAwLjIyKSwgcmdiYSgwLCAwLCAwLCAwLjIyKSk7IH1cbi5jYWwzZC1jZWxsLXdhbGwtLWJvdHRvbSB7IGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChyZ2JhKDAsIDAsIDAsIDAuMDMpLCByZ2JhKDAsIDAsIDAsIDAuMDMpKTsgfVxuXG4vKiAtLS0tIFJlc3BvbnNpdiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xuICAgIC5jYWxlbmRhci0zZC1jYXJkIHtcbiAgICAgICAgcGFkZGluZzogdmFyKC0tc3BhY2UtMyk7XG4gICAgfVxuXG4gICAgLmNhbGVuZGFyLTNkLXZpZXdwb3J0IHtcbiAgICAgICAgYXNwZWN0LXJhdGlvOiA0IC8gMztcbiAgICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgIC5jYWxlbmRhci0zZC1jb250cm9scyAuYnRuIHtcbiAgICAgICAgZmxleDogMSAxIDEwMCU7XG4gICAgfVxufVxuXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAgIC5jYWwzZC13b3JsZCxcbiAgICAuY2FsM2Qtd2luZyxcbiAgICAuY2FsM2QtdHJheSB7XG4gICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDFzO1xuICAgIH1cbn1cbiJdfQ== */