| /** |
| * @fileoverview added by tsickle |
| * Generated from: directives/file-drop.directive.ts |
| * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc |
| */ |
| import { Directive, Input, Output, EventEmitter } from '@angular/core'; |
| import { HostListener, HostBinding, ElementRef, Renderer2 } from '@angular/core'; |
| import { coerceBooleanProperty } from '@angular/cdk/coercion'; |
| import { mixinDisabled } from '@covalent/core/common'; |
| export class TdFileDropBase { |
| } |
| /* tslint:disable-next-line */ |
| /** @type {?} */ |
| export const _TdFileDropMixinBase = mixinDisabled(TdFileDropBase); |
| export class TdFileDropDirective extends _TdFileDropMixinBase { |
| /** |
| * @param {?} _renderer |
| * @param {?} _element |
| */ |
| constructor(_renderer, _element) { |
| super(); |
| this._renderer = _renderer; |
| this._element = _element; |
| this._multiple = false; |
| /** |
| * fileDrop?: function |
| * Event emitted when a file or files are dropped in host element after being validated. |
| * Emits a [FileList | File] object. |
| */ |
| this.fileDrop = new EventEmitter(); |
| } |
| /** |
| * multiple?: boolean |
| * Sets whether multiple files can be dropped at once in host element, or just a single file. |
| * Can also be 'multiple' native attribute. |
| * @param {?} multiple |
| * @return {?} |
| */ |
| set multiple(multiple) { |
| this._multiple = coerceBooleanProperty(multiple); |
| } |
| /** |
| * Binds native 'multiple' attribute if [multiple] property is 'true'. |
| * @return {?} |
| */ |
| get multipleBinding() { |
| return this._multiple ? '' : undefined; |
| } |
| /** |
| * Binds native 'disabled' attribute if [disabled] property is 'true'. |
| * @return {?} |
| */ |
| get disabledBinding() { |
| return this.disabled ? '' : undefined; |
| } |
| /** |
| * Listens to 'drop' host event to get validated transfer items. |
| * Emits the 'fileDrop' event with a [FileList] or [File] depending if 'multiple' attr exists in host. |
| * Stops event propagation and default action from browser for 'drop' event. |
| * @param {?} event |
| * @return {?} |
| */ |
| onDrop(event) { |
| if (!this.disabled) { |
| /** @type {?} */ |
| const transfer = ((/** @type {?} */ (event))).dataTransfer; |
| /** @type {?} */ |
| const files = transfer.files; |
| if (files.length) { |
| /** @type {?} */ |
| const value = this._multiple ? (files.length > 1 ? files : files[0]) : files[0]; |
| this.fileDrop.emit(value); |
| } |
| } |
| this._renderer.removeClass(this._element.nativeElement, 'drop-zone'); |
| this._stopEvent(event); |
| } |
| /** |
| * Listens to 'dragover' host event to validate transfer items. |
| * Checks if 'multiple' attr exists in host to allow multiple file drops. |
| * Stops event propagation and default action from browser for 'dragover' event. |
| * @param {?} event |
| * @return {?} |
| */ |
| onDragOver(event) { |
| /** @type {?} */ |
| const transfer = ((/** @type {?} */ (event))).dataTransfer; |
| transfer.dropEffect = this._typeCheck(transfer.types); |
| if (this.disabled || |
| (!this._multiple && ((transfer.items && transfer.items.length > 1) || ((/** @type {?} */ (transfer))).mozItemCount > 1))) { |
| transfer.dropEffect = 'none'; |
| } |
| else { |
| transfer.dropEffect = 'copy'; |
| } |
| this._stopEvent(event); |
| } |
| /** |
| * Listens to 'dragenter' host event to add animation class 'drop-zone' which can be overriden in host. |
| * Stops event propagation and default action from browser for 'dragenter' event. |
| * @param {?} event |
| * @return {?} |
| */ |
| onDragEnter(event) { |
| if (!this.disabled) { |
| this._renderer.addClass(this._element.nativeElement, 'drop-zone'); |
| } |
| this._stopEvent(event); |
| } |
| /** |
| * Listens to 'dragleave' host event to remove animation class 'drop-zone'. |
| * Stops event propagation and default action from browser for 'dragleave' event. |
| * @param {?} event |
| * @return {?} |
| */ |
| onDragLeave(event) { |
| this._renderer.removeClass(this._element.nativeElement, 'drop-zone'); |
| this._stopEvent(event); |
| } |
| /** |
| * Validates if the transfer item types are 'Files'. |
| * @private |
| * @param {?} types |
| * @return {?} |
| */ |
| _typeCheck(types) { |
| /** @type {?} */ |
| let dropEffect = 'none'; |
| if (types && |
| ((((/** @type {?} */ (types))).contains && ((/** @type {?} */ (types))).contains('Files')) || |
| (((/** @type {?} */ (types))).indexOf && ((/** @type {?} */ (types))).indexOf('Files') !== -1))) { |
| dropEffect = 'copy'; |
| } |
| return dropEffect; |
| } |
| /** |
| * @private |
| * @param {?} event |
| * @return {?} |
| */ |
| _stopEvent(event) { |
| event.preventDefault(); |
| event.stopPropagation(); |
| } |
| } |
| TdFileDropDirective.decorators = [ |
| { type: Directive, args: [{ |
| selector: '[tdFileDrop]', |
| inputs: ['disabled'], |
| },] } |
| ]; |
| /** @nocollapse */ |
| TdFileDropDirective.ctorParameters = () => [ |
| { type: Renderer2 }, |
| { type: ElementRef } |
| ]; |
| TdFileDropDirective.propDecorators = { |
| multiple: [{ type: Input, args: ['multiple',] }], |
| fileDrop: [{ type: Output }], |
| multipleBinding: [{ type: HostBinding, args: ['attr.multiple',] }], |
| disabledBinding: [{ type: HostBinding, args: ['attr.disabled',] }], |
| onDrop: [{ type: HostListener, args: ['drop', ['$event'],] }], |
| onDragOver: [{ type: HostListener, args: ['dragover', ['$event'],] }], |
| onDragEnter: [{ type: HostListener, args: ['dragenter', ['$event'],] }], |
| onDragLeave: [{ type: HostListener, args: ['dragleave', ['$event'],] }] |
| }; |
| if (false) { |
| /** |
| * @type {?} |
| * @private |
| */ |
| TdFileDropDirective.prototype._multiple; |
| /** |
| * fileDrop?: function |
| * Event emitted when a file or files are dropped in host element after being validated. |
| * Emits a [FileList | File] object. |
| * @type {?} |
| */ |
| TdFileDropDirective.prototype.fileDrop; |
| /** |
| * @type {?} |
| * @private |
| */ |
| TdFileDropDirective.prototype._renderer; |
| /** |
| * @type {?} |
| * @private |
| */ |
| TdFileDropDirective.prototype._element; |
| } |
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1kcm9wLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi9zcmMvcGxhdGZvcm0vY29yZS9maWxlLyIsInNvdXJjZXMiOlsiZGlyZWN0aXZlcy9maWxlLWRyb3AuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTlELE9BQU8sRUFBZSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVuRSxNQUFNLE9BQU8sY0FBYztDQUFHOzs7QUFHOUIsTUFBTSxPQUFPLG9CQUFvQixHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUM7QUFNakUsTUFBTSxPQUFPLG1CQUFvQixTQUFRLG9CQUFvQjs7Ozs7SUFvQzNELFlBQW9CLFNBQW9CLEVBQVUsUUFBb0I7UUFDcEUsS0FBSyxFQUFFLENBQUM7UUFEVSxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBWTtRQW5DOUQsY0FBUyxHQUFZLEtBQUssQ0FBQzs7Ozs7O1FBaUJ6QixhQUFRLEdBQWtDLElBQUksWUFBWSxFQUFtQixDQUFDO0lBb0J4RixDQUFDOzs7Ozs7OztJQTlCRCxJQUNJLFFBQVEsQ0FBQyxRQUFpQjtRQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25ELENBQUM7Ozs7O0lBWUQsSUFDSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDekMsQ0FB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QUFDLEVBQ2pFO1lBQ0EsVUFBVSxHQUFHLE1BQU0sQ0FBQztTQUNyQjtRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7Ozs7OztJQUVPLFVBQVUsQ0FBQyxLQUFZO1FBQzdCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDMUIsQ0FBQzs7O1lBNUhGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsY0FBYztnQkFDeEIsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDO2FBQ3JCOzs7O1lBYitDLFNBQVM7WUFBckIsVUFBVTs7O3VCQXNCM0MsS0FBSyxTQUFDLFVBQVU7dUJBVWhCLE1BQU07OEJBS04sV0FBVyxTQUFDLGVBQWU7OEJBUTNCLFdBQVcsU0FBQyxlQUFlO3FCQWMzQixZQUFZLFNBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDO3lCQW1CL0IsWUFBWSxTQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQzswQkFtQm5DLFlBQVksU0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7MEJBWXBDLFlBQVksU0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7SUE5RnJDLHdDQUFtQzs7Ozs7OztJQWlCbkMsdUNBQXdGOzs7OztJQWtCNUUsd0NBQTRCOzs7OztJQUFFLHVDQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIb3N0TGlzdGVuZXIsIEhvc3RCaW5kaW5nLCBFbGVtZW50UmVmLCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5cbmltcG9ydCB7IElDYW5EaXNhYmxlLCBtaXhpbkRpc2FibGVkIH0gZnJvbSAnQGNvdmFsZW50L2NvcmUvY29tbW9uJztcblxuZXhwb3J0IGNsYXNzIFRkRmlsZURyb3BCYXNlIHt9XG5cbi8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSAqL1xuZXhwb3J0IGNvbnN0IF9UZEZpbGVEcm9wTWl4aW5CYXNlID0gbWl4aW5EaXNhYmxlZChUZEZpbGVEcm9wQmFzZSk7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t0ZEZpbGVEcm9wXScsXG4gIGlucHV0czogWydkaXNhYmxlZCddLFxufSlcbmV4cG9ydCBjbGFzcyBUZEZpbGVEcm9wRGlyZWN0aXZlIGV4dGVuZHMgX1RkRmlsZURyb3BNaXhpbkJhc2UgaW1wbGVtZW50cyBJQ2FuRGlzYWJsZSB7XG4gIHByaXZhdGUgX211bHRpcGxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIG11bHRpcGxlPzogYm9vbGVhblxuICAgKiBTZXRzIHdoZXRoZXIgbXVsdGlwbGUgZmlsZXMgY2FuIGJlIGRyb3BwZWQgYXQgb25jZSBpbiBob3N0IGVsZW1lbnQsIG9yIGp1c3QgYSBzaW5nbGUgZmlsZS5cbiAgICogQ2FuIGFsc28gYmUgJ211bHRpcGxlJyBuYXRpdmUgYXR0cmlidXRlLlxuICAgKi9cbiAgQElucHV0KCdtdWx0aXBsZScpXG4gIHNldCBtdWx0aXBsZShtdWx0aXBsZTogYm9vbGVhbikge1xuICAgIHRoaXMuX211bHRpcGxlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KG11bHRpcGxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBmaWxlRHJvcD86IGZ1bmN0aW9uXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhIGZpbGUgb3IgZmlsZXMgYXJlIGRyb3BwZWQgaW4gaG9zdCBlbGVtZW50IGFmdGVyIGJlaW5nIHZhbGlkYXRlZC5cbiAgICogRW1pdHMgYSBbRmlsZUxpc3QgfCBGaWxlXSBvYmplY3QuXG4gICAqL1xuICBAT3V0cHV0KCkgZmlsZURyb3A6IEV2ZW50RW1pdHRlcjxGaWxlTGlzdCB8IEZpbGU+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlTGlzdCB8IEZpbGU+KCk7XG5cbiAgLyoqXG4gICAqIEJpbmRzIG5hdGl2ZSAnbXVsdGlwbGUnIGF0dHJpYnV0ZSBpZiBbbXVsdGlwbGVdIHByb3BlcnR5IGlzICd0cnVlJy5cbiAgICovXG4gIEBIb3N0QmluZGluZygnYXR0ci5tdWx0aXBsZScpXG4gIGdldCBtdWx0aXBsZUJpbmRpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbXVsdGlwbGUgPyAnJyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBuYXRpdmUgJ2Rpc2FibGVkJyBhdHRyaWJ1dGUgaWYgW2Rpc2FibGVkXSBwcm9wZXJ0eSBpcyAndHJ1ZScuXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGlzYWJsZWQnKVxuICBnZXQgZGlzYWJsZWRCaW5kaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyAnJyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgX2VsZW1lbnQ6IEVsZW1lbnRSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbnMgdG8gJ2Ryb3AnIGhvc3QgZXZlbnQgdG8gZ2V0IHZhbGlkYXRlZCB0cmFuc2ZlciBpdGVtcy5cbiAgICogRW1pdHMgdGhlICdmaWxlRHJvcCcgZXZlbnQgd2l0aCBhIFtGaWxlTGlzdF0gb3IgW0ZpbGVdIGRlcGVuZGluZyBpZiAnbXVsdGlwbGUnIGF0dHIgZXhpc3RzIGluIGhvc3QuXG4gICAqIFN0b3BzIGV2ZW50IHByb3BhZ2F0aW9uIGFuZCBkZWZhdWx0IGFjdGlvbiBmcm9tIGJyb3dzZXIgZm9yICdkcm9wJyBldmVudC5cbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2Ryb3AnLCBbJyRldmVudCddKVxuICBvbkRyb3AoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICBjb25zdCB0cmFuc2ZlcjogRGF0YVRyYW5zZmVyID0gKDxEcmFnRXZlbnQ+ZXZlbnQpLmRhdGFUcmFuc2ZlcjtcbiAgICAgIGNvbnN0IGZpbGVzOiBGaWxlTGlzdCA9IHRyYW5zZmVyLmZpbGVzO1xuICAgICAgaWYgKGZpbGVzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCB2YWx1ZTogRmlsZUxpc3QgfCBGaWxlID0gdGhpcy5fbXVsdGlwbGUgPyAoZmlsZXMubGVuZ3RoID4gMSA/IGZpbGVzIDogZmlsZXNbMF0pIDogZmlsZXNbMF07XG4gICAgICAgIHRoaXMuZmlsZURyb3AuZW1pdCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3JlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2Ryb3Atem9uZScpO1xuICAgIHRoaXMuX3N0b3BFdmVudChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVucyB0byAnZHJhZ292ZXInIGhvc3QgZXZlbnQgdG8gdmFsaWRhdGUgdHJhbnNmZXIgaXRlbXMuXG4gICAqIENoZWNrcyBpZiAnbXVsdGlwbGUnIGF0dHIgZXhpc3RzIGluIGhvc3QgdG8gYWxsb3cgbXVsdGlwbGUgZmlsZSBkcm9wcy5cbiAgICogU3RvcHMgZXZlbnQgcHJvcGFnYXRpb24gYW5kIGRlZmF1bHQgYWN0aW9uIGZyb20gYnJvd3NlciBmb3IgJ2RyYWdvdmVyJyBldmVudC5cbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2RyYWdvdmVyJywgWyckZXZlbnQnXSlcbiAgb25EcmFnT3ZlcihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0cmFuc2ZlcjogRGF0YVRyYW5zZmVyID0gKDxEcmFnRXZlbnQ+ZXZlbnQpLmRhdGFUcmFuc2ZlcjtcbiAgICB0cmFuc2Zlci5kcm9wRWZmZWN0ID0gdGhpcy5fdHlwZUNoZWNrKHRyYW5zZmVyLnR5cGVzKTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmRpc2FibGVkIHx8XG4gICAgICAoIXRoaXMuX211bHRpcGxlICYmICgodHJhbnNmZXIuaXRlbXMgJiYgdHJhbnNmZXIuaXRlbXMubGVuZ3RoID4gMSkgfHwgKDxhbnk+dHJhbnNmZXIpLm1vekl0ZW1Db3VudCA+IDEpKVxuICAgICkge1xuICAgICAgdHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdub25lJztcbiAgICB9IGVsc2Uge1xuICAgICAgdHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdjb3B5JztcbiAgICB9XG4gICAgdGhpcy5fc3RvcEV2ZW50KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW5zIHRvICdkcmFnZW50ZXInIGhvc3QgZXZlbnQgdG8gYWRkIGFuaW1hdGlvbiBjbGFzcyAnZHJvcC16b25lJyB3aGljaCBjYW4gYmUgb3ZlcnJpZGVuIGluIGhvc3QuXG4gICAqIFN0b3BzIGV2ZW50IHByb3BhZ2F0aW9uIGFuZCBkZWZhdWx0IGFjdGlvbiBmcm9tIGJyb3dzZXIgZm9yICdkcmFnZW50ZXInIGV2ZW50LlxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignZHJhZ2VudGVyJywgWyckZXZlbnQnXSlcbiAgb25EcmFnRW50ZXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLl9yZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdkcm9wLXpvbmUnKTtcbiAgICB9XG4gICAgdGhpcy5fc3RvcEV2ZW50KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW5zIHRvICdkcmFnbGVhdmUnIGhvc3QgZXZlbnQgdG8gcmVtb3ZlIGFuaW1hdGlvbiBjbGFzcyAnZHJvcC16b25lJy5cbiAgICogU3RvcHMgZXZlbnQgcHJvcGFnYXRpb24gYW5kIGRlZmF1bHQgYWN0aW9uIGZyb20gYnJvd3NlciBmb3IgJ2RyYWdsZWF2ZScgZXZlbnQuXG4gICAqL1xuICBASG9zdExpc3RlbmVyKCdkcmFnbGVhdmUnLCBbJyRldmVudCddKVxuICBvbkRyYWdMZWF2ZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdkcm9wLXpvbmUnKTtcbiAgICB0aGlzLl9zdG9wRXZlbnQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBpZiB0aGUgdHJhbnNmZXIgaXRlbSB0eXBlcyBhcmUgJ0ZpbGVzJy5cbiAgICovXG4gIHByaXZhdGUgX3R5cGVDaGVjayh0eXBlczogUmVhZG9ubHlBcnJheTxzdHJpbmc+IHwgRE9NU3RyaW5nTGlzdCk6IHN0cmluZyB7XG4gICAgbGV0IGRyb3BFZmZlY3Q6IHN0cmluZyA9ICdub25lJztcbiAgICBpZiAoXG4gICAgICB0eXBlcyAmJlxuICAgICAgKCgoPGFueT50eXBlcykuY29udGFpbnMgJiYgKDxhbnk+dHlwZXMpLmNvbnRhaW5zKCdGaWxlcycpKSB8fFxuICAgICAgICAoKDxhbnk+dHlwZXMpLmluZGV4T2YgJiYgKDxhbnk+dHlwZXMpLmluZGV4T2YoJ0ZpbGVzJykgIT09IC0xKSlcbiAgICApIHtcbiAgICAgIGRyb3BFZmZlY3QgPSAnY29weSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRyb3BFZmZlY3Q7XG4gIH1cblxuICBwcml2YXRlIF9zdG9wRXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxufVxuIl19 |