"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ImageImporter = void 0; const base_importer_1 = require("./base-importer"); const texture_importer_1 = require("./texture-importer"); const sprite_frame_importer_1 = require("./sprite-frame-importer"); const erp_texture_cube_importer_1 = require("./erp-texture-cube-importer"); const texture_utils_1 = require("../texture-utils"); class ImageImporter extends base_importer_1.BaseAssetImporter { constructor() { super(...arguments); this.name = 'image'; this.textureImporter = new texture_importer_1.TextureImporter(); this.spriteFrameImporter = new sprite_frame_importer_1.SpriteFrameImporter(); this.erpTextureCubeImporter = new erp_texture_cube_importer_1.ErpTextureCubeImporter(); } async setProperty(assetInfo, path, value) { const meta = await Editor.Message.request('asset-db', 'query-asset-meta', assetInfo.uuid); if (!meta) return false; const userData = meta.userData; let handled = false; // Top level properties if (['type', 'flipVertical', 'fixAlphaTransparencyArtifacts', 'flipGreenChannel', 'isRGBE'].includes(path)) { userData[path] = value; handled = true; } // Sub-asset delegation else if (path.startsWith('texture.') || path.startsWith('spriteFrame.')) { const [prefix, ...rest] = path.split('.'); const subPath = rest.join('.'); let targetImporter = ''; switch (prefix) { case 'texture': targetImporter = 'texture'; break; case 'spriteFrame': targetImporter = 'sprite-frame'; break; case 'textureCube': targetImporter = 'erp-texture-cube'; break; } if (targetImporter && meta.subMetas) { const subMetaKey = Object.keys(meta.subMetas).find(key => meta.subMetas[key].importer === targetImporter); if (subMetaKey) { const subUserData = meta.subMetas[subMetaKey].userData; let syntheticHandled = false; if (targetImporter === 'texture') { syntheticHandled = texture_utils_1.TextureUtils.applyProperties(subUserData, subPath, value); } if (!syntheticHandled) { if (subPath.includes('.')) { // deep set const parts = subPath.split('.'); let current = subUserData; for (let i = 0; i < parts.length - 1; i++) { current = current[parts[i]]; } if (current) current[parts[parts.length - 1]] = value; } else { subUserData[subPath] = value; } } handled = true; } } } if (handled) { await Editor.Message.request('asset-db', 'save-asset-meta', assetInfo.uuid, JSON.stringify(meta)); return true; } return false; } async getProperties(assetInfo) { const meta = await Editor.Message.request('asset-db', 'query-asset-meta', assetInfo.uuid); if (!meta) { throw new Error('Asset meta not found'); } return await this.inspectImageAsset(meta); } async inspectImageAsset(meta) { var _a, _b, _c; const propertyContainer = {}; // Type propertyContainer['type'] = { type: 'Enum', value: meta.userData.type || 'texture', enumList: [ { name: 'raw', value: 'raw' }, { name: 'texture', value: 'texture' }, { name: 'normal-map', value: 'normal map' }, { name: 'sprite-frame', value: 'sprite-frame' }, { name: 'texture-cube', value: 'texture cube' } ], displayName: 'Type', visible: true }; // Flip Vertical propertyContainer['flipVertical'] = { type: 'Boolean', value: !!meta.userData.flipVertical, displayName: 'Flip Vertical', visible: true }; // Fix Alpha Transparency Artifacts propertyContainer['fixAlphaTransparencyArtifacts'] = { type: 'Boolean', value: !!meta.userData.fixAlphaTransparencyArtifacts, displayName: 'Fix Alpha Transparency Artifacts', visible: meta.userData.type !== 'normal map' }; // Flip Green Channel propertyContainer['flipGreenChannel'] = { type: 'Boolean', value: !!meta.userData.flipGreenChannel, displayName: 'Flip Green Channel', visible: true }; // Is RGBE propertyContainer['isRGBE'] = { type: 'Boolean', value: !!meta.userData.isRGBE, displayName: 'Is RGBE', visible: meta.userData.type === 'texture cube' }; // Sub-assets inspection const subMetas = meta.subMetas || {}; // Determine which importers to use based on type const type = meta.userData.type || 'texture'; if (type === 'texture' || type === 'normal map' || type === 'sprite-frame') { propertyContainer['texture'] = { value: this.textureImporter.parseUserData(((_a = Object.values(subMetas).find(sm => sm.importer === 'texture')) === null || _a === void 0 ? void 0 : _a.userData) || {}), type: 'cc.Object', displayName: 'Texture Properties' }; if (type === 'sprite-frame') { propertyContainer['spriteFrame'] = { value: this.spriteFrameImporter.parseUserData(((_b = Object.values(subMetas).find(sm => sm.importer === 'sprite-frame')) === null || _b === void 0 ? void 0 : _b.userData) || {}), type: 'cc.Object', displayName: 'Sprite Frame Properties' }; } } else if (type === 'texture cube') { propertyContainer['textureCube'] = { value: this.erpTextureCubeImporter.parseUserData(((_c = Object.values(subMetas).find(sm => sm.importer === 'erp-texture-cube')) === null || _c === void 0 ? void 0 : _c.userData) || {}), type: 'cc.Object', displayName: 'Texture Cube Properties' }; } return propertyContainer; } } exports.ImageImporter = ImageImporter; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtaW1wb3J0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zb3VyY2UvdXRjcC91dGlscy9hc3NldC1pbXBvcnRlcnMvaW1hZ2UtaW1wb3J0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQW9EO0FBQ3BELHlEQUFxRDtBQUNyRCxtRUFBOEQ7QUFDOUQsMkVBQXFFO0FBR3JFLG9EQUFnRDtBQUVoRCxNQUFhLGFBQWMsU0FBUSxpQ0FBaUI7SUFBcEQ7O1FBQ0ksU0FBSSxHQUFHLE9BQU8sQ0FBQztRQUVQLG9CQUFlLEdBQUcsSUFBSSxrQ0FBZSxFQUFFLENBQUM7UUFDeEMsd0JBQW1CLEdBQUcsSUFBSSwyQ0FBbUIsRUFBRSxDQUFDO1FBQ2hELDJCQUFzQixHQUFHLElBQUksa0RBQXNCLEVBQUUsQ0FBQztJQThKbEUsQ0FBQztJQTVKRyxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQXFCLEVBQUUsSUFBWSxFQUFFLEtBQVU7UUFDN0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFGLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFeEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUMvQixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFFcEIsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLCtCQUErQixFQUFFLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3pHLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDdkIsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNuQixDQUFDO1FBQ0QsdUJBQXVCO2FBQ2xCLElBQUks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QUMsRUFBRSxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsMENBQUUsUUFBUSxLQUFJLEVBQUUsQ0FBQztnQkFDeEgsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLFdBQVcsRUFBRSxvQkFBb0I7YUFDcEMsQ0FBQztZQUVGLElBQUksSUFBSSxLQUFLLGNBQWMsRUFBRSxDQUFDO2dCQUMxQixpQkFBaUIsQ0FBQyxhQUFhLENBQUMsR0FBRztvQkFDL0IsS0FBSyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQSxNQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsS0FBSyxjQUFjLENBQUMsMENBQUUsUUFBUSxLQUFJLEVBQUUsQ0FBQztvQkFDakksSUFBSSxFQUFFLFdBQVc7b0JBQ2pCLFdBQVcsRUFBRSx5QkFBeUI7aUJBQ3pDLENBQUM7WUFDTixDQUFDO1FBQ0wsQ0FBQzthQUFNLElBQUksSUFBSSxLQUFLLGNBQWMsRUFBRSxDQUFDO1lBQ2pDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxHQUFHO2dCQUMvQixLQUFLLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxDQUFBLE1BQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxLQUFLLGtCQUFrQixDQUFDLDBDQUFFLFFBQVEsS0FBSSxFQUFFLENBQUM7Z0JBQ3hJLElBQUksRUFBRSxXQUFXO2dCQUNqQixXQUFXLEVBQUUseUJBQXlCO2FBQ3pDLENBQUM7UUFDTixDQUFDO1FBRUQsT0FBTyxpQkFBaUIsQ0FBQztJQUM3QixDQUFDO0NBQ0o7QUFuS0Qsc0NBbUtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUFzc2V0SW1wb3J0ZXIgfSBmcm9tICcuL2Jhc2UtaW1wb3J0ZXInO1xuaW1wb3J0IHsgVGV4dHVyZUltcG9ydGVyIH0gZnJvbSAnLi90ZXh0dXJlLWltcG9ydGVyJztcbmltcG9ydCB7IFNwcml0ZUZyYW1lSW1wb3J0ZXIgfSBmcm9tICcuL3Nwcml0ZS1mcmFtZS1pbXBvcnRlcic7XG5pbXBvcnQgeyBFcnBUZXh0dXJlQ3ViZUltcG9ydGVyIH0gZnJvbSAnLi9lcnAtdGV4dHVyZS1jdWJlLWltcG9ydGVyJztcbmltcG9ydCB7IElBc3NldEluZm8sIElBc3NldE1ldGEgfSBmcm9tICdAY29jb3MvY3JlYXRvci10eXBlcy9lZGl0b3IvcGFja2FnZXMvYXNzZXQtZGIvQHR5cGVzL3B1YmxpYyc7XG5pbXBvcnQgeyBJUHJvcGVydHksIElQcm9wZXJ0eVZhbHVlVHlwZSB9IGZyb20gJ0Bjb2Nvcy9jcmVhdG9yLXR5cGVzL2VkaXRvci9wYWNrYWdlcy9zY2VuZS9AdHlwZXMvcHVibGljJztcbmltcG9ydCB7IFRleHR1cmVVdGlscyB9IGZyb20gJy4uL3RleHR1cmUtdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgSW1hZ2VJbXBvcnRlciBleHRlbmRzIEJhc2VBc3NldEltcG9ydGVyIHtcbiAgICBuYW1lID0gJ2ltYWdlJztcblxuICAgIHByaXZhdGUgdGV4dHVyZUltcG9ydGVyID0gbmV3IFRleHR1cmVJbXBvcnRlcigpO1xuICAgIHByaXZhdGUgc3ByaXRlRnJhbWVJbXBvcnRlciA9IG5ldyBTcHJpdGVGcmFtZUltcG9ydGVyKCk7XG4gICAgcHJpdmF0ZSBlcnBUZXh0dXJlQ3ViZUltcG9ydGVyID0gbmV3IEVycFRleHR1cmVDdWJlSW1wb3J0ZXIoKTtcblxuICAgIGFzeW5jIHNldFByb3BlcnR5KGFzc2V0SW5mbzogSUFzc2V0SW5mbywgcGF0aDogc3RyaW5nLCB2YWx1ZTogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1tZXRhJywgYXNzZXRJbmZvLnV1aWQpO1xuICAgICAgICBpZiAoIW1ldGEpIHJldHVybiBmYWxzZTtcblxuICAgICAgICBjb25zdCB1c2VyRGF0YSA9IG1ldGEudXNlckRhdGE7XG4gICAgICAgIGxldCBoYW5kbGVkID0gZmFsc2U7XG5cbiAgICAgICAgLy8gVG9wIGxldmVsIHByb3BlcnRpZXNcbiAgICAgICAgaWYgKFsndHlwZScsICdmbGlwVmVydGljYWwnLCAnZml4QWxwaGFUcmFuc3BhcmVuY3lBcnRpZmFjdHMnLCAnZmxpcEdyZWVuQ2hhbm5lbCcsICdpc1JHQkUnXS5pbmNsdWRlcyhwYXRoKSkge1xuICAgICAgICAgICAgdXNlckRhdGFbcGF0aF0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xuICAgICAgICB9IFxuICAgICAgICAvLyBTdWItYXNzZXQgZGVsZWdhdGlvblxuICAgICAgICBlbHNlIGlmIChwYXRoLnN0YXJ0c1dpdGgoJ3RleHR1cmUuJykgfHwgcGF0aC5zdGFydHNXaXRoKCdzcHJpdGVGcmFtZS4nKSkge1xuICAgICAgICAgICAgY29uc3QgW3ByZWZpeCwgLi4ucmVzdF0gPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICBjb25zdCBzdWJQYXRoID0gcmVzdC5qb2luKCcuJyk7XG4gICAgICAgICAgICBsZXQgdGFyZ2V0SW1wb3J0ZXIgPSAnJztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgc3dpdGNoIChwcmVmaXgpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd0ZXh0dXJlJzpcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0SW1wb3J0ZXIgPSAndGV4dHVyZSc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3Nwcml0ZUZyYW1lJzpcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0SW1wb3J0ZXIgPSAnc3ByaXRlLWZyYW1lJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAndGV4dHVyZUN1YmUnOlxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRJbXBvcnRlciA9ICdlcnAtdGV4dHVyZS1jdWJlJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0YXJnZXRJbXBvcnRlciAmJiBtZXRhLnN1Yk1ldGFzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViTWV0YUtleSA9IE9iamVjdC5rZXlzKG1ldGEuc3ViTWV0YXMpLmZpbmQoa2V5ID0+IG1ldGEuc3ViTWV0YXNba2V5XS5pbXBvcnRlciA9PT0gdGFyZ2V0SW1wb3J0ZXIpO1xuICAgICAgICAgICAgICAgIGlmIChzdWJNZXRhS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1YlVzZXJEYXRhID0gbWV0YS5zdWJNZXRhc1tzdWJNZXRhS2V5XS51c2VyRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGxldCBzeW50aGV0aWNIYW5kbGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRJbXBvcnRlciA9PT0gJ3RleHR1cmUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzeW50aGV0aWNIYW5kbGVkID0gVGV4dHVyZVV0aWxzLmFwcGx5UHJvcGVydGllcyhzdWJVc2VyRGF0YSwgc3ViUGF0aCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzeW50aGV0aWNIYW5kbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViUGF0aC5pbmNsdWRlcygnLicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVlcCBzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHN1YlBhdGguc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudCA9IHN1YlVzZXJEYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W3BhcnRzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQpIGN1cnJlbnRbcGFydHNbcGFydHMubGVuZ3RoIC0gMV1dID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlVzZXJEYXRhW3N1YlBhdGhdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhbmRsZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3NhdmUtYXNzZXQtbWV0YScsIGFzc2V0SW5mby51dWlkLCBKU09OLnN0cmluZ2lmeShtZXRhKSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRQcm9wZXJ0aWVzKGFzc2V0SW5mbzogSUFzc2V0SW5mbyk6IFByb21pc2U8eyBba2V5OiBzdHJpbmddOiBJUHJvcGVydHlWYWx1ZVR5cGUgfT4ge1xuICAgICAgICBjb25zdCBtZXRhID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncXVlcnktYXNzZXQtbWV0YScsIGFzc2V0SW5mby51dWlkKTtcbiAgICAgICAgXG4gICAgICAgIGlmICghbWV0YSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBc3NldCBtZXRhIG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaW5zcGVjdEltYWdlQXNzZXQobWV0YSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBpbnNwZWN0SW1hZ2VBc3NldChtZXRhOiBJQXNzZXRNZXRhKTogUHJvbWlzZTx7IFtrZXk6IHN0cmluZ106IElQcm9wZXJ0eSB9PiB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5Q29udGFpbmVyOiB7IFtrZXk6IHN0cmluZ106IElQcm9wZXJ0eSB9ID0ge307XG5cbiAgICAgICAgLy8gVHlwZVxuICAgICAgICBwcm9wZXJ0eUNvbnRhaW5lclsndHlwZSddID0ge1xuICAgICAgICAgICAgdHlwZTogJ0VudW0nLFxuICAgICAgICAgICAgdmFsdWU6IG1ldGEudXNlckRhdGEudHlwZSB8fCAndGV4dHVyZScsXG4gICAgICAgICAgICBlbnVtTGlzdDogW1xuICAgICAgICAgICAgICAgIHsgbmFtZTogJ3JhdycsIHZhbHVlOiAncmF3JyB9LFxuICAgICAgICAgICAgICAgIHsgbmFtZTogJ3RleHR1cmUnLCB2YWx1ZTogJ3RleHR1cmUnIH0sXG4gICAgICAgICAgICAgICAgeyBuYW1lOiAnbm9ybWFsLW1hcCcsIHZhbHVlOiAnbm9ybWFsIG1hcCcgfSxcbiAgICAgICAgICAgICAgICB7IG5hbWU6ICdzcHJpdGUtZnJhbWUnLCB2YWx1ZTogJ3Nwcml0ZS1mcmFtZScgfSxcbiAgICAgICAgICAgICAgICB7IG5hbWU6ICd0ZXh0dXJlLWN1YmUnLCB2YWx1ZTogJ3RleHR1cmUgY3ViZScgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnVHlwZScsXG4gICAgICAgICAgICB2aXNpYmxlOiB0cnVlXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gRmxpcCBWZXJ0aWNhbFxuICAgICAgICBwcm9wZXJ0eUNvbnRhaW5lclsnZmxpcFZlcnRpY2FsJ10gPSB7XG4gICAgICAgICAgICB0eXBlOiAnQm9vbGVhbicsXG4gICAgICAgICAgICB2YWx1ZTogISFtZXRhLnVzZXJEYXRhLmZsaXBWZXJ0aWNhbCxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnRmxpcCBWZXJ0aWNhbCcsXG4gICAgICAgICAgICB2aXNpYmxlOiB0cnVlXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gRml4IEFscGhhIFRyYW5zcGFyZW5jeSBBcnRpZmFjdHNcbiAgICAgICAgcHJvcGVydHlDb250YWluZXJbJ2ZpeEFscGhhVHJhbnNwYXJlbmN5QXJ0aWZhY3RzJ10gPSB7XG4gICAgICAgICAgICB0eXBlOiAnQm9vbGVhbicsXG4gICAgICAgICAgICB2YWx1ZTogISFtZXRhLnVzZXJEYXRhLmZpeEFscGhhVHJhbnNwYXJlbmN5QXJ0aWZhY3RzLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdGaXggQWxwaGEgVHJhbnNwYXJlbmN5IEFydGlmYWN0cycsXG4gICAgICAgICAgICB2aXNpYmxlOiBtZXRhLnVzZXJEYXRhLnR5cGUgIT09ICdub3JtYWwgbWFwJ1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEZsaXAgR3JlZW4gQ2hhbm5lbFxuICAgICAgICBwcm9wZXJ0eUNvbnRhaW5lclsnZmxpcEdyZWVuQ2hhbm5lbCddID0ge1xuICAgICAgICAgICAgdHlwZTogJ0Jvb2xlYW4nLFxuICAgICAgICAgICAgdmFsdWU6ICEhbWV0YS51c2VyRGF0YS5mbGlwR3JlZW5DaGFubmVsLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdGbGlwIEdyZWVuIENoYW5uZWwnLFxuICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIElzIFJHQkVcbiAgICAgICAgcHJvcGVydHlDb250YWluZXJbJ2lzUkdCRSddID0ge1xuICAgICAgICAgICAgdHlwZTogJ0Jvb2xlYW4nLFxuICAgICAgICAgICAgdmFsdWU6ICEhbWV0YS51c2VyRGF0YS5pc1JHQkUsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0lzIFJHQkUnLFxuICAgICAgICAgICAgdmlzaWJsZTogbWV0YS51c2VyRGF0YS50eXBlID09PSAndGV4dHVyZSBjdWJlJ1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFN1Yi1hc3NldHMgaW5zcGVjdGlvblxuICAgICAgICBjb25zdCBzdWJNZXRhcyA9IG1ldGEuc3ViTWV0YXMgfHwge307XG4gICAgICAgIFxuICAgICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggaW1wb3J0ZXJzIHRvIHVzZSBiYXNlZCBvbiB0eXBlXG4gICAgICAgIGNvbnN0IHR5cGUgPSBtZXRhLnVzZXJEYXRhLnR5cGUgfHwgJ3RleHR1cmUnO1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGUgPT09ICd0ZXh0dXJlJyB8fCB0eXBlID09PSAnbm9ybWFsIG1hcCcgfHwgdHlwZSA9PT0gJ3Nwcml0ZS1mcmFtZScpIHtcbiAgICAgICAgICAgIHByb3BlcnR5Q29udGFpbmVyWyd0ZXh0dXJlJ10gPSB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudGV4dHVyZUltcG9ydGVyLnBhcnNlVXNlckRhdGEoT2JqZWN0LnZhbHVlcyhzdWJNZXRhcykuZmluZChzbSA9PiBzbS5pbXBvcnRlciA9PT0gJ3RleHR1cmUnKT8udXNlckRhdGEgfHwge30pLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdjYy5PYmplY3QnLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnVGV4dHVyZSBQcm9wZXJ0aWVzJ1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdzcHJpdGUtZnJhbWUnKSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlDb250YWluZXJbJ3Nwcml0ZUZyYW1lJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNwcml0ZUZyYW1lSW1wb3J0ZXIucGFyc2VVc2VyRGF0YShPYmplY3QudmFsdWVzKHN1Yk1ldGFzKS5maW5kKHNtID0+IHNtLmltcG9ydGVyID09PSAnc3ByaXRlLWZyYW1lJyk/LnVzZXJEYXRhIHx8IHt9KSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NjLk9iamVjdCcsXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnU3ByaXRlIEZyYW1lIFByb3BlcnRpZXMnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAndGV4dHVyZSBjdWJlJykge1xuICAgICAgICAgICAgcHJvcGVydHlDb250YWluZXJbJ3RleHR1cmVDdWJlJ10gPSB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZXJwVGV4dHVyZUN1YmVJbXBvcnRlci5wYXJzZVVzZXJEYXRhKE9iamVjdC52YWx1ZXMoc3ViTWV0YXMpLmZpbmQoc20gPT4gc20uaW1wb3J0ZXIgPT09ICdlcnAtdGV4dHVyZS1jdWJlJyk/LnVzZXJEYXRhIHx8IHt9KSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnY2MuT2JqZWN0JyxcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1RleHR1cmUgQ3ViZSBQcm9wZXJ0aWVzJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwcm9wZXJ0eUNvbnRhaW5lcjtcbiAgICB9XG59XG4iXX0=