Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Bower components Debian packages RPM packages NuGet packages

vipera-npm-registry / motif-web-admin-core   js

Repository URL to install this package:

Version: 0.3.1 

/ esm2015 / lib / services / RESTContextCatalogService.js

/**
 * @fileoverview added by tsickle
 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
import { Injectable } from '@angular/core';
import { DomainsService, ApplicationsService, } from '@wa-motif-open-api/platform-service';
import { ContextsService as RESTContextService } from '@wa-motif-open-api/rest-content-service';
import { ContextsService } from '@wa-motif-open-api/context-service';
import { Observable } from 'rxjs';
import { NGXLogger } from 'web-console-core';
/** @type {?} */
const LOG_TAG = '[RESTContextCatalogService]';
export class RESTContextCatalogService {
    /**
     * @param {?} domainService
     * @param {?} applicationService
     * @param {?} restContextService
     * @param {?} contextService
     * @param {?} logger
     */
    constructor(domainService, applicationService, restContextService, contextService, logger) {
        this.domainService = domainService;
        this.applicationService = applicationService;
        this.restContextService = restContextService;
        this.contextService = contextService;
        this.logger = logger;
    }
    /**
     * @param {?} domain
     * @param {?} application
     * @param {?} contextName
     * @return {?}
     */
    deleteRESTContext(domain, application, contextName) {
        return this.restContextService.deleteContext(domain, application, contextName);
    }
    /**
     * @param {?} domain
     * @param {?} application
     * @param {?} contextName
     * @param {?} url
     * @return {?}
     */
    createRESTContext(domain, application, contextName, url) {
        this.logger.debug(LOG_TAG, 'createRESTContext called for ', domain, application, contextName, url);
        /** @type {?} */
        let createObj = {
            context: contextName,
            url: url
        };
        return this.restContextService.createContext(domain, application, createObj);
    }
    /**
     * @param {?} domain
     * @param {?} application
     * @param {?} contextName
     * @param {?} enabled
     * @return {?}
     */
    enableRESTContext(domain, application, contextName, enabled) {
        this.logger.debug(LOG_TAG, 'enableRESTContext called for ', domain, application, contextName, enabled);
        if (enabled) {
            return this.contextService.enableContext(domain, application, contextName);
        }
        else {
            return this.contextService.disableContext(domain, application, contextName);
        }
    }
    /**
     * @param {?} domain
     * @param {?} application
     * @param {?} contextName
     * @param {?} url
     * @return {?}
     */
    updateRESTContext(domain, application, contextName, url) {
        this.logger.debug(LOG_TAG, 'updateRESTContext called for ', domain, application, contextName, url);
        /** @type {?} */
        let updateObj = {
            url: url
        };
        return this.restContextService.updateContext(domain, application, contextName, updateObj);
    }
    /**
     * Returns a JSON with the Service Catalog Structure
     * @return {?}
     */
    getRESTContextCatalog() {
        return new Observable((/**
         * @param {?} observer
         * @return {?}
         */
        (observer) => {
            this.logger.debug(LOG_TAG, 'getRESTContextCatalog called');
            /** @type {?} */
            var restContextCatalog = [];
            // Get all domains
            this.domainService.getDomains().subscribe((/**
             * @param {?} domains
             * @return {?}
             */
            (domains) => {
                /** @type {?} */
                const domainsCount = domains.length;
                /** @type {?} */
                let processedDomains = 0;
                for (const domain of domains) {
                    this.applicationService.getApplications(domain.name).subscribe((/**
                     * @param {?} applications
                     * @return {?}
                     */
                    (applications) => {
                        /** @type {?} */
                        const appCount = applications.length;
                        /** @type {?} */
                        let processedApps = 0;
                        if (appCount === 0) {
                            processedDomains++;
                            if (processedDomains === domainsCount) {
                                observer.next(restContextCatalog);
                                observer.complete();
                                this.logger.debug(LOG_TAG, 'getRESTContextCatalog completed');
                            }
                        }
                        for (const application of applications) {
                            /** @type {?} */
                            const applicationInfo = application;
                            this.restContextService.getContexts(domain.name, application.name).subscribe((/**
                             * @param {?} contexts
                             * @return {?}
                             */
                            (contexts) => {
                                this.logger.debug(LOG_TAG, 'getRESTContextCatalog contexts[' + application.name + '@' + domain.name + ']:', contexts);
                                restContextCatalog = restContextCatalog.concat(contexts);
                                processedApps++;
                                if (processedApps === appCount) {
                                    processedDomains++;
                                    if (processedDomains === domainsCount) {
                                        observer.next(restContextCatalog);
                                        observer.complete();
                                        this.logger.debug(LOG_TAG, 'getRESTContextCatalog completed');
                                    }
                                }
                            }), (/**
                             * @param {?} error
                             * @return {?}
                             */
                            (error) => {
                                processedApps++;
                                if (processedApps === appCount) {
                                    processedDomains++;
                                    if (processedDomains === domainsCount) {
                                        observer.next(restContextCatalog);
                                        observer.complete();
                                        this.logger.debug(LOG_TAG, 'getRESTContextCatalog completed');
                                    }
                                }
                                this.logger.error(LOG_TAG, 'getRESTContextCatalog error:', error);
                                observer.error(error);
                            }), (/**
                             * @return {?}
                             */
                            () => {
                                if (processedDomains === domainsCount) {
                                    observer.next(restContextCatalog);
                                    observer.complete();
                                    this.logger.debug(LOG_TAG, 'getRESTContextCatalog completed');
                                }
                            }));
                        }
                    }), (/**
                     * @param {?} error
                     * @return {?}
                     */
                    (error) => {
                        this.logger.error(LOG_TAG, 'getRESTContextCatalog error:', error);
                        observer.error(error);
                    }));
                    if (processedDomains === domainsCount) {
                        observer.next(restContextCatalog);
                        observer.complete();
                        this.logger.debug(LOG_TAG, 'getRESTContextCatalog completed');
                    }
                }
            }), (/**
             * @param {?} error
             * @return {?}
             */
            (error) => {
                this.logger.error(LOG_TAG, 'getRESTContextCatalog error:', error);
                observer.error(error);
            }));
        }));
    }
    /**
     * @param {?} domain
     * @param {?} application
     * @return {?}
     */
    getRESTContextCatalogFor(domain, application) {
        return this.restContextService.getContexts(domain, application);
    }
}
RESTContextCatalogService.decorators = [
    { type: Injectable }
];
/** @nocollapse */
RESTContextCatalogService.ctorParameters = () => [
    { type: DomainsService },
    { type: ApplicationsService },
    { type: RESTContextService },
    { type: ContextsService },
    { type: NGXLogger }
];
if (false) {
    /**
     * @type {?}
     * @private
     */
    RESTContextCatalogService.prototype.domainsList;
    /**
     * @type {?}
     * @private
     */
    RESTContextCatalogService.prototype.domainService;
    /**
     * @type {?}
     * @private
     */
    RESTContextCatalogService.prototype.applicationService;
    /**
     * @type {?}
     * @private
     */
    RESTContextCatalogService.prototype.restContextService;
    /**
     * @type {?}
     * @private
     */
    RESTContextCatalogService.prototype.contextService;
    /**
     * @type {?}
     * @private
     */
    RESTContextCatalogService.prototype.logger;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUkVTVENvbnRleHRDYXRhbG9nU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL21vdGlmLXdlYi1hZG1pbi1jb3JlLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL1JFU1RDb250ZXh0Q2F0YWxvZ1NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFFZCxtQkFBbUIsR0FFakIsTUFBTSxxQ0FBcUMsQ0FBQztBQU12RCxPQUFPLEVBQUUsZUFBZSxJQUFJLGtCQUFrQixFQUF3RCxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RKLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7TUFFdkMsT0FBTyxHQUFHLDZCQUE2QjtBQUk3QyxNQUFNLE9BQU8seUJBQXlCOzs7Ozs7OztJQUlsQyxZQUFvQixhQUE2QixFQUNyQyxrQkFBdUMsRUFDdkMsa0JBQXNDLEVBQ3RDLGNBQStCLEVBQy9CLE1BQWlCO1FBSlQsa0JBQWEsR0FBYixhQUFhLENBQWdCO1FBQ3JDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBcUI7UUFDdkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxtQkFBYyxHQUFkLGNBQWMsQ0FBaUI7UUFDL0IsV0FBTSxHQUFOLE1BQU0sQ0FBVztJQUM3QixDQUFDOzs7Ozs7O0lBR00saUJBQWlCLENBQUMsTUFBYSxFQUFFLFdBQWtCLEVBQUUsV0FBa0I7UUFDMUUsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbkYsQ0FBQzs7Ozs7Ozs7SUFFTSxpQkFBaUIsQ0FBQyxNQUFh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SSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDcEUsQ0FBQzs7O1lBM0lKLFVBQVU7Ozs7WUFuQkYsY0FBYztZQUVkLG1CQUFtQjtZQVFBLGtCQUFrQjtZQUNyQyxlQUFlO1lBR2YsU0FBUzs7Ozs7OztJQVFkLGdEQUFtQzs7Ozs7SUFFdkIsa0RBQXFDOzs7OztJQUM3Qyx1REFBK0M7Ozs7O0lBQy9DLHVEQUE4Qzs7Ozs7SUFDOUMsbURBQXVDOzs7OztJQUN2QywyQ0FBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21haW5zU2VydmljZSxcbiAgICAgICAgIERvbWFpbixcbiAgICAgICAgIEFwcGxpY2F0aW9uc1NlcnZpY2UsXG4gICAgICAgICBBcHBsaWNhdGlvbixcbiAgICAgICAgICB9IGZyb20gJ0B3YS1tb3RpZi1vcGVuLWFwaS9wbGF0Zm9ybS1zZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VzU2VydmljZSxcbiAgICBTZXJ2aWNlLFxuICAgIFNlcnZpY2VDcmVhdGUsXG4gICAgT3BlcmF0aW9uc1NlcnZpY2UsXG4gICAgU2VydmljZU9wZXJhdGlvbiB9IGZyb20gJ0B3YS1tb3RpZi1vcGVuLWFwaS9jYXRhbG9nLXNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udGV4dHNTZXJ2aWNlIGFzIFJFU1RDb250ZXh0U2VydmljZSwgU2VydmljZUNvbnRleHQsIFJlc3RDb250ZXh0Q3JlYXRlLCBSZXN0Q29udGV4dFVwZGF0ZSB9IGZyb20gJ0B3YS1tb3RpZi1vcGVuLWFwaS9yZXN0LWNvbnRlbnQtc2VydmljZSc7XG5pbXBvcnQgeyBDb250ZXh0c1NlcnZpY2UgfSBmcm9tICdAd2EtbW90aWYtb3Blbi1hcGkvY29udGV4dC1zZXJ2aWNlJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTkdYTG9nZ2VyIH0gZnJvbSAnd2ViLWNvbnNvbGUtY29yZSc7XG5cbmNvbnN0IExPR19UQUcgPSAnW1JFU1RDb250ZXh0Q2F0YWxvZ1NlcnZpY2VdJztcblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUkVTVENvbnRleHRDYXRhbG9nU2VydmljZSB7XG5cbiAgICBwcml2YXRlIGRvbWFpbnNMaXN0OiBBcnJheTxEb21haW4+O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBkb21haW5TZXJ2aWNlOiBEb21haW5zU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhcHBsaWNhdGlvblNlcnZpY2U6IEFwcGxpY2F0aW9uc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVzdENvbnRleHRTZXJ2aWNlOiBSRVNUQ29udGV4dFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IENvbnRleHRzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBsb2dnZXI6IE5HWExvZ2dlcikge1xuICAgIH1cblxuXG4gICAgcHVibGljIGRlbGV0ZVJFU1RDb250ZXh0KGRvbWFpbjpzdHJpbmcsIGFwcGxpY2F0aW9uOnN0cmluZywgY29udGV4dE5hbWU6c3RyaW5nKSA6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3RDb250ZXh0U2VydmljZS5kZWxldGVDb250ZXh0KGRvbWFpbiwgYXBwbGljYXRpb24sIGNvbnRleHROYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlUkVTVENvbnRleHQoZG9tYWluOnN0cmluZywgYXBwbGljYXRpb246c3RyaW5nLCBjb250ZXh0TmFtZTpzdHJpbmcsIHVybDpzdHJpbmcpIDogT2JzZXJ2YWJsZTxTZXJ2aWNlQ29udGV4dD4ge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAnY3JlYXRlUkVTVENvbnRleHQgY2FsbGVkIGZvciAnLCBkb21haW4sIGFwcGxpY2F0aW9uLCBjb250ZXh0TmFtZSwgdXJsICk7XG4gICAgICAgIGxldCBjcmVhdGVPYmo6IFJlc3RDb250ZXh0Q3JlYXRlID0ge1xuICAgICAgICAgICAgY29udGV4dDogY29udGV4dE5hbWUsXG4gICAgICAgICAgICB1cmw6IHVybFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN0Q29udGV4dFNlcnZpY2UuY3JlYXRlQ29udGV4dChkb21haW4sIGFwcGxpY2F0aW9uLCBjcmVhdGVPYmopO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbmFibGVSRVNUQ29udGV4dChkb21haW46c3RyaW5nLCBhcHBsaWNhdGlvbjpzdHJpbmcsIGNvbnRleHROYW1lOnN0cmluZywgZW5hYmxlZDogYm9vbGVhbikgOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAnZW5hYmxlUkVTVENvbnRleHQgY2FsbGVkIGZvciAnLCBkb21haW4sIGFwcGxpY2F0aW9uLCBjb250ZXh0TmFtZSwgZW5hYmxlZCApO1xuICAgICAgICBpZiAoZW5hYmxlZCl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0U2VydmljZS5lbmFibGVDb250ZXh0KGRvbWFpbiwgYXBwbGljYXRpb24sIGNvbnRleHROYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRleHRTZXJ2aWNlLmRpc2FibGVDb250ZXh0KGRvbWFpbiwgYXBwbGljYXRpb24sIGNvbnRleHROYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVSRVNUQ29udGV4dChkb21haW46c3RyaW5nLCBhcHBsaWNhdGlvbjpzdHJpbmcsIGNvbnRleHROYW1lOnN0cmluZywgdXJsOnN0cmluZykgOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAndXBkYXRlUkVTVENvbnRleHQgY2FsbGVkIGZvciAnLCBkb21haW4sIGFwcGxpY2F0aW9uLCBjb250ZXh0TmFtZSwgdXJsICk7XG4gICAgICAgIGxldCB1cGRhdGVPYmo6IFJlc3RDb250ZXh0VXBkYXRlID0ge1xuICAgICAgICAgICAgdXJsOiB1cmxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdENvbnRleHRTZXJ2aWNlLnVwZGF0ZUNvbnRleHQoZG9tYWluLCBhcHBsaWNhdGlvbiwgY29udGV4dE5hbWUsIHVwZGF0ZU9iaik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEpTT04gd2l0aCB0aGUgU2VydmljZSBDYXRhbG9nIFN0cnVjdHVyZVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRSRVNUQ29udGV4dENhdGFsb2coKTogT2JzZXJ2YWJsZTxBcnJheTxTZXJ2aWNlQ29udGV4dD4+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xuXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAnZ2V0UkVTVENvbnRleHRDYXRhbG9nIGNhbGxlZCcgKTtcblxuICAgICAgICAgICAgdmFyIHJlc3RDb250ZXh0Q2F0YWxvZyA9IFtdO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBHZXQgYWxsIGRvbWFpbnNcbiAgICAgICAgICAgIHRoaXMuZG9tYWluU2VydmljZS5nZXREb21haW5zKCkuc3Vic2NyaWJlKCggZG9tYWluczogQXJyYXk8RG9tYWluPiApID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkb21haW5zQ291bnQgPSBkb21haW5zLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBsZXQgcHJvY2Vzc2VkRG9tYWlucyA9IDA7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBkb21haW4gb2YgZG9tYWlucykge1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmdldEFwcGxpY2F0aW9ucyhkb21haW4ubmFtZSkuc3Vic2NyaWJlKCggYXBwbGljYXRpb25zOiBBcnJheTxBcHBsaWNhdGlvbj4gKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcENvdW50ID0gYXBwbGljYXRpb25zLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9jZXNzZWRBcHBzID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFwcENvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkRG9tYWlucysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcHJvY2Vzc2VkRG9tYWlucyA9PT0gZG9tYWluc0NvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoIHJlc3RDb250ZXh0Q2F0YWxvZyApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAnZ2V0UkVTVENvbnRleHRDYXRhbG9nIGNvbXBsZXRlZCcgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXBwbGljYXRpb24gb2YgYXBwbGljYXRpb25zICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcGxpY2F0aW9uSW5mbzogYW55ID0gYXBwbGljYXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3RDb250ZXh0U2VydmljZS5nZXRDb250ZXh0cyhkb21haW4ubmFtZSwgYXBwbGljYXRpb24ubmFtZSkuc3Vic2NyaWJlKChjb250ZXh0czpBcnJheTxTZXJ2aWNlQ29udGV4dD4pPT57XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoTE9HX1RBRywgJ2dldFJFU1RDb250ZXh0Q2F0YWxvZyBjb250ZXh0c1snICsgYXBwbGljYXRpb24ubmFtZSArICdAJyArIGRvbWFpbi5uYW1lICsgJ106JywgY29udGV4dHMgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdENvbnRleHRDYXRhbG9nID0gcmVzdENvbnRleHRDYXRhbG9nLmNvbmNhdChjb250ZXh0cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRBcHBzKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzZWRBcHBzID09PSBhcHBDb3VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkRG9tYWlucysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwcm9jZXNzZWREb21haW5zID09PSBkb21haW5zQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KCByZXN0Q29udGV4dENhdGFsb2cgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKExPR19UQUcsICdnZXRSRVNUQ29udGV4dENhdGFsb2cgY29tcGxldGVkJyApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAoZXJyb3IpPT57XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkQXBwcysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc2VkQXBwcyA9PT0gYXBwQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZERvbWFpbnMrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcHJvY2Vzc2VkRG9tYWlucyA9PT0gZG9tYWluc0NvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCggcmVzdENvbnRleHRDYXRhbG9nICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAnZ2V0UkVTVENvbnRleHRDYXRhbG9nIGNvbXBsZXRlZCcgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihMT0dfVEFHLCAnZ2V0UkVTVENvbnRleHRDYXRhbG9nIGVycm9yOicgLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcHJvY2Vzc2VkRG9tYWlucyA9PT0gZG9tYWluc0NvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KCByZXN0Q29udGV4dENhdGFsb2cgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAnZ2V0UkVTVENvbnRleHRDYXRhbG9nIGNvbXBsZXRlZCcgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgfSwgKCBlcnJvciApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKExPR19UQUcsICdnZXRSRVNUQ29udGV4dENhdGFsb2cgZXJyb3I6JyAsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCBwcm9jZXNzZWREb21haW5zID09PSBkb21haW5zQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoIHJlc3RDb250ZXh0Q2F0YWxvZyApO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKExPR19UQUcsICdnZXRSRVNUQ29udGV4dENhdGFsb2cgY29tcGxldGVkJyApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihMT0dfVEFHLCAnZ2V0UkVTVENvbnRleHRDYXRhbG9nIGVycm9yOicgLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UkVTVENvbnRleHRDYXRhbG9nRm9yKGRvbWFpbjpzdHJpbmcsIGFwcGxpY2F0aW9uOnN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8U2VydmljZUNvbnRleHQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3RDb250ZXh0U2VydmljZS5nZXRDb250ZXh0cyhkb21haW4sIGFwcGxpY2F0aW9uKTtcbiAgICB9XG5cbn1cbiJdfQ==