1 | ;
|
2 | /**
|
3 | * @license
|
4 | * Copyright Google LLC All Rights Reserved.
|
5 | *
|
6 | * Use of this source code is governed by an MIT-style license that can be
|
7 | * found in the LICENSE file at https://angular.io/license
|
8 | */
|
9 | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
10 | if (k2 === undefined) k2 = k;
|
11 | var desc = Object.getOwnPropertyDescriptor(m, k);
|
12 | if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
13 | desc = { enumerable: true, get: function() { return m[k]; } };
|
14 | }
|
15 | Object.defineProperty(o, k2, desc);
|
16 | }) : (function(o, m, k, k2) {
|
17 | if (k2 === undefined) k2 = k;
|
18 | o[k2] = m[k];
|
19 | }));
|
20 | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
21 | Object.defineProperty(o, "default", { enumerable: true, value: v });
|
22 | }) : function(o, v) {
|
23 | o["default"] = v;
|
24 | });
|
25 | var __importStar = (this && this.__importStar) || function (mod) {
|
26 | if (mod && mod.__esModule) return mod;
|
27 | var result = {};
|
28 | if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
29 | __setModuleDefault(result, mod);
|
30 | return result;
|
31 | };
|
32 | Object.defineProperty(exports, "__esModule", { value: true });
|
33 | exports.TestingArchitectHost = void 0;
|
34 | const src_1 = require("../src");
|
35 | class TestingArchitectHost {
|
36 | /**
|
37 | * Can provide a backend host, in case of integration tests.
|
38 | * @param workspaceRoot The workspace root to use.
|
39 | * @param currentDirectory The current directory to use.
|
40 | * @param _backendHost A host to defer calls that aren't resolved here.
|
41 | */
|
42 | constructor(workspaceRoot = '', currentDirectory = workspaceRoot, _backendHost = null) {
|
43 | this.workspaceRoot = workspaceRoot;
|
44 | this.currentDirectory = currentDirectory;
|
45 | this._backendHost = _backendHost;
|
46 | this._builderImportMap = new Map();
|
47 | this._builderMap = new Map();
|
48 | this._targetMap = new Map();
|
49 | }
|
50 | addBuilder(builderName, builder, description = 'Testing only builder.', optionSchema = { type: 'object' }) {
|
51 | this._builderImportMap.set(builderName, builder);
|
52 | this._builderMap.set(builderName, { builderName, description, optionSchema });
|
53 | }
|
54 | async addBuilderFromPackage(packageName) {
|
55 | const packageJson = await Promise.resolve(`${packageName + '/package.json'}`).then(s => __importStar(require(s)));
|
56 | if (!('builders' in packageJson)) {
|
57 | throw new Error('Invalid package.json, builders key not found.');
|
58 | }
|
59 | if (!packageJson.name) {
|
60 | throw new Error('Invalid package name');
|
61 | }
|
62 | const builderJsonPath = packageName + '/' + packageJson['builders'];
|
63 | const builderJson = await Promise.resolve(`${builderJsonPath}`).then(s => __importStar(require(s)));
|
64 | const builders = builderJson['builders'];
|
65 | if (!builders) {
|
66 | throw new Error('Invalid builders.json, builders key not found.');
|
67 | }
|
68 | for (const builderName of Object.keys(builders)) {
|
69 | const b = builders[builderName];
|
70 | // TODO: remove this check as v1 is not supported anymore.
|
71 | if (!b.implementation) {
|
72 | continue;
|
73 | }
|
74 | const handler = (await Promise.resolve(`${builderJsonPath + '/../' + b.implementation}`).then(s => __importStar(require(s)))).default;
|
75 | const optionsSchema = await Promise.resolve(`${builderJsonPath + '/../' + b.schema}`).then(s => __importStar(require(s)));
|
76 | this.addBuilder(`${packageJson.name}:${builderName}`, handler, b.description, optionsSchema);
|
77 | }
|
78 | }
|
79 | addTarget(target, builderName, options = {}) {
|
80 | this._targetMap.set((0, src_1.targetStringFromTarget)(target), { builderName, options });
|
81 | }
|
82 | async getBuilderNameForTarget(target) {
|
83 | const name = (0, src_1.targetStringFromTarget)(target);
|
84 | const maybeTarget = this._targetMap.get(name);
|
85 | if (!maybeTarget) {
|
86 | return this._backendHost && this._backendHost.getBuilderNameForTarget(target);
|
87 | }
|
88 | return maybeTarget.builderName;
|
89 | }
|
90 | /**
|
91 | * Resolve a builder. This needs to return a string which will be used in a dynamic `import()`
|
92 | * clause. This should throw if no builder can be found. The dynamic import will throw if
|
93 | * it is unsupported.
|
94 | * @param builderName The name of the builder to be used.
|
95 | * @returns All the info needed for the builder itself.
|
96 | */
|
97 | async resolveBuilder(builderName) {
|
98 | return (this._builderMap.get(builderName) ||
|
99 | (this._backendHost && this._backendHost.resolveBuilder(builderName)));
|
100 | }
|
101 | async getCurrentDirectory() {
|
102 | return this.currentDirectory;
|
103 | }
|
104 | async getWorkspaceRoot() {
|
105 | return this.workspaceRoot;
|
106 | }
|
107 | async getOptionsForTarget(target) {
|
108 | const name = (0, src_1.targetStringFromTarget)(target);
|
109 | const maybeTarget = this._targetMap.get(name);
|
110 | if (!maybeTarget) {
|
111 | return this._backendHost && this._backendHost.getOptionsForTarget(target);
|
112 | }
|
113 | return maybeTarget.options;
|
114 | }
|
115 | async getProjectMetadata(target) {
|
116 | return this._backendHost && this._backendHost.getProjectMetadata(target);
|
117 | }
|
118 | async loadBuilder(info) {
|
119 | return (this._builderImportMap.get(info.builderName) ||
|
120 | (this._backendHost && this._backendHost.loadBuilder(info)));
|
121 | }
|
122 | }
|
123 | exports.TestingArchitectHost = TestingArchitectHost;
|
124 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGluZy1hcmNoaXRlY3QtaG9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXJfZGV2a2l0L2FyY2hpdGVjdC90ZXN0aW5nL3Rlc3RpbmctYXJjaGl0ZWN0LWhvc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHSCxnQ0FBcUU7QUFHckUsTUFBYSxvQkFBb0I7SUFLL0I7Ozs7O09BS0c7SUFDSCxZQUNTLGdCQUFnQixFQUFFLEVBQ2xCLG1CQUFtQixhQUFhLEVBQy9CLGVBQXFDLElBQUk7UUFGMUMsa0JBQWEsR0FBYixhQUFhLENBQUs7UUFDbEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFnQjtRQUMvQixpQkFBWSxHQUFaLFlBQVksQ0FBNkI7UUFiM0Msc0JBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7UUFDL0MsZ0JBQVcsR0FBRyxJQUFJLEdBQUcsRUFBdUIsQ0FBQztRQUM3QyxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQTZELENBQUM7SUFZdkYsQ0FBQztJQUVKLFVBQVUsQ0FDUixXQUFtQixFQUNuQixPQUFnQixFQUNoQixXQUFXLEdBQUcsdUJBQXVCLEVBQ3JDLGVBQXVDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtRQUV6RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUNELEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxXQUFtQjtRQUM3QyxNQUFNLFdBQVcsR0FBRyx5QkFBYSxXQUFXLEdBQUcsZUFBZSx1Q0FBQyxDQUFDO1FBQ2hFLElBQUks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QUM7UUFDOUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQixPQUFPLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMzRTtRQUVELE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQztJQUM3QixDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQixDQUFDLE1BQXVCO1FBQzlDLE9BQU8sSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLE1BQWdCLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFpQjtRQUNqQyxPQUFPLENBQ0wsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQzVDLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUMzRCxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBN0dELG9EQTZHQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgeyBqc29uIH0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L2NvcmUnO1xuaW1wb3J0IHsgQnVpbGRlckluZm8sIFRhcmdldCwgdGFyZ2V0U3RyaW5nRnJvbVRhcmdldCB9IGZyb20gJy4uL3NyYyc7XG5pbXBvcnQgeyBBcmNoaXRlY3RIb3N0LCBCdWlsZGVyIH0gZnJvbSAnLi4vc3JjL2ludGVybmFsJztcblxuZXhwb3J0IGNsYXNzIFRlc3RpbmdBcmNoaXRlY3RIb3N0IGltcGxlbWVudHMgQXJjaGl0ZWN0SG9zdCB7XG4gIHByaXZhdGUgX2J1aWxkZXJJbXBvcnRNYXAgPSBuZXcgTWFwPHN0cmluZywgQnVpbGRlcj4oKTtcbiAgcHJpdmF0ZSBfYnVpbGRlck1hcCA9IG5ldyBNYXA8c3RyaW5nLCBCdWlsZGVySW5mbz4oKTtcbiAgcHJpdmF0ZSBfdGFyZ2V0TWFwID0gbmV3IE1hcDxzdHJpbmcsIHsgYnVpbGRlck5hbWU6IHN0cmluZzsgb3B0aW9uczoganNvbi5Kc29uT2JqZWN0IH0+KCk7XG5cbiAgLyoqXG4gICAqIENhbiBwcm92aWRlIGEgYmFja2VuZCBob3N0LCBpbiBjYXNlIG9mIGludGVncmF0aW9uIHRlc3RzLlxuICAgKiBAcGFyYW0gd29ya3NwYWNlUm9vdCBUaGUgd29ya3NwYWNlIHJvb3QgdG8gdXNlLlxuICAgKiBAcGFyYW0gY3VycmVudERpcmVjdG9yeSBUaGUgY3VycmVudCBkaXJlY3RvcnkgdG8gdXNlLlxuICAgKiBAcGFyYW0gX2JhY2tlbmRIb3N0IEEgaG9zdCB0byBkZWZlciBjYWxscyB0aGF0IGFyZW4ndCByZXNvbHZlZCBoZXJlLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHdvcmtzcGFjZVJvb3QgPSAnJyxcbiAgICBwdWJsaWMgY3VycmVudERpcmVjdG9yeSA9IHdvcmtzcGFjZVJvb3QsXG4gICAgcHJpdmF0ZSBfYmFja2VuZEhvc3Q6IEFyY2hpdGVjdEhvc3QgfCBudWxsID0gbnVsbCxcbiAgKSB7fVxuXG4gIGFkZEJ1aWxkZXIoXG4gICAgYnVpbGRlck5hbWU6IHN0cmluZyxcbiAgICBidWlsZGVyOiBCdWlsZGVyLFxuICAgIGRlc2NyaXB0aW9uID0gJ1Rlc3Rpbmcgb25seSBidWlsZGVyLicsXG4gICAgb3B0aW9uU2NoZW1hOiBqc29uLnNjaGVtYS5Kc29uU2NoZW1hID0geyB0eXBlOiAnb2JqZWN0JyB9LFxuICApIHtcbiAgICB0aGlzLl9idWlsZGVySW1wb3J0TWFwLnNldChidWlsZGVyTmFtZSwgYnVpbGRlcik7XG4gICAgdGhpcy5fYnVpbGRlck1hcC5zZXQoYnVpbGRlck5hbWUsIHsgYnVpbGRlck5hbWUsIGRlc2NyaXB0aW9uLCBvcHRpb25TY2hlbWEgfSk7XG4gIH1cbiAgYXN5bmMgYWRkQnVpbGRlckZyb21QYWNrYWdlKHBhY2thZ2VOYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYWNrYWdlSnNvbiA9IGF3YWl0IGltcG9ydChwYWNrYWdlTmFtZSArICcvcGFja2FnZS5qc29uJyk7XG4gICAgaWYgKCEoJ2J1aWxkZXJzJyBpbiBwYWNrYWdlSnNvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwYWNrYWdlLmpzb24sIGJ1aWxkZXJzIGtleSBub3QgZm91bmQuJyk7XG4gICAgfVxuXG4gICAgaWYgKCFwYWNrYWdlSnNvbi5uYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcGFja2FnZSBuYW1lJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYnVpbGRlckpzb25QYXRoID0gcGFja2FnZU5hbWUgKyAnLycgKyBwYWNrYWdlSnNvblsnYnVpbGRlcnMnXTtcbiAgICBjb25zdCBidWlsZGVySnNvbiA9IGF3YWl0IGltcG9ydChidWlsZGVySnNvblBhdGgpO1xuICAgIGNvbnN0IGJ1aWxkZXJzID0gYnVpbGRlckpzb25bJ2J1aWxkZXJzJ107XG4gICAgaWYgKCFidWlsZGVycykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGJ1aWxkZXJzLmpzb24sIGJ1aWxkZXJzIGtleSBub3QgZm91bmQuJyk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBidWlsZGVyTmFtZSBvZiBPYmplY3Qua2V5cyhidWlsZGVycykpIHtcbiAgICAgIGNvbnN0IGIgPSBidWlsZGVyc1tidWlsZGVyTmFtZV07XG4gICAgICAvLyBUT0RPOiByZW1vdmUgdGhpcyBjaGVjayBhcyB2MSBpcyBub3Qgc3VwcG9ydGVkIGFueW1vcmUuXG4gICAgICBpZiAoIWIuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBoYW5kbGVyID0gKGF3YWl0IGltcG9ydChidWlsZGVySnNvblBhdGggKyAnLy4uLycgKyBiLmltcGxlbWVudGF0aW9uKSkuZGVmYXVsdDtcbiAgICAgIGNvbnN0IG9wdGlvbnNTY2hlbWEgPSBhd2FpdCBpbXBvcnQoYnVpbGRlckpzb25QYXRoICsgJy8uLi8nICsgYi5zY2hlbWEpO1xuICAgICAgdGhpcy5hZGRCdWlsZGVyKGAke3BhY2thZ2VKc29uLm5hbWV9OiR7YnVpbGRlck5hbWV9YCwgaGFuZGxlciwgYi5kZXNjcmlwdGlvbiwgb3B0aW9uc1NjaGVtYSk7XG4gICAgfVxuICB9XG4gIGFkZFRhcmdldCh0YXJnZXQ6IFRhcmdldCwgYnVpbGRlck5hbWU6IHN0cmluZywgb3B0aW9uczoganNvbi5Kc29uT2JqZWN0ID0ge30pIHtcbiAgICB0aGlzLl90YXJnZXRNYXAuc2V0KHRhcmdldFN0cmluZ0Zyb21UYXJnZXQodGFyZ2V0KSwgeyBidWlsZGVyTmFtZSwgb3B0aW9ucyB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldEJ1aWxkZXJOYW1lRm9yVGFyZ2V0KHRhcmdldDogVGFyZ2V0KTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3QgbmFtZSA9IHRhcmdldFN0cmluZ0Zyb21UYXJnZXQodGFyZ2V0KTtcbiAgICBjb25zdCBtYXliZVRhcmdldCA9IHRoaXMuX3RhcmdldE1hcC5nZXQobmFtZSk7XG4gICAgaWYgKCFtYXliZVRhcmdldCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2JhY2tlbmRIb3N0ICYmIHRoaXMuX2JhY2tlbmRIb3N0LmdldEJ1aWxkZXJOYW1lRm9yVGFyZ2V0KHRhcmdldCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1heWJlVGFyZ2V0LmJ1aWxkZXJOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgYSBidWlsZGVyLiBUaGlzIG5lZWRzIHRvIHJldHVybiBhIHN0cmluZyB3aGljaCB3aWxsIGJlIHVzZWQgaW4gYSBkeW5hbWljIGBpbXBvcnQoKWBcbiAgICogY2xhdXNlLiBUaGlzIHNob3VsZCB0aHJvdyBpZiBubyBidWlsZGVyIGNhbiBiZSBmb3VuZC4gVGhlIGR5bmFtaWMgaW1wb3J0IHdpbGwgdGhyb3cgaWZcbiAgICogaXQgaXMgdW5zdXBwb3J0ZWQuXG4gICAqIEBwYXJhbSBidWlsZGVyTmFtZSBUaGUgbmFtZSBvZiB0aGUgYnVpbGRlciB0byBiZSB1c2VkLlxuICAgKiBAcmV0dXJucyBBbGwgdGhlIGluZm8gbmVlZGVkIGZvciB0aGUgYnVpbGRlciBpdHNlbGYuXG4gICAqL1xuICBhc3luYyByZXNvbHZlQnVpbGRlcihidWlsZGVyTmFtZTogc3RyaW5nKTogUHJvbWlzZTxCdWlsZGVySW5mbyB8IG51bGw+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fYnVpbGRlck1hcC5nZXQoYnVpbGRlck5hbWUpIHx8XG4gICAgICAodGhpcy5fYmFja2VuZEhvc3QgJiYgdGhpcy5fYmFja2VuZEhvc3QucmVzb2x2ZUJ1aWxkZXIoYnVpbGRlck5hbWUpKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBnZXRDdXJyZW50RGlyZWN0b3J5KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudERpcmVjdG9yeTtcbiAgfVxuICBhc3luYyBnZXRXb3Jrc3BhY2VSb290KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMud29ya3NwYWNlUm9vdDtcbiAgfVxuXG4gIGFzeW5jIGdldE9wdGlvbnNGb3JUYXJnZXQodGFyZ2V0OiBUYXJnZXQpOiBQcm9taXNlPGpzb24uSnNvbk9iamVjdCB8IG51bGw+IHtcbiAgICBjb25zdCBuYW1lID0gdGFyZ2V0U3RyaW5nRnJvbVRhcmdldCh0YXJnZXQpO1xuICAgIGNvbnN0IG1heWJlVGFyZ2V0ID0gdGhpcy5fdGFyZ2V0TWFwLmdldChuYW1lKTtcbiAgICBpZiAoIW1heWJlVGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdGhpcy5fYmFja2VuZEhvc3QgJiYgdGhpcy5fYmFja2VuZEhvc3QuZ2V0T3B0aW9uc0ZvclRhcmdldCh0YXJnZXQpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXliZVRhcmdldC5vcHRpb25zO1xuICB9XG5cbiAgYXN5bmMgZ2V0UHJvamVjdE1ldGFkYXRhKHRhcmdldDogVGFyZ2V0IHwgc3RyaW5nKTogUHJvbWlzZTxqc29uLkpzb25PYmplY3QgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuX2JhY2tlbmRIb3N0ICYmIHRoaXMuX2JhY2tlbmRIb3N0LmdldFByb2plY3RNZXRhZGF0YSh0YXJnZXQgYXMgc3RyaW5nKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRCdWlsZGVyKGluZm86IEJ1aWxkZXJJbmZvKTogUHJvbWlzZTxCdWlsZGVyIHwgbnVsbD4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLl9idWlsZGVySW1wb3J0TWFwLmdldChpbmZvLmJ1aWxkZXJOYW1lKSB8fFxuICAgICAgKHRoaXMuX2JhY2tlbmRIb3N0ICYmIHRoaXMuX2JhY2tlbmRIb3N0LmxvYWRCdWlsZGVyKGluZm8pKVxuICAgICk7XG4gIH1cbn1cbiJdfQ== |
\ | No newline at end of file |