UNPKG

@akaustav/ngx-scroll-to

Version:

A simple Angular 12 plugin enabling you to smooth scroll to any element on your page and enhance scroll-based features in your app. This is a fork from @nicky-lenaers/ngx-scroll-to that adds support for Angular 12.

123 lines 13.3 kB
import { ElementRef } from '@angular/core'; /** Default values for Component Input */ export const DEFAULTS = { target: null, action: 'click', duration: 650, easing: 'easeInOutQuad', offset: 0, offsetMap: new Map() }; /** Easing Colleciton */ export const EASING = { easeInQuad: (time) => { return time * time; }, easeOutQuad: (time) => { return time * (2 - time); }, easeInOutQuad: (time) => { return time < 0.5 ? 2 * time * time : -1 + (4 - 2 * time) * time; }, easeInCubic: (time) => { return time * time * time; }, easeOutCubic: (time) => { return (--time) * time * time + 1; }, easeInOutCubic: (time) => { return time < 0.5 ? 4 * time * time * time : (time - 1) * (2 * time - 2) * (2 * time - 2) + 1; }, easeInQuart: (time) => { return time * time * time * time; }, easeOutQuart: (time) => { return 1 - (--time) * time * time * time; }, easeInOutQuart: (time) => { return time < 0.5 ? 8 * time * time * time * time : 1 - 8 * (--time) * time * time * time; }, easeInQuint: (time) => { return time * time * time * time * time; }, easeOutQuint: (time) => { return 1 + (--time) * time * time * time * time; }, easeInOutQuint: (time) => { return time < 0.5 ? 16 * time * time * time * time * time : 1 + 16 * (--time) * time * time * time * time; }, easeOutElastic: (time) => { return Math.pow(2, -10 * time) * Math.sin((time - 1 / 4) * (2 * Math.PI) / 1) + 1; } }; /** * Set of allowed events as triggers * for the Animation to start. */ export const EVENTS = [ 'click', 'mouseenter', 'mouseover', 'mousedown', 'mouseup', 'dblclick', 'contextmenu', 'wheel', 'mouseleave', 'mouseout' ]; /** * Strip hash (#) from value. * * @param value The given string value * @returns The stripped string value */ export function stripHash(value) { return value.substring(0, 1) === '#' ? value.substring(1) : value; } /** * Test if a given value is a string. * * @param value The given value * @returns Whether the given value is a string */ export function isString(value) { return typeof value === 'string' || value instanceof String; } /** * Test if a given Element is the Window. * * @param container The given Element * @returns Whether the given Element is Window */ export function isWindow(container) { return container === window; } /** * Test if a given value is of type ElementRef. * * @param value The given value * @returns Whether the given value is a number */ export function isElementRef(value) { return value instanceof ElementRef; } /** * Whether or not the given value is a Native Element. * * @param value The given value * @returns Whether or not the value is a Native Element */ export function isNativeElement(value) { return value instanceof HTMLElement; } /** * Test if a given value is type number. * * @param value The given value * @returns Whether the given value is a number */ export function isNumber(value) { return !isNaN(parseFloat(value)) && isFinite(value); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLXRvLWhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2Nyb2xsLXRvL3NyYy9saWIvc2Nyb2xsLXRvLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUszQyx5Q0FBeUM7QUFDekMsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFpQztJQUNwRCxNQUFNLEVBQUUsSUFBSTtJQUNaLE1BQU0sRUFBRSxPQUFPO0lBQ2YsUUFBUSxFQUFFLEdBQUc7SUFDYixNQUFNLEVBQUUsZUFBZTtJQUN2QixNQUFNLEVBQUUsQ0FBQztJQUNULFNBQVMsRUFBRSxJQUFJLEdBQUcsRUFBRTtDQUNyQixDQUFDO0FBRUYsd0JBQXdCO0FBQ3hCLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBc0M7SUFDdkQsVUFBVSxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7UUFDM0IsT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxXQUFXLEVBQUUsQ0FBQyxJQUFZLEVBQUUsRUFBRTtRQUM1QixPQUFPLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBQ0QsYUFBYSxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7UUFDOUIsT0FBTyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNuRSxDQUFDO0lBQ0QsV0FBVyxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7UUFDNUIsT0FBTyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztJQUM1QixDQUFDO0lBQ0QsWUFBWSxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7UUFDN0IsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELGNBQWMsRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFO1FBQy9CLE9BQU8sSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBQ0QsV0FBVyxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7UUFDNUIsT0FBTyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkMsQ0FBQztJQUNELFlBQVksRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFO1FBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztJQUMzQyxDQUFDO0lBQ0QsY0FBYyxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7UUFDL0IsT0FBTyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztJQUM1RixDQUFDO0lBQ0QsV0FBVyxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7UUFDNUIsT0FBTyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQzFDLENBQUM7SUFDRCxZQUFZLEVBQUUsQ0FBQyxJQUFZLEVBQUUsRUFBRTtRQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2xELENBQUM7SUFDRCxjQUFjLEVBQUUsQ0FBQyxJQUFZLEVBQUUsRUFBRTtRQUMvQixPQUFPLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7SUFDNUcsQ0FBQztJQUNELGNBQWMsRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFO1FBQy9CLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRixDQUFDO0NBQ0YsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBYTtJQUM5QixPQUFPO0lBQ1AsWUFBWTtJQUNaLFdBQVc7SUFDWCxXQUFXO0lBQ1gsU0FBUztJQUNULFVBQVU7SUFDVixhQUFhO0lBQ2IsT0FBTztJQUNQLFlBQVk7SUFDWixVQUFVO0NBQ1gsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxLQUFhO0lBQ3JDLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDcEUsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxLQUFVO0lBQ2pDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssWUFBWSxNQUFNLENBQUM7QUFDOUQsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxTQUFjO0lBQ3JDLE9BQU8sU0FBUyxLQUFLLE1BQU0sQ0FBQztBQUM5QixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQVU7SUFDckMsT0FBTyxLQUFLLFlBQVksVUFBVSxDQUFDO0FBQ3JDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsS0FBVTtJQUN4QyxPQUFPLEtBQUssWUFBWSxXQUFXLENBQUM7QUFDdEMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxLQUFVO0lBQ2pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBTY3JvbGxUb0FuaW1hdGlvbkVhc2luZ0NvbGxlY3Rpb24gfSBmcm9tICcuL3Njcm9sbC10by1lYXNpbmcuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgU2Nyb2xsVG9EZWZhdWx0Q29uZmlnT3B0aW9ucyB9IGZyb20gJy4vc2Nyb2xsLXRvLWNvbmZpZy5pbnRlcmZhY2UnO1xyXG5cclxuLyoqIERlZmF1bHQgdmFsdWVzIGZvciBDb21wb25lbnQgSW5wdXQgKi9cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRTOiBTY3JvbGxUb0RlZmF1bHRDb25maWdPcHRpb25zID0ge1xyXG4gIHRhcmdldDogbnVsbCxcclxuICBhY3Rpb246ICdjbGljaycsXHJcbiAgZHVyYXRpb246IDY1MCxcclxuICBlYXNpbmc6ICdlYXNlSW5PdXRRdWFkJyxcclxuICBvZmZzZXQ6IDAsXHJcbiAgb2Zmc2V0TWFwOiBuZXcgTWFwKClcclxufTtcclxuXHJcbi8qKiBFYXNpbmcgQ29sbGVjaXRvbiAqL1xyXG5leHBvcnQgY29uc3QgRUFTSU5HOiBTY3JvbGxUb0FuaW1hdGlvbkVhc2luZ0NvbGxlY3Rpb24gPSB7XHJcbiAgZWFzZUluUXVhZDogKHRpbWU6IG51bWJlcikgPT4ge1xyXG4gICAgcmV0dXJuIHRpbWUgKiB0aW1lO1xyXG4gIH0sXHJcbiAgZWFzZU91dFF1YWQ6ICh0aW1lOiBudW1iZXIpID0+IHtcclxuICAgIHJldHVybiB0aW1lICogKDIgLSB0aW1lKTtcclxuICB9LFxyXG4gIGVhc2VJbk91dFF1YWQ6ICh0aW1lOiBudW1iZXIpID0+IHtcclxuICAgIHJldHVybiB0aW1lIDwgMC41ID8gMiAqIHRpbWUgKiB0aW1lIDogLTEgKyAoNCAtIDIgKiB0aW1lKSAqIHRpbWU7XHJcbiAgfSxcclxuICBlYXNlSW5DdWJpYzogKHRpbWU6IG51bWJlcikgPT4ge1xyXG4gICAgcmV0dXJuIHRpbWUgKiB0aW1lICogdGltZTtcclxuICB9LFxyXG4gIGVhc2VPdXRDdWJpYzogKHRpbWU6IG51bWJlcikgPT4ge1xyXG4gICAgcmV0dXJuICgtLXRpbWUpICogdGltZSAqIHRpbWUgKyAxO1xyXG4gIH0sXHJcbiAgZWFzZUluT3V0Q3ViaWM6ICh0aW1lOiBudW1iZXIpID0+IHtcclxuICAgIHJldHVybiB0aW1lIDwgMC41ID8gNCAqIHRpbWUgKiB0aW1lICogdGltZSA6ICh0aW1lIC0gMSkgKiAoMiAqIHRpbWUgLSAyKSAqICgyICogdGltZSAtIDIpICsgMTtcclxuICB9LFxyXG4gIGVhc2VJblF1YXJ0OiAodGltZTogbnVtYmVyKSA9PiB7XHJcbiAgICByZXR1cm4gdGltZSAqIHRpbWUgKiB0aW1lICogdGltZTtcclxuICB9LFxyXG4gIGVhc2VPdXRRdWFydDogKHRpbWU6IG51bWJlcikgPT4ge1xyXG4gICAgcmV0dXJuIDEgLSAoLS10aW1lKSAqIHRpbWUgKiB0aW1lICogdGltZTtcclxuICB9LFxyXG4gIGVhc2VJbk91dFF1YXJ0OiAodGltZTogbnVtYmVyKSA9PiB7XHJcbiAgICByZXR1cm4gdGltZSA8IDAuNSA/IDggKiB0aW1lICogdGltZSAqIHRpbWUgKiB0aW1lIDogMSAtIDggKiAoLS10aW1lKSAqIHRpbWUgKiB0aW1lICogdGltZTtcclxuICB9LFxyXG4gIGVhc2VJblF1aW50OiAodGltZTogbnVtYmVyKSA9PiB7XHJcbiAgICByZXR1cm4gdGltZSAqIHRpbWUgKiB0aW1lICogdGltZSAqIHRpbWU7XHJcbiAgfSxcclxuICBlYXNlT3V0UXVpbnQ6ICh0aW1lOiBudW1iZXIpID0+IHtcclxuICAgIHJldHVybiAxICsgKC0tdGltZSkgKiB0aW1lICogdGltZSAqIHRpbWUgKiB0aW1lO1xyXG4gIH0sXHJcbiAgZWFzZUluT3V0UXVpbnQ6ICh0aW1lOiBudW1iZXIpID0+IHtcclxuICAgIHJldHVybiB0aW1lIDwgMC41ID8gMTYgKiB0aW1lICogdGltZSAqIHRpbWUgKiB0aW1lICogdGltZSA6IDEgKyAxNiAqICgtLXRpbWUpICogdGltZSAqIHRpbWUgKiB0aW1lICogdGltZTtcclxuICB9LFxyXG4gIGVhc2VPdXRFbGFzdGljOiAodGltZTogbnVtYmVyKSA9PiB7XHJcbiAgICByZXR1cm4gTWF0aC5wb3coMiwgLTEwICogdGltZSkgKiBNYXRoLnNpbigodGltZSAtIDEgLyA0KSAqICgyICogTWF0aC5QSSkgLyAxKSArIDE7XHJcbiAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldCBvZiBhbGxvd2VkIGV2ZW50cyBhcyB0cmlnZ2Vyc1xyXG4gKiBmb3IgdGhlIEFuaW1hdGlvbiB0byBzdGFydC5cclxuICovXHJcbmV4cG9ydCBjb25zdCBFVkVOVFM6IHN0cmluZ1tdID0gW1xyXG4gICdjbGljaycsXHJcbiAgJ21vdXNlZW50ZXInLFxyXG4gICdtb3VzZW92ZXInLFxyXG4gICdtb3VzZWRvd24nLFxyXG4gICdtb3VzZXVwJyxcclxuICAnZGJsY2xpY2snLFxyXG4gICdjb250ZXh0bWVudScsXHJcbiAgJ3doZWVsJyxcclxuICAnbW91c2VsZWF2ZScsXHJcbiAgJ21vdXNlb3V0J1xyXG5dO1xyXG5cclxuLyoqXHJcbiAqIFN0cmlwIGhhc2ggKCMpIGZyb20gdmFsdWUuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSBcdFx0XHRcdFRoZSBnaXZlbiBzdHJpbmcgdmFsdWVcclxuICogQHJldHVybnMgXHRcdFx0XHRcdFRoZSBzdHJpcHBlZCBzdHJpbmcgdmFsdWVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzdHJpcEhhc2godmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZygwLCAxKSA9PT0gJyMnID8gdmFsdWUuc3Vic3RyaW5nKDEpIDogdmFsdWU7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUZXN0IGlmIGEgZ2l2ZW4gdmFsdWUgaXMgYSBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSBcdFx0XHRcdFx0VGhlIGdpdmVuIHZhbHVlXHJcbiAqIEByZXR1cm5zIFx0XHRcdFx0XHRcdFdoZXRoZXIgdGhlIGdpdmVuIHZhbHVlIGlzIGEgc3RyaW5nXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmcodmFsdWU6IGFueSk6IHZhbHVlIGlzIHN0cmluZyB7XHJcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUZXN0IGlmIGEgZ2l2ZW4gRWxlbWVudCBpcyB0aGUgV2luZG93LlxyXG4gKlxyXG4gKiBAcGFyYW0gY29udGFpbmVyIFx0XHRcdFx0VGhlIGdpdmVuIEVsZW1lbnRcclxuICogQHJldHVybnMgXHRcdFx0XHRcdFx0V2hldGhlciB0aGUgZ2l2ZW4gRWxlbWVudCBpcyBXaW5kb3dcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1dpbmRvdyhjb250YWluZXI6IGFueSk6IGNvbnRhaW5lciBpcyBXaW5kb3cge1xyXG4gIHJldHVybiBjb250YWluZXIgPT09IHdpbmRvdztcclxufVxyXG5cclxuLyoqXHJcbiAqIFRlc3QgaWYgYSBnaXZlbiB2YWx1ZSBpcyBvZiB0eXBlIEVsZW1lbnRSZWYuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSBcdFx0XHRcdFx0VGhlIGdpdmVuIHZhbHVlXHJcbiAqIEByZXR1cm5zICAgICAgICAgICAgICAgV2hldGhlciB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBudW1iZXJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0VsZW1lbnRSZWYodmFsdWU6IGFueSk6IHZhbHVlIGlzIEVsZW1lbnRSZWYge1xyXG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnRSZWY7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBOYXRpdmUgRWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHZhbHVlICAgICAgICAgICBUaGUgZ2l2ZW4gdmFsdWVcclxuICogQHJldHVybnMgICAgICAgICAgICAgICBXaGV0aGVyIG9yIG5vdCB0aGUgdmFsdWUgaXMgYSBOYXRpdmUgRWxlbWVudFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzTmF0aXZlRWxlbWVudCh2YWx1ZTogYW55KTogdmFsdWUgaXMgSFRNTEVsZW1lbnQge1xyXG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xyXG59XHJcblxyXG4vKipcclxuICogVGVzdCBpZiBhIGdpdmVuIHZhbHVlIGlzIHR5cGUgbnVtYmVyLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgXHRcdFx0XHRcdFRoZSBnaXZlbiB2YWx1ZVxyXG4gKiBAcmV0dXJucyBcdFx0XHRcdFx0XHRXaGV0aGVyIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIG51bWJlclxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBudW1iZXIge1xyXG4gIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpICYmIGlzRmluaXRlKHZhbHVlKTtcclxufVxyXG4iXX0=