{"version":3,"sources":["../../.yarn/cache/browser-pack-npm-6.1.0-67557e011b-9e5993d3ee.zip/node_modules/browser-pack/_prelude.js","public/ecmascript/components/app-badge/app-badge.html.js","public/ecmascript/components/kanopy/kanopy-nav.html.js","public/ecmascript/components/kanopy/kanopy-promo-view.html.js","public/ecmascript/components/kanopy/kanopy-promo-view.js","public/ecmascript/pages/kanopy.js"],"names":[],"mappings":"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","file":"kanopy.bundle.min.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()","import { toStaticUrl } from '../../../../lib/assetMapper';\n\nconst getLocaleWithoutSubtag = (locale) => {\n    const subtagIndex = locale.indexOf('-');\n    return subtagIndex > 0 ? locale.substr(0, subtagIndex) : locale;\n};\n\nconst getLocaleSpecificUrl = (locale, urlHandler) =>\n    urlHandler(locale) ||\n    urlHandler(getLocaleWithoutSubtag(locale)) ||\n    urlHandler('en');\n\nconst getStaticUrlHandler = (urlResolver) => (locale) => {\n    const url = toStaticUrl(urlResolver(locale));\n    return url.endsWith('undefined') ? undefined : url;\n};\n\nconst getLocaleStaticUrl = (locale, urlResolver) =>\n    getLocaleSpecificUrl(locale, getStaticUrlHandler(urlResolver));\n\nconst appBadge = ({ alt, href, id, src }) => `\n<a class=\"app-store-badge__link\"\n   href=\"${href}\"\n   rel=\"noreferrer\"\n   target=\"_blank\">\n    <img alt=\"${alt}\"  \n        class=\"app-store-badge__icon\"\n        ${id ? `id=\"${id}\"` : ''}\n        src=\"${src}\" />\n</a>\n`;\n\nexport const appleAppStoreBadge = ({\n    highContrast,\n    href,\n    id,\n    userLanguageCode,\n}) => {\n    const src = highContrast\n        ? getLocaleStaticUrl(\n              userLanguageCode,\n              (locale) => `img/apple-app-store/badges/${locale}-hcm.svg`\n          )\n        : getLocaleStaticUrl(\n              userLanguageCode,\n              (locale) => `img/apple-app-store/badges/${locale}.svg`\n          );\n    return appBadge({\n        alt: html('apps.badges.appleAppStore'),\n        href,\n        id,\n        src,\n    });\n};\n\nexport const googlePlayStoreBadge = ({\n    highContrast,\n    href,\n    id,\n    userLanguageCode,\n}) => {\n    const src = highContrast\n        ? getLocaleStaticUrl(\n              userLanguageCode,\n              (locale) => `img/google-play-store/badges/${locale}-hcm.svg`\n          )\n        : getLocaleStaticUrl(\n              userLanguageCode,\n              (locale) => `img/google-play-store/badges/${locale}.svg`\n          );\n    return appBadge({\n        alt: html('apps.badges.googlePlayStore'),\n        href,\n        id,\n        src,\n    });\n};\n","import { toStaticUrl } from '../../../../lib/assetMapper';\n\nconst { html } = window;\n\nconst languageListItem = ({ highContrast, language, userLanguageCode }) => {\n    const selected = userLanguageCode === language.defaultLanguageCode;\n    const checkmarkSrc = highContrast\n        ? toStaticUrl('img/kanopy/checkmark-hc.svg')\n        : toStaticUrl('img/kanopy/checkmark.svg');\n    return `\n<li class=\"kanopy-nav__language-popover-item\"\n    role=\"none\">\n    <button class=\"js-languageLink ${selected ? 'selected' : ''}\"\n        data-code=\"${language.defaultLanguageCode}\"\n        role=\"menuitem\">\n        ${language.nativeDisplayName}\n\n        ${selected ? `\n        <img alt=\"${html('kanopy.selectedLanguage')}\"\n                src=\"${checkmarkSrc}\" />\n        ` : ''}\n    </button>\n</li>\n    `;\n};\n\nconst languagePopover = ({ highContrast, languages, userLanguageCode }) => `\n<ul aria-hidden=\"true\" \n    class=\"f-dropdown kanopy-nav__language-popover\" \n    data-dropdown-content  \n    id=\"language-dropdown\"\n    role=\"menu\">\n    ${languages.map((language) => languageListItem({ highContrast, language, userLanguageCode })).join('')}\n</ul>\n`;\n\nconst languageSelector = ({ userLanguageDisplayName }) => `\n<button aria-controls=\"language-dropdown\" \n        aria-expanded=\"false\"\n        aria-haspopup=\"menu\"\n        class=\"kanopy-nav__language-dropdown-button\" \n        data-dropdown=\"language-dropdown\"\n        id=\"language-dropdown-button\"\n        role=\"menuitem\"\n        type=\"button\">\n    <span class=\"js-langDisplayText\">\n        ${userLanguageDisplayName}\n    </span>\n\n    <img alt role=\"presentation\"\n         src=\"${toStaticUrl('img/kanopy/chevron-down.svg')}\" />\n</button>\n`;\n\nexport const kanopyNav = ({\n    highContrast,\n    languages,\n    userLanguageCode,\n    userLanguageDisplayName\n}) => {\n    const showLanguageSelector = languages.length > 1\n        || (userLanguageCode && userLanguageCode !== languages[0].defaultLanguageCode);\n    return `\n<nav aria-label=\"${html('kanopy.kanopy')}\"\n     class=\"kanopy-nav\" \n     role=\"menubar\">\n    <div role=\"none\">\n        <img alt=\"${html('kanopy.kanopy')}\" \n             src=\"${toStaticUrl('img/kanopy/logo-kanopy-off-white.svg')}\" />\n    </div>\n\n    <div class=\"kanopy-nav__language js-languageSelection\"\n         role=\"none\">\n        ${showLanguageSelector ? languageSelector({ userLanguageDisplayName }) : ''}\n        \n        ${languagePopover({ highContrast, languages, userLanguageCode })}\n    </div>\n</nav>\n    `;\n};\n","import { toStaticUrl } from '../../../../lib/assetMapper';\nimport {\n    appleAppStoreBadge,\n    googlePlayStoreBadge,\n} from '../app-badge/app-badge.html';\nimport { kanopyNav } from './kanopy-nav.html';\n\nconst { html } = window;\nconst APPLE_APP_STORE_URL =\n    'https://apps.apple.com/app/apple-store/id1205614510?pt=118563515&ct=lightning_promo&mt=8&utm_source=lightning&utm_medium=kanopy_promo&utm_campaign=ODVsunset';\nconst GOOGLE_PLAY_STORE_URL =\n    'https://play.google.com/store/apps/details?id=com.kanopy&referrer=utm_source%3Dlightning%26utm_medium%3Dkanopy_promo%26utm_campaign%3DODVsunset';\n\nexport const kanopyPromoViewTemplate = ({\n    backToLibraryUrl,\n    highContrast,\n    kanopySignUpUrl,\n    languages,\n    libraryName,\n    showCtaButton,\n    showDownloadText,\n    userLanguageCode,\n    userLanguageDisplayName,\n}) => `\n<div class=\"kanopy-main\">\n    ${kanopyNav({\n        backToLibraryUrl,\n        highContrast,\n        languages,\n        userLanguageCode,\n        userLanguageDisplayName,\n    })}\n\n    <div class=\"kanopy-nav-spacer\"></div>\n\n    <section class=\"kanopy-section kanopy-section__back-link\">\n        <a class=\"kanopy-nav__back-link\" \n           href=\"${backToLibraryUrl}\"\n           id=\"kanopy-promo-back-button\">\n            <img alt class=\"kanopy-nav__back-link--default\"\n                role=\"presentation\"\n                src=\"${toStaticUrl('img/kanopy/back-icon-outline.svg')}\" />\n                \n            ${\n                highContrast\n                    ? `\n            <img alt class=\"kanopy-nav__back-link--focus\"\n                role=\"presentation\" \n                src=\"${toStaticUrl('img/kanopy/back-icon-hc.svg')}\" />\n            `\n                    : `\n            <img alt class=\"kanopy-nav__back-link--focus\"\n                role=\"presentation\" \n                src=\"${toStaticUrl('img/kanopy/back-icon-solid.svg')}\" />\n            `\n            }\n\n            ${html('kanopy.backToLibrary')}\n        </a>\n    </section>\n\n    <section class=\"kanopy-section\">\n        <p class=\"kanopy__heading-eyebrow\">\n            ${libraryName}\n        </p>\n\n        <h1 class=\"kanopy__heading-1\">\n            ${html('kanopy.heading')}\n        </h1>\n\n        <p class=\"kanopy__content--copy\">\n            ${html('kanopy.copy')}\n        </p>\n\n        <p class=\"kanopy__cta\">\n            ${\n                showCtaButton\n                    ? `\n            <a class=\"kanopy-button--cta\"\n               href=\"${kanopySignUpUrl}\" \n               id=\"kanopy-promo-cta-button\"\n               rel=\"noreferrer\"\n               target=\"_blank\">\n                ${html('kanopy.cta')}\n            </a>\n            `\n                    : ''\n            }\n        </p>\n    </section>\n\n    <section class=\"kanopy-section\">\n        <p class=\"kanopy__content\">\n            ${showDownloadText ? html('kanopy.downloadMobileApp') : ''}\n        </p>\n\n        <p class=\"kanopy__app-store-badges\">\n            ${appleAppStoreBadge({\n                highContrast,\n                href: APPLE_APP_STORE_URL,\n                id: 'kanopy-promo-apple-button',\n                userLanguageCode,\n            })}\n\n            ${googlePlayStoreBadge({\n                highContrast,\n                href: GOOGLE_PLAY_STORE_URL,\n                id: 'kanopy-promo-google-button',\n                userLanguageCode,\n            })}\n        </p>\n    </section>\n\n    <section class=\"kanopy-section\">\n        <p class=\"kanopy__available-on\">\n            ${html('kanopy.alsoAvailableOn')}:\n            \n            <img alt=\"${html('apps.svod.appleTv')}\"\n                src=\"${toStaticUrl('img/kanopy/logo-apple-tv.svg')}\" />\n            <img alt=\"${html('apps.svod.androidTv')}\"\n                src=\"${toStaticUrl('img/kanopy/logo-androidtv.svg')}\" />\n            <img alt=\"${html('apps.svod.chromecast')}\"\n                src=\"${toStaticUrl('img/kanopy/logo-chromecast.svg')}\" />\n            <img alt=\"${html('apps.svod.roku')}\"\n                src=\"${toStaticUrl('img/kanopy/logo-roku.svg')}\" />\n            <img alt=\"${html('apps.svod.fireTv')}\"\n                src=\"${toStaticUrl('img/kanopy/logo-firetv.svg')}\" />\n            <img alt=\"${html('apps.svod.fireTablet')}\"\n                src=\"${toStaticUrl('img/kanopy/logo-firetablet.svg')}\" />\n            <img alt=\"${html('apps.svod.samsung')}\"\n                src=\"${toStaticUrl('img/kanopy/logo-samsung.svg')}\" />\n        </p>\n    </section>\n\n    <div class=\"kanopy-sunrise-spacer\"></div>\n    <div class=\"kanopy-sunrise-bar\"></div>\n</div>\n`;\n","import { toStaticUrl } from '../../../../lib/assetMapper';\nimport { kanopyPromoViewTemplate } from './kanopy-promo-view.html';\n\nconst { bowser } = window;\n\nexport class KanopyPromoView extends Backbone.View {\n    $promoViewEl;\n    backToLibraryUrl;\n    highContrast;\n    inApp;\n    isTolinoDevice;\n    kanopySignUpUrl;\n    languages;\n    libraryName;\n    userLanguageCode;\n    userLanguageDisplayName;\n    kanopyImageUrls;\n\n    constructor({\n        backToLibraryUrl,\n        highContrast,\n        inApp,\n        isTolinoDevice,\n        kanopySignUpUrl,\n        languages,\n        libraryName,\n        userLanguageCode,\n        userLanguageDisplayName,\n        kanopyImageUrls,\n    }) {\n        super(...arguments);\n\n        this.backToLibraryUrl = backToLibraryUrl;\n        this.highContrast = highContrast;\n        this.inApp = inApp;\n        this.isTolinoDevice = isTolinoDevice;\n        this.kanopySignUpUrl = kanopySignUpUrl;\n        this.languages = languages;\n        this.libraryName = libraryName;\n        this.userLanguageCode = userLanguageCode;\n        this.userLanguageDisplayName = userLanguageDisplayName;\n        this.kanopyImageUrls = kanopyImageUrls;\n\n        this.render();\n    }\n\n    render() {\n        if (this.$promoViewEl) {\n            return;\n        }\n\n        const { mobile, tablet } = bowser;\n        const promoteApp =\n            mobile || tablet || this.inApp || this.isTolinoDevice;\n\n        const promoHtml = kanopyPromoViewTemplate({\n            backToLibraryUrl: this.backToLibraryUrl,\n            highContrast: this.highContrast,\n            kanopySignUpUrl: this.kanopySignUpUrl,\n            languages: this.languages,\n            libraryName: this.libraryName,\n            showCtaButton: !promoteApp,\n            showDownloadText: promoteApp,\n            userLanguageCode: this.userLanguageCode,\n            userLanguageDisplayName: this.userLanguageDisplayName,\n        });\n        this.$promoViewEl = $(promoHtml);\n        this.$el.append(this.$promoViewEl);\n\n        if (\n            !this.highContrast &&\n            !this.isTolinoDevice &&\n            !window.featureManager.isEnabled('hide-kanopy-covers')\n        ) {\n            if (this.kanopyImageUrls && this.kanopyImageUrls.length > 0) {\n                const randomIndex = Math.floor(\n                    Math.random() * this.kanopyImageUrls.length\n                );\n                this._setBackgroundImage(this.kanopyImageUrls[randomIndex]);\n            }\n        }\n\n        this.$el.foundation('dropdown');\n\n        this.$el\n            .find('.kanopy-nav__language-dropdown-button')\n            .on('click press', (event) => {\n                this._focusFirstLanguageMenuItem(event);\n            });\n\n        this.$el.find('.kanopy-nav__language').on('focusout', () => {\n            this._closeLanguageDropdown();\n        });\n\n        return this;\n    }\n\n    _closeLanguageDropdown() {\n        setTimeout(() => {\n            // Wait until the next element is active, since we don't know who we're blurring to from the event\n            if (\n                $(document.activeElement).parents('.kanopy-nav__language')\n                    .length === 0\n            ) {\n                this.$el.foundation('dropdown', 'closeall');\n            }\n        });\n    }\n\n    _focusFirstLanguageMenuItem(event) {\n        setTimeout(() => {\n            // Let Foundation handle the event and show the dropdown first\n            const menuItem = $(event.currentTarget);\n\n            const languageMenuId = menuItem.attr('aria-controls');\n            const languageMenu = $(`#${languageMenuId}`);\n\n            const isExpanded = menuItem.attr('aria-expanded');\n            if (isExpanded === 'true' && languageMenu) {\n                languageMenu.find('[role=menuitem]').first().trigger('focus');\n            }\n        });\n    }\n\n    _setBackgroundImage(imageUrl) {\n        const mainEl = this.$el.find('.kanopy-main');\n        mainEl.css(\n            'background-image',\n            `\n          linear-gradient(\n            106.84deg,\n            #1a1a1a 29.97%,\n            rgba(26, 26, 26, 0) 85.33%\n          ),\n          url(\"${imageUrl}\")\n        `\n        );\n    }\n}\n\nexport default KanopyPromoView;\n","import { KanopyPromoView } from '../components/kanopy/kanopy-promo-view';\n\nvoid new KanopyPromoView({\n    el: '.container',\n    backToLibraryUrl: window.OverDrive.kanopy.backToLibraryUrl,\n    highContrast: window.OverDrive.kanopy.highContrast,\n    inApp: window.OverDrive.kanopy.inApp,\n    isTolinoDevice: window.OverDrive.kanopy.isTolinoDevice,\n    kanopySignUpUrl: window.OverDrive.kanopy.kanopySignUpUrl,\n    languages: window.OverDrive.kanopy.languages,\n    libraryName: window.OverDrive.kanopy.libraryName,\n    userLanguageCode: window.OverDrive.kanopy.userLanguageCode,\n    userLanguageDisplayName: window.OverDrive.kanopy.userLanguageDisplayName,\n    kanopyImageUrls: window.OverDrive.kanopy.kanopyImageUrls,\n});\n"],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy55YXJuL2NhY2hlL2Jyb3dzZXItcGFjay1ucG0tNi4xLjAtNjc1NTdlMDExYi05ZTU5OTNkM2VlLnppcC9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9hcHAtYmFkZ2UvYXBwLWJhZGdlLmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL2thbm9weS9rYW5vcHktbmF2Lmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL2thbm9weS9rYW5vcHktcHJvbW8tdmlldy5odG1sLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9rYW5vcHkva2Fub3B5LXByb21vLXZpZXcuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9wYWdlcy9rYW5vcHkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0FDQUE7O0FBRUEsSUFBTSx5QkFBeUIsU0FBekIsc0JBQXlCLENBQUMsTUFBRCxFQUFZO0FBQ3ZDLFFBQU0sY0FBYyxPQUFPLE9BQVAsQ0FBZSxHQUFmLENBQXBCO0FBQ0EsV0FBTyxjQUFjLENBQWQsR0FBa0IsT0FBTyxNQUFQLENBQWMsQ0FBZCxFQUFpQixXQUFqQixDQUFsQixHQUFrRCxNQUF6RDtBQUNILENBSEQ7O0FBS0EsSUFBTSx1QkFBdUIsU0FBdkIsb0JBQXVCLENBQUMsTUFBRCxFQUFTLFVBQVQ7QUFBQSxXQUN6QixXQUFXLE1BQVgsS0FDQSxXQUFXLHVCQUF1QixNQUF2QixDQUFYLENBREEsSUFFQSxXQUFXLElBQVgsQ0FIeUI7QUFBQSxDQUE3Qjs7QUFLQSxJQUFNLHNCQUFzQixTQUF0QixtQkFBc0IsQ0FBQyxXQUFEO0FBQUEsV0FBaUIsVUFBQyxNQUFELEVBQVk7QUFDckQsWUFBTSxNQUFNLDhCQUFZLFlBQVksTUFBWixDQUFaLENBQVo7QUFDQSxlQUFPLElBQUksUUFBSixDQUFhLFdBQWIsSUFB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QUFNckIscUJBQWlCLE9BQU8sU0FBUCxDQUFpQixNQUFqQixDQUF3QixlQU5wQjtBQU9yQixlQUFXLE9BQU8sU0FBUCxDQUFpQixNQUFqQixDQUF3QixTQVBkO0FBUXJCLGlCQUFhLE9BQU8sU0FBUCxDQUFpQixNQUFqQixDQUF3QixXQVJoQjtBQVNyQixzQkFBa0IsT0FBTyxTQUFQLENBQWlCLE1BQWpCLENBQXdCLGdCQVRyQjtBQVVyQiw2QkFBeUIsT0FBTyxTQUFQLENBQWlCLE1BQWpCLENBQXdCLHVCQVY1QjtBQVdyQixxQkFBaUIsT0FBTyxTQUFQLENBQWlCLE1BQWpCLENBQXdCO0FBWHBCLENBQXBCLENBQUwiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCJpbXBvcnQgeyB0b1N0YXRpY1VybCB9IGZyb20gJy4uLy4uLy4uLy4uL2xpYi9hc3NldE1hcHBlcic7XG5cbmNvbnN0IGdldExvY2FsZVdpdGhvdXRTdWJ0YWcgPSAobG9jYWxlKSA9PiB7XG4gICAgY29uc3Qgc3VidGFnSW5kZXggPSBsb2NhbGUuaW5kZXhPZignLScpO1xuICAgIHJldHVybiBzdWJ0YWdJbmRleCA+IDAgPyBsb2NhbGUuc3Vic3RyKDAsIHN1YnRhZ0luZGV4KSA6IGxvY2FsZTtcbn07XG5cbmNvbnN0IGdldExvY2FsZVNwZWNpZmljVXJsID0gKGxvY2FsZSwgdXJsSGFuZGxlcikgPT5cbiAgICB1cmxIYW5kbGVyKGxvY2FsZSkgfHxcbiAgICB1cmxIYW5kbGVyKGdldExvY2FsZVdpdGhvdXRTdWJ0YWcobG9jYWxlKSkgfHxcbiAgICB1cmxIYW5kbGVyKCdlbicpO1xuXG5jb25zdCBnZXRTdGF0aWNVcmxIYW5kbGVyID0gKHVybFJlc29sdmVyKSA9PiAobG9jYWxlKSA9PiB7XG4gICAgY29uc3QgdXJsID0gdG9TdGF0aWNVcmwodXJsUmVzb2x2ZXIobG9jYWxlKSk7XG4gICAgcmV0dXJuIHVybC5lbmRzV2l0aCgndW5kZWZpbmVkJykgPyB1bmRlZmluZWQgOiB1cmw7XG59O1xuXG5jb25zdCBnZXRMb2NhbGVTdGF0aWNVcmwgPSAobG9jYWxlLCB1cmxSZXNvbHZlcikgPT5cbiAgICBnZXRMb2NhbGVTcGVjaWZpY1VybChsb2NhbGUsIGdldFN0YXRpY1VybEhhbmRsZXIodXJsUmVzb2x2ZXIpKTtcblxuY29uc3QgYXBwQmFkZ2UgPSAoeyBhbHQsIGhyZWYsIGlkLCBzcmMgfSkgPT4gYFxuPGEgY2xhc3M9XCJhcHAtc3RvcmUtYmFkZ2VfX2xpbmtcIlxuICAgaHJlZj1cIiR7aHJlZn1cIlxuICAgcmVsPVwibm9yZWZlcnJlclwiXG4gICB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICA8aW1nIGFsdD1cIiR7YWx0fVwiICBcbiAgICAgICAgY2xhc3M9XCJhcHAtc3RvcmUtYmFkZ2VfX2ljb25cIlxuICAgICAgICAke2lkID8gYGlkPVwiJHtpZH1cImAgOiAnJ31cbiAgICAgICAgc3JjPVwiJHtzcmN9XCIgLz5cbjwvYT5cbmA7XG5cbmV4cG9ydCBjb25zdCBhcHBsZUFwcFN0b3JlQmFkZ2UgPSAoe1xuICAgIGhpZ2hDb250cmFzdCxcbiAgICBocmVmLFxuICAgIGlkLFxuICAgIHVzZXJMYW5ndWFnZUNvZGUsXG59KSA9PiB7XG4gICAgY29uc3Qgc3JjID0gaGlnaENvbnRyYXN0XG4gICAgICAgID8gZ2V0TG9jYWxlU3RhdGljVXJsKFxuICAgICAgICAgICAgICB1c2VyTGFuZ3VhZ2VDb2RlLFxuICAgICAgICAgICAgICAobG9jYWxlKSA9PiBgaW1nL2FwcGxlLWFwcC1zdG9yZS9iYWRnZXMvJHtsb2NhbGV9LWhjbS5zdmdgXG4gICAgICAgICAgKVxuICAgICAgICA6IGdldExvY2FsZVN0YXRpY1VybChcbiAgICAgICAgICAgICAgdXNlckxhbmd1YWdlQ29kZSxcbiAgICAgICAgICAgICAgKGxvY2FsZSkgPT4gYGltZy9hcHBsZS1hcHAtc3RvcmUvYmFkZ2VzLyR7bG9jYWxlfS5zdmdgXG4gICAgICAgICAgKTtcbiAgICByZXR1cm4gYXBwQmFkZ2Uoe1xuICAgICAgICBhbHQ6IGh0bWwoJ2FwcHMuYmFkZ2VzLmFwcGxlQXBwU3RvcmUnKSxcbiAgICAgICAgaHJlZixcbiAgICAgICAgaWQsXG4gICAgICAgIHNyYyxcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnb29nbGVQbGF5U3RvcmVCYWRnZSA9ICh7XG4gICAgaGlnaENvbnRyYXN0LFxuICAgIGhyZWYsXG4gICAgaWQsXG4gICAgdXNlckxhbmd1YWdlQ29kZSxcbn0pID0+IHtcbiAgICBjb25zdCBzcmMgPSBoaWdoQ29udHJhc3RcbiAgICAgICAgPyBnZXRMb2NhbGVTdGF0aWNVcmwoXG4gICAgICAgICAgICAgIHVzZXJMYW5ndWFnZUNvZGUsXG4gICAgICAgICAgICAgIChsb2NhbGUpID0+IGBpbWcvZ29vZ2xlLXBsYXktc3RvcmUvYmFkZ2VzLyR7bG9jYWxlfS1oY20uc3ZnYFxuICAgICAgICAgIClcbiAgICAgICAgOiBnZXRMb2NhbGVTdGF0aWNVcmwoXG4gICAgICAgICAgICAgIHVzZXJMYW5ndWFnZUNvZGUsXG4gICAgICAgICAgICAgIChsb2NhbGUpID0+IGBpbWcvZ29vZ2xlLXBsYXktc3RvcmUvYmFkZ2VzLyR7bG9jYWxlfS5zdmdgXG4gICAgICAgICAgKTtcbiAgICByZXR1cm4gYXBwQmFkZ2Uoe1xuICAgICAgICBhbHQ6IGh0bWwoJ2FwcHMuYmFkZ2VzLmdvb2dsZVBsYXlTdG9yZScpLFxuICAgICAgICBocmVmLFxuICAgICAgICBpZCxcbiAgICAgICAgc3JjLFxuICAgIH0pO1xufTtcbiIsImltcG9ydCB7IHRvU3RhdGljVXJsIH0gZnJvbSAnLi4vLi4vLi4vLi4vbGliL2Fzc2V0TWFwcGVyJztcblxuY29uc3QgeyBodG1sIH0gPSB3aW5kb3c7XG5cbmNvbnN0IGxhbmd1YWdlTGlzdEl0ZW0gPSAoeyBoaWdoQ29udHJhc3QsIGxhbmd1YWdlLCB1c2VyTGFuZ3VhZ2VDb2RlIH0pID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHVzZXJMYW5ndWFnZUNvZGUgPT09IGxhbmd1YWdlLmRlZmF1bHRMYW5ndWFnZUNvZGU7XG4gICAgY29uc3QgY2hlY2ttYXJrU3JjID0gaGlnaENvbnRyYXN0XG4gICAgICAgID8gdG9TdGF0aWNVcmwoJ2ltZy9rYW5vcHkvY2hlY2ttYXJrLWhjLnN2ZycpXG4gICAgICAgIDogdG9TdGF0aWNVcmwoJ2ltZy9rYW5vcHkvY2hlY2ttYXJrLnN2ZycpO1xuICAgIHJldHVybiBgXG48bGkgY2xhc3M9XCJrYW5vcHktbmF2X19sYW5ndWFnZS1wb3BvdmVyLWl0ZW1cIlxuICAgIHJvbGU9XCJub25lXCI+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImpzLWxhbmd1YWdlTGluayAke3NlbGVjdGVkID8gJ3NlbGVjdGVkJyA6ICcnfVwiXG4gICAgICAgIGRhdGEtY29kZT1cIiR7bGFuZ3VhZ2UuZGVmYXVsdExhbmd1YWdlQ29kZX1cIlxuICAgICAgICByb2xlPVwibWVudWl0ZW1cIj5cbiAgICAgICAgJHtsYW5ndWFnZS5uYXRpdmVEaXNwbGF5TmFtZX1cblxuICAgICAgICAke3NlbGVjdGVkID8gYFxuICAgICAgICA8aW1nIGFsdD1cIiR7aHRtbCgna2Fub3B5LnNlbGVjdGVkTGFuZ3VhZ2UnKX1cIlxuICAgICAgICAgICAgICAgIHNyYz1cIiR7Y2hlY2ttYXJrU3JjfVwiIC8+XG4gICAgICAgIGAgOiAnJ31cbiAgICA8L2J1dHRvbj5cbjwvbGk+XG4gICAgYDtcbn07XG5cbmNvbnN0IGxhbmd1YWdlUG9wb3ZlciA9ICh7IGhpZ2hDb250cmFzdCwgbGFuZ3VhZ2VzLCB1c2VyTGFuZ3VhZ2VDb2RlIH0pID0+IGBcbjx1bCBhcmlhLWhpZGRlbj1cInRydWVcIiBcbiAgICBjbGFzcz1cImYtZHJvcGRvd24ga2Fub3B5LW5hdl9fbGFuZ3VhZ2UtcG9wb3ZlclwiIFxuICAgIGRhdGEtZHJvcGRvd24tY29udGVudCAgXG4gICAgaWQ9XCJsYW5ndWFnZS1kcm9wZG93blwiXG4gICAgcm9sZT1cIm1lbnVcIj5cbiAgICAke2xhbmd1YWdlcy5tYXAoKGxhbmd1YWdlKSA9PiBsYW5ndWFnZUxpc3RJdGVtKHsgaGlnaENvbnRyYXN0LCBsYW5ndWFnZSwgdXNlckxhbmd1YWdlQ29kZSB9KSkuam9pbignJyl9XG48L3VsPlxuYDtcblxuY29uc3QgbGFuZ3VhZ2VTZWxlY3RvciA9ICh7IHVzZXJMYW5ndWFnZURpc3BsYXlOYW1lIH0pID0+IGBcbjxidXR0b24gYXJpYS1jb250cm9scz1cImxhbmd1YWdlLWRyb3Bkb3duXCIgXG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgIGFyaWEtaGFzcG9wdXA9XCJtZW51XCJcbiAgICAgICAgY2xhc3M9XCJrYW5vcHktbmF2X19sYW5ndWFnZS1kcm9wZG93bi1idXR0b25cIiBcbiAgICAgICAgZGF0YS1kcm9wZG93bj1cImxhbmd1YWdlLWRyb3Bkb3duXCJcbiAgICAgICAgaWQ9XCJsYW5ndWFnZS1kcm9wZG93bi1idXR0b25cIlxuICAgICAgICByb2xlPVwibWVudWl0ZW1cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJqcy1sYW5nRGlzcGxheVRleHRcIj5cbiAgICAgICAgJHt1c2VyTGFuZ3VhZ2VEaXNwbGF5TmFtZX1cbiAgICA8L3NwYW4+XG5cbiAgICA8aW1nIGFsdCByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgIHNyYz1cIiR7dG9TdGF0aWNVcmwoJ2ltZy9rYW5vcHkvY2hldnJvbi1kb3duLnN2ZycpfVwiIC8+XG48L2J1dHRvbj5cbmA7XG5cbmV4cG9ydCBjb25zdCBrYW5vcHlOYXYgPSAoe1xuICAgIGhpZ2hDb250cmFzdCxcbiAgICBsYW5ndWFnZXMsXG4gICAgdXNlckxhbmd1YWdlQ29kZSxcbiAgICB1c2VyTGFuZ3VhZ2VEaXNwbGF5TmFtZVxufSkgPT4ge1xuICAgIGNvbnN0IHNob3dMYW5ndWFnZVNlbGVjdG9yID0gbGFuZ3VhZ2VzLmxlbmd0aCA+IDFcbiAgICAgICAgfHwgKHVzZXJMYW5ndWFnZUNvZGUgJiYgdXNlckxhbmd1YWdlQ29kZSAhPT0gbGFuZ3VhZ2VzWzBdLmRlZmF1bHRMYW5ndWFnZUNvZGUpO1xuICAgIHJldHVybiBgXG48bmF2IGFyaWEtbGFiZWw9XCIke2h0bWwoJ2thbm9weS5rYW5vcHknKX1cIlxuICAgICBjbGFzcz1cImthbm9weS1uYXZcIiBcbiAgICAgcm9sZT1cIm1lbnViYXJcIj5cbiAgICA8ZGl2IHJvbGU9XCJub25lXCI+XG4gICAgICAgIDxpbWcgYWx0PVwiJHtodG1sKCdrYW5vcHkua2Fub3B5Jyl9XCIgXG4gICAgICAgICAgICAgc3JjPVwiJHt0b1N0YXRpY1VybCgnaW1nL2thbm9weS9sb2dvLWthbm9weS1vZmYtd2hpdGUuc3ZnJyl9XCIgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJrYW5vcHktbmF2X19sYW5ndWFnZSBqcy1sYW5ndWFnZVNlbGVjdGlvblwiXG4gICAgICAgICByb2xlPVwibm9uZVwiPlxuICAgICAgICAke3Nob3dMYW5ndWFnZVNlbGVjdG9yID8gbGFuZ3VhZ2VTZWxlY3Rvcih7IHVzZXJMYW5ndWFnZURpc3BsYXlOYW1lIH0pIDogJyd9XG4gICAgICAgIFxuICAgICAgICAke2xhbmd1YWdlUG9wb3Zlcih7IGhpZ2hDb250cmFzdCwgbGFuZ3VhZ2VzLCB1c2VyTGFuZ3VhZ2VDb2RlIH0pfVxuICAgIDwvZGl2PlxuPC9uYXY+XG4gICAgYDtcbn07XG4iLCJpbXBvcnQgeyB0b1N0YXRpY1VybCB9IGZyb20gJy4uLy4uLy4uLy4uL2xpYi9hc3NldE1hcHBlcic7XG5pbXBvcnQge1xuICAgIGFwcGxlQXBwU3RvcmVCYWRnZSxcbiAgICBnb29nbGVQbGF5U3RvcmVCYWRnZSxcbn0gZnJvbSAnLi4vYXBwLWJhZGdlL2FwcC1iYWRnZS5odG1sJztcbmltcG9ydCB7IGthbm9weU5hdiB9IGZyb20gJy4va2Fub3B5LW5hdi5odG1sJztcblxuY29uc3QgeyBodG1sIH0gPSB3aW5kb3c7XG5jb25zdCBBUFBMRV9BUFBfU1RPUkVfVVJMID1cbiAgICAnaHR0cHM6Ly9hcHBzLmFwcGxlLmNvbS9hcHAvYXBwbGUtc3RvcmUvaWQxMjA1NjE0NTEwP3B0PTExODU2MzUxNSZjdD1saWdodG5pbmdfcHJvbW8mbXQ9OCZ1dG1fc291cmNlPWxpZ2h0bmluZyZ1dG1fbWVkaXVtPWthbm9weV9wcm9tbyZ1dG1fY2FtcGFpZ249T0RWc3Vuc2V0JztcbmNvbnN0IEdPT0dMRV9QTEFZX1NUT1JFX1VSTCA9XG4gICAgJ2h0dHBzOi8vcGxheS5nb29nbGUuY29tL3N0b3JlL2FwcHMvZGV0YWlscz9pZD1jb20ua2Fub3B5JnJlZmVycmVyPXV0bV9zb3VyY2UlM0RsaWdodG5pbmclMjZ1dG1fbWVkaXVtJTNEa2Fub3B5X3Byb21vJTI2dXRtX2NhbXBhaWduJTNET0RWc3Vuc2V0JztcblxuZXhwb3J0IGNvbnN0IGthbm9weVByb21vVmlld1RlbXBsYXRlID0gKHtcbiAgICBiYWNrVG9MaWJyYXJ5VXJsLFxuICAgIGhpZ2hDb250cmFzdCxcbiAgICBrYW5vcHlTaWduVXBVcmwsXG4gICAgbGFuZ3VhZ2VzLFxuICAgIGxpYnJhcnlOYW1lLFxuICAgIHNob3dDdGFCdXR0b24sXG4gICAgc2hvd0Rvd25sb2FkVGV4dCxcbiAgICB1c2VyTGFuZ3VhZ2VDb2RlLFxuICAgIHVzZXJMYW5ndWFnZURpc3BsYXlOYW1lLFxufSkgPT4gYFxuPGRpdiBjbGFzcz1cImthbm9weS1tYWluXCI+XG4gICAgJHtrYW5vcHlOYXYoe1xuICAgICAgICBiYWNrVG9MaWJyYXJ5VXJsLFxuICAgICAgICBoaWdoQ29udHJhc3QsXG4gICAgICAgIGxhbmd1YWdlcyxcbiAgICAgICAgdXNlckxhbmd1YWdlQ29kZSxcbiAgICAgICAgdXNlckxhbmd1YWdlRGlzcGxheU5hbWUsXG4gICAgfSl9XG5cbiAgICA8ZGl2IGNsYXNzPVwia2Fub3B5LW5hdi1zcGFjZXJcIj48L2Rpdj5cblxuICAgIDxzZWN0aW9uIGNsYXNzPVwia2Fub3B5LXNlY3Rpb24ga2Fub3B5LXNlY3Rpb25fX2JhY2stbGlua1wiPlxuICAgICAgICA8YSBjbGFzcz1cImthbm9weS1uYXZfX2JhY2stbGlua1wiIFxuICAgICAgICAgICBocmVmPVwiJHtiYWNrVG9MaWJyYXJ5VXJsfVwiXG4gICAgICAgICAgIGlkPVwia2Fub3B5LXByb21vLWJhY2stYnV0dG9uXCI+XG4gICAgICAgICAgICA8aW1nIGFsdCBjbGFzcz1cImthbm9weS1uYXZfX2JhY2stbGluay0tZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgICAgICAgICAgc3JjPVwiJHt0b1N0YXRpY1VybCgnaW1nL2thbm9weS9iYWNrLWljb24tb3V0bGluZS5zdmcnKX1cIiAvPlxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgJHtcbiAgICAgICAgICAgICAgICBoaWdoQ29udHJhc3RcbiAgICAgICAgICAgICAgICAgICAgPyBgXG4gICAgICAgICAgICA8aW1nIGFsdCBjbGFzcz1cImthbm9weS1uYXZfX2JhY2stbGluay0tZm9jdXNcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIiBcbiAgICAgICAgICAgICAgICBzcmM9XCIke3RvU3RhdGljVXJsKCdpbWcva2Fub3B5L2JhY2staWNvbi1oYy5zdmcnKX1cIiAvPlxuICAgICAgICAgICAgYFxuICAgICAgICAgICAgICAgICAgICA6IGBcbiAgICAgICAgICAgIDxpbWcgYWx0IGNsYXNzPVwia2Fub3B5LW5hdl9fYmFjay1saW5rLS1mb2N1c1wiXG4gICAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiIFxuICAgICAgICAgICAgICAgIHNyYz1cIiR7dG9TdGF0aWNVcmwoJ2ltZy9rYW5vcHkvYmFjay1pY29uLXNvbGlkLnN2ZycpfVwiIC8+XG4gICAgICAgICAgICBgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICR7aHRtbCgna2Fub3B5LmJhY2tUb0xpYnJhcnknKX1cbiAgICAgICAgPC9hPlxuICAgIDwvc2VjdGlvbj5cblxuICAgIDxzZWN0aW9uIGNsYXNzPVwia2Fub3B5LXNlY3Rpb25cIj5cbiAgICAgICAgPHAgY2xhc3M9XCJrYW5vcHlfX2hlYWRpbmctZXllYnJvd1wiPlxuICAgICAgICAgICAgJHtsaWJyYXJ5TmFtZX1cbiAgICAgICAgPC9wPlxuXG4gICAgICAgIDxoMSBjbGFzcz1cImthbm9weV9faGVhZGluZy0xXCI+XG4gICAgICAgICAgICAke2h0bWwoJ2thbm9weS5oZWFkaW5nJyl9XG4gICAgICAgIDwvaDE+XG5cbiAgICAgICAgPHAgY2xhc3M9XCJrYW5vcHlfX2NvbnRlbnQtLWNvcHlcIj5cbiAgICAgICAgICAgICR7aHRtbCgna2Fub3B5LmNvcHknKX1cbiAgICAgICAgPC9wPlxuXG4gICAgICAgIDxwIGNsYXNzPVwia2Fub3B5X19jdGFcIj5cbiAgICAgICAgICAgICR7XG4gICAgICAgICAgICAgICAgc2hvd0N0YUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICA/IGBcbiAgICAgICAgICAgIDxhIGNsYXNzPVwia2Fub3B5LWJ1dHRvbi0tY3RhXCJcbiAgICAgICAgICAgICAgIGhyZWY9XCIke2thbm9weVNpZ25VcFVybH1cIiBcbiAgICAgICAgICAgICAgIGlkPVwia2Fub3B5LXByb21vLWN0YS1idXR0b25cIlxuICAgICAgICAgICAgICAgcmVsPVwibm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgICAgICAgICAgICAke2h0bWwoJ2thbm9weS5jdGEnKX1cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIGBcbiAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgfVxuICAgICAgICA8L3A+XG4gICAgPC9zZWN0aW9uPlxuXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJrYW5vcHktc2VjdGlvblwiPlxuICAgICAgICA8cCBjbGFzcz1cImthbm9weV9fY29udGVudFwiPlxuICAgICAgICAgICAgJHtzaG93RG93bmxvYWRUZXh0ID8gaHRtbCgna2Fub3B5LmRvd25sb2FkTW9iaWxlQXBwJykgOiAnJ31cbiAgICAgICAgPC9wPlxuXG4gICAgICAgIDxwIGNsYXNzPVwia2Fub3B5X19hcHAtc3RvcmUtYmFkZ2VzXCI+XG4gICAgICAgICAgICAke2FwcGxlQXBwU3RvcmVCYWRnZSh7XG4gICAgICAgICAgICAgICAgaGlnaENvbnRyYXN0LFxuICAgICAgICAgICAgICAgIGhyZWY6IEFQUExFX0FQUF9TVE9SRV9VUkwsXG4gICAgICAgICAgICAgICAgaWQ6ICdrYW5vcHktcHJvbW8tYXBwbGUtYnV0dG9uJyxcbiAgICAgICAgICAgICAgICB1c2VyTGFuZ3VhZ2VDb2RlLFxuICAgICAgICAgICAgfSl9XG5cbiAgICAgICAgICAgICR7Z29vZ2xlUGxheVN0b3JlQmFkZ2Uoe1xuICAgICAgICAgICAgICAgIGhpZ2hDb250cmFzdCxcbiAgICAgICAgICAgICAgICBocmVmOiBHT09HTEVfUExBWV9TVE9SRV9VUkwsXG4gICAgICAgICAgICAgICAgaWQ6ICdrYW5vcHktcHJvbW8tZ29vZ2xlLWJ1dHRvbicsXG4gICAgICAgICAgICAgICAgdXNlckxhbmd1YWdlQ29kZSxcbiAgICAgICAgICAgIH0pfVxuICAgICAgICA8L3A+XG4gICAgPC9zZWN0aW9uPlxuXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJrYW5vcHktc2VjdGlvblwiPlxuICAgICAgICA8cCBjbGFzcz1cImthbm9weV9fYXZhaWxhYmxlLW9uXCI+XG4gICAgICAgICAgICAke2h0bWwoJ2thbm9weS5hbHNvQXZhaWxhYmxlT24nKX06XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxpbWcgYWx0PVwiJHtodG1sKCdhcHBzLnN2b2QuYXBwbGVUdicpfVwiXG4gICAgICAgICAgICAgICAgc3JjPVwiJHt0b1N0YXRpY1VybCgnaW1nL2thbm9weS9sb2dvLWFwcGxlLXR2LnN2ZycpfVwiIC8+XG4gICAgICAgICAgICA8aW1nIGFsdD1cIiR7aHRtbCgnYXBwcy5zdm9kLmFuZHJvaWRUdicpfVwiXG4gICAgICAgICAgICAgICAgc3JjPVwiJHt0b1N0YXRpY1VybCgnaW1nL2thbm9weS9sb2dvLWFuZHJvaWR0di5zdmcnKX1cIiAvPlxuICAgICAgICAgICAgPGltZyBhbHQ9XCIke2h0bWwoJ2FwcHMuc3ZvZC5jaHJvbWVjYXN0Jyl9XCJcbiAgICAgICAgICAgICAgICBzcmM9XCIke3RvU3RhdGljVXJsKCdpbWcva2Fub3B5L2xvZ28tY2hyb21lY2FzdC5zdmcnKX1cIiAvPlxuICAgICAgICAgICAgPGltZyBhbHQ9XCIke2h0bWwoJ2FwcHMuc3ZvZC5yb2t1Jyl9XCJcbiAgICAgICAgICAgICAgICBzcmM9XCIke3RvU3RhdGljVXJsKCdpbWcva2Fub3B5L2xvZ28tcm9rdS5zdmcnKX1cIiAvPlxuICAgICAgICAgICAgPGltZyBhbHQ9XCIke2h0bWwoJ2FwcHMuc3ZvZC5maXJlVHYnKX1cIlxuICAgICAgICAgICAgICAgIHNyYz1cIiR7dG9TdGF0aWNVcmwoJ2ltZy9rYW5vcHkvbG9nby1maXJldHYuc3ZnJyl9XCIgLz5cbiAgICAgICAgICAgIDxpbWcgYWx0PVwiJHtodG1sKCdhcHBzLnN2b2QuZmlyZVRhYmxldCcpfVwiXG4gICAgICAgICAgICAgICAgc3JjPVwiJHt0b1N0YXRpY1VybCgnaW1nL2thbm9weS9sb2dvLWZpcmV0YWJsZXQuc3ZnJyl9XCIgLz5cbiAgICAgICAgICAgIDxpbWcgYWx0PVwiJHtodG1sKCdhcHBzLnN2b2Quc2Ftc3VuZycpfVwiXG4gICAgICAgICAgICAgICAgc3JjPVwiJHt0b1N0YXRpY1VybCgnaW1nL2thbm9weS9sb2dvLXNhbXN1bmcuc3ZnJyl9XCIgLz5cbiAgICAgICAgPC9wPlxuICAgIDwvc2VjdGlvbj5cblxuICAgIDxkaXYgY2xhc3M9XCJrYW5vcHktc3VucmlzZS1zcGFjZXJcIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwia2Fub3B5LXN1bnJpc2UtYmFyXCI+PC9kaXY+XG48L2Rpdj5cbmA7XG4iLCJpbXBvcnQgeyB0b1N0YXRpY1VybCB9IGZyb20gJy4uLy4uLy4uLy4uL2xpYi9hc3NldE1hcHBlcic7XG5pbXBvcnQgeyBrYW5vcHlQcm9tb1ZpZXdUZW1wbGF0ZSB9IGZyb20gJy4va2Fub3B5LXByb21vLXZpZXcuaHRtbCc7XG5cbmNvbnN0IHsgYm93c2VyIH0gPSB3aW5kb3c7XG5cbmV4cG9ydCBjbGFzcyBLYW5vcHlQcm9tb1ZpZXcgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICAkcHJvbW9WaWV3RWw7XG4gICAgYmFja1RvTGlicmFyeVVybDtcbiAgICBoaWdoQ29udHJhc3Q7XG4gICAgaW5BcHA7XG4gICAgaXNUb2xpbm9EZXZpY2U7XG4gICAga2Fub3B5U2lnblVwVXJsO1xuICAgIGxhbmd1YWdlcztcbiAgICBsaWJyYXJ5TmFtZTtcbiAgICB1c2VyTGFuZ3VhZ2VDb2RlO1xuICAgIHVzZXJMYW5ndWFnZURpc3BsYXlOYW1lO1xuICAgIGthbm9weUltYWdlVXJscztcblxuICAgIGNvbnN0cnVjdG9yKHtcbiAgICAgICAgYmFja1RvTGlicmFyeVVybCxcbiAgICAgICAgaGlnaENvbnRyYXN0LFxuICAgICAgICBpbkFwcCxcbiAgICAgICAgaXNUb2xpbm9EZXZpY2UsXG4gICAgICAgIGthbm9weVNpZ25VcFVybCxcbiAgICAgICAgbGFuZ3VhZ2VzLFxuICAgICAgICBsaWJyYXJ5TmFtZSxcbiAgICAgICAgdXNlckxhbmd1YWdlQ29kZSxcbiAgICAgICAgdXNlckxhbmd1YWdlRGlzcGxheU5hbWUsXG4gICAgICAgIGthbm9weUltYWdlVXJscyxcbiAgICB9KSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG5cbiAgICAgICAgdGhpcy5iYWNrVG9MaWJyYXJ5VXJsID0gYmFja1RvTGlicmFyeVVybDtcbiAgICAgICAgdGhpcy5oaWdoQ29udHJhc3QgPSBoaWdoQ29udHJhc3Q7XG4gICAgICAgIHRoaXMuaW5BcHAgPSBpbkFwcDtcbiAgICAgICAgdGhpcy5pc1RvbGlub0RldmljZSA9IGlzVG9saW5vRGV2aWNlO1xuICAgICAgICB0aGlzLmthbm9weVNpZ25VcFVybCA9IGthbm9weVNpZ25VcFVybDtcbiAgICAgICAgdGhpcy5sYW5ndWFnZXMgPSBsYW5ndWFnZXM7XG4gICAgICAgIHRoaXMubGlicmFyeU5hbWUgPSBsaWJyYXJ5TmFtZTtcbiAgICAgICAgdGhpcy51c2VyTGFuZ3VhZ2VDb2RlID0gdXNlckxhbmd1YWdlQ29kZTtcbiAgICAgICAgdGhpcy51c2VyTGFuZ3VhZ2VEaXNwbGF5TmFtZSA9IHVzZXJMYW5ndWFnZURpc3BsYXlOYW1lO1xuICAgICAgICB0aGlzLmthbm9weUltYWdlVXJscyA9IGthbm9weUltYWdlVXJscztcblxuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuJHByb21vVmlld0VsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IG1vYmlsZSwgdGFibGV0IH0gPSBib3dzZXI7XG4gICAgICAgIGNvbnN0IHByb21vdGVBcHAgPVxuICAgICAgICAgICAgbW9iaWxlIHx8IHRhYmxldCB8fCB0aGlzLmluQXBwIHx8IHRoaXMuaXNUb2xpbm9EZXZpY2U7XG5cbiAgICAgICAgY29uc3QgcHJvbW9IdG1sID0ga2Fub3B5UHJvbW9WaWV3VGVtcGxhdGUoe1xuICAgICAgICAgICAgYmFja1RvTGlicmFyeVVybDogdGhpcy5iYWNrVG9MaWJyYXJ5VXJsLFxuICAgICAgICAgICAgaGlnaENvbnRyYXN0OiB0aGlzLmhpZ2hDb250cmFzdCxcbiAgICAgICAgICAgIGthbm9weVNpZ25VcFVybDogdGhpcy5rYW5vcHlTaWduVXBVcmwsXG4gICAgICAgICAgICBsYW5ndWFnZXM6IHRoaXMubGFuZ3VhZ2VzLFxuICAgICAgICAgICAgbGlicmFyeU5hbWU6IHRoaXMubGlicmFyeU5hbWUsXG4gICAgICAgICAgICBzaG93Q3RhQnV0dG9uOiAhcHJvbW90ZUFwcCxcbiAgICAgICAgICAgIHNob3dEb3dubG9hZFRleHQ6IHByb21vdGVBcHAsXG4gICAgICAgICAgICB1c2VyTGFuZ3VhZ2VDb2RlOiB0aGlzLnVzZXJMYW5ndWFnZUNvZGUsXG4gICAgICAgICAgICB1c2VyTGFuZ3VhZ2VEaXNwbGF5TmFtZTogdGhpcy51c2VyTGFuZ3VhZ2VEaXNwbGF5TmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuJHByb21vVmlld0VsID0gJChwcm9tb0h0bWwpO1xuICAgICAgICB0aGlzLiRlbC5hcHBlbmQodGhpcy4kcHJvbW9WaWV3RWwpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmhpZ2hDb250cmFzdCAmJlxuICAgICAgICAgICAgIXRoaXMuaXNUb2xpbm9EZXZpY2UgJiZcbiAgICAgICAgICAgICF3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdoaWRlLWthbm9weS1jb3ZlcnMnKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmthbm9weUltYWdlVXJscyAmJiB0aGlzLmthbm9weUltYWdlVXJscy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKFxuICAgICAgICAgICAgICAgICAgICBNYXRoLnJhbmRvbSgpICogdGhpcy5rYW5vcHlJbWFnZVVybHMubGVuZ3RoXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRCYWNrZ3JvdW5kSW1hZ2UodGhpcy5rYW5vcHlJbWFnZVVybHNbcmFuZG9tSW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuJGVsLmZvdW5kYXRpb24oJ2Ryb3Bkb3duJyk7XG5cbiAgICAgICAgdGhpcy4kZWxcbiAgICAgICAgICAgIC5maW5kKCcua2Fub3B5LW5hdl9fbGFuZ3VhZ2UtZHJvcGRvd24tYnV0dG9uJylcbiAgICAgICAgICAgIC5vbignY2xpY2sgcHJlc3MnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c0ZpcnN0TGFuZ3VhZ2VNZW51SXRlbShldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLiRlbC5maW5kKCcua2Fub3B5LW5hdl9fbGFuZ3VhZ2UnKS5vbignZm9jdXNvdXQnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jbG9zZUxhbmd1YWdlRHJvcGRvd24oKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX2Nsb3NlTGFuZ3VhZ2VEcm9wZG93bigpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAvLyBXYWl0IHVudGlsIHRoZSBuZXh0IGVsZW1lbnQgaXMgYWN0aXZlLCBzaW5jZSB3ZSBkb24ndCBrbm93IHdobyB3ZSdyZSBibHVycmluZyB0byBmcm9tIHRoZSBldmVudFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICQoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkucGFyZW50cygnLmthbm9weS1uYXZfX2xhbmd1YWdlJylcbiAgICAgICAgICAgICAgICAgICAgLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWwuZm91bmRhdGlvbignZHJvcGRvd24nLCAnY2xvc2VhbGwnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX2ZvY3VzRmlyc3RMYW5ndWFnZU1lbnVJdGVtKGV2ZW50KSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgLy8gTGV0IEZvdW5kYXRpb24gaGFuZGxlIHRoZSBldmVudCBhbmQgc2hvdyB0aGUgZHJvcGRvd24gZmlyc3RcbiAgICAgICAgICAgIGNvbnN0IG1lbnVJdGVtID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcblxuICAgICAgICAgICAgY29uc3QgbGFuZ3VhZ2VNZW51SWQgPSBtZW51SXRlbS5hdHRyKCdhcmlhLWNvbnRyb2xzJyk7XG4gICAgICAgICAgICBjb25zdCBsYW5ndWFnZU1lbnUgPSAkKGAjJHtsYW5ndWFnZU1lbnVJZH1gKTtcblxuICAgICAgICAgICAgY29uc3QgaXNFeHBhbmRlZCA9IG1lbnVJdGVtLmF0dHIoJ2FyaWEtZXhwYW5kZWQnKTtcbiAgICAgICAgICAgIGlmIChpc0V4cGFuZGVkID09PSAndHJ1ZScgJiYgbGFuZ3VhZ2VNZW51KSB7XG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VNZW51LmZpbmQoJ1tyb2xlPW1lbnVpdGVtXScpLmZpcnN0KCkudHJpZ2dlcignZm9jdXMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3NldEJhY2tncm91bmRJbWFnZShpbWFnZVVybCkge1xuICAgICAgICBjb25zdCBtYWluRWwgPSB0aGlzLiRlbC5maW5kKCcua2Fub3B5LW1haW4nKTtcbiAgICAgICAgbWFpbkVsLmNzcyhcbiAgICAgICAgICAgICdiYWNrZ3JvdW5kLWltYWdlJyxcbiAgICAgICAgICAgIGBcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoXG4gICAgICAgICAgICAxMDYuODRkZWcsXG4gICAgICAgICAgICAjMWExYTFhIDI5Ljk3JSxcbiAgICAgICAgICAgIHJnYmEoMjYsIDI2LCAyNiwgMCkgODUuMzMlXG4gICAgICAgICAgKSxcbiAgICAgICAgICB1cmwoXCIke2ltYWdlVXJsfVwiKVxuICAgICAgICBgXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBLYW5vcHlQcm9tb1ZpZXc7XG4iLCJpbXBvcnQgeyBLYW5vcHlQcm9tb1ZpZXcgfSBmcm9tICcuLi9jb21wb25lbnRzL2thbm9weS9rYW5vcHktcHJvbW8tdmlldyc7XG5cbnZvaWQgbmV3IEthbm9weVByb21vVmlldyh7XG4gICAgZWw6ICcuY29udGFpbmVyJyxcbiAgICBiYWNrVG9MaWJyYXJ5VXJsOiB3aW5kb3cuT3ZlckRyaXZlLmthbm9weS5iYWNrVG9MaWJyYXJ5VXJsLFxuICAgIGhpZ2hDb250cmFzdDogd2luZG93Lk92ZXJEcml2ZS5rYW5vcHkuaGlnaENvbnRyYXN0LFxuICAgIGluQXBwOiB3aW5kb3cuT3ZlckRyaXZlLmthbm9weS5pbkFwcCxcbiAgICBpc1RvbGlub0RldmljZTogd2luZG93Lk92ZXJEcml2ZS5rYW5vcHkuaXNUb2xpbm9EZXZpY2UsXG4gICAga2Fub3B5U2lnblVwVXJsOiB3aW5kb3cuT3ZlckRyaXZlLmthbm9weS5rYW5vcHlTaWduVXBVcmwsXG4gICAgbGFuZ3VhZ2VzOiB3aW5kb3cuT3ZlckRyaXZlLmthbm9weS5sYW5ndWFnZXMsXG4gICAgbGlicmFyeU5hbWU6IHdpbmRvdy5PdmVyRHJpdmUua2Fub3B5LmxpYnJhcnlOYW1lLFxuICAgIHVzZXJMYW5ndWFnZUNvZGU6IHdpbmRvdy5PdmVyRHJpdmUua2Fub3B5LnVzZXJMYW5ndWFnZUNvZGUsXG4gICAgdXNlckxhbmd1YWdlRGlzcGxheU5hbWU6IHdpbmRvdy5PdmVyRHJpdmUua2Fub3B5LnVzZXJMYW5ndWFnZURpc3BsYXlOYW1lLFxuICAgIGthbm9weUltYWdlVXJsczogd2luZG93Lk92ZXJEcml2ZS5rYW5vcHkua2Fub3B5SW1hZ2VVcmxzLFxufSk7XG4iXX0="}