@angular/core
Version:
Angular - the core framework
130 lines • 18.6 kB
JavaScript
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import { assertInInjectionContext } from '../di';
import { createMultiResultQuerySignalFn, createSingleResultOptionalQuerySignalFn, createSingleResultRequiredQuerySignalFn, } from '../render3/query_reactive';
function viewChildFn(locator, opts) {
ngDevMode && assertInInjectionContext(viewChild);
return createSingleResultOptionalQuerySignalFn();
}
function viewChildRequiredFn(locator, opts) {
ngDevMode && assertInInjectionContext(viewChild);
return createSingleResultRequiredQuerySignalFn();
}
/**
* Initializes a view child query.
*
* Consider using `viewChild.required` for queries that should always match.
*
* @usageNotes
* Create a child query in your component by declaring a
* class field and initializing it with the `viewChild()` function.
*
* ```ts
* @Component({template: '<div #el></div><my-component #cmp />'})
* export class TestComponent {
* divEl = viewChild<ElementRef>('el'); // Signal<ElementRef|undefined>
* divElRequired = viewChild.required<ElementRef>('el'); // Signal<ElementRef>
* cmp = viewChild(MyComponent); // Signal<MyComponent|undefined>
* cmpRequired = viewChild.required(MyComponent); // Signal<MyComponent>
* }
* ```
*
* @developerPreview
* @initializerApiFunction
*/
export const viewChild = (() => {
// Note: This may be considered a side-effect, but nothing will depend on
// this assignment, unless this `viewChild` constant export is accessed. It's a
// self-contained side effect that is local to the user facing `viewChild` export.
viewChildFn.required = viewChildRequiredFn;
return viewChildFn;
})();
/**
* Initializes a view children query.
*
* Query results are represented as a signal of a read-only collection containing all matched
* elements.
*
* @usageNotes
* Create a children query in your component by declaring a
* class field and initializing it with the `viewChildren()` function.
*
* ```ts
* @Component({...})
* export class TestComponent {
* divEls = viewChildren<ElementRef>('el'); // Signal<ReadonlyArray<ElementRef>>
* }
* ```
*
* @initializerApiFunction
* @developerPreview
*/
export function viewChildren(locator, opts) {
ngDevMode && assertInInjectionContext(viewChildren);
return createMultiResultQuerySignalFn();
}
export function contentChildFn(locator, opts) {
ngDevMode && assertInInjectionContext(contentChild);
return createSingleResultOptionalQuerySignalFn();
}
function contentChildRequiredFn(locator, opts) {
ngDevMode && assertInInjectionContext(contentChildren);
return createSingleResultRequiredQuerySignalFn();
}
/**
* Initializes a content child query. Consider using `contentChild.required` for queries that should
* always match.
*
* @usageNotes
* Create a child query in your component by declaring a
* class field and initializing it with the `contentChild()` function.
*
* ```ts
* @Component({...})
* export class TestComponent {
* headerEl = contentChild<ElementRef>('h'); // Signal<ElementRef|undefined>
* headerElElRequired = contentChild.required<ElementRef>('h'); // Signal<ElementRef>
* header = contentChild(MyHeader); // Signal<MyHeader|undefined>
* headerRequired = contentChild.required(MyHeader); // Signal<MyHeader>
* }
* ```
*
* @initializerApiFunction
* @developerPreview
*/
export const contentChild = (() => {
// Note: This may be considered a side-effect, but nothing will depend on
// this assignment, unless this `viewChild` constant export is accessed. It's a
// self-contained side effect that is local to the user facing `viewChild` export.
contentChildFn.required = contentChildRequiredFn;
return contentChildFn;
})();
/**
* Initializes a content children query.
*
* Query results are represented as a signal of a read-only collection containing all matched
* elements.
*
* @usageNotes
* Create a children query in your component by declaring a
* class field and initializing it with the `contentChildren()` function.
*
* ```ts
* @Component({...})
* export class TestComponent {
* headerEl = contentChildren<ElementRef>('h'); // Signal<ReadonlyArray<ElementRef>>
* }
* ```
*
* @initializerApiFunction
* @developerPreview
*/
export function contentChildren(locator, opts) {
return createMultiResultQuerySignalFn();
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcmllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL2F1dGhvcmluZy9xdWVyaWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUUvQyxPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLHVDQUF1QyxFQUN2Qyx1Q0FBdUMsR0FDeEMsTUFBTSwyQkFBMkIsQ0FBQztBQUduQyxTQUFTLFdBQVcsQ0FDbEIsT0FBeUMsRUFDekMsSUFBb0M7SUFFcEMsU0FBUyxJQUFJLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pELE9BQU8sdUNBQXVDLEVBQVMsQ0FBQztBQUMxRCxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FDMUIsT0FBeUMsRUFDekMsSUFBb0M7SUFFcEMsU0FBUyxJQUFJLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pELE9BQU8sdUNBQXVDLEVBQVMsQ0FBQztBQUMxRCxDQUFDO0FBdUNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQXNCLENBQUMsR0FBRyxFQUFFO0lBQ2hELHlFQUF5RTtJQUN6RSwrRUFBK0U7SUFDL0Usa0ZBQWtGO0lBQ2pGLFdBQW1CLENBQUMsUUFBUSxHQUFHLG1CQUFtQixDQUFDO0lBQ3BELE9BQU8sV0FBMEUsQ0FBQztBQUNwRixDQUFDLENBQUMsRUFBRSxDQUFDO0FBVUw7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUMxQixPQUF5QyxFQUN6QyxJQUFvQztJQUVwQyxTQUFTLElBQUksd0JBQXdCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDcEQsT0FBTyw4QkFBOEIsRUFBUyxDQUFDO0FBQ2pELENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUM1QixPQUF5QyxFQUN6QyxJQUEyRDtJQUUzRCxTQUFTLElBQUksd0JBQXdCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDcEQsT0FBTyx1Q0FBdUMsRUFBUyxDQUFDO0FBQzFELENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUM3QixPQUF5QyxFQUN6QyxJQUEyRDtJQUUzRCxTQUFTLElBQUksd0JBQXdCLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdkQsT0FBTyx1Q0FBdUMsRUFBUyxDQUFDO0FBQzFELENBQUM7QUFxREQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUF5QixDQUFDLEdBQUcsRUFBRTtJQUN0RCx5RUFBeUU7SUFDekUsK0VBQStFO0lBQy9FLGtGQUFrRjtJQUNqRixjQUFzQixDQUFDLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQztJQUMxRCxPQUFPLGNBQW1GLENBQUM7QUFDN0YsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQVdMOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsT0FBeUMsRUFDekMsSUFBMkQ7SUFFM0QsT0FBTyw4QkFBOEIsRUFBUyxDQUFDO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHthc3NlcnRJbkluamVjdGlvbkNvbnRleHR9IGZyb20gJy4uL2RpJztcbmltcG9ydCB7UHJvdmlkZXJUb2tlbn0gZnJvbSAnLi4vZGkvcHJvdmlkZXJfdG9rZW4nO1xuaW1wb3J0IHtcbiAgY3JlYXRlTXVsdGlSZXN1bHRRdWVyeVNpZ25hbEZuLFxuICBjcmVhdGVTaW5nbGVSZXN1bHRPcHRpb25hbFF1ZXJ5U2lnbmFsRm4sXG4gIGNyZWF0ZVNpbmdsZVJlc3VsdFJlcXVpcmVkUXVlcnlTaWduYWxGbixcbn0gZnJvbSAnLi4vcmVuZGVyMy9xdWVyeV9yZWFjdGl2ZSc7XG5pbXBvcnQge1NpZ25hbH0gZnJvbSAnLi4vcmVuZGVyMy9yZWFjdGl2aXR5L2FwaSc7XG5cbmZ1bmN0aW9uIHZpZXdDaGlsZEZuPExvY2F0b3JULCBSZWFkVD4oXG4gIGxvY2F0b3I6IFByb3ZpZGVyVG9rZW48TG9jYXRvclQ+IHwgc3RyaW5nLFxuICBvcHRzPzoge3JlYWQ/OiBQcm92aWRlclRva2VuPFJlYWRUPn0sXG4pOiBTaWduYWw8UmVhZFQgfCB1bmRlZmluZWQ+IHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCh2aWV3Q2hpbGQpO1xuICByZXR1cm4gY3JlYXRlU2luZ2xlUmVzdWx0T3B0aW9uYWxRdWVyeVNpZ25hbEZuPFJlYWRUPigpO1xufVxuXG5mdW5jdGlvbiB2aWV3Q2hpbGRSZXF1aXJlZEZuPExvY2F0b3JULCBSZWFkVD4oXG4gIGxvY2F0b3I6IFByb3ZpZGVyVG9rZW48TG9jYXRvclQ+IHwgc3RyaW5nLFxuICBvcHRzPzoge3JlYWQ/OiBQcm92aWRlclRva2VuPFJlYWRUPn0sXG4pOiBTaWduYWw8UmVhZFQ+IHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCh2aWV3Q2hpbGQpO1xuICByZXR1cm4gY3JlYXRlU2luZ2xlUmVzdWx0UmVxdWlyZWRRdWVyeVNpZ25hbEZuPFJlYWRUPigpO1xufVxuXG4vKipcbiAqIFR5cGUgb2YgdGhlIGB2aWV3Q2hpbGRgIGZ1bmN0aW9uLiBUaGUgdmlld0NoaWxkIGZ1bmN0aW9uIGNyZWF0ZXMgYSBzaW5ndWxhciB2aWV3IHF1ZXJ5LlxuICpcbiAqIEl0IGlzIGEgc3BlY2lhbCBmdW5jdGlvbiB0aGF0IGFsc28gcHJvdmlkZXMgYWNjZXNzIHRvIHJlcXVpcmVkIHF1ZXJ5IHJlc3VsdHMgdmlhIHRoZSBgLnJlcXVpcmVkYFxuICogcHJvcGVydHkuXG4gKlxuICogQGRldmVsb3BlclByZXZpZXdcbiAqIEBkb2NzUHJpdmF0ZSBJZ25vcmVkIGJlY2F1c2UgYHZpZXdDaGlsZGAgaXMgdGhlIGNhbm9uaWNhbCBBUEkgZW50cnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmlld0NoaWxkRnVuY3Rpb24ge1xuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgYSB2aWV3IGNoaWxkIHF1ZXJ5LiBDb25zaWRlciB1c2luZyBgdmlld0NoaWxkLnJlcXVpcmVkYCBmb3IgcXVlcmllcyB0aGF0IHNob3VsZFxuICAgKiBhbHdheXMgbWF0Y2guXG4gICAqXG4gICAqIEBkZXZlbG9wZXJQcmV2aWV3XG4gICAqL1xuICA8TG9jYXRvclQ+KGxvY2F0b3I6IFByb3ZpZGVyVG9rZW48TG9jYXRvclQ+IHwgc3RyaW5nKTogU2lnbmFsPExvY2F0b3JUIHwgdW5kZWZpbmVkPjtcbiAgPExvY2F0b3JULCBSZWFkVD4oXG4gICAgbG9jYXRvcjogUHJvdmlkZXJUb2tlbjxMb2NhdG9yVD4gfCBzdHJpbmcsXG4gICAgb3B0czoge3JlYWQ6IFByb3ZpZGVyVG9rZW48UmVhZFQ+fSxcbiAgKTogU2lnbmFsPFJlYWRUIHwgdW5kZWZpbmVkPjtcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgYSB2aWV3IGNoaWxkIHF1ZXJ5IHRoYXQgaXMgZXhwZWN0ZWQgdG8gYWx3YXlzIG1hdGNoIGFuIGVsZW1lbnQuXG4gICAqXG4gICAqIEBkZXZlbG9wZXJQcmV2aWV3XG4gICAqL1xuICByZXF1aXJlZDoge1xuICAgIDxMb2NhdG9yVD4obG9jYXRvcjogUHJvdmlkZXJUb2tlbjxMb2NhdG9yVD4gfCBzdHJpbmcpOiBTaWduYWw8TG9jYXRvclQ+O1xuXG4gICAgPExvY2F0b3JULCBSZWFkVD4oXG4gICAgICBsb2NhdG9yOiBQcm92aWRlclRva2VuPExvY2F0b3JUPiB8IHN0cmluZyxcbiAgICAgIG9wdHM6IHtyZWFkOiBQcm92aWRlclRva2VuPFJlYWRUPn0sXG4gICAgKTogU2lnbmFsPFJlYWRUPjtcbiAgfTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyBhIHZpZXcgY2hpbGQgcXVlcnkuXG4gKlxuICogQ29uc2lkZXIgdXNpbmcgYHZpZXdDaGlsZC5yZXF1aXJlZGAgZm9yIHF1ZXJpZXMgdGhhdCBzaG91bGQgYWx3YXlzIG1hdGNoLlxuICpcbiAqIEB1c2FnZU5vdGVzXG4gKiBDcmVhdGUgYSBjaGlsZCBxdWVyeSBpbiB5b3VyIGNvbXBvbmVudCBieSBkZWNsYXJpbmcgYVxuICogY2xhc3MgZmllbGQgYW5kIGluaXRpYWxpemluZyBpdCB3aXRoIHRoZSBgdmlld0NoaWxkKClgIGZ1bmN0aW9uLlxuICpcbiAqIGBgYHRzXG4gKiBAQ29tcG9uZW50KHt0ZW1wbGF0ZTogJzxkaXYgI2VsPjwvZGl2PjxteS1jb21wb25lbnQgI2NtcCAvPid9KVxuICogZXhwb3J0IGNsYXNzIFRlc3RDb21wb25lbnQge1xuICogICBkaXZFbCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignZWwnKTsgICAgICAgICAgICAgICAgICAgLy8gU2lnbmFsPEVsZW1lbnRSZWZ8dW5kZWZpbmVkPlxuICogICBkaXZFbFJlcXVpcmVkID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdlbCcpOyAgLy8gU2lnbmFsPEVsZW1lbnRSZWY+XG4gKiAgIGNtcCA9IHZpZXdDaGlsZChNeUNvbXBvbmVudCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaWduYWw8TXlDb21wb25lbnR8dW5kZWZpbmVkPlxuICogICBjbXBSZXF1aXJlZCA9IHZpZXdDaGlsZC5yZXF1aXJlZChNeUNvbXBvbmVudCk7ICAgICAgICAgLy8gU2lnbmFsPE15Q29tcG9uZW50PlxuICogfVxuICogYGBgXG4gKlxuICogQGRldmVsb3BlclByZXZpZXdcbiAqIEBpbml0aWFsaXplckFwaUZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCB2aWV3Q2hpbGQ6IFZpZXdDaGlsZEZ1bmN0aW9uID0gKCgpID0+IHtcbiAgLy8gTm90ZTogVGhpcyBtYXkgYmUgY29uc2lkZXJlZCBhIHNpZGUtZWZmZWN0LCBidXQgbm90aGluZyB3aWxsIGRlcGVuZCBvblxuICAvLyB0aGlzIGFzc2lnbm1lbnQsIHVubGVzcyB0aGlzIGB2aWV3Q2hpbGRgIGNvbnN0YW50IGV4cG9ydCBpcyBhY2Nlc3NlZC4gSXQncyBhXG4gIC8vIHNlbGYtY29udGFpbmVkIHNpZGUgZWZmZWN0IHRoYXQgaXMgbG9jYWwgdG8gdGhlIHVzZXIgZmFjaW5nIGB2aWV3Q2hpbGRgIGV4cG9ydC5cbiAgKHZpZXdDaGlsZEZuIGFzIGFueSkucmVxdWlyZWQgPSB2aWV3Q2hpbGRSZXF1aXJlZEZuO1xuICByZXR1cm4gdmlld0NoaWxkRm4gYXMgdHlwZW9mIHZpZXdDaGlsZEZuICYge3JlcXVpcmVkOiB0eXBlb2Ygdmlld0NoaWxkUmVxdWlyZWRGbn07XG59KSgpO1xuXG5leHBvcnQgZnVuY3Rpb24gdmlld0NoaWxkcmVuPExvY2F0b3JUPihcbiAgbG9jYXRvcjogUHJvdmlkZXJUb2tlbjxMb2NhdG9yVD4gfCBzdHJpbmcsXG4pOiBTaWduYWw8UmVhZG9ubHlBcnJheTxMb2NhdG9yVD4+O1xuZXhwb3J0IGZ1bmN0aW9uIHZpZXdDaGlsZHJlbjxMb2NhdG9yVCwgUmVhZFQ+KFxuICBsb2NhdG9yOiBQcm92aWRlclRva2VuPExvY2F0b3JUPiB8IHN0cmluZyxcbiAgb3B0czoge3JlYWQ6IFByb3ZpZGVyVG9rZW48UmVhZFQ+fSxcbik6IFNpZ25hbDxSZWFkb25seUFycmF5PFJlYWRUPj47XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYSB2aWV3IGNoaWxkcmVuIHF1ZXJ5LlxuICpcbiAqIFF1ZXJ5IHJlc3VsdHMgYXJlIHJlcHJlc2VudGVkIGFzIGEgc2lnbmFsIG9mIGEgcmVhZC1vbmx5IGNvbGxlY3Rpb24gY29udGFpbmluZyBhbGwgbWF0Y2hlZFxuICogZWxlbWVudHMuXG4gKlxuICogQHVzYWdlTm90ZXNcbiAqIENyZWF0ZSBhIGNoaWxkcmVuIHF1ZXJ5IGluIHlvdXIgY29tcG9uZW50IGJ5IGRlY2xhcmluZyBhXG4gKiBjbGFzcyBmaWVsZCBhbmQgaW5pdGlhbGl6aW5nIGl0IHdpdGggdGhlIGB2aWV3Q2hpbGRyZW4oKWAgZnVuY3Rpb24uXG4gKlxuICogYGBgdHNcbiAqIEBDb21wb25lbnQoey4uLn0pXG4gKiBleHBvcnQgY2xhc3MgVGVzdENvbXBvbmVudCB7XG4gKiAgIGRpdkVscyA9IHZpZXdDaGlsZHJlbjxFbGVtZW50UmVmPignZWwnKTsgICAvLyBTaWduYWw8UmVhZG9ubHlBcnJheTxFbGVtZW50UmVmPj5cbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBpbml0aWFsaXplckFwaUZ1bmN0aW9uXG4gKiBAZGV2ZWxvcGVyUHJldmlld1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmlld0NoaWxkcmVuPExvY2F0b3JULCBSZWFkVD4oXG4gIGxvY2F0b3I6IFByb3ZpZGVyVG9rZW48TG9jYXRvclQ+IHwgc3RyaW5nLFxuICBvcHRzPzoge3JlYWQ/OiBQcm92aWRlclRva2VuPFJlYWRUPn0sXG4pOiBTaWduYWw8UmVhZG9ubHlBcnJheTxSZWFkVD4+IHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCh2aWV3Q2hpbGRyZW4pO1xuICByZXR1cm4gY3JlYXRlTXVsdGlSZXN1bHRRdWVyeVNpZ25hbEZuPFJlYWRUPigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGVudENoaWxkRm48TG9jYXRvclQsIFJlYWRUPihcbiAgbG9jYXRvcjogUHJvdmlkZXJUb2tlbjxMb2NhdG9yVD4gfCBzdHJpbmcsXG4gIG9wdHM/OiB7ZGVzY2VuZGFudHM/OiBib29sZWFuOyByZWFkPzogUHJvdmlkZXJUb2tlbjxSZWFkVD59LFxuKTogU2lnbmFsPFJlYWRUIHwgdW5kZWZpbmVkPiB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoY29udGVudENoaWxkKTtcbiAgcmV0dXJuIGNyZWF0ZVNpbmdsZVJlc3VsdE9wdGlvbmFsUXVlcnlTaWduYWxGbjxSZWFkVD4oKTtcbn1cblxuZnVuY3Rpb24gY29udGVudENoaWxkUmVxdWlyZWRGbjxMb2NhdG9yVCwgUmVhZFQ+KFxuICBsb2NhdG9yOiBQcm92aWRlclRva2VuPExvY2F0b3JUPiB8IHN0cmluZyxcbiAgb3B0cz86IHtkZXNjZW5kYW50cz86IGJvb2xlYW47IHJlYWQ/OiBQcm92aWRlclRva2VuPFJlYWRUPn0sXG4pOiBTaWduYWw8UmVhZFQ+IHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChjb250ZW50Q2hpbGRyZW4pO1xuICByZXR1cm4gY3JlYXRlU2luZ2xlUmVzdWx0UmVxdWlyZWRRdWVyeVNpZ25hbEZuPFJlYWRUPigpO1xufVxuXG4vKipcbiAqIFR5cGUgb2YgdGhlIGBjb250ZW50Q2hpbGRgIGZ1bmN0aW9uLlxuICpcbiAqIFRoZSBjb250ZW50Q2hpbGQgZnVuY3Rpb24gY3JlYXRlcyBhIHNpbmd1bGFyIGNvbnRlbnQgcXVlcnkuIEl0IGlzIGEgc3BlY2lhbCBmdW5jdGlvbiB0aGF0IGFsc29cbiAqIHByb3ZpZGVzIGFjY2VzcyB0byByZXF1aXJlZCBxdWVyeSByZXN1bHRzIHZpYSB0aGUgYC5yZXF1aXJlZGAgcHJvcGVydHkuXG4gKlxuICogQGRldmVsb3BlclByZXZpZXdcbiAqIEBkb2NzUHJpdmF0ZSBJZ25vcmVkIGJlY2F1c2UgYGNvbnRlbnRDaGlsZGAgaXMgdGhlIGNhbm9uaWNhbCBBUEkgZW50cnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudENoaWxkRnVuY3Rpb24ge1xuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgYSBjb250ZW50IGNoaWxkIHF1ZXJ5LlxuICAgKlxuICAgKiBDb25zaWRlciB1c2luZyBgY29udGVudENoaWxkLnJlcXVpcmVkYCBmb3IgcXVlcmllcyB0aGF0IHNob3VsZCBhbHdheXMgbWF0Y2guXG4gICAqIEBkZXZlbG9wZXJQcmV2aWV3XG4gICAqL1xuICA8TG9jYXRvclQ+KFxuICAgIGxvY2F0b3I6IFByb3ZpZGVyVG9rZW48TG9jYXRvclQ+IHwgc3RyaW5nLFxuICAgIG9wdHM/OiB7XG4gICAgICBkZXNjZW5kYW50cz86IGJvb2xlYW47XG4gICAgICByZWFkPzogdW5kZWZpbmVkO1xuICAgIH0sXG4gICk6IFNpZ25hbDxMb2NhdG9yVCB8IHVuZGVmaW5lZD47XG5cbiAgPExvY2F0b3JULCBSZWFkVD4oXG4gICAgbG9jYXRvcjogUHJvdmlkZXJUb2tlbjxMb2NhdG9yVD4gfCBzdHJpbmcsXG4gICAgb3B0czoge1xuICAgICAgZGVzY2VuZGFudHM/OiBib29sZWFuO1xuICAgICAgcmVhZDogUHJvdmlkZXJUb2tlbjxSZWFkVD47XG4gICAgfSxcbiAgKTogU2lnbmFsPFJlYWRUIHwgdW5kZWZpbmVkPjtcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgYSBjb250ZW50IGNoaWxkIHF1ZXJ5IHRoYXQgaXMgYWx3YXlzIGV4cGVjdGVkIHRvIG1hdGNoLlxuICAgKi9cbiAgcmVxdWlyZWQ6IHtcbiAgICA8TG9jYXRvclQ+KFxuICAgICAgbG9jYXRvcjogUHJvdmlkZXJUb2tlbjxMb2NhdG9yVD4gfCBzdHJpbmcsXG4gICAgICBvcHRzPzoge1xuICAgICAgICBkZXNjZW5kYW50cz86IGJvb2xlYW47XG4gICAgICAgIHJlYWQ/OiB1bmRlZmluZWQ7XG4gICAgICB9LFxuICAgICk6IFNpZ25hbDxMb2NhdG9yVD47XG5cbiAgICA8TG9jYXRvclQsIFJlYWRUPihcbiAgICAgIGxvY2F0b3I6IFByb3ZpZGVyVG9rZW48TG9jYXRvclQ+IHwgc3RyaW5nLFxuICAgICAgb3B0czoge2Rlc2NlbmRhbnRzPzogYm9vbGVhbjsgcmVhZDogUHJvdmlkZXJUb2tlbjxSZWFkVD59LFxuICAgICk6IFNpZ25hbDxSZWFkVD47XG4gIH07XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYSBjb250ZW50IGNoaWxkIHF1ZXJ5LiBDb25zaWRlciB1c2luZyBgY29udGVudENoaWxkLnJlcXVpcmVkYCBmb3IgcXVlcmllcyB0aGF0IHNob3VsZFxuICogYWx3YXlzIG1hdGNoLlxuICpcbiAqIEB1c2FnZU5vdGVzXG4gKiBDcmVhdGUgYSBjaGlsZCBxdWVyeSBpbiB5b3VyIGNvbXBvbmVudCBieSBkZWNsYXJpbmcgYVxuICogY2xhc3MgZmllbGQgYW5kIGluaXRpYWxpemluZyBpdCB3aXRoIHRoZSBgY29udGVudENoaWxkKClgIGZ1bmN0aW9uLlxuICpcbiAqIGBgYHRzXG4gKiBAQ29tcG9uZW50KHsuLi59KVxuICogZXhwb3J0IGNsYXNzIFRlc3RDb21wb25lbnQge1xuICogICBoZWFkZXJFbCA9IGNvbnRlbnRDaGlsZDxFbGVtZW50UmVmPignaCcpOyAgICAgICAgICAgICAgICAgICAgLy8gU2lnbmFsPEVsZW1lbnRSZWZ8dW5kZWZpbmVkPlxuICogICBoZWFkZXJFbEVsUmVxdWlyZWQgPSBjb250ZW50Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2gnKTsgLy8gU2lnbmFsPEVsZW1lbnRSZWY+XG4gKiAgIGhlYWRlciA9IGNvbnRlbnRDaGlsZChNeUhlYWRlcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaWduYWw8TXlIZWFkZXJ8dW5kZWZpbmVkPlxuICogICBoZWFkZXJSZXF1aXJlZCA9IGNvbnRlbnRDaGlsZC5yZXF1aXJlZChNeUhlYWRlcik7ICAgICAgICAgICAgLy8gU2lnbmFsPE15SGVhZGVyPlxuICogfVxuICogYGBgXG4gKlxuICogQGluaXRpYWxpemVyQXBpRnVuY3Rpb25cbiAqIEBkZXZlbG9wZXJQcmV2aWV3XG4gKi9cbmV4cG9ydCBjb25zdCBjb250ZW50Q2hpbGQ6IENvbnRlbnRDaGlsZEZ1bmN0aW9uID0gKCgpID0+IHtcbiAgLy8gTm90ZTogVGhpcyBtYXkgYmUgY29uc2lkZXJlZCBhIHNpZGUtZWZmZWN0LCBidXQgbm90aGluZyB3aWxsIGRlcGVuZCBvblxuICAvLyB0aGlzIGFzc2lnbm1lbnQsIHVubGVzcyB0aGlzIGB2aWV3Q2hpbGRgIGNvbnN0YW50IGV4cG9ydCBpcyBhY2Nlc3NlZC4gSXQncyBhXG4gIC8vIHNlbGYtY29udGFpbmVkIHNpZGUgZWZmZWN0IHRoYXQgaXMgbG9jYWwgdG8gdGhlIHVzZXIgZmFjaW5nIGB2aWV3Q2hpbGRgIGV4cG9ydC5cbiAgKGNvbnRlbnRDaGlsZEZuIGFzIGFueSkucmVxdWlyZWQgPSBjb250ZW50Q2hpbGRSZXF1aXJlZEZuO1xuICByZXR1cm4gY29udGVudENoaWxkRm4gYXMgdHlwZW9mIGNvbnRlbnRDaGlsZEZuICYge3JlcXVpcmVkOiB0eXBlb2YgY29udGVudENoaWxkUmVxdWlyZWRGbn07XG59KSgpO1xuXG5leHBvcnQgZnVuY3Rpb24gY29udGVudENoaWxkcmVuPExvY2F0b3JUPihcbiAgbG9jYXRvcjogUHJvdmlkZXJUb2tlbjxMb2NhdG9yVD4gfCBzdHJpbmcsXG4gIG9wdHM/OiB7ZGVzY2VuZGFudHM/OiBib29sZWFuOyByZWFkPzogdW5kZWZpbmVkfSxcbik6IFNpZ25hbDxSZWFkb25seUFycmF5PExvY2F0b3JUPj47XG5leHBvcnQgZnVuY3Rpb24gY29udGVudENoaWxkcmVuPExvY2F0b3JULCBSZWFkVD4oXG4gIGxvY2F0b3I6IFByb3ZpZGVyVG9rZW48TG9jYXRvclQ+IHwgc3RyaW5nLFxuICBvcHRzOiB7ZGVzY2VuZGFudHM/OiBib29sZWFuOyByZWFkOiBQcm92aWRlclRva2VuPFJlYWRUPn0sXG4pOiBTaWduYWw8UmVhZG9ubHlBcnJheTxSZWFkVD4+O1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGEgY29udGVudCBjaGlsZHJlbiBxdWVyeS5cbiAqXG4gKiBRdWVyeSByZXN1bHRzIGFyZSByZXByZXNlbnRlZCBhcyBhIHNpZ25hbCBvZiBhIHJlYWQtb25seSBjb2xsZWN0aW9uIGNvbnRhaW5pbmcgYWxsIG1hdGNoZWRcbiAqIGVsZW1lbnRzLlxuICpcbiAqIEB1c2FnZU5vdGVzXG4gKiBDcmVhdGUgYSBjaGlsZHJlbiBxdWVyeSBpbiB5b3VyIGNvbXBvbmVudCBieSBkZWNsYXJpbmcgYVxuICogY2xhc3MgZmllbGQgYW5kIGluaXRpYWxpemluZyBpdCB3aXRoIHRoZSBgY29udGVudENoaWxkcmVuKClgIGZ1bmN0aW9uLlxuICpcbiAqIGBgYHRzXG4gKiBAQ29tcG9uZW50KHsuLi59KVxuICogZXhwb3J0IGNsYXNzIFRlc3RDb21wb25lbnQge1xuICogICBoZWFkZXJFbCA9IGNvbnRlbnRDaGlsZHJlbjxFbGVtZW50UmVmPignaCcpOyAgIC8vIFNpZ25hbDxSZWFkb25seUFycmF5PEVsZW1lbnRSZWY+PlxuICogfVxuICogYGBgXG4gKlxuICogQGluaXRpYWxpemVyQXBpRnVuY3Rpb25cbiAqIEBkZXZlbG9wZXJQcmV2aWV3XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb250ZW50Q2hpbGRyZW48TG9jYXRvclQsIFJlYWRUPihcbiAgbG9jYXRvcjogUHJvdmlkZXJUb2tlbjxMb2NhdG9yVD4gfCBzdHJpbmcsXG4gIG9wdHM/OiB7ZGVzY2VuZGFudHM/OiBib29sZWFuOyByZWFkPzogUHJvdmlkZXJUb2tlbjxSZWFkVD59LFxuKTogU2lnbmFsPFJlYWRvbmx5QXJyYXk8UmVhZFQ+PiB7XG4gIHJldHVybiBjcmVhdGVNdWx0aVJlc3VsdFF1ZXJ5U2lnbmFsRm48UmVhZFQ+KCk7XG59XG4iXX0=