UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

122 lines 14.2 kB
import { LogLevel } from '@microsoft/windows-admin-center-sdk/core/diagnostics/log-level'; import { Logging } from '@microsoft/windows-admin-center-sdk/core/diagnostics/logging'; import { ResourceService } from '../../service/resource.service'; /** * SVG resource class for CSS class. */ export class SvgResource { /** * Initializes a new instance of the SvgResource class. * * @param svg the svg object generated by gulp-svg-code. */ constructor(svg) { this.svg = svg; this.svgInlineResource = new SvgInlineResource(this.svg); } /** * Build svg resources from SVG object, and register the resource service. * * @param resourceService the resource service. * @param svg the svg object generated by gulp-svg-code. */ static buildRegister(resourceService, svg) { // register SVG resources to resource service. resourceService.register(ResourceService.svgType, new SvgResource(svg)); resourceService.register(ResourceService.svgInlineType, new SvgInlineResource(svg)); } /** * Find SVG string by id. * * @param id the identification of SVG. (id must be lower case) */ find(id) { const result = this.svgInlineResource.findIndex(id); if (!result) { return null; } const segments = result.name.split('/'); return 'svg-' + segments.join('--'); } } /** * SVG inline resource class for ram SVG insertion. */ export class SvgInlineResource { /** * Initializes a new instance of the SvgInlineResource class. * * @param svg the svg object generated by gulp-svg-code. */ constructor(svg) { this.svg = svg; this.lowerSvg = this.createLowercaseIndexing(this.svg); } /** * Find SVG string by id. * * @param id the identification of SVG. (id must be lower case) * @return string the Svg resource string. */ find(id) { const result = this.lowerSvg[id]; if (!result) { Logging.log({ level: LogLevel.Warning, message: `Unable to find SVG resource for ${id}`, params: { id: id }, source: 'SvgInlineResource' }); return null; } return result.value; } /** * Find index data. * * @param id the identification of SVG. * @return SvgIndexedData the indexed data. */ findIndex(id) { return this.lowerSvg[id]; } /** * Create lower case property version. * * @param svg the original svg data. * @return any the lower case version of svg. */ createLowercaseIndexing(svg) { const newSvg = {}; let nextCollection = [{ target: svg, path: '' }]; while (nextCollection.length > 0) { const collection = nextCollection; nextCollection = []; for (const current of collection) { MsftSme.forEachKey(current.target, (key, value) => { const path = this.nextPath(current.path, key); if (value && typeof value === 'object') { // add to next level traverse. nextCollection.push({ target: value, path: path }); } else { // register to the collection. const lower = path.toLowerCase(); newSvg[lower] = { name: path, lower: lower, value: value }; } }); } } return newSvg; } nextPath(path, key) { return path === '' ? key : path + '/' + key; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ZnLXJlc291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvZGlyZWN0aXZlcy9zdmcvc3ZnLXJlc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBYWpFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUFlcEI7Ozs7T0FJRztJQUNILFlBQW9CLEdBQVE7UUFBUixRQUFHLEdBQUgsR0FBRyxDQUFLO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBbkJEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FBQyxlQUFnQyxFQUFFLEdBQVE7UUFDbEUsOENBQThDO1FBQzlDLGVBQWUsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLGVBQWUsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxJQUFJLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQVdEOzs7O09BSUc7SUFDSSxJQUFJLENBQUMsRUFBVTtRQUNsQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEMsT0FBTyxNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDO0NBQ0o7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFHMUI7Ozs7T0FJRztJQUNILFlBQW9CLEdBQVE7UUFBUixRQUFHLEdBQUgsR0FBRyxDQUFLO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxJQUFJLENBQUMsRUFBVTtRQUNsQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUNSLEtBQUssRUFBRSxRQUFRLENBQUMsT0FBTztnQkFDdkIsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLEVBQUU7Z0JBQ2hELE1BQU0sRUFBRTtvQkFDSixFQUFFLEVBQUUsRUFBRTtpQkFDVDtnQkFDRCxNQUFNLEVBQUUsbUJBQW1CO2FBQzlCLENBQUMsQ0FBQztZQUVILE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksU0FBUyxDQUFDLEVBQVU7UUFDdkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLHVCQUF1QixDQUFDLEdBQVE7UUFDcEMsTUFBTSxNQUFNLEdBQXdDLEVBQUUsQ0FBQztRQUN2RCxJQUFJLGNBQWMsR0FBZSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3RCxPQUFPLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzlCLE1BQU0sVUFBVSxHQUFlLGNBQWMsQ0FBQztZQUM5QyxjQUFjLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLEtBQUssTUFBTSxPQUFPLElBQUksVUFBVSxFQUFFO2dCQUM5QixPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFXLEVBQUUsS0FBVSxFQUFFLEVBQUU7b0JBQzNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDOUMsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO3dCQUNwQyw4QkFBOEI7d0JBQzlCLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3FCQUN0RDt5QkFBTTt3QkFDSCw4QkFBOEI7d0JBQzlCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDakMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFtQjs0QkFDNUIsSUFBSSxFQUFFLElBQUk7NEJBQ1YsS0FBSyxFQUFFLEtBQUs7NEJBQ1osS0FBSyxFQUFFLEtBQUs7eUJBQ2YsQ0FBQztxQkFDTDtnQkFDTCxDQUFDLENBQUMsQ0FBQzthQUNOO1NBQ0o7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU8sUUFBUSxDQUFDLElBQVksRUFBRSxHQUFXO1FBQ3RDLE9BQU8sSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNoRCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXNvdXJjZUNhY2hlRmluZCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGF0YS9yZXNvdXJjZS1jYWNoZSc7XHJcbmltcG9ydCB7IExvZ0xldmVsIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kaWFnbm9zdGljcy9sb2ctbGV2ZWwnO1xyXG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kaWFnbm9zdGljcy9sb2dnaW5nJztcclxuaW1wb3J0IHsgUmVzb3VyY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9yZXNvdXJjZS5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3ZnSW5kZXhlZERhdGEge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgbG93ZXI6IHN0cmluZztcclxuICAgIHZhbHVlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBTdmdTdGFjayB7XHJcbiAgICB0YXJnZXQ6IGFueTtcclxuICAgIHBhdGg6IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIFNWRyByZXNvdXJjZSBjbGFzcyBmb3IgQ1NTIGNsYXNzLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFN2Z1Jlc291cmNlIGltcGxlbWVudHMgUmVzb3VyY2VDYWNoZUZpbmQ8c3RyaW5nPiB7XHJcbiAgICBwcml2YXRlIHN2Z0lubGluZVJlc291cmNlOiBTdmdJbmxpbmVSZXNvdXJjZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIHN2ZyByZXNvdXJjZXMgZnJvbSBTVkcgb2JqZWN0LCBhbmQgcmVnaXN0ZXIgdGhlIHJlc291cmNlIHNlcnZpY2UuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHJlc291cmNlU2VydmljZSB0aGUgcmVzb3VyY2Ugc2VydmljZS5cclxuICAgICAqIEBwYXJhbSBzdmcgdGhlIHN2ZyBvYmplY3QgZ2VuZXJhdGVkIGJ5IGd1bHAtc3ZnLWNvZGUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgYnVpbGRSZWdpc3RlcihyZXNvdXJjZVNlcnZpY2U6IFJlc291cmNlU2VydmljZSwgc3ZnOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICAvLyByZWdpc3RlciBTVkcgcmVzb3VyY2VzIHRvIHJlc291cmNlIHNlcnZpY2UuXHJcbiAgICAgICAgcmVzb3VyY2VTZXJ2aWNlLnJlZ2lzdGVyKFJlc291cmNlU2VydmljZS5zdmdUeXBlLCBuZXcgU3ZnUmVzb3VyY2Uoc3ZnKSk7XHJcbiAgICAgICAgcmVzb3VyY2VTZXJ2aWNlLnJlZ2lzdGVyKFJlc291cmNlU2VydmljZS5zdmdJbmxpbmVUeXBlLCBuZXcgU3ZnSW5saW5lUmVzb3VyY2Uoc3ZnKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgU3ZnUmVzb3VyY2UgY2xhc3MuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHN2ZyB0aGUgc3ZnIG9iamVjdCBnZW5lcmF0ZWQgYnkgZ3VscC1zdmctY29kZS5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzdmc6IGFueSkge1xyXG4gICAgICAgIHRoaXMuc3ZnSW5saW5lUmVzb3VyY2UgPSBuZXcgU3ZnSW5saW5lUmVzb3VyY2UodGhpcy5zdmcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZCBTVkcgc3RyaW5nIGJ5IGlkLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBpZCB0aGUgaWRlbnRpZmljYXRpb24gb2YgU1ZHLiAoaWQgbXVzdCBiZSBsb3dlciBjYXNlKVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmluZChpZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnN2Z0lubGluZVJlc291cmNlLmZpbmRJbmRleChpZCk7XHJcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzZWdtZW50cyA9IHJlc3VsdC5uYW1lLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgcmV0dXJuICdzdmctJyArIHNlZ21lbnRzLmpvaW4oJy0tJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTVkcgaW5saW5lIHJlc291cmNlIGNsYXNzIGZvciByYW0gU1ZHIGluc2VydGlvbi5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBTdmdJbmxpbmVSZXNvdXJjZSBpbXBsZW1lbnRzIFJlc291cmNlQ2FjaGVGaW5kPHN0cmluZz4ge1xyXG4gICAgcHJpdmF0ZSBsb3dlclN2ZzogeyBbbG93ZXI6IHN0cmluZ106IFN2Z0luZGV4ZWREYXRhIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgU3ZnSW5saW5lUmVzb3VyY2UgY2xhc3MuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHN2ZyB0aGUgc3ZnIG9iamVjdCBnZW5lcmF0ZWQgYnkgZ3VscC1zdmctY29kZS5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzdmc6IGFueSkge1xyXG4gICAgICAgIHRoaXMubG93ZXJTdmcgPSB0aGlzLmNyZWF0ZUxvd2VyY2FzZUluZGV4aW5nKHRoaXMuc3ZnKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmQgU1ZHIHN0cmluZyBieSBpZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gaWQgdGhlIGlkZW50aWZpY2F0aW9uIG9mIFNWRy4gKGlkIG11c3QgYmUgbG93ZXIgY2FzZSlcclxuICAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBTdmcgcmVzb3VyY2Ugc3RyaW5nLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmluZChpZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmxvd2VyU3ZnW2lkXTtcclxuICAgICAgICBpZiAoIXJlc3VsdCkge1xyXG4gICAgICAgICAgICBMb2dnaW5nLmxvZyh7XHJcbiAgICAgICAgICAgICAgICBsZXZlbDogTG9nTGV2ZWwuV2FybmluZyxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBVbmFibGUgdG8gZmluZCBTVkcgcmVzb3VyY2UgZm9yICR7aWR9YCxcclxuICAgICAgICAgICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBpZFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNvdXJjZTogJ1N2Z0lubGluZVJlc291cmNlJ1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdC52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmQgaW5kZXggZGF0YS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gaWQgdGhlIGlkZW50aWZpY2F0aW9uIG9mIFNWRy5cclxuICAgICAqIEByZXR1cm4gU3ZnSW5kZXhlZERhdGEgdGhlIGluZGV4ZWQgZGF0YS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGZpbmRJbmRleChpZDogc3RyaW5nKTogU3ZnSW5kZXhlZERhdGEge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxvd2VyU3ZnW2lkXTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBsb3dlciBjYXNlIHByb3BlcnR5IHZlcnNpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHN2ZyB0aGUgb3JpZ2luYWwgc3ZnIGRhdGEuXHJcbiAgICAgKiBAcmV0dXJuIGFueSB0aGUgbG93ZXIgY2FzZSB2ZXJzaW9uIG9mIHN2Zy5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjcmVhdGVMb3dlcmNhc2VJbmRleGluZyhzdmc6IGFueSk6IHsgW2xvd2VyOiBzdHJpbmddOiBTdmdJbmRleGVkRGF0YSB9IHtcclxuICAgICAgICBjb25zdCBuZXdTdmc6IHsgW2xvd2VyOiBzdHJpbmddOiBTdmdJbmRleGVkRGF0YSB9ID0ge307XHJcbiAgICAgICAgbGV0IG5leHRDb2xsZWN0aW9uOiBTdmdTdGFja1tdID0gW3sgdGFyZ2V0OiBzdmcsIHBhdGg6ICcnIH1dO1xyXG4gICAgICAgIHdoaWxlIChuZXh0Q29sbGVjdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb246IFN2Z1N0YWNrW10gPSBuZXh0Q29sbGVjdGlvbjtcclxuICAgICAgICAgICAgbmV4dENvbGxlY3Rpb24gPSBbXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjdXJyZW50IG9mIGNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIE1zZnRTbWUuZm9yRWFjaEtleShjdXJyZW50LnRhcmdldCwgKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMubmV4dFBhdGgoY3VycmVudC5wYXRoLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCB0byBuZXh0IGxldmVsIHRyYXZlcnNlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0Q29sbGVjdGlvbi5wdXNoKHsgdGFyZ2V0OiB2YWx1ZSwgcGF0aDogcGF0aCB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciB0byB0aGUgY29sbGVjdGlvbi5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbG93ZXIgPSBwYXRoLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N2Z1tsb3dlcl0gPSA8U3ZnSW5kZXhlZERhdGE+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogcGF0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd2VyOiBsb3dlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmV3U3ZnO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbmV4dFBhdGgocGF0aDogc3RyaW5nLCBrZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHBhdGggPT09ICcnID8ga2V5IDogcGF0aCArICcvJyArIGtleTtcclxuICAgIH1cclxufVxyXG4iXX0=