UNPKG

angular-material-datatransfer-lib

Version:

A HTML5 datatransfer UI for handling upload and download of multiple simultaneous files.

307 lines 24.2 kB
/** * @fileoverview added by tsickle * Generated from: lib/io/datatransfer.io.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { ConfigService } from '../services/config.service'; import { StreamHashContainer } from '../models/hash-container.model'; import { HashTypeImplementation, HashTypeExtensions } from '../enums/hash-type.enum'; import { EncodingTypeImplementation, EncodingTypeExtensions } from '../enums/encoding-type.enum'; /** * @record */ export function IDatatransfer() { } if (false) { /** * @param {?} event * @param {?} callback * @return {?} */ IDatatransfer.prototype.on = function (event, callback) { }; /** * @return {?} */ IDatatransfer.prototype.isWorking = function () { }; /** * @return {?} */ IDatatransfer.prototype.startAll = function () { }; /** * @return {?} */ IDatatransfer.prototype.pauseAll = function () { }; /** * @return {?} */ IDatatransfer.prototype.removeAll = function () { }; /** * @param {?} item * @return {?} */ IDatatransfer.prototype.addItem = function (item) { }; /** * @param {?} item * @return {?} */ IDatatransfer.prototype.removeItem = function (item) { }; /** * @param {?} item * @return {?} */ IDatatransfer.prototype.retryItem = function (item) { }; } /** * @abstract */ export class BaseDatatransfer { /** * @param {?} logger * @param {?} guidUtil * @param {?} cryptoService */ constructor(logger, guidUtil, cryptoService) { this.logger = logger; this.guidUtil = guidUtil; this.cryptoService = cryptoService; this.events = []; this._isWorking = false; } /** * @param {?} event * @param {?} callback * @return {?} */ on(event, callback) { this.events.push(event.toLowerCase(), callback); } /** * @protected * @param {...?} args * @return {?} */ fire(...args) { /** @type {?} */ const event = args[0].toLowerCase(); // Find event listeners, and support pseudo-event `catchAll` for (let i = 0; i <= this.events.length; i += 2) { if (this.events[i] === event) { this.events[i + 1].apply(this, args.slice(1)); } if (this.events[i] === 'catchall') { this.events[i + 1].apply(null, args); } } } /** * @protected * @return {?} */ updateZone() { this.fire('zoneUpdated'); } /** * @protected * @param {?} item * @param {?} status * @param {?=} message * @return {?} */ changeItemStatus(item, status, message) { this.fire('itemStatusChanged', item, status, message); } /** * @protected * @param {?} item * @param {?} progress * @return {?} */ updateItemProgress(item, progress) { this.fire('itemProgressUpdated', item, progress); } /** * @protected * @param {?} transferType * @param {?} progress * @return {?} */ updateOverallProgress(transferType, progress) { this.fire('overallProgressUpdated', transferType, progress); } /** * @protected * @param {?} size * @return {?} */ updateOverallSize(size) { this.fire('overallSizeUpdated', size); } /** * @return {?} */ isWorking() { return this._isWorking; } /** * @param {?} item * @return {?} */ addItem(item) { this.fire('itemAdded', item); } /** * @protected * @return {?} */ generateUniqueIdentifier() { return this.guidUtil.createGuid(); } /** * @protected * @param {?} item * @param {?} file * @param {?} continueCallback * @param {?} cancelCallback * @return {?} */ preprocessHash(item, file, continueCallback, cancelCallback) { /** @type {?} */ const successCallback = (/** * @param {?} container * @return {?} */ function (container) { /** @type {?} */ const that = (/** @type {?} */ (this)); if (container.hashString) { // const seconds = (container.endDate.getTime() - container.startDate.getTime()) / 1000; // console.log('file hashing took ' + seconds + ' seconds'); /** @type {?} */ const xhr = new XMLHttpRequest(); /** @type {?} */ const responseHandler = (/** * @param {?} e * @return {?} */ function (e) { // ignore response if container has been cancelled if (!container.isCancelled()) { if (xhr.status === 200) { item.message = xhr.responseText; cancelCallback(); } else { continueCallback(); } } }); xhr.addEventListener('load', responseHandler, false); xhr.addEventListener('error', responseHandler, false); xhr.addEventListener('timeout', responseHandler, false); /** @type {?} */ let params = []; params = params.concat([ [ConfigService.settings.core.preprocessHashParameterName, container.hashString], [ConfigService.settings.core.preprocessHashFileNameParameterName, item.name] ] .map((/** * @param {?} pair * @return {?} */ function (pair) { return [ pair[0], encodeURIComponent(pair[1]) ].join('='); }))); xhr.open(ConfigService.settings.core.preprocessHashMethod, ConfigService.settings.core.getTarget('preprocessHash', params)); xhr.send(null); } else { continueCallback(); } }).bind(this); /** @type {?} */ const errorCallback = (/** * @param {?} event * @param {?} container * @return {?} */ function (event, container) { console.log(event); continueCallback(); }); if (!item.preprocessContainer.isCancelled() && item.preprocessContainer instanceof StreamHashContainer) { // continue } else { /** @type {?} */ const hashType = HashTypeExtensions.toEnum(HashTypeImplementation.Internal, ConfigService.settings.core.preprocessHashFunctionName); /** @type {?} */ const encodingType = EncodingTypeExtensions.toEnum(EncodingTypeImplementation.Internal, ConfigService.settings.core.preprocessHashEncodingName); /** @type {?} */ const inputEncodingType = EncodingTypeExtensions.toEnum(EncodingTypeImplementation.Internal, ConfigService.settings.core.preprocessHashInputEncodingName); item.preprocessContainer = this.cryptoService.createStreamHashContainer(file, hashType, encodingType, inputEncodingType, successCallback, errorCallback); } // wait for the initial mat-progress-spinner animation to complete setTimeout((/** * @return {?} */ function () { item.preprocessContainer.run(); }), 1000); } } if (false) { /** * @type {?} * @private */ BaseDatatransfer.prototype.events; /** * @type {?} * @protected */ BaseDatatransfer.prototype._isWorking; /** * @type {?} * @protected */ BaseDatatransfer.prototype.logger; /** * @type {?} * @protected */ BaseDatatransfer.prototype.guidUtil; /** * @type {?} * @protected */ BaseDatatransfer.prototype.cryptoService; /** * @abstract * @return {?} */ BaseDatatransfer.prototype.startAll = function () { }; /** * @abstract * @return {?} */ BaseDatatransfer.prototype.pauseAll = function () { }; /** * @abstract * @return {?} */ BaseDatatransfer.prototype.removeAll = function () { }; /** * @abstract * @param {?} item * @return {?} */ BaseDatatransfer.prototype.removeItem = function (item) { }; /** * @abstract * @param {?} item * @return {?} */ BaseDatatransfer.prototype.retryItem = function (item) { }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRyYW5zZmVyLmlvLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1tYXRlcmlhbC1kYXRhdHJhbnNmZXItbGliLyIsInNvdXJjZXMiOlsibGliL2lvL2RhdGF0cmFuc2Zlci5pby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQU0zRCxPQUFPLEVBQXdCLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0YsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7QUFFakcsbUNBU0M7Ozs7Ozs7SUFSRyw0REFBNEM7Ozs7SUFDNUMsb0RBQXFCOzs7O0lBQ3JCLG1EQUFpQjs7OztJQUNqQixtREFBaUI7Ozs7SUFDakIsb0RBQWtCOzs7OztJQUNsQixzREFBdUM7Ozs7O0lBQ3ZDLHlEQUEwQzs7Ozs7SUFDMUMsd0RBQXlDOzs7OztBQUc3QyxNQUFNLE9BQWdCLGdCQUFnQjs7Ozs7O0lBS2xDLFlBQXNCLE1BQXFCLEVBQ3JCLFFBQWtCLEVBQ2xCLGFBQTRCO1FBRjVCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUwxQyxXQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ1YsZUFBVSxHQUFHLEtBQUssQ0FBQztJQUs3QixDQUFDOzs7Ozs7SUFFTSxFQUFFLENBQUMsS0FBYSxFQUFFLFFBQWtCO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNwRCxDQUFDOzs7Ozs7SUFFUyxJQUFJLENBQUMsR0FBRyxJQUFXOztjQUNuQixLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRTtRQUNuQyw0REFBNEQ7UUFDNUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDN0MsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRTtnQkFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDakQ7WUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssVUFBVSxFQUFFO2dCQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ3hDO1NBQ0o7SUFDTCxDQUFDOzs7OztJQUVTLFVBQVU7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM3QixDQUFDOzs7Ozs7OztJQUVTLGdCQUFnQixDQUFDLElBQXVCLEVBQUUsTUFBc0IsRUFBRSxPQUFnQjtRQUN4RixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDMUQsQ0FBQzs7Ozs7OztJQUVTLGtCQUFrQixDQUFDLElBQXVCLEVBQUUsUUFBZ0I7UUFDbEUsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckQsQ0FBQzs7Ozs7OztJQUVTLHFCQUFxQixDQUFDLFlBQTBCLEVBQUUsUUFBZ0I7UUFDeEUsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDaEUsQ0FBQzs7Ozs7O0lBRVMsaUJBQWlCLENBQUMsSUFBWTtRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7Ozs7SUFFTSxTQUFTO1FBQ1osT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7Ozs7O0lBUU0sT0FBTyxDQUFDLElBQXVCO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Ozs7O0lBTVMsd0JBQXdCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QyxDQUFDOzs7Ozs7Ozs7SUFFUyxjQUFjLENBQUMsSUFBdUIsRUFBRSxJQUFVLEVBQUUsZ0JBQTBCLEVBQUUsY0FBd0I7O2NBQ3hHLGVBQWUsR0FBRzs7OztRQUFBLFVBQVMsU0FBK0I7O2tCQUN0RCxJQUFJLEdBQUcsbUJBQUEsSUFBSSxFQUFvQjtZQUNyQyxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUU7Ozs7c0JBSWhCLEdBQUcsR0FBRyxJQUFJLGNBQWMsRUFBRTs7c0JBRTFCLGVBQWU7Ozs7Z0JBQUcsVUFBUyxDQUFDO29CQUM5QixrREFBa0Q7b0JBQ2xELElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEVBQUU7d0JBQzFCLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUU7NEJBQ3BCLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQzs0QkFDaEMsY0FBYyxFQUFFLENBQUM7eUJBQ3BCOzZCQUFNOzRCQUNILGdCQUFnQixFQUFFLENBQUM7eUJBQ3RCO3FCQUNKO2dCQUNMLENBQUMsQ0FBQTtnQkFDRCxHQUFHLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDckQsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3RELEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDOztvQkFFcEQsTUFBTSxHQUFHLEVBQUU7Z0JBQ2YsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQ2xCO29CQUNJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsU0FBUyxDQUFDLFVBQVUsQ0FBQztvQkFDL0UsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDO2lCQUMvRTtxQkFDSSxHQUFHOzs7O2dCQUFDLFVBQVMsSUFBSTtvQkFDZCxPQUFPO3dCQUNILElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3ZDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNoQixDQUFDLEVBQUMsQ0FDVCxDQUFDO2dCQUVGLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQzVILEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFFbEI7aUJBQU07Z0JBQ0gsZ0JBQWdCLEVBQUUsQ0FBQzthQUN0QjtRQUNMLENBQUMsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDOztjQUNOLGFBQWE7Ozs7O1FBQUcsVUFBUyxLQUFVLEVBQUUsU0FBK0I7WUFDdEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQixnQkFBZ0IsRUFBRSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQTtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLG1CQUFtQixZQUFZLG1CQUFtQixFQUFFO1lBQ3BHLFdBQVc7U0FDZDthQUFNOztrQkFDRyxRQUFRLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUN0QyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUM7O2tCQUN0RixZQUFZLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUM5QywwQkFBMEIsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUM7O2tCQUMxRixpQkFBaUIsR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQ25ELDBCQUEwQixDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQztZQUVyRyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsQ0FDbkUsSUFBSSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1NBQ3hGO1FBRUQsa0VBQWtFO1FBQ2xFLFVBQVU7OztRQUFDO1lBQ1AsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ25DLENBQUMsR0FBRSxJQUFJLENBQUMsQ0FBQztJQUNiLENBQUM7Q0FDSjs7Ozs7O0lBdklHLGtDQUFvQjs7Ozs7SUFDcEIsc0NBQTZCOzs7OztJQUVqQixrQ0FBK0I7Ozs7O0lBQy9CLG9DQUE0Qjs7Ozs7SUFDNUIseUNBQXNDOzs7OztJQTRDbEQsc0RBQWlDOzs7OztJQUVqQyxzREFBaUM7Ozs7O0lBRWpDLHVEQUFrQzs7Ozs7O0lBTWxDLDREQUEwRDs7Ozs7O0lBRTFELDJEQUF5RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElEYXRhdHJhbnNmZXJJdGVtIH0gZnJvbSAnLi4vbW9kZWxzL2RhdGF0cmFuc2Zlci1pdGVtLm1vZGVsJztcclxuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR3VpZFV0aWwgfSBmcm9tICcuLi91dGlscy9ndWlkLnV0aWwnO1xyXG5pbXBvcnQgeyBDcnlwdG9TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY3J5cHRvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2ZlclN0YXR1cyB9IGZyb20gJy4uL2VudW1zL3RyYW5zZmVyLXN0YXR1cy5lbnVtJztcclxuaW1wb3J0IHsgVHJhbnNmZXJUeXBlIH0gZnJvbSAnLi4vZW51bXMvdHJhbnNmZXItdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgSVN0cmVhbUhhc2hDb250YWluZXIsIFN0cmVhbUhhc2hDb250YWluZXIgfSBmcm9tICcuLi9tb2RlbHMvaGFzaC1jb250YWluZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBIYXNoVHlwZUltcGxlbWVudGF0aW9uLCBIYXNoVHlwZUV4dGVuc2lvbnMgfSBmcm9tICcuLi9lbnVtcy9oYXNoLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IEVuY29kaW5nVHlwZUltcGxlbWVudGF0aW9uLCBFbmNvZGluZ1R5cGVFeHRlbnNpb25zIH0gZnJvbSAnLi4vZW51bXMvZW5jb2RpbmctdHlwZS5lbnVtJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSURhdGF0cmFuc2ZlciB7XHJcbiAgICBvbihldmVudDogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkO1xyXG4gICAgaXNXb3JraW5nKCk6IGJvb2xlYW47XHJcbiAgICBzdGFydEFsbCgpOiB2b2lkO1xyXG4gICAgcGF1c2VBbGwoKTogdm9pZDtcclxuICAgIHJlbW92ZUFsbCgpOiB2b2lkO1xyXG4gICAgYWRkSXRlbShpdGVtOiBJRGF0YXRyYW5zZmVySXRlbSk6IHZvaWQ7XHJcbiAgICByZW1vdmVJdGVtKGl0ZW06IElEYXRhdHJhbnNmZXJJdGVtKTogdm9pZDtcclxuICAgIHJldHJ5SXRlbShpdGVtOiBJRGF0YXRyYW5zZmVySXRlbSk6IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRGF0YXRyYW5zZmVyIGltcGxlbWVudHMgSURhdGF0cmFuc2ZlciB7XHJcblxyXG4gICAgcHJpdmF0ZSBldmVudHMgPSBbXTtcclxuICAgIHByb3RlY3RlZCBfaXNXb3JraW5nID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGxvZ2dlcjogTG9nZ2VyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBndWlkVXRpbDogR3VpZFV0aWwsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgY3J5cHRvU2VydmljZTogQ3J5cHRvU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbihldmVudDogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmV2ZW50cy5wdXNoKGV2ZW50LnRvTG93ZXJDYXNlKCksIGNhbGxiYWNrKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZmlyZSguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGV2ZW50ID0gYXJnc1swXS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIC8vIEZpbmQgZXZlbnQgbGlzdGVuZXJzLCBhbmQgc3VwcG9ydCBwc2V1ZG8tZXZlbnQgYGNhdGNoQWxsYFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHRoaXMuZXZlbnRzLmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmV2ZW50c1tpXSA9PT0gZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRzW2kgKyAxXS5hcHBseSh0aGlzLCBhcmdzLnNsaWNlKDEpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5ldmVudHNbaV0gPT09ICdjYXRjaGFsbCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRzW2kgKyAxXS5hcHBseShudWxsLCBhcmdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlWm9uZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZpcmUoJ3pvbmVVcGRhdGVkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGNoYW5nZUl0ZW1TdGF0dXMoaXRlbTogSURhdGF0cmFuc2Zlckl0ZW0sIHN0YXR1czogVHJhbnNmZXJTdGF0dXMsIG1lc3NhZ2U/OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmZpcmUoJ2l0ZW1TdGF0dXNDaGFuZ2VkJywgaXRlbSwgc3RhdHVzLCBtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlSXRlbVByb2dyZXNzKGl0ZW06IElEYXRhdHJhbnNmZXJJdGVtLCBwcm9ncmVzczogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdpdGVtUHJvZ3Jlc3NVcGRhdGVkJywgaXRlbSwgcHJvZ3Jlc3MpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB1cGRhdGVPdmVyYWxsUHJvZ3Jlc3ModHJhbnNmZXJUeXBlOiBUcmFuc2ZlclR5cGUsIHByb2dyZXNzOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZpcmUoJ292ZXJhbGxQcm9ncmVzc1VwZGF0ZWQnLCB0cmFuc2ZlclR5cGUsIHByb2dyZXNzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlT3ZlcmFsbFNpemUoc2l6ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdvdmVyYWxsU2l6ZVVwZGF0ZWQnLCBzaXplKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNXb3JraW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc1dvcmtpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFic3RyYWN0IHN0YXJ0QWxsKCk6IHZvaWQ7XHJcblxyXG4gICAgcHVibGljIGFic3RyYWN0IHBhdXNlQWxsKCk6IHZvaWQ7XHJcblxyXG4gICAgcHVibGljIGFic3RyYWN0IHJlbW92ZUFsbCgpOiB2b2lkO1xyXG5cclxuICAgIHB1YmxpYyBhZGRJdGVtKGl0ZW06IElEYXRhdHJhbnNmZXJJdGVtKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdpdGVtQWRkZWQnLCBpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWJzdHJhY3QgcmVtb3ZlSXRlbShpdGVtOiBJRGF0YXRyYW5zZmVySXRlbSk6IHZvaWQ7XHJcblxyXG4gICAgcHVibGljIGFic3RyYWN0IHJldHJ5SXRlbShpdGVtOiBJRGF0YXRyYW5zZmVySXRlbSk6IHZvaWQ7XHJcblxyXG4gICAgcHJvdGVjdGVkIGdlbmVyYXRlVW5pcXVlSWRlbnRpZmllcigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmd1aWRVdGlsLmNyZWF0ZUd1aWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcHJlcHJvY2Vzc0hhc2goaXRlbTogSURhdGF0cmFuc2Zlckl0ZW0sIGZpbGU6IEZpbGUsIGNvbnRpbnVlQ2FsbGJhY2s6IEZ1bmN0aW9uLCBjYW5jZWxDYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzdWNjZXNzQ2FsbGJhY2sgPSBmdW5jdGlvbihjb250YWluZXI6IElTdHJlYW1IYXNoQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRoYXQgPSB0aGlzIGFzIEJhc2VEYXRhdHJhbnNmZXI7XHJcbiAgICAgICAgICAgIGlmIChjb250YWluZXIuaGFzaFN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc3Qgc2Vjb25kcyA9IChjb250YWluZXIuZW5kRGF0ZS5nZXRUaW1lKCkgLSBjb250YWluZXIuc3RhcnREYXRlLmdldFRpbWUoKSkgLyAxMDAwO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2ZpbGUgaGFzaGluZyB0b29rICcgKyBzZWNvbmRzICsgJyBzZWNvbmRzJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VIYW5kbGVyID0gZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSByZXNwb25zZSBpZiBjb250YWluZXIgaGFzIGJlZW4gY2FuY2VsbGVkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250YWluZXIuaXNDYW5jZWxsZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lc3NhZ2UgPSB4aHIucmVzcG9uc2VUZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsQ2FsbGJhY2soKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlQ2FsbGJhY2soKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHJlc3BvbnNlSGFuZGxlciwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgcmVzcG9uc2VIYW5kbGVyLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigndGltZW91dCcsIHJlc3BvbnNlSGFuZGxlciwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBwYXJhbXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5jb25jYXQoXHJcbiAgICAgICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBbQ29uZmlnU2VydmljZS5zZXR0aW5ncy5jb3JlLnByZXByb2Nlc3NIYXNoUGFyYW1ldGVyTmFtZSwgY29udGFpbmVyLmhhc2hTdHJpbmddLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbQ29uZmlnU2VydmljZS5zZXR0aW5ncy5jb3JlLnByZXByb2Nlc3NIYXNoRmlsZU5hbWVQYXJhbWV0ZXJOYW1lLCBpdGVtLm5hbWVdXHJcbiAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uKHBhaXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpclswXSwgZW5jb2RlVVJJQ29tcG9uZW50KHBhaXJbMV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLmpvaW4oJz0nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oQ29uZmlnU2VydmljZS5zZXR0aW5ncy5jb3JlLnByZXByb2Nlc3NIYXNoTWV0aG9kLCBDb25maWdTZXJ2aWNlLnNldHRpbmdzLmNvcmUuZ2V0VGFyZ2V0KCdwcmVwcm9jZXNzSGFzaCcsIHBhcmFtcykpO1xyXG4gICAgICAgICAgICAgICAgeGhyLnNlbmQobnVsbCk7XHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29udGludWVDYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIGNvbnN0IGVycm9yQ2FsbGJhY2sgPSBmdW5jdGlvbihldmVudDogYW55LCBjb250YWluZXI6IElTdHJlYW1IYXNoQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcclxuICAgICAgICAgICAgY29udGludWVDYWxsYmFjaygpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmICghaXRlbS5wcmVwcm9jZXNzQ29udGFpbmVyLmlzQ2FuY2VsbGVkKCkgJiYgaXRlbS5wcmVwcm9jZXNzQ29udGFpbmVyIGluc3RhbmNlb2YgU3RyZWFtSGFzaENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAvLyBjb250aW51ZVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc2hUeXBlID0gSGFzaFR5cGVFeHRlbnNpb25zLnRvRW51bShcclxuICAgICAgICAgICAgICAgIEhhc2hUeXBlSW1wbGVtZW50YXRpb24uSW50ZXJuYWwsIENvbmZpZ1NlcnZpY2Uuc2V0dGluZ3MuY29yZS5wcmVwcm9jZXNzSGFzaEZ1bmN0aW9uTmFtZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuY29kaW5nVHlwZSA9IEVuY29kaW5nVHlwZUV4dGVuc2lvbnMudG9FbnVtKFxyXG4gICAgICAgICAgICAgICAgRW5jb2RpbmdUeXBlSW1wbGVtZW50YXRpb24uSW50ZXJuYWwsIENvbmZpZ1NlcnZpY2Uuc2V0dGluZ3MuY29yZS5wcmVwcm9jZXNzSGFzaEVuY29kaW5nTmFtZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0RW5jb2RpbmdUeXBlID0gRW5jb2RpbmdUeXBlRXh0ZW5zaW9ucy50b0VudW0oXHJcbiAgICAgICAgICAgICAgICBFbmNvZGluZ1R5cGVJbXBsZW1lbnRhdGlvbi5JbnRlcm5hbCwgQ29uZmlnU2VydmljZS5zZXR0aW5ncy5jb3JlLnByZXByb2Nlc3NIYXNoSW5wdXRFbmNvZGluZ05hbWUpO1xyXG5cclxuICAgICAgICAgICAgaXRlbS5wcmVwcm9jZXNzQ29udGFpbmVyID0gdGhpcy5jcnlwdG9TZXJ2aWNlLmNyZWF0ZVN0cmVhbUhhc2hDb250YWluZXIoXHJcbiAgICAgICAgICAgICAgICBmaWxlLCBoYXNoVHlwZSwgZW5jb2RpbmdUeXBlLCBpbnB1dEVuY29kaW5nVHlwZSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHdhaXQgZm9yIHRoZSBpbml0aWFsIG1hdC1wcm9ncmVzcy1zcGlubmVyIGFuaW1hdGlvbiB0byBjb21wbGV0ZVxyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGl0ZW0ucHJlcHJvY2Vzc0NvbnRhaW5lci5ydW4oKTtcclxuICAgICAgICB9LCAxMDAwKTtcclxuICAgIH1cclxufVxyXG4iXX0=