angular-material-datatransfer-lib
Version:
A HTML5 datatransfer UI for handling upload and download of multiple simultaneous files.
294 lines • 22.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/models/app-config.model.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
export class CoreAppConfig {
constructor() {
this.showUploadDropzone = true;
this.uploadBrowseElementId = undefined;
this.uploadDropElementId = undefined;
this.paginationRppOptions = [5, 10, 25];
this.simultaneousDownloads = 2;
this.downloadMethod = 'GET';
this.downloadHeaders = {};
this.downloadWithCredentials = false;
this.downloadXhrTimeout = 0;
this.preprocessHashEnabled = false;
this.preprocessHashChecked = true;
this.preprocessHashTarget = 'https://httpbin.org';
this.preprocessHashMethod = 'GET';
this.preprocessHashParameterName = 'hash';
this.preprocessHashFileNameParameterName = 'filename';
this.preprocessHashFunctionName = 'sha1';
this.preprocessHashEncodingName = 'hex';
this.preprocessHashInputEncodingName = 'latin1';
this.preprocessHashTooltipContent = 'The preprocess option checks if the file is already on the system before uploading.';
this.parseMessageCallback = (/**
* @param {?} message
* @return {?}
*/
function (message) {
return message;
});
this.getTarget = (/**
* @param {?} request
* @param {?} params
* @return {?}
*/
function (request, params) {
/** @type {?} */
let target;
if (request === 'preprocessHash' && this.preprocessHashChecked) {
target = this.preprocessHashTarget;
}
if (typeof target === 'function') {
return target(params);
}
if (target) {
/** @type {?} */
const separator = target.indexOf('?') < 0 ? '?' : '&';
/** @type {?} */
const joinedParams = params.join('&');
return target + separator + joinedParams;
}
else {
return;
}
});
}
}
if (false) {
/** @type {?} */
CoreAppConfig.prototype.showUploadDropzone;
/** @type {?} */
CoreAppConfig.prototype.uploadBrowseElementId;
/** @type {?} */
CoreAppConfig.prototype.uploadDropElementId;
/** @type {?} */
CoreAppConfig.prototype.paginationRppOptions;
/** @type {?} */
CoreAppConfig.prototype.simultaneousDownloads;
/** @type {?} */
CoreAppConfig.prototype.downloadMethod;
/** @type {?} */
CoreAppConfig.prototype.downloadHeaders;
/** @type {?} */
CoreAppConfig.prototype.downloadWithCredentials;
/** @type {?} */
CoreAppConfig.prototype.downloadXhrTimeout;
/** @type {?} */
CoreAppConfig.prototype.preprocessHashEnabled;
/** @type {?} */
CoreAppConfig.prototype.preprocessHashChecked;
/** @type {?} */
CoreAppConfig.prototype.preprocessHashTarget;
/** @type {?} */
CoreAppConfig.prototype.preprocessHashMethod;
/** @type {?} */
CoreAppConfig.prototype.preprocessHashParameterName;
/** @type {?} */
CoreAppConfig.prototype.preprocessHashFileNameParameterName;
/** @type {?} */
CoreAppConfig.prototype.preprocessHashFunctionName;
/** @type {?} */
CoreAppConfig.prototype.preprocessHashEncodingName;
/** @type {?} */
CoreAppConfig.prototype.preprocessHashInputEncodingName;
/** @type {?} */
CoreAppConfig.prototype.preprocessHashTooltipContent;
/** @type {?} */
CoreAppConfig.prototype.parseMessageCallback;
/** @type {?} */
CoreAppConfig.prototype.getTarget;
}
export class ResumableJsAppConfig {
constructor() {
this.chunkSize = 1 * 1024 * 1024;
this.forceChunkSize = false;
this.simultaneousUploads = 3;
this.fileParameterName = 'file';
this.chunkNumberParameterName = 'resumableChunkNumber';
this.chunkSizeParameterName = 'resumableChunkSize';
this.currentChunkSizeParameterName = 'resumableCurrentChunkSize';
this.totalSizeParameterName = 'resumableTotalSize';
this.typeParameterName = 'resumableType';
this.identifierParameterName = 'resumableIdentifier';
this.fileNameParameterName = 'resumableFilename';
this.relativePathParameterName = 'resumableRelativePath';
this.totalChunksParameterName = 'resumableTotalChunks';
this.throttleProgressCallbacks = 0.5;
this.query = {};
this.headers = {};
this.preprocess = null;
this.preprocessFile = null;
this.method = 'multipart';
this.uploadMethod = 'POST';
this.testMethod = 'GET';
this.target = 'https://httpbin.org';
this.testTarget = null;
this.parameterNamespace = '';
this.testChunks = true;
this.generateUniqueIdentifier = null;
this.getTarget = null;
this.maxChunkRetries = 100;
this.chunkRetryInterval = undefined;
this.permanentErrors = [400, 404, 405, 415, 501];
this.maxFiles = undefined;
this.withCredentials = false;
this.xhrTimeout = 0;
this.clearInput = true;
this.chunkFormat = 'blob';
this.minFileSize = 1;
this.maxFileSize = undefined;
this.fileType = [];
this.maxFilesErrorCallback = (/**
* @param {?} files
* @param {?} errorCount
* @return {?}
*/
function (files, errorCount) {
alert('Please upload no more than ' + this.maxFiles + ' file' + (this.maxFiles === 1 ? '' : 's') + ' at a time.');
});
this.minFileSizeErrorCallback = (/**
* @param {?} file
* @param {?} errorCount
* @return {?}
*/
function (file, errorCount) {
alert(file.fileName || file.name + ' is too small; please upload files larger than ' + this.minFileSize + '.');
});
this.maxFileSizeErrorCallback = (/**
* @param {?} file
* @param {?} errorCount
* @return {?}
*/
function (file, errorCount) {
alert(file.fileName || file.name + ' is too large; please upload files less than ' + this.maxFileSize + '.');
});
this.fileTypeErrorCallback = (/**
* @param {?} file
* @param {?} errorCount
* @return {?}
*/
function (file, errorCount) {
alert(file.fileName || file.name + ' has type not allowed; please upload files of type ' + this.fileType + '.');
});
}
}
if (false) {
/** @type {?} */
ResumableJsAppConfig.prototype.chunkSize;
/** @type {?} */
ResumableJsAppConfig.prototype.forceChunkSize;
/** @type {?} */
ResumableJsAppConfig.prototype.simultaneousUploads;
/** @type {?} */
ResumableJsAppConfig.prototype.fileParameterName;
/** @type {?} */
ResumableJsAppConfig.prototype.chunkNumberParameterName;
/** @type {?} */
ResumableJsAppConfig.prototype.chunkSizeParameterName;
/** @type {?} */
ResumableJsAppConfig.prototype.currentChunkSizeParameterName;
/** @type {?} */
ResumableJsAppConfig.prototype.totalSizeParameterName;
/** @type {?} */
ResumableJsAppConfig.prototype.typeParameterName;
/** @type {?} */
ResumableJsAppConfig.prototype.identifierParameterName;
/** @type {?} */
ResumableJsAppConfig.prototype.fileNameParameterName;
/** @type {?} */
ResumableJsAppConfig.prototype.relativePathParameterName;
/** @type {?} */
ResumableJsAppConfig.prototype.totalChunksParameterName;
/** @type {?} */
ResumableJsAppConfig.prototype.throttleProgressCallbacks;
/** @type {?} */
ResumableJsAppConfig.prototype.query;
/** @type {?} */
ResumableJsAppConfig.prototype.headers;
/** @type {?} */
ResumableJsAppConfig.prototype.preprocess;
/** @type {?} */
ResumableJsAppConfig.prototype.preprocessFile;
/** @type {?} */
ResumableJsAppConfig.prototype.method;
/** @type {?} */
ResumableJsAppConfig.prototype.uploadMethod;
/** @type {?} */
ResumableJsAppConfig.prototype.testMethod;
/** @type {?} */
ResumableJsAppConfig.prototype.prioritizeFirstAndLastChunk;
/** @type {?} */
ResumableJsAppConfig.prototype.target;
/** @type {?} */
ResumableJsAppConfig.prototype.testTarget;
/** @type {?} */
ResumableJsAppConfig.prototype.parameterNamespace;
/** @type {?} */
ResumableJsAppConfig.prototype.testChunks;
/** @type {?} */
ResumableJsAppConfig.prototype.generateUniqueIdentifier;
/** @type {?} */
ResumableJsAppConfig.prototype.getTarget;
/** @type {?} */
ResumableJsAppConfig.prototype.maxChunkRetries;
/** @type {?} */
ResumableJsAppConfig.prototype.chunkRetryInterval;
/** @type {?} */
ResumableJsAppConfig.prototype.permanentErrors;
/** @type {?} */
ResumableJsAppConfig.prototype.maxFiles;
/** @type {?} */
ResumableJsAppConfig.prototype.withCredentials;
/** @type {?} */
ResumableJsAppConfig.prototype.xhrTimeout;
/** @type {?} */
ResumableJsAppConfig.prototype.clearInput;
/** @type {?} */
ResumableJsAppConfig.prototype.chunkFormat;
/** @type {?} */
ResumableJsAppConfig.prototype.minFileSize;
/** @type {?} */
ResumableJsAppConfig.prototype.maxFileSize;
/** @type {?} */
ResumableJsAppConfig.prototype.fileType;
/** @type {?} */
ResumableJsAppConfig.prototype.maxFilesErrorCallback;
/** @type {?} */
ResumableJsAppConfig.prototype.minFileSizeErrorCallback;
/** @type {?} */
ResumableJsAppConfig.prototype.maxFileSizeErrorCallback;
/** @type {?} */
ResumableJsAppConfig.prototype.fileTypeErrorCallback;
}
/**
* @record
*/
export function IAppConfig() { }
if (false) {
/** @type {?} */
IAppConfig.prototype.production;
/** @type {?} */
IAppConfig.prototype.core;
/** @type {?} */
IAppConfig.prototype.resumablejs;
}
export class AppConfig {
constructor() {
this.production = true;
this.core = new CoreAppConfig();
this.resumablejs = new ResumableJsAppConfig();
}
}
if (false) {
/** @type {?} */
AppConfig.prototype.production;
/** @type {?} */
AppConfig.prototype.core;
/** @type {?} */
AppConfig.prototype.resumablejs;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWNvbmZpZy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItbWF0ZXJpYWwtZGF0YXRyYW5zZmVyLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9tb2RlbHMvYXBwLWNvbmZpZy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE1BQU0sT0FBTyxhQUFhO0lBQTFCO1FBQ0ksdUJBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQzFCLDBCQUFxQixHQUFHLFNBQVMsQ0FBQztRQUNsQyx3QkFBbUIsR0FBRyxTQUFTLENBQUM7UUFDaEMseUJBQW9CLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLDBCQUFxQixHQUFHLENBQUMsQ0FBQztRQUMxQixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixvQkFBZSxHQUFRLEVBQUUsQ0FBQztRQUMxQiw0QkFBdUIsR0FBRyxLQUFLLENBQUM7UUFDaEMsdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUM5QiwwQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDN0IseUJBQW9CLEdBQUcscUJBQXFCLENBQUM7UUFDN0MseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQzdCLGdDQUEyQixHQUFHLE1BQU0sQ0FBQztRQUNyQyx3Q0FBbUMsR0FBRyxVQUFVLENBQUM7UUFDakQsK0JBQTBCLEdBQUcsTUFBTSxDQUFDO1FBQ3BDLCtCQUEwQixHQUFHLEtBQUssQ0FBQztRQUNuQyxvQ0FBK0IsR0FBRyxRQUFRLENBQUM7UUFDM0MsaUNBQTRCLEdBQUcscUZBQXFGLENBQUM7UUFDckgseUJBQW9COzs7O1FBQUcsVUFBUyxPQUFPO1lBQ25DLE9BQU8sT0FBTyxDQUFDO1FBQ25CLENBQUMsRUFBQztRQUNGLGNBQVM7Ozs7O1FBQUcsVUFBUyxPQUFPLEVBQUUsTUFBTTs7Z0JBQzVCLE1BQU07WUFFVixJQUFJLE9BQU8sS0FBSyxn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O0lBQ2hELHFEQUE0Qzs7SUFDNUMseURBQW9EOztJQUNwRCx3REFBa0Q7O0lBQ2xELHlEQUFnQzs7SUFDaEMscUNBQVc7O0lBQ1gsdUNBQWE7O0lBQ2IsMENBQWtCOztJQUNsQiw4Q0FBc0I7O0lBQ3RCLHNDQUFxQjs7SUFDckIsNENBQXNCOztJQUN0QiwwQ0FBbUI7O0lBQ25CLDJEQUFtQzs7SUFDbkMsc0NBQStCOztJQUMvQiwwQ0FBa0I7O0lBQ2xCLGtEQUF3Qjs7SUFDeEIsMENBQWtCOztJQUNsQix3REFBZ0M7O0lBQ2hDLHlDQUFpQjs7SUFDakIsK0NBQXNCOztJQUN0QixrREFBK0I7O0lBQy9CLCtDQUE0Qzs7SUFDNUMsd0NBQXFCOztJQUNyQiwrQ0FBd0I7O0lBQ3hCLDBDQUFlOztJQUNmLDBDQUFrQjs7SUFDbEIsMkNBQXFCOztJQUNyQiwyQ0FBZ0I7O0lBQ2hCLDJDQUF3Qjs7SUFDeEIsd0NBQWM7O0lBQ2QscURBRUU7O0lBQ0Ysd0RBRUU7O0lBQ0Ysd0RBRUU7O0lBQ0YscURBRUU7Ozs7O0FBR04sZ0NBSUM7OztJQUhHLGdDQUFvQjs7SUFDcEIsMEJBQW9COztJQUNwQixpQ0FBa0M7O0FBR3RDLE1BQU0sT0FBTyxTQUFTO0lBQXRCO1FBQ0ksZUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixTQUFJLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUMzQixnQkFBVyxHQUFHLElBQUksb0JBQW9CLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0NBQUE7OztJQUhHLCtCQUFrQjs7SUFDbEIseUJBQTJCOztJQUMzQixnQ0FBeUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgQ29yZUFwcENvbmZpZyB7XHJcbiAgICBzaG93VXBsb2FkRHJvcHpvbmUgPSB0cnVlO1xyXG4gICAgdXBsb2FkQnJvd3NlRWxlbWVudElkID0gdW5kZWZpbmVkO1xyXG4gICAgdXBsb2FkRHJvcEVsZW1lbnRJZCA9IHVuZGVmaW5lZDtcclxuICAgIHBhZ2luYXRpb25ScHBPcHRpb25zID0gWzUsIDEwLCAyNV07XHJcbiAgICBzaW11bHRhbmVvdXNEb3dubG9hZHMgPSAyO1xyXG4gICAgZG93bmxvYWRNZXRob2QgPSAnR0VUJztcclxuICAgIGRvd25sb2FkSGVhZGVyczogYW55ID0ge307XHJcbiAgICBkb3dubG9hZFdpdGhDcmVkZW50aWFscyA9IGZhbHNlO1xyXG4gICAgZG93bmxvYWRYaHJUaW1lb3V0ID0gMDtcclxuICAgIHByZXByb2Nlc3NIYXNoRW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgcHJlcHJvY2Vzc0hhc2hDaGVja2VkID0gdHJ1ZTtcclxuICAgIHByZXByb2Nlc3NIYXNoVGFyZ2V0ID0gJ2h0dHBzOi8vaHR0cGJpbi5vcmcnO1xyXG4gICAgcHJlcHJvY2Vzc0hhc2hNZXRob2QgPSAnR0VUJztcclxuICAgIHByZXByb2Nlc3NIYXNoUGFyYW1ldGVyTmFtZSA9ICdoYXNoJztcclxuICAgIHByZXByb2Nlc3NIYXNoRmlsZU5hbWVQYXJhbWV0ZXJOYW1lID0gJ2ZpbGVuYW1lJztcclxuICAgIHByZXByb2Nlc3NIYXNoRnVuY3Rpb25OYW1lID0gJ3NoYTEnO1xyXG4gICAgcHJlcHJvY2Vzc0hhc2hFbmNvZGluZ05hbWUgPSAnaGV4JztcclxuICAgIHByZXByb2Nlc3NIYXNoSW5wdXRFbmNvZGluZ05hbWUgPSAnbGF0aW4xJztcclxuICAgIHByZXByb2Nlc3NIYXNoVG9vbHRpcENvbnRlbnQgPSAnVGhlIHByZXByb2Nlc3Mgb3B0aW9uIGNoZWNrcyBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IG9uIHRoZSBzeXN0ZW0gYmVmb3JlIHVwbG9hZGluZy4nO1xyXG4gICAgcGFyc2VNZXNzYWdlQ2FsbGJhY2sgPSBmdW5jdGlvbihtZXNzYWdlKSB7XHJcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XHJcbiAgICB9O1xyXG4gICAgZ2V0VGFyZ2V0ID0gZnVuY3Rpb24ocmVxdWVzdCwgcGFyYW1zKSB7XHJcbiAgICAgICAgbGV0IHRhcmdldDtcclxuXHJcbiAgICAgICAgaWYgKHJlcXVlc3QgPT09ICdwcmVwcm9jZXNzSGFzaCcgJiYgdGhpcy5wcmVwcm9jZXNzSGFzaENoZWNrZWQpIHtcclxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5wcmVwcm9jZXNzSGFzaFRhcmdldDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQocGFyYW1zKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0YXJnZXQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VwYXJhdG9yID0gdGFyZ2V0LmluZGV4T2YoJz8nKSA8IDAgPyAnPycgOiAnJic7XHJcbiAgICAgICAgICAgIGNvbnN0IGpvaW5lZFBhcmFtcyA9IHBhcmFtcy5qb2luKCcmJyk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0ICsgc2VwYXJhdG9yICsgam9pbmVkUGFyYW1zO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmVzdW1hYmxlSnNBcHBDb25maWcge1xyXG4gICAgY2h1bmtTaXplID0gMSAqIDEwMjQgKiAxMDI0O1xyXG4gICAgZm9yY2VDaHVua1NpemUgPSBmYWxzZTtcclxuICAgIHNpbXVsdGFuZW91c1VwbG9hZHMgPSAzO1xyXG4gICAgZmlsZVBhcmFtZXRlck5hbWUgPSAnZmlsZSc7XHJcbiAgICBjaHVua051bWJlclBhcmFtZXRlck5hbWUgPSAncmVzdW1hYmxlQ2h1bmtOdW1iZXInO1xyXG4gICAgY2h1bmtTaXplUGFyYW1ldGVyTmFtZSA9ICdyZXN1bWFibGVDaHVua1NpemUnO1xyXG4gICAgY3VycmVudENodW5rU2l6ZVBhcmFtZXRlck5hbWUgPSAncmVzdW1hYmxlQ3VycmVudENodW5rU2l6ZSc7XHJcbiAgICB0b3RhbFNpemVQYXJhbWV0ZXJOYW1lID0gJ3Jlc3VtYWJsZVRvdGFsU2l6ZSc7XHJcbiAgICB0eXBlUGFyYW1ldGVyTmFtZSA9ICdyZXN1bWFibGVUeXBlJztcclxuICAgIGlkZW50aWZpZXJQYXJhbWV0ZXJOYW1lID0gJ3Jlc3VtYWJsZUlkZW50aWZpZXInO1xyXG4gICAgZmlsZU5hbWVQYXJhbWV0ZXJOYW1lID0gJ3Jlc3VtYWJsZUZpbGVuYW1lJztcclxuICAgIHJlbGF0aXZlUGF0aFBhcmFtZXRlck5hbWUgPSAncmVzdW1hYmxlUmVsYXRpdmVQYXRoJztcclxuICAgIHRvdGFsQ2h1bmtzUGFyYW1ldGVyTmFtZSA9ICdyZXN1bWFibGVUb3RhbENodW5rcyc7XHJcbiAgICB0aHJvdHRsZVByb2dyZXNzQ2FsbGJhY2tzID0gMC41O1xyXG4gICAgcXVlcnkgPSB7fTtcclxuICAgIGhlYWRlcnMgPSB7fTtcclxuICAgIHByZXByb2Nlc3MgPSBudWxsO1xyXG4gICAgcHJlcHJvY2Vzc0ZpbGUgPSBudWxsO1xyXG4gICAgbWV0aG9kID0gJ211bHRpcGFydCc7XHJcbiAgICB1cGxvYWRNZXRob2QgPSAnUE9TVCc7XHJcbiAgICB0ZXN0TWV0aG9kID0gJ0dFVCc7XHJcbiAgICBwcmlvcml0aXplRmlyc3RBbmRMYXN0Q2h1bms6IGZhbHNlO1xyXG4gICAgdGFyZ2V0ID0gJ2h0dHBzOi8vaHR0cGJpbi5vcmcnO1xyXG4gICAgdGVzdFRhcmdldCA9IG51bGw7XHJcbiAgICBwYXJhbWV0ZXJOYW1lc3BhY2UgPSAnJztcclxuICAgIHRlc3RDaHVua3MgPSB0cnVlO1xyXG4gICAgZ2VuZXJhdGVVbmlxdWVJZGVudGlmaWVyID0gbnVsbDtcclxuICAgIGdldFRhcmdldCA9IG51bGw7XHJcbiAgICBtYXhDaHVua1JldHJpZXMgPSAxMDA7XHJcbiAgICBjaHVua1JldHJ5SW50ZXJ2YWwgPSB1bmRlZmluZWQ7XHJcbiAgICBwZXJtYW5lbnRFcnJvcnMgPSBbNDAwLCA0MDQsIDQwNSwgNDE1LCA1MDFdO1xyXG4gICAgbWF4RmlsZXMgPSB1bmRlZmluZWQ7XHJcbiAgICB3aXRoQ3JlZGVudGlhbHMgPSBmYWxzZTtcclxuICAgIHhoclRpbWVvdXQgPSAwO1xyXG4gICAgY2xlYXJJbnB1dCA9IHRydWU7XHJcbiAgICBjaHVua0Zvcm1hdCA9ICdibG9iJztcclxuICAgIG1pbkZpbGVTaXplID0gMTtcclxuICAgIG1heEZpbGVTaXplID0gdW5kZWZpbmVkO1xyXG4gICAgZmlsZVR5cGUgPSBbXTtcclxuICAgIG1heEZpbGVzRXJyb3JDYWxsYmFjayA9IGZ1bmN0aW9uKGZpbGVzLCBlcnJvckNvdW50KSB7XHJcbiAgICAgICAgYWxlcnQoJ1BsZWFzZSB1cGxvYWQgbm8gbW9yZSB0aGFuICcgKyB0aGlzLm1heEZpbGVzICsgJyBmaWxlJyArICh0aGlzLm1heEZpbGVzID09PSAxID8gJycgOiAncycpICsgJyBhdCBhIHRpbWUuJyk7XHJcbiAgICB9O1xyXG4gICAgbWluRmlsZVNpemVFcnJvckNhbGxiYWNrID0gZnVuY3Rpb24oZmlsZSwgZXJyb3JDb3VudCkge1xyXG4gICAgICAgIGFsZXJ0KGZpbGUuZmlsZU5hbWUgfHwgZmlsZS5uYW1lICsgJyBpcyB0b28gc21hbGw7IHBsZWFzZSB1cGxvYWQgZmlsZXMgbGFyZ2VyIHRoYW4gJyArIHRoaXMubWluRmlsZVNpemUgKyAnLicpO1xyXG4gICAgfTtcclxuICAgIG1heEZpbGVTaXplRXJyb3JDYWxsYmFjayA9IGZ1bmN0aW9uKGZpbGUsIGVycm9yQ291bnQpIHtcclxuICAgICAgICBhbGVydChmaWxlLmZpbGVOYW1lIHx8IGZpbGUubmFtZSArICcgaXMgdG9vIGxhcmdlOyBwbGVhc2UgdXBsb2FkIGZpbGVzIGxlc3MgdGhhbiAnICsgdGhpcy5tYXhGaWxlU2l6ZSArICcuJyk7XHJcbiAgICB9O1xyXG4gICAgZmlsZVR5cGVFcnJvckNhbGxiYWNrID0gZnVuY3Rpb24oZmlsZSwgZXJyb3JDb3VudCkge1xyXG4gICAgICAgIGFsZXJ0KGZpbGUuZmlsZU5hbWUgfHwgZmlsZS5uYW1lICsgJyBoYXMgdHlwZSBub3QgYWxsb3dlZDsgcGxlYXNlIHVwbG9hZCBmaWxlcyBvZiB0eXBlICcgKyB0aGlzLmZpbGVUeXBlICsgJy4nKTtcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUFwcENvbmZpZyB7XHJcbiAgICBwcm9kdWN0aW9uOiBib29sZWFuO1xyXG4gICAgY29yZTogQ29yZUFwcENvbmZpZztcclxuICAgIHJlc3VtYWJsZWpzOiBSZXN1bWFibGVKc0FwcENvbmZpZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEFwcENvbmZpZyBpbXBsZW1lbnRzIElBcHBDb25maWcge1xyXG4gICAgcHJvZHVjdGlvbiA9IHRydWU7XHJcbiAgICBjb3JlID0gbmV3IENvcmVBcHBDb25maWcoKTtcclxuICAgIHJlc3VtYWJsZWpzID0gbmV3IFJlc3VtYWJsZUpzQXBwQ29uZmlnKCk7XHJcbn1cclxuIl19