{"version":3,"file":"ngx-rock-yandex-smart-captcha.mjs","sources":["../tmp-esm2022/lib/helpers/is-valid-host.js","../tmp-esm2022/lib/yandex-smart-captcha/yandex-smart-captcha.component.js","../tmp-esm2022/ngx-rock-yandex-smart-captcha.js"],"sourcesContent":["const domainRE = /^(\\S+)$/;\nconst localhostDomainRE = /^localhost[:?\\d]*(?:[^:?\\d]\\S*)?$/;\nconst nonLocalhostDomainRE = /^[^\\s.]+\\.\\S{2,}$/;\nconst IPv4RE = /^(https?:\\/\\/)?([0-9]{1,3}\\.){3}[0-9]{1,3}:\\d+$/;\nconst IPv6RE = /^(https?:\\/\\/)?\\[([0-9a-fA-F]{0,4}:){7}([0-9a-fA-F]){0,4}]:\\d+$/;\nexport function isValidHost(str) {\n    if (typeof str !== 'string') {\n        return false;\n    }\n    const match = str.match(domainRE);\n    if (!match) {\n        return false;\n    }\n    const everythingAfterProtocol = match[0];\n    if (!everythingAfterProtocol) {\n        return false;\n    }\n    return (localhostDomainRE.test(everythingAfterProtocol) ||\n        nonLocalhostDomainRE.test(everythingAfterProtocol) ||\n        IPv4RE.test(everythingAfterProtocol) ||\n        IPv6RE.test(everythingAfterProtocol));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtdmFsaWQtaG9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveWFuZGV4LXNtYXJ0LWNhcHRjaGEvc3JjL2xpYi9oZWxwZXJzL2lzLXZhbGlkLWhvc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBQzNCLE1BQU0saUJBQWlCLEdBQUcsbUNBQW1DLENBQUM7QUFDOUQsTUFBTSxvQkFBb0IsR0FBRyxtQkFBbUIsQ0FBQztBQUNqRCxNQUFNLE1BQU0sR0FBRyxpREFBaUQsQ0FBQztBQUNqRSxNQUFNLE1BQU0sR0FDVixpRUFBaUUsQ0FBQztBQUVwRSxNQUFNLFVBQVUsV0FBVyxDQUFDLEdBQXVCO0lBQ2pELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxNQUFNLHVCQUF1QixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUM3QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLENBQ0wsaUJBQWlCLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDO1FBQy9DLG9CQUFvQixDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztRQUNsRCxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FDckMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBkb21haW5SRSA9IC9eKFxcUyspJC87XG5jb25zdCBsb2NhbGhvc3REb21haW5SRSA9IC9ebG9jYWxob3N0Wzo/XFxkXSooPzpbXjo/XFxkXVxcUyopPyQvO1xuY29uc3Qgbm9uTG9jYWxob3N0RG9tYWluUkUgPSAvXlteXFxzLl0rXFwuXFxTezIsfSQvO1xuY29uc3QgSVB2NFJFID0gL14oaHR0cHM/OlxcL1xcLyk/KFswLTldezEsM31cXC4pezN9WzAtOV17MSwzfTpcXGQrJC87XG5jb25zdCBJUHY2UkUgPVxuICAvXihodHRwcz86XFwvXFwvKT9cXFsoWzAtOWEtZkEtRl17MCw0fTopezd9KFswLTlhLWZBLUZdKXswLDR9XTpcXGQrJC87XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkSG9zdChzdHI6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBzdHIubWF0Y2goZG9tYWluUkUpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGV2ZXJ5dGhpbmdBZnRlclByb3RvY29sID0gbWF0Y2hbMF07XG4gIGlmICghZXZlcnl0aGluZ0FmdGVyUHJvdG9jb2wpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICBsb2NhbGhvc3REb21haW5SRS50ZXN0KGV2ZXJ5dGhpbmdBZnRlclByb3RvY29sKSB8fFxuICAgIG5vbkxvY2FsaG9zdERvbWFpblJFLnRlc3QoZXZlcnl0aGluZ0FmdGVyUHJvdG9jb2wpIHx8XG4gICAgSVB2NFJFLnRlc3QoZXZlcnl0aGluZ0FmdGVyUHJvdG9jb2wpIHx8XG4gICAgSVB2NlJFLnRlc3QoZXZlcnl0aGluZ0FmdGVyUHJvdG9jb2wpXG4gICk7XG59XG4iXX0=","import { ChangeDetectionStrategy, Component, effect, forwardRef, Inject, input, output, PLATFORM_ID, Renderer2, signal, viewChild, DOCUMENT } from '@angular/core';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR, } from '@angular/forms';\nimport { isPlatformBrowser } from '@angular/common';\nimport { isValidHost } from '../helpers/is-valid-host';\nimport * as i0 from \"@angular/core\";\nconst API_LINK = (host = 'smartcaptcha.yandexcloud.net') => {\n    const base = /^https?/.test(host) ? host : `https://${host}`;\n    return `${base}/captcha.js?render=onload&onload=__onSmartCaptchaReady`;\n};\n// Shared callbacks array\nconst callbacks = [];\nexport const startLoading = new Map();\nexport class SmartCaptchaComponent {\n    renderer2;\n    document;\n    platformId;\n    sitekey = input.required();\n    invisible = input(false);\n    visible = input(); // For InvisibleCaptcha to execute\n    hideShield = input();\n    shieldPosition = input();\n    language = input();\n    host = input();\n    /**\n     * @deprecated This setting is deprecated and must only be changed via the Yandex Cloud interface.\n     */\n    theme = input('auto');\n    test = input();\n    webview = input();\n    challengeHidden = output();\n    challengeVisible = output();\n    success = output();\n    networkError = output();\n    tokenExpired = output();\n    javascriptError = output();\n    captchaContainer = viewChild('captchaContainer');\n    widgetId;\n    smartCaptchaInstance;\n    destroyed = false;\n    unsubscribeFns = [];\n    errorEventHandler;\n    onChange = () => {\n        // onChange\n    };\n    onTouched = () => {\n        // onTouched\n    };\n    _innerValue = signal(null); // Use a signal for innerValue\n    callbackIndex = null;\n    constructor(renderer2, document, platformId) {\n        this.renderer2 = renderer2;\n        this.document = document;\n        this.platformId = platformId;\n        // Effect for theme changes\n        effect(() => {\n            if (this.theme() &&\n                this.widgetId !== undefined &&\n                this.smartCaptchaInstance?.setTheme) {\n                this.smartCaptchaInstance.setTheme(this.widgetId, this.theme());\n            }\n        });\n        // Effect for visible changes (Invisible Captcha)\n        effect(() => {\n            if (this.visible() &&\n                this.invisible() &&\n                this.smartCaptchaInstance &&\n                typeof this.widgetId === 'number' &&\n                !this.destroyed) {\n                this.smartCaptchaInstance.execute(this.widgetId);\n            }\n        });\n    }\n    ngOnInit() {\n        if (!isPlatformBrowser(this.platformId)) {\n            return; // Don't proceed on server-side\n        }\n        if (this.host() !== undefined && !isValidHost(this.host())) {\n            console.error(`[SmartCaptcha] ${this.host()} host is invalid. It should be of a kind: domain.ru, localhost:3000`);\n            return;\n        }\n        if (typeof window !== 'undefined') {\n            // Setup global callback if not already defined\n            if (window.__onSmartCaptchaReady === undefined) {\n                window.__onSmartCaptchaReady = () => {\n                    callbacks.forEach((callback) => callback());\n                };\n            }\n            // Check if SmartCaptcha is already loaded\n            if (window.smartCaptcha) {\n                this.smartCaptchaInstance = window.smartCaptcha;\n            }\n            // Add our callback to the shared array\n            this.callbackIndex = callbacks.push(() => {\n                this.smartCaptchaInstance = window.smartCaptcha;\n                this.renderCaptcha();\n            });\n            // Load script if not already loading\n            const hostKey = this.host() || 'default';\n            if (!startLoading.get(hostKey)) {\n                this.loadScript();\n                startLoading.set(hostKey, true);\n            }\n        }\n    }\n    ngAfterViewInit() {\n        if (this.smartCaptchaInstance) {\n            this.renderCaptcha();\n        }\n    }\n    ngOnDestroy() {\n        this.destroyed = true;\n        // Remove callback from shared array\n        if (this.callbackIndex !== null) {\n            callbacks.splice(this.callbackIndex - 1, 1);\n        }\n        // Destroy widget if it exists\n        if (this.widgetId !== undefined && this.smartCaptchaInstance) {\n            this.smartCaptchaInstance.destroy(this.widgetId);\n            this.widgetId = undefined;\n        }\n        // Clean up subscriptions\n        this.unsubscribeFns.forEach((fn) => fn && fn());\n        this.unsubscribeFns = [];\n        // Remove error event handler\n        if (this.errorEventHandler && typeof window !== 'undefined') {\n            window.removeEventListener('error', this.errorEventHandler);\n        }\n    }\n    loadScript() {\n        const src = API_LINK(this.host());\n        const script = this.renderer2.createElement('script');\n        this.renderer2.setAttribute(script, 'src', src);\n        this.renderer2.setAttribute(script, 'type', 'text/javascript');\n        this.renderer2.setAttribute(script, 'crossOrigin', 'anonymous');\n        // Handle regular onload/onerror\n        script.onload = () => {\n            if (window.smartCaptcha && !this.smartCaptchaInstance) {\n                this.smartCaptchaInstance = window.smartCaptcha;\n                this.renderCaptcha();\n            }\n        };\n        script.onerror = () => {\n            this.handleJavascriptError({\n                filename: src,\n                message: 'Unknown error on script loading',\n                col: 0,\n                line: 0,\n            });\n        };\n        // Add error event listener for JS errors in the captcha script\n        if (typeof window !== 'undefined') {\n            this.errorEventHandler = (e) => {\n                if (e.filename?.indexOf(src) === 0) {\n                    this.handleJavascriptError({\n                        filename: e.filename,\n                        message: e.message,\n                        col: e.colno,\n                        line: e.lineno,\n                    });\n                }\n            };\n            window.addEventListener('error', this.errorEventHandler);\n        }\n        // Add script to document\n        this.renderer2.appendChild(this.document.body, script);\n    }\n    renderCaptcha() {\n        const container = this.captchaContainer()?.nativeElement;\n        if (!container ||\n            !this.smartCaptchaInstance ||\n            this.widgetId !== undefined ||\n            this.destroyed) {\n            return;\n        }\n        const params = {\n            sitekey: this.sitekey(),\n            hl: this.language(),\n            theme: this.theme(),\n            invisible: this.invisible(),\n            hideShield: this.hideShield(),\n            shieldPosition: this.shieldPosition(),\n            test: this.test(),\n            webview: this.webview(),\n        };\n        try {\n            this.widgetId = this.smartCaptchaInstance.render(container, params);\n            this.setupSubscriptions();\n        }\n        catch (error) {\n            console.error('[SmartCaptcha] Error rendering captcha widget:', error);\n            let message = 'Unknown error during rendering';\n            if (error instanceof Error) {\n                message = error.message;\n            }\n            this.handleJavascriptError({\n                filename: API_LINK(this.host()),\n                message,\n                col: 0,\n                line: 0,\n            });\n        }\n    }\n    setupSubscriptions() {\n        if (this.widgetId === undefined || !this.smartCaptchaInstance) {\n            return;\n        }\n        // Store unsubscribe functions for cleanup\n        this.unsubscribeFns = [\n            this.smartCaptchaInstance.subscribe(this.widgetId, 'challenge-visible', () => {\n                this.challengeVisible.emit();\n            }),\n            this.smartCaptchaInstance.subscribe(this.widgetId, 'challenge-hidden', () => {\n                console.error('hidden');\n                this.challengeHidden.emit();\n            }),\n            this.smartCaptchaInstance.subscribe(this.widgetId, 'network-error', () => {\n                this.networkError.emit();\n            }),\n            this.smartCaptchaInstance.subscribe(this.widgetId, 'success', (...args) => {\n                const [token] = args;\n                this._innerValue.set(token);\n                this.onChange(token);\n                this.onTouched();\n                this.success.emit(token);\n            }),\n            this.smartCaptchaInstance.subscribe(this.widgetId, 'token-expired', () => {\n                this._innerValue.set(null);\n                this.onChange(null);\n                this.onTouched();\n                this.tokenExpired.emit();\n            }),\n            this.smartCaptchaInstance.subscribe(this.widgetId, 'javascript-error', (...args) => {\n                const [error] = args;\n                this.handleJavascriptError(error);\n            }),\n        ];\n    }\n    handleJavascriptError(error) {\n        console.error('[SmartCaptcha] Javascript error:', error);\n        this.javascriptError.emit(error);\n    }\n    // ControlValueAccessor methods\n    writeValue(value) {\n        this._innerValue.set(value); // Set the signal value\n    }\n    registerOnChange(fn) {\n        this.onChange = fn;\n    }\n    registerOnTouched(fn) {\n        this.onTouched = fn;\n    }\n    // Validator method\n    validate() {\n        // When using invisible captcha, don't validate until user interacts\n        if (this.invisible() && !this._innerValue()) {\n            return null;\n        }\n        // For standard captcha, require token\n        if (!this.invisible() && !this._innerValue()) {\n            // Access signal value\n            return { captchaRequired: true };\n        }\n        return null;\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: SmartCaptchaComponent, deps: [{ token: i0.Renderer2 }, { token: DOCUMENT }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component });\n    static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.2.0\", version: \"20.0.4\", type: SmartCaptchaComponent, isStandalone: true, selector: \"smart-captcha\", inputs: { sitekey: { classPropertyName: \"sitekey\", publicName: \"sitekey\", isSignal: true, isRequired: true, transformFunction: null }, invisible: { classPropertyName: \"invisible\", publicName: \"invisible\", isSignal: true, isRequired: false, transformFunction: null }, visible: { classPropertyName: \"visible\", publicName: \"visible\", isSignal: true, isRequired: false, transformFunction: null }, hideShield: { classPropertyName: \"hideShield\", publicName: \"hideShield\", isSignal: true, isRequired: false, transformFunction: null }, shieldPosition: { classPropertyName: \"shieldPosition\", publicName: \"shieldPosition\", isSignal: true, isRequired: false, transformFunction: null }, language: { classPropertyName: \"language\", publicName: \"language\", isSignal: true, isRequired: false, transformFunction: null }, host: { classPropertyName: \"host\", publicName: \"host\", isSignal: true, isRequired: false, transformFunction: null }, theme: { classPropertyName: \"theme\", publicName: \"theme\", isSignal: true, isRequired: false, transformFunction: null }, test: { classPropertyName: \"test\", publicName: \"test\", isSignal: true, isRequired: false, transformFunction: null }, webview: { classPropertyName: \"webview\", publicName: \"webview\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { challengeHidden: \"challengeHidden\", challengeVisible: \"challengeVisible\", success: \"success\", networkError: \"networkError\", tokenExpired: \"tokenExpired\", javascriptError: \"javascriptError\" }, providers: [\n            {\n                provide: NG_VALUE_ACCESSOR,\n                useExisting: forwardRef(() => SmartCaptchaComponent),\n                multi: true,\n            },\n            {\n                provide: NG_VALIDATORS,\n                useExisting: forwardRef(() => SmartCaptchaComponent),\n                multi: true,\n            },\n        ], viewQueries: [{ propertyName: \"captchaContainer\", first: true, predicate: [\"captchaContainer\"], descendants: true, isSignal: true }], ngImport: i0, template: ` <div class=\"smart-captcha\" #captchaContainer></div> `, isInline: true, styles: [\".smart-captcha{height:102px}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: SmartCaptchaComponent, decorators: [{\n            type: Component,\n            args: [{ selector: 'smart-captcha', template: ` <div class=\"smart-captcha\" #captchaContainer></div> `, providers: [\n                        {\n                            provide: NG_VALUE_ACCESSOR,\n                            useExisting: forwardRef(() => SmartCaptchaComponent),\n                            multi: true,\n                        },\n                        {\n                            provide: NG_VALIDATORS,\n                            useExisting: forwardRef(() => SmartCaptchaComponent),\n                            multi: true,\n                        },\n                    ], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, styles: [\".smart-captcha{height:102px}\\n\"] }]\n        }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: Document, decorators: [{\n                    type: Inject,\n                    args: [DOCUMENT]\n                }] }, { type: undefined, decorators: [{\n                    type: Inject,\n                    args: [PLATFORM_ID]\n                }] }] });\nexport class InvisibleSmartCaptchaComponent extends SmartCaptchaComponent {\n    // Always set invisible to true\n    invisible = input(true);\n    // Override ngOnInit to ensure invisible is always true\n    ngOnInit() {\n        // Call parent initialization\n        super.ngOnInit();\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: InvisibleSmartCaptchaComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\n    static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.1.0\", version: \"20.0.4\", type: InvisibleSmartCaptchaComponent, isStandalone: true, selector: \"invisible-smart-captcha\", inputs: { invisible: { classPropertyName: \"invisible\", publicName: \"invisible\", isSignal: true, isRequired: false, transformFunction: null } }, providers: [\n            {\n                provide: NG_VALUE_ACCESSOR,\n                useExisting: forwardRef(() => InvisibleSmartCaptchaComponent),\n                multi: true,\n            },\n            {\n                provide: NG_VALIDATORS,\n                useExisting: forwardRef(() => InvisibleSmartCaptchaComponent),\n                multi: true,\n            },\n        ], usesInheritance: true, ngImport: i0, template: ` <div class=\"smart-captcha\" #captchaContainer></div> `, isInline: true, styles: [\"\"], changeDetection: i0.ChangeDetectionStrategy.OnPush });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: InvisibleSmartCaptchaComponent, decorators: [{\n            type: Component,\n            args: [{ selector: 'invisible-smart-captcha', template: ` <div class=\"smart-captcha\" #captchaContainer></div> `, providers: [\n                        {\n                            provide: NG_VALUE_ACCESSOR,\n                            useExisting: forwardRef(() => InvisibleSmartCaptchaComponent),\n                            multi: true,\n                        },\n                        {\n                            provide: NG_VALIDATORS,\n                            useExisting: forwardRef(() => InvisibleSmartCaptchaComponent),\n                            multi: true,\n                        },\n                    ], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush }]\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWFuZGV4LXNtYXJ0LWNhcHRjaGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95YW5kZXgtc21hcnQtY2FwdGNoYS9zcmMvbGliL3lhbmRleC1zbWFydC1jYXB0Y2hhL3lhbmRleC1zbWFydC1jYXB0Y2hhLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxNQUFNLEVBRU4sVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFNBQVMsRUFDVCxRQUFRLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLGFBQWEsRUFDYixpQkFBaUIsR0FHbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBT3ZELE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLDhCQUE4QixFQUFFLEVBQUU7SUFDekQsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO0lBQzdELE9BQU8sR0FBRyxJQUFJLHdEQUF3RCxDQUFDO0FBQ3pFLENBQUMsQ0FBQztBQUVGLHlCQUF5QjtBQUN6QixNQUFNLFNBQVMsR0FBbUIsRUFBRSxDQUFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztBQTJCdkQsTUFBTSxPQUFPLHFCQUFxQjtJQTRDdEI7SUFDa0I7SUFDRztJQTNDL0IsT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztJQUNuQyxTQUFTLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLE9BQU8sR0FBRyxLQUFLLEVBQVcsQ0FBQyxDQUFDLGtDQUFrQztJQUM5RCxVQUFVLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFDOUIsY0FBYyxHQUFHLEtBQUssRUFFbkIsQ0FBQztJQUNKLFFBQVEsR0FBRyxLQUFLLEVBQVUsQ0FBQztJQUMzQixJQUFJLEdBQUcsS0FBSyxFQUFVLENBQUM7SUFDdkI7O09BRUc7SUFDSCxLQUFLLEdBQUcsS0FBSyxDQUE0QixNQUFNLENBQUMsQ0FBQztJQUNqRCxJQUFJLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFDeEIsT0FBTyxHQUFHLEtBQUssRUFBVyxDQUFDO0lBRTNCLGVBQWUsR0FBRyxNQUFNLEVBQVEsQ0FBQztJQUNqQyxnQkFBZ0IsR0FBRyxNQUFNLEVBQVEsQ0FBQztJQUNsQyxPQUFPLEdBQUcsTUFBTSxFQUFVLENBQUM7SUFDM0IsWUFBWSxHQUFHLE1BQU0sRUFBUSxDQUFDO0lBQzlCLFlBQVksR0FBRyxNQUFNLEVBQVEsQ0FBQztJQUM5QixlQUFlLEdBQUcsTUFBTSxFQUEwQixDQUFDO0lBRW5ELGdCQUFnQixHQUFHLFNBQVMsQ0FBNkIsa0JBQWtCLENBQUMsQ0FBQztJQUVuRSxRQUFRLENBQXFCO0lBQzdCLG9CQUFvQixDQUFtQztJQUN2RCxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLGNBQWMsR0FBb0MsRUFBRSxDQUFDO0lBQ3JELGlCQUFpQixDQUF3QztJQUV6RCxRQUFRLEdBQW1DLEdBQUcsRUFBRTtRQUN0RCxXQUFXO0lBQ2IsQ0FBQyxDQUFDO0lBQ00sU0FBUyxHQUFHLEdBQUcsRUFBRTtRQUN2QixZQUFZO0lBQ2QsQ0FBQyxDQUFDO0lBQ00sV0FBVyxHQUFHLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyw4QkFBOEI7SUFDekUsYUFBYSxHQUFrQixJQUFJLENBQUM7SUFFNUMsWUFDVSxTQUFvQixFQUNGLFFBQWtCLEVBQ2YsVUFBa0I7UUFGdkMsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNGLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDZixlQUFVLEdBQVYsVUFBVSxDQUFRO1FBRS9DLDJCQUEyQjtRQUMzQixNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsSUFDRSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNaLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUztnQkFDM0IsSUFBSSxDQUFDLG9CQUFvQixFQUFFLFFBQVEsRUFDbkMsQ0FBQztnQkFDRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDbEUsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsaURBQWlEO1FBQ2pELE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixJQUNFLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLG9CQUFvQjtnQkFDekIsT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVE7Z0JBQ2pDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFDZixDQUFDO2dCQUNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25ELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sQ0FBQywrQkFBK0I7UUFDekMsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLFNBQVMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzNELE9BQU8sQ0FBQyxLQUFLLENBQ1gsa0JBQWtCLElBQUksQ0FBQyxJQUFJLEVBQUUscUVBQXFFLENBQ25HLENBQUM7WUFDRixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDbEMsK0NBQStDO1lBQy9DLElBQUksTUFBTSxDQUFDLHFCQUFxQixLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUMvQyxNQUFNLENBQUMscUJBQXFCLEdBQUcsR0FBRyxFQUFFO29CQUNsQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUM5QyxDQUFDLENBQUM7WUFDSixDQUFDO1lBRUQsMENBQTBDO1lBQzFDLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztZQUNsRCxDQUFDO1lBRUQsdUNBQXVDO1lBQ3ZDLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO2dCQUNoRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsQ0FBQyxDQUFDLENBQUM7WUFFSCxxQ0FBcUM7WUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLFNBQVMsQ0FBQztZQUN6QyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2xCLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUV0QixvQ0FBb0M7UUFDcEMsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2hDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELDhCQUE4QjtRQUM5QixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzdELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQzVCLENBQUM7UUFFRCx5QkFBeUI7UUFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBRXpCLDZCQUE2QjtRQUM3QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzlELENBQUM7SUFDSCxDQUFDO0lBRU8sVUFBVTtRQUNoQixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVoRSxnQ0FBZ0M7UUFDaEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7WUFDbkIsSUFBSSxNQUFNLENBQUMsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO2dCQUNoRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsQ0FBQztRQUNILENBQUMsQ0FBQztRQUVGLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztnQkFDekIsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsT0FBTyxFQUFFLGlDQUFpQztnQkFDMUMsR0FBRyxFQUFFLENBQUM7Z0JBQ04sSUFBSSxFQUFFLENBQUM7YUFDUixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRiwrREFBK0Q7UUFDL0QsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFhLEVBQUUsRUFBRTtnQkFDekMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDbkMsSUFBSSxDQUFDLHFCQUFxQixDQUFDO3dCQUN6QixRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVE7d0JBQ3BCLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTzt3QkFDbEIsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLO3dCQUNaLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTTtxQkFDZixDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUMsQ0FBQztZQUNGLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUVELHlCQUF5QjtRQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU8sYUFBYTtRQUNuQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxhQUFhLENBQUM7UUFDekQsSUFDRSxDQUFDLFNBQVM7WUFDVixDQUFDLElBQUksQ0FBQyxvQkFBb0I7WUFDMUIsSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTO1lBQzNCLElBQUksQ0FBQyxTQUFTLEVBQ2QsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQXVCO1lBQ2pDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3ZCLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzNCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQzdCLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3JDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2pCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO1NBQ3hCLENBQUM7UUFFRixJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzVCLENBQUM7UUFBQyxPQUFPLEtBQWMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0RBQWdELEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFdkUsSUFBSSxPQUFPLEdBQUcsZ0NBQWdDLENBQUM7WUFDL0MsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQzFCLENBQUM7WUFFRCxJQUFJLENBQUMscUJBQXFCLENBQUM7Z0JBQ3pCLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMvQixPQUFPO2dCQUNQLEdBQUcsRUFBRSxDQUFDO2dCQUNOLElBQUksRUFBRSxDQUFDO2FBQ1IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzlELE9BQU87UUFDVCxDQUFDO1FBRUQsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxjQUFjLEdBQUc7WUFDcEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FDakMsSUFBSSxDQUFDLFFBQVEsRUFDYixtQkFBbUIsRUFDbkIsR0FBRyxFQUFFO2dCQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMvQixDQUFDLENBQ0Y7WUFFRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUNqQyxJQUFJLENBQUMsUUFBUSxFQUNiLGtCQUFrQixFQUNsQixHQUFHLEVBQUU7Z0JBQ0gsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM5QixDQUFDLENBQ0Y7WUFFRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUNqQyxJQUFJLENBQUMsUUFBUSxFQUNiLGVBQWUsRUFDZixHQUFHLEVBQUU7Z0JBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzQixDQUFDLENBQ0Y7WUFFRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUNqQyxJQUFJLENBQUMsUUFBUSxFQUNiLFNBQVMsRUFDVCxDQUFDLEdBQUcsSUFBZSxFQUFFLEVBQUU7Z0JBQ3JCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFnQixDQUFDO2dCQUVqQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQixDQUFDLENBQ0Y7WUFFRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUNqQyxJQUFJLENBQUMsUUFBUSxFQUNiLGVBQWUsRUFDZixHQUFHLEVBQUU7Z0JBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzQixDQUFDLENBQ0Y7WUFFRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUNqQyxJQUFJLENBQUMsUUFBUSxFQUNiLGtCQUFrQixFQUNsQixDQUFDLEdBQUcsSUFBZSxFQUFFLEVBQUU7Z0JBQ3JCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFnQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxLQUE2QjtRQUN6RCxPQUFPLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsVUFBVSxDQUFDLEtBQWE7UUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyx1QkFBdUI7SUFDdEQsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQWtDO1FBQ2pELElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFjO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxtQkFBbUI7SUFDbkIsUUFBUTtRQUNOLG9FQUFvRTtRQUNwRSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQzVDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELHNDQUFzQztRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDN0Msc0JBQXNCO1lBQ3RCLE9BQU8sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDbkMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzt1R0F2VVUscUJBQXFCLDJDQTZDdEIsUUFBUSxhQUNSLFdBQVc7MkZBOUNWLHFCQUFxQiw2Z0RBZnJCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztnQkFDcEQsS0FBSyxFQUFFLElBQUk7YUFDWjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxhQUFhO2dCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixDQUFDO2dCQUNwRCxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsZ0tBbkJTLHVEQUF1RDs7MkZBdUJ0RCxxQkFBcUI7a0JBekJqQyxTQUFTOytCQUNFLGVBQWUsWUFDZix1REFBdUQsYUFRdEQ7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsc0JBQXNCLENBQUM7NEJBQ3BELEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSxhQUFhOzRCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQzs0QkFDcEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0YsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSTs7MEJBK0NiLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsTUFBTTsyQkFBQyxXQUFXOztBQXFUdkIsTUFBTSxPQUFPLDhCQUNYLFNBQVEscUJBQXFCO0lBRzdCLCtCQUErQjtJQUN0QixTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWpDLHVEQUF1RDtJQUM5QyxRQUFRO1FBQ2YsNkJBQTZCO1FBQzdCLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNuQixDQUFDO3VHQVhVLDhCQUE4QjsyRkFBOUIsOEJBQThCLHNOQWY5QjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsOEJBQThCLENBQUM7Z0JBQzdELEtBQUssRUFBRSxJQUFJO2FBQ1o7WUFDRDtnQkFDRSxPQUFPLEVBQUUsYUFBYTtnQkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztnQkFDN0QsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLGlEQW5CUyx1REFBdUQ7OzJGQXVCdEQsOEJBQThCO2tCQXpCMUMsU0FBUzsrQkFDRSx5QkFBeUIsWUFDekIsdURBQXVELGFBUXREO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLCtCQUErQixDQUFDOzRCQUM3RCxLQUFLLEVBQUUsSUFBSTt5QkFDWjt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsK0JBQStCLENBQUM7NEJBQzdELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGLGNBQ1csSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgZWZmZWN0LFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBJbmplY3QsXG4gIGlucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgb3V0cHV0LFxuICBQTEFURk9STV9JRCxcbiAgUmVuZGVyZXIyLFxuICBzaWduYWwsXG4gIHZpZXdDaGlsZCxcbiAgRE9DVU1FTlRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgaXNWYWxpZEhvc3QgfSBmcm9tICcuLi9oZWxwZXJzL2lzLXZhbGlkLWhvc3QnO1xuaW1wb3J0IHtcbiAgSmF2YXNjcmlwdEVycm9yUGF5bG9hZCxcbiAgU21hcnRDYXB0Y2hhSW5zdGFuY2UsXG4gIFNtYXJ0Q2FwdGNoYVBhcmFtcyxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBBUElfTElOSyA9IChob3N0ID0gJ3NtYXJ0Y2FwdGNoYS55YW5kZXhjbG91ZC5uZXQnKSA9PiB7XG4gIGNvbnN0IGJhc2UgPSAvXmh0dHBzPy8udGVzdChob3N0KSA/IGhvc3QgOiBgaHR0cHM6Ly8ke2hvc3R9YDtcbiAgcmV0dXJuIGAke2Jhc2V9L2NhcHRjaGEuanM/cmVuZGVyPW9ubG9hZCZvbmxvYWQ9X19vblNtYXJ0Q2FwdGNoYVJlYWR5YDtcbn07XG5cbi8vIFNoYXJlZCBjYWxsYmFja3MgYXJyYXlcbmNvbnN0IGNhbGxiYWNrczogKCgpID0+IHZvaWQpW10gPSBbXTtcbmV4cG9ydCBjb25zdCBzdGFydExvYWRpbmcgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc21hcnQtY2FwdGNoYScsXG4gIHRlbXBsYXRlOiBgIDxkaXYgY2xhc3M9XCJzbWFydC1jYXB0Y2hhXCIgI2NhcHRjaGFDb250YWluZXI+PC9kaXY+IGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5zbWFydC1jYXB0Y2hhIHtcbiAgICAgICAgaGVpZ2h0OiAxMDJweDtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNtYXJ0Q2FwdGNoYUNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTbWFydENhcHRjaGFDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFNtYXJ0Q2FwdGNoYUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95XG57XG4gIHNpdGVrZXkgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG4gIGludmlzaWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgdmlzaWJsZSA9IGlucHV0PGJvb2xlYW4+KCk7IC8vIEZvciBJbnZpc2libGVDYXB0Y2hhIHRvIGV4ZWN1dGVcbiAgaGlkZVNoaWVsZCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHNoaWVsZFBvc2l0aW9uID0gaW5wdXQ8XG4gICAgJ3RvcC1sZWZ0JyB8ICd0b3AtcmlnaHQnIHwgJ2JvdHRvbS1sZWZ0JyB8ICdib3R0b20tcmlnaHQnXG4gID4oKTtcbiAgbGFuZ3VhZ2UgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGhvc3QgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIHNldHRpbmcgaXMgZGVwcmVjYXRlZCBhbmQgbXVzdCBvbmx5IGJlIGNoYW5nZWQgdmlhIHRoZSBZYW5kZXggQ2xvdWQgaW50ZXJmYWNlLlxuICAgKi9cbiAgdGhlbWUgPSBpbnB1dDwnbGlnaHQnIHwgJ2RhcmsnIHwgJ2F1dG8nPignYXV0bycpO1xuICB0ZXN0ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgd2VidmlldyA9IGlucHV0PGJvb2xlYW4+KCk7XG5cbiAgY2hhbGxlbmdlSGlkZGVuID0gb3V0cHV0PHZvaWQ+KCk7XG4gIGNoYWxsZW5nZVZpc2libGUgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgc3VjY2VzcyA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIG5ldHdvcmtFcnJvciA9IG91dHB1dDx2b2lkPigpO1xuICB0b2tlbkV4cGlyZWQgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgamF2YXNjcmlwdEVycm9yID0gb3V0cHV0PEphdmFzY3JpcHRFcnJvclBheWxvYWQ+KCk7XG5cbiAgY2FwdGNoYUNvbnRhaW5lciA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oJ2NhcHRjaGFDb250YWluZXInKTtcblxuICBwcm90ZWN0ZWQgd2lkZ2V0SWQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIHNtYXJ0Q2FwdGNoYUluc3RhbmNlOiBTbWFydENhcHRjaGFJbnN0YW5jZSB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIGRlc3Ryb3llZCA9IGZhbHNlO1xuICBwcml2YXRlIHVuc3Vic2NyaWJlRm5zOiBBcnJheTwoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ+ID0gW107XG4gIHByaXZhdGUgZXJyb3JFdmVudEhhbmRsZXI6ICgoZTogRXJyb3JFdmVudCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcgfCBudWxsKSA9PiB2b2lkID0gKCkgPT4ge1xuICAgIC8vIG9uQ2hhbmdlXG4gIH07XG4gIHByaXZhdGUgb25Ub3VjaGVkID0gKCkgPT4ge1xuICAgIC8vIG9uVG91Y2hlZFxuICB9O1xuICBwcml2YXRlIF9pbm5lclZhbHVlID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpOyAvLyBVc2UgYSBzaWduYWwgZm9yIGlubmVyVmFsdWVcbiAgcHJpdmF0ZSBjYWxsYmFja0luZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlbmRlcmVyMjogUmVuZGVyZXIyLFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogb2JqZWN0XG4gICkge1xuICAgIC8vIEVmZmVjdCBmb3IgdGhlbWUgY2hhbmdlc1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudGhlbWUoKSAmJlxuICAgICAgICB0aGlzLndpZGdldElkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdGhpcy5zbWFydENhcHRjaGFJbnN0YW5jZT8uc2V0VGhlbWVcbiAgICAgICkge1xuICAgICAgICB0aGlzLnNtYXJ0Q2FwdGNoYUluc3RhbmNlLnNldFRoZW1lKHRoaXMud2lkZ2V0SWQsIHRoaXMudGhlbWUoKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBFZmZlY3QgZm9yIHZpc2libGUgY2hhbmdlcyAoSW52aXNpYmxlIENhcHRjaGEpXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy52aXNpYmxlKCkgJiZcbiAgICAgICAgdGhpcy5pbnZpc2libGUoKSAmJlxuICAgICAgICB0aGlzLnNtYXJ0Q2FwdGNoYUluc3RhbmNlICYmXG4gICAgICAgIHR5cGVvZiB0aGlzLndpZGdldElkID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAhdGhpcy5kZXN0cm95ZWRcbiAgICAgICkge1xuICAgICAgICB0aGlzLnNtYXJ0Q2FwdGNoYUluc3RhbmNlLmV4ZWN1dGUodGhpcy53aWRnZXRJZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHJldHVybjsgLy8gRG9uJ3QgcHJvY2VlZCBvbiBzZXJ2ZXItc2lkZVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3QoKSAhPT0gdW5kZWZpbmVkICYmICFpc1ZhbGlkSG9zdCh0aGlzLmhvc3QoKSkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBbU21hcnRDYXB0Y2hhXSAke3RoaXMuaG9zdCgpfSBob3N0IGlzIGludmFsaWQuIEl0IHNob3VsZCBiZSBvZiBhIGtpbmQ6IGRvbWFpbi5ydSwgbG9jYWxob3N0OjMwMDBgXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gU2V0dXAgZ2xvYmFsIGNhbGxiYWNrIGlmIG5vdCBhbHJlYWR5IGRlZmluZWRcbiAgICAgIGlmICh3aW5kb3cuX19vblNtYXJ0Q2FwdGNoYVJlYWR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgd2luZG93Ll9fb25TbWFydENhcHRjaGFSZWFkeSA9ICgpID0+IHtcbiAgICAgICAgICBjYWxsYmFja3MuZm9yRWFjaCgoY2FsbGJhY2spID0+IGNhbGxiYWNrKCkpO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBTbWFydENhcHRjaGEgaXMgYWxyZWFkeSBsb2FkZWRcbiAgICAgIGlmICh3aW5kb3cuc21hcnRDYXB0Y2hhKSB7XG4gICAgICAgIHRoaXMuc21hcnRDYXB0Y2hhSW5zdGFuY2UgPSB3aW5kb3cuc21hcnRDYXB0Y2hhO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgb3VyIGNhbGxiYWNrIHRvIHRoZSBzaGFyZWQgYXJyYXlcbiAgICAgIHRoaXMuY2FsbGJhY2tJbmRleCA9IGNhbGxiYWNrcy5wdXNoKCgpID0+IHtcbiAgICAgICAgdGhpcy5zbWFydENhcHRjaGFJbnN0YW5jZSA9IHdpbmRvdy5zbWFydENhcHRjaGE7XG4gICAgICAgIHRoaXMucmVuZGVyQ2FwdGNoYSgpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIExvYWQgc2NyaXB0IGlmIG5vdCBhbHJlYWR5IGxvYWRpbmdcbiAgICAgIGNvbnN0IGhvc3RLZXkgPSB0aGlzLmhvc3QoKSB8fCAnZGVmYXVsdCc7XG4gICAgICBpZiAoIXN0YXJ0TG9hZGluZy5nZXQoaG9zdEtleSkpIHtcbiAgICAgICAgdGhpcy5sb2FkU2NyaXB0KCk7XG4gICAgICAgIHN0YXJ0TG9hZGluZy5zZXQoaG9zdEtleSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNtYXJ0Q2FwdGNoYUluc3RhbmNlKSB7XG4gICAgICB0aGlzLnJlbmRlckNhcHRjaGEoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XG5cbiAgICAvLyBSZW1vdmUgY2FsbGJhY2sgZnJvbSBzaGFyZWQgYXJyYXlcbiAgICBpZiAodGhpcy5jYWxsYmFja0luZGV4ICE9PSBudWxsKSB7XG4gICAgICBjYWxsYmFja3Muc3BsaWNlKHRoaXMuY2FsbGJhY2tJbmRleCAtIDEsIDEpO1xuICAgIH1cblxuICAgIC8vIERlc3Ryb3kgd2lkZ2V0IGlmIGl0IGV4aXN0c1xuICAgIGlmICh0aGlzLndpZGdldElkICE9PSB1bmRlZmluZWQgJiYgdGhpcy5zbWFydENhcHRjaGFJbnN0YW5jZSkge1xuICAgICAgdGhpcy5zbWFydENhcHRjaGFJbnN0YW5jZS5kZXN0cm95KHRoaXMud2lkZ2V0SWQpO1xuICAgICAgdGhpcy53aWRnZXRJZCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBDbGVhbiB1cCBzdWJzY3JpcHRpb25zXG4gICAgdGhpcy51bnN1YnNjcmliZUZucy5mb3JFYWNoKChmbikgPT4gZm4gJiYgZm4oKSk7XG4gICAgdGhpcy51bnN1YnNjcmliZUZucyA9IFtdO1xuXG4gICAgLy8gUmVtb3ZlIGVycm9yIGV2ZW50IGhhbmRsZXJcbiAgICBpZiAodGhpcy5lcnJvckV2ZW50SGFuZGxlciAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5lcnJvckV2ZW50SGFuZGxlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkU2NyaXB0KCk6IHZvaWQge1xuICAgIGNvbnN0IHNyYyA9IEFQSV9MSU5LKHRoaXMuaG9zdCgpKTtcbiAgICBjb25zdCBzY3JpcHQgPSB0aGlzLnJlbmRlcmVyMi5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICB0aGlzLnJlbmRlcmVyMi5zZXRBdHRyaWJ1dGUoc2NyaXB0LCAnc3JjJywgc3JjKTtcbiAgICB0aGlzLnJlbmRlcmVyMi5zZXRBdHRyaWJ1dGUoc2NyaXB0LCAndHlwZScsICd0ZXh0L2phdmFzY3JpcHQnKTtcbiAgICB0aGlzLnJlbmRlcmVyMi5zZXRBdHRyaWJ1dGUoc2NyaXB0LCAnY3Jvc3NPcmlnaW4nLCAnYW5vbnltb3VzJyk7XG5cbiAgICAvLyBIYW5kbGUgcmVndWxhciBvbmxvYWQvb25lcnJvclxuICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICBpZiAod2luZG93LnNtYXJ0Q2FwdGNoYSAmJiAhdGhpcy5zbWFydENhcHRjaGFJbnN0YW5jZSkge1xuICAgICAgICB0aGlzLnNtYXJ0Q2FwdGNoYUluc3RhbmNlID0gd2luZG93LnNtYXJ0Q2FwdGNoYTtcbiAgICAgICAgdGhpcy5yZW5kZXJDYXB0Y2hhKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHNjcmlwdC5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVKYXZhc2NyaXB0RXJyb3Ioe1xuICAgICAgICBmaWxlbmFtZTogc3JjLFxuICAgICAgICBtZXNzYWdlOiAnVW5rbm93biBlcnJvciBvbiBzY3JpcHQgbG9hZGluZycsXG4gICAgICAgIGNvbDogMCxcbiAgICAgICAgbGluZTogMCxcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBBZGQgZXJyb3IgZXZlbnQgbGlzdGVuZXIgZm9yIEpTIGVycm9ycyBpbiB0aGUgY2FwdGNoYSBzY3JpcHRcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMuZXJyb3JFdmVudEhhbmRsZXIgPSAoZTogRXJyb3JFdmVudCkgPT4ge1xuICAgICAgICBpZiAoZS5maWxlbmFtZT8uaW5kZXhPZihzcmMpID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVKYXZhc2NyaXB0RXJyb3Ioe1xuICAgICAgICAgICAgZmlsZW5hbWU6IGUuZmlsZW5hbWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBlLm1lc3NhZ2UsXG4gICAgICAgICAgICBjb2w6IGUuY29sbm8sXG4gICAgICAgICAgICBsaW5lOiBlLmxpbmVubyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuZXJyb3JFdmVudEhhbmRsZXIpO1xuICAgIH1cblxuICAgIC8vIEFkZCBzY3JpcHQgdG8gZG9jdW1lbnRcbiAgICB0aGlzLnJlbmRlcmVyMi5hcHBlbmRDaGlsZCh0aGlzLmRvY3VtZW50LmJvZHksIHNjcmlwdCk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckNhcHRjaGEoKTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jYXB0Y2hhQ29udGFpbmVyKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKFxuICAgICAgIWNvbnRhaW5lciB8fFxuICAgICAgIXRoaXMuc21hcnRDYXB0Y2hhSW5zdGFuY2UgfHxcbiAgICAgIHRoaXMud2lkZ2V0SWQgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5kZXN0cm95ZWRcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbXM6IFNtYXJ0Q2FwdGNoYVBhcmFtcyA9IHtcbiAgICAgIHNpdGVrZXk6IHRoaXMuc2l0ZWtleSgpLFxuICAgICAgaGw6IHRoaXMubGFuZ3VhZ2UoKSxcbiAgICAgIHRoZW1lOiB0aGlzLnRoZW1lKCksXG4gICAgICBpbnZpc2libGU6IHRoaXMuaW52aXNpYmxlKCksXG4gICAgICBoaWRlU2hpZWxkOiB0aGlzLmhpZGVTaGllbGQoKSxcbiAgICAgIHNoaWVsZFBvc2l0aW9uOiB0aGlzLnNoaWVsZFBvc2l0aW9uKCksXG4gICAgICB0ZXN0OiB0aGlzLnRlc3QoKSxcbiAgICAgIHdlYnZpZXc6IHRoaXMud2VidmlldygpLFxuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy53aWRnZXRJZCA9IHRoaXMuc21hcnRDYXB0Y2hhSW5zdGFuY2UucmVuZGVyKGNvbnRhaW5lciwgcGFyYW1zKTtcbiAgICAgIHRoaXMuc2V0dXBTdWJzY3JpcHRpb25zKCk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tTbWFydENhcHRjaGFdIEVycm9yIHJlbmRlcmluZyBjYXB0Y2hhIHdpZGdldDonLCBlcnJvcik7XG5cbiAgICAgIGxldCBtZXNzYWdlID0gJ1Vua25vd24gZXJyb3IgZHVyaW5nIHJlbmRlcmluZyc7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBtZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5oYW5kbGVKYXZhc2NyaXB0RXJyb3Ioe1xuICAgICAgICBmaWxlbmFtZTogQVBJX0xJTksodGhpcy5ob3N0KCkpLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBjb2w6IDAsXG4gICAgICAgIGxpbmU6IDAsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldHVwU3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy53aWRnZXRJZCA9PT0gdW5kZWZpbmVkIHx8ICF0aGlzLnNtYXJ0Q2FwdGNoYUluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU3RvcmUgdW5zdWJzY3JpYmUgZnVuY3Rpb25zIGZvciBjbGVhbnVwXG4gICAgdGhpcy51bnN1YnNjcmliZUZucyA9IFtcbiAgICAgIHRoaXMuc21hcnRDYXB0Y2hhSW5zdGFuY2Uuc3Vic2NyaWJlKFxuICAgICAgICB0aGlzLndpZGdldElkLFxuICAgICAgICAnY2hhbGxlbmdlLXZpc2libGUnLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jaGFsbGVuZ2VWaXNpYmxlLmVtaXQoKTtcbiAgICAgICAgfVxuICAgICAgKSxcblxuICAgICAgdGhpcy5zbWFydENhcHRjaGFJbnN0YW5jZS5zdWJzY3JpYmUoXG4gICAgICAgIHRoaXMud2lkZ2V0SWQsXG4gICAgICAgICdjaGFsbGVuZ2UtaGlkZGVuJyxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2hpZGRlbicpO1xuICAgICAgICAgIHRoaXMuY2hhbGxlbmdlSGlkZGVuLmVtaXQoKTtcbiAgICAgICAgfVxuICAgICAgKSxcblxuICAgICAgdGhpcy5zbWFydENhcHRjaGFJbnN0YW5jZS5zdWJzY3JpYmUoXG4gICAgICAgIHRoaXMud2lkZ2V0SWQsXG4gICAgICAgICduZXR3b3JrLWVycm9yJyxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMubmV0d29ya0Vycm9yLmVtaXQoKTtcbiAgICAgICAgfVxuICAgICAgKSxcblxuICAgICAgdGhpcy5zbWFydENhcHRjaGFJbnN0YW5jZS5zdWJzY3JpYmUoXG4gICAgICAgIHRoaXMud2lkZ2V0SWQsXG4gICAgICAgICdzdWNjZXNzJyxcbiAgICAgICAgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IFt0b2tlbl0gPSBhcmdzIGFzIFtzdHJpbmddO1xuXG4gICAgICAgICAgdGhpcy5faW5uZXJWYWx1ZS5zZXQodG9rZW4pO1xuICAgICAgICAgIHRoaXMub25DaGFuZ2UodG9rZW4pO1xuICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgICAgdGhpcy5zdWNjZXNzLmVtaXQodG9rZW4pO1xuICAgICAgICB9XG4gICAgICApLFxuXG4gICAgICB0aGlzLnNtYXJ0Q2FwdGNoYUluc3RhbmNlLnN1YnNjcmliZShcbiAgICAgICAgdGhpcy53aWRnZXRJZCxcbiAgICAgICAgJ3Rva2VuLWV4cGlyZWQnLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5faW5uZXJWYWx1ZS5zZXQobnVsbCk7XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZShudWxsKTtcbiAgICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICAgIHRoaXMudG9rZW5FeHBpcmVkLmVtaXQoKTtcbiAgICAgICAgfVxuICAgICAgKSxcblxuICAgICAgdGhpcy5zbWFydENhcHRjaGFJbnN0YW5jZS5zdWJzY3JpYmUoXG4gICAgICAgIHRoaXMud2lkZ2V0SWQsXG4gICAgICAgICdqYXZhc2NyaXB0LWVycm9yJyxcbiAgICAgICAgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IFtlcnJvcl0gPSBhcmdzIGFzIFtKYXZhc2NyaXB0RXJyb3JQYXlsb2FkXTtcbiAgICAgICAgICB0aGlzLmhhbmRsZUphdmFzY3JpcHRFcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlSmF2YXNjcmlwdEVycm9yKGVycm9yOiBKYXZhc2NyaXB0RXJyb3JQYXlsb2FkKTogdm9pZCB7XG4gICAgY29uc29sZS5lcnJvcignW1NtYXJ0Q2FwdGNoYV0gSmF2YXNjcmlwdCBlcnJvcjonLCBlcnJvcik7XG4gICAgdGhpcy5qYXZhc2NyaXB0RXJyb3IuZW1pdChlcnJvcik7XG4gIH1cblxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvciBtZXRob2RzXG4gIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2lubmVyVmFsdWUuc2V0KHZhbHVlKTsgLy8gU2V0IHRoZSBzaWduYWwgdmFsdWVcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogc3RyaW5nIHwgbnVsbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8vIFZhbGlkYXRvciBtZXRob2RcbiAgdmFsaWRhdGUoKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIC8vIFdoZW4gdXNpbmcgaW52aXNpYmxlIGNhcHRjaGEsIGRvbid0IHZhbGlkYXRlIHVudGlsIHVzZXIgaW50ZXJhY3RzXG4gICAgaWYgKHRoaXMuaW52aXNpYmxlKCkgJiYgIXRoaXMuX2lubmVyVmFsdWUoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gRm9yIHN0YW5kYXJkIGNhcHRjaGEsIHJlcXVpcmUgdG9rZW5cbiAgICBpZiAoIXRoaXMuaW52aXNpYmxlKCkgJiYgIXRoaXMuX2lubmVyVmFsdWUoKSkge1xuICAgICAgLy8gQWNjZXNzIHNpZ25hbCB2YWx1ZVxuICAgICAgcmV0dXJuIHsgY2FwdGNoYVJlcXVpcmVkOiB0cnVlIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaW52aXNpYmxlLXNtYXJ0LWNhcHRjaGEnLFxuICB0ZW1wbGF0ZTogYCA8ZGl2IGNsYXNzPVwic21hcnQtY2FwdGNoYVwiICNjYXB0Y2hhQ29udGFpbmVyPjwvZGl2PiBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAuc21hcnQtY2FwdGNoYSB7XG4gICAgICAgIC8qIE5vIGhlaWdodCBuZWVkZWQgZm9yIGludmlzaWJsZSBjYXB0Y2hhICovXG4gICAgICB9XG4gICAgYCxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJbnZpc2libGVTbWFydENhcHRjaGFDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSW52aXNpYmxlU21hcnRDYXB0Y2hhQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBJbnZpc2libGVTbWFydENhcHRjaGFDb21wb25lbnRcbiAgZXh0ZW5kcyBTbWFydENhcHRjaGFDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXRcbntcbiAgLy8gQWx3YXlzIHNldCBpbnZpc2libGUgdG8gdHJ1ZVxuICBvdmVycmlkZSBpbnZpc2libGUgPSBpbnB1dCh0cnVlKTtcblxuICAvLyBPdmVycmlkZSBuZ09uSW5pdCB0byBlbnN1cmUgaW52aXNpYmxlIGlzIGFsd2F5cyB0cnVlXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIENhbGwgcGFyZW50IGluaXRpYWxpemF0aW9uXG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgfVxufVxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXJvY2steWFuZGV4LXNtYXJ0LWNhcHRjaGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL3lhbmRleC1zbWFydC1jYXB0Y2hhL3NyYy9uZ3gtcm9jay15YW5kZXgtc21hcnQtY2FwdGNoYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}