@alfresco/adf-content-services
Version:
Alfresco ADF content services
89 lines • 13.3 kB
JavaScript
/*!
* @license
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { inject, Injectable } from '@angular/core';
import { QueriesApi, SearchApi } from '@alfresco/js-api';
import { Subject, from } from 'rxjs';
import { AlfrescoApiService } from '../../services/alfresco-api.service';
import { SearchConfigurationService } from './search-configuration.service';
import * as i0 from "@angular/core";
export class SearchService {
constructor() {
this.apiService = inject(AlfrescoApiService);
this.searchConfigurationService = inject(SearchConfigurationService);
this.dataLoaded = new Subject();
}
get queriesApi() {
this._queriesApi = this._queriesApi ?? new QueriesApi(this.apiService.getInstance());
return this._queriesApi;
}
get searchApi() {
this._searchApi = this._searchApi ?? new SearchApi(this.apiService.getInstance());
return this._searchApi;
}
/**
* Gets a list of nodes that match the given search criteria.
*
* @param term Term to search for
* @param options Options for delivery of the search results
* @returns List of nodes resulting from the search
*/
getNodeQueryResults(term, options) {
const promise = this.queriesApi.findNodes(term, options);
promise.then((nodePaging) => {
this.dataLoaded.next(nodePaging);
});
return from(promise);
}
/**
* Performs a search.
*
* @param searchTerm Term to search for
* @param maxResults Maximum number of items in the list of results
* @param skipCount Number of higher-ranked items to skip over in the list
* @returns List of search results
*/
search(searchTerm, maxResults, skipCount) {
const searchQuery = this.searchConfigurationService.generateQueryBody(searchTerm, maxResults, skipCount);
const promise = this.searchApi.search(searchQuery);
promise.then((nodePaging) => {
this.dataLoaded.next(nodePaging);
});
return from(promise);
}
/**
* Performs a search with its parameters supplied by a request object.
*
* @param queryBody Object containing the search parameters
* @returns List of search results
*/
searchByQueryBody(queryBody) {
const promise = this.searchApi.search(queryBody);
promise.then((nodePaging) => {
this.dataLoaded.next(nodePaging);
});
return from(promise);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SearchService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SearchService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SearchService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL3NlYXJjaC9zZXJ2aWNlcy9zZWFyY2guc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWMsVUFBVSxFQUFrQyxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRyxPQUFPLEVBQWMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFLNUUsTUFBTSxPQUFPLGFBQWE7SUFIMUI7UUFJWSxlQUFVLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDeEMsK0JBQTBCLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFFeEUsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFtQixDQUFDO0tBaUUvQztJQTlERyxJQUFJLFVBQVU7UUFDVixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3JGLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBR0QsSUFBSSxTQUFTO1FBQ1QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNsRixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILG1CQUFtQixDQUFDLElBQVksRUFBRSxPQUF1QjtRQUNyRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFekQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxNQUFNLENBQUMsVUFBa0IsRUFBRSxVQUFrQixFQUFFLFNBQWlCO1FBQzVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3pHLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRW5ELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGlCQUFpQixDQUFDLFNBQXdCO1FBQ3RDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWpELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7OEdBcEVRLGFBQWE7a0hBQWIsYUFBYSxjQUZWLE1BQU07OzJGQUVULGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5vZGVQYWdpbmcsIFF1ZXJpZXNBcGksIFNlYXJjaFJlcXVlc3QsIFJlc3VsdFNldFBhZ2luZywgU2VhcmNoQXBpIH0gZnJvbSAnQGFsZnJlc2NvL2pzLWFwaSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBbGZyZXNjb0FwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hbGZyZXNjby1hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBTZWFyY2hDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4vc2VhcmNoLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoU2VydmljZSB7XG4gICAgcHJpdmF0ZSBhcGlTZXJ2aWNlID0gaW5qZWN0KEFsZnJlc2NvQXBpU2VydmljZSk7XG4gICAgcHJpdmF0ZSBzZWFyY2hDb25maWd1cmF0aW9uU2VydmljZSA9IGluamVjdChTZWFyY2hDb25maWd1cmF0aW9uU2VydmljZSk7XG5cbiAgICBkYXRhTG9hZGVkID0gbmV3IFN1YmplY3Q8UmVzdWx0U2V0UGFnaW5nPigpO1xuXG4gICAgcHJpdmF0ZSBfcXVlcmllc0FwaTogUXVlcmllc0FwaTtcbiAgICBnZXQgcXVlcmllc0FwaSgpOiBRdWVyaWVzQXBpIHtcbiAgICAgICAgdGhpcy5fcXVlcmllc0FwaSA9IHRoaXMuX3F1ZXJpZXNBcGkgPz8gbmV3IFF1ZXJpZXNBcGkodGhpcy5hcGlTZXJ2aWNlLmdldEluc3RhbmNlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fcXVlcmllc0FwaTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZWFyY2hBcGk6IFNlYXJjaEFwaTtcbiAgICBnZXQgc2VhcmNoQXBpKCk6IFNlYXJjaEFwaSB7XG4gICAgICAgIHRoaXMuX3NlYXJjaEFwaSA9IHRoaXMuX3NlYXJjaEFwaSA/PyBuZXcgU2VhcmNoQXBpKHRoaXMuYXBpU2VydmljZS5nZXRJbnN0YW5jZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaEFwaTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGEgbGlzdCBvZiBub2RlcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBzZWFyY2ggY3JpdGVyaWEuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGVybSBUZXJtIHRvIHNlYXJjaCBmb3JcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBkZWxpdmVyeSBvZiB0aGUgc2VhcmNoIHJlc3VsdHNcbiAgICAgKiBAcmV0dXJucyBMaXN0IG9mIG5vZGVzIHJlc3VsdGluZyBmcm9tIHRoZSBzZWFyY2hcbiAgICAgKi9cbiAgICBnZXROb2RlUXVlcnlSZXN1bHRzKHRlcm06IHN0cmluZywgb3B0aW9ucz86IFNlYXJjaE9wdGlvbnMpOiBPYnNlcnZhYmxlPE5vZGVQYWdpbmc+IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucXVlcmllc0FwaS5maW5kTm9kZXModGVybSwgb3B0aW9ucyk7XG5cbiAgICAgICAgcHJvbWlzZS50aGVuKChub2RlUGFnaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRhdGFMb2FkZWQubmV4dChub2RlUGFnaW5nKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZyb20ocHJvbWlzZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYSBzZWFyY2guXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2VhcmNoVGVybSBUZXJtIHRvIHNlYXJjaCBmb3JcbiAgICAgKiBAcGFyYW0gbWF4UmVzdWx0cyBNYXhpbXVtIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgbGlzdCBvZiByZXN1bHRzXG4gICAgICogQHBhcmFtIHNraXBDb3VudCBOdW1iZXIgb2YgaGlnaGVyLXJhbmtlZCBpdGVtcyB0byBza2lwIG92ZXIgaW4gdGhlIGxpc3RcbiAgICAgKiBAcmV0dXJucyBMaXN0IG9mIHNlYXJjaCByZXN1bHRzXG4gICAgICovXG4gICAgc2VhcmNoKHNlYXJjaFRlcm06IHN0cmluZywgbWF4UmVzdWx0czogbnVtYmVyLCBza2lwQ291bnQ6IG51bWJlcik6IE9ic2VydmFibGU8UmVzdWx0U2V0UGFnaW5nPiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFF1ZXJ5ID0gdGhpcy5zZWFyY2hDb25maWd1cmF0aW9uU2VydmljZS5nZW5lcmF0ZVF1ZXJ5Qm9keShzZWFyY2hUZXJtLCBtYXhSZXN1bHRzLCBza2lwQ291bnQpO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5zZWFyY2hBcGkuc2VhcmNoKHNlYXJjaFF1ZXJ5KTtcblxuICAgICAgICBwcm9taXNlLnRoZW4oKG5vZGVQYWdpbmcpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGF0YUxvYWRlZC5uZXh0KG5vZGVQYWdpbmcpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZnJvbShwcm9taXNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtcyBhIHNlYXJjaCB3aXRoIGl0cyBwYXJhbWV0ZXJzIHN1cHBsaWVkIGJ5IGEgcmVxdWVzdCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcXVlcnlCb2R5IE9iamVjdCBjb250YWluaW5nIHRoZSBzZWFyY2ggcGFyYW1ldGVyc1xuICAgICAqIEByZXR1cm5zIExpc3Qgb2Ygc2VhcmNoIHJlc3VsdHNcbiAgICAgKi9cbiAgICBzZWFyY2hCeVF1ZXJ5Qm9keShxdWVyeUJvZHk6IFNlYXJjaFJlcXVlc3QpOiBPYnNlcnZhYmxlPFJlc3VsdFNldFBhZ2luZz4ge1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5zZWFyY2hBcGkuc2VhcmNoKHF1ZXJ5Qm9keSk7XG5cbiAgICAgICAgcHJvbWlzZS50aGVuKChub2RlUGFnaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRhdGFMb2FkZWQubmV4dChub2RlUGFnaW5nKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZyb20ocHJvbWlzZSk7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaE9wdGlvbnMge1xuICAgIC8qKiBUaGUgbnVtYmVyIG9mIGVudGl0aWVzIHRoYXQgZXhpc3QgaW4gdGhlIGNvbGxlY3Rpb24gYmVmb3JlIHRob3NlIGluY2x1ZGVkIGluIHRoaXMgbGlzdC4gKi9cbiAgICBza2lwQ291bnQ/OiBudW1iZXI7XG5cbiAgICAvKiogVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIHJldHVybiBpbiB0aGUgbGlzdC4gKi9cbiAgICBtYXhJdGVtcz86IG51bWJlcjtcblxuICAgIC8qKiBUaGUgaWQgb2YgdGhlIG5vZGUgdG8gc3RhcnQgdGhlIHNlYXJjaCBmcm9tLiBTdXBwb3J0cyB0aGUgYWxpYXNlcyAtbXktLCAtcm9vdC0gYW5kIC1zaGFyZWQtLiAqL1xuICAgIHJvb3ROb2RlSWQ/OiBzdHJpbmc7XG5cbiAgICAvKiogUmVzdHJpY3QgdGhlIHJldHVybmVkIHJlc3VsdHMgdG8gb25seSB0aG9zZSBvZiB0aGUgZ2l2ZW4gbm9kZSB0eXBlIGFuZCBpdHMgc3ViLXR5cGVzLiAqL1xuICAgIG5vZGVUeXBlPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5vZGUuIFRoZSBhdmFpbGFibGUgb3B0aW9uYWwgZmllbGRzIGFyZTpcbiAgICAgKiBgYWxsb3dhYmxlT3BlcmF0aW9uc2AsIGBhc3BlY3ROYW1lc2AsIGBpc0xpbmtgLCBgaXNMb2NrZWRgLCBgcGF0aGAgYW5kIGBwcm9wZXJ0aWVzYC5cbiAgICAgKi9cbiAgICBpbmNsdWRlPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBTdHJpbmcgYXJyYXkgdG8gY29udHJvbCB0aGUgb3JkZXIgb2YgdGhlIGVudGl0aWVzIHJldHVybmVkIGluIGEgbGlzdC4gWW91IGNhbiB1c2UgdGhpc1xuICAgICAqIHBhcmFtZXRlciB0byBzb3J0IHRoZSBsaXN0IGJ5IG9uZSBvciBtb3JlIGZpZWxkcy4gRWFjaCBmaWVsZCBoYXMgYSBkZWZhdWx0IHNvcnQgb3JkZXIsXG4gICAgICogd2hpY2ggaXMgbm9ybWFsbHkgYXNjZW5kaW5nIG9yZGVyIChidXQgc2VlIHRoZSBKUy1BUEkgZG9jcyB0byBjaGVjayBpZiBhbnkgZmllbGRzIHVzZWRcbiAgICAgKiBpbiBhIG1ldGhvZCBoYXZlIGEgZGVzY2VuZGluZyBkZWZhdWx0IHNlYXJjaCBvcmRlcikuIFRvIHNvcnQgdGhlIGVudGl0aWVzIGluIGEgc3BlY2lmaWNcbiAgICAgKiBvcmRlciwgeW91IGNhbiB1c2UgdGhlIFwiQVNDXCIgYW5kIFwiREVTQ1wiIGtleXdvcmRzIGZvciBhbnkgZmllbGQuXG4gICAgICovXG4gICAgb3JkZXJCeT86IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBmaWVsZCBuYW1lcy4gWW91IGNhbiB1c2UgdGhpcyBwYXJhbWV0ZXIgdG8gcmVzdHJpY3QgdGhlIGZpZWxkcyByZXR1cm5lZCB3aXRoaW5cbiAgICAgKiBhIHJlc3BvbnNlIGlmLCBmb3IgZXhhbXBsZSwgeW91IHdhbnQgdG8gc2F2ZSBvbiBvdmVyYWxsIGJhbmR3aWR0aC4gVGhlIGxpc3QgYXBwbGllcyB0byBhXG4gICAgICogcmV0dXJuZWQgaW5kaXZpZHVhbCBlbnRpdHkgb3IgZW50cmllcyB3aXRoaW4gYSBjb2xsZWN0aW9uLiBJZiB0aGUgQVBJIG1ldGhvZCBhbHNvIHN1cHBvcnRzXG4gICAgICogdGhlIGBpbmNsdWRlYCBwYXJhbWV0ZXIsIHRoZW4gdGhlIGZpZWxkcyBzcGVjaWZpZWQgaW4gdGhlIGluY2x1ZGUgcGFyYW1ldGVyIGFyZSByZXR1cm5lZCBpblxuICAgICAqIGFkZGl0aW9uIHRvIHRob3NlIHNwZWNpZmllZCBpbiB0aGUgZmllbGRzIHBhcmFtZXRlci5cbiAgICAgKi9cbiAgICBmaWVsZHM/OiBzdHJpbmdbXTtcbn1cbiJdfQ==